{"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/github.com+KotoriK+lazyload@efc7a1b081d4b865788600_znd7m7brs4mfqc4nqv46yhqepq/node_modules/lazyload/src/lazyload.ts","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.0/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/showcard.ts","webpack://sakurairo-scripts/./src/app/typed.ts","webpack://sakurairo-scripts/./src/app/video.ts","webpack://sakurairo-scripts/./src/app/web_audio.ts","webpack://sakurairo-scripts/./src/common/butterbar.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/mobile_nav.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/preload_screen.ts","webpack://sakurairo-scripts/./node_modules/.pnpm/github.com+KotoriK+neuquant-js@d27fa2f1a7a966e8dca_hfp7f4nnfdzbrzea7hubd7iapq/node_modules/neuquant-js/dist/index.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.0.0/node_modules/color-space/rgb.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.0.0/node_modules/color-space/xyz.js","webpack://sakurairo-scripts/./node_modules/.pnpm/@kotorik+palette@2.1.0/node_modules/@kotorik/palette/dist/index.modern.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.0.0/node_modules/color-space/lab.js","webpack://sakurairo-scripts/./src/app/theme-color/index.ts","webpack://sakurairo-scripts/./src/app/effect.js","webpack://sakurairo-scripts/./node_modules/.pnpm/color-space@2.0.0/node_modules/color-space/hsl.js","webpack://sakurairo-scripts/./src/app/index.js","webpack://sakurairo-scripts/./src/app/scroll_handler.ts","webpack://sakurairo-scripts/./src/app/about_us.ts","webpack://sakurairo-scripts/./src/app/post_list.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/github.com+Fuukei+activate-power-mode@af3f686f1026_ojsind3jzigwl7qponpcuqlase/node_modules/activate-power-mode/dist/activate-power-mode.js","webpack://sakurairo-scripts/./node_modules/.pnpm/promise-worker@2.0.1/node_modules/promise-worker/index.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\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};","/**\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.settings = { ...defaults, ...options };\n this.elms = elms || document.querySelectorAll(this.settings.selector);\n this.init();\n }\n elms;\n obs = null;\n settings;\n init() {\n /* Without observers load everything and bail out early. */\n if (!IntersectionObserver) {\n this.load();\n return;\n }\n const self = this;\n this.obs = new IntersectionObserver(function (entries) {\n Array.prototype.forEach.call(entries, function (entry) {\n if (entry.isIntersecting) {\n self.obs.unobserve(entry.target);\n self.doLoad(entry.target);\n }\n });\n }, {\n root: this.settings.root,\n rootMargin: this.settings.rootMargin,\n threshold: [this.settings.threshold]\n });\n this.elms.forEach((image) => {\n self.obs.observe(image);\n });\n }\n loadAndDestroy() {\n if (!this.settings) {\n return;\n }\n this.load();\n this.destroy();\n }\n load() {\n if (!this.settings) {\n return;\n }\n const { settings } = this;\n Array.prototype.forEach.call(this.elms, this.doLoad);\n }\n doLoad = (element) => {\n const { settings } = this;\n const src = element.getAttribute(settings.src);\n const srcset = element.getAttribute(settings.srcset);\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'video') {\n if (src) {\n element.src = src;\n }\n }\n else if (tagName === 'img') {\n if (src) {\n element.src = src;\n }\n if (srcset) {\n //@ts-ignore\n element.srcset = srcset;\n }\n }\n else {\n element.style.backgroundImage = \"url('\" + src + \"')\";\n }\n };\n /**\n * Destroy Lazyload Instance\n * @returns\n */\n destroy() {\n if (!this.settings) {\n return;\n }\n this.obs.disconnect();\n this.settings = null;\n }\n}\nexport const lazyload = (images, options) => new LazyLoad(images, options);\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","const UA = navigator.userAgent;\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(UA.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 \"# 商业转载请联系作者获得授权,非商业转载请注明出处。\",\n \"# For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source.\",\n \"# 协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)\",\n \"# 作者(Author):\" + _iro.author_name,\n \"# 链接(URL):\" + window.location.href,\n \"# 来源(Source):\" + _iro.site_name,\n];\nfunction setClipboardText(event, selectionTxt) {\n event.preventDefault();\n const htmlData = txt.join('
') + \"

\" + selectionTxt.replace(/\\r\\n/g, \"
\"), textData = txt.join('\\n') + \"\\n\\n\" + selectionTxt.toString().replace(/\\r\\n/g, \"\\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 createButterbar(__(\"复制成功!\"), 1000);\n }\n }\n}\n/**\n * 添加复制时的版权提示\n */\nexport default function add_copyright() {\n if (_iro.clipboardCopyright) {\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';\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 } : () => { };\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 () => parseCSSUrl(centerbg.style.backgroundImage);\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} */ \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 //document.body.style.backgroundImage = `url(${_iro.skin_bg0})`;\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","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","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 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('lib/typed.min.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 { getFileNameMain } 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\", getFileNameMain(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","import { sakurairoGlobal } from \"../common/sakurairo_global\";\nexport function web_audio() {\n if (!_iro.audio)\n return;\n //@ts-ignore\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n if (AudioContext) {\n let i = 0;\n let dom;\n const o = 1;\n const t = readSheetOption() || sheet;\n const selects = document.querySelectorAll(\".site-title, #moblieGoTop, .site-branding, .searchbox, .changeSkin-gear, .menu-list li\");\n const notes = \"♪ ♩ ♫ ♬ ♭ € § ¶ ♯\".split(\" \");\n const ctx = new AudioContext;\n const listener = (e) => {\n if (dom)\n return;\n let r = t[i];\n if (!r) {\n (i = 0, r = t[i]);\n }\n i += o;\n const c = ctx.createOscillator(), l = ctx.createGain(), mainGain = ctx.createGain();\n c.connect(l);\n l.connect(mainGain);\n mainGain.connect(ctx.destination);\n mainGain.gain.setValueAtTime(sakurairoGlobal.opt.web_audio?.main_gain || 1, ctx.currentTime);\n c.type = \"sine\";\n c.frequency.value = r;\n l.gain.setValueAtTime(0, ctx.currentTime);\n l.gain.linearRampToValueAtTime(1, ctx.currentTime + .01);\n c.start(ctx.currentTime);\n l.gain.exponentialRampToValueAtTime(.001, ctx.currentTime + 1);\n c.stop(ctx.currentTime + 1);\n const d = Math.round(7 * Math.random());\n const h = e.pageX;\n const p = e.pageY - 5;\n dom = document.createElement(\"b\");\n dom.textContent = notes[d];\n dom.style.zIndex = \"99999\";\n dom.style.top = p - 100 + \"px\";\n dom.style.left = h + \"px\";\n dom.style.position = \"absolute\";\n dom.style.color = \"#FF6EB4\";\n document.body.appendChild(dom);\n dom.animate([\n { top: p + \"px\" },\n { opacity: 0 }\n ], {\n duration: 500\n });\n setTimeout(() => {\n dom.remove();\n dom = null;\n }, 500);\n };\n selects.forEach((select) => {\n select.addEventListener(\"mouseenter\", listener);\n });\n }\n}\n//欢乐颂\n/*t = \"329.628 329.628 349.228 391.995 391.995 349.228 329.628 293.665 261.626 261.626 293.665 329.628 329.628 293.665 293.665 329.628 329.628 349.228 391.995 391.995 349.228 329.628 293.665 261.626 261.626 293.665 329.628 293.665 261.626 261.626 293.665 293.665 329.628 261.626 293.665 329.628 349.228 329.628 261.626 293.665 329.628 349.228 329.628 293.665 261.626 293.665 195.998 329.628 329.628 349.228 391.995 391.995 349.228 329.628 293.665 261.626 261.626 293.665 329.628 293.665 261.626 261.626\".split(\" \")*/\n//天空之城\nconst sheet = \"880 987 1046 987 1046 1318 987 659 659 880 784 880 1046 784 659 659 698 659 698 1046 659 1046 1046 1046 987 698 698 987 987 880 987 1046 987 1046 1318 987 659 659 880 784 880 1046 784 659 698 1046 987 1046 1174 1174 1174 1046 1046 880 987 784 880 1046 1174 1318 1174 1318 1567 1046 987 1046 1318 1318 1174 784 784 880 1046 987 1174 1046 784 784 1396 1318 1174 659 1318 1046 1318 1760 1567 1567 1318 1174 1046 1046 1174 1046 1174 1567 1318 1318 1760 1567 1318 1174 1046 1046 1174 1046 1174 987 880 880 987 880\".split(\" \");\nfunction readSheetOption() {\n const sheet = sakurairoGlobal.opt.web_audio?.sheet;\n if (typeof sheet == 'string') {\n return sheet.split(' ');\n }\n else if (sheet instanceof Array) {\n return sheet;\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","import { ready } from \"./util\";\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://jsd.nmxc.ltd/npm/\", \"@\", \"/\", \"\"],\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包版本,默认为latest\n * @returns 从当前cdn访问该文件的url\n */\nexport const resolvePath = (relativePath, packageName, version) => String.raw(currentCDN, packageName, version || PKG_INFO[packageName] || 'latest', relativePath);\nconst resolvePathByCDN = (cdn, relativePath, moduleName, version) => String.raw({ raw: cdn }, moduleName, version, relativePath);\nfunction isServedByCurrentCDN(path) {\n const cdnMatchKey = CDN_LIST[currentCDNIndex][0];\n if (path.match(cdnMatchKey)) {\n return true;\n }\n}\nfunction analyze(time = 30000) {\n let failedCounts = 0;\n let totalCounts = 0;\n const observer = new PerformanceObserver((list, observer) => {\n for (const entry of list.getEntries()) {\n if (isServedByCurrentCDN(entry.name)) {\n totalCounts++;\n const { transferSize } = entry;\n if (transferSize == 0) {\n //可能是资源未能成功下载\n failedCounts++;\n }\n }\n }\n });\n observer.observe({ entryTypes: ['resource'] });\n setTimeout(() => {\n observer.disconnect();\n if (failedCounts / totalCounts > 0.7) {\n //切换cdn\n const nextCDN = currentCDNIndex + 1;\n localStorage.setItem(STORAGE_KEY, (nextCDN >= CDN_LIST.length ? 0 : nextCDN).toString());\n }\n }, time);\n}\nready(analyze);\n//TODO\n//测试cdn对实例资源的访问表现\nasync function testCDN() {\n await Promise.allSettled(CDN_LIST.map((cdn) => \n //baguettebox.js@1.11.1/dist/baguetteBox.min.css\n fetch(resolvePathByCDN(cdn, 'dist/baguetteBox.min.css', 'baguettebox.js', '1.11.1'))));\n}\nexport const importExternal = (path, packageName, version) => {\n const script = document.createElement('script');\n script.src = resolvePath(path, packageName, version);\n script.async = true;\n //TODO: 超时处理\n return new Promise((resolve) => {\n script.onload = resolve;\n script.onerror = () => {\n console.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 getFileNameMain = (fileName) => fileName.replace(/\\.\\w+$/, '');\nexport function slideToggle(el, duration = 1000, mode = '', callback) {\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 if (callback)\n callback();\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","const mainContainer = document.getElementById(\"main-container\");\nfunction toggle() {\n document.body.classList.toggle(\"navOpen\");\n mainContainer.classList.toggle(\"open\");\n document.getElementById(\"mo-nav\").classList.toggle(\"open\");\n document.querySelector(\".openNav\").classList.toggle(\"open\");\n document.querySelector(\".site-header\").classList.toggle(\"open\");\n}\nexport function open() {\n toggle();\n document.documentElement.style.overflow = \"hidden\";\n mainContainer.addEventListener('click', close);\n}\nexport function close() {\n toggle();\n document.documentElement.style.overflow = \"unset\";\n mainContainer.removeEventListener('click', close);\n}\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 'lazyload'\r\nimport { slideToggle } from \"../common/util\";\r\nimport { changeCoverBG, getCoverPath, getCurrentBG, nextBG, preBG } from \"./coverBackground\";\r\nimport { isMobile } from \"./mobile\";\r\nimport { open, close } from './mobile_nav'\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 let archives = document.getElementById('archives');\r\n if (archives == null) return;\r\n let al_li = archives.getElementsByClassName('al_mon');\r\n if (flag == true) {\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 const cb = () => {\r\n slideToggle(al_post_list_first, 500, 'show');\r\n }\r\n for (const child of al_post_list) {\r\n slideToggle(child, 500, 'hide', cb)\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 let al_expand_collapse_click = 0;\r\n al_expand_collapse.addEventListener('click', () => {\r\n if (al_expand_collapse_click == 0) {\r\n for (let i = 0; i < al_post_list.length; i++) {\r\n let el = al_post_list[i];\r\n slideToggle(el, 500, 'show');\r\n }\r\n al_expand_collapse_click++;\r\n } else if (al_expand_collapse_click == 1) {\r\n for (let i = 0; i < al_post_list.length; i++) {\r\n let el = al_post_list[i];\r\n slideToggle(el, 500, 'hide');\r\n }\r\n al_expand_collapse_click--;\r\n }\r\n });\r\n }\r\n }\r\n}\r\n//#region Siren\r\nimport { liveplay, livepause, } from './video'\r\nexport function MN() {\r\n const iconflat = document.querySelector(\".iconflat\");\r\n iconflat && iconflat.addEventListener(\"click\", (e) => {\r\n e.stopPropagation()\r\n if (document.body.classList.contains(\"navOpen\")) {\r\n close()\r\n } else {\r\n open()\r\n }\r\n });\r\n}\r\n\r\nexport function MNH() {\r\n if (document.body.classList.contains(\"navOpen\")) {\r\n close()\r\n }\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 livepause();\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\nexport function collapseMenu() {\r\n const show_Nav = document.getElementById(\"show-nav\");\r\n show_Nav && show_Nav.addEventListener(\"click\", () => {\r\n const sln = document.querySelector(\".site-top .lower nav\");\r\n if (show_Nav.classList.contains(\"showNav\")) {\r\n show_Nav.classList.remove(\"showNav\");\r\n show_Nav.classList.add(\"hideNav\");\r\n sln && sln.classList.add(\"navbar\");\r\n } else {\r\n show_Nav.classList.remove(\"hideNav\");\r\n show_Nav.classList.add(\"showNav\");\r\n sln && sln.classList.remove(\"navbar\");\r\n }\r\n });\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) {\n switch (type) {\n case 1:\n ele.src = 'https://s.nmxc.ltd/sakurairo_vision/@2.6/basic/friendlink.jpg';\n break;\n case 2:\n ele.src = 'https://sdn.geekzu.org/avatar/?s=80&d=mm&r=g';\n break;\n default:\n ele.src = 'https://s.nmxc.ltd/sakurairo_vision/@2.6/basic/image-404.png';\n }\n}\nfunction cmt_showPopup(ele) {\n let popup = ele.querySelector(\"#thePopup\");\n popup.classList.add(\"show\");\n ele.querySelector(\"input\").onblur = () => {\n popup.classList.remove(\"show\");\n }\n}\n/*视频feature*/\nfunction coverVideo() {\n let video = document.getElementById(\"coverVideo\"),\n btn_playControl = document.getElementById(\"cv-pc\");\n\n if (video.paused) {\n video.play();\n try {\n btn_playControl.innerHTML = '';\n } catch { }\n //console.info('play:coverVideo()');\n } else {\n video.pause();\n try {\n btn_playControl.innerHTML = '';\n } catch { }\n //console.info('pause:coverVideo()');\n }\n}\nfunction coverVideoMute() {\n const video = document.getElementById(\"coverVideo\")\n const btn_volumeControl = document.getElementById(\"cv-vc\");\n if (video.muted) {\n video.muted = false\n btn_volumeControl.innerHTML = ''\n } else {\n video.muted = true\n btn_volumeControl.innerHTML = ''\n }\n}\nfunction killCoverVideo() {\n var video = document.getElementById(\"coverVideo\");\n var btn_playControl = document.getElementById(\"cv-pc\");\n\n if (video.paused) {\n //console.info('none:killCoverVideo()');\n } else {\n video.pause();\n try {\n btn_playControl.innerHTML = '';\n } catch (e) { }\n //console.info('pause:killCoverVideo()');\n }\n}\n\nfunction mail_me() {\n window.open(\"mailto:\" + _iro.email_name + \"@\" + _iro.email_domain);\n}\n/* 首页下拉箭头 */\nfunction headertop_down() {\n let coverOffset = document.getElementById(\"content\").getBoundingClientRect().top + window.pageYOffset;\n window.scrollTo({\n top: coverOffset,\n behavior: \"smooth\"\n });\n}\nwindow.imgError = imgError\nwindow.cmt_showPopup = cmt_showPopup\nwindow.coverVideo = coverVideo\nwindow.coverVideoMute = coverVideoMute\nwindow.killCoverVideo = killCoverVideo\nwindow.mail_me = mail_me\nwindow.headertop_down = headertop_down","export default function () {\n const preload = document.getElementById(\"preload\");\n if (preload) {\n if (document.readyState === 'complete')\n return removeScreen(preload);\n window.addEventListener('load', () => {\n removeScreen(preload);\n });\n }\n}\nfunction removeScreen(preload) {\n document.documentElement.style.overflowY = 'unset';\n if (_iro.preload_blur != 0) {\n try {\n preload.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\" }).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 setTimeout(() => preload.remove(), 233);\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\nvar prime1 = 499;\nvar prime2 = 491;\nvar prime3 = 487;\nvar prime4 = 503;\nvar maxprime = Math.max(prime1, prime2, prime3, prime4);\nvar minpicturebytes = 3 * maxprime;\nvar defaults = {\n ncycles: 100,\n netsize: 256,\n samplefac: 10\n};\nvar assign = function assign(target) {\n for (var i = 1, l = arguments.length; i < l; i++) {\n var nextSource = arguments[i];\n if (nextSource != null) {\n for (var nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n target[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return target;\n};\nvar NeuQuant = /*#__PURE__*/function () {\n function NeuQuant(pixels, options) {\n assign(this, defaults, {\n pixels: pixels\n }, options);\n if (this.netsize < 4 || this.netsize > 256) {\n throw new Error('Color count must be between 4 and 256');\n }\n if (this.samplefac < 1 || this.samplefac > 30) {\n throw new Error('Sampling factor must be between 1 and 30');\n }\n this.maxnetpos = this.netsize - 1;\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 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 this.alphabiasshift = 10;\n this.initalpha = 1 << this.alphabiasshift;\n this.radbiasshift = 8;\n this.radbias = 1 << this.radbiasshift;\n this.alpharadbshift = this.alphabiasshift + this.radbiasshift;\n this.alpharadbias = 1 << this.alpharadbshift;\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 for (var i = 0, l = this.netsize; i < l; i++) {\n var 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 var _proto = NeuQuant.prototype;\n _proto.unbiasnet = function unbiasnet() {\n for (var 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 _proto.altersingle = function 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 _proto.alterneigh = function alterneigh(radius, i, b, g, r) {\n var lo = Math.abs(i - radius);\n var hi = Math.min(i + radius, this.netsize);\n var j = i + 1;\n var k = i - 1;\n var m = 1;\n while (j < hi || k > lo) {\n var a = this.radpower[m++];\n if (j < hi) {\n var 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 if (k > lo) {\n var _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 _proto.contest = function contest(b, g, r) {\n var bestd = ~(1 << 31);\n var bestbiasd = bestd;\n var bestpos = -1;\n var bestbiaspos = bestpos;\n for (var i = 0, l = this.netsize; i < l; i++) {\n var n = this.network[i];\n var 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 var biasdist = dist - (this.bias[i] >> this.intbiasshift - this.netbiasshift);\n if (biasdist < bestbiasd) {\n bestbiasd = biasdist;\n bestbiaspos = i;\n }\n var betafreq = this.freq[i] >> this.betashift;\n this.freq[i] -= betafreq;\n this.bias[i] += betafreq << this.gammashift;\n }\n this.freq[bestpos] += this.beta;\n this.bias[bestpos] -= this.betagamma;\n return bestbiaspos;\n };\n _proto.inxbuild = function inxbuild() {\n var previouscol = 0;\n var startpos = 0;\n for (var i = 0, l = this.netsize; i < l; i++) {\n var p = this.network[i];\n var q = null;\n var smallpos = i;\n var smallval = p[1];\n for (var 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 if (i !== smallpos) {\n var _ref = [q[0], p[0]];\n p[0] = _ref[0];\n q[0] = _ref[1];\n var _ref2 = [q[1], p[1]];\n p[1] = _ref2[0];\n q[1] = _ref2[1];\n var _ref3 = [q[2], p[2]];\n p[2] = _ref3[0];\n q[2] = _ref3[1];\n var _ref4 = [q[3], p[3]];\n p[3] = _ref4[0];\n q[3] = _ref4[1];\n }\n if (smallval !== previouscol) {\n this.netindex[previouscol] = startpos + i >> 1;\n for (var _j = previouscol + 1; _j < smallval; _j++) {\n this.netindex[_j] = i;\n }\n previouscol = smallval;\n startpos = i;\n }\n }\n this.netindex[previouscol] = startpos + this.maxnetpos >> 1;\n for (var _i = previouscol + 1; _i < 256; _i++) {\n this.netindex[_i] = this.maxnetpos;\n }\n };\n _proto.learn = function learn() {\n var lengthcount = this.pixels.length;\n var alphadec = 30 + (this.samplefac - 1) / 3;\n var samplepixels = lengthcount / (3 * this.samplefac);\n var delta = samplepixels / this.ncycles | 0;\n var alpha = this.initalpha;\n var radius = this.initradius;\n var rad = radius >> this.radiusbiasshift;\n if (rad <= 1) {\n rad = 0;\n }\n for (var i = 0; i < rad; i++) {\n this.radpower[i] = alpha * ((rad * rad - i * i) * this.radbias / (rad * rad));\n }\n var 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 var pix = 0;\n for (var _i2 = 0; _i2 < samplepixels;) {\n var b = (this.pixels[pix] & 0xff) << this.netbiasshift;\n var g = (this.pixels[pix + 1] & 0xff) << this.netbiasshift;\n var r = (this.pixels[pix + 2] & 0xff) << this.netbiasshift;\n var 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 pix += step;\n if (pix >= lengthcount) {\n pix -= lengthcount;\n }\n if (delta === 0) {\n delta = 1;\n }\n if (++_i2 % delta === 0) {\n alpha -= alpha / alphadec;\n radius -= radius / this.radiusdec;\n rad = radius >> this.radiusbiasshift;\n if (rad <= 1) {\n rad = 0;\n }\n for (var k = 0; k < rad; k++) {\n this.radpower[k] = alpha * ((rad * rad - k * k) * this.radbias / (rad * rad));\n }\n }\n }\n };\n _proto.buildColorMap = function buildColorMap() {\n this.learn();\n this.unbiasnet();\n this.inxbuild();\n };\n _proto.getColorMap = function getColorMap() {\n var map = new Buffer(this.netsize * 3);\n var index = new Buffer(this.netsize);\n for (var i = 0, l = this.netsize; i < l; i++) {\n index[this.network[i][3]] = i;\n }\n for (var _i3 = 0, j = 0, k = 0, _l = this.netsize; _i3 < _l; _i3++) {\n k = index[_i3];\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 return map;\n };\n return NeuQuant;\n}();\n\nfunction findClosest(palette, r, g, b) {\n var minpos = 0;\n var mind = 256 * 256 * 256;\n for (var i = 0, l = palette.length; i < l;) {\n var dr = r - palette[i++];\n var dg = g - palette[i++];\n var db = b - palette[i];\n var d = dr * dr + dg * dg + db * db;\n var pos = i / 3 | 0;\n if (d < mind) {\n mind = d;\n minpos = pos;\n }\n i++;\n }\n return minpos;\n}\nfunction palette(pixels, options) {\n var nq = new NeuQuant(pixels, options);\n nq.buildColorMap();\n return nq.getColorMap();\n}\nfunction indexed(pixels, palette) {\n var indexed = []; /* new Buffer(pixels.length / 3) */\n var memo = {};\n for (var i = 0, j = 0, l = pixels.length; i < l;) {\n var r = pixels[i++];\n var g = pixels[i++];\n var b = pixels[i++];\n var k = r << 16 | g << 8 | b;\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 return indexed;\n}\nfunction quantize(pixels, options) {\n var p = palette(pixels, options);\n var i = indexed(pixels, p);\n return {\n palette: p,\n indexed: i\n };\n}\n\nexport { indexed, palette, quantize };\n//# sourceMappingURL=index.js.map\n","/**\r\n * RGB space.\r\n *\r\n * @module color-space/rgb\r\n */\r\n\r\nexport default {\r\n\tname: 'rgb',\r\n\tmin: [0,0,0],\r\n\tmax: [255,255,255],\r\n\tchannel: ['red', 'green', 'blue'],\r\n\talias: ['RGB']\r\n};\r\n","/**\r\n * CIE XYZ\r\n *\r\n * @module color-space/xyz\r\n */\r\nimport rgb from './rgb.js';\r\n\r\nvar xyz = {\r\n\tname: 'xyz',\r\n\tmin: [0,0,0],\r\n\tchannel: ['X','Y','Z'],\r\n\talias: ['XYZ', 'ciexyz', 'cie1931']\r\n};\r\n\r\n\r\n/**\r\n * Whitepoint reference values with observer/illuminant\r\n *\r\n * http://en.wikipedia.org/wiki/Standard_illuminant\r\n */\r\nxyz.whitepoint = {\r\n\t//1931 2°\r\n\t2: {\r\n\t\t//incadescent\r\n\t\tA:[109.85, 100, 35.585],\r\n\t\t// B:[],\r\n\t\tC: [98.074, 100, 118.232],\r\n\t\tD50: [96.422, 100, 82.521],\r\n\t\tD55: [95.682, 100, 92.149],\r\n\t\t//daylight\r\n\t\tD65: [95.045592705167, 100, 108.9057750759878],\r\n\t\tD75: [94.972, 100, 122.638],\r\n\t\t//flourescent\r\n\t\t// F1: [],\r\n\t\tF2: [99.187, 100, 67.395],\r\n\t\t// F3: [],\r\n\t\t// F4: [],\r\n\t\t// F5: [],\r\n\t\t// F6:[],\r\n\t\tF7: [95.044, 100, 108.755],\r\n\t\t// F8: [],\r\n\t\t// F9: [],\r\n\t\t// F10: [],\r\n\t\tF11: [100.966, 100, 64.370],\r\n\t\t// F12: [],\r\n\t\tE: [100,100,100]\r\n\t},\r\n\r\n\t//1964 10°\r\n\t10: {\r\n\t\t//incadescent\r\n\t\tA:[111.144, 100, 35.200],\r\n\t\tC: [97.285, 100, 116.145],\r\n\t\tD50: [96.720, 100, 81.427],\r\n\t\tD55: [95.799, 100, 90.926],\r\n\t\t//daylight\r\n\t\tD65: [94.811, 100, 107.304],\r\n\t\tD75: [94.416, 100, 120.641],\r\n\t\t//flourescent\r\n\t\tF2: [103.280, 100, 69.026],\r\n\t\tF7: [95.792, 100, 107.687],\r\n\t\tF11: [103.866, 100, 65.627],\r\n\t\tE: [100,100,100]\r\n\t}\r\n};\r\n\r\n\r\n/**\r\n * Top values are the whitepoint’s top values, default are D65\r\n */\r\nxyz.max = xyz.whitepoint[2].D65;\r\n\r\n\r\n/**\r\n * Transform xyz to rgb\r\n *\r\n * @param {Array} xyz Array of xyz values\r\n *\r\n * @return {Array} RGB values\r\n */\r\nxyz.rgb = function (_xyz, white) {\r\n\t//FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then\r\n\twhite = white || xyz.whitepoint[2].E;\r\n\r\n\tvar x = _xyz[0] / white[0],\r\n\t\ty = _xyz[1] / white[1],\r\n\t\tz = _xyz[2] / white[2],\r\n\t\tr, g, b;\r\n\r\n\t// assume sRGB\r\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n\tr = (x * 3.240969941904521) + (y * -1.537383177570093) + (z * -0.498610760293);\r\n\tg = (x * -0.96924363628087) + (y * 1.87596750150772) + (z * 0.041555057407175);\r\n\tb = (x * 0.055630079696993) + (y * -0.20397695888897) + (z * 1.056971514242878);\r\n\r\n\tr = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\r\n\t\t: r = (r * 12.92);\r\n\r\n\tg = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\r\n\t\t: g = (g * 12.92);\r\n\r\n\tb = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\r\n\t\t: b = (b * 12.92);\r\n\r\n\tr = Math.min(Math.max(0, r), 1);\r\n\tg = Math.min(Math.max(0, g), 1);\r\n\tb = Math.min(Math.max(0, b), 1);\r\n\r\n\treturn [r * 255, g * 255, b * 255];\r\n}\r\n\r\n\r\n\r\n/**\r\n * RGB to XYZ\r\n *\r\n * @param {Array} rgb RGB channels\r\n *\r\n * @return {Array} XYZ channels\r\n */\r\nrgb.xyz = function(rgb, white) {\r\n\tvar r = rgb[0] / 255,\r\n\t\t\tg = rgb[1] / 255,\r\n\t\t\tb = rgb[2] / 255;\r\n\r\n\t// assume sRGB\r\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\r\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\r\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\r\n\r\n\tvar x = (r * 0.41239079926595) + (g * 0.35758433938387) + (b * 0.18048078840183);\r\n\tvar y = (r * 0.21263900587151) + (g * 0.71516867876775) + (b * 0.072192315360733);\r\n\tvar z = (r * 0.019330818715591) + (g * 0.11919477979462) + (b * 0.95053215224966);\r\n\r\n\twhite = white || xyz.whitepoint[2].E;\r\n\r\n\treturn [x * white[0], y * white[1], z * white[2]];\r\n};\r\n\r\n\r\n\r\nexport default xyz;\r\n","import { palette, indexed } from 'neuquant-js';\nimport rgb from 'color-space/rgb.js';\nimport xyz from 'color-space/xyz.js';\nimport lab from 'color-space/lab.js';\n\n/**\r\n * 返回两个四维坐标间的欧几里得距离\r\n * @param a\r\n * @param b\r\n * @returns\r\n */\nfunction euclidean_distance_squared(a, b) {\n const r = a[0] - b[0];\n const g = a[1] - b[1];\n\n const _b = a[2] - b[2];\n\n const _a = a[3] - b[3];\n\n return r ** 2 + g ** 2 + _b ** 2 + _a ** 2;\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\n const _b = a[a_start++] - b[2];\n\n const _a = a[a_start++] - b[3];\n\n return r ** 2 + g ** 2 + _b ** 2 + _a ** 2;\n}\n/**\r\n * 以数组形式返回三个数字中的最大值与最小值\r\n * @param param0 一个包含三个数字的数组\r\n * @returns [max,min]\r\n */\n\nfunction max_min_of_three([a, b, c]) {\n if (a > b) {\n if (b > c) {\n //abc\n return [a, c];\n } else {\n if (a > c) {\n //acb\n return [a, b];\n } else {\n //cab\n return [c, b];\n }\n }\n } else {\n //a c) {\n if (c > a) {\n //bca\n return [b, a];\n } else {\n //bac\n return [b, c];\n }\n } else {\n //cba\n return [c, a];\n }\n }\n}\n\nfunction kmeans(data, k, attempt, thresold = 1) {\n const cluster_sum\n /*[r,g,b,a,c]*/\n = [];\n let cluster_centers = [];\n let new_cluster_centers = [];\n let iteration = 0;\n\n for (let i = 0; i < k; i++) {\n const start = Math.floor(Math.random() * data.length);\n cluster_centers.push(Array.from(data.slice(start, start + 4))); //随机选点\n\n new_cluster_centers.push(_filled_array(0, 4));\n cluster_sum.push(_filled_array(0, 5));\n }\n\n while (iteration < attempt) {\n //准备坐标和\n //计算每个点与中心的距离\n for (let i = 0; i < data.length;) {\n let cluster_index = 0;\n\n let _min_distance = euclidean_distance_squared_index(data, i, cluster_centers[0]);\n\n for (let j = 1; j < k; j++) {\n const distance = euclidean_distance_squared_index(data, i, cluster_centers[j]);\n\n if (distance < _min_distance) {\n _min_distance = distance;\n cluster_index = j;\n }\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] += data[i++];\n sum[4]++;\n }\n\n let diff = 0; //重新计算中心点\n\n for (let i = 0; i < k; i++) {\n const rgbac = cluster_sum[i];\n const count = rgbac[4];\n\n if (count == 0) {\n //空类 重新选中心点\n const start = Math.floor(Math.random() * data.length);\n new_cluster_centers[i] = Array.from(data.slice(start, start + 4));\n diff += thresold;\n } else {\n const new_center = new_cluster_centers[i];\n\n for (let j = 0; j < 4; j++) {\n new_center[j] = rgbac[j] / count;\n }\n\n diff += Math.sqrt(euclidean_distance_squared(cluster_centers[i], new_cluster_centers[i]));\n }\n }\n\n if (diff <= thresold) {\n return {\n centroid: new_cluster_centers,\n iteration,\n fit: true,\n label: cluster_sum.map(v => v[4]),\n size: data.length\n };\n }\n\n const medium = cluster_centers;\n cluster_centers = new_cluster_centers;\n new_cluster_centers = medium;\n iteration++; //清空累加\n\n for (let i = 0; i < k; i++) {\n const sum_array = cluster_sum[i];\n sum_array[0] = 0;\n sum_array[1] = 0;\n sum_array[2] = 0;\n sum_array[3] = 0;\n sum_array[4] = 0;\n }\n }\n\n return {\n centroid: cluster_centers,\n iteration,\n fit: false,\n label: cluster_sum.map(v => v[4]),\n size: data.length\n };\n}\n\nfunction _filled_array(fillWith, count) {\n const array = [];\n\n for (let i = 0; i < count; i++) {\n array.push(fillWith);\n }\n\n return array;\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\n for (let i = 0; i < len;) {\n for (let j = 0; j < 3; j++) {\n rgb[rgb_i++] = data[i++];\n }\n\n i++;\n }\n\n return rgb;\n}\n/**\r\n * @param samplefac Sampling factor, which can be changed to increase or decrease quality at the expense of performance. The lower the number, the higher the quality.\r\n * based on 'neuquant-js'\r\n */\n\n\nfunction neuquant(img, k, samplefac = 1) {\n const img_rgb = rgba2Rgb(img);\n const palette$1 = palette(img_rgb, {\n netsize: k,\n samplefac\n });\n const indexed_pixel = indexed(img_rgb, palette$1);\n const pixel = [];\n const len = palette$1.length;\n\n for (let i = 0; i < len;) {\n pixel.push([palette$1[i++], palette$1[i++], palette$1[i++], 255]);\n }\n\n return {\n centroid: pixel,\n label: count(k, indexed_pixel)\n };\n}\n\nfunction count(k, index) {\n const counts = new Array(k).fill(0);\n\n for (const i of index) {\n counts[i]++;\n }\n\n return counts;\n}\n\nfunction _prepare2DContext(width, height) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d'); //contextType 是存在的\n\n canvas.height = height;\n canvas.width = width;\n return ctx;\n}\n/**\r\n * Use OffscreenCanvas\r\n */\n\n\nfunction _prepare2DContextAsync(width, height) {\n const canvas = new OffscreenCanvas(width, height);\n const ctx = canvas.getContext('2d');\n return ctx;\n}\n/**\r\n * a Promise resolved when is loaded\r\n * @param imgElement\r\n * @returns Event, undefined when Image is already loaded\r\n */\n\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}\nconst readImage = _readImage.bind(undefined, _prepare2DContext);\n/**\r\n * read image using OffscreenCanvas\r\n */\n\nconst readImageOffscreen = _readImage.bind(undefined, _prepare2DContextAsync);\n\nfunction _readImage(prepareCtx, imgSource) {\n const {\n naturalWidth,\n naturalHeight\n } = imgSource;\n const ctx = prepareCtx(naturalWidth, naturalHeight);\n ctx.drawImage(imgSource, 0, 0, naturalWidth, naturalHeight);\n return ctx.getImageData(0, 0, naturalWidth, naturalHeight);\n}\n/**\r\n * 降采样后读取图片\r\n * @param imgSource\r\n * @param maxSample\r\n * @returns\r\n */\n\n\nconst readImageDownsampling = _readImageDownsampling.bind(undefined, _prepare2DContext);\nconst readImageDownsamplingOffscreen = _readImageDownsampling.bind(undefined, _prepare2DContextAsync);\n\nfunction _readImageDownsampling(prepareCtx, imgSource, maxSample) {\n const {\n naturalWidth: width,\n naturalHeight: height\n } = imgSource;\n const scale = width * height / maxSample;\n\n if (scale > 1) {\n const n_width = width / Math.sqrt(scale);\n const n_height = height / Math.sqrt(scale);\n const ctx = prepareCtx(n_width, n_height);\n ctx.drawImage(imgSource, 0, 0, n_width, n_height);\n return ctx.getImageData(0, 0, n_width, n_height);\n } else {\n const ctx = prepareCtx(width, height);\n ctx.drawImage(imgSource, 0, 0);\n return ctx.getImageData(0, 0, width, height);\n }\n}\n\nfunction normalizeRGBA(rgba) {\n return rgba.map(v => v / 255);\n}\nfunction rgbaToHSLA(rgba) {\n let h, s; //@ts-ignore\n\n const [max, min] = max_min_of_three(rgba);\n const diff = max - min;\n const light_2x = max + min; //h\n\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\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\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\n return [h, s, light_2x / 2, rgba[3]];\n}\n/**\r\n * 返回一个排序HSLA颜色的函数\r\n * @param sort\r\n * @returns\r\n */\n\n\nconst getHSLAComparer = (sort = [0, 1, 2, 3]) => (a, b) => {\n let result;\n\n for (const s of sort) {\n result = a[s] - b[s];\n\n if (result != 0) {\n return result;\n }\n } //其实是赋了值的,但是ts没猜出来\n //@ts-ignore\n\n\n return result;\n};\n/**\r\n * 将颜色转换成对应的CSS文本\r\n * @param param0 像素\r\n * @returns hsla(${h}deg,${s}%,${l}%,${a})\r\n */\n\nconst hslaCSSText = ([h, s, l, a]) => `hsla(${h}deg,${s * 100}%,${l * 100}%,${a})`;\n/**\r\n * 将颜色转换成对应的CSS文本\r\n * @param pixel 像素\r\n * @returns rgba(r,g,b,a)\r\n */\n\nconst rgbaCSSText = pixel => `rgba(${pixel.map(v => Math.floor(v)).join(',')})`;\n\nfunction convertToLab(source) {\n //CIE Lab包含浮点表示,不能使用Uint8ClampedArray\n const array = [];\n\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\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\nexport { awaitImage, convertToLab, getHSLAComparer, hslaCSSText, kmeans, labaToRGBA, neuquant, normalizeRGBA, readImage, readImageDownsampling, readImageDownsamplingOffscreen, readImageOffscreen, rgbaCSSText, rgbaToHSLA };\n//# sourceMappingURL=index.modern.js.map\n","/**\r\n * CIE LAB space model\r\n *\r\n * @module color-space/lab\r\n */\r\n\r\nimport xyz from './xyz.js';\r\n\r\nexport default {\r\n\tname: 'lab',\r\n\tmin: [0,-100,-100],\r\n\tmax: [100,100,100],\r\n\tchannel: ['lightness', 'a', 'b'],\r\n\talias: ['LAB', 'cielab'],\r\n\r\n\txyz: function(lab) {\r\n\t\tvar l = lab[0],\r\n\t\t\t\ta = lab[1],\r\n\t\t\t\tb = lab[2],\r\n\t\t\t\tx, y, z, y2;\r\n\r\n\t\tif (l <= 8) {\r\n\t\t\ty = (l * 100) / 903.3;\r\n\t\t\ty2 = (7.787 * (y / 100)) + (16 / 116);\r\n\t\t} else {\r\n\t\t\ty = 100 * Math.pow((l + 16) / 116, 3);\r\n\t\t\ty2 = Math.pow(y / 100, 1/3);\r\n\t\t}\r\n\r\n\t\tx = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);\r\n\r\n\t\tz = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);\r\n\r\n\t\treturn [x, y, z];\r\n\t}\r\n};\r\n\r\n\r\n//extend xyz\r\nxyz.lab = function(xyz){\r\n\tvar x = xyz[0],\r\n\t\t\ty = xyz[1],\r\n\t\t\tz = xyz[2],\r\n\t\t\tl, a, b;\r\n\r\n\tx /= 95.047;\r\n\ty /= 100;\r\n\tz /= 108.883;\r\n\r\n\tx = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\r\n\ty = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\r\n\tz = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\r\n\r\n\tl = (116 * y) - 16;\r\n\ta = 500 * (x - y);\r\n\tb = 200 * (y - z);\r\n\r\n\treturn [l, a, b];\r\n};\r\n","import { awaitImage, readImageDownsampling, } from '@kotorik/palette';\nimport PromiseWorker from 'promise-worker';\nimport { isInDarkMode } from '../darkmode';\n//@ts-ignore\nimport 'color-space/hsl';\n//@ts-ignore\nimport rgb from 'color-space/rgb';\nlet worker;\nlet currentColor;\nfunction 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 updateThemeSkin(coverBGUrl) {\n try {\n const imgElement = document.createElement('img');\n imgElement.src = coverBGUrl;\n imgElement.crossOrigin = \"anonymous\";\n await awaitImage(imgElement);\n const data = readImageDownsampling(imgElement, 10000);\n const result = await worker.postMessage({\n k: 8,\n //iteration: 20,\n img: data\n });\n const { label, centroid } = result;\n const max = Math.max(...label);\n const index = label.findIndex(value => value == max);\n currentColor = centroid[index];\n _setColor();\n }\n catch (error) {\n console.error(error);\n _updateThemeColor(getComputedStyle(document.documentElement).getPropertyValue('--theme-skin-matching')); //回滚\n }\n}\nfunction _setColor(darkmode) {\n const hsla = rgb.hsl(currentColor);\n if (typeof darkmode == 'undefined' ? isInDarkMode() : darkmode)\n hsla[2] *= 0.5;\n /* const textColor = [0, 0, 0] as [number, number, number]\n \n if (hsla[2] > 40) {\n textColor[2] = 0.314\n } else {\n textColor[2] = 1 - 0.314\n }\n \n const style = document.documentElement.style\n const [h, s, l] = hsla\n style.setProperty('--header-color-h', h + 'deg')\n style.setProperty('--header-color-s', s + '%')\n style.setProperty('--header-color-l', l + '%')\n \n const siteHeader = document.querySelector('.site-header')\n siteHeader.style.color = hslaCSSText(textColor)\n */\n _updateThemeColor(hslaCSSText(hsla));\n}\nfunction _updateThemeColor(color_css) {\n const meta = document.querySelector('meta[name=theme-color]');\n meta && (meta.content = color_css);\n}\nexport function initThemeColor() {\n if (!worker)\n worker = new PromiseWorker(new Worker(new URL('./worker.ts', import.meta.url)));\n document.addEventListener('coverBG_change', (({ detail: coverBGUrl }) => updateThemeSkin(coverBGUrl)));\n document.addEventListener('darkmode', (({ detail: next }) => _setColor(next)));\n}\n","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 * @module color-space/hsl\r\n */\r\nimport rgb from './rgb.js';\r\n\r\nexport default {\r\n\tname: 'hsl',\r\n\tmin: [0,0,0],\r\n\tmax: [360,100,100],\r\n\tchannel: ['hue', 'saturation', 'lightness'],\r\n\talias: ['HSL'],\r\n\r\n\trgb: function(hsl) {\r\n\t\tvar h = hsl[0] / 360,\r\n\t\t\t\ts = hsl[1] / 100,\r\n\t\t\t\tl = hsl[2] / 100,\r\n\t\t\t\tt1, t2, t3, rgb, val;\r\n\r\n\t\tif (s === 0) {\r\n\t\t\tval = l * 255;\r\n\t\t\treturn [val, val, val];\r\n\t\t}\r\n\r\n\t\tif (l < 0.5) {\r\n\t\t\tt2 = l * (1 + s);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tt2 = l + s - l * s;\r\n\t\t}\r\n\t\tt1 = 2 * l - t2;\r\n\r\n\t\trgb = [0, 0, 0];\r\n\t\tfor (var i = 0; i < 3; i++) {\r\n\t\t\tt3 = h + 1 / 3 * - (i - 1);\r\n\t\t\tif (t3 < 0) {\r\n\t\t\t\tt3++;\r\n\t\t\t}\r\n\t\t\telse if (t3 > 1) {\r\n\t\t\t\tt3--;\r\n\t\t\t}\r\n\r\n\t\t\tif (6 * t3 < 1) {\r\n\t\t\t\tval = t1 + (t2 - t1) * 6 * t3;\r\n\t\t\t}\r\n\t\t\telse if (2 * t3 < 1) {\r\n\t\t\t\tval = t2;\r\n\t\t\t}\r\n\t\t\telse if (3 * t3 < 2) {\r\n\t\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tval = t1;\r\n\t\t\t}\r\n\r\n\t\t\trgb[i] = val * 255;\r\n\t\t}\r\n\r\n\t\treturn rgb;\r\n\t}\r\n};\r\n\r\n\r\n//extend rgb\r\nrgb.hsl = function(rgb) {\r\n\tvar r = rgb[0]/255,\r\n\t\t\tg = rgb[1]/255,\r\n\t\t\tb = rgb[2]/255,\r\n\t\t\tmin = Math.min(r, g, b),\r\n\t\t\tmax = Math.max(r, g, b),\r\n\t\t\tdelta = max - min,\r\n\t\t\th, s, l;\r\n\r\n\tif (max === min) {\r\n\t\th = 0;\r\n\t}\r\n\telse if (r === max) {\r\n\t\th = (g - b) / delta;\r\n\t}\r\n\telse if (g === max) {\r\n\t\th = 2 + (b - r) / delta;\r\n\t}\r\n\telse if (b === max) {\r\n\t\th = 4 + (r - g)/ delta;\r\n\t}\r\n\r\n\th = Math.min(h * 60, 360);\r\n\r\n\tif (h < 0) {\r\n\t\th += 360;\r\n\t}\r\n\r\n\tl = (min + max) / 2;\r\n\r\n\tif (max === min) {\r\n\t\ts = 0;\r\n\t}\r\n\telse if (l <= 0.5) {\r\n\t\ts = delta / (max + min);\r\n\t}\r\n\telse {\r\n\t\ts = delta / (2 - max - min);\r\n\t}\r\n\r\n\treturn [h, s * 100, l * 100];\r\n};\r\n","/**\n * app.js - Client script bundle for Sakurairo, a WordPress theme.\n * @author bymoye \n * @author KotoriK\n * @license GPL-v2\n * @date 2021.3.21\n * Github Repository:\n * @url https://github.com/Fuukei/Sakurairo_Scripts\n * @url https://github.com/mirai-mamori/Sakurairo/blob/f7db3c5c73d70a6a3f845844a44f279d540a7b6c/js/sakura-app.js\n * \n * *** ACKNOWLEDGEMENT *** \n * \n * *** modified on mashirozx/Sakura/js/sakura-app.js ***\n * Sakura theme application bundle\n * @author Mashiro\n * @url https://2heng.xin\n * @date 2019.8.3\n * *** ***\n * \n * *** inherited from louie-senpai/Siren/js/app.js ***\n * Siren application js\n * @author Louie\n * @url http://i94.me\n * @date 2016.11.19\n * *** ***\n * \n * *** inherited from Xoin-Yang/Akina/js/global.js ***\n * @author Xoin-Yang\n * @date 2017.04.25\n * @url http://www.akina.pw/\n * *** END OF ACKNOWLEDGEMENT *** \n * \n * Press 'F' to pay respects.\n * \n */\n\nimport { getCurrentBG, } from './coverBackground'\nimport add_copyright from './copyright'\nimport { loadCSS } from 'fg-loadcss'\nimport { lazyload } from 'lazyload'\nimport './global-func'\nimport { ready } from '../common/util'\nimport about_us from './about_us'\nimport preload_screen from './preload_screen'\nimport { isSupported } from './compatibility'\nimport hitokoto from './hitokoto'\nimport { web_audio } from './web_audio'\nimport { XLS, post_list_show_animation } from './post_list'\nimport { initThemeColor, updateThemeSkin } from './theme-color'\nimport initEffect from './effect'\nimport { initIsMobileCache, isMobile } from './mobile'\nimport { initFontControl } from './font_control'\nimport scrollHandler from './scroll_handler'\nimport { checkDarkModeSetting, } from './darkmode'\nimport { addSkinMenuListener, auto_height, bgButtonAddListener, CE, checkBgImgSetting, checkCoverBackground, checkSkinSecter, closeSkinMenu, MN, PE, timeSeriesReload, collapseMenu } from './func'\nimport initTypedJs from './typed'\nimport showcard from './showcard'\n\ninitIsMobileCache()\n/**\n * 检查是否应当开启_iro.pjax\n * @seealso https://github.com/PaperStrike/Pjax#compatibility\n */\n_iro.pjax = _iro.pjax && isSupported({ Firefox: 60, Edg: 79, Chrome: 66, OPR: 53, Version: 12/**Safari 12 */ });\n_iro.pjax && import('./pjax').then(({ default: initPjax }) => initPjax())\n\ntimeSeriesReload();\nadd_copyright()\nfunction activate_widget() {\n let secondary = document.getElementById(\"secondary\");\n if (!isMobile()) {\n let show_hide = document.querySelector(\".show-hide\");\n show_hide && show_hide.addEventListener(\"click\", () => {\n secondary && secondary.classList.toggle(\"active\");\n });\n } else {\n secondary && secondary.remove();\n }\n}\nsetTimeout(function () {\n activate_widget();\n}, 100);\n\n/* let isWebkit = navigator.userAgent.toLowerCase().indexOf('webkit') > -1,\n isOpera = navigator.userAgent.toLowerCase().indexOf('opera') > -1,\n isIe = navigator.userAgent.toLowerCase().indexOf('msie') > -1;\nif ((isWebkit || isOpera || isIe) && document.getElementById && window.addEventListener) { */\nwindow.addEventListener('hashchange', () => {\n const id = location.hash.substring(1)\n if (!(/^[A-z0-9_-]+$/.test(id))) {\n return;\n }\n const element = document.getElementById(id);\n if (element) {\n if (!(/^(?:a|select|input|button|textarea)$/i.test(element.tagName))) {\n element.tabIndex = -1;\n }\n element.focus();\n }\n}, false);\n/* } */\n\ncheckDarkModeSetting();\n\nimport POWERMODE from 'activate-power-mode'\nimport { coverVideoIni, coverVideo } from './video'\n\nfunction powermode() {\n POWERMODE.colorful = true;\n POWERMODE.shake = false;\n document.body.addEventListener('input', POWERMODE)\n}\n//afterDOMContentLoaded\n\nready(function () {\n if (_iro.float_player_on) {\n if (!isMobile()) {\n import('./aplayer').then(({ aplayerInit }) => aplayerInit())\n }\n }\n if (_iro.land_at_home) initTypedJs()\n Promise.all([checkCoverBackground(), checkBgImgSetting()])\n .then(() => {\n if (isSupported({ Version: 15/**Safari 15 */ })) {\n initThemeColor()\n const bgUrl = getCurrentBG()\n if (bgUrl) updateThemeSkin(bgUrl)\n }\n })\n addSkinMenuListener();\n //let checkskin_bg = (a) => a == \"none\" ? \"\" : a;\n let changskin = document.querySelector(\"#changskin\"),\n close_SkinMenu = document.querySelector(\".skin-menu #close-skinMenu\");\n changskin && changskin.addEventListener(\"click\", function () {\n document.querySelector(\".skin-menu\").classList.toggle(\"show\");\n })\n close_SkinMenu && close_SkinMenu.addEventListener(\"click\", closeSkinMenu)\n scrollHandler();\n /*GT()*/\n const mb_to_top = document.querySelector(\"#moblieGoTop\")\n if (mb_to_top) {\n mb_to_top.onclick = () => {\n window.scrollTo({\n top: 0,\n behavior: \"smooth\"\n });\n }\n }\n /*GT end;*/\n XLS();\n MN();\n coverVideo();\n hitokoto()\n bgButtonAddListener()\n //#region has-dom-modify\n initFontControl()\n auto_height();\n PE();\n CE();\n collapseMenu()\n //#endregion\n web_audio()\n preload_screen()\n lazyload();\n showcard()\n powermode()\n //#region mashiro_global.ini.normalize();\n post_list_show_animation();\n coverVideoIni();\n checkSkinSecter();\n //#endregion\n initEffect()\n about_us()\n});\n","import { isMobile } from \"./mobile\";\nexport default function scrollHandler() {\n const header_thresold = 0;\n const siteHeader = document.querySelector(\".site-header\");\n const changskin = document.querySelector(\"#changskin\");\n const mb_to_top = document.querySelector(\"#moblieGoTop\");\n const common = (scrollTop) => {\n //NH\n if (scrollTop > header_thresold) {\n siteHeader.classList.add(\"yya\");\n }\n else {\n siteHeader.classList.remove(\"yya\");\n }\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 common(scrollTop);\n };\n window.addEventListener(\"scroll\", smallScreenHandler);\n }\n else {\n const cached = document.getElementById('bar');\n const skinMenu = document.querySelector(\".skin-menu\");\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 about_us() {\n const c = 'background: linear-gradient(to bottom right, #7b2a52, #36307f,#272151);color:#fff';\n console.log('%c Sakurairo %c https://github.com/mirai-mamori/Sakurairo', c, '');\n console.log('誰もが信じ崇めてる\\n' +\n 'まさに最強で無敵のアイドル\\n' +\n '弱点なんて見当たらない\\n' +\n '一番星を宿している\\n' +\n '弱いとこなんて見せちゃダメダメ\\n' +\n '知りたくないとこは見せずに\\n' +\n '唯一無二じゃなくちゃイヤイヤ\\n' +\n 'それこそ%c本物のアイ%c\\n' +\n '%c ⌜IDOL⌟ ', 'color:#b424b8', '', c);\n}\n","import { onlyOnceATime } from \"../common/util\";\r\nimport { lazyload } from 'lazyload'\r\nimport { __ } from '../common/sakurairo_global'\r\n\r\nlet load_post_timer;\r\nconst load_post = onlyOnceATime(function load_post() {\r\n const now_href = document.location.href\r\n const pagination_a = document.querySelector('#pagination a');\r\n if (pagination_a.classList.contains(\"loading\")) return;\r\n pagination_a.classList.add(\"loading\");\r\n pagination_a.innerText = \"\";\r\n\r\n // $('#pagination a').addClass(\"loading\").text(\"\");\r\n fetch(pagination_a.getAttribute(\"href\") + \"#main\")\r\n .then(async resp => {\r\n const text = await resp.text()\r\n //在进行DOM操作前检查页面是否已经变化,防止错误加载到其他页面上\r\n if (now_href != document.location.href) return /**如果页面状态发生了变化,那么也应该不用理加载提示符 */\r\n const parser = new DOMParser(),\r\n DOM = parser.parseFromString(text, \"text/html\"),\r\n result = DOM.querySelectorAll(\"#main .post\"),\r\n paga = DOM.querySelector(\"#pagination a\"),\r\n paga_innerText = paga && paga.innerText,\r\n nextHref = paga && paga.getAttribute(\"href\"),\r\n main = document.getElementById(\"main\")\r\n for (let i = 0; i < result.length; i++) {\r\n main.append(result[i])\r\n }\r\n //if (resp.ok) {\r\n // result = $(data).find(\"#main .post\");\r\n // nextHref = $(data).find(\"#pagination a\").attr(\"href\");\r\n // $(\"#main\").append(result.fadeIn(500));\r\n const dpga = document.querySelector(\"#pagination a\"),\r\n addps = document.querySelector(\"#add_post span\");\r\n if (dpga) {\r\n dpga.classList.remove(\"loading\");\r\n dpga.innerText = paga_innerText;\r\n }\r\n if (addps) {\r\n addps.classList.remove(\"loading\");\r\n addps.innerText = \"\";\r\n }\r\n // $(\"#pagination a\").removeClass(\"loading\").text(\"Previous\");\r\n // $('#add_post span').removeClass(\"loading\").text(\"\");\r\n lazyload();\r\n post_list_show_animation();\r\n document.dispatchEvent(new CustomEvent('ajax_post_loaded',))\r\n if (nextHref != undefined) {\r\n pagination_a.setAttribute(\"href\", nextHref);\r\n // $(\"#pagination a\").attr(\"href\", nextHref);\r\n //加载完成上滑\r\n let tempScrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\r\n // window.scrollTo(tempScrollTop);\r\n // $(window).scrollTop(tempScrollTop);\r\n window.scrollTo({\r\n top: tempScrollTop + 300,\r\n behavior: 'smooth'\r\n })\r\n // $body.animate({\r\n // scrollTop: tempScrollTop + 300\r\n //\r\n // }, 666)\r\n } else {\r\n document.getElementById(\"pagination\").innerHTML = \"\" + __(\"很高兴你翻到这里,但是真的没有了...\") + \"\";\r\n // $(\"#pagination\").html(\"很高兴你翻到这里,但是真的没有了...\");\r\n }\r\n //}\r\n\r\n })\r\n /* $.ajax({\r\n type: \"POST\",\r\n url: $('#pagination a').attr(\"href\") + \"#main\",\r\n success: function (data) {\r\n result = $(data).find(\"#main .post\");\r\n nextHref = $(data).find(\"#pagination a\").attr(\"href\");\r\n $(\"#main\").append(result.fadeIn(500));\r\n $(\"#pagination a\").removeClass(\"loading\").text(\"Previous\");\r\n $('#add_post span').removeClass(\"loading\").text(\"\");\r\n lazyload();\r\n post_list_show_animation();\r\n if (nextHref != undefined) {\r\n $(\"#pagination a\").attr(\"href\", nextHref);\r\n //加载完成上滑\r\n var tempScrollTop = $(window).scrollTop();\r\n $(window).scrollTop(tempScrollTop);\r\n $body.animate({\r\n scrollTop: tempScrollTop + 300\r\n\r\n }, 666)\r\n } else {\r\n $(\"#pagination\").html(\"很高兴你翻到这里,但是真的没有了...\");\r\n }\r\n }\r\n }); */\r\n})\r\nexport function post_list_show_animation() {\r\n const articles = document.querySelectorAll('article.post-list-thumb')\r\n if (articles) {\r\n const options = {\r\n root: null,\r\n threshold: [0.66]\r\n }\r\n const callback = (entries) => {\r\n entries.forEach((article) => {\r\n if (article.target.classList.contains(\"post-list-show\")) {\r\n article.target.style.willChange = 'auto';\r\n io.unobserve(article.target)\r\n } else if (article.isIntersecting) {\r\n article.target.classList.add(\"post-list-show\");\r\n article.target.style.willChange = 'auto';\r\n io.unobserve(article.target)\r\n }\r\n })\r\n }\r\n const io = new IntersectionObserver(callback, options)\r\n for (const article of articles) {\r\n io.observe(article)\r\n }\r\n }\r\n}\r\nfunction XLS_Listener(e) {\r\n //要求是#pagination只有anchor一个直接子后代\r\n if (e.target.parentElement.id == 'pagination') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n clearTimeout(load_post_timer);\r\n load_post();\r\n }\r\n}\r\nexport function XLS() {\r\n const intersectionObserver = new IntersectionObserver((entries) => {\r\n if (entries[0].intersectionRatio <= 0) return;\r\n // var page_next = $('#pagination a').attr(\"href\");\r\n const _page_next = document.querySelector('#pagination a')\r\n if (_page_next) {\r\n const href_page_next = _page_next.getAttribute(\"href\"),\r\n load_key = document.getElementById(\"add_post_time\");\r\n if (href_page_next != undefined && load_key) {\r\n const load_time = load_key.title;\r\n if (load_time != \"233\") {\r\n console.log(\"%c 自动加载时倒计时 %c\", \"background:#9a9da2; color:#ffffff; border-radius:4px;\", \"\", \"\", load_time);\r\n load_post_timer = setTimeout(load_post, load_time * 1000);\r\n }\r\n }\r\n }\r\n });\r\n intersectionObserver.observe(\r\n document.querySelector('.footer-device')\r\n );\r\n document.body.removeEventListener('click', XLS_Listener)\r\n document.body.addEventListener(\"click\", XLS_Listener)\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","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"POWERMODE\"] = factory();\n\telse\n\t\troot[\"POWERMODE\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar canvas = document.createElement('canvas');\n\tcanvas.width = window.innerWidth;\n\tcanvas.height = window.innerHeight;\n\tcanvas.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:999999';\n\twindow.addEventListener('resize', function () {\n\t canvas.width = window.innerWidth;\n\t canvas.height = window.innerHeight;\n\t});\n\tdocument.body.appendChild(canvas);\n\tvar context = canvas.getContext('2d');\n\tvar particles = [];\n\tvar particlePointer = 0;\n\tvar rendering = false;\n\n\tPOWERMODE.shake = true;\n\n\tfunction getRandom(min, max) {\n\t return Math.random() * (max - min) + min;\n\t}\n\n\tfunction getColor(el) {\n\t if (POWERMODE.colorful) {\n\t var u = getRandom(0, 360);\n\t return 'hsla(' + getRandom(u - 10, u + 10) + ', 100%, ' + getRandom(50, 80) + '%, ' + 1 + ')';\n\t } else {\n\t return window.getComputedStyle(el).color;\n\t }\n\t}\n\n\tfunction getCaret() {\n\t var el = document.activeElement;\n\t var bcr;\n\t if (el.tagName === 'TEXTAREA' ||\n\t (el.tagName === 'INPUT' && el.getAttribute('type') === 'text')) {\n\t var offset = __webpack_require__(1)(el, el.selectionEnd);\n\t bcr = el.getBoundingClientRect();\n\t return {\n\t x: offset.left + bcr.left,\n\t y: offset.top + bcr.top,\n\t color: getColor(el)\n\t };\n\t }\n\t var selection = window.getSelection();\n\t if (selection.rangeCount) {\n\t var range = selection.getRangeAt(0);\n\t var startNode = range.startContainer;\n\t if (startNode.nodeType === document.TEXT_NODE) {\n\t startNode = startNode.parentNode;\n\t }\n\t bcr = range.getBoundingClientRect();\n\t return {\n\t x: bcr.left,\n\t y: bcr.top,\n\t color: getColor(startNode)\n\t };\n\t }\n\t return { x: 0, y: 0, color: 'transparent' };\n\t}\n\n\tfunction createParticle(x, y, color) {\n\t return {\n\t x: x,\n\t y: y,\n\t alpha: 1,\n\t color: color,\n\t velocity: {\n\t x: -1 + Math.random() * 2,\n\t y: -3.5 + Math.random() * 2\n\t }\n\t };\n\t}\n\n\tfunction POWERMODE() {\n\t { // spawn particles\n\t var caret = getCaret();\n\t var numParticles = 5 + Math.round(Math.random() * 10);\n\t while (numParticles--) {\n\t particles[particlePointer] = createParticle(caret.x, caret.y, caret.color);\n\t particlePointer = (particlePointer + 1) % 500;\n\t }\n\t }\n\t { // shake screen\n\t if (POWERMODE.shake) {\n\t var intensity = 1 + 2 * Math.random();\n\t var x = intensity * (Math.random() > 0.5 ? -1 : 1);\n\t var y = intensity * (Math.random() > 0.5 ? -1 : 1);\n\t document.body.style.marginLeft = x + 'px';\n\t document.body.style.marginTop = y + 'px';\n\t setTimeout(function() {\n\t document.body.style.marginLeft = '';\n\t document.body.style.marginTop = '';\n\t }, 75);\n\t }\n\t }\n\t if(!rendering){\n\t requestAnimationFrame(loop);\n\t }\n\t};\n\tPOWERMODE.colorful = false;\n\n\tfunction loop() {\n\t rendering = true;\n\t context.clearRect(0, 0, canvas.width, canvas.height);\n\t var rendered = false;\n\t var rect = canvas.getBoundingClientRect();\n\t for (var i = 0; i < particles.length; ++i) {\n\t var particle = particles[i];\n\t if (particle.alpha <= 0.1) continue;\n\t particle.velocity.y += 0.075;\n\t particle.x += particle.velocity.x;\n\t particle.y += particle.velocity.y;\n\t particle.alpha *= 0.96;\n\t context.globalAlpha = particle.alpha;\n\t context.fillStyle = particle.color;\n\t context.fillRect(\n\t Math.round(particle.x - 1.5) - rect.left,\n\t Math.round(particle.y - 1.5) - rect.top,\n\t 3, 3\n\t );\n\t rendered = true;\n\t }\n\t if(rendered){\n\t requestAnimationFrame(loop);\n\t }else{\n\t rendering = false;\n\t }\n\t}\n\n\tmodule.exports = POWERMODE;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n\t/* jshint browser: true */\n\n\t(function () {\n\n\t// The properties that we copy into a mirrored div.\n\t// Note that some browsers, such as Firefox,\n\t// do not concatenate properties, i.e. padding-top, bottom etc. -> padding,\n\t// so we have to do every single property specifically.\n\tvar properties = [\n\t 'direction', // RTL support\n\t 'boxSizing',\n\t 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n\t 'height',\n\t 'overflowX',\n\t 'overflowY', // copy the scrollbar for IE\n\n\t 'borderTopWidth',\n\t 'borderRightWidth',\n\t 'borderBottomWidth',\n\t 'borderLeftWidth',\n\t 'borderStyle',\n\n\t 'paddingTop',\n\t 'paddingRight',\n\t 'paddingBottom',\n\t 'paddingLeft',\n\n\t // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n\t 'fontStyle',\n\t 'fontVariant',\n\t 'fontWeight',\n\t 'fontStretch',\n\t 'fontSize',\n\t 'fontSizeAdjust',\n\t 'lineHeight',\n\t 'fontFamily',\n\n\t 'textAlign',\n\t 'textTransform',\n\t 'textIndent',\n\t 'textDecoration', // might not make a difference, but better be safe\n\n\t 'letterSpacing',\n\t 'wordSpacing',\n\n\t 'tabSize',\n\t 'MozTabSize'\n\n\t];\n\n\tvar isFirefox = window.mozInnerScreenX != null;\n\n\tfunction getCaretCoordinates(element, position, options) {\n\n\t var debug = options && options.debug || false;\n\t if (debug) {\n\t var el = document.querySelector('#input-textarea-caret-position-mirror-div');\n\t if ( el ) { el.parentNode.removeChild(el); }\n\t }\n\n\t // mirrored div\n\t var div = document.createElement('div');\n\t div.id = 'input-textarea-caret-position-mirror-div';\n\t document.body.appendChild(div);\n\n\t var style = div.style;\n\t var computed = window.getComputedStyle? getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9\n\n\t // default textarea styles\n\t style.whiteSpace = 'pre-wrap';\n\t if (element.nodeName !== 'INPUT')\n\t style.wordWrap = 'break-word'; // only for textarea-s\n\n\t // position off-screen\n\t style.position = 'absolute'; // required to return coordinates properly\n\t if (!debug)\n\t style.visibility = 'hidden'; // not 'display: none' because we want rendering\n\n\t // transfer the element's properties to the div\n\t properties.forEach(function (prop) {\n\t style[prop] = computed[prop];\n\t });\n\n\t if (isFirefox) {\n\t // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n\t if (element.scrollHeight > parseInt(computed.height))\n\t style.overflowY = 'scroll';\n\t } else {\n\t style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n\t }\n\n\t div.textContent = element.value.substring(0, position);\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\n\t if (element.nodeName === 'INPUT')\n\t div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\n\n\t var span = document.createElement('span');\n\t // Wrapping must be replicated *exactly*, including when a long word gets\n\t // onto the next line, with whitespace at the end of the line before (#7).\n\t // The *only* reliable way to do that is to copy the *entire* rest of the\n\t // textarea's content into the created at the caret position.\n\t // for inputs, just '.' would be enough, but why bother?\n\t span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n\t div.appendChild(span);\n\n\t var coordinates = {\n\t top: span.offsetTop + parseInt(computed['borderTopWidth']),\n\t left: span.offsetLeft + parseInt(computed['borderLeftWidth'])\n\t };\n\n\t if (debug) {\n\t span.style.backgroundColor = '#aaa';\n\t } else {\n\t document.body.removeChild(div);\n\t }\n\n\t return coordinates;\n\t}\n\n\tif (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\n\t module.exports = getCaretCoordinates;\n\t} else {\n\t window.getCaretCoordinates = getCaretCoordinates;\n\t}\n\n\t}());\n\n/***/ })\n/******/ ])\n});\n;","'use strict'\n\nvar messageIds = 0\n\nfunction onMessage (self, e) {\n var message = e.data\n if (!Array.isArray(message) || message.length < 2) {\n // Ignore - this message is not for us.\n return\n }\n var messageId = message[0]\n var error = message[1]\n var result = message[2]\n\n var callback = self._callbacks[messageId]\n\n if (!callback) {\n // Ignore - user might have created multiple PromiseWorkers.\n // This message is not for us.\n return\n }\n\n delete self._callbacks[messageId]\n callback(error, result)\n}\n\nfunction PromiseWorker (worker) {\n var self = this\n self._worker = worker\n self._callbacks = {}\n\n worker.addEventListener('message', function (e) {\n onMessage(self, e)\n })\n}\n\nPromiseWorker.prototype.postMessage = function (userMessage) {\n var self = this\n var messageId = messageIds++\n\n var messageToSend = [messageId, userMessage]\n\n return new Promise(function (resolve, reject) {\n self._callbacks[messageId] = function (error, result) {\n if (error) {\n return reject(new Error(error.message))\n }\n resolve(result)\n }\n\n /* istanbul ignore if */\n if (typeof self._worker.controller !== 'undefined') {\n // service worker, use MessageChannels because e.source is broken in Chrome < 51:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=543198\n var channel = new MessageChannel()\n channel.port1.onmessage = function (e) {\n onMessage(self, e)\n }\n self._worker.controller.postMessage(messageToSend, [channel.port2])\n } else {\n // web worker\n self._worker.postMessage(messageToSend)\n }\n })\n}\n\nmodule.exports = PromiseWorker\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 \"\" + ({\"18\":\"lg-2\",\"173\":\"lg-3\",\"321\":\"lg-12\",\"388\":\"lg-1\",\"440\":\"lg-4\",\"441\":\"lg-10\",\"453\":\"lg-11\",\"478\":\"lg-6\",\"558\":\"lg-8\",\"637\":\"lg-5\",\"730\":\"lg-9\",\"868\":\"lg-7\",\"963\":\"lg-0\"}[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)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\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\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 === 'load' ? 'missing' : 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(\" + realHref + \")\");\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\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\t143: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"347\":1,\"739\":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","__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\t143: 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(!/^(347|739)$/.test(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, [920], () => (__webpack_require__(2849)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","defaults","src","srcset","selector","root","rootMargin","threshold","LazyLoad","constructor","elms","options","this","settings","document","querySelectorAll","init","obs","IntersectionObserver","load","self","entries","Array","prototype","forEach","call","entry","isIntersecting","unobserve","target","doLoad","image","observe","loadAndDestroy","destroy","element","getAttribute","tagName","toLowerCase","style","backgroundImage","disconnect","lazyload","images","_version_ctrl","_iro","cookie_version_control","UA","navigator","userAgent","uaMatches","from","matchAll","isSupported","checkList","_","name","version","parseFloat","Accept_Image","acceptList","Chrome","OPR","Firefox","Edg","Version","push","key","value","days","expires","Date","now","toUTCString","cookie","setCookie","reverse","join","getSupportedImageMimeList","txt","author_name","window","location","href","site_name","copytext","e","selection","getSelection","selectionText","toString","length","event","selectionTxt","preventDefault","htmlData","replace","textData","clipboardData","setData","setClipboardText","createButterbar","__","add_copyright","clipboardCopyright","body","removeEventListener","addEventListener","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","querySelector","site_bg_as_cover","url","dispatchEvent","CustomEvent","detail","parseCSSUrl","cssText","match","getCurrentBG","getAPIPath","useBGN","arguments","undefined","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","mediaQuery","matchMedia","inDarkMode","isInDarkMode","informDarkModeChange","nextValue","mediaQueryCallback","localStorage","getItem","matches","darkmode","turnOnDarkMode","turnOffDarkMode","saveUserSetting","ifDarkmodeShouldOn","removeItem","setItem","userTriggered","documentElement","backgroundColor","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","showcard","img","button","Error","typedInstance","disableTypedJsIfExist","initTypedJs","JSON","parse","innerHTML","ext_shared_lib","Typed","importExternal","default","bgvideo","videoList","movies","split","unplayedIndex","fill","map","index","aplayersToResume","_getNextRandomVideo","nextIndex","Math","floor","random","splice","getVideo","video_stu","fileName","bottom","setAttribute","origin","getFileNameMain","splay","video_btn","display","top","float_player_on","_ref","pauseAllPlayer","play","spause","pause","player","liveplay","oncanplay","livepause","coverVideo","contains","onended","loop","click","video_add","coverVideoIni","videos","canPlayType","video","autoplay","Hls","reason","hls","loadSource","attachMedia","on","Events","MANIFEST_PARSED","initHLS","canPlayHandler","lazyloadPatch","poster","web_audio","audio","AudioContext","webkitAudioContext","dom","i","o","t","sheet","sakurairoGlobal","readSheetOption","selects","notes","ctx","listener","r","c","createOscillator","l","createGain","mainGain","connect","destination","gain","setValueAtTime","main_gain","currentTime","type","frequency","linearRampToValueAtTime","start","exponentialRampToValueAtTime","stop","d","round","h","pageX","p","pageY","createElement","textContent","zIndex","left","position","color","appendChild","animate","opacity","duration","setTimeout","select","clearButterbar","butterBar","keep","div","STORAGE_KEY","CDN_LIST","currentCDNIndex","config","num","parseInt","isNaN","getPreferCDNIndex","currentCDN","raw","resolvePath","relativePath","packageName","String","PKG_INFO","isServedByCurrentCDN","path","cdnMatchKey","ready","time","failedCounts","totalCounts","observer","PerformanceObserver","list","getEntries","transferSize","entryTypes","nextCDN","script","onload","append","defaultStr","_sakurairoi18n","_$","template","_len","replacements","_key","opt","build","BUILD_INFO","registerOnGlobal","Object","defineProperty","writable","enumerable","_sakurairo","readyFunctionList","onlyOnceATime","func","isRunning","whileReady","fn","readyState","slideToggle","el","mode","getComputedStyle","flag","transition","overflow","clearTimeout","tagTimer","tagHeight","clientHeight","height","buildAPI","apiPath","params","nonce","mainContainer","toggle","close","QueryStorage","renderSearchResult","keyword","link","fa","title","iconfont","comments","text","s","trim","a","indexOf","b","slice","toUpperCase","query","B","y","w","u","F","G","D","E","queries","array","filter","v","values","some","RegExp","test","Cx","div_href","search_close","Ty","ele","jsSearchCallback","overflowY","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","next","pre","onclick","timeSeriesReload","archives","al_li","nextElementSibling","al_expand_collapse","cursor","getElementsByTagName","al_post_list","al_post_list_first","cb","child","parentNode","al_expand_collapse_click","MN","iconflat","stopPropagation","MNH","auto_height","windowheight","minHeight","PE","blank","paddingTop","live","CE","comments_fold","comments_main","h3","handler","sc","js_search","loading","collapseMenu","show_Nav","sln","addSkinMenuListener","cached","tagid","id","parentElement","closeSkinMenu","checkBgImgSetting","checkCoverBackground","land_at_home","visibility","imgError","cmt_showPopup","popup","onblur","btn_playControl","paused","coverVideoMute","btn_volumeControl","muted","killCoverVideo","mail_me","email_name","email_domain","headertop_down","coverOffset","getBoundingClientRect","pageYOffset","scrollTo","behavior","removeScreen","preload","preload_blur","backdropFilter","easing","onfinish","max","min","channel","alias","A","C","D50","D55","D65","D75","F2","F7","F11","whitepoint","rgb","_xyz","white","g","x","z","pow","_prepare2DContext","width","canvas","getContext","_prepare2DContextAsync","OffscreenCanvas","xyz","_readImage","bind","prepareCtx","imgSource","naturalWidth","naturalHeight","drawImage","getImageData","readImageDownsampling","_readImageDownsampling","maxSample","scale","n_width","sqrt","n_height","worker","currentColor","updateThemeSkin","coverBGUrl","imgElement","crossOrigin","complete","awaitImage","postMessage","k","label","centroid","findIndex","_setColor","_updateThemeColor","getPropertyValue","hsla","hslaCSSText","color_css","meta","content","initEffect","effect","cfg","particlesJS","initParticle","delta","pjax","initPjax","secondary","show_hide","activate_widget","hash","substring","tabIndex","focus","_ref2","aplayerInit","all","PromiseWorker","Worker","_ref3","bgUrl","changskin","close_SkinMenu","siteHeader","mb_to_top","common","scrollTop","transform","smallScreenHandler","skinMenu","recalcuScrollbar","scrollHeight","innerHeight","largeScreenHandler","scrollHandler","XLS","preload_screen","POWERMODE","post_list_show_animation","log","about_us","load_post_timer","load_post","now_href","pagination_a","DOM","DOMParser","parseFromString","paga","paga_innerText","nextHref","main","dpga","addps","tempScrollTop","articles","io","article","willChange","XLS_Listener","intersectionRatio","_page_next","href_page_next","load_key","load_time","exports","loadCSS","before","media","attributes","ref","doc","ss","refs","childNodes","sheets","styleSheets","attributeName","hasOwnProperty","rel","insertBefore","nextSibling","onloadcssdefined","resolvedHref","loadCB","factory","modules","installedModules","moduleId","module","loaded","m","innerWidth","context","particles","particlePointer","rendering","getRandom","getColor","colorful","createParticle","alpha","velocity","caret","bcr","activeElement","offset","selectionEnd","rangeCount","range","getRangeAt","startNode","startContainer","nodeType","TEXT_NODE","getCaret","numParticles","shake","intensity","marginLeft","marginTop","requestAnimationFrame","clearRect","rendered","rect","particle","globalAlpha","fillStyle","fillRect","properties","isFirefox","mozInnerScreenX","getCaretCoordinates","debug","removeChild","computed","currentStyle","whiteSpace","nodeName","wordWrap","prop","span","coordinates","offsetTop","offsetLeft","messageIds","onMessage","isArray","messageId","_callbacks","_worker","userMessage","messageToSend","controller","MessageChannel","port1","onmessage","port2","__webpack_module_cache__","__webpack_require__","cachedModule","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","keys","every","n","getter","__esModule","getPrototypeOf","obj","ns","create","def","current","getOwnPropertyNames","definition","f","chunkId","reduce","promises","miniCssF","globalThis","Function","done","needAttach","scripts","charset","timeout","nc","onScriptComplete","prev","doneFns","head","Symbol","toStringTag","scriptUrl","importScripts","currentScript","loadStylesheet","fullhref","existingLinkTags","dataHref","tag","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","err","code","createStylesheet","installedCssChunks","miniCss","baseURI","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}