diff --git a/docs-rs/trait-tags.html b/docs-rs/trait-tags.html
index bdd7ba1fb2338..da2203ad33733 100644
--- a/docs-rs/trait-tags.html
+++ b/docs-rs/trait-tags.html
@@ -39,13 +39,13 @@
const isImmutable = [...associatedTypeHeader].some(el => el.innerText.includes('type Mutability = Immutable'));
// Create a tag for each implemented trait.
- for (let [tagName, href] of implementedBevyTraits) {
+ for (let [tagName, [href, requiredComponents]] of implementedBevyTraits) {
if (tagName == 'Component' & isImmutable) {
tagName = 'Immutable Component';
}
// Create the tag and append it to the container.
- tagContainer.appendChild(createBevyTag(tagName, href));
+ tagContainer.appendChild(createBevyTag(tagName, href, requiredComponents));
}
}
@@ -64,12 +64,29 @@
// This results in ['impl', 'TraitName', 'for', 'TypeName'].
const traitName = removeGenerics(header.innerText).split(' ')[1].trim();
+ let requiredComponents = [];
+ if (traitName === 'Component') {
+ const docblock = Array.from(header.parentNode.children)
+ .find(child => child.classList.contains('docblock'));
+ if (docblock) {
+ for (const el of docblock.children[0].children) {
+ let code;
+ if (el.nodeName === 'A') {
+ code = el.children[0];
+ requiredComponents.push([code.innerText, el.getAttribute('href')]);
+ } else if (el.nodeName === 'CODE') {
+ requiredComponents.push([el.innerText]);
+ }
+ }
+ }
+ }
+
// Find the link to the trait if the anchor element exists.
// Otherwise, the trait is just in plain text.
const traitLinkEl = [...header.children].find(el => el.getAttribute('href')?.includes(`trait.${traitName}.html`));
const href = traitLinkEl?.getAttribute('href');
- implementedTraits.set(traitName, href);
+ implementedTraits.set(traitName, [href, requiredComponents]);
}
const implementedBevyTraits = new Map(
@@ -96,7 +113,7 @@
// Helper function to create a tag element with the given name and href,
// if available.
- function createBevyTag(tagName, href) {
+ function createBevyTag(tagName, href, requiredComponents) {
const el = document.createElement('a');
const kebabCaseName = tagName.toLowerCase().replace(' ', '-');
@@ -106,6 +123,28 @@
el.innerText = tagName;
el.className = `bevy-tag ${kebabCaseName}-tag`;
+
+ if (requiredComponents.length > 0) {
+ const tooltip = document.createElement('span');
+ tooltip.innerText = 'Required Components:';
+ tooltip.className = 'bevy-tooltip';
+
+ const ul = document.createElement('ul');
+ for (const [component, componentHref] of requiredComponents) {
+ const li = document.createElement('li');
+ const a = document.createElement('a');
+ if (componentHref) {
+ a.setAttribute('href', componentHref);
+ }
+ a.innerText = component;
+ li.appendChild(a);
+ ul.appendChild(li);
+ }
+
+ tooltip.appendChild(ul);
+ el.appendChild(tooltip);
+ }
+
return el;
}
@@ -130,6 +169,20 @@
color: white;
}
+ .bevy-tooltip {
+ visibility: hidden;
+ position: absolute;
+ top: 5.5rem;
+ background-color: BLACK;
+ border-radius: 10px;
+ padding: 0 0.5rem;
+ z-index: 1;
+ }
+
+ .bevy-tag:hover .bevy-tooltip {
+ visibility: visible;
+ }
+
.bevy-tag {
background-color: var(--tag-color);
}
@@ -169,4 +222,4 @@
.relationshiptarget-tag {
--tag-color: oklch(50% 27% 150);
}
-
\ No newline at end of file
+