PageSourceSearch

https://fast-agent.ai/javascripts/asciinema-demos.js

js fast-agent.ai collected 2026-10-04 00:19:07 UTC 3,970 bytes, 119 lines download raw bytes

1(function () {
2  var players = new WeakMap();
3
4  function colorScheme() {
5    return (
6      document.body.getAttribute("data-md-color-scheme") ||
7      document.documentElement.getAttribute("data-md-color-scheme") ||
8      ""
9    );
10  }
11
12  function siteTheme() {
13    var scheme = colorScheme();
14    if (scheme === "slate") return "dark";
15    if (scheme === "default") return "light";
16    return window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches
17      ? "dark"
18      : "light";
19  }
20
21  function selectedMode(container) {
22    var override = container.dataset.faTerminalThemeOverride || "auto";
23    return override === "auto" ? siteTheme() : override;
24  }
25
26  function currentTheme(container) {
27    return selectedMode(container) === "dark" ? "fast-agent-dark" : "fast-agent-light";
28  }
29
30  function updateButtons(container) {
31    var override = container.dataset.faTerminalThemeOverride || "auto";
32    container.querySelectorAll("[data-fa-terminal-theme]").forEach(function (button) {
33      var active = button.getAttribute("data-fa-terminal-theme") === override;
34      button.toggleAttribute("aria-pressed", active);
35    });
36  }
37
38  function bindButtons(container) {
39    container.querySelectorAll("[data-fa-terminal-theme]").forEach(function (button) {
40      if (button.dataset.faTerminalThemeBound === "true") return;
41      button.dataset.faTerminalThemeBound = "true";
42      button.addEventListener("click", function () {
43        container.dataset.faTerminalThemeOverride =
44          button.getAttribute("data-fa-terminal-theme") || "auto";
45        updateButtons(container);
46        renderDemo(container, true);
47      });
48    });
49  }
50
51  function renderDemo(container, force) {
52    var target = container.querySelector("[data-fa-asciinema-target]");
53    var cast = container.getAttribute("data-fa-asciinema-cast");
54    if (!target || !cast || !window.AsciinemaPlayer) return;
55
56    bindButtons(container);
57    updateButtons(container);
58
59    var theme = currentTheme(container);
60    if (!force && target.dataset.faAsciinemaLoaded === "true" && target.dataset.faAsciinemaTheme === theme) {
61      return;
62    }
63
64    var previous = players.get(target);
65    if (previous && typeof previous.dispose === "function") {
66      previous.dispose();
67    }
68
69    target.dataset.faAsciinemaLoaded = "true";
70    target.dataset.faAsciinemaTheme = theme;
71    target.textContent = "";
72
73    players.set(
74      target,
75      window.AsciinemaPlayer.create(cast, target, {
76        cols: Number(container.getAttribute("data-fa-asciinema-cols") || 96),
77        rows: Number(container.getAttribute("data-fa-asciinema-rows") || 22),
78        preload: true,
79        autoPlay: container.getAttribute("data-fa-asciinema-autoplay") === "true",
80        poster: container.getAttribute("data-fa-asciinema-poster") || "npt:0:03",
81        speed: Number(container.getAttribute("data-fa-asciinema-speed") || 1),
82        idleTimeLimit: Number(container.getAttribute("data-fa-asciinema-idle-time-limit") || 1.3),
83        fit: container.getAttribute("data-fa-asciinema-fit") || "width",
84        theme: theme
85      })
86    );
87  }
88
89  function renderAll(force) {
90    document.querySelectorAll("[data-fa-asciinema-cast]").forEach(function (container) {
91      renderDemo(container, force);
92    });
93  }
94
95  function observeTheme(target) {
96    if (!target || target.dataset.faAsciinemaThemeObserver === "true") return;
97    target.dataset.faAsciinemaThemeObserver = "true";
98    new MutationObserver(function () { renderAll(false); }).observe(target, {
99      attributes: true,
100      attributeFilter: ["data-md-color-scheme"]
101    });
102  }
103
104  function start() {
105    observeTheme(document.documentElement);
106    observeTheme(document.body);
107    renderAll(false);
108  }
109
110  if (document.readyState === "loading") {
111    document.addEventListener("DOMContentLoaded", start);
112  } else {
113    start();
114  }
115
116  if (window.document$ && window.document$.subscribe) {
117    window.document$.subscribe(start);
118  }
119})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.