{"version":3,"file":"app.js","mappings":"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","sources":["webpack://sakurairo-scripts/webpack/runtime/chunk loaded","webpack://sakurairo-scripts/webpack/runtime/create fake namespace object","webpack://sakurairo-scripts/webpack/runtime/load script","webpack://sakurairo-scripts/./node_modules/.pnpm/activate-power-mode@git+ssh+++git@github.com+Fuukei+activate-power-mode.git\u0000#af3f686f10267f8ec_xa76km7eox4vi7payqxroumraa/node_modules/activate-power-mode/dist/activate-power-mode.js","webpack://sakurairo-scripts/./src/common/cookie.ts","webpack://sakurairo-scripts/./src/app/compatibility.ts","webpack://sakurairo-scripts/./src/app/copyright.ts","webpack://sakurairo-scripts/./node_modules/.pnpm/idb-keyval@6.2.1/node_modules/idb-keyval/dist/index.js","webpack://sakurairo-scripts/./src/app/cache.ts","webpack://sakurairo-scripts/./src/app/coverBackground.ts","webpack://sakurairo-scripts/./src/app/darkmode.ts","webpack://sakurairo-scripts/./src/app/font_control.ts","webpack://sakurairo-scripts/./src/app/hitokoto.ts","webpack://sakurairo-scripts/./src/app/mobile.ts","webpack://sakurairo-scripts/./src/app/post_list.ts","webpack://sakurairo-scripts/./src/app/animations/show_up.ts","webpack://sakurairo-scripts/./src/app/showcard.ts","webpack://sakurairo-scripts/./node_modules/.pnpm/@kotorik+promise-worker@0.1.0/node_modules/@kotorik/promise-worker/dist/index.mjs","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.3.1/node_modules/color-space/hsl.js","webpack://sakurairo-scripts/./src/app/theme-color/index.ts","webpack://sakurairo-scripts/./src/app/typed.ts","webpack://sakurairo-scripts/./src/app/video.ts","webpack://sakurairo-scripts/./src/common/butterbar.ts","webpack://sakurairo-scripts/./node_modules/.pnpm/lazyload@https+++codeload.github.com+KotoriK+lazyload+tar.gz+82d55720d3076d66f0efa3ee44505a00_zlmltryyoiytzoax633icq5k7m/node_modules/lazyload/src/lazyload.ts","webpack://sakurairo-scripts/./src/common/lazyload.ts","webpack://sakurairo-scripts/./src/common/npmLib.ts","webpack://sakurairo-scripts/./src/common/sakurairo_global.ts","webpack://sakurairo-scripts/./src/common/util.ts","webpack://sakurairo-scripts/./src/app/search.ts","webpack://sakurairo-scripts/./src/app/func.js","webpack://sakurairo-scripts/./src/app/global-func.js","webpack://sakurairo-scripts/./src/app/effect.js","webpack://sakurairo-scripts/./src/app/index.js","webpack://sakurairo-scripts/./src/app/scroll_handler.ts","webpack://sakurairo-scripts/./src/app/preload_screen.ts","webpack://sakurairo-scripts/./src/app/about_us.ts","webpack://sakurairo-scripts/./src/app/footer.js","webpack://sakurairo-scripts/./src/common/code-highlight.js","webpack://sakurairo-scripts/./node_modules/.pnpm/fg-loadcss@3.1.0/node_modules/fg-loadcss/src/loadCSS.js","webpack://sakurairo-scripts/./node_modules/.pnpm/@kotorik+palette@3.0.4/node_modules/@kotorik/palette/dist/index.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.3.1/node_modules/color-space/lab.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.3.1/node_modules/color-space/rgb.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.3.1/node_modules/color-space/xyz.js","webpack://sakurairo-scripts/webpack/bootstrap","webpack://sakurairo-scripts/webpack/runtime/compat get default export","webpack://sakurairo-scripts/webpack/runtime/define property getters","webpack://sakurairo-scripts/webpack/runtime/ensure chunk","webpack://sakurairo-scripts/webpack/runtime/get javascript chunk filename","webpack://sakurairo-scripts/webpack/runtime/get mini-css chunk filename","webpack://sakurairo-scripts/webpack/runtime/global","webpack://sakurairo-scripts/webpack/runtime/hasOwnProperty shorthand","webpack://sakurairo-scripts/webpack/runtime/make namespace object","webpack://sakurairo-scripts/webpack/runtime/publicPath","webpack://sakurairo-scripts/webpack/runtime/css loading","webpack://sakurairo-scripts/webpack/runtime/jsonp chunk loading","webpack://sakurairo-scripts/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"sakurairo-scripts:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine([], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"POWERMODE\"] = factory();\r\n\telse\r\n\t\troot[\"POWERMODE\"] = factory();\r\n})(this, function() {\r\nreturn /******/ (function(modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(installedModules[moduleId])\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\texports: {},\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false\r\n/******/ \t\t};\r\n\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n\r\n\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = \"\";\r\n\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(0);\r\n/******/ })\r\n/************************************************************************/\r\n/******/ ([\r\n/* 0 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar canvas = document.createElement('canvas');\r\n\tcanvas.width = window.innerWidth;\r\n\tcanvas.height = window.innerHeight;\r\n\tcanvas.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:999999';\r\n\twindow.addEventListener('resize', function () {\r\n\t canvas.width = window.innerWidth;\r\n\t canvas.height = window.innerHeight;\r\n\t});\r\n\tdocument.body.appendChild(canvas);\r\n\tvar context = canvas.getContext('2d');\r\n\tvar particles = [];\r\n\tvar particlePointer = 0;\r\n\tvar rendering = false;\r\n\r\n\tPOWERMODE.shake = true;\r\n\r\n\tfunction getRandom(min, max) {\r\n\t return Math.random() * (max - min) + min;\r\n\t}\r\n\r\n\tfunction getColor(el) {\r\n\t if (POWERMODE.colorful) {\r\n\t var u = getRandom(0, 360);\r\n\t return 'hsla(' + getRandom(u - 10, u + 10) + ', 100%, ' + getRandom(50, 80) + '%, ' + 1 + ')';\r\n\t } else {\r\n\t return window.getComputedStyle(el).color;\r\n\t }\r\n\t}\r\n\r\n\tfunction getCaret() {\r\n\t var el = document.activeElement;\r\n\t var bcr;\r\n\t if (el.tagName === 'TEXTAREA' ||\r\n\t (el.tagName === 'INPUT' && el.getAttribute('type') === 'text')) {\r\n\t var offset = __webpack_require__(1)(el, el.selectionEnd);\r\n\t bcr = el.getBoundingClientRect();\r\n\t return {\r\n\t x: offset.left + bcr.left,\r\n\t y: offset.top + bcr.top,\r\n\t color: getColor(el)\r\n\t };\r\n\t }\r\n\t var selection = window.getSelection();\r\n\t if (selection.rangeCount) {\r\n\t var range = selection.getRangeAt(0);\r\n\t var startNode = range.startContainer;\r\n\t if (startNode.nodeType === document.TEXT_NODE) {\r\n\t startNode = startNode.parentNode;\r\n\t }\r\n\t bcr = range.getBoundingClientRect();\r\n\t return {\r\n\t x: bcr.left,\r\n\t y: bcr.top,\r\n\t color: getColor(startNode)\r\n\t };\r\n\t }\r\n\t return { x: 0, y: 0, color: 'transparent' };\r\n\t}\r\n\r\n\tfunction createParticle(x, y, color) {\r\n\t return {\r\n\t x: x,\r\n\t y: y,\r\n\t alpha: 1,\r\n\t color: color,\r\n\t velocity: {\r\n\t x: -1 + Math.random() * 2,\r\n\t y: -3.5 + Math.random() * 2\r\n\t }\r\n\t };\r\n\t}\r\n\r\n\tfunction POWERMODE() {\r\n\t { // spawn particles\r\n\t var caret = getCaret();\r\n\t var numParticles = 5 + Math.round(Math.random() * 10);\r\n\t while (numParticles--) {\r\n\t particles[particlePointer] = createParticle(caret.x, caret.y, caret.color);\r\n\t particlePointer = (particlePointer + 1) % 500;\r\n\t }\r\n\t }\r\n\t { // shake screen\r\n\t if (POWERMODE.shake) {\r\n\t var intensity = 1 + 2 * Math.random();\r\n\t var x = intensity * (Math.random() > 0.5 ? -1 : 1);\r\n\t var y = intensity * (Math.random() > 0.5 ? -1 : 1);\r\n\t document.body.style.marginLeft = x + 'px';\r\n\t document.body.style.marginTop = y + 'px';\r\n\t setTimeout(function() {\r\n\t document.body.style.marginLeft = '';\r\n\t document.body.style.marginTop = '';\r\n\t }, 75);\r\n\t }\r\n\t }\r\n\t if(!rendering){\r\n\t requestAnimationFrame(loop);\r\n\t }\r\n\t};\r\n\tPOWERMODE.colorful = false;\r\n\r\n\tfunction loop() {\r\n\t rendering = true;\r\n\t context.clearRect(0, 0, canvas.width, canvas.height);\r\n\t var rendered = false;\r\n\t var rect = canvas.getBoundingClientRect();\r\n\t for (var i = 0; i < particles.length; ++i) {\r\n\t var particle = particles[i];\r\n\t if (particle.alpha <= 0.1) continue;\r\n\t particle.velocity.y += 0.075;\r\n\t particle.x += particle.velocity.x;\r\n\t particle.y += particle.velocity.y;\r\n\t particle.alpha *= 0.96;\r\n\t context.globalAlpha = particle.alpha;\r\n\t context.fillStyle = particle.color;\r\n\t context.fillRect(\r\n\t Math.round(particle.x - 1.5) - rect.left,\r\n\t Math.round(particle.y - 1.5) - rect.top,\r\n\t 3, 3\r\n\t );\r\n\t rendered = true;\r\n\t }\r\n\t if(rendered){\r\n\t requestAnimationFrame(loop);\r\n\t }else{\r\n\t rendering = false;\r\n\t }\r\n\t}\r\n\r\n\tmodule.exports = POWERMODE;\r\n\r\n\r\n/***/ }),\r\n/* 1 */\r\n/***/ (function(module, exports) {\r\n\r\n\t/* jshint browser: true */\r\n\r\n\t(function () {\r\n\r\n\t// The properties that we copy into a mirrored div.\r\n\t// Note that some browsers, such as Firefox,\r\n\t// do not concatenate properties, i.e. padding-top, bottom etc. -> padding,\r\n\t// so we have to do every single property specifically.\r\n\tvar properties = [\r\n\t 'direction', // RTL support\r\n\t 'boxSizing',\r\n\t 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\r\n\t 'height',\r\n\t 'overflowX',\r\n\t 'overflowY', // copy the scrollbar for IE\r\n\r\n\t 'borderTopWidth',\r\n\t 'borderRightWidth',\r\n\t 'borderBottomWidth',\r\n\t 'borderLeftWidth',\r\n\t 'borderStyle',\r\n\r\n\t 'paddingTop',\r\n\t 'paddingRight',\r\n\t 'paddingBottom',\r\n\t 'paddingLeft',\r\n\r\n\t // https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n\t 'fontStyle',\r\n\t 'fontVariant',\r\n\t 'fontWeight',\r\n\t 'fontStretch',\r\n\t 'fontSize',\r\n\t 'fontSizeAdjust',\r\n\t 'lineHeight',\r\n\t 'fontFamily',\r\n\r\n\t 'textAlign',\r\n\t 'textTransform',\r\n\t 'textIndent',\r\n\t 'textDecoration', // might not make a difference, but better be safe\r\n\r\n\t 'letterSpacing',\r\n\t 'wordSpacing',\r\n\r\n\t 'tabSize',\r\n\t 'MozTabSize'\r\n\r\n\t];\r\n\r\n\tvar isFirefox = window.mozInnerScreenX != null;\r\n\r\n\tfunction getCaretCoordinates(element, position, options) {\r\n\r\n\t var debug = options && options.debug || false;\r\n\t if (debug) {\r\n\t var el = document.querySelector('#input-textarea-caret-position-mirror-div');\r\n\t if ( el ) { el.parentNode.removeChild(el); }\r\n\t }\r\n\r\n\t // mirrored div\r\n\t var div = document.createElement('div');\r\n\t div.id = 'input-textarea-caret-position-mirror-div';\r\n\t document.body.appendChild(div);\r\n\r\n\t var style = div.style;\r\n\t var computed = window.getComputedStyle? getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9\r\n\r\n\t // default textarea styles\r\n\t style.whiteSpace = 'pre-wrap';\r\n\t if (element.nodeName !== 'INPUT')\r\n\t style.wordWrap = 'break-word'; // only for textarea-s\r\n\r\n\t // position off-screen\r\n\t style.position = 'absolute'; // required to return coordinates properly\r\n\t if (!debug)\r\n\t style.visibility = 'hidden'; // not 'display: none' because we want rendering\r\n\r\n\t // transfer the element's properties to the div\r\n\t properties.forEach(function (prop) {\r\n\t style[prop] = computed[prop];\r\n\t });\r\n\r\n\t if (isFirefox) {\r\n\t // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\r\n\t if (element.scrollHeight > parseInt(computed.height))\r\n\t style.overflowY = 'scroll';\r\n\t } else {\r\n\t style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\r\n\t }\r\n\r\n\t div.textContent = element.value.substring(0, position);\r\n\t // the second special handling for input type=\"text\" vs textarea: spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\r\n\t if (element.nodeName === 'INPUT')\r\n\t div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\r\n\r\n\t var span = document.createElement('span');\r\n\t // Wrapping must be replicated *exactly*, including when a long word gets\r\n\t // onto the next line, with whitespace at the end of the line before (#7).\r\n\t // The *only* reliable way to do that is to copy the *entire* rest of the\r\n\t // textarea's content into the created at the caret position.\r\n\t // for inputs, just '.' would be enough, but why bother?\r\n\t span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\r\n\t div.appendChild(span);\r\n\r\n\t var coordinates = {\r\n\t top: span.offsetTop + parseInt(computed['borderTopWidth']),\r\n\t left: span.offsetLeft + parseInt(computed['borderLeftWidth'])\r\n\t };\r\n\r\n\t if (debug) {\r\n\t span.style.backgroundColor = '#aaa';\r\n\t } else {\r\n\t document.body.removeChild(div);\r\n\t }\r\n\r\n\t return coordinates;\r\n\t}\r\n\r\n\tif (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\r\n\t module.exports = getCaretCoordinates;\r\n\t} else {\r\n\t window.getCaretCoordinates = getCaretCoordinates;\r\n\t}\r\n\r\n\t}());\r\n\r\n/***/ })\r\n/******/ ])\r\n});\r\n;","/**\n * Cookie\n * from github.com/mirai-mamori/Sakurairo ./js/sakura-app.js ,commit 71f5a0c\n * @license GPL-v2\n * @date 2021.03\n */\nconst _version_ctrl = _iro.cookie_version_control || '';\nexport function setCookie(key, value, days) {\n const expires = days ? \"; expires=\" + new Date(Date.now() + (days * 24 * 60 * 60 * 1000)).toUTCString() : \"\";\n document.cookie = key + _version_ctrl + \"=\" + (value || \"\") + expires + \"; path=/\";\n}\nexport function getCookie(key) {\n const nameEQ = key + _version_ctrl + \"=\", ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ')\n c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0)\n return c.substring(nameEQ.length, c.length);\n }\n return null;\n}\nexport function removeCookie(key) {\n document.cookie = key + _version_ctrl + '=; Max-Age=-99999999;';\n}\n","/**\n * 关于AppleWebkit与Safari版本的对应,参考:\n * @seealso https://gist.github.com/jakub-g/48a16195280a7023f570ffa5c8a4eae5\n * @seealso https://en.wikipedia.org/wiki/Safari_version_history\n *\n * Opera浏览器自15以来更换了User Agent\n * OPR/*\n */\nconst uaMatches = Array.from(navigator.userAgent.matchAll(/(Firefox|Chrome|Version|OPR|Edg)\\/(\\d+)/ig));\nimport { setCookie } from '../common/cookie';\nfunction getSupportedImageMimeList() {\n const acceptList = ['image/*,*/*;q=0.8'];\n if (isSupported({ Chrome: 59, OPR: 46, Firefox: 3, Edg: 79, Version: 8 /**Safari 8 */ })) {\n acceptList.push('image/apng');\n if (isSupported({ Chrome: 32, OPR: 19, Firefox: 65, Edg: 18, Version: 14 /**Safari 14 */ })) {\n setCookie('su_webp', '1', 114514);\n acceptList.push('image/webp');\n if (isSupported({ Chrome: 85, OPR: 71, Firefox: 93 })) {\n acceptList.push('image/avif');\n }\n }\n }\n return acceptList.reverse().join(',');\n}\nexport function isSupported(checkList) {\n for (const [_, name, version] of uaMatches) {\n if (parseFloat(version) >= checkList[name]) {\n return true;\n }\n }\n return false;\n}\nexport const Accept_Image = getSupportedImageMimeList();\n","import { createButterbar } from \"../common/butterbar\";\nimport { __ } from \"../common/sakurairo_global\";\nconst txt = [\n `ref(APA): ${_iro.author_name}.${_iro.site_name}.${_iro.site_url}. Retrieved ${new Date().toLocaleDateString()}.`,\n];\nfunction setClipboardText(event, selectionTxt) {\n event.preventDefault();\n const htmlData = selectionTxt.replace(/\\r\\n/g, \"
\") + \"

\" + txt.join('
'), textData = selectionTxt.toString().replace(/\\r\\n/g, \"\\n\") + \"\\n\\n\" + txt.join('\\n');\n if (event.clipboardData) {\n event.clipboardData.setData(\"text/html\", htmlData);\n event.clipboardData.setData(\"text/plain\", textData);\n }\n else if (window.clipboardData) {\n //deprecate?\n return window.clipboardData.setData(\"text\", textData);\n }\n}\nfunction copytext(e) {\n const selection = window.getSelection();\n if (selection) {\n const selectionText = selection.toString();\n if (selectionText.length > 30) {\n setClipboardText(e, selectionText);\n }\n createButterbar(__(\"复制成功!\"), 1000);\n }\n}\n/**\n * 添加复制时的版权提示\n */\nexport default function add_copyright() {\n if (_iro.clipboardRef) {\n document.body.removeEventListener(\"copy\", copytext);\n document.body.addEventListener(\"copy\", copytext);\n }\n}\n","function promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","import { createStore, promisifyRequest } from 'idb-keyval';\nconst store = createStore('sakurairo', 'cache');\nconst get = (key) => store('readonly', (store) => promisifyRequest(store.get(key)));\nconst set = (key, value) => store('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n});\nconst del = (key) => store('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n});\nexport { get, set, del };\n","import { get, set, del } from './cache';\nimport { Accept_Image } from './compatibility';\nimport { __ } from '../common/sakurairo_global';\nimport { isMobile } from './mobile';\nimport { createButterbar } from '../common/butterbar';\nimport { noop } from '../common/util';\nlet bgn = 1;\nlet blob_url = '';\nexport async function nextBG() {\n changeCoverBG(await getCoverPath(true));\n bgn++;\n}\nexport async function preBG() {\n bgn--;\n changeCoverBG(await getCoverPath(true));\n}\nconst centerbg = document.querySelector(\".centerbg\");\n/**\n * 更改封面背景\n */\nexport const changeCoverBG = _iro.site_bg_as_cover ? (url) => {\n document.body.style.backgroundImage = `url(${url})`;\n document.dispatchEvent(new CustomEvent('coverBG_change', { detail: url }));\n} :\n centerbg ? (url) => {\n centerbg.style.backgroundImage = `url(${url})`;\n document.dispatchEvent(new CustomEvent('coverBG_change', { detail: url }));\n } : noop;\nfunction parseCSSUrl(cssText) {\n const result = cssText?.match(/^url\\(\"(.+)\"\\)$/);\n if (result) {\n return result[1];\n }\n}\n/**\n * 返回当前封面背景的URL\n */\nexport const getCurrentBG = _iro.site_bg_as_cover ? () => parseCSSUrl(document.body.style.backgroundImage) :\n (centerbg ? () => parseCSSUrl(centerbg.style.backgroundImage) : noop);\nfunction getAPIPath(useBGN = false) {\n const cover_api_url = new URL(_iro.cover_api);\n if (isMobile() && _iro.random_graphs_mts == true) {\n cover_api_url.searchParams.set('type', 'mobile');\n return cover_api_url.toString() + (useBGN ? \"&\" + bgn : '');\n }\n else {\n return cover_api_url.toString() + (useBGN ? (cover_api_url.search === '' ? \"?\" : '&') + bgn : '');\n }\n}\nexport const getCoverPath = _iro.cache_cover ? (useBGN = false) => get('cover').then(coverBG => {\n if (coverBG && coverBG instanceof ArrayBuffer) {\n cleanBlobUrl();\n blob_url = URL.createObjectURL(new Blob([coverBG]));\n return blob_url;\n }\n else {\n //fallback\n return getAPIPath(useBGN);\n }\n}).finally(() => {\n fetchThenCache(useBGN);\n})\n : getAPIPath;\nasync function fetchThenCache(useBGN = false) {\n try {\n const resp = await fetch(getAPIPath(useBGN), { headers: { Accept: Accept_Image } });\n if (resp.status == 500) {\n const result = await resp.json();\n createButterbar(result.message);\n console.warn(result.message);\n }\n else if (resp.ok) {\n const buf = await resp.arrayBuffer();\n try {\n set('cover', buf);\n /**\n * @problem Safari暂时不支持indexdb存储blob\n * DataCloneError: Failed to store record in an IDBObjectStore: BlobURLs are not yet supported.\n * @seealso https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/indexeddb-best-practices#keeping_your_app_predictable\n */\n }\n catch (e) {\n //catch: FireFox无痕模式下数据库不允许修改\n /**\n * @problem FireFox无痕模式下数据库不允许修改\n * DOMException: A mutation operation was attempted on a database that did not allow mutations\n * Chrome不会报错\n * 像是火狐的设计 https://wiki.mozilla.org/Private_Browsing#Persistent_Storage\n * 变通方法 https://bugzilla.mozilla.org/show_bug.cgi?id=1639542#c9\n */\n console.warn(e);\n }\n }\n }\n catch (e) {\n if (e instanceof TypeError) {\n console.warn(__('你的封面API好像不支持跨域调用,这种情况下缓存是不会生效的哦'));\n del('cover');\n }\n }\n}\nfunction cleanBlobUrl() {\n URL.revokeObjectURL(blob_url);\n blob_url = '';\n}\n/* export function initCoverBG() {\n if (_iro.site_bg_as_cover) {\n if (centerbg) centerbg.style.background = '#0000'\n }\n} */\nlet RecordedBG = '';\nlet lastPostCover = '';\nexport function init_post_cover_as_bg() {\n if (_iro.post_cover_as_bg == false) {\n return;\n }\n else {\n document.addEventListener('pjax:complete', post_cover_as_bg);\n document.addEventListener(\"coverBG_change\", function () {\n post_cover_as_bg();\n });\n }\n}\nfunction post_cover_as_bg() {\n if (_iro.post_feature_img == '') { // 没有封面\n if (document.body.style.getPropertyValue('background-image').trim() == `url(\"${lastPostCover}\")`.trim()) { // 中途没有更换过封面(比如小组件封面)\n document.body.style.backgroundImage = RecordedBG; // 恢复封面\n }\n return;\n }\n else {\n RecordedBG = document.body.style.getPropertyValue('background-image'); // 记录更换前的背景\n lastPostCover = _iro.post_feature_img; // 记录此次更换的背景\n setTimeout(() => {\n document.body.style.backgroundImage = `url(${_iro.post_feature_img})`;\n }, 0); // 设置背景\n }\n}\n","const mediaQuery = window.matchMedia('(prefers-color-scheme:dark)');\nlet inDarkMode = false;\nexport const isInDarkMode = () => inDarkMode;\nfunction informDarkModeChange(nextValue) {\n if (nextValue !== inDarkMode) {\n document.dispatchEvent(new CustomEvent(\"darkmode\", { detail: nextValue }));\n inDarkMode = nextValue;\n }\n}\nfunction mediaQueryCallback() {\n const dark = localStorage.getItem(\"dark\");\n //仅在深色模式不是用户主动设置时触发\n if (!dark) {\n if (mediaQuery.matches && _iro.darkmode) {\n turnOnDarkMode();\n }\n else {\n turnOffDarkMode();\n }\n }\n}\nif (_iro.dm_strategy === 'client') {\n mediaQuery.removeEventListener ? mediaQuery.removeEventListener('change', mediaQueryCallback) : mediaQuery.removeListener(mediaQueryCallback);\n mediaQuery.addEventListener ? mediaQuery.addEventListener('change', mediaQueryCallback) : mediaQuery.addListener(mediaQueryCallback);\n}\nfunction saveUserSetting(value) {\n if (value == ifDarkmodeShouldOn()) {\n //用户设置与自动切换深色模式判断一致时,恢复自动切换\n localStorage.removeItem('dark');\n }\n else {\n if (value == true) {\n localStorage.setItem(\"dark\", \"1\");\n }\n else {\n localStorage.setItem(\"dark\", \"0\");\n }\n }\n //localStorage.setItem(\"bgImgSetting\", \"white-bg\");\n}\nexport function turnOnDarkMode(userTriggered) {\n document.documentElement.style.backgroundColor = \"#333\";\n document.getElementsByClassName(\"site-content\")[0].style.backgroundColor = \"#333\";\n document.body.classList.add(\"dark\");\n if (userTriggered)\n saveUserSetting(true);\n informDarkModeChange(true);\n}\nexport function turnOffDarkMode(userTriggered) {\n document.documentElement.style.backgroundColor = \"\";\n document.getElementsByClassName(\"site-content\")[0].style.backgroundColor = \"rgba(255, 255, 255, .8)\";\n document.body.classList.remove(\"dark\");\n document.body.classList.remove(\"dynamic\");\n informDarkModeChange(false);\n if (userTriggered) {\n saveUserSetting(false);\n }\n}\n/**\n * 检查是否在深色模式时间\n * @returns {boolean}\n */\nfunction checkTime() {\n const today = new Date();\n return (today.getHours() > 21 || today.getHours() < 7);\n}\nexport function ifDarkmodeShouldOn() {\n switch (_iro.dm_strategy) {\n case 'client':\n return mediaQuery.matches;\n case 'eien':\n return true;\n default: /**case time */\n return checkTime();\n }\n}\nexport function checkDarkModeSetting() {\n const dark = localStorage.getItem(\"dark\");\n if (!dark) {\n //无用户设置时,自动切换深色模式\n if (ifDarkmodeShouldOn() && _iro.darkmode) {\n turnOnDarkMode();\n }\n else {\n turnOffDarkMode();\n }\n }\n else {\n if (dark == '1') {\n turnOnDarkMode();\n }\n else {\n turnOffDarkMode();\n }\n }\n}\n/* function mobile_dark_light() {\n if (document.body.classList.contains(\"dark\")) {\n document.documentElement.style.background = \"unset\";\n document.body.classList.remove(\"dark\");\n document.getElementById(\"moblieDarkLight\").innerHTML = '';\n setCookie(\"dark\", \"0\", 0.33);\n } else {\n document.documentElement.style.background = \"#333333\";\n document.getElementById(\"moblieDarkLight\").innerHTML = '';\n document.body.classList.add(\"dark\");\n setCookie(\"dark\", \"1\", 0.33);\n }\n} */ \n","import { createButterbar } from \"../common/butterbar\";\nimport { __ } from \"../common/sakurairo_global\";\nimport { isMobile } from \"./mobile\";\nlet btnSerif, btnSansSerif;\nfunction Serif() {\n if (isMobile()) {\n createButterbar(__(\"将从网络加载字体,流量请注意\"));\n }\n document.body.classList.add(\"serif\");\n localStorage.setItem(\"font_family\", \"serif\");\n setButtonState('serif');\n}\nfunction SansSerif() {\n document.body.classList.remove(\"serif\");\n localStorage.setItem(\"font_family\", \"sans-serif\");\n setButtonState('sans-serif');\n}\nfunction change_font_listener(btn) {\n return () => {\n const { name } = btn.dataset;\n const nowFont = localStorage.getItem(\"font_family\");\n if (name == nowFont) {\n return;\n }\n else {\n (name == 'serif') ? Serif() : SansSerif();\n }\n };\n}\nexport function loadFontSetting() {\n const nowFont = localStorage.getItem(\"font_family\");\n if (!nowFont || nowFont == \"serif\") {\n document.body.classList.add(\"serif\");\n }\n}\nfunction setButtonState(font_name) {\n if (font_name === 'sans-serif' || localStorage.getItem(\"font_family\") == 'sans-serif') {\n btnSerif.classList.remove(\"selected\");\n btnSansSerif.classList.add(\"selected\");\n }\n else {\n btnSansSerif.classList.remove(\"selected\");\n btnSerif.classList.add(\"selected\");\n }\n}\nfunction initDOMCache() {\n btnSerif = document.getElementsByClassName(\"control-btn-serif\")[0];\n btnSansSerif = document.getElementsByClassName(\"control-btn-sans-serif\")[0];\n return btnSansSerif && btnSerif;\n}\nfunction initListener() {\n btnSerif.addEventListener('click', change_font_listener(btnSerif));\n btnSansSerif.addEventListener('click', change_font_listener(btnSansSerif));\n}\nexport function initFontControl() {\n const result = initDOMCache();\n if (!result)\n localStorage.removeItem('font_family'); //样式菜单“简单”时,使用默认字体 “A”\n loadFontSetting();\n if (result) {\n setButtonState();\n initListener();\n }\n}\n","export default async function hitokoto() {\n const yiyan = document.getElementById(\"footer_yiyan\");\n if (yiyan) {\n const api_group = _iro.yiyan_api || [\"https://api.maho.cc/yiyan/\"];\n if (api_group.length == 0) {\n console.warn('一言API: 路径为空');\n }\n for (const api_path of api_group) {\n try {\n const txt = await request(api_path);\n yiyan.innerText = txt;\n break;\n }\n catch (e) {\n console.warn(`一言API: 尝试联系\"${api_path}\"时出错。 `, e);\n continue;\n }\n }\n }\n}\nconst request = async (api) => {\n const res = await fetch(api, { headers: { Accept: \"application/json\" } });\n if (res.ok) {\n const data = await res.json();\n const from_who = (data.from_who == 'null' ? null : data.from_who) || '';\n const from = data.from != data.from_who ? `「${data['from']}」` : '';\n const hitokoto = data.hitokoto;\n return hitokoto + '——' + from_who + from;\n }\n else {\n throw res.status;\n }\n};\n","let cache_is_mobile = false;\nexport function initIsMobileCache() {\n const mediaQuery = window.matchMedia('(max-width:860px)');\n cache_is_mobile = mediaQuery.matches;\n mediaQuery.addEventListener ? mediaQuery.addEventListener('change', refreshIsMobileCache) : mediaQuery.addListener(refreshIsMobileCache);\n}\nfunction refreshIsMobileCache(ev) {\n cache_is_mobile = ev.matches;\n}\n/**\n *\n * @returns 返回document.body.clientWidth <= 860的结果。这个结果是缓存的\n */\nexport const isMobile = () => cache_is_mobile;\n","import { onlyOnceATime } from \"../common/util\";\nimport lazyload from \"../common/lazyload\";\nimport { __ } from '../common/sakurairo_global';\n// @ts-ignore\nimport { code_highlight_style } from '../common/code-highlight';\nimport applyShowUpAnimation from \"./animations/show_up\";\nimport { getHighlight, getThemeColorFromImageElement } from \"./theme-color\";\nconst hslaCSSText = ([h, s, l, a]) => {\n const hsl = `${h}deg,${s}%,${l}%`;\n return a && a !== 1 ? `hsla(${hsl},${a})` : `hsl(${hsl})`;\n};\nlet load_post_timer;\nconst load_post = onlyOnceATime(async function load_post() {\n const now_href = document.location.href;\n const pagination_a = document.querySelector('#pagination a');\n if (pagination_a.classList.contains(\"loading\"))\n return;\n pagination_a.classList.add(\"loading\");\n pagination_a.innerText = \"\";\n // $('#pagination a').addClass(\"loading\").text(\"\");\n const resp = await fetch(pagination_a.getAttribute(\"href\") + \"#main\");\n const text = await resp.text();\n //在进行DOM操作前检查页面是否已经变化,防止错误加载到其他页面上\n if (now_href != document.location.href)\n return; /**如果页面状态发生了变化,那么也应该不用理加载提示符 */\n const parser = new DOMParser(), DOM = parser.parseFromString(text, \"text/html\"), result = DOM.querySelectorAll(\"#main .post, #main .shuoshuo-item\"), paga = DOM.querySelector(\"#pagination a\"), paga_innerText = paga && paga.innerText, nextHref = paga && paga.getAttribute(\"href\"), main = document.getElementById(\"main\");\n for (let i = 0; i < result.length; i++) {\n main.append(result[i]);\n }\n //if (resp.ok) {\n // result = $(data).find(\"#main .post\");\n // nextHref = $(data).find(\"#pagination a\").attr(\"href\");\n // $(\"#main\").append(result.fadeIn(500));\n const dpga = document.querySelector(\"#pagination a\"), addps = document.querySelector(\"#add_post span\");\n if (dpga) {\n dpga.classList.remove(\"loading\");\n dpga.innerText = paga_innerText;\n }\n if (addps) {\n addps.classList.remove(\"loading\");\n addps.innerText = \"\";\n }\n // $(\"#pagination a\").removeClass(\"loading\").text(\"Previous\");\n // $('#add_post span').removeClass(\"loading\").text(\"\");\n lazyload();\n code_highlight_style();\n post_list_show_animation();\n document.dispatchEvent(new CustomEvent('ajax_post_loaded'));\n if (nextHref != undefined) {\n pagination_a.setAttribute(\"href\", nextHref);\n // $(\"#pagination a\").attr(\"href\", nextHref);\n //加载完成上滑\n let tempScrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n // window.scrollTo(tempScrollTop);\n // $(window).scrollTop(tempScrollTop);\n window.scrollTo({\n top: tempScrollTop + 300,\n behavior: 'smooth'\n });\n // $body.animate({\n // scrollTop: tempScrollTop + 300\n //\n // }, 666)\n }\n else {\n document.getElementById(\"pagination\").innerHTML = \"\" + __(\"很高兴你翻到这里,但是真的没有了...\") + \"\";\n // $(\"#pagination\").html(\"很高兴你翻到这里,但是真的没有了...\");\n }\n});\n/**\n * 为文章列表应用主题色和动画效果\n */\nexport function post_list_show_animation() {\n applyShowUpAnimation(document.querySelectorAll('article.post-list-thumb,article.shuoshuo-item'), target => {\n const thumbImage = target.querySelector('.post-thumb img');\n if (thumbImage) {\n if (_iro.extract_article_highlight == false) { //未开启取色\n return;\n }\n if (target.style.getPropertyValue('--article-theme-highlight')) { // 已预定义\n return;\n }\n let finalImageElement = thumbImage;\n if (thumbImage.classList.contains('lazyload')) {\n finalImageElement = document.createElement('img');\n finalImageElement.src = thumbImage.getAttribute('data-src');\n finalImageElement.crossOrigin = \"anonymous\";\n }\n getThemeColorFromImageElement(finalImageElement)\n .then(rgba => {\n if (!rgba)\n return;\n const style = target.style;\n style.setProperty('--article-theme-highlight', hslaCSSText(getHighlight(rgba)));\n });\n }\n });\n}\nfunction XLS_Listener(e) {\n //要求是#pagination只有anchor一个直接子后代\n if (e.target.parentElement.id == 'pagination') {\n e.preventDefault();\n e.stopPropagation();\n clearTimeout(load_post_timer);\n load_post();\n }\n}\nexport function XLS() {\n const intersectionObserver = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio <= 0)\n return;\n // var page_next = $('#pagination a').attr(\"href\");\n const _page_next = document.querySelector('#pagination a');\n if (_page_next) {\n const href_page_next = _page_next.getAttribute(\"href\"), load_key = document.getElementById(\"add_post_time\");\n if (href_page_next != undefined && load_key) {\n const load_time = load_key.title;\n if (load_time != \"233\") {\n console.log(\"%c 自动加载时倒计时 %c\", \"background:#9a9da2; color:#ffffff; border-radius:4px;\", \"\", \"\", load_time);\n load_post_timer = setTimeout(load_post, parseInt(load_time, 10) * 1000);\n }\n }\n }\n });\n intersectionObserver.observe(document.querySelector('.footer-content'));\n document.body.removeEventListener('click', XLS_Listener);\n document.body.addEventListener(\"click\", XLS_Listener);\n}\n","export default function applyShowUpAnimation(elements, callback) {\n if (!elements)\n return;\n const io = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n entry.target.classList.add(\"post-list-show\");\n }\n else {\n continue;\n }\n const target = entry.target;\n io.unobserve(target);\n callback?.(target);\n }\n }, {\n threshold: [0.42]\n });\n for (const article of elements) {\n io.observe(article);\n }\n}\n","export default function showcard() {\n for (const showcard of document.querySelectorAll('.showcard')) {\n const img = showcard.querySelector('.img');\n const button = showcard.querySelector('.showcard-button');\n if (!img || !button) {\n throw new Error('invalid structure for .showcard');\n }\n img.addEventListener('mouseover', function () {\n button.classList.add('hover');\n });\n img.addEventListener('mouseout', function () {\n button.classList.remove('hover');\n });\n }\n}\n","let lastMsgId = 0;\nexport default class PromiseWorker {\n w;\n cb = {};\n [Symbol.dispose];\n constructor(worker) {\n this.w = worker;\n const callback = (e) => {\n const payload = e.data;\n const messageId = payload[0];\n const callback = this.cb[messageId];\n if (!callback)\n return;\n delete this.cb[messageId];\n callback(payload[1], payload[2]);\n };\n worker.addEventListener('message', callback);\n this.postMessage = (message, ...extraArgs) => {\n const messageId = lastMsgId++;\n const messageToSend = [messageId, message];\n return new Promise((resolve, reject) => {\n this.cb[messageId] = (error, result) => {\n if (error) {\n return reject(new Error(error.message));\n }\n resolve(result);\n };\n this.w.postMessage(messageToSend, ...extraArgs);\n });\n };\n this[Symbol.dispose] = () => {\n worker.removeEventListener('message', callback);\n };\n }\n postMessage;\n}\n","/**\n * @module color-space/hsl\n */\nimport rgb from './rgb.js';\n\nvar hsl = {\n\tname: 'hsl',\n\tmin: [0, 0, 0],\n\tmax: [360, 100, 100],\n\tchannel: ['hue', 'saturation', 'lightness'],\n\talias: ['HSL'],\n\n\trgb: function (hsl) {\n\t\tvar h = hsl[0] / 360, s = hsl[1] / 100, l = hsl[2] / 100, t1, t2, t3, rgb, val, i = 0;\n\n\t\tif (s === 0) return val = l * 255, [val, val, val];\n\n\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tt1 = 2 * l - t2;\n\n\t\trgb = [0, 0, 0];\n\t\tfor (; i < 3;) {\n\t\t\tt3 = h + 1 / 3 * - (i - 1);\n\t\t\tt3 < 0 ? t3++ : t3 > 1 && t3--;\n\t\t\tval = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 :\n\t\t\t\t2 * t3 < 1 ? t2 :\n\t\t\t\t\t3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 :\n\t\t\t\t\t\tt1;\n\t\t\trgb[i++] = val * 255;\n\t\t}\n\n\t\treturn rgb;\n\t}\n};\n\nexport default (hsl);\n\n\n//extend rgb\nrgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255,\n\t\tg = rgb[1] / 255,\n\t\tb = rgb[2] / 255,\n\t\tmin = Math.min(r, g, b),\n\t\tmax = Math.max(r, g, b),\n\t\tdelta = max - min,\n\t\th, s, l;\n\n\tif (max === min) {\n\t\th = 0;\n\t}\n\telse if (r === max) {\n\t\th = (g - b) / delta;\n\t}\n\telse if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t}\n\telse if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\t//FIXME h is possibly undefined\n\t//@ts-ignore\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t}\n\telse if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t}\n\telse {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n","import PromiseWorker from '@kotorik/promise-worker';\nimport { isInDarkMode } from '../darkmode';\n//@ts-ignore\nimport 'color-space/hsl';\n//@ts-ignore\nimport rgb from 'color-space/rgb';\nimport { awaitImage, readImageDownsampling } from '@kotorik/palette';\nconst originalThemeSkinMatcing = getComputedStyle(document.documentElement).getPropertyValue('--theme-skin-matching');\nconst proc = (async () => {\n try {\n const worker = new PromiseWorker(\n // Pass options to the Worker constructor to specify robustness level\n new Worker(new URL('./worker.ts', import.meta.url), {\n // This will be used during worker initialization\n name: 'theme-color-worker',\n // 添加 robustness level 参数\n type: 'module',\n // 指定 robustness 级别为 \"enforce\",确保即使跨域也能安全工作\n credentials: 'omit'\n }));\n // Return a modified postMessage function to always include transfer and robustness level\n return (data, options) => {\n // @ts-ignore - Add robustness level to prevent browser warning\n return worker.postMessage(data, {\n transfer: options?.transfer || [],\n // 添加 robustness level 参数\n transferList: options?.transfer || [],\n robustness: \"enforce\", // 指定 robustness 级别\n // Force TypeScript to accept this property by using any type\n });\n };\n }\n catch (error) {\n console.warn('主题色计算已回退到主线程进行,性能可能会有轻微影响');\n const module = import('./calc');\n return async (data, options) => {\n const { default: calc } = await module;\n return calc(data);\n };\n }\n})();\nlet currentColor = [0, 0, 0, 0];\nexport function hslaCSSText([h, s, l, a]) {\n if (a) {\n return \"hsla(\" + h + \"deg,\" + s + \"%,\" + l + \"%,\" + a + \")\";\n }\n else {\n return \"hsl(\" + h + \"deg,\" + s + \"%,\" + l + \"%)\";\n }\n}\nexport async function getThemeColorFromImageElement(imgElement) {\n try {\n await awaitImage(imgElement);\n const imageData = readImageDownsampling(imgElement, 10000);\n // Use the modified postMessage function\n const result = await (await proc)(imageData.data, {\n transfer: [imageData.data.buffer]\n });\n return result;\n }\n catch (e) {\n console.error(e);\n return null;\n }\n}\nfunction _updateThemeColorMeta(color_css) {\n const meta = document.querySelector('meta[name=theme-color]');\n meta && (meta.content = color_css);\n}\nexport async function updateThemeSkin(coverBGUrl) {\n // 如果未启用封面取色功能,直接返回\n if (!_iro.extract_theme_skin)\n return;\n const imgElement = document.createElement('img');\n imgElement.src = coverBGUrl;\n imgElement.crossOrigin = \"anonymous\";\n const rgba = await getThemeColorFromImageElement(imgElement);\n if (rgba) {\n currentColor = rgba;\n _setColor();\n }\n else {\n _updateThemeColorMeta(originalThemeSkinMatcing); //回滚\n }\n}\nfunction _setColor(darkmode) {\n // 如果未启用封面取色功能,直接返回\n if (!_iro.extract_theme_skin)\n return;\n // Convert the RGB color to HSL\n let hsl = rgb.hsl(currentColor);\n // Ensure base color isn't too extreme - more strict bounds\n hsl[1] = Math.min(Math.max(hsl[1], 30), 85); // Keep saturation in reasonable range\n hsl[2] = Math.min(Math.max(hsl[2], 35), 65); // Keep lightness in middle range\n // Create a darker version for theme-skin-matching\n const matchingColor = [...hsl, currentColor[3]];\n // No saturation adjustment, keep original\n matchingColor[1] = hsl[1];\n // Ensure it doesn't go too dark or too light, stricter bounds\n matchingColor[2] = Math.min(Math.max(hsl[2] * 0.85, 30), 55); // Reduced lightness multiplier\n // Create a lighter version for theme-skin-dark (despite the name)\n const lightColor = [...hsl, currentColor[3]];\n // No saturation adjustment, keep original\n lightColor[1] = hsl[1];\n // Controlled lightness adjustment with stricter bounds, reduced multiplier\n lightColor[2] = Math.min(Math.max(hsl[2] * 1.15, 45), 70); // Further reduced multiplier from 1.3 to 1.15\n // Select the appropriate color based on dark mode state\n let hsla = (typeof darkmode == 'undefined' ? isInDarkMode() : darkmode) ? lightColor : matchingColor;\n // Update the theme color meta tag\n _updateThemeColorMeta(hslaCSSText(hsla));\n // 这里不需要再检查 extract_theme_skin,因为函数开头已经检查过了\n document.documentElement.style.setProperty('--theme-skin-matching', hslaCSSText(matchingColor));\n document.documentElement.style.setProperty('--theme-skin-dark', hslaCSSText(lightColor));\n}\nexport function initThemeColor() {\n // 监听封面背景变化事件\n document.addEventListener('coverBG_change', (({ detail: coverBGUrl }) => updateThemeSkin(coverBGUrl)));\n // 监听暗色模式变化事件\n document.addEventListener('darkmode', (({ detail: next }) => _setColor(next)));\n}\n// export function getForeground(rgba: Vector4) {\n// const hsl = rgb.hsl(rgba);\n// // Use a more conservative threshold to determine text color\n// // This helps ensure text remains readable regardless of background\n// return hsl[2] > 60 ? [0, 0, 0, 1] as Vector4 : [0, 0, 100, 1] as Vector4; // Increased threshold for better contrast\n// }\nexport function getHighlight(rgba) {\n const hsl = rgb.hsl(rgba);\n // Create a highlight with more controlled adjustments\n const highlightHsl = [...hsl];\n // First ensure base values are in good ranges - stricter bounds\n highlightHsl[1] = Math.min(Math.max(highlightHsl[1], 30), 85); // Maintain saturation range\n highlightHsl[2] = Math.min(Math.max(highlightHsl[2], 40), 65); // Tighter lightness range, reduced upper bound\n // No saturation adjustments at all\n // No lightness adjustments beyond the bounds check\n return [...highlightHsl, rgba[3]];\n}\n","import { importExternal } from '../common/npmLib';\nlet typedInstance;\nexport function disableTypedJsIfExist() {\n if (typedInstance) {\n typedInstance.destroy();\n typedInstance = null;\n }\n}\nexport default async function initTypedJs() {\n const json = document.getElementById('typed-js-initial');\n if (json) {\n disableTypedJsIfExist(); // Fix mirai-mamori/Sakurairo #810\n try {\n const options = JSON.parse(json.innerHTML);\n const element = document.querySelector('.element');\n element.innerText = '';\n if (_iro.ext_shared_lib) {\n if (!window.Typed)\n await importExternal('dist/typed.umd.js', 'typed.js');\n typedInstance = new window.Typed(element, options);\n }\n else {\n const { default: Typed } = await import('typed.js');\n typedInstance = new Typed(element, options);\n }\n }\n catch (e) {\n console.error(\"请检查typed.js设置\", e);\n }\n }\n}\n","import { getBaseName } from '../common/util';\nimport { __ } from '../common/sakurairo_global';\nimport { importExternal } from '../common/npmLib';\nconst bgvideo = document.getElementById(\"bgvideo\");\nconst videoList = _iro.movies.name?.split(\",\") || []; // 视频列表\nlet unplayedIndex = new Array(videoList.length).fill(0).map((_, index) => index);\nlet aplayersToResume = [];\n//#region 背景视频\nconst _getNextRandomVideo = () => {\n if (unplayedIndex.length == 0) {\n unplayedIndex = new Array(videoList.length).fill(0).map((_, index) => index);\n }\n const nextIndex = Math.floor(Math.random() * unplayedIndex.length);\n return videoList[unplayedIndex.splice(nextIndex, 1)[0]];\n};\nfunction getVideo() {\n const video_stu = document.getElementsByClassName(\"video-stu\")[0];\n const fileName = _getNextRandomVideo(); // 随机抽取视频\n video_stu.innerHTML = __(\"正在载入视频 ...\");\n video_stu.style.bottom = \"0px\";\n //这里不需要检验_iro.movies是不是字符串,因为应该在前边检查\n bgvideo.setAttribute(\"src\", new URL(fileName, _iro.movies.url || location.origin).toString());\n bgvideo.setAttribute(\"video-name\", getBaseName(fileName));\n}\n/**\n * 播放\n */\nfunction splay() {\n const video_btn = document.getElementById(\"video-btn\");\n if (video_btn) {\n video_btn.classList.add(\"video-pause\");\n video_btn.classList.remove(\"video-play\");\n video_btn.style.display = \"\";\n }\n try {\n document.querySelector(\".video-stu\").style.bottom = \"-100px\";\n document.querySelector(\".focusinfo\").style.top = \"-999px\";\n if (_iro.float_player_on) {\n import('./aplayer').then(({ pauseAllPlayer }) => {\n aplayersToResume = pauseAllPlayer();\n bgvideo.play();\n });\n return;\n }\n }\n catch (e) {\n console.warn(e);\n }\n bgvideo.play();\n}\n/**\n * 暂停\n */\nfunction spause() {\n const video_btn = document.getElementById(\"video-btn\");\n if (video_btn) {\n video_btn.classList.add(\"video-play\");\n video_btn.classList.remove(\"video-pause\");\n }\n try {\n document.querySelector(\".focusinfo\").style.top = \"49.3%\";\n }\n catch { }\n bgvideo.pause();\n for (const player of aplayersToResume) {\n player.play();\n }\n}\n/**\n * 自动续播 - 播放\n */\nexport function liveplay() {\n if (bgvideo && bgvideo.oncanplay != undefined && document.querySelector(\".haslive\")) { // 检查视频数据\n if (document.querySelector(\".videolive\")) { // 检查播放状态\n splay();\n }\n }\n}\nexport function livepause() {\n if (bgvideo && bgvideo.oncanplay != undefined && document.querySelector(\".haslive\")) { // 检查视频数据\n spause();\n const video_stu = document.getElementsByClassName(\"video-stu\")[0];\n video_stu.style.bottom = \"0px\";\n video_stu.innerHTML = __(\"已暂停...\");\n }\n}\nexport function coverVideo() {\n const video_btn = document.getElementById(\"video-btn\");\n if (video_btn)\n video_btn.addEventListener(\"click\", function () {\n if (this.classList.contains(\"loadvideo\")) {\n this.classList.add(\"video-pause\");\n this.classList.remove(\"loadvideo\");\n getVideo();\n bgvideo.oncanplay = () => {\n splay();\n document.getElementById(\"video-add\").style.display = \"block\";\n video_btn.classList.add(\"videolive\", \"haslive\"); // MDZZ\n };\n }\n else {\n if (this.classList.contains(\"video-pause\")) {\n spause();\n video_btn.classList.remove(\"videolive\");\n document.getElementsByClassName(\"video-stu\")[0].style.bottom = \"0px\";\n document.getElementsByClassName(\"video-stu\")[0].innerHTML = __(\"已暂停...\");\n }\n else {\n splay();\n video_btn.classList.add(\"videolive\"); // 用于判断切换页面时的状态\n }\n }\n bgvideo.onended = function () {\n bgvideo.setAttribute(\"src\", \"\");\n document.getElementById(\"video-add\").style.display = \"none\";\n document.querySelector(\".focusinfo\").style.top = \"49.3%\";\n if (video_btn) {\n video_btn.classList.add(\"loadvideo\");\n video_btn.classList.remove(\"video-pause\", \"videolive\", \"haslive\");\n if (_iro.movies.loop) {\n video_btn.click();\n }\n }\n };\n });\n const video_add = document.getElementById(\"video-add\");\n if (video_add)\n video_add.addEventListener(\"click\", getVideo);\n}\n//#endregion\nexport async function coverVideoIni() {\n initHLS();\n lazyloadPatch();\n}\nfunction canPlayHandler() {\n this.poster = '';\n}\n/**\n * 用户代理可能会禁止自动播放,此时需要撤掉poster\n */\nasync function lazyloadPatch() {\n document.querySelectorAll('video.lazyload')\n .forEach(video => video.addEventListener('canplay', canPlayHandler));\n}\nasync function initHLS() {\n const videos = document.querySelectorAll('video.hls');\n if (videos.length == 0)\n return;\n //检查浏览器是否原生支持\n if (videos[0].canPlayType('application/vnd.apple.mpegurl')) {\n for (const video of videos) {\n video.src = video.dataset.src || video.src;\n video.autoplay = true;\n }\n }\n else {\n if (!window.Hls) {\n try {\n if (_iro.ext_shared_lib) {\n await importExternal('dist/hls.light.min.js', 'hls.js');\n }\n else {\n //@ts-ignore\n const { default: Hls } = await import('hls.js/dist/hls.light.js');\n window.Hls = Hls;\n }\n }\n catch (reason) {\n console.warn('Hls load failed: ', reason);\n }\n }\n if (!Hls.isSupported())\n console.error('Hls: Media Source Extensions is unsupported.');\n for (const video of videos) {\n const hls = new Hls();\n hls.loadSource(video.dataset.src || video.src);\n hls.attachMedia(video);\n hls.on(Hls.Events.MANIFEST_PARSED, () => {\n video.play();\n });\n }\n }\n}\n","export function clearButterbar() {\n const butterBar = document.getElementsByClassName(\"butterBar\");\n if (butterBar.length > 0) {\n for (let i = 0; i < butterBar.length; i++) {\n butterBar[i].remove();\n }\n }\n}\nexport function createButterbar(message, keep) {\n clearButterbar();\n /* document.body.insertAdjacentHTML('beforeend', '

' + message + '

');\n */\n const div = document.createElement('div');\n const p = document.createElement('p');\n div.classList.add('butterBar', 'butterBar--center');\n p.classList.add('butterBar-message');\n p.innerHTML = message;\n div.appendChild(p);\n document.body.appendChild(div);\n if (keep !== true)\n setTimeout(() => { clearButterbar(); }, typeof keep == 'number' ? keep : 6000);\n return div;\n}\n","/**\n * default option\n */\nconst defaults = {\n src: \"data-src\",\n srcset: \"data-srcset\",\n selector: \".lazyload\",\n root: null,\n rootMargin: \"0px\",\n threshold: 0\n};\n/**\n * @class LazyLoad\n */\nexport default class LazyLoad {\n constructor(elms, options) {\n this.opts = { ...defaults, ...options };\n this.elms = elms || document.querySelectorAll(this.opts.selector);\n this.init();\n }\n elms;\n obs = null;\n opts;\n init() {\n /* Without observers load everything and bail out early. */\n if (!IntersectionObserver) {\n this.load();\n return;\n }\n this.obs = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n this.obs.unobserve(entry.target);\n this.doLoad(entry.target);\n }\n }\n }, {\n root: this.opts.root,\n rootMargin: this.opts.rootMargin,\n threshold: [this.opts.threshold]\n });\n this.elms.forEach((image) => {\n this.obs.observe(image);\n });\n }\n load() {\n if (!this.opts) {\n return;\n }\n this.elms.forEach(this.doLoad);\n }\n doLoad = (element) => {\n const src = element.getAttribute(this.opts.src);\n const srcset = element.getAttribute(this.opts.srcset);\n const tagName = element.tagName.toLowerCase();\n if (src) {\n if (element.src === src || element.style.backgroundImage.includes(src)) {\n return;\n }\n if (tagName === 'video' || tagName === 'img') {\n element.src = src;\n }\n else {\n element.style.backgroundImage = \"url('\" + src + \"')\";\n }\n }\n if (tagName === 'img' && srcset) {\n element.srcset = srcset;\n }\n };\n /**\n * Destroy Lazyload Instance\n * @returns\n */\n destroy() {\n if (!this.opts) {\n return;\n }\n this.obs.disconnect();\n this.opts = null;\n }\n}\nexport const lazyload = (images, options) => new LazyLoad(images, options);\n","import Lazyload from 'lazyload';\nlet instance;\nexport default function lazyload() {\n if (instance) {\n instance.destroy();\n }\n instance = new Lazyload();\n}\n","/**\n * 收集资源的下载情况,自动切换cdn\n * 策略:\n * 1.如果发现大量资源无法下载(cdn down),尝试切换cdn\n * 2.切换cdn时测试对同一个资源访问的表现(未实现)\n * 3.\n * 暂不根据加载速度动态调整cdn\n * TODO: 使用内置依赖的fallback\n */\nconst STORAGE_KEY = 'sakurairo_prefer_cdn';\nconst CDN_LIST = [\n /* [\"https://jscdn.host/release/ucode/\", \"/\", \"/\", \"\"],\n [\"https://cdnjs.cloudflare.com/ajax/libs/\", \"/\", \"/\", \"\"],\n */\n [\"https://cdn.jsdelivr.net/npm/\", \"@\", \"/\", \"\"],\n [\"https://unpkg.com/\", \"@\", \"/\", \"\"],\n //TODO:自定cdn\n];\nfunction getPreferCDNIndex() {\n const config = localStorage.getItem(STORAGE_KEY);\n if (config) {\n const num = parseInt(config);\n if (isNaN(num) || num >= CDN_LIST.length) {\n //回归初始值\n localStorage.removeItem(STORAGE_KEY);\n return 0;\n }\n return num;\n }\n else {\n return 0;\n }\n}\nconst currentCDNIndex = getPreferCDNIndex();\nconst currentCDN = { raw: CDN_LIST[currentCDNIndex] };\n/**\n * 从当前的CDN中获取指定npm包中的指定文件\n * @author KotoriK\n * @param relativePath 文件在npm包中的路径\n * @param packageName npm包名\n * @param version npm包版本,默认从package.json中获取依赖版本(注意package_info.js中有限定哪些包的信息会被带到运行时),若无相关信息则为latest\n * @returns 从当前cdn访问该文件的url\n */\nexport const resolvePath = (relativePath, packageName, version) => String.raw(currentCDN, packageName, version || PKG_INFO[packageName] || 'latest', relativePath);\nexport const importExternal = (path, packageName, version) => {\n const id = `${packageName}${version ? '@' + version : ''}${path}`;\n if (document.getElementById(id)) { // 避免重复加载\n return Promise.resolve();\n }\n const script = document.createElement('script');\n script.id = id;\n script.src = resolvePath(path, packageName, version);\n script.async = true;\n //TODO: 超时处理\n return new Promise((resolve, reject) => {\n script.onload = () => resolve();\n script.onerror = () => {\n script.remove(); // 允许下次尝试\n reject(new Error(packageName + \"加载失败\"));\n };\n document.body.append(script);\n }).finally(() => {\n script.onload = script.onerror = null; //据说ie上会内存泄露\n });\n};\n","/**\n *\n * @param key 这段句子的中文表述(默认语言)\n */\n//@ts-ignore\nexport const __ = (defaultStr) => (window._sakurairoi18n && _sakurairoi18n[defaultStr]) || defaultStr;\n/**\n *\n * 占位符格式 {index} ex.{0}\n * @param defaultStr 这段句子的中文表述(默认语言)\n * @param replacements 句子中占位符的替代元素\n */\nexport const _$ = (defaultStr, ...replacements) => {\n let template = __(defaultStr);\n for (const index in replacements) {\n template = template.replace('{' + index + '}', replacements[index]);\n }\n return template;\n};\nexport const sakurairoGlobal = {\n opt: {},\n /* _sys_call:sys_call\n */\n build: BUILD_INFO\n};\n/**\n * 在sakurairoGlobal注册一个对象\n * @param key\n * @param value\n * @returns\n */\nexport const registerOnGlobal = (key, value) => Object.defineProperty(sakurairoGlobal, key, {\n value: value,\n writable: false,\n enumerable: true,\n});\nif ('_sakurairo' in window) {\n //@ts-ignore\n const _sakurairo = window._sakurairo;\n //@ts-ignore\n if ('opt' in _sakurairo) {\n sakurairoGlobal.opt = _sakurairo.opt;\n }\n}\n//@ts-ignore\nwindow._sakurairo = sakurairoGlobal;\n","let readyFunctionList = [];\n/**\n * 传入的函数同时间只能运行一个\n * @param func 要包装的函数\n * @returns 包装后的函数\n */\nexport const onlyOnceATime = (func) => {\n let isRunning = false;\n return (...args) => {\n if (!isRunning) {\n isRunning = true;\n try {\n const result = func(...args);\n if (result instanceof Promise) {\n result.finally(() => isRunning = false);\n }\n else {\n isRunning = false;\n }\n return result;\n }\n catch (e) {\n console.warn(e);\n isRunning = false;\n }\n }\n };\n};\nconst whileReady = () => {\n document.removeEventListener('DOMContentLoaded', whileReady);\n for (const fn of readyFunctionList) {\n fn();\n }\n readyFunctionList = [];\n};\n/**\n * 延迟函数到DOM树加载完成后执行\n * @seealso https://developer.mozilla.org/zh-CN/docs/Web/API/Document/readyState\n * @param fn 要延迟执行的函数\n */\nexport const ready = function (fn) {\n //interactive:等价于事件DOMContentLoaded\n //complete:等价于事件load\n if (document.readyState !== 'loading') {\n return fn();\n }\n if (readyFunctionList.length == 0) {\n document.addEventListener('DOMContentLoaded', whileReady, false);\n }\n readyFunctionList.push(fn);\n};\n/**\n * 获取文件名的主名部分(即去除扩展名)\n * @param fileName 文件名\n * @returns 主名\n */\nexport const getBaseName = (fileName) => fileName.replace(/\\.\\w+$/, '');\n// TODO: 使用现代CSS替代实现\nexport function slideToggle(el, duration = 1000, mode = '') {\n const dom = el;\n dom.status = dom.status || getComputedStyle(dom, null)['display'];\n const flag = dom.status != 'none';\n if ((flag == true && mode == \"show\") || (flag == false && mode == \"hide\"))\n return;\n dom.status = flag ? 'none' : 'block';\n dom.style.transition = 'height ' + duration / 1000 + 's';\n dom.style.overflow = 'hidden';\n clearTimeout(dom.tagTimer);\n dom.tagTimer = dom.tagTimer || null;\n dom.style.display = 'block';\n dom.tagHeight = dom.tagHeight || dom.clientHeight + 'px';\n dom.style.display = '';\n dom.style.height = flag ? dom.tagHeight : \"0px\";\n setTimeout(() => {\n dom.style.height = flag ? \"0px\" : dom.tagHeight;\n }, 0);\n dom.tagTimer = setTimeout(() => {\n dom.style.display = flag ? 'none' : 'block';\n dom.style.transition = '';\n dom.style.overflow = '';\n dom.style.height = '';\n dom.status = dom.tagHeight = null;\n }, duration);\n}\nexport function buildAPI(apiPath, params = {}, nonce = true) {\n const path = new URL(apiPath);\n const { searchParams } = path;\n for (const [key, value] of Object.entries(params)) {\n searchParams.set(key, value);\n }\n if (nonce)\n searchParams.set(\"_wpnonce\", _iro.nonce);\n return path.toString();\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() { }\n","import { buildAPI } from '../common/util';\nimport { __ } from '../common/sakurairo_global';\nlet QueryStorage;\nfunction renderSearchResult(keyword, link, fa, title, iconfont, comments, text) {\n if (keyword) {\n const s = keyword.trim().split(\" \"), a = title.indexOf(s[s.length - 1]), b = text.indexOf(s[s.length - 1]);\n title = a < 60 ? title.slice(0, 80) : title.slice(a - 30, a + 30);\n title = title.replace(s[s.length - 1], ' ' + s[s.length - 1].toUpperCase() + ' ');\n text = b < 60 ? text.slice(0, 80) : text.slice(b - 30, b + 30);\n text = text.replace(s[s.length - 1], ' ' + s[s.length - 1].toUpperCase() + ' ');\n }\n return `
${title}${comments}

${text}

`;\n}\nfunction Cx(array, query) {\n for (let s = 0; s < query.length; s++) {\n if (['.', '?', '*'].indexOf(query[s]) != -1) {\n query = query.slice(0, s) + \"\\\\\" + query.slice(s);\n s++;\n }\n }\n query = query.replace(query, \"^(?=.*?\" + query + \").+$\").replace(/\\s/g, \")(?=.*?\");\n return array.filter(v => Object.values(v)\n .some(v => new RegExp(query + '').test(v)));\n}\nfunction query(B, keyword) {\n let y = \"\", w = \"\", u = \"\", r = \"\", p = \"\", F = \"\";\n const G = '
', D = \"
\", E = \"\", queries = Cx(B, keyword.trim());\n for (const query of queries) {\n switch (query.type) {\n case \"post\":\n w = w + renderSearchResult(keyword, query.link, \"fa-inbox\", query.title, \"fa-comments\", query.comments, query.text);\n break;\n case \"tag\":\n p = p + renderSearchResult(\"\", query.link, \"fa-tag\", query.title, \"none\", \"\", \"\");\n break;\n case \"category\":\n r = r + renderSearchResult(\"\", query.link, \"fa-folder\", query.title, \"none\", \"\", \"\");\n break;\n case \"page\":\n u = u + renderSearchResult(keyword, query.link, \"fa-file\", query.title, \"fa-comments\", query.comments, query.text);\n break;\n case \"comment\":\n F = F + renderSearchResult(keyword, query.link, \"fa-comment\", query.title, \"none\", \"\", query.text);\n break;\n }\n }\n w && (y = y + G + __(\"文章\") + E + w + D);\n u && (y = y + G + __(\"页面\") + E + u + D);\n r && (y = y + G + __(\"分类\") + E + r + D);\n p && (y = y + G + __(\"标签\") + E + p + D);\n F && (y = y + G + __(\"评论\") + E + F + D);\n document.getElementById(\"PostlistBox\").innerHTML = y;\n}\nfunction search_a(val) {\n const otxt = document.getElementById(\"search-input\");\n if (sessionStorage.getItem('search') != null) {\n QueryStorage = JSON.parse(sessionStorage.getItem('search'));\n query(QueryStorage, otxt.value);\n div_href();\n }\n else {\n fetch(val)\n .then(async (resp) => {\n if (resp.ok) {\n const json = await resp.text();\n if (json != \"\") {\n sessionStorage.setItem('search', json);\n QueryStorage = JSON.parse(json);\n query(QueryStorage, otxt.value);\n div_href();\n }\n }\n else {\n console.warn('HTTP ' + resp.status);\n }\n })\n .catch(reason => console.warn(reason));\n }\n}\n/* if (!Object.values) Object.values = function (obj) {\n if (obj !== Object(obj))\n throw new TypeError('Object.values called on a non-object');\n var val = [],\n key;\n for (key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n val.push(obj[key]);\n }\n }\n return val;\n } */\nfunction div_href() {\n const search_close = document.querySelector(\".search_close\");\n const Ty = document.getElementById('Ty');\n for (const ele of document.getElementsByClassName('ins-selectable')) {\n ele.addEventListener(\"click\", () => {\n Ty.href = ele.getAttribute('href');\n Ty.click();\n search_close.click();\n });\n }\n /* $(\".ins-selectable\").each(function () {\n $(this).click(function () {\n $(\"#Ty\").attr('href', $(this).attr('href'));\n $(\"#Ty\").click();\n $(\".search_close\").click();\n });\n }); */\n}\nexport function jsSearchCallback() {\n //$('.js-toggle-search').toggleClass('is-active');\n document.getElementsByClassName('js-toggle-search')[0].classList.toggle('is-active');\n //$('.js-search').toggleClass('is-visible');\n document.getElementsByClassName('js-search')[0].classList.toggle('is-visible');\n //$('html').css('overflow-y', 'hidden');\n document.documentElement.style.overflowY = 'hidden';\n if (_iro.live_search) {\n QueryStorage = [];\n search_a(buildAPI(_iro.api + \"sakura/v1/cache_search/json\"));\n let otxt = document.getElementById(\"search-input\"), \n //list = document.getElementById(\"PostlistBox\"),\n //Record = list.innerHTML,\n searchFlag = null;\n otxt.oninput = function () {\n if (searchFlag != null) {\n clearTimeout(searchFlag);\n }\n searchFlag = setTimeout(function () {\n query(QueryStorage, otxt.value);\n div_href();\n }, 250);\n };\n }\n}\n","import lazyload from \"../common/lazyload\"\r\nimport { slideToggle } from \"../common/util\";\r\nimport { changeCoverBG, getCoverPath, getCurrentBG, nextBG, preBG } from \"./coverBackground\";\r\nimport { isMobile } from \"./mobile\";\r\n\r\nvar _mashiro_global_skin_secter = true\r\n\r\nexport function checkSkinSecter() {\r\n if (_mashiro_global_skin_secter === false) {\r\n const pattern = document.querySelector(\".pattern-center\"),\r\n headertop = document.querySelector(\".headertop-bar\");\r\n if (pattern) {\r\n pattern.classList.remove(\"pattern-center\");\r\n pattern.classList.add(\"pattern-center-sakura\");\r\n }\r\n if (headertop) {\r\n headertop.classList.remove(\"headertop-bar\");\r\n headertop.classList.add(\"headertop-bar-sakura\");\r\n }\r\n } else {\r\n const pattern = document.querySelector(\".pattern-center-sakura\"),\r\n headertop = document.querySelector(\".headertop-bar-sakura\");\r\n if (pattern) {\r\n pattern.classList.remove(\"pattern-center-sakura\");\r\n pattern.classList.add(\"pattern-center\");\r\n }\r\n if (headertop) {\r\n headertop.classList.remove(\"headertop-bar-sakura\");\r\n headertop.classList.add(\"headertop-bar\");\r\n }\r\n }\r\n}\r\n/**\r\n * 设置前台背景\r\n * @param {string} tagId 前台背景ID\r\n * @returns \r\n */\r\nexport async function changeSkin(tagId) {\r\n //@sideeffect\r\n _mashiro_global_skin_secter = tagId == \"white-bg\" || tagId == \"dark-bg\";\r\n checkSkinSecter();\r\n let bg_url;\r\n switch (tagId) {\r\n case \"white-bg\":\r\n if (_iro.site_bg_as_cover) {\r\n changeCoverBG(await getCoverPath())//为触发封面背景相关事件 调用函数而不是走下方流程\r\n return\r\n } else {\r\n bg_url = _iro.skin_bg0;\r\n }\r\n break;\r\n case \"diy1-bg\":\r\n bg_url = _iro.skin_bg1;\r\n break;\r\n case \"diy2-bg\":\r\n bg_url = _iro.skin_bg2;\r\n break;\r\n case \"diy3-bg\":\r\n bg_url = _iro.skin_bg3;\r\n break;\r\n case \"diy4-bg\":\r\n bg_url = _iro.skin_bg4;\r\n break;\r\n }\r\n document.body.style.backgroundImage = bg_url ? `url(${bg_url})` : '';\r\n}\r\n\r\nexport function bgButtonAddListener() {\r\n const next = document.getElementById(\"bg-next\"),\r\n pre = document.getElementById(\"bg-pre\");\r\n if (next) { next.onclick = nextBG }\r\n if (pre) { pre.onclick = preBG }\r\n}\r\n\r\nexport function timeSeriesReload(flag) {\r\n const archives = document.getElementById('archives');\r\n if (!archives) return;\r\n const al_li = archives.getElementsByClassName('al_mon');\r\n\r\n if (flag) {\r\n archives.addEventListener(\"click\", (e) => {\r\n if (e.target.classList.contains(\"al_mon\")) {\r\n e.preventDefault();\r\n slideToggle(e.target.nextElementSibling, 500);\r\n }\r\n })\r\n lazyload();\r\n } else {\r\n let al_expand_collapse = document.getElementById('al_expand_collapse');\r\n al_expand_collapse.style.cursor = \"s-resize\";\r\n for (let i = 0; i < al_li.length; i++) {\r\n let a = al_li[i],\r\n num = a.nextElementSibling.getElementsByTagName('li').length;\r\n a.style.cursor = \"s-resize\";\r\n a.querySelector('#post-num').textContent = num;\r\n }\r\n const al_post_list = archives.getElementsByClassName(\"al_post_list\")\r\n const al_post_list_first = al_post_list[0];\r\n for (const child of al_post_list) {\r\n slideToggle(child, 500, 'hide')\r\n }\r\n slideToggle(al_post_list_first, 500, 'show');\r\n\r\n archives.addEventListener(\"click\", (e) => {\r\n if (e.target.classList.contains(\"al_mon\")) {\r\n slideToggle(e.target.nextElementSibling, 500);\r\n e.preventDefault();\r\n }\r\n })\r\n if (!isMobile()) {\r\n for (let i = 0; i < al_post_list.length; i++) {\r\n let el = al_post_list[i];\r\n el.parentNode.addEventListener('mouseover', () => {\r\n slideToggle(el, 500, 'show');\r\n return false;\r\n })\r\n }\r\n if (false) {\r\n for (let i = 0; i < al_post_list.length; i++) {\r\n let el = al_post_list[i];\r\n el.parentNode.addEventListener('mouseover', function () {\r\n slideToggle(el, 500, 'hide');\r\n return false;\r\n })\r\n }\r\n }\r\n }\r\n let expanded = false;\r\n al_expand_collapse.addEventListener('click', () => {\r\n for (const el of al_post_list) {\r\n slideToggle(el, 500, expanded ? 'hide' : 'show');\r\n }\r\n expanded = !expanded;\r\n });\r\n }\r\n}\r\n\r\nimport { liveplay, livepause, } from './video'\r\n\r\n/**\r\n * @has-dom-modify\r\n */\r\nexport function auto_height() {\r\n if (_iro.windowheight == 'auto') {\r\n if (document.querySelector(\"h1.main-title\")) {\r\n //let _height = document.documentElement.clientHeight + \"px\";\r\n const centerbg = document.getElementById(\"centerbg\")\r\n const bgvideo = document.getElementById(\"bgvideo\")\r\n if (centerbg) centerbg.style.height = \"100vh\";\r\n if (bgvideo) bgvideo.style.minHeight = \"100vh\";\r\n }\r\n } else {\r\n const headertop = document.querySelector(\".headertop\")\r\n headertop && headertop.classList.add(\"headertop-bar\");\r\n }\r\n}\r\n/**\r\n * @has-dom-modify\r\n */\r\nexport function PE() {\r\n const headertop = document.querySelector(\".headertop\")\r\n if (headertop) {\r\n let blank = document.querySelector(\".blank\");\r\n if (document.querySelector(\".main-title\")) {\r\n try {\r\n blank.style.paddingTop = \"0px\";\r\n } catch (e) { }\r\n headertop.style.height = \"auto\";\r\n headertop.style.display = \"\";\r\n if (_iro.movies.live) liveplay();\r\n } else {\r\n try {\r\n blank.style.paddingTop = \"75px\";\r\n } catch (e) { }\r\n headertop.style.height = \"0px\";\r\n headertop.style.display = \"none\";\r\n }\r\n }\r\n}\r\nimport { jsSearchCallback } from './search'\r\nimport { turnOnDarkMode, turnOffDarkMode } from './darkmode';\r\n/**\r\n * @has-dom-modify\r\n */\r\nexport function CE() {\r\n let comments_fold = document.querySelector(\".comments-fold\");\r\n let comments_main = document.querySelector(\".comments-main\");\r\n if (comments_fold != null) {\r\n comments_fold.style.display = \"block\";\r\n comments_main.style.display = \"none\";\r\n comments_fold.addEventListener(\"click\", () => {\r\n slideToggle(comments_main, 500, 'show');\r\n comments_fold.style.display = \"none\";\r\n });\r\n }\r\n let archives = document.getElementsByClassName(\"archives\");\r\n if (archives.length > 0) {\r\n for (let i = 1; i < archives.length; i++) {\r\n archives[i].style.display = \"none\";\r\n }\r\n archives[0].style.display = \"\";\r\n let h3 = document.getElementById(\"archives-temp\").getElementsByTagName(\"h3\");\r\n const handler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n slideToggle(e.target.nextElementSibling, 300);\r\n }\r\n for (let i = 0; i < h3.length; i++) {\r\n h3[i].addEventListener(\"click\", handler)\r\n }\r\n }\r\n // $('.comments-hidden').show();\r\n // $('.comments-main').hide();\r\n // $('.comments-hidden').click(function () {\r\n // $('.comments-main').slideDown(500);\r\n // $('.comments-hidden').hide();\r\n // });\r\n // $('.archives').hide();\r\n // $('.archives:first').show();\r\n // $('#archives-temp h3').click(function () {\r\n // $(this).next().slideToggle('fast');\r\n // return false;\r\n // });\r\n /*if (_iro.baguetteBoxON) {\r\n baguetteBox.run('.entry-content', {\r\n captions: function (element) {\r\n return element.getElementsByTagName('img')[0].alt;\r\n },\r\n ignoreClass: 'fancybox',\r\n });\r\n }*/\r\n\r\n for (const ele of document.getElementsByClassName('js-toggle-search')) {\r\n ele.addEventListener('click', jsSearchCallback);\r\n }\r\n\r\n const sc = document.querySelector(\".search_close\");\r\n sc && sc.addEventListener(\"click\", () => {\r\n let js_search = document.getElementsByClassName(\"js-search\")[0];\r\n if (js_search.classList.contains(\"is-visible\")) {\r\n document.getElementsByClassName(\"js-toggle-search\")[0].classList.toggle(\"is-active\");\r\n js_search.classList.toggle(\"is-visible\");\r\n document.documentElement.style.overflowY = \"unset\";\r\n }\r\n });\r\n try {\r\n const loading = document.getElementById(\"loading\");\r\n loading.addEventListener(\"click\", () => {\r\n loading.classList.add(\"hide\");\r\n loading.classList.remove(\"show\");\r\n });\r\n } catch (e) { }\r\n}\r\n//#endregion Siren\r\nexport function addSkinMenuListener() {\r\n const cached = document.querySelectorAll(\".menu-list li\");\r\n const handler = (e) => {\r\n const tagid = e.target.id || e.target.parentElement.id;\r\n if (tagid == \"dark-bg\") {\r\n turnOnDarkMode(true)\r\n } else {\r\n turnOffDarkMode(true)\r\n changeSkin(tagid)\r\n localStorage.setItem(\"bgImgSetting\", tagid)\r\n }\r\n closeSkinMenu();\r\n }\r\n for (const e of cached) {\r\n e.addEventListener(\"click\", handler);\r\n }\r\n}\r\n/**\r\n * 根据设置初始化前台背景。启用前台背景与站点封面背景一体化以后封面背景在此设置\r\n * @returns 一个Promise。Promise resolved 时封面背景应当已经加载完毕\r\n */\r\nexport function checkBgImgSetting() {\r\n return changeSkin(localStorage.getItem(\"bgImgSetting\") || 'white-bg');\r\n}\r\nexport async function checkCoverBackground() {\r\n if (_iro.site_bg_as_cover) {\r\n return //交给checkBgImgSetting处理\r\n }\r\n if (!_iro.land_at_home) return//进入非主页 \r\n if (getCurrentBG()) {//进入主页且已经加载了封面背景\r\n return\r\n }\r\n changeCoverBG(await getCoverPath())\r\n}\r\nexport function closeSkinMenu() {\r\n document.querySelector(\".skin-menu\").classList.remove(\"show\");\r\n setTimeout(() => {\r\n const changeSkin = document.querySelector(\".changeSkin-gear\")\r\n if (changeSkin != null) {\r\n changeSkin.style.visibility = \"visible\";\r\n }\r\n }, 300);\r\n}","function imgError(ele, type) {\r\n svg404 = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent('404');\r\n switch (type) {\r\n case 1:\r\n case 2:\r\n ele.onerror = \"\";\r\n if (_iro.missing_avatars != \"\") {\r\n ele.src = _iro.missing_avatars;\r\n } else {\r\n ele.src = 'https://weavatar.com/avatar/?s=80&d=mm&r=g';\r\n }\r\n break;\r\n default:\r\n ele.onerror = \"\";\r\n if (_iro.missing_images != \"\"){\r\n ele.src = _iro.missing_images;\r\n } else {\r\n ele.src = svg404;\r\n }\r\n break;\r\n }\r\n}\r\n/*视频feature*/\r\nfunction coverVideo() {\r\n let video = document.getElementById(\"coverVideo\"),\r\n btn_playControl = document.getElementById(\"cv-pc\");\r\n\r\n if (video.paused) {\r\n video.play();\r\n try {\r\n btn_playControl.innerHTML = '';\r\n } catch { }\r\n //console.info('play:coverVideo()');\r\n } else {\r\n video.pause();\r\n try {\r\n btn_playControl.innerHTML = '';\r\n } catch { }\r\n //console.info('pause:coverVideo()');\r\n }\r\n}\r\nfunction coverVideoMute() {\r\n const video = document.getElementById(\"coverVideo\")\r\n const btn_volumeControl = document.getElementById(\"cv-vc\");\r\n if (video.muted) {\r\n video.muted = false\r\n btn_volumeControl.innerHTML = ''\r\n } else {\r\n video.muted = true\r\n btn_volumeControl.innerHTML = ''\r\n }\r\n}\r\nfunction killCoverVideo() {\r\n var video = document.getElementById(\"coverVideo\");\r\n var btn_playControl = document.getElementById(\"cv-pc\");\r\n\r\n if (video.paused) {\r\n //console.info('none:killCoverVideo()');\r\n } else {\r\n video.pause();\r\n try {\r\n btn_playControl.innerHTML = '';\r\n } catch (e) { }\r\n //console.info('pause:killCoverVideo()');\r\n }\r\n}\r\n\r\nfunction mail_me() {\r\n window.open(\"mailto:\" + _iro.email_name + \"@\" + _iro.email_domain);\r\n}\r\n/* 首页下拉箭头 */\r\nfunction headertop_down() {\r\n let coverOffset = document.getElementById(\"content\").getBoundingClientRect().top + window.pageYOffset;\r\n window.scrollTo({\r\n top: coverOffset,\r\n behavior: \"smooth\"\r\n });\r\n}\r\nwindow.imgError = imgError\r\nwindow.coverVideo = coverVideo\r\nwindow.coverVideoMute = coverVideoMute\r\nwindow.killCoverVideo = killCoverVideo\r\nwindow.mail_me = mail_me\r\nwindow.headertop_down = headertop_down","async function initParticle() {\r\n const cfg = document.getElementById('particles-js-cfg')\r\n if (cfg) {\r\n try {\r\n //particles.js的npm包内没有预置minify版本,与unpkg不兼容\r\n //@ts-ignore\r\n await import('particles.js')\r\n //@ts-ignore\r\n particlesJS('particles-js', JSON.parse(cfg.innerHTML))\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n }\r\n}\r\nexport default function initEffect() {\r\n const { effect } = _iro\r\n if (effect) {\r\n if (effect.type == 'yuki') {\r\n import('./falling_effect/yuki/start')\r\n } else import('./falling_effect/sakura/start')\r\n }\r\n initParticle()\r\n}","/**\r\n * app.js - Client script bundle for Sakurairo, a WordPress theme.\r\n * @author bymoye \r\n * @author KotoriK\r\n * @license GPL-v2\r\n * @date 2021.3.21\r\n * Github Repository:\r\n * @url https://github.com/Fuukei/Sakurairo_Scripts\r\n * @url https://github.com/mirai-mamori/Sakurairo/blob/f7db3c5c73d70a6a3f845844a44f279d540a7b6c/js/sakura-app.js\r\n * \r\n * *** ACKNOWLEDGEMENT *** \r\n * \r\n * *** modified on mashirozx/Sakura/js/sakura-app.js ***\r\n * Sakura theme application bundle\r\n * @author Mashiro\r\n * @url https://2heng.xin\r\n * @date 2019.8.3\r\n * *** ***\r\n * \r\n * *** inherited from louie-senpai/Siren/js/app.js ***\r\n * Siren application js\r\n * @author Louie\r\n * @url http://i94.me\r\n * @date 2016.11.19\r\n * *** ***\r\n * \r\n * *** inherited from Xoin-Yang/Akina/js/global.js ***\r\n * @author Xoin-Yang\r\n * @date 2017.04.25\r\n * @url http://www.akina.pw/\r\n * *** END OF ACKNOWLEDGEMENT *** \r\n * \r\n * Press 'F' to pay respects.\r\n * \r\n */\r\n\r\nimport { getCurrentBG, init_post_cover_as_bg} from './coverBackground'\r\nimport lazyload from \"../common/lazyload\"\r\nimport './global-func'\r\nimport { ready } from '../common/util'\r\nimport about_us from './about_us'\r\nimport preload_screen from './preload_screen'\r\nimport { isSupported } from './compatibility'\r\nimport hitokoto from './hitokoto'\r\nimport { XLS, post_list_show_animation } from './post_list'\r\nimport { initThemeColor, updateThemeSkin } from './theme-color'\r\nimport initEffect from './effect'\r\nimport { initIsMobileCache, isMobile } from './mobile'\r\nimport { initFontControl } from './font_control'\r\nimport scrollHandler from './scroll_handler'\r\nimport { checkDarkModeSetting, } from './darkmode'\r\nimport { addSkinMenuListener, auto_height, bgButtonAddListener, CE, checkBgImgSetting, checkCoverBackground, checkSkinSecter, closeSkinMenu, MN, PE, timeSeriesReload, collapseMenu } from './func'\r\nimport initTypedJs from './typed'\r\nimport showcard from './showcard'\r\nimport add_copyright from './copyright'\r\nimport initFooter from './footer'\r\n\r\ninitIsMobileCache()\r\n/**\r\n * 检查是否应当开启_iro.pjax\r\n * @seealso https://github.com/PaperStrike/Pjax#compatibility\r\n */\r\n_iro.pjax = _iro.pjax && isSupported({ Firefox: 60, Edg: 79, Chrome: 66, OPR: 53, Version: 12/**Safari 12 */ });\r\n_iro.pjax && import('./pjax').then(({ default: initPjax }) => initPjax())\r\n\r\ntimeSeriesReload();\r\nadd_copyright()\r\nfunction activate_widget() {\r\n let secondary = document.getElementById(\"secondary\");\r\n if (!isMobile()) {\r\n let show_hide = document.querySelector(\".show-hide\");\r\n show_hide && show_hide.addEventListener(\"click\", () => {\r\n secondary && secondary.classList.toggle(\"active\");\r\n });\r\n } else {\r\n secondary && secondary.remove();\r\n }\r\n}\r\nsetTimeout(function () {\r\n activate_widget();\r\n}, 100);\r\n\r\n/* let isWebkit = navigator.userAgent.toLowerCase().indexOf('webkit') > -1,\r\n isOpera = navigator.userAgent.toLowerCase().indexOf('opera') > -1,\r\n isIe = navigator.userAgent.toLowerCase().indexOf('msie') > -1;\r\nif ((isWebkit || isOpera || isIe) && document.getElementById && window.addEventListener) { */\r\nwindow.addEventListener('hashchange', () => {\r\n const id = location.hash.substring(1)\r\n if (!(/^[A-z0-9_-]+$/.test(id))) {\r\n return;\r\n }\r\n const element = document.getElementById(id);\r\n if (element) {\r\n if (!(/^(?:a|select|input|button|textarea)$/i.test(element.tagName))) {\r\n element.tabIndex = -1;\r\n }\r\n element.focus();\r\n }\r\n}, false);\r\n/* } */\r\n\r\ncheckDarkModeSetting();\r\n\r\nimport POWERMODE from 'activate-power-mode'\r\nimport { coverVideoIni, coverVideo } from './video'\r\n\r\nfunction powermode() {\r\n POWERMODE.colorful = true;\r\n POWERMODE.shake = false;\r\n document.body.addEventListener('input', POWERMODE)\r\n}\r\n//afterDOMContentLoaded\r\n\r\nready(function () {\r\n if (_iro.float_player_on) {\r\n if (!isMobile()) {\r\n import('./aplayer').then(({ aplayerInit }) => aplayerInit())\r\n }\r\n }\r\n if (_iro.land_at_home) initTypedJs()\r\n Promise.all([checkCoverBackground(), checkBgImgSetting()])\r\n .then(() => {\r\n if (_iro.extract_theme_skin || isSupported({ Version: 15/**Safari 15 */ })) {\r\n initThemeColor()\r\n const bgUrl = getCurrentBG()\r\n if (bgUrl) updateThemeSkin(bgUrl)\r\n }\r\n })\r\n addSkinMenuListener();\r\n //let checkskin_bg = (a) => a == \"none\" ? \"\" : a;\r\n let changskin = document.querySelector(\"#changskin\"),\r\n close_SkinMenu = document.querySelector(\".skin-menu #close-skinMenu\");\r\n changskin && changskin.addEventListener(\"click\", function () {\r\n document.querySelector(\".skin-menu\").classList.toggle(\"show\");\r\n })\r\n close_SkinMenu && close_SkinMenu.addEventListener(\"click\", closeSkinMenu)\r\n scrollHandler();\r\n /*GT()*/\r\n const mb_to_top = document.querySelector(\"#moblieGoTop\")\r\n if (mb_to_top) {\r\n mb_to_top.onclick = () => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n }\r\n /*GT end;*/\r\n XLS();\r\n coverVideo();\r\n hitokoto()\r\n bgButtonAddListener()\r\n init_post_cover_as_bg();\r\n //#region has-dom-modify\r\n initFontControl()\r\n auto_height();\r\n PE();\r\n CE();\r\n //#endregion\r\n preload_screen()\r\n lazyload();\r\n showcard()\r\n powermode()\r\n //#region mashiro_global.ini.normalize();\r\n post_list_show_animation();\r\n coverVideoIni();\r\n checkSkinSecter();\r\n //#endregion\r\n initEffect()\r\n about_us()\r\n initFooter();\r\n});\r\n","import { isMobile } from \"./mobile\";\n/**\n * 根据滚动位置调整UI显示\n */\nexport default function scrollHandler() {\n const skinMenu = document.querySelector(\".skin-menu\");\n const changskin = document.querySelector(\"#changskin\");\n const mb_to_top = document.querySelector(\"#moblieGoTop\");\n const common = (scrollTop) => {\n //NH\n const cssText = scrollTop > 20 ? \"scale(1)\" : \"scale(0)\";\n mb_to_top.style.transform = cssText;\n changskin.style.transform = cssText;\n };\n if (isMobile()) {\n const smallScreenHandler = () => {\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n skinMenu && skinMenu.classList.remove(\"show\");\n common(scrollTop);\n };\n window.addEventListener(\"scroll\", smallScreenHandler);\n }\n else {\n const cached = document.getElementById('bar');\n const recalcuScrollbar = (scrollTop) => {\n const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;\n const result = Math.round(scrollTop / (scrollHeight - window.innerHeight) * 100);\n cached.style.width = result + '%';\n /* switch (true) {\n case (result <= 19): c = '#cccccc'; break;\n case (result <= 39): c = '#50bcb6'; break;\n case (result <= 59): c = '#85c440'; break;\n case (result <= 79): c = '#f2b63c'; break;\n case (result <= 99): c = '#FF0000'; break;\n case (result == 100): c = '#5aaadb'; break;\n default: c = \"orange\";\n }\n cached.style.background = c; */\n //炫彩scrollbar好像不是很好看,又被php那边的样式强制覆盖了,就先注释掉\n skinMenu && skinMenu.classList.remove(\"show\");\n };\n const largeScreenHandler = () => {\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n recalcuScrollbar(scrollTop);\n common(scrollTop);\n };\n window.addEventListener(\"scroll\", largeScreenHandler);\n }\n}\n//pjax.complete ready\n/* function NH() {\n const header_thresold = 0,\n siteHeader = document.querySelector(\".site-header\")\n window.addEventListener(\"scroll\", () => {\n const scrollTop = document.documentElement.scrollTop || window.pageYOffset;\n if (scrollTop > header_thresold) {\n siteHeader.classList.add(\"yya\");\n } else {\n siteHeader.classList.remove(\"yya\");\n }\n })\n // $(window).scroll(function () {\n // var s = $(document).scrollTop(),\n // cached = $('.site-header');\n // if (s == h1) {\n // cached.removeClass('yya');\n // }\n // if (s > h1) {\n // cached.addClass('yya');\n // }\n // });\n} */\n//ready\n/* function GT() {\n const mb_to_top = document.querySelector(\"#moblieGoTop\"),\n changskin = document.querySelector(\"#changskin\");\n window.addEventListener(\"scroll\", debounce(() => {\n const scroll = document.documentElement.scrollTop || document.body.scrollTop;\n const cssText = scroll > 20 ? \"scale(1)\" : \"scale(0)\"\n mb_to_top.style.transform = cssText;\n changskin.style.transform = cssText;\n }))\n mb_to_top.onclick = topFunction\n}\n\nfunction topFunction() {\n window.scrollTo({\n top: 0,\n behavior: \"smooth\"\n });\n} */\n","export default function () {\n const preload = document.getElementById(\"preload\");\n if (preload) {\n let removed = false;\n const removeScreen = () => {\n if (removed)\n return;\n document.documentElement.style.overflowY = 'unset';\n if (_iro.preload_blur != 0) {\n try {\n preload\n .animate([\n { filter: \"blur(0px)\", backdropFilter: \"blur(10px)\", opacity: 1 },\n { backdropFilter: \"blur(0px)grayscale(0)\", opacity: 0.1 },\n { opacity: 0, filter: \"blur(100px)\", }\n ], { duration: _iro.preload_blur, fill: \"forwards\", easing: \"ease\" })\n .onfinish = () => {\n preload.remove();\n };\n return;\n }\n catch (error) {\n console.warn(error);\n }\n }\n preload.classList.add('hide');\n preload.classList.remove('show');\n removed = true;\n setTimeout(() => preload.remove(), 233);\n };\n if (document.readyState === 'complete')\n return removeScreen();\n window.addEventListener('load', removeScreen, { once: true });\n setTimeout(removeScreen, 3000);\n }\n}\n","/**\n * 显示关于我们的控制台信息\n * 包含歌词和版本信息的格式化输出\n */\nexport default function about_us() {\n const c_bocchi = \"#ff6496\";\n const c_ichika = \"#fabe03\";\n const c_ryo = \"#006ebe\";\n const c_ikuyo = \"#e60046\";\n const getTextStyle = (color) => {\n return `color:${color};font-size:12px;font-family:\"Tahoma Bold\", \"San Francisco\";font-weight:900`;\n };\n const getLyricStyle = () => {\n return `font-family:\"BIZ UDMincho\",\"Hiragino Mincho ProN\";font-size:14px`;\n };\n const getQuoteStyle = () => {\n return `color:#b4b4b4;font-family:\"Tahoma Bold\", \"San Francisco\";font-size:12px`;\n };\n // 歌词部分\n console.log(`%c君を待った\r\n僕は待った\r\n途切れない明日も過ぎて行って\r\n僕は今日も掻きむしって\r\n忘れない傷をつけているんだよ\r\n君じゃないとさ\r\n%c— ⌜Re:Re:⌟`, getLyricStyle(), getQuoteStyle());\n // 版本信息部分\n console.log(`%cTHE%cM%cE \\n%cSAKURAIR%cO%c \\n%cVE%cR%cSION \\n%c3%c.0 \\n%chttps://github.com/mirai-mamori/Sakurairo`, getTextStyle('inherit'), getTextStyle(c_bocchi), getTextStyle('inherit'), getTextStyle('inherit'), getTextStyle(c_ichika), getTextStyle('inherit'), getTextStyle('inherit'), getTextStyle(c_ryo), getTextStyle('inherit'), getTextStyle(c_ikuyo), getTextStyle('inherit'), getTextStyle('inherit'));\n}\n","export default function initFooter() {\r\n\r\n initFooterVisibility();\r\n\r\n document.addEventListener('pjax:complete', function () {\r\n initFooterVisibility();\r\n });\r\n\r\n function initFooterVisibility() {\r\n const footer = document.getElementById('colophon');\r\n if (!footer) return;\r\n\r\n // 初始状态设置为隐藏\r\n footer.classList.remove('show');\r\n\r\n // 计算footer高度并设置wrapper的padding-bottom\r\n const footerHeight = footer.offsetHeight;\r\n const paddingValue = footerHeight * 1.3;\r\n const wrapper = document.querySelector('.site.wrapper');\r\n if (wrapper) {\r\n wrapper.style.paddingBottom = `${paddingValue}px`;\r\n }\r\n\r\n function checkFooterVisibility() {\r\n const scrollPosition = window.scrollY || document.documentElement.scrollTop;\r\n const windowHeight = window.innerHeight;\r\n const documentHeight = document.body.scrollHeight;\r\n const showThreshold = documentHeight - 100;\r\n\r\n // 当滚动到接近页面底部时显示footer,否则隐藏\r\n if (scrollPosition + windowHeight >= showThreshold) {\r\n if (footer && !footer.classList.contains('show')) {\r\n // 添加show类来显示footer\r\n requestAnimationFrame(() => {\r\n footer.classList.add('show');\r\n });\r\n }\r\n } else {\r\n if (footer && footer.classList.contains('show')) {\r\n // 移除show类来隐藏footer\r\n requestAnimationFrame(() => {\r\n footer.classList.remove('show');\r\n });\r\n }\r\n }\r\n }\r\n\r\n // 移除之前可能添加的事件监听器,避免重复\r\n window.removeEventListener('scroll', onScroll);\r\n window.removeEventListener('resize', checkFooterVisibility);\r\n\r\n // 初始检查 - 使用setTimeout确保在页面完全加载后再次检查,解决初始状态问题\r\n checkFooterVisibility();\r\n setTimeout(checkFooterVisibility, 100);\r\n\r\n // 滚动事件节流处理\r\n let ticking = false;\r\n function onScroll() {\r\n if (!ticking) {\r\n window.requestAnimationFrame(() => {\r\n checkFooterVisibility();\r\n ticking = false;\r\n });\r\n ticking = true;\r\n }\r\n }\r\n\r\n // 滚动时检查\r\n window.addEventListener('scroll', onScroll);\r\n\r\n // 窗口大小变化时检查\r\n window.addEventListener('resize', checkFooterVisibility);\r\n }\r\n}","import { isInDarkMode } from '../app/darkmode'\r\nimport { loadCSS } from 'fg-loadcss'\r\nimport { importExternal, resolvePath } from '../common/npmLib';\r\nimport { __ } from './sakurairo_global';\r\n\r\nconst PRISM_VERSION = PKG_INFO['prismjs']\r\nconst attributes = {\r\n 'autocomplete': 'off',\r\n 'autocorrect': 'off',\r\n 'autocapitalize': 'off',\r\n 'spellcheck': 'false',\r\n 'contenteditable': 'false',\r\n 'design': 'by Mashiro'\r\n}\r\nfunction gen_top_bar(pre, code_a) {\r\n if (!pre.children[0]) return\r\n let lang = 'text'\r\n const className = pre.children[0].className\r\n const matchResult = className.match(/language-(\\w+)/i)\r\n if (matchResult) {\r\n lang = matchResult[1]\r\n }\r\n pre.classList.add(\"highlight-wrap\");\r\n for (const t in attributes) {\r\n pre.setAttribute(t, attributes[t]);\r\n }\r\n code_a.setAttribute('data-rel', lang.toUpperCase());\r\n}\r\nasync function importHighlightjs() {\r\n try {\r\n if (!window.hljs) {\r\n window.hljs = (await import('highlight.js')).default\r\n await import('highlightjs-line-numbers.js')\r\n }\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n}\r\nconst hljs_click_callback = (e) => {\r\n const element = e.target\r\n if (!element.classList.contains(\"highlight-wrap\")) return;\r\n if (element.classList.contains('code-block-fullscreen')) {\r\n element.remove()\r\n } else {\r\n const cloneElement = element.cloneNode(true)\r\n cloneElement.classList.toggle(\"code-block-fullscreen\")\r\n document.body.append(cloneElement)\r\n }\r\n document.documentElement.classList.toggle('code-block-fullscreen-html-scroll');\r\n}\r\nexport function deattachHljsCallback() {\r\n document.body.removeEventListener(\"click\", hljs_click_callback)\r\n}\r\nexport async function hljs_process(pre, code) {\r\n try {\r\n await importHighlightjs()\r\n for (let i = 0; i < code.length; i++) {\r\n if (!code[i].classList.contains(\"hljs\")) {\r\n hljs.highlightElement(code[i]);\r\n }\r\n }\r\n for (let i = 0; i < pre.length; i++) {\r\n if (!pre[i].classList.contains(\"highlight-wrap\")) {\r\n gen_top_bar(pre[i], code[i]);\r\n }\r\n }\r\n hljs.initLineNumbersOnLoad();\r\n document.body.addEventListener(\"click\", hljs_click_callback)\r\n } catch (e) {\r\n console.warn(e)\r\n }\r\n}\r\n//Prism\r\nconst PrismBaseUrl = _iro.code_highlight_prism?.autoload_path || resolvePath('', 'prismjs', PRISM_VERSION)\r\nlet currentPrismThemeCSS = undefined\r\nconst themeCSS = (() => {\r\n const { light, dark } = _iro.code_highlight_prism?.theme || {}\r\n const theme = {\r\n light: light || 'themes/prism.min.css',\r\n dark: dark || 'themes/prism-tomorrow.min.css',\r\n }\r\n for (const theme_name in theme) {\r\n theme[theme_name] = new URL(theme[theme_name], PrismBaseUrl).toString()\r\n }\r\n return theme\r\n})()\r\n\r\nfunction loadPrismCSS(darkmodeOn) {\r\n const nextCSSHref = darkmodeOn ? themeCSS.dark : themeCSS.light\r\n if (currentPrismThemeCSS) {\r\n if (currentPrismThemeCSS.href !== nextCSSHref) {\r\n const nextCSSElement = loadCSS(nextCSSHref)\r\n nextCSSElement.addEventListener('load', () => {\r\n currentPrismThemeCSS.remove()\r\n currentPrismThemeCSS = nextCSSElement\r\n })\r\n }\r\n } else {\r\n currentPrismThemeCSS = loadCSS(nextCSSHref)\r\n }\r\n}\r\n\r\nconst prism_darkmode_callback = (e) => {\r\n loadPrismCSS(e.detail)\r\n}\r\nexport const deattachPrismCallback = () => document.removeEventListener('darkmode', prism_darkmode_callback)\r\nasync function importPrismJS() {\r\n try {\r\n if (!window.Prism) {\r\n loadPrismCSS(isInDarkMode())\r\n document.addEventListener('darkmode', prism_darkmode_callback)\r\n //必备插件全家桶\r\n loadCSS(new URL('plugins/toolbar/prism-toolbar.min.css', PrismBaseUrl).toString())\r\n loadCSS(new URL('plugins/previewers/prism-previewers.min.css', PrismBaseUrl).toString())\r\n if (_iro.ext_shared_lib) {\r\n await Promise.all([importExternal('components/prism-core.min.js', 'prismjs', PRISM_VERSION),\r\n importExternal('plugins/autoloader/prism-autoloader.min.js', 'prismjs', PRISM_VERSION),\r\n importExternal('plugins/toolbar/prism-toolbar.min.js', 'prismjs', PRISM_VERSION),\r\n importExternal('plugins/previewers/prism-previewers.min.js', 'prismjs', PRISM_VERSION),\r\n importExternal('plugins/show-language/prism-show-language.min.js', 'prismjs', PRISM_VERSION)])\r\n } else await import('./prism_pack')\r\n Prism.plugins.autoloader.languages_path = new URL('components/', PrismBaseUrl).toString()\r\n }\r\n } catch (reason) {\r\n console.warn(reason)\r\n }\r\n}\r\nfunction loadPrismPluginLineNumbers() {\r\n loadCSS(new URL('plugins/line-numbers/prism-line-numbers.min.css', PrismBaseUrl).toString())\r\n if (_iro.ext_shared_lib) {\r\n return importExternal('plugins/line-numbers/prism-line-numbers.min.js', 'prismjs', PRISM_VERSION)\r\n } else {\r\n return import('prismjs/plugins/line-numbers/prism-line-numbers')\r\n }\r\n}\r\nfunction loadPrismMatchBraces() {\r\n loadCSS(new URL('plugins/match-braces/prism-match-braces.min.css', PrismBaseUrl).toString())\r\n if (_iro.ext_shared_lib) {\r\n return importExternal('plugins/match-braces/prism-match-braces.min.js', 'prismjs', PRISM_VERSION)\r\n } else {\r\n return import('prismjs/plugins/match-braces/prism-match-braces')\r\n }\r\n}\r\nfunction loadPrismCommandLine() {\r\n loadCSS(new URL('plugins/command-line/prism-command-line.css', PrismBaseUrl).toString())\r\n if (_iro.ext_shared_lib) {\r\n return importExternal('plugins/command-line/prism-command-line.min.js', 'prismjs', PRISM_VERSION)\r\n } else {\r\n return import('prismjs/plugins/command-line/prism-command-line')\r\n }\r\n}\r\n/**\r\n * \r\n * @param {NodeListOf} code document.querySelectorAll(\"pre code\")\r\n */\r\nexport async function prism_process(code) {\r\n try {\r\n let loadLineNumber = false\r\n let loadMatchBraces = false\r\n let loadCommandLine = false\r\n if (_iro.code_highlight_prism.line_number_all) {\r\n document.querySelector('.entry-content').classList.add('line-numbers')\r\n loadLineNumber = true\r\n }\r\n for (const ele of code) {\r\n if (ele.parentElement.classList.contains('line-numbers')) {\r\n loadLineNumber = true\r\n }\r\n if (ele.classList.contains('match-braces')) {\r\n loadMatchBraces = true\r\n }\r\n if (ele.dataset.prompt || ele.dataset.host || ele.dataset.user) {\r\n //cli\r\n loadCommandLine = true\r\n }\r\n }\r\n await Promise.all([\r\n importPrismJS(),\r\n loadLineNumber && loadPrismPluginLineNumbers(),\r\n loadMatchBraces && loadPrismMatchBraces(),\r\n loadCommandLine && loadPrismCommandLine()\r\n ])\r\n for (const ele of code) {\r\n if (!ele.firstChild?.classList?.contains('token')) {\r\n Prism.highlightElement(ele);\r\n }\r\n }\r\n Prism.plugins.fileHighlight && Prism.plugins.fileHighlight.highlight()\r\n } catch (error) {\r\n console.warn(error)\r\n }\r\n}\r\n\r\nexport async function code_highlight_style() {\r\n const pre = document.getElementsByTagName(\"pre\"),\r\n code = document.querySelectorAll(\"pre code\");\r\n if (!pre.length) {\r\n switch (_iro.code_highlight) {\r\n case 'hljs':\r\n deattachHljsCallback()\r\n return\r\n case 'prism':\r\n deattachPrismCallback()\r\n return\r\n default:\r\n }\r\n }\r\n switch (_iro.code_highlight) {\r\n case 'hljs':\r\n await hljs_process(pre, code)\r\n break\r\n case 'prism':\r\n await prism_process(code)\r\n break\r\n case 'custom': return\r\n default:\r\n console.warn(`_iro.code_highlight这咋填的是个${_iro.code_highlight}啊🤔`)\r\n }\r\n //copy_code_block\r\n if (code.length > 0) {\r\n for (let j = 0; j < code.length; j++) {\r\n const pre_a = code[j].parentElement.querySelectorAll(\"a\");\r\n for (const ele of pre_a) {\r\n if (ele.classList.contains(\"copy-code\")) {\r\n ele.remove(); //如果已经存在复制按钮,需将其移除后再重新添加\r\n }\r\n }\r\n code[j].setAttribute('id', 'code-block-' + j);\r\n code[j].insertAdjacentHTML('afterend', '');\r\n }\r\n if (_iro.ext_shared_lib) {\r\n await importExternal('dist/clipboard.min.js', 'clipboard')\r\n new ClipboardJS('.copy-code')\r\n } else {\r\n const ClipboardJS = (await import('clipboard')).default\r\n new ClipboardJS('.copy-code');\r\n }\r\n }\r\n}","/*! loadCSS. [c]2020 Filament Group, Inc. MIT License */\n(function(w){\n\t\"use strict\";\n\t/* exported loadCSS */\n\tvar loadCSS = function( href, before, media, attributes ){\n\t\t// Arguments explained:\n\t\t// `href` [REQUIRED] is the URL for your CSS file.\n\t\t// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet before\n\t\t// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.\n\t\t// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'\n\t\t// `attributes` [OPTIONAL] is the Object of attribute name/attribute value pairs to set on the stylesheet's DOM Element.\n\t\tvar doc = w.document;\n\t\tvar ss = doc.createElement( \"link\" );\n\t\tvar ref;\n\t\tif( before ){\n\t\t\tref = before;\n\t\t}\n\t\telse {\n\t\t\tvar refs = ( doc.body || doc.getElementsByTagName( \"head\" )[ 0 ] ).childNodes;\n\t\t\tref = refs[ refs.length - 1];\n\t\t}\n\n\t\tvar sheets = doc.styleSheets;\n\t\t// Set any of the provided attributes to the stylesheet DOM Element.\n\t\tif( attributes ){\n\t\t\tfor( var attributeName in attributes ){\n\t\t\t\tif( attributes.hasOwnProperty( attributeName ) ){\n\t\t\t\t\tss.setAttribute( attributeName, attributes[attributeName] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tss.rel = \"stylesheet\";\n\t\tss.href = href;\n\t\t// temporarily set media to something inapplicable to ensure it'll fetch without blocking render\n\t\tss.media = \"only x\";\n\n\t\t// wait until body is defined before injecting link. This ensures a non-blocking load in IE11.\n\t\tfunction ready( cb ){\n\t\t\tif( doc.body ){\n\t\t\t\treturn cb();\n\t\t\t}\n\t\t\tsetTimeout(function(){\n\t\t\t\tready( cb );\n\t\t\t});\n\t\t}\n\t\t// Inject link\n\t\t\t// Note: the ternary preserves the existing behavior of \"before\" argument, but we could choose to change the argument to \"after\" in a later release and standardize on ref.nextSibling for all refs\n\t\t\t// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/\n\t\tready( function(){\n\t\t\tref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );\n\t\t});\n\t\t// A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.\n\t\tvar onloadcssdefined = function( cb ){\n\t\t\tvar resolvedHref = ss.href;\n\t\t\tvar i = sheets.length;\n\t\t\twhile( i-- ){\n\t\t\t\tif( sheets[ i ].href === resolvedHref ){\n\t\t\t\t\treturn cb();\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTimeout(function() {\n\t\t\t\tonloadcssdefined( cb );\n\t\t\t});\n\t\t};\n\n\t\tfunction loadCB(){\n\t\t\tif( ss.addEventListener ){\n\t\t\t\tss.removeEventListener( \"load\", loadCB );\n\t\t\t}\n\t\t\tss.media = media || \"all\";\n\t\t}\n\n\t\t// once loaded, set link's media back to `all` so that the stylesheet applies once it loads\n\t\tif( ss.addEventListener ){\n\t\t\tss.addEventListener( \"load\", loadCB);\n\t\t}\n\t\tss.onloadcssdefined = onloadcssdefined;\n\t\tonloadcssdefined( loadCB );\n\t\treturn ss;\n\t};\n\t// commonjs\n\tif( typeof exports !== \"undefined\" ){\n\t\texports.loadCSS = loadCSS;\n\t}\n\telse {\n\t\tw.loadCSS = loadCSS;\n\t}\n}( typeof global !== \"undefined\" ? global : this ));\n","import rgb from 'color-space/rgb.js';\nimport xyz from 'color-space/xyz.js';\nimport lab from 'color-space/lab.js';\n\nfunction _filled_array(fillWith, count) {\n const array = [];\n for (let i = 0; i < count; i++) {\n array.push(fillWith);\n }\n return array;\n}\nfunction euclidean_distance_squared_index(a, a_start, b) {\n const r = a[a_start++] - b[0];\n const g = a[a_start++] - b[1];\n const _b = a[a_start++] - b[2];\n return r ** 2 + g ** 2 + _b ** 2;\n}\nfunction kmeans(data, k, maxAttempt, thresold = 2, clipAlpha = false) {\n const cluster_sum = [];\n const thresold_squared = thresold ** 2;\n let pixelCount = data.length / 4;\n let cluster_centers = [];\n let new_cluster_centers = [];\n let iteration = 0;\n const isDataTypedArray = data instanceof Uint8ClampedArray;\n const PIXEL_LEN = clipAlpha ? 3 : 4;\n if (clipAlpha) {\n let j = 0;\n const dataNoAlpha = isDataTypedArray ? new Uint8ClampedArray(pixelCount * 3) : [];\n for (let i = 0; i < data.length; ) {\n if (data[i + 3] == 0) {\n i += 4;\n continue;\n }\n dataNoAlpha[j++] = data[i++];\n dataNoAlpha[j++] = data[i++];\n dataNoAlpha[j++] = data[i++];\n i++;\n }\n data = dataNoAlpha.slice(0, j);\n pixelCount = j / 3;\n }\n for (let i = 0; i < k; i++) {\n const start = Math.floor(1 * (pixelCount - 1)) * PIXEL_LEN;\n cluster_centers.push(\n /* Array.from */\n data.slice(start, start + 3)\n );\n new_cluster_centers.push(isDataTypedArray ? new Uint8ClampedArray(3) : _filled_array(0, 3));\n cluster_sum.push(_filled_array(0, 4));\n }\n while (iteration < maxAttempt) {\n for (let i = 0; i < data.length; ) {\n let cluster_index = 0;\n let _min_distance = euclidean_distance_squared_index(data, i, cluster_centers[0]);\n for (let j = 1; j < k; j++) {\n const distance = euclidean_distance_squared_index(data, i, cluster_centers[j]);\n if (distance < _min_distance) {\n _min_distance = distance;\n cluster_index = j;\n }\n }\n const sum = cluster_sum[cluster_index];\n sum[0] += data[i++];\n sum[1] += data[i++];\n sum[2] += data[i++];\n sum[3]++;\n if (PIXEL_LEN === 4) i++;\n }\n let allStabled = true;\n for (let i = 0; i < k; i++) {\n const rgbc = cluster_sum[i];\n const count = rgbc[3];\n if (count == 0) {\n const start = Math.floor(Math.random() * (pixelCount - 1)) * PIXEL_LEN;\n new_cluster_centers[i] = /* Array.from */\n data.slice(start, start + 3);\n allStabled = false;\n } else {\n let new_center = new_cluster_centers[i];\n let diffSquared = 0;\n for (let j = 0; j < 3; j++) {\n new_center[j] = rgbc[j] / count;\n diffSquared += (new_center[j] - cluster_centers[i][j]) ** 2;\n }\n if (diffSquared > thresold_squared) {\n allStabled = false;\n }\n }\n }\n if (allStabled) {\n return {\n centroid: new_cluster_centers,\n iteration,\n fit: true,\n label: cluster_sum.map((v) => v[3]),\n size: pixelCount\n };\n }\n const medium = cluster_centers;\n cluster_centers = new_cluster_centers;\n new_cluster_centers = medium;\n iteration++;\n for (let i = 0; i < k; i++) {\n cluster_sum[i].fill(0);\n }\n }\n return {\n centroid: cluster_centers,\n iteration,\n fit: false,\n label: cluster_sum.map((v) => v[3]),\n size: pixelCount\n };\n}\n\n/**\n * NeuQuant Neural-Network Quantization Algorithm\n *\n * Copyright (c) 1994 Anthony Dekker\n *\n * See \"Kohonen neural networks for optimal colour quantization\" in \"Network:\n * Computation in Neural Systems\" Vol. 5 (1994) pp 351-367. for a discussion of\n * the algorithm.\n *\n * See also http://members.ozemail.com.au/~dekker/NEUQUANT.HTML\n *\n * Any party obtaining a copy of these files from the author, directly or\n * indirectly, is granted, free of charge, a full and unrestricted irrevocable,\n * world-wide, paid up, royalty-free, nonexclusive right and license to deal in\n * this software and documentation files (the \"Software\"), including without\n * limitation the rights to use, copy, modify, merge, publish, distribute,\n * sublicense, and/or sell copies of the Software, and to permit persons who\n * receive copies from any such party to do so, with the only requirement being\n * that this copyright notice remain intact.\n *\n * Copyright (c) 2012 Johan Nordberg (JavaScript port)\n * Copyright (c) 2014 Devon Govett (JavaScript port)\n */\n\nconst prime1 = 499;\nconst prime2 = 491;\nconst prime3 = 487;\nconst prime4 = 503;\n\nconst maxprime = Math.max(prime1, prime2, prime3, prime4);\nconst minpicturebytes = (3 * maxprime);\n\nconst defaults = {\n ncycles: 100,\n netsize: 256,\n samplefac: 10\n};\n\nconst assign = function (target) {\n for (let i = 1, l = arguments.length; i < l; i++) {\n const nextSource = arguments[i];\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n target[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return target\n};\n\nclass NeuQuant {\n constructor (pixels, options) {\n assign(this, defaults, {pixels}, options);\n\n if (this.netsize < 4 || this.netsize > 256) {\n throw new Error('Color count must be between 4 and 256')\n }\n\n if (this.samplefac < 1 || this.samplefac > 30) {\n throw new Error('Sampling factor must be between 1 and 30')\n }\n\n this.maxnetpos = this.netsize - 1;\n\n this.netbiasshift = 4;\n this.intbiasshift = 16;\n this.intbias = (1 << this.intbiasshift);\n this.gammashift = 10;\n this.gamma = (1 << this.gammashift);\n this.betashift = 10;\n this.beta = (this.intbias >> this.betashift);\n this.betagamma = (this.beta * this.gamma);\n\n this.initrad = (this.netsize >> 3);\n this.radiusbiasshift = 6;\n this.radiusbias = (1 << this.radiusbiasshift);\n this.initradius = (this.initrad * this.radiusbias);\n this.radiusdec = 30;\n\n this.alphabiasshift = 10;\n this.initalpha = (1 << this.alphabiasshift);\n\n this.radbiasshift = 8;\n this.radbias = (1 << this.radbiasshift);\n this.alpharadbshift = (this.alphabiasshift + this.radbiasshift);\n this.alpharadbias = (1 << this.alpharadbshift);\n\n this.network = [];\n this.netindex = new Uint32Array(256);\n this.bias = new Uint32Array(this.netsize);\n this.freq = new Uint32Array(this.netsize);\n this.radpower = new Uint32Array(this.netsize >> 3);\n\n for (let i = 0, l = this.netsize; i < l; i++) {\n let v = (i << (this.netbiasshift + 8)) / this.netsize;\n this.network[i] = new Float64Array([v, v, v, 0]);\n this.freq[i] = this.intbias / this.netsize;\n this.bias[i] = 0;\n }\n }\n\n unbiasnet () {\n for (let i = 0, l = this.netsize; i < l; i++) {\n this.network[i][0] >>= this.netbiasshift;\n this.network[i][1] >>= this.netbiasshift;\n this.network[i][2] >>= this.netbiasshift;\n this.network[i][3] = i;\n }\n }\n\n altersingle (alpha, i, b, g, r) {\n this.network[i][0] -= (alpha * (this.network[i][0] - b)) / this.initalpha;\n this.network[i][1] -= (alpha * (this.network[i][1] - g)) / this.initalpha;\n this.network[i][2] -= (alpha * (this.network[i][2] - r)) / this.initalpha;\n }\n\n alterneigh (radius, i, b, g, r) {\n const lo = Math.abs(i - radius);\n const hi = Math.min(i + radius, this.netsize);\n\n let j = i + 1;\n let k = i - 1;\n let m = 1;\n\n while ((j < hi) || (k > lo)) {\n const a = this.radpower[m++];\n\n if (j < hi) {\n const p = this.network[j++];\n p[0] -= (a * (p[0] - b)) / this.alpharadbias;\n p[1] -= (a * (p[1] - g)) / this.alpharadbias;\n p[2] -= (a * (p[2] - r)) / this.alpharadbias;\n }\n\n if (k > lo) {\n const p = this.network[k--];\n p[0] -= (a * (p[0] - b)) / this.alpharadbias;\n p[1] -= (a * (p[1] - g)) / this.alpharadbias;\n p[2] -= (a * (p[2] - r)) / this.alpharadbias;\n }\n }\n }\n\n contest (b, g, r) {\n let bestd = ~(1 << 31);\n let bestbiasd = bestd;\n let bestpos = -1;\n let bestbiaspos = bestpos;\n\n for (let i = 0, l = this.netsize; i < l; i++) {\n let n = this.network[i];\n\n let dist = Math.abs(n[0] - b) + Math.abs(n[1] - g) + Math.abs(n[2] - r);\n if (dist < bestd) {\n bestd = dist;\n bestpos = i;\n }\n\n let biasdist = dist - ((this.bias[i]) >> (this.intbiasshift - this.netbiasshift));\n if (biasdist < bestbiasd) {\n bestbiasd = biasdist;\n bestbiaspos = i;\n }\n\n let betafreq = (this.freq[i] >> this.betashift);\n this.freq[i] -= betafreq;\n this.bias[i] += (betafreq << this.gammashift);\n }\n\n this.freq[bestpos] += this.beta;\n this.bias[bestpos] -= this.betagamma;\n\n return bestbiaspos\n }\n\n inxbuild () {\n let previouscol = 0;\n let startpos = 0;\n\n for (let i = 0, l = this.netsize; i < l; i++) {\n let p = this.network[i];\n let q = null;\n let smallpos = i;\n let smallval = p[1];\n\n for (let j = i + 1; j < l; j++) {\n q = this.network[j];\n if (q[1] < smallval) {\n smallpos = j;\n smallval = q[1];\n }\n }\n q = this.network[smallpos];\n\n if (i !== smallpos) {\n [p[0], q[0]] = [q[0], p[0]];\n [p[1], q[1]] = [q[1], p[1]];\n [p[2], q[2]] = [q[2], p[2]];\n [p[3], q[3]] = [q[3], p[3]];\n }\n\n if (smallval !== previouscol) {\n this.netindex[previouscol] = (startpos + i) >> 1;\n for (let j = previouscol + 1; j < smallval; j++) {\n this.netindex[j] = i;\n }\n previouscol = smallval;\n startpos = i;\n }\n }\n\n this.netindex[previouscol] = (startpos + this.maxnetpos) >> 1;\n for (let i = previouscol + 1; i < 256; i++) {\n this.netindex[i] = this.maxnetpos;\n }\n }\n\n learn () {\n const lengthcount = this.pixels.length;\n const alphadec = 30 + ((this.samplefac - 1) / 3);\n const samplepixels = lengthcount / (3 * this.samplefac);\n\n let delta = samplepixels / this.ncycles | 0;\n let alpha = this.initalpha;\n let radius = this.initradius;\n\n let rad = radius >> this.radiusbiasshift;\n\n if (rad <= 1) {\n rad = 0;\n }\n\n for (let i = 0; i < rad; i++) {\n this.radpower[i] = alpha * (((rad * rad - i * i) * this.radbias) / (rad * rad));\n }\n\n let step;\n if (lengthcount < minpicturebytes) {\n this.samplefac = 1;\n step = 3;\n } else if ((lengthcount % prime1) !== 0) {\n step = 3 * prime1;\n } else if ((lengthcount % prime2) !== 0) {\n step = 3 * prime2;\n } else if ((lengthcount % prime3) !== 0) {\n step = 3 * prime3;\n } else {\n step = 3 * prime4;\n }\n\n let pix = 0;\n\n for (let i = 0; i < samplepixels;) {\n let b = (this.pixels[pix] & 0xff) << this.netbiasshift;\n let g = (this.pixels[pix + 1] & 0xff) << this.netbiasshift;\n let r = (this.pixels[pix + 2] & 0xff) << this.netbiasshift;\n\n let j = this.contest(b, g, r);\n this.altersingle(alpha, j, b, g, r);\n if (rad !== 0) {\n this.alterneigh(rad, j, b, g, r);\n }\n\n pix += step;\n if (pix >= lengthcount) {\n pix -= lengthcount;\n }\n\n if (delta === 0) {\n delta = 1;\n }\n\n if (++i % delta === 0) {\n alpha -= alpha / alphadec;\n radius -= radius / this.radiusdec;\n rad = radius >> this.radiusbiasshift;\n\n if (rad <= 1) {\n rad = 0;\n }\n\n for (let k = 0; k < rad; k++) {\n this.radpower[k] = alpha * (((rad * rad - k * k) * this.radbias) / (rad * rad));\n }\n }\n }\n }\n\n buildColorMap () {\n this.learn();\n this.unbiasnet();\n this.inxbuild();\n }\n\n getColorMap () {\n const map = new Uint8Array(this.netsize * 3);\n const index = new Uint8Array(this.netsize);\n\n for (let i = 0, l = this.netsize; i < l; i++) {\n index[this.network[i][3]] = i;\n }\n\n for (let i = 0, j = 0, k = 0, l = this.netsize; i < l; i++) {\n k = index[i];\n map[j++] = this.network[k][0] & 0xff;\n map[j++] = this.network[k][1] & 0xff;\n map[j++] = this.network[k][2] & 0xff;\n }\n\n return map\n }\n}\n\nfunction findClosest (palette, r, g, b) {\n let minpos = 0;\n let mind = 256 * 256 * 256;\n\n for (let i = 0, l = palette.length; i < l;) {\n const dr = r - palette[i++];\n const dg = g - palette[i++];\n const db = b - palette[i];\n const d = dr * dr + dg * dg + db * db;\n const pos = i / 3 | 0;\n\n if (d < mind) {\n mind = d;\n minpos = pos;\n }\n\n i++;\n }\n\n return minpos\n}\n\nfunction palette (pixels, options) {\n const nq = new NeuQuant(pixels, options);\n nq.buildColorMap();\n return nq.getColorMap()\n}\n\nfunction indexed (pixels, palette) {\n const indexed = new Uint8Array(pixels.length / 3);\n const memo = {};\n\n for (let i = 0, j = 0, l = pixels.length; i < l;) {\n const r = pixels[i++];\n const g = pixels[i++];\n const b = pixels[i++];\n const k = r << 16 | g << 8 | b;\n\n if (k in memo) {\n indexed[j++] = memo[k];\n } else {\n indexed[j++] = memo[k] = findClosest(palette, r, g, b);\n }\n }\n\n return indexed\n}\n\nfunction rgba2Rgb(data) {\n const rgb = new Uint8ClampedArray(data.length / 4 * 3);\n const len = data.length;\n let rgb_i = 0;\n for (let i = 0; i < len; ) {\n for (let j = 0; j < 3; j++) {\n rgb[rgb_i++] = data[i++];\n }\n i++;\n }\n return rgb;\n}\nfunction neuquant(img, k, samplefac = 1) {\n const img_rgb = rgba2Rgb(img);\n const palette$1 = palette(img_rgb, { netsize: k, samplefac });\n const indexed_pixel = indexed(img_rgb, palette$1);\n const pixel = [];\n const len = palette$1.length;\n for (let i = 0; i < len; ) {\n pixel.push([palette$1[i++], palette$1[i++], palette$1[i++], 255]);\n }\n return { centroid: pixel, label: count(k, indexed_pixel) };\n}\nfunction count(k, index) {\n const counts = new Array(k).fill(0);\n for (const i of index) {\n counts[i]++;\n }\n return counts;\n}\n\nfunction _prepare2DContext(width, height) {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.height = height;\n canvas.width = width;\n return ctx;\n}\nfunction _prepare2DContextAsync(width, height) {\n const canvas = new OffscreenCanvas(width, height);\n const ctx = canvas.getContext(\"2d\");\n return ctx;\n}\nfunction awaitImage(imgElement) {\n return new Promise((resolve, reject) => {\n if (imgElement.complete) {\n resolve();\n } else {\n imgElement.addEventListener(\"load\", (e) => {\n resolve(e);\n });\n imgElement.addEventListener(\"error\", (reason) => {\n reject(reason);\n });\n }\n });\n}\nfunction _readImage(prepareCtx, imgSource) {\n const { naturalWidth, naturalHeight } = imgSource;\n const ctx = prepareCtx(naturalWidth, naturalHeight);\n ctx.drawImage(imgSource, 0, 0, naturalWidth, naturalHeight);\n return ctx.getImageData(0, 0, naturalWidth, naturalHeight);\n}\nconst readImage = _readImage.bind(void 0, _prepare2DContext);\nconst readImageOffscreen = _readImage.bind(void 0, _prepare2DContextAsync);\nfunction _readImageDownsampling(prepareCtx, imgSource, maxSample) {\n let { naturalWidth: width, naturalHeight: height } = imgSource;\n const scale = width * height / maxSample;\n if (scale > 1) {\n const scaleSqrt = Math.sqrt(scale);\n width = width / scaleSqrt | 0;\n height = height / scaleSqrt | 0;\n }\n const ctx = prepareCtx(width, height);\n ctx.drawImage(imgSource, 0, 0, width, height);\n return ctx.getImageData(0, 0, width, height);\n}\nconst readImageDownsampling = _readImageDownsampling.bind(void 0, _prepare2DContext);\nconst readImageDownsamplingOffscreen = _readImageDownsampling.bind(void 0, _prepare2DContextAsync);\n\nfunction convertToLab(source) {\n const array = [];\n for (let i = 0; i < source.length; i += 4) {\n const pixel = source.slice(i, i + 4);\n const alpha = pixel[3];\n const pixel_rgb = pixel.slice(0, 3);\n const pixel_xyz = rgb.xyz(pixel_rgb);\n const pixel_lab = xyz.lab(pixel_xyz);\n array.push(...pixel_lab, alpha);\n }\n return array;\n}\nfunction labaToRGBA(laba) {\n const pixel_lab = laba.slice(0, 3);\n const alpha = laba[3];\n const pixel_xyz = lab.xyz(pixel_lab);\n const pixel_rgb = xyz.rgb(pixel_xyz);\n pixel_rgb.push(alpha);\n return pixel_rgb;\n}\n\nfunction max_min_of_three([a, b, c]) {\n if (a > b) {\n if (b > c) {\n return [a, c];\n } else {\n if (a > c) {\n return [a, b];\n } else {\n return [c, b];\n }\n }\n } else {\n if (b > c) {\n if (c > a) {\n return [b, a];\n } else {\n return [b, c];\n }\n } else {\n return [c, a];\n }\n }\n}\n\nfunction normalizeRGBA(rgba) {\n return rgba.map((v) => v / 255);\n}\nfunction rgbaToHSLA(rgba) {\n let h, s;\n const [max, min] = max_min_of_three(rgba);\n const diff = max - min;\n const light_2x = max + min;\n if (diff == 0) {\n h = 0;\n s = 0;\n } else {\n if (max == rgba[0]) {\n const temp_h = 60 * (rgba[1] - rgba[2]) / diff;\n if (temp_h < 0) {\n h = temp_h + 360;\n } else {\n h = temp_h;\n }\n } else if (max == rgba[1]) {\n h = 60 * (rgba[2] - rgba[0]) / diff + 120;\n } else {\n h = 60 * (rgba[0] - rgba[1]) / diff + 240;\n }\n if (light_2x == 0) {\n s = 0;\n } else if (light_2x <= 1) {\n s = diff / light_2x;\n } else {\n s = diff / (2 - light_2x);\n }\n }\n return [h, s, light_2x / 2, rgba[3]];\n}\nconst getVector4Comparer = (sort = [0, 1, 2, 3]) => (a, b) => {\n let result;\n for (const s of sort) {\n result = a[s] - b[s];\n if (result != 0) {\n return result;\n }\n }\n return result;\n};\nconst hslaCSSText = ([h, s, l, a]) => `hsla(${h}deg,${s * 100}%,${l * 100}%,${a})`;\nconst rgbaCSSText = (pixel) => `rgba(${pixel.map((v) => Math.floor(v)).join(\",\")})`;\n\nexport { awaitImage, convertToLab, getVector4Comparer, hslaCSSText, kmeans, labaToRGBA, neuquant, normalizeRGBA, readImage, readImageDownsampling, readImageDownsamplingOffscreen, readImageOffscreen, rgbaCSSText, rgbaToHSLA };\n","/**\n * CIE LAB space model\n *\n * @module color-space/lab\n */\n\nimport xyz from './xyz.js';\n\nvar lab = {\n\tname: 'lab',\n\tmin: [0, -100, -100],\n\tmax: [100, 100, 100],\n\tchannel: ['lightness', 'a', 'b'],\n\talias: ['LAB', 'cielab'],\n}\n\nlab.xyz = ([l, a, b]) => {\n\tvar x, y, z, y2;\n\n\tif (l <= 8) {\n\t\ty = (l * 100) / 903.3;\n\t\ty2 = (7.787 * (y / 100)) + (16 / 116);\n\t} else {\n\t\ty = 100 * Math.pow((l + 16) / 116, 3);\n\t\ty2 = Math.pow(y / 100, 1 / 3);\n\t}\n\n\tx = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);\n\n\tz = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);\n\n\treturn [x, y, z];\n}\n\n\nexport default (lab);\n\n\nxyz.lab = ([x, y, z]) => {\n\tvar l, a, b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n","/**\n * RGB space.\n *\n * @module color-space/rgb\n */\nconst rgb = {\n\tname: 'rgb',\n\tmin: [0, 0, 0],\n\tmax: [255, 255, 255],\n\tchannel: ['red', 'green', 'blue'],\n\talias: ['RGB']\n};\n\nexport default rgb;\n","/**\n * CIE XYZ\n *\n * @module color-space/xyz\n */\nimport rgb from './rgb.js';\n\nconst xyz = {\n\tname: 'xyz',\n\tmin: [0, 0, 0],\n\tchannel: ['X', 'Y', 'Z'],\n\talias: ['XYZ', 'ciexyz', 'cie1931'],\n\n\t// Whitepoint reference values with observer/illuminant\n\t// http://en.wikipedia.org/wiki/Standard_illuminant\n\twhitepoint: {\n\t\t//1931 2°\n\t\t2: {\n\t\t\t//incadescent\n\t\t\tA: [109.85, 100, 35.585],\n\t\t\t// B:[],\n\t\t\tC: [98.074, 100, 118.232],\n\t\t\tD50: [96.422, 100, 82.521],\n\t\t\tD55: [95.682, 100, 92.149],\n\t\t\t//daylight\n\t\t\tD65: [95.045592705167, 100, 108.9057750759878],\n\t\t\tD75: [94.972, 100, 122.638],\n\t\t\t//flourescent\n\t\t\t// F1: [],\n\t\t\tF2: [99.187, 100, 67.395],\n\t\t\t// F3: [],\n\t\t\t// F4: [],\n\t\t\t// F5: [],\n\t\t\t// F6:[],\n\t\t\tF7: [95.044, 100, 108.755],\n\t\t\t// F8: [],\n\t\t\t// F9: [],\n\t\t\t// F10: [],\n\t\t\tF11: [100.966, 100, 64.370],\n\t\t\t// F12: [],\n\t\t\tE: [100, 100, 100]\n\t\t},\n\n\t\t//1964 10°\n\t\t10: {\n\t\t\t//incadescent\n\t\t\tA: [111.144, 100, 35.200],\n\t\t\tC: [97.285, 100, 116.145],\n\t\t\tD50: [96.720, 100, 81.427],\n\t\t\tD55: [95.799, 100, 90.926],\n\t\t\t//daylight\n\t\t\tD65: [94.811, 100, 107.304],\n\t\t\tD75: [94.416, 100, 120.641],\n\t\t\t//flourescent\n\t\t\tF2: [103.280, 100, 69.026],\n\t\t\tF7: [95.792, 100, 107.687],\n\t\t\tF11: [103.866, 100, 65.627],\n\t\t\tE: [100, 100, 100]\n\t\t}\n\t}\n};\n\n\n/**\n * Top values are the whitepoint’s top values, default are D65\n */\nxyz.max = xyz.whitepoint[2].D65;\n\n\n/**\n * Transform xyz to rgb\n *\n * @param {Array} _xyz Array of xyz values\n * @param {Array} white Whitepoint reference\n * @return {Array} RGB values\n */\nxyz.rgb = function (_xyz, white) {\n\t// FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then\n\twhite = white || xyz.whitepoint[2].E;\n\n\tvar x = _xyz[0] / white[0],\n\t\ty = _xyz[1] / white[1],\n\t\tz = _xyz[2] / white[2],\n\t\tr, g, b;\n\n\t// assume sRGB\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\tr = (x * 3.240969941904521) + (y * -1.537383177570093) + (z * -0.498610760293);\n\tg = (x * -0.96924363628087) + (y * 1.87596750150772) + (z * 0.041555057407175);\n\tb = (x * 0.055630079696993) + (y * -0.20397695888897) + (z * 1.056971514242878);\n\n\tr = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r = (r * 12.92);\n\n\tg = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g = (g * 12.92);\n\n\tb = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b = (b * 12.92);\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n}\n\n\n\n/**\n * RGB to XYZ\n *\n * @param {Array} rgb RGB channels\n *\n * @return {Array} XYZ channels\n */\nrgb.xyz = function (rgb, white) {\n\tvar r = rgb[0] / 255,\n\t\tg = rgb[1] / 255,\n\t\tb = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.41239079926595) + (g * 0.35758433938387) + (b * 0.18048078840183);\n\tvar y = (r * 0.21263900587151) + (g * 0.71516867876775) + (b * 0.072192315360733);\n\tvar z = (r * 0.019330818715591) + (g * 0.11919477979462) + (b * 0.95053215224966);\n\n\twhite = white || xyz.whitepoint[2].E;\n\n\treturn [x * white[0], y * white[1], z * white[2]];\n};\n\n\n\nexport default xyz;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"2065\":\"lg-2\",\"2236\":\"lg-12\",\"2661\":\"lg-6\",\"3042\":\"lg-9\",\"3103\":\"theme-color-worker\",\"5459\":\"lg-0\",\"5470\":\"lg-5\",\"6458\":\"lg-1\",\"7435\":\"lg-8\",\"8268\":\"lg-7\",\"8279\":\"lg-4\",\"8599\":\"lg-11\",\"9256\":\"lg-3\",\"9438\":\"lg-10\"}[chunkId] || chunkId) + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"1862\":1,\"7353\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(1862 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunksakurairo_scripts\"] = globalThis[\"webpackChunksakurairo_scripts\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [8538], () => (__webpack_require__(4084)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","factory","modules","installedModules","moduleId","exports","module","id","loaded","call","m","c","p","canvas","document","createElement","width","window","innerWidth","height","innerHeight","style","cssText","addEventListener","body","appendChild","context","getContext","particles","particlePointer","rendering","getRandom","min","max","Math","random","getColor","el","POWERMODE","colorful","u","getComputedStyle","color","createParticle","x","y","alpha","velocity","caret","bcr","activeElement","tagName","getAttribute","offset","selectionEnd","getBoundingClientRect","left","top","selection","getSelection","rangeCount","range","getRangeAt","startNode","startContainer","nodeType","TEXT_NODE","parentNode","getCaret","numParticles","round","shake","intensity","marginLeft","marginTop","setTimeout","requestAnimationFrame","loop","clearRect","rendered","rect","i","length","particle","globalAlpha","fillStyle","fillRect","properties","isFirefox","mozInnerScreenX","getCaretCoordinates","element","position","options","debug","querySelector","removeChild","div","computed","currentStyle","whiteSpace","nodeName","wordWrap","visibility","forEach","prop","scrollHeight","parseInt","overflowY","overflow","textContent","value","substring","replace","span","coordinates","offsetTop","offsetLeft","backgroundColor","_version_ctrl","_iro","cookie_version_control","uaMatches","Array","from","navigator","userAgent","matchAll","isSupported","checkList","_","name","version","parseFloat","Accept_Image","acceptList","Chrome","OPR","Firefox","Edg","Version","push","key","days","expires","Date","now","toUTCString","cookie","setCookie","reverse","join","getSupportedImageMimeList","txt","author_name","site_name","site_url","toLocaleDateString","copytext","e","selectionText","toString","event","selectionTxt","preventDefault","htmlData","textData","clipboardData","setData","setClipboardText","createButterbar","__","add_copyright","clipboardRef","removeEventListener","promisifyRequest","request","Promise","resolve","reject","oncomplete","onsuccess","result","onabort","onerror","error","createStore","dbName","storeName","indexedDB","open","onupgradeneeded","createObjectStore","dbp","txMode","callback","then","db","transaction","objectStore","store","bgn","blob_url","async","nextBG","changeCoverBG","getCoverPath","preBG","centerbg","site_bg_as_cover","url","backgroundImage","dispatchEvent","CustomEvent","detail","noop","parseCSSUrl","match","getCurrentBG","getAPIPath","useBGN","cover_api_url","URL","cover_api","isMobile","random_graphs_mts","searchParams","set","search","cache_cover","get","coverBG","ArrayBuffer","revokeObjectURL","createObjectURL","Blob","finally","resp","fetch","headers","Accept","status","json","message","console","warn","ok","buf","arrayBuffer","put","TypeError","delete","del","fetchThenCache","RecordedBG","lastPostCover","init_post_cover_as_bg","post_cover_as_bg","post_feature_img","getPropertyValue","trim","mediaQuery","matchMedia","inDarkMode","isInDarkMode","informDarkModeChange","nextValue","mediaQueryCallback","localStorage","getItem","matches","darkmode","turnOnDarkMode","turnOffDarkMode","saveUserSetting","ifDarkmodeShouldOn","removeItem","setItem","userTriggered","documentElement","getElementsByClassName","classList","add","remove","dm_strategy","today","getHours","checkTime","checkDarkModeSetting","dark","removeListener","addListener","btnSerif","btnSansSerif","change_font_listener","btn","dataset","setButtonState","loadFontSetting","nowFont","font_name","initFontControl","hitokoto","yiyan","getElementById","api_group","yiyan_api","api_path","innerText","res","api","data","from_who","cache_is_mobile","initIsMobileCache","refreshIsMobileCache","ev","hslaCSSText","h","s","l","a","hsl","load_post_timer","load_post","onlyOnceATime","now_href","location","href","pagination_a","contains","text","DOM","DOMParser","parseFromString","querySelectorAll","paga","paga_innerText","nextHref","main","append","dpga","addps","lazyload","code_highlight_style","post_list_show_animation","undefined","setAttribute","tempScrollTop","scrollTop","pageYOffset","scrollTo","behavior","innerHTML","elements","io","IntersectionObserver","entries","entry","isIntersecting","target","unobserve","threshold","article","observe","applyShowUpAnimation","thumbImage","extract_article_highlight","finalImageElement","src","crossOrigin","getThemeColorFromImageElement","rgba","setProperty","getHighlight","XLS_Listener","parentElement","stopPropagation","clearTimeout","XLS","intersectionRatio","_page_next","href_page_next","load_key","load_time","title","log","showcard","img","button","Error","lastMsgId","PromiseWorker","w","cb","Symbol","dispose","constructor","worker","this","payload","messageId","postMessage","extraArgs","messageToSend","rgb","r","g","b","delta","originalThemeSkinMatcing","proc","Worker","type","credentials","transfer","transferList","robustness","default","calc","currentColor","imgElement","awaitImage","imageData","readImageDownsampling","buffer","_updateThemeColorMeta","color_css","meta","content","updateThemeSkin","coverBGUrl","extract_theme_skin","_setColor","matchingColor","lightColor","initThemeColor","next","highlightHsl","typedInstance","disableTypedJsIfExist","destroy","initTypedJs","JSON","parse","ext_shared_lib","Typed","importExternal","bgvideo","videoList","movies","split","unplayedIndex","fill","map","index","aplayersToResume","_getNextRandomVideo","nextIndex","floor","splice","getVideo","video_stu","fileName","bottom","origin","getBaseName","splay","video_btn","display","float_player_on","pauseAllPlayer","play","spause","pause","player","liveplay","oncanplay","coverVideo","onended","click","video_add","coverVideoIni","videos","canPlayType","video","autoplay","Hls","reason","hls","loadSource","attachMedia","on","Events","MANIFEST_PARSED","initHLS","canPlayHandler","lazyloadPatch","poster","clearButterbar","butterBar","keep","defaults","srcset","selector","root","rootMargin","LazyLoad","elms","opts","init","obs","doLoad","image","load","toLowerCase","includes","disconnect","instance","Lazyload","STORAGE_KEY","CDN_LIST","currentCDNIndex","config","num","isNaN","getPreferCDNIndex","currentCDN","raw","resolvePath","relativePath","packageName","String","PKG_INFO","path","script","onload","defaultStr","_sakurairoi18n","_$","replacements","template","sakurairoGlobal","opt","build","BUILD_INFO","registerOnGlobal","Object","defineProperty","writable","enumerable","_sakurairo","readyFunctionList","func","isRunning","args","whileReady","fn","ready","readyState","slideToggle","duration","mode","dom","flag","transition","tagTimer","tagHeight","clientHeight","buildAPI","apiPath","params","nonce","QueryStorage","renderSearchResult","keyword","link","fa","iconfont","comments","indexOf","slice","toUpperCase","query","B","F","G","D","E","queries","array","filter","v","values","some","RegExp","test","Cx","div_href","search_close","Ty","ele","jsSearchCallback","toggle","live_search","val","otxt","sessionStorage","catch","search_a","searchFlag","oninput","_mashiro_global_skin_secter","checkSkinSecter","pattern","headertop","changeSkin","tagId","bg_url","skin_bg0","skin_bg1","skin_bg2","skin_bg3","skin_bg4","bgButtonAddListener","pre","onclick","timeSeriesReload","archives","al_li","nextElementSibling","al_expand_collapse","cursor","getElementsByTagName","al_post_list","al_post_list_first","child","expanded","auto_height","windowheight","minHeight","PE","blank","paddingTop","live","CE","comments_fold","comments_main","h3","handler","sc","js_search","loading","addSkinMenuListener","cached","tagid","closeSkinMenu","checkBgImgSetting","checkCoverBackground","land_at_home","imgError","svg404","encodeURIComponent","missing_avatars","missing_images","btn_playControl","paused","coverVideoMute","btn_volumeControl","muted","killCoverVideo","mail_me","email_name","email_domain","headertop_down","coverOffset","initEffect","effect","cfg","particlesJS","initParticle","pjax","initPjax","secondary","show_hide","activate_widget","hash","tabIndex","focus","aplayerInit","all","bgUrl","changskin","close_SkinMenu","skinMenu","mb_to_top","common","transform","smallScreenHandler","recalcuScrollbar","largeScreenHandler","scrollHandler","preload","removed","removeScreen","preload_blur","animate","backdropFilter","opacity","easing","onfinish","once","preload_screen","getTextStyle","about_us","initFooterVisibility","footer","paddingValue","offsetHeight","wrapper","checkFooterVisibility","scrollY","paddingBottom","onScroll","ticking","initFooter","PRISM_VERSION","attributes","gen_top_bar","code_a","children","lang","matchResult","className","t","hljs_click_callback","cloneElement","cloneNode","hljs_process","code","hljs","importHighlightjs","highlightElement","initLineNumbersOnLoad","PrismBaseUrl","code_highlight_prism","autoload_path","currentPrismThemeCSS","themeCSS","light","theme","theme_name","loadPrismCSS","darkmodeOn","nextCSSHref","nextCSSElement","loadCSS","prism_darkmode_callback","deattachPrismCallback","importPrismJS","Prism","plugins","autoloader","languages_path","code_highlight","loadLineNumber","loadMatchBraces","loadCommandLine","line_number_all","prompt","host","user","firstChild","fileHighlight","highlight","prism_process","j","pre_a","insertAdjacentHTML","ClipboardJS","before","media","ref","doc","ss","refs","childNodes","sheets","styleSheets","attributeName","hasOwnProperty","rel","insertBefore","nextSibling","onloadcssdefined","resolvedHref","loadCB","minpicturebytes","ncycles","netsize","samplefac","NeuQuant","pixels","arguments","nextSource","nextKey","prototype","assign","maxnetpos","netbiasshift","intbiasshift","intbias","gammashift","gamma","betashift","beta","betagamma","initrad","radiusbiasshift","radiusbias","initradius","radiusdec","alphabiasshift","initalpha","radbiasshift","radbias","alpharadbshift","alpharadbias","network","netindex","Uint32Array","bias","freq","radpower","Float64Array","unbiasnet","altersingle","alterneigh","radius","lo","abs","hi","k","contest","bestd","bestbiasd","bestpos","bestbiaspos","n","dist","biasdist","betafreq","inxbuild","previouscol","startpos","q","smallpos","smallval","learn","lengthcount","alphadec","samplepixels","step","rad","pix","buildColorMap","getColorMap","Uint8Array","findClosest","palette","minpos","mind","dr","dg","d","neuquant","img_rgb","Uint8ClampedArray","len","rgb_i","rgba2Rgb","palette$1","nq","indexed_pixel","indexed","memo","pixel","centroid","label","count","counts","_prepare2DContext","ctx","_prepare2DContextAsync","OffscreenCanvas","complete","_readImage","prepareCtx","imgSource","naturalWidth","naturalHeight","drawImage","getImageData","bind","_readImageDownsampling","maxSample","scale","scaleSqrt","sqrt","lab","z","pow","channel","alias","xyz","whitepoint","A","C","D50","D55","D65","D75","F2","F7","F11","_xyz","white","__webpack_module_cache__","__webpack_require__","cachedModule","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","keys","every","getter","__esModule","getPrototypeOf","obj","ns","create","def","current","getOwnPropertyNames","definition","o","f","chunkId","reduce","promises","miniCssF","globalThis","Function","done","needAttach","scripts","charset","timeout","nc","onScriptComplete","prev","doneFns","head","toStringTag","scriptUrl","importScripts","currentScript","loadStylesheet","fullhref","existingLinkTags","dataHref","tag","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","err","createStylesheet","installedCssChunks","miniCss","baseURI","self","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}