NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name 定时刷新页面 // @name:en Auto refresh // @name:zh 定时刷新页面 // @name:zh-CN 定时刷新页面 // @namespace Violentmonkey Scripts // @description 设置倒计时,在计时结束时对页面进行刷新。同时增加了倒计时的进度条,可以更直观地看到多久后页面会刷新 // @description:en Set a countdown and refresh the page at the end of the countdown // @description:zh 设置倒计时,在计时结束时对页面进行刷新。同时增加了倒计时的进度条,可以更直观地看到多久后页面会刷新 // @description:zh-CN 设置倒计时,在计时结束时对页面进行刷新。同时增加了倒计时的进度条,可以更直观地看到多久后页面会刷新 // @match *://*/* // @supportURL https://gitee.com/jiabaox/timer-refreshes/issues // @noframes // @inject-into content // @run-at document-idle // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_listValues // @grant GM_setClipboard // @version V1.0.11.17 // @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.prod.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","tranislationTime"], data() { return { } }, methods: { }, mounted() { }, computed: { } }; const _hoisted_1$5 = { key: 0, class: "us-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: "us-precent", style: vue.normalizeStyle({ width: $props.precent + '%', background:$props.themeColor ,transition:'width '+$props.tranislationTime+'s ease-in-out'} ) }, [ ($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.us-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: 0px;\r\n position: relative;\r\n\r\n z-index: 9999;\r\n width: 100%;\r\n opacity: 0.8;\n}\n.us-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;\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'], emits:['timeElapsedChanged','endOfCountdown'], data() { return { timeElapsed: 0, millisec: 1000, isFirst: true, startTime: 0, count: 0 } }, methods: { reset() { this.timeElapsed = this.duration; this.count = 0; this.startTime = new Date().getTime(); } }, watch: { active: { handler(newValue, oldValue) { if (this.isFirst) { this.timeElapsed = this.duration; this.isFirst = false; } this.startTime = new Date().getTime(); this.count = 0; const timer = window.setTimeout(function runAgain(data, props, $emit) { if (!props.active) { //暂停计时 window.clearTimeout(timer); } else { data.count++; let currentTime = new Date().getTime(); let delay = currentTime - (data.startTime + data.count * data.millisec); let nextTime = data.millisec - delay; //console.debug('延迟', nextTime, currentTime, data.startTime + data.count * data.millisec, data.count, delay) if (nextTime < 0) { data.timeElapsed += nextTime; data.count += -nextTime / data.millisec; //console.debug('超延迟', data.timeElapsed, data.count); } else { data.timeElapsed -= data.millisec; } //触发倒计时时间变化事件 $emit("timeElapsedChanged", data.timeElapsed); if (data.timeElapsed <= 0) { window.clearTimeout(timer); //触发倒计时结束事件 $emit("endOfCountdown"); } else { setTimeout(runAgain, nextTime, data, props, $emit); } } }, this.$data.millisec, this.$data, this.$props, this.$emit); }, immediate: true }, }, mounted() { }, computed: { countDown() { //TODO 计算时、分、秒 if (this.timeElapsed <= 0) this.timeElapsed = 0; //一小时= 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 img$9 = "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$8 = "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$7 = "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 img$6 = "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='1668149469147' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='9829' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M512 128a384 384 0 1 1 0 768A384 384 0 0 1 512 128z m0 109.824a32 32 0 0 0-32 32V512l0.64 6.336a32 32 0 0 0 13.76 20.352l186.816 123.264 5.12 2.752a32 32 0 0 0 39.232-11.84l2.688-5.12a32 32 0 0 0-11.776-39.168L544 494.72V269.824l-0.512-5.76A32 32 0 0 0 512 237.824z' fill='%23FF8F49' p-id='9830'%3e%3c/path%3e%3c/svg%3e"; var img$5 = "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='1668068365135' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='16823' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M511.33 63c-247.42 0-448 200.57-448 448s200.58 448 448 448 448-200.58 448-448-200.57-448-448-448z m163.42 625.54H347.91a42.27 42.27 0 0 1 0-84.53h326.84a42.27 42.27 0 1 1 0 84.53z m0-135.25H347.91a42.27 42.27 0 0 1 0-84.53h326.84a42.27 42.27 0 1 1 0 84.53z m0-135.24H347.91a42.27 42.27 0 0 1 0-84.53h326.84a42.27 42.27 0 1 1 0 84.53z' p-id='16824' fill='%238a8a8a'%3e%3c/path%3e%3c/svg%3e"; var img$4 = "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='1668068263546' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='14061' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M512 512m-389.12 0a389.12 389.12 0 1 0 778.24 0 389.12 389.12 0 1 0-778.24 0Z' fill='%233889FF' p-id='14062'%3e%3c/path%3e%3cpath d='M492.78976 401.11104c-73.68704 10.25024-126.89408 75.74528-121.84576 149.97504 5.05856 74.21952 66.6624 131.90144 141.056 132.07552a141.68064 141.68064 0 0 0 141.66016-141.69088 27.50464 27.50464 0 1 1 55.00928 0c0 108.62592-88.04352 196.66944-196.66944 196.66944S315.33056 650.11712 315.33056 541.4912c0-102.84032 78.92992-187.2384 179.47648-195.93216l26.7776 26.75712-28.79488 28.80512v-0.01024z m0 0' fill='white' p-id='14063'%3e%3c/path%3e%3cpath d='M482.07872 332.81024a27.50464 27.50464 0 0 1 38.90176-38.90176l58.94144 58.95168a27.50464 27.50464 0 0 1 0 38.90176l-58.94144 58.94144a27.50464 27.50464 0 0 1-38.90176-38.90176l39.50592-39.50592-39.50592-39.48544z m0 0' fill='white' p-id='14064'%3e%3c/path%3e%3c/svg%3e"; var script$3 = { props: ['config','startCounting','countdown'], emits:['reset','start','suspend'], data() { return { defaultConfig: Object.assign({}, this.config),//备份配置选项(浅拷贝) icons: { running: img$9, suspend: img$8, close: img$7, menu: img$5, reset: img$4 ,timer: img$6} } }, 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 = { title: "倒计时", class: "userscript-button", style: {"pointer-events":"none"} }; const _hoisted_7$2 = ["src"]; const _hoisted_8$2 = ["src"]; const _hoisted_9$2 = ["src"]; const _hoisted_10$2 = ["src"]; const _hoisted_11$2 = { class: "userscript-key-item" }; const _hoisted_12$2 = { class: "userscript-value-item" }; const _hoisted_13$2 = ["value"]; const _hoisted_14$2 = /*#__PURE__*/vue.createElementVNode("span", null, "⚠️注:该设置下次刷新页面时生效。", -1 /* HOISTED */); const _hoisted_15$2 = { class: "userscript-key-item" }; const _hoisted_16$2 = { class: "userscript-value-item" }; const _hoisted_17$2 = /*#__PURE__*/vue.createElementVNode("label", { for: "showPrecent" }, "显示进度条百分比", -1 /* HOISTED */); const _hoisted_18$2 = { class: "userscript-value-item" }; const _hoisted_19$1 = /*#__PURE__*/vue.createElementVNode("label", { for: "showTimeElapsed" }, "显示操作按钮", -1 /* HOISTED */); const _hoisted_20 = /*#__PURE__*/vue.createElementVNode("span", null, [ /*#__PURE__*/vue.createTextVNode("⚠️注:点击暴力猴/油猴插件图标,选择"), /*#__PURE__*/vue.createElementVNode("b", null, "\"设置\""), /*#__PURE__*/vue.createTextVNode("菜单,可以对设置进行更改。") ], -1 /* HOISTED */); const _hoisted_21 = { class: "userscript-value-item" }; const _hoisted_22 = { class: "userscript-value-item" }; const _hoisted_23 = { class: "userscript-key-item" }; const _hoisted_24 = { class: "userscript-value-item" }; const _hoisted_25 = /*#__PURE__*/vue.createElementVNode("label", { for: "showProgressBar" }, "显示进度条", -1 /* HOISTED */); const _hoisted_26 = { class: "userscript-value-item" }; const _hoisted_27 = /*#__PURE__*/vue.createElementVNode("br", null, null, -1 /* HOISTED */); const _hoisted_28 = { class: "radiodiv" }; const _hoisted_29 = /*#__PURE__*/vue.createElementVNode("label", { for: "us-1" }, "顶部", -1 /* HOISTED */); const _hoisted_30 = { class: "radiodiv" }; const _hoisted_31 = /*#__PURE__*/vue.createElementVNode("label", { for: "us-2" }, "底部", -1 /* HOISTED */); const _hoisted_32 = { class: "userscript-value-item" }; const _hoisted_33 = /*#__PURE__*/vue.createElementVNode("br", null, null, -1 /* HOISTED */); const _hoisted_34 = { class: "userscript-value-item" }; const _hoisted_35 = { class: "userscript-tab-func" }; 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.createElementVNode("button", _hoisted_6$2, [ vue.createElementVNode("img", { src: this.icons.timer }, null, 8 /* PROPS */, _hoisted_7$2), vue.createTextVNode(" " + vue.toDisplayString(this.countdown), 1 /* TEXT */) ]), vue.createElementVNode("button", { title: "重置倒计时", onClick: _cache[0] || (_cache[0] = $event => (this.$emit('reset'))), class: "userscript-button" }, [ vue.createElementVNode("img", { src: this.icons.reset }, null, 8 /* PROPS */, _hoisted_8$2), vue.createTextVNode(" 重置倒计时 ") ]), vue.withDirectives(vue.createElementVNode("button", { title: "开始倒计时", onClick: _cache[1] || (_cache[1] = $event => (this.$emit('start'))), class: "userscript-button" }, [ vue.createElementVNode("img", { src: this.icons.running }, null, 8 /* PROPS */, _hoisted_9$2), vue.createTextVNode(" 开始倒计时 ") ], 512 /* NEED_PATCH */), [ [vue.vShow, !this.startCounting] ]), vue.withDirectives(vue.createElementVNode("button", { title: "暂停倒计时", onClick: _cache[2] || (_cache[2] = $event => (this.$emit('suspend'))), class: "userscript-button" }, [ vue.createElementVNode("img", { src: this.icons.suspend }, null, 8 /* PROPS */, _hoisted_10$2), vue.createTextVNode(" 暂停倒计时 ") ], 512 /* NEED_PATCH */), [ [vue.vShow, this.startCounting] ]) ]) ]), vue.createElementVNode("div", _hoisted_11$2, [ vue.createTextVNode(" 刷新时间 "), vue.createElementVNode("div", _hoisted_12$2, [ vue.createTextVNode(" 页面刷新间隔(分钟): "), vue.withDirectives(vue.createElementVNode("select", { "onUpdate:modelValue": _cache[3] || (_cache[3] = $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_13$2)) }), 256 /* UNKEYED_FRAGMENT */)) ], 512 /* NEED_PATCH */), [ [vue.vModelSelect, this.config.refreshInterval] ]), _hoisted_14$2 ]) ]), vue.createElementVNode("div", _hoisted_15$2, [ vue.createTextVNode(" 显示内容 "), vue.createElementVNode("div", _hoisted_16$2, [ vue.withDirectives(vue.createElementVNode("input", { type: "checkbox", id: "showPrecent", "onUpdate:modelValue": _cache[4] || (_cache[4] = $event => ((this.config.showPrecent) = $event)) }, null, 512 /* NEED_PATCH */), [ [vue.vModelCheckbox, this.config.showPrecent] ]), _hoisted_17$2 ]), vue.createElementVNode("div", _hoisted_18$2, [ vue.withDirectives(vue.createElementVNode("input", { type: "checkbox", id: "showTimeElapsed", "onUpdate:modelValue": _cache[5] || (_cache[5] = $event => ((this.config.showTimeElapsed) = $event)) }, null, 512 /* NEED_PATCH */), [ [vue.vModelCheckbox, this.config.showTimeElapsed] ]), _hoisted_19$1, _hoisted_20 ]), vue.createElementVNode("div", _hoisted_21, [ vue.createTextVNode(" 倒计时提示: "), vue.withDirectives(vue.createElementVNode("input", { type: "text", min: "0", max: "100", "onUpdate:modelValue": _cache[6] || (_cache[6] = $event => ((this.config.label) = $event)) }, null, 512 /* NEED_PATCH */), [ [vue.vModelText, this.config.label] ]) ]), vue.createElementVNode("div", _hoisted_22, [ 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_23, [ vue.createTextVNode(" 进度条 "), vue.createElementVNode("div", _hoisted_24, [ vue.withDirectives(vue.createElementVNode("input", { type: "checkbox", id: "showProgressBar", "onUpdate:modelValue": _cache[8] || (_cache[8] = $event => ((this.config.showProgressBar) = $event)) }, null, 512 /* NEED_PATCH */), [ [vue.vModelCheckbox, this.config.showProgressBar] ]), _hoisted_25 ]), vue.createElementVNode("div", _hoisted_26, [ vue.createTextVNode(" 位置:"), _hoisted_27, vue.createElementVNode("div", null, [ vue.createElementVNode("div", _hoisted_28, [ vue.withDirectives(vue.createElementVNode("input", { type: "radio", id: "us-1", "onUpdate:modelValue": _cache[9] || (_cache[9] = $event => ((this.config.position) = $event)), value: "top" }, null, 512 /* NEED_PATCH */), [ [vue.vModelRadio, this.config.position] ]), _hoisted_29 ]), vue.createElementVNode("div", _hoisted_30, [ vue.withDirectives(vue.createElementVNode("input", { type: "radio", id: "us-2", "onUpdate:modelValue": _cache[10] || (_cache[10] = $event => ((this.config.position) = $event)), value: "bottom" }, null, 512 /* NEED_PATCH */), [ [vue.vModelRadio, this.config.position] ]), _hoisted_31 ]) ]) ]), vue.createElementVNode("div", _hoisted_32, [ vue.createTextVNode(" 颜色: "), _hoisted_33, vue.withDirectives(vue.createElementVNode("input", { type: "color", name: "favcolor", "onUpdate:modelValue": _cache[11] || (_cache[11] = $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_34, [ vue.createTextVNode(" 高 度: "), vue.withDirectives(vue.createElementVNode("input", { type: "range", min: "1", max: "100", "onUpdate:modelValue": _cache[12] || (_cache[12] = $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", _hoisted_35, [ vue.createElementVNode("button", { title: "恢复到脚本刚安装时的默认配置", type: "reset", onClick: _cache[13] || (_cache[13] = (...args) => ($options.clear && $options.clear(...args))), class: "userscript-button" }, "清除设置"), vue.createElementVNode("button", { title: "取消", type: "reset", onClick: _cache[14] || (_cache[14] = (...args) => ($options.reset && $options.reset(...args))), class: "userscript-button" }, "取消"), vue.createElementVNode("button", { title: "保存", type: "submit", onClick: _cache[15] || (_cache[15] = (...args) => ($options.submit && $options.submit(...args))), class: "userscript-button" }, "保存") ]) ], 64 /* STABLE_FRAGMENT */)) } var css_248z$2 = "\n.userscript-tab-func{\r\n position: absolute;\r\n bottom: 0;\r\n margin: 5px;\n}\n.userscript-head {}\n.userscript-content {\n}\n.userscript-tab-head {}\n.userscript-tab-content {\r\n color: black;\r\n width: 90%;\r\n margin: 0 auto;\r\n padding:0 0 20px 0;\n}\n.userscript-key-item {\r\n font-weight: bold;\r\n margin: 8px 0;\n}\n.userscript-value-item {\r\n font-weight: normal;\r\n padding: 8px;\n}\n.userscript-value-item img {\r\n height: 30px;\r\n vertical-align: middle;\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: 20px;\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; this.data.script=delEmptyQueryNodes(delEmptyQueryNodes(this.data.script)); this.data.script=objKeysSort(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, " scriptHandler: ", -1 /* HOISTED */); const _hoisted_3$2 = { class: "us-table" }; const _hoisted_4$2 = { key: 0 }; const _hoisted_5$1 = /*#__PURE__*/vue.createElementVNode("td", null, "scriptHandler ", -1 /* HOISTED */); const _hoisted_6$1 = { key: 1 }; const _hoisted_7$1 = /*#__PURE__*/vue.createElementVNode("td", null, "scriptHandler ", -1 /* HOISTED */); const _hoisted_8$1 = { class: "us-platform" }; const _hoisted_9$1 = /*#__PURE__*/vue.createElementVNode("h4", null, " environment: ", -1 /* HOISTED */); const _hoisted_10$1 = { key: 0, class: "us-table" }; const _hoisted_11$1 = { class: "us-platform" }; const _hoisted_12$1 = /*#__PURE__*/vue.createElementVNode("h4", null, " script: ", -1 /* HOISTED */); const _hoisted_13$1 = { class: "us-table" }; const _hoisted_14$1 = { key: 0 }; const _hoisted_15$1 = ["src"]; const _hoisted_16$1 = { key: 1 }; const _hoisted_17$1 = { key: 2 }; const _hoisted_18$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, [ (this.data.scriptHandler!=undefined) ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_4$2, [ _hoisted_5$1, vue.createElementVNode("td", null, vue.toDisplayString(this.data.scriptHandler), 1 /* TEXT */) ])) : vue.createCommentVNode("v-if", true), (this.data.version!=undefined) ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_6$1, [ _hoisted_7$1, vue.createElementVNode("td", null, vue.toDisplayString(this.data.version), 1 /* TEXT */) ])) : vue.createCommentVNode("v-if", true) ]) ]), vue.createElementVNode("div", _hoisted_8$1, [ _hoisted_9$1, (this.data.platform!=undefined) ? (vue.openBlock(), vue.createElementBlock("table", _hoisted_10$1, [ (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.createCommentVNode("v-if", true) ]), vue.createElementVNode("div", _hoisted_11$1, [ _hoisted_12$1, vue.createElementVNode("table", _hoisted_13$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_14$1, [ vue.createElementVNode("img", { style: {"width":"50px"}, src: this.data.script[item] }, null, 8 /* PROPS */, _hoisted_15$1) ])) : (Array.isArray( this.data.script[item] ) ) ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_16$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_17$1, vue.toDisplayString(this.data.script[item]), 1 /* TEXT */)) ])) }), 128 /* KEYED_FRAGMENT */)) ]) ]), _hoisted_18$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$3 = "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='1668068079138' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3242' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M747.1 116.6H280.9c-90.1 0-163.5 73.4-163.5 163.5v466.2c0 90.1 73.4 163.5 163.5 163.5h466.2c90.1 0 164.1-73.4 163.5-163.5V280.1c0-90.2-73.3-163.5-163.5-163.5z m-363 713.6H233.6c-20.5 0-37.9-16.8-38.5-38.5V641.3c0-21.1 16.8-37.9 37.9-37.9 10.6 0 19.9 4.4 26.7 11.2 6.8 6.8 11.2 16.8 11.2 26.7v58.4l136.2-136.2c14.9-14.9 39.2-14.9 54.1 0 14.9 14.9 14.9 39.2 0 54.1L325 753.8h58.4c21.1 0 37.9 16.8 37.9 37.9s-16.1 38.5-37.2 38.5z m257.5-642.8H792c20.5 0 37.9 16.8 38.5 38.5v150.4c0 21.1-16.8 37.9-37.9 37.9-10.6 0-19.9-4.4-26.7-11.2-6.8-6.8-11.2-16.8-11.2-26.7V318L618.5 454.2c-14.9 14.9-39.2 14.9-54.1 0-14.9-14.9-14.9-39.2 0-54.1l136.2-136.2h-58.4c-21.1 0-37.9-16.8-37.9-37.9s16.1-38.6 37.3-38.6z' p-id='3243'%3e%3c/path%3e%3c/svg%3e"; 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='1668068041631' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='1537' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M746.2 131.1H279.9c-90.1 0-163.5 73.4-163.5 163.5v466.2c0 90.1 73.4 163.5 163.5 163.5h466.2c90.1 0 164.1-73.4 163.5-163.5V294.6c0.1-90.2-73.3-163.5-163.4-163.5zM282.5 566.8h150.4c20.5 0 37.9 16.8 38.5 38.5v150.4c0 21.1-16.8 37.9-37.9 37.9-10.6 0-19.9-4.4-26.7-11.2s-11.2-16.8-11.2-26.7v-58.4L259.4 833.6c-14.9 14.9-39.2 14.9-54.1 0-14.9-14.9-14.9-39.2 0-54.1l136.2-136.2h-58.4c-21.1 0-37.9-16.8-37.9-37.9 0-21.2 16.2-38.6 37.3-38.6z m458.7-86.9H590.8c-20.5 0-37.9-16.8-38.5-38.5V291c0-21.1 16.8-37.9 37.9-37.9 10.6 0 19.9 4.4 26.7 11.2s11.2 16.8 11.2 26.7v58.4l136.2-136.2c14.9-14.9 39.2-14.9 54.1 0 14.9 14.9 14.9 39.2 0 54.1L682.1 403.5h58.4c21.1 0 37.9 16.8 37.9 37.9 0.1 21.1-16.1 38.5-37.2 38.5z' p-id='1538'%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='1668132292571' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2133' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M684.408675 959.148993c-26.192545 0-52.375881-9.988492-72.359005-29.971615L267.23232 584.357981c-39.963177-39.963177-39.963177-104.754832 0-144.716986L612.04967 94.822622c39.963177-39.963177 104.754832-39.963177 144.718009 0 39.963177 39.962154 39.963177 104.754832 0 144.716986L484.308311 512 756.76768 784.459369c39.963177 39.963177 39.963177 104.754832 0 144.718009C736.788649 949.155385 710.594057 959.148993 684.408675 959.148993z' p-id='2134'%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='1668132230047' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2129' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3e%3cpath d='M339.590302 959.148993c-26.188452 0-52.377928-9.990538-72.357981-29.971615-39.963177-39.963177-39.963177-104.754832 0-144.718009l272.459369-272.459369L267.23232 239.539608c-39.963177-39.962154-39.963177-104.754832 0-144.716986 39.962154-39.963177 104.754832-39.963177 144.716986 0l344.818373 344.818373c39.963177 39.962154 39.963177 104.753809 0 144.716986L411.949306 929.177378C391.96823 949.158455 365.779777 959.148993 339.590302 959.148993z' p-id='2130'%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: 6, label: '刷新倒计时', }, selectedTab: 1, showMainForm: true, imgs: {}, scriptInfo: {}, refreshInterval: 2, enableFullScreen: false, menuItem: undefined, isUnfolded: true } }, watch: { showMainForm(newValue, oldValue) { let showMainForm = GM_getValue('showMainForm'); if (showMainForm != newValue) { GM_setValue('showMainForm', newValue); } }, selectedTab(newValue) { let selectedTab = GM_getValue('selectedTab'); if (selectedTab != newValue) { GM_setValue('selectedTab', newValue); } }, isUnfolded(newValue) { let isUnfolded = GM_getValue('isUnfolded'); if (isUnfolded != newValue) { GM_setValue('isUnfolded', newValue); } } }, methods: { precentIncrease(timeElapsed) { // if (this.menuItem != undefined) { // GM_unregisterMenuCommand(this.menuItem); // this.menuItem = undefined; // }; // let menuText = '刷新倒计时:' + this.$refs.countdown.countDown; // this.menuItem = GM_registerMenuCommand(menuText, () => { // }); if (timeElapsed <= 0) timeElapsed = 0; this.precent = (1 - (timeElapsed / (this.refreshInterval * 60 * 1000))) * 100; }, reload() { location.reload(); }, startOrStop() { this.startCounting = !this.startCounting; }, maskClick() { if (this.showMainForm) { this.showMainForm = false; } }, fullScreen() { if (document.fullscreenEnabled) { document.body.requestFullscreen(); this.enableFullScreen = true; } else { alert('浏览器不允许或者不支持全屏显示'); } }, cancelFullScreen() { document.exitFullscreen(); this.enableFullScreen = false; }, reset() { this.$refs.countdown.reset(); } }, 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; }, tranislationTime() { // let result = 0.2 / this.config.refreshInterval; // result = result >= 0.01 ? result : 0; // result = result > 1 ? 0.5 : result; //return result return 0.5; } }, mounted() { this.imgs = { running: img$9, suspend: img$8, close: img$7, cancelFullScreen: img$2, fullScreen: img$3, menu: img$5, reset: img$4, right: img, left: img$1 }; console.debug(this.imgs); 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; }); }, 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 selectedTab = GM_getValue('selectedTab'); if (selectedTab != undefined) { this.$data.selectedTab = selectedTab; } let isUnfolded = GM_getValue('isUnfolded'); if (isUnfolded != undefined) { this.$data.isUnfolded = isUnfolded; } let icon = GM_info.script.icon; this.$data.imgs = { icon }; this.scriptInfo = GM_info; this.refreshInterval = this.config.refreshInterval; }, beforeCreate() { } }; const _hoisted_1 = ["src"]; const _hoisted_2 = ["src"]; const _hoisted_3 = ["src"]; const _hoisted_4 = ["src"]; const _hoisted_5 = ["src"]; const _hoisted_6 = ["src"]; const _hoisted_7 = ["title"]; const _hoisted_8 = ["src"]; const _hoisted_9 = ["src"]; const _hoisted_10 = { class: "us-tab-head us-tab-mainbgcolor" }; const _hoisted_11 = { class: "us-tab-head-title" }; const _hoisted_12 = ["src"]; const _hoisted_13 = { class: "us-tab-menu-bg us-tab-mainbgcolor" }; const _hoisted_14 = { class: "us-tab-menu" }; const _hoisted_15 = { class: "userscript-card-bordered" }; const _hoisted_16 = { index: "1" }; const _hoisted_17 = { index: "2" }; const _hoisted_18 = { key: 0, index: "3" }; const _hoisted_19 = /*#__PURE__*/vue.createElementVNode("div", { class: "us-container" }, null, -1 /* HOISTED */); function render(_ctx, _cache, $props, $setup, $data, $options) { const _component_Countdown = vue.resolveComponent("Countdown"); const _component_ProgressBar = vue.resolveComponent("ProgressBar"); 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[14] || (_cache[14] = 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, display: this.config.opacity == 0 ? 'none' : '' }) }, [ vue.withDirectives(vue.createElementVNode("div", { class: vue.normalizeClass(["userscript-countdown-label", $options.displayPosition]), style: vue.normalizeStyle($options.displayPosition=='bottom'?'bottom:'+this.config.height+'px':'top:'+this.config.height+'px') }, [ vue.withDirectives(vue.createElementVNode("button", { title: "收缩 ", class: "userscript-button", onClick: _cache[0] || (_cache[0] = vue.withModifiers($event => (this.isUnfolded = false), ["stop"])) }, [ vue.createElementVNode("img", { src: this.imgs.left }, null, 8 /* PROPS */, _hoisted_1) ], 512 /* NEED_PATCH */), [ [vue.vShow, this.isUnfolded] ]), vue.withDirectives(vue.createElementVNode("span", null, [ vue.createElementVNode("button", { title: "主菜单 ", class: "userscript-button", onClick: _cache[1] || (_cache[1] = vue.withModifiers($event => (this.showMainForm = !this.showMainForm), ["stop"])) }, [ vue.createElementVNode("img", { src: this.imgs.menu }, null, 8 /* PROPS */, _hoisted_2) ]), vue.withDirectives(vue.createElementVNode("button", { title: "全屏 ", class: "userscript-button", onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args) => ($options.fullScreen && $options.fullScreen(...args)), ["stop"])) }, [ vue.createElementVNode("img", { src: this.imgs.fullScreen }, null, 8 /* PROPS */, _hoisted_3) ], 512 /* NEED_PATCH */), [ [vue.vShow, !this.enableFullScreen] ]), vue.withDirectives(vue.createElementVNode("button", { title: "退出全屏 ", class: "userscript-button", onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args) => ($options.cancelFullScreen && $options.cancelFullScreen(...args)), ["stop"])) }, [ vue.createElementVNode("img", { src: this.imgs.cancelFullScreen }, null, 8 /* PROPS */, _hoisted_4) ], 512 /* NEED_PATCH */), [ [vue.vShow, this.enableFullScreen] ]), vue.createElementVNode("button", { title: "重置计时 ", class: "userscript-button", onClick: _cache[4] || (_cache[4] = vue.withModifiers((...args) => ($options.reset && $options.reset(...args)), ["stop"])) }, [ vue.createElementVNode("img", { src: this.imgs.reset }, null, 8 /* PROPS */, _hoisted_5) ]) ], 512 /* NEED_PATCH */), [ [vue.vShow, this.isUnfolded] ]), vue.withDirectives(vue.createElementVNode("button", { title: "展开 ", class: "userscript-button", onClick: _cache[5] || (_cache[5] = vue.withModifiers($event => (this.isUnfolded = true), ["stop"])) }, [ vue.createElementVNode("img", { src: this.imgs.right }, null, 8 /* PROPS */, _hoisted_6) ], 512 /* NEED_PATCH */), [ [vue.vShow, !this.isUnfolded] ]), vue.createElementVNode("button", { title: this.startCounting ? '暂停倒计时' : '开始倒计时', class: "userscript-button", onClick: _cache[6] || (_cache[6] = vue.withModifiers((...args) => ($options.startOrStop && $options.startOrStop(...args)), ["stop"])) }, [ (this.startCounting) ? (vue.openBlock(), vue.createElementBlock("img", { key: 0, src: this.imgs.suspend }, null, 8 /* PROPS */, _hoisted_8)) : (vue.openBlock(), vue.createElementBlock("img", { key: 1, src: this.imgs.running }, null, 8 /* PROPS */, _hoisted_9)) ], 8 /* PROPS */, _hoisted_7), vue.createTextVNode(" " + vue.toDisplayString(this.config.label || '刷新倒计时') + " ", 1 /* TEXT */), vue.createVNode(_component_Countdown, { ref: "countdown", class: "", active: this.startCounting, duration: $options.interval, onTimeElapsedChanged: $options.precentIncrease, onEndOfCountdown: $options.reload }, null, 8 /* PROPS */, ["active", "duration", "onTimeElapsedChanged", "onEndOfCountdown"]) ], 6 /* CLASS, STYLE */), [ [vue.vShow, this.config.showTimeElapsed] ]), vue.createVNode(_component_ProgressBar, { "tranislation-time": $options.tranislationTime, 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 */, ["tranislation-time", "style", "class", "position", "precent", "themeColor", "showPrecent", "showProgressBar"]) ], 6 /* CLASS, STYLE */), vue.createVNode(vue.Transition, { persisted: "" }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("div", { class: "us-tab-container", onClick: _cache[13] || (_cache[13] = vue.withModifiers(() => {}, ["stop"])) }, [ vue.createElementVNode("div", _hoisted_10, [ vue.createElementVNode("div", _hoisted_11, vue.toDisplayString(this.scriptInfo.script.name) + "-脚本设置 ", 1 /* TEXT */), vue.createElementVNode("img", { class: "us-close", onClick: _cache[7] || (_cache[7] = (...args) => ($options.maskClick && $options.maskClick(...args))), src: this.imgs.close, title: "关闭" }, null, 8 /* PROPS */, _hoisted_12) ]), vue.createElementVNode("div", _hoisted_13, [ vue.createElementVNode("div", _hoisted_14, [ vue.createElementVNode("button", { index: "1", onClick: _cache[8] || (_cache[8] = $event => (this.selectedTab = 1)), class: vue.normalizeClass(this.selectedTab == 1 ? 'us-seleted' : '') }, "⚙️设置", 2 /* CLASS */), vue.createElementVNode("button", { index: "2", onClick: _cache[9] || (_cache[9] = $event => (this.selectedTab = 2)), class: vue.normalizeClass(this.selectedTab == 2 ? 'us-seleted' : '') }, "🪧关于", 2 /* CLASS */), vue.createElementVNode("button", { index: "3", onClick: _cache[10] || (_cache[10] = $event => (this.selectedTab = 3)), class: vue.normalizeClass(this.selectedTab == 3 ? 'us-seleted' : '') }, "📄数据", 2 /* CLASS */) ]) ]), vue.createElementVNode("div", _hoisted_15, [ vue.withDirectives(vue.createElementVNode("div", _hoisted_16, [ vue.createVNode(_component_SettingsTab, { countdown: this.$refs.countdown?.countDown, config: this.config, startCounting: this.startCounting, onStart: _cache[11] || (_cache[11] = $event => (this.startCounting = true)), onReset: $options.reset, onSuspend: _cache[12] || (_cache[12] = $event => (this.startCounting = false)) }, null, 8 /* PROPS */, ["countdown", "config", "startCounting", "onReset"]) ], 512 /* NEED_PATCH */), [ [vue.vShow, this.selectedTab == 1] ]), vue.withDirectives(vue.createElementVNode("div", _hoisted_17, [ vue.createVNode(_component_UserScriptInfo) ], 512 /* NEED_PATCH */), [ [vue.vShow, this.selectedTab == 2] ]), (this.selectedTab == 3) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18, [ vue.createVNode(_component_Stoage) ])) : vue.createCommentVNode("v-if", true) ]) ], 512 /* NEED_PATCH */), [ [vue.vShow, this.showMainForm] ]) ]), _: 1 /* STABLE */ }), _hoisted_19 ], 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: 999999999;\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: 20px;\r\n height: auto;\r\n padding: 1px !important;\r\n line-height: 0 !important;\n}\n.us-tab-container {\r\n z-index: 999999999;\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, 0.2);\r\n border: 1px solid rgb(233, 233, 233);\r\n background-color: rgba(255, 255, 255, 0.9);\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-y: scroll;\r\n overflow-x: hidden;\n}\n.userscript-countdown-label {\r\n position: absolute;\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 box-shadow: 0 10px 20px rgba(0, 0, 0, .2);\r\n padding: 0 2px;\r\n font-weight: 400;\r\n margin: 1px;\r\n border-style: solid;\r\n border-width: 0px;\r\n display: inline-block;\r\n font-size: 12px;\r\n line-height: 20px;\r\n color: black;\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"; function mount() { const appDom = VM.hm("div", { id: "userscript-app" }); document.body.appendChild(appDom); const app = Vue.createApp(script); app.config.errorHandler = (err, instance, info) => { console.error(err); // 向追踪服务报告错误 var date = new Date().toLocaleString(); let errors = GM_getValue("errors"); if (errors == undefined) { GM_setValue("errors", [{ date, err, info }]); } else { errors.push({ date, err, info }); GM_setValue("errors", errors); } }; app.mount(appDom); } function startUp() { try { var int = window.setTimeout(function () { mount(); }, 1000); } catch (error) { console.error(error); } } startUp(); })(VM, Vue, vue); /* */