joelniklaus HF Staff commited on
Commit
e0616ef
·
1 Parent(s): 66772b0

add component for automatic figure number generation in references

Browse files
Files changed (1) hide show
  1. app/src/components/FigRef.astro +40 -0
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>