{"version":3,"sources":["jsdelivr-header.js","/npm/hexo-theme-solitude@3.0.21/source/js/main.js"],"names":[],"mappings":"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","file":"/npm/hexo-theme-solitude@3.0.21/source/js/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/hexo-theme-solitude@3.0.21/source/js/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const sidebarFn = () => {\n  const $toggleMenu = document.getElementById(\"toggle-menu\");\n  const $mobileSidebarMenus = document.getElementById(\"sidebar-menus\");\n  const $menuMask = document.getElementById(\"menu-mask\");\n  const $body = document.body;\n\n  const toggleMobileSidebar = (isOpen) => {\n    $body.style.overflow = isOpen ? \"hidden\" : \"\";\n    utils[isOpen ? \"fadeIn\" : \"fadeOut\"]($menuMask, 0.5);\n    $mobileSidebarMenus.classList.toggle(\"open\", isOpen);\n  };\n\n  const closeMobileSidebar = () => {\n    if ($mobileSidebarMenus.classList.contains(\"open\")) {\n      toggleMobileSidebar(false);\n    }\n  };\n\n  $toggleMenu.addEventListener(\"click\", () => toggleMobileSidebar(true));\n  $menuMask.addEventListener(\"click\", closeMobileSidebar);\n\n  window.addEventListener(\"resize\", () => {\n    if (\n      utils.isHidden($toggleMenu) &&\n      $mobileSidebarMenus.classList.contains(\"open\")\n    ) {\n      closeMobileSidebar();\n    }\n    sco.refreshWaterFall();\n  });\n};\n\nconst scrollFn = () => {\n  const $rightside = document.getElementById(\"rightside\");\n  const $header = document.getElementById(\"page-header\");\n  let initTop = 0;\n\n  const updateHeaderAndRightside = (isDown, currentTop) => {\n    if (currentTop > 0) {\n      $header.classList.toggle(\"nav-visible\", !isDown);\n      $header.classList.add(\"nav-fixed\");\n      if ($rightside) {\n        $rightside.style.opacity = \"0.8\";\n        $rightside.style.transform = \"translateX(-58px)\";\n      }\n    } else {\n      $header.classList.remove(\"nav-fixed\", \"nav-visible\");\n      if ($rightside) {\n        $rightside.style.opacity = \"\";\n        $rightside.style.transform = \"\";\n      }\n    }\n  };\n\n  const throttledScroll = utils.throttle(() => {\n    initThemeColor();\n    const currentTop = window.scrollY || document.documentElement.scrollTop;\n    const isDown = currentTop > initTop;\n    initTop = currentTop;\n    updateHeaderAndRightside(isDown, currentTop);\n  }, 200);\n\n  window.addEventListener(\"scroll\", (e) => {\n    throttledScroll(e);\n    if (window.scrollY === 0) {\n      $header.classList.remove(\"nav-fixed\", \"nav-visible\");\n      if ($rightside) {\n        $rightside.style.cssText = \"opacity: ''; transform: ''\";\n      }\n    }\n  });\n};\n\nconst percent = () => {\n  const docEl = document.documentElement;\n  const body = document.body;\n  const scrollPos = window.pageYOffset || docEl.scrollTop;\n  const totalScrollableHeight =\n    Math.max(\n      body.scrollHeight,\n      docEl.scrollHeight,\n      body.offsetHeight,\n      docEl.offsetHeight,\n      body.clientHeight,\n      docEl.clientHeight\n    ) - docEl.clientHeight;\n  const scrolledPercent = Math.round((scrollPos / totalScrollableHeight) * 100);\n  const navToTop = document.querySelector(\"#nav-totop\");\n  const rsToTop = document.querySelector(\".rs_show .top i\");\n  const percentDisplay = document.querySelector(\"#percent\");\n  const isNearEnd =\n    window.scrollY + docEl.clientHeight >=\n    (\n      document.getElementById(\"post-comment\") ||\n      document.getElementById(\"footer\")\n    ).offsetTop;\n\n  navToTop?.classList.toggle(\"long\", isNearEnd || scrolledPercent > 90);\n  rsToTop?.classList.toggle(\"show\", isNearEnd || scrolledPercent > 90);\n  percentDisplay.textContent =\n    isNearEnd || scrolledPercent > 90\n      ? navToTop\n        ? GLOBAL_CONFIG.lang.backtop\n        : \"\"\n      : scrolledPercent;\n\n  document\n    .querySelectorAll(\".needEndHide\")\n    .forEach((item) =>\n      item.classList.toggle(\"hide\", totalScrollableHeight - scrollPos < 100)\n    );\n};\n\nconst showTodayCard = () => {\n  const el = document.getElementById(\"todayCard\");\n  const topGroup = document.querySelector(\".topGroup\");\n  topGroup?.addEventListener(\"mouseleave\", () => el?.classList.remove(\"hide\"));\n};\n\nconst initObserver = () => {\n  const commentElement = document.getElementById(\"post-comment\");\n  const paginationElement = document.getElementById(\"pagination\");\n  const commentBarrageElement = document.querySelector(\".comment-barrage\");\n\n  if (commentElement && paginationElement) {\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        paginationElement.classList.toggle(\"show-window\", entry.isIntersecting);\n        if (GLOBAL_CONFIG.comment.commentBarrage) {\n          commentBarrageElement.style.bottom = entry.isIntersecting\n            ? \"-200px\"\n            : \"0px\";\n        }\n      });\n    });\n    observer.observe(commentElement);\n  }\n};\n\nconst addCopyright = () => {\n  if (!GLOBAL_CONFIG.copyright) return;\n  const { limit, author, link, source, info } = GLOBAL_CONFIG.copyright;\n\n  document.body.addEventListener(\"copy\", (e) => {\n    e.preventDefault();\n    const copyText = window.getSelection().toString();\n    const text =\n      copyText.length > limit\n        ? `${copyText}\\n\\n${author}\\n${link}${window.location.href}\\n${source}\\n${info}`\n        : copyText;\n    e.clipboardData.setData(\"text\", text);\n  });\n};\n\nconst asideStatus = () => {\n  const status = utils.saveToLocal.get(\"aside-status\");\n  document.documentElement.classList.toggle(\"hide-aside\", status === \"hide\");\n};\n\nfunction initThemeColor() {\n  const currentTop = window.scrollY || document.documentElement.scrollTop;\n  const themeColor =\n    currentTop > 0\n      ? \"--efu-card-bg\"\n      : PAGE_CONFIG.is_post\n      ? \"--efu-main\"\n      : \"--efu-background\";\n  applyThemeColor(\n    getComputedStyle(document.documentElement).getPropertyValue(themeColor)\n  );\n}\n\nfunction applyThemeColor(color) {\n  const themeColorMeta = document.querySelector('meta[name=\"theme-color\"]');\n  const appleMobileWebAppMeta = document.querySelector(\n    'meta[name=\"apple-mobile-web-app-status-bar-style\"]'\n  );\n  themeColorMeta?.setAttribute(\"content\", color);\n  appleMobileWebAppMeta?.setAttribute(\"content\", color);\n  if (window.matchMedia(\"(display-mode: standalone)\").matches) {\n    document.body.style.backgroundColor = color;\n  }\n}\n\nconst handleThemeChange = (mode) => {\n  const themeChange = window.globalFn?.themeChange || {};\n  Object.values(themeChange).forEach((fn) => fn(mode));\n};\n\nconst sco = {\n  lastWittyWord: \"\",\n  wasPageHidden: false,\n  musicPlaying: false,\n  scrollTo(elementId) {\n    const targetElement = document.getElementById(elementId);\n    if (targetElement) {\n      const targetPosition =\n        targetElement.getBoundingClientRect().top + window.pageYOffset - 80;\n      window.scroll({ top: targetPosition, behavior: \"smooth\" });\n    }\n  },\n  musicBind() {\n    const $music = document.querySelector(\"#nav-music meting-js\");\n    if ($music && $music.aplayer) { \n      this.isMusicBind = true;\n      $music.onclick = () => this.musicPlaying && this.musicToggle(true);\n      $music.aplayer.on('loadeddata', () =>{\n        coverColor(true);\n      })\n    }\n  },\n  musicToggle(isMeting = true) {\n    if (!this.isMusicBind) this.musicBind();\n    \n    const $music = document.querySelector(\"#nav-music\");\n    const $meting = document.querySelector(\"#nav-music meting-js\");\n    const $console = document.getElementById(\"consoleMusic\");\n    \n    this.musicPlaying = !this.musicPlaying;\n    \n    $music.classList.toggle(\"playing\", this.musicPlaying);\n    $music.classList.toggle(\"stretch\", this.musicPlaying);\n    $console?.classList.toggle(\"on\", this.musicPlaying);\n    \n    if (typeof rm !== \"undefined\" && rm?.menuItems.music[0]) {\n      const $rmText = document.querySelector(\"#menu-music-toggle span\");\n      const $rmIcon = document.querySelector(\"#menu-music-toggle i\");\n      $rmText.textContent = this.musicPlaying \n        ? GLOBAL_CONFIG.right_menu.music.stop\n        : GLOBAL_CONFIG.right_menu.music.start;\n      $rmIcon.className = `solitude fas ${this.musicPlaying ? 'fa-pause' : 'fa-play'}`;\n    }\n\n    if (isMeting && $meting) {\n      this.musicPlaying ? $meting.aplayer.play() : $meting.aplayer.pause();\n    }\n  },\n  musicSkipBack() {\n    document.querySelector(\"meting-js\")?.aplayer?.skipBack();\n  },\n  musicSkipForward() {\n    document.querySelector(\"meting-js\")?.aplayer?.skipForward();\n  },\n  switchCommentBarrage() {\n    const commentBarrageElement = document.querySelector(\".comment-barrage\");\n    const consoleCommentBarrage = document.querySelector(\n      \"#consoleCommentBarrage\"\n    );\n    if (!commentBarrageElement) return;\n\n    const isDisplayed =\n      window.getComputedStyle(commentBarrageElement).display === \"flex\";\n    commentBarrageElement.style.display = isDisplayed ? \"none\" : \"flex\";\n    consoleCommentBarrage?.classList.toggle(\"on\", !isDisplayed);\n    utils.saveToLocal.set(\"commentBarrageSwitch\", !isDisplayed, 0.2);\n    rm?.menuItems.barrage && rm.barrage(isDisplayed);\n  },\n  switchHideAside() {\n    const htmlClassList = document.documentElement.classList;\n    const consoleHideAside = document.querySelector(\"#consoleHideAside\");\n    const isHideAside = htmlClassList.contains(\"hide-aside\");\n    utils.saveToLocal.set(\"aside-status\", isHideAside ? \"show\" : \"hide\", 1);\n    htmlClassList.toggle(\"hide-aside\");\n    consoleHideAside.classList.toggle(\"on\", !isHideAside);\n  },\n  switchKeyboard() {\n    this.sco_keyboards = !this.sco_keyboards;\n    const consoleKeyboard = document.querySelector(\"#consoleKeyboard\");\n    const keyboardFunction = this.sco_keyboards ? openKeyboard : closeKeyboard;\n    consoleKeyboard?.classList.toggle(\"on\", this.sco_keyboards);\n    keyboardFunction();\n    localStorage.setItem(\"keyboard\", this.sco_keyboards);\n    document.getElementById(\"keyboard-tips\")?.classList.remove(\"show\");\n  },\n  initConsoleState() {\n    const consoleHideAside = document.querySelector(\"#consoleHideAside\");\n    if (!consoleHideAside) return;\n    consoleHideAside.classList.toggle(\n      \"on\",\n      document.documentElement.classList.contains(\"hide-aside\")\n    );\n  },\n  changeWittyWord() {\n    const greetings = GLOBAL_CONFIG.aside.witty_words || [];\n    if (greetings.length === 0) {\n      document.getElementById(\"sayhi\").textContent = \"Solitude\";\n      this.lastWittyWord = null;\n      return;\n    }\n    const greetingElement = document.getElementById(\"sayhi\");\n    let randomGreeting;\n    if (greetings.length === 1) {\n      randomGreeting = greetings[0];\n    } else {\n      do {\n        randomGreeting = greetings[Math.floor(Math.random() * greetings.length)];\n      } while (randomGreeting === this.lastWittyWord);\n    }\n    greetingElement.textContent = randomGreeting;\n    this.lastWittyWord = randomGreeting;\n  },\n  switchDarkMode() {\n    const isDarkMode =\n      document.documentElement.getAttribute(\"data-theme\") === \"dark\";\n    const newMode = isDarkMode ? \"light\" : \"dark\";\n    document.documentElement.setAttribute(\"data-theme\", newMode);\n    utils.saveToLocal.set(\"theme\", newMode, 0.02);\n    utils.snackbarShow(GLOBAL_CONFIG.lang.theme[newMode], false, 2000);\n    if (typeof rm === \"object\") rm.mode(!isDarkMode) && rm.hideRightMenu();\n    handleThemeChange(newMode);\n  },\n  hideTodayCard: () =>\n    document.getElementById(\"todayCard\").classList.add(\"hide\"),\n  toTop: () => utils.scrollToDest(0),\n  showConsole: () =>\n    document.getElementById(\"console\")?.classList.toggle(\"show\", true),\n  hideConsole: () =>\n    document.getElementById(\"console\")?.classList.remove(\"show\"),\n  refreshWaterFall() {\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          setTimeout(() => {\n            waterfall(entry.target).then(() => {\n              entry.target.classList.add(\"show\");\n            });\n          }, 300);\n        }\n      });\n    });\n    document\n      .querySelectorAll(\".waterfall\")\n      .forEach((el) => observer.observe(el));\n  },\n  addRuntime() {\n    const el = document.getElementById(\"runtimeshow\");\n    if (el && GLOBAL_CONFIG.runtime) {\n      el.innerText =\n        utils.timeDiff(new Date(GLOBAL_CONFIG.runtime), new Date()) +\n        GLOBAL_CONFIG.lang.day;\n    }\n  },\n  toTalk(txt) {\n    const inputs = [\n      \"#wl-edit\",\n      \".el-textarea__inner\",\n      \"#veditor\",\n      \".atk-textarea\",\n    ];\n    inputs.forEach((selector) => {\n      const el = document.querySelector(selector);\n      if (el) {\n        el.dispatchEvent(\n          new Event(\"input\", { bubble: true, cancelable: true })\n        );\n        el.value = \"> \" + txt.replace(/\\n/g, \"\\n> \") + \"\\n\\n\";\n        utils.scrollToDest(\n          utils.getEleTop(document.getElementById(\"post-comment\")),\n          300\n        );\n        el.focus();\n        el.setSelectionRange(-1, -1);\n      }\n    });\n    utils.snackbarShow(GLOBAL_CONFIG.lang.totalk, false, 2000);\n  },\n  initbbtalk() {\n    const bberTalkElement = document.querySelector(\"#bber-talk\");\n    if (bberTalkElement) {\n      new Swiper(\".swiper-container\", {\n        direction: \"vertical\",\n        loop: true,\n        autoplay: {\n          delay: 3000,\n          pauseOnMouseEnter: true,\n        },\n      });\n    }\n  },\n  addPhotoFigcaption() {\n    document\n      .querySelectorAll(\".article-container img:not(.gallery-item img)\")\n      .forEach((image) => {\n        const captionText = image.getAttribute(\"alt\");\n        if (captionText) {\n          image.insertAdjacentHTML(\n            \"afterend\",\n            `<div class=\"img-alt is-center\">${utils.escapeHtml(\n              captionText\n            )}</div>`\n          );\n        }\n      });\n  },\n  scrollToComment: () =>\n    utils.scrollToDest(\n      utils.getEleTop(document.getElementById(\"post-comment\")),\n      300\n    ),\n  setTimeState() {\n    const el = document.getElementById(\"sayhi\");\n    if (el) {\n      const hours = new Date().getHours();\n      const lang = GLOBAL_CONFIG.aside.state;\n\n      const localData = getLocalData([\n        \"twikoo\",\n        \"WALINE_USER_META\",\n        \"WALINE_USER\",\n        \"_v_Cache_Meta\",\n        \"ArtalkUser\",\n      ]);\n\n      function getLocalData(keys) {\n        for (let key of keys) {\n          const data = localStorage.getItem(key);\n          if (data) {\n            return JSON.parse(data);\n          }\n        }\n        return null;\n      }\n      const nick = localData ? localData.nick || localData.display_name : null;\n\n      const prefix = this.wasPageHidden\n        ? GLOBAL_CONFIG.aside.witty_comment.back + nick\n        : GLOBAL_CONFIG.aside.witty_comment.prefix + nick;\n\n      const greetings = [\n        { start: 0, end: 5, text: nick ? prefix : lang.goodnight },\n        { start: 6, end: 10, text: nick ? prefix : lang.morning },\n        { start: 11, end: 14, text: nick ? prefix : lang.noon },\n        { start: 15, end: 18, text: nick ? prefix : lang.afternoon },\n        { start: 19, end: 24, text: nick ? prefix : lang.night },\n      ];\n      const greeting = greetings.find(\n        (g) => hours >= g.start && hours <= g.end\n      );\n      el.innerText = greeting.text;\n    }\n  },\n  tagPageActive() {\n    const decodedPath = decodeURIComponent(window.location.pathname);\n    const isTagPage = /\\/tags\\/.*?\\//.test(decodedPath);\n    if (isTagPage) {\n      const tag = decodedPath.split(\"/\").slice(-2, -1)[0];\n      const tagElement = document.getElementById(tag);\n      if (tagElement) {\n        document.querySelectorAll(\"a.select\").forEach((link) => {\n          link.classList.remove(\"select\");\n        });\n        tagElement.classList.add(\"select\");\n      }\n    }\n  },\n  categoriesBarActive() {\n    const categoryBar = document.querySelector(\"#category-bar\");\n    const currentPath = decodeURIComponent(window.location.pathname);\n    const isHomePage = currentPath === GLOBAL_CONFIG.root;\n    if (categoryBar) {\n      const categoryItems = categoryBar.querySelectorAll(\".category-bar-item\");\n      categoryItems.forEach((item) => item.classList.remove(\"select\"));\n      const activeItemId = isHomePage\n        ? \"category-bar-home\"\n        : currentPath.split(\"/\").slice(-2, -1)[0];\n      const activeItem = document.getElementById(activeItemId);\n      if (activeItem) {\n        activeItem.classList.add(\"select\");\n      }\n    }\n  },\n  scrollCategoryBarToRight() {\n    const scrollBar = document.getElementById(\"category-bar-items\");\n    const nextElement = document.getElementById(\"category-bar-next\");\n    if (scrollBar) {\n      const isScrollBarAtEnd = () =>\n        scrollBar.scrollLeft + scrollBar.clientWidth >=\n        scrollBar.scrollWidth - 8;\n      const scroll = () => {\n        scrollBar.scroll({\n          left: isScrollBarAtEnd() ? 0 : scrollBar.clientWidth,\n          behavior: \"smooth\",\n        });\n      };\n      scrollBar.addEventListener(\"scroll\", () => {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = setTimeout(() => {\n          nextElement.style.transform = isScrollBarAtEnd()\n            ? \"rotate(180deg)\"\n            : \"\";\n        }, 150);\n      });\n      scroll();\n    }\n  },\n  openAllTags() {\n    document\n      .querySelectorAll(\".card-allinfo .card-tag-cloud\")\n      .forEach((tagCloudElement) => tagCloudElement.classList.add(\"all-tags\"));\n    document.getElementById(\"more-tags-btn\")?.remove();\n  },\n  listenToPageInputPress() {\n    const toGroup = document.querySelector(\".toPageGroup\");\n    const pageText = document.getElementById(\"toPageText\");\n    if (!pageText) return;\n    const pageButton = document.getElementById(\"toPageButton\");\n    const pageNumbers = document.querySelectorAll(\".page-number\");\n    const lastPageNumber = +pageNumbers[pageNumbers.length - 1].textContent;\n    if (!pageText || lastPageNumber === 1) {\n      toGroup.style.display = \"none\";\n      return;\n    }\n    pageText.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Enter\") {\n        sco.toPage();\n        pjax.loadUrl(pageButton.href);\n      }\n    });\n    pageText.addEventListener(\"input\", () => {\n      pageButton.classList.toggle(\n        \"haveValue\",\n        pageText.value !== \"\" && pageText.value !== \"0\"\n      );\n      if (+pageText.value > lastPageNumber) {\n        pageText.value = lastPageNumber;\n      }\n    });\n  },\n  addNavBackgroundInit() {\n    const scrollTop = document.documentElement.scrollTop;\n    if (scrollTop !== 0) {\n      document\n        .getElementById(\"page-header\")\n        .classList.add(\"nav-fixed\", \"nav-visible\");\n    }\n  },\n  toPage() {\n    const pageNumbers = document.querySelectorAll(\".page-number\");\n    const maxPageNumber = parseInt(\n      pageNumbers[pageNumbers.length - 1].innerHTML\n    );\n    const inputElement = document.getElementById(\"toPageText\");\n    const inputPageNumber = parseInt(inputElement.value);\n    document.getElementById(\"toPageButton\").href =\n      !isNaN(inputPageNumber) &&\n      inputPageNumber <= maxPageNumber &&\n      inputPageNumber > 1\n        ? window.location.href.replace(/\\/page\\/\\d+\\/$/, \"/\") +\n          \"page/\" +\n          inputPageNumber +\n          \"/\"\n        : \"/\";\n  },\n  owoBig(owoSelector) {\n    let owoBig = document.getElementById(\"owo-big\");\n    if (!owoBig) {\n      owoBig = document.createElement(\"div\");\n      owoBig.id = \"owo-big\";\n      document.body.appendChild(owoBig);\n    }\n    const showOwoBig = (event) => {\n      const target = event.target;\n      const owoItem = target.closest(owoSelector.item);\n      if (owoItem && target.closest(owoSelector.body)) {\n        const imgSrc = owoItem.querySelector(\"img\")?.src;\n        if (imgSrc) {\n          owoBig.innerHTML = `<img src=\"${imgSrc}\" style=\"max-width: 100%; height: auto;\">`;\n          owoBig.style.display = \"block\";\n          positionOwoBig(owoItem);\n        }\n      }\n    };\n    const hideOwoBig = (event) => {\n      if (\n        event.target.closest(owoSelector.item) &&\n        event.target.closest(owoSelector.body)\n      ) {\n        owoBig.style.display = \"none\";\n      }\n    };\n    const positionOwoBig = (owoItem) => {\n      const itemRect = owoItem.getBoundingClientRect();\n      owoBig.style.left = `${itemRect.left - owoBig.offsetWidth / 4}px`;\n      owoBig.style.top = `${itemRect.top}px`;\n    };\n    document.addEventListener(\"mouseover\", showOwoBig);\n    document.addEventListener(\"mouseout\", hideOwoBig);\n  },\n  changeTimeFormat(selector) {\n    selector.forEach((item) => {\n      const timeVal = item.getAttribute(\"datetime\");\n      item.textContent = utils.diffDate(timeVal, true);\n      item.style.display = \"inline\";\n    });\n  },\n  switchComments() {\n    const switchBtn = document.getElementById(\"switch-btn\");\n    if (!switchBtn) return;\n    let switchDone = false;\n    const commentContainer = document.getElementById(\"post-comment\");\n    const handleSwitchBtn = () => {\n      commentContainer.classList.toggle(\"move\");\n      if (!switchDone && typeof loadTwoComment === \"function\") {\n        switchDone = true;\n        loadTwoComment();\n      }\n    };\n    utils.addEventListenerPjax(switchBtn, \"click\", handleSwitchBtn);\n  },\n  homeTypeit() {\n    if (typeof home_subtitle === \"undefined\") return;\n    const ty = new TypeIt(\".banners-title-small\", {\n      speed: 200,\n      waitUntilVisible: true,\n      loop: true,\n      lifeLike: true,\n    });\n    home_subtitle.forEach((item) => {\n      ty.type(item).pause(500).delete(item);\n    });\n    ty.go();\n  },\n};\n\nconst addHighlight = () => {\n  const highlight = GLOBAL_CONFIG.highlight;\n  if (!highlight) return;\n  const { copy, expand, limit, syntax } = highlight;\n  const $isPrismjs = syntax === \"prismjs\";\n  const $isShowTool = highlight.enable || copy || expand || limit;\n  const expandClass = expand ? \"\" : \"closed\";\n  const $syntaxHighlight =\n    syntax === \"highlight.js\"\n      ? document.querySelectorAll(\"figure.highlight\")\n      : document.querySelectorAll('pre[class*=\"language-\"]');\n\n  if (!(($isShowTool || limit) && $syntaxHighlight.length)) return;\n\n  const copyEle = copy\n    ? `<i class=\"solitude fas fa-copy copy-button\"></i>`\n    : \"<i></i>\";\n  const expandEle = `<i class=\"solitude fas fa-angle-down expand\"></i>`;\n  const limitEle = limit\n    ? `<i class=\"solitude fas fa-angles-down\"></i>`\n    : \"<i></i>\";\n\n  const alertInfo = (ele, text) => utils.snackbarShow(text, false, 2000);\n\n  const copyFn = (e) => {\n    const $buttonParent = e.parentNode;\n    $buttonParent.classList.add(\"copy-true\");\n    const selection = window.getSelection();\n    const range = document.createRange();\n    const preCodeSelector = $isPrismjs ? \"pre code\" : \"table .code pre\";\n    range.selectNodeContents(\n      $buttonParent.querySelectorAll(`${preCodeSelector}`)[0]\n    );\n    selection.removeAllRanges();\n    selection.addRange(range);\n    document.execCommand(\"copy\");\n    alertInfo(e.lastChild, GLOBAL_CONFIG.lang.copy.success);\n    selection.removeAllRanges();\n    $buttonParent.classList.remove(\"copy-true\");\n  };\n\n  const expandClose = (e) => e.classList.toggle(\"closed\");\n  const shrinkEle = function () {\n    this.classList.toggle(\"expand-done\");\n  };\n\n  const ToolsFn = function (e) {\n    const $target = e.target.classList;\n    if ($target.contains(\"expand\")) expandClose(this);\n    else if ($target.contains(\"copy-button\")) copyFn(this);\n  };\n\n  const createEle = (lang, item, service) => {\n    const fragment = document.createDocumentFragment();\n    if ($isShowTool) {\n      const captionItem = item.querySelector(\"figcaption\");\n      let caption = \"\";\n      if (captionItem) {\n        caption = `<div class=\"caption\">${captionItem.innerHTML}</div>`;\n        item.removeChild(captionItem);\n      }\n      const hlTools = document.createElement(\"div\");\n      hlTools.className = `highlight-tools ${expandClass}`;\n      hlTools.innerHTML = expandEle + lang + caption + copyEle;\n      utils.addEventListenerPjax(hlTools, \"click\", ToolsFn);\n      fragment.appendChild(hlTools);\n    }\n    if (limit && item.offsetHeight > limit + 30) {\n      const ele = document.createElement(\"div\");\n      ele.className = \"code-expand-btn\";\n      ele.innerHTML = limitEle;\n      utils.addEventListenerPjax(ele, \"click\", shrinkEle);\n      fragment.appendChild(ele);\n    }\n    if (service === \"hl\") {\n      item.insertBefore(fragment, item.firstChild);\n    } else {\n      item.parentNode.insertBefore(fragment, item);\n    }\n  };\n\n  if ($isPrismjs) {\n    $syntaxHighlight.forEach((item) => {\n      const langName = item.getAttribute(\"data-language\") || \"Code\";\n      const highlightLangEle = `<div class=\"code-lang\">${utils.escapeHtml(\n        langName\n      )}</div>`;\n      utils.wrap(item, \"figure\", { class: \"highlight\" });\n      createEle(highlightLangEle, item);\n    });\n  } else {\n    $syntaxHighlight.forEach((item) => {\n      let langName = item.getAttribute(\"class\").split(\" \")[1];\n      if (langName === \"plain\" || langName === undefined) langName = \"Code\";\n      const highlightLangEle = `<div class=\"code-lang\">${utils.escapeHtml(\n        langName\n      )}</div>`;\n      createEle(highlightLangEle, item, \"hl\");\n    });\n  }\n};\n\nclass toc {\n  static init() {\n    const tocContainer = document.getElementById(\"card-toc\");\n    if (!tocContainer || !tocContainer.querySelector(\".toc a\")) {\n      tocContainer.style.display = \"none\";\n      return;\n    }\n    const el = document.querySelectorAll(\".toc a\");\n    el.forEach((e) => {\n      e.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n        utils.scrollToDest(\n          utils.getEleTop(\n            document.getElementById(\n              decodeURI(\n                (event.target.className === \"toc-text\"\n                  ? event.target.parentNode.hash\n                  : event.target.hash\n                ).replace(\"#\", \"\")\n              )\n            )\n          ),\n          300\n        );\n      });\n    });\n    this.active(el);\n  }\n\n  static active(toc) {\n    const $article = document.querySelector(\".article-container\");\n    const $tocContent = document.getElementById(\"toc-content\");\n    const list = $article.querySelectorAll(\"h1,h2,h3,h4,h5,h6\");\n    let detectItem = \"\";\n\n    const autoScroll = (el) => {\n      const activePosition = el.getBoundingClientRect().top;\n      const sidebarScrollTop = $tocContent.scrollTop;\n      if (activePosition > document.documentElement.clientHeight - 100) {\n        $tocContent.scrollTop = sidebarScrollTop + 150;\n      }\n      if (activePosition < 100) {\n        $tocContent.scrollTop = sidebarScrollTop - 150;\n      }\n    };\n\n    const findHeadPosition = (top) => {\n      if (top === 0) return false;\n      let currentIndex = \"\";\n      list.forEach((ele, index) => {\n        if (top > utils.getEleTop(ele) - 80) {\n          currentIndex = index;\n        }\n      });\n      if (detectItem === currentIndex) return;\n      detectItem = currentIndex;\n      document.querySelectorAll(\".toc .active\").forEach((i) => {\n        i.classList.remove(\"active\");\n      });\n      const activeitem = toc[detectItem];\n      if (activeitem) {\n        let parent = toc[detectItem].parentNode;\n        activeitem.classList.add(\"active\");\n        autoScroll(activeitem);\n        for (; !parent.matches(\".toc\"); parent = parent.parentNode) {\n          if (parent.matches(\"li\")) parent.classList.add(\"active\");\n        }\n      }\n    };\n\n    window.tocScrollFn = utils.throttle(() => {\n      const currentTop = window.scrollY || document.documentElement.scrollTop;\n      findHeadPosition(currentTop);\n    }, 100);\n    window.addEventListener(\"scroll\", tocScrollFn);\n  }\n}\n\nclass tabs {\n  static init() {\n    this.clickFnOfTabs();\n  }\n\n  static clickFnOfTabs() {\n    document\n      .querySelectorAll(\".article-container .tab > button\")\n      .forEach((item) => {\n        item.addEventListener(\"click\", function () {\n          const $tabItem = this.parentNode;\n          if (!$tabItem.classList.contains(\"active\")) {\n            const $tabContent = $tabItem.parentNode.nextElementSibling;\n            const $siblings = utils.siblings($tabItem, \".active\")[0];\n            $siblings && $siblings.classList.remove(\"active\");\n            $tabItem.classList.add(\"active\");\n            const tabId = this.getAttribute(\"data-href\").replace(\"#\", \"\");\n            [...$tabContent.children].forEach((item) => {\n              item.classList.toggle(\"active\", item.id === tabId);\n            });\n          }\n        });\n      });\n  }\n\n  static lureAddListener() {\n    if (!GLOBAL_CONFIG.lure) return;\n    const title = document.title;\n    document.addEventListener(\"visibilitychange\", () => {\n      const { lure } = GLOBAL_CONFIG;\n      document.title =\n        document.visibilityState === \"hidden\" ? lure.jump : lure.back;\n      if (document.visibilityState === \"visible\") {\n        setTimeout(() => {\n          document.title = title;\n        }, 2000);\n      }\n    });\n  }\n\n  static expireAddListener() {\n    const { expire } = GLOBAL_CONFIG;\n    if (!expire) return;\n    const list = document.querySelectorAll(\".post-meta-date time\");\n    const post_date = list.length\n      ? list[list.length - 1]\n      : document.querySelector(\".datetime\");\n    if (!post_date) return;\n    const ex = Math.ceil(\n      (new Date().getTime() -\n        new Date(post_date.getAttribute(\"datetime\")).getTime()) /\n        1000 /\n        60 /\n        60 /\n        24\n    );\n    if (expire.time > ex) return;\n    const ele = document.createElement(\"div\");\n    ele.className = \"expire\";\n    ele.innerHTML = `<i class=\"solitude fas fa-circle-exclamation\"></i>${\n      expire.text_prev\n    }${-(expire.time - ex)}${expire.text_next}`;\n    const articleContainer = document.querySelector(\".article-container\");\n    articleContainer.insertAdjacentElement(\n      expire.position === \"top\" ? \"afterbegin\" : \"beforeend\",\n      ele\n    );\n  }\n}\n\nconst scrollFnToDo = () => {\n  const { toc } = PAGE_CONFIG;\n\n  if (toc) {\n    const $cardTocLayout = document.getElementById(\"card-toc\");\n    const $cardToc = $cardTocLayout.querySelector(\".toc-content\");\n    const tocItemClickFn = (e) => {\n      const target = e.target.closest(\".toc-link\");\n      if (!target) return;\n\n      e.preventDefault();\n      utils.scrollToDest(\n        utils.getEleTop(\n          document.getElementById(\n            decodeURI(target.getAttribute(\"href\")).replace(\"#\", \"\")\n          )\n        ),\n        300\n      );\n      if (window.innerWidth < 900) {\n        $cardTocLayout.classList.remove(\"open\");\n      }\n    };\n    utils.addEventListenerPjax($cardToc, \"click\", tocItemClickFn);\n  }\n};\n\nconst forPostFn = () => {\n  scrollFnToDo();\n};\n\nwindow.refreshFn = () => {\n  const { is_home, is_page, page, is_post, ai_text } = PAGE_CONFIG;\n  const { runtime, lazyload, lightbox, randomlink, covercolor, lure, expire } =\n    GLOBAL_CONFIG;\n  const timeSelector = \".datetime, .webinfo-item time, .post-meta-date time\";\n  document.body.setAttribute(\"data-type\", page);\n  sco.changeTimeFormat(document.querySelectorAll(timeSelector));\n  runtime && sco.addRuntime();\n  [\n    scrollFn,\n    sidebarFn,\n    sco.addPhotoFigcaption,\n    sco.setTimeState,\n    sco.tagPageActive,\n    sco.categoriesBarActive,\n    sco.listenToPageInputPress,\n    sco.musicBind,\n    sco.addNavBackgroundInit,\n    sco.refreshWaterFall,\n  ].forEach((fn) => fn());\n  lazyload.enable && utils.lazyloadImg();\n  lightbox &&\n    utils.lightbox(\n      document.querySelectorAll(\n        \".article-container img:not(.flink-avatar,.gallery-group img, .no-lightbox)\"\n      )\n    );\n  randomlink && randomLinksList();\n  if (is_post) {\n    if (ai_text) {\n      ai.init();\n    }\n  }\n  sco.switchComments();\n  initObserver();\n  if (is_home) {\n    showTodayCard();\n    sco.homeTypeit();\n  }\n  typeof updatePostsBasedOnComments === \"function\" &&\n    updatePostsBasedOnComments();\n  if (is_post || is_page) {\n    addHighlight();\n    tabs.init();\n  }\n  if (is_post && expire) {\n    tabs.expireAddListener();\n  }\n  if (covercolor.enable) coverColor();\n  if (PAGE_CONFIG.toc) toc.init();\n  if (lure) tabs.lureAddListener();\n  page === \"music\" && initializeMusicPlayer();\n  forPostFn();\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  [\n    addCopyright,\n    window.refreshFn,\n    asideStatus,\n    () => (window.onscroll = percent),\n    sco.initConsoleState,\n  ].forEach((fn) => fn());\n});\n\ndocument.addEventListener(\"visibilitychange\", () => {\n  if (document.hidden) {\n    sco.wasPageHidden = true;\n  }\n});\n\nwindow.onkeydown = (e) => {\n  const { code, ctrlKey, shiftKey } = e;\n  if (\n    code === \"F12\" ||\n    (ctrlKey && shiftKey && (code === \"KeyI\" || code === \"KeyC\"))\n  ) {\n    utils.snackbarShow(GLOBAL_CONFIG.lang.f12, false, 3000);\n  }\n  if (code === \"Escape\") {\n    sco.hideConsole();\n  }\n};\n\ndocument.addEventListener(\"copy\", () => {\n  utils.snackbarShow(GLOBAL_CONFIG.lang.copy.success, false, 3000);\n});\n"]}