Greasy Fork

Auto refresh

Set a countdown and refresh the page at the end of the countdown

目前为 2022-11-07 提交的版本。查看 最新版本

// ==UserScript==
// @name        Auto refresh
// @name:zh-CN  定时刷新页面
// @namespace   Violentmonkey Scripts
// @description Set a countdown and refresh the page at the end of the countdown
// @description:zh-CN 设置倒计时,在计时结束时对页面进行刷新。同时增加了倒计时的进度条,可以更直观地看到多久后页面会刷新 
// @match       *://*/* 
// @supportURL  https://gitee.com/jiabaox/timer-refreshes/issues 
// @noframes    
// @grant       GM_setValue 
// @grant       GM_getValue 
// @grant       GM_deleteValue 
// @grant       GM_registerMenuCommand 
// @grant       GM_listValues 
// @grant       GM_setClipboard 
// @version     V1.0.11.08
// @author      JiabaoX 
// @homepageURL https://gitee.com/jiabaox/timer-refreshes.git 
// @license     MIT 
// @require     https://cdn.jsdelivr.net/npm/@violentmonkey/dom@2
// @require     https://unpkg.com/vue@3/dist/vue.global.js 
// @icon        data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjY3NDYxMjc1MTEyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijc4NSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNTEuMiA1MS4ybTE1My42IDBsNjA5LjI4IDBxMTUzLjYgMCAxNTMuNiAxNTMuNmwwIDYwOS4yOHEwIDE1My42LTE1My42IDE1My42bC02MDkuMjggMHEtMTUzLjYgMC0xNTMuNi0xNTMuNmwwLTYwOS4yOHEwLTE1My42IDE1My42LTE1My42WiIgZmlsbD0iI0YxOTE0OSIgb3BhY2l0eT0iLjIiIHAtaWQ9Ijc4NiI+PC9wYXRoPjxwYXRoIGQ9Ik01MTIgMTU4LjcyYTM1My4yOCAzNTMuMjggMCAxIDAgMzUzLjI4IDM1My4yOCAzNTMuMjggMzUzLjI4IDAgMCAwLTM1My4yOC0zNTMuMjh6IG0xMjYuNjEyNDggNTA0LjE5NzEyYTE5Ni45NDU5MiAxOTYuOTQ1OTIgMCAwIDEtMzIwLjg4MDY0LTExOC4wOTI4aC0zNi4zMDA4YTE2LjE3NDA4IDE2LjE3NDA4IDAgMCAxLTEzLjAyMDE2LTI1Ljc2Mzg0bDYzLjU5NTUyLTg2LjM2NDE2YTE2LjE3NDA4IDE2LjE3NDA4IDAgMCAxIDI2LjA0NTQ0IDBsNjMuNTk1NTIgODYuMzY0MTZhMTYuMTc0MDggMTYuMTc0MDggMCAwIDEtMTMuMDIwMTYgMjUuNzYzODRoLTMyLjcxNjhhMTM5LjkxNDI0IDEzOS45MTQyNCAwIDAgMCAyMjUuOTk2OCA3NC40MTkyIDI4LjUyMzUyIDI4LjUyMzUyIDAgMCAxIDM2LjcwNTI4IDQzLjY3MzZ6TTc1NC4yODg2NCA1MDcuMzkyTDY5MC42ODggNTkzLjc3MTUyYTE2LjE3NDA4IDE2LjE3NDA4IDAgMCAxLTI2LjA0NTQ0IDBMNjAxLjA0MTkyIDUwNy4zOTJhMTYuMTc0MDggMTYuMTc0MDggMCAwIDEgMTMuMDI1MjgtMjUuNzYzODRoMzQuNDc4MDhhMTM5LjkxOTM2IDEzOS45MTkzNiAwIDAgMC0yMjYuNTcwMjQtNzYuODcxNjggMjguNTIzNTIgMjguNTIzNTIgMCAxIDEtMzYuNzA1MjgtNDMuNjczNiAxOTYuOTkyIDE5Ni45OTIgMCAwIDEgMzIxLjMyMDk2IDEyMC41NjU3NmgzNC42NzI2NGExNi4xNzQwOCAxNi4xNzQwOCAwIDAgMSAxMy4wMjUyOCAyNS43NDMzNnoiIGZpbGw9IiNGMTkxNDkiIHAtaWQ9Ijc4NyI+PC9wYXRoPjwvc3ZnPg== 
// ==/UserScript==  
const vue=Vue;
(function (VM, vue, Vue) {
  'use strict';

  function styleInject(css, ref) {
    if (ref === void 0) ref = {};
    var insertAt = ref.insertAt;
    if (!css || typeof document === 'undefined') {
      return;
    }
    var head = document.head || document.getElementsByTagName('head')[0];
    var style = document.createElement('style');
    style.type = 'text/css';
    if (insertAt === 'top') {
      if (head.firstChild) {
        head.insertBefore(style, head.firstChild);
      } else {
        head.appendChild(style);
      }
    } else {
      head.appendChild(style);
    }
    if (style.styleSheet) {
      style.styleSheet.cssText = css;
    } else {
      style.appendChild(document.createTextNode(css));
    }
  }

  var css_248z$5 = "#loading-status { \r\n    border: 0px #669CB8 solid;\r\n    -webkit-box-shadow: 0px 2px 2px #D0D4D6;\r\n    height: 10px;\r\n    -webkit-border-radius: 10px;\r\n    background: -webkit-gradient(linear, 0 0, 0 100%, from(#E1E9EE), to(white));\r\n    padding: 1px;\r\n    position: fixed;\r\n    bottom: 0;\r\n    z-index: 9999;\r\n    width: 100%;\r\n    opacity: 0.8;\r\n}\r\n\r\n#userscript-app{\r\n    position: absolute;\r\n    bottom: 10px;\r\n    top: 0;\r\nleft: 0;\r\n      \r\n}\r\n\r\n#precent {\r\n    background: -webkit-gradient(linear, 0 0, 0 100%, from(#7BC3FF), color-stop(0.5, #42A9FF), to(#7BC3FF));\r\n    height: 100%;\r\n    -webkit-border-radius: 10px;\r\n    -webkit-transition: width 0.2s ease-in-out;\r\n\r\n}";
  styleInject(css_248z$5);

  var script$5 = {
      props: ['precent', 'showPrecent', "showProgressBar", "position","themeColor"],
      data() {
          return {

          }
      },
      methods: {

      },
      mounted() { 
      },
      computed: {
      
      }

  };

  const _hoisted_1$5 = {
    key: 0,
    class: "loading-status"
  };
  const _hoisted_2$4 = {
    key: 0,
    style: {"color":"white","text-align":"right","padding":"0 10px"}
  };

  function render$5(_ctx, _cache, $props, $setup, $data, $options) {
    return ($props.showProgressBar)
      ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
          vue.createElementVNode("div", {
            class: "precent",
            style: vue.normalizeStyle({ width: $props.precent + '%', background:$props.themeColor})
          }, [
            ($props.showPrecent)
              ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$4, vue.toDisplayString($props.precent.toFixed(2) + '%'), 1 /* TEXT */))
              : vue.createCommentVNode("v-if", true)
          ], 4 /* STYLE */)
        ]))
      : vue.createCommentVNode("v-if", true)
  }

  var css_248z$4 = "\n.loading-status {\r\n    border: 0px #669CB8 solid;\r\n    box-shadow: 0px 2px 2px #D0D4D6;\r\n    height: 10px;\r\n    border-radius: 10px;\r\n    background: -webkit-gradient(linear, 0 0, 0 100%, from(#E1E9EE), to(white));\r\n    padding: 1px;\r\n    position: relative;\r\n\r\n    z-index: 9999;\r\n    width: 100%;\r\n    opacity: 0.8;\n}\n.precent {\r\n    color: rgb(103,85,200);\r\n    color: rgb(46,89,200);\r\n    background: -webkit-gradient(linear, 0 0, 0 100%, from(#7BC3FF), color-stop(0.5, #42A9FF), to(#7BC3FF));\r\n    height: 100%;\r\n    border-radius: 10px;\r\n    transition: width 0.1s ease-in-out;\n}\r\n";
  styleInject(css_248z$4);

  script$5.render = render$5;
  script$5.__file = "src/components/progressBar.vue";

  var script$4 = {
      props: ['duration', 'active'],
      data() {
          return {
              timeElapsed: 0,
              millisec: 100,
              isFirst: true
          }
      },
      methods: {

      },
      watch: {
          active: {
              handler(newValue, oldValue) {

                  if (this.isFirst) {
                      this.timeElapsed = this.duration;
                      this.isFirst = false;
                  }
                  const timer = window.setInterval(function (data, props, $emit) {

                      if (!props.active) {
                          //暂停计时
                          window.clearInterval(timer);
                      }
                      else {
                          data.timeElapsed -= data.millisec;
                          //触发倒计时时间变化事件
                          $emit("timeElapsedChanged", data.timeElapsed);

                          if (data.timeElapsed <= 0) {
                              window.clearInterval(timer);

                              //触发倒计时结束事件 
                              $emit("endOfCountdown");
                          }
                      }
                  }, this.$data.millisec, this.$data, this.$props, this.$emit);
              },
              immediate: true
          },
      },
      mounted() {

      },
      computed: {
          countDown() { 
              //TODO 计算时、分、秒  

              //一小时= 1000*60*60
              let hour = Math.floor(this.timeElapsed / (1000 * 60 * 60));
              //一分钟 = 1000*60
              let min = Math.floor((this.timeElapsed % (1000 * 60 * 60)) / (1000 * 60));
              //一秒 = 1000
              let sec = Math.floor((this.timeElapsed % (1000 * 60)) / 1000);

              let hourStr;
              let minStr;
              let secStr;

              if (hour >= 0 && hour <= 9) {
                  hourStr = "0" + hour;
              } else {
                  hourStr = hour + "";
              }

              if (min >= 0 && min <= 9) {
                  minStr = "0" + min;
              } else {
                  minStr = min + "";
              }

              if (sec >= 0 && sec <= 9) {
                  secStr = "0" + sec;
              } else {
                  secStr = sec + "";
              }

              return hourStr + ":" + minStr + ":" + secStr; 
          }
      },

  };

  const _hoisted_1$4 = { class: "countdown" };

  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$4, vue.toDisplayString($options.countDown), 1 /* TEXT */))
  }

  var css_248z$3 = "\n.countdown {\r\n    font-variant-numeric: tabular-nums;\n}\r\n";
  styleInject(css_248z$3);

  script$4.render = render$4;
  script$4.__file = "src/components/countdown.vue";

  var script$3 = {
      props: ['config'],
      data() {
          return {
              defaultConfig: Object.assign({}, this.config)//备份配置选项(浅拷贝)
          }
      },
      methods: {
          reset() {
              for (let key in this.config) {
                  //console.debug(key, this.config[key], this.defaultConfig[key])
                  this.config[key] = this.defaultConfig[key];
              }
          },
          submit() {
              let msg = "确认保存配置吗?";
              if (confirm(msg) == true) {
                  //保存配置到本地
                  GM_setValue('config', this.config);
              }
              GM_getValue('config');
          },
          clear() {
              let msg = "确认清除设置吗(此操作将会刷新页面)?";
              if (confirm(msg) == true) {
                  //保存配置到本地
                  GM_deleteValue('config');
                  location.reload();
              }
          }
      },
      mounted() {
      },
      components: {  },
      watch: {

      },
      computed: {
          intervalOptions() {
              let items = new Array();
              for (let index = 1; index <= 9; index++) {
                  items.push(index / 10);

              }
              for (let index = 1; index <= 1440; index++) {

                  items.push(index);

              }
              return items;
          }
      }

  };

  const _hoisted_1$3 = /*#__PURE__*/vue.createElementVNode("div", { class: "userscript-head" }, null, -1 /* HOISTED */);
  const _hoisted_2$3 = { class: "userscript-content" };
  const _hoisted_3$3 = { class: "userscript-tab-content" };
  const _hoisted_4$3 = { class: "userscript-key-item" };
  const _hoisted_5$2 = { class: "userscript-value-item" };
  const _hoisted_6$2 = ["value"];
  const _hoisted_7$2 = /*#__PURE__*/vue.createElementVNode("span", null, "⚠️注:该设置下次刷新页面时生效。", -1 /* HOISTED */);
  const _hoisted_8$2 = { class: "userscript-key-item" };
  const _hoisted_9$2 = { class: "userscript-value-item" };
  const _hoisted_10$2 = /*#__PURE__*/vue.createElementVNode("label", { for: "showPrecent" }, "显示进度条百分比", -1 /* HOISTED */);
  const _hoisted_11$2 = { class: "userscript-value-item" };
  const _hoisted_12$1 = /*#__PURE__*/vue.createElementVNode("label", { for: "showTimeElapsed" }, "显示操作按钮", -1 /* HOISTED */);
  const _hoisted_13$1 = /*#__PURE__*/vue.createElementVNode("span", null, [
    /*#__PURE__*/vue.createTextVNode("⚠️注:点击暴力猴插件图标,选择"),
    /*#__PURE__*/vue.createElementVNode("b", null, "\"打开设置界面\""),
    /*#__PURE__*/vue.createTextVNode("可以对设置进行更改。")
  ], -1 /* HOISTED */);
  const _hoisted_14$1 = { class: "userscript-key-item" };
  const _hoisted_15$1 = { class: "userscript-value-item" };
  const _hoisted_16 = /*#__PURE__*/vue.createElementVNode("label", { for: "showProgressBar" }, "显示进度条", -1 /* HOISTED */);
  const _hoisted_17 = { class: "userscript-value-item" };
  const _hoisted_18 = /*#__PURE__*/vue.createElementVNode("br", null, null, -1 /* HOISTED */);
  const _hoisted_19 = { class: "radiodiv" };
  const _hoisted_20 = /*#__PURE__*/vue.createElementVNode("label", { for: "us-1" }, "顶部", -1 /* HOISTED */);
  const _hoisted_21 = { class: "radiodiv" };
  const _hoisted_22 = /*#__PURE__*/vue.createElementVNode("label", { for: "us-2" }, "底部", -1 /* HOISTED */);
  const _hoisted_23 = { class: "userscript-value-item" };
  const _hoisted_24 = /*#__PURE__*/vue.createElementVNode("br", null, null, -1 /* HOISTED */);
  const _hoisted_25 = { class: "userscript-value-item" };
  const _hoisted_26 = { class: "userscript-value-item" };

  function render$3(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
      _hoisted_1$3,
      vue.createElementVNode("div", _hoisted_2$3, [
        vue.createElementVNode("div", _hoisted_3$3, [
          vue.createElementVNode("div", _hoisted_4$3, [
            vue.createTextVNode(" 刷新时间 "),
            vue.createElementVNode("div", _hoisted_5$2, [
              vue.createTextVNode(" 页面刷新间隔(分钟): "),
              vue.withDirectives(vue.createElementVNode("select", {
                "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => ((this.config.refreshInterval) = $event))
              }, [
                (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($options.intervalOptions, (item) => {
                  return (vue.openBlock(), vue.createElementBlock("option", { value: item }, vue.toDisplayString(item), 9 /* TEXT, PROPS */, _hoisted_6$2))
                }), 256 /* UNKEYED_FRAGMENT */))
              ], 512 /* NEED_PATCH */), [
                [vue.vModelSelect, this.config.refreshInterval]
              ]),
              _hoisted_7$2
            ])
          ]),
          vue.createElementVNode("div", _hoisted_8$2, [
            vue.createTextVNode(" 显示内容 "),
            vue.createElementVNode("div", _hoisted_9$2, [
              vue.withDirectives(vue.createElementVNode("input", {
                type: "checkbox",
                id: "showPrecent",
                "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => ((this.config.showPrecent) = $event))
              }, null, 512 /* NEED_PATCH */), [
                [vue.vModelCheckbox, this.config.showPrecent]
              ]),
              _hoisted_10$2
            ]),
            vue.createElementVNode("div", _hoisted_11$2, [
              vue.withDirectives(vue.createElementVNode("input", {
                type: "checkbox",
                id: "showTimeElapsed",
                "onUpdate:modelValue": _cache[2] || (_cache[2] = $event => ((this.config.showTimeElapsed) = $event))
              }, null, 512 /* NEED_PATCH */), [
                [vue.vModelCheckbox, this.config.showTimeElapsed]
              ]),
              _hoisted_12$1,
              _hoisted_13$1
            ])
          ]),
          vue.createElementVNode("div", _hoisted_14$1, [
            vue.createTextVNode(" 进度条 "),
            vue.createElementVNode("div", _hoisted_15$1, [
              vue.withDirectives(vue.createElementVNode("input", {
                type: "checkbox",
                id: "showProgressBar",
                "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => ((this.config.showProgressBar) = $event))
              }, null, 512 /* NEED_PATCH */), [
                [vue.vModelCheckbox, this.config.showProgressBar]
              ]),
              _hoisted_16
            ]),
            vue.createElementVNode("div", _hoisted_17, [
              vue.createTextVNode(" 位置:"),
              _hoisted_18,
              vue.createElementVNode("div", null, [
                vue.createElementVNode("div", _hoisted_19, [
                  vue.withDirectives(vue.createElementVNode("input", {
                    type: "radio",
                    id: "us-1",
                    "onUpdate:modelValue": _cache[4] || (_cache[4] = $event => ((this.config.position) = $event)),
                    value: "top"
                  }, null, 512 /* NEED_PATCH */), [
                    [vue.vModelRadio, this.config.position]
                  ]),
                  _hoisted_20
                ]),
                vue.createElementVNode("div", _hoisted_21, [
                  vue.withDirectives(vue.createElementVNode("input", {
                    type: "radio",
                    id: "us-2",
                    "onUpdate:modelValue": _cache[5] || (_cache[5] = $event => ((this.config.position) = $event)),
                    value: "bottom"
                  }, null, 512 /* NEED_PATCH */), [
                    [vue.vModelRadio, this.config.position]
                  ]),
                  _hoisted_22
                ])
              ])
            ]),
            vue.createElementVNode("div", _hoisted_23, [
              vue.createTextVNode(" 主题颜色: "),
              _hoisted_24,
              vue.withDirectives(vue.createElementVNode("input", {
                type: "color",
                name: "favcolor",
                "onUpdate:modelValue": _cache[6] || (_cache[6] = $event => ((this.config.themeColor) = $event))
              }, null, 512 /* NEED_PATCH */), [
                [vue.vModelText, this.config.themeColor]
              ]),
              vue.createElementVNode("span", null, vue.toDisplayString(this.config.themeColor), 1 /* TEXT */)
            ]),
            vue.createElementVNode("div", _hoisted_25, [
              vue.createTextVNode(" 透明度: "),
              vue.withDirectives(vue.createElementVNode("input", {
                type: "range",
                min: "0",
                max: "100",
                "onUpdate:modelValue": _cache[7] || (_cache[7] = $event => ((this.config.opacity) = $event))
              }, null, 512 /* NEED_PATCH */), [
                [vue.vModelText, this.config.opacity]
              ]),
              vue.createElementVNode("span", null, vue.toDisplayString(this.config.opacity) + "%", 1 /* TEXT */)
            ]),
            vue.createElementVNode("div", _hoisted_26, [
              vue.createTextVNode(" 高   度: "),
              vue.withDirectives(vue.createElementVNode("input", {
                type: "range",
                min: "10",
                max: "100",
                "onUpdate:modelValue": _cache[8] || (_cache[8] = $event => ((this.config.height) = $event))
              }, null, 512 /* NEED_PATCH */), [
                [vue.vModelText, this.config.height]
              ]),
              vue.createElementVNode("span", null, vue.toDisplayString(this.config.height) + "px", 1 /* TEXT */)
            ]),
            vue.createElementVNode("div", null, [
              vue.createElementVNode("button", {
                title: "恢复到脚本刚安装时的默认配置",
                type: "reset",
                onClick: _cache[9] || (_cache[9] = (...args) => ($options.clear && $options.clear(...args))),
                class: "userscript-button"
              }, "清除设置"),
              vue.createElementVNode("button", {
                title: "取消",
                type: "reset",
                onClick: _cache[10] || (_cache[10] = (...args) => ($options.reset && $options.reset(...args))),
                class: "userscript-button"
              }, "取消"),
              vue.createElementVNode("button", {
                title: "保存",
                type: "submit",
                onClick: _cache[11] || (_cache[11] = (...args) => ($options.submit && $options.submit(...args))),
                class: "userscript-button"
              }, "保存")
            ])
          ])
        ])
      ])
    ], 64 /* STABLE_FRAGMENT */))
  }

  var css_248z$2 = "\n.userscript-head {}\n.userscript-content {}\n.userscript-tab-head {}\n.userscript-tab-content {\r\n    color: black;\r\n    width: 90%;\r\n    margin: 0 auto;\n}\n.userscript-key-item {\r\n    font-weight: bold;\r\n    margin: 5px 0;\n}\n.userscript-value-item {\r\n    font-weight: normal;\r\n    padding: 5px;\n}\n.userscript-value-item span {\r\n    color: rgb(255, 138, 66);\r\n    margin: 0 5px;\n}\n.userscript-value-item input {\r\n    margin: 0 2px;\r\n    height: 14px;\r\n    cursor: pointer;\n}\n.userscript-value-item input[type=\"color\"] {\r\n    height: 30px;\r\n    width: 45px;\r\n    border-radius: 3px;\r\n    border: solid 0px red\n}\n.userscript-value-item .radiodiv {\r\n    display: inline;\r\n    float: flex;\r\n    margin: 0px 3px;\n}\n.userscript-value-item label {\r\n    cursor: pointer;\n}\n.userscript-value-item label:hover {\r\n    color: rgb(0, 136, 255);\n}\r\n";
  styleInject(css_248z$2);

  script$3.render = render$3;
  script$3.__file = "src/components/settingsTab.vue";

  const delEmptyQueryNodes = (obj = {}) => {
    Object.keys(obj).forEach(key => {
      let value = obj[key];
      value && typeof value === 'object' && delEmptyQueryNodes(value);
      (value === '' || value === null || value === undefined || value.length === 0 || Object.keys(value).length === 0) && delete obj[key];
    });
    return obj;
  };
  const objKeysSort = obj => {
    /**
     * 先用Object内置类的keys方法获取要排序对象的属性名
     * 再利用Array原型上的sort方法对获取的属性名进行排序
     * newKey是一个数组
     */
    var newKey = Object.keys(obj).sort();
    // 创建一个新对象,用于存放排好序的键值对
    var newObj = {};
    // 遍历数组
    for (var i = 0; i < newKey.length; i++) {
      // 向新创建的对象中按照排好的顺序依次增加键值对
      newObj[newKey[i]] = obj[newKey[i]];
    }
    // 返回新对象
    return newObj;
  };

  var script$2 = {
      props: [],
      data() {
          return {

          }
      },
      methods: {

      },
      mounted() {
      },
      computed: {

      },
      beforeCreate() {
          this.data = GM_info;
          console.debug(this.data.script);
          this.data.script=delEmptyQueryNodes(delEmptyQueryNodes(this.data.script));
          this.data.script=objKeysSort(this.data.script);
          console.debug(this.data.script);
         
          // this.data=this.data.script.filter((item)=>{
          //     return item.lenght>0;
          // });
      }


  };

  const _hoisted_1$2 = { class: "us-platform" };
  const _hoisted_2$2 = /*#__PURE__*/vue.createElementVNode("h4", null, " environment: ", -1 /* HOISTED */);
  const _hoisted_3$2 = { class: "us-table" };
  const _hoisted_4$2 = { class: "us-platform" };
  const _hoisted_5$1 = /*#__PURE__*/vue.createElementVNode("h4", null, " script: ", -1 /* HOISTED */);
  const _hoisted_6$1 = { class: "us-table" };
  const _hoisted_7$1 = { key: 0 };
  const _hoisted_8$1 = ["src"];
  const _hoisted_9$1 = { key: 1 };
  const _hoisted_10$1 = { key: 2 };
  const _hoisted_11$1 = /*#__PURE__*/vue.createElementVNode("div", null, null, -1 /* HOISTED */);

  function render$2(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
      vue.createElementVNode("div", _hoisted_1$2, [
        _hoisted_2$2,
        vue.createElementVNode("table", _hoisted_3$2, [
          (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(Object.keys(this.data.platform), (item) => {
            return (vue.openBlock(), vue.createElementBlock("tr", null, [
              vue.createElementVNode("td", null, vue.toDisplayString(item), 1 /* TEXT */),
              vue.createElementVNode("td", null, vue.toDisplayString(this.data.platform[item]), 1 /* TEXT */)
            ]))
          }), 256 /* UNKEYED_FRAGMENT */))
        ])
      ]),
      vue.createElementVNode("div", _hoisted_4$2, [
        _hoisted_5$1,
        vue.createElementVNode("table", _hoisted_6$1, [
          (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(Object.keys(this.data.script), (item) => {
            return (vue.openBlock(), vue.createElementBlock("tr", { key: item }, [
              vue.createElementVNode("td", null, vue.toDisplayString(item), 1 /* TEXT */),
              (item == 'icon')
                ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_7$1, [
                    vue.createElementVNode("img", {
                      style: {"width":"50px"},
                      src: this.data.script[item]
                    }, null, 8 /* PROPS */, _hoisted_8$1)
                  ]))
                : (Array.isArray( this.data.script[item] ) )
                  ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_9$1, [
                      (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(this.data.script[item], (item1) => {
                        return (vue.openBlock(), vue.createElementBlock("li", null, vue.toDisplayString(item1), 1 /* TEXT */))
                      }), 256 /* UNKEYED_FRAGMENT */))
                    ]))
                  : (vue.openBlock(), vue.createElementBlock("td", _hoisted_10$1, vue.toDisplayString(this.data.script[item]), 1 /* TEXT */))
            ]))
          }), 128 /* KEYED_FRAGMENT */))
        ])
      ]),
      _hoisted_11$1
    ], 64 /* STABLE_FRAGMENT */))
  }

  script$2.render = render$2;
  script$2.__file = "src/components/userScriptInfo.vue";

  var script$1 = {
      props: [],
      data() {
          return {
              arrayOfKeys: [],
              stoage: [],
              file_is_show: true
          }
      },
      methods: {
          clear() {
              let msg = "确认清除所有数据吗(此操作将会刷新页面)?";
              if (confirm(msg) == true) {
                  for (const iterator of this.arrayOfKeys) {
                      GM_deleteValue(iterator);
                  }
                  location.reload();
              }
          },
          copy(key,e) {
              let result= this.stoage[key];
              GM_setClipboard(result);
          },
          remove(key, e) {
              //console.debug(key, e) 
              const index = this.arrayOfKeys.indexOf(key);
              if (index > -1) { // 移除找到的指定元素
                  GM_deleteValue(key);
                  this.arrayOfKeys.splice(index, 1); // 移除元素
              }
             // console.debug(index, this.arrayOfKeys)

          },
         refresh() {
              let arrayOfKeys = GM_listValues();

              if (arrayOfKeys != undefined) {

                  this.arrayOfKeys = arrayOfKeys;
                  for (const iterator of arrayOfKeys) {
                      this.stoage[iterator] = JSON.stringify(GM_getValue(iterator));
                  }
              }
              else {
                  this.arrayOfKeys = [];
              }
          }
      },
      mounted() {

           this.refresh();
      },
      computed: {

      },
      watch: {
       
      }

  };

  const _hoisted_1$1 = {
    style: {"width":"100%"},
    class: "us-table"
  };
  const _hoisted_2$1 = /*#__PURE__*/vue.createElementVNode("thead", null, [
    /*#__PURE__*/vue.createElementVNode("th", null, "key"),
    /*#__PURE__*/vue.createElementVNode("th", null, "value")
  ], -1 /* HOISTED */);
  const _hoisted_3$1 = ["onClick"];
  const _hoisted_4$1 = ["onClick"];

  function render$1(_ctx, _cache, $props, $setup, $data, $options) {
    return (vue.openBlock(), vue.createElementBlock("div", null, [
      vue.createElementVNode("table", _hoisted_1$1, [
        _hoisted_2$1,
        vue.createElementVNode("tbody", null, [
          (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(this.arrayOfKeys, (item) => {
            return (vue.openBlock(), vue.createElementBlock("tr", null, [
              vue.createElementVNode("td", null, vue.toDisplayString(item), 1 /* TEXT */),
              vue.createElementVNode("td", null, vue.toDisplayString(this.stoage[item]), 1 /* TEXT */),
              vue.createElementVNode("button", {
                class: "userscript-button",
                onClick: $event => ($options.remove(item, $event))
              }, "删除", 8 /* PROPS */, _hoisted_3$1),
              vue.createElementVNode("button", {
                class: "userscript-button",
                onClick: $event => ($options.copy(item,$event))
              }, "复制", 8 /* PROPS */, _hoisted_4$1)
            ]))
          }), 256 /* UNKEYED_FRAGMENT */))
        ])
      ]),
      vue.createElementVNode("button", {
        title: "清除所有数据",
        class: "userscript-button",
        onClick: _cache[0] || (_cache[0] = (...args) => ($options.clear && $options.clear(...args)))
      }, "全部清除"),
      vue.createElementVNode("button", {
        title: "刷新",
        class: "userscript-button",
        onClick: _cache[1] || (_cache[1] = (...args) => ($options.refresh && $options.refresh(...args)))
      }, "刷新")
    ]))
  }

  var css_248z$1 = "\n.us-table {\r\n    word-break: break-all;\r\n    width: 100%;\r\n    list-style-type: decimal;\n}\n.us-table th {\r\n    font-weight: bold;\r\n\r\n    border-bottom: solid 1px rgba(65, 65, 65, 0.592);\n}\n.us-table tr:nth-of-type(odd) {\r\n    background-color: rgba(236, 236, 236, 0.29);\n}\n.us-table td {\r\n    padding: 20px;\r\n    border-bottom: solid 1px rgba(65, 65, 65, 0.592);\n}\n.us-table tr:nth-of-type(even) {}\n.us-table td:nth-of-type(odd) {\r\n    width: 30%;\n}\r\n";
  styleInject(css_248z$1);

  script$1.render = render$1;
  script$1.__file = "src/components/stoage.vue";

  var img$2 = "data:image/svg+xml,%3c%3fxml version='1.0' standalone='no'%3f%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg t='1667703884063' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2135' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M511.999787 1023.997867a508.627426 508.627426 0 0 1-362.025309-149.972771A508.712759 508.712759 0 0 1 0.001707 511.999787a508.627426 508.627426 0 0 1 149.972771-362.025309A508.627426 508.627426 0 0 1 511.999787 0.001707h0.597331a508.243427 508.243427 0 0 1 361.64131 149.802105 508.755426 508.755426 0 0 1 110.932918 166.186043A509.267424 509.267424 0 0 1 1023.997867 511.999787a508.712759 508.712759 0 0 1-149.972771 362.067975A508.670092 508.670092 0 0 1 511.999787 1023.997867zM435.797406 298.667253A55.466459 55.466459 0 0 0 384.000267 356.992368v309.972171A55.466459 55.466459 0 0 0 435.797406 725.33232a49.151816 49.151816 0 0 0 25.941236-7.509305l238.463106-155.47675A61.055771 61.055771 0 0 0 725.33232 511.999787a61.098438 61.098438 0 0 0-25.173239-50.303812l-238.463106-155.47675A48.98115 48.98115 0 0 0 435.797406 298.667253z' p-id='2136' fill='%231296db'%3e%3c/path%3e%3c/svg%3e";

  var img$1 = "data:image/svg+xml,%3c%3fxml version='1.0' standalone='no'%3f%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg t='1667703924818' class='icon' viewBox='0 0 1026 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2318' xmlns:xlink='http://www.w3.org/1999/xlink' width='200.390625' height='200'%3e%3cpath d='M565.93216 12.8C226.73216-25.6-54.86784 275.2 9.13216 620.8c38.4 198.4 198.4 352 396.8 390.4 345.6 64 633.6-204.8 595.2-544C981.93216 230.4 796.33216 38.4 565.93216 12.8zM476.33216 710.4h-128v-384h128v384z m192 0h-128v-384h128v384z' fill='%23d81e06' p-id='2319'%3e%3c/path%3e%3c/svg%3e";

  var img = "data:image/svg+xml,%3c%3fxml version='1.0' standalone='no'%3f%3e%3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg t='1667716116558' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='6112' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M621.714286 512 1002.057143 131.657143c29.257143-29.257143 29.257143-80.457143 0-109.714286-29.257143-29.257143-80.457143-29.257143-109.714286 0L512 402.285714 131.657143 21.942857c-29.257143-29.257143-80.457143-29.257143-109.714286 0-29.257143 29.257143-29.257143 80.457143 0 109.714286L402.285714 512 21.942857 892.342857c-29.257143 29.257143-29.257143 80.457143 0 109.714286 29.257143 29.257143 80.457143 29.257143 109.714286 0L512 621.714286l380.342857 380.342857c29.257143 29.257143 80.457143 29.257143 109.714286 0 29.257143-29.257143 29.257143-80.457143 0-109.714286L621.714286 512z' p-id='6113'%3e%3c/path%3e%3c/svg%3e";

  var script = {
      data() {
          return {
              precent: 0,
              startCounting: true,
              config: {
                  showTimeElapsed: true,
                  showPrecent: true,
                  showProgressBar: true,
                  position: 'bottom',
                  refreshInterval: 2,
                  themeColor: null,
                  opacity: 100,
                  height: 10
              },
              selectedTab: 1,
              showMainForm: true,
              imgs: {},
              scriptInfo: {},
          }
      },
      watch: {
          showMainForm(newValue, oldValue) {
              let showMainForm = GM_getValue('showMainForm');
              if (showMainForm != newValue) {
                  GM_setValue('showMainForm', newValue);
              }
          }
      },
      methods: {
          precentIncrease(timeElapsed) {
              this.precent = (1 - (timeElapsed / (this.config.refreshInterval * 60 * 1000))) * 100;

          },
          reload() {
              location.reload();
          },
          startOrStop() {
              this.startCounting = !this.startCounting;
          },
          maskClick() {
              if (this.showMainForm) {
                  this.showMainForm = false;
              }
          }

      },
      components: { ProgressBar: script$5, Countdown: script$4, SettingsTab: script$3, UserScriptInfo: script$2, Stoage: script$1 },
      computed: {
          displayPosition() {
              if (this.config.position == "top")
                  return "top";
              else
                  return "bottom"
          },
          interval() {
              return this.config.refreshInterval * 60 * 1000;
          },

      },
      mounted() {
          this.imgs.running = img$2;
          this.imgs.suspend = img$1;
          this.imgs.close = img;

          GM_registerMenuCommand('打开设置', () => {
              this.$data.showMainForm = true;
          });
          GM_registerMenuCommand('关于脚本', () => {
              this.$data.selectedTab = 2;
              this.$data.showMainForm = true;
          });
          
          GM_registerMenuCommand('本地数据', () => {
              this.$data.selectedTab = 3;
              this.$data.showMainForm = true;
          });
          GM_listValues();

      },
      created() {
          let config = GM_getValue('config');
          if (config != undefined) {
              this.$data.config = config;
          }

          let showMainForm = GM_getValue('showMainForm');
          if (showMainForm != undefined) {
              this.$data.showMainForm = showMainForm;
          }

          let icon = GM_info.script.icon;
          this.$data.imgs = { icon };

          this.scriptInfo = GM_info;
      },
      beforeCreate() {

      }
  };

  const _hoisted_1 = ["src"];
  const _hoisted_2 = ["title"];
  const _hoisted_3 = ["src"];
  const _hoisted_4 = ["src"];
  const _hoisted_5 = { class: "us-tab-head us-tab-mainbgcolor" };
  const _hoisted_6 = { class: "us-tab-head-title" };
  const _hoisted_7 = ["src"];
  const _hoisted_8 = ["src"];
  const _hoisted_9 = { class: "us-tab-menu-bg us-tab-mainbgcolor" };
  const _hoisted_10 = { class: "us-tab-menu" };
  const _hoisted_11 = { class: "userscript-card-bordered" };
  const _hoisted_12 = { index: "1" };
  const _hoisted_13 = { index: "2" };
  const _hoisted_14 = {
    key: 0,
    index: "3"
  };
  const _hoisted_15 = /*#__PURE__*/vue.createElementVNode("div", { class: "us-container" }, null, -1 /* HOISTED */);

  function render(_ctx, _cache, $props, $setup, $data, $options) {
    const _component_ProgressBar = vue.resolveComponent("ProgressBar");
    const _component_Countdown = vue.resolveComponent("Countdown");
    const _component_SettingsTab = vue.resolveComponent("SettingsTab");
    const _component_UserScriptInfo = vue.resolveComponent("UserScriptInfo");
    const _component_Stoage = vue.resolveComponent("Stoage");

    return (vue.openBlock(), vue.createElementBlock("div", {
      class: vue.normalizeClass(["us-main-form", this.showMainForm ? 'us-mask' : '']),
      style: {},
      onClick: _cache[7] || (_cache[7] = vue.withModifiers((...args) => ($options.maskClick && $options.maskClick(...args)), ["stop"]))
    }, [
      vue.createElementVNode("div", {
        class: vue.normalizeClass(["us-main-func", $options.displayPosition]),
        style: vue.normalizeStyle({ opacity: this.config.opacity / 100 })
      }, [
        (this.displayPosition == 'top')
          ? (vue.openBlock(), vue.createBlock(_component_ProgressBar, {
              key: 0,
              style: vue.normalizeStyle({ height: this.config.height + 'px', lineHeight: this.config.height + 'px', 'font-size': this.config.height + 'px' }),
              class: vue.normalizeClass($options.displayPosition),
              position: this.config.position,
              precent: $data.precent,
              themeColor: this.config.themeColor,
              showPrecent: this.config.showPrecent,
              showProgressBar: this.config.showProgressBar
            }, null, 8 /* PROPS */, ["style", "class", "position", "precent", "themeColor", "showPrecent", "showProgressBar"]))
          : vue.createCommentVNode("v-if", true),
        vue.withDirectives(vue.createElementVNode("div", {
          class: vue.normalizeClass(["userscript-countdown-label", $options.displayPosition])
        }, [
          vue.createElementVNode("button", {
            title: "主菜单   ",
            class: "userscript-button",
            onClick: _cache[0] || (_cache[0] = vue.withModifiers($event => (this.showMainForm = !this.showMainForm), ["stop"]))
          }, [
            vue.createElementVNode("img", {
              src: this.imgs.icon
            }, null, 8 /* PROPS */, _hoisted_1)
          ]),
          vue.createElementVNode("button", {
            title: this.startCounting ? '暂停倒计时' : '开始倒计时',
            class: "userscript-button",
            onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => ($options.startOrStop && $options.startOrStop(...args)), ["stop"]))
          }, [
            (this.startCounting)
              ? (vue.openBlock(), vue.createElementBlock("img", {
                  key: 0,
                  src: this.imgs.running
                }, null, 8 /* PROPS */, _hoisted_3))
              : (vue.openBlock(), vue.createElementBlock("img", {
                  key: 1,
                  src: this.imgs.suspend
                }, null, 8 /* PROPS */, _hoisted_4))
          ], 8 /* PROPS */, _hoisted_2),
          vue.createTextVNode(" 刷新倒计时: "),
          vue.createVNode(_component_Countdown, {
            class: "",
            active: this.startCounting,
            duration: $options.interval,
            onTimeElapsedChanged: $options.precentIncrease,
            onEndOfCountdown: $options.reload
          }, null, 8 /* PROPS */, ["active", "duration", "onTimeElapsedChanged", "onEndOfCountdown"])
        ], 2 /* CLASS */), [
          [vue.vShow, this.config.showTimeElapsed]
        ]),
        (this.displayPosition == 'bottom')
          ? (vue.openBlock(), vue.createBlock(_component_ProgressBar, {
              key: 1,
              style: vue.normalizeStyle({ height: this.config.height + 'px', lineHeight: this.config.height + 'px', 'font-size': this.config.height + 'px' }),
              class: vue.normalizeClass($options.displayPosition),
              position: this.config.position,
              precent: $data.precent,
              themeColor: this.config.themeColor,
              showPrecent: this.config.showPrecent,
              showProgressBar: this.config.showProgressBar
            }, null, 8 /* PROPS */, ["style", "class", "position", "precent", "themeColor", "showPrecent", "showProgressBar"]))
          : vue.createCommentVNode("v-if", true)
      ], 6 /* CLASS, STYLE */),
      vue.createVNode(vue.Transition, { persisted: "" }, {
        default: vue.withCtx(() => [
          vue.withDirectives(vue.createElementVNode("div", {
            class: "us-tab-container",
            onClick: _cache[6] || (_cache[6] = vue.withModifiers(() => {}, ["stop"]))
          }, [
            vue.createElementVNode("div", _hoisted_5, [
              vue.createElementVNode("div", _hoisted_6, [
                vue.createElementVNode("img", {
                  src: this.imgs.icon
                }, null, 8 /* PROPS */, _hoisted_7),
                vue.createTextVNode(vue.toDisplayString(this.scriptInfo.script.name) + "-脚本设置 ", 1 /* TEXT */)
              ]),
              vue.createElementVNode("img", {
                class: "us-close",
                onClick: _cache[2] || (_cache[2] = (...args) => ($options.maskClick && $options.maskClick(...args))),
                src: this.imgs.close,
                title: "关闭"
              }, null, 8 /* PROPS */, _hoisted_8)
            ]),
            vue.createElementVNode("div", _hoisted_9, [
              vue.createElementVNode("div", _hoisted_10, [
                vue.createElementVNode("button", {
                  index: "1",
                  onClick: _cache[3] || (_cache[3] = $event => (this.selectedTab = 1)),
                  class: vue.normalizeClass(this.selectedTab == 1 ? 'us-seleted' : '')
                }, "⚙️设置", 2 /* CLASS */),
                vue.createElementVNode("button", {
                  index: "2",
                  onClick: _cache[4] || (_cache[4] = $event => (this.selectedTab = 2)),
                  class: vue.normalizeClass(this.selectedTab == 2 ? 'us-seleted' : '')
                }, "🪧关于", 2 /* CLASS */),
                vue.createElementVNode("button", {
                  index: "3",
                  onClick: _cache[5] || (_cache[5] = $event => (this.selectedTab = 3)),
                  class: vue.normalizeClass(this.selectedTab == 3 ? 'us-seleted' : '')
                }, "📄数据", 2 /* CLASS */)
              ])
            ]),
            vue.createElementVNode("div", _hoisted_11, [
              vue.withDirectives(vue.createElementVNode("div", _hoisted_12, [
                vue.createVNode(_component_SettingsTab, {
                  config: this.config
                }, null, 8 /* PROPS */, ["config"])
              ], 512 /* NEED_PATCH */), [
                [vue.vShow, this.selectedTab == 1]
              ]),
              vue.withDirectives(vue.createElementVNode("div", _hoisted_13, [
                vue.createVNode(_component_UserScriptInfo)
              ], 512 /* NEED_PATCH */), [
                [vue.vShow, this.selectedTab == 2]
              ]),
              (this.selectedTab == 3)
                ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14, [
                    vue.createVNode(_component_Stoage)
                  ]))
                : vue.createCommentVNode("v-if", true)
            ])
          ], 512 /* NEED_PATCH */), [
            [vue.vShow, this.showMainForm]
          ])
        ]),
        _: 1 /* STABLE */
      }),
      _hoisted_15
    ], 2 /* CLASS */))
  }

  var css_248z = "\n.us-tab-head-title {\r\n    color: #676767;\r\n    text-align: center;\r\n\r\n    box-shadow: 0 1px 2px rgba(0, 0, 0, .2);\n}\n.us-tab-mainbgcolor {\r\n    background-color: rgba(220, 220, 220, 0.492);\n}\n.us-tab-head {\r\n    grid-column-start: 1;\r\n    grid-column-end: 3;\r\n    grid-row: 1;\r\n    position: relative;\n}\n.us-tab-head-title {\r\n    line-height: 30px;\r\n    text-align: center;\n}\n.us-tab-head img {\r\n    vertical-align: middle;\r\n    width: 20px;\r\n    height: 20px;\n}\n.us-tab-head .us-close {\r\n\r\n    position: absolute;\r\n    opacity: 0.7;\r\n    cursor: pointer;\r\n    top: 5px;\r\n    right: 5px;\n}\n.us-mask {\r\n    position: fixed;\r\n    width: 100%;\r\n    height: 100%;\n}\n.v-enter-active,\r\n.v-leave-active {\r\n    transition: opacity 0.1s ease;\n}\n.v-enter-from,\r\n.v-leave-to {\r\n    opacity: 0;\n}\n.us-tab-menu-bg {\r\n    grid-column: 1;\r\n    grid-row: 2;\r\n    width: 100%;\r\n    height: 100%;\n}\n.us-seleted {\r\n    color: #078fff !important;\n}\n.us-main-func {\r\n\r\n    position: fixed;\r\n    z-index: 999999;\r\n    left: 0px;\r\n    transition: opacity 1s;\r\n    width: 100%;\r\n    margin: 2px 0px;\n}\n.us-main-func button:hover {\r\n    opacity: 1;\n}\n.us-main-func img {\r\n    overflow: hidden;\r\n    display: inline-flex;\r\n    text-align: center;\r\n    width: 100%;\r\n    vertical-align: middle;\r\n    line-height: 0 !important;\n}\n.us-main-func button {\r\n    opacity: 0.6;\r\n    width: 30px;\r\n    height: auto;\r\n    padding: 1px !important;\r\n    line-height: 0 !important;\n}\n.us-tab-container {\r\n    z-index: 9999;\r\n    position: fixed;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    top: 0;\r\n    margin: auto;\r\n    display: grid;\r\n    max-width: 700px;\r\n    max-height: 500px;\r\n    grid-template-columns: 120px auto;\r\n    grid-template-rows: 30px auto;\r\n    backdrop-filter: blur(5px);\r\n    box-shadow: 0 10px 20px rgba(0, 0, 0, .2);\r\n    border: 1px solid rgb(233, 233, 233);\r\n    background-color: rgba(255, 255, 255, 0.6);\r\n    border-radius: 3px;\n}\n.us-tab-menu {\r\n\r\n    margin-top: 15px;\r\n    position: relative;\n}\n.us-tab-menu button {\r\n    width: 100%;\r\n    border-width: 0px !important;\r\n    background: none !important;\r\n    padding: 10px !important;\r\n    margin: 0 !important;\n}\n.userscript-card-bordered {\r\n    text-align: left;\r\n    padding: 20px;\r\n    grid-column: 2;\r\n    grid-row: 2;\r\n    overflow: scroll;\n}\n.userscript-countdown-label {\r\n    position: relative;\r\n    background-color: rgba(255, 255, 255, 0.5); \r\n    backdrop-filter: blur(1px);\r\n    border-radius: 3px;\r\n    left: 2px;\r\n    min-width: 100px;\r\n    box-shadow: 0 10px 20px rgba(0, 0, 0, .2);\r\n    padding: 5px 14px;\r\n    font-weight: 400;\r\n    margin: 1px;\r\n    border-style: solid;\r\n    border-width: 0px;\r\n    line-height: 2;\r\n    display: inline-block;\n}\n.us-container .top {\r\n    position: fixed;\r\n    top: 10px;\n}\n.us-container .bottom {\r\n    position: fixed;\r\n    bottom: 10px;\n}\n.bottom {\r\n    bottom: 0;\n}\n.top {\r\n    top: 0;\n}\n.us-main-form button {\r\n    margin: 1px;\r\n    padding: 0 14px;\r\n    font-weight: 400;\r\n    border-style: solid;\r\n    border-width: 1px;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    line-height: 2;\r\n    background-color: white;\r\n    border-color: rgb(218, 216, 216);\r\n    color: rgb(0, 0, 0);\r\n    transition: color 0.3s, background-color 0.3s, border-color 0.3s;\n}\n.userscript-button:hover,\r\n.us-tab-menu button:hover {\r\n    color: #42A9FF;\r\n    border-color: #42A9FF;\n}\n.us-tab-menu button:hover {\r\n    background-color: #42aaff70 !important;\n}\r\n";
  styleInject(css_248z);

  script.render = render;
  script.__file = "src/app.vue";

  const appDom = VM.hm("div", {
    id: "userscript-app"
  });
  document.body.appendChild(appDom);
  const app = Vue.createApp(script);
  app.mount(appDom);
  //ab

})(VM, vue, Vue);
/*  */