File size: 1,237 Bytes
e0616ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
---
interface Props {
  target: string;
}
const { target } = Astro.props;
const href = `#${target}`;
---

<a href={href} class="fig-ref" data-fig-target={target}>Figure ?</a>

<script>
  const resolveRefs = () => {
    // Build a map of figure id -> figure number by walking the DOM in order
    const figures = document.querySelectorAll(
      ".content-grid main figure:not(.table-figure)"
    );
    const idToNum = new Map<string, number>();
    figures.forEach((fig, i) => {
      if (fig.id) idToNum.set(fig.id, i + 1);
    });

    // Resolve all <a class="fig-ref"> elements
    document.querySelectorAll("a.fig-ref[data-fig-target]").forEach((ref) => {
      const target = (ref as HTMLElement).dataset.figTarget;
      if (target && idToNum.has(target)) {
        ref.textContent = `Figure ${idToNum.get(target)}`;
      }
    });
  };

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", resolveRefs, { once: true });
  } else {
    // DOM already loaded, but figures may not be fully rendered yet
    requestAnimationFrame(resolveRefs);
  }

  // Also resolve after full load in case of late-rendering content
  window.addEventListener("load", resolveRefs, { once: true });
</script>