Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Commit ·
e0616ef
1
Parent(s): 66772b0
add component for automatic figure number generation in references
Browse files
app/src/components/FigRef.astro
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
interface Props {
|
| 3 |
+
target: string;
|
| 4 |
+
}
|
| 5 |
+
const { target } = Astro.props;
|
| 6 |
+
const href = `#${target}`;
|
| 7 |
+
---
|
| 8 |
+
|
| 9 |
+
<a href={href} class="fig-ref" data-fig-target={target}>Figure ?</a>
|
| 10 |
+
|
| 11 |
+
<script>
|
| 12 |
+
const resolveRefs = () => {
|
| 13 |
+
// Build a map of figure id -> figure number by walking the DOM in order
|
| 14 |
+
const figures = document.querySelectorAll(
|
| 15 |
+
".content-grid main figure:not(.table-figure)"
|
| 16 |
+
);
|
| 17 |
+
const idToNum = new Map<string, number>();
|
| 18 |
+
figures.forEach((fig, i) => {
|
| 19 |
+
if (fig.id) idToNum.set(fig.id, i + 1);
|
| 20 |
+
});
|
| 21 |
+
|
| 22 |
+
// Resolve all <a class="fig-ref"> elements
|
| 23 |
+
document.querySelectorAll("a.fig-ref[data-fig-target]").forEach((ref) => {
|
| 24 |
+
const target = (ref as HTMLElement).dataset.figTarget;
|
| 25 |
+
if (target && idToNum.has(target)) {
|
| 26 |
+
ref.textContent = `Figure ${idToNum.get(target)}`;
|
| 27 |
+
}
|
| 28 |
+
});
|
| 29 |
+
};
|
| 30 |
+
|
| 31 |
+
if (document.readyState === "loading") {
|
| 32 |
+
document.addEventListener("DOMContentLoaded", resolveRefs, { once: true });
|
| 33 |
+
} else {
|
| 34 |
+
// DOM already loaded, but figures may not be fully rendered yet
|
| 35 |
+
requestAnimationFrame(resolveRefs);
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
// Also resolve after full load in case of late-rendering content
|
| 39 |
+
window.addEventListener("load", resolveRefs, { once: true });
|
| 40 |
+
</script>
|