/*! Fiesta 1.1.0 | MPL-2.0 | https://fiesta.rastrillo.org */ (function () { "use strict"; if (window.fiestaCopy) return; window.fiestaCopy = true; if (typeof navigator.clipboard?.writeText !== "function") return; var BOX = "[rst-snippet],.rst-snippet"; var BUTTON = "[rst-snippet-copy],.rst-snippet__copy"; var STATUS = "[rst-snippet-status],.rst-snippet__status"; var SHOWN_MS = 2000; var SPEAK_MS = 100; function fiestaPickLang(tag, registry) { var want = String(tag || "").toLowerCase(); if (!want) return null; var keys = Object.keys(registry || {}), i; for (i = 0; i < keys.length; i++) { if (keys[i].toLowerCase() === want) return keys[i]; } var primary = want.split("-")[0]; for (i = 0; i < keys.length; i++) { if (keys[i].toLowerCase().split("-")[0] === primary) return keys[i]; } return null; } function fiestaWord(el, key, fallback) { var v = el.getAttribute("data-rst-" + key); if (v !== null && v !== "") return v; var registry = (typeof self !== "undefined" && self.fiestaStrings) || {}; var lang = fiestaPickLang(document.documentElement.lang, registry); var table = lang ? registry[lang] : null; return table && table[key] !== undefined && table[key] !== "" ? table[key] : fallback; } var buttons = new WeakMap(); function state(button) { var s = buttons.get(button); if (!s) { s = { label: button.textContent, latest: 0, reset: 0, speak: 0 }; buttons.set(button, s); } return s; } function select(code) { var range = document.createRange(), selection = window.getSelection(); range.selectNodeContents(code); selection.removeAllRanges(); selection.addRange(range); } function say(s, n, status, text) { if (!status) return; s.speak = setTimeout(function () { if (n === s.latest) status.textContent = text; }, SPEAK_MS); } function copy(button, box, code) { var s = state(button), n = ++s.latest, status = box.querySelector(STATUS), write; clearTimeout(s.reset); clearTimeout(s.speak); button.textContent = s.label; if (status) status.textContent = ""; try { write = Promise.resolve(navigator.clipboard.writeText(code.textContent)); } catch (err) { write = Promise.reject(err); } write.then(function () { if (n !== s.latest) return; var done = fiestaWord(button, "copy-done", "Copied"); button.textContent = done; s.reset = setTimeout(function () { if (n === s.latest) button.textContent = s.label; }, SHOWN_MS); say(s, n, status, done); }, function () { if (n !== s.latest) return; select(code); say(s, n, status, fiestaWord(button, "copy-failed", "Copy failed. Select the code and copy it yourself.")); }); } function show() { document.querySelectorAll(BUTTON).forEach(function (button) { state(button); button.hidden = false; }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", show); } else { show(); } document.addEventListener("click", function (e) { var button = e.target && e.target.closest ? e.target.closest(BUTTON) : null; var box = button && button.closest(BOX); var code = box && box.querySelector("code"); if (code) copy(button, box, code); }); })();