- // ==UserScript==
- // @name 老司机修炼手册
- // @name:zh-HK 老司機修煉手冊
- // @name:zh-TW 老司機修煉手冊
- // @name:en PornEnhance
- // @namespace http://github.com/GangPeter
- // @version 4.0.2
- // @author GangPeter
- // @description 支持网站 missav | jable.tv | pornhub | 18comic | 91porn | 91porna | xvideos。100+项功能、去除大部分广告(横幅、弹窗、视频内、新窗口)、自定义界面布局、隐私模式(模糊视频图片、标题)、显示完整标题、显示m3u8、自定义视频加载数量、自动登录、自动转跳无码片源、自动最高画质。支持 PC端 | 移动端。
- // @description:zh-HK 支持網站 missav | jable.tv | pornhub | 18comic | 91porn | 91porna | xvideos。100+項功能、去除大部分廣告(橫幅、彈窗、視頻內、新窗口)、自定義界面布局、隱私模式(模糊視頻圖片、標題)、顯示完整標題、顯示m3u8、自定義視頻加載數量、自動登錄、自動轉跳無碼片源、自動最高畫質。支持 PC端 | 移動端。
- // @description:zh-TW 支持網站 missav | jable.tv | pornhub | 18comic | 91porn | 91porna | xvideos。100+項功能、去除大部分廣告(橫幅、彈窗、視頻內、新窗口)、自定義界面布局、隱私模式(模糊視頻圖片、標題)、顯示完整標題、顯示m3u8、自定義視頻加載數量、自動登錄、自動轉跳無碼片源、自動最高畫質。支持 PC端 | 移動端。
- // @description:en Supported missav | jable.tv | pornhub | 18comic | 91porn | 91porna | xvideos. 100+ features, Remove Most ads (banner, popup, video, window), Custom Layout, Privacy Mode (Blur Video Image, Title), Display Video Full-Title, Get and Display m3u8, Custom Video Load Number, Automatic Login, Automatic Switch Uncensored, Automatic Switch Highest Video Quality. Supported PC | mobile.
- // @license None
- // @icon https://missav.ws/favicon.ico
- // @homepageURL https://github.com/GangPeter/porn-enhance
- // @supportURL https://github.com/GangPeter/porn-enhance
- // @match *://*.missav.com/*
- // @match *://*.missav.ws/*
- // @match *://*.missav.ai/*
- // @match *://*.jable.tv/*
- // @match *://*.pornhub.com/*
- // @match *://*.18comic.org/*
- // @match *://*.18comic.vip/*
- // @match *://*.91porn.com/*
- // @match *://*.91porna.com/*
- // @match *://*.xvideos.com/*
- // @require https://registry.npmmirror.com/vue/3.5.13/files/dist/vue.global.prod.js
- // @grant GM_addStyle
- // @grant GM_getValue
- // @grant GM_registerMenuCommand
- // @grant GM_setValue
- // @grant unsafeWindow
- // @run-at document-start
- // ==/UserScript==
-
- (o=>{if(typeof GM_addStyle=="function"){GM_addStyle(o);return}const e=document.createElement("style");e.textContent=o,document.head.append(e)})(" .m3u8-input-group[data-v-70ae07f7]{display:flex;align-items:center;height:50px;margin:15px 0;border-radius:999px;background-color:#1b1b1b;font-size:15px;border:none}.m3u8-span[data-v-70ae07f7]{align-content:center;width:10%;height:50px;color:#fff;padding:1em}.m3u8-input[data-v-70ae07f7]{width:75%;height:50px;color:#c6c6c6;border:none;background:transparent}.m3u8-button--copy[data-v-70ae07f7]{width:7.5%;height:50px;border-radius:0 999px 999px 0;background-color:#ff9000;color:#000;cursor:pointer;border:none}.m3u8-button--open[data-v-70ae07f7]{width:7.5%;height:50px;background-color:#ff9000;color:#000;cursor:pointer;border:none}.m3u8-button--open[data-v-70ae07f7]:hover,.m3u8-button--copy[data-v-70ae07f7]:hover{color:#fff} ");
-
- (function (e$1) {
- 'use strict';
-
- function _interopNamespaceDefault(e) {
- const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
- if (e) {
- for (const k in e) {
- if (k !== 'default') {
- const d = Object.getOwnPropertyDescriptor(e, k);
- Object.defineProperty(n, k, d.get ? d : {
- enumerable: true,
- get: () => e[k]
- });
- }
- }
- }
- n.default = e;
- return Object.freeze(n);
- }
-
- const e$1__namespace = /*#__PURE__*/_interopNamespaceDefault(e$1);
-
- var __defProp = Object.defineProperty;
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
- var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : undefined)();
- var _GM_registerMenuCommand = /* @__PURE__ */ (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : undefined)();
- var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : undefined)();
- var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : undefined)();
- /*!
- * pinia v2.3.1
- * (c) 2025 Eduardo San Martin Morote
- * @license MIT
- */
- let activePinia;
- const setActivePinia = (pinia) => activePinia = pinia;
- const piniaSymbol = (
- /* istanbul ignore next */
- Symbol()
- );
- function isPlainObject(o2) {
- return o2 && typeof o2 === "object" && Object.prototype.toString.call(o2) === "[object Object]" && typeof o2.toJSON !== "function";
- }
- var MutationType;
- (function(MutationType2) {
- MutationType2["direct"] = "direct";
- MutationType2["patchObject"] = "patch object";
- MutationType2["patchFunction"] = "patch function";
- })(MutationType || (MutationType = {}));
- function createPinia() {
- const scope = e$1.effectScope(true);
- const state = scope.run(() => e$1.ref({}));
- let _p = [];
- let toBeInstalled = [];
- const pinia = e$1.markRaw({
- install(app) {
- setActivePinia(pinia);
- {
- pinia._a = app;
- app.provide(piniaSymbol, pinia);
- app.config.globalProperties.$pinia = pinia;
- toBeInstalled.forEach((plugin) => _p.push(plugin));
- toBeInstalled = [];
- }
- },
- use(plugin) {
- if (!this._a && true) {
- toBeInstalled.push(plugin);
- } else {
- _p.push(plugin);
- }
- return this;
- },
- _p,
- // it's actually undefined here
- // @ts-expect-error
- _a: null,
- _e: scope,
- _s: /* @__PURE__ */ new Map(),
- state
- });
- return pinia;
- }
- const noop$1 = () => {
- };
- function addSubscription(subscriptions, callback, detached, onCleanup = noop$1) {
- subscriptions.push(callback);
- const removeSubscription = () => {
- const idx = subscriptions.indexOf(callback);
- if (idx > -1) {
- subscriptions.splice(idx, 1);
- onCleanup();
- }
- };
- if (!detached && e$1.getCurrentScope()) {
- e$1.onScopeDispose(removeSubscription);
- }
- return removeSubscription;
- }
- function triggerSubscriptions(subscriptions, ...args) {
- subscriptions.slice().forEach((callback) => {
- callback(...args);
- });
- }
- const fallbackRunWithContext = (fn) => fn();
- const ACTION_MARKER = Symbol();
- const ACTION_NAME = Symbol();
- function mergeReactiveObjects(target, patchToApply) {
- if (target instanceof Map && patchToApply instanceof Map) {
- patchToApply.forEach((value, key) => target.set(key, value));
- } else if (target instanceof Set && patchToApply instanceof Set) {
- patchToApply.forEach(target.add, target);
- }
- for (const key in patchToApply) {
- if (!patchToApply.hasOwnProperty(key))
- continue;
- const subPatch = patchToApply[key];
- const targetValue = target[key];
- if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !e$1.isRef(subPatch) && !e$1.isReactive(subPatch)) {
- target[key] = mergeReactiveObjects(targetValue, subPatch);
- } else {
- target[key] = subPatch;
- }
- }
- return target;
- }
- const skipHydrateSymbol = (
- /* istanbul ignore next */
- Symbol()
- );
- function shouldHydrate(obj) {
- return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
- }
- const { assign } = Object;
- function isComputed(o2) {
- return !!(e$1.isRef(o2) && o2.effect);
- }
- function createOptionsStore(id, options, pinia, hot) {
- const { state, actions, getters } = options;
- const initialState = pinia.state.value[id];
- let store;
- function setup() {
- if (!initialState && true) {
- {
- pinia.state.value[id] = state ? state() : {};
- }
- }
- const localState = e$1.toRefs(pinia.state.value[id]);
- return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
- computedGetters[name] = e$1.markRaw(e$1.computed(() => {
- setActivePinia(pinia);
- const store2 = pinia._s.get(id);
- return getters[name].call(store2, store2);
- }));
- return computedGetters;
- }, {}));
- }
- store = createSetupStore(id, setup, options, pinia, hot, true);
- return store;
- }
- function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
- let scope;
- const optionsForPlugin = assign({ actions: {} }, options);
- const $subscribeOptions = { deep: true };
- let isListening;
- let isSyncListening;
- let subscriptions = [];
- let actionSubscriptions = [];
- let debuggerEvents;
- const initialState = pinia.state.value[$id];
- if (!isOptionsStore && !initialState && true) {
- {
- pinia.state.value[$id] = {};
- }
- }
- e$1.ref({});
- let activeListener;
- function $patch(partialStateOrMutator) {
- let subscriptionMutation;
- isListening = isSyncListening = false;
- if (typeof partialStateOrMutator === "function") {
- partialStateOrMutator(pinia.state.value[$id]);
- subscriptionMutation = {
- type: MutationType.patchFunction,
- storeId: $id,
- events: debuggerEvents
- };
- } else {
- mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
- subscriptionMutation = {
- type: MutationType.patchObject,
- payload: partialStateOrMutator,
- storeId: $id,
- events: debuggerEvents
- };
- }
- const myListenerId = activeListener = Symbol();
- e$1.nextTick().then(() => {
- if (activeListener === myListenerId) {
- isListening = true;
- }
- });
- isSyncListening = true;
- triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
- }
- const $reset = isOptionsStore ? function $reset2() {
- const { state } = options;
- const newState = state ? state() : {};
- this.$patch(($state) => {
- assign($state, newState);
- });
- } : (
- /* istanbul ignore next */
- noop$1
- );
- function $dispose() {
- scope.stop();
- subscriptions = [];
- actionSubscriptions = [];
- pinia._s.delete($id);
- }
- const action = (fn, name = "") => {
- if (ACTION_MARKER in fn) {
- fn[ACTION_NAME] = name;
- return fn;
- }
- const wrappedAction = function() {
- setActivePinia(pinia);
- const args = Array.from(arguments);
- const afterCallbackList = [];
- const onErrorCallbackList = [];
- function after(callback) {
- afterCallbackList.push(callback);
- }
- function onError(callback) {
- onErrorCallbackList.push(callback);
- }
- triggerSubscriptions(actionSubscriptions, {
- args,
- name: wrappedAction[ACTION_NAME],
- store,
- after,
- onError
- });
- let ret;
- try {
- ret = fn.apply(this && this.$id === $id ? this : store, args);
- } catch (error2) {
- triggerSubscriptions(onErrorCallbackList, error2);
- throw error2;
- }
- if (ret instanceof Promise) {
- return ret.then((value) => {
- triggerSubscriptions(afterCallbackList, value);
- return value;
- }).catch((error2) => {
- triggerSubscriptions(onErrorCallbackList, error2);
- return Promise.reject(error2);
- });
- }
- triggerSubscriptions(afterCallbackList, ret);
- return ret;
- };
- wrappedAction[ACTION_MARKER] = true;
- wrappedAction[ACTION_NAME] = name;
- return wrappedAction;
- };
- const partialStore = {
- _p: pinia,
- // _s: scope,
- $id,
- $onAction: addSubscription.bind(null, actionSubscriptions),
- $patch,
- $reset,
- $subscribe(callback, options2 = {}) {
- const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
- const stopWatcher = scope.run(() => e$1.watch(() => pinia.state.value[$id], (state) => {
- if (options2.flush === "sync" ? isSyncListening : isListening) {
- callback({
- storeId: $id,
- type: MutationType.direct,
- events: debuggerEvents
- }, state);
- }
- }, assign({}, $subscribeOptions, options2)));
- return removeSubscription;
- },
- $dispose
- };
- const store = e$1.reactive(partialStore);
- pinia._s.set($id, store);
- const runWithContext = pinia._a && pinia._a.runWithContext || fallbackRunWithContext;
- const setupStore = runWithContext(() => pinia._e.run(() => (scope = e$1.effectScope()).run(() => setup({ action }))));
- for (const key in setupStore) {
- const prop = setupStore[key];
- if (e$1.isRef(prop) && !isComputed(prop) || e$1.isReactive(prop)) {
- if (!isOptionsStore) {
- if (initialState && shouldHydrate(prop)) {
- if (e$1.isRef(prop)) {
- prop.value = initialState[key];
- } else {
- mergeReactiveObjects(prop, initialState[key]);
- }
- }
- {
- pinia.state.value[$id][key] = prop;
- }
- }
- } else if (typeof prop === "function") {
- const actionValue = action(prop, key);
- {
- setupStore[key] = actionValue;
- }
- optionsForPlugin.actions[key] = prop;
- } else ;
- }
- {
- assign(store, setupStore);
- assign(e$1.toRaw(store), setupStore);
- }
- Object.defineProperty(store, "$state", {
- get: () => pinia.state.value[$id],
- set: (state) => {
- $patch(($state) => {
- assign($state, state);
- });
- }
- });
- pinia._p.forEach((extender) => {
- {
- assign(store, scope.run(() => extender({
- store,
- app: pinia._a,
- pinia,
- options: optionsForPlugin
- })));
- }
- });
- if (initialState && isOptionsStore && options.hydrate) {
- options.hydrate(store.$state, initialState);
- }
- isListening = true;
- isSyncListening = true;
- return store;
- }
- /*! #__NO_SIDE_EFFECTS__ */
- // @__NO_SIDE_EFFECTS__
- function defineStore(idOrOptions, setup, setupOptions) {
- let id;
- let options;
- const isSetupStore = typeof setup === "function";
- if (typeof idOrOptions === "string") {
- id = idOrOptions;
- options = isSetupStore ? setupOptions : setup;
- } else {
- options = idOrOptions;
- id = idOrOptions.id;
- }
- function useStore(pinia, hot) {
- const hasContext = e$1.hasInjectionContext();
- pinia = // in test mode, ignore the argument provided as we can always retrieve a
- // pinia instance with getActivePinia()
- pinia || (hasContext ? e$1.inject(piniaSymbol, null) : null);
- if (pinia)
- setActivePinia(pinia);
- pinia = activePinia;
- if (!pinia._s.has(id)) {
- if (isSetupStore) {
- createSetupStore(id, setup, options, pinia);
- } else {
- createOptionsStore(id, options, pinia);
- }
- }
- const store = pinia._s.get(id);
- return store;
- }
- useStore.$id = id;
- return useStore;
- }
- function d$2(u2, e2, r2) {
- let i2 = e$1.ref(r2 == null ? undefined : r2.value), f2 = e$1.computed(() => u2.value !== undefined);
- return [e$1.computed(() => f2.value ? u2.value : i2.value), function(t2) {
- return f2.value || (i2.value = t2), e2 == null ? undefined : e2(t2);
- }];
- }
- var r$2;
- let n$3 = Symbol("headlessui.useid"), o$4 = 0;
- const i$4 = (r$2 = e$1__namespace.useId) != null ? r$2 : function() {
- return e$1__namespace.inject(n$3, () => `${++o$4}`)();
- };
- function o$3(e2) {
- var l2;
- if (e2 == null || e2.value == null) return null;
- let n2 = (l2 = e2.value.$el) != null ? l2 : e2.value;
- return n2 instanceof Node ? n2 : null;
- }
- function u$5(r2, n2, ...a2) {
- if (r2 in n2) {
- let e2 = n2[r2];
- return typeof e2 == "function" ? e2(...a2) : e2;
- }
- let t2 = new Error(`Tried to handle "${r2}" but there is no handler defined. Only defined handlers are: ${Object.keys(n2).map((e2) => `"${e2}"`).join(", ")}.`);
- throw Error.captureStackTrace && Error.captureStackTrace(t2, u$5), t2;
- }
- var i$3 = Object.defineProperty;
- var d$1 = (t2, e2, r2) => e2 in t2 ? i$3(t2, e2, { enumerable: true, configurable: true, writable: true, value: r2 }) : t2[e2] = r2;
- var n$2 = (t2, e2, r2) => (d$1(t2, typeof e2 != "symbol" ? e2 + "" : e2, r2), r2);
- let s$1 = class s {
- constructor() {
- n$2(this, "current", this.detect());
- n$2(this, "currentId", 0);
- }
- set(e2) {
- this.current !== e2 && (this.currentId = 0, this.current = e2);
- }
- reset() {
- this.set(this.detect());
- }
- nextId() {
- return ++this.currentId;
- }
- get isServer() {
- return this.current === "server";
- }
- get isClient() {
- return this.current === "client";
- }
- detect() {
- return typeof window == "undefined" || typeof document == "undefined" ? "server" : "client";
- }
- };
- let c$2 = new s$1();
- function i$2(r2) {
- if (c$2.isServer) return null;
- if (r2 instanceof Node) return r2.ownerDocument;
- if (r2 != null && r2.hasOwnProperty("value")) {
- let n2 = o$3(r2);
- if (n2) return n2.ownerDocument;
- }
- return document;
- }
- let c$1 = ["[contentEditable=true]", "[tabindex]", "a[href]", "area[href]", "button:not([disabled])", "iframe", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])"].map((e2) => `${e2}:not([tabindex='-1'])`).join(",");
- var N$2 = ((n2) => (n2[n2.First = 1] = "First", n2[n2.Previous = 2] = "Previous", n2[n2.Next = 4] = "Next", n2[n2.Last = 8] = "Last", n2[n2.WrapAround = 16] = "WrapAround", n2[n2.NoScroll = 32] = "NoScroll", n2))(N$2 || {}), T$2 = ((o2) => (o2[o2.Error = 0] = "Error", o2[o2.Overflow = 1] = "Overflow", o2[o2.Success = 2] = "Success", o2[o2.Underflow = 3] = "Underflow", o2))(T$2 || {}), F = ((t2) => (t2[t2.Previous = -1] = "Previous", t2[t2.Next = 1] = "Next", t2))(F || {});
- var h = ((t2) => (t2[t2.Strict = 0] = "Strict", t2[t2.Loose = 1] = "Loose", t2))(h || {});
- function w$3(e2, r2 = 0) {
- var t2;
- return e2 === ((t2 = i$2(e2)) == null ? undefined : t2.body) ? false : u$5(r2, { [0]() {
- return e2.matches(c$1);
- }, [1]() {
- let l2 = e2;
- for (; l2 !== null; ) {
- if (l2.matches(c$1)) return true;
- l2 = l2.parentElement;
- }
- return false;
- } });
- }
- var y$1 = ((t2) => (t2[t2.Keyboard = 0] = "Keyboard", t2[t2.Mouse = 1] = "Mouse", t2))(y$1 || {});
- typeof window != "undefined" && typeof document != "undefined" && (document.addEventListener("keydown", (e2) => {
- e2.metaKey || e2.altKey || e2.ctrlKey || (document.documentElement.dataset.headlessuiFocusVisible = "");
- }, true), document.addEventListener("click", (e2) => {
- e2.detail === 1 ? delete document.documentElement.dataset.headlessuiFocusVisible : e2.detail === 0 && (document.documentElement.dataset.headlessuiFocusVisible = "");
- }, true));
- function O$1(e2, r2 = (t2) => t2) {
- return e2.slice().sort((t2, l2) => {
- let o2 = r2(t2), i2 = r2(l2);
- if (o2 === null || i2 === null) return 0;
- let n2 = o2.compareDocumentPosition(i2);
- return n2 & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : n2 & Node.DOCUMENT_POSITION_PRECEDING ? 1 : 0;
- });
- }
- function t$1() {
- return /iPhone/gi.test(window.navigator.platform) || /Mac/gi.test(window.navigator.platform) && window.navigator.maxTouchPoints > 0;
- }
- function i$1() {
- return /Android/gi.test(window.navigator.userAgent);
- }
- function n$1() {
- return t$1() || i$1();
- }
- function u$4(e2, t2, n2) {
- c$2.isServer || e$1.watchEffect((o2) => {
- document.addEventListener(e2, t2, n2), o2(() => document.removeEventListener(e2, t2, n2));
- });
- }
- function w$2(e2, n2, t2) {
- c$2.isServer || e$1.watchEffect((o2) => {
- window.addEventListener(e2, n2, t2), o2(() => window.removeEventListener(e2, n2, t2));
- });
- }
- function w$1(f2, m, l2 = e$1.computed(() => true)) {
- function a2(e2, r2) {
- if (!l2.value || e2.defaultPrevented) return;
- let t2 = r2(e2);
- if (t2 === null || !t2.getRootNode().contains(t2)) return;
- let c2 = function o2(n2) {
- return typeof n2 == "function" ? o2(n2()) : Array.isArray(n2) || n2 instanceof Set ? n2 : [n2];
- }(f2);
- for (let o2 of c2) {
- if (o2 === null) continue;
- let n2 = o2 instanceof HTMLElement ? o2 : o$3(o2);
- if (n2 != null && n2.contains(t2) || e2.composed && e2.composedPath().includes(n2)) return;
- }
- return !w$3(t2, h.Loose) && t2.tabIndex !== -1 && e2.preventDefault(), m(e2, t2);
- }
- let u2 = e$1.ref(null);
- u$4("pointerdown", (e2) => {
- var r2, t2;
- l2.value && (u2.value = ((t2 = (r2 = e2.composedPath) == null ? undefined : r2.call(e2)) == null ? undefined : t2[0]) || e2.target);
- }, true), u$4("mousedown", (e2) => {
- var r2, t2;
- l2.value && (u2.value = ((t2 = (r2 = e2.composedPath) == null ? undefined : r2.call(e2)) == null ? undefined : t2[0]) || e2.target);
- }, true), u$4("click", (e2) => {
- n$1() || u2.value && (a2(e2, () => u2.value), u2.value = null);
- }, true), u$4("touchend", (e2) => a2(e2, () => e2.target instanceof HTMLElement ? e2.target : null), true), w$2("blur", (e2) => a2(e2, () => window.document.activeElement instanceof HTMLIFrameElement ? window.document.activeElement : null), true);
- }
- function r$1(t2, e2) {
- if (t2) return t2;
- let n2 = e2 != null ? e2 : "button";
- if (typeof n2 == "string" && n2.toLowerCase() === "button") return "button";
- }
- function s2(t2, e2) {
- let n2 = e$1.ref(r$1(t2.value.type, t2.value.as));
- return e$1.onMounted(() => {
- n2.value = r$1(t2.value.type, t2.value.as);
- }), e$1.watchEffect(() => {
- var u2;
- n2.value || o$3(e2) && o$3(e2) instanceof HTMLButtonElement && !((u2 = o$3(e2)) != null && u2.hasAttribute("type")) && (n2.value = "button");
- }), n2;
- }
- function r(e2) {
- return [e2.screenX, e2.screenY];
- }
- function u$3() {
- let e2 = e$1.ref([-1, -1]);
- return { wasMoved(n2) {
- let t2 = r(n2);
- return e2.value[0] === t2[0] && e2.value[1] === t2[1] ? false : (e2.value = t2, true);
- }, update(n2) {
- e2.value = r(n2);
- } };
- }
- var N$1 = ((o2) => (o2[o2.None = 0] = "None", o2[o2.RenderStrategy = 1] = "RenderStrategy", o2[o2.Static = 2] = "Static", o2))(N$1 || {}), S = ((e2) => (e2[e2.Unmount = 0] = "Unmount", e2[e2.Hidden = 1] = "Hidden", e2))(S || {});
- function A$1({ visible: r2 = true, features: t2 = 0, ourProps: e2, theirProps: o2, ...i2 }) {
- var a2;
- let n2 = j(o2, e2), l2 = Object.assign(i2, { props: n2 });
- if (r2 || t2 & 2 && n2.static) return y(l2);
- if (t2 & 1) {
- let d2 = (a2 = n2.unmount) == null || a2 ? 0 : 1;
- return u$5(d2, { [0]() {
- return null;
- }, [1]() {
- return y({ ...i2, props: { ...n2, hidden: true, style: { display: "none" } } });
- } });
- }
- return y(l2);
- }
- function y({ props: r2, attrs: t2, slots: e2, slot: o2, name: i2 }) {
- var m, h2;
- let { as: n2, ...l2 } = T$1(r2, ["unmount", "static"]), a2 = (m = e2.default) == null ? undefined : m.call(e2, o2), d2 = {};
- if (o2) {
- let u2 = false, c2 = [];
- for (let [p2, f2] of Object.entries(o2)) typeof f2 == "boolean" && (u2 = true), f2 === true && c2.push(p2);
- u2 && (d2["data-headlessui-state"] = c2.join(" "));
- }
- if (n2 === "template") {
- if (a2 = b(a2 != null ? a2 : []), Object.keys(l2).length > 0 || Object.keys(t2).length > 0) {
- let [u2, ...c2] = a2 != null ? a2 : [];
- if (!v(u2) || c2.length > 0) throw new Error(['Passing props on "template"!', "", `The current component <${i2} /> is rendering a "template".`, "However we need to passthrough the following props:", Object.keys(l2).concat(Object.keys(t2)).map((s3) => s3.trim()).filter((s3, g2, R) => R.indexOf(s3) === g2).sort((s3, g2) => s3.localeCompare(g2)).map((s3) => ` - ${s3}`).join(`
- `), "", "You can apply a few solutions:", ['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".', "Render a single element as the child so that we can forward the props onto that element."].map((s3) => ` - ${s3}`).join(`
- `)].join(`
- `));
- let p2 = j((h2 = u2.props) != null ? h2 : {}, l2, d2), f2 = e$1.cloneVNode(u2, p2, true);
- for (let s3 in p2) s3.startsWith("on") && (f2.props || (f2.props = {}), f2.props[s3] = p2[s3]);
- return f2;
- }
- return Array.isArray(a2) && a2.length === 1 ? a2[0] : a2;
- }
- return e$1.h(n2, Object.assign({}, l2, d2), { default: () => a2 });
- }
- function b(r2) {
- return r2.flatMap((t2) => t2.type === e$1.Fragment ? b(t2.children) : [t2]);
- }
- function j(...r2) {
- if (r2.length === 0) return {};
- if (r2.length === 1) return r2[0];
- let t2 = {}, e2 = {};
- for (let i2 of r2) for (let n2 in i2) n2.startsWith("on") && typeof i2[n2] == "function" ? (e2[n2] != null || (e2[n2] = []), e2[n2].push(i2[n2])) : t2[n2] = i2[n2];
- if (t2.disabled || t2["aria-disabled"]) return Object.assign(t2, Object.fromEntries(Object.keys(e2).map((i2) => [i2, undefined])));
- for (let i2 in e2) Object.assign(t2, { [i2](n2, ...l2) {
- let a2 = e2[i2];
- for (let d2 of a2) {
- if (n2 instanceof Event && n2.defaultPrevented) return;
- d2(n2, ...l2);
- }
- } });
- return t2;
- }
- function E$1(r2) {
- let t2 = Object.assign({}, r2);
- for (let e2 in t2) t2[e2] === undefined && delete t2[e2];
- return t2;
- }
- function T$1(r2, t2 = []) {
- let e2 = Object.assign({}, r2);
- for (let o2 of t2) o2 in e2 && delete e2[o2];
- return e2;
- }
- function v(r2) {
- return r2 == null ? false : typeof r2.type == "string" || typeof r2.type == "object" || typeof r2.type == "function";
- }
- var u$2 = ((e2) => (e2[e2.None = 1] = "None", e2[e2.Focusable = 2] = "Focusable", e2[e2.Hidden = 4] = "Hidden", e2))(u$2 || {});
- let f$2 = e$1.defineComponent({ name: "Hidden", props: { as: { type: [Object, String], default: "div" }, features: { type: Number, default: 1 } }, setup(t2, { slots: n2, attrs: i2 }) {
- return () => {
- var r2;
- let { features: e2, ...d2 } = t2, o2 = { "aria-hidden": (e2 & 2) === 2 ? true : (r2 = d2["aria-hidden"]) != null ? r2 : undefined, hidden: (e2 & 4) === 4 ? true : undefined, style: { position: "fixed", top: 1, left: 1, width: 1, height: 0, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", borderWidth: "0", ...(e2 & 4) === 4 && (e2 & 2) !== 2 && { display: "none" } } };
- return A$1({ ourProps: o2, theirProps: d2, slot: {}, attrs: i2, slots: n2, name: "Hidden" });
- };
- } });
- let n = Symbol("Context");
- var i = ((e2) => (e2[e2.Open = 1] = "Open", e2[e2.Closed = 2] = "Closed", e2[e2.Closing = 4] = "Closing", e2[e2.Opening = 8] = "Opening", e2))(i || {});
- function l() {
- return e$1.inject(n, null);
- }
- function t(o2) {
- e$1.provide(n, o2);
- }
- var o$2 = ((r2) => (r2.Space = " ", r2.Enter = "Enter", r2.Escape = "Escape", r2.Backspace = "Backspace", r2.Delete = "Delete", r2.ArrowLeft = "ArrowLeft", r2.ArrowUp = "ArrowUp", r2.ArrowRight = "ArrowRight", r2.ArrowDown = "ArrowDown", r2.Home = "Home", r2.End = "End", r2.PageUp = "PageUp", r2.PageDown = "PageDown", r2.Tab = "Tab", r2))(o$2 || {});
- function u$1(l2) {
- throw new Error("Unexpected object: " + l2);
- }
- var c = ((i2) => (i2[i2.First = 0] = "First", i2[i2.Previous = 1] = "Previous", i2[i2.Next = 2] = "Next", i2[i2.Last = 3] = "Last", i2[i2.Specific = 4] = "Specific", i2[i2.Nothing = 5] = "Nothing", i2))(c || {});
- function f$1(l2, n2) {
- let t2 = n2.resolveItems();
- if (t2.length <= 0) return null;
- let r2 = n2.resolveActiveIndex(), s3 = r2 != null ? r2 : -1;
- switch (l2.focus) {
- case 0: {
- for (let e2 = 0; e2 < t2.length; ++e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
- return r2;
- }
- case 1: {
- s3 === -1 && (s3 = t2.length);
- for (let e2 = s3 - 1; e2 >= 0; --e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
- return r2;
- }
- case 2: {
- for (let e2 = s3 + 1; e2 < t2.length; ++e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
- return r2;
- }
- case 3: {
- for (let e2 = t2.length - 1; e2 >= 0; --e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
- return r2;
- }
- case 4: {
- for (let e2 = 0; e2 < t2.length; ++e2) if (n2.resolveId(t2[e2], e2, t2) === l2.id) return e2;
- return r2;
- }
- case 5:
- return null;
- default:
- u$1(l2);
- }
- }
- function e(i2 = {}, s3 = null, t2 = []) {
- for (let [r2, n2] of Object.entries(i2)) o$1(t2, f(s3, r2), n2);
- return t2;
- }
- function f(i2, s3) {
- return i2 ? i2 + "[" + s3 + "]" : s3;
- }
- function o$1(i2, s3, t2) {
- if (Array.isArray(t2)) for (let [r2, n2] of t2.entries()) o$1(i2, f(s3, r2.toString()), n2);
- else t2 instanceof Date ? i2.push([s3, t2.toISOString()]) : typeof t2 == "boolean" ? i2.push([s3, t2 ? "1" : "0"]) : typeof t2 == "string" ? i2.push([s3, t2]) : typeof t2 == "number" ? i2.push([s3, `${t2}`]) : t2 == null ? i2.push([s3, ""]) : e(t2, s3, i2);
- }
- function p$1(i2) {
- var t2, r2;
- let s3 = (t2 = i2 == null ? undefined : i2.form) != null ? t2 : i2.closest("form");
- if (s3) {
- for (let n2 of s3.elements) if (n2 !== i2 && (n2.tagName === "INPUT" && n2.type === "submit" || n2.tagName === "BUTTON" && n2.type === "submit" || n2.nodeName === "INPUT" && n2.type === "image")) {
- n2.click();
- return;
- }
- (r2 = s3.requestSubmit) == null || r2.call(s3);
- }
- }
- let u = Symbol("DescriptionContext");
- function w() {
- let t2 = e$1.inject(u, null);
- if (t2 === null) throw new Error("Missing parent");
- return t2;
- }
- function k$1({ slot: t2 = e$1.ref({}), name: o2 = "Description", props: s3 = {} } = {}) {
- let e2 = e$1.ref([]);
- function r2(n2) {
- return e2.value.push(n2), () => {
- let i2 = e2.value.indexOf(n2);
- i2 !== -1 && e2.value.splice(i2, 1);
- };
- }
- return e$1.provide(u, { register: r2, slot: t2, name: o2, props: s3 }), e$1.computed(() => e2.value.length > 0 ? e2.value.join(" ") : undefined);
- }
- e$1.defineComponent({ name: "Description", props: { as: { type: [Object, String], default: "p" }, id: { type: String, default: null } }, setup(t2, { attrs: o2, slots: s3 }) {
- var n2;
- let e2 = (n2 = t2.id) != null ? n2 : `headlessui-description-${i$4()}`, r2 = w();
- return e$1.onMounted(() => e$1.onUnmounted(r2.register(e2))), () => {
- let { name: i2 = "Description", slot: l2 = e$1.ref({}), props: d2 = {} } = r2, { ...c2 } = t2, f2 = { ...Object.entries(d2).reduce((a2, [g2, m]) => Object.assign(a2, { [g2]: e$1.unref(m) }), {}), id: e2 };
- return A$1({ ourProps: f2, theirProps: c2, slot: l2.value, attrs: o2, slots: s3, name: i2 });
- };
- } });
- var $$1 = ((o2) => (o2[o2.Open = 0] = "Open", o2[o2.Closed = 1] = "Closed", o2))($$1 || {});
- let T = Symbol("DisclosureContext");
- function O(t2) {
- let r2 = e$1.inject(T, null);
- if (r2 === null) {
- let o2 = new Error(`<${t2} /> is missing a parent <Disclosure /> component.`);
- throw Error.captureStackTrace && Error.captureStackTrace(o2, O), o2;
- }
- return r2;
- }
- let k = Symbol("DisclosurePanelContext");
- function U() {
- return e$1.inject(k, null);
- }
- let N = e$1.defineComponent({ name: "Disclosure", props: { as: { type: [Object, String], default: "template" }, defaultOpen: { type: [Boolean], default: false } }, setup(t$12, { slots: r2, attrs: o2 }) {
- let s3 = e$1.ref(t$12.defaultOpen ? 0 : 1), e2 = e$1.ref(null), i$12 = e$1.ref(null), n2 = { buttonId: e$1.ref(`headlessui-disclosure-button-${i$4()}`), panelId: e$1.ref(`headlessui-disclosure-panel-${i$4()}`), disclosureState: s3, panel: e2, button: i$12, toggleDisclosure() {
- s3.value = u$5(s3.value, { [0]: 1, [1]: 0 });
- }, closeDisclosure() {
- s3.value !== 1 && (s3.value = 1);
- }, close(l2) {
- n2.closeDisclosure();
- let a2 = (() => l2 ? l2 instanceof HTMLElement ? l2 : l2.value instanceof HTMLElement ? o$3(l2) : o$3(n2.button) : o$3(n2.button))();
- a2 == null || a2.focus();
- } };
- return e$1.provide(T, n2), t(e$1.computed(() => u$5(s3.value, { [0]: i.Open, [1]: i.Closed }))), () => {
- let { defaultOpen: l2, ...a2 } = t$12, c2 = { open: s3.value === 0, close: n2.close };
- return A$1({ theirProps: a2, ourProps: {}, slot: c2, slots: r2, attrs: o2, name: "Disclosure" });
- };
- } }), Q = e$1.defineComponent({ name: "DisclosureButton", props: { as: { type: [Object, String], default: "button" }, disabled: { type: [Boolean], default: false }, id: { type: String, default: null } }, setup(t2, { attrs: r2, slots: o2, expose: s$12 }) {
- let e2 = O("DisclosureButton"), i2 = U(), n2 = e$1.computed(() => i2 === null ? false : i2.value === e2.panelId.value);
- e$1.onMounted(() => {
- n2.value || t2.id !== null && (e2.buttonId.value = t2.id);
- }), e$1.onUnmounted(() => {
- n2.value || (e2.buttonId.value = null);
- });
- let l2 = e$1.ref(null);
- s$12({ el: l2, $el: l2 }), n2.value || e$1.watchEffect(() => {
- e2.button.value = l2.value;
- });
- let a2 = s2(e$1.computed(() => ({ as: t2.as, type: r2.type })), l2);
- function c2() {
- var u2;
- t2.disabled || (n2.value ? (e2.toggleDisclosure(), (u2 = o$3(e2.button)) == null || u2.focus()) : e2.toggleDisclosure());
- }
- function D(u2) {
- var S2;
- if (!t2.disabled) if (n2.value) switch (u2.key) {
- case o$2.Space:
- case o$2.Enter:
- u2.preventDefault(), u2.stopPropagation(), e2.toggleDisclosure(), (S2 = o$3(e2.button)) == null || S2.focus();
- break;
- }
- else switch (u2.key) {
- case o$2.Space:
- case o$2.Enter:
- u2.preventDefault(), u2.stopPropagation(), e2.toggleDisclosure();
- break;
- }
- }
- function v2(u2) {
- switch (u2.key) {
- case o$2.Space:
- u2.preventDefault();
- break;
- }
- }
- return () => {
- var C2;
- let u2 = { open: e2.disclosureState.value === 0 }, { id: S2, ...K2 } = t2, M = n2.value ? { ref: l2, type: a2.value, onClick: c2, onKeydown: D } : { id: (C2 = e2.buttonId.value) != null ? C2 : S2, ref: l2, type: a2.value, "aria-expanded": e2.disclosureState.value === 0, "aria-controls": e2.disclosureState.value === 0 || o$3(e2.panel) ? e2.panelId.value : undefined, disabled: t2.disabled ? true : undefined, onClick: c2, onKeydown: D, onKeyup: v2 };
- return A$1({ ourProps: M, theirProps: K2, slot: u2, attrs: r2, slots: o2, name: "DisclosureButton" });
- };
- } }), V = e$1.defineComponent({ name: "DisclosurePanel", props: { as: { type: [Object, String], default: "div" }, static: { type: Boolean, default: false }, unmount: { type: Boolean, default: true }, id: { type: String, default: null } }, setup(t2, { attrs: r2, slots: o2, expose: s3 }) {
- let e2 = O("DisclosurePanel");
- e$1.onMounted(() => {
- t2.id !== null && (e2.panelId.value = t2.id);
- }), e$1.onUnmounted(() => {
- e2.panelId.value = null;
- }), s3({ el: e2.panel, $el: e2.panel }), e$1.provide(k, e2.panelId);
- let i$12 = l(), n2 = e$1.computed(() => i$12 !== null ? (i$12.value & i.Open) === i.Open : e2.disclosureState.value === 0);
- return () => {
- var v2;
- let l2 = { open: e2.disclosureState.value === 0, close: e2.close }, { id: a2, ...c2 } = t2, D = { id: (v2 = e2.panelId.value) != null ? v2 : a2, ref: e2.panel };
- return A$1({ ourProps: D, theirProps: c2, slot: l2, attrs: r2, slots: o2, features: N$1.RenderStrategy | N$1.Static, visible: n2.value, name: "DisclosurePanel" });
- };
- } });
- let a$1 = /([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;
- function o(e2) {
- var r2, i2;
- let n2 = (r2 = e2.innerText) != null ? r2 : "", t2 = e2.cloneNode(true);
- if (!(t2 instanceof HTMLElement)) return n2;
- let u2 = false;
- for (let f2 of t2.querySelectorAll('[hidden],[aria-hidden],[role="img"]')) f2.remove(), u2 = true;
- let l2 = u2 ? (i2 = t2.innerText) != null ? i2 : "" : n2;
- return a$1.test(l2) && (l2 = l2.replace(a$1, "")), l2;
- }
- function g(e2) {
- let n2 = e2.getAttribute("aria-label");
- if (typeof n2 == "string") return n2.trim();
- let t2 = e2.getAttribute("aria-labelledby");
- if (t2) {
- let u2 = t2.split(" ").map((l2) => {
- let r2 = document.getElementById(l2);
- if (r2) {
- let i2 = r2.getAttribute("aria-label");
- return typeof i2 == "string" ? i2.trim() : o(r2).trim();
- }
- return null;
- }).filter(Boolean);
- if (u2.length > 0) return u2.join(", ");
- }
- return o(e2).trim();
- }
- function p(a2) {
- let t2 = e$1.ref(""), r2 = e$1.ref("");
- return () => {
- let e2 = o$3(a2);
- if (!e2) return "";
- let l2 = e2.innerText;
- if (t2.value === l2) return r2.value;
- let u2 = g(e2).trim().toLowerCase();
- return t2.value = l2, r2.value = u2, u2;
- };
- }
- function pe(o2, b2) {
- return o2 === b2;
- }
- var ce = ((r2) => (r2[r2.Open = 0] = "Open", r2[r2.Closed = 1] = "Closed", r2))(ce || {}), ve = ((r2) => (r2[r2.Single = 0] = "Single", r2[r2.Multi = 1] = "Multi", r2))(ve || {}), be = ((r2) => (r2[r2.Pointer = 0] = "Pointer", r2[r2.Other = 1] = "Other", r2))(be || {});
- function me(o2) {
- requestAnimationFrame(() => requestAnimationFrame(o2));
- }
- let $ = Symbol("ListboxContext");
- function A(o2) {
- let b2 = e$1.inject($, null);
- if (b2 === null) {
- let r2 = new Error(`<${o2} /> is missing a parent <Listbox /> component.`);
- throw Error.captureStackTrace && Error.captureStackTrace(r2, A), r2;
- }
- return b2;
- }
- let Ie = e$1.defineComponent({ name: "Listbox", emits: { "update:modelValue": (o2) => true }, props: { as: { type: [Object, String], default: "template" }, disabled: { type: [Boolean], default: false }, by: { type: [String, Function], default: () => pe }, horizontal: { type: [Boolean], default: false }, modelValue: { type: [Object, String, Number, Boolean], default: undefined }, defaultValue: { type: [Object, String, Number, Boolean], default: undefined }, form: { type: String, optional: true }, name: { type: String, optional: true }, multiple: { type: [Boolean], default: false } }, inheritAttrs: false, setup(o2, { slots: b2, attrs: r2, emit: w2 }) {
- let n2 = e$1.ref(1), e$12 = e$1.ref(null), f2 = e$1.ref(null), v2 = e$1.ref(null), s3 = e$1.ref([]), m = e$1.ref(""), p2 = e$1.ref(null), a2 = e$1.ref(1);
- function u2(t2 = (i2) => i2) {
- let i2 = p2.value !== null ? s3.value[p2.value] : null, l2 = O$1(t2(s3.value.slice()), (O2) => o$3(O2.dataRef.domRef)), d2 = i2 ? l2.indexOf(i2) : null;
- return d2 === -1 && (d2 = null), { options: l2, activeOptionIndex: d2 };
- }
- let D = e$1.computed(() => o2.multiple ? 1 : 0), [y2, L] = d$2(e$1.computed(() => o2.modelValue), (t2) => w2("update:modelValue", t2), e$1.computed(() => o2.defaultValue)), M = e$1.computed(() => y2.value === undefined ? u$5(D.value, { [1]: [], [0]: undefined }) : y2.value), k2 = { listboxState: n2, value: M, mode: D, compare(t2, i2) {
- if (typeof o2.by == "string") {
- let l2 = o2.by;
- return (t2 == null ? undefined : t2[l2]) === (i2 == null ? undefined : i2[l2]);
- }
- return o2.by(t2, i2);
- }, orientation: e$1.computed(() => o2.horizontal ? "horizontal" : "vertical"), labelRef: e$12, buttonRef: f2, optionsRef: v2, disabled: e$1.computed(() => o2.disabled), options: s3, searchQuery: m, activeOptionIndex: p2, activationTrigger: a2, closeListbox() {
- o2.disabled || n2.value !== 1 && (n2.value = 1, p2.value = null);
- }, openListbox() {
- o2.disabled || n2.value !== 0 && (n2.value = 0);
- }, goToOption(t2, i2, l2) {
- if (o2.disabled || n2.value === 1) return;
- let d2 = u2(), O2 = f$1(t2 === c.Specific ? { focus: c.Specific, id: i2 } : { focus: t2 }, { resolveItems: () => d2.options, resolveActiveIndex: () => d2.activeOptionIndex, resolveId: (h2) => h2.id, resolveDisabled: (h2) => h2.dataRef.disabled });
- m.value = "", p2.value = O2, a2.value = l2 != null ? l2 : 1, s3.value = d2.options;
- }, search(t2) {
- if (o2.disabled || n2.value === 1) return;
- let l2 = m.value !== "" ? 0 : 1;
- m.value += t2.toLowerCase();
- let O2 = (p2.value !== null ? s3.value.slice(p2.value + l2).concat(s3.value.slice(0, p2.value + l2)) : s3.value).find((I) => I.dataRef.textValue.startsWith(m.value) && !I.dataRef.disabled), h2 = O2 ? s3.value.indexOf(O2) : -1;
- h2 === -1 || h2 === p2.value || (p2.value = h2, a2.value = 1);
- }, clearSearch() {
- o2.disabled || n2.value !== 1 && m.value !== "" && (m.value = "");
- }, registerOption(t2, i2) {
- let l2 = u2((d2) => [...d2, { id: t2, dataRef: i2 }]);
- s3.value = l2.options, p2.value = l2.activeOptionIndex;
- }, unregisterOption(t2) {
- let i2 = u2((l2) => {
- let d2 = l2.findIndex((O2) => O2.id === t2);
- return d2 !== -1 && l2.splice(d2, 1), l2;
- });
- s3.value = i2.options, p2.value = i2.activeOptionIndex, a2.value = 1;
- }, theirOnChange(t2) {
- o2.disabled || L(t2);
- }, select(t2) {
- o2.disabled || L(u$5(D.value, { [0]: () => t2, [1]: () => {
- let i2 = e$1.toRaw(k2.value.value).slice(), l2 = e$1.toRaw(t2), d2 = i2.findIndex((O2) => k2.compare(l2, e$1.toRaw(O2)));
- return d2 === -1 ? i2.push(l2) : i2.splice(d2, 1), i2;
- } }));
- } };
- w$1([f2, v2], (t2, i2) => {
- var l2;
- k2.closeListbox(), w$3(i2, h.Loose) || (t2.preventDefault(), (l2 = o$3(f2)) == null || l2.focus());
- }, e$1.computed(() => n2.value === 0)), e$1.provide($, k2), t(e$1.computed(() => u$5(n2.value, { [0]: i.Open, [1]: i.Closed })));
- let C2 = e$1.computed(() => {
- var t2;
- return (t2 = o$3(f2)) == null ? undefined : t2.closest("form");
- });
- return e$1.onMounted(() => {
- e$1.watch([C2], () => {
- if (!C2.value || o2.defaultValue === undefined) return;
- function t2() {
- k2.theirOnChange(o2.defaultValue);
- }
- return C2.value.addEventListener("reset", t2), () => {
- var i2;
- (i2 = C2.value) == null || i2.removeEventListener("reset", t2);
- };
- }, { immediate: true });
- }), () => {
- let { name: t2, modelValue: i2, disabled: l2, form: d2, ...O2 } = o2, h2 = { open: n2.value === 0, disabled: l2, value: M.value };
- return e$1.h(e$1.Fragment, [...t2 != null && M.value != null ? e({ [t2]: M.value }).map(([I, Q2]) => e$1.h(f$2, E$1({ features: u$2.Hidden, key: I, as: "input", type: "hidden", hidden: true, readOnly: true, form: d2, disabled: l2, name: I, value: Q2 }))) : [], A$1({ ourProps: {}, theirProps: { ...r2, ...T$1(O2, ["defaultValue", "onUpdate:modelValue", "horizontal", "multiple", "by"]) }, slot: h2, slots: b2, attrs: r2, name: "Listbox" })]);
- };
- } });
- e$1.defineComponent({ name: "ListboxLabel", props: { as: { type: [Object, String], default: "label" }, id: { type: String, default: null } }, setup(o2, { attrs: b2, slots: r2 }) {
- var f2;
- let w2 = (f2 = o2.id) != null ? f2 : `headlessui-listbox-label-${i$4()}`, n2 = A("ListboxLabel");
- function e2() {
- var v2;
- (v2 = o$3(n2.buttonRef)) == null || v2.focus({ preventScroll: true });
- }
- return () => {
- let v2 = { open: n2.listboxState.value === 0, disabled: n2.disabled.value }, { ...s3 } = o2, m = { id: w2, ref: n2.labelRef, onClick: e2 };
- return A$1({ ourProps: m, theirProps: s3, slot: v2, attrs: b2, slots: r2, name: "ListboxLabel" });
- };
- } });
- let je = e$1.defineComponent({ name: "ListboxButton", props: { as: { type: [Object, String], default: "button" }, id: { type: String, default: null } }, setup(o2, { attrs: b2, slots: r2, expose: w2 }) {
- var p2;
- let n2 = (p2 = o2.id) != null ? p2 : `headlessui-listbox-button-${i$4()}`, e2 = A("ListboxButton");
- w2({ el: e2.buttonRef, $el: e2.buttonRef });
- function f2(a2) {
- switch (a2.key) {
- case o$2.Space:
- case o$2.Enter:
- case o$2.ArrowDown:
- a2.preventDefault(), e2.openListbox(), e$1.nextTick(() => {
- var u2;
- (u2 = o$3(e2.optionsRef)) == null || u2.focus({ preventScroll: true }), e2.value.value || e2.goToOption(c.First);
- });
- break;
- case o$2.ArrowUp:
- a2.preventDefault(), e2.openListbox(), e$1.nextTick(() => {
- var u2;
- (u2 = o$3(e2.optionsRef)) == null || u2.focus({ preventScroll: true }), e2.value.value || e2.goToOption(c.Last);
- });
- break;
- }
- }
- function v2(a2) {
- switch (a2.key) {
- case o$2.Space:
- a2.preventDefault();
- break;
- }
- }
- function s$12(a2) {
- e2.disabled.value || (e2.listboxState.value === 0 ? (e2.closeListbox(), e$1.nextTick(() => {
- var u2;
- return (u2 = o$3(e2.buttonRef)) == null ? undefined : u2.focus({ preventScroll: true });
- })) : (a2.preventDefault(), e2.openListbox(), me(() => {
- var u2;
- return (u2 = o$3(e2.optionsRef)) == null ? undefined : u2.focus({ preventScroll: true });
- })));
- }
- let m = s2(e$1.computed(() => ({ as: o2.as, type: b2.type })), e2.buttonRef);
- return () => {
- var y2, L;
- let a2 = { open: e2.listboxState.value === 0, disabled: e2.disabled.value, value: e2.value.value }, { ...u2 } = o2, D = { ref: e2.buttonRef, id: n2, type: m.value, "aria-haspopup": "listbox", "aria-controls": (y2 = o$3(e2.optionsRef)) == null ? undefined : y2.id, "aria-expanded": e2.listboxState.value === 0, "aria-labelledby": e2.labelRef.value ? [(L = o$3(e2.labelRef)) == null ? undefined : L.id, n2].join(" ") : undefined, disabled: e2.disabled.value === true ? true : undefined, onKeydown: f2, onKeyup: v2, onClick: s$12 };
- return A$1({ ourProps: D, theirProps: u2, slot: a2, attrs: b2, slots: r2, name: "ListboxButton" });
- };
- } }), Ae = e$1.defineComponent({ name: "ListboxOptions", props: { as: { type: [Object, String], default: "ul" }, static: { type: Boolean, default: false }, unmount: { type: Boolean, default: true }, id: { type: String, default: null } }, setup(o2, { attrs: b2, slots: r2, expose: w2 }) {
- var p2;
- let n2 = (p2 = o2.id) != null ? p2 : `headlessui-listbox-options-${i$4()}`, e2 = A("ListboxOptions"), f2 = e$1.ref(null);
- w2({ el: e2.optionsRef, $el: e2.optionsRef });
- function v2(a2) {
- switch (f2.value && clearTimeout(f2.value), a2.key) {
- case o$2.Space:
- if (e2.searchQuery.value !== "") return a2.preventDefault(), a2.stopPropagation(), e2.search(a2.key);
- case o$2.Enter:
- if (a2.preventDefault(), a2.stopPropagation(), e2.activeOptionIndex.value !== null) {
- let u2 = e2.options.value[e2.activeOptionIndex.value];
- e2.select(u2.dataRef.value);
- }
- e2.mode.value === 0 && (e2.closeListbox(), e$1.nextTick(() => {
- var u2;
- return (u2 = o$3(e2.buttonRef)) == null ? undefined : u2.focus({ preventScroll: true });
- }));
- break;
- case u$5(e2.orientation.value, { vertical: o$2.ArrowDown, horizontal: o$2.ArrowRight }):
- return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.Next);
- case u$5(e2.orientation.value, { vertical: o$2.ArrowUp, horizontal: o$2.ArrowLeft }):
- return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.Previous);
- case o$2.Home:
- case o$2.PageUp:
- return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.First);
- case o$2.End:
- case o$2.PageDown:
- return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.Last);
- case o$2.Escape:
- a2.preventDefault(), a2.stopPropagation(), e2.closeListbox(), e$1.nextTick(() => {
- var u2;
- return (u2 = o$3(e2.buttonRef)) == null ? undefined : u2.focus({ preventScroll: true });
- });
- break;
- case o$2.Tab:
- a2.preventDefault(), a2.stopPropagation();
- break;
- default:
- a2.key.length === 1 && (e2.search(a2.key), f2.value = setTimeout(() => e2.clearSearch(), 350));
- break;
- }
- }
- let s3 = l(), m = e$1.computed(() => s3 !== null ? (s3.value & i.Open) === i.Open : e2.listboxState.value === 0);
- return () => {
- var y2, L;
- let a2 = { open: e2.listboxState.value === 0 }, { ...u2 } = o2, D = { "aria-activedescendant": e2.activeOptionIndex.value === null || (y2 = e2.options.value[e2.activeOptionIndex.value]) == null ? undefined : y2.id, "aria-multiselectable": e2.mode.value === 1 ? true : undefined, "aria-labelledby": (L = o$3(e2.buttonRef)) == null ? undefined : L.id, "aria-orientation": e2.orientation.value, id: n2, onKeydown: v2, role: "listbox", tabIndex: 0, ref: e2.optionsRef };
- return A$1({ ourProps: D, theirProps: u2, slot: a2, attrs: b2, slots: r2, features: N$1.RenderStrategy | N$1.Static, visible: m.value, name: "ListboxOptions" });
- };
- } }), Fe = e$1.defineComponent({ name: "ListboxOption", props: { as: { type: [Object, String], default: "li" }, value: { type: [Object, String, Number, Boolean] }, disabled: { type: Boolean, default: false }, id: { type: String, default: null } }, setup(o2, { slots: b2, attrs: r2, expose: w2 }) {
- var C2;
- let n2 = (C2 = o2.id) != null ? C2 : `headlessui-listbox-option-${i$4()}`, e2 = A("ListboxOption"), f2 = e$1.ref(null);
- w2({ el: f2, $el: f2 });
- let v2 = e$1.computed(() => e2.activeOptionIndex.value !== null ? e2.options.value[e2.activeOptionIndex.value].id === n2 : false), s3 = e$1.computed(() => u$5(e2.mode.value, { [0]: () => e2.compare(e$1.toRaw(e2.value.value), e$1.toRaw(o2.value)), [1]: () => e$1.toRaw(e2.value.value).some((t2) => e2.compare(e$1.toRaw(t2), e$1.toRaw(o2.value))) })), m = e$1.computed(() => u$5(e2.mode.value, { [1]: () => {
- var i2;
- let t2 = e$1.toRaw(e2.value.value);
- return ((i2 = e2.options.value.find((l2) => t2.some((d2) => e2.compare(e$1.toRaw(d2), e$1.toRaw(l2.dataRef.value))))) == null ? undefined : i2.id) === n2;
- }, [0]: () => s3.value })), p$12 = p(f2), a2 = e$1.computed(() => ({ disabled: o2.disabled, value: o2.value, get textValue() {
- return p$12();
- }, domRef: f2 }));
- e$1.onMounted(() => e2.registerOption(n2, a2)), e$1.onUnmounted(() => e2.unregisterOption(n2)), e$1.onMounted(() => {
- e$1.watch([e2.listboxState, s3], () => {
- e2.listboxState.value === 0 && s3.value && u$5(e2.mode.value, { [1]: () => {
- m.value && e2.goToOption(c.Specific, n2);
- }, [0]: () => {
- e2.goToOption(c.Specific, n2);
- } });
- }, { immediate: true });
- }), e$1.watchEffect(() => {
- e2.listboxState.value === 0 && v2.value && e2.activationTrigger.value !== 0 && e$1.nextTick(() => {
- var t2, i2;
- return (i2 = (t2 = o$3(f2)) == null ? undefined : t2.scrollIntoView) == null ? undefined : i2.call(t2, { block: "nearest" });
- });
- });
- function u2(t2) {
- if (o2.disabled) return t2.preventDefault();
- e2.select(o2.value), e2.mode.value === 0 && (e2.closeListbox(), e$1.nextTick(() => {
- var i2;
- return (i2 = o$3(e2.buttonRef)) == null ? undefined : i2.focus({ preventScroll: true });
- }));
- }
- function D() {
- if (o2.disabled) return e2.goToOption(c.Nothing);
- e2.goToOption(c.Specific, n2);
- }
- let y2 = u$3();
- function L(t2) {
- y2.update(t2);
- }
- function M(t2) {
- y2.wasMoved(t2) && (o2.disabled || v2.value || e2.goToOption(c.Specific, n2, 0));
- }
- function k2(t2) {
- y2.wasMoved(t2) && (o2.disabled || v2.value && e2.goToOption(c.Nothing));
- }
- return () => {
- let { disabled: t2 } = o2, i2 = { active: v2.value, selected: s3.value, disabled: t2 }, { value: l2, disabled: d2, ...O2 } = o2, h2 = { id: n2, ref: f2, role: "option", tabIndex: t2 === true ? undefined : -1, "aria-disabled": t2 === true ? true : undefined, "aria-selected": s3.value, disabled: undefined, onClick: u2, onFocus: D, onPointerenter: L, onMouseenter: L, onPointermove: M, onMousemove: M, onPointerleave: k2, onMouseleave: k2 };
- return A$1({ ourProps: h2, theirProps: O2, slot: i2, attrs: r2, slots: b2, name: "ListboxOption" });
- };
- } });
- let a = Symbol("LabelContext");
- function d() {
- let t2 = e$1.inject(a, null);
- if (t2 === null) {
- let n2 = new Error("You used a <Label /> component, but it is not inside a parent.");
- throw Error.captureStackTrace && Error.captureStackTrace(n2, d), n2;
- }
- return t2;
- }
- function E({ slot: t2 = {}, name: n2 = "Label", props: i2 = {} } = {}) {
- let e2 = e$1.ref([]);
- function o2(r2) {
- return e2.value.push(r2), () => {
- let l2 = e2.value.indexOf(r2);
- l2 !== -1 && e2.value.splice(l2, 1);
- };
- }
- return e$1.provide(a, { register: o2, slot: t2, name: n2, props: i2 }), e$1.computed(() => e2.value.length > 0 ? e2.value.join(" ") : undefined);
- }
- let K = e$1.defineComponent({ name: "Label", props: { as: { type: [Object, String], default: "label" }, passive: { type: [Boolean], default: false }, id: { type: String, default: null } }, setup(t2, { slots: n2, attrs: i2 }) {
- var r2;
- let e2 = (r2 = t2.id) != null ? r2 : `headlessui-label-${i$4()}`, o2 = d();
- return e$1.onMounted(() => e$1.onUnmounted(o2.register(e2))), () => {
- let { name: l2 = "Label", slot: p2 = {}, props: c2 = {} } = o2, { passive: f2, ...s3 } = t2, u2 = { ...Object.entries(c2).reduce((b2, [g2, m]) => Object.assign(b2, { [g2]: e$1.unref(m) }), {}), id: e2 };
- return f2 && (delete u2.onClick, delete u2.htmlFor, delete s3.onClick), A$1({ ourProps: u2, theirProps: s3, slot: p2, attrs: i2, slots: n2, name: l2 });
- };
- } });
- let C = Symbol("GroupContext"), oe = e$1.defineComponent({ name: "SwitchGroup", props: { as: { type: [Object, String], default: "template" } }, setup(l2, { slots: c2, attrs: i2 }) {
- let r2 = e$1.ref(null), f2 = E({ name: "SwitchLabel", props: { htmlFor: e$1.computed(() => {
- var t2;
- return (t2 = r2.value) == null ? undefined : t2.id;
- }), onClick(t2) {
- r2.value && (t2.currentTarget.tagName === "LABEL" && t2.preventDefault(), r2.value.click(), r2.value.focus({ preventScroll: true }));
- } } }), p2 = k$1({ name: "SwitchDescription" });
- return e$1.provide(C, { switchRef: r2, labelledby: f2, describedby: p2 }), () => A$1({ theirProps: l2, ourProps: {}, slot: {}, slots: c2, attrs: i2, name: "SwitchGroup" });
- } }), ue = e$1.defineComponent({ name: "Switch", emits: { "update:modelValue": (l2) => true }, props: { as: { type: [Object, String], default: "button" }, modelValue: { type: Boolean, default: undefined }, defaultChecked: { type: Boolean, optional: true }, form: { type: String, optional: true }, name: { type: String, optional: true }, value: { type: String, optional: true }, id: { type: String, default: null }, disabled: { type: Boolean, default: false }, tabIndex: { type: Number, default: 0 } }, inheritAttrs: false, setup(l2, { emit: c2, attrs: i2, slots: r2, expose: f2 }) {
- var h2;
- let p2 = (h2 = l2.id) != null ? h2 : `headlessui-switch-${i$4()}`, n2 = e$1.inject(C, null), [t2, s$12] = d$2(e$1.computed(() => l2.modelValue), (e2) => c2("update:modelValue", e2), e$1.computed(() => l2.defaultChecked));
- function m() {
- s$12(!t2.value);
- }
- let E2 = e$1.ref(null), o2 = n2 === null ? E2 : n2.switchRef, L = s2(e$1.computed(() => ({ as: l2.as, type: i2.type })), o2);
- f2({ el: o2, $el: o2 });
- function D(e2) {
- e2.preventDefault(), m();
- }
- function R(e2) {
- e2.key === o$2.Space ? (e2.preventDefault(), m()) : e2.key === o$2.Enter && p$1(e2.currentTarget);
- }
- function x(e2) {
- e2.preventDefault();
- }
- let d2 = e$1.computed(() => {
- var e2, a2;
- return (a2 = (e2 = o$3(o2)) == null ? undefined : e2.closest) == null ? undefined : a2.call(e2, "form");
- });
- return e$1.onMounted(() => {
- e$1.watch([d2], () => {
- if (!d2.value || l2.defaultChecked === undefined) return;
- function e2() {
- s$12(l2.defaultChecked);
- }
- return d2.value.addEventListener("reset", e2), () => {
- var a2;
- (a2 = d2.value) == null || a2.removeEventListener("reset", e2);
- };
- }, { immediate: true });
- }), () => {
- let { name: e2, value: a2, form: K2, tabIndex: y2, ...b2 } = l2, T2 = { checked: t2.value }, B = { id: p2, ref: o2, role: "switch", type: L.value, tabIndex: y2 === -1 ? 0 : y2, "aria-checked": t2.value, "aria-labelledby": n2 == null ? undefined : n2.labelledby.value, "aria-describedby": n2 == null ? undefined : n2.describedby.value, onClick: D, onKeyup: R, onKeypress: x };
- return e$1.h(e$1.Fragment, [e2 != null && t2.value != null ? e$1.h(f$2, E$1({ features: u$2.Hidden, as: "input", type: "checkbox", hidden: true, readOnly: true, checked: t2.value, form: K2, disabled: b2.disabled, name: e2, value: a2 })) : null, A$1({ ourProps: B, theirProps: { ...i2, ...T$1(b2, ["modelValue", "defaultChecked"]) }, slot: T2, attrs: i2, slots: r2, name: "Switch" })]);
- };
- } }), de = K;
- function render$2(_ctx, _cache) {
- return e$1.openBlock(), e$1.createElementBlock("svg", {
- xmlns: "http://www.w3.org/2000/svg",
- viewBox: "0 0 20 20",
- fill: "currentColor",
- "aria-hidden": "true",
- "data-slot": "icon"
- }, [
- e$1.createElementVNode("path", {
- "fill-rule": "evenodd",
- d: "M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z",
- "clip-rule": "evenodd"
- })
- ]);
- }
- function render$1(_ctx, _cache) {
- return e$1.openBlock(), e$1.createElementBlock("svg", {
- xmlns: "http://www.w3.org/2000/svg",
- viewBox: "0 0 20 20",
- fill: "currentColor",
- "aria-hidden": "true",
- "data-slot": "icon"
- }, [
- e$1.createElementVNode("path", {
- "fill-rule": "evenodd",
- d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",
- "clip-rule": "evenodd"
- })
- ]);
- }
- function render(_ctx, _cache) {
- return e$1.openBlock(), e$1.createElementBlock("svg", {
- xmlns: "http://www.w3.org/2000/svg",
- viewBox: "0 0 20 20",
- fill: "currentColor",
- "aria-hidden": "true",
- "data-slot": "icon"
- }, [
- e$1.createElementVNode("path", {
- "fill-rule": "evenodd",
- d: "M10.53 3.47a.75.75 0 0 0-1.06 0L6.22 6.72a.75.75 0 0 0 1.06 1.06L10 5.06l2.72 2.72a.75.75 0 1 0 1.06-1.06l-3.25-3.25Zm-4.31 9.81 3.25 3.25a.75.75 0 0 0 1.06 0l3.25-3.25a.75.75 0 1 0-1.06-1.06L10 14.94l-2.72-2.72a.75.75 0 0 0-1.06 1.06Z",
- "clip-rule": "evenodd"
- })
- ]);
- }
- const _hoisted_1$b = { class: "mt-2.5 h-auto w-full px-3.5 text-base font-bold text-[#c6c6c6]" };
- const _hoisted_2$a = {
- key: 0,
- class: "absolute right-20 inline-block rounded-xl bg-[#ff9000] px-2 text-sm text-black"
- };
- const _sfc_main$c = /* @__PURE__ */ e$1.defineComponent({
- __name: "DisclosureComp",
- props: {
- title: {},
- isFold: { type: Boolean },
- isSpecial: { type: Boolean },
- specialName: {}
- },
- setup(__props) {
- return (_ctx, _cache) => {
- return e$1.openBlock(), e$1.createElementBlock("div", _hoisted_1$b, [
- e$1.createVNode(e$1.unref(N), {
- "default-open": !_ctx.isFold
- }, {
- default: e$1.withCtx(({ open }) => [
- e$1.createVNode(e$1.unref(Q), {
- class: e$1.normalizeClass(["flex min-h-12 w-full justify-between rounded-xl p-3.5 text-left outline-none", {
- "bg-[#1b1b1b] hover:bg-[#292929]": !_ctx.isSpecial,
- "bg-[#1f1f1f] hover:bg-[#2D2D2D]": _ctx.isSpecial,
- "rounded-b-none": open
- }])
- }, {
- default: e$1.withCtx(() => [
- e$1.createElementVNode("span", null, e$1.toDisplayString(_ctx.title || "Disclosure Title"), 1),
- _ctx.isSpecial ? (e$1.openBlock(), e$1.createElementBlock("span", _hoisted_2$a, e$1.toDisplayString(_ctx.specialName ? _ctx.specialName : "SPECIAL"), 1)) : e$1.createCommentVNode("", true),
- e$1.createVNode(e$1.unref(render$1), {
- class: e$1.normalizeClass([{
- "rotate-180": open
- }, "h-6 w-6"])
- }, null, 8, ["class"])
- ]),
- _: 2
- }, 1032, ["class"]),
- e$1.createVNode(e$1.unref(V), {
- unmount: false,
- class: "rounded-b-xl bg-[#1e1e1e80] pb-2 pt-1"
- }, {
- default: e$1.withCtx(() => [
- e$1.renderSlot(_ctx.$slots, "default")
- ]),
- _: 3
- })
- ]),
- _: 3
- }, 8, ["default-open"])
- ]);
- };
- }
- });
- const PGStorage = {
- get: (key, defaultValue) => {
- return _GM_getValue(`PGS_${key}`, defaultValue);
- },
- set: (key, value) => {
- _GM_setValue(`PGS_${key}`, value);
- }
- };
- ({
- enableDebugRules: !!PGStorage.get("debug-rules")
- });
- const startTime = performance.now();
- let lastTime = startTime;
- let currTime = startTime;
- const wrapper = (loggingFunc, isEnable) => {
- {
- return (...innerArgs) => {
- currTime = performance.now();
- const during = (currTime - lastTime).toFixed(1);
- loggingFunc(`[老司机] ${during} / ${currTime.toFixed(0)} ms |`, ...innerArgs);
- lastTime = currTime;
- };
- }
- };
- const log = wrapper(console.log);
- const error = wrapper(console.error);
- const waitForEle = async (watchEle, selector, isTargetNode) => {
- let ele = watchEle.querySelector(selector);
- if (ele) {
- return ele;
- }
- return await new Promise((resolve) => {
- const observer = new MutationObserver((mutationList) => {
- mutationList.forEach((mutation) => {
- if (mutation.addedNodes) {
- mutation.addedNodes.forEach((node) => {
- if (isTargetNode(node)) {
- observer.disconnect();
- ele = watchEle.querySelector(selector);
- resolve(ele);
- }
- });
- }
- });
- });
- observer.observe(watchEle, { childList: true, subtree: true });
- });
- };
- const orderedUniq = (arr) => {
- return Array.from(new Set(arr));
- };
- function tryOnScopeDispose(fn) {
- if (e$1.getCurrentScope()) {
- e$1.onScopeDispose(fn);
- return true;
- }
- return false;
- }
- function toValue(r2) {
- return typeof r2 === "function" ? r2() : e$1.unref(r2);
- }
- const isClient = typeof window !== "undefined" && typeof document !== "undefined";
- typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
- const notNullish = (val) => val != null;
- const toString = Object.prototype.toString;
- const isObject = (val) => toString.call(val) === "[object Object]";
- const noop = () => {
- };
- function createFilterWrapper(filter, fn) {
- function wrapper2(...args) {
- return new Promise((resolve, reject) => {
- Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);
- });
- }
- return wrapper2;
- }
- const bypassFilter = (invoke2) => {
- return invoke2();
- };
- function throttleFilter(...args) {
- let lastExec = 0;
- let timer;
- let isLeading = true;
- let lastRejector = noop;
- let lastValue;
- let ms;
- let trailing;
- let leading;
- let rejectOnCancel;
- if (!e$1.isRef(args[0]) && typeof args[0] === "object")
- ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);
- else
- [ms, trailing = true, leading = true, rejectOnCancel = false] = args;
- const clear = () => {
- if (timer) {
- clearTimeout(timer);
- timer = undefined;
- lastRejector();
- lastRejector = noop;
- }
- };
- const filter = (_invoke) => {
- const duration = toValue(ms);
- const elapsed = Date.now() - lastExec;
- const invoke2 = () => {
- return lastValue = _invoke();
- };
- clear();
- if (duration <= 0) {
- lastExec = Date.now();
- return invoke2();
- }
- if (elapsed > duration && (leading || !isLeading)) {
- lastExec = Date.now();
- invoke2();
- } else if (trailing) {
- lastValue = new Promise((resolve, reject) => {
- lastRejector = rejectOnCancel ? reject : resolve;
- timer = setTimeout(() => {
- lastExec = Date.now();
- isLeading = true;
- resolve(invoke2());
- clear();
- }, Math.max(0, duration - elapsed));
- });
- }
- if (!leading && !timer)
- timer = setTimeout(() => isLeading = true, duration);
- isLeading = false;
- return lastValue;
- };
- return filter;
- }
- function pausableFilter(extendFilter = bypassFilter) {
- const isActive = e$1.ref(true);
- function pause() {
- isActive.value = false;
- }
- function resume() {
- isActive.value = true;
- }
- const eventFilter = (...args) => {
- if (isActive.value)
- extendFilter(...args);
- };
- return { isActive: e$1.readonly(isActive), pause, resume, eventFilter };
- }
- function getLifeCycleTarget(target) {
- return e$1.getCurrentInstance();
- }
- function watchWithFilter(source, cb, options = {}) {
- const {
- eventFilter = bypassFilter,
- ...watchOptions
- } = options;
- return e$1.watch(
- source,
- createFilterWrapper(
- eventFilter,
- cb
- ),
- watchOptions
- );
- }
- function watchPausable(source, cb, options = {}) {
- const {
- eventFilter: filter,
- ...watchOptions
- } = options;
- const { eventFilter, pause, resume, isActive } = pausableFilter(filter);
- const stop = watchWithFilter(
- source,
- cb,
- {
- ...watchOptions,
- eventFilter
- }
- );
- return { stop, pause, resume, isActive };
- }
- function toRefs(objectRef, options = {}) {
- if (!e$1.isRef(objectRef))
- return e$1.toRefs(objectRef);
- const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};
- for (const key in objectRef.value) {
- result[key] = e$1.customRef(() => ({
- get() {
- return objectRef.value[key];
- },
- set(v2) {
- var _a;
- const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;
- if (replaceRef) {
- if (Array.isArray(objectRef.value)) {
- const copy = [...objectRef.value];
- copy[key] = v2;
- objectRef.value = copy;
- } else {
- const newObject = { ...objectRef.value, [key]: v2 };
- Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));
- objectRef.value = newObject;
- }
- } else {
- objectRef.value[key] = v2;
- }
- }
- }));
- }
- return result;
- }
- function tryOnMounted(fn, sync = true, target) {
- const instance = getLifeCycleTarget();
- if (instance)
- e$1.onMounted(fn, target);
- else if (sync)
- fn();
- else
- e$1.nextTick(fn);
- }
- function watchThrottled(source, cb, options = {}) {
- const {
- throttle = 0,
- trailing = true,
- leading = true,
- ...watchOptions
- } = options;
- return watchWithFilter(
- source,
- cb,
- {
- ...watchOptions,
- eventFilter: throttleFilter(throttle, trailing, leading)
- }
- );
- }
- const defaultWindow = isClient ? window : undefined;
- function unrefElement(elRef) {
- var _a;
- const plain = toValue(elRef);
- return (_a = plain == null ? undefined : plain.$el) != null ? _a : plain;
- }
- function useEventListener(...args) {
- let target;
- let events2;
- let listeners;
- let options;
- if (typeof args[0] === "string" || Array.isArray(args[0])) {
- [events2, listeners, options] = args;
- target = defaultWindow;
- } else {
- [target, events2, listeners, options] = args;
- }
- if (!target)
- return noop;
- if (!Array.isArray(events2))
- events2 = [events2];
- if (!Array.isArray(listeners))
- listeners = [listeners];
- const cleanups = [];
- const cleanup = () => {
- cleanups.forEach((fn) => fn());
- cleanups.length = 0;
- };
- const register = (el, event, listener, options2) => {
- el.addEventListener(event, listener, options2);
- return () => el.removeEventListener(event, listener, options2);
- };
- const stopWatch = e$1.watch(
- () => [unrefElement(target), toValue(options)],
- ([el, options2]) => {
- cleanup();
- if (!el)
- return;
- const optionsClone = isObject(options2) ? { ...options2 } : options2;
- cleanups.push(
- ...events2.flatMap((event) => {
- return listeners.map((listener) => register(el, event, listener, optionsClone));
- })
- );
- },
- { immediate: true, flush: "post" }
- );
- const stop = () => {
- stopWatch();
- cleanup();
- };
- tryOnScopeDispose(stop);
- return stop;
- }
- function useMounted() {
- const isMounted = e$1.ref(false);
- const instance = e$1.getCurrentInstance();
- if (instance) {
- e$1.onMounted(() => {
- isMounted.value = true;
- }, instance);
- }
- return isMounted;
- }
- function useSupported(callback) {
- const isMounted = useMounted();
- return e$1.computed(() => {
- isMounted.value;
- return Boolean(callback());
- });
- }
- function useMutationObserver(target, callback, options = {}) {
- const { window: window2 = defaultWindow, ...mutationOptions } = options;
- let observer;
- const isSupported = useSupported(() => window2 && "MutationObserver" in window2);
- const cleanup = () => {
- if (observer) {
- observer.disconnect();
- observer = undefined;
- }
- };
- const targets = e$1.computed(() => {
- const value = toValue(target);
- const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);
- return new Set(items);
- });
- const stopWatch = e$1.watch(
- () => targets.value,
- (targets2) => {
- cleanup();
- if (isSupported.value && targets2.size) {
- observer = new MutationObserver(callback);
- targets2.forEach((el) => observer.observe(el, mutationOptions));
- }
- },
- { immediate: true, flush: "post" }
- );
- const takeRecords = () => {
- return observer == null ? undefined : observer.takeRecords();
- };
- const stop = () => {
- stopWatch();
- cleanup();
- };
- tryOnScopeDispose(stop);
- return {
- isSupported,
- stop,
- takeRecords
- };
- }
- function useMediaQuery(query, options = {}) {
- const { window: window2 = defaultWindow } = options;
- const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function");
- let mediaQuery;
- const matches = e$1.ref(false);
- const handler = (event) => {
- matches.value = event.matches;
- };
- const cleanup = () => {
- if (!mediaQuery)
- return;
- if ("removeEventListener" in mediaQuery)
- mediaQuery.removeEventListener("change", handler);
- else
- mediaQuery.removeListener(handler);
- };
- const stopWatch = e$1.watchEffect(() => {
- if (!isSupported.value)
- return;
- cleanup();
- mediaQuery = window2.matchMedia(toValue(query));
- if ("addEventListener" in mediaQuery)
- mediaQuery.addEventListener("change", handler);
- else
- mediaQuery.addListener(handler);
- matches.value = mediaQuery.matches;
- });
- tryOnScopeDispose(() => {
- stopWatch();
- cleanup();
- mediaQuery = undefined;
- });
- return matches;
- }
- const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
- const globalKey = "__vueuse_ssr_handlers__";
- const handlers = /* @__PURE__ */ getHandlers();
- function getHandlers() {
- if (!(globalKey in _global))
- _global[globalKey] = _global[globalKey] || {};
- return _global[globalKey];
- }
- function getSSRHandler(key, fallback) {
- return handlers[key] || fallback;
- }
- function guessSerializerType(rawInit) {
- return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
- }
- const StorageSerializers = {
- boolean: {
- read: (v2) => v2 === "true",
- write: (v2) => String(v2)
- },
- object: {
- read: (v2) => JSON.parse(v2),
- write: (v2) => JSON.stringify(v2)
- },
- number: {
- read: (v2) => Number.parseFloat(v2),
- write: (v2) => String(v2)
- },
- any: {
- read: (v2) => v2,
- write: (v2) => String(v2)
- },
- string: {
- read: (v2) => v2,
- write: (v2) => String(v2)
- },
- map: {
- read: (v2) => new Map(JSON.parse(v2)),
- write: (v2) => JSON.stringify(Array.from(v2.entries()))
- },
- set: {
- read: (v2) => new Set(JSON.parse(v2)),
- write: (v2) => JSON.stringify(Array.from(v2))
- },
- date: {
- read: (v2) => new Date(v2),
- write: (v2) => v2.toISOString()
- }
- };
- const customStorageEventName = "vueuse-storage";
- function useStorage(key, defaults2, storage, options = {}) {
- var _a;
- const {
- flush = "pre",
- deep = true,
- listenToStorageChanges = true,
- writeDefaults = true,
- mergeDefaults = false,
- shallow,
- window: window2 = defaultWindow,
- eventFilter,
- onError = (e2) => {
- console.error(e2);
- },
- initOnMounted
- } = options;
- const data = (shallow ? e$1.shallowRef : e$1.ref)(typeof defaults2 === "function" ? defaults2() : defaults2);
- if (!storage) {
- try {
- storage = getSSRHandler("getDefaultStorage", () => {
- var _a2;
- return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;
- })();
- } catch (e2) {
- onError(e2);
- }
- }
- if (!storage)
- return data;
- const rawInit = toValue(defaults2);
- const type = guessSerializerType(rawInit);
- const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
- const { pause: pauseWatch, resume: resumeWatch } = watchPausable(
- data,
- () => write(data.value),
- { flush, deep, eventFilter }
- );
- if (window2 && listenToStorageChanges) {
- tryOnMounted(() => {
- if (storage instanceof Storage)
- useEventListener(window2, "storage", update);
- else
- useEventListener(window2, customStorageEventName, updateFromCustomEvent);
- if (initOnMounted)
- update();
- });
- }
- if (!initOnMounted)
- update();
- function dispatchWriteEvent(oldValue, newValue) {
- if (window2) {
- const payload = {
- key,
- oldValue,
- newValue,
- storageArea: storage
- };
- window2.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, {
- detail: payload
- }));
- }
- }
- function write(v2) {
- try {
- const oldValue = storage.getItem(key);
- if (v2 == null) {
- dispatchWriteEvent(oldValue, null);
- storage.removeItem(key);
- } else {
- const serialized = serializer.write(v2);
- if (oldValue !== serialized) {
- storage.setItem(key, serialized);
- dispatchWriteEvent(oldValue, serialized);
- }
- }
- } catch (e2) {
- onError(e2);
- }
- }
- function read(event) {
- const rawValue = event ? event.newValue : storage.getItem(key);
- if (rawValue == null) {
- if (writeDefaults && rawInit != null)
- storage.setItem(key, serializer.write(rawInit));
- return rawInit;
- } else if (!event && mergeDefaults) {
- const value = serializer.read(rawValue);
- if (typeof mergeDefaults === "function")
- return mergeDefaults(value, rawInit);
- else if (type === "object" && !Array.isArray(value))
- return { ...rawInit, ...value };
- return value;
- } else if (typeof rawValue !== "string") {
- return rawValue;
- } else {
- return serializer.read(rawValue);
- }
- }
- function update(event) {
- if (event && event.storageArea !== storage)
- return;
- if (event && event.key == null) {
- data.value = rawInit;
- return;
- }
- if (event && event.key !== key)
- return;
- pauseWatch();
- try {
- if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))
- data.value = read(event);
- } catch (e2) {
- onError(e2);
- } finally {
- if (event)
- e$1.nextTick(resumeWatch);
- else
- resumeWatch();
- }
- }
- function updateFromCustomEvent(event) {
- update(event.detail);
- }
- return data;
- }
- function useDraggable(target, options = {}) {
- var _a, _b;
- const {
- pointerTypes,
- preventDefault: preventDefault2,
- stopPropagation,
- exact,
- onMove,
- onEnd,
- onStart,
- initialValue,
- axis = "both",
- draggingElement = defaultWindow,
- containerElement,
- handle: draggingHandle = target,
- buttons = [0]
- } = options;
- const position = e$1.ref(
- (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }
- );
- const pressedDelta = e$1.ref();
- const filterEvent = (e2) => {
- if (pointerTypes)
- return pointerTypes.includes(e2.pointerType);
- return true;
- };
- const handleEvent = (e2) => {
- if (toValue(preventDefault2))
- e2.preventDefault();
- if (toValue(stopPropagation))
- e2.stopPropagation();
- };
- const start = (e2) => {
- var _a2;
- if (!toValue(buttons).includes(e2.button))
- return;
- if (toValue(options.disabled) || !filterEvent(e2))
- return;
- if (toValue(exact) && e2.target !== toValue(target))
- return;
- const container = toValue(containerElement);
- const containerRect = (_a2 = container == null ? undefined : container.getBoundingClientRect) == null ? undefined : _a2.call(container);
- const targetRect = toValue(target).getBoundingClientRect();
- const pos = {
- x: e2.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),
- y: e2.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)
- };
- if ((onStart == null ? undefined : onStart(pos, e2)) === false)
- return;
- pressedDelta.value = pos;
- handleEvent(e2);
- };
- const move = (e2) => {
- if (toValue(options.disabled) || !filterEvent(e2))
- return;
- if (!pressedDelta.value)
- return;
- const container = toValue(containerElement);
- const targetRect = toValue(target).getBoundingClientRect();
- let { x, y: y2 } = position.value;
- if (axis === "x" || axis === "both") {
- x = e2.clientX - pressedDelta.value.x;
- if (container)
- x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);
- }
- if (axis === "y" || axis === "both") {
- y2 = e2.clientY - pressedDelta.value.y;
- if (container)
- y2 = Math.min(Math.max(0, y2), container.scrollHeight - targetRect.height);
- }
- position.value = {
- x,
- y: y2
- };
- onMove == null ? undefined : onMove(position.value, e2);
- handleEvent(e2);
- };
- const end = (e2) => {
- if (toValue(options.disabled) || !filterEvent(e2))
- return;
- if (!pressedDelta.value)
- return;
- pressedDelta.value = undefined;
- onEnd == null ? undefined : onEnd(position.value, e2);
- handleEvent(e2);
- };
- if (isClient) {
- const config = { capture: (_b = options.capture) != null ? _b : true };
- useEventListener(draggingHandle, "pointerdown", start, config);
- useEventListener(draggingElement, "pointermove", move, config);
- useEventListener(draggingElement, "pointerup", end, config);
- }
- return {
- ...toRefs(position),
- position,
- isDragging: e$1.computed(() => !!pressedDelta.value),
- style: e$1.computed(
- () => `left:${position.value.x}px;top:${position.value.y}px;`
- )
- };
- }
- function useResizeObserver(target, callback, options = {}) {
- const { window: window2 = defaultWindow, ...observerOptions } = options;
- let observer;
- const isSupported = useSupported(() => window2 && "ResizeObserver" in window2);
- const cleanup = () => {
- if (observer) {
- observer.disconnect();
- observer = undefined;
- }
- };
- const targets = e$1.computed(() => {
- const _targets = toValue(target);
- return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];
- });
- const stopWatch = e$1.watch(
- targets,
- (els) => {
- cleanup();
- if (isSupported.value && window2) {
- observer = new ResizeObserver(callback);
- for (const _el of els) {
- if (_el)
- observer.observe(_el, observerOptions);
- }
- }
- },
- { immediate: true, flush: "post" }
- );
- const stop = () => {
- cleanup();
- stopWatch();
- };
- tryOnScopeDispose(stop);
- return {
- isSupported,
- stop
- };
- }
- function useElementBounding(target, options = {}) {
- const {
- reset = true,
- windowResize = true,
- windowScroll = true,
- immediate = true,
- updateTiming = "sync"
- } = options;
- const height = e$1.ref(0);
- const bottom = e$1.ref(0);
- const left = e$1.ref(0);
- const right = e$1.ref(0);
- const top2 = e$1.ref(0);
- const width = e$1.ref(0);
- const x = e$1.ref(0);
- const y2 = e$1.ref(0);
- function recalculate() {
- const el = unrefElement(target);
- if (!el) {
- if (reset) {
- height.value = 0;
- bottom.value = 0;
- left.value = 0;
- right.value = 0;
- top2.value = 0;
- width.value = 0;
- x.value = 0;
- y2.value = 0;
- }
- return;
- }
- const rect = el.getBoundingClientRect();
- height.value = rect.height;
- bottom.value = rect.bottom;
- left.value = rect.left;
- right.value = rect.right;
- top2.value = rect.top;
- width.value = rect.width;
- x.value = rect.x;
- y2.value = rect.y;
- }
- function update() {
- if (updateTiming === "sync")
- recalculate();
- else if (updateTiming === "next-frame")
- requestAnimationFrame(() => recalculate());
- }
- useResizeObserver(target, update);
- e$1.watch(() => unrefElement(target), (ele) => !ele && update());
- useMutationObserver(target, update, {
- attributeFilter: ["style", "class"]
- });
- if (windowScroll)
- useEventListener("scroll", update, { capture: true, passive: true });
- if (windowResize)
- useEventListener("resize", update, { passive: true });
- tryOnMounted(() => {
- if (immediate)
- update();
- });
- return {
- height,
- bottom,
- left,
- right,
- top: top2,
- width,
- x,
- y: y2,
- update
- };
- }
- function useWindowSize(options = {}) {
- const {
- window: window2 = defaultWindow,
- initialWidth = Number.POSITIVE_INFINITY,
- initialHeight = Number.POSITIVE_INFINITY,
- listenOrientation = true,
- includeScrollbar = true,
- type = "inner"
- } = options;
- const width = e$1.ref(initialWidth);
- const height = e$1.ref(initialHeight);
- const update = () => {
- if (window2) {
- if (type === "outer") {
- width.value = window2.outerWidth;
- height.value = window2.outerHeight;
- } else if (includeScrollbar) {
- width.value = window2.innerWidth;
- height.value = window2.innerHeight;
- } else {
- width.value = window2.document.documentElement.clientWidth;
- height.value = window2.document.documentElement.clientHeight;
- }
- }
- };
- update();
- tryOnMounted(update);
- useEventListener("resize", update, { passive: true });
- if (listenOrientation) {
- const matches = useMediaQuery("(orientation: portrait)");
- e$1.watch(matches, () => update());
- }
- return { width, height };
- }
- const _hoisted_1$a = { class: "font-serif text-xl text-white" };
- const _hoisted_2$9 = { class: "mb-2 text-xl font-semibold" };
- const _hoisted_3$4 = { class: "text-white" };
- const _hoisted_4$4 = { class: "rounded-md bg-[#ff9000] p-1 text-black" };
- const _hoisted_5$2 = { class: "no-scrollbar flex min-h-[calc(100%-2.5rem)] flex-1 flex-col p-2" };
- const _sfc_main$b = /* @__PURE__ */ e$1.defineComponent({
- __name: "PanelComp",
- props: {
- title: {},
- widthPercent: {},
- heightPercent: {},
- minWidth: {},
- minHeight: {}
- },
- emits: ["close"],
- setup(__props, { emit: __emit }) {
- const emit = __emit;
- const props = __props;
- const panel = e$1.ref(null);
- const bar = e$1.ref(null);
- const windowSize = useWindowSize({ includeScrollbar: false });
- const { width, height } = useElementBounding(bar, { windowScroll: false });
- const maxPos = e$1.computed(() => {
- return {
- x: windowSize.width.value - width.value,
- y: windowSize.height.value - height.value
- };
- });
- let rAF = 0;
- const { style } = useDraggable(panel, {
- initialValue: {
- x: windowSize.width.value / 2 - Math.max(windowSize.width.value * props.widthPercent / 100, props.minWidth) / 2,
- y: windowSize.height.value / 2 - Math.max(windowSize.height.value * props.heightPercent / 100, props.minHeight) / 2
- },
- handle: e$1.computed(() => bar.value),
- preventDefault: true,
- // 限制拖拽范围
- onMove: (pos) => {
- cancelAnimationFrame(rAF);
- rAF = requestAnimationFrame(() => {
- if (pos.x < 0) {
- pos.x = 0;
- }
- if (pos.y < 0) {
- pos.y = 0;
- }
- if (pos.x > maxPos.value.x) {
- pos.x = maxPos.value.x;
- }
- if (pos.y > maxPos.value.y) {
- pos.y = maxPos.value.y;
- }
- });
- }
- });
- const panelStyle = e$1.computed(() => {
- return {
- width: props.widthPercent + "vw",
- height: props.heightPercent + "vh",
- minWidth: props.minWidth + "px",
- minHeight: props.minHeight + "px"
- };
- });
- return (_ctx, _cache) => {
- return e$1.openBlock(), e$1.createElementBlock("div", {
- ref_key: "panel",
- ref: panel,
- style: e$1.normalizeStyle([panelStyle.value, e$1.unref(style)]),
- class: "no-scrollbar fixed z-[10000000] select-none overflow-auto overscroll-none rounded-xl bg-black shadow-lg will-change-[top,left]"
- }, [
- e$1.createElementVNode("div", {
- ref_key: "bar",
- ref: bar,
- class: "sticky top-0 z-10 w-full cursor-move bg-[#0e0e0e] py-1.5 text-center"
- }, [
- e$1.createElementVNode("div", _hoisted_1$a, [
- e$1.createElementVNode("h3", _hoisted_2$9, [
- e$1.createElementVNode("span", _hoisted_3$4, e$1.toDisplayString(_ctx.title.split("&")[0]), 1),
- e$1.createElementVNode("span", _hoisted_4$4, e$1.toDisplayString(_ctx.title.split("&")[1]), 1)
- ])
- ]),
- e$1.createElementVNode("i", {
- class: "absolute right-0 top-0 m-1 cursor-pointer text-[#c6c6c6] hover:text-white",
- onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
- }, _cache[1] || (_cache[1] = [
- e$1.createElementVNode("svg", {
- xmlns: "http://www.w3.org/2000/svg",
- fill: "none",
- viewBox: "0 0 24 24",
- "stroke-width": "2.5",
- stroke: "currentColor",
- class: "size-8"
- }, [
- e$1.createElementVNode("path", {
- "stroke-linecap": "round",
- "stroke-linejoin": "round",
- d: "M6 18 18 6M6 6l12 12"
- })
- ], -1)
- ]))
- ], 512),
- e$1.createElementVNode("div", _hoisted_5$2, [
- e$1.renderSlot(_ctx.$slots, "default")
- ])
- ], 4);
- };
- }
- });
- const _hoisted_1$9 = {
- key: 0,
- class: "mb-1.5"
- };
- const _hoisted_2$8 = { class: "text-sm leading-6 text-[#767676]" };
- const _sfc_main$a = /* @__PURE__ */ e$1.defineComponent({
- __name: "DescriptionComp",
- props: {
- description: {}
- },
- setup(__props) {
- return (_ctx, _cache) => {
- var _a;
- return ((_a = _ctx.description) == null ? undefined : _a.length) ? (e$1.openBlock(), e$1.createElementBlock("div", _hoisted_1$9, [
- e$1.createElementVNode("div", _hoisted_2$8, [
- (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(_ctx.description, (line, index) => {
- return e$1.openBlock(), e$1.createElementBlock("div", { key: index }, [
- e$1.createElementVNode("p", null, [
- _cache[0] || (_cache[0] = e$1.createElementVNode("span", { class: "mr-1" }, "•", -1)),
- e$1.createTextVNode(e$1.toDisplayString(line), 1)
- ])
- ]);
- }), 128))
- ])
- ])) : e$1.createCommentVNode("", true);
- };
- }
- });
- const language$1 = {
- title: "老司机&修炼手册",
- menu: "快捷&菜单",
- panel: "显示/隐藏 面板",
- side_btn: "显示/隐藏 快捷键",
- basic_settings: "全局 - 基本设置",
- language: "language",
- language_description: [
- "刷新页面生效",
- "刷新頁面生效",
- "Refresh the page to take effect",
- "ページをリフレッシュして有効になります",
- "페이지를 새로고침하여 적용됩니다"
- ],
- editorBtn: "编辑",
- editorPlaceholder: "请输入内容....",
- editorSaveBtn: "保存",
- editorCloseBtn: "关闭",
- missav: {
- common: {
- basic: {
- name: "全站通用 - 基本功能",
- remove_ads: "移除 广告",
- hide_footer: "隐藏 页底footer",
- hide_new_site_banner: "隐藏 新站复活横幅",
- redirect_new_url: "重定向 到新站点",
- auto_login_email_password: "编辑 账号信息",
- auto_login_email_password_description: ["自动登录所用账号信息"],
- auto_login_email_password_editorTitle: "账号&信息",
- auto_login_email_password_editorDescription: [
- "格式如下:",
- "第一行email, 第二行password"
- ],
- auto_login: "自动 登录"
- },
- header: {
- name: "全站通用 - 顶栏",
- hide_logo: "隐藏 LOGO",
- hide_live_cam_sex: "隐藏 色色主播(广告)",
- hide_comic: "隐藏 无广告免费漫画(广告)",
- hide_subtitle: "隐藏 中文字幕",
- hide_watch_jav: "隐藏 观看日本AV",
- hide_amateur: "隐藏 素人",
- hide_uncensored: "隐藏 无码影片",
- hide_asia_av: "隐藏 国产AV",
- hide_my_collection: "隐藏 我的收藏",
- hide_upgrade_vip: "隐藏 升级VIP",
- hide_upgrade_vip_description: [
- "PC端(宽屏)在我的收藏中",
- "移动端(窄屏)在选单中"
- ],
- hide_more_sites: "隐藏 更多好站(广告)",
- hide_tg: "隐藏 官方电报群(广告)",
- hide_search: "隐藏 搜寻",
- hide_locale_switcher: "隐藏 切换语言",
- hide_site_live: "隐藏 地址发布",
- hide_site_live_description: ["仅在移动端(窄屏)选单中"],
- hide_mobile_right_menu: "隐藏 选单",
- hide_mobile_right_menu_description: [
- "仅移动端(窄屏)显示选单按钮"
- ]
- }
- },
- home: {
- basic: {
- name: "主页 - 基本功能",
- blur_video_image: "模糊 视频图片",
- blur_video_image_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- blur_video_title: "模糊 视频标题",
- blur_video_title_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- hide_search_title: "隐藏 搜索框上方文字",
- hide_search_box: "隐藏 搜索框",
- hide_search_history: "隐藏 搜索历史",
- hide_video_genres: "隐藏 视频类型",
- hide_video_genres_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- hide_video_duration: "隐藏 视频时长",
- hide_video_duration_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- revert_full_title: "显示 完整标题",
- revert_full_title_description: [
- "同步生效:首页、搜索页、视频页"
- ]
- },
- video: {
- name: "主页 - 视频功能",
- recommended_video_load_more: "加载 更多推荐视频",
- recommended_video_quantity_load_number: "自定义 推荐视频数量"
- }
- },
- search: {
- basic: { name: "搜索页 - 基本功能" }
- },
- video: {
- basic: {
- name: "播放页 - 基本功能",
- auto_switch_uncensored: "自动 切换无码",
- auto_switch_uncensored_description: [
- "仅在打开普通视频时生效",
- "查找并自动切换"
- ]
- },
- player: {
- name: "播放页 - 播放器",
- hide_new_site_banner: "隐藏 新域名通知",
- auto_quality: "自动 最高画质",
- speed: "修改 播放速度(-1 禁用)",
- speed_addonText: "倍",
- volume: "修改 播放音量(-1 禁用)",
- volume_addonText: "%",
- hide_play_btn: "隐藏 大播放键",
- hide_play_btn_description: ["视频暂停时显示"],
- cancel_focus_stop: "取消 失去焦点自动暂停",
- hook_open_window: "拦截 播放时打开窗口"
- },
- playerContorl: {
- name: "播放页 - 播放控制栏",
- hide_prev: "隐藏 快退按钮",
- hide_play: "隐藏 播放/暂停按钮",
- hide_next: "隐藏 快进按钮",
- hide_progress: "隐藏 进度条",
- hide_subtitle: "隐藏 字幕按钮",
- hide_volume: "隐藏 音量按钮",
- hide_setting: "隐藏 视频设置按钮",
- hide_pip: "隐藏 画中画按钮",
- hide_full: "隐藏 全屏按钮",
- hide_jump: "隐藏 快进控制栏",
- hide_jump_description: ["仅移动端(窄屏)显示"],
- hide_loop: "隐藏 循环播放控制栏"
- },
- toolbar: {
- name: "播放页 - 视频下方",
- hide_save: "隐藏 收藏",
- hide_playlist: "隐藏 片单",
- hide_download: "隐藏 下载",
- hide_share: "隐藏 分享",
- show_m3u8: "获取 M3U8",
- show_m3u8_description: ["截取并显示m3u8, 可使用其他播放器播放"],
- auto_show_more: "展开 显示更多"
- }
- }
- },
- jabletv: {
- common: {
- basic: {
- name: "全站通用 - 基本功能",
- remove_ads: "移除 广告",
- hide_footer: "隐藏 页底footer"
- },
- header: {
- name: "全站通用 - 顶栏",
- hide_logo: "隐藏 LOGO",
- hide_new: "隐藏 新作",
- hide_blu_ray: "隐藏 藍光無碼(广告)",
- hide_live_sex: "隐藏 成人直播(广告)",
- hide_best_porns: "隐藏 色網大全(广告)",
- hide_more_sites: "隐藏 更多好站(广告)",
- hide_sex_chat: "隐藏 裸聊(广告)",
- hide_javhd: "隐藏 無修正動画(广告)",
- hide_search: "隐藏 搜索",
- hide_lang: "隐藏 语言",
- hide_settings: "隐藏 头像(登入/设置)"
- }
- },
- home: {
- basic: {
- name: "主页 - 基本功能",
- blur_video_image: "模糊 视频图片",
- blur_video_image_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- blur_video_title: "模糊 视频标题",
- blur_video_title_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- hide_video_like: "隐藏 视频点赞",
- hide_video_like_description: ["同步生效:首页、搜索页、视频页"],
- hide_video_duration: "隐藏 视频时长",
- hide_video_duration_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- revert_full_title: "显示 完整标题",
- revert_full_title_description: [
- "同步生效:首页、搜索页、视频页"
- ],
- hide_video_data: "隐藏 视频数据",
- hide_video_data_description: ["同步生效:首页、搜索页、视频页"],
- hide_video_carousel: "隐藏 视频精选",
- hide_section_sub_title: "隐藏 板块副标题"
- }
- },
- search: {
- basic: { name: "搜索页 - 基本功能" }
- },
- video: {
- basic: {
- name: "播放页 - 基本功能"
- },
- player: {
- name: "播放页 - 播放器"
- },
- playerContorl: {
- name: "播放页 - 播放控制栏"
- },
- toolbar: {
- name: "播放页 - 视频下方"
- }
- }
- }
- };
- const language = {
- title: "Porn&Enhance",
- menu: "Show&Menu",
- panel: "Show/Hide Menu Panel",
- side_btn: "Show/Hide Side Button",
- basic_settings: "Global - Basic",
- language: "language",
- language_description: [
- "刷新页面生效",
- "刷新頁面生效",
- "Refresh the page to take effect",
- "ページをリフレッシュして有効になります",
- "페이지를 새로고침하여 적용됩니다"
- ],
- editorBtn: "Edit",
- editorPlaceholder: "Please enter the content...",
- editorSaveBtn: "Save",
- editorCloseBtn: "Close",
- missav: {
- common: {
- basic: {
- name: "Common - Basic",
- remove_ads: "Remove Ads",
- hide_footer: "Hide Footer",
- hide_new_site_banner: "Hide New Site Banner",
- redirect_new_url: "Redirect To New Site",
- auto_login_email_password: "Edit Account Info",
- auto_login_email_password_description: ["Auto Login Account Info"],
- auto_login_email_password_editorTitle: "Account&Info",
- auto_login_email_password_editorDescription: [
- "The format is as follows :",
- "email on the first line, password on the second line"
- ],
- auto_login: "Auto Login"
- },
- header: {
- name: "Common - Header",
- hide_logo: "Hide LOGO",
- hide_live_cam_sex: "Hide Live Cam Sex(AD)",
- hide_comic: "Hide Comic(AD)",
- hide_subtitle: "Hide English subtitle",
- hide_watch_jav: "Hide Watch JAV",
- hide_amateur: "Hide Amateur",
- hide_uncensored: "Hide Uncensored",
- hide_asia_av: "Hide Asia AV",
- hide_my_collection: "Hide My collection",
- hide_upgrade_vip: "Hide Upgrade VIP",
- hide_upgrade_vip_description: [
- "PC (wide screen) In My collection",
- "Mobile (narrow screen) In Right Menu"
- ],
- hide_more_sites: "Hide More sites(AD)",
- hide_tg: "Hide Telegram Group(AD)",
- hide_search: "Hide Search",
- hide_locale_switcher: "Hide Locale Switcher",
- hide_site_live: "Hide Website Publish",
- hide_site_live_description: [
- "Only Displayed In mobile (narrow screen) Right Menu",
- "Not display when page is in English"
- ],
- hide_mobile_right_menu: "Hide Right Menu",
- hide_mobile_right_menu_description: [
- "Only Displayed On Mobile (narrow screen)"
- ]
- }
- },
- home: {
- basic: {
- name: "HomePage - Basic",
- blur_video_image: "Blur Video Image",
- blur_video_image_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- blur_video_title: "Blur Video Title",
- blur_video_title_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- hide_search_title: "Hide Search Title",
- hide_search_box: "Hide Search Box",
- hide_search_history: "Hide Search History",
- hide_video_genres: "Hide Video Genres",
- hide_video_genres_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- hide_video_duration: "Hide Video Duration",
- hide_video_duration_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- revert_full_title: "Revert Full Video Title",
- revert_full_title_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ]
- },
- video: {
- name: "HomePage - Video",
- recommended_video_load_more: "Load More Recommended Video",
- recommended_video_quantity_load_number: "Customize Recommended Video Quantity"
- }
- },
- search: {
- basic: { name: "SearchPage - Basic" }
- },
- video: {
- basic: {
- name: "VideoPage - Basic",
- auto_switch_uncensored: "Auto Switch Uncensored",
- auto_switch_uncensored_description: [
- "Effective only when opening a standard video"
- ]
- },
- player: {
- name: "VideoPage - Player",
- hide_new_site_banner: "Hide New Site Banner",
- auto_quality: "Auto Quality",
- speed: "Modify Speed(-1 Disable)",
- speed_addonText: "x",
- volume: "Modify Volume(-1 Disable)",
- volume_addonText: "%",
- hide_play_btn: "Hide Play Button",
- hide_play_btn_description: ["displayed when video is paused"],
- cancel_focus_stop: "Cancel Auto-pause",
- hook_open_window: "Block Open AD Window"
- },
- playerContorl: {
- name: "VideoPage - PlayerContorl",
- hide_prev: "Hide Prev Button",
- hide_play: "Hide Play/Pause Button",
- hide_next: "Hide Next Button",
- hide_progress: "Hide Progress Bar",
- hide_subtitle: "Hide Subtitle Button",
- hide_volume: "Hide Volume Button",
- hide_setting: "Hide Settings Button",
- hide_pip: "Hide PIP Button",
- hide_full: "Hide Full Screen Buttons ",
- hide_jump: "Hide Jump Control",
- hide_jump_description: [
- "Only Displayed On Mobile (narrow screen)"
- ],
- hide_loop: "Hide Loop Control"
- },
- toolbar: {
- name: "VideoPage - Toolbar",
- hide_save: "Hide Saved",
- hide_playlist: "Hide Playlist",
- hide_download: "Hide Download",
- hide_share: "Hide Share",
- show_m3u8: "Show M3U8",
- show_m3u8_description: [
- "Capture and display m3u8 url",
- "Can play with other media players"
- ],
- auto_show_more: "Auto Show More"
- }
- }
- },
- jabletv: {
- common: {
- basic: {
- name: "Common - Basic",
- remove_ads: "Remove Ads",
- hide_footer: "Hide Footer"
- },
- header: {
- name: "Common - Header",
- hide_logo: "Hide LOGO",
- hide_new: "Hide New",
- hide_blu_ray: "Hide Blu Ray(AD)",
- hide_live_sex: "Hide Live Sex(AD)",
- hide_best_porns: "Hide Best Porns(AD)",
- hide_more_sites: "Hide More Sites(AD)",
- hide_sex_chat: "Hide Sex Chat(AD)",
- hide_javhd: "Hide JavHD(AD)",
- hide_search: "Hide Search",
- hide_lang: "Hide Language",
- hide_settings: "Hide Login/Settings"
- }
- },
- home: {
- basic: {
- name: "HomePage - Basic",
- blur_video_image: "Blur Video Image",
- blur_video_image_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- blur_video_title: "Blur Video Title",
- blur_video_title_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- hide_video_like: "Hide Video Like",
- hide_video_like_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- hide_video_duration: "Hide Video Duration",
- hide_video_duration_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- revert_full_title: "Revert Video Full Title",
- revert_full_title_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- hide_video_data: "Hide Video Data",
- hide_video_data_description: [
- "Synchronization takes effect: HomePage, SearchPage, VideoPage"
- ],
- hide_video_carousel: "Hide Video Carousel",
- hide_section_sub_title: "Hide Section Sub-Title"
- }
- },
- search: {
- basic: { name: "SearchPage - Basic" }
- },
- video: {
- basic: {
- name: "VideoPage - Basic"
- },
- player: {
- name: "VideoPage - Player"
- },
- playerContorl: {
- name: "VideoPage - PlayerContorl"
- },
- toolbar: {
- name: "VideoPage - Toolbar"
- }
- }
- }
- };
- const host = location.host;
- const pathname = location.pathname;
- const missAvPage = () => {
- if (/\/dm[0-9]{1,}\/[a-z]{2,3}$/.test(pathname) || pathname === "") {
- return "missav-homepage";
- }
- const searchRegexps = [
- `\\/search\\/`,
- `\\/(chinese|english)-subtitle(\\?|)$`,
- `\\/new(\\?|)$`,
- `\\/release(\\?|)$`,
- `\\/uncensored-leak(\\?|)$`,
- `\\/genres\\/.*`,
- `\\/makers\\/.*`,
- `\\/today-hot(\\?|)$`,
- `\\/weekly-hot(\\?|)$`,
- `\\/monthly-hot(\\?|)$`,
- `\\/siro(\\?|)$`,
- `\\/luxu(\\?|)$`,
- `\\/gana(\\?|)$`,
- `\\/maan(\\?|)$`,
- `\\/scute(\\?|)$`,
- `\\/ara(\\?|)$`,
- `\\/uncensored-leak(\\?|)$`,
- `\\/fc2(\\?|)$`,
- `\\/heyzo(\\?|)$`,
- `\\/tokyohot(\\?|)$`,
- `\\/1pondo(\\?|)$`,
- `\\/caribbeancom(\\?|)$`,
- `\\/caribbeancompr(\\?|)$`,
- `\\/10musume(\\?|)$`,
- `\\/pacopacomama(\\?|)$`,
- `\\/gachinco(\\?|)$`,
- `\\/xxxav(\\?|)$`,
- `\\/marriedslash(\\?|)$`,
- `\\/naughty4610(\\?|)$`,
- `\\/naughty0930(\\?|)$`,
- `\\/madou(\\?|)$`,
- `\\/twav(\\?|)$`,
- `\\/furuke(\\?|)$`
- ];
- for (let i2 = 0; i2 < searchRegexps.length; i2++) {
- if (new RegExp(searchRegexps[i2]).test(pathname)) {
- return "missav-search";
- }
- }
- if (new RegExp(
- `\\/[A-z].*[0-9](|-uncensored-leak|-(chinese|english)-subtitle)$`
- ).test(pathname)) {
- return "missav-video";
- }
- return "missav";
- };
- const jableTvPage = () => {
- if (pathname === "/") {
- return "jabletv-homepage";
- }
- if (pathname.includes("/videos/")) {
- return "jabletv-video";
- }
- const searchRegexps = [
- /\/search\//,
- /\/categories\//,
- /\/models\//,
- /\/latest-updates\//,
- /\/hot\//,
- /\/tags\//
- ];
- for (let i2 = 0; i2 < searchRegexps.length; i2++) {
- if (new RegExp(searchRegexps[i2]).test(pathname)) {
- return "jabletv-search";
- }
- }
- return "jabletv";
- };
- const _18ComicPage = () => {
- return "18comic";
- };
- const _91PornPage = () => {
- if (pathname === "/view_video.php") {
- return "91porn-video";
- }
- if (pathname === "/v.php") {
- return "91porn-v";
- }
- return "91porn";
- };
- const _91PornaPage = () => {
- return "91porna";
- };
- const pornHubPage = () => {
- if (pathname === "/view_video.php") {
- return "pornhub-video";
- }
- if (pathname === "/video/search") {
- return "pornhub-search";
- }
- return "pornhub";
- };
- const xVideosPage = () => {
- return "xvideos";
- };
- const xHamsterPage = () => {
- return "xhamster";
- };
- const ans = () => {
- log(host);
- switch (host) {
- case "missav.ws":
- case "missav.ai":
- case "missav.com":
- case "thisav.com":
- return missAvPage();
- case "jable.tv":
- return jableTvPage();
- case "pornhub.com":
- case "cn.pornhub.com":
- return pornHubPage();
- case "18comic.org":
- case "18comic.vip":
- return _18ComicPage();
- case "91porn.com":
- return _91PornPage();
- case "91porna.com":
- return _91PornaPage();
- case "www.xvideos.com":
- return xVideosPage();
- case "zh.xhamster.com":
- return xHamsterPage();
- default:
- return "";
- }
- };
- const isPageMissAvHomepage = () => ans() === "missav-homepage";
- const isPageMissAvVideo = () => ans() === "missav-video";
- const isPageMissAvSearch = () => ans() === "missav-search";
- const isPageMissAv = () => ans() === "missav" || ans().startsWith("missav-");
- const isPageJableTvHomepage = () => ans() === "jabletv-homepage";
- const isPageJableTvVideo = () => ans() === "jabletv-video";
- const isPageJableTvSearch = () => ans() === "jabletv-search";
- const isPageJableTv = () => ans() === "jabletv" || ans().startsWith("jabletv-");
- const isPagePornHubVideo = () => ans() === "pornhub-video";
- const isPagePornHub = () => ans() === "pornhub" || ans().startsWith("pornhub-");
- const isPage18Comic = () => ans() === "18comic" || ans().startsWith("18comic-");
- const isPage91Porn = () => ans() === "91porn" || ans().startsWith("91porn-");
- const isPage91PornVideo = () => ans() === "91porn-video";
- const isPage91PornV = () => ans() === "91porn-v";
- const isPage91Porna = () => ans() === "91porna" || ans().startsWith("91porna-");
- const isPageXVideos = () => ans() === "xvideos" || ans().startsWith("xvideos-");
- const languages = {
- "zh-CN": language$1,
- "en-US": language
- };
- class I18n {
- constructor(lang2) {
- __publicField(this, "_language");
- this._language = e$1.ref(languages[lang2]);
- }
- get language() {
- return this._language.value;
- }
- change(lang2) {
- if (Object.keys(languages).includes(lang2)) {
- this._language.value = languages[lang2];
- } else {
- console.log("not support language: ", lang2);
- }
- }
- }
- let lang = PGStorage.get("language", "zh-CN");
- if (!Object.keys(languages).includes(lang)) {
- lang = "zh-CN";
- PGStorage.set("language", "zh-CN");
- }
- if (!isPageMissAv()) {
- lang = "zh-CN";
- }
- const i18n = new I18n(lang);
- const _hoisted_1$8 = { class: "flex w-full flex-1 flex-row rounded-xl p-3.5 hover:bg-[#2f2f2f]" };
- const _hoisted_2$7 = { class: "ml-2 flex-1 self-center" };
- const _hoisted_3$3 = { class: "mx-2 mb-2 flex flex-1 flex-col p-1 text-[#c6c6c6]" };
- const _hoisted_4$3 = ["placeholder"];
- const _hoisted_5$1 = { class: "mt-4 flex justify-around" };
- const _sfc_main$9 = /* @__PURE__ */ e$1.defineComponent({
- __name: "EditorComp",
- props: {
- type: {},
- id: {},
- name: {},
- description: {},
- editorTitle: {},
- editorDescription: {},
- saveFn: { type: Function }
- },
- setup(__props) {
- const item = __props;
- const panel = e$1.ref(null);
- const isEditorShow = e$1.ref(false);
- const saveSuccess = e$1.ref(false);
- const editorData = e$1.ref("");
- const updateData = () => {
- const val = PGStorage.get(item.id, []).join("\n");
- editorData.value = val ? val + "\n" : val;
- };
- const saveData = () => {
- try {
- const data = editorData.value.split("\n").filter((v2) => v2.trim() !== "");
- PGStorage.set(item.id, orderedUniq(data));
- saveSuccess.value = true;
- item.saveFn();
- setTimeout(() => {
- saveSuccess.value = false;
- }, 1500);
- } catch (err) {
- error(`EditorComp ${item.id} saveData error`, err);
- }
- };
- return (_ctx, _cache) => {
- var _a;
- return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
- e$1.createElementVNode("label", _hoisted_1$8, [
- e$1.createElementVNode("span", _hoisted_2$7, e$1.toDisplayString(_ctx.name), 1),
- e$1.createElementVNode("button", {
- type: "button",
- class: "relative inline-flex justify-center rounded border border-[#212121] bg-[#151515] px-2.5 py-1.5 text-sm outline-none hover:border-[#ff9000] hover:text-[#ff9000] focus:outline-none",
- onClick: _cache[0] || (_cache[0] = () => {
- isEditorShow.value = true;
- updateData();
- })
- }, e$1.toDisplayString(e$1.unref(i18n).language.editorBtn), 1)
- ]),
- ((_a = _ctx.description) == null ? undefined : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, {
- key: 0,
- class: "pl-9",
- description: _ctx.description
- }, null, 8, ["description"])) : e$1.createCommentVNode("", true),
- isEditorShow.value ? (e$1.openBlock(), e$1.createBlock(_sfc_main$b, e$1.mergeProps({
- key: 1,
- ref_key: "panel",
- ref: panel
- }, {
- title: _ctx.editorTitle,
- widthPercent: 28,
- heightPercent: 85,
- minWidth: 360,
- minHeight: 600
- }, {
- onClose: _cache[4] || (_cache[4] = ($event) => isEditorShow.value = false)
- }), {
- default: e$1.withCtx(() => {
- var _a2;
- return [
- e$1.createElementVNode("div", _hoisted_3$3, [
- ((_a2 = _ctx.editorDescription) == null ? undefined : _a2.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, {
- key: 0,
- class: "mb-3",
- description: _ctx.editorDescription
- }, null, 8, ["description"])) : e$1.createCommentVNode("", true),
- e$1.withDirectives(e$1.createElementVNode("textarea", {
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => editorData.value = $event),
- onKeydown: _cache[2] || (_cache[2] = e$1.withModifiers(() => {
- }, ["stop"])),
- class: "flex-1 resize-none overscroll-none rounded-xl border-2 border-[#252525] bg-[#252525] p-2 text-[14px] outline-none focus:border-[#2f2f2f]",
- style: { "scrollbar-width": "thin", "scrollbar-color": "#999 #00000000" },
- spellcheck: "false",
- placeholder: e$1.unref(i18n).language.editorPlaceholder
- }, null, 40, _hoisted_4$3), [
- [e$1.vModelText, editorData.value]
- ]),
- e$1.createElementVNode("div", _hoisted_5$1, [
- e$1.createElementVNode("button", {
- class: e$1.normalizeClass([
- "w-24 self-center rounded border border-white bg-[#2f2f2f] py-0.5 text-center hover:border-[#ff9000] hover:text-[#ff9000]",
- saveSuccess.value ? "border-green-600 bg-green-950 hover:border-green-600 hover:bg-green-950" : ""
- ]),
- onClick: saveData
- }, e$1.toDisplayString(e$1.unref(i18n).language.editorSaveBtn), 3),
- e$1.createElementVNode("button", {
- class: "w-24 self-center rounded border border-white bg-[#2f2f2f] py-0.5 text-center hover:border-[#ff9000] hover:text-[#ff9000]",
- onClick: _cache[3] || (_cache[3] = ($event) => isEditorShow.value = false)
- }, e$1.toDisplayString(e$1.unref(i18n).language.editorCloseBtn), 1)
- ])
- ])
- ];
- }),
- _: 1
- }, 16)) : e$1.createCommentVNode("", true)
- ], 64);
- };
- }
- });
- const _hoisted_1$7 = { class: "flex items-center justify-between p-3.5 py-1" };
- const _hoisted_2$6 = { class: "ml-2 text-white" };
- const _hoisted_3$2 = { class: "relative w-2/5" };
- const _hoisted_4$2 = { class: "block truncate text-gray-200" };
- const _hoisted_5 = { class: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2" };
- const _hoisted_6 = {
- key: 0,
- class: "absolute inset-y-0 left-0 flex items-center pl-3 text-[#ff9000]"
- };
- const _sfc_main$8 = /* @__PURE__ */ e$1.defineComponent({
- __name: "ListComp",
- props: {
- type: {},
- id: {},
- name: {},
- description: {},
- defaultValue: {},
- disableValue: {},
- options: {},
- fn: { type: Function }
- },
- setup(__props) {
- const item = __props;
- const options = item.options;
- const currValue = PGStorage.get(item.id, item.defaultValue);
- const currOption = options.find((v2) => v2.id === currValue);
- const selectedOption = e$1.ref(currOption ?? options[0]);
- e$1.watch(selectedOption, (newSelected) => {
- var _a;
- try {
- for (const option of options) {
- if (option.id === newSelected.id && newSelected.id !== item.disableValue) {
- document.documentElement.setAttribute(option.id, "");
- if (item.fn) {
- (_a = item.fn(newSelected.id)) == null ? void 0 : _a.then().catch((err) => {
- throw err;
- });
- }
- } else {
- document.documentElement.removeAttribute(option.id);
- }
- }
- PGStorage.set(item.id, newSelected.id);
- } catch (err) {
- error(`ListComp ${item.id} error`, err);
- }
- });
- return (_ctx, _cache) => {
- var _a;
- return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
- e$1.createElementVNode("div", _hoisted_1$7, [
- e$1.createElementVNode("div", _hoisted_2$6, e$1.toDisplayString(_ctx.name), 1),
- e$1.createVNode(e$1.unref(Ie), {
- modelValue: selectedOption.value,
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedOption.value = $event)
- }, {
- default: e$1.withCtx(() => [
- e$1.createElementVNode("div", _hoisted_3$2, [
- e$1.createVNode(e$1.unref(je), { class: "relative w-full cursor-pointer rounded-2xl border-2 border-[#212121] bg-[#151515] px-2.5 py-1.5 text-left focus:bg-[#212121] focus:outline-none sm:text-sm" }, {
- default: e$1.withCtx(() => [
- e$1.createElementVNode("span", _hoisted_4$2, e$1.toDisplayString(selectedOption.value.name), 1),
- e$1.createElementVNode("span", _hoisted_5, [
- e$1.createVNode(e$1.unref(render), {
- class: "h-5 w-5 text-gray-600",
- "aria-hidden": "true"
- })
- ])
- ]),
- _: 1
- }),
- e$1.createVNode(e$1.Transition, {
- "leave-active-class": "transition duration-100 ease-in",
- "leave-from-class": "opacity-100",
- "leave-to-class": "opacity-0"
- }, {
- default: e$1.withCtx(() => [
- e$1.createVNode(e$1.unref(Ae), { class: "absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-xl bg-black shadow-lg focus:outline-none sm:text-sm" }, {
- default: e$1.withCtx(() => [
- (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(e$1.unref(options), (option, index) => {
- return e$1.openBlock(), e$1.createBlock(e$1.unref(Fe), {
- key: index,
- value: option,
- as: "template"
- }, {
- default: e$1.withCtx(({ active, selected }) => [
- e$1.createElementVNode("li", {
- class: e$1.normalizeClass([
- active ? "bg-[#1b1b1b] text-white" : "text-[#c6c6c6]",
- "relative cursor-default rounded-xl py-2 pl-10 pr-4 transition-colors duration-200"
- ])
- }, [
- e$1.createElementVNode("span", {
- class: e$1.normalizeClass([selected ? "font-medium" : "font-normal", "block truncate"])
- }, e$1.toDisplayString(option.name), 3),
- selected ? (e$1.openBlock(), e$1.createElementBlock("span", _hoisted_6, [
- e$1.createVNode(e$1.unref(render$2), {
- class: "h-5 w-5",
- "aria-hidden": "true"
- })
- ])) : e$1.createCommentVNode("", true)
- ], 2)
- ]),
- _: 2
- }, 1032, ["value"]);
- }), 128))
- ]),
- _: 1
- })
- ]),
- _: 1
- })
- ])
- ]),
- _: 1
- }, 8, ["modelValue"])
- ]),
- ((_a = _ctx.description) == null ? undefined : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, {
- key: 0,
- class: "pl-9",
- description: _ctx.description
- }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
- ], 64);
- };
- }
- });
- const _hoisted_1$6 = { class: "flex items-center p-3.5" };
- const _hoisted_2$5 = { class: "ml-2" };
- const _hoisted_3$1 = ["step"];
- const _hoisted_4$1 = {
- key: 0,
- class: "ml-2"
- };
- const _sfc_main$7 = /* @__PURE__ */ e$1.defineComponent({
- __name: "NumberComp",
- props: {
- type: {},
- id: {},
- name: {},
- description: {},
- minValue: {},
- maxValue: {},
- step: {},
- defaultValue: {},
- disableValue: {},
- addonText: {},
- noStyle: { type: Boolean },
- attrName: {},
- fn: { type: Function }
- },
- setup(__props) {
- const item = __props;
- const currValue = e$1.ref(PGStorage.get(item.id, item.defaultValue));
- watchThrottled(
- currValue,
- (newValue, oldValue) => {
- var _a;
- try {
- if (newValue > item.maxValue) {
- currValue.value = item.maxValue;
- }
- if (newValue < item.minValue) {
- currValue.value = item.minValue;
- }
- if (oldValue === item.disableValue) {
- if (!item.noStyle) {
- document.documentElement.setAttribute(item.attrName ?? item.id, "");
- }
- }
- if (newValue === item.disableValue) {
- if (!item.noStyle) {
- document.documentElement.removeAttribute(item.attrName ?? item.id);
- }
- } else if (currValue.value !== oldValue) {
- (_a = item.fn(currValue.value)) == null ? void 0 : _a.then().catch((err) => {
- throw err;
- });
- }
- PGStorage.set(item.id, currValue.value);
- } catch (err) {
- error(`NumberComp ${item.id} error`, err);
- }
- },
- { throttle: 50 }
- );
- return (_ctx, _cache) => {
- var _a;
- return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
- e$1.createElementVNode("div", _hoisted_1$6, [
- e$1.createElementVNode("div", _hoisted_2$5, e$1.toDisplayString(_ctx.name), 1),
- e$1.withDirectives(e$1.createElementVNode("input", {
- type: "number",
- step: _ctx.step,
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => currValue.value = $event),
- onKeydown: _cache[1] || (_cache[1] = e$1.withModifiers(() => {
- }, ["stop"])),
- class: "ml-4 block flex-1 w-1/5 rounded-2xl border-2 border-[#212121] bg-[#151515] px-2.5 py-1.5 text-sm outline-none invalid:border-red-500 focus:bg-[#212121] focus:invalid:border-red-500"
- }, null, 40, _hoisted_3$1), [
- [e$1.vModelText, currValue.value]
- ]),
- _ctx.addonText ? (e$1.openBlock(), e$1.createElementBlock("div", _hoisted_4$1, e$1.toDisplayString(_ctx.addonText), 1)) : e$1.createCommentVNode("", true)
- ]),
- ((_a = _ctx.description) == null ? undefined : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, {
- key: 0,
- class: "pl-9",
- description: _ctx.description
- }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
- ], 64);
- };
- }
- });
- const _hoisted_1$5 = { class: "flex items-center p-3.5" };
- const _hoisted_2$4 = { class: "ml-2" };
- const _sfc_main$6 = /* @__PURE__ */ e$1.defineComponent({
- __name: "StringComp",
- props: {
- type: {},
- id: {},
- name: {},
- description: {},
- defaultValue: {},
- disableValue: {},
- noStyle: { type: Boolean },
- attrName: {},
- fn: { type: Function }
- },
- setup(__props) {
- const item = __props;
- const currValue = e$1.ref(PGStorage.get(item.id, item.defaultValue));
- watchThrottled(
- currValue,
- (newValue, oldValue) => {
- var _a;
- try {
- if (oldValue === item.disableValue) {
- if (!item.noStyle) {
- document.documentElement.setAttribute(item.attrName ?? item.id, "");
- }
- }
- if (newValue === item.disableValue) {
- if (!item.noStyle) {
- document.documentElement.removeAttribute(item.attrName ?? item.id);
- }
- } else if (currValue.value !== oldValue) {
- (_a = item.fn(currValue.value)) == null ? void 0 : _a.then().catch((err) => {
- throw err;
- });
- }
- PGStorage.set(item.id, currValue.value);
- } catch (err) {
- error(`StringComp ${item.id} error`, err);
- }
- },
- { throttle: 50 }
- );
- return (_ctx, _cache) => {
- var _a;
- return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
- e$1.createElementVNode("div", _hoisted_1$5, [
- e$1.createElementVNode("div", _hoisted_2$4, e$1.toDisplayString(_ctx.name), 1),
- e$1.withDirectives(e$1.createElementVNode("input", {
- type: "text",
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => currValue.value = $event),
- onKeydown: _cache[1] || (_cache[1] = e$1.withModifiers(() => {
- }, ["stop"])),
- class: "ml-4 block w-1/5 flex-1 rounded-2xl border-2 border-[#212121] bg-[#151515] px-2.5 py-1.5 text-sm outline-none invalid:border-red-500 focus:bg-[#212121] focus:invalid:border-red-500"
- }, null, 544), [
- [e$1.vModelText, currValue.value]
- ])
- ]),
- ((_a = _ctx.description) == null ? undefined : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, {
- key: 0,
- description: _ctx.description
- }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
- ], 64);
- };
- }
- });
- const _hoisted_1$4 = { class: "flex items-center" };
- const _hoisted_2$3 = { class: "ml-2 flex-1" };
- const _sfc_main$5 = /* @__PURE__ */ e$1.defineComponent({
- __name: "SwitchComp",
- props: {
- type: {},
- id: {},
- name: {},
- description: {},
- defaultEnable: { type: Boolean },
- noStyle: { type: Boolean },
- attrName: {},
- enableFn: { type: Function },
- disableFn: { type: Function },
- enableFnRunAt: {}
- },
- setup(__props) {
- const item = __props;
- const enabled = e$1.ref(PGStorage.get(item.id, item.defaultEnable));
- e$1.watch(enabled, () => {
- var _a, _b;
- try {
- if (enabled.value) {
- if (!item.noStyle) {
- document.documentElement.setAttribute(item.attrName ?? item.id, "");
- }
- if (item.enableFn) {
- (_a = item.enableFn()) == null ? void 0 : _a.then().catch();
- }
- PGStorage.set(item.id, true);
- } else {
- if (!item.noStyle) {
- document.documentElement.removeAttribute(item.attrName ?? item.id);
- }
- if (item.disableFn) {
- (_b = item.disableFn()) == null ? void 0 : _b.then().catch((err) => {
- throw err;
- });
- }
- PGStorage.set(item.id, false);
- }
- } catch (err) {
- error(`SwitchComp ${item.id} error`, err);
- }
- });
- return (_ctx, _cache) => {
- var _a;
- return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
- e$1.createVNode(e$1.unref(oe), { class: "w-full rounded-xl p-3.5 hover:bg-[#212121]" }, {
- default: e$1.withCtx(() => [
- e$1.createElementVNode("div", _hoisted_1$4, [
- e$1.createVNode(e$1.unref(de), { class: "flex flex-1 flex-row" }, {
- default: e$1.withCtx(() => [
- e$1.createElementVNode("p", _hoisted_2$3, e$1.toDisplayString(_ctx.name), 1),
- e$1.createVNode(e$1.unref(ue), {
- modelValue: enabled.value,
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => enabled.value = $event),
- class: e$1.normalizeClass([enabled.value ? "bg-[#ff9000]" : "bg-[#2f2f2f]", "relative inline-flex h-6 w-11 items-center rounded-full outline-none transition-colors"])
- }, {
- default: e$1.withCtx(() => [
- e$1.createElementVNode("span", {
- class: e$1.normalizeClass([enabled.value ? "translate-x-6" : "translate-x-1", "inline-block h-4 w-4 transform rounded-full bg-white transition-transform"])
- }, null, 2)
- ]),
- _: 1
- }, 8, ["modelValue", "class"])
- ]),
- _: 1
- })
- ])
- ]),
- _: 1
- }),
- ((_a = _ctx.description) == null ? undefined : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, {
- key: 0,
- class: "pl-9",
- description: _ctx.description
- }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
- ], 64);
- };
- }
- });
- const _hoisted_1$3 = { class: "mt-5 flex justify-center space-x-5" };
- const _hoisted_2$2 = ["href"];
- const _sfc_main$4 = /* @__PURE__ */ e$1.defineComponent({
- __name: "AboutMeComp",
- props: {
- github: {},
- greasyFork: {}
- },
- setup(__props) {
- return (_ctx, _cache) => {
- return e$1.openBlock(), e$1.createElementBlock("ul", _hoisted_1$3, [
- e$1.createElementVNode("li", null, [
- e$1.createElementVNode("a", {
- href: _ctx.github,
- target: "_blank",
- class: "text-gray-400 hover:text-white"
- }, _cache[0] || (_cache[0] = [
- e$1.createElementVNode("svg", {
- "aria-hidden": "true",
- viewBox: "0 0 24 24",
- fill: "currentColor",
- class: "h-10 w-10"
- }, [
- e$1.createElementVNode("path", {
- "clip-rule": "evenodd",
- d: "M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z",
- "fill-rule": "evenodd"
- })
- ], -1)
- ]), 8, _hoisted_2$2)
- ])
- ]);
- };
- }
- });
- const useRulePanelStore = /* @__PURE__ */ defineStore("RulePanel", () => {
- const isShow = e$1.ref(false);
- const show = () => {
- isShow.value = true;
- };
- const hide = () => {
- isShow.value = false;
- };
- return { isShow, show, hide };
- });
- const useSideBtnStore = /* @__PURE__ */ defineStore("SideBtn", () => {
- const isShow = useStorage("pg-side-btn-show", true, localStorage);
- const show = () => {
- isShow.value = true;
- };
- const hide = () => {
- isShow.value = false;
- };
- return { isShow, show, hide };
- });
- const _sfc_main$3 = /* @__PURE__ */ e$1.defineComponent({
- __name: "RulePanelView",
- props: {
- rules: {},
- title: {},
- github: {},
- greasyFork: {}
- },
- setup(__props) {
- const props = __props;
- const store = useRulePanelStore();
- const currRules = [];
- for (const rule of props.rules) {
- if (rule.checkFn()) {
- currRules.push(rule);
- }
- }
- return (_ctx, _cache) => {
- return e$1.withDirectives((e$1.openBlock(), e$1.createBlock(_sfc_main$b, e$1.mergeProps({ title: _ctx.title, widthPercent: 28, heightPercent: 85, minWidth: 360, minHeight: 600 }, {
- onClose: e$1.unref(store).hide
- }), {
- default: e$1.withCtx(() => [
- (e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(currRules, (rule, i2) => {
- return e$1.createElementVNode("div", { key: i2 }, [
- (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(rule.groups, (group, j2) => {
- return e$1.openBlock(), e$1.createElementBlock("div", { key: j2 }, [
- e$1.createVNode(_sfc_main$c, e$1.mergeProps({ ref_for: true }, { title: group.name, isFold: group.fold, isSpecial: rule.isSpecial, specialName: rule.specialName }), {
- default: e$1.withCtx(() => [
- (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(group.items, (item, innerIndex) => {
- return e$1.openBlock(), e$1.createElementBlock("div", { key: innerIndex }, [
- item.type === "switch" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$5, e$1.mergeProps({
- key: 0,
- ref_for: true
- }, item), null, 16)) : item.type === "number" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$7, e$1.mergeProps({
- key: 1,
- ref_for: true
- }, item), null, 16)) : item.type === "string" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$6, e$1.mergeProps({
- key: 2,
- ref_for: true
- }, item), null, 16)) : item.type === "editor" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$9, e$1.mergeProps({
- key: 3,
- ref_for: true
- }, item), null, 16)) : item.type === "list" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$8, e$1.mergeProps({
- key: 4,
- ref_for: true
- }, item), null, 16)) : e$1.createCommentVNode("", true)
- ]);
- }), 128))
- ]),
- _: 2
- }, 1040)
- ]);
- }), 128))
- ]);
- }), 64)),
- e$1.createVNode(_sfc_main$4, e$1.normalizeProps(e$1.guardReactiveProps({ github: _ctx.github, greasyFork: _ctx.greasyFork })), null, 16)
- ]),
- _: 1
- }, 16, ["onClose"])), [
- [e$1.vShow, e$1.unref(store).isShow]
- ]);
- };
- }
- });
- const _hoisted_1$2 = { class: "select-none text-center text-[13px] leading-4" };
- const _hoisted_2$1 = { class: "select-none text-center text-[13px] leading-4" };
- const _sfc_main$2 = /* @__PURE__ */ e$1.defineComponent({
- __name: "SideBtnView",
- setup(__props) {
- const ruleStore = useRulePanelStore();
- const sideBtnStore = useSideBtnStore();
- const target = e$1.ref(null);
- const { width, height } = useElementBounding(target, { windowScroll: false });
- const btnPos = useStorage("pg-side-btn-pos", { right: 10, bottom: 180 }, localStorage);
- const isDragging = e$1.ref(false);
- const windowSize = useWindowSize({ includeScrollbar: false });
- const maxPos = e$1.computed(() => {
- return {
- x: windowSize.width.value - width.value,
- y: windowSize.height.value - height.value
- };
- });
- let rAF = 0;
- useDraggable(target, {
- initialValue: {
- x: windowSize.width.value - btnPos.value.right,
- y: windowSize.height.value - btnPos.value.bottom
- },
- preventDefault: true,
- handle: e$1.computed(() => target.value),
- onMove: (pos) => {
- isDragging.value = true;
- btnPos.value.right = maxPos.value.x - pos.x;
- btnPos.value.bottom = maxPos.value.y - pos.y;
- cancelAnimationFrame(rAF);
- rAF = requestAnimationFrame(() => {
- if (btnPos.value.right < 0) {
- btnPos.value.right = 0;
- }
- if (btnPos.value.bottom < 0) {
- btnPos.value.bottom = 0;
- }
- if (btnPos.value.bottom > maxPos.value.y) {
- btnPos.value.bottom = maxPos.value.y;
- }
- if (btnPos.value.right > maxPos.value.x) {
- btnPos.value.right = maxPos.value.x;
- }
- });
- },
- onEnd: () => {
- setTimeout(() => {
- isDragging.value = false;
- }, 50);
- }
- });
- return (_ctx, _cache) => {
- return e$1.unref(sideBtnStore).isShow ? (e$1.openBlock(), e$1.createElementBlock("div", {
- key: 0,
- style: e$1.normalizeStyle({ right: e$1.unref(btnPos).right + "px", bottom: e$1.unref(btnPos).bottom + "px" }),
- class: "group fixed z-[100] flex flex-col justify-end text-white will-change-[right,bottom] hover:text-opacity-100"
- }, [
- e$1.createElementVNode("div", {
- ref_key: "target",
- ref: target,
- class: "mt-1 flex h-10 w-10 cursor-pointer items-center justify-center rounded-lg border border-[#212121] bg-[#151515] font-medium transition-colors hover:bg-[#212121]",
- onClick: _cache[0] || (_cache[0] = ($event) => !isDragging.value && (e$1.unref(ruleStore).isShow ? e$1.unref(ruleStore).hide() : e$1.unref(ruleStore).show()))
- }, [
- e$1.createElementVNode("div", null, [
- e$1.createElementVNode("p", _hoisted_1$2, e$1.toDisplayString(e$1.unref(i18n).language.menu.split("&")[0]), 1),
- e$1.createElementVNode("p", _hoisted_2$1, e$1.toDisplayString(e$1.unref(i18n).language.menu.split("&")[1]), 1)
- ])
- ], 512)
- ], 4)) : e$1.createCommentVNode("", true);
- };
- }
- });
- const originFetch = _unsafeWindow.fetch;
- const FetchInterceptor = (input, init) => {
- let requestInit = {
- url: input instanceof Request ? input.url : input.toString(),
- method: init == null ? undefined : init.method,
- credentials: init == null ? undefined : init.credentials,
- body: init == null ? undefined : init.body,
- type: "RequestInit",
- headers: parseHeaders(init == null ? undefined : init.headers)
- };
- let globalPromise = Promise.resolve(undefined);
- for (let i2 = 0; i2 < beforeRequestFuncs.length; i2++) {
- globalPromise = globalPromise.then((prev) => {
- if (isHTTPResponse(prev)) {
- throw prev;
- }
- requestInit = prev || requestInit;
- return beforeRequestFuncs[i2](requestInit);
- });
- }
- const getInitValue = (key) => {
- return key in requestInit ? requestInit[key] : init == null ? undefined : init[key];
- };
- globalPromise = globalPromise.then((prev) => {
- if (isHTTPResponse(prev)) {
- throw prev;
- }
- requestInit = prev || requestInit;
- }).catch((err) => {
- if (isHTTPResponse(err)) {
- return err;
- }
- console.error("Interceptor cause some err: ", err);
- return undefined;
- }).then((prevResponse) => {
- if (isHTTPResponse(prevResponse)) {
- return new Response(prevResponse.response, {
- headers: prevResponse.headers,
- status: prevResponse.status || 200,
- statusText: prevResponse.statusText
- });
- }
- return originFetch(requestInit.url, {
- ...init,
- method: getInitValue("method"),
- body: getInitValue("body"),
- credentials: getInitValue("credentials"),
- headers: getInitValue("headers")
- });
- }).then((res) => {
- if (!res.ok) {
- console.log("error: ", requestInit);
- throw new Error(`Unexpected status code: ${res.status}`);
- }
- const resClone = res.clone();
- return resClone.blob().then((data) => {
- let interceptorResponse = defineResponse({
- response: data,
- headers: parseHeaders(resClone.headers),
- status: resClone.status || 200,
- statusText: resClone.statusText
- });
- let globalPromise2 = Promise.resolve(undefined);
- for (let i2 = 0; i2 < afterResponseFuncs.length; i2++) {
- globalPromise2 = globalPromise2.then((prevResp) => {
- interceptorResponse = prevResp || interceptorResponse;
- return afterResponseFuncs[i2](
- interceptorResponse,
- requestInit
- );
- });
- }
- globalPromise2 = globalPromise2.then((prevResp) => {
- interceptorResponse = prevResp || interceptorResponse;
- return interceptorResponse;
- });
- return globalPromise2.then((prevResponse) => {
- return new Response(prevResponse.response, {
- headers: prevResponse.headers,
- status: prevResponse.status || 200,
- statusText: prevResponse.statusText
- });
- });
- });
- }).catch((err) => {
- let errorOrResponse = {
- type: "fetch",
- cause: err
- };
- let globalPromise2 = Promise.resolve(undefined);
- for (let i2 = 0; i2 < receiveErrorFuncs.length; i2++) {
- globalPromise2 = globalPromise2.then((prevResponse) => {
- errorOrResponse = prevResponse || errorOrResponse;
- if (isHTTPResponse(errorOrResponse)) {
- throw errorOrResponse;
- }
- return receiveErrorFuncs[i2](errorOrResponse, requestInit);
- });
- }
- globalPromise2.then((prevResponse) => {
- errorOrResponse = prevResponse || errorOrResponse;
- if (isHTTPResponse(errorOrResponse)) {
- return new Response(errorOrResponse.response || "", {
- headers: errorOrResponse.headers,
- status: errorOrResponse.status || 500,
- statusText: errorOrResponse.statusText
- });
- }
- throw errorOrResponse;
- });
- return globalPromise2;
- });
- return globalPromise;
- };
- const parseHeaders = (headers) => {
- if (headers === undefined || !("forEach" in headers) || typeof headers["forEach"] !== "function")
- return headers;
- const ans2 = {};
- headers.forEach((header) => {
- ans2[header[0]] = header[1];
- });
- return ans2;
- };
- const XHRResponseKeys = ["status", "statusText", "response"];
- class XHRInterceptor extends XMLHttpRequest {
- constructor() {
- super();
- __publicField(this, "openConfig", {
- type: "RequestInit",
- headers: {}
- });
- __publicField(this, "returnCustomResponse", false);
- __publicField(this, "customResponse", { type: "HTTPResponse" });
- __publicField(this, "globalPromise", Promise.resolve({}));
- __publicField(this, "customReadyState", 0);
- __publicField(this, "hasOpened", false);
- __publicField(this, "hasHandleAfterReponse", false);
- const xhr = this;
- let isIntercept = false;
- xhr.addEventListener("readystatechange", function(event) {
- if (xhr.readyState === 4) {
- if (isIntercept) return;
- isIntercept = !isIntercept;
- event.stopImmediatePropagation();
- xhr.handleAfterResponse();
- xhr.globalPromise = xhr.globalPromise.then(() => {
- xhr.dispatchEvent(
- new Event("readystatechange", { bubbles: false })
- );
- });
- }
- });
- let hasInterceptLoadend = false;
- xhr.addEventListener("loadend", function(event) {
- if (hasInterceptLoadend) return;
- hasInterceptLoadend = !hasInterceptLoadend;
- event.stopImmediatePropagation();
- xhr.handleAfterResponse();
- xhr.globalPromise = xhr.globalPromise.then(() => {
- xhr.dispatchEvent(new Event("loadend", { bubbles: false }));
- });
- });
- let onreadystatechangeFunc = () => {
- };
- Object.defineProperty(xhr, "onreadystatechange", {
- set: (newFunc) => {
- onreadystatechangeFunc = newFunc;
- },
- get: () => {
- return onreadystatechangeFunc;
- },
- configurable: true,
- enumerable: true
- });
- xhr.addEventListener("readystatechange", function(...args) {
- if (onreadystatechangeFunc)
- onreadystatechangeFunc.call(this, ...args);
- });
- let errHasCatched = false;
- xhr.addEventListener("error", function(event) {
- if (errHasCatched) return;
- errHasCatched = true;
- event.stopImmediatePropagation();
- let errorOrResponse = {
- type: event.type
- };
- xhr.globalPromise = xhr.globalPromise.then(() => undefined);
- for (let i2 = 0; i2 < receiveErrorFuncs.length; i2++) {
- xhr.globalPromise = xhr.globalPromise.then((prevResponse) => {
- errorOrResponse = prevResponse || errorOrResponse;
- if (isHTTPResponse(errorOrResponse)) {
- throw errorOrResponse;
- }
- return receiveErrorFuncs[i2](
- errorOrResponse,
- xhr.openConfig
- );
- });
- }
- xhr.globalPromise.then((prevResponse) => {
- errorOrResponse = prevResponse || errorOrResponse;
- if (isHTTPResponse(errorOrResponse)) {
- throw errorOrResponse;
- }
- xhr.dispatchEvent(
- new Event(errorOrResponse.type, { bubbles: false })
- );
- }).catch((response) => {
- xhr.customResponse = response;
- xhr.returnCustomResponse = true;
- xhr.dispatchEvent(
- new Event("readystatechange", { bubbles: false })
- );
- });
- });
- let onerrorFunc = () => {
- };
- Object.defineProperty(xhr, "onerror", {
- set: (newFunc) => {
- onerrorFunc = newFunc;
- },
- get: () => {
- return onerrorFunc;
- },
- configurable: true,
- enumerable: true
- });
- xhr.addEventListener("error", function(...args) {
- onerrorFunc.call(xhr, ...args);
- });
- let onloadendFunc = () => {
- };
- Object.defineProperty(xhr, "onloadend", {
- set: (newFunc) => {
- onloadendFunc = newFunc;
- },
- get: () => {
- return onloadendFunc;
- },
- configurable: true,
- enumerable: true
- });
- xhr.addEventListener("loadend", function(...args) {
- onloadendFunc.call(xhr, ...args);
- });
- XHRResponseKeys.forEach((key) => {
- const getOrigin = () => super[key];
- Object.defineProperty(xhr, key, {
- get: () => {
- if (xhr.returnCustomResponse && key in xhr.customResponse) {
- return xhr.customResponse[key];
- }
- return getOrigin();
- },
- configurable: true,
- enumerable: true
- });
- });
- }
- handleAfterResponse() {
- if (this.hasHandleAfterReponse) return;
- this.hasHandleAfterReponse = true;
- const xhr = this;
- let response = {
- response: xhr.response,
- headers: XHRInterceptor.parseAllHeaders(
- xhr.getAllResponseHeaders()
- ),
- status: xhr.status,
- statusText: xhr.statusText,
- type: "HTTPResponse"
- };
- xhr.globalPromise = xhr.globalPromise.then(
- () => undefined
- );
- for (let i2 = 0; i2 < afterResponseFuncs.length; i2++) {
- xhr.globalPromise = xhr.globalPromise.then((prevResponse) => {
- if (isHTTPResponse(prevResponse)) {
- xhr.returnCustomResponse = true;
- }
- response = prevResponse || response;
- return afterResponseFuncs[i2](response, xhr.openConfig);
- });
- }
- xhr.globalPromise = xhr.globalPromise.then((prevResponse) => {
- if (isHTTPResponse(prevResponse)) {
- xhr.returnCustomResponse = true;
- }
- response = prevResponse || response;
- if (xhr.returnCustomResponse) {
- xhr.customResponse = response;
- }
- if (xhr.status === 0) {
- return;
- }
- });
- }
- open(method, url, async, username, password) {
- this.openConfig = {
- ...this.openConfig,
- method,
- url: url.toString(),
- originConfig: {
- async,
- username,
- password
- }
- };
- this.hasOpened = true;
- }
- send(body) {
- this.globalPromise = this.globalPromise.then(() => this.openConfig);
- this.openConfig.body = body;
- const xhr = this;
- for (let i2 = 0; i2 < beforeRequestFuncs.length; i2++) {
- this.globalPromise = this.globalPromise.then((prevReturn) => {
- if (prevReturn && prevReturn["type"] === "HTTPResponse") {
- throw prevReturn;
- }
- if (prevReturn && (prevReturn == null ? undefined : prevReturn["type"]) === "RequestInit") {
- this.openConfig = prevReturn;
- }
- return beforeRequestFuncs[i2](this.openConfig, xhr);
- });
- }
- this.globalPromise.then((prevReturn) => {
- if (prevReturn && prevReturn["type"] === "RequestInit") {
- this.openConfig = prevReturn;
- }
- if (this.openConfig.credentials === "include") {
- super.withCredentials = true;
- } else {
- super.withCredentials = false;
- }
- if (this.openConfig.originConfig.async === undefined) {
- super.open(this.openConfig.method, this.openConfig.url);
- } else {
- super.open(
- this.openConfig.method,
- this.openConfig.url,
- this.openConfig.originConfig.async,
- this.openConfig.originConfig.username,
- this.openConfig.originConfig.password
- );
- }
- if (this.openConfig.headers) {
- for (const headerKey in this.openConfig.headers) {
- super.setRequestHeader(
- headerKey,
- this.openConfig.headers[headerKey]
- );
- }
- }
- if (prevReturn && prevReturn["type"] === "HTTPResponse") {
- throw prevReturn;
- }
- return prevReturn;
- }).then(() => {
- super.send(this.openConfig.body);
- }).catch((customRes) => {
- xhr.returnCustomResponse = true;
- xhr.customResponse = customRes;
- xhr.customReadyState = 4;
- Object.defineProperty(xhr, "readyState", {
- get: () => xhr.customReadyState,
- configurable: true,
- enumerable: true
- });
- xhr.dispatchEvent(
- new Event("readystatechange", { bubbles: false })
- );
- });
- }
- setRequestHeader(name, value) {
- if (!this.hasOpened) {
- super.setRequestHeader(name, value);
- return;
- }
- const headers = this.openConfig.headers || {};
- this.openConfig.headers = {
- ...headers
- };
- this.openConfig.headers[name] = value;
- }
- getAllResponseHeaders() {
- if (this.returnCustomResponse && "headers" in this.customResponse) {
- const headers = this.customResponse.headers;
- if (headers === undefined) {
- return "";
- }
- return Object.entries(headers).map((headerEntry) => `${headerEntry[0]}: ${headerEntry[1]}`).join("\n");
- }
- return super.getAllResponseHeaders();
- }
- getResponseHeader(name) {
- if (this.returnCustomResponse && "headers" in this.customResponse) {
- const headers = this.customResponse.headers;
- if (headers === undefined) {
- return null;
- }
- return headers[name] || null;
- }
- return super.getResponseHeader(name);
- }
- static parseAllHeaders(headers) {
- const record = {};
- headers.split("\n").forEach((header) => {
- const [key, value] = header.split(":");
- record[key] = value;
- });
- return record;
- }
- }
- const beforeRequestFuncs = [];
- const afterResponseFuncs = [];
- const receiveErrorFuncs = [];
- const defineResponse = (response) => {
- return {
- ...response,
- type: "HTTPResponse"
- };
- };
- const addAfterResponseInterceptor = (afterResponse) => {
- afterResponseFuncs.push(afterResponse);
- };
- const isHTTPResponse = (obj) => {
- return obj && obj.type === "HTTPResponse";
- };
- let originXHR = null;
- const intercept = (win) => {
- const global2 = win || window;
- if (!originXHR) {
- originXHR = global2.XMLHttpRequest;
- }
- global2.XMLHttpRequest = XHRInterceptor;
- global2.fetch = FetchInterceptor;
- };
- const commonBasicItems$6 = [
- {
- type: "switch",
- id: "jabletv-remove-ads",
- name: i18n.language.jabletv.common.basic.remove_ads,
- defaultEnable: true,
- enableFn: () => {
- _unsafeWindow.asgAdgptLoaded = true;
- addAfterResponseInterceptor(
- async (response, requestInit) => {
- var _a;
- if ((_a = requestInit.url) == null ? undefined : _a.includes(
- "https://s.magsrv.com/splash.php"
- )) {
- return defineResponse({
- ...response,
- response: '{"data":[],"ext":[],"layout":{}}'
- });
- }
- return defineResponse(response);
- }
- );
- }
- },
- {
- type: "switch",
- id: "jabletv-hide-footer",
- name: i18n.language.jabletv.common.basic.hide_footer,
- defaultEnable: true
- }
- ];
- const commonHeaderItems$5 = [
- {
- type: "switch",
- id: "jabletv-common-header-hide-logo",
- name: i18n.language.jabletv.common.header.hide_logo
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-new",
- name: i18n.language.jabletv.common.header.hide_new
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-blu-ray",
- name: i18n.language.jabletv.common.header.hide_blu_ray,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-live-sex",
- name: i18n.language.jabletv.common.header.hide_live_sex,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-best-porns",
- name: i18n.language.jabletv.common.header.hide_best_porns,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-more-sites",
- name: i18n.language.jabletv.common.header.hide_more_sites,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-sex-chat",
- name: i18n.language.jabletv.common.header.hide_sex_chat,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-javhd",
- name: i18n.language.jabletv.common.header.hide_javhd,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-search",
- name: i18n.language.jabletv.common.header.hide_search
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-lang",
- name: i18n.language.jabletv.common.header.hide_lang
- },
- {
- type: "switch",
- id: "jabletv-common-header-hide-settings",
- name: i18n.language.jabletv.common.header.hide_settings
- }
- ];
- const commonGroups$6 = [
- {
- name: i18n.language.jabletv.common.basic.name,
- fold: true,
- items: commonBasicItems$6
- },
- {
- name: i18n.language.jabletv.common.header.name,
- fold: true,
- items: commonHeaderItems$5
- }
- ];
- const homepageBasicItems = [
- {
- type: "switch",
- id: "jabletv-home-page-hide-video-carousel",
- name: i18n.language.jabletv.home.basic.hide_video_carousel,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-home-page-hide-section-sub-title",
- name: i18n.language.jabletv.home.basic.hide_section_sub_title,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-blur-video-image",
- name: i18n.language.jabletv.home.basic.blur_video_image,
- description: i18n.language.jabletv.home.basic.blur_video_image_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-blur-video-title",
- name: i18n.language.jabletv.home.basic.blur_video_title,
- description: i18n.language.jabletv.home.basic.blur_video_title_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-likes",
- name: i18n.language.jabletv.home.basic.hide_video_like,
- description: i18n.language.jabletv.home.basic.hide_video_like_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-duration",
- name: i18n.language.jabletv.home.basic.hide_video_duration,
- description: i18n.language.jabletv.home.basic.hide_video_duration_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-revert-full-title",
- name: i18n.language.jabletv.home.basic.revert_full_title,
- description: i18n.language.jabletv.home.basic.revert_full_title_description,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-data",
- name: i18n.language.jabletv.home.basic.hide_video_data,
- description: i18n.language.jabletv.home.basic.hide_video_data_description,
- defaultEnable: true
- }
- ];
- const homepageGroups = [
- {
- name: i18n.language.jabletv.home.basic.name,
- items: homepageBasicItems
- }
- ];
- const searchBasicItems$1 = [
- {
- type: "switch",
- id: "jabletv-home-page-basic-blur-video-image",
- name: i18n.language.jabletv.home.basic.blur_video_image,
- description: i18n.language.jabletv.home.basic.blur_video_image_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-blur-video-title",
- name: i18n.language.jabletv.home.basic.blur_video_title,
- description: i18n.language.jabletv.home.basic.blur_video_title_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-likes",
- name: i18n.language.jabletv.home.basic.hide_video_like,
- description: i18n.language.jabletv.home.basic.hide_video_like_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-duration",
- name: i18n.language.jabletv.home.basic.hide_video_duration,
- description: i18n.language.jabletv.home.basic.hide_video_duration_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-revert-full-title",
- name: i18n.language.jabletv.home.basic.revert_full_title,
- description: i18n.language.jabletv.home.basic.revert_full_title_description,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-data",
- name: i18n.language.jabletv.home.basic.hide_video_data,
- description: i18n.language.jabletv.home.basic.hide_video_data_description,
- defaultEnable: true
- }
- ];
- const searchGroups$1 = [
- {
- name: "搜索页-基本功能",
- items: searchBasicItems$1
- }
- ];
- const videoBasicItems$2 = [
- {
- type: "switch",
- id: "jabletv-home-page-basic-blur-video-image",
- name: i18n.language.jabletv.home.basic.blur_video_image,
- description: i18n.language.jabletv.home.basic.blur_video_image_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-blur-video-title",
- name: i18n.language.jabletv.home.basic.blur_video_title,
- description: i18n.language.jabletv.home.basic.blur_video_title_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-likes",
- name: i18n.language.jabletv.home.basic.hide_video_like,
- description: i18n.language.jabletv.home.basic.hide_video_like_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-duration",
- name: i18n.language.jabletv.home.basic.hide_video_duration,
- description: i18n.language.jabletv.home.basic.hide_video_duration_description
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-revert-full-title",
- name: i18n.language.jabletv.home.basic.revert_full_title,
- description: i18n.language.jabletv.home.basic.revert_full_title_description,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-home-page-basic-hide-video-data",
- name: i18n.language.jabletv.home.basic.hide_video_data,
- description: i18n.language.jabletv.home.basic.hide_video_data_description,
- defaultEnable: true
- }
- ];
- const videoPlayerItems$2 = [
- {
- type: "switch",
- id: "jabletv-video-page-auto-fix-player",
- name: "修补 播放器",
- description: ["去除播放广告、开启更多控制"],
- noStyle: true,
- defaultEnable: true,
- enableFn: () => {
- var _a;
- const video = document.querySelector("video");
- const hlsUrl = _unsafeWindow.hlsUrl;
- const hasVtt = _unsafeWindow.hasVtt;
- const vttUrl = _unsafeWindow.vttUrl;
- if ((_a = _unsafeWindow.Hls) == null ? undefined : _a.isSupported()) {
- const hls = new _unsafeWindow.Hls({
- autoStartLoad: true,
- maxBufferSize: 1 * 1e3 * 1e3
- });
- hls.loadSource(hlsUrl);
- hls.attachMedia(video);
- } else {
- video.src = hlsUrl;
- }
- const playerSettings = {
- ratio: "16:9",
- controls: [
- "play-large",
- "rewind",
- "play",
- "fast-forward",
- "progress",
- "current-time",
- "duration",
- "mute",
- "captions",
- "settings",
- "pip",
- "fullscreen",
- "volume",
- "quality"
- ],
- fullscreen: {
- enabled: true,
- fallback: true,
- iosNative: true,
- container: null
- },
- speed: {
- selected: 1,
- options: [
- 0.25,
- 0.5,
- 1,
- 1.25,
- 1.5,
- 2,
- 2.5,
- 3,
- 3.5,
- 4,
- 4.5,
- 5
- ]
- },
- i18n: {
- speed: "速度",
- normal: "普通",
- quality: "画质",
- qualityLabel: {
- 0: "自动"
- }
- },
- previewThumbnails: { enabled: hasVtt, src: vttUrl },
- keyboard: {
- focused: true,
- global: true
- }
- };
- _unsafeWindow.player = new _unsafeWindow.Plyr(video, {
- quality: {
- forced: true
- },
- playerSettings
- });
- },
- enableFnRunAt: "document-end"
- },
- {
- type: "switch",
- id: "jabletv-video-page-auto-bpx-player-quality",
- name: "自动 最高画质",
- defaultEnable: true,
- enableFn: () => {
- var _a, _b;
- const player = _unsafeWindow.player;
- if (!player) return;
- if (!((_b = (_a = player.config) == null ? undefined : _a.quality) == null ? undefined : _b.options)) return;
- const maxQuality = Math.max.apply(
- null,
- player.config.quality.options
- );
- player.quality = maxQuality;
- player.config.quality.default = maxQuality;
- player.config.quality.selected = maxQuality;
- const plyr = localStorage.getItem("plyr");
- if (plyr) {
- const plyrData = JSON.parse(plyr);
- plyrData["quality"] = player.quality;
- localStorage.setItem("plyr", JSON.stringify(plyrData));
- }
- },
- enableFnRunAt: "document-end"
- },
- {
- type: "number",
- id: "jabletv-video-page-bpx-player-speed",
- name: "修改 播放速度(-1禁用)",
- description: ["上下方向键快速调整"],
- addonText: "倍",
- minValue: 0.5,
- maxValue: 10,
- step: 0.5,
- defaultValue: -1,
- disableValue: -1,
- fn: async (value) => {
- const player = _unsafeWindow.player;
- if (!player) return;
- player.speed = value;
- const plyr = localStorage.getItem("plyr");
- if (plyr) {
- const plyrData = JSON.parse(plyr);
- plyrData["speed"] = player.speed;
- localStorage.setItem("plyr", JSON.stringify(plyrData));
- }
- }
- },
- {
- type: "number",
- id: "jabletv-video-page-bpx-player-volume",
- name: "修改 播放音量(-1禁用)",
- description: ["上下方向键快速调整"],
- addonText: "%",
- minValue: 0,
- maxValue: 100,
- step: 5,
- defaultValue: -1,
- disableValue: -1,
- fn: (value) => {
- const player = _unsafeWindow.player;
- if (!player) return;
- player.volume = value / 100;
- const plyr = localStorage.getItem("plyr");
- if (plyr) {
- const plyrData = JSON.parse(plyr);
- plyrData["volume"] = player.volume;
- localStorage.setItem("plyr", JSON.stringify(plyrData));
- }
- }
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-state-wrap",
- name: "隐藏 视频暂停时大播放键"
- }
- ];
- const videoPlayerControlItems$1 = [
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-play",
- name: "隐藏 播放/暂停按钮"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-progress",
- name: "隐藏 进度条"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-time",
- name: "隐藏 进度时间"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-volume",
- name: "隐藏 音量按钮"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-setting",
- name: "隐藏 视频设置按钮"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-pip",
- name: "隐藏 画中画按钮"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-bpx-player-ctrl-full",
- name: "隐藏 全屏按钮"
- }
- ];
- const _hoisted_1$1 = { class: "m3u8-span" };
- const _hoisted_2 = ["onUpdate:modelValue"];
- const _hoisted_3 = ["onClick"];
- const _hoisted_4 = ["onClick"];
- const _sfc_main$1 = /* @__PURE__ */ e$1.defineComponent({
- __name: "M3U8Comp",
- props: {
- m3u8s: {}
- },
- setup(__props) {
- const openUrl = (url) => {
- window.open(url, "_blank");
- };
- const copyUrl = (url) => {
- navigator.clipboard.writeText(url || "").then().catch();
- };
- return (_ctx, _cache) => {
- return e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(_ctx.m3u8s, (m3u8, index) => {
- return e$1.openBlock(), e$1.createElementBlock("div", {
- class: "m3u8-input-group",
- key: index
- }, [
- e$1.createElementVNode("span", _hoisted_1$1, e$1.toDisplayString(_ctx.m3u8s[index].title), 1),
- e$1.withDirectives(e$1.createElementVNode("input", {
- "onUpdate:modelValue": ($event) => _ctx.m3u8s[index].url = $event,
- type: "text",
- class: "m3u8-input"
- }, null, 8, _hoisted_2), [
- [e$1.vModelText, _ctx.m3u8s[index].url]
- ]),
- e$1.createElementVNode("input", {
- class: "m3u8-button--open",
- onClick: ($event) => openUrl(_ctx.m3u8s[index].url),
- value: "Open",
- type: "submit"
- }, null, 8, _hoisted_3),
- e$1.createElementVNode("input", {
- class: "m3u8-button--copy",
- onClick: ($event) => copyUrl(_ctx.m3u8s[index].url),
- value: "Copy",
- type: "submit"
- }, null, 8, _hoisted_4)
- ]);
- }), 128);
- };
- }
- });
- const _export_sfc = (sfc, props) => {
- const target = sfc.__vccOpts || sfc;
- for (const [key, val] of props) {
- target[key] = val;
- }
- return target;
- };
- const M3U8Comp = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-70ae07f7"]]);
- const videoToolbarItems$2 = [
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-data",
- name: "隐藏 视频数据",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-tips",
- name: "隐藏 视频发布提醒"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-type-time",
- name: "隐藏 视频类型&发布时间",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-fav",
- name: "隐藏 视频点赞",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-mark",
- name: "隐藏 视频收藏",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-video-page-show-below-info-m3u8",
- name: "获取 M3U8",
- description: ["截取并显示m3u8, 可使用其他播放器播放"],
- noStyle: true,
- enableFnRunAt: "document-end",
- enableFn: () => {
- if (!_unsafeWindow.hlsUrl) return;
- const m3u8Panle = e$1.createApp(M3U8Comp, {
- m3u8s: [{ title: "m3u8", url: _unsafeWindow.hlsUrl }]
- });
- m3u8Panle.mount(
- (() => {
- var _a;
- const node = document.createElement("div");
- node.id = "div-m3u8s";
- (_a = document.querySelector("section.video-info > div.text-center")) == null ? undefined : _a.appendChild(node);
- return node;
- })()
- );
- },
- disableFn: () => {
- const node = document.querySelector("#div-m3u8s");
- if (node) node.remove();
- }
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-more",
- name: "隐藏 视频更多",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-tags",
- name: "隐藏 视频标签"
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-new-comment",
- name: "隐藏 发布新评论",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "jabletv-video-page-hide-below-info-comments",
- name: "隐藏 视频留言"
- }
- ];
- const videoGroups$3 = [
- {
- name: i18n.language.jabletv.video.basic.name,
- fold: true,
- items: videoBasicItems$2
- },
- {
- name: i18n.language.jabletv.video.player.name,
- fold: true,
- items: videoPlayerItems$2
- },
- {
- name: i18n.language.jabletv.video.playerContorl.name,
- fold: true,
- items: videoPlayerControlItems$1
- },
- {
- name: i18n.language.jabletv.video.toolbar.name,
- fold: true,
- items: videoToolbarItems$2
- }
- ];
- const commonStyle$6 = 'html[jabletv-remove-ads] div.plyr__ads,html[jabletv-remove-ads] div:has(>div>img[src="//cdn.tapioni.com/ab-banner.png"]),html[jabletv-remove-ads] div.asg-interstitial:has(>div>iframe),html[jabletv-remove-ads] section>div.row>div:has(>div>div.detail>h6>a[href^="https://go."]),html[jabletv-remove-ads] #site-content>div.container>section:has(>div>div>iframe),html[jabletv-remove-ads] #site-content>div.container>section:has(>div>div>img[src*=".afcdn.net"]),html[jabletv-remove-ads] div.row>div:has(div[id^=exo-native-widget-]),html[jabletv-remove-ads] section.video-info>div.text-center>ins,html[jabletv-remove-ads] section.video-info>div.text-center>div:has(>div>iframe),html[jabletv-remove-ads] div.text-center>a[href^="http://s."],html[jabletv-remove-ads] div.row>div:has(>div[id^=exoNativeWidget]),html[jabletv-remove-ads] div.row>div:has(h6>a[href^="https://r."]),html[jabletv-remove-ads] #site-content>div.container>section:has(>iframe),html[jabletv-remove-ads] section.video-info>div.text-center>iframe,html[jabletv-remove-ads] #site-content>div>div>div.col.right-sidebar>div.text-center>iframe,html[jabletv-remove-ads] body>div[class^=root--],html[jabletv-remove-ads] div[id^=asg-],html[jabletv-remove-ads] #site-content>div.container>section:has(>a[target=_blank]>img),html[jabletv-remove-ads] body>div.h5.text-center:has(>span):has(>a[target=_blank]){display:none!important}html[jabletv-hide-footer] #site-footer{display:none!important}html[jabletv-common-header-hide-logo] #site-header>div>div>div:has(>a.logo){visibility:hidden!important}html[jabletv-common-header-hide-new] #site-header>div>div>div>nav>div>ul>li:has(a[href="/new-release/"]){display:none!important}html[jabletv-common-header-hide-blu-ray] body>nav>div.container>div.row>div:has(a[href^="https://r."]),html[jabletv-common-header-hide-blu-ray] #site-header>div>div>div>nav>div>ul>li:has(a[href^="https://r."]){display:none!important}html[jabletv-common-header-hide-live-sex] body>nav>div.container>div.row>div:has(a[href^="https://go."]),html[jabletv-common-header-hide-live-sex] #site-header>div>div>div>nav>div>ul>li:has(a[href^="https://go."]){display:none!important}html[jabletv-common-header-hide-best-porns] body>nav>div.container>div.row>div:has(a[href="https://141jj.com"]),html[jabletv-common-header-hide-best-porns] #site-header>div>div>div>nav>div>ul>li:has(a[href="https://141jj.com"]){display:none!important}html[jabletv-common-header-hide-more-sites] body>nav>div.container>div.row>div:has(a[href^="https://theporndude.com"]),html[jabletv-common-header-hide-more-sites] #site-header>div>div>div>nav>div>ul>li:has(a[href^="https://theporndude.com"]){display:none!important}html[jabletv-common-header-hide-sex-chat] body>nav>div.container>div.row>div:has(a[href="https://uuw73.com"]),html[jabletv-common-header-hide-sex-chat] #site-header>div>div>div>nav>div>ul>li:has(a[href="https://uuw73.com"]){display:none!important}html[jabletv-common-header-hide-javhd] body>nav>div.container>div.row>div:has(a[href^="https://enter."]),html[jabletv-common-header-hide-javhd] #site-header>div>div>div>nav>div>ul>li:has(a[href^="https://enter."]){display:none!important}html[jabletv-common-header-hide-search] #site-header>div>div>div.col-auto.header-right>div.search{display:none!important}html[jabletv-common-header-hide-lang] #site-header>div>div>div.header-right>div.lang{display:none!important}html[jabletv-common-header-hide-settings] #site-header>div>div>div.header-right>div.settings{display:none!important}';
- const homepageStyle = "html[jabletv-home-page-basic-blur-video-image] div.video-img-box>div.img-box>a>img{filter:blur(5px)}html[jabletv-home-page-basic-blur-video-title] div.video-img-box>div.detail>h6.title>a{filter:blur(5px)}html[jabletv-home-page-basic-hide-video-likes] div.video-img-box>div.img-box>a>div.absolute-bottom-left{display:none!important}html[jabletv-home-page-basic-hide-video-duration] div.video-img-box>div.img-box>a>div.absolute-bottom-right{display:none!important}html[jabletv-home-page-basic-revert-full-title] div.video-img-box>div.detail>h6.title:has(>a){white-space:normal!important;max-height:none!important}html[jabletv-home-page-basic-hide-video-data] div.video-img-box>div.detail>p.sub-title{display:none!important}html[jabletv-home-page-hide-video-carousel] #site-content>div.jable-carousel.jable-animate{display:none!important}html[jabletv-home-page-hide-section-sub-title] #site-content>div.container>section>div>div>div.title-with-more>div.title-box>h6.sub-title.inactive-color,html[jabletv-home-page-hide-section-sub-title] #site-content>div.container>section>div.title-with-more>div.title-box>h6.sub-title.inactive-color{display:none!important}";
- const searchStyle$1 = "html[jabletv-home-page-basic-blur-video-image] div.video-img-box>div.img-box>a>img{filter:blur(5px)}html[jabletv-home-page-basic-blur-video-title] div.video-img-box>div.detail>h6.title>a{filter:blur(5px)}html[jabletv-home-page-basic-hide-video-likes] div.video-img-box>div.img-box>a>div.absolute-bottom-left{display:none!important}html[jabletv-home-page-basic-hide-video-duration] div.video-img-box>div.img-box>a>div.absolute-bottom-right{display:none!important}html[jabletv-home-page-basic-revert-full-title] div.video-img-box>div.detail>h6.title:has(>a){white-space:normal!important;max-height:none!important}html[jabletv-home-page-basic-hide-video-data] div.video-img-box>div.detail>p.sub-title{display:none!important}";
- const videoStyle$3 = "html[jabletv-home-page-basic-blur-video-image] div.video-img-box>div.img-box>a>img{filter:blur(5px)}html[jabletv-home-page-basic-blur-video-title] div.video-img-box>div.detail>h6.title>a{filter:blur(5px)}html[jabletv-home-page-basic-hide-video-likes] div.video-img-box>div.img-box>a>div.absolute-bottom-left{display:none!important}html[jabletv-home-page-basic-hide-video-duration] div.video-img-box>div.img-box>a>div.absolute-bottom-right{display:none!important}html[jabletv-home-page-basic-revert-full-title] div.video-img-box>div.detail>h6.title:has(>a){white-space:normal!important;max-height:none!important}html[jabletv-home-page-basic-hide-video-data] div.video-img-box>div.detail>p.sub-title{display:none!important}html[jabletv-video-page-hide-bpx-player-state-wrap] div.plyr button.plyr__control--overlaid[data-plyr=play]:has(span.plyr__sr-only){display:none!important}html[jabletv-video-page-hide-bpx-player-ctrl-play] div.plyr__controls button.plyr__controls__item[data-plyr=play],html[jabletv-video-page-hide-bpx-player-ctrl-progress] div.plyr__controls div.plyr__controls__item.plyr__progress__container,html[jabletv-video-page-hide-bpx-player-ctrl-time] div.plyr__controls div.plyr__controls__item.plyr__time--current.plyr__time{display:none!important}html[jabletv-video-page-hide-bpx-player-ctrl-volume] div.plyr__controls div.plyr__controls__item.plyr__volume:has(button[data-plyr=mute]){display:none!important}html[jabletv-video-page-hide-bpx-player-ctrl-setting] div.plyr__controls div.plyr__controls__item.plyr__menu:has(button[data-plyr=settings]){display:none!important}html[jabletv-video-page-hide-bpx-player-ctrl-pip] div.plyr__controls button.plyr__controls__item[data-plyr=pip],html[jabletv-video-page-hide-bpx-player-ctrl-full] div.plyr__controls button.plyr__controls__item[data-plyr=fullscreen]{display:none!important}html[jabletv-video-page-hide-below-info-data] section.video-info>div.info-header>div.header-left>h6{display:none!important}html[jabletv-video-page-hide-below-info-tips] section.video-info>h5.desc{display:none!important}html[jabletv-video-page-hide-below-info-type-time] section.video-info>div.info-header>div.header-right{display:none!important}html[jabletv-video-page-hide-below-info-fav] section.video-info>div.text-center>div>button:has(>span.count){display:none!important}html[jabletv-video-page-hide-below-info-mark] section.video-info>div.text-center>div>button:nth-child(2){display:none!important}html[jabletv-video-page-hide-below-info-more] section.video-info>div.text-center>div>button[data-toggle=dropdown]{display:none!important}html[jabletv-video-page-hide-below-info-tags] section.video-info>div.text-center>h5.tags{display:none!important}html[jabletv-video-page-hide-below-info-new-comment] section.comments>div.new-comment{display:none!important}html[jabletv-video-page-hide-below-info-comments] #video_comments_video_comments{display:none!important}";
- const rules$7 = [
- {
- name: "javletv-homepage",
- groups: homepageGroups,
- style: homepageStyle,
- checkFn: () => isPageJableTvHomepage()
- },
- {
- name: "javletv-video",
- groups: videoGroups$3,
- style: videoStyle$3,
- checkFn: () => isPageJableTvVideo()
- },
- {
- name: "javletv-search",
- groups: searchGroups$1,
- style: searchStyle$1,
- checkFn: () => isPageJableTvSearch()
- },
- {
- name: "javletv-common",
- groups: commonGroups$6,
- style: commonStyle$6,
- isSpecial: true,
- checkFn: () => isPageJableTv()
- }
- ];
- const commonBasicItems$5 = [
- {
- type: "switch",
- id: "missav-common-basic-remove-ads",
- name: i18n.language.missav.common.basic.remove_ads,
- defaultEnable: true,
- enableFn: () => {
- document.addEventListener("alpine:init", () => {
- log("alpine:init");
- });
- document.addEventListener("alpine:initializing", () => {
- log("alpine:initializing");
- });
- document.addEventListener("alpine:initialized", () => {
- var _a;
- log("alpine:initialized");
- const iframes = document.querySelectorAll("iframe[data-src]");
- for (const iframe of iframes) {
- iframe.remove();
- log("remove iframe");
- }
- (_a = document.querySelector("#html-ads")) == null ? undefined : _a.remove();
- });
- }
- },
- {
- type: "switch",
- id: "missav-common-basic-hide-footer",
- name: i18n.language.missav.common.basic.hide_footer,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-basic-hide-new-site-banner",
- name: i18n.language.missav.common.basic.hide_new_site_banner,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-basic-redirect-new-url",
- name: i18n.language.missav.common.basic.redirect_new_url,
- defaultEnable: true,
- noStyle: true,
- enableFn: () => {
- if (location.host === "missav.com") {
- const newHref = location.href.replace(
- "missav.com",
- "missav.ws"
- );
- location.href = newHref;
- }
- }
- },
- {
- type: "editor",
- id: "missav-common-basic-auto-login-email-password",
- name: i18n.language.missav.common.basic.auto_login_email_password,
- description: i18n.language.missav.common.basic.auto_login_email_password_description,
- editorTitle: i18n.language.missav.common.basic.auto_login_email_password_editorTitle,
- editorDescription: i18n.language.missav.common.basic.auto_login_email_password_editorDescription,
- saveFn: () => {
- }
- },
- {
- type: "switch",
- id: "missav-common-basic-auto-login",
- name: i18n.language.missav.common.basic.auto_login,
- noStyle: true,
- enableFn: () => {
- document.addEventListener("alpine:init", () => {
- const div = document.querySelector(
- `body > div > div[x-show="showModal.login"] > div[x-data]`
- );
- if (!div) return;
- const info = PGStorage.get(
- "missav-common-basic-auto-login-email-password",
- []
- );
- if (!info) return;
- const [email, password] = info;
- if (!email || !password) return;
- div.setAttribute(
- "x-init",
- `$nextTick(()=>{email=${email};password=${password};console.log('login',{email:email,password:password});login();});`
- );
- });
- }
- }
- // {
- // type: 'list',
- // id: 'missav-common-basic-web-locale',
- // name: '网站地区',
- // defaultValue: 'en',
- // disableValue: '',
- // options: [
- // {
- // id: 'cn',
- // name: 'cn',
- // },
- // {
- // id: 'en',
- // name: 'en',
- // },
- // {
- // id: 'ja',
- // name: 'ja',
- // },
- // {
- // id: 'ko',
- // name: 'ko',
- // },
- // {
- // id: 'ms',
- // name: 'ms',
- // },
- // {
- // id: 'th',
- // name: 'th',
- // },
- // {
- // id: 'de',
- // name: 'de',
- // },
- // {
- // id: 'fr',
- // name: 'fr',
- // },
- // {
- // id: 'vi',
- // name: 'vi',
- // },
- // {
- // id: 'id',
- // name: 'id',
- // },
- // {
- // id: 'fil',
- // name: 'fil',
- // },
- // {
- // id: 'pt',
- // name: 'pt',
- // },
- // ],
- // fn: (id:string) => {
- // // const fallbackLocale = 'zh';
- // function removeTrailingSlash(url: string) {
- // if (url.substr(url.length - 1) === '/') {
- // return url.slice(0, -1);
- // }
- // return url.replace('/?', '?');
- // }
- // function localizedUrl(locale: string) {
- // let path = window.location.pathname;
- // if (!path.endsWith('/')) {
- // path = `${path}/`;
- // }
- // path = path + window.location.search;
- // // if (locale === this.fallbackLocale) {
- // // return removeTrailingSlash(
- // // path
- // // .replace('/cn/', '/')
- // // .replace('/en/', '/')
- // // .replace('/ja/', '/')
- // // .replace('/ko/', '/')
- // // .replace('/ms/', '/')
- // // .replace('/th/', '/')
- // // .replace('/de/', '/')
- // // .replace('/fr/', '/')
- // // .replace('/vi/', '/')
- // // .replace('/id/', '/')
- // // .replace('/fil/', '/')
- // // .replace('/pt/', '/'),
- // // );
- // // }
- // if (
- // path.includes('/cn/') ||
- // path.includes('/en/') ||
- // path.includes('/ja/') ||
- // path.includes('/ko/') ||
- // path.includes('/ms/') ||
- // path.includes('/th/') ||
- // path.includes('/de/') ||
- // path.includes('/fr/') ||
- // path.includes('/vi/') ||
- // path.includes('/id/') ||
- // path.includes('/fil/') ||
- // path.includes('/pt/')
- // ) {
- // return removeTrailingSlash(
- // path
- // .replace('/cn/', `/${locale}/`)
- // .replace('/en/', `/${locale}/`)
- // .replace('/ja/', `/${locale}/`)
- // .replace('/ko/', `/${locale}/`)
- // .replace('/ms/', `/${locale}/`)
- // .replace('/th/', `/${locale}/`)
- // .replace('/de/', `/${locale}/`)
- // .replace('/fr/', `/${locale}/`)
- // .replace('/vi/', `/${locale}/`)
- // .replace('/id/', `/${locale}/`)
- // .replace('/fil/', `/${locale}/`)
- // .replace('/pt/', `/${locale}/`),
- // );
- // }
- // return removeTrailingSlash(`/${locale}${path}`);
- // }
- // window.location.href = localizedUrl(id);
- // },
- // },
- // {
- // type:'switch',
- // id:'missav-common-basic-auto-web-locale',
- // name:'自动 切换地区',
- // noStyle:true,
- // enableFn:()=> {
- // function removeTrailingSlash(url: string) {
- // if (url.substr(url.length - 1) === '/') {
- // return url.slice(0, -1);
- // }
- // return url.replace('/?', '?');
- // }
- // function localizedUrl(locale: string) {
- // let path = window.location.pathname;
- // if (!path.endsWith('/')) {
- // path = `${path}/`;
- // }
- // path = path + window.location.search;
- // // if (locale === this.fallbackLocale) {
- // // return removeTrailingSlash(
- // // path
- // // .replace('/cn/', '/')
- // // .replace('/en/', '/')
- // // .replace('/ja/', '/')
- // // .replace('/ko/', '/')
- // // .replace('/ms/', '/')
- // // .replace('/th/', '/')
- // // .replace('/de/', '/')
- // // .replace('/fr/', '/')
- // // .replace('/vi/', '/')
- // // .replace('/id/', '/')
- // // .replace('/fil/', '/')
- // // .replace('/pt/', '/'),
- // // );
- // // }
- // if (
- // path.includes('/cn/') ||
- // path.includes('/en/') ||
- // path.includes('/ja/') ||
- // path.includes('/ko/') ||
- // path.includes('/ms/') ||
- // path.includes('/th/') ||
- // path.includes('/de/') ||
- // path.includes('/fr/') ||
- // path.includes('/vi/') ||
- // path.includes('/id/') ||
- // path.includes('/fil/') ||
- // path.includes('/pt/')
- // ) {
- // return removeTrailingSlash(
- // path
- // .replace('/cn/', `/${locale}/`)
- // .replace('/en/', `/${locale}/`)
- // .replace('/ja/', `/${locale}/`)
- // .replace('/ko/', `/${locale}/`)
- // .replace('/ms/', `/${locale}/`)
- // .replace('/th/', `/${locale}/`)
- // .replace('/de/', `/${locale}/`)
- // .replace('/fr/', `/${locale}/`)
- // .replace('/vi/', `/${locale}/`)
- // .replace('/id/', `/${locale}/`)
- // .replace('/fil/', `/${locale}/`)
- // .replace('/pt/', `/${locale}/`),
- // );
- // }
- // return removeTrailingSlash(`/${locale}${path}`);
- // }
- // window.location.href = localizedUrl(PGStorage.get('missav-common-basic-web-locale','zh'));
- // },
- // }
- ];
- const commonHeaderRightItems = [
- {
- type: "switch",
- id: "missav-common-header-hide-logo",
- name: i18n.language.missav.common.header.hide_logo
- },
- {
- type: "switch",
- id: "missav-common-header-hide-live-cam-sex",
- name: i18n.language.missav.common.header.hide_live_cam_sex,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-header-hide-comic",
- name: i18n.language.missav.common.header.hide_comic,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-header-hide-subtitle",
- name: i18n.language.missav.common.header.hide_subtitle
- },
- {
- type: "switch",
- id: "missav-common-header-hide-watch-jav",
- name: i18n.language.missav.common.header.hide_watch_jav
- },
- {
- type: "switch",
- id: "missav-common-header-hide-amateur",
- name: i18n.language.missav.common.header.hide_amateur
- },
- {
- type: "switch",
- id: "missav-common-header-hide-uncensored",
- name: i18n.language.missav.common.header.hide_uncensored
- },
- {
- type: "switch",
- id: "missav-common-header-hide-asia-av",
- name: i18n.language.missav.common.header.hide_asia_av
- },
- {
- type: "switch",
- id: "missav-common-header-hide-my-collection",
- name: i18n.language.missav.common.header.hide_my_collection
- },
- {
- type: "switch",
- id: "missav-common-header-hide-upgrade-vip",
- name: i18n.language.missav.common.header.hide_upgrade_vip,
- description: i18n.language.missav.common.header.hide_upgrade_vip_description,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-header-hide-more-sites",
- name: i18n.language.missav.common.header.hide_more_sites,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-header-hide-tg",
- name: i18n.language.missav.common.header.hide_tg,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-header-hide-search",
- name: i18n.language.missav.common.header.hide_search
- },
- {
- type: "switch",
- id: "missav-common-header-hide-locale-switcher",
- name: i18n.language.missav.common.header.hide_locale_switcher
- },
- {
- type: "switch",
- id: "missav-common-header-hide-site-live",
- name: i18n.language.missav.common.header.hide_site_live,
- description: i18n.language.missav.common.header.hide_site_live_description,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-common-header-hide-mobile-right-menu",
- name: i18n.language.missav.common.header.hide_mobile_right_menu,
- description: i18n.language.missav.common.header.hide_mobile_right_menu_description
- }
- ];
- const commonGroups$5 = [
- {
- name: i18n.language.missav.common.basic.name,
- fold: true,
- items: commonBasicItems$5
- },
- {
- name: i18n.language.missav.common.header.name,
- fold: true,
- items: commonHeaderRightItems
- }
- ];
- const homeBasicItems = [
- {
- type: "switch",
- id: "missav-home-page-basic-hide-search-title",
- name: i18n.language.missav.home.basic.hide_search_title,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-search-box",
- name: i18n.language.missav.home.basic.hide_search_box
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-search-history",
- name: i18n.language.missav.home.basic.hide_search_history
- },
- {
- type: "switch",
- id: "missav-home-page-basic-blur-video-image",
- name: i18n.language.missav.home.basic.blur_video_image,
- description: i18n.language.missav.home.basic.blur_video_image_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-blur-video-title",
- name: i18n.language.missav.home.basic.blur_video_title,
- description: i18n.language.missav.home.basic.blur_video_title_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-video-genres",
- name: i18n.language.missav.home.basic.hide_video_genres,
- description: i18n.language.missav.home.basic.hide_video_genres_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-video-duration",
- name: i18n.language.missav.home.basic.hide_video_duration,
- description: i18n.language.missav.home.basic.hide_video_duration_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-revert-full-title",
- name: i18n.language.missav.home.basic.revert_full_title,
- description: i18n.language.missav.home.basic.revert_full_title_description,
- defaultEnable: true
- }
- ];
- const homeVideoItems = [
- {
- type: "switch",
- id: "missav-home-page-video-open-video-load-more",
- name: i18n.language.missav.home.video.recommended_video_load_more,
- noStyle: true,
- enableFn: () => {
- document.addEventListener("alpine:init", () => {
- const quantity = PGStorage.get(
- "missav-home-page-video-recommended-video-quantity-load-number"
- );
- _unsafeWindow.recommendedQuantity = parseInt(quantity) || 4;
- });
- }
- },
- {
- type: "list",
- id: "missav-home-page-video-recommended-video-quantity-load-number",
- name: i18n.language.missav.home.video.recommended_video_quantity_load_number,
- defaultValue: "4",
- disableValue: "4",
- options: [
- {
- id: "4",
- name: "x4"
- },
- {
- id: "8",
- name: "x8"
- },
- {
- id: "12",
- name: "x12"
- },
- {
- id: "16",
- name: "x16"
- }
- ]
- }
- ];
- const homeGroups = [
- {
- name: i18n.language.missav.home.basic.name,
- items: homeBasicItems
- },
- {
- name: i18n.language.missav.home.video.name,
- items: homeVideoItems
- }
- ];
- const searchBasicItems = [
- {
- type: "switch",
- id: "missav-home-page-basic-blur-video-image",
- name: i18n.language.missav.home.basic.blur_video_image,
- description: i18n.language.missav.home.basic.blur_video_image_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-blur-video-title",
- name: i18n.language.missav.home.basic.blur_video_title,
- description: i18n.language.missav.home.basic.blur_video_title_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-video-genres",
- name: i18n.language.missav.home.basic.hide_video_genres,
- description: i18n.language.missav.home.basic.hide_video_genres_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-video-duration",
- name: i18n.language.missav.home.basic.hide_video_duration,
- description: i18n.language.missav.home.basic.hide_video_duration_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-revert-full-title",
- name: i18n.language.missav.home.basic.revert_full_title,
- description: i18n.language.missav.home.basic.revert_full_title_description,
- defaultEnable: true
- }
- ];
- const searchGroups = [
- {
- name: i18n.language.missav.search.basic.name,
- items: searchBasicItems
- }
- ];
- const videoBasicItems$1 = [
- {
- type: "switch",
- id: "missav-video-page-basic-auto-switch-uncensored",
- name: i18n.language.missav.video.basic.auto_switch_uncensored,
- description: i18n.language.missav.video.basic.auto_switch_uncensored_description,
- noStyle: true,
- enableFn: () => {
- if (location.pathname.includes("chinese-subtitle") || location.pathname.includes("english-subtitle")) {
- log("跳过带字幕版本");
- return;
- }
- const optionMenuItems = document.querySelectorAll(
- "a[id^='option-menu-item'"
- );
- optionMenuItems.forEach((optionMenuItem) => {
- const url = optionMenuItem.getAttribute("href");
- if (url == null ? undefined : url.includes("uncensored")) {
- optionMenuItem.click();
- }
- });
- },
- enableFnRunAt: "document-end"
- },
- {
- type: "switch",
- id: "missav-home-page-basic-blur-video-image",
- name: i18n.language.missav.home.basic.blur_video_image,
- description: i18n.language.missav.home.basic.blur_video_image_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-blur-video-title",
- name: i18n.language.missav.home.basic.blur_video_title,
- description: i18n.language.missav.home.basic.blur_video_title_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-video-genres",
- name: i18n.language.missav.home.basic.hide_video_genres,
- description: i18n.language.missav.home.basic.hide_video_genres_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-hide-video-duration",
- name: i18n.language.missav.home.basic.hide_video_duration,
- description: i18n.language.missav.home.basic.hide_video_duration_description
- },
- {
- type: "switch",
- id: "missav-home-page-basic-revert-full-title",
- name: i18n.language.missav.home.basic.revert_full_title,
- description: i18n.language.missav.home.basic.revert_full_title_description,
- defaultEnable: true
- }
- ];
- const videoPlayerItems$1 = [
- {
- type: "switch",
- id: "missav-video-page-player-hide-new-site-banner",
- name: i18n.language.missav.video.player.hide_new_site_banner,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-video-page-player-auto-quality",
- name: i18n.language.missav.video.player.auto_quality,
- defaultEnable: true,
- enableFn: () => {
- var _a, _b;
- const player = _unsafeWindow.player;
- if (!player) return;
- if (!((_b = (_a = player.config) == null ? undefined : _a.quality) == null ? undefined : _b.options)) return;
- const maxQuality = Math.max.apply(
- null,
- player.config.quality.options
- );
- player.quality = maxQuality;
- player.config.quality.default = maxQuality;
- player.config.quality.selected = maxQuality;
- const plyr = localStorage.getItem("plyr");
- if (plyr) {
- const plyrData = JSON.parse(plyr);
- plyrData["quality"] = player.quality;
- localStorage.setItem("plyr", JSON.stringify(plyrData));
- }
- },
- enableFnRunAt: "document-end"
- },
- {
- type: "number",
- id: "missav-video-page-player-speed",
- name: i18n.language.missav.video.player.speed,
- minValue: 0.5,
- maxValue: 10,
- step: 0.5,
- defaultValue: 1,
- disableValue: -1,
- addonText: i18n.language.missav.video.player.speed_addonText,
- fn: (value) => {
- const player = _unsafeWindow.player;
- if (!player) return;
- player.speed = value;
- const plyr = localStorage.getItem("plyr");
- if (plyr) {
- const plyrData = JSON.parse(plyr);
- plyrData["speed"] = player.speed;
- localStorage.setItem("plyr", JSON.stringify(plyrData));
- }
- }
- },
- {
- type: "number",
- id: "missav-video-page-player-volume",
- name: i18n.language.missav.video.player.volume,
- minValue: 0,
- maxValue: 100,
- step: 5,
- defaultValue: 50,
- disableValue: -1,
- addonText: i18n.language.missav.video.player.volume_addonText,
- fn: (value) => {
- const player = _unsafeWindow.player;
- if (!player) return;
- player.volume = value / 100;
- const plyr = localStorage.getItem("plyr");
- if (plyr) {
- const plyrData = JSON.parse(plyr);
- plyrData["volume"] = player.volume;
- localStorage.setItem("plyr", JSON.stringify(plyrData));
- }
- }
- },
- {
- type: "switch",
- id: "missav-video-page-player-hide-play-btn",
- name: i18n.language.missav.video.player.hide_play_btn
- },
- {
- type: "switch",
- id: "missav-video-page-player-cancel-focus-stop",
- name: i18n.language.missav.video.player.cancel_focus_stop,
- defaultEnable: true,
- noStyle: true,
- enableFn: () => {
- document.addEventListener("ready", () => {
- if (!_unsafeWindow.player) return;
- const originPause = _unsafeWindow.player.pause;
- _unsafeWindow.player.pause = () => {
- if (document.hasFocus()) {
- return originPause();
- }
- };
- });
- }
- },
- {
- type: "switch",
- id: "missav-video-page-player-hook-open-window",
- name: i18n.language.missav.video.player.hook_open_window,
- defaultEnable: true,
- noStyle: true,
- enableFn: () => {
- document.addEventListener("alpine:init", () => {
- const div = document.querySelector(
- `div.content-without-search > div > div.order-first > div[x-init]`
- );
- if (!div) return;
- const x_init = div.getAttribute("x-init");
- div.setAttribute(
- "x-init",
- (x_init == null ? undefined : x_init.replace(
- "$nextTick(() => {",
- `$nextTick(() => {pop=()=>{console.log('hook pop');};popOnce=true;directUrls=[];directUrlsIphone=[];`
- )) || ""
- );
- });
- document.addEventListener("DOMContentLoaded", () => {
- const player = document.querySelector(
- `div.order-first > div > div.relative > div`
- );
- if (!player) return;
- player.removeAttribute("@click");
- player.removeAttribute("@keyup.space.window");
- });
- }
- }
- ];
- const videoPlayerControlItems = [
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-prev",
- name: i18n.language.missav.video.playerContorl.hide_prev
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-play",
- name: i18n.language.missav.video.playerContorl.hide_play
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-next",
- name: i18n.language.missav.video.playerContorl.hide_next
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-progress",
- name: i18n.language.missav.video.playerContorl.hide_progress
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-subtitle",
- name: i18n.language.missav.video.playerContorl.hide_subtitle
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-volume",
- name: i18n.language.missav.video.playerContorl.hide_volume
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-setting",
- name: i18n.language.missav.video.playerContorl.hide_setting
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-pip",
- name: i18n.language.missav.video.playerContorl.hide_pip
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-full",
- name: i18n.language.missav.video.playerContorl.hide_full
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-jump",
- name: i18n.language.missav.video.playerContorl.hide_jump,
- description: i18n.language.missav.video.playerContorl.hide_jump_description,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-video-page-player-ctrl-hide-loop",
- name: i18n.language.missav.video.playerContorl.hide_loop,
- defaultEnable: true
- }
- ];
- const videoToolbarItems$1 = [
- {
- type: "switch",
- id: "missav-video-page-toolbar-hide-save",
- name: i18n.language.missav.video.toolbar.hide_save,
- defaultEnable: true
- },
- {
- type: "switch",
- id: "missav-video-page-toolbar-hide-playlist",
- name: i18n.language.missav.video.toolbar.hide_playlist
- },
- {
- type: "switch",
- id: "missav-video-page-toolbar-hide-download",
- name: i18n.language.missav.video.toolbar.hide_download
- },
- {
- type: "switch",
- id: "missav-video-page-toolbar-hide-share",
- name: i18n.language.missav.video.toolbar.hide_share
- },
- {
- type: "switch",
- id: "missav-video-page-toolbar-show-m3u8",
- name: i18n.language.missav.video.toolbar.show_m3u8,
- description: i18n.language.missav.video.toolbar.show_m3u8_description,
- noStyle: true,
- enableFn: async () => {
- await new Promise((resolve) => {
- const timer = setInterval(() => {
- var _a, _b, _c, _d, _e, _f, _g;
- if ((_a = _unsafeWindow.hls) == null ? undefined : _a.url) {
- const m3u8s = [
- { title: "playlist", url: (_b = _unsafeWindow.hls) == null ? undefined : _b.url }
- ];
- const baseUrl = (_d = (_c = _unsafeWindow.hls) == null ? undefined : _c.url) == null ? undefined : _d.split("playlist")[0];
- const qualitys = (_g = (_f = (_e = _unsafeWindow.player) == null ? undefined : _e.config) == null ? undefined : _f.quality) == null ? undefined : _g.options;
- qualitys == null ? undefined : qualitys.forEach((quality) => {
- if (quality !== 0)
- m3u8s.push({
- title: `${quality}p`,
- url: `${baseUrl}${quality}p/video.m3u8`
- });
- });
- const m3u8Panle = e$1.createApp(M3U8Comp, {
- m3u8s
- });
- m3u8Panle.mount(
- (() => {
- var _a2;
- const node = document.createElement("div");
- node.id = "div-m3u8s";
- (_a2 = document.querySelector(
- "div.flex-1.order-first div.mt-4:has(h1)"
- )) == null ? undefined : _a2.appendChild(node);
- return node;
- })()
- );
- clearInterval(timer);
- resolve(true);
- }
- }, 100);
- });
- },
- disableFn: () => {
- const node = document.querySelector("#div-m3u8s");
- if (node) node.remove();
- },
- enableFnRunAt: "document-end"
- },
- {
- type: "switch",
- id: "missav-video-page-toolbar-auto-show-more",
- name: i18n.language.missav.video.toolbar.auto_show_more
- }
- ];
- const videoGroups$2 = [
- {
- name: i18n.language.missav.video.basic.name,
- fold: true,
- items: videoBasicItems$1
- },
- {
- name: i18n.language.missav.video.player.name,
- fold: true,
- items: videoPlayerItems$1
- },
- {
- name: i18n.language.missav.video.playerContorl.name,
- fold: true,
- items: videoPlayerControlItems
- },
- {
- name: i18n.language.missav.video.toolbar.name,
- fold: true,
- items: videoToolbarItems$1
- }
- ];
- const commonStyle$5 = `@charset "UTF-8";html[missav-common-basic-remove-ads] #html-ads,html[missav-common-basic-remove-ads] #ts_ad_video_aes67,html[missav-common-basic-remove-ads] div.pt-16.pb-4.px-4:has(div.hidden),html[missav-common-basic-remove-ads] div[class|=root]:has(div[class|=rootContent]),html[missav-common-basic-remove-ads] div.space-y-6.mb-6:has(div.hidden),html[missav-common-basic-remove-ads] div[x-show^="currentTab === 'video_details'"] div ul,html[missav-common-basic-remove-ads] div.-m-5.mb-2:has(iframe),html[missav-common-basic-remove-ads] html iframe[id|=container],html[missav-common-basic-remove-ads] html iframe[class|=container],html[missav-common-basic-remove-ads] body div.fixed:has(>a[href^="https://bit.ly"][target=_blank]),html[missav-common-basic-remove-ads] body>div[class|=pl]:has(link),html[missav-common-basic-remove-ads] div.flex-1.order-first div.under_player{display:none!important}html[missav-common-basic-hide-footer] footer[aria-labelledby=footerHeading],html[missav-common-basic-hide-footer] #footerHeading,html[missav-common-basic-hide-footer] div.space-y-5.mb-5{display:none!important}html[missav-common-basic-hide-new-site-banner] div:has(>div>div>img[alt="MissAV takeover Fanza"]){display:none!important}html[missav-common-header-hide-logo] div a[href^="https://missav.com"] span.font-serif:has(span),html[missav-common-header-hide-logo] div a[href^="https://missav.ws"] span.font-serif:has(span){visibility:hidden!important}html[missav-common-header-hide-live-cam-sex] a[href*=myavlive],html[missav-common-header-hide-site-live] a[href^="https://missav.live"],html[missav-common-header-hide-upgrade-vip] div a[href$="/vip"],html[missav-common-header-hide-comic] a[href*=mycomic],html[missav-common-header-hide-subtitle] a[href$=-subtitle]{display:none!important}html[missav-common-header-hide-watch-jav] nav div.relative:has(>a[href="#"]):has(>div[x-show$="'jav'"]),html[missav-common-header-hide-watch-jav] div a[href="#"]:has(svg[x-show$="'jav'"]){display:none!important}html[missav-common-header-hide-amateur] nav div.relative:has(>a[href="#"]):has(>div[x-show$="'amateur'"]),html[missav-common-header-hide-amateur] div a[href="#"]:has(svg[x-show$="'amateur'"]){display:none!important}html[missav-common-header-hide-uncensored] nav div.relative:has(>a[href="#"]):has(>div[x-show$="'uncensored'"]),html[missav-common-header-hide-uncensored] div a[href="#"]:has(svg[x-show$="'uncensored'"]){display:none!important}html[missav-common-header-hide-asia-av] nav div.relative:has(>a[href="#"]):has(>div[x-show$="'madou'"]),html[missav-common-header-hide-asia-av] div a[href="#"]:has(svg[x-show$="'madou'"]){display:none!important}html[missav-common-header-hide-my-collection] nav div.relative:has(>a[href="#"]):has(>div[x-show$="'saved'"]),html[missav-common-header-hide-my-collection] div a[href="#"]:has(svg[x-show$="'saved'"]){display:none!important}html[missav-common-header-hide-tg] div.relative>div>div>div>a[href*="https://bit.ly/3uTvrRM"]{display:none!important}html[missav-common-header-hide-more-sites] nav div.relative:has(>a[href="#"]):has(>div[x-show$="'partners'"]),html[missav-common-header-hide-more-sites] div a[href="#"]:has(svg[x-show$="'partners'"]){display:none!important}html[missav-common-header-hide-search] a[alt=検索],html[missav-common-header-hide-search] a[alt=수색],html[missav-common-header-hide-search] a[alt=Cari],html[missav-common-header-hide-search] a[alt=搜寻],html[missav-common-header-hide-search] a[alt=Search]{display:none!important}html[missav-common-header-hide-locale-switcher] div.relative:has(>a[href="#"]):has(>div[x-show$=showLocaleSwitcher]){display:none!important}html[missav-common-header-hide-mobile-right-menu] div div.relative:has(>a[href="#"]):has(>div[x-show$="'mobile'"]){display:none!important}`;
- const homeStyle = 'html[missav-home-page-basic-hide-search-title] div.is-home.content-without-search div div h1:has(span.text-primary){display:none!important}html[missav-home-page-basic-hide-search-box] div.is-home.content-without-search div.flex.flex-col.justify-center.content-center.text-center,html[missav-home-page-basic-hide-search-history] div[x-show="searchHistory.length"],html[missav-home-page-basic-hide-video-genres] div a[x-show^="item.dvd_id &&"] span,html[missav-home-page-basic-hide-video-duration] div a[x-show="item.dvd_id"] span{display:none!important}html[missav-home-page-basic-revert-full-title] div.thumbnail.group div.truncate:has(a[x-text="item.full_title"]){white-space:normal!important}html[missav-home-page-basic-revert-full-title] div.flex-1 div div.max-h-14:has(a[x-text="item.full_title"]){max-height:none!important}html[missav-home-page-basic-blur-video-image] div.relative.rounded.overflow-hidden.shadow-lg,html[missav-home-page-basic-blur-video-title] div.text-sm a[x-text="item.full_title"]{filter:blur(5px)}';
- const searchStyle = 'html[missav-home-page-basic-hide-video-genres] div a[x-show^="item.dvd_id &&"] span,html[missav-home-page-basic-hide-video-duration] div a[x-show="item.dvd_id"] span{display:none!important}html[missav-home-page-basic-revert-full-title] div.thumbnail.group div.truncate:has(>a),html[missav-home-page-basic-revert-full-title] div.thumbnail.group div.truncate:has(a[x-text="item.full_title"]){white-space:normal!important}html[missav-home-page-basic-revert-full-title] div.flex-1 div div.max-h-14:has(a[x-text="item.full_title"]){max-height:none!important}html[missav-home-page-basic-blur-video-image] div.relative.rounded.overflow-hidden.shadow-lg,html[missav-home-page-basic-blur-video-title] div.text-sm a[x-text="item.full_title"]{filter:blur(5px)}';
- const videoStyle$2 = 'html[missav-home-page-basic-hide-video-genres] div a[x-show^="item.dvd_id &&"] span,html[missav-home-page-basic-hide-video-duration] div a[x-show="item.dvd_id"] span{display:none!important}html[missav-home-page-basic-revert-full-title] div.thumbnail.group div.truncate:has(a[x-text="item.full_title"]),html[missav-home-page-basic-revert-full-title] div.flex-1 div div.max-h-14:has(a[x-text="item.full_title"]){white-space:normal!important;max-height:none!important}html[missav-home-page-basic-blur-video-image] div.relative.rounded.overflow-hidden.shadow-lg,html[missav-home-page-basic-blur-video-title] div.text-sm a[x-text="item.full_title"]{filter:blur(5px)}html[missav-video-page-player-hide-new-site-banner] div>div[x-show=showNewDomainNotice]{display:none!important}html[missav-video-page-player-hide-play-btn] div.plyr button.plyr__control--overlaid[data-plyr=play]:has(span.plyr__sr-only){display:none!important}html[missav-video-page-player-ctrl-hide-prev] div.plyr__controls button.plyr__controls__item[data-plyr=rewind],html[missav-video-page-player-ctrl-hide-play] div.plyr__controls button.plyr__controls__item[data-plyr=play],html[missav-video-page-player-ctrl-hide-next] div.plyr__controls button.plyr__controls__item[data-plyr=fast-forward],html[missav-video-page-player-ctrl-hide-progress] div.plyr__controls div.plyr__controls__item.plyr__progress__container,html[missav-video-page-player-ctrl-hide-subtitle] div.plyr__controls button.plyr__controls__item[data-plyr=captions]{display:none!important}html[missav-video-page-player-ctrl-hide-volume] div.plyr__controls div.plyr__controls__item.plyr__volume:has(button[data-plyr=mute]){display:none!important}html[missav-video-page-player-ctrl-hide-setting] div.plyr__controls div.plyr__controls__item.plyr__menu:has(button[data-plyr=settings]){display:none!important}html[missav-video-page-player-ctrl-hide-pip] div.plyr__controls button.plyr__controls__item[data-plyr=pip],html[missav-video-page-player-ctrl-hide-full] div.plyr__controls button.plyr__controls__item[data-plyr=fullscreen]{display:none!important}html[missav-video-page-player-ctrl-hide-jump] div.content-without-search>div>div.order-first>div>div.justify-between.bg-black:has(>span.isolate){display:none!important}html[missav-video-page-player-ctrl-hide-loop] div.content-without-search>div>div.order-first>div>div.bg-black:has(>div.flex.items-center.flex-nowrap>div.grow){display:none!important}html[missav-video-page-toolbar-hide-save] div button:has(svg[x-show$=saved]){display:none!important}html[missav-video-page-toolbar-hide-playlist] div button.shadow-sm:has(svg[stroke-width]){display:none!important}html[missav-video-page-toolbar-hide-download] div a[href^="https://rapidgator.net"]:has(svg){display:none!important}html[missav-video-page-toolbar-hide-share] div button.shadow-sm:has(svg[aria-hidden]){display:none!important}html[missav-video-page-toolbar-auto-show-more] div[x-show^=currentTab] div div[x-data*=showMore] div.text-secondary.break-all{overflow:visible!important;display:block!important;-webkit-box-orient:horizontal!important;-webkit-line-clamp:none!important}html[missav-video-page-toolbar-auto-show-more] div[x-show^=currentTab] div div[x-data*=showMore] div:has(a[href="#"]){display:none!important}';
- const rules$6 = [
- {
- name: "missav-home",
- groups: homeGroups,
- style: homeStyle,
- checkFn: () => isPageMissAvHomepage()
- },
- {
- name: "missav-video",
- groups: videoGroups$2,
- style: videoStyle$2,
- checkFn: () => isPageMissAvVideo()
- },
- {
- name: "missav-search",
- groups: searchGroups,
- style: searchStyle,
- checkFn: () => isPageMissAvSearch()
- },
- {
- name: "missav-common",
- groups: commonGroups$5,
- style: commonStyle$5,
- isSpecial: true,
- checkFn: () => isPageMissAv()
- }
- ];
- const commonBasicItems$4 = [
- {
- type: "switch",
- id: "pornhub-remove-ads",
- name: "移除 广告",
- defaultEnable: true,
- enableFn: () => {
- addAfterResponseInterceptor(
- async (response, requestInit) => {
- var _a;
- const adsUrl = [
- ".pornhub.com/_xa/ads",
- "https://static.trafficjunky.com/ab/ads_test.js",
- ".pornhub.com/_xa/ads_batch",
- "https://video.ktkjmp.com/adsbygoogle.js",
- "https://static.trafficjunky.com/invocation/embeddedads/production/embeddedads.es6.min.js"
- ];
- for (const url of adsUrl) {
- if ((_a = requestInit.url) == null ? undefined : _a.includes(url)) {
- console.log("hook:", requestInit.url);
- return defineResponse({
- ...response,
- response: new Blob([""])
- });
- }
- }
- return defineResponse(response);
- }
- );
- }
- },
- {
- type: "switch",
- id: "pornhub-hide-footer",
- name: "隐藏 页底footer",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-hide-adblock",
- name: "隐藏 Adblock通知",
- defaultEnable: true
- }
- ];
- const commonHeaderItems$4 = [
- {
- type: "switch",
- id: "pornhub-common-hide-nav-network-bar",
- name: "隐藏 顶部横条",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop",
- name: "隐藏 左侧菜单"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-logo",
- name: "隐藏 Logo",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-search",
- name: "隐藏 搜索框"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-search-recent",
- name: "隐藏 搜索框-历史搜索"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-search-trending",
- name: "隐藏 搜索框-热门搜索"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-search-pornstar",
- name: "隐藏 搜索框-明星搜索"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-upload-btn-spicevids",
- name: "隐藏 AI JERK",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-upload-btn",
- name: "隐藏 上传图标",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-login",
- name: "隐藏 登录图标",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-home",
- name: "隐藏 首页"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-video",
- name: "隐藏 视频"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-categories",
- name: "隐藏 分类"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-live-cams",
- name: "隐藏 LIVE CAMS",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-pornstars",
- name: "隐藏 色情明星"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-fuck-now",
- name: "隐藏 FUCK NOW",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-community",
- name: "隐藏 社区"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-albums",
- name: "隐藏 照片及动图"
- }
- ];
- const commonDesktopItems = [
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-video",
- name: "隐藏 左侧菜单-精选色情片"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-shorties",
- name: "隐藏 左侧菜单-Shorties"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-recommended",
- name: "隐藏 左侧菜单-推荐视频"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-video-ht",
- name: "隐藏 左侧菜单-热门视频"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-pornstar",
- name: "隐藏 左侧菜单-色情明星和模特"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-active",
- name: "隐藏 左侧菜单-异性恋"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-gayporn",
- name: "隐藏 左侧菜单-男同"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-transgender",
- name: "隐藏 左侧菜单-变性"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-video-27",
- name: "隐藏 左侧菜单-女同"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-channels",
- name: "隐藏 左侧菜单-频道"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-categories",
- name: "隐藏 左侧菜单-热门类别"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-playlists",
- name: "隐藏 左侧菜单-片单"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-gifs",
- name: "隐藏 左侧菜单-色情片动图"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-albums",
- name: "隐藏 左侧菜单-照片"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-community",
- name: "隐藏 左侧菜单-社区"
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-Full-SPICEVIDS",
- name: "隐藏 左侧菜单-Full SPICEVIDS",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-help",
- name: "隐藏 左侧菜单-Trust & Safety",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-uviu",
- name: "隐藏 左侧菜单-UViU",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-blog",
- name: "隐藏 左侧菜单-博客",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-insights",
- name: "隐藏 左侧菜单-洞察",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-sex",
- name: "隐藏 左侧菜单-性健康",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-common-hide-nav-desktop-pornhubapparel",
- name: "隐藏 左侧菜单-商店",
- defaultEnable: true
- },
- {
- type: "switch",
- name: "隐藏 左侧菜单-Personalized Recommendations",
- id: "pornhub-common-hide-nav-desktop-recommend"
- }
- ];
- const commonGroups$4 = [
- {
- name: "全站通用 - 基本功能",
- fold: true,
- items: commonBasicItems$4
- },
- {
- name: "全站通用 - 顶栏",
- fold: true,
- items: commonHeaderItems$4
- },
- {
- name: "全站通用 - 左侧菜单",
- fold: true,
- items: commonDesktopItems
- }
- ];
- const videoPlayerItems = [
- {
- type: "switch",
- id: "pornhub-video-page-auto-fix-player",
- name: "修补 播放器",
- description: ["去除播放广告、开启更多控制"],
- defaultEnable: true,
- enableFnRunAt: "document-end",
- enableFn: async () => {
- var _a;
- const scripts = document.getElementsByTagName("script");
- for (const script of scripts) {
- if (script.src.indexOf("ads_batch") !== -1) {
- script.remove();
- }
- if (script.innerHTML.indexOf("ads_batch") !== -1) {
- script.remove();
- }
- }
- (_a = document.querySelector(`head > meta[name="adsbytrafficjunkycontext"]`)) == null ? undefined : _a.remove();
- _unsafeWindow.iframe_url = "";
- const video = document.getElementById("player");
- const videoId = video == null ? undefined : video.getAttribute("data-video-id");
- let flashvars = _unsafeWindow["flashvars_" + videoId];
- _unsafeWindow["VIDEO_SHOW"]["trafficJunkyurl"] = "";
- flashvars = {
- ...flashvars,
- embedCode: "",
- adRollGlobalConfig: []
- };
- _unsafeWindow["flashvars_" + videoId] = flashvars;
- }
- }
- ];
- const videoToolbarItems = [
- {
- type: "switch",
- id: "pornhub-video-page-hide-below-info-rating-info",
- name: "隐藏 视频数据",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-video-page-hide-below-info-actions-container",
- name: "隐藏 视频操作",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-video-page-hide-below-info-user-info",
- name: "隐藏 发布者信息"
- },
- {
- type: "switch",
- id: "pornhub-video-page-hide-below-info-action",
- name: "隐藏 订阅"
- },
- {
- type: "switch",
- id: "pornhub-video-page-show-below-info-m3u8",
- name: "获取 M3U8",
- description: ["截取并显示m3u8, 可使用其他播放器播放"],
- enableFnRunAt: "document-end",
- enableFn: async () => {
- const video = document.getElementById("player");
- const videoId = video == null ? undefined : video.getAttribute("data-video-id");
- if (!videoId) return;
- const flashvars = _unsafeWindow["flashvars_" + videoId];
- const mediaDefinitions = flashvars["mediaDefinitions"];
- const m3u8urls = [];
- mediaDefinitions.forEach((mediaDefinition) => {
- if (typeof mediaDefinition.quality !== "string") return;
- m3u8urls.push({
- title: mediaDefinition.quality + "p",
- url: mediaDefinition.videoUrl
- });
- });
- const m3u8Panle = e$1.createApp(M3U8Comp, {
- m3u8s: m3u8urls
- });
- m3u8Panle.mount(
- (() => {
- var _a;
- const node = document.createElement("div");
- node.id = "div-m3u8s";
- (_a = document.querySelector(
- "#hd-leftColVideoPage > div.topSectionGrid > div.videoWrapModelInfo.original > div > div.video-actions-menu"
- )) == null ? undefined : _a.appendChild(node);
- return node;
- })()
- );
- },
- disableFn: () => {
- const node = document.querySelector("#div-m3u8s");
- if (node) node.remove();
- }
- },
- {
- type: "switch",
- id: "pornhub-video-page-hide-below-info-comments",
- name: "隐藏 视频评论区",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "pornhub-video-page-hide-below-info-playlists",
- name: "隐藏 视频收录片单"
- }
- ];
- const videoGroups$1 = [
- {
- name: "播放页-播放器",
- fold: true,
- items: videoPlayerItems
- },
- {
- name: "播放页-视频下方信息",
- fold: true,
- items: videoToolbarItems
- }
- ];
- const commonStyle$4 = 'html[pornhub-remove-ads] #hd-leftColVideoPage>div.topSectionGrid>div.sideColumn.original>div.sideAds,html[pornhub-remove-ads] #relatedVideosListing>li.js-nativeTjVideoGrid.js_promoItem:has(>div>iframe),html[pornhub-remove-ads] #hd-leftColVideoPage>div.topSectionGrid>div.videoWrapModelInfo.original>div>div.hd.clear.original,html[pornhub-remove-ads] #videoSearchResult>li.sniperModeEngaged.alpha:has(>div),html[pornhub-remove-ads] #videoSearchResult>li.emptyBlockSpace,html[pornhub-remove-ads] #singleFeedSection>li.emptyBlockSpace,html[pornhub-remove-ads] #singleFeedSection>li.sniperModeEngaged.alpha:has(>div),html[pornhub-remove-ads] #pb_iframe,html[pornhub-remove-ads] #relatedVideosCenter>li.js_promoItem:has(>div>iframe),html[pornhub-remove-ads] #hd-leftColVideoPage>div>div.hd.clear.original:has(>div>iframe),html[pornhub-remove-ads] #hd-rightColVideoPage>div.clearfix:has(>div>div>iframe),html[pornhub-remove-ads] body>div:has(>iframe),html[pornhub-remove-ads] div:has(>ins[style="width:950px;height:250px;display:block;margin:0 auto;"]){display:none!important}html[pornhub-hide-footer] div.footerContentWrapper,html[pornhub-hide-footer] #footer,html[pornhub-hide-footer] div.logoFooterWrapper.homePageFooter,html[pornhub-hide-adblock] #js-abContainterMain{display:none!important}html[pornhub-common-hide-nav-network-bar] body>div.networkBarWrapper{display:none!important}html[pornhub-common-hide-nav-desktop] #desktopNavigation{display:none!important}html[pornhub-common-hide-nav-logo] #headerContainer>div>div>div.logoWrapper{visibility:hidden!important}html[pornhub-common-hide-nav-search] #headerSearchWrapperFree{display:none!important}html[pornhub-common-hide-nav-search-recent] #searchesWrapperScroll>search-list[type=recent]{display:none!important}html[pornhub-common-hide-nav-search-trending] #searchesWrapperScroll>search-list[type=trending]{display:none!important}html[pornhub-common-hide-nav-search-pornstar] #searchesWrapperScroll>search-list[type=pornstar]{display:none!important}html[pornhub-common-hide-nav-upload-btn-spicevids] #headerContainer>div.headerContainerColumn.withSearch.withCustomPromoBtn>div.uploadBtnContentSpicevids{display:none!important}html[pornhub-common-hide-nav-upload-btn] #headerContainer>div.headerContainerColumn.withSearch.withCustomPromoBtn>div.uploadBtnContent{display:none!important}html[pornhub-common-hide-nav-login] #headerLoginLink{display:none!important}html[pornhub-common-hide-nav-home] li[itemprop=name]:has(>a.js-topMenuLink[href="/"]){display:none!important}html[pornhub-common-hide-nav-video] li[itemprop=name]:has(>a.js-topMenuLink[href="/video"]){display:none!important}html[pornhub-common-hide-nav-categories] li[itemprop=name]:has(>a.js-topMenuLink[href="/categories"]){display:none!important}html[pornhub-common-hide-nav-live-cams] li[itemprop=name]:has(>a.js-topMenuLink[data-label2="Live Cams"]){display:none!important}html[pornhub-common-hide-nav-pornstars] li[itemprop=name]:has(>a.js-topMenuLink[href="/pornstars"]){display:none!important}html[pornhub-common-hide-nav-fuck-now] li:has(>a.js-topMenuLink[data-label2="Fuck Now"]){display:none!important}html[pornhub-common-hide-nav-community] li[itemprop=name]:has(>a.js-topMenuLink[href="/community"]){display:none!important}html[pornhub-common-hide-nav-albums] li[itemprop=name]:has(>a.js-topMenuLink[href="/albums"]){display:none!important}html[pornhub-common-hide-nav-desktop-video] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/video"]{display:none!important}html[pornhub-common-hide-nav-desktop-shorties] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/shorties"]{display:none!important}html[pornhub-common-hide-nav-desktop-recommended] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/recommended"]{display:none!important}html[pornhub-common-hide-nav-desktop-video-ht] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/video?o=ht"]{display:none!important}html[pornhub-common-hide-nav-desktop-pornstar] #leftMenuScroll>div.menuLink.subMenuTriggerwithLink.pornstarNavigation{display:none!important}html[pornhub-common-hide-nav-desktop-active] #leftMenuScroll>a.menuLink.js-menuAnalytics.active[href="/"]{display:none!important}html[pornhub-common-hide-nav-desktop-gayporn] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/gayporn"]{display:none!important}html[pornhub-common-hide-nav-desktop-transgender] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/transgender"]{display:none!important}html[pornhub-common-hide-nav-desktop-video-27] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/video?c=27"]{display:none!important}html[pornhub-common-hide-nav-desktop-channels] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/channels"]{display:none!important}html[pornhub-common-hide-nav-desktop-categories] #leftMenuScroll>div.menuLink.subMenuTriggerwithLink.categoriesNavigation{display:none!important}html[pornhub-common-hide-nav-desktop-playlists] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/playlists"]{display:none!important}html[pornhub-common-hide-nav-desktop-gifs] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/gifs"]{display:none!important}html[pornhub-common-hide-nav-desktop-albums] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/albums"]{display:none!important}html[pornhub-common-hide-nav-desktop-community] #leftMenuScroll>div.menuLink.subMenuTriggerwithLink.communityNavigation{display:none!important}html[pornhub-common-hide-nav-desktop-Full-SPICEVIDS] #leftMenuScroll>div.menuLinkDiv{display:none!important}html[pornhub-common-hide-nav-desktop-help] #leftMenuScroll>a[href^="https://help.pornhub.com/hc/en-us/categories/"]{display:none!important}html[pornhub-common-hide-nav-desktop-uviu] #leftMenuScroll>div:has(>a[data-menu-clog=ham-uviu]){display:none!important}html[pornhub-common-hide-nav-desktop-blog] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="/blog"]{display:none!important}html[pornhub-common-hide-nav-desktop-insights] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="https://www.pornhub.com/insights/"]{display:none!important}html[pornhub-common-hide-nav-desktop-sex] #leftMenuScroll>a.menuLink.js-menuAnalytics[href="https://www.pornhub.com/sex/"]{display:none!important}html[pornhub-common-hide-nav-desktop-pornhubapparel] #leftMenuScroll>div:has(>a[href="https://pornhubapparel.com/"]){display:none!important}html[pornhub-common-hide-nav-desktop-recommend] #leftMenuScroll>div.toggleSwitchWrapper:has(>div.toggleSwitch>#recommendSwitch){display:none!important}';
- const videoStyle$1 = "html[jabletv-video-page-hide-bpx-player-state-wrap] div.plyr button.plyr__control--overlaid[data-plyr=play]:has(span.plyr__sr-only){display:none!important}html[pornhub-video-page-hide-below-info-rating-info] #hd-leftColVideoPage>div.topSectionGrid>div.videoWrapModelInfo.original>div>div.video-actions-menu>div.ratingInfo,html[pornhub-video-page-hide-below-info-rating-info] #hd-leftColVideoPage>div>div.video-actions-menu>div.ratingInfo{display:none!important}html[pornhub-video-page-hide-below-info-actions-container] #hd-leftColVideoPage>div.topSectionGrid>div.videoWrapModelInfo.original>div>div.video-actions-menu>div.allActionsContainer.tooltipWrapper,html[pornhub-video-page-hide-below-info-actions-container] #hd-leftColVideoPage>div>div.video-actions-menu>div.allActionsContainer.tooltipWrapper{display:none!important}html[pornhub-video-page-hide-below-info-user-info] #hd-leftColVideoPage>div.topSectionGrid>div.videoWrapModelInfo.original>div>div.video-actions-container>div.video-actions-tabs>div.video-action-tab.about-tab.active>div.video-detailed-info,html[pornhub-video-page-hide-below-info-user-info] #hd-leftColVideoPage>div>div.video-actions-container>div.video-actions-tabs>div.video-action-tab.about-tab.active>div.video-detailed-info{display:none!important}html[pornhub-video-page-hide-below-info-action] #hd-leftColVideoPage>div>div.video-actions-container>div.video-actions-tabs>div.video-action-tab.about-tab.active>div.video-detailed-info>div.video-info-row.userRow>div.userActions{display:none!important}html[pornhub-video-page-hide-below-info-comments] #under-player-comments,html[pornhub-video-page-hide-below-info-playlists] #under-player-playlists{display:none!important}";
- const rules$5 = [
- {
- name: "pornhub-video",
- groups: videoGroups$1,
- style: videoStyle$1,
- checkFn: isPagePornHubVideo
- },
- {
- name: "pornhub-common",
- groups: commonGroups$4,
- style: commonStyle$4,
- isSpecial: true,
- checkFn: isPagePornHub
- }
- ];
- const commonBasicItems$3 = [
- {
- type: "switch",
- id: "91porn-remove-ads",
- name: "移除 广告",
- attrName: "remove-ads",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-footer",
- name: "隐藏 页底footer",
- attrName: "hide-footer",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-skip-adult-verify",
- name: "跳过 成年认证页",
- noStyle: true,
- defaultEnable: true,
- enableFn: () => {
- if (_unsafeWindow.location.pathname === "/") {
- _unsafeWindow.location.href += "index.php";
- }
- }
- },
- {
- type: "switch",
- id: "91porn-show-video-full-title",
- name: "显示 完整标题",
- attrName: "show-video-full-title",
- defaultEnable: true
- }
- ];
- const commonHeaderItems$3 = [
- {
- type: "switch",
- id: "91porn-hide-header-top-menu-language",
- name: "隐藏 语言",
- attrName: "hide-header-top-menu-language"
- },
- {
- type: "switch",
- id: "91porn-hide-header-top-menu-signup",
- name: "隐藏 注册",
- attrName: "hide-header-top-menu-signup"
- },
- {
- type: "switch",
- id: "91porn-hide-header-top-menu-login",
- name: "隐藏 登录",
- attrName: "hide-header-top-menu-login"
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-header-logo",
- name: "隐藏 LOGO",
- attrName: "hide-header-navbar-header-logo"
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-right-upload",
- name: "隐藏 上传",
- attrName: "hide-header-navbar-right-upload",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-right-watch",
- name: "隐藏 视频",
- attrName: "hide-header-navbar-right-watch"
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-right-forum",
- name: "隐藏 自拍论坛",
- attrName: "hide-header-navbar-right-forum",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-right-webcam",
- name: "隐藏 美女视频",
- attrName: "hide-header-navbar-right-webcam",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-right-ugatube",
- name: "隐藏 电影中心",
- attrName: "hide-header-navbar-right-ugatube",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-navbar-right-pay",
- name: "隐藏 VIP会员",
- attrName: "hide-header-navbar-right-pay",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-my-video",
- name: "隐藏 我的视频",
- attrName: "hide-header-submenu-my-video"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-my-favour",
- name: "隐藏 我的收藏",
- attrName: "hide-header-submenu-my-favour"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-my-subs-users",
- name: "隐藏 我关注的用户",
- attrName: "hide-header-submenu-my-subs-users"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-my-subs",
- name: "隐藏 我关注用户的视频",
- attrName: "hide-header-submenu-my-subs"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-my-comment",
- name: "隐藏 我的留言",
- attrName: "hide-header-submenu-my-comment",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-yqm",
- name: "隐藏 论坛邀请码",
- attrName: "hide-header-submenu-yqm",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-ori",
- name: "隐藏 91原创",
- attrName: "hide-header-submenu-category-ori"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-hot",
- name: "隐藏 当前最热",
- attrName: "hide-header-submenu-category-hot"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-top",
- name: "隐藏 本月最热",
- attrName: "hide-header-submenu-category-top"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-long",
- name: "隐藏 10分钟以上 ",
- attrName: "hide-header-submenu-category-long"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-longer",
- name: "隐藏 20分钟以上 ",
- attrName: "hide-header-submenu-category-longer"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-tf",
- name: "隐藏 本月收藏",
- attrName: "hide-header-submenu-category-tf"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-rf",
- name: "隐藏 最近加精",
- attrName: "hide-header-submenu-category-rf"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-hd",
- name: "隐藏 高清",
- attrName: "hide-header-submenu-category-hd"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-top-1",
- name: "隐藏 每月最热",
- attrName: "hide-header-submenu-category-top-1"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-md",
- name: "隐藏 本月讨论",
- attrName: "hide-header-submenu-category-md"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-mf",
- name: "隐藏 收藏最多",
- attrName: "hide-header-submenu-category-mf"
- }
- ];
- const commonGroups$3 = [
- {
- name: "全站通用 - 基本功能",
- fold: true,
- items: commonBasicItems$3
- },
- {
- name: "全站通用 - Header",
- fold: true,
- items: commonHeaderItems$3
- }
- ];
- const vBasicItems = [];
- const vHeaderItems = [
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-ori",
- name: "隐藏 91原创",
- attrName: "hide-header-submenu-category-ori"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-hot",
- name: "隐藏 当前最热",
- attrName: "hide-header-submenu-category-hot"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-top",
- name: "隐藏 本月最热",
- attrName: "hide-header-submenu-category-top"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-long",
- name: "隐藏 10分钟以上 ",
- attrName: "hide-header-submenu-category-long"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-longer",
- name: "隐藏 20分钟以上 ",
- attrName: "hide-header-submenu-category-longer"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-tf",
- name: "隐藏 本月收藏",
- attrName: "hide-header-submenu-category-tf"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-rf",
- name: "隐藏 最近加精",
- attrName: "hide-header-submenu-category-rf"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-hd",
- name: "隐藏 高清",
- attrName: "hide-header-submenu-category-hd"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-top-1",
- name: "隐藏 每月最热",
- attrName: "hide-header-submenu-category-top-1"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-md",
- name: "隐藏 本月讨论",
- attrName: "hide-header-submenu-category-md"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-mf",
- name: "隐藏 收藏最多",
- attrName: "hide-header-submenu-category-mf"
- }
- ];
- const vGroups = [
- {
- name: "搜索页 - 基本功能",
- fold: true,
- items: vBasicItems
- },
- {
- name: "搜索页 - Header",
- fold: true,
- items: vHeaderItems
- }
- ];
- const videoBasicItems = [
- {
- type: "switch",
- id: "91porn-fix-player",
- name: "修补 播放器",
- noStyle: true,
- defaultEnable: true,
- enableFnRunAt: "document-start",
- enableFn: () => {
- waitForEle(
- document,
- "#videodetails > div.video-container",
- (node) => {
- if (!node) return false;
- if (node instanceof HTMLScriptElement) {
- if (node.tagName !== "SCRIPT") return false;
- if (!node.innerText.includes(`videojs`)) return false;
- node.parentNode.removeChild(node);
- if (!window.videojs) return false;
- window.player = window.videojs(
- "player_one"
- );
- window.player.nuevo({
- logotitle: "老司机修炼手册",
- logo: "images/logo1.png",
- logoposition: "RT",
- logourl: "https://www.91porn.com"
- });
- window.player.pip();
- window.player.seekButtons({
- forward: 10,
- back: 10
- });
- return true;
- }
- return false;
- }
- );
- }
- },
- {
- type: "switch",
- id: "91porn-hide-video-details-data",
- name: "移除 视频下方数据",
- attrName: "hide-video-details-data"
- },
- {
- type: "switch",
- id: "91porn-hide-video-details-option",
- name: "移除 视频下方操作栏",
- attrName: "hide-video-details-option",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-video-details-content",
- name: "移除 视频下方声明",
- attrName: "hide-video-details-content",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-video-details-info",
- name: "移除 视频信息",
- attrName: "hide-video-details-info",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porn-hide-video-details-comment",
- name: "移除 此视频留言",
- attrName: "hide-video-details-comment"
- }
- ];
- const videoHeaderItems = [
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-ori",
- name: "隐藏 91原创",
- attrName: "hide-header-submenu-category-ori"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-hot",
- name: "隐藏 当前最热",
- attrName: "hide-header-submenu-category-hot"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-top",
- name: "隐藏 本月最热",
- attrName: "hide-header-submenu-category-top"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-long",
- name: "隐藏 10分钟以上 ",
- attrName: "hide-header-submenu-category-long"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-longer",
- name: "隐藏 20分钟以上 ",
- attrName: "hide-header-submenu-category-longer"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-tf",
- name: "隐藏 本月收藏",
- attrName: "hide-header-submenu-category-tf"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-rf",
- name: "隐藏 最近加精",
- attrName: "hide-header-submenu-category-rf"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-hd",
- name: "隐藏 高清",
- attrName: "hide-header-submenu-category-hd"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-top-1",
- name: "隐藏 每月最热",
- attrName: "hide-header-submenu-category-top-1"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-md",
- name: "隐藏 本月讨论",
- attrName: "hide-header-submenu-category-md"
- },
- {
- type: "switch",
- id: "91porn-hide-header-submenu-category-mf",
- name: "隐藏 收藏最多",
- attrName: "hide-header-submenu-category-mf"
- }
- ];
- const videoGroups = [
- {
- name: "播放页 - 基本功能",
- fold: true,
- items: videoBasicItems
- },
- {
- name: "播放页 - Header",
- fold: true,
- items: videoHeaderItems
- }
- ];
- const commonStyle$3 = 'html[remove-ads] #row>iframe,html[remove-ads] #videodetails>div:has(>a>img.ad_img),html[remove-ads] #videodetails>iframe,html[remove-ads] body>div:has(>div[align=center]>div.cont6){display:none!important}html[hide-footer] #footer-container{display:none!important}html[show-video-full-title] #row>div.well>a>span.video-title,html[show-video-full-title] #wrapper>div.container.container-minheight>div.row>div>div.row>div>div.well>a>span.video-title{white-space:normal!important;max-height:none!important}html[hide-header-top-menu-language] div.top-nav>div>ul>div.pull-left>form[name=language_form]{display:none!important}html[hide-header-top-menu-signup] div.top-nav>div>ul>div.pull-right>li:has(>a[href="signup.php"]){display:none!important}html[hide-header-top-menu-login] div.top-nav>div>ul>div.pull-right>li:has(>a[href="login.php"]){display:none!important}html[hide-header-navbar-header-logo] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-header:has(>a>img[src="/images/logo.png"]){display:none!important}html[hide-header-navbar-right-upload] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-collapse.collapse.navbar-inverse-collapse>ul>li:has(>a[href^="https://up"]){display:none!important}html[hide-header-navbar-right-watch] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-collapse.collapse.navbar-inverse-collapse>ul>li:has(>a[href="https://91porn.com/v.php?next=watch"]){display:none!important}html[hide-header-navbar-right-forum] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-collapse.collapse.navbar-inverse-collapse>ul>li:has(>a[href="https://t1229.btc760.com"]){display:none!important}html[hide-header-navbar-right-webcam] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-collapse.collapse.navbar-inverse-collapse>ul>li:has(>a[href="webcam.php"]){display:none!important}html[hide-header-navbar-right-ugatube] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-collapse.collapse.navbar-inverse-collapse>ul>li:has(>a[href="https://www.ugatube.com"]){display:none!important}html[hide-header-navbar-right-pay] div.navbar.navbar-inverse.navbar-fixed-top>div.container>div.navbar-collapse.collapse.navbar-inverse-collapse>ul>li:has(>a[href="pay.php"]){display:none!important}html[hide-header-submenu-my-video] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/my_video.php"]){display:none!important}html[hide-header-submenu-my-favour] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/my_favour.php"]){display:none!important}html[hide-header-submenu-my-subs-users] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/my_subs_users.php"]){display:none!important}html[hide-header-submenu-my-subs] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/my_subs.php"]){display:none!important}html[hide-header-submenu-my-comment] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/my_comment.php"]){display:none!important}html[hide-header-submenu-yqm] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/yqm.php"]){display:none!important}html[hide-header-submenu-category-ori] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=ori&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-hot] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=hot&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-top] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=top&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-long] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=long&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-longer] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=longer&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-tf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=tf&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-rf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=rf&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-hd] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=hd&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-top-1] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=top&m=-1&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-md] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=md&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-mf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=mf&viewtype=basic"]){display:none!important}';
- const videoStyle = 'html[hide-video-details-data] #useraction>div.boxPart:has(>span.info){display:none!important}html[hide-video-details-option] #useraction>div.boxPart:has(>div.floatmenu){display:none!important}html[hide-video-details-content] #useraction>div:has(>a[href="speed.php"]){display:none!important}html[hide-video-details-info] div.videodetails-yakov:has(>form>#fm-video_link){display:none!important}html[hide-video-details-comment] div.videodetails-yakov:has(>div>div.main_comment){display:none!important}html[hide-header-submenu-category-ori] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=ori&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-hot] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=hot&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-top] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=top&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-long] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=long&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-longer] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=longer&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-tf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=tf&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-rf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=rf&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-hd] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=hd&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-top-1] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=top&m=-1&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-md] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=md&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-mf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=mf&viewtype=basic"]){display:none!important}';
- const vStyle = 'html[hide-header-submenu-category-ori] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=ori&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-hot] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=hot&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-top] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=top&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-long] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=long&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-longer] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=longer&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-tf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=tf&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-rf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=rf&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-hd] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=hd&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-top-1] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=top&m=-1&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-md] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=md&viewtype=basic"]){display:none!important}html[hide-header-submenu-category-mf] div.navbar.navbar-inverse.navbar-fixed-top>div.submenu>div>div>ul>li:has(>a[href="https://91porn.com/v.php?category=mf&viewtype=basic"]){display:none!important}';
- const rules$4 = [
- {
- name: "common",
- groups: commonGroups$3,
- style: commonStyle$3,
- isSpecial: true,
- checkFn: isPage91Porn
- },
- {
- name: "v",
- groups: vGroups,
- style: vStyle,
- checkFn: isPage91PornV
- },
- {
- name: "video",
- groups: videoGroups,
- style: videoStyle,
- checkFn: isPage91PornVideo
- }
- ];
- const commonBasicItems$2 = [
- {
- type: "switch",
- id: "91porna-remove-ads",
- name: "移除 广告",
- attrName: "remove-ads",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-footer",
- name: "隐藏 页底footer",
- attrName: "hide-footer",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-footer-more-site",
- name: "隐藏 精品推荐",
- attrName: "hide-footer-more-site",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-footer-more-site-1",
- name: "友情链接",
- attrName: "hide-footer-more-site-1",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-show-video-full-title",
- name: "显示 完整标题",
- attrName: "show-video-full-title",
- defaultEnable: true
- }
- ];
- const commonHeaderItems$2 = [
- {
- type: "switch",
- id: "91porna-hide-header-logo",
- name: "隐藏 LOGO",
- attrName: "hide-header-logo"
- },
- {
- type: "switch",
- id: "91porna-hide-header-search",
- name: "隐藏 搜索框",
- attrName: "hide-header-search"
- },
- {
- type: "switch",
- id: "91porna-hide-header-login",
- name: "隐藏 登录/注册",
- attrName: "hide-header-login"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-home",
- name: "移除 首页",
- attrName: "hide-header-nav-home"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-video",
- name: "移除 视频",
- attrName: "hide-header-nav-video"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-info",
- name: "移除 黑料吃瓜",
- attrName: "hide-header-nav-info"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-av",
- name: "移除 日本AV",
- attrName: "hide-header-nav-av"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-novel",
- name: "移除 色情小说",
- attrName: "hide-header-nav-novel"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-g-video",
- name: "移除 搜同G片",
- attrName: "hide-header-nav-g-video"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-app",
- name: "移除 📱手机App",
- attrName: "hide-header-nav-app"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-more-site",
- name: "移除 💖更多色站💖",
- attrName: "hide-header-nav-more-site"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-info-1",
- name: "移除 黑料吃瓜网",
- attrName: "hide-header-nav-info-1"
- },
- {
- type: "switch",
- id: "91porna-hide-header-nav-new-url",
- name: "移除 最新地址",
- attrName: "hide-header-nav-new-url"
- }
- ];
- const commonVideoItems = [
- {
- type: "switch",
- id: "91porna-hide-video-data",
- name: "隐藏 视频数据",
- attrName: "hide-video-data",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-video-keyword",
- name: "隐藏 视频关键词",
- attrName: "hide-video-keyword",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-video-uploader",
- name: "隐藏 视频作者信息",
- attrName: "hide-video-uploader",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-video-info",
- name: "隐藏 视频描述",
- attrName: "hide-video-info",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "91porna-hide-video-more-site",
- name: "隐藏 视频推广链接",
- attrName: "hide-video-more-site",
- defaultEnable: true
- }
- ];
- const commonGroups$2 = [
- {
- name: "全站通用 - 基本功能",
- fold: true,
- items: commonBasicItems$2
- },
- {
- name: "全站通用 - Header",
- fold: true,
- items: commonHeaderItems$2
- },
- {
- name: "全站通用 - Video",
- fold: true,
- items: commonVideoItems
- }
- ];
- const commonStyle$2 = '@charset "UTF-8";html[remove-ads] body>div.modal-backdrop.fade.in,html[remove-ads] body>main>div>div>div>ul>li:has(>a.checkNum[target=_blank]),html[remove-ads] body>main>div>div.flex-1>div:has(>div>div.swiper),html[remove-ads] #tip_modal,html[remove-ads] body>main>div:has(>div.grid>div.dx-banner-item),html[remove-ads] body>main>div.text-mini.mb-3:has(>ul.dx-recommend-icons){display:none!important}html[hide-footer] #app-footer{display:none!important}html[show-video-full-title] body>main.app-content>div.index-content>div>ul.video-items>li>div.video-item>div>a,html[show-video-full-title] body>main.app-content>div.grid>div>div>ul.video-items>li>div.video-item>div>a>div{white-space:normal!important;max-height:none!important;overflow:none!important;display:contents!important}html[hide-footer-more-site] body>main>div:has(>ul.grid>li:nth-child(1)>a[rel="external nofollow"]>img[_type=data-src]){display:none!important}html[hide-footer-more-site-1] body>main>div:has(>ul.flex>li:nth-child(1)>a[rel="external nofollow"]){display:none!important}html[hide-header-logo] #app-header>div>div>div.app-header>div:has(>a>picture>h1>img.app-logo){display:none!important}html[hide-header-search] #app-header>div>div>div.app-header>div.search-box{display:none!important}html[hide-header-login] #app-header>div>div>div.app-header>div>div.popover-container:has(>button.btn-login){display:none!important}html[hide-header-nav-home] #app-nav>ul.dx-container>li.flex:has(>a[href="/"]){display:none!important}html[hide-header-nav-video] #app-nav>ul.dx-container>li.flex:has(>a[href="https://91porna.com/comic/index/video?category=play"]){display:none!important}html[hide-header-nav-info] #app-nav>ul.dx-container>li.flex:has(>a[href="https://91porna.com/黑料吃瓜"]){display:none!important}html[hide-header-nav-av] #app-nav>ul.dx-container>li.flex:has(>a[href="https://91porna.com/comic/index/av"]){display:none!important}html[hide-header-nav-novel] #app-nav>ul.dx-container>li.flex:has(>a[href="https://91porna.com/comic/index/postNovel"]){display:none!important}html[hide-header-nav-g-video] #app-nav>ul.dx-container>li.flex:has(>a[href$=".tcuwpcyu.cc?ref=91porna"]){display:none!important}html[hide-header-nav-app] #app-nav>ul.dx-container>li.flex:has(>a[href="https://103.mrkcnifa.cc/chan-1907/aff-kz8RU"]),html[hide-header-nav-app] #app-nav>ul.dx-container>li.flex:has(>a[href="https://5cde2.josojuri.cc/?code=hFQ&c=2663"]){display:none!important}html[hide-header-nav-more-site] #app-nav>ul.dx-container>li.flex:has(>a[href$=".gjsvuqtp.cc?ref=91porna"]),html[hide-header-nav-more-site] #app-nav>ul.dx-container>li.flex:has(>a[href$=".qcmvoilg.cc?ref=91porna"]){display:none!important}html[hide-header-nav-info-1] #app-nav>ul.dx-container>li.flex:has(>a[href$=".fjobeijt.cc?ref=91porna"]){display:none!important}html[hide-header-nav-new-url] #app-nav>ul.dx-container>li.flex:has(>a[href="https://91porna.com/comic/index/links?key=home"]){display:none!important}html[hide-video-data] body>main>div>div>div>div:has(>div>svg>use[href="/static/web/icons/icons.svg#time"]){display:none!important}html[hide-video-keyword] body>main>div>div>div>div.dx-tabs>div.dx-tab-content.dx-tab-content--active>ul.text-default:has(>li.items-center>a.link[href^="https://91porna.com/comic/index/search?keyword="]){display:none!important}html[hide-video-uploader] body>main>div>div>div>div.dx-tabs>div.dx-tab-content.dx-tab-content--active>div.dx-hairline--bottom>div.items-center:has(>div>div>a[href^="https://91porna.com/comic/index/publicvideo?user_id="]){display:none!important}html[hide-video-info] body>main>div>div>div>div.dx-tabs>div.dx-tab-content.dx-tab-content--active>div.dx-hairline--bottom>h2{display:none!important}html[hide-video-more-site] body>main>div>div>div>div.dx-tabs>div.dx-tab-content.dx-tab-content--active>div.dx-hairline--bottom>div[style="color:#ccc;line-height:24px"],html[hide-video-more-site] body>main>div>div>div>div.dx-tabs>div.dx-tab-content.dx-tab-content--active>div:has(>strong.dx-subtitle),html[hide-video-more-site] body>main>div>div>div.mt-2.md\\:mt-3>div.dx-tabs.text-xl>div.dx-tab-content.dx-tab-content--active>ul.grid.items-center:has(>li.w-full>a.checkNum[target=_blank]){display:none!important}';
- const rules$3 = [
- {
- name: "common",
- groups: commonGroups$2,
- style: commonStyle$2,
- isSpecial: true,
- checkFn: isPage91Porna
- }
- ];
- const commonBasicItems$1 = [
- {
- type: "switch",
- id: "18comic-hide-top-menu-link",
- name: "移除 上方推广链接",
- attrName: "hide-top-menu-link",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-remove-ads",
- name: "移除 广告",
- attrName: "remove-ads",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-footer",
- name: "隐藏 页底footer",
- attrName: "hide-footer",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-adblock",
- name: "隐藏 Adblock通知",
- attrName: "hide-adblock",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-adult-verify",
- name: "隐藏 成年确认",
- attrName: "hide-adult-verify",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-float-right-daily",
- name: "隐藏 每日签到浮窗",
- attrName: "hide-float-right-daily",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-float-right-image",
- name: "隐藏 右下角浮窗",
- attrName: "hide-float-right-image",
- defaultEnable: true
- }
- ];
- const commonHeaderItems$1 = [
- {
- type: "switch",
- id: "18comic-hide-header-logo",
- name: "隐藏 LOGO",
- attrName: "hide-header-logo"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-adulta",
- name: "隐藏 成人A漫",
- attrName: "hide-header-btn-adulta"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-theme",
- name: "隐藏 分類",
- attrName: "hide-header-btn-theme"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-hmovies",
- name: "隐藏 H動漫",
- attrName: "hide-header-btn-hmovies",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-games",
- name: "隐藏 遊戲",
- attrName: "hide-header-btn-games",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-blogs",
- name: "隐藏 紳夜食堂",
- attrName: "hide-header-btn-blogs",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-forum",
- name: "隐藏 評論區",
- attrName: "hide-header-btn-forum",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-ai-chat",
- name: "隐藏 AI Chat",
- attrName: "hide-header-btn-ai-chat",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-veteran",
- name: "隐藏 好站推薦",
- attrName: "hide-header-btn-veteran",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-theme-toggle",
- name: "隐藏 夜间模式切换",
- attrName: "hide-header-btn-theme-toggle"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-bonus",
- name: "隐藏 禁漫一番賞",
- attrName: "hide-header-btn-bonus",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-week",
- name: "隐藏 每周必看",
- attrName: "hide-header-btn-week"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-phone",
- name: "隐藏 手机版安装",
- attrName: "hide-header-btn-phone",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-album",
- name: "隐藏 随机漫画",
- attrName: "hide-header-btn-album"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-user",
- name: "隐藏 登录注册",
- attrName: "hide-header-btn-user"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-search",
- name: "隐藏 搜索",
- attrName: "hide-header-btn-search"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-notice",
- name: "隐藏 JM公告",
- attrName: "hide-header-btn-notice"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-up-comic",
- name: "隐藏 上傳漫畫",
- attrName: "hide-header-btn-up-comic"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-ad-mail",
- name: "隐藏 廣告洽詢",
- attrName: "hide-header-btn-ad-mail",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-pay",
- name: "隐藏 打賞JM",
- attrName: "hide-header-btn-pay",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-shunt",
- name: "隐藏 分流",
- attrName: "hide-header-btn-shunt"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-language",
- name: "隐藏 选择语言",
- attrName: "hide-header-btn-language"
- },
- {
- type: "switch",
- id: "18comic-hide-header-btn-url-copy",
- name: "隐藏 收藏永久網域",
- attrName: "hide-header-btn-url-copy",
- defaultEnable: true
- }
- ];
- const commonAlbumItems = [
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-latest",
- name: "隐藏 更新",
- attrName: "hide-thumb-albums-latest"
- },
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-category",
- name: "隐藏 类型",
- attrName: "hide-thumb-albums-category"
- },
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-likes",
- name: "隐藏 喜欢数",
- attrName: "hide-thumb-albums-likes",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-bookmark",
- name: "隐藏 收藏",
- attrName: "hide-thumb-albums-bookmark",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-title",
- name: "隐藏 标题",
- attrName: "hide-thumb-albums-title"
- },
- {
- type: "switch",
- id: "18comic-show-thumb-albums-full-title",
- name: "显示 完整标题",
- attrName: "show-thumb-albums-full-title",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-author",
- name: "隐藏 作者",
- attrName: "hide-thumb-albums-author",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "18comic-hide-thumb-albums-tags",
- name: "隐藏 标签",
- attrName: "hide-thumb-albums-tags",
- defaultEnable: true
- }
- ];
- const commonGroups$1 = [
- {
- name: "全站通用 - 基本功能",
- fold: true,
- items: commonBasicItems$1
- },
- {
- name: "全站通用 - Header",
- fold: true,
- items: commonHeaderItems$1
- },
- {
- name: "全站通用 - Album",
- fold: true,
- items: commonAlbumItems
- }
- ];
- const commonStyle$1 = 'html[hide-top-menu-link] div.top-nav>div>ul>div.center>li.top-menu-m:has(>a[target=_blank]),html[hide-top-menu-link] div.top-nav>div>ul>div.pull-left>li.top-menu-link:has(>a[target=_blank]){display:none!important}html[remove-ads] #wrapper>div.hidden-lg:has(>div[class$=_sticky2]),html[remove-ads] div.panel-body>div>div.center.scramble-page.thewayhome>a[href="https://jmcomicgo.me"],html[remove-ads] #wrapper>div>div>div>div>div:has(>div.photo_center_div>div.e8c78e-4_b>div.group-notice),html[remove-ads] div.panel-body>div>div>div.e8c78e-4_b:has(>div.group-notice),html[remove-ads] #wrapper>div.container>div.row:has(>div>div.e8c78e-4_b>div.group-notice),html[remove-ads] #wrapper>div.container>div.row>div:has(>div.e8c78e-4_b>div.group-notice){display:none!important}html[hide-footer] #wrapper>div.footer-container{display:none!important}html[hide-adblock] #wrapper>div>div>div>div>div[style="font-size: 10px;text-align: center;margin: 5px;"]{display:none!important}html[hide-adult-verify] body>div.modal-backdrop.fade.in,html[hide-adult-verify] #billboard-modal{display:none!important}html[hide-float-right-daily] #wrapper>div.float-right-daily{display:none!important}html[hide-float-right-image] #wrapper>div.float-right-image{display:none!important}html[hide-header-logo] div.navbar-header>a[href="/"]>img[alt=logo]{display:none!important}html[hide-header-btn-adulta] #adulta{display:none!important}html[hide-header-btn-theme] #wrapper>div.ph-bottom>ul>li:has(>a[href="/theme"]),html[hide-header-btn-theme] ul.nav.navbar-nav.navbar-left>li:has(>a[href="/theme/"]){display:none!important}html[hide-header-btn-hmovies] #hmovies{display:none!important}html[hide-header-btn-games] #wrapper>div.ph-bottom>ul>li:has(>a[href="/games"]),html[hide-header-btn-games] ul.nav.navbar-nav.navbar-left>li:has(>a[href="/games"]){display:none!important}html[hide-header-btn-blogs] ul.nav.navbar-nav.navbar-left>li:has(>a[href="/blogs"]){display:none!important}html[hide-header-btn-forum] #wrapper>div.ph-bottom>ul>li:has(>a[href="/forum"]),html[hide-header-btn-forum] #sns,html[hide-header-btn-forum] ul.nav.navbar-nav.navbar-left>li:has(>a[href="/forum/"]){display:none!important}html[hide-header-btn-ai-chat] #wrapper>div.ph-bottom>ul>li:has(>a[href="https://s.zlinkp.com/d.php?z=5278412"]),html[hide-header-btn-ai-chat] ul.nav.navbar-nav.navbar-left>li:has(>a[href="https://s.zlinkp.com/d.php?z=5278412"]){display:none!important}html[hide-header-btn-veteran] #wrapper>div.ph-bottom>ul>li:has(>a[href="/veteran"]),html[hide-header-btn-veteran] ul.nav.navbar-nav.navbar-left>li:has(>a[href="/veteran"]){display:none!important}html[hide-header-btn-theme-toggle] div.navbar-header>div.head-right>label.switch:has(>#theme-toggle-m),html[hide-header-btn-theme-toggle] ul.nav.navbar-nav.navbar-right>li:has(>label.switch){display:none!important}html[hide-header-btn-bonus] ul.nav.navbar-nav.navbar-left>div.adult-class-main>div>a[href="/bonus"],html[hide-header-btn-bonus] ul.nav.navbar-nav.navbar-right>li:has(>a[href="/bonus"]){display:none!important}html[hide-header-btn-week] ul.nav.navbar-nav.navbar-left>div.adult-class-main>div>a[href="/week"],html[hide-header-btn-week] ul.nav.navbar-nav.navbar-right>li:has(>a[href="/week"]){display:none!important}html[hide-header-btn-phone] ul.nav.navbar-nav.navbar-right>li:has(>a[target=_blank]>i.fa-mobile-alt){display:none!important}html[hide-header-btn-album] ul.nav.navbar-nav.navbar-right>li:has(>a[href^="/album/"]){display:none!important}html[hide-header-btn-user] ul.nav.navbar-nav.navbar-right>li:has(>a[data-toggle=modal]>i.fa-user-circle),html[hide-header-btn-user] ul.nav.navbar-nav.navbar-right>li:has(>a[href="#login-modal"]){display:none!important}html[hide-header-btn-search] div.navbar-header>div.head-right>div.dropdown:has(>a>i.fa-search),html[hide-header-btn-search] ul.nav.navbar-nav.navbar-right>li:has(>a[href="#"]>i.fa-search){display:none!important}html[hide-header-btn-notice] div.navbar-collapse>div>ul>li:has(>a[href="https://jmc8763.one/mpSWW7"]){display:none!important}html[hide-header-btn-up-comic] div.navbar-collapse>div>ul>li:has(>a[href="/"]){display:none!important}html[hide-header-btn-ad-mail] ul.nav.navbar-nav.navbar-left>div.adult-class-main>div>li:has(>a[href="mailto:www18comic@gmail.com"]),html[hide-header-btn-ad-mail] div.navbar-collapse>div>ul>li:has(>a[href="mailto:www18comic@gmail.com"]){display:none!important}html[hide-header-btn-pay] div.navbar-collapse>div>ul>li:has(>a[href="https://jmc8763.one/dFTN82"]){display:none!important}html[hide-header-btn-shunt] #click_fl2,html[hide-header-btn-shunt] div.navbar-collapse>div>ul>li:has(>a[href="#shunt-modal"]){display:none!important}html[hide-header-btn-language] ul.nav.navbar-nav.navbar-left>div.adult-class-main>div>li:has(>span[href="#language-modal"]),html[hide-header-btn-language] div.navbar-collapse>div>ul>li:has(>a[href="#language-modal"]){display:none!important}html[hide-header-btn-url-copy] ul.nav.navbar-nav.navbar-left>li.copy-block:has(>#copy){display:none!important}html[hide-thumb-albums-latest] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>div.thumb-overlay-albums>div.label-latest,html[hide-thumb-albums-latest] #wrapper>div.container>div.row>div>div.row>div>div>div.thumb-overlay-albums>div.label-latest{display:none!important}html[hide-thumb-albums-category] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>div.thumb-overlay-albums>div.category-icon,html[hide-thumb-albums-category] #wrapper>div.container>div.row>div>div.row>div>div>div.thumb-overlay-albums>div.category-icon{display:none!important}html[hide-thumb-albums-likes] #related_comics>div.row>div>div.owl-stage-outer>div>div>div>div.gamelib_block_footer>span:has(>a.blog-like),html[hide-thumb-albums-likes] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>div.thumb-overlay-albums>div.label-loveicon,html[hide-thumb-albums-likes] #wrapper>div.container>div.row>div>div.row>div>div>div.thumb-overlay-albums>div.label-loveicon{display:none!important}html[hide-thumb-albums-bookmark] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>div.thumb-overlay-albums>div.label-star,html[hide-thumb-albums-bookmark] #wrapper>div.container>div.row>div>div.row>div>div>div.thumb-overlay-albums>div.label-star{display:none!important}html[hide-thumb-albums-title] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>span.video-title,html[hide-thumb-albums-title] #wrapper>div.container>div.row>div>div.row>div>div>span.video-title{display:none!important}html[show-thumb-albums-full-title] #related_comics>div.row>div>div.owl-stage-outer>div>div>div>a>div.title,html[show-thumb-albums-full-title] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>span.video-title,html[show-thumb-albums-full-title] #wrapper>div.container>div.row>div>div.row>div>div>span.video-title{white-space:normal!important;max-height:none!important}html[hide-thumb-albums-author] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>div:has(>a[href*="&main_tag"]),html[hide-thumb-albums-author] #wrapper>div.container>div.row>div>div.row>div>div>div:has(>a[href*="&main_tag"]){display:none!important}html[hide-thumb-albums-tags] #related_comics>div.row>ul>div.owl-stage-outer>div>div>div>div.title-truncate.tags,html[hide-thumb-albums-tags] #wrapper>div.container>div.row>div>div.row>div>div>div.title-truncate.tags{display:none!important}';
- const rules$2 = [
- {
- name: "common",
- groups: commonGroups$1,
- style: commonStyle$1,
- isSpecial: true,
- checkFn: isPage18Comic
- }
- ];
- const commonBasicItems = [
- {
- type: "switch",
- id: "xvideos-remove-ads",
- name: "移除 广告",
- attrName: "remove-ads",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "xvideos-hide-footer",
- name: "隐藏 页底footer",
- attrName: "hide-footer",
- defaultEnable: true
- }
- ];
- const commonHeaderItems = [
- {
- type: "switch",
- id: "xvideos-hide-header-logo",
- name: "隐藏 LOGO",
- attrName: "hide-header-logo"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-language",
- name: "隐藏 选择语言",
- attrName: "hide-header-btn-language"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-localisation",
- name: "隐藏 选择地区",
- attrName: "hide-header-btn-localisation"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-main-cat",
- name: "隐藏 性别喜好",
- attrName: "hide-header-btn-main-cat"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-search",
- name: "隐藏 搜索框",
- attrName: "hide-header-btn-search"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-user",
- name: "隐藏 user",
- attrName: "hide-header-btn-user"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-theme-switch",
- name: "隐藏 主题切换",
- attrName: "hide-header-btn-theme-switch"
- },
- {
- type: "switch",
- id: "xvideos-hide-header-btn-setting",
- name: "隐藏 设置",
- attrName: "hide-header-btn-setting"
- }
- ];
- const commonNavItems = [
- {
- type: "switch",
- id: "xvideos-hide-nav-best",
- name: "隐藏 最佳影片",
- attrName: "hide-nav-best"
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-tags",
- name: "隐藏 分类",
- attrName: "hide-nav-tags"
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-channels",
- name: "隐藏 頻道",
- attrName: "hide-nav-channels"
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-pornstars",
- name: "隐藏 色情明星",
- attrName: "hide-nav-pornstars"
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-red-ticket",
- name: "隐藏 RED视频",
- attrName: "hide-nav-red-ticket"
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-live-cams",
- name: "隐藏 现场直播摄影机(广告)",
- attrName: "hide-nav-live-cams",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-games",
- name: "隐藏 遊戲(广告)",
- attrName: "hide-nav-games",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-logo",
- name: "隐藏 约会(广告)",
- attrName: "hide-nav-logo",
- defaultEnable: true
- },
- {
- type: "switch",
- id: "xvideos-hide-nav-profileslist",
- name: "隐藏 簡介",
- attrName: "hide-nav-profileslist"
- }
- ];
- const commonGroups = [
- {
- name: "全站通用 - 基本功能",
- fold: true,
- items: commonBasicItems
- },
- {
- name: "全站通用 - Header",
- fold: true,
- items: commonHeaderItems
- },
- {
- name: "全站通用 - Nav",
- fold: true,
- items: commonNavItems
- }
- ];
- const commonStyle = 'html[remove-ads] #hlsplayer>div.videoad-base,html[remove-ads] #ad-header-mobile-contener,html[remove-ads] div.exo-ad-ins-div.exo-ad-playersiderectangle,html[remove-ads] div.exo-ad-ins-container.ad-support-desktop,html[remove-ads] #ad-footer,html[remove-ads] div.thumb-ad.thumb-nat-ad.thumb-nat-exo-ad{display:none!important}html[hide-footer] #page>div.remove-ads,html[hide-footer] #footer{display:none!important}html[hide-header-logo] #site-logo-link,html[hide-header-btn-language] #site-language,html[hide-header-btn-localisation] #site-localisation,html[hide-header-btn-main-cat] #site-main-cat{display:none!important}html[hide-header-btn-search] body>div.head__top.width-full-body>header>div.head__search{display:none!important}html[hide-header-btn-user] #header-mobile-right>button.head__btn:has(>span.icf-user-o){display:none!important}html[hide-header-btn-theme-switch] #site-theme-switch{display:none!important}html[hide-header-btn-setting] #header-mobile-right>button.head__btn:has(>span.icf-cog-o){display:none!important}html[hide-nav-best] #nav>nav>ul>li:has(>a[href="/best"]){display:none!important}html[hide-nav-tags] #nav>nav>ul>li:has(>#main-cats-sub-list-btn){display:none!important}html[hide-nav-channels] #nav>nav>ul>li:has(>a[href="/channels-index"]){display:none!important}html[hide-nav-pornstars] #nav>nav>ul>li:has(>a[href="/pornstars-index"]){display:none!important}html[hide-nav-red-ticket] #nav>nav>ul>li:has(>a[href="https://www.xvideos.red/red/videos"]){display:none!important}html[hide-nav-live-cams] #nav>nav>ul>li:has(>a[href="https://www.xvlivecams.com/female-cams/"]){display:none!important}html[hide-nav-games] #nav>nav>ul>li:has(>a[href="https://xvideos.nutaku.net/wl/gate/"]){display:none!important}html[hide-nav-logo] #nav>nav>ul>li:has(>a.ignore-popunder>span.icf-hearts-o),html[hide-nav-logo] #nav>nav>ul>li:has(>a[href="https://s.zlinkp.com/d.php?z=5421034"]){display:none!important}html[hide-nav-profileslist] #nav>nav>ul>li:has(>a[href="/profileslist"]){display:none!important}';
- const rules$1 = [
- {
- name: "common",
- groups: commonGroups,
- style: commonStyle,
- isSpecial: true,
- checkFn: isPageXVideos
- }
- ];
- const basicItems = [
- {
- type: "list",
- id: "language",
- name: i18n.language.language,
- description: i18n.language.language_description,
- defaultValue: "zh-CN",
- disableValue: "null",
- options: [
- {
- id: "zh-CN",
- name: "简体中文"
- },
- {
- id: "en-US",
- name: "English"
- }
- ],
- fn: (id) => {
- i18n.change(id);
- }
- }
- ];
- const basicRules = {
- name: "basic-rules",
- groups: [
- {
- name: i18n.language.basic_settings,
- items: basicItems
- }
- ],
- isSpecial: true,
- specialName: "SETTINGS",
- checkFn: isPageMissAv
- };
- const rules = [
- ...rules$7,
- ...rules$6,
- ...rules$5,
- ...rules$4,
- ...rules$3,
- ...rules$2,
- ...rules$1,
- // ...xHamsterRules,
- basicRules
- ];
- const _hoisted_1 = { class: "text-base" };
- const _sfc_main = /* @__PURE__ */ e$1.defineComponent({
- __name: "App",
- setup(__props) {
- return (_ctx, _cache) => {
- return e$1.openBlock(), e$1.createElementBlock("div", _hoisted_1, [
- e$1.createVNode(_sfc_main$3, e$1.normalizeProps(e$1.guardReactiveProps({
- rules: e$1.unref(rules),
- title: e$1.unref(i18n).language.title,
- github: "http://github.com/GangPeter",
- greasyFork: "https://greasyfork.org/users/105051"
- })), null, 16),
- e$1.createVNode(_sfc_main$2)
- ]);
- };
- }
- });
- const waitForHead = () => {
- return new Promise((resolve) => {
- if (document.head) {
- resolve();
- }
- const observer = new MutationObserver(() => {
- if (document.head) {
- observer.disconnect();
- resolve();
- }
- });
- observer.observe(document, { childList: true, subtree: true });
- });
- };
- const waitForBody = () => {
- return new Promise((resolve) => {
- if (document.body) {
- resolve();
- }
- const observer = new MutationObserver(() => {
- if (document.body) {
- observer.disconnect();
- resolve();
- }
- });
- observer.observe(document, { childList: true, subtree: true });
- });
- };
- const loadRules = (rules2) => {
- for (const rule of rules2) {
- if (!rule.checkFn()) continue;
- for (const group of rule.groups) {
- for (const item of group.items) {
- try {
- switch (item.type) {
- case "switch":
- loadSwitchItem(item);
- break;
- case "number":
- loadNumberItem(item);
- break;
- case "list":
- loadListItem(item);
- break;
- case "string":
- loadStringItem(item);
- break;
- }
- } catch (err) {
- error(
- `loadRules load item failed, id=${item.id}, name=${item.name}, type=${item.type}`,
- err
- );
- }
- }
- }
- }
- };
- const loadStyles = (rules2) => {
- var _a;
- for (const rule of rules2) {
- if (!rule.checkFn() || !rule.style) continue;
- try {
- const style = document.createElement("style");
- style.className = `pg-css ${rule.name}`;
- style.textContent = rule.style;
- (_a = document.documentElement) == null ? void 0 : _a.appendChild(style);
- } catch (err) {
- error(`loadStyles error, name=${rule.name}`, err);
- }
- }
- };
- const loadSwitchItem = (item) => {
- var _a;
- const enable = PGStorage.get(item.id, item.defaultEnable);
- if (!enable) return;
- if (!item.noStyle) {
- document.documentElement.setAttribute(item.attrName ?? item.id, "");
- }
- if (!item.enableFn) return;
- if (item.enableFnRunAt === "document-end" && document.readyState === "loading") {
- document.addEventListener("DOMContentLoaded", () => {
- var _a2;
- (_a2 = item.enableFn()) == null ? undefined : _a2.then().catch();
- });
- } else {
- (_a = item.enableFn()) == null ? undefined : _a.then().catch();
- }
- };
- const loadNumberItem = (item) => {
- var _a;
- const value = PGStorage.get(item.id, item.defaultValue);
- if (value === item.disableValue) return;
- if (!item.noStyle) {
- document.documentElement.setAttribute(item.attrName ?? item.id, "");
- }
- (_a = item.fn(value)) == null ? undefined : _a.then().catch();
- };
- const loadStringItem = (item) => {
- var _a;
- const value = PGStorage.get(item.id, item.defaultValue);
- if (value === item.disableValue) return;
- if (!item.noStyle) {
- document.documentElement.setAttribute(item.attrName ?? item.id, "");
- }
- (_a = item.fn(value)) == null ? undefined : _a.then().catch();
- };
- const loadListItem = (item) => {
- const value = PGStorage.get(item.id, item.defaultValue);
- if (value === item.disableValue) return;
- document.documentElement.setAttribute(value, "");
- };
- const loadModules = () => {
- waitForHead().then(() => {
- loadStyles(rules);
- log("loadStyles done");
- });
- loadRules(rules);
- log("loadRules done");
- };
- const css = '*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:host{font-family:Arial,Helvetica,sans-serif!important}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.right-20{right:80px}.top-0{top:0}.isolate{isolation:isolate}.z-10{z-index:10}.z-\\[10000000\\]{z-index:10000000}.z-\\[100\\]{z-index:100}.order-first{order:-9999}.m-1{margin:4px}.mx-2{margin-left:8px;margin-right:8px}.mb-1\\.5{margin-bottom:6px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.ml-2{margin-left:8px}.ml-4{margin-left:16px}.mr-1{margin-right:4px}.mt-1{margin-top:4px}.mt-2\\.5{margin-top:10px}.mt-4{margin-top:16px}.mt-5{margin-top:20px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.size-8{width:32px;height:32px}.h-10{height:40px}.h-4{height:16px}.h-5{height:20px}.h-6{height:24px}.h-auto{height:auto}.max-h-60{max-height:240px}.min-h-12{min-height:48px}.min-h-\\[calc\\(100\\%-2\\.5rem\\)\\]{min-height:calc(100% - 40px)}.w-1\\/5{width:20%}.w-10{width:40px}.w-11{width:44px}.w-2\\/5{width:40%}.w-24{width:96px}.w-4{width:16px}.w-5{width:20px}.w-6{width:24px}.w-full{width:100%}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.translate-x-1{--tw-translate-x: 4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-6{--tw-translate-x: 24px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(20px * var(--tw-space-x-reverse));margin-left:calc(20px * calc(1 - var(--tw-space-x-reverse)))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:4px}.rounded-2xl{border-radius:16px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.rounded-xl{border-radius:12px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-b-xl{border-bottom-right-radius:12px;border-bottom-left-radius:12px}.border{border-width:1px}.border-2{border-width:2px}.border-\\[\\#212121\\]{--tw-border-opacity: 1;border-color:rgb(33 33 33 / var(--tw-border-opacity, 1))}.border-\\[\\#252525\\]{--tw-border-opacity: 1;border-color:rgb(37 37 37 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-\\[\\#0e0e0e\\]{--tw-bg-opacity: 1;background-color:rgb(14 14 14 / var(--tw-bg-opacity, 1))}.bg-\\[\\#151515\\]{--tw-bg-opacity: 1;background-color:rgb(21 21 21 / var(--tw-bg-opacity, 1))}.bg-\\[\\#1b1b1b\\]{--tw-bg-opacity: 1;background-color:rgb(27 27 27 / var(--tw-bg-opacity, 1))}.bg-\\[\\#1e1e1e80\\]{background-color:#1e1e1e80}.bg-\\[\\#1f1f1f\\]{--tw-bg-opacity: 1;background-color:rgb(31 31 31 / var(--tw-bg-opacity, 1))}.bg-\\[\\#252525\\]{--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.bg-\\[\\#2f2f2f\\]{--tw-bg-opacity: 1;background-color:rgb(47 47 47 / var(--tw-bg-opacity, 1))}.bg-\\[\\#ff9000\\]{--tw-bg-opacity: 1;background-color:rgb(255 144 0 / var(--tw-bg-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-green-950{--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-1{padding:4px}.p-2{padding:8px}.p-3\\.5{padding:14px}.px-2{padding-left:8px;padding-right:8px}.px-2\\.5{padding-left:10px;padding-right:10px}.px-3\\.5{padding-left:14px;padding-right:14px}.py-0\\.5{padding-top:2px;padding-bottom:2px}.py-1{padding-top:4px;padding-bottom:4px}.py-1\\.5{padding-top:6px;padding-bottom:6px}.py-2{padding-top:8px;padding-bottom:8px}.pb-2{padding-bottom:8px}.pl-10{padding-left:40px}.pl-3{padding-left:12px}.pl-9{padding-left:36px}.pr-2{padding-right:8px}.pr-4{padding-right:16px}.pt-1{padding-top:4px}.text-left{text-align:left}.text-center{text-align:center}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-\\[13px\\]{font-size:13px}.text-\\[14px\\]{font-size:14px}.text-base{font-size:16px;line-height:24px}.text-sm{font-size:14px;line-height:20px}.text-xl{font-size:20px;line-height:28px}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-4{line-height:16px}.leading-6{line-height:24px}.text-\\[\\#767676\\]{--tw-text-opacity: 1;color:rgb(118 118 118 / var(--tw-text-opacity, 1))}.text-\\[\\#c6c6c6\\]{--tw-text-opacity: 1;color:rgb(198 198 198 / var(--tw-text-opacity, 1))}.text-\\[\\#ff9000\\]{--tw-text-opacity: 1;color:rgb(255 144 0 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.will-change-\\[right\\,bottom\\]{will-change:right,bottom}.will-change-\\[top\\,left\\]{will-change:top,left}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.invalid\\:border-red-500:invalid{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.hover\\:border-\\[\\#ff9000\\]:hover{--tw-border-opacity: 1;border-color:rgb(255 144 0 / var(--tw-border-opacity, 1))}.hover\\:border-green-600:hover{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.hover\\:bg-\\[\\#212121\\]:hover{--tw-bg-opacity: 1;background-color:rgb(33 33 33 / var(--tw-bg-opacity, 1))}.hover\\:bg-\\[\\#292929\\]:hover{--tw-bg-opacity: 1;background-color:rgb(41 41 41 / var(--tw-bg-opacity, 1))}.hover\\:bg-\\[\\#2D2D2D\\]:hover{--tw-bg-opacity: 1;background-color:rgb(45 45 45 / var(--tw-bg-opacity, 1))}.hover\\:bg-\\[\\#2f2f2f\\]:hover{--tw-bg-opacity: 1;background-color:rgb(47 47 47 / var(--tw-bg-opacity, 1))}.hover\\:bg-green-950:hover{--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity, 1))}.hover\\:text-\\[\\#ff9000\\]:hover{--tw-text-opacity: 1;color:rgb(255 144 0 / var(--tw-text-opacity, 1))}.hover\\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\\:text-opacity-100:hover{--tw-text-opacity: 1}.focus\\:border-\\[\\#2f2f2f\\]:focus{--tw-border-opacity: 1;border-color:rgb(47 47 47 / var(--tw-border-opacity, 1))}.focus\\:bg-\\[\\#212121\\]:focus{--tw-bg-opacity: 1;background-color:rgb(33 33 33 / var(--tw-bg-opacity, 1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:invalid\\:border-red-500:invalid:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}@media (min-width: 640px){.sm\\:text-sm{font-size:14px;line-height:20px}}';
- const main = () => {
- const wrap = document.createElement("div");
- wrap.id = "porn-enhance";
- const root = wrap.attachShadow({ mode: "open" });
- const style = document.createElement("style");
- style.textContent = css;
- root.appendChild(style);
- waitForBody().then(() => document.body.appendChild(wrap));
- const app = e$1.createApp(_sfc_main);
- app.config.errorHandler = (err, vm, info) => {
- error("Vue:", err);
- error("Component:", vm);
- error("Info:", info);
- };
- const pinia = createPinia();
- app.use(pinia);
- app.mount(
- (() => {
- const node = document.createElement("div");
- root.appendChild(node);
- return node;
- })()
- );
- };
- const menu = () => {
- if (self !== top) {
- log("skip iframe");
- return;
- }
- const ruleStore = useRulePanelStore();
- const sideBtnStore = useSideBtnStore();
- _GM_registerMenuCommand(i18n.language.panel, () => {
- ruleStore.isShow ? ruleStore.hide() : ruleStore.show();
- });
- _GM_registerMenuCommand(i18n.language.side_btn, () => {
- sideBtnStore.isShow ? sideBtnStore.hide() : sideBtnStore.show();
- });
- };
- try {
- log(`script start, mode: ${"production"}, url: ${location.href}`);
- intercept(_unsafeWindow);
- log("intercept done");
- loadModules();
- main();
- menu();
- log(`script end`);
- } catch (err) {
- error("main.ts error", err);
- }
-
- })(Vue);