您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
thz论坛 98堂论坛
// ==UserScript== // @name thz-helper // @description thz论坛 98堂论坛 // @namespace http://tampermonkey.net/ // @version 1.0.5 // @author paso // @match http://96thz.cc/* // @match http://97thz.cc/* // @match http://98thz.cc/* // @match http://thzb.cc/* // @match http://thzv.cc/* // @match https://wpzo.app/* // @match *://www.example.net/* // @require https://greasyfork.org/scripts/473442-cross-origin-storage/code/cross-origin-storage.js?version=1237609 // @require https://greasyfork.org/scripts/473443-popup-inject/code/popup-inject.js?version=1237616 // @grant none // @license MIT // ==/UserScript== ;(function () { 'use strict' // Your code here... // http://96thz.cc/forum.php?mod=forumdisplay&fid=181&filter=typeid&typeid=36&orderby=heats&page=2 const namespace = 'paso-thz-helper' const middlewareHost = 'www.example.net' if (window.location.hostname === middlewareHost) { window.paso.crossOriginStorage.startStorageServer() } else { handleTarget(window.location.protocol + '//' + middlewareHost) } function handleTarget(server) { const CONTEXT = { env: 'prod' } const storage = window.paso.crossOriginStorage.createStorageClient(server) const querySearch = resolveQuerySearch() const instance = getInstance({ querySearch }) if (!instance) { console.error('No instance matched!') return } const storageKey = `${namespace}-${instance.name}` const POPUP_INJECT_CONFIG = { namespace, actionName: 'Settings', collapse: '70%', location: '35%', content: `<div id="${namespace}-app"></div>`, style: ` <style> .${namespace} * { font-size: 14px; color: black; } .${namespace} .table { display: table; border-collapse: separate; border-spacing: 4px 4px; } .${namespace} .table-row { display: table-row; } .${namespace} .table-cell { display: table-cell; } .${namespace} .text-right { text-align: right; } .${namespace} .flex.gap-8 { gap: 8px; } </style>` } const VUE_COMPONENT_PARAM_SELECT = { template: ` <label class="table-row"> <div class="table-cell text-right">{{title}}</div> <div class="table-cell"> <div class="flex"> <input class="input monospace" v-if="!hideInput" v-model.trim="inputValue" /> <select class="input" v-if="!!options" v-model="inputValue"> <option v-for="o in options" :value="o.value">{{o.label}}</option> </select> </div> </div> </label>`, props: ['title', 'value', 'options', 'hideInput'], emits: ['update:value'], computed: { inputValue: { get() { return this.$props.value }, set(v) { this.$emit('update:value', v) } } } } const VUE_APP_CONFIG = { template: ` <div class="flex col gap-8"> <div class="table"> <SelectFormItem title="执行时机" v-model:value="executeSelector" /> <SelectFormItem title="path" v-model:value="path" /> <SelectFormItem title="板块" v-model:value="params.fid" :options="forms.fidOptions" /> <SelectFormItem title="筛选" v-model:value="params.filter" :options="forms.filterOptions" :hideInput="true" /> <SelectFormItem title="系列" v-if="params.filter === 'typeid'" v-model:value="params.typeid" :options="forms.typeidOptions[params.fid]" /> <SelectFormItem title="排序" v-model:value="params.orderby" :options="forms.orderbyOptions" :hideInput="true" /> <SelectFormItem title="搜索" v-model:value="search" /> </div> <button class="button" @click="apply">应用</button> </div>`, components: { SelectFormItem: VUE_COMPONENT_PARAM_SELECT }, data() { return { ...instance.getDefaultData(), forms: Object.freeze(instance.getFormsData()) } }, computed: {}, methods: { apply() { storage .setItem(storageKey, { executeSelector: this.executeSelector, path: this.path, params: { ...this.params }, search: this.search }) .then(() => (window.location = getPageLocation(this.path, this.params, querySearch.page || '1'))) } }, mounted() { storage .getItem(storageKey) .then((resp) => JSON.parse(resp.data || '')) .catch(() => instance.getDefaultData()) .then((data) => { this.executeSelector = data.executeSelector this.path = data.path this.params.fid = data.params.fid this.params.filter = data.params.filter this.params.typeid = data.params.typeid this.params.orderby = data.params.orderby this.search = data.search }) } } loadJS('https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.31/vue.global.prod.min.js') .then(() => window.paso.injectPopup(POPUP_INJECT_CONFIG)) .then(() => window.Vue.createApp(VUE_APP_CONFIG).mount(`#${namespace}-app`)) storage .getItem(storageKey) .then((resp) => JSON.parse(resp.data || '')) .catch(() => instance.getDefaultData()) .then((data) => ready(data.executeSelector) .then(() => handlePageContent(data)) .catch((e) => { console.warn(e) }) ) function handlePageContent(data) { const pageMode = instance.getPageMode() // 隐藏广告 instance.getNeedToHideElements(pageMode)?.forEach((el) => { el.setAttribute('style', 'display: none !important;') }) switch (pageMode) { case 'forumdisplay': instance.handlePostList(data) break case 'viewthread': instance.handlePostContent() break } } if (CONTEXT.env === 'dev') { window._$_getCategory = function () { const arr = [] document.querySelectorAll('.bm_c .fl_g dt a')?.forEach((a) => { const item = {} if (a.firstChild && a.firstChild instanceof Text) { item.label = a.firstChild.wholeText } if (a.href) { item.value = getStartInt(a.href) } arr.push(item) }) console.log(arr) console.log(JSON.stringify(arr)) } window._$_getTypes = function () { const arr = [] document.querySelectorAll('ul#thread_types > li > a')?.forEach((a) => { const item = { value: '' } if (a.firstChild && a.firstChild instanceof Text) { item.label = a.firstChild.wholeText } if (a.href) { const i = a.href.indexOf('?') if (i >= 0) { const qs = resolveQuerySearch(a.href.substring(i)) item.value = qs.typeid || '' } } arr.push(item) }) if (!arr.length) arr.push({ value: '', label: '全部' }) console.log(arr) console.log(JSON.stringify(arr)) } } } function resolveQuerySearch(search) { const result = {} search = search || window.location.search if (search) { if (search.startsWith('?')) { search = search.substring(1) } search .split('&') .map((entry) => { return entry.split('=') }) .forEach((entry) => { result[entry[0]] = entry[1] }) } return result } function loadJS(src) { return new Promise((resolve) => { const script = document.createElement('script') script.src = src script.onload = resolve document.head.append(script) }) } function ready(selector, interval = 300, timeout = 3000) { return new Promise((resolve, reject) => { const loopId = setInterval( (startTime) => { if (document.querySelector(selector)) { clearInterval(loopId) resolve() } else { if (Date.now() - startTime > timeout) { clearInterval(loopId) reject(`look up for target '${selector}' timeout: ${timeout}ms`) } } }, interval, Date.now() ) }) } function getStartInt(str) { let result = '' if (str) { for (let i = 0; i < str.length; i++) { if (isNaN(parseInt(str[i]))) { if (result) break } else { result += str[i] } } } return parseInt(result) } function getEndInt(str) { let result = '' if (str) { for (let i = str.length - 1; i >= 0; i--) { if (isNaN(parseInt(str[i]))) { if (result) break } else { result = str[i] + result } } } return parseInt(result) } function getPageLocation(path, p, num) { const params = { mod: 'forumdisplay', fid: p.fid || '', filter: p.filter || '', typeid: p.typeid || '', orderby: p.orderby || '', page: num } const paramStr = '?' + Object.entries(params) .map((entry) => { return `${entry[0]}=${entry[1]}` }) .join('&') return path + paramStr } function getInstance(arg) { const { querySearch } = arg const getPageMode = () => { const path = window.location.pathname if (path === '/forum.php') return querySearch.mod || 'index' if (path.includes('forum')) return 'forumdisplay' if (path.includes('thread')) return 'viewthread' return 'index' } const handlePostList = (data) => { const { path, params, search } = data // 替换分页 document.querySelectorAll('#fd_page_bottom > .pg, #fd_page_top > .pg')?.forEach((pw) => { const strong = pw.querySelector('strong') let currentPage = 1 if (strong) { currentPage = getStartInt(strong.innerText) } pw.querySelectorAll('a[href]')?.forEach((page) => { const pageNum = getEndInt(page.innerText) if (isNaN(pageNum)) { if (page.classList.contains('prev')) { page.href = getPageLocation(path, params, currentPage - 1) } else if (page.classList.contains('nxt')) { page.href = getPageLocation(path, params, currentPage + 1) } } else { page.href = getPageLocation(path, params, pageNum) } }) const pageInput = pw.querySelector('input[name=custompage]') if (pageInput) { pageInput.onkeydown = function (event) { if (event.keyCode === 13) { window.location = getPageLocation(path, params, this.value) window.doane?.(event) } } } }) // 过滤结果 const notMatch = [] const match = (t) => { return t && t.indexOf && t.indexOf(search) >= 0 } document.querySelectorAll('#threadlisttableid > tbody')?.forEach((item) => { if (!match(item.querySelector('a.s.xst')?.innerText)) { notMatch.push(item) } }) const setFilter = (filter) => { notMatch.forEach((item) => { if (filter) { item.setAttribute('style', 'display: none !important;') } else { item.removeAttribute('style') } }) } // 增加过滤按钮 const tf = document.querySelector('#threadlist .tf') if (tf) { let filterCB = tf.querySelector(`label input.${namespace}`) if (!filterCB) { filterCB = document.createElement('input') filterCB.classList.add(namespace) filterCB.type = 'checkbox' const label = document.createElement('label') label.append(filterCB, document.createTextNode('只看搜索结果')) tf.append(document.createTextNode('\xA0'), label) } filterCB.checked = !!search if (search) setFilter(true) filterCB.onchange = (e) => setFilter(e.target.checked) } } const addHideFloorCheckbox = () => { // 添加隐藏楼层按钮 const pt = document.querySelector('#pt') if (pt) { let hideCB = pt.querySelector(`label input.${namespace}`) if (!hideCB) { hideCB = document.createElement('input') hideCB.classList.add(namespace) hideCB.type = 'checkbox' const label = document.createElement('label') label.append(hideCB, document.createTextNode('隐藏其他楼层')) pt.append(document.createTextNode('\xA0'), label) } const otherReply = [] document.querySelectorAll('#postlist > div[id]')?.forEach((div) => { otherReply.push(div) }) if (otherReply.length) otherReply.shift() const hideOther = (h) => { otherReply.forEach((div) => { if (h) { div.setAttribute('style', 'display: none !important;') } else { div.removeAttribute('style') } }) } hideCB.checked = true hideOther(true) hideCB.onchange = (e) => hideOther(e.target.checked) } } if (window.location.hostname.includes('thz')) { return { name: 'thz', getDefaultData() { return { executeSelector: '#discuz_tips', path: '/forum.php', params: { fid: '181', filter: 'typeid', typeid: '', orderby: 'heats' }, search: '' } }, getFormsData() { return { fidOptions: [ { value: '181', label: '亚洲無碼原創' }, { value: '220', label: '亚洲有碼原創' }, { value: '182', label: '欧美無碼' }, { value: '69', label: '国内原创(BT)' }, { value: '203', label: '各类合集资源' }, { value: '177', label: '蓝光高清原盘' }, { value: '39', label: '日韩情色(BT)' }, { value: '40', label: '西方美人(BT)' }, { value: '60', label: '国产专栏(BT)' }, { value: '58', label: '三级伦理(BT)' }, { value: '41', label: '动漫精品(BT)' }, { value: '63', label: '精美套图(BT)' }, { value: '79', label: '桃花原創發片預告' }, { value: '172', label: '桃花原創合集(BT)' }, { value: '73', label: '三级*未分级(BT)' }, { value: '137', label: '美圖寫真(BT)' }, { value: '196', label: '热门电影(BT)' } ], filterOptions: [{ value: 'typeid', label: '系列' }], typeidOptions: { 181: [ { value: '', label: '全部' }, { value: '664', label: 'FC2PPV' }, { value: '33', label: '美女步兵' }, { value: '35', label: '一本道系' }, { value: '36', label: '加勒比系' }, { value: '64', label: '1919go' }, { value: '39', label: '10musu' }, { value: '47', label: '性孽變態' }, { value: '53', label: '素人系列' }, { value: '37', label: '东京热系' }, { value: '38', label: 'HEYZO' }, { value: '116', label: 'MuraTV' }, { value: '67', label: 'HeYPPV' }, { value: '50', label: '仟人斬系' }, { value: '51', label: '金髪天國' }, { value: '52', label: '盜撮系列' }, { value: '49', label: 'ガチん娘' }, { value: '40', label: '人妻熟女' }, { value: '319', label: 'pacoma' }, { value: '195', label: '無毛宣言' }, { value: '194', label: 'メス豚系' }, { value: '226', label: 'RealDiva' }, { value: '114', label: 'XXX-AV' }, { value: '196', label: '誘惑天国' }, { value: '198', label: '经典稀缺' }, { value: '200', label: '問答無用' }, { value: '44', label: 'JavHD' }, { value: '321', label: 'h4610系' }, { value: '322', label: '素人妻系' }, { value: '320', label: '人妻斬系' }, { value: '501', label: 'AV志向系' }, { value: '616', label: '店長推薦' }, { value: '731', label: '本生素人' }, { value: '48', label: '3D影畫' }, { value: '523', label: 'H:G:M:O' }, { value: '222', label: '写真专辑' }, { value: '768', label: '无码流出' }, { value: '770', label: '麻豆传媒' } ], 220: [ { value: '', label: '全部' }, { value: '91', label: '高清騎兵' }, { value: '92', label: '美女騎兵' }, { value: '109', label: '美素人系' }, { value: '110', label: '剧情系列' }, { value: '221', label: '无损原盘' } ], 182: [ { value: '', label: '全部' }, { value: '41', label: 'x-Art' }, { value: '42', label: 'Wow' }, { value: '43', label: 'bangbros' }, { value: '45', label: 'brazzers' }, { value: '120', label: 'naughtyamerica' }, { value: '122', label: 'babes' }, { value: '46', label: 'realitykings' }, { value: '115', label: 'DDF' }, { value: '111', label: '按摩师系' }, { value: '214', label: 'twistys' }, { value: '121', label: 'nubilefilms' }, { value: '197', label: 'hegre-art' }, { value: '227', label: 'wicked' }, { value: '150', label: 'BDSM' }, { value: '216', label: '邪惡天使' }, { value: '219', label: 'vixen' }, { value: '220', label: 'passion-hd' }, { value: '223', label: '18yoga' }, { value: '224', label: 'private' }, { value: '193', label: 'joymii' }, { value: '201', label: '21members' }, { value: '202', label: 'colette' }, { value: '213', label: 'mofos' }, { value: '215', label: 'nubiles' }, { value: '217', label: 'blacked' }, { value: '225', label: 'sexart' }, { value: '199', label: 'Femjoy' }, { value: '228', label: 'digitalplayground' }, { value: '496', label: '18xgirls' }, { value: '497', label: 'teamskeet' }, { value: '498', label: 'sexyhub' }, { value: '499', label: 'fakehub' }, { value: '500', label: 'realitygang' }, { value: '218', label: 'julesjordan' }, { value: '513', label: 'TUSHY' }, { value: '605', label: 'ANALIZED' }, { value: '615', label: 'HARDX' }, { value: '730', label: 'nubiles-porn' }, { value: '732', label: 'lubed' }, { value: '769', label: 'deeper' }, { value: '87', label: 'SM变态' }, { value: '88', label: '其它分类' }, { value: '86', label: '肛交天堂' } ], 69: [ { value: '', label: '全部' }, { value: '9', label: '国内无码' }, { value: '10', label: '国内偷拍' }, { value: '11', label: '主播探花' }, { value: '65', label: '美女资源' }, { value: '192', label: '国模私拍' } ], 203: [ { value: '', label: '全部' }, { value: '55', label: '亚洲无码' }, { value: '56', label: '亚洲有码' }, { value: '57', label: '欧美情色' }, { value: '63', label: '其他资源' } ], 177: [ { value: '', label: '全部' }, { value: '27', label: '亚洲无码' }, { value: '28', label: '亚洲有码' }, { value: '29', label: '欧美情色' }, { value: '30', label: '其他原盘' } ], 39: [ { value: '', label: '全部' }, { value: '1', label: '无码' }, { value: '2', label: '有码' } ], 40: [{ value: '', label: '全部' }], 60: [{ value: '', label: '全部' }], 58: [{ value: '', label: '全部' }], 41: [{ value: '', label: '全部' }], 63: [{ value: '', label: '全部' }], 79: [{ value: '', label: '全部' }], 172: [ { value: '', label: '全部' }, { value: '18', label: '亚洲无码' }, { value: '19', label: '亚洲有码' }, { value: '20', label: '中文字幕' }, { value: '21', label: '欧美情色' }, { value: '22', label: '伦理电影' }, { value: '23', label: '美女写真' }, { value: '24', label: '成人动漫' } ], 73: [{ value: '', label: '全部' }], 137: [{ value: '', label: '全部' }], 196: [{ value: '', label: '全部' }] }, orderbyOptions: [ { value: 'heats', label: '最热' }, { value: 'lastpost', label: '最新' }, { value: 'dateline', label: '时间' } ] } }, getPageMode, getNeedToHideElements(pageMode) { const elements = [] let selector = '.a_fl, .a_fr, .a_cn, #toptb + div[align=center], #diynavtop, #toptb, #hd, #ft, #f_pst, #newspecial' switch (pageMode) { case 'forumdisplay': selector += ', #autopbn, #newspecialtmp' break case 'viewthread': selector += ', #pgt, .pgt, .pgbtn, #hiddenpoststip, .pgs' break case 'index': selector += ', #autopbn, #ct > .mn > style + div, #ct > .mn > div + table' break } if (selector) { elements.push(...document.querySelectorAll(selector)) } return elements }, handlePostList, handlePostContent() { addHideFloorCheckbox() } } } if (window.location.hostname.includes('wpzo')) { return { name: '98t', getDefaultData() { return { executeSelector: '#scrolltop', path: '/forum.php', params: { fid: '36', filter: 'typeid', typeid: '', orderby: 'heats' }, search: '' } }, getFormsData() { return { fidOptions: [ { label: '国产原创', value: 2 }, { label: '亚洲无码原创', value: 36 }, { label: '亚洲有码原创', value: 37 }, { label: '高清中文字幕', value: 103 }, { label: '三级写真', value: 107 }, { label: 'VR视频区', value: 160 }, { label: '素人有码系列', value: 104 }, { label: '欧美无码', value: 38 }, { label: '4K原版', value: 151 }, { label: '韩国主播', value: 152 }, { label: '动漫原创', value: 39 }, { label: '国产自拍', value: 41 }, { label: '中文字幕', value: 109 }, { label: '日韩无码', value: 42 }, { label: '日韩有码', value: 43 }, { label: '欧美风情', value: 44 }, { label: '卡通动漫', value: 45 }, { label: '剧情三级', value: 46 }, { label: '自提字幕区', value: 145 }, { label: '自译字幕区', value: 146 }, { label: '字幕分享区', value: 121 }, { label: '新作区', value: 159 }, { label: '原创自拍区', value: 155 }, { label: '转贴自拍', value: 125 }, { label: '华人街拍区', value: 50 }, { label: '亚洲性爱', value: 48 }, { label: '欧美性爱', value: 49 }, { label: '卡通动漫', value: 117 }, { label: '套图下载', value: 165 }, { label: '综合讨论区', value: 95 }, { label: 'AI专区', value: 166 }, { label: '网友原创区', value: 141 }, { label: '转帖交流区', value: 141 } ], filterOptions: [{ value: 'typeid', label: '系列' }], typeidOptions: { 2: [ { value: '', label: '全部' }, { value: '684', label: '国产无码' }, { value: '', label: '主播录制' }, { value: '686', label: '360水滴' }, { value: '687', label: '厕所偷拍' } ], 36: [ { value: '', label: '全部' }, { value: '586', label: 'sm-miracle' }, { value: '822', label: 'cospuri' }, { value: '724', label: '盗窃系列' }, { value: '723', label: 'japornxxx' }, { value: '683', label: 'レズのしんぴ' }, { value: '672', label: '无码破解' }, { value: '671', label: '加勒比PPV' }, { value: '660', label: '金髪天國' }, { value: '654', label: '无码流出' }, { value: '631', label: 'urabukkake' }, { value: '619', label: 'handjobjapan' }, { value: '618', label: 'spermmania' }, { value: '591', label: 'fellatiojapan' }, { value: '590', label: 'uralesbian' }, { value: '589', label: 'legsjapan' }, { value: '587', label: 'roselip-fetish' }, { value: '368', label: 'FC2PPV' }, { value: '583', label: '本生素人TV' }, { value: '553', label: 'エッチな4610' }, { value: '552', label: 'エッチな0930' }, { value: '551', label: '人妻斬り' }, { value: '537', label: 'xxx-av' }, { value: '523', label: '熟女俱樂部' }, { value: '449', label: '东京热' }, { value: '379', label: '店長推薦' }, { value: '375', label: 'heyppv' }, { value: '374', label: 'pacoma' }, { value: '373', label: '女体のしんぴ' }, { value: '372', label: '10musu' }, { value: '371', label: '一本道系' }, { value: '370', label: '加勒比系' }, { value: '369', label: 'HEYZO' } ], 37: [{ value: '', label: '全部' }], 103: [ { value: '', label: '全部' }, { value: '480', label: '有码高清' }, { value: '481', label: '无码高清' } ], 107: [ { value: '', label: '全部' }, { value: '629', label: '巴西三级' }, { value: '628', label: '克罗地亚三级' }, { value: '624', label: '德国三级' }, { value: '623', label: '美国写真' }, { value: '622', label: '俄罗斯三级' }, { value: '621', label: '墨西哥三级' }, { value: '620', label: '西班牙三级' }, { value: '617', label: '国产写真' }, { value: '616', label: '波兰三级' }, { value: '615', label: '泰国四级' }, { value: '614', label: '阿根廷三级' }, { value: '613', label: '香港四级' }, { value: '612', label: '瑞士四级' }, { value: '611', label: '瑞士三级' }, { value: '610', label: '挪威三级' }, { value: '609', label: '台湾三级' }, { value: '608', label: '荷兰三级' }, { value: '607', label: '意大利三级' }, { value: '606', label: '加拿大三级' }, { value: '605', label: '法国四级' }, { value: '604', label: '泰国三级' }, { value: '603', label: '台湾四级' }, { value: '602', label: '英国三级' }, { value: '601', label: '英国四级' }, { value: '600', label: '国产四级' }, { value: '599', label: '美国四级' }, { value: '598', label: '法国三级' }, { value: '597', label: '国产三级' }, { value: '596', label: '香港三级' }, { value: '595', label: '美国三级' }, { value: '594', label: '日本三级' }, { value: '593', label: '韩国三级' }, { value: '592', label: '日本写真' }, { value: '625', label: '丹麦三级' }, { value: '630', label: '意大利四级' }, { value: '633', label: '德国四级' }, { value: '634', label: '瑞典四级' }, { value: '645', label: '丹麦四级' }, { value: '646', label: '荷兰写真' }, { value: '650', label: '比利时四级' }, { value: '655', label: '澳大利亚三级' }, { value: '656', label: '印度三级' }, { value: '657', label: '菲律宾三级' }, { value: '658', label: '新加坡写真' }, { value: '659', label: '韩国写真' }, { value: '667', label: '法国写真' }, { value: '668', label: '英国写真' }, { value: '669', label: '俄罗斯写真' }, { value: '670', label: '智利三级' } ], 160: [{ value: '', label: '全部' }], 104: [ { value: '', label: '全部' }, { value: '533', label: 'G-area' }, { value: '728', label: '300MIUM' }, { value: '729', label: '332NAMA' }, { value: '730', label: '326EVA' }, { value: '731', label: '328HMDN' }, { value: '807', label: '336KNB' }, { value: '808', label: '200GANA' }, { value: '809', label: '300MAAN' }, { value: '810', label: '300NTK' }, { value: '811', label: '390JAC' }, { value: '812', label: '326SCP' }, { value: '727', label: '259LUXU' }, { value: '726', label: 'SIRO' }, { value: '534', label: 'Mywife' }, { value: '535', label: 'S-cute' }, { value: '536', label: 'FC2' }, { value: '557', label: 'himemix' }, { value: '563', label: 'getchu' }, { value: '588', label: 'siro-hame' }, { value: '626', label: 'r-file' }, { value: '627', label: 'giga-web' }, { value: '632', label: 'knights-visual' }, { value: '725', label: '230OREX' }, { value: '813', label: '其他系列' } ], 38: [{ value: '', label: '全部' }], 151: [ { value: '', label: '全部' }, { value: '823', label: '无码' }, { value: '824', label: '有码' } ], 152: [{ value: '', label: '全部' }], 39: [ { value: '', label: '全部' }, { value: '404', label: '无码' }, { value: '405', label: '有码' } ], 41: [{ value: '', label: '全部' }], 109: [{ value: '', label: '全部' }], 42: [{ value: '', label: '全部' }], 43: [{ value: '', label: '全部' }], 44: [{ value: '', label: '全部' }], 45: [{ value: '', label: '全部' }], 46: [{ value: '', label: '全部' }], 145: [ { value: '', label: '全部' }, { value: '814', label: '有码字幕' }, { value: '815', label: '无码字幕' } ], 146: [ { value: '', label: '全部' }, { value: '845', label: '欧美' }, { value: '846', label: '日本' } ], 121: [ { value: '', label: '全部' }, { value: '664', label: '有码字幕' }, { value: '665', label: '无码字幕' }, { value: '848', label: '缺字需修正' } ], 159: [ { value: '', label: '全部' }, { value: '849', label: '新作' } ], 155: [ { value: '', label: '全部' }, { value: '820', label: '原创自拍' }, { value: '821', label: '投稿送码' } ], 125: [ { value: '', label: '全部' }, { value: '831', label: '性爱自拍' }, { value: '832', label: '生活自拍' } ], 50: [ { value: '', label: '全部' }, { value: '833', label: '原创街拍' }, { value: '838', label: '转帖街拍' }, { value: '834', label: '模拍' } ], 48: [{ value: '', label: '全部' }], 49: [{ value: '', label: '全部' }], 117: [ { value: '', label: '全部' }, { value: '647', label: '日文' }, { value: '648', label: '中文' }, { value: '649', label: '韩文' }, { value: '835', label: '3D' }, { value: '836', label: '黑白' }, { value: '837', label: '彩漫' } ], 165: [{ value: '', label: '全部' }], 95: [ { value: '', label: '全部' }, { value: '709', label: '困惑求助' }, { value: '710', label: '技术交流' }, { value: '711', label: '心情感悟' }, { value: '712', label: 'AV新闻' }, { value: '713', label: '图文故事' }, { value: '714', label: '今日话题' }, { value: '715', label: '不吐不快' }, { value: '716', label: '情色分享' }, { value: '843', label: '游客投稿' } ], 166: [ { value: '', label: '全部' }, { value: '851', label: 'AI换脸' }, { value: '852', label: 'AI破解' }, { value: '853', label: 'AI增强' }, { value: '854', label: 'AI作图' }, { value: '855', label: '教程工具' } ], 141: [ { value: '', label: '全部' }, { value: '688', label: '个人导航' }, { value: '689', label: '国产合集' }, { value: '690', label: '欧美合集' }, { value: '691', label: '日本合集' }, { value: '692', label: 'AI破解/换脸' }, { value: '693', label: '动漫/二次元' }, { value: '694', label: '蓝光原盘' }, { value: '695', label: '套图系列' }, { value: '696', label: '其他資源' }, { value: '705', label: '自压/增强' }, { value: '708', label: '版务管理' }, { value: '844', label: '合集推荐' } ], 142: [ { value: '', label: '全部' }, { value: '697', label: '国产自拍' }, { value: '698', label: '直播视频' }, { value: '699', label: '亚洲无码' }, { value: '700', label: '亚洲有码' }, { value: '701', label: '偷拍視頻' }, { value: '702', label: '动漫/二次元' }, { value: '703', label: '欧美风情' }, { value: '704', label: '其他資源' }, { value: '706', label: '合集资源' } ] }, orderbyOptions: [ { value: 'heats', label: '最热' }, { value: 'lastpost', label: '最新' }, { value: 'dateline', label: '时间' } ] } }, getPageMode, getNeedToHideElements(pageMode) { const elements = [] let selector = '.show-text, .show-text2, .show-text3, .show-text4, #toptb, #hd, #ft, #f_pst, #newspecial' switch (pageMode) { case 'forumdisplay': selector += ', #autopbn, #newspecialtmp' break case 'viewthread': selector += ', #pgt, .pgt, .pgbtn, #hiddenpoststip, .pgs' break case 'index': selector += '' break } if (selector) { elements.push(...document.querySelectorAll(selector)) } return elements }, handlePostList, handlePostContent() { addHideFloorCheckbox() // 收起评分 const hideRate = document.querySelector('.rate a.op') if (hideRate && hideRate.innerText === '收起') { hideRate.dispatchEvent(new MouseEvent('click')) } } } } } })()