// ==UserScript== // @name 定时刷新页面 // @namespace Violentmonkey Scripts // @description 设置倒计时,在计时结束时对页面进行刷新 // @match https://zhny.hn.sgcc.com.cn/dtyq/pngf/applicationview/content/view* // @match *://*/* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_registerMenuCommand // @grant GM_listValues // @grant GM_setClipboard // @version V1.0.11.06 // @author JiabaoX // @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== // @downloadURL none // ==/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$6 = "#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$6); var script$6 = { props: ['precent', 'showPrecent', "showProgressBar", "position","themeColor"], data() { return { } }, methods: { }, mounted() { }, computed: { } }; const _hoisted_1$6 = { key: 0, class: "loading-status" }; const _hoisted_2$5 = { key: 0, style: {"color":"white","text-align":"right","padding":"0 10px"} }; function render$6(_ctx, _cache, $props, $setup, $data, $options) { return ($props.showProgressBar) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [ vue.createElementVNode("div", { class: "precent", style: vue.normalizeStyle({ width: $props.precent + '%', background:$props.themeColor}) }, [ ($props.showPrecent) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, vue.toDisplayString($props.precent.toFixed(2) + '%'), 1 /* TEXT */)) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */) ])) : vue.createCommentVNode("v-if", true) } var css_248z$5 = "\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$5); script$6.render = render$6; script$6.__file = "src/components/progressBar.vue"; var script$5 = { 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$5 = { class: "countdown" }; function render$5(_ctx, _cache, $props, $setup, $data, $options) { return (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$5, vue.toDisplayString($options.countDown), 1 /* TEXT */)) } var css_248z$4 = "\n.countdown {\r\n font-variant-numeric: tabular-nums;\n}\r\n"; styleInject(css_248z$4); script$5.render = render$5; script$5.__file = "src/components/countdown.vue"; var script$4 = { props: ['dynamicId'], data() { return { enable: true } }, methods: { }, mounted() { }, computed: { } }; const _hoisted_1$4 = { class: "container" }; const _hoisted_2$4 = ["id", "checked"]; const _hoisted_3$4 = ["for"]; function render$4(_ctx, _cache, $props, $setup, $data, $options) { return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [ vue.withDirectives(vue.createElementVNode("input", { id: $props.dynamicId, type: "checkbox", class: "switch", checked: $data.enable, "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.enable) = $event)) }, null, 8 /* PROPS */, _hoisted_2$4), [ [vue.vModelCheckbox, $data.enable] ]), vue.createElementVNode("label", { for: $props.dynamicId }, null, 8 /* PROPS */, _hoisted_3$4) ])) } var css_248z$3 = "\n.bg_con {}\n.container {\r\n display: inline-flex;\n}\n.switch {\r\n display: none;\n}\n.container label {\r\n width: 40px;\r\n position: relative;\r\n display: block;\r\n border-radius: 24px;\r\n cursor: pointer;\r\n vertical-align: top;\r\n -webkit-user-select: none;\r\n /* user-select:none;表示文本不能被选中。 */\n}\n.container label:before {\r\n content: '';\r\n display: block;\r\n border-radius: 24px;\r\n height: 20px;\r\n background-color: rgb(187, 187, 187);\r\n transform: scale(1, 1);\r\n transition: all 0.3s ease;\n}\n.container label:after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n margin-top: -10px;\r\n margin-left: -10px;\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 20px;\r\n background-color: white;\r\n box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.08);\r\n transform: translateX(-10px);\r\n transition: all 0.3s ease;\n}\r\n\r\n/* A~B{ }表示A之后出现的所有B,且A、B有相同的父元素 */\n.switch:checked~label:after {\r\n transform: translateX(9px);\n}\n.switch:checked~label:before {\r\n background-color: rgb(0, 174, 14);\n}\r\n"; styleInject(css_248z$3); script$4.render = render$4; script$4.__file = "src/components/switch.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: { Switch: script$4 }, 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$6, Countdown: script$5, 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.startCounting = !this.$data.startCounting; }); GM_registerMenuCommand('关于', () => { this.$data.selectedTab = 2; 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); /* */