Greasy Fork

Greasy Fork is available in English.

扇贝单词增强

扇贝单词功能增强,带来更好的背单词体验。❤单词总结释义遮挡❤隐藏例句翻译❤自定义单词例句字体❤自定义功能快捷键❤专注模式/深色模式

当前为 2022-05-02 提交的版本,查看 最新版本

// ==UserScript==
// @name             扇贝单词增强
// @name:en          Shanbay Enhance
// @description      扇贝单词功能增强,带来更好的背单词体验。❤单词总结释义遮挡❤隐藏例句翻译❤自定义单词例句字体❤自定义功能快捷键❤专注模式/深色模式
// @description:en   More function for Shanbay.
// @version          0.1.8
// @author           ZiuChen
// @namespace        http://greasyfork.icu/zh-CN/users/605474
// @icon             https://cdn.jsdelivr.net/gh/ZiuChen/ZiuChen@main/avatar.jpg
// @source           https://github.com/ZiuChen/Shanbay-Enhance.git
// @supportURL       https://github.com/ZiuChen/Shanbay-Enhance.git
// @match            https://www.shanbay.com/*
// @match            https://web.shanbay.com/wordsweb/*
// @require          https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
// @require          https://cdn.bootcdn.net/ajax/libs/toastr.js/latest/js/toastr.min.js
// @license          MIT
// ==/UserScript==

/******/ (() => {
  // webpackBootstrap
  /******/ "use strict";
  /******/ var __webpack_modules__ = {
    /***/ "./package.json": /***/ (module) => {
      module.exports = JSON.parse(
        '{"name":"shanbay-enhance","version":"0.1.7","description":"More function for Shanbay.","main":"userscript.js","scripts":{"dev":"webpack --mode development --config config/webpack.config.dev.js","build":"webpack --mode production --config config/webpack.config.prod.js"},"repository":{"type":"git","url":"https://github.com/ZiuChen/Shanbay-Enhance.git"},"author":"ZiuChen","license":"MIT","bugs":{"url":"https://github.com/ZiuChen/Shanbay-Enhance/issues"},"homepage":"https://github.com/ZiuChen/Shanbay-Enhance#readme","devDependencies":{"@babel/core":"^7.16.7","babel-loader":"^8.2.3","userscript-metadata-webpack-plugin":"^0.1.1","webpack":"^5.65.0","webpack-cli":"^4.9.1","webpack-livereload-plugin":"^3.0.2","webpack-merge":"^5.8.0"},"dependencies":{}}'
      );

      /***/
    },

    /******/
  };
  /************************************************************************/
  /******/ // The module cache
  /******/ var __webpack_module_cache__ = {};
  /******/
  /******/ // The require function
  /******/ function __webpack_require__(moduleId) {
    /******/ // Check if module is in cache
    /******/ var cachedModule = __webpack_module_cache__[moduleId];
    /******/ if (cachedModule !== undefined) {
      /******/ return cachedModule.exports;
      /******/
    }
    /******/ // Create a new module (and put it into the cache)
    /******/ var module = (__webpack_module_cache__[moduleId] = {
      /******/ // no module.id needed
      /******/ // no module.loaded needed
      /******/ exports: {},
      /******/
    });
    /******/
    /******/ // Execute the module function
    /******/ __webpack_modules__[moduleId](
      module,
      module.exports,
      __webpack_require__
    );
    /******/
    /******/ // Return the exports of the module
    /******/ return module.exports;
    /******/
  }
  /******/
  /************************************************************************/
  var __webpack_exports__ = {};
  // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
  (() => {
    // CONCATENATED MODULE: ./src/style/CommonStyle.js
    const style =
      /* CSS */
      `
/* switch  */
.switch {
    position: relative;
    display: inline-block;
    width: 50px;
    height: 34px;
}

.switch input {display:none;}

.slider {
    position: absolute;
    cursor: pointer;
    height: 25px;
    width: 45px;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #ccc;
    -webkit-transition: .4s;
    transition: .4s;
}

.slider:before {
    position: absolute;
    content: "";
    height: 19px;
    width: 19px;
    left: 3px;
    bottom: 3px;
    background-color: white;
    -webkit-transition: .3s;
    transition: .3s;
}

input:checked + .slider {
    background-color: #209e85;
}

input:focus + .slider {
    box-shadow: 0 0 1px #209e85;
}

input:checked + .slider:before {
    -webkit-transform: translateX(20px);
    -ms-transform: translateX(20px);
    transform: translateX(20px);
}

.slider.round {
    border-radius: 34px;
}

.slider.round:before {
    border-radius: 50%;
}

/* toastr position */
.toastr-center {
    top: 50%;
    left: 50%;
    margin-top: -30px;
    margin-left: -150px;
}

/* config input text */
input[type=text] {
    width: 220px;
    border: 1px solid #ccc;
    background-color: #fff;
    height: 30px;
    margin-top: 4px;
    line-height: 30px;
}

input[id=config-fonts-choice-tmp] {
    margin-left: 10px;
}

input[id=config-fonts-selector] {
    width: 450px;
}

button[class~=short-keys] {
    height: 25px;
    padding-right: 5px;
    padding-left: 5px;
    margin-top: 5px;
    margin-right: 10px;
    cursor: pointer;
    border: 1px solid #ccc;
}

button:focus {
    background-color: #ccc;
}

button[class~=settingbutton] {
    height: 25px;
    padding-right: 5px;
    padding-left: 5px;
    margin-top: 5px;
    margin-right: 20px;
    cursor: pointer;
    border: 1px solid #ccc;
}

.short-keys-wrap {
    width: 1000px;
}

/* hide translation */
.hideTrans {
    color: #cccccc;
    background-color: #cccccc;
}

.removeTrans {
    display: none;
}

.showTrans {
    color: black;
    background-color: ;
}

`;
    /* harmony default export */ const CommonStyle = style; // CONCATENATED MODULE: ./src/common/LoadUrl.js
    function LoadUrl() {
      const cssUrl = [
        {
          name: `toastr`,
          url: `https://cdn.bootcdn.net/ajax/libs/toastr.js/latest/toastr.min.css`,
        },
      ];
      cssUrl.forEach((item) => {
        $("head").append(`<link href="${item.url}" rel="stylesheet">`);
      });
      $("head").append(`<style class="common-style">${CommonStyle}<style>`);
    }

    /* harmony default export */ const common_LoadUrl = LoadUrl; // CONCATENATED MODULE: ./src/common/SendRequest.js
    async function sendRequest(url, callBack, options) {
      let res = await fetch(url, options)
        .then((response) => {
          return response.blob();
        })
        .then((blob) => {
          return new Promise((resolve) => {
            let reader = new FileReader();

            reader.onload = () => {
              let htmlData = reader.result;
              htmlData = new window.DOMParser().parseFromString(
                htmlData,
                "text/html"
              );
              resolve(htmlData);
            };

            reader.readAsText(blob, "GBK");
          });
        })
        .then((response) => {
          return callBack(response);
        })
        .catch((error) => {
          console.error(error);
        });
      return res;
    }

    /* harmony default export */ const SendRequest = sendRequest; // CONCATENATED MODULE: ./src/common/Config.js
    const { version } = __webpack_require__("./package.json");

    const fonts = [
      "",
      "宋体",
      "华文中宋",
      "思源宋体 CN",
      "微软雅黑",
      "等线",
      "仿宋",
    ];
    const exampleHideType = ["隐藏并占位", "隐藏并移除", "不隐藏"];
    const fontToggleSelectors = [
      {
        name: "学习页单词",
        selector: ".index_word__3nhJU",
        enable: true,
      },
      {
        name: "详情页单词",
        selector: ".VocabPronounce_word__17Tma",
        enable: true,
      },
      {
        name: "单词小结",
        selector: ".StudySummaryItem_studySummaryItem__k2ME0",
        enable: true,
      },
      {
        name: "提示例句",
        selector: ".index_hint__2Z39O",
        enable: true,
      },
      {
        name: "单词词义",
        selector: ".BayTrans_paraphrase__2JMIz",
        enable: true,
      },
      {
        name: "单词例句",
        selector: ".BayTrans_exampleBox__3CsaJ",
        enable: true,
      },
      {
        name: "真题词义",
        selector: ".index_name__1gkfJ",
        enable: true,
      },
      {
        name: "真题例句",
        selector: ".index_left__2SYuy",
        enable: true,
      },
      {
        name: "学习页选项",
        selector: ".index_btnBox__pXO_l",
        enable: false,
      },
      {
        name: "音标",
        selector: ".Pronounce_phonetic__1bcqt, .index_phonetic__o-RcB",
        enable: false,
      },
      {
        name: "模块前说明文本(单词解释/真题例句)",
        selector: ".span1",
        enable: false,
      },
    ];
    const shortcutKeys = [
      {
        id: "config-keycode-word-pronunce-uk",
        name: "单词发音(英)",
        able: true,
        showKeys: ["Numpad0", "UNSET"],
        keyCodes: [96, 0],
      },
      {
        id: "config-keycode-word-pronunce-us",
        name: "单词发音(美)",
        able: true,
        showKeys: ["Numpad3", "UNSET"],
        keyCodes: [99, 0],
      },
      {
        id: "config-keycode-example-pronunce",
        name: "例句发音",
        able: true,
        showKeys: ["Numpad4", "UNSET"],
        keyCodes: [100, 0],
      },
      {
        id: "config-keycode-example-pronunce-real-question",
        name: "真题例句发音",
        able: true,
        showKeys: ["Numpad5", "UNSET"],
        keyCodes: [101, 0],
      },
      {
        id: "config-keycode-summary-toggle",
        name: "小结释义遮挡",
        able: true,
        showKeys: ["Enter", "UNSET"],
        keyCodes: [13, 0],
      },
      {
        id: "config-keycode-collins-toggle",
        name: "切换柯林斯词典",
        able: true,
        showKeys: ["Numpad6", "UNSET"],
        keyCodes: [102, 0],
      },
      {
        id: "config-keycode-toggle-example",
        name: "显示/隐藏例句翻译",
        able: true,
        showKeys: ["Enter", "UNSET"],
        keyCodes: [13, 0],
      },
    ];
    const config = [
      {
        content: "深色模式:",
        id: "config-darkmode",
        default: false,
        type: "show",
        name: "choice",
      },
      {
        content: "单词总结释义遮挡:",
        id: "config-summary",
        default: true,
        type: "show",
        name: "choice",
      },
      {
        content: "单词总结自动发音:",
        id: "config-silp-pronunce",
        default: true,
        type: "show",
        name: "choice",
      },
      {
        content: "部分字体修改:",
        id: "config-fonts",
        default: true,
        type: "show",
        name: "choice-question",
        info: "开启后,单词、释义、例句的字体将会被修改",
      },
      {
        content: "选择使用的字体:",
        id: "config-fonts-choice",
        default: "宋体",
        type: "show",
        name: "select",
      },
      {
        content: "修改选择器:",
        id: "config-fonts-selector",
        default: JSON.stringify(fontToggleSelectors),
        type: "show",
        name: "input",
        info: "自定义修改页面中哪些元素的字体,务必以最小化形式填回。",
      },
      {
        content: "快捷键增强:",
        id: "config-shortkey",
        default: "true",
        type: "show",
        name: "choice-question",
        info: "开启后,左键点击以编辑快捷键,右键点击以移除快捷键",
      },
      {
        content: "自定义快捷键:",
        id: "config-shortkey-keycode",
        default: JSON.stringify(shortcutKeys),
        type: "show",
        name: "select",
      },
      {
        content: "例句翻译隐藏:",
        id: "config-example-hide",
        default: "隐藏并占位",
        type: "show",
        name: "radio",
      },
      {
        content: "移除笔记栏:",
        id: "config-note-remove",
        default: true,
        type: "show",
        name: "choice",
      },
      {
        content: "自动进入专注模式:",
        id: "config-focus-mode",
        default: false,
        type: "show",
        name: "choice",
      },
      {
        content: "检查更新提示:",
        id: "config-update",
        default: true,
        type: "show",
        name: "choice",
      },
    ];
    /* harmony default export */ const Config = {
      version: version,
      config: config,
      shortcutKeys: shortcutKeys,
      fontToggleSelectors: fontToggleSelectors,
      fonts: fonts,
      exampleHideType: exampleHideType,
    }; // CONCATENATED MODULE: ./src/common/Log.js
    function log(msg) {
      console.log(`%c[Shanbay Enhance] ${msg}`, "color: #209e85");
    }

    /* harmony default export */ const Log = log; // CONCATENATED MODULE: ./src/common/InitializeConfig.js
    function initializeConfig() {
      Config.config.forEach((item) => {
        if (localStorage.getItem(item.id) === null)
          localStorage.setItem(item.id, item.default);

        if (item.id === "config-shortkey-keycode") {
          let currentShortcutKeys = JSON.parse(
            localStorage.getItem("config-shortkey-keycode")
          );
          let defaultShortcutKeys = Config.shortcutKeys;
          let defaultFuntions = defaultShortcutKeys.map((defaultKey) => {
            return defaultKey.id;
          });
          let currentFuntions = currentShortcutKeys.map((currentKey) => {
            return currentKey.id;
          });
          let removedFunctions = currentFuntions.filter((currentFunction) => {
            return defaultFuntions.indexOf(currentFunction) === -1;
          });
          let newFunctions = defaultFuntions.filter((defaultFuntion) => {
            return currentFuntions.indexOf(defaultFuntion) === -1;
          }); // remove removed functions

          currentShortcutKeys.forEach((currentKey, index) => {
            if (removedFunctions.indexOf(currentKey.id) !== -1) {
              Log("remove shortKey config");
              currentShortcutKeys.splice(index, 1);
            }
          }); // add new functions

          defaultShortcutKeys.forEach((defaultKey, index) => {
            if (newFunctions.indexOf(defaultKey.id) !== -1) {
              Log("add new shortKey config");
              currentShortcutKeys.splice(index, 0, defaultKey);
            }
          });
          localStorage.setItem(
            "config-shortkey-keycode",
            JSON.stringify(currentShortcutKeys)
          );
        }
      });
    }

    /* harmony default export */ const InitializeConfig = initializeConfig; // CONCATENATED MODULE: ./src/common/CheckUpdate.js
    const ScriptID = "437942";
    const GreasyUrl = `http://greasyfork.icu/zh-CN/scripts/${ScriptID}`;

    async function CheckUpdate() {
      Log(`script loaded: ${Config.version}`);
      if (window.location.hash !== "#/study/entry") return;
      InitializeConfig();
      SendRequest(GreasyUrl, (obj) => {
        return obj.querySelectorAll(".script-show-version>span")[1].textContent;
      }).then((res) => {
        let weightLastest = 0;
        let weightNow = 0;
        res
          .split(".")
          .reverse()
          .forEach((value, index) => {
            weightLastest += (index + 1) * Math.pow(10, index + 1) * value;
          });
        Config.version
          .split(".")
          .reverse()
          .forEach((value, index) => {
            weightNow += (index + 1) * Math.pow(10, index + 1) * value;
          });

        if (weightLastest > weightNow) {
          Log("need update");
          toastr.options = {
            timeOut: 999999999,
            onclick: () => {
              location.href = `${GreasyUrl}/code/${ScriptID}.user.js`;
            },
          };
          toastr.warning(`有新版本:${res},点击更新脚本。`, `Shanbay Enhance`);
        } else {
          Log("version Checked");
          if (localStorage.getItem("config-update") !== "true") return;
          toastr.options = {
            timeOut: 1000,
          };
          toastr.success(`版本已是最新:${Config.version}`, `Shanbay Enhance`);
        }
      });
    }

    /* harmony default export */ const common_CheckUpdate = CheckUpdate; // CONCATENATED MODULE: ./src/function/FocusMode.js
    function focusMode() {
      if (localStorage.getItem("config-focus-mode") === "false") {
        $(".Nav_nav__3kyeO").show();
        $(".Footer_footerWrap__L4iuD").show();
        $(".Layout_page__2Wedt").css("padding-bottom", "");
      } else if (localStorage.getItem("config-focus-mode") === "true") {
        $(".Nav_nav__3kyeO").hide();
        $(".Footer_footerWrap__L4iuD").hide();
        $(".Layout_page__2Wedt").css("padding-bottom", "0px");

        if (window.location.hash === "#/study/entry") {
          toastr.options = {
            onclick: () => {
              location.hash = "#/setting";
            },
          };
          toastr.info("专注模式已开启", "Shanbay Enhance");
        }
      }
    }

    /* harmony default export */ const FocusMode = focusMode; // CONCATENATED MODULE: ./src/style/DarkStyle.js
    const darkStyle =
      /* CSS */
      `
    /* Nav Bar */
    .Nav_nav__3kyeO {
        background-color: rgb(31, 125, 105);
    }

    .Nav_nav__3kyeO .Nav_container__sBZA1 .Nav_itemsWrapper__3FUxo .Nav_item__TffFb {
        text-decoration-color: initial;
        color: rgb(187, 222, 212);
    }

    .searchContainer {
        background-color: transparent;
        border-color: rgba(49, 52, 54, 0.7);
    }

    .searchContainer .input {
        outline-color: initial;
        border-color: initial;
        background-color: transparent;
        color: rgb(236, 232, 226);
    }

    .Nav_nav__3kyeO .Nav_container__sBZA1 .Nav_rightWrapper__1myNk .Nav_hotkey__35TKx {
        color: rgb(236, 232, 226);
    }

    .index_loginWrap__9lXnS .index_shortInfo__2I1h4 .index_nickName__H__xF {
        color: rgb(236, 232, 226);
    }

    /* Second Nav Bar */
    .SubNav_subnav__1HR8R .SubNav_container__1zXeP .SubNav_itemsWrapper__1mM4u .SubNav_item__167K_.SubNav_active__MC6yN {
        color: rgb(109, 224, 199);
        border-bottom-color: rgb(40, 164, 138);
    }

    .SubNav_subnav__1HR8R .SubNav_container__1zXeP .SubNav_itemsWrapper__1mM4u .SubNav_item__167K_ {
        text-decoration-color: initial;
        color: rgb(170, 162, 149);
        border-bottom-color: transparent;
    }

    /* Page */
    .index_appLoading__8ds2m {
        background-color: rgb(31, 33, 34);
    }

    .Layout_page__2Wedt {
        background-color: rgb(31, 33, 34);
    }

    body {
        color: rgba(236, 232, 226, 0.85);
        background-color: rgb(25, 26, 27);
    }

    .study-page {
        color: rgba(236, 232, 226, 0.85);
        background-color: rgb(25, 26, 27);
    }

    .index_content__1XOlo, .index_title__1zZFT {
        color: rgb(236, 232, 226);
    }

    .index_title__1zZFT {
        border-right-color: rgb(59, 63, 65);
    }

    .index_option__1CVr2 {
        border-color: rgb(59, 63, 65);
    }

    .index_option__1CVr2.index_green__2lFgU:hover {
        background-color: rgb(31, 125, 105);
    }

    .index_option__1CVr2.index_red__VSPTN:hover {
        background-color: rgb(157, 12, 18);
    }

    .index_progress__1aCBt {
        border-color: rgb(57, 62, 63);
    }

    .index_opt__V_oeM:nth-child(1) {
        color: rgb(236, 232, 226) !important;
        background-color: rgb(31, 125, 105) !important;
    }

    .index_opt__V_oeM:nth-child(2) {
        color: rgb(192, 185, 175) !important;
        background-color: rgb(31, 32, 33) !important;
    }

    .index_opt__V_oeM:nth-child(3) {
        color: rgb(236, 232, 226) !important;
        background-color: rgb(197, 120, 11) !important;
    }

    .index_hint__2Z39O {
        color: rgb(192, 185, 175);
        background-color: rgb(35, 36, 38);
        border-color: rgb(59, 63, 65);
    }

    .index_hint__2Z39O .highlight {
        color: rgb(192, 185, 175);
    }

    /* Content Page */
    .index_wrap__2PaUx {
        background-image: initial;
        background-color: rgb(25, 26, 27);
    }

    .index_main__3lz1F {
        color: rgb(203, 197, 188);
    }

    .index_name__1gkfJ {
        color: rgb(203, 197, 188);
    }

    .index_name__AwHP3 {
        background-color: rgb(31, 33, 34);
    }

    .index_from__6aBoj, .index_name__AwHP3 {
        color: rgb(190, 183, 172);
    }

    .AppletTip_appletTip__2U_Sv {
        color: rgb(198, 163, 100);
        background-color: rgb(63, 54, 9);
        border-color: rgb(106, 74, 13);
    }

    .Message_message__w-TNe.alert {
        color: rgb(198, 163, 100);
        border-color: rgb(106, 74, 13);
        border-top-color: rgb(106, 74, 13);
        border-right-color: rgb(106, 74, 13);
        border-bottom-color: rgb(106, 74, 13);
        border-left-color: rgb(106, 74, 13);
        background-color: rgb(63, 54, 9);
    }

    .index_tabs__1CVfU .index_switch__3XPdt .index_active__1bHoy {
        border-color: rgb(59, 63, 65) rgb(59, 63, 65) rgb(49, 52, 54);
        border-top-color: rgb(59, 63, 65);
        border-right-color: rgb(59, 63, 65);
        border-bottom-color: rgb(49, 52, 54);
        border-left-color: rgb(59, 63, 65);
        color: rgb(88, 218, 189);
    }

    .index_tabs__1CVfU .index_switch__3XPdt .index_tab__37Cha {
        border-color: transparent transparent rgb(59, 63, 65) !important;
        border-top-color: transparent !important;
        border-right-color: transparent;
        border-bottom-color: rgb(59, 63, 65) !important;
        border-left-color: transparent !important;
    }

    .index_tabs__1CVfU .index_switch__3XPdt {
        border-bottom-color: rgb(59, 63, 65);
    }

    .BayTrans_container__PDsgF .BayTrans_paraphrase__2JMIz {
        color: rgb(203, 197, 188);
    }

    h1, h2, h3, h4, h5, h6 {
        color: rgba(236, 232, 226, 0.85);
    }

    /* Spell Page */
    .index_mask__2HUE0 {
        background-color: rgb(25, 26, 27);
    }

    .index_wrapper__2tUTe .index_footer__cTylk input {
        border-color: rgb(56, 61, 62);
        background-color: rgb(29, 30, 31);
        caret-color: rgb(88, 218, 189);
    }

    .index_wrapper__2tUTe .index_main__1_DrK {
        background-color: rgb(25, 26, 27);
    }

    /* Summary Page */
    .StudySummaryItem_studySummaryItem__k2ME0 {
        border-color: rgb(63, 69, 70);
    }

    .StudySummaryItem_studySummaryItem__k2ME0.wrong {
        background-color: rgb(55, 23, 22);
    }

    .StudySummaryItem_studySummaryItem__k2ME0.right {
        background-color: rgb(42, 60, 24);
    }

    input:checked + .slider {
        background-color: rgb(31, 125, 105);
    }

    /* Search Page */
    .Layout_page__2Wedt .Layout_main__2_zw8 {
        background-color: rgb(25, 26, 27);
    }

    /* Word Study Page */
    .index_title__nQoBd {
        color: rgb(203, 197, 188);
    }

    .DailyTask_item__3qF5E .DailyTask_num__1GeJP {
        color: rgb(203, 197, 188);
    }

    .Book_book__2zLyg .Book_right__1bR8n .Book_title__32iYk .Book_name__1-4Q1 {
        color: rgb(203, 197, 188);
    }

    .Book_book__2zLyg .Book_right__1bR8n .Book_timeWrapper__1RYvh .Book_time__1RNcG {
        color: rgb(203, 197, 188);
    }

    .index_status__15KG5 {
        background-color: rgb(28, 29, 30);
    }

    .Book_book__2zLyg .Book_right__1bR8n .Book_prog__2AVmh {
        background-color: rgb(33, 35, 37);
    }

    .index_author__125n7, .index_content__2necR, .index_translation__2qOVy {
        color: rgb(203, 197, 188);
    }

    /* Book Page */
    .index_container__2E1XM {
        background-color: rgb(25, 26, 27);
    }

    .index_container__YmQjX .index_bookBox__Pb-ea {
        background-color: rgb(28, 29, 30);
    }

    .index_container__2u7Lc .index_listBox__3Xp7y .index_bookBox__2iInd {
        background-color: rgb(28, 29, 30);
    }

    .index_progress__3dDPY {
        background-color: rgb(31, 33, 34);
    }

    .index_container__2u7Lc .index_listBox__3Xp7y .index_bookBox__2iInd .index_content__2fjn3 .index_handleBox__6gJAw .index_handle__1c1p9 {
        background-color: rgb(20, 55, 49);
        color: rgb(88, 218, 189);
    }

    /* New Words Page */
    .Nav_list-item__1GYMX.is-expanded {
        background-color: rgb(28, 29, 30);
    }
    .Nav_list-item__1GYMX {
        background-color: rgb(28, 29, 30);
    }

    .ListEmptyTip_listEmptyTip__35OIc {
        background-color: rgb(28, 29, 30);
    }

    .ChoicesSelect_choicesSelect__21-Ji .ChoicesSelect_select__acw6- {
        background-color: rgb(25, 26, 27);
    }

    .CollectionExamBooter_collectionExamBooter__2Mt8z {
        background-color: rgb(31, 32, 33);
    }

    .CollectionExamBooter_collectionExamBooter__2Mt8z .CollectionExamBooter_beginBtn__tC0NS {
        display: block;
        width: 100%;
        margin-top: 18px;
        height: 46px;
        border-radius: 4px;
        background-color: #28bea0;
        font-size: 18px;
        font-weight: 500;
        color: #fff;
    }

    .index_pageCollection__3Rh5y .index_batchUploadBtn__37bsL {
        border-color: rgb(38, 153, 128);
        background-color: rgb(25, 26, 27);
        color: rgb(88, 218, 189);
    }

    /* Setting Page */
    .SettingContainer_item__3RKJY .SettingContainer_title__1IBOy {
        color: rgb(203, 197, 188);
    }

    .SettingContainer_item__3RKJY select {
        border-color: rgb(63, 69, 70);
        background-color: rgb(25, 26, 27);
    }

    input[type="text"] {
        border-color: rgb(63, 69, 70);
        background-color: rgb(25, 26, 27);
    }

    button[class~="short-keys"] {
        border-color: rgb(63, 69, 70);
        background-color: rgb(25, 26, 27);
    }
    button[class~="settingbutton"] {
        border-color: rgb(63, 69, 70);
        background-color: rgb(25, 26, 27);
    }
`;
    /* harmony default export */ const DarkStyle = darkStyle; // CONCATENATED MODULE: ./src/function/ToggleDarkMode.js
    function toggleDarkMode() {
      if (localStorage.getItem("config-darkmode") === "false") {
        $("head .dark-style").remove();
      } else if (localStorage.getItem("config-darkmode") === "true") {
        $("head").append(`<style class="dark-style">${DarkStyle}<style>`);
      }
    }

    /* harmony default export */ const ToggleDarkMode = toggleDarkMode; // CONCATENATED MODULE: ./src/common/ConfigOperation.js
    const checkString = "Shanbay Enhance Setting";

    async function importConfig() {
      let input = document.createElement("input");
      input.type = "file";
      input.click();
      $(input).change((e) => {
        let reader = new FileReader();

        reader.onload = (res) => {
          let target = res.target;

          if (target.result.indexOf(`${checkString}`) === -1) {
            toastr.error("请检查设置文件是否正确", "Shanbay Enhance");
            Log("Import aborted");
            $(input).val("");
            return;
          }

          let data = JSON.parse(target.result);
          data.forEach((config, index) => {
            if (index === 0) return;
            localStorage.setItem(config.id, config.value);
          });
          toastr.success("成功导入设置,即将刷新", "Shanbay Enhance");
          Log("Settings have been imported");
          setTimeout("location.reload()", 1000);
        };

        reader.readAsText(e.target.files[0], "utf-8");
      });
    }

    function exportConfig() {
      let version = Config.version;
      let timeStamp = new Date().valueOf();
      let currentConfig = [
        {
          check: `${checkString}`,
          version: version,
          timeStamp: timeStamp,
        },
      ];
      Config.config.forEach((config) => {
        let currentConfigObj = {};
        currentConfigObj.id = config.id;
        currentConfigObj.value = localStorage.getItem(config.id);
        currentConfig.push(currentConfigObj);
      });
      currentConfig = JSON.stringify(currentConfig);
      let blob = new Blob([currentConfig], {
          type: "text/json",
        }),
        a = document.createElement("a");
      a.download = `[Shanbay Enhance] setting.json`;
      a.href = window.URL.createObjectURL(blob);
      toastr.success("成功导出设置", "Shanbay Enhance");
      setTimeout(() => {
        a.click();
      }, 1000);
      Log("Settings Exported");
    }

    function restoreConfig() {
      toastr.success("成功恢复初始设置,即将刷新", "Shanbay Enhance");
      setTimeout(() => {
        localStorage.clear();
        location.reload();
      }, 1000);
      Log("Settings have been reset");
    }

    /* harmony default export */ const ConfigOperation = {
      importConfig: importConfig,
      exportConfig: exportConfig,
      restoreConfig: restoreConfig,
    }; // CONCATENATED MODULE: ./src/common/LoadConfig.js
    function loadConfig() {
      // Config Initialize
      InitializeConfig();
      if (window.location.hash !== "#/setting") return; // Update Setting List

      $(".SettingContainer_item__3RKJY").wrapAll(
        `<div class="defaultSettings"></div>`
      );
      $(".SettingContainer_setting__2aBZV").append(
        `<div class="scriptSettings"></div>`
      );
      $(".SettingContainer_setting__2aBZV").css("overflow", "auto");
      $(".SettingContainer_setting__2aBZV").css("height", "660px");
      Config.config.forEach((item) => {
        function getOptions() {
          let options = "";
          let checked = "";
          if (localStorage.getItem(item.id) === "true") checked = "checked"; // Key-value is not Boolean but String

          if (item.name === "choice") {
            options += `<span class="SettingContainer_title__1IBOy">${item.content}`;
            options += `</span>`;
            options += `<input type="checkbox" id="${item.id}" ${checked}>`;
          }

          if (item.name === "choice-question") {
            options += `<span class="SettingContainer_title__1IBOy">${item.content}`;
            options += `<span class="SettingContainer_questionWrap__1nE7J">?<span class="SettingContainer_question__VM3MF">${item.info}</span></span>`;
            options += `</span>`;
            options += `<input type="checkbox" id="${item.id}" ${checked}>`;
          }

          if (item.name === "select") {
            options += `<span class="SettingContainer_title__1IBOy">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                ${item.content}</span>`;

            if (item.id === "config-fonts-choice") {
              options += `<select id="${item.id}">`;
              Config.fonts.forEach((font, index) => {
                let selected = "";
                if (localStorage.getItem("config-fonts-choice") === font)
                  selected = "selected";
                options += `<option value="${index}" ${selected}>${font}</option>`;
              });
              options += `</select>`;
              options += `<input type="text" id="config-fonts-choice-tmp" placeholder="自定义字体">`;
            } else if (item.id === "config-shortkey-keycode") {
              let shortcutKeys;

              if (localStorage.getItem("config-shortkey-keycode") === null) {
                shortcutKeys = Config.shortcutKeys;
              } else
                shortcutKeys = JSON.parse(
                  localStorage.getItem("config-shortkey-keycode")
                );

              options += `<span class="short-keys-wrap">`;
              shortcutKeys.forEach((key) => {
                options += `${key.name}:`;
                key.showKeys.forEach((showKey, index) => {
                  options += `<button class="short-keys ${key.id}" key="${key.keyCodes[index]}">${showKey}</button>`;
                });
              });
              options += `</span>`;
            }
          } else if (item.id === "config-fonts-selector") {
            options += `<span class="SettingContainer_title__1IBOy">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                ${item.content}`;
            options += `<span class="SettingContainer_questionWrap__1nE7J">?<span class="SettingContainer_question__VM3MF">${item.info}</span></span>`;
            options += `</span>`;
            options += `<input type="text" id="config-fonts-selector" placeholder="自定义选择器" value="">`;
          }

          if (item.name === "radio") {
            options += `<span class="SettingContainer_title__1IBOy">${item.content}</span>`;
            options += `<div>`;
            Config.exampleHideType.forEach((type, index) => {
              let checked = "";
              if (localStorage.getItem("config-example-hide") === type)
                checked = "checked";
              options += `<label><input type="radio" name="config-example-hide" value="${type}" ${checked}>${type}</label>`;
            });
          }

          return options;
        }

        if (item.type === "unshow") return;
        $(".scriptSettings").append(
          /* html */
          `
            <div class="SettingContainer_item__3RKJY">
                ${getOptions()}
            </div>`
        );
      });
      $(".scriptSettings").append(
        /* html */
        `
    <div class="SettingContainer_item__3RKJY">
        <span class="SettingContainer_title__1IBOy">设置选项:</span>
        <span class="SettingContainer_minititle">导出当前设置:</span>
        <button type="checkbox" class="settingbutton export-setting">Export</button>
        <span class="SettingContainer_minititle">导入已有设置:</span>
        <button type="checkbox" class="settingbutton import-setting">Import</button>
        <span class="SettingContainer_minititle">恢复初始设置:</span>
        <button type="checkbox" class="settingbutton restore-setting">Restore</button>
    </div>`
      );
      $(".settingbutton").click((e) => {
        let operation = e.target.classList[1];
        if (operation.indexOf("export") !== -1) ConfigOperation.exportConfig();
        if (operation.indexOf("import") !== -1) ConfigOperation.importConfig();
        if (operation.indexOf("restore") !== -1)
          ConfigOperation.restoreConfig();
      });
      if (localStorage.getItem("config-fonts") === "false")
        $("#config-fonts-choice").parent().hide();
      $("#config-fonts-selector").val(
        localStorage.getItem("config-fonts-selector")
      );
      if ($("#config-fonts-choice")[0].options.selectedIndex === 0)
        $("#config-fonts-choice-tmp").val(
          localStorage.getItem("config-fonts-choice")
        );
      if (localStorage.getItem("config-shortkey") === "false")
        $(".short-keys-wrap").parent().hide();

      function leftClickCallBack(e) {
        toastr.options = {
          timeOut: 999999999,
          preventDuplicates: true,
        };
        toastr.info("请按下任意键以设置快捷键", "Shanbay Enhance");
        $(document).keydown((keydownEvent) => {
          // TODO: move to change() duplicated key varify lacked
          let KeyCodesConfigs = JSON.parse(
            localStorage.getItem("config-shortkey-keycode")
          );
          KeyCodesConfigs.forEach((KeyCodesConfig) => {
            if (KeyCodesConfig.id === e.target.classList[1]) {
              if (
                KeyCodesConfig.keyCodes.indexOf(keydownEvent.keyCode) !== -1
              ) {
                toastr.clear();
                toastr.options = {
                  timeOut: 1000,
                  preventDuplicates: true,
                };
                toastr.error("快捷键重复", "Shanbay Enhance");
                return;
              }

              let index = KeyCodesConfig.keyCodes.indexOf(
                parseInt(e.target.attributes["key"].value)
              );
              KeyCodesConfig.showKeys[index] = keydownEvent.code;
              KeyCodesConfig.keyCodes[index] = keydownEvent.keyCode;
              toastr.clear();
              $(e.target).trigger("change", {
                type: "shortKey-add",
                event: {
                  clickEvent: e,
                  keyDownEvent: keydownEvent,
                },
              });
            }
          });
          localStorage.setItem(
            "config-shortkey-keycode",
            JSON.stringify(KeyCodesConfigs)
          );
          $(document).off("keydown");
        });
      }

      function rightClickCallBack(e) {
        e.preventDefault();
        $(e.target).trigger("change", {
          type: "shortKey-remove",
          event: {
            clickEvent: e,
          },
        });
        let KeyCodesConfigs = JSON.parse(
          localStorage.getItem("config-shortkey-keycode")
        );
        KeyCodesConfigs.forEach((KeyCodesConfig) => {
          if (KeyCodesConfig.id === e.target.classList[1]) {
            let index = KeyCodesConfig.showKeys.indexOf(e.target.innerText);
            KeyCodesConfig.showKeys[index] = "UNSET";
            KeyCodesConfig.keyCodes[index] = 0;
            localStorage.setItem(
              "config-shortkey-keycode",
              JSON.stringify(KeyCodesConfigs)
            );
          }
        });
      }

      $(".short-keys").click((e) => {
        leftClickCallBack(e);
      });
      $(".short-keys").contextmenu((e) => {
        // contextmenu handler
        rightClickCallBack(e);
      });
      $(".scriptSettings").change((e, data) => {
        localStorage.setItem(e.target.id, e.target.checked);

        if (e.target.id === "config-fonts-choice") {
          localStorage.setItem(
            e.target.id,
            Config.fonts[e.target.options.selectedIndex]
          );
        }

        if (e.target.id === "config-fonts-choice-tmp") {
          localStorage.setItem("config-fonts-choice", e.target.value);
          $("#config-fonts-choice-tmp").css("font-family", e.target.value);
        }

        if (e.target.id === "config-darkmode") {
          ToggleDarkMode();
        }

        if (e.target.id === "config-focus-mode") {
          FocusMode();
        }

        if (
          e.target.id === "config-fonts" &&
          localStorage.getItem("config-fonts") === "false"
        ) {
          $("#config-fonts-choice").parent().hide();
          $("#config-fonts-selector").parent().hide();
        } else if (
          e.target.id === "config-fonts" &&
          localStorage.getItem("config-fonts") === "true"
        ) {
          $("#config-fonts-choice").parent().show();
          $("#config-fonts-selector").parent().show();
        }

        if (e.target.id === "config-fonts-selector") {
          localStorage.setItem(
            "config-fonts-selector",
            $("#config-fonts-selector").val()
          );
        }

        if (
          e.target.id === "config-shortkey" &&
          localStorage.getItem("config-shortkey") === "false"
        ) {
          $(".short-keys-wrap").parent().hide();
        } else if (
          e.target.id === "config-shortkey" &&
          localStorage.getItem("config-shortkey") === "true"
        ) {
          $(".short-keys-wrap").parent().show();
        }

        if (e.target.classList[0] === "short-keys") {
          let clickEvent = data.event.clickEvent;
          let keyDownEvent = data.event.keyDownEvent;
          let newTag = ``;

          if (data.type === "shortKey-add") {
            newTag = `<button class="short-keys ${clickEvent.target.classList[1]}" key="${keyDownEvent.keyCode}">${keyDownEvent.code}</button>`;
          } else if (data.type === "shortKey-remove") {
            newTag = `<button class="short-keys ${clickEvent.target.classList[1]}" key="0">UNSET</button>`;
          }

          $(clickEvent.target).replaceWith(newTag);
          $(".short-keys").off(); // remove all listening

          $(".short-keys").click((e) => {
            // Add listening again
            leftClickCallBack(e);
          });
          $(".short-keys").contextmenu((e) => {
            rightClickCallBack(e);
          });
        }

        if (e.target.name === "config-example-hide") {
          localStorage.setItem("config-example-hide", e.target.defaultValue);
        }

        toastr.options = {
          timeOut: 1000,
          preventDuplicates: true,
        };
        toastr.success("设置已更新", "Shanbay Enhance");
      });
    }

    /* harmony default export */ const LoadConfig = loadConfig; // CONCATENATED MODULE: ./src/function/SummaryTranslation.js
    function executeToggle(passIn, withFor) {
      if (withFor === 1) {
        for (let i = 0; i < passIn.length; i++) {
          $(passIn[i]).find("div").toggleClass("hideTrans");
        }
      } else $(passIn).find("div").toggleClass("hideTrans");
    }

    function toggleSummaryTranslation() {
      let wordList = $(".StudySummaryItem_content__3j9YG");

      if (localStorage.getItem("config-summary") === "true") {
        localStorage.setItem("config-summary", "false");
        executeToggle(wordList, 1);
      } else {
        localStorage.setItem("config-summary", "true");
        executeToggle(wordList, 1);
      }
    }

    function hideSummaryTranslation() {
      let checked = "";
      if (localStorage.getItem("config-summary") === "true")
        checked = "checked"; // Key-value is not Boolean but String

      const statusSwitch =
        /* html */
        `
        <div class="span" style="margin-right: 10px;">释义遮挡</div>
        <label class="switch">
            <input type="checkbox" ${checked}>
            <div class="slider round"></div>
        </label>`;
      let wordList = $(".StudySummaryItem_content__3j9YG");

      if (localStorage.getItem("config-summary") === "true") {
        executeToggle(wordList, 1);
      }

      $($(".StudySummary_studySummary__32y_I .row").get(0)).append(
        statusSwitch
      );
      $(".slider").click(function () {
        toggleSummaryTranslation();
      });

      for (let i = 0; i < wordList.length; i++) {
        $(wordList[i]).mouseenter(() => {
          if (localStorage.getItem("config-summary") === "false") return;
          executeToggle(wordList[i], 0);
        });
        $(wordList[i]).mouseleave(() => {
          if (localStorage.getItem("config-summary") === "false") return;
          executeToggle(wordList[i], 0);
        });
      }
    }

    /* harmony default export */ const SummaryTranslation = {
      toggleSummaryTranslation,
      hideSummaryTranslation,
    }; // CONCATENATED MODULE: ./src/function/FontToggle.js
    function fontToggle() {
      if (localStorage.getItem("config-fonts") === "false") return;
      let selectors = JSON.parse(localStorage.getItem("config-fonts-selector"));
      let fontToggle =
        /* CSS */
        `
        .fontToggle {
            font-family: ${localStorage.getItem("config-fonts-choice")};
        }
    `;
      $("head").append(`<style class="fontToggle">${fontToggle}</style>`);
      selectors.forEach((selector) => {
        if (selector.enable === false) return;
        $(selector.selector).addClass("fontToggle");
      });
    }

    /* harmony default export */ const FontToggle = fontToggle; // CONCATENATED MODULE: ./src/function/NoteRemove.js
    function noteRemove() {
      if (localStorage.getItem("config-note-remove") === "false") return;
      $(`h6:contains("笔记")`).parent().parent().hide();
    }

    /* harmony default export */ const NoteRemove = noteRemove; // CONCATENATED MODULE: ./src/function/HideTranslation.js
    function hideTranslation() {
      if (localStorage.getItem("config-example-hide") === "不隐藏") return;
      let en = $(".index_sentenceEn__1Qjgx"); // real question

      let cn = $(".index_sentenceCn__XJD1u");
      let example = $(".index_left__2LkyW p");

      if (localStorage.getItem("config-example-hide") === "隐藏并移除") {
        for (let i = 0; i < $(".index_sentenceEn__1Qjgx").length; i++) {
          $(en[i]).attr("title", $(cn[i]).text());
          $(en[i]).css("cursor", "pointer");
          $(en[i]).click(() => {
            $(cn[i]).toggleClass("removeTrans");
          });
        }

        $(example[0]).attr("title", $(example[1]).text());
        $(example[0]).css("cursor", "pointer");
        $(example[0]).click(() => {
          $(example[1]).toggleClass("removeTrans");
        });
        $($(".index_left__2LkyW p")[1]).toggleClass("removeTrans");
        $(".index_sentenceCn__XJD1u").toggleClass("removeTrans");
      }

      if (localStorage.getItem("config-example-hide") === "隐藏并占位") {
        for (let i = 0; i < $(".index_sentenceEn__1Qjgx").length; i++) {
          $(cn[i]).toggleClass("hideTrans");
          $(cn[i]).mouseenter((e) => {
            $(e.target).toggleClass("hideTrans");
          });
          $(cn[i]).mouseleave((e) => {
            $(e.target).toggleClass("hideTrans");
          });
        }

        $(example[1]).toggleClass("hideTrans");
        $(example[1]).mouseenter((e) => {
          $(e.target).toggleClass("hideTrans");
        });
        $(example[1]).mouseleave((e) => {
          $(e.target).toggleClass("hideTrans");
        });
      }
    }

    /* harmony default export */ const HideTranslation = hideTranslation; // CONCATENATED MODULE: ./src/function/KeyDownFunctions.js
    function wordPronunceUS() {
      // US
      $(".index_trump__3bTaM:last").click();
      $(".Pronounce_audio__3xdMh:last").click();
    }

    function wordPronunceUK() {
      // UK
      $(".index_trump__3bTaM:first").click();
      $(".Pronounce_audio__3xdMh:first").click();
    }

    function examplePronunce() {
      $(".index_icon__1IK2K").click();
    }

    function examplePronunceRealQuestion() {
      $(".index_audio__1mSVg:first > img").click();
    }

    function summaryToggle() {
      $(".slider").trigger("click");
    }

    function collinsToggle() {
      if ($(".index_tab__37Cha.index_active__1bHoy").html() === "扇贝单词") {
        // to Collins Dictionary
        $(".index_tabNavs__3tWev:eq(0) > p:eq(1)").click();
      } else if (
        $(".index_tab__37Cha.index_active__1bHoy").html() === "柯林斯词典"
      ) {
        // to Shanbay Dictionary
        $(".index_tabNavs__3tWev:eq(0) > p:eq(0)").click();
      }
    }

    function toggleExample() {
      // hide and remove
      if (localStorage.getItem("config-example-hide") === "隐藏并移除") {
        $($(".index_left__2LkyW p")[1]).toggleClass("removeTrans");
        $(".index_sentenceCn__XJD1u").toggleClass("removeTrans");
      } // hide and reserved

      if (localStorage.getItem("config-example-hide") === "隐藏并占位") {
        $($(".index_left__2LkyW p")[1]).toggleClass("hideTrans");
        $(".index_sentenceCn__XJD1u").toggleClass("hideTrans");
      }
    }

    /* harmony default export */ const KeyDownFunctions = {
      "word-pronunce-uk": wordPronunceUK,
      "word-pronunce-us": wordPronunceUS,
      "example-pronunce": examplePronunce,
      "example-pronunce-real-question": examplePronunceRealQuestion,
      "summary-toggle": summaryToggle,
      "collins-toggle": collinsToggle,
      "toggle-example": toggleExample,
    }; // CONCATENATED MODULE: ./src/common/KeyDownObserver.js
    function executeFuntions(keyCode, type) {
      if (localStorage.getItem("config-shortkey") === "false") return;
      let shortcutKeys = JSON.parse(
        localStorage.getItem("config-shortkey-keycode")
      );
      shortcutKeys.forEach((config) => {
        if (config.id.indexOf(type) !== -1) {
          config.keyCodes.forEach((code) => {
            if (code === keyCode) {
              KeyDownFunctions[type]();
              return;
            } else return;
          });
        }
      });
    }

    function keyDownObserver() {
      $(document).off("keydown"); // Unbind all events first

      $(document).on("keydown", (e) => {
        executeFuntions(e.keyCode, "word-pronunce-uk");
        executeFuntions(e.keyCode, "word-pronunce-us");
        executeFuntions(e.keyCode, "example-pronunce");
        executeFuntions(e.keyCode, "example-pronunce-real-question");
        executeFuntions(e.keyCode, "summary-toggle");
        executeFuntions(e.keyCode, "collins-toggle");
        executeFuntions(e.keyCode, "toggle-example");
      });
    }

    /* harmony default export */ const KeyDownObserver = keyDownObserver; // CONCATENATED MODULE: ./src/function/SlipPronunce.js
    function slipPronunce() {
      if (localStorage.getItem("config-silp-pronunce") === "false") return;
      let tds = $(".StudySummaryItem_studySummaryItem__k2ME0");
      tds.each((index) => {
        let item = $(tds[index]);
        let sound = item.find(".StudySummaryItem_sound__htCqt img");
        item.on("mouseenter", () => {
          sound.trigger("click");
        });
      });
    }

    /* harmony default export */ const SlipPronunce = slipPronunce; // CONCATENATED MODULE: ./src/common/Observer.js
    const commonConditions = [
      "study-page",
      "index_hint",
      "StudyPage_nextBtn",
      "StudySummary",
    ];

    function Observer() {
      const OuterTargetNode =
        document.getElementsByClassName("Layout_main__2_zw8")[0];
      if (typeof OuterTargetNode === "undefined") return;

      const OuterCallback = (mutations) => {
        mutations.forEach((mutation) => {
          if (
            mutation.addedNodes.length === 0 ||
            mutation.addedNodes[0].className === undefined
          )
            return;
          let currentState = mutation.addedNodes[0].className;

          if (currentState.indexOf("SettingContainer_setting") !== -1) {
            LoadConfig();
            FocusMode();
          }

          if (currentState.indexOf("row") !== -1) {
            NoteRemove();
            HideTranslation();
          }

          if (currentState.indexOf("StudySummary") !== -1) {
            SummaryTranslation.hideSummaryTranslation();
            SlipPronunce();
          }

          if (currentState.indexOf("study-page") !== -1) {
            KeyDownObserver();
          }

          commonConditions.forEach((condition) => {
            if (currentState.indexOf(condition) !== -1) {
              FontToggle();
              FocusMode();
            }
          });
          if (
            mutation.addedNodes[0].childNodes.length === 0 ||
            mutation.addedNodes[0].childNodes[0].className === undefined
          )
            return;

          if (
            mutation.addedNodes[0].childNodes[0].className.indexOf(
              "wordBox"
            ) !== -1
          ) {
            FontToggle();
            FocusMode();
          }
        });
      };

      const ExecuteFunctions = () => {
        if (window.location.hash === "#/study/entry") common_CheckUpdate();
        if (window.location.hash === "#/study?type=book") FocusMode();
        if (window.location.hash === "#/setting") LoadConfig();

        if (window.location.hash.indexOf("#/detail") !== -1) {
          FontToggle();
          NoteRemove();
          HideTranslation();
        }

        ToggleDarkMode();
        FocusMode();
      };

      const OuterObserver = new MutationObserver(OuterCallback);
      OuterObserver.observe(OuterTargetNode, {
        childList: true,
        subtree: true,
      });
      ExecuteFunctions();
    }

    /* harmony default export */ const common_Observer = Observer; // CONCATENATED MODULE: ./src/index.js
    window.onload = () => {
      common_LoadUrl();
      common_Observer();
    };
  })();

  /******/
})();