(function() { var showdownLoaded = false; var firmwareLoaded = false; var queue = []; function runQueue() { if (!showdownLoaded || !firmwareLoaded) return; queue.forEach(function(cb) { cb(); }); queue = []; } window.loadFirmwareScripts = function(callback) { if (typeof callback === "function") queue.push(callback); if (showdownLoaded && firmwareLoaded) { runQueue(); return; } if (!showdownLoaded) { var s = document.createElement("script"); s.src = "https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js"; s.setAttribute("data-no-minify", "1"); s.onload = function() { showdownLoaded = true; loadFirmware(); }; document.head.appendChild(s); } else { loadFirmware(); } }; function loadFirmware() { if (firmwareLoaded) { runQueue(); return; } var s = document.createElement("script"); s.src = "https://cdn.prod.website-files.com/680a6ddb0ecd7b4735da6c64/6941534b06fd73272fd5de2c_d8806876b419cbd168f2c36f90fb1d28_firmware-app-script.txt?nocache=" + Date.now(); s.type = "text/javascript"; s.onload = function() { firmwareLoaded = true; runQueue(); }; document.head.appendChild(s); } })(); document.addEventListener("DOMContentLoaded", function() { // ——— Tabs (delegated) ——— document.addEventListener("click", function(e) { var tab = e.target.closest(".tab"); if (!tab) return; var tabs = document.querySelectorAll(".tab"); tabs.forEach(function(t) { var tabClass = t.dataset.altTab; var dotClass = t.dataset.altDot; if (tabClass) t.classList.remove(tabClass); if (dotClass) { t.querySelectorAll(".dot_active").forEach(function(dot) { dot.classList.remove(dotClass); }); } }); var tabClass = tab.dataset.altTab; var dotClass = tab.dataset.altDot; if (tabClass) tab.classList.add(tabClass); if (dotClass) { tab.querySelectorAll(".dot_active").forEach(function(dot) { dot.classList.add(dotClass); }); } }); // ——— Firmware modal (только десктоп) ——— function isMobile() { return window.innerWidth <= 768 || ("ontouchstart" in window); } document.addEventListener("click", function(e) { var button = e.target.closest("[data-firmware]"); if (!button) return; if (isMobile()) return; var name = button.dataset.firmware; var wrapper = document.getElementById(name + "_block"); var iframe = document.getElementById(name + "_iframe"); if (!wrapper || !iframe) return; function openModal() { iframe.style.opacity = "0"; iframe.src = "/updater-" + name + "?nocache=" + Date.now(); wrapper.style.display = "block"; iframe.onload = function() { requestAnimationFrame(function() { setTimeout(function() { iframe.style.opacity = "1"; }, 50); }); }; } if (window.loadFirmwareScripts) { window.loadFirmwareScripts(openModal); } else { openModal(); } }); // ——— Close updater: one message handler ——— window.addEventListener("message", function(event) { var data = event.data; if (!data) return; if (data.closeFirmware) { document.querySelectorAll(".fixed_updater").forEach(function(wrapper) { wrapper.style.display = "none"; var ifr = wrapper.querySelector("iframe"); if (ifr) ifr.src = ""; }); return; } if (data.action === "close-updater" || data.action === "close-updater-2") { var trigger = document.querySelector("[data-close-updater]"); if (trigger) trigger.click(); } }); });