{"version":3,"sources":["jsdelivr-header.js","/gh/keepandroidopen/keepandroidopen.github.io@master/public/banner.js"],"names":[],"mappings":"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","file":"/gh/keepandroidopen/keepandroidopen.github.io@master/public/banner.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/keepandroidopen/keepandroidopen.github.io@master/public/banner.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\n * Keep Android Open – Countdown Banner\n * Licensed under the GNU General Public License v3.0\n * SPDX-License-Identifier: GPL-3.0-only\n *\n * A self-contained, embeddable script that injects a countdown banner into any\n * web page. No external dependencies.\n *\n * Usage:\n *   <script src=\"https://keepandroidopen.org/banner.js\"></script>\n *\n * Query parameters (appended to the script src URL):\n *   lang=fr       Override the browser language (default: auto-detected)\n *   id=myDiv      Insert the banner inside the element with this id\n *                 (default: prepend to <body>)\n *   size=normal   Banner size: \"normal\" (default), \"mini\" or \"minimal\"\n *   link=URL      Make the banner text a link (default: https://keepandroidopen.org)\n *                 Set link=none to disable the link\n *   hidebutton=on Show an X close button (default: on)\n *                 Set hidebutton=off to hide the close button\n *   animation=on  Add animation to border of banner (default: on)\n *                 Set animation=off to disable\n */\n(function () {\n  \"use strict\";\n\n  // ── Localized banner strings ──────────────────────────────────────────\n  var messages = {\n    fa:      \"اندروید، یک سکّوی بسته خواهد شد!\",\n    ar:      \"سيصبح نظام أندرويد منصة مغلقة في\",\n    he:      \"אנדרואיד תהפוך לפלטפורמה נעולה בעוד\",\n    en:      \"Android will become a locked-down platform in\",\n    ca:      \"Android es convertir\\u00E0 en una plataforma tancada\",\n    cs:      \"Android se stane uzamčenou platformou za\",\n    de:      \"Android wird eine geschlossene Plattform werden.\",\n    da:      \"Android vil blive en lukket platform om\",\n    nl:      \"Android zal een gesloten platform worden over\",\n    el:      \"\\u03A4\\u03BF Android \\u03B8\\u03B1 \\u03B3\\u03AF\\u03BD\\u03B5\\u03B9 \\u03BC\\u03AF\\u03B1 \\u03BA\\u03BB\\u03B5\\u03B9\\u03C3\\u03C4\\u03AE \\u03C0\\u03BB\\u03B1\\u03C4\\u03C6\\u03CC\\u03C1\\u03BC\\u03B1\",\n    es:      \"Android se convertir\\u00E1 en una plataforma cerrada en\",\n    fr:      \"Android va devenir une plateforme ferm\\u00E9e dans\",\n    id:      \"Android akan menjadi platform yang terkunci.\",\n    it:      \"Android diventer\\u00E0 una piattaforma bloccata\",\n    ko:      \"Android\\uAC00 \\uD3D0\\uC1C4\\uB41C \\uD50C\\uB7AB\\uD3FC\\uC774 \\uB418\\uAE30\\uAE4C\\uC9C0 \\uB0A8\\uC740 \\uC2DC\\uAC04:\",\n    pl:      \"Android stanie si\\u0119 platform\\u0105 zamkni\\u0119t\\u0105 za\",\n    \"pt-BR\": \"O Android se tornar\\u00E1 uma plataforma fechada em\",\n    ru:      \"Android \\u0441\\u0442\\u0430\\u043D\\u0435\\u0442 \\u0437\\u0430\\u043A\\u0440\\u044B\\u0442\\u043E\\u0439 \\u043F\\u043B\\u0430\\u0442\\u0444\\u043E\\u0440\\u043C\\u043E\\u0439 \\u0447\\u0435\\u0440\\u0435\\u0437\",\n    sk:      \"Android sa stane uzamknutou platformou\",\n    th:      \"Android\\u0E08\\u0E30\\u0E40\\u0E1B\\u0E47\\u0E19\\u0E41\\u0E1E\\u0E25\\u0E15\\u0E1F\\u0E2D\\u0E23\\u0E4C\\u0E21\\u0E17\\u0E35\\u0E48\\u0E16\\u0E39\\u0E01\\u0E25\\u0E47\\u0E2D\\u0E01\",\n    tr:      \"Android k\\u0131s\\u0131tl\\u0131 bir platform haline gelecek.\",\n    uk:      \"Android \\u0441\\u0442\\u0430\\u043D\\u0435 \\u0437\\u0430\\u043A\\u0440\\u0438\\u0442\\u043E\\u044E \\u043F\\u043B\\u0430\\u0442\\u0444\\u043E\\u0440\\u043C\\u043E\\u044E\",\n    \"zh-CN\": \"\\u5B89\\u5353\\u5C06\\u6210\\u4E3A\\u4E00\\u4E2A\\u5C01\\u95ED\\u5E73\\u53F0\",\n    \"zh-TW\": \"Android \\u5C07\\u6210\\u70BA\\u4E00\\u500B\\u5C01\\u9589\\u5E73\\u53F0\",\n    ja:      \"Androidは閉鎖的なプラットフォームになろうとしています\",\n    fi:      \"Androidista tulee suljettu alusta\",\n    hu:      \"Az Android egy lezárt platform lesz\",\n    vi:      \"Android sẽ trở thành một hệ điều hành đóng\",\n    bg:      \"Android ще стане заключена платформа след\",\n    be:      \"Android \\u0441\\u0442\\u0430\\u043d\\u0435 \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u0430\\u0439 \\u043f\\u043b\\u0430\\u0444\\u0442\\u043e\\u0440\\u043c\\u0430\\u0439 \\u0020 \\u0020\",\n  };\n\n  // ── Parse query parameters from the script's own src URL ──────────────\n  function getScriptParams() {\n    var params = {};\n    try {\n      var src = document.currentScript && document.currentScript.src;\n      if (!src) return params;\n      var q = src.indexOf(\"?\");\n      if (q === -1) return params;\n      var pairs = src.substring(q + 1).split(\"&\");\n      for (var i = 0; i < pairs.length; i++) {\n        var kv = pairs[i].split(\"=\");\n        params[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1] || \"\");\n      }\n    } catch (e) {}\n    return params;\n  }\n\n  var params = getScriptParams();\n\n  // ── Determine locale ──────────────────────────────────────────────────\n  function resolveLocale(tag) {\n    if (!tag) return \"en\";\n    // Exact match\n    if (messages[tag]) return tag;\n    // Case-insensitive exact match (e.g. \"pt-br\" → \"pt-BR\")\n    var lower = tag.toLowerCase();\n    for (var key in messages) {\n      if (key.toLowerCase() === lower) return key;\n    }\n    // Fallback to base language (e.g. \"de-CH\" → \"de\", \"zh-Hans\" → \"zh\")\n    var base = lower.split(\"-\")[0];\n    for (var key2 in messages) {\n      if (key2.toLowerCase() === base) return key2;\n    }\n    // Fallback to any regional variant of the base language (e.g. \"pt\" → \"pt-BR\")\n    for (var key3 in messages) {\n      if (key3.toLowerCase().split(\"-\")[0] === base) return key3;\n    }\n    return \"en\";\n  }\n\n  var locale = resolveLocale(\n    params.lang ||\n    document.documentElement.lang ||\n    navigator.language ||\n    navigator.userLanguage\n  );\n\n  // ── Size variant ──────────────────────────────────────────────────────\n  var size = params.size === \"mini\" ? \"mini\"\n      : params.size === \"minimal\"\n        ? \"minimal\"\n        : \"normal\";\n\n  // ── Link ────────────────────────────────────────────────────────────\n  var linkParam = params.link;\n  var defaultLink = \"https://keepandroidopen.org\" + (locale === \"en\" ? \"\" : \"/\" + locale + \"/\");\n  var linkUrl = linkParam === \"none\" ? null : (linkParam || defaultLink);\n\n  // ── Close button ────────────────────────────────────────────────────\n  var showClose = params.hidebutton !== \"off\";\n  var storageKey = \"kao-banner-hidden\";\n  var dismissDays = 30;\n\n  // ── Inject CSS ────────────────────────────────────────────────────────\n  var cssNormal =\n    \".kao-banner{\" +\n      \"position:relative;\" +\n      \"font-variant-numeric:tabular-nums;\" +\n      \"background:linear-gradient(180deg,#d32f2f 0%,#b71c1c 100%);\" +\n      \"border-bottom:4px solid #801313;\" +\n      \"color:#fff;\" +\n      \"font-family:'Arial Black',sans-serif;\" +\n      \"font-weight:900;\" +\n      \"text-transform:uppercase;\" +\n      \"letter-spacing:2px;\" +\n      \"font-size:1.5rem;\" +\n      \"text-align:center;\" +\n      \"text-shadow:\" +\n        \"0px 1px 0px #9e1a1a,\" +\n        \"0px 2px 0px #8a1515,\" +\n        \"0px 3px 0px #751111,\" +\n        \"0px 4px 0px #5e0d0d,\" +\n        \"0px 6px 10px rgba(0,0,0,0.5);\" +\n      \"padding:0.5rem 2.5rem;\" +\n      \"line-height:1.6;\" +\n      \"box-sizing:border-box;\" +\n    \"}\";\n\n  var cssMini =\n    \".kao-banner{\" +\n      \"position:relative;\" +\n      \"font-variant-numeric:tabular-nums;\" +\n      \"background:linear-gradient(180deg,#d32f2f 0%,#b71c1c 100%);\" +\n      \"border-bottom:2px solid #801313;\" +\n      \"color:#fff;\" +\n      \"font-family:'Arial Black',sans-serif;\" +\n      \"font-weight:900;\" +\n      \"text-transform:uppercase;\" +\n      \"letter-spacing:1px;\" +\n      \"font-size:0.75rem;\" +\n      \"text-align:center;\" +\n      \"text-shadow:\" +\n        \"0px 1px 0px #9e1a1a,\" +\n        \"0px 2px 0px #8a1515,\" +\n        \"0px 3px 5px rgba(0,0,0,0.4);\" +\n      \"padding:0.25rem 1.5rem;\" +\n      \"line-height:1.4;\" +\n      \"box-sizing:border-box;\" +\n    \"}\";\n\n  var cssMinimal =\n    \".kao-banner{\" +\n    \"position:relative;\" +\n    \"font-variant-numeric:tabular-nums;\" +\n    \"background:linear-gradient(180deg,#d32f2f 0%,#b71c1c 100%);\" +\n    \"border-bottom:2px solid #801313;\" +\n    \"color:#fff;\" +\n    \"font-family:'Arial Black',sans-serif;\" +\n    \"font-weight:900;\" +\n    \"text-transform:uppercase;\" +\n    \"letter-spacing:1px;\" +\n    \"font-size:0.75rem;\" +\n    \"text-align:center;\" +\n    \"text-shadow:\" +\n    \"0px 1px 0px #9e1a1a,\" +\n    \"0px 2px 0px #8a1515,\" +\n    \"0px 3px 5px rgba(0,0,0,0.4);\" +\n    \"padding:0.25rem 1.5rem;\" +\n    \"line-height:1.4;\" +\n    \"box-sizing:border-box;\" +\n    \"}\";\n\n  var cssCommon =\n    \".kao-banner a{color:#fff;text-decoration:none;}\" +\n    \".kao-banner a:hover{text-decoration:underline;}\" +\n    \".kao-banner-close{\" +\n      \"position:absolute;\" +\n      \"right:0.5rem;\" +\n      \"top:50%;\" +\n      \"transform:translateY(-50%);\" +\n      \"background:none;\" +\n      \"border:none;\" +\n      \"color:#fff;\" +\n      \"font-size:0.8em;\" +\n      \"cursor:pointer;\" +\n      \"opacity:0.7;\" +\n      \"padding:0.25rem 0.5rem;\" +\n      \"line-height:1;\" +\n      \"text-shadow:none;\" +\n    \"}\" +\n    \".kao-banner-close:hover{opacity:1;}\";\n\n  var cssKaoPulse =\n    \".kao-banner:not(.no-animation) { animation:kao-pulse 2s infinite; }\" +\n    \"@keyframes kao-pulse{\" +\n      \"0%{box-shadow:0 0 0 0 rgba(211,47,47,0.7)}\" +\n      \"70%{box-shadow:0 0 0 15px rgba(211,47,47,0)}\" +\n      \"100%{box-shadow:0 0 0 0 rgba(211,47,47,0)}\" +\n    \"}\";\n\n  var style = document.createElement(\"style\");\n  style.textContent = (size === \"mini\" ? cssMini : size === \"minimal\" ? cssMinimal : cssNormal)\n    + (params.animation === \"off\" ? \"\" : cssKaoPulse)\n    + cssCommon;\n  document.head.appendChild(style);\n\n  // ── Check if previously dismissed (reappears after dismissDays) ─────\n  if (showClose) {\n    try {\n      var dismissed = localStorage.getItem(storageKey);\n      if (dismissed) {\n        var elapsed = Date.now() - Number(dismissed);\n        if (elapsed < dismissDays * 24 * 60 * 60 * 1000) return;\n        localStorage.removeItem(storageKey);\n      }\n    } catch (e) {}\n  }\n\n  // ── Create banner DOM ─────────────────────────────────────────────────\n  var banner = document.createElement(\"div\");\n  banner.className = params.animation === \"off\" ? \"kao-banner no-animation\" : \"kao-banner\";\n\n  var messageText = messages[locale] || messages.en;\n\n  if (linkUrl) {\n    var link = document.createElement(\"a\");\n    link.href = linkUrl;\n    link.target = \"_blank\";\n    link.rel = \"noopener\";\n    link.textContent = messageText;\n    banner.appendChild(link);\n  } else {\n    banner.appendChild(document.createTextNode(messageText));\n  }\n\n  if (params.size === \"minimal\") {\n    banner.appendChild(document.createTextNode(\"\\u00A0\"));\n  } else {\n    banner.appendChild(document.createElement(\"br\"));\n  }\n\n  var countdownSpan = document.createElement(\"span\");\n  countdownSpan.textContent = \"\\u00A0\";\n  banner.appendChild(countdownSpan);\n\n  // Close button\n  if (showClose) {\n    var closeBtn = document.createElement(\"button\");\n    closeBtn.className = \"kao-banner-close\";\n    closeBtn.setAttribute(\"aria-label\", \"Close\");\n    closeBtn.textContent = \"\\u2715\";\n    closeBtn.addEventListener(\"click\", function () {\n      banner.style.display = \"none\";\n      try { localStorage.setItem(storageKey, String(Date.now())); } catch (e) {}\n    });\n    banner.appendChild(closeBtn);\n  }\n\n  // Insert into target element (by id) or prepend to <body>\n  var targetId = params.id;\n  if (targetId) {\n    var target = document.getElementById(targetId);\n    if (target) {\n      target.appendChild(banner);\n    } else {\n      document.body.insertBefore(banner, document.body.firstChild);\n    }\n  } else {\n    document.body.insertBefore(banner, document.body.firstChild);\n  }\n\n  // ── Countdown logic ───────────────────────────────────────────────────\n  var countDownDate = new Date(\"Sep 1, 2026 00:00:00\").getTime();\n\n  var unitFormatters = {\n    day: new Intl.NumberFormat(locale, { style: \"unit\", unit: \"day\", unitDisplay: \"narrow\" }),\n    hour: new Intl.NumberFormat(locale, { style: \"unit\", unit: \"hour\", unitDisplay: \"narrow\" }),\n    minute: new Intl.NumberFormat(locale, { style: \"unit\", unit: \"minute\", unitDisplay: \"narrow\" }),\n    second: new Intl.NumberFormat(locale, { style: \"unit\", unit: \"second\", unitDisplay: \"narrow\" })\n  };\n\n  function formatUnit(value, unit) {\n    return unitFormatters[unit].format(value);\n  }\n\n  var remaining = new Array(7);\n  var separator = \" \";\n  var timer = null;\n\n  function updateBanner() {\n    var now = new Date().getTime();\n    var distance = countDownDate - now;\n\n    var days = Math.floor(distance / (1000 * 60 * 60 * 24));\n    var hours = Math.floor(\n      (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)\n    );\n    var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n    var seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n    var parts = 0;\n    remaining[0] = days > 0 ? formatUnit(days, \"day\") : null;\n    if (remaining[0]) parts++;\n    remaining[1] = parts ? separator : null;\n    remaining[2] =\n      parts || hours > 0\n        ? formatUnit(hours, \"hour\")\n        : null;\n    if (remaining[2]) parts++;\n    remaining[3] = parts ? separator : null;\n    remaining[4] =\n      parts || minutes > 0\n        ? formatUnit(minutes, \"minute\")\n        : null;\n    if (remaining[4]) parts++;\n    remaining[5] = parts ? separator : null;\n    remaining[6] = formatUnit(seconds, \"second\");\n\n    countdownSpan.textContent = remaining.join(\"\");\n\n    if (distance < 0) {\n      clearInterval(timer);\n    }\n  }\n\n  timer = setInterval(updateBanner, 1000);\n  updateBanner();\n})();\n"]}