diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 46e92d441da..0508af3ebb1 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,3 @@ # These are supported funding model platforms ko_fi: hoothin -custom: ["https://www.buymeacoffee.com/hoothin", "https://paypal.me/hoothin", "https://afdian.net/a/hoothin", "https://smms.app/image/lEqKWLHG7UBO6AY"] +custom: ["https://paypal.me/hoothin", "https://afdian.com/a/hoothin"] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea7824f..d7c12b342bb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,8 @@ --- name: Bug report -about: Create a report to help us improve +about: Create a report to help us improve. Please publish the issue according to the + guidelines, otherwise the request will be ignored and closed directly. Your understanding + and cooperation are appreciated. title: '' labels: '' assignees: '' @@ -24,7 +26,7 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. iOS] + - OS: [e.g. Mac] - Browser [e.g. chrome, safari] - Version [e.g. 22] diff --git a/.github/ISSUE_TEMPLATE/custom-rule-request.md b/.github/ISSUE_TEMPLATE/custom-rule-request.md new file mode 100644 index 00000000000..d012e0245f3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom-rule-request.md @@ -0,0 +1,25 @@ +--- +name: Custom rule request +about: Seek help for custom rule. Please publish the issue according to the guidelines, + otherwise the request ⚠will be ignored and closed directly⚠. Your understanding and + cooperation are appreciated. +title: '' +labels: '' +assignees: '' + +--- + +**The url of site** +The example urls of site. ⚠**Do not paste only domain without pathname, or I'll close the issue without explanation**⚠. + +**Is your request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the result you'd like with the rule** +A clear and concise description of what you want to happen. + +**Custom rule you've tried** +The rule you've made before. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d615..c50843bbfdb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,8 @@ --- name: Feature request -about: Suggest an idea for this project +about: Suggest an idea for this project. Please publish the issue according to the + guidelines, otherwise the request will be ignored and closed directly. Your understanding + and cooperation are appreciated. title: '' labels: '' assignees: '' diff --git a/.github/workflows/build-dist.yml b/.github/workflows/build-dist.yml new file mode 100644 index 00000000000..ef4f9880fb6 --- /dev/null +++ b/.github/workflows/build-dist.yml @@ -0,0 +1,33 @@ +name: Build Picviewer CE+ Dist + +on: + push: + branches: + - master + paths: + - 'Picviewer CE*/Picviewer CE*.user.js' + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Replace require paths, add timestamp, and create dist file + run: | + sed -E \ + -e "s#https://update.greasyfork.org/scripts/6158/([0-9]+)/GM_config%20CN.js#https://hoothin.github.io/UserScripts/Picviewer%20CE%2B/GM_config%20CN.js?v=\1#g" \ + -e "s#https://update.greasyfork.org/scripts/438080/([0-9]+)/pvcep_rules.js#https://hoothin.github.io/UserScripts/Picviewer%20CE%2B/pvcep_rules.js?v=\1#g" \ + -e "s#https://update.greasyfork.org/scripts/440698/([0-9]+)/pvcep_lang.js#https://hoothin.github.io/UserScripts/Picviewer%20CE%2B/pvcep_lang.js?v=\1#g" \ + "Picviewer CE+/Picviewer CE+.user.js" > "Picviewer CE+/dist.user.js" + + - name: Commit and push dist.user.js + run: | + git config --local user.email "rixixi@gmail.com" + git config --local user.name "hoothin-update" + git add "Picviewer CE+/dist.user.js" + git commit -m "chore(Picviewer CE+): Auto-generate dist.user.js" + git push https://${{ secrets.ACTION_SECRET }}@github.com/${{ github.repository }} diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml new file mode 100644 index 00000000000..9bdd4e3eec5 --- /dev/null +++ b/.github/workflows/jekyll-gh-pages.yml @@ -0,0 +1,60 @@ +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll with GitHub Pages dependencies preinstalled + +on: + # Runs on pushes targeting the default branch + push: + branches: ["master"] + paths-ignore: + - 'Pagetual/items_all.json' + - 'Pagetual/pagetualRules.json' + - '.github/*' + - '.github/*/*' + workflow_run: + workflows: ["Update Version on File Change"] + types: + - completed + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Build with Jekyll + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/json-validator.yml b/.github/workflows/json-validator.yml new file mode 100644 index 00000000000..01911cc1730 --- /dev/null +++ b/.github/workflows/json-validator.yml @@ -0,0 +1,21 @@ +name: Validate JSON + +on: + pull_request: + paths: + - 'Pagetual/pagetualRules.json' + +jobs: + validate-json: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: json-yaml-validate + uses: GrantBirki/json-yaml-validate@v5 + id: json-yaml-validate + with: + json_schema: Pagetual/pagetual.schema.json + files: | + Pagetual/pagetualRules.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 25e00b8e168..9da5ef0d1fa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,3 +46,5 @@ jobs: with: url: http://wedata.net/databases/AutoPagerize/items_all.json file_in_repo: Pagetual/items_all.json + git_user: hoothin-update + git_email: rixixi@gmail.com diff --git a/.github/workflows/update_version.yml b/.github/workflows/update_version.yml new file mode 100644 index 00000000000..0d1af146533 --- /dev/null +++ b/.github/workflows/update_version.yml @@ -0,0 +1,51 @@ +name: Update Version on File Change +on: + push: + paths: + - 'Pagetual/items_all.json' + - 'Pagetual/pagetualRules.json' + workflow_run: + workflows: ["Collect wedata for pagetual"] + types: + - completed + +jobs: + update_version: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check file modification timestamps + id: check_file_timestamps + run: | + version_timestamp=$(git log -1 --format="%at" Pagetual/version) + items_all_timestamp=$(git log -1 --format="%at" Pagetual/items_all.json) + pagetualRules_timestamp=$(git log -1 --format="%at" Pagetual/pagetualRules.json) + if [[ $version_timestamp < $items_all_timestamp || $version_timestamp < $pagetualRules_timestamp ]]; then + version=$(cat Pagetual/version) + else + version=0 + echo "Version file is not updated. Skipping version read." + fi + echo "VERSION=$version" >> $GITHUB_ENV + + - name: Increment version + if: env.VERSION != '0' + id: increment_version + run: echo "VERSION=$((VERSION + 1))" >> $GITHUB_ENV + + - name: Update version file + if: env.VERSION != '0' + run: echo $VERSION > Pagetual/version + + - name: Commit version update + if: env.VERSION != '0' + run: | + git config --local user.email "rixixi@gmail.com" + git config --local user.name "hoothin-update" + git add Pagetual/version + git commit -m "Update version of Pagetual rules to $VERSION" + git push https://${{ secrets.ACTION_SECRET }}@github.com/${{ github.repository }} diff --git a/91wii/91wii.user.js b/91wii/91wii.user.js deleted file mode 100644 index b94c7d4fd79..00000000000 --- a/91wii/91wii.user.js +++ /dev/null @@ -1,50 +0,0 @@ -// ==UserScript== -// @name 91wii -// @namespace hoothin -// @version 0.6 -// @description 91wii签到 -// @author hoothin -// @match https://*.91wii.com/* -// @match https://*.91tvg.com/* -// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== -// @run-at document-idle -// @grant unsafeWindow -// ==/UserScript== - -(function() { - 'use strict'; - setTimeout(()=>{ - var formula = document.querySelector("b"),dcsignin = document.querySelector("#dcsignin_tips"); - if(formula && /^[\d\s\+-=?]+$/.test(formula.innerText.trim())){ - setTimeout(function(){ - document.querySelector("input[type=text]").value=eval(formula.innerText.match(/[\d\s\+-]+/)[0]); - document.querySelector("input[type=submit]").click(); - },10); - }else if(dcsignin){ - if(dcsignin.style.background.indexOf("signin_yes") != -1)return; - unsafeWindow.showWindow('sign', 'plugin.php?id=dc_signin:sign'); - var checkTimes=0; - let signInterval=setInterval(()=>{ - var signWin=document.querySelector("#fwin_sign"); - if(signWin){ - signWin.style.display="none"; - } - var dialogWin=document.querySelector("#fwin_dialog"); - if(dialogWin){ - dialogWin.style.display="none"; - } - let emotIndex=parseInt(Math.random() * 10) + 1; - if(document.querySelector("#emot_" + emotIndex)){ - clearInterval(signInterval); - document.querySelector("#emot_" + emotIndex).click(); - //document.querySelector('#content').value = '君子有四时,朝以听政,昼以访问,夕以修令,夜以安身。'; - document.querySelector("button[name=signpn]").click(); - unsafeWindow.hideWindow('sign'); - }else if(checkTimes++>15){ - clearInterval(signInterval); - unsafeWindow.hideWindow('sign'); - } - }, 100); - } - },2000); -})(); \ No newline at end of file diff --git a/91wii/README.md b/91wii/README.md deleted file mode 100644 index d7cb01b5315..00000000000 --- a/91wii/README.md +++ /dev/null @@ -1 +0,0 @@ -# 91wii 自动作答数学题,自动签到 diff --git a/Appinn Comment/AppinnComment.user.js b/Appinn Comment/AppinnComment.user.js new file mode 100644 index 00000000000..46076e191bc --- /dev/null +++ b/Appinn Comment/AppinnComment.user.js @@ -0,0 +1,46 @@ +// ==UserScript== +// @name Appinn comment +// @name:zh-CN 小众软件评论显示 +// @namespace hoothin +// @version 2024-06-08 +// @description Display the comments from the Appinn forum on the bottom of the corresponding page on the main site. +// @description:zh-CN 将小众软件论坛的评论内容显示在主站对应页面下部 +// @author hoothin +// @match https://www.appinn.com/* +// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== +// @grant GM_xmlhttpRequest +// @connect meta.appinn.net +// @downloadURL https://update.greasyfork.org/scripts/497293/Appinn%20comment.user.js +// @updateURL https://update.greasyfork.org/scripts/497293/Appinn%20comment.meta.js +// ==/UserScript== + +(function() { + 'use strict'; + const commentLink = document.querySelector('a.wpdc-join-discussion-link'); + if (!commentLink) return; + GM_xmlhttpRequest({ + url: commentLink.href, + method: 'GET', + onload: function(res) { + try { + let doc = document.implementation.createHTMLDocument(''); + doc.documentElement.innerHTML = res.response; + let dataPreloaded = doc.getElementById('data-preloaded'); + if (!dataPreloaded) return; + dataPreloaded = JSON.parse(JSON.parse(dataPreloaded.dataset.preloaded)["topic_" + commentLink.href.match(/\d+/)[0]]).post_stream.posts; + let posts = document.createElement("ul"); + posts.style.maxHeight = '90vh'; + posts.style.overflow = 'auto'; + posts.style.margin = '0'; + let title = document.createElement("h3"); + title.innerText = "评论内容"; + document.querySelector('article').appendChild(title); + document.querySelector('article').appendChild(posts); + dataPreloaded.forEach(item => { + posts.innerHTML += `
  • ${item.display_username || item.username}

    ${item.cooked}
  • `; + }); + } catch (e) { + } + } + }); +})(); \ No newline at end of file diff --git a/BingBgForBaidu/BingBgForBaidu.user.js b/BingBgForBaidu/BingBgForBaidu.user.js index 48ac7eb7e2e..ba0fa832396 100644 --- a/BingBgForBaidu/BingBgForBaidu.user.js +++ b/BingBgForBaidu/BingBgForBaidu.user.js @@ -2,7 +2,7 @@ // @name 百Bing图 // @name:en BingBgForBaidu // @namespace hoothin -// @version 2.3.36 +// @version 2.3.45 // @description 给百度首页换上Bing的背景图,并添加背景图链接与日历组件 // @description:en Just change the background image of baidu.com to bing.com // @author hoothin @@ -31,7 +31,7 @@ if(!head.classList.contains("s-skin-hasbg")){ head.classList.add("s-skin-hasbg"); head.classList.add("s-opacity-50"); - GM_addStyle(".s-opacity-50 .s-opacity-border1-top{border-top-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border1-bottom{border-bottom-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border1-left{border-left-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border1-right{border-right-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border2-top{border-top-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border2-bottom{border-bottom-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border2-left{border-left-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border2-right{border-right-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border3-top{border-top-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border3-bottom{border-bottom-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border3-left{border-left-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border3-right{border-right-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border4-top{border-top-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border4-bottom{border-bottom-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border4-left{border-left-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border4-right{border-right-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border5-top{border-top-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border5-bottom{border-bottom-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border5-left{border-left-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border5-right{border-right-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border6-top{border-top-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border6-bottom{border-bottom-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border6-left{border-left-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border6-right{border-right-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border7-top{border-top-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-border7-bottom{border-bottom-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-border7-left{border-left-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-border7-right{border-right-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-blank1{border-color: rgba(206,206,206,0.5) !important;}.s-opacity-50 .s-opacity-blank2{border-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-blank3{border-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-blank4{border-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-blank5{border-color: rgba(216,216,216,0.5) !important;}.s-opacity-50 .s-opacity-blank6{border-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-blank7{border-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-blank8{border-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-scroll{border-color: rgba(227,227,227,0.5) !important;}.s-opacity-50 .s-opacity-scroll{border-left-color: rgba(225,225,225,0.5) !important;}.s-opacity-50 .s-opacity-scroll{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(227,227,227,0.5)),to(rgba(227,227,227,0.5))) !important;background-image: -moz-linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;background-image: linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FE3E3E3,endColorstr=#7FE3E3E3) !important;}.s-opacity-50 .s-opacity-scroll-slider{border-color: rgba(225,225,225,0.5) !important;}.s-opacity-50 .s-opacity-scroll-slider{border-bottom-color: rgba(212,212,212,0.5) !important;}.s-opacity-50 .s-opacity-scroll-slider{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0.5)),to(rgba(255,255,255,0.5))) !important;background-image: -moz-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFFFFFF,endColorstr=#7FFFFFFF) !important;}.s-opacity-50 .s-opacity-background1{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(243,243,243,0.5)),to(rgba(243,243,243,0.5))) !important;background-image: -moz-linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;background-image: linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FF3F3F3,endColorstr=#7FF3F3F3) !important;}.s-opacity-50 .s-opacity-background2{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(248,248,248,0.5)),to(rgba(248,248,248,0.5))) !important;background-image: -moz-linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;background-image: linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FF8F8F8,endColorstr=#7FF8F8F8) !important;}.s-opacity-50 .s-opacity-white-background{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0.5)),to(rgba(255,255,255,0.5))) !important;background-image: -moz-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFFFFFF,endColorstr=#7FFFFFFF) !important;}.s-opacity-50 .s-opacity-menu1{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0.4)),to(rgba(0,0,0,0.4))) !important;background-image: -moz-linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;background-image: -ms-linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;background-image: -o-linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;background-image: linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#66000000) !important;}.s-opacity-50 .s-opacity-foreground{opacity: 0.5;filter: alpha(opacity=50);}.s-opacity-50 .s-opacity-max{opacity: 0.4;filter: alpha(opacity=40);}.s-opacity-50 .s-opacity-bottommoremenu{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,0.45))) !important;background-image: -moz-linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;background-image: -ms-linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;background-image: -o-linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;background-image: linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00000000,endColorstr=#72000000) !important;}.s-opacity-50 .s-opacity-topmoremenu{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0.45)),to(rgba(0,0,0,0))) !important;background-image: -moz-linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;background-image: -ms-linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;background-image: -o-linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;background-image: linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#72000000,endColorstr=#00000000) !important;}"); + GM_addStyle("[tpl='ai-tools-panel'],.fixed-skin-wrapper{display: none!important;}#bottom_layer{position:absolute!important;}.s-opacity-50 .s-opacity-border1-top{border-top-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border1-bottom{border-bottom-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border1-left{border-left-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border1-right{border-right-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-border2-top{border-top-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border2-bottom{border-bottom-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border2-left{border-left-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border2-right{border-right-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-border3-top{border-top-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border3-bottom{border-bottom-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border3-left{border-left-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border3-right{border-right-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-border4-top{border-top-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border4-bottom{border-bottom-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border4-left{border-left-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border4-right{border-right-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-border5-top{border-top-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border5-bottom{border-bottom-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border5-left{border-left-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border5-right{border-right-color: rgba(243,243,243,0.5) !important;}.s-opacity-50 .s-opacity-border6-top{border-top-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border6-bottom{border-bottom-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border6-left{border-left-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border6-right{border-right-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-border7-top{border-top-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-border7-bottom{border-bottom-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-border7-left{border-left-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-border7-right{border-right-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-blank1{border-color: rgba(206,206,206,0.5) !important;}.s-opacity-50 .s-opacity-blank2{border-color: rgba(233,233,233,0.5) !important;}.s-opacity-50 .s-opacity-blank3{border-color: rgba(240,240,240,0.5) !important;}.s-opacity-50 .s-opacity-blank4{border-color: rgba(218,218,218,0.5) !important;}.s-opacity-50 .s-opacity-blank5{border-color: rgba(216,216,216,0.5) !important;}.s-opacity-50 .s-opacity-blank6{border-color: rgba(238,238,238,0.5) !important;}.s-opacity-50 .s-opacity-blank7{border-color: rgba(234,234,234,0.5) !important;}.s-opacity-50 .s-opacity-blank8{border-color: rgba(226,226,226,0.5) !important;}.s-opacity-50 .s-opacity-scroll{border-color: rgba(227,227,227,0.5) !important;}.s-opacity-50 .s-opacity-scroll{border-left-color: rgba(225,225,225,0.5) !important;}.s-opacity-50 .s-opacity-scroll{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(227,227,227,0.5)),to(rgba(227,227,227,0.5))) !important;background-image: -moz-linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;background-image: linear-gradient(rgba(227,227,227,0.5) 0%,rgba(227,227,227,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FE3E3E3,endColorstr=#7FE3E3E3) !important;}.s-opacity-50 .s-opacity-scroll-slider{border-color: rgba(225,225,225,0.5) !important;}.s-opacity-50 .s-opacity-scroll-slider{border-bottom-color: rgba(212,212,212,0.5) !important;}.s-opacity-50 .s-opacity-scroll-slider{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0.5)),to(rgba(255,255,255,0.5))) !important;background-image: -moz-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFFFFFF,endColorstr=#7FFFFFFF) !important;}.s-opacity-50 .s-opacity-background1{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(243,243,243,0.5)),to(rgba(243,243,243,0.5))) !important;background-image: -moz-linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;background-image: linear-gradient(rgba(243,243,243,0.5) 0%,rgba(243,243,243,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FF3F3F3,endColorstr=#7FF3F3F3) !important;}.s-opacity-50 .s-opacity-background2{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(248,248,248,0.5)),to(rgba(248,248,248,0.5))) !important;background-image: -moz-linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;background-image: linear-gradient(rgba(248,248,248,0.5) 0%,rgba(248,248,248,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FF8F8F8,endColorstr=#7FF8F8F8) !important;}.s-opacity-50 .s-opacity-white-background{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0.5)),to(rgba(255,255,255,0.5))) !important;background-image: -moz-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -ms-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: -o-linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;background-image: linear-gradient(rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.5) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFFFFFF,endColorstr=#7FFFFFFF) !important;}.s-opacity-50 .s-opacity-menu1{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0.4)),to(rgba(0,0,0,0.4))) !important;background-image: -moz-linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;background-image: -ms-linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;background-image: -o-linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;background-image: linear-gradient(rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.4) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#66000000) !important;}.s-opacity-50 .s-opacity-foreground{opacity: 0.5;filter: alpha(opacity=50);}.s-opacity-50 .s-opacity-max{opacity: 0.4;filter: alpha(opacity=40);}.s-opacity-50 .s-opacity-bottommoremenu{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,0.45))) !important;background-image: -moz-linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;background-image: -ms-linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;background-image: -o-linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;background-image: linear-gradient(rgba(0,0,0,0) 0%,rgba(0,0,0,0.45) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00000000,endColorstr=#72000000) !important;}.s-opacity-50 .s-opacity-topmoremenu{background: none !important;background-image: -webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0.45)),to(rgba(0,0,0,0))) !important;background-image: -moz-linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;background-image: -ms-linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;background-image: -o-linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;background-image: linear-gradient(rgba(0,0,0,0.45) 0%,rgba(0,0,0,0) 100%) !important;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#72000000,endColorstr=#00000000) !important;}"); } var bingBgLink=document.createElement("a"); bingBgLink.innerHTML="Bing图"; @@ -95,11 +95,11 @@ //riliLink.innerHTML=""+$(".op-calendar-new-right-date,.op-calendar-pc-right-date",iframe.contentDocument).html()+""; riliLink.onmouseenter=function(){ clearTimeout(t); - $(iframe).show(200); - iframeDoc.scrollTop(137); - iframeDoc.scrollLeft(130); - iframe.width=600; - iframe.height=665; + $(iframe).show(200); + iframeDoc.scrollTop(125); + iframeDoc.scrollLeft(145); + iframe.width=618; + iframe.height=630; }; riliLink.onmouseleave=function(){ clearTimeout(t); @@ -116,24 +116,24 @@ $(iframe).hide(500); },100); }; - var holiday=$('.cos-search-link',iframe.contentDocument)[0]; + var holiday=$('.cos-search-link,.sc-search-link',iframe.contentDocument)[0]; if(holiday){ var title=holiday.innerText.slice(0, -1); riliLink.innerHTML+=title?" "+title+"":""; riliLink.title=title; } }; - var skinContainer=document.querySelector(".s-skin-container"); - if(!skinContainer){ - skinContainer=document.getElementsByTagName("body")[0]; - GM_addStyle(".hot-refresh{padding-bottom:7px;}.hot-title>div,.hot-refresh{background-color: #f0f8ff95; border-radius: 3px 3px 0 0}.s-hotsearch-content{position: absolute; background-color: #f0f8ff95; border-radius: 0 0 5px 5px;padding-right: 2px;}.s_ipt{margin:0!important;}.s_ipt_wr{border-radius: 10px 4px 4px 10px;border-radius: 10px 0 0 10px;background: #fff!important;}#qrcodeCon{display:none}body{position:fixed;_position:absolute;top:0;left:0;height:100%;width:100%;min-width:1000px;z-index:-10;background-position:center 0;background-repeat:no-repeat;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1;}"); - var inputsu=document.querySelector("input#su"); - var clickHandler=e=>{ - if(skinContainer)skinContainer.style.backgroundImage=""; - else inputsu.removeEventListener("click",clickHandler); - }; - inputsu.addEventListener("click",clickHandler); + var skinContainer=document.getElementsByTagName("body")[0]; + if (!document.querySelector(".aigc-skin-bg,#s_mancard_main")) { + GM_addStyle(".s-news-rank-content{max-height: 180px; width: 99%; overflow-y: auto; overflow-x: hidden;}.s-top-right .ai-entry-right-nologin,.s-top-right .operate-wrapper-nologin{right:362px;}.hot-refresh{padding-bottom:7px;}.hot-title>div,.hot-refresh{border-radius: 3px 3px 0 0}.s-hotsearch-title>a,.s-hotsearch-title>a>div{padding: 5px;background-color: #f0f8ff95;border-radius: 5px;}.s-hotsearch-content{position: absolute; background-color: #f0f8ff95; border-radius: 5px;padding: 5px;}"); } + GM_addStyle(".s_ipt{margin:0!important;}.s_ipt_wr{border-radius: 10px 4px 4px 10px;border-radius: 10px 0 0 10px;background: #fff!important;}#qrcodeCon{display:none}body{position:fixed;_position:absolute;top:0;left:0;height:100%;width:100%;min-width:1000px;z-index:-10;background-position:center 0;background-repeat:no-repeat;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1;}"); + var inputsu=document.querySelector("input#su"); + var clickHandler=e=>{ + if(skinContainer)skinContainer.style.backgroundImage=""; + else inputsu.removeEventListener("click",clickHandler); + }; + inputsu.addEventListener("click",clickHandler); var bingImgObj=GM_getValue("bingImgObj"); if(bingImgObj){ skinContainer.style.backgroundImage = "url(\""+bingImgObj.base64+"\")"; @@ -156,7 +156,7 @@ logo.style.display="initial"; } } - var input=document.querySelector("#kw"); + var input=document.querySelector("#kw,#chat-textarea"); var headWrapper=document.querySelector("#head_wrapper"); let inputHandler = e => { setTimeout(() => { @@ -168,16 +168,21 @@ }, 0); }; input.addEventListener('input', inputHandler); + var submit=document.querySelector("#chat-submit-button"); + submit.addEventListener('click', e => { + if(skinContainer)skinContainer.style.backgroundImage=""; + skinContainer=null; + }); GM_xmlhttpRequest({ method: 'GET', - url: "http://global.bing.com/HPImageArchive.aspx?format=js&idx=0&pid=hp&video=1&n=1", + url: "https://global.bing.com/HPImageArchive.aspx?format=js&idx=0&pid=hp&video=1&n=1", onload: function(result) { var jsonData=null; try { jsonData=JSON.parse(result.responseText); var bgUrl=jsonData.images[0].url; if(!/^https?:\/\//.test(bgUrl)){ - bgUrl="http://global.bing.com"+bgUrl; + bgUrl="https://global.bing.com"+bgUrl; } bingBgLink.title=jsonData.images[0].copyright; bingBgLink.href=bgUrl; diff --git a/BingBgForBaidu/BingBgForGoogle.user.js b/BingBgForBaidu/BingBgForGoogle.user.js new file mode 100644 index 00000000000..dba6149ffdb --- /dev/null +++ b/BingBgForBaidu/BingBgForGoogle.user.js @@ -0,0 +1,320 @@ +// ==UserScript== +// @name BingBgForGoogle +// @name:zh-CN 谷Bing图 +// @name:zh-TW 谷Bing圖 +// @namespace hoothin +// @version 0.3 +// @description Just change the background image of Google homepage to Bing +// @description:zh-CN 给谷歌首页换上 Bing 的背景图 +// @description:zh-TW 給 Google 首頁換上 Bing 的背景圖 +// @author hoothin +// @grant GM_xmlhttpRequest +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_addStyle +// @grant GM_registerMenuCommand +// @grant unsafeWindow +// @connect global.bing.com +// @connect cn.bing.com +// @license MIT License +// @match *://www.google.com/* +// @match *://www.google.ad/* +// @match *://www.google.ae/* +// @match *://www.google.com.af/* +// @match *://www.google.com.ag/* +// @match *://www.google.al/* +// @match *://www.google.am/* +// @match *://www.google.co.ao/* +// @match *://www.google.com.ar/* +// @match *://www.google.as/* +// @match *://www.google.at/* +// @match *://www.google.com.au/* +// @match *://www.google.az/* +// @match *://www.google.ba/* +// @match *://www.google.com.bd/* +// @match *://www.google.be/* +// @match *://www.google.bf/* +// @match *://www.google.bg/* +// @match *://www.google.com.bh/* +// @match *://www.google.bi/* +// @match *://www.google.bj/* +// @match *://www.google.com.bn/* +// @match *://www.google.com.bo/* +// @match *://www.google.com.br/* +// @match *://www.google.bs/* +// @match *://www.google.bt/* +// @match *://www.google.co.bw/* +// @match *://www.google.by/* +// @match *://www.google.com.bz/* +// @match *://www.google.ca/* +// @match *://www.google.cd/* +// @match *://www.google.cf/* +// @match *://www.google.cg/* +// @match *://www.google.ch/* +// @match *://www.google.ci/* +// @match *://www.google.co.ck/* +// @match *://www.google.cl/* +// @match *://www.google.cm/* +// @match *://www.google.cn/* +// @match *://www.google.com.co/* +// @match *://www.google.co.cr/* +// @match *://www.google.com.cu/* +// @match *://www.google.cv/* +// @match *://www.google.com.cy/* +// @match *://www.google.cz/* +// @match *://www.google.de/* +// @match *://www.google.dj/* +// @match *://www.google.dk/* +// @match *://www.google.dm/* +// @match *://www.google.com.do/* +// @match *://www.google.dz/* +// @match *://www.google.com.ec/* +// @match *://www.google.ee/* +// @match *://www.google.com.eg/* +// @match *://www.google.es/* +// @match *://www.google.com.et/* +// @match *://www.google.fi/* +// @match *://www.google.com.fj/* +// @match *://www.google.fm/* +// @match *://www.google.fr/* +// @match *://www.google.ga/* +// @match *://www.google.ge/* +// @match *://www.google.gg/* +// @match *://www.google.com.gh/* +// @match *://www.google.com.gi/* +// @match *://www.google.gl/* +// @match *://www.google.gm/* +// @match *://www.google.gr/* +// @match *://www.google.com.gt/* +// @match *://www.google.gy/* +// @match *://www.google.com.hk/* +// @match *://www.google.hn/* +// @match *://www.google.hr/* +// @match *://www.google.ht/* +// @match *://www.google.hu/* +// @match *://www.google.co.id/* +// @match *://www.google.ie/* +// @match *://www.google.co.il/* +// @match *://www.google.im/* +// @match *://www.google.co.in/* +// @match *://www.google.iq/* +// @match *://www.google.is/* +// @match *://www.google.it/* +// @match *://www.google.je/* +// @match *://www.google.com.jm/* +// @match *://www.google.jo/* +// @match *://www.google.co.jp/* +// @match *://www.google.co.ke/* +// @match *://www.google.com.kh/* +// @match *://www.google.ki/* +// @match *://www.google.kg/* +// @match *://www.google.co.kr/* +// @match *://www.google.com.kw/* +// @match *://www.google.kz/* +// @match *://www.google.la/* +// @match *://www.google.com.lb/* +// @match *://www.google.li/* +// @match *://www.google.lk/* +// @match *://www.google.co.ls/* +// @match *://www.google.lt/* +// @match *://www.google.lu/* +// @match *://www.google.lv/* +// @match *://www.google.com.ly/* +// @match *://www.google.co.ma/* +// @match *://www.google.md/* +// @match *://www.google.me/* +// @match *://www.google.mg/* +// @match *://www.google.mk/* +// @match *://www.google.ml/* +// @match *://www.google.com.mm/* +// @match *://www.google.mn/* +// @match *://www.google.com.mt/* +// @match *://www.google.mu/* +// @match *://www.google.mv/* +// @match *://www.google.mw/* +// @match *://www.google.com.mx/* +// @match *://www.google.com.my/* +// @match *://www.google.co.mz/* +// @match *://www.google.com.na/* +// @match *://www.google.com.ng/* +// @match *://www.google.com.ni/* +// @match *://www.google.ne/* +// @match *://www.google.nl/* +// @match *://www.google.no/* +// @match *://www.google.com.np/* +// @match *://www.google.nr/* +// @match *://www.google.nu/* +// @match *://www.google.co.nz/* +// @match *://www.google.com.om/* +// @match *://www.google.com.pa/* +// @match *://www.google.com.pe/* +// @match *://www.google.com.pg/* +// @match *://www.google.com.ph/* +// @match *://www.google.com.pk/* +// @match *://www.google.pl/* +// @match *://www.google.pn/* +// @match *://www.google.com.pr/* +// @match *://www.google.ps/* +// @match *://www.google.pt/* +// @match *://www.google.com.py/* +// @match *://www.google.com.qa/* +// @match *://www.google.ro/* +// @match *://www.google.ru/* +// @match *://www.google.rw/* +// @match *://www.google.com.sa/* +// @match *://www.google.com.sb/* +// @match *://www.google.sc/* +// @match *://www.google.se/* +// @match *://www.google.com.sg/* +// @match *://www.google.sh/* +// @match *://www.google.si/* +// @match *://www.google.sk/* +// @match *://www.google.com.sl/* +// @match *://www.google.sn/* +// @match *://www.google.so/* +// @match *://www.google.sm/* +// @match *://www.google.sr/* +// @match *://www.google.st/* +// @match *://www.google.com.sv/* +// @match *://www.google.td/* +// @match *://www.google.tg/* +// @match *://www.google.co.th/* +// @match *://www.google.com.tj/* +// @match *://www.google.tl/* +// @match *://www.google.tm/* +// @match *://www.google.tn/* +// @match *://www.google.to/* +// @match *://www.google.com.tr/* +// @match *://www.google.tt/* +// @match *://www.google.com.tw/* +// @match *://www.google.co.tz/* +// @match *://www.google.com.ua/* +// @match *://www.google.co.ug/* +// @match *://www.google.co.uk/* +// @match *://www.google.com.uy/* +// @match *://www.google.co.uz/* +// @match *://www.google.com.vc/* +// @match *://www.google.co.ve/* +// @match *://www.google.co.vi/* +// @match *://www.google.com.vn/* +// @match *://www.google.vu/* +// @match *://www.google.ws/* +// @match *://www.google.rs/* +// @match *://www.google.co.za/* +// @match *://www.google.co.zm/* +// @match *://www.google.co.zw/* +// @match *://www.google.cat/* +// @downloadURL https://update.greasyfork.org/scripts/503741/BingBgForGoogle.user.js +// @updateURL https://update.greasyfork.org/scripts/503741/BingBgForGoogle.meta.js +// ==/UserScript== + +(function() { + 'use strict'; + if (/\?q=/.test(location.href)) return; + let LinkPa = document.querySelector("[data-ogbl]"); + if (!LinkPa) return; + let bingBgLink = document.createElement("a"); + bingBgLink.className = LinkPa.firstChild.firstChild.className; + bingBgLink.target = "_blank"; + bingBgLink.innerText = "Bing Bg"; + let linkDiv = document.createElement("div"); + linkDiv.className = LinkPa.firstChild.className; + linkDiv.appendChild(bingBgLink); + LinkPa.appendChild(linkDiv); + let skinContainer = document.body; + GM_addStyle(` + body{ + background-position: center 0; + background-repeat: no-repeat; + background-size: cover; + -webkit-background-size: cover; + -o-background-size: cover; + } + #gb{ + background-color: unset!important; + } + [role="navigation"],[role="contentinfo"]{ + background-color: rgb(32 33 36 / 50%)!important; + } + #gb *,[role="contentinfo"] *{ + color: white!important; + } + `); + + let btnK = document.querySelector("input[name='btnK']"); + let clickHandler = e => { + skinContainer.style.backgroundImage = ""; + }; + btnK.addEventListener("click",clickHandler); + let bingImgObj = GM_getValue("bingImgObj"); + if (bingImgObj) { + skinContainer.style.backgroundImage = "url(\"" + bingImgObj.base64 + "\")"; + } + + GM_xmlhttpRequest({ + method: 'GET', + url: "https://global.bing.com/HPImageArchive.aspx?format=js&idx=0&pid=hp&video=1&n=1", + onload: function(result) { + let jsonData = null; + try { + jsonData = JSON.parse(result.responseText); + let bgUrl = jsonData.images[0].url; + if (!/^https?:\/\//.test(bgUrl)) { + bgUrl = "https://global.bing.com" + bgUrl; + } + bingBgLink.title = jsonData.images[0].copyright; + bingBgLink.href = bgUrl; + if (bingImgObj && bingImgObj.url == bgUrl) return; + if (!bingImgObj) skinContainer.style.backgroundImage = "url(\"" + bgUrl + "\")"; + GM_xmlhttpRequest({ + method: 'GET', + url: bgUrl, + responseType: "blob", + onload: function(r) { + let blob = r.response; + let fr = new FileReader(); + fr.readAsDataURL(blob); + fr.onload = function (e) { + let base64ImgData = e.target.result; + GM_setValue("bingImgObj",{url: bgUrl, base64: base64ImgData}); + }; + } + }); + } catch (e) { + console.log(e); + } + } + }); + let blurStyle; + function createBlur() { + if (!blurStyle) { + blurStyle = document.createElement("style"); + blurStyle.innerText = ` + body::before{ + content: " "; + display: block; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: inherit; + filter: blur(5px); + z-index: -1; + }`; + } + document.head.appendChild(blurStyle); + } + if (GM_getValue("blur")) { + createBlur(); + } + GM_registerMenuCommand("Change blur", () => { + if (blurStyle && blurStyle.parentNode) { + GM_setValue("blur", false); + blurStyle.parentNode.removeChild(blurStyle); + } else { + GM_setValue("blur", true); + createBlur(); + } + }); +})(); \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..b6d486bd5e3 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +rixixi@gmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/DownloadAllContent/DownloadAllContent.user.js b/DownloadAllContent/DownloadAllContent.user.js index 659d1e53e13..de600e6dc11 100644 --- a/DownloadAllContent/DownloadAllContent.user.js +++ b/DownloadAllContent/DownloadAllContent.user.js @@ -2,13 +2,13 @@ // @name DownloadAllContent // @name:zh-CN 怠惰小说下载器 // @name:zh-TW 怠惰小説下載器 -// @name:ja 怠惰者小説ダウンロードツール +// @name:ja 怠惰小説ダウンローダー // @namespace hoothin -// @version 2.7.3.19 -// @description Fetch and download main content on current page, provide special support for chinese novel -// @description:zh-CN 通用网站内容抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 -// @description:zh-TW 通用網站內容抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 -// @description:ja ユニバーサルサイトコンテンツクロールツール、クロール、フォーラム内容など +// @version 2.8.3.19 +// @description Lightweight web scraping script. Fetch and download main textual content from the current page, provide special support for novels +// @description:zh-CN 通用网站内容爬虫抓取工具,可批量抓取任意站点的小说、论坛内容等并保存为TXT文档 +// @description:zh-TW 通用網站內容爬蟲抓取工具,可批量抓取任意站點的小說、論壇內容等並保存為TXT文檔 +// @description:ja 軽量なWebスクレイピングスクリプト。ユニバーサルサイトコンテンツクロールツール、クロール、フォーラム内容など // @author hoothin // @match http://*/* // @match https://*/* @@ -17,15 +17,29 @@ // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue +// @grant GM_openInTab +// @grant GM_setClipboard +// @grant GM_addStyle // @grant unsafeWindow // @license MIT License // @compatible chrome // @compatible firefox // @compatible opera 未测试 // @compatible safari 未测试 -// @contributionURL https://buymeacoffee.com/hoothin +// @contributionURL https://ko-fi.com/hoothin // @contributionAmount 1 // ==/UserScript== + +if (window.top != window.self) { + try { + if (window.self.innerWidth < 250 || window.self.innerHeight < 250) { + return; + } + } catch(e) { + return; + } +} + (function (global, factory) { if (typeof define === "function" && define.amd) { define([], factory); @@ -204,57 +218,240 @@ (function() { 'use strict'; - var indexReg=/PART\b|^Prologue|Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*言|^序\s*章|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]+$|^[第(]?[\d〇零一二三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; - var innerNextPage=/下一[页頁张張]|next\s*page|次のページ/i; - var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; + var indexReg=/^(\w.*)?PART\b|^Prologue|^(\w.*)?Chapter\s*[\-_]?\d+|分卷|^序$|^序\s*[·言章]|^前\s*言|^附\s*[录錄]|^引\s*[言子]|^摘\s*要|^[楔契]\s*子|^后\s*记|^後\s*記|^附\s*言|^结\s*语|^結\s*語|^尾\s*[声聲]|^最終話|^最终话|^番\s*外|^\d+[\s\.、,,)\-_::][^\d#\.]|^(\d|\s|\.)*[第(]?\s*[\d〇零一二两三四五六七八九十百千万萬-]+\s*[、)章节節回卷折篇幕集话話]/i; + var innerNextPage=/^\s*(下一[页頁张張]|next\s*page|次のページ)/i; + var lang=navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; var i18n={}; var rCats=[]; - var processFunc; + var processFunc, nextPageFunc; + const AsyncFunction=Object.getPrototypeOf(async function(){}).constructor; + var win=(typeof unsafeWindow=='undefined'?window:unsafeWindow); switch (lang){ case "zh-CN": case "zh-SG": i18n={ - fetch:"开始下载小说【Ctrl+F9】", - info:"本文是使用怠惰小说下载器(DownloadAllContent)下载的", + fetch:"开始下载小说", + info:"来源:#t#\n本文是使用怠惰小说下载器(DownloadAllContent)下载的", error:"该段内容获取失败", downloading:"已下载完成 %s 段,剩余 %s 段
    正在下载 %s", complete:"已全部下载完成,共 %s 段", del:"设置文本干扰码的CSS选择器", - custom:"自定义下载", + custom:"自定规则下载", customInfo:"输入网址或者章节CSS选择器", - reSort:"按标题名重新排序", - reSortUrl:"按网址重新排序", - setting:"选项设置", + reSort:"按标题名重新排序章节", + reSortUrl:"按网址重新排序章节", + setting:"选项参数设置", + searchRule:"搜索网站规则", abort:"跳过此章", save:"保存当前", saveAsMd:"存为 Markdown", - downThreadNum:"设置同时下载的线程数" + saveAsJSON: "存为 JSON", + downThreadNum:"设置同时下载的线程数,负数为单线程下载间隔", + enableTouch:"在移动端按→↓←↑的方向滑动屏幕画正方形立即开始下载", + customTitle:"自定义章节标题,输入内页文字对应选择器", + saveUrl: "储存 URL", + disableAutoStartSave: "禁用自动保存", + maxDlPerMin:"每分钟最大下载数", + reSortDefault:"默认按页面中位置排序章节", + reverseOrder:"反转章节排序", + saveBtn:"保存设置", + saveOk:"保存成功", + nextPage:"嗅探章节内分页", + nextPageReg:"自定义分页正则", + retainImage:"保留正文中图片的网址", + minTxtLength:"当检测到的正文字数小于此数,则尝试重新抓取", + showFilterList:"下载前显示章节筛选排序窗口", + ok:"确定", + close:"关闭", + dacSortByPos:"按页内位置排序", + dacSortByUrl:"按网址排序", + dacSortByName:"按章节名排序", + reverse:"反选", + dacUseIframe:"使用 iframe 后台加载内容(慢速)", + dacSaveAsZip:"下载为 zip", + dacSetCustomRule:"修改规则", + dacAddUrl:"添加章节", + prefix:"给章节名称添加前缀", + dacStartDownload:"下载选中", + downloadShortcut:"下载章节快捷键", + downloadSingleShortcut:"下载单页快捷键", + downloadCustomShortcut:"自定义下载快捷键" }; break; + case "zh": case "zh-TW": case "zh-HK": i18n={ - fetch:"開始下載小說【Ctrl+F9】", - info:"本文是使用怠惰小說下載器(DownloadAllContent)下載的", + fetch:"開始下載小說", + info:"來源:#t#\n本文是使用怠惰小說下載器(DownloadAllContent)下載的", error:"該段內容獲取失敗", downloading:"已下載完成 %s 段,剩餘 %s 段
    正在下載 %s", complete:"已全部下載完成,共 %s 段", del:"設置文本干擾碼的CSS選擇器", - custom:"自定義下載", + custom:"自訂規則下載", customInfo:"輸入網址或者章節CSS選擇器", - reSort:"按標題名重新排序", - reSortUrl:"按網址重新排序", - setting:"選項設置", + reSort:"按標題名重新排序章節", + reSortUrl:"按網址重新排序章節", + setting:"選項參數設定", + searchRule:"搜尋網站規則", abort:"跳過此章", save:"保存當前", saveAsMd:"存爲 Markdown", - downThreadNum:"設置同時下載的綫程數" + saveAsJSON: "存爲 JSON", + downThreadNum:"設置同時下載的綫程數,負數為單線程下載間隔", + enableTouch:"在行動端按→↓←↑的方向滑動螢幕畫方立即開始下載", + customTitle:"自訂章節標題,輸入內頁文字對應選擇器", + saveUrl: "儲存 URL", + disableAutoStartSave: "禁用自動保存", + maxDlPerMin:"每分鐘最大下載數", + reSortDefault:"預設依頁面中位置排序章節", + reverseOrder:"反轉章節排序", + saveBtn:"儲存設定", + saveOk:"儲存成功", + nextPage:"嗅探章節內分頁", + nextPageReg:"自訂分頁正規", + retainImage:"保留內文圖片的網址", + minTxtLength:"當偵測到的正文字數小於此數,則嘗試重新抓取", + showFilterList:"下載前顯示章節篩選排序視窗", + ok:"確定", + close:"關閉", + dacSortByPos:"依頁內位置排序", + dacSortByUrl:"依網址排序", + dacSortByName:"依章節名排序", + reverse:"反選", + dacUseIframe:"使用 iframe 背景載入內容(慢速)", + dacSaveAsZip:"下載為 zip", + dacSetCustomRule:"修改規則", + dacAddUrl:"新增章節", + prefix:"為章節名稱加上前綴", + dacStartDownload:"下載選取", + downloadShortcut:"下載章節快速鍵", + downloadSingleShortcut:"下載單頁快速鍵", + downloadCustomShortcut:"自設下載快速鍵" + }; + break; + case "ar": + case "ar-AE": + case "ar-BH": + case "ar-DZ": + case "ar-EG": + case "ar-IQ": + case "ar-JO": + case "ar-KW": + case "ar-LB": + case "ar-LY": + case "ar-MA": + case "ar-OM": + case "ar-QA": + case "ar-SA": + case "ar-SY": + case "ar-TN": + case "ar-YE": + i18n={ + encode: true, + fetch: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84", + info: "%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1:%20#t#%0A%D8%AA%D9%85%20%D8%AA%D9%86%D8%B2%D9%8A%D9%84%20%D8%A7%D9%84%D9%80%20TXT%20%D8%A8%D9%88%D8%A7%D8%B3%D8%B7%D8%A9%20'DownloadAllContent'", + error: "%D9%81%D8%B4%D9%84%20%D9%81%D9%8A%20%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%81%D8%B5%D9%84%20%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D9%8A", + downloading: "......%25s%20%D8%AA%D8%AD%D9%85%D9%8A%D9%84%3Cbr%3E%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D9%85%D8%AA%D8%A8%D9%82%D9%8A%D8%A9%20%25s%20%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D8%AA%D9%85%20%D8%AA%D8%AD%D9%85%D9%8A%D9%84%D9%87%D8%A7%D8%8C%20%D9%87%D9%86%D8%A7%D9%83%20%25s", + complete: "%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%85%D8%AC%D9%85%D9%88%D8%B9%20%25s%20%D8%A7%D9%83%D8%AA%D9%85%D9%84!%20%D8%AD%D8%B5%D9%84%D8%AA%20%D8%B9%D9%84%D9%89", + del: "%D9%84%D8%AA%D8%AC%D8%A7%D9%87%D9%84%20CSS%20%D8%AA%D8%B9%D9%8A%D9%8A%D9%86%20%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA", + custom: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D9%85%D8%AE%D8%B5%D8%B5", + customInfo: "%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D9%81%D8%B5%D9%88%D9%84%20sss%20%D8%A5%D8%AF%D8%AE%D8%A7%D9%84%20%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7%20%D8%A3%D9%88%20%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA", + reSort: "%D8%A5%D8%B9%D8%A7%D8%AF%D8%A9%20%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%AD%D8%B3%D8%A8%20%D8%A7%D9%84%D8%B9%D9%86%D9%88%D8%A7%D9%86", + reSortUrl: "%D8%A5%D8%B9%D8%A7%D8%AF%D8%A9%20%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%AD%D8%B3%D8%A8%20%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7", + setting: "%D9%81%D8%AA%D8%AD%20%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA", + searchRule: "%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%A7%D9%84%D8%A8%D8%AD%D8%AB", + abort: "%D8%A5%D9%8A%D9%82%D8%A7%D9%81", + save: "%D8%AD%D9%81%D8%B8", + saveAsMd: "Markdown%20%D8%AD%D9%81%D8%B8%20%D9%83%D9%80", + saveAsJSON: "JSON%20%D8%AD%D9%81%D8%B8%20%D9%83%D9%80", + downThreadNum: "%D8%AA%D8%B9%D9%8A%D9%8A%D9%86%20%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AE%D9%8A%D9%88%D8%B7%20%D9%84%D9%84%D8%AA%D8%AD%D9%85%D9%8A%D9%84", + enableTouch: "On%20the%20mobile%20device,%20slide%20the%20screen%20in%20the%20direction%20of%20%E2%86%92%E2%86%93%E2%86%90%E2%86%91%20to%20draw%20a%20square%20will%20start%20downloading%20immediately", + customTitle: "%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5%20%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D8%A7%D9%84%D9%81%D8%B5%D9%84%D8%8C%20%D8%A5%D8%AF%D8%AE%D8%A7%D9%84%20%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AF%D8%A7%D8%AE%D9%84%D9%8A%D8%A9", + saveUrl: "%D8%AD%D9%81%D8%B8%20URL", + disableAutoStartSave: "%D8%AA%D8%B9%D8%B7%D9%8A%D9%84%20%D8%A7%D9%84%D8%AD%D9%81%D8%B8%20%D8%A7%D9%84%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A", + maxDlPerMin: "%D8%A7%D9%84%D8%AD%D8%AF%20%D8%A7%D9%84%D8%A3%D9%82%D8%B5%D9%89%20%D9%84%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AA%D9%86%D8%B2%D9%8A%D9%84%D8%A7%D8%AA%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%AF%D9%82%D9%8A%D9%82%D8%A9", + reSortDefault: "%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%20%D8%AD%D8%B3%D8%A8%20%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9", + reverseOrder: "%D8%B9%D9%83%D8%B3%20%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%A7%D9%84%D9%81%D8%B5%D9%88%D9%84", + saveBtn: "%D8%AD%D9%81%D8%B8%20%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA", + saveOk: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AD%D9%81%D8%B8", + nextPage: "%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%82%20%D9%85%D9%86%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%81%D8%B5%D9%84", + nextPageReg: "%D9%85%D8%AE%D8%B5%D8%B5%20%D9%84%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9%20RegExp", + retainImage: "%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%81%D8%A7%D8%B8%20%D8%A8%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D8%A7%D9%84%D8%B5%D9%88%D8%B1%D8%A9%20%D8%A5%D8%B0%D8%A7%20%D9%83%D8%A7%D9%86%D8%AA%20%D9%87%D9%86%D8%A7%D9%83%20%D8%B5%D9%88%D8%B1%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%86%D8%B5", + minTxtLength: "%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D9%88%D9%84%D8%A9%20%D9%85%D8%B1%D8%A9%20%D8%A3%D8%AE%D8%B1%D9%89%20%D8%B9%D9%86%D8%AF%D9%85%D8%A7%20%D9%8A%D9%83%D9%88%D9%86%20%D8%B7%D9%88%D9%84%20%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89%20%D8%A3%D9%82%D9%84%20%D9%85%D9%86%20%D9%87%D8%B0%D8%A7", + showFilterList: "%D8%B9%D8%B1%D8%B6%20%D9%86%D8%A7%D9%81%D8%B0%D8%A9%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D9%8A%D8%A9%20%D9%88%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D9%82%D8%A8%D9%84%20%D8%A7%D9%84%D8%AA%D8%AD%D9%85%D9%8A%D9%84", + ok: "%D9%85%D9%88%D8%A7%D9%81%D9%82", + close: "%D8%A5%D8%BA%D9%84%D8%A7%D9%82", + dacSortByPos: "%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%AD%D8%B3%D8%A8%20%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9", + dacSortByUrl: "%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%AD%D8%B3%D8%A8%20%D8%A7%D9%84%D8%B1%D8%A7%D8%A8%D8%B7", + dacSortByName: "%D8%A7%D9%84%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8%20%D8%AD%D8%B3%D8%A8%20%D8%A7%D9%84%D8%A7%D8%B3%D9%85", + reverse: "%D8%B9%D9%83%D8%B3%20%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1", + dacUseIframe: "%D9%84%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89%20(%D8%A8%D8%B7%D9%8A%D8%A1)%20iframe%20%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85", + dacSaveAsZip: "zip%20%D8%AD%D9%81%D8%B8%20%D9%83%D9%80", + dacSetCustomRule: "%D8%AA%D8%B9%D8%AF%D9%8A%D9%84%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF", + dacAddUrl: "%D8%A5%D8%B6%D8%A7%D9%81%D8%A9%20%D9%81%D8%B5%D9%84", + prefix:"Prefix%20of%20chapter%20name", + dacStartDownload: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF", + downloadShortcut: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%81%D8%B5%D9%84", + downloadSingleShortcut: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%B5%D9%81%D8%AD%D8%A9%20%D9%88%D8%A7%D8%AD%D8%AF%D8%A9", + downloadCustomShortcut: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D9%85%D8%AE%D8%B5%D8%B5" + }; + break; + case "ja": + case "ja-JP": + i18n={ + fetch:"小説のダウンロードを開始", + info:"提供元:#t#\nこの作品は、怠惰小説ダウンローダー(DownloadAllContent)を使ってダウンロードされました。", + error:"このコンテンツの取得に失敗しました", + downloading:"%s/%sエピソードをダウンロード済み
    %sをダウンロード中", + complete:"全%sエピソードのダウンロードが完了しました", + del:"テキストの乱れを削除するCSSセレクターを設定", + custom:"カスタムルールでダウンロード", + customInfo:"URLまたは章のCSSセレクターを入力してください", + reSort:"章をタイトル順で並べ替え", + reSortUrl:"章をURL順で並べ替え", + setting:"オプション設定", + searchRule:"サイトの検索ルール", + abort:"この章をスキップ", + save:"現在の設定を保存", + saveAsMd:"Markdown形式で保存", + saveAsJSON: "JSON形式で保存", + downThreadNum:"同時ダウンロードスレッド数を設定(負の値はシングルスレッドでのダウンロード間隔)", + enableTouch:"モバイルで画面をスライドして正方形を描くとダウンロードを開始", + customTitle:"カスタム章タイトル(ページ内のテキストに対応するセレクターを入力)", + saveUrl: "URLを保存", + disableAutoStartSave: "自動保存を無効にする", + maxDlPerMin:"1分あたりの最大ダウンロード数", + reSortDefault:"デフォルト(ページ内の位置)で章を並べ替え", + reverseOrder:"章の並び順を反転", + saveBtn:"設定を保存", + saveOk:"保存しました", + nextPage:"章内のページを検出", + nextPageReg:"カスタムページネーション正規表現", + retainImage:"本文中の画像のURLを保持", + minTxtLength:"検出された本文の文字数がこの数より少ない場合、再取得を試行", + showFilterList:"ダウンロード前に章のフィルタリング・並べ替えウィンドウを表示", + ok:"OK", + close:"閉じる", + dacSortByPos:"ページ内の位置で並べ替え", + dacSortByUrl:"URLで並べ替え", + dacSortByName:"章の名前で並べ替え", + reverse:"選択を反転", + dacUseIframe:"iframeを使ってコンテンツをバックグラウンドで読み込む(低速)", + dacSaveAsZip:"Zip形式でダウンロード", + dacSetCustomRule:"ルールを編集", + dacAddUrl:"章を追加", + prefix:"章のタイトルにプレフィックスを追加", + dacStartDownload:"選択した章をダウンロード", + downloadShortcut:"章ダウンロードのショートカット", + downloadSingleShortcut:"単一ページダウンロードのショートカット", + downloadCustomShortcut:"カスタムダウンロードのショートカット" }; break; default: i18n={ - fetch:"Download [Ctrl+F9]", - info:"The TXT is downloaded by 'DownloadAllContent'", + fetch:"Download", + info:"Source: #t#\nThe TXT is downloaded by 'DownloadAllContent'", error:"Failed in downloading current chapter", downloading:"%s pages are downloaded, there are still %s pages left
    Downloading %s ......", complete:"Completed! Get %s pages in total", @@ -264,54 +461,524 @@ reSort:"ReSort by title", reSortUrl:"Resort by URLs", setting:"Open Setting", + searchRule:"Search rule", abort:"Abort", save:"Save", saveAsMd:"Save as Markdown", - downThreadNum:"Set threadNum for download" + saveAsJSON: "Save as JSON", + downThreadNum:"Set threadNum for download, negative means interval of single thread", + enableTouch:"On the mobile device, slide the screen in the direction of →↓←↑ to draw a square will start downloading immediately", + customTitle: "Customize the chapter title, enter the selector on inner page", + saveUrl: "Save URL", + disableAutoStartSave: "Disable auto save", + maxDlPerMin:"Maximum number of downloads per minute", + reSortDefault: "Default sort by position in the page", + reverseOrder:"Reverse chapter ordering", + saveBtn:"Save Setting", + saveOk:"Save Over", + nextPage:"Check next page in chapter", + nextPageReg:"Custom RegExp of next page", + retainImage:"Keep the URL of image if there are images in the text", + minTxtLength:"Try to crawl again when the length of content is less than this", + showFilterList: "Show chapter filtering and sorting window before downloading", + ok:"OK", + close:"Close", + dacSortByPos:"Sort by position", + dacSortByUrl:"Sort by URL", + dacSortByName:"Sort by name", + reverse:"Reverse selection", + dacUseIframe: "Use iframe to load content (slow)", + dacSaveAsZip: "Save as zip", + dacSetCustomRule:"Modify rules", + dacAddUrl:"Add Chapter", + prefix:"Prefix of chapter name", + dacStartDownload:"Download selected", + downloadShortcut:"Download chapter Shortcut", + downloadSingleShortcut:"Download single page Shortcut", + downloadCustomShortcut:"Custom download Shortcut" }; break; } - var firefox=navigator.userAgent.toLowerCase().indexOf('firefox')!=-1,curRequests=[]; - var rocketContent,txtDownContent,txtDownWords,txtDownQuit,txtDownDivInited=false; - - function initTxtDownDiv(){ - if(txtDownDivInited)return; - txtDownDivInited=true; - rocketContent=document.createElement("div"); - document.body.appendChild(rocketContent); - rocketContent.outerHTML=` -
    -
    -
    + if (i18n.encode) { + for (let k in i18n) { + if (k != "encode") { + i18n[k] = decodeURI(i18n[k]); + } + } + } + var firefox=navigator.userAgent.toLowerCase().indexOf('firefox')!=-1,curRequests=[],useIframe=false,iframeSandbox=false,iframeInit=false; + var filterListContainer,txtDownContent,txtDownWords,txtDownQuit,dacLinksCon,dacUseIframe,shadowContainer,downTxtShadowContainer; + + const escapeHTMLPolicy = (win.trustedTypes && win.trustedTypes.createPolicy) ? win.trustedTypes.createPolicy('dac_default', { + createHTML: (string, sink) => string + }) : null; + + function createHTML(html) { + return escapeHTMLPolicy ? escapeHTMLPolicy.createHTML(html) : html; + } + + function str2Num(str) { + str = str.replace(/^番\s*外/, "99999+").replace(/[一①Ⅰ壹]/g, "1").replace(/[二②Ⅱ贰]/g, "2").replace(/[三③Ⅲ叁]/g, "3").replace(/[四④Ⅳ肆]/g, "4").replace(/[五⑤Ⅴ伍]/g, "5").replace(/[六⑥Ⅵ陆]/g, "6").replace(/[七⑦Ⅶ柒]/g, "7").replace(/[八⑧Ⅷ捌]/g, "8").replace(/[九⑨Ⅸ玖]/g, "9").replace(/[十⑩Ⅹ拾]/g, "*10+").replace(/[百佰]/g, "*100+").replace(/[千仟]/g, "*1000+").replace(/[万萬]/g, "*10000+").replace(/\s/g, "").match(/[\d\*\+]+/); + if (!str) return 0; + str = str[0]; + let mul = str.match(/(\d*)\*(\d+)/); + while(mul) { + let result = parseInt(mul[1] || 1) * parseInt(mul[2]); + str = str.replace(mul[0], result); + mul = str.match(/(\d+)\*(\d+)/); + } + let plus = str.match(/(\d+)\+(\d+)/); + while(plus) { + let result = parseInt(plus[1]) + parseInt(plus[2]); + str = str.replace(plus[0], result); + plus = str.match(/(\d+)\+(\d+)/); + } + return parseInt(str); + } + + var dragOverItem, dragFrom, linkDict; + function createLinkItem(aEle) { + let item = document.createElement("div"); + item.innerHTML = createHTML(` + + ${aEle.innerText || "📄"} + 🖱️ + `); + item.title = aEle.innerText; + item.setAttribute("draggable", "true"); + item.addEventListener("dragover", e => { + e.preventDefault(); + }); + item.addEventListener("dragenter", e => { + if (dragOverItem) dragOverItem.style.opacity = ""; + item.style.opacity = 0.3; + dragOverItem = item; + }); + item.addEventListener('dragstart', e => { + dragFrom = item; + }); + item.addEventListener('drop', e => { + if (!dragFrom) return; + if (e.clientX < item.getBoundingClientRect().left + 142) { + dacLinksCon.insertBefore(dragFrom, item); + } else { + if (item.nextElementSibling) { + dacLinksCon.insertBefore(dragFrom, item.nextElementSibling); + } else { + dacLinksCon.appendChild(dragFrom); + } + } + e.preventDefault(); + }); + linkDict[aEle.href] = item; + dacLinksCon.appendChild(item); + } + + var saveAsZip = true; + function filterList(list) { + if (!GM_getValue("showFilterList")) { + indexDownload(list); + return; + } + if (txtDownContent) { + txtDownContent.style.display = "none"; + } + if (filterListContainer) { + filterListContainer.style.display = ""; + filterListContainer.classList.remove("customRule"); + dacLinksCon.innerHTML = createHTML(""); + } else { + document.addEventListener('dragend', e => { + if (dragOverItem) dragOverItem.style.opacity = ""; + }, true); + filterListContainer = document.createElement("div"); + filterListContainer.id = "filterListContainer"; + filterListContainer.innerHTML = createHTML(` +
    +
    +
    + ${i18n.custom} + +
    + + +
    +
    +
    + + + + +
    +
    +

    +
    + + + + +
    +
    `); + let dacSortByPos = filterListContainer.querySelector("#dacSortByPos"); + let dacSortByUrl = filterListContainer.querySelector("#dacSortByUrl"); + let dacSortByName = filterListContainer.querySelector("#dacSortByName"); + let reverse = filterListContainer.querySelector("#reverse"); + let dacSetCustomRule = filterListContainer.querySelector("#dacSetCustomRule"); + let dacCustomInput = filterListContainer.querySelector("#dacCustomInput"); + let dacConfirmRule = filterListContainer.querySelector("#dacConfirmRule"); + let dacCustomClose = filterListContainer.querySelector("#dacCustomClose"); + let dacAddUrl = filterListContainer.querySelector("#dacAddUrl"); + let dacStartDownload = filterListContainer.querySelector("#dacStartDownload"); + let dacLinksClose = filterListContainer.querySelector("#dacLinksClose"); + let dacFilterBg = filterListContainer.querySelector("#dacFilterBg"); + let dacSaveAsZip = filterListContainer.querySelector("#dacSaveAsZip"); + dacUseIframe = filterListContainer.querySelector("#dacUseIframe"); + dacSaveAsZip.onchange = e => { + saveAsZip = dacSaveAsZip.checked; + }; + dacSortByPos.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + if (linkList[0].children[1].href != list[0].href) { + list.reverse().forEach(a => { + let link = linkDict[a.href]; + if (!link) return; + dacLinksCon.insertBefore(link, dacLinksCon.children[0]); + }); + } else { + list.forEach(a => { + let link = linkDict[a.href]; + if (!link) return; + dacLinksCon.insertBefore(link, dacLinksCon.children[0]); + }); + } + }; + dacSortByUrl.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + linkList.sort((a, b) => { + const nameA = a.children[1].href.toUpperCase(); + const nameB = b.children[1].href.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + }); + if (linkList[0] == dacLinksCon.children[0]) { + linkList = linkList.reverse(); + } + linkList.forEach(link => { + dacLinksCon.appendChild(link); + }); + }; + dacSortByName.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + linkList.sort((a, b) => { + return str2Num(a.innerText) - str2Num(b.innerText); + }); + if (linkList[0] == dacLinksCon.children[0]) { + linkList = linkList.reverse(); + } + linkList.forEach(link => { + dacLinksCon.appendChild(link); + }); + }; + reverse.onclick = e => { + let linkList = [].slice.call(dacLinksCon.children); + linkList.forEach(link => { + link.children[0].checked=!link.children[0].checked; + }); + }; + dacSetCustomRule.onclick = e => { + filterListContainer.classList.add("customRule"); + dacCustomInput.value = GM_getValue("DACrules_" + document.domain) || ""; + }; + dacConfirmRule.onclick = e => { + if (dacCustomInput.value) { + customDown(dacCustomInput.value); + } + }; + dacCustomClose.onclick = e => { + filterListContainer.classList.remove("customRule"); + }; + dacAddUrl.onclick = e => { + let addUrls = window.prompt(i18n.customInfo, "https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); + if (!addUrls || !/^http|^ftp/.test(addUrls)) return; + let index = 1; + [].forEach.call(addUrls.split(","), function(i) { + var curEle; + var varNum = /\[\d+\-\d+\]/.exec(i); + if (varNum) { + varNum = varNum[0].trim(); + } else { + curEle = document.createElement("a"); + curEle.href = i; + curEle.innerText = "Added Url"; + createLinkItem(curEle); + return; + } + var num1 = /\[(\d+)/.exec(varNum)[1].trim(); + var num2 = /(\d+)\]/.exec(varNum)[1].trim(); + var num1Int = parseInt(num1); + var num2Int = parseInt(num2); + var numLen = num1.length; + var needAdd = num1.charAt(0) == "0"; + if (num1Int >= num2Int) return; + for (var j = num1Int; j <= num2Int; j++) { + var urlIndex = j.toString(); + if (needAdd) { + while(urlIndex.length < numLen) urlIndex = "0" + urlIndex; + } + var curUrl = i.replace(/\[\d+\-\d+\]/, urlIndex).trim(); + curEle = document.createElement("a"); + curEle.href = curUrl; + curEle.innerText = "Added Url " + index++; + createLinkItem(curEle); + } + }); + }; + dacStartDownload.onclick = e => { + let linkList = [].slice.call(dacLinksCon.querySelectorAll("input:checked+.dacLink")); + useIframe = !!dacUseIframe.checked; + indexDownload(linkList, true); + }; + dacLinksClose.onclick = e => { + filterListContainer.style.display = "none"; + }; + dacFilterBg.onclick = e => { + filterListContainer.style.display = "none"; + }; + let listStyle = GM_addStyle(` + #filterListContainer * { + font-size: 13px; + float: initial; + background-image: initial; + height: fit-content; + color: black; + } + #filterListContainer.customRule .dacCustomRule { + display: flex; + } + #filterListContainer .dacCustomRule>textarea { + height: 300px; + width: 100%; + border: 1px #DADADA solid; + background: #ededed70; + margin: 5px; + } + #filterListContainer.customRule .dacCustomRule~* { + display: none!important; + } + #dacLinksCon>div { + padding: 5px 0; + display: flex; + } + #dacLinksCon>div>a { + max-width: 245px; + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + } + #dacLinksCon>div>input { + margin-right: 5px; + } + #filterListContainer .dacCustomRule { + border-radius: 8px; + font-weight: bold; + font-size: 16px; + outline: none; + align-items: center; + flex-wrap: nowrap; + white-space: nowrap; + flex-direction: column; + display: none; + } + #filterListContainer input { + border-width: 2px; + border-style: outset; + border-color: buttonface; + border-image: initial; + border: 1px #DADADA solid; + padding: 5px; + border-radius: 8px; + font-weight: bold; + font-size: 9pt; + outline: none; + cursor: pointer; + line-height: initial; + width: initial; + min-width: initial; + max-width: initial; + height: initial; + min-height: initial; + max-height: initial; + } + #dacLinksCon>div:nth-of-type(4n), + #dacLinksCon>div:nth-of-type(4n+1) { + background: #ffffff; + } + #dacLinksCon>div:nth-of-type(4n+2), + #dacLinksCon>div:nth-of-type(4n+3) { + background: #f5f5f5; + } + #filterListContainer .fun,#filterListContainer .sort { + display: flex; + justify-content: space-around; + flex-wrap: nowrap; + width: 100%; + height: 28px; + } + #filterListContainer input[type=button]:hover { + border: 1px #C6C6C6 solid; + box-shadow: 1px 1px 1px #EAEAEA; + color: #333333; + background: #F7F7F7; + } + #filterListContainer input[type=button]:active { + box-shadow: inset 1px 1px 1px #DFDFDF; + } + #filterListBody { + padding: 5px; + box-sizing: border-box; + overflow: hidden; + width: 600px; + height: auto; + max-height: 80vh; + min-height: 200px; + position: fixed; + left: 50%; + top: 10%; + margin-left: -300px; + z-index: 2147483646; + background-color: #ffffff; + border: 1px solid #afb3b6; + border-radius: 10px; + opacity: 0.95; + filter: alpha(opacity=95); + box-shadow: 5px 5px 20px 0px #000; + } + @media screen and (max-width: 800px) { + #filterListBody { + width: 90%; + margin-left: -45%; + } + } + `); + dacLinksCon = filterListContainer.querySelector("#dacLinksCon"); + shadowContainer = document.createElement("div"); + shadowContainer.id = "download-all-content"; + document.body.appendChild(shadowContainer); + let shadow = shadowContainer.attachShadow({ mode: "open" }); + shadow.appendChild(listStyle); + shadow.appendChild(filterListContainer); + } + if (shadowContainer.parentNode) shadowContainer.parentNode.removeChild(shadowContainer); + linkDict = {}; + list.forEach(a => { + createLinkItem(a); + }); + dacUseIframe.checked = useIframe; + document.body.appendChild(shadowContainer); + } + + function initTxtDownDiv() { + if (txtDownContent) { + txtDownContent.style.display = ""; + document.body.appendChild(downTxtShadowContainer); + return; + } + txtDownContent = document.createElement("div"); + txtDownContent.id = "txtDownContent"; + downTxtShadowContainer = document.createElement("div"); + document.body.appendChild(downTxtShadowContainer); + let shadow = downTxtShadowContainer.attachShadow({ mode: "open" }); + shadow.appendChild(txtDownContent); + txtDownContent.innerHTML = createHTML(` + +
    +
    Analysing......
    -
    - +
    +
    -
    - - - +
    + + + +
    -
    -
    `; - txtDownContent=document.querySelector("#txtDownContent"); - txtDownWords=document.querySelector("#txtDownWords"); - txtDownQuit=document.querySelector("#txtDownQuit"); +
    `); + txtDownWords=txtDownContent.querySelector("#txtDownWords"); + txtDownQuit=txtDownContent.querySelector("#txtDownQuit"); txtDownQuit.onclick=function(){ txtDownContent.style.display="none"; - txtDownContent.parentNode.removeChild(txtDownContent); }; - initTempSave(); + initTempSave(txtDownContent); + win.txtDownWords = txtDownWords; + } + + function saveContent() { + if (win.downloadAllContentSaveAsZip && saveAsZip) { + win.downloadAllContentSaveAsZip(rCats, i18n.info.replace("#t#", location.href), content => { + saveAs(content, document.title.replace(/[\*\/:<>\?\\\|\r\n,]/g, "_") + ".zip"); + }); + } else { + var blob = new Blob([i18n.info.replace("#t#", location.href) + "\r\n\r\n" + rCats.join("\r\n\r\n")], {type: "text/plain;charset=utf-8"}); + saveAs(blob, document.title.replace(/[\*\/:<>\?\\\|\r\n,]/g, "_") + ".txt"); + } } - function initTempSave(){ - var tempSavebtn = document.getElementById('tempSaveTxt'); - var abortbtn = document.getElementById('abortRequest'); - var saveAsMd = document.getElementById('saveAsMd'); + function initTempSave(txtDownContent){ + var tempSavebtn = txtDownContent.querySelector('#tempSaveTxt'); + var abortbtn = txtDownContent.querySelector('#abortRequest'); + var saveAsMd = txtDownContent.querySelector('#saveAsMd'); + var saveAsJSON = txtDownContent.querySelector('#saveAsJSON'); + tempSavebtn.onclick = function(){ - var blob = new Blob([i18n.info+"\r\n\r\n"+document.title+"\r\n\r\n"+rCats.join("\r\n\r\n")], {type: "text/plain;charset=utf-8"}); - saveAs(blob, document.title+".txt"); + saveContent(); console.log(curRequests); } abortbtn.onclick = function(){ @@ -319,110 +986,391 @@ if(curRequest)curRequest[1].abort(); } saveAsMd.onclick = function(){ - let txt = i18n.info+"\n\n---\n"+document.title+"\n===\n"; + let txt = i18n.info.replace("#t#", location.href)+"\n\n---\n"+document.title+"\n===\n"; rCats.forEach(cat => { cat = cat.replace("\r\n", "\n---").replace(/(\r\n|\n\r)+/g, "\n\n").replace(/[\n\r]\t+/g, "\n"); - txt += '\n'+cat; + txt += '\n\n'+cat; + }); + var blob = new Blob([txt], {type: "text/plain;charset=utf-8"}); + saveAs(blob, document.title.replace(/[\*\/:<>\?\\\|\r\n,]/g, "_") + ".md"); + } + saveAsJSON.onclick = function(){ + let txt = []; + rCats.forEach(cat => { + let catArr = cat.split("\r\n", 3); + let saveUrl = GM_getValue("saveUrl"); + let catJson = { + title: catArr[0].trim(), + content: catArr[1].trim() + }; + if (saveUrl){ + catJson = { + title: catArr[0].trim(), + url: catArr[1].trim(), + content: catArr[2].trim() + }; + } + txt.push(catJson); }); + txt = JSON.stringify(txt, null, 2); var blob = new Blob([txt], {type: "text/plain;charset=utf-8"}); - saveAs(blob, document.title+".md"); + saveAs(blob, document.title.replace(/[\*\/:<>\?\\\|\r\n,]/g, "_") + ".json"); } } - function indexDownload(aEles){ + let charset = (document.characterSet || document.charset || document.inputEncoding); + let equiv = document.querySelector('[http-equiv="Content-Type"]'), charsetValid = true; + if (equiv && equiv.content) { + let innerCharSet = equiv.content.match(/charset\=([^;]+)/); + if (!innerCharSet) { + charsetValid = false; + } else if (innerCharSet[1].replace("-", "").toLowerCase() != charset.replace("-", "").toLowerCase()) { + charsetValid = false; + } + } else charsetValid = false; + var iframePool = []; + function indexDownload(aEles, noSort){ if(aEles.length<1)return; initTxtDownDiv(); - if(GM_getValue("contentSort")){ - aEles.sort(function(a,b){ - return parseInt(a.innerText.replace(/[^0-9]/ig,"")) - parseInt(b.innerText.replace(/[^0-9]/ig,"")); - }); - } - if(GM_getValue("contentSortUrl")){ - aEles.sort(function(a,b){ - return parseInt(a.href.replace(/[^0-9]/ig,"")) - parseInt(b.href.replace(/[^0-9]/ig,"")); - }); + if(!noSort) { + if(GM_getValue("contentSort")){ + aEles.sort((a, b) => { + return str2Num(a.innerText) - str2Num(b.innerText); + }); + } + if(GM_getValue("contentSortUrl")){ + aEles.sort((a, b) => { + const nameA = a.href.toUpperCase(); + const nameB = b.href.toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + }); + } + if(GM_getValue("reverse")){ + aEles=aEles.reverse(); + } } rCats=[]; + const minute=60000; + var minTxtLength=GM_getValue("minTxtLength") || 100; + var customTitle=GM_getValue("customTitle"); + var prefix=GM_getValue("prefix"); + var disableNextPage=!!GM_getValue("disableNextPage"); + var customNextPageReg=GM_getValue("nextPageReg"); + var maxDlPerMin=GM_getValue("maxDlPerMin") || 0; + var dlCount=0; + if (customNextPageReg) { + try { + innerNextPage = new RegExp(customNextPageReg); + } catch(e) { + console.warn(e); + } + } + function packLink(doc, item) { + if (customTitle) { + try { + let title = doc.querySelector(customTitle); + if (title && title.innerText) { + item.innerText = title.innerText; + } + } catch(e) { + console.warn(e); + } + } + } + function getIframe() { + if (iframePool && iframePool.length) return iframePool.shift(); + let iframe = document.createElement('iframe'); + iframe.name = 'pagetual-iframe'; + iframe.width = '100%'; + iframe.height = '1000'; + iframe.frameBorder = '0'; + iframe.style.cssText = 'margin:0!important;padding:0!important;visibility:hidden!important;flex:0;opacity:0!important;pointer-events:none!important;position:fixed;top:0px;left:0px;z-index:-2147483647;'; + return iframe; + } var insertSigns=[]; // var j=0,rCats=[]; - var downIndex=0,downNum=0,downOnce=function(){ + var downIndex=0,downNum=0,downOnce=function(wait){ if(downNum>=aEles.length)return; + if(maxDlPerMin){ + if(dlCount===-1){ + setTimeout(() => { + downOnce(wait); + }, minute); + return; + }else if(dlCount>=maxDlPerMin){ + dlCount=-1; + setTimeout(() => { + dlCount=0; + downOnce(wait); + }, minute); + return; + }else dlCount++; + } let curIndex=downIndex; let aTag=aEles[curIndex]; let request=(aTag, curIndex)=>{ + if (aTag && aTag.cloneNode) { + aTag = aTag.cloneNode(true); + } let tryTimes=0; - let requestBody={ - method: 'GET', - url: aTag.href, - headers:{ - referer:aTag.href, - "Content-Type":"text/html;charset="+document.charset - }, - timeout:15000, - overrideMimeType:"text/html;charset="+document.charset, - onload: function(result) { - downIndex++; - downNum++; - var doc = getDocEle(result.responseText); - let nextPage=checkNextPage(doc); - if(nextPage){ - var inArr=false; - for(var ai=0;ai>"; - aEles.push(nextPage); - let targetIndex = curIndex; - for(let a=0;a { + try { + return JSON.parse(result.responseText); + } catch(e) {} + return {}; + } + } + let base = doc.querySelector("base"); + let nextPages = !disableNextPage && (!processFunc || nextPageFunc) && await checkNextPage(doc, base ? base.href : aTag.href); + if (nextPages) { + if (!nextPages.length) nextPages = [nextPages]; + nextPages.forEach(nextPage => { + var inArr=false; + for(var ai=0;ai>"; + aEles.push(nextPage); + let targetIndex = curIndex; + for(let a=0;a= 400) { + console.warn("error:", `status: ${result.status} from: ${aTag.href}`); + } else { + console.log(result.status); + } + let validData = processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} from: ${aTag.href} `:""), validTimes < 5); + if (!validData && validTimes++ < 5) { + downIndex--; + downNum--; + setTimeout(() => { + requestDoc(); + }, Math.random() * 500 + validTimes * 1000); + return; + } + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + }, + onerror: function(e) { + console.warn("error:", e, aTag.href); + if(tryTimes++ < 5){ + setTimeout(() => { + requestDoc(); + }, Math.random() * 500 + tryTimes * 1000); + return; + } + downIndex++; + downNum++; + processDoc(curIndex, aTag, null, ` NETWORK ERROR: ${(e.response||e.responseText)} from: ${aTag.href} `); + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + }, + ontimeout: function(e) { + console.warn("timeout: times="+(tryTimes+1)+" url="+aTag.href); + //console.log(e); + if(tryTimes++ < 5){ + setTimeout(() => { + requestDoc(); + }, Math.random() * 500 + tryTimes * 1000); + return; + } + downIndex++; + downNum++; + processDoc(curIndex, aTag, null, ` TIMEOUT: ${aTag.href} `); + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + } + }); + }; + if (useIframe) { + let iframe = getIframe(), inited = false, failedTimes = 0; + let loadtimeout; + let loadIframe = src => { + iframe.src = src; + clearTimeout(loadtimeout); + loadtimeout = setTimeout(() => { + iframe.src = src; + }, 20000); + }; + iframe.sandbox = iframeSandbox || "allow-same-origin allow-scripts allow-popups allow-forms"; + iframe.addEventListener('load', e => { + if (e.data != 'pagetual-iframe:DOMLoaded' && e.type != 'load') return; + if (inited) return; + inited = true; + clearTimeout(loadtimeout); + async function checkIframe() { + try { + let doc = iframe.contentDocument || iframe.contentWindow.document; + if (!doc || !doc.body) { + setTimeout(() => { + checkIframe(); + }, 1000); + return; + } + doc.body.scrollTop = 9999999; + doc.documentElement.scrollTop = 9999999; + if (!processFunc && validTimes++ > 5 && failedTimes++ < 2) { + loadIframe(iframe.src); + validTimes = 0; + inited = false; + return; + } + let base = doc.querySelector("base"); + let nextPages = !disableNextPage && !processFunc && await checkNextPage(doc, base ? base.href : aTag.href); + if (nextPages) { + if (!nextPages.length) nextPages = [nextPages]; + nextPages.forEach(nextPage => { + var inArr=false; + for(var ai=0;ai>"; + aEles.push(nextPage); + let targetIndex = curIndex; + for(let a=0;a { + checkIframe(); + }, 1000); + return; } - let insertSign = insertSigns[targetIndex]; - if(!insertSign)insertSigns[targetIndex] = []; - insertSigns[targetIndex].push(aEles.length-1); + if (wait) { + setTimeout(() => { + downOnce(wait); + }, wait); + } else downOnce(); + } catch(e) { + console.debug("Stop as cors"); + } + if (iframe && iframe.parentNode) { + try { + iframe.src = 'about:blank'; + } catch (e) { + console.error("Error clearing iframe src:", e); + } + iframe.parentNode.removeChild(iframe); + iframePool.push(iframe); } } - processDoc(curIndex, aTag, doc, (result.status>=400?` status: ${result.status} `:"")); - let request=downOnce(); - if(request)curRequests.push(request); - }, - onerror: function(e) { - console.warn("error:"); - console.log(e); - downIndex++; - downNum++; - processDoc(curIndex, aTag, null, ` NETWORK ERROR: '+${(e.response||e.responseText)} `); - let request=downOnce(); - if(request)curRequests.push(request); - }, - ontimeout: function(e) { - console.warn("timeout: times="+tryTimes+" url="+aTag.href); - //console.log(e); - if(++tryTimes<3){ - return GM_xmlhttpRequest(requestBody); + setTimeout(() => { + checkIframe(); + }, 500); + }, false); + let checkReady = setInterval(() => { + let doc; + try { + doc = iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document); + } catch(e) { + clearInterval(checkReady); + return; } - downIndex++; - downNum++; - processDoc(curIndex, aTag, null, ` TIMEOUT: '+${aTag.href} `); - let request=downOnce(); - if(request)curRequests.push(request); - } - }; - return [curIndex,GM_xmlhttpRequest(requestBody),aTag.href]; + if (doc) { + try { + Function('win', 'iframe', '"use strict";' + (iframeInit || "win.self=win.top;"))(iframe.contentWindow, iframe); + clearInterval(checkReady); + } catch(e) { + console.debug(e); + } + } + }, 50); + loadIframe(aTag.href); + document.body.appendChild(iframe); + return [curIndex, null, aTag.href]; + } else { + return [curIndex, requestDoc(), aTag.href]; + } } if(!aTag){ let waitAtagReadyInterval=setInterval(function(){ @@ -435,7 +1383,9 @@ },1000); return null; } - return request(aTag, curIndex); + let result = request(aTag, curIndex); + if (result) curRequests.push(result); + return result; }; function getDocEle(str){ var doc = null; @@ -471,11 +1421,22 @@ } } rCats = rCats.filter(function(e){return e!=null}); + if (prefix) { + for(i=0;i{ - rCats[i]=(aTag.innerText.replace(/[\r\n\t]/g, "") + "\r\n" + (cause || '') + content.replace(/\s*$/, "")); + packLink(doc, aTag); + let isHref = ""; + let saveUrl = GM_getValue("saveUrl"); + if (saveUrl){ + isHref = aTag.href + '\r\n'; + } + rCats[i]=(aTag.innerText.replace(/[\r\n\t]/g, "") + "\r\n" + isHref + (cause || '') + content.replace(/\s*$/, "")); curRequests = curRequests.filter(function(e){return e[0]!=i}); txtDownContent.style.display="block"; txtDownWords.innerHTML=getI18n("downloading",[downNum,(aEles.length-downNum),aTag.innerText]); @@ -485,50 +1446,83 @@ if(downNum==aEles.length){ txtDownWords.innerHTML=getI18n("complete",[downNum]); sortInnerPage(); - var blob = new Blob([i18n.info+"\r\n\r\n"+document.title+"\r\n\r\n"+rCats.join("\r\n\r\n")], {type: "text/plain;charset=utf-8"}); - saveAs(blob, document.title+".txt"); + var disableAutoStartSave = GM_getValue("disableAutoStartSave"); + if(!disableAutoStartSave){ + saveContent(); + } } },3000); } }; let contentResult=getPageContent(doc, content=>{ cbFunc(content); - }); + }, aTag.href); if(contentResult!==false){ + if(check && contentResult && contentResult.replace(/\s/g, "").length0?downThreadNum:20; - for(var i=0;i=aEles.length-1 || downIndex>=downThreadNum-1)break; - else downIndex++; - } - - /*for(let i=0;i/g,""); [].forEach.call(pageData.querySelectorAll("font.jammer"),function(item){ item.innerHTML=""; @@ -562,27 +1557,35 @@ item.innerHTML=""; }); } - [].forEach.call(pageData.querySelectorAll("script,style,link,img,noscript,iframe"),function(item){delList.push(item);}); - [].forEach.call(delList,function(item){item.innerHTML="";}); - var largestContent,contents=pageData.querySelectorAll("span,div,article,p,td"),largestNum=0; + [].forEach.call(pageData.querySelectorAll("script,style,link,noscript,iframe"),function(item){ + if (item && item.parentNode) { + item.parentNode.removeChild(item); + } + }); + var endEle = ele => { + return /^(I|STRONG|B|FONT|P|DL|DD|H\d)$/.test(ele.nodeName) && ele.children.length <= 1; + }; + var largestContent,contents=pageData.querySelectorAll("span,div,article,p,td,pre"),largestNum=0; for(i=0;i=0;j--){ item=content.childNodes[j]; if(item.nodeType==3){ - if(/^\s*$/.test(item.data)) + if(/^\s*$/.test(item.data)){ item.innerHTML=""; - else hasText=true; - }else if(/^(I|A|STRONG|B|FONT|P|DL|DD|H\d)$/.test(item.tagName)){ + }else hasText=true; + }else if(/^(I|A|STRONG|B|FONT|P|DL|DD|H\d)$/.test(item.nodeName)){ hasText=true; - }else if(item.nodeType==1&&item.children.length==1&&/^(I|A|STRONG|B|FONT|P|DL|DD|H\d)$/.test(item.children[0].tagName)){ + }else if(item.nodeType==1&&item.children.length==1&&/^(I|A|STRONG|B|FONT|P|DL|DD|H\d)$/.test(item.children[0].nodeName)){ hasText=true; } } for(j=content.childNodes.length-1;j>=0;j--){ item=content.childNodes[j]; - if(item.nodeType==1 && !/^(I|A|STRONG|B|FONT|BR)$/.test(item.tagName) && /^[\s\-\_\?\>\|]*$/.test(item.innerHTML)) + if(item.nodeType==1 && !/^(I|A|STRONG|B|FONT|BR)$/.test(item.nodeName) && /^[\s\-\_\?\>\|]*$/.test(item.innerHTML)){ item.innerHTML=""; + } } if(content.childNodes.length>1){ let indexItem=0; @@ -592,7 +1595,7 @@ if(item.innerText && item.innerText.length<50 && indexReg.test(item.innerText))indexItem++; for(k=0;klargestNum){ @@ -624,34 +1624,69 @@ } } if(!largestContent)return i18n.error+" : NO TEXT CONTENT"; - var childlist=pageData.querySelectorAll(largestContent.tagName);//+(largestContent.className?"."+largestContent.className.replace(/(^\s*)|(\s*$)/g, '').replace(/\s+/g, '.'):"")); - function getRightStr(ele, noTextEnable){ - let childNodes=ele.childNodes,cStr="\r\n",hasText=false; - for(let j=0;j\|]*$/.test(childNode.data))hasText=true; - if(childNode.innerHTML){ - childNode.innerHTML=childNode.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r"); - } - if(childNode.textContent){ - cStr+=childNode.textContent.replace(/ +/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2"); - } - if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT)$/.test(childNode.tagName))cStr+="\r\n"; - } - if(hasText || noTextEnable || ele==largestContent)rStr+=cStr+"\r\n"; - } - for(i=0;i { + a.parentNode && a.parentNode.removeChild(a); + }); + if(retainImage){ + [].forEach.call(ele.querySelectorAll("img[src]"), img => { + let imgTxtNode=document.createTextNode(`![img](${canonicalUri(img.getAttribute("src"), url || location.href)})`); + img.parentNode.replaceChild(imgTxtNode, img); + }); + } + let childNodes=ele.childNodes,cStr="\r\n",hasText=false; + for(let j=0;j\|]*$/.test(childNode.data))hasText=true; + if(childNode.innerHTML){ + childNode.innerHTML=childNode.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r"); + } + let content=childNode.textContent; + if(content){ + if(!content.trim())continue; + cStr+=content.replace(/[\uFEFF\xA0 ]+/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2"); + } + if(childNode.nodeType!=3 && !/^(I|A|STRONG|B|FONT|IMG)$/.test(childNode.nodeName))cStr+="\r\n"; + else if(childNode.nextSibling && /^P$/.test(childNode.nextSibling.nodeName))cStr+="\r\n"; + } + if(hasText || noTextEnable || ele==largestContent)rStr+=cStr+"\r\n"; + } + var sameDepthChildren=[]; + for(i=0;i>2; + var tooShort = sameDepthChildren.length <= 3; + sameDepthChildren.forEach(child => { + if(tooShort && child.innerText.length < minLength) return; + if((largestContent.className && largestContent.className == child.className) || largestContent.parentNode == child.parentNode){ getRightStr(child, true); }else { getRightStr(child, false); } + }); + rStr = rStr.replace(/[\n\r]+/g,"\n\r"); + } + getContentByLargest(); + if (rStr.length < 100) { + let articles = pageData.querySelectorAll("article,.content,#content"); + if (articles && articles.length == 1) { + largestContent = articles[0]; + largestNum = largestContent.innerText.length; + if (largestNum > 100) { + rStr = ""; + getContentByLargest(); + } } } - return rStr.replace(/[\n\r]+/g,"\n\r"); + return rStr; } function getI18n(key, args){ @@ -673,15 +1708,31 @@ return i; } - function fetch(forceSingle){ + async function sleep(time) { + await new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, time); + }) + } + + async function fetch(forceSingle){ forceSingle=forceSingle===true; processFunc=null; + initTxtDownDiv(); var aEles=document.body.querySelectorAll("a"),list=[]; + txtDownWords.innerHTML=`Analysing ( 1/${aEles.length} )......`; + txtDownContent.style.pointerEvents="none"; for(var i=0;i2 && !forceSingle){ - indexDownload(list); + useIframe = false; + filterList(list); }else{ - var blob = new Blob([i18n.info+"\r\n\r\n"+document.title+"\r\n\r\n"+getPageContent(document)], {type: "text/plain;charset=utf-8"}); + var blob = new Blob([i18n.info.replace("#t#", location.href)+"\r\n\r\n"+document.title+"\r\n\r\n"+getPageContent(document)], {type: "text/plain;charset=utf-8"}); saveAs(blob, document.title+".txt"); } } - document.addEventListener("keydown", function(e) { - if(e.keyCode == 120 && e.ctrlKey) { - fetch(e.shiftKey); - } - }); - function setDel(){ - var selValue=GM_getValue("selectors"); - var selectors=prompt(i18n.del,selValue?selValue:""); - GM_setValue("selectors",selectors); - selValue=GM_getValue("downThreadNum"); - var downThreadNum=prompt(i18n.downThreadNum,selValue?selValue:"20"); - GM_setValue("downThreadNum",downThreadNum); - var sortByUrl=window.confirm(i18n.reSortUrl); - GM_setValue("contentSortUrl",sortByUrl); - if(!sortByUrl)GM_setValue("contentSort",window.confirm(i18n.reSort)); - } - function customDown(){ - processFunc=null; - var customRules=GM_getValue("DACrules_"+document.domain); - var urls=window.prompt(i18n.customInfo,customRules?customRules:"https://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html"); + function customDown(urls){ + processFunc = null; + useIframe = false; if(urls){ urls=decodeURIComponent(urls.replace(/%/g,'%25')); GM_setValue("DACrules_"+document.domain, urls); @@ -737,6 +1775,7 @@ }else{ curEle=document.createElement("a"); curEle.href=i; + curEle.innerText="Added Url"; processEles.push(curEle); return; } @@ -755,7 +1794,7 @@ var curUrl=i.replace(/\[\d+\-\d+\]/,urlIndex).trim(); curEle=document.createElement("a"); curEle.href=curUrl; - curEle.innerText=processEles.length.toString(); + curEle.innerText="Added Url " + processEles.length.toString(); processEles.push(curEle); } }); @@ -764,13 +1803,14 @@ try{ eles=document.querySelectorAll(urlSel[0]); eles=[].filter.call(eles, ele=>{ - return ele.tagName=='BODY'||(!!ele.offsetParent&&getComputedStyle(ele).display!=='none'); + return ele.nodeName=='BODY'||(!!ele.offsetParent&&getComputedStyle(ele).display!=='none'); }) }catch(e){} if(eles.length==0){ eles=[]; var eleTxts=urlsArr[0].split(/(?<=[^\\])[,,]/),exmpEles=[],excludeTxts={}; [].forEach.call(document.querySelectorAll("a"),function(item){ + if(!item.offsetParent)return; eleTxts.forEach(txt=>{ var txtArr=txt.split("!"); if(item.innerText.indexOf(txtArr[0])!=-1){ @@ -781,12 +1821,14 @@ }) exmpEles.forEach(e=>{ var cssSelStr="a",pa=e.parentNode,excludeTxt=excludeTxts[e]; - if(e.className)cssSelStr+="."+CSS.escape(e.className); + if(e.className)cssSelStr+="."+CSS.escape(e.className.replace(/\s+/g, ".")).replace(/\\\./g, '.'); while(pa && pa.nodeName!="BODY"){ cssSelStr=pa.nodeName+">"+cssSelStr; pa=pa.parentNode; } + cssSelStr="body>"+cssSelStr;; [].forEach.call(document.querySelectorAll(cssSelStr),function(item){ + if(!item.offsetParent)return; var isExclude=false; for(var t in excludeTxt){ if(item.innerText.indexOf(excludeTxt[t])!=-1){ @@ -826,7 +1868,7 @@ } else items = [item]; items.forEach(item => { if(!item || !item.href)return; - if(!item.tagName || item.tagName!="A"){ + if(!item.nodeName || item.nodeName!="A"){ let href=item.href; let innerText=item.innerText; item=document.createElement("a"); @@ -845,25 +1887,438 @@ ele.href=ele.href.replace(new RegExp(urlsArr[1]), urlsArr[2]); }); } - if(urlsArr[3]){ - processFunc=(data, cb)=>{ + var retainImage=!!GM_getValue("retainImage"); + var evalCode = urlsArr[3]; + if (evalCode) { + evalCode = evalCode.trim(); + if (/^iframe:/.test(evalCode)) { + evalCode = evalCode.replace("iframe:", ""); + useIframe = true; + iframeSandbox = false; + iframeInit = false; + while (/^(sandbox|init):/.test(evalCode)) { + iframeSandbox = evalCode.match(/^sandbox:\{(.*?)\}/); + if (iframeSandbox) { + evalCode = evalCode.replace(iframeSandbox[0], ""); + iframeSandbox = iframeSandbox[1]; + } + iframeInit = evalCode.match(/^init:\{(.*?)\}/); + if (iframeInit) { + evalCode = evalCode.replace(iframeInit[0], ""); + iframeInit = iframeInit[1]; + } + } + } + let charsetMatch = evalCode.match(/^charset:{(.+?)}/); + if (charsetMatch) { + charset = charsetMatch[1]; + evalCode = evalCode.replace(charsetMatch[0], ""); + } + let nextMatch = evalCode.match(/^next:(\{+)/); + if (nextMatch) { + let splitLen = nextMatch[1].length; + nextMatch = evalCode.match(new RegExp(`^next:\\{{${splitLen}}(.*?)\\}{${splitLen}}`)); + if (nextMatch) { + let nextCode = nextMatch[1]; + evalCode = evalCode.replace(nextMatch[0], ""); + nextPageFunc = async (doc, url) => { + let result; + if (/\breturn\b/.test(nextCode)) { + result = await new AsyncFunction('doc', 'url', '"use strict";' + nextCode)(doc, url); + } else { + try { + result = doc.querySelectorAll(nextCode); + if (result && result.length) { + [].forEach.call(result, ele => { + ele.href = canonicalUri(ele.getAttribute("href"), url || location.href); + }); + } else result = null; + } catch(e) {} + } + return result; + } + } + } + } + if(evalCode){ + processFunc=(data, cb, url)=>{ let doc=data; - if(urlsArr[3].indexOf("return ")==-1){ - return eval(urlsArr[3]); + if(evalCode.indexOf("return ")==-1){ + if(evalCode.indexOf("@")==0){ + let content=""; + var selectors=GM_getValue("selectors"); + if(selectors){ + [].forEach.call(data.querySelectorAll(selectors),function(item){ + item.innerHTML=""; + }); + } + [].forEach.call(data.querySelectorAll("script,style,link,noscript,iframe"),function(item){ + if (item && item.parentNode) { + item.parentNode.removeChild(item); + } + }); + if(retainImage){ + [].forEach.call(data.querySelectorAll("img[src]"), img => { + let imgTxt=`![img](${canonicalUri(img.getAttribute("src"), location.href)})`; + let imgTxtNode=document.createTextNode(imgTxt); + img.parentNode.replaceChild(imgTxtNode, img); + }); + } + [].forEach.call(data.querySelectorAll(evalCode.slice(1)), ele=>{ + [].forEach.call(ele.childNodes, child=>{ + if(child.innerHTML){ + child.innerHTML=child.innerHTML.replace(/\<\s*br\s*\>/gi,"\r\n").replace(/\n+/gi,"\n").replace(/\r+/gi,"\r"); + } + if(child.textContent){ + content+=(child.textContent.replace(/ +/g," ").replace(/([^\r]|^)\n([^\r]|$)/gi,"$1\r\n$2")+"\r\n"); + } + }); + content+="\r\n"; + }); + return content; + }else return eval(evalCode); }else{ - return Function("data", "doc", "cb",urlsArr[3])(data, doc, cb); + return Function("data", "doc", "cb", "url", evalCode)(data, doc, cb, url); } }; }else{ - var win=(typeof unsafeWindow=='undefined'? window : unsafeWindow); if(win.dacProcess){ processFunc=win.dacProcess; } } - indexDownload(processEles); + filterList(processEles); } } + const configPage = "https://hoothin.github.io/UserScripts/DownloadAllContent/"; + const copySvg = ''; + function searchRule(){ + GM_openInTab(configPage + "#@" + location.hostname, {active: true}); + } + var downloadShortcut = GM_getValue("downloadShortcut") || {ctrlKey: true, shiftKey: false, altKey: false, metaKey: false, key: 'F9'}; + var downloadSingleShortcut = GM_getValue("downloadSingleShortcut") || {ctrlKey: true, shiftKey: true, altKey: false, metaKey: false, key: 'F9'}; + var downloadCustomShortcut = GM_getValue("downloadCustomShortcut") || {ctrlKey: true, shiftKey: false, altKey: true, metaKey: false, key: 'F9'}; + + var enableTouch = GM_getValue("enableTouch"); + if (enableTouch) { + const minLength = 256, tg = 0.5, atg = 2; + var lastX, lastY, signs, lastSign; + function tracer(e) { + let curX = e.changedTouches[0].clientX, curY = e.changedTouches[0].clientY; + let distanceX = curX - lastX, distanceY = curY - lastY; + let distance = distanceX * distanceX + distanceY * distanceY; + if (distance > minLength) { + lastX = curX; + lastY = curY; + let direction = ""; + let slope = Math.abs(distanceY / distanceX); + if (slope > atg) { + if (distanceY > 0) { + direction = "↓"; + } else { + direction = "↑"; + } + } else if (slope < tg) { + if (distanceX > 0) { + direction = "→"; + } else { + direction = "←"; + } + } + if (direction && lastSign != direction) { + signs += direction; + lastSign = direction; + } + } + } + document.addEventListener("touchstart", function(e) { + lastX = e.changedTouches[0].clientX; + lastY = e.changedTouches[0].clientY; + lastSign = signs = ""; + document.addEventListener("touchmove", tracer, false); + }, false); + document.addEventListener("touchend", function(e) { + document.removeEventListener("touchmove", tracer, false); + if (signs == "→↓←↑") { + e.stopPropagation(); + e.preventDefault(); + startCustom(); + } + }, false); + } + + if (location.origin + location.pathname == configPage) { + let exampleNode = document.getElementById("example"); + if (!exampleNode) return; + + exampleNode = exampleNode.parentNode; + let ruleList = exampleNode.nextElementSibling.nextElementSibling; + let searchInput = document.createElement("input"); + let inputTimer; + function searchByInput() { + clearTimeout(inputTimer); + inputTimer = setTimeout(() => { + let curValue = searchInput.value; + let matchRules = []; + let dontMatchRules = []; + if (curValue) { + for (let i = 0; i < ruleList.children.length; i++) { + let curRule = ruleList.children[i]; + let aHref = curRule.firstChild.href; + if (aHref.indexOf(curValue) == -1) { + dontMatchRules.push(curRule); + } else { + matchRules.push(curRule); + } + } + } else { + dontMatchRules = ruleList.children; + } + if (matchRules.length) { + for (let i = 0; i < dontMatchRules.length; i++) { + let curRule = dontMatchRules[i]; + curRule.style.display = "none"; + } + for (let i = 0; i < matchRules.length; i++) { + let curRule = matchRules[i]; + curRule.style.display = ""; + } + } else { + for (let i = 0; i < dontMatchRules.length; i++) { + let curRule = dontMatchRules[i]; + curRule.style.display = ""; + } + } + }, 500); + } + searchInput.style.margin = "10px"; + searchInput.style.width = "100%"; + searchInput.placeholder = i18n.searchRule; + searchInput.addEventListener("input", function(e) { + searchByInput(); + }); + if (location.hash) { + let hash = location.hash.slice(1); + if (hash.indexOf("@") == 0) { + setTimeout(() => { + exampleNode.scrollIntoView(); + }, 500); + searchInput.value = hash.slice(1); + searchByInput(); + } + } + [].forEach.call(ruleList.querySelectorAll("div.highlight"), highlight => { + highlight.style.position = "relative"; + highlight.innerHTML = highlight.innerHTML + copySvg; + let svg = highlight.children[1]; + svg.addEventListener("click", function(e) { + GM_setClipboard(highlight.children[0].innerText); + svg.style.opacity = 0; + setTimeout(() => { + svg.style.opacity = 1; + }, 1000); + }); + }); + exampleNode.parentNode.insertBefore(searchInput, ruleList); + + + let donateNode = document.querySelector("[alt='donate']"); + if (!donateNode) return; + let insertPos = donateNode.parentNode.nextElementSibling; + let radioIndex = 0; + function createOption(_name, _value, _type) { + if (!_type) _type = "input"; + let con = document.createElement("div"); + let option = document.createElement("input"); + let cap = document.createElement("b"); + option.type = _type; + option.value = _value; + option.checked = _value; + cap.style.margin = "0px 10px 0px 0px"; + if (_type == "radio") { + let label = document.createElement("label"); + label.innerText = _name; + radioIndex++; + option.id = "radio" + radioIndex; + label.setAttribute("for", option.id); + cap.appendChild(label); + } else { + if (_type == "input") { + option.style.flexGrow = "1"; + } + cap.innerText = _name; + } + con.style.margin = "10px 0"; + con.style.display = "flex"; + con.style.alignItems = "center"; + con.appendChild(cap); + con.appendChild(option); + insertPos.parentNode.insertBefore(con, insertPos); + return option; + } + function formatShortcut(e) { + let result = []; + if (e.ctrlKey) { + result.push("Ctrl"); + } + if (e.shiftKey) { + result.push("Shift"); + } + if (e.altKey) { + result.push("Alt"); + } + if (e.metaKey) { + result.push("Meta"); + } + result.push(e.key); + return result.join(" + "); + } + function geneShortcutData(str) { + if (!str) return ""; + let result = {ctrlKey: false, shiftKey: false, altKey: false, metaKey: false, key: ''}; + str.split(" + ").forEach(item => { + switch(item) { + case "Ctrl": + result.ctrlKey = true; + break; + case "Shift": + result.shiftKey = true; + break; + case "Alt": + result.altKey = true; + break; + case "Meta": + result.metaKey = true; + break; + default: + result.key = item; + break; + } + }); + return result; + } + let showFilterList = createOption(i18n.showFilterList, !!GM_getValue("showFilterList"), "checkbox"); + let downloadShortcutInput = createOption(i18n.downloadShortcut, formatShortcut(downloadShortcut) || ""); + let downloadSingleShortcutInput = createOption(i18n.downloadSingleShortcut, formatShortcut(downloadSingleShortcut) || ""); + let downloadCustomShortcutInput = createOption(i18n.downloadCustomShortcut, formatShortcut(downloadCustomShortcut) || ""); + downloadShortcutInput.setAttribute("readonly", "true"); + downloadSingleShortcutInput.setAttribute("readonly", "true"); + downloadCustomShortcutInput.setAttribute("readonly", "true"); + downloadShortcutInput.style.cursor = "cell"; + downloadSingleShortcutInput.style.cursor = "cell"; + downloadCustomShortcutInput.style.cursor = "cell"; + let keydonwHandler = e => { + if (e.key) { + if (e.key == "Backspace") { + e.target.value = ""; + } else if (e.key != "Control" && e.key != "Shift" && e.key != "Alt" && e.key != "Meta") { + e.target.value = formatShortcut(e); + } + } + e.preventDefault(); + e.stopPropagation(); + }; + downloadShortcutInput.addEventListener("keydown", keydonwHandler); + downloadSingleShortcutInput.addEventListener("keydown", keydonwHandler); + downloadCustomShortcutInput.addEventListener("keydown", keydonwHandler); + let enableTouchInput = createOption(i18n.enableTouch, !!enableTouch, "checkbox"); + + let delSelector = createOption(i18n.del, GM_getValue("selectors") || ""); + delSelector.setAttribute("placeHolder", ".mask,.ksam"); + let downThreadNum = createOption(i18n.downThreadNum, GM_getValue("downThreadNum") || "20", "number"); + let maxDlPerMin = createOption(i18n.maxDlPerMin, GM_getValue("maxDlPerMin") || "0", "number"); + let customTitle = createOption(i18n.customTitle, GM_getValue("customTitle") || ""); + let saveUrl = createOption(i18n.saveUrl, !!GM_getValue("saveUrl"), "checkbox"); + let disableAutoStartSave = createOption(i18n.disableAutoStartSave, !!GM_getValue("disableAutoStartSave"), "checkbox"); + customTitle.setAttribute("placeHolder", "title"); + let minTxtLength = createOption(i18n.minTxtLength, GM_getValue("minTxtLength") || "100", "number"); + let contentSortUrlValue = GM_getValue("contentSortUrl") || false; + let contentSortValue = GM_getValue("contentSort") || false; + let reSortDefault = createOption(i18n.reSortDefault, !contentSortUrlValue && !contentSortValue, "radio"); + let reSortUrl = createOption(i18n.reSortUrl, contentSortUrlValue || false, "radio"); + let contentSort = createOption(i18n.reSort, contentSortValue || false, "radio"); + reSortDefault.name = "sort"; + reSortUrl.name = "sort"; + contentSort.name = "sort"; + let reverse = createOption(i18n.reverseOrder, !!GM_getValue("reverse"), "checkbox"); + let prefix = createOption(i18n.prefix, GM_getValue("prefix") || ""); + let disableNextPage = !!GM_getValue("disableNextPage"); + let nextPage = createOption(i18n.nextPage, !disableNextPage, "checkbox"); + let nextPageReg = createOption(i18n.nextPageReg, GM_getValue("nextPageReg") || ""); + let retainImage = createOption(i18n.retainImage, !!GM_getValue("retainImage"), "checkbox"); + prefix.setAttribute("placeHolder", "第 $i 章:"); + nextPageReg.setAttribute("placeHolder", "^\\s*(下一[页頁张張]|next\\s*page|次のページ)"); + if (disableNextPage) { + nextPageReg.parentNode.style.display = "none"; + } + nextPage.onclick = e => { + nextPageReg.parentNode.style.display = nextPage.checked ? "flex" : "none"; + } + let saveBtn = document.createElement("button"); + saveBtn.innerText = i18n.saveBtn; + saveBtn.style.margin = "0 0 20px 0"; + insertPos.parentNode.insertBefore(saveBtn, insertPos); + saveBtn.onclick = e => { + GM_setValue("selectors", delSelector.value || ""); + GM_setValue("downThreadNum", parseInt(downThreadNum.value || 20)); + GM_setValue("maxDlPerMin", parseInt(maxDlPerMin.value || 20)); + GM_setValue("minTxtLength", parseInt(minTxtLength.value || 100)); + GM_setValue("customTitle", customTitle.value || ""); + GM_setValue("disableAutoStartSave", disableAutoStartSave.checked); + GM_setValue("saveUrl", saveUrl.checked); + if (reSortUrl.checked) { + GM_setValue("contentSortUrl", true); + GM_setValue("contentSort", false); + } else if (contentSort.checked) { + GM_setValue("contentSortUrl", false); + GM_setValue("contentSort", true); + } else { + GM_setValue("contentSortUrl", false); + GM_setValue("contentSort", false); + } + GM_setValue("reverse", reverse.checked); + GM_setValue("enableTouch", enableTouchInput.checked); + GM_setValue("retainImage", retainImage.checked); + GM_setValue("showFilterList", showFilterList.checked); + GM_setValue("disableNextPage", !nextPage.checked); + GM_setValue("nextPageReg", nextPageReg.value || ""); + GM_setValue("prefix", prefix.value || ""); + GM_setValue("downloadShortcut", geneShortcutData(downloadShortcutInput.value) || ""); + GM_setValue("downloadSingleShortcut", geneShortcutData(downloadSingleShortcutInput.value) || ""); + GM_setValue("downloadCustomShortcut", geneShortcutData(downloadCustomShortcutInput.value) || ""); + alert(i18n.saveOk); + }; + return; + } + + function setDel(){ + GM_openInTab(configPage + "#操作說明", {active: true}); + } + + function checkKey(shortcut1, shortcut2) { + return shortcut1.ctrlKey == shortcut2.ctrlKey && shortcut1.shiftKey == shortcut2.shiftKey && shortcut1.altKey == shortcut2.altKey && shortcut1.metaKey == shortcut2.metaKey && shortcut1.key == shortcut2.key; + } + + function startCustom() { + var customRules = GM_getValue("DACrules_" + document.domain); + var urls = window.prompt(i18n.customInfo + ":\nhttps://xxx.xxx/book-[20-99].html, https://xxx.xxx/book-[01-10].html", customRules || ""); + if (urls) { + customDown(urls); + } + } + + document.addEventListener("keydown", function(e) { + if (checkKey(downloadCustomShortcut, e)) { + startCustom(); + } else if (checkKey(downloadSingleShortcut, e)) { + fetch(true); + } else if (checkKey(downloadShortcut, e)) { + fetch(false); + } + }); + GM_registerMenuCommand(i18n.custom, () => { + startCustom(); + }); GM_registerMenuCommand(i18n.fetch, fetch); - GM_registerMenuCommand(i18n.custom, customDown); GM_registerMenuCommand(i18n.setting, setDel); + GM_registerMenuCommand(i18n.searchRule, searchRule); })(); diff --git a/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js new file mode 100644 index 00000000000..73c8e6a5ad6 --- /dev/null +++ b/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js @@ -0,0 +1,219 @@ +// ==UserScript== +// @name DownloadAllContent ZIP addon +// @name:zh-CN 怠惰小说下载器 ZIP 扩展 +// @name:zh-TW 怠惰小説下載器 ZIP 擴充 +// @namespace hoothin +// @version 0.6.1 +// @description Save content as ZIP for DownloadAllContent +// @description:zh-CN 下载时分章节保存 TXT 并打包为 ZIP +// @description:zh-TW 下載時分章節儲存 TXT 並打包為 ZIP +// @author hoothin +// @match *://*/* +// @grant unsafeWindow +// @grant GM_xmlhttpRequest +// @require https://unpkg.com/jszip@3.7.1/dist/jszip.js +// ==/UserScript== + +(function() { + 'use strict'; + const threadNum = 20;//圖片下載綫程數 + const ocrApi = ""; + //const ocrApi = "http://127.0.0.1:416/?img=%t";//ocr 識別 api + var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; + var zipTips, loadingImgs = [], loadingIndex = 0, loadedNum = 0, ocrNum = 0, zip, blobDict = {}, ocrDict = {}; + + async function dataURLToBlob(dataurl, ext = "jpeg") { + return await new Promise((resolve) => { + if (!dataurl) return resolve(null); + var canvas = document.createElement('CANVAS'); + var ctx = canvas.getContext('2d'); + var img = new Image(); + img.setAttribute("crossOrigin", "anonymous"); + img.onload = function() { + canvas.width = img.width; + canvas.height = img.height; + ctx.drawImage(img, 0, 0); + var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + for(var i = 0; i < imageData.data.length; i += 4) { + if(imageData.data[i + 3] == 0) { + imageData.data[i] = 255; + imageData.data[i + 1] = 255; + imageData.data[i + 2] = 255; + imageData.data[i + 3] = 255; + } + } + ctx.putImageData(imageData, 0, 0); + canvas.toBlob(blob => { + resolve(blob); + }, `image/${ext}`); + }; + img.onerror = function() { + resolve(null); + }; + img.src = dataurl; + }); + } + + async function blobToDataURL(blob) { + return await new Promise((resolve) => { + var a = new FileReader(); + a.readAsDataURL(blob); + a.onload = function (e) { + resolve(e.target.result); + }; + a.onerror = function (e) { + resolve(null); + }; + }); + } + + async function urlToBlob(url) { + return await new Promise((resolve) => { + GM_xmlhttpRequest({ + method: 'GET', + url: url, + responseType:'blob', + timeout:20000, + headers: { + origin: location.origin, + referer: location.href, + accept: "*/*" + }, + onload: async function(d) { + resolve(d.response); + }, + onerror: function() { + resolve(null); + }, + ontimeout: function() { + resolve(null); + } + }); + }) + } + + async function downloadImage(cb) { + if (loadedNum >= loadingImgs.length || loadingIndex >= loadingImgs.length) return; + let i = loadingIndex; + loadingIndex++; + let src = loadingImgs[i]; + let blob = await urlToBlob(src); + if (blob) { + zip.file("imgs/" + i + ".jpg", blob); + zipTips.innerText = `Download images ${loadedNum + "/" + loadingImgs.length}...`; + blobDict[src] = blob; + } + loadedNum++; + if (loadedNum >= loadingImgs.length) { + if (ocrApi) { + loadingIndex = 0; + let length = Math.min(loadingImgs.length, threadNum); + for (let i = 0; i < length; i++) { + recognizeImage(cb); + } + } else { + cb(); + } + } else downloadImage(cb); + } + + async function recognizeImage(cb) { + if (ocrNum >= loadingImgs.length || loadingIndex >= loadingImgs.length) return; + let i = loadingIndex; + loadingIndex++; + let src = loadingImgs[i]; + let dataURL = await blobToDataURL(blobDict[src]); + let blob = await dataURLToBlob(dataURL, "jpeg"); + dataURL = await blobToDataURL(blob); + let result = await new Promise((resolve) => { + GM_xmlhttpRequest({ + method: 'GET', + url: ocrApi.replace("%t", encodeURIComponent(dataURL.replace("data:image/jpeg;base64,", ""))), + timeout:20000, + onload: function(d) { + resolve(d.response); + }, + onerror: function() { + resolve(null); + }, + ontimeout: function() { + resolve(null); + } + }); + }); + ocrNum++; + zipTips.innerText = `Recognize images ${ocrNum + "/" + loadingImgs.length}...`; + if (result) { + ocrDict[i] = result; + } + if (ocrNum >= loadingImgs.length) { + cb(); + } else recognizeImage(cb); + } + + function downloadImages(cb) { + let length = Math.min(loadingImgs.length, threadNum); + if (length == 0) { + return cb(); + } + for (let i = 0; i < length; i++) { + downloadImage(cb); + } + } + + const mdImgReg = /!\[img\]\((http.+?)\)/; + _unsafeWindow.downloadAllContentSaveAsZip = async (rCats, info, callback) => { + loadingIndex = 0; + loadedNum = 0; + ocrNum = 0; + if (!zipTips) { + zipTips = document.createElement("div"); + } + if (!zipTips.parentNode) { + let txtDownWords = _unsafeWindow.txtDownWords; + if (txtDownWords) { + txtDownWords.appendChild(zipTips); + } + } + console.log("Begin compress to ZIP..."); + zipTips.innerText = "Begin compress to ZIP..."; + zip = new JSZip(); + zip.file("readme.txt", info); + let zipTemp = []; + for (let i = 0; i < rCats.length; i++) { + let cat = rCats[i]; + if (!cat) continue; + let catTitle = cat.match(/.*?\r\n/); + if (!catTitle) continue; + catTitle = catTitle[0].trim(); + cat = cat.replace(catTitle, "").replace(/^[\n\r]+/, ""); + let imgMatch = cat.match(mdImgReg), hasImg = false; + while (imgMatch) { + let index = loadingImgs.indexOf(imgMatch[1]); + if (index == -1) { + index = loadingImgs.length; + loadingImgs.push(imgMatch[1]); + } + cat = cat.replace(imgMatch[0], `![img](imgs/${index}.jpg)`); + imgMatch = cat.match(mdImgReg); + hasImg = true; + } + zipTemp.push({title: catTitle.replace(/[\*\/:<>\?\\\|\r\n]/g, "_").slice(0, 50), hasImg: hasImg, content: cat}); + } + downloadImages(() => { + zipTemp.forEach(d => { + if (ocrApi) { + d.hasImg = false; + Object.keys(ocrDict).forEach(key => { + d.content = d.content.replace(new RegExp(`!\\[img\\]\\(imgs/${key}\\.jpg\\)`, 'g'), ocrDict[key]); + }); + } + zip.file(d.title + (d.hasImg ? ".md" : ".txt"), d.content); + }); + zip.generateAsync({type: "blob", compression: "DEFLATE"}, meta => {zipTips.innerText = "percent: " + ((meta && meta.percent && meta.percent.toFixed(2)) || "100") + "%"}).then(function(content){ + callback(content); + zipTips.innerText = ""; + }) + }); + } +})(); \ No newline at end of file diff --git a/DownloadAllContent/README.md b/DownloadAllContent/README.md index 8d8de875073..f5de4823ebd 100644 --- a/DownloadAllContent/README.md +++ b/DownloadAllContent/README.md @@ -1,24 +1,33 @@ -起點等都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的小站再考慮我的腳本。 +起點等主流網站建議優先使用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),如果遇到沒有人願意支援的小網站,再考慮我的腳本。 -輕量級抓取腳本,用於下載網頁小説或其他文字內容,理論上通用於任何靜態寫入正文的小說網站、論壇、貼吧等而無需規則。 +請勿用於有版權的網站,如造成侵權或對目標網站造成損失,後果請自行負責。 -腳本會自動檢索頁面中的主要內容並下載(省得複製完gal攻略還要手動逐條刪除「某某某13級頭銜水龍王發表於X年X月X日來自XX客戶端」)。 -如果位於小說目錄頁會遍歷所有章節並排序拼接後存為TXT文檔。 +輕量級抓取腳本,用於下載網路小說或其他文字內容。理論上,它通用於任何將內文靜態寫入網頁的小說網站、論壇、貼吧等,且無須另外設定規則。 -[![img](https://img.shields.io/github/stars/hoothin/UserScripts?style=social)](https://github.com/hoothin/UserScripts) [【高亮或者格式化網頁中選中的代碼,並統計字數】](https://greasyfork.org/scripts/24150-highlight-every-code) +腳本會自動偵測並下載頁面中的主要內容(省得複製完gal攻略還要手動逐條刪除「某某某13級頭銜水龍王發表於X年X月X日來自XX客戶端」)。 +如果當前在小說目錄頁,腳本會遍歷所有章節,排序後串接成一個 TXT 文字檔。 + +[![img](https://img.shields.io/github/stars/hoothin/UserScripts?style=social)](https://github.com/hoothin/UserScripts#StarMe) ⭐[Star Me](https://github.com/hoothin/UserScripts#StarMe) + +安裝: [Github📥](https://hoothin.github.io/UserScripts/DownloadAllContent/DownloadAllContent.user.js) / [Greasefork📥](https://greasyfork.org/scripts/25068). --- # 操作說明 -+ 打開小說目錄頁、論壇或貼吧內容頁 -+ 按下 `CTRL+F9` 或點擊命令菜單 -+ 按下 `SHIFT+CTRL+F9` 忽略目錄,僅下載當前頁 ++ 開啟小說目錄頁、論壇或貼吧的內容頁面 ++ 按下 `CTRL+F9` 或點擊使用者腳本管理器中的指令選單 ++ 按下 `SHIFT+CTRL+F9` 可忽略目錄,僅下載當前頁面 ++ 建議開啟`下載前顯示章節篩選排序視窗`的選項 + +如果遇到下載出錯的網站,歡迎到 [Github](https://github.com/hoothin/UserScripts/) 提交 issue。也請順手幫我點亮 Star! -若是遇到下載出錯的站點,可隨意提交issue至[Github](https://github.com/hoothin/UserScripts/issues),我若恰好有空便會嘗試幫你查錯或編寫自定義規則。 +*對你有幫助的話,可透過 [![i](https://static.afdiancdn.com/favicon.ico) 愛發電](https://afdian.com/a/hoothin) 或者 [![i](https://ko-fi.com/favicon-32x32.png) Ko-fi](https://ko-fi.com/hoothin) 請我喝一杯奶茶。也歡迎加入 [💬Discord 群組](https://discord.com/invite/keqypXC6wD) 或者關注我的 [Twitter](https://twitter.com/intent/follow?screen_name=HoothinDev)。* -*對你有幫助的話,請透過[PayPal管道](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation)请我喝一杯奶茶* +![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) -donation +[怠惰小説下載器 ZIP 擴充](https://hoothin.github.io/UserScripts/DownloadAllContent/DownloadAllContentSavaAsZIP.user.js) 下載時將各章節分別存為 TXT,並打包成 ZIP 檔 + +[圖片驗證碼辨識](https://github.com/hoothin/ImgCodeCheck) 開啟`保留內文圖片的網址`後配合 ZIP 擴充可自動轉換圖片文字,詳閱[愛發電](https://afdian.com/p/c7fc3abc8e8411ee9b1852540025c377) ## 怠惰心法 名喚怠惰,實為勤勉 @@ -28,130 +37,223 @@ **CTRL+F9** 就完事了唄。 ### 第二層心法(超易) - 倘若章節連結沒有xx章、xx節、xx話之類的特徵字樣,可點擊**自定義下載**,輸入隨便一個章節名,例如 「眾神的風車」,即可標記所有同級連結為目錄章節並下載。假如頁面有兩套章節格式,也可標記多個,例如「眾神的風車,風車的眾神」。亦可標記排除項,例如「眾神的風車01!02!03,風車的眾神!鐵幕」,代表標記「眾神的風車01」同級連結並排除含有 02 的項和含有 03 的項,同時標記「風車的眾神」同級連結並排除含有「鐵幕」的項。 + 倘若章節連結沒有xx章、xx節、xx話之類的特徵字樣,可點擊**自訂下載**,輸入任意一個章節名稱,例如 「`眾神的風車`」,即可標記所有同級的連結為目錄章節並下載。假如頁面有兩種章節格式,也可以標記多個,例如「`眾神的風車,風車的眾神`」。亦可標記排除項,例如「`眾神的風車01!02!03,風車的眾神!鐵幕`」,這代表:標記「眾神的風車01」的同級連結,但排除其中含有「02」和「03」的項目;同時標記「風車的眾神」的同級連結,並排除含有「鐵幕」的項目。 ### 第三層心法(略易) - 如果內頁沒有正文,但章節連結與真實內容連結有關聯,可通過**自定義下載**,替換連結內容獲取真實內容。例如 【`眾神的風車@@articles@@articlescontent`】,即可替換章節 URL 中的 articles 為 articlescontent 並自動獲取內容。 + 如果內頁沒有正文,但章節連結與真實內容連結有關聯,可透過**自訂下載**,替換連結內容來獲取真實內容。例如輸入 「`眾神的風車@@articles@@articlescontent`」,即可替換章節 URL 中的 articles 為 articlescontent 並自動獲取內容。 ### 第四層心法(略難) - 如果連結無法由直接替換得到最終地址,可用正則替換,例如【`眾神的風車@@articles(\d+)@@articlescontent_$1b`】,即可替換章節 URL 中的 articles1、articles2 為 + 如果連結無法由直接替換得到最終網址,可用正規表示式替換,例如【`眾神的風車@@articles(\d+)@@articlescontent_$1b`】,即可替換章節 URL 中的 articles1、articles2 為 `articlescontent_1b、articlescontent_2b` ### 第五層心法(難) 輸入章節的 css 選擇器可以更精確地標記章節連結。例如`.l_chaptname>a`,代表 class 為 l_chaptname 的元素下的 a 連結。 - 下載內容可能含有干擾碼,此時只需點擊**懶人小說下載設置**,輸入干擾碼的 css 選擇器即可排除干擾碼。例如 `.mask,.ksam,font.jammer`,代表刪除 class 為 mask 或者 ksam 的元素或者 class 為 jammer 的 font 元素。 + 如果有内分頁,且無法用正規表示式提取下一頁連結,可直接用選擇器來獲取,例如`.l_chaptname>a@@@@@@next:{.curr+a}`。 + 如果內文擷取錯誤,也可以使用選擇器來獲取,例如`.l_chaptname>a@@@@@@@div#content`或者`.l_chaptname>a@@@@@@next:{.curr+a}@div#content`。 + 下載內容可能含有幹擾碼,此時只需點擊**懶人小說下載設置**,輸入幹擾碼的 CSS 選擇器即可排除幹擾碼。例如 `.mask,.ksam,font.jammer`,代表刪除 class 為 mask 或者 ksam 的元素,或者 class 為 jammer 的 font 元素。 ### 第六層心法(超難) - 倘若正文不在內頁正文,是頁面加載後處理得到的,可點擊**自定義下載**,輸入自定義代碼對內頁進行分析獲取正確結果。例如 【`眾神的風車@@@@@@var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content;`】,即可通過自定義代碼處理返回頁面獲取內容。代碼中使用 doc 可以獲得返回頁面的 document,最後一個表達式的值為最終寫入的內容。 + 倘若內文並非直接存在於頁面原始碼,而是在頁面載入後才處理生成的,可以點擊**自訂下載**,輸入自訂程式碼對內頁進行分析以獲取正確結果。例如 【`眾神的風車@@@@@@var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content;`】,即可透過自訂程式碼處理返回的頁面來獲取內容。程式碼中的 `doc` 代表返回頁面的 document 物件,最後一個表達式的值就是最終寫入的內容。 - 如果返回 false,代表異步回調,可自行抓取內容並等待抓取成功後用 cb(content) 返回抓取到的 content。 + 如果返回 `false`,代表這是一個非同步回呼(asynchronous callback),可自行抓取內容並等待抓取成功後用 `cb(content)`` 回傳抓取到的 content。 - 倘若章節沒有連結,點擊後方才生成連結跳轉,可通過 `>>` 管道處理抓取到的元素生成章節連結,詳情見下方例子。 + 倘若章節沒有連結,而是點擊後才生成連結並跳轉,可透過 `>>` 管道處理抓取到的元素生成章節連結,例如`a.link >> item.href = xxx; return item;`。詳情見下方範例。 ### 第七層心法(極難) - 倘若正文已經經過加密,需要解密才能獲取正確內容,可打開瀏覽器的控制台,自定義 dacProcess 函數,調取頁面中網站自身的解密代碼處理抓取的加密數據。例如控制台輸入`dacProcess=data=>{return decrypt(xxx);}` 代表調用網站的 decrypt 解密章節頁面返回的數據。然後再點擊**自定義下載**,需要注意自定義下載時標記章節是必需的。 + 倘若正文已經經過加密,需要解密才能獲取正確內容,可開啟瀏覽器的開發人員工具主控台,自訂 dacProcess 函數,調取頁面中網站自身的解密程式碼處理抓取的加密數據。例如主控台輸入`dacProcess=data=>{return decrypt(xxx);}` 代表調用網站的 decrypt 函數來解密章節頁面返回的資料。然後再點擊**自訂下載**,需要注意自訂下載時,標記章節是必要步驟。 -### 關於配置項 - **【以下功能需要通過 Tampermonkey 等管理器的命令菜單進入】** +### 關於設定選項 + **【以下功能需要透過 Tampermonkey 等腳本管理器的指令選單進入】** ![img](https://greasyfork.s3.us-east-2.amazonaws.com/grg0pe1t13eth8t012bd1absp9id) - - 自定義目錄:如`https://xxx.xxx/book-**[20-99]**.html,https://xxx.xxx/book-**[01-10]**.html`,意思為下載book-20.html到book-99.html,以及book-01.html到book-10.html,使用**[1-10]**則不補0。 - - 章節選擇器自定義:輸入章節連結的 css 選擇器即可,後面可以接上 url 替換碼、以及自定義處理代碼。 - - 干擾碼:填入干擾碼的 css 選擇器,如`.mask,.ksam`,意為刪除 class 為 mask 或者 ksam 的元素。 + - 自訂目錄:如`https://xxx.xxx/book-**[20-99]**.html,https://xxx.xxx/book-**[01-10]**.html`,意思為下載book-20.html到book-99.html,以及book-01.html到book-10.html,使用**[1-10]**則不補0。 + - 章節選擇器自訂:輸入章節連結的 css 選擇器即可,後面可以接上 url 替換碼、以及自定義處理代碼。 + - 幹擾碼:填入幹擾碼的 css 選擇器,如`.mask,.ksam`,意為刪除 class 為 mask 或者 ksam 的元素。 - 按標題名重新排序:是則把目錄頁所有連結按標題名排序後存入txt,否則按頁面位置順序排列。 - - 下載線程數:同時下載的線程數,默認為20,遇到存在限制的站點(例如下載時總有章節獲取失敗)可調低。 + - 下載線程數:同時下載的執行緒數量,默認為20,遇到存在限製的站點(例如下載時總有章節獲取失敗)可調低。 ### 完整格式說明 -某個章節名/CSS選擇器【選擇器後可跟>>傳入item添加處理代碼】 **@@** 抓取到URL的正則匹配 **@@** 對應匹配生成替換URL **@@** 根據爬取返回內容data處理並返回最終文本 +某個章節名 / CSS 選擇器【選擇器後可跟 >> 傳入 item 處理】 **@@** 抓取到 URL 的正規表示式匹配 **@@** 正規表示式替換 URL **@@** 根據爬取返回內容 data 進行處理並回傳最終文本 +#### 内頁處理範例 +假設章節元素為 `a.links` ++ 使用 iframe 處理内頁内容 + `a.links@@@@@@iframe:` + - iframe 添加 sandbox + `a.links@@@@@@iframe:sandbox:{allow-same-origin}` + - iframe 添加初始化程式碼 + `a.links@@@@@@iframe:init:{win.top=win.self}` ++ 自訂内頁中分頁抓取方式 + - 透過選擇器抓取 + `a.links@@@@@@next:{a.next}` + - 透過程式碼生成 + `a.links@@@@@@next:{return await getNextElement()}` 可以用多層 `{}` 來避免程式碼中出現大括號產生的問題 -### 簡易自定義例子,打開目錄頁點擊【自定義下載】粘貼即可使用 - 1. [📕po18](https://www.po18.tw/books/755779/articles),章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 + +### 自訂下載範例,打開目錄頁點擊【自訂下載】粘貼後使用,僅爲規則實例引導,有出入請自行修改 ++ [📕po18](https://www.po18.tw/books/755779/articles) +> 章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 `.l_chaptname>a@@articles@@articlescontent` 粘貼進命令菜單即可下載。其中第一個 articles 可使用正規表示式,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 ``` css -.l_chaptname>a @@ articles @@ articlescontent +.l_chaptname>a@@articles@@articlescontent ``` - 如果需要下載已購買的vip章節,用這個規則 + > 如果需要下載已購買的vip章節,用這個規則 ``` javascript a.btn_L_blue>>let a=document.createElement("a");a.innerText=item.parentNode.parentNode.querySelector('.l_chaptname').innerText;a.href=item.href;return a;@@articles@@articlescontent ``` - 2. [📕pixiv](https://www.pixiv.net/novel/series/7807554),p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta里,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 ++ [📕pixiv](https://www.pixiv.net/novel/series/7807554) +> p站小說的章節選擇器為`main>section ul>li div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta裡,需要自定義代碼提取meta-preload數據的content項。其中 "doc" 代表抓取網頁的document對象,若返回的是純文本,則用 `doc.body.innerText` 獲取。 + ``` javascript +main>section ul>li div>a@@@@@@var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content; + ``` + 新規則 ``` javascript -main>section ul>li>div>a @@@@@@ var noval=JSON.parse(doc.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content; +main>section ul>li div>a@@novel/show\.php\?id=@@ajax/novel/@@data.json().body.content; ``` - 3. [📕紅薯中文網](https://g.hongshu.com/chapterlist/91735.do),這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載 ++ [📕紅薯中文網](https://g.hongshu.com/chapterlist/91735.do) +> 這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載 ``` javascript ul#lists>li>>let href=item.getAttribute("onclick").replace(/.*(http.*html).*/,"$1"),innerText=item.querySelector("span").innerText;return {href:href,innerText:innerText};@@@@@@let rdtext=data.querySelector('div.rdtext');let sc=data.querySelector('div.ewm+script');if(sc&&rdtext){let code=sc.innerText.replace(/for\(var i=0x0;i{let id=span.className.replace(/[^\d]/ig,"");span.innerText=words[id]}),rdtext.innerText}; ``` - 4. [📕yuyan](https://yuyan.pw/) ++ [📕yuyan](https://yuyan.pw/) ``` css https://yuyan.pw/novel/xxx/[xxxxxxx-xxxxxxx].html@@@@@@var c=data.querySelector('body>script:nth-of-type(8)').innerHTML.match(/var chapter =(.*?);\\n/)[1];eval(c).replaceAll("
    ",""); ``` - 5. [📕翠微居](https://www.cuiwei.org/book/28975/yijiequanyuledashi_mulu.html) ++ [📕翠微居](https://www.cuiwei.org/book/28975/yijiequanyuledashi_mulu.html) ``` javascript .chapter-table>a@@@@@@fetch(data.querySelector("div.box-border>script").innerHTML.match(/\/chapter\/(.*?)"/)[0]) .then(response => response.text()) .then(d => {eval("window.txtObj="+d.match(/_txt_call\((.*)\);/)[1]);for(k in txtObj.replace){txtObj.content=txtObj.content.replaceAll(txtObj.replace[k],k)}cb(unescape(txtObj.content.replace(/&#x(.*?);/g,'%u$1')));});return false; ``` - 6. [📕知乎鹽選](https://www.zhihu.com/xen/market/remix/paid_column/1465280726219968513) ++ [📕某乎](https://www.某乎.com/xen/market/remix/paid_column/1465280726219968513) +> 此頁章節沒有連結,使用以下規則可獲取章節連結,僅可下載免費可見内容,付費内容請自充會員。具體操作請自行摸索,後果自負。 ``` javascript - [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://www.zhihu.com/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; + [class^=ChapterItem-root]>>let a=document.createElement("a");let pre=`https://${location.host}/market/paid_column/${location.href.replace(/\D*(\d+)$/,"$1")}/section/`;a.href=pre+JSON.parse(item.dataset.zaExtraModule).card.content.id;a.innerText=item.querySelector("div").innerText;return a; ``` - 7. [📕腐女屋](http://m.funvwu.com/) ++ [📕腐女屋](http://m.funvwu.com/) ``` javascript .chapterList>ul>li>a>>let href=item.href.replace(/.*goChapter\((\d+)\)/,"/noval/"+localStorage.booklist+"/$1.html");item.href=href;return item; ``` - 8. [📕若初文學網](https://www.ruochu.com/chapter/146456) ++ [📕若初文學網](https://www.ruochu.com/chapter/146456) ``` javascript ul.float-list>li>a@@www\\.ruochu\\.com/book/\d+/(\d+)@@a.ruochu.com/ajax/chapter/content/$1@@var content = data.body.innerText.match(/"htmlContent":"(.*)","status"/);if(!content)console.log(data.body.innerText);else{content=content[1];content.replace(/\\r/g,'\n')} ``` - 9. [📕明月中文網](https://www.56bok.com/list/27/27742.html) ++ [📕明月中文網](https://www.56bok.com/list/27/27742.html) ``` javascript ul.readlist>li>a>>let href=item.getAttribute("onclick").replace(/.\*open\\('(.\*)','.\*/,"$1");item.href=href;return item; ``` - 10. [📕東北人小説網](https://www.dbrxs.org/86/86323/) 此站有內分頁,故需要使用異步方法,抓取內容後暫不返回,待請求所有分頁內容再拼接後一起返回。 ++ [📕東北人小説網](https://www.dbrxs.org/86/86323/) +> 此站有內分頁,故需要使用異步方法,抓取內容後暫不返回,待請求所有分頁內容再拼接後一起返回。 ``` javascript .chapterList li>a>>item.href=item.href.replace(/.*gotochapter\('(\d+)','(\d+)','(\d+)'\).*/,"/$1/$2/$3.html");return item;@@@@@@let content=data.querySelector('#contentinfo,#ChapterView>div:nth-child(3)>div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
    /g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*\((\d+),(\d+),(\d+),(\d+)\).*/,"/$1/$2/$3_$4.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('#contentinfo,#ChapterView>div:nth-child(3)>div');if(c){c.innerHTML=c.innerHTML.replace(/
    /g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` - 11. [📕暢讀小説網](https://www.cdxsw.cc/53/53458/) 此站同樣有內分頁,不同之處在於它的內分頁需要加載後才能知道是否存在,故同樣異步返回,並且回調fetch直至分頁全部分析完 ++ [📕暢讀小説網](https://www.cdxsw.cc/53/53458/) +> 此站同樣有內分頁,不同之處在於它的內分頁需要加載後才能知道是否存在,故同樣異步返回,並且回調fetch直至分頁全部分析完 ``` javascript .section-list>li>a@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('.word_read');if(!word)content+='\n'+doc.body.innerText;else [].forEach.call(word.querySelectorAll('p,h3'),c=>content+='\n'+c.innerText);let next=doc.querySelector(".read_btn>a:nth-child(4)");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` - 12. [📕lofter](https://kuencar.lofter.com/view) 此站包含雜項博文,故需要手動抓取篩選並且排序後下載 ++ [📕lofter](https://kuencar.lofter.com/view) +> 此站包含雜項博文,故需要手動抓取篩選並且排序後下載 ``` javascript -body>>let title="俞亮/时光",chs=[];item.querySelectorAll("ul.list>li>a").forEach(a=>{if(a.children[0].innerText.indexOf(title)!=-1)chs.push(a)});return chs.reverse(); +body>>let title="俞亮/時光",chs=[];item.querySelectorAll("ul.list>li>a").forEach(a=>{if(a.children[0].innerText.indexOf(title)!=-1)chs.push(a)});return chs.reverse(); ``` - 13. [📕頂點小説網](https://m.biqugeu.net/booklist/20128662.html) 此站同11項 ++ [📕頂點小説網](https://m.biqugeu.net/booklist/20128662.html) +> 此站同11項 ``` javascript .book_last>dl>dd>a:not([style])@@@@@@let content="";let checkContent=(doc,over)=>{word=doc.querySelector('#chaptercontent');if(!word)content+='\n'+doc.body.innerText;else {word.innerHTML=word.innerHTML.replace(/
    /g,'\n');content+='\n'+word.innerText;}let next=doc.querySelector("#pb_next");if(next&&/_\d\.html/.test(next.href)){fetch(next.href).then(r => r.arrayBuffer()).then(d => {let decoder = new TextDecoder("gbk");let text = decoder.decode(d);let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = text;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content)});return false; ``` - 14. [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。 ++ [📕宅男小説網](http://www.zhainanxs.com/mytool/getChapterList/) +> 此站目錄鏈接被隱藏了,因此需要手動構造,同10項。但是因為此站文字被占位圖片替換了,因此需要有人整理對照表,否則缺字。如若在設置中開啓`保留內文圖片的網址`,配合 zip 擴展使用,可以將圖片全部保存在 zip 中,此時使用 OCR 識別程式(例如[ImgCodeCheck](https://github.com/hoothin/ImgCodeCheck/)),即可獲取對應文字,批量替換即可。 ``` javascript -#list-chapterAll>dd>a>>item.href=item.href.replace(/.*book('(\d+)','(\d+)').*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
    /g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){c.innerHTML=c.innerHTML.replace(/
    /g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; +#list-chapterAll>dd>a>>item.href=item.href.replace(/.*book\('(\d+)','(\d+)'\).*/,"/go/$1/$2.html");return item;@@@@@@let content=data.querySelector('h1~div');if(!content)return data.body.innerText;content.innerHTML=content.innerHTML.replace(/
    /g,"\n");content=content.innerText;let pages=data.querySelectorAll(".chapterPages>a:not(.curr)");if(pages){let num=pages.length,cur=0;content=[content];[].forEach.call(pages, (page,i)=>{let url=page.href.replace(/.*'(\d+)','([\d_]+)'.*/,"/go/$1/$2.html");fetch(url).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('h1~div');if(c){[].forEach.call(c.querySelectorAll("img[src]"), img => { let imgTxt=`![img](${location.origin+img.getAttribute("src")})`; let imgTxtNode=document.createTextNode(imgTxt); img.parentNode.replaceChild(imgTxtNode, img); });c.innerHTML=c.innerHTML.replace(/
    /g,"\n"); content[i+1]=c.innerText;if(++cur>=num)cb(content.join("\n"));} }); });return false;}return content; ``` - 15. [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) 也是有分頁,fetch後簡單處理一下就ok。 ++ [📕免費小説網](http://www.huazhuangsheying.com/book/3659/) +> 也是有分頁,fetch後簡單處理一下就ok。 ``` javascript .section-box+h2+.section-box>.section-list>.book-item>a@@@@@@let content=data.querySelector('#content');if(!content)return data.body.innerText;if(content.children[0].tagName=='DIV')content.removeChild(content.children[0]);content.innerHTML=content.innerHTML.replace(/
    /g,"\n");content=content.innerText;let nextpage=data.querySelector(a[href$="_2.html"]);if(nextpage){fetch(nextpage.href).then(r => r.text()).then(d => {let doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = d;let c=doc.querySelector('#content');if(c){if(c.children[0].tagName=='DIV')c.removeChild(c.children[0]);c.innerHTML=c.innerHTML.replace(/
    /g,"\n"); content+=c.innerText;}cb(content);});return false;}return content; ``` - 16. [📕海棠文化](https://haitbook.com/?act=showinfo&bookwritercode=EB20160922203907769482&bookid=67166&pavilionid=a) token在頁面中,直接match拿到然後請求了事。 ++ [📕海棠文化](https://haitbook.com/?act=showinfo&bookwritercode=EB20160922203907769482&bookid=67166&pavilionid=a) +> token在頁面中,直接match拿到然後請求了事。 ``` javascript .uk-list>li>a@@@@@@let contentMatch=data.body.innerHTML.match(/url: '\/showpapercolor.php',[\s\S]*?paperid:\s*'(\w+)',\s*vercodechk:\s*'(\w+)'/);if(!contentMatch)return "";$.ajax({url: '/showpapercolor.php',type: 'POST',data: { paperid: `${contentMatch[1]}`, vercodechk: `${contentMatch[2]}`},error: function (xhr) {cb("");},success: function (colorresponse) {cb(colorresponse.replace(//,"").replace(/
    /g,""))}});return false; ``` - ++ [📕樂文網](https://www.mylewen.com/book/183921/catalog/) +> 分兩段,前半明文,後半加密,調用頁面自身方法解密后拼接。 + ``` javascript +.BCsectionTwo-top-chapter>a@@@@@@let content=doc.querySelector("#C0NTENT");let r="\n",ps=content.querySelectorAll("p");for(let i=0;i{function d(a, b) { b = CryptoJS.MD5(b).toString(); var d = CryptoJS.enc.Utf8.parse(b.substring(0, 16)); var e = CryptoJS.enc.Utf8.parse(b.substring(16)); return CryptoJS.AES.decrypt(a, e, { iv: d, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) };cb(r+d(a,b).replace(/

    /g,"").replace(/<\/p>/g,"\n"));};document.head.appendChild(cryptojs);return false; + ``` ++ [📕某瓣](https://read.某瓣.com/column/64079189/) + ``` css + a.chapter-item + ``` +> 礙於法律問題,不會給出具體規則。只因爲有朋友詢問,所以手癢分析了一下,給出相關思路以供技術研究,請勿來問我要現成規則。後期如若有變動不再跟進。具體操作請自行摸索,後果自負。 +> 首先,某瓣的内頁只有部分内容是明文,全文被加密了。每次訪問内頁,它會先檢索本地存儲中是否存在密文,如果不存在的話就去抓取密文,密文為 digest 的 sha256 加密得到。 +> 因此步驟如下,首先調用 article_v2/get_reader_data, 透過表單形式提供當前章節的 aid(即爲 chapter 后的數字串),獲取 json.data 即爲密文,然後透過上方的解密方法獲取正文。正文位於 posts[0].contents 中,遍歷后讀取 data.text[0].content 拼接。 +> 解密方法如下: +``` javascript +function decode(t) { + const s = (new TextDecoder).decode(new Uint8Array([65, 69, 83, 45, 67, 66, 67])) + , r = (new TextDecoder).decode(new Uint8Array([99, 114, 121, 112, 116, 111])) + , o = (new TextDecoder).decode(new Uint8Array([115, 117, 98, 116, 108, 101])) + , a = (new TextDecoder).decode(new Uint8Array([100, 105, 103, 101, 115, 116])) + , h = (new TextDecoder).decode(new Uint8Array([83, 72, 65, 45, 50, 53, 54])) + , l = (new TextDecoder).decode(new Uint8Array([105, 109, 112, 111, 114, 116, 75, 101, 121])) + , c = (new TextDecoder).decode(new Uint8Array([100, 101, 99, 114, 121, 112, 116])) + , u = (new TextDecoder).decode(new Uint8Array([105, 118])); + const e = Uint8Array.from(window.atob(t), (t=>t.charCodeAt(0))) + , i = e.buffer + , d = e.length - 16 - 13 + , p = new Uint8Array(i,d,16) + , f = new Uint8Array(i,0,d) + , g = {}; + return g.name = s, + g[u] = p, + function() { + const t = Ark.user + , e = t.isAnonymous ? document.cookie.replace(/.*bid=(\w+).*/,"$1") : t.id + , i = (new TextEncoder).encode(e); + return window[r][o][a](h, i).then((t=>window[r][o][l]("raw", t, s, !0, [c]))) + }().then((t=>window[r][o][c](g, t, f))).then((t=>JSON.parse((new TextDecoder).decode(t)))) +} +``` + ++ [📕愛發電](https://愛發電/album/afee5ce2462d11ee897e52540025c377) +> 我也是愛發電用戶,拿人手短,就不欺負它了。只給個思路,用第四層心法取 album_id 與 章節 id 去 /api/post 請求數據即可。 ++ [📕頭文字小説](https://m.touwz.net/dushi/yinhezhuiluo/) +> 簡單的分頁,沒啥難點。惟一需要注意的是,分頁連結藏在 js 代碼裏,用正規表示式取出完事。 +``` javascript +.chapter>li>a@@@@@@let content="\n";let checkContent=(doc,over)=>{word=doc.querySelector('.content-div');if(!word)content+='\n'+doc.body.innerText;else {let ps=[];[].forEach.call(word.children, p=>{if(p.className!='moreinfo')ps.push(p.innerText)});content+=ps.join('\n');}let next=doc.querySelector("#pt_next");if(next){fetch(location.href+ doc.body.innerHTML.match(/'([^\|']+)\|[^']+'\.split/)[1]+".html").then(r => r.text()).then(d => {let _doc = document.implementation.createHTMLDocument('');_doc.documentElement.innerHTML = d;checkContent(_doc,over);});}else over();};checkContent(data,()=>{cb(content.replace(/\s*「如章节缺失请退#出#阅#读#模#式」\s*|\s*本章未完,点下一页继续阅读。>>>\s*/g,''))});return false; +``` ++ [📕H圖書館](https://hlib.cc/s/sis-9732262) +> 簡單的分頁,可以使用簡化規則,傳入内分頁的選擇器,其餘交給脚本自動處理。 +``` javascript +.list-group-item>div>a.text-decoration-none@@@@@@next:{[aria-label='后一页']+a} +``` ++ [📕又一個頂點小説網](https://www.booktxts.com/book/77/77540/2.html) +> 首先遍歷目錄,生成實際鏈接,再分析頁内代碼,調用網站自身的解密函數解密内容,最後分析下一頁鏈接,把分頁内容補上。 +``` javascript +.yanqing_list>li>a>>item.href=item.getAttribute('onclick').replace(/.*\((.*)\)/, location.href.replace(/\d+\.html/,'').replace('/book/','/books/')+'$1.html');return item;@@@@@@let content='';let anylize=doc=>{let contentTags=doc.body.innerHTML.match(/",'')).replace(/<.?p>/g,'')+'\n'}); let nextLink=doc.querySelector('.read_btn>a:last-child'); if(/\_\d+\.html/.test(nextLink.href)){ let fetchNext=()=>{return fetch(nextLink.href).then(res => res.text()).then(d=>{let _doc = document.implementation.createHTMLDocument(''); _doc.documentElement.innerHTML = d;anylize(_doc);})}; fetchNext().catch(e=>{fetchNext()}); }else{cb(content);} };let script=document.createElement('script');script.src='https://www.booktxts.com/yanqing/pc/js/yueduqsbs.js';script.type = "text/javascript";document.body.appendChild(script);script.onload=e=>{anylize(doc);};return false; +``` ### 測試網頁 + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html -+ http://www.jhshe.cn/thread-1837-1-1.html ++ http://www.jhshe.com/thread-1837-1-1.html + http://tieba.baidu.com/p/4871634479 ### FAQ -- 章節沒有「第幾章第幾節」的字樣怎麼辦?
    +- 章節沒有「第幾章第幾節」的字樣怎麼辦?
    參考第二層心法輸入其中一個章節名即可 -- 下載一定章節後失敗怎麼辦?
    -可能是網站限制了並發數,在設置中調低線程數即可 -- 按下快捷鍵無效怎麼辦?
    -可能是快捷鍵被其他應用接管了,使用腳本管理器中的命令菜單下載即可 -- 有無關干擾字符怎麼辦?
    -設置里輸入干擾碼css選擇器即可,多個選擇器用逗號分隔 -- 章節順序不對怎麼辦?
    -默認是按網頁內出現位置排序。點擊設置,嘗試更改為“按網址重新排序”或者“按章節名重新排序”即可 -- 其他問題歡迎通過 email 聯繫我,有空可幫你解決。 +- 下載一定數量章節後抓取超時失敗怎麼辦?
    +可能是網站限制了並發數,在設定中調低執行緒數即可。 設為正數代表執行緒數,負數則代表間隔x秒下載一章,例如`-2`代表每隔2秒下載一章 +- 按下快捷鍵沒有反應怎麼辦?
    +可能是快捷鍵被其他應用程式接管了,使用腳本管理器中的命令選單下載即可 +- 有無關幹擾字元怎麼辦?
    +設定裡輸入乾擾碼css選擇器即可,多個選擇器以逗號分隔 +- 章節順序不對怎麼辦?
    +預設是按網頁內出現位置排序。 點擊設置,嘗試更改為“按網址重新排序”或“按章節名重新排序”即可 +- 章節標題有誤怎麼辦?
    +預設是取章節連結文字為標題,可以在設定中自訂章節標題,輸入 title 即為抓取分頁頁面的標題,輸入 h1 即為抓取分頁頁面 h1 等級的文章標題 +- 下載内容不全怎麽辦?
    +可能因爲頁内正文是動態加載的,可嘗試在設置頁勾選“下載前打開篩選窗口”,然後選中“使用 iframe 後臺加載内容” +- 抓取失敗是因為?
    +NETWORK ERROR 説明網路錯誤,可能是當前本機網路故障,也可能是被目標網站封鎖了 IP。 TIMEOUT 説明訪問超時,可能是因爲當前網路速率過慢或目標網站流量超限 +- 其他問題歡迎透過 email 聯絡我,有空可幫你解決。 ### 為啥要寫這個腳本? 主要是怠惰啊 diff --git a/Easy offline/Easy offline pikpak.user.js b/Easy offline/Easy offline pikpak.user.js new file mode 100644 index 00000000000..8550d395dc0 --- /dev/null +++ b/Easy offline/Easy offline pikpak.user.js @@ -0,0 +1,249 @@ +// ==UserScript== +// @name Easy Offline pikpak addon +// @namespace hoothin +// @version 2024-08-16 +// @description Add pikpak support for Easy Offline +// @author hoothin +// @match *://*/* +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_notification +// @grant unsafeWindow +// @run-at document-start +// @require https://unpkg.com/crypto-js@4.2.0/crypto-js.js +// @connect user.mypikpak.com +// @connect api-drive.mypikpak.com +// ==/UserScript== + +(function() { + 'use strict'; + let info = GM_getValue("pikpakUserInfo"), device_id, user_id; + const CLIENT_ID = "YNxT9w7GMdWvEOKa"; + const CLIENT_SECRET = "dbw2OtmVEeuUvIptb1Coyg"; + const CLIENT_VERSION = "1.47.1"; + const PACKAG_ENAME = "com.pikcloud.pikpak"; + const SDK_VERSION = "2.0.4.204000"; + const APP_NAME = "com.pikcloud.pikpak"; + function captchaInit() { + return new Promise(resolve => { + let meta = {}; + if (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(info.userName)) { + meta.email = info.userName; + } else if (/\d{11,18}/.test(info.userName)) { + meta.phone_number = info.userName; + } else { + meta.username = info.userName; + } + let params = { + "client_id": CLIENT_ID, + "action": "POST:https://user.mypikpak.com/v1/auth/signin", + "device_id": device_id, + "meta": meta + } + GM_xmlhttpRequest({ + method: 'POST', + url: 'https://user.mypikpak.com/v1/shield/captcha/init', + data: JSON.stringify(params), + onload: (res) => { + if(res.status === 200) { + let data = JSON.parse(res.responseText); + resolve(data); + } else { + info.loginInfo = null; + GM_setValue("pikpakUserInfo", info); + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } + }, + onerror: (e) => { + GM_notification("Error: " + (e.statusText || e.error)); + }, + ontimeout: (e) => { + GM_notification("Error: " + (e.statusText || e.error)); + } + }); + }); + } + function buildCustomUserAgent() { + let signature_base = `${device_id}${PACKAG_ENAME}1appkey`; + let sha1_result = CryptoJS.SHA1(signature_base).toString(CryptoJS.enc.Hex); + let md5_result = CryptoJS.MD5(sha1_result).toString(CryptoJS.enc.Hex); + + let device_sign = `div101.${device_id}${md5_result}`; + + let user_agent_parts = [ + `ANDROID-${APP_NAME}/${CLIENT_VERSION}`, + "protocolVersion/200", + "accesstype/", + `clientid/${CLIENT_ID}`, + `clientversion/${CLIENT_VERSION}`, + "action_type/", + "networktype/WIFI", + "sessionid/", + `deviceid/${device_id}`, + "providername/NONE", + `devicesign/${device_sign}`, + "refresh_token/", + `sdkversion/${SDK_VERSION}`, + `datetime/${Date.now()}`, + `usrno/${user_id}`, + `appname/${APP_NAME}`, + "session_origin/", + "grant_type/", + "appid/", + "clientip/", + "devicename/Xiaomi_M2004j7ac", + "osversion/13", + "platformversion/10", + "accessmode/", + "devicemodel/M2004J7AC", + ] + + return user_agent_parts.join(" "); + } + document.addEventListener("click", function(e) { + if (e.target && e.target.getAttribute && e.target.getAttribute("name") === "pikpak" && e.target.parentNode.id === "icons") { + GM_setValue("pikpakUserInfo", ""); + alert("PikPak account has been cleared"); + } + }); + var _unsafeWindow = (typeof unsafeWindow === 'undefined') ? window : unsafeWindow; + if (!_unsafeWindow.eoAddons) _unsafeWindow.eoAddons = {}; + _unsafeWindow.eoAddons.pikpak = { + regex: /mypikpak\.com/, + url: "http://user.mypikpak.com/", + bgColor: "2265ff", + noTxt: true, + linkRegExp: /^magnet:\?xt|^PikPak:\/\/|\.(torrent|mp4|mp3|rar|7z|zip|rmvb|mkv|avi|iso)$/i, + directUrl: function(offUrl) { + if (!info) { + let userName = prompt("userName"); + if (!userName) return; + let userPass = prompt("userPass"); + if (!userPass) return; + info = {userName: userName, userPass: userPass}; + GM_setValue("pikpakUserInfo", info); + } + var postUrl = async () => { + let postData; + if (offUrl.indexOf('PikPak://') === 0) { + const urlData = offUrl.substring(9).split('|') + postData = { + kind: "drive#file", + name: urlData[0], + size: urlData[1], + hash: urlData[2], + upload_type: "UPLOAD_TYPE_RESUMABLE", + objProvider: { + provider: "UPLOAD_TYPE_UNKNOWN" + } + } + } else { + postData = { + kind: "drive#file", + name: "", + upload_type: "UPLOAD_TYPE_URL", + url: { + url: offUrl + }, + params: {"from":"file"}, + folder_type: "DOWNLOAD" + } + } + GM_xmlhttpRequest({ + method: 'POST', + url: 'https://api-drive.mypikpak.com/drive/v1/files', + data: JSON.stringify(postData), + headers: { + "Content-Type": "application/json; charset=utf-8", + authorization: info.loginInfo.token_type + ' ' + info.loginInfo.access_token, + "X-Captcha-Token": info.captchaData.captcha_token + }, + onload: (res) => { + if(res.status === 200) { + GM_notification("Task OK"); + } else if(res.status === 401) { + info.loginInfo=null; + GM_setValue("pikpakUserInfo", info); + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } else if(res.status === 400) { + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } else if(res.status === 403) { + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } + }, + onerror: (e) => { + GM_notification("Error: " + (e.statusText || e.error)); + }, + ontimeout: (e) => { + GM_notification("Error: " + (e.statusText || e.error)); + } + }) + }; + device_id = CryptoJS.MD5(`${info.userName}${info.userPass}`).toString(CryptoJS.enc.Hex); + (async () => { + if (!info.captchaData || info.captchaData.expires < new Date().getTime()) { + let captchaData = await captchaInit(); + info.captchaData = captchaData; + if (!info.captchaData.expires && info.captchaData.expires_in) { + info.captchaData.expires = new Date().getTime() + 1000 * info.captchaData.expires_in; + } + GM_setValue("pikpakUserInfo", info); + } + if (!info.loginInfo || info.loginInfo.expires < new Date().getTime()) { + let data = { + "client_id": CLIENT_ID, + "client_secret": CLIENT_SECRET, + "password": info.userPass, + "username": info.userName, + "captcha_token": info.captchaData.captcha_token, + } + GM_xmlhttpRequest({ + method: 'POST', + url: 'https://user.mypikpak.com/v1/auth/signin', + data: JSON.stringify(data), + headers: { + 'user-agent': 'accessmode/ devicename/Netease_Mumu appname/android-com.pikcloud.pikpak cmd/login appid/ action_type/ clientid/YNxT9w7GMdWvEOKa deviceid/56e000d71f4660700ca974f2305171c5 refresh_token/ grant_type/ networktype/WIFI devicemodel/MuMu accesstype/ sessionid/ osversion/6.0.1 datetime/1636364470779 sdkversion/1.0.1.101600 protocolversion/200 clientversion/ providername/NONE clientip/ session_origin/ devicesign/div101.56e000d71f4660700ca974f2305171c5b94c3d4196a9dd74e49d7710a7af873d platformversion/10 usrno/null' + }, + onload: (res) => { + if (res.status === 200) { + info.loginInfo = JSON.parse(res.responseText); + if (!info.loginInfo.expires && info.loginInfo.expires_in) { + info.loginInfo.expires = new Date().getTime() + 1000 * info.loginInfo.expires_in; + } + GM_setValue("pikpakUserInfo", info); + postUrl(); + } else if (res.status === 401) { + GM_setValue("pikpakUserInfo",""); + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } else if (res.status === 400) { + GM_setValue("pikpakUserInfo",""); + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } else if (res.status === 403) { + GM_setValue("pikpakUserInfo",""); + const msg = JSON.parse(res.responseText).error_description; + alert(msg); + } + }, + onerror: (e) => { + GM_notification("Error: " + (e.statusText || e.error)); + }, + ontimeout: (e) => { + GM_notification("Error: " + (e.statusText || e.error)); + } + }) + } else { + postUrl(); + } + })(); + return false; + }, + bgImg: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAArbP5MdNFMdNIrbP4sbP1QdctQdcwvbv////8dYf8sbP9smP/09/8qaf/V4f8iZf/u8/+lwP+duv+UtP+PsP9hkP92n/9nlP/K2v/F1v+7z/+Ytv9Wif9Aef91nv9e7pgKAAAACHRSTlMA+puT/PWHhQBB7XEAAACQSURBVBjTTY8JCsQwCEWdrjFm37p37n/LMdAJfSTgf4IoAPQf8fDpgek4N9NxnwQZJx0/w+UMNd/XV6nluqsBQbRp79Xqvd7ICBCuaHuElMJhdXEspMKGko/YA2LYXyKuiGt8Ca3rfwm052nbjILV1IyFBZFZck4xppwXQ8Srk2wQzXzcIBpDB8w0/vM4AfwACl4LKjajMX0AAAAASUVORK5CYII=" + }; +})(); \ No newline at end of file diff --git a/Easy offline/Easy offline.user.js b/Easy offline/Easy offline.user.js index b5e0758409e..a95eadbffb3 100644 --- a/Easy offline/Easy offline.user.js +++ b/Easy offline/Easy offline.user.js @@ -7,7 +7,7 @@ // @description:zh-TW 一鍵離綫下載 - 一鍵自動將磁鏈、bt種子或其他下載資源離綫下載至網盤 // @namespace https://github.com/hoothin/UserScripts/tree/master/Easy%20offline // @require http://code.jquery.com/jquery-1.7.2.min.js -// @version 1.9.39.2 +// @version 1.9.41 // @author Hoothin // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAQlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////8IX9KGAAAAFXRSTlMAwT7hFahN0LZWJgqIavB7YJuRdDPJsaCPAAAA6ElEQVQ4y8WRW5aEIAxEDUGgAQUftf+tjgYOjcPMb3d96Im5pkIxfVgmOuY5mX/afkYVqb/6EXDGh+CNA7axvwOvZrUiDfalX6UY5y+AkZ687Ut9WNgw9SLYQ3cDYfNz4kIAq2Z/wYN0AiSRQN16iroMXnD3K2F+f1oBLK2ckeWpmjFEsc2Tfxn6ndUBLGgjNVgAX8oNa56AO8dKeAEccnW89ruB6bQVWGTL2IcmQJOTdXSdOAIRrMtxsekR8AQ5XyHARLTrAhi6xH0iYWfcOguQpeAtPJJXSvlqEdSl4XaGHb4HEE0f1w+Jcw2XCZjSwgAAAABJRU5ErkJggg== // @match *://*/* @@ -386,119 +386,6 @@ }, bgImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAA9lBMVEUAAACgoqOipKUAAAC4ubq1traXl5jX19g9PT4GBga2t7ixsrOur7Cmp6jMzM1+f39ZWVpnZ2eChIXMzc3BwcKvsrLGxsacnZ3f399zdHS9vr61trZZW1upq6vIysq7vb2nqKliZGTS09O6vLzg4OC2uLhQUVHi4uK+v79OTk4hISHT1NQZGRnf4OCPkpKsra3KysxmZ2d+f3/y8vOUlZW+vr+2tridnp/Z2dmAgYJ4enptbm5YWVn39/fv7/DDw8Td3d7U1dXU1NTOztC4ubuoqamlpaWcnJyYmJp6fHxwcXFTVVX29/bHyMnHx8e3t7qgoaGHiYm1AxJpAAAAL3RSTlMAHhgF4NbW2jQU4uDg3sybVDUkHhcF6Ojk5ODc2dfJycPDra17ezkuLiUlIRUREf6sWL0AAAC0SURBVBjTjY9HEoJAAAQXVwVzAMw5Z5YMgoBizv7/M7JwoLw5t+lD1wzAYVcEPaeXLAgyHvTazTpJtvrDCe5M1nUReiiK/ERZxgNEVLYdy1GFz1uuET54IfGucTq/5qIYRGIKEjcaJ3ggFsEgrp/tnSwZJi/EMSDSqqQeJeNmXk+pwLFHlrg9CPzl16H/7ygmQ0eyCACkMuGODAUBTORzHbJSKlcb3Vw+AfE9uJgWCiNq5rcvfNwgjdumYdQAAAAASUVORK5CYII=" }, - PikPak:{ - regex:/mypikpak\.com/, - url:"http://user.mypikpak.com/", - bgColor:"2265ff", - noTxt:true, - linkRegExp: /^magnet:\?xt|^PikPak:\/\/|\.(torrent|mp4|mp3|rar|7z|zip|rmvb|mkv|avi|iso)$/i, - directUrl:function(offUrl){ - //此段代码引用自 mumuchenchen 大佬的 PikPak 保存助手 https://greasyfork.org/scripts/435219 - //mumuchenchen 的第三方 Pikpak 网页客户端 推荐大家前往 fork https://github.com/mumuchenchen/pikpak - storage.getItem("pikpakUserInfo",info=>{ - if(!info){ - let userName=prompt(i18n("userName")); - if(!userName)return; - let userPass=prompt(i18n("userPass")); - if(!userPass)return; - info={userName:userName,userPass:userPass}; - storage.setItem("pikpakUserInfo",info); - } - var postUrl=()=>{ - let postData; - if(offUrl.indexOf('PikPak://') === 0) { - const urlData = offUrl.substring(9).split('|') - postData = { - kind: "drive#file", - name: urlData[0], - size: urlData[1], - hash: urlData[2], - upload_type: "UPLOAD_TYPE_RESUMABLE", - objProvider: { - provider: "UPLOAD_TYPE_UNKNOWN" - } - } - } else { - postData = { - kind: "drive#file", - name: "", - upload_type: "UPLOAD_TYPE_URL", - url: { - url: offUrl - }, - params: {"from":"file"}, - folder_type: "DOWNLOAD" - } - } - _GM_xmlhttpRequest({ - method: 'POST', - url: 'https://api-drive.mypikpak.com/drive/v1/files', - data: JSON.stringify(postData), - headers: { - authorization: info.loginInfo.token_type + ' ' + info.loginInfo.access_token - }, - onload: (res) => { - if(res.status === 200) { - _GM_notification("Task OK"); - } else if(res.status === 401) { - info.loginInfo=null; - storage.setItem("pikpakUserInfo",info); - const msg = JSON.parse(res.responseText).error_description; - alert(msg); - } else if(res.status === 400) { - const msg = JSON.parse(res.responseText).error_description; - alert(msg); - } else if(res.status === 403) { - const msg = JSON.parse(res.responseText).error_description; - alert(msg); - } - } - }) - }; - if(!info.loginInfo || info.loginInfo.expires < new Date().getTime()){ - _GM_xmlhttpRequest({ - method: 'POST', - url: 'https://user.mypikpak.com/v1/auth/signin', - data: JSON.stringify({ - "client_id": "YNxT9w7GMdWvEOKa", - "client_secret": "dbw2OtmVEeuUvIptb1Coyg", - "password": info.userPass, - "username": info.userName - }), - headers: { - 'user-agent': 'accessmode/ devicename/Netease_Mumu appname/android-com.pikcloud.pikpak cmd/login appid/ action_type/ clientid/YNxT9w7GMdWvEOKa deviceid/56e000d71f4660700ca974f2305171c5 refresh_token/ grant_type/ networktype/WIFI devicemodel/MuMu accesstype/ sessionid/ osversion/6.0.1 datetime/1636364470779 sdkversion/1.0.1.101600 protocolversion/200 clientversion/ providername/NONE clientip/ session_origin/ devicesign/div101.56e000d71f4660700ca974f2305171c5b94c3d4196a9dd74e49d7710a7af873d platformversion/10 usrno/null' - }, - onload: (res) => { - if(res.status === 200) { - info.loginInfo=JSON.parse(res.responseText); - if(!info.loginInfo.expires && info.loginInfo.expires_in){ - info.loginInfo.expires = new Date().getTime() + 1000 * info.loginInfo.expires_in; - } - storage.setItem("pikpakUserInfo",info); - postUrl(); - } else if(res.status === 401) { - storage.setItem("pikpakUserInfo",""); - const msg = JSON.parse(res.responseText).error_description; - alert(msg); - } else if(res.status === 400) { - storage.setItem("pikpakUserInfo",""); - const msg = JSON.parse(res.responseText).error_description; - alert(msg); - } else if(res.status === 403) { - storage.setItem("pikpakUserInfo",""); - const msg = JSON.parse(res.responseText).error_description; - alert(msg); - } - } - }) - }else{ - postUrl(); - } - }); - return false; - }, - bgImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAArbP5MdNFMdNIrbP4sbP1QdctQdcwvbv////8dYf8sbP9smP/09/8qaf/V4f8iZf/u8/+lwP+duv+UtP+PsP9hkP92n/9nlP/K2v/F1v+7z/+Ytv9Wif9Aef91nv9e7pgKAAAACHRSTlMA+puT/PWHhQBB7XEAAACQSURBVBjTTY8JCsQwCEWdrjFm37p37n/LMdAJfSTgf4IoAPQf8fDpgek4N9NxnwQZJx0/w+UMNd/XV6nluqsBQbRp79Xqvd7ICBCuaHuElMJhdXEspMKGko/YA2LYXyKuiGt8Ca3rfwm052nbjILV1IyFBZFZck4xppwXQ8Srk2wQzXzcIBpDB8w0/vM4AfwACl4LKjajMX0AAAAASUVORK5CYII=" - }, putio:{ regex:/app\.put\.io/, url:"https://app.put.io/files", @@ -541,190 +428,190 @@ var disableUrl=[".torrentkitty.","bt.box.n0808.com"]; var manageLinksLang={}; var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage; + var config={}; + switch (lang){ + case "zh-CN": + case "zh-SG": + config={ + configure:"全载设置", + yyw:"115网盘", + baidu:"百度网盘", + furk:"Furk网盘", + seedr:"Seedr网盘", + pcloud:"Pcloud网盘", + xunlei:"迅雷离线", + xunleipan:"迅雷网盘", + xiaomi:"小米路由器", + weiyun:"腾讯微云", + bitqiu:"比特球", + apiv:"九秒云播", + torrent:"Itorrents种子下载", + btcache:"Btcache.me种子下载", + enable:"启用", + disable:"禁用", + addIcon:"添加站点", + settingTitle:"全载", + urlRegexpTips:"自定义需要启用一键下载的链接正则,一行一条", + disableOnSite:"已于此站点禁用,点击启用", + bdPathTips:"不需要加'我的网盘/全部文件'", + bdPathTitle:"度盘存储路径:", + settingMouseOver:"仅当鼠标经过时显示图标", + settingBtn:"设置", + allDisableError:"不能全部禁用!", + siteRuleSetOK:"设置成功,刷新生效", + setOK:"设置成功", + regExpError:"含有无效正则,请重新输入", + addSiteRuleTitle:"自定义新增图标规则,一行一条", + siteRulePlaceholder:"站点 @@ 站名 @@ 下载链接正则 @@ 图标base64 @@ 图标背景颜色 @@ 是否隐藏图标\n\n@@ 分隔,目标站点中用 $url 代替目标链接,$hash 代表目标磁链的 hash 值,${reg}用正则提取,$text代表链接文本,$title代表链接title\n\n可用//注释规则\n\n例如:http://192.168.2.1/d2r?u=$url@@路由器下载\nhttp://xxx.com/magnet/$hash@@磁链下载@@^magnet@@data:image/png;base64,AAA@@ffffff", + inputLink:"输入需要离线下载的链接:", + importOrNot:"是否导入规则?", + importCustomAlert:"点击确定追加规则,点击取消覆盖规则", + importOver:"规则导入完毕!", + postOver:"发送成功,返回消息:", + copyOver:"复制成功!", + postError:"发送失败,错误内容:", + importCustomSame:"存在同名规则,是否覆盖?", + copyLinks:"嗅探下载资源", + noLinks:"当前页面没有资源!", + userName:"请输入用户账号", + userPass:"请输入用户密码", + seekKey:"嗅探快捷键:" + }; + manageLinksLang={ + copyAll:"全部复制", + copySel:"复制选中", + addTips:"%i代表递增 %n代表文件名", + sortByName:"按文件名排序", + sortByUrl:"按网址排序", + sortByType:"按扩展名排序", + preHolder:"批量前缀", + nextHolder:"批量后缀", + closeBtn:"关闭", + typeHead:"类型:" + }; + break; + case "zh-TW": + case "zh-HK": + case "zh-MO": + config={ + configure:"全載設置", + yyw:"115網盤", + baidu:"百度網盤", + furk:"Furk網盤", + seedr:"Seedr網盤", + pcloud:"Pcloud網盤", + xunlei:"迅雷離線", + xunleipan:"迅雷網盤", + xiaomi:"小米路由器", + weiyun:"騰訊微雲", + bitqiu:"比特球", + apiv:"九秒雲播", + torrent:"Itorrents種子下載", + btcache:"Btcache.me種子下載", + enable:"啟用", + disable:"禁用", + addIcon:"添加站點", + settingTitle:"全載", + urlRegexpTips:"自定義需要啟用一鍵下載的連結正則,一行一條", + disableOnSite:"已於此站點禁用,點擊啟用", + bdPathTips:"不需要加'我的網盤/全部文件'", + bdPathTitle:"度盤存儲路徑:", + settingMouseOver:"僅當滑鼠經過時顯示圖標", + settingBtn:"設置", + allDisableError:"不能全部禁用!", + siteRuleSetOK:"設置成功,刷新生效", + setOK:"設置成功", + regExpError:"含有無效正則,請重新輸入", + addSiteRuleTitle:"自定義新增圖標規則,一行一條", + siteRulePlaceholder:"站點 @@ 站名 @@ 下載鏈接正則 @@ 圖標base64 @@ 圖標背景顏色 @@ 是否隱藏圖標\n\n@@ 分隔,目標站點中用 $url 代替目標連結,$hash 代表目標磁鏈的 hash 值,${reg}用正则提取,$text代表連結文本,$title代表連結title\n\n可用//注釋規則\n\n例如:http://192.168.2.1/d2r?u=$url@@路由器下載\nhttp://xxx.com/magnet/$hash@@磁鏈下載@@^magnet@@data:image/png;base64,AAA@@ffffff", + inputLink:"輸入需要離線下載的連結:", + importOrNot:"是否導入規則?", + importCustomAlert:"點擊確定追加規則,點擊取消覆蓋規則", + importOver:"規則導入完畢!", + postOver:"發送成功,返回消息:", + copyOver:"複製成功!", + postError:"發送失敗,錯誤内容:", + importCustomSame:"存在同名規則,是否覆蓋?", + copyLinks:"嗅探下載資源", + noLinks:"當前頁面沒有資源!", + userName:"請輸入用戶賬號", + userPass:"請輸入用戶密碼", + seekKey:"嗅探快捷鍵:" + }; + manageLinksLang={ + copyAll:"全部複製", + copySel:"複製選中", + addTips:"%i代表遞增 %n代表文件名", + sortByName:"按文件名排序", + sortByUrl:"按網址排序", + sortByType:"按擴展名排序", + preHolder:"批量前綴", + nextHolder:"批量後綴", + closeBtn:"關閉", + typeHead:"類型:" + }; + break; + default: + config={ + configure:"Easy-Offline Configure", + yyw:"115", + baidu:"BaiduPan", + furk:"Furk", + seedr:"Seedr", + pcloud:"Pcloud", + xunlei:"Xunlei", + xunleipan:"XunleiPan", + xiaomi:"MiWifi", + weiyun:"Weiyun", + bitqiu:"bitqiu", + apiv:"Apiv Online play", + torrent:"Torrent download in itorrent.org", + btcache:"Torrent download in btcache.me", + enable:"Enable ", + disable:"Disable ", + addIcon:"Add new site", + settingTitle: "Easy Offline", + urlRegexpTips: "Customize the Link Regexp, one per line", + disableOnSite: "Disabled currently, click to enable", + bdPathTips: "No need to add'/all files'", + bdPathTitle: "Path of BDpan:", + settingMouseOver: "Display the icon only when the mouse passes over", + settingBtn: "Save", + allDisableError: "Cannot disable all!", + siteRuleSetOK: "Set successfully, refresh takes effect", + setOK: "Set successfully", + regExpError: "Contains invalid regularity, please re-enter", + addSiteRuleTitle: "Customize new icon rules, one per line", + siteRulePlaceholder: "site @@ sitename @@ link regexp @@ icon base64 @@ icon background color @@ hide icon\n\nUse @@ to separated, use $url for the target Link, $hash for the hash of the target magnet link, ${reg} for regexp result on link, $text for link text, $title for link title\n\nUse // to comment rule\n\nFor example: http://192.168.2.1/d2r?u=$url@@MyRouter\nhttp://xxx.com/magnet/$hash@@MyMagnetLinkDownload@@^magnet@@data:image/png;base64,AAA@@ffffff", + inputLink: "Enter the link that needs to be downloaded with this:", + importOrNot:"Do you want to import rules?", + importCustomAlert:"Ok to add rule,Cancel to cover rule", + importOver:"Rules import over!", + postOver:"Post over, return: ", + copyOver:"Copy over!", + postError:"Fail in post, error: ", + importCustomSame:"Rule exists, overwritten?", + copyLinks:"Seek downloadable links", + noLinks:"No links!", + userName:"Input user name", + userPass:"Input user pass", + seekKey:"Seek key: " + }; + manageLinksLang={ + copyAll: "Copy all", + copySel: "Copy selected", + addTips: "%i means increment, %n means file name", + sortByName: "Sort by name", + sortByUrl: "Sort by URL", + sortByType: "Sort by type", + preHolder: "Batch Prefix", + nextHolder: "Batch Suffix", + closeBtn: "Close", + typeHead: "Type:" + }; + break; + } var i18n=(name)=>{ - var config={}; - switch (lang){ - case "zh-CN": - case "zh-SG": - config={ - configure:"全载设置", - yyw:"115网盘", - baidu:"百度网盘", - furk:"Furk网盘", - seedr:"Seedr网盘", - pcloud:"Pcloud网盘", - xunlei:"迅雷离线", - xunleipan:"迅雷网盘", - xiaomi:"小米路由器", - weiyun:"腾讯微云", - bitqiu:"比特球", - apiv:"九秒云播", - torrent:"Itorrents种子下载", - btcache:"Btcache.me种子下载", - enable:"启用", - disable:"禁用", - addIcon:"添加站点", - settingTitle:"全载", - urlRegexpTips:"自定义需要启用一键下载的链接正则,一行一条", - disableOnSite:"已于此站点禁用,点击启用", - bdPathTips:"不需要加'我的网盘/全部文件'", - bdPathTitle:"度盘存储路径:", - settingMouseOver:"仅当鼠标经过时显示图标", - settingBtn:"设置", - allDisableError:"不能全部禁用!", - siteRuleSetOK:"设置成功,刷新生效", - setOK:"设置成功", - regExpError:"含有无效正则,请重新输入", - addSiteRuleTitle:"自定义新增图标规则,一行一条", - siteRulePlaceholder:"站点 @@ 站名 @@ 下载链接正则 @@ 图标base64 @@ 图标背景颜色 @@ 是否隐藏图标\n\n@@ 分隔,目标站点中用 $url 代替目标链接,$hash 代表目标磁链的 hash 值,${reg}用正则提取,$text代表链接文本,$title代表链接title\n\n可用//注释规则\n\n例如:http://192.168.2.1/d2r?u=$url@@路由器下载\nhttp://xxx.com/magnet/$hash@@磁链下载@@^magnet@@data:image/png;base64,AAA@@ffffff", - inputLink:"输入需要离线下载的链接:", - importOrNot:"是否导入规则?", - importCustomAlert:"点击确定追加规则,点击取消覆盖规则", - importOver:"规则导入完毕!", - postOver:"发送成功,返回消息:", - copyOver:"复制成功!", - postError:"发送失败,错误内容:", - importCustomSame:"存在同名规则,是否覆盖?", - copyLinks:"嗅探下载资源", - noLinks:"当前页面没有资源!", - userName:"请输入用户账号", - userPass:"请输入用户密码", - seekKey:"嗅探快捷键:" - }; - manageLinksLang={ - copyAll:"全部复制", - copySel:"复制选中", - addTips:"%i代表递增 %n代表文件名", - sortByName:"按文件名排序", - sortByUrl:"按网址排序", - sortByType:"按扩展名排序", - preHolder:"批量前缀", - nextHolder:"批量后缀", - closeBtn:"关闭", - typeHead:"类型:" - }; - break; - case "zh-TW": - case "zh-HK": - case "zh-MO": - config={ - configure:"全載設置", - yyw:"115網盤", - baidu:"百度網盤", - furk:"Furk網盤", - seedr:"Seedr網盤", - pcloud:"Pcloud網盤", - xunlei:"迅雷離線", - xunleipan:"迅雷網盤", - xiaomi:"小米路由器", - weiyun:"騰訊微雲", - bitqiu:"比特球", - apiv:"九秒雲播", - torrent:"Itorrents種子下載", - btcache:"Btcache.me種子下載", - enable:"啟用", - disable:"禁用", - addIcon:"添加站點", - settingTitle:"全載", - urlRegexpTips:"自定義需要啟用一鍵下載的連結正則,一行一條", - disableOnSite:"已於此站點禁用,點擊啟用", - bdPathTips:"不需要加'我的網盤/全部文件'", - bdPathTitle:"度盤存儲路徑:", - settingMouseOver:"僅當滑鼠經過時顯示圖標", - settingBtn:"設置", - allDisableError:"不能全部禁用!", - siteRuleSetOK:"設置成功,刷新生效", - setOK:"設置成功", - regExpError:"含有無效正則,請重新輸入", - addSiteRuleTitle:"自定義新增圖標規則,一行一條", - siteRulePlaceholder:"站點 @@ 站名 @@ 下載鏈接正則 @@ 圖標base64 @@ 圖標背景顏色 @@ 是否隱藏圖標\n\n@@ 分隔,目標站點中用 $url 代替目標連結,$hash 代表目標磁鏈的 hash 值,${reg}用正则提取,$text代表連結文本,$title代表連結title\n\n可用//注釋規則\n\n例如:http://192.168.2.1/d2r?u=$url@@路由器下載\nhttp://xxx.com/magnet/$hash@@磁鏈下載@@^magnet@@data:image/png;base64,AAA@@ffffff", - inputLink:"輸入需要離線下載的連結:", - importOrNot:"是否導入規則?", - importCustomAlert:"點擊確定追加規則,點擊取消覆蓋規則", - importOver:"規則導入完畢!", - postOver:"發送成功,返回消息:", - copyOver:"複製成功!", - postError:"發送失敗,錯誤内容:", - importCustomSame:"存在同名規則,是否覆蓋?", - copyLinks:"嗅探下載資源", - noLinks:"當前頁面沒有資源!", - userName:"請輸入用戶賬號", - userPass:"請輸入用戶密碼", - seekKey:"嗅探快捷鍵:" - }; - manageLinksLang={ - copyAll:"全部複製", - copySel:"複製選中", - addTips:"%i代表遞增 %n代表文件名", - sortByName:"按文件名排序", - sortByUrl:"按網址排序", - sortByType:"按擴展名排序", - preHolder:"批量前綴", - nextHolder:"批量後綴", - closeBtn:"關閉", - typeHead:"類型:" - }; - break; - default: - config={ - configure:"Easy-Offline Configure", - yyw:"115", - baidu:"BaiduPan", - furk:"Furk", - seedr:"Seedr", - pcloud:"Pcloud", - xunlei:"Xunlei", - xunleipan:"XunleiPan", - xiaomi:"MiWifi", - weiyun:"Weiyun", - bitqiu:"bitqiu", - apiv:"Apiv Online play", - torrent:"Torrent download in itorrent.org", - btcache:"Torrent download in btcache.me", - enable:"Enable ", - disable:"Disable ", - addIcon:"Add new site", - settingTitle: "Easy Offline", - urlRegexpTips: "Customize the Link Regexp, one per line", - disableOnSite: "Disabled currently, click to enable", - bdPathTips: "No need to add'/all files'", - bdPathTitle: "Path of BDpan:", - settingMouseOver: "Display the icon only when the mouse passes over", - settingBtn: "Save", - allDisableError: "Cannot disable all!", - siteRuleSetOK: "Set successfully, refresh takes effect", - setOK: "Set successfully", - regExpError: "Contains invalid regularity, please re-enter", - addSiteRuleTitle: "Customize new icon rules, one per line", - siteRulePlaceholder: "site @@ sitename @@ link regexp @@ icon base64 @@ icon background color @@ hide icon\n\nUse @@ to separated, use $url for the target Link, $hash for the hash of the target magnet link, ${reg} for regexp result on link, $text for link text, $title for link title\n\nUse // to comment rule\n\nFor example: http://192.168.2.1/d2r?u=$url@@MyRouter\nhttp://xxx.com/magnet/$hash@@MyMagnetLinkDownload@@^magnet@@data:image/png;base64,AAA@@ffffff", - inputLink: "Enter the link that needs to be downloaded with this:", - importOrNot:"Do you want to import rules?", - importCustomAlert:"Ok to add rule,Cancel to cover rule", - importOver:"Rules import over!", - postOver:"Post over, return: ", - copyOver:"Copy over!", - postError:"Fail in post, error: ", - importCustomSame:"Rule exists, overwritten?", - copyLinks:"Seek downloadable links", - noLinks:"No links!", - userName:"Input user name", - userPass:"Input user pass", - seekKey:"Seek key: " - }; - manageLinksLang={ - copyAll: "Copy all", - copySel: "Copy selected", - addTips: "%i means increment, %n means file name", - sortByName: "Sort by name", - sortByUrl: "Sort by URL", - sortByType: "Sort by type", - preHolder: "Batch Prefix", - nextHolder: "Batch Suffix", - closeBtn: "Close", - typeHead: "Type:" - }; - break; - } return config[name]?config[name]:name; }; @@ -868,24 +755,29 @@ defaultReg=new RegExp(defaultReg, 'i'); addCustomSites(()=>{ storage.getItem("siteSort",v=>{ - siteSort=v; - if(!siteSort)siteSort=["baidu","yyw","furk","seedr"]; - siteSort.forEach(function(item) { - var siteConfig=sites[item]; - if(siteConfig){ - siteConfig.name=item; + setTimeout(() => { + if (_unsafeWindow.eoAddons) { + sites = Object.assign(sites, _unsafeWindow.eoAddons); + } + siteSort=v; + if(!siteSort)siteSort=["baidu","yyw","furk","seedr"]; + siteSort.forEach(function(item) { + var siteConfig=sites[item]; + if(siteConfig){ + siteConfig.name=item; + sitesArr.push(siteConfig); + } + }); + for(let siteName in sites){ + let hasSite=false; + siteSort.forEach(function(item){if(item==siteName)hasSite=true;}); + if(hasSite)continue; + var siteConfig=sites[siteName]; + siteConfig.name=siteName; sitesArr.push(siteConfig); } - }); - for(let siteName in sites){ - let hasSite=false; - siteSort.forEach(function(item){if(item==siteName)hasSite=true;}); - if(hasSite)continue; - var siteConfig=sites[siteName]; - siteConfig.name=siteName; - sitesArr.push(siteConfig); - } - pageRun(); + pageRun(); + }, 1); }); }); }); @@ -1317,12 +1209,13 @@ if(/^c:/.test(url)){ urlArr.push(url.replace(/^c:/i,"")); }else if(/^p:/.test(url)){ - url=url.match(/p:(.*?)\?(.*)/); + url=url.match(/p:(.*?)\?(.*?)(\$headers({.*}))?$/); if(!url)return; let postData=JSON.stringify(urlArgs(url[2])); + let headers = url[4] ? JSON.parse(url[4]) : null; url=url[1]; _GM_xmlhttpRequest({ - method: "POST", url: url, data: postData, + method: "POST", url: url, data: postData, headers: headers, onload: (d) => { _GM_notification(i18n("postOver")+d.statusText); }, @@ -1351,12 +1244,13 @@ _GM_setClipboard(url.replace(/^c:/i,"")); _GM_notification(i18n("copyOver")); }else if(/^p:/.test(url)){ - url=url.match(/p:(.*?)\?(.*)/); + url=url.match(/p:(.*?)\?(.*?)(\$headers({.*}))?$/); if(!url)return; let postData=JSON.stringify(urlArgs(url[2])); + let headers = url[4] ? JSON.parse(url[4]) : null; url=url[1]; _GM_xmlhttpRequest({ - method: "POST", url: url, data: postData, + method: "POST", url: url, data: postData, headers: headers, onload: (d) => { _GM_notification(i18n("postOver")+d.statusText); }, @@ -1528,7 +1422,7 @@ document.body.appendChild(configContent); configContent.innerHTML=`

    - ${i18n("settingTitle")} +

    ${i18n("settingTitle")}

    ${i18n("urlRegexpTips")}
    @@ -1707,7 +1601,8 @@ if(!link){ if(targetA) link=targetA.href; else link=prompt(i18n("inputLink"),"magnet:?xt=urn:btih:"); - }else{ + } + if(link){ init(); showDiskIcons(link.trim(),mouseEve.pageY-10,mouseEve.pageX-10); } diff --git a/Easy offline/README.MD b/Easy offline/README.MD index 6a26351630d..a0e3ba53343 100644 --- a/Easy offline/README.MD +++ b/Easy offline/README.MD @@ -37,14 +37,14 @@ https://github.rc1844.workers.dev${https?://[^/]+(.*)}@@RC1844@@github\.com.*(re https://ghproxy.fsou.cc/$url@@Fsou@@github\.com.*(releases\/download|archive\/refs\/)@@@@ffff0f -### 自定義例子2 - Aria2下載 +### 自定義例子2 - Aria2 下載 同樣是點擊下方導入
     http://aria.hoothin.com/#!/new/$base64@@Aria2@@@@data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABOFBMVEUAAADSVF7SVF7SVF7LVWDSVF7QVF/SVF7SVF7SVF7SVF7SVF7SVF7RVF7SVF7SVF7SVF7SVF7SVF7SVF7SVF7SVF7SVF5ma4Di4uLSVF7v7+9DQ0NvaX1+ZniUYXGtXGppan+cYG+TYXLs7OyyW2h4tsiVlJWxs7ylpaWgoKBwaX2JZHVRVFxNT1VNTU1KSkxGRkd0uMzKysp5tceHipjDV2JYWFrr5ufa2tvT09Pjycu9v8a5u8PCwsK+vr6rrbego6+Tp62pqamZnKmloaGjj5l5fY+MfY60gozDfIa3foJkaHzTX2hYW2i6UVluSEuK2/Pd3d7X0NLExcm1tbWRlKKbm5uohJCOjo6GhoqOeInPgIh0coV8fHx7e3vRbXbObXaNY3SgX25hYmRhYWHJVmGOTFGNTFENIl9FAAAAF3RSTlMAJNEM+vr1iQjpyFfr6pybmjLusJhyIzaw7jcAAAHlSURBVDjLfZNnU+NADIbXduyQBBLq2fK6JcQmF0gvtOOOztGv90Ln//8Ddm3txkNmeD54vNI7klYrkRFaYT6f0/Vcfr6gkXGUklH13HoQ1F2vapSUZ+6JbKbsmIzvR/zrlDPZibT/lerXTc4fuDJj6r6aCjKTq5gJZwDH+FvJzcj0U8to/A+M93hYnlIwv+qh6RhijkQMNakj66PhF8BBr3cAZwEa/GxcYMbB8284CT90whOZxMnwJKUyHvurG/thpxPub3wykXKR9c8QATZtu7YT9nZqlvVVhDA0Uqji4XDVtrdeM95a1uYhGqsFMi2usGfb9uJWrcb81toeGr1pknfxf8nmLFox79Do5smkKOFNWrAkipgkevCSINBRMJ5CCmSK7ZTg47ZMMSqyHwt+fOOCbl8WObrm0OKC4R0X7A5PxTVlo87pFy5oNrngLz0XjZKtXqH/uIBSLmjRhmw1KSaP1WIuIdiltCUfiyjJc7cp/bm2vt5qd7ufbylt43OPBoayqFEUNZtRZJ42KE0GBkeuwgUr7FIAl5cArHWNdjxyWmpomd+8AXh8ALjmNcuhTY/9AODiAsCXYy9RVN/hGRLuXVafWJz06nmAeLh6z5d3AMjAKCpkHG1hTp3V9Vl1biG1/k8fR16xKi9r1wAAAABJRU5ErkJggg==@@ff2a00
     
    *之所以把Aria2做成自定義是因為每個人的Aria2UI網址都不一樣,用我的伺服器管理本地的Aria2服務需要允許Chrome訪問本地資源,訪問 chrome://flags/#block-insecure-private-network-requests 並關閉即可。不想關閉的話直接打開設置把上面的網址換成自己本地的即可,例如 127.0.0.1 -### 自定義例子3 - Post請求RPC遠程下載 +### 自定義例子3 - Post 請求 RPC 遠程下載
     p:http://192.168.32.1:6800/jsonrpc?id=$random&jsonrpc=2.0&method=aria2.addUri&params=["token:123456",["$url"]]@@Aria2RPC@@@@@@df2a00
     
    @@ -68,6 +68,11 @@ https://translate.google.com/?client=gtx&dj=1&q=$text&sl=auto&tl=zh-CN&hl=zh-CN& $text{[^\w\-_\.~!\*'();:@&=\+\$,\/\?#\[\]%]}@@GetLink@@@@@@f9ff9f +### 自定義例子7 - Post 請求 OpenList(原AList)遠程下載 +
    +p:https://alist.domain.com/api/fs/add_offline_download?path=/115网盘/OpList离线下载&tool=115%20Cloud&delete_policy=delete_on_upload_succeed&urls=["$url"]$headers{"Content-Type": "application/json","Authorization": "alist-50a563b4-and-more-token-chars", "Accept": "*/*", "Host": "alist.domain.com", "Connection": "keep-alive"}@@OpenList@@@@@@df2a11
    +
    + ### Update - **`Alt + F9`** 自定義下載,選中文本超鏈則下載文本超鏈,鼠標指向鏈接則下載鏈接,沒有選中則彈框輸入鏈接下載 diff --git a/FlashViewer-HTML5 Video/README.md b/FlashViewer-HTML5 Video/README.md new file mode 100644 index 00000000000..94771d645c5 --- /dev/null +++ b/FlashViewer-HTML5 Video/README.md @@ -0,0 +1,10 @@ +# [FlashViewer⬇️](https://hoothin.github.io/UserScripts/FlashViewer-HTML5%20Video/flashViewer.user.js) +HTML5 視頻增強腳本 + +原作者 NLF + +在 NLF 的腳本基礎上添加了**自定義視頻速度**、**更改視頻比例**與**自定義亮度**功能並做了些許優化。彈出視頻後在工具欄右側即可看到。 + +長按三倍速,在視頻上左右拖動滑鼠微調進度。 + +![showcase](showcase.jpg) diff --git "a/FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/flashViewer.user.js" b/FlashViewer-HTML5 Video/flashViewer.user.js similarity index 93% rename from "FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/flashViewer.user.js" rename to FlashViewer-HTML5 Video/flashViewer.user.js index 53ccf2c180f..e3f508f5e90 100644 --- "a/FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/flashViewer.user.js" +++ b/FlashViewer-HTML5 Video/flashViewer.user.js @@ -2,9 +2,9 @@ // @name flashViewer // @author NLF & Hoothin // @description 围观Flash,增加 HTML5 视频速度与亮度调整 -// @version 1.2.1.8 +// @version 1.2.1.9 // @created 2013-12-27 -// @lastUpdated 2023-3-9 +// @lastUpdated 2025-9-24 // @grant none // @run-at document-start // @namespace http://userscripts.org/users/NLF @@ -13,6 +13,9 @@ // @updateURL https://userscripts.org/scripts/source/187351.meta.js // @include * // @match *://*/* +// @exclude http://www.toodledo.com/tasks/* +// @exclude *://maps.google.*/* +// @exclude *://www.google.*/ // ==/UserScript== /* @@ -34,6 +37,15 @@ ;(function () { 'use strict'; + if (window.top != window.self) { + try { + if (window.self.innerWidth < 300 || window.self.innerHeight < 300) { + return; + } + } catch(e) { + return; + } + } function contentScript(messageID) { 'use strict'; @@ -178,17 +190,17 @@ position: relative !important; z-index: auto !important; opacity: 1 !important; - + } #playBox { z-index: auto !important; } */ }).cssText, - + }, ]; - + // 用到的图标 var icons = { // 浮动工具栏 @@ -207,9 +219,9 @@ restore: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0MjFERUVEODNBNzFFMzExOTZFOUJBOUM1MDc0MDBFNiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5MzBCNUQyMTcyRjMxMUUzOTM2RTg4MTQyQUEyRDU1MiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5MzBCNUQyMDcyRjMxMUUzOTM2RTg4MTQyQUEyRDU1MiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAyQkY0RjY0NUM3MUUzMTE5MEQ3RTAwRDBEMUUxQUQ5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjQyMURFRUQ4M0E3MUUzMTE5NkU5QkE5QzUwNzQwMEU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+KuIDRQAAAPpJREFUeNpi+P//PwM1ACPIIEZGRmxyc4FYCU3sHhAnk2TQwoUL34mJiQkii7169ep9fHy8EDaDmBioBEYNoqNBLEhsbyCOhnH+/v3Liq4YKrYMSWgpEG9FSUfbt29P+fnzZ9OXL18EQBICAgLszMzMTGgG/fvw4cNPEJubm/sjBwdHraen5xyMBAk0LB7InwXks+HzBlDNL6CadKAhC3CmbKBhNkCxjUAxIRyGvAPK+QMNOUIwiwANUwaKbwaKa6IZcgMo5gM05C7ReQ1oGD9QbjVQzhVqyG4gOxRoyEdScz/IMFCs9oPUAXEB0JA/+AKOOgmJWgYBBBgAo+l8rgH6VgYAAAAASUVORK5CYII=', close: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMTNFNTRGM0VGNzJFMzExQTk3OEU1QTlDRTYyMTQxMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1QzU4MzJGMTg4QjkxMUUzOTk4NzlCNUFFM0FFQkRBMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1QzU4MzJGMDg4QjkxMUUzOTk4NzlCNUFFM0FFQkRBMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjNEMkFFNjFBOEU4OEUzMTFCNkY5QkM5REQ2QTE1QUNEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjMxM0U1NEYzRUY3MkUzMTFBOTc4RTVBOUNFNjIxNDExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+gwuo4wAAAahJREFUeNpi/P//PwM1ABMDtQA1XAQygwWJnwbEkUj8WUC8HE1PBBCnI/FXAPFMEANu0Pbt25WAlAOMv2bNGtm5c+e+BjL3QIVckpKSWkJDQ5WRDDrl6emJEUaVQCcug3GCg4OV/f39+4FMKyC2BLFDQkKUkbwDUlsB4zOC/MfIyAhzFdu/f//WMTExeYP4f//+/Tdx4sQLIDUFBQUGzMzMYIuBarYB1QQCXfMLFkYoBkEN4wIacBCoyQTE//37918QzcrKygw1/AxQzh5oyDfkwMYwCGqY6K9fv46ysbGpIosDxe4AxayAhrxGjzWs6Qjk5I6Ojpvo4kCxG0C538QmSHZxcfH+lJQUR3QJkJiEhAQoAtgJGcTCy8vb3NjYGCwlJcUNdfYPEAaxQWINDQ1BIDXISQfdIEZ2dvaq2traRHl5eT6oIX+A4RcOwiA2SAwkB1LDyclZBdKDYRAwOlOrqqqydHV1RWBhCDQgARgmm0AYxAaJgSRAaioqKrJAejAM2rp1q6KZmZk4kgurgAYsRYoAELsKxgepBemhTaalhmFUK48AAgwALD+0S2sZwIQAAAAASUVORK5CYII=', }, - + }; - + // 第一时间备份一些方法,防止被页面脚本覆盖掉 var nativeMethods = { forEach: Array.prototype.forEach, @@ -237,6 +249,20 @@ }; }; + + var escapeHTMLPolicy; + if (window.trustedTypes && window.trustedTypes.createPolicy) { + escapeHTMLPolicy=window.trustedTypes.createPolicy('pvcep_default', { + createHTML: (string, sink) => string, + createScriptURL: string => string, + createScript: string => string + }); + } + + function createHTML(html){ + return escapeHTMLPolicy?escapeHTMLPolicy.createHTML(html):html; + } + //获取窗口大小. function getWindowSize() { /* @@ -275,35 +301,35 @@ x: 'pageXOffset' in window ? window.pageXOffset : de.scrollLeft || body.scrollLeft, y: 'pageYOffset' in window ? window.pageYOffset : de.scrollTop || body.scrollTop, }; - }; - + }; + // 事件支持检测. // 比如 eventSupported('fullscreenchange', document); function eventSupported(eventName, elem) { elem = elem || document.createElement('div'); var prefix = ['o', 'ms', 'moz', 'webkit', '']; - + var l = prefix.length; var pEventName; var isFunction; var setAttr; - + while(l --) { pEventName = 'on' + prefix[l] + eventName; - + if (pEventName in elem) { return pEventName.slice(2); - } else if (typeof elem.setAttribute == 'function') { // setAttribute 是元素节点的方法 + } else if (typeof elem.setAttribute == 'function') { // setAttribute 是元素节点的方法 setAttr = false; if (!elem.hasAttribute(pEventName)) { setAttr = true; elem.setAttribute(pEventName, 'return;'); }; - + isFunction = typeof elem[pEventName] == 'function'; - + if (setAttr) elem.removeAttribute(pEventName); - + if (isFunction) { return pEventName.slice(2); }; @@ -317,7 +343,7 @@ // 在指定对象上保存数据 var data = (function () { 'use strict'; - + var cache = { objs: [], data: {}, @@ -338,7 +364,7 @@ return cache.data[id][key] = value; }; }; - + return data; })(); @@ -355,7 +381,7 @@ mouseleave : 'mouseout', mouseenter : 'mouseover', }; - + return { add : function (type, ele, callback) { //事件类型,元素,监听函数 if (support[type]) { @@ -373,7 +399,7 @@ }; data(callback, 'mouseELListener', listener); }; - + ele.addEventListener(map[type], listener, true); }; }, @@ -399,7 +425,7 @@ // console.log(matched); ret[matched[1]] = matched[2]; }; - + return ret; }; @@ -407,12 +433,12 @@ function cloneObject(obj, deep) { var value; var ret = Array.isArray(obj) ? [] : {}; - + for (var key in obj) { if (!obj.hasOwnProperty(key)) continue; - + value = obj[key]; - + if (value === obj) {// 引用自己 ret[key] = ret; } else if (deep && (Array.isArray(value) || Object.prototype.toString.call(value) == '[object Object]')) { @@ -429,7 +455,7 @@ // 比如proSupported('requestFullscreen'); function proSupported(proName, obj) { obj = obj || document.createElement("div"); - + if (proName in obj) return proName; @@ -524,38 +550,38 @@ return false; }; - + // 特性支持情况 var support = { MutationObserver: proSupported('MutationObserver', window), cssBoxSizing: cssProSupported('box-sizing'), - + // 请求全屏 requestFullscreen: proSupported('requestFullscreen') || proSupported('requestFullScreen'), // 返回当前页面是否允许全屏 fullscreenEnabled: proSupported('fullscreenEnabled', document) || proSupported('fullScreenEnabled', document), // 返回当前全屏的元素,否则返回null fullscreenElement: proSupported('fullscreenElement', document) - || proSupported('fullScreenElement', document) + || proSupported('fullScreenElement', document) || proSupported('currentFullScreenElement', document), // fullscreen 事件 fullscreenchange: eventSupported('fullscreenchange', document), - + }; // console.log(support); - + // fx库 var fx = (function () { 'use strict'; - + function $(selector, context) { return new init(selector, context); }; - + function init(selector, context) { - + if (selector instanceof HTMLElement) { // 单个 html element 节点 [].push.call(this, selector); return this; @@ -569,22 +595,22 @@ unique.push(node); }; }); - + [].push.apply(this, unique); return this; }; - + if (typeof selector == 'string') {// css字符串 if (!context || !context.nodeType || context.nodeType != 1) {// 不是元素节点的话,context指向document context = document; }; selector = context.querySelectorAll(selector); // NodeList - + [].push.apply(this, selector); return this; }; - - if (selector instanceof NodeList) {// NodeList + + if (selector instanceof NodeList) {// NodeList // 去除非元素节点 var elems = []; each(selector, function () { @@ -592,11 +618,11 @@ elems.push(this); }; }); - + [].push.apply(this, elems); return this; }; - + if (selector instanceof HTMLCollection) { // HTMLCollection [].push.apply(this, selector); return this; @@ -610,9 +636,9 @@ fn.call(elem); }); }; - + init.prototype = { - + animate: function (pros, opts) { // 判断pros是否有属性 for (var pro in pros) { @@ -620,30 +646,30 @@ break; }; if (!pro) return this; - + // 修正opts参数 if (!opts) { opts = {}; }; - + // 动画持续时间 if (typeof opts.duration != 'number') { opts.duration = 400; }; - + // 动画算法 if (!opts.easing || !easing[opts.easing]) { opts.easing = 'swing'; }; - + // 是否将动画放入队列 if (opts.queue !== false) { opts.queue = true; }; - + // 为每个属性指定特定的动画方法 opts.specialEasing = opts.specialEasing || {}; - + // 每个元素的所有属性动画完成之后都会调用 opts.complete = opts.complete || emptyFn; // 封装complete @@ -654,14 +680,14 @@ $(this).dequeue(); }; }; - + // 每个元素的每个属性的每一步都会调用 opts.step = opts.step || emptyFn; - - + + return this[opts.queue ? 'queue' : 'each'](function () { var elem = this; - + // 复制pros对象 var prosC = cloneObject(pros); // 复制opts对象 @@ -686,16 +712,16 @@ // 判断toggle是该执行show还是hide动画 if (value === 'toggle') { value = isHidden ? 'show' : 'hide'; - + for (pro in prosC) { if (!prosC.hasOwnProperty(pro)) continue; prosC[pro] = value; }; }; - - + + var style = elem.style; - + var allAniData = []; if (value === 'show') {// show操作 if (!isHidden) { @@ -712,18 +738,18 @@ }; optsC.show = true;// 标记show操作 - + } else if (value === 'hide') {// hide操纵 if (isHidden) { optsC.completeW.call(elem); return; }; - + optsC.hide = true;// 标记show操作 }; - - - + + + // 获取当前值 function getCur(pro) { if (pro in style) { @@ -732,7 +758,7 @@ return elem[pro]; }; }; - + var start;// 开始 var end;// 结束 var unit;// 单位 @@ -748,10 +774,10 @@ if (!prosC.hasOwnProperty(pro)) continue; value = prosC[pro]; - + // 备份当前值,show或者hide操作的时候最后还原样式。 optsC.orig[pro] = style[pro]; - + if (value === 'show') { start = 0; end = parseFloat(cS[pro]); @@ -771,10 +797,10 @@ if (parts) { unit = parts[3]; end = parseFloat(parts[2]); - + start = getCur(pro).toString(); parts2 = start.match(reg); - + if (parts2) { start = parseFloat(parts2[2]); unit2 = parts2[3]; @@ -783,14 +809,14 @@ style[pro] = (end || 1) + unit; start = ((end || 1) / parseFloat(getCur(pro))) * start; }; - + if (parts[1]) {// +=/-=,做相对运行 end = ((parts[1] == "-=" ? -1 : 1) * end) + start; }; }; }; }; - + if (typeof start == 'number' && typeof end == 'number' && typeof unit == 'string') { allAniData.push([elem, pro, optsC, start, end, unit]); // new FX(elem, pro, optsC).custom(start, end, unit);// 开始动画 @@ -798,39 +824,39 @@ optsC.curAnim[pro] = true; }; }; - + // 等所有动画数据都获取完成后才开始动画, // 否则对于show之类的操作,如果width先绘制第一帧设置width为0之后,容器会发生伸缩,导致height的可能获取不正确 allAniData.forEach(function (data) { new FX(data[0], data[1], data[2]).custom(data[3], data[4], data[5]); }); - + }); - + }, - + show: function (opts) { return this.animate(genFx('show', { o: true, - v: true, + v: true, h: true, }), opts); }, hide: function (opts) { return this.animate(genFx('hide', { - o: true, - v: true, + o: true, + v: true, h: true, }), opts); }, toggle: function (opts) { return this.animate(genFx('toggle', { - o: true, - v: true, + o: true, + v: true, h: true, }), opts); }, - + fadeIn: function (opts) { return this.animate(genFx('show', { o: true, @@ -851,32 +877,32 @@ opacity: opacity, }, opts); }, - + slideDown: function (opts) { return this.animate(genFx('show', { - v: true, + v: true, o: true, }), opts); }, slideUp: function (opts) { return this.animate(genFx('hide', { - v: true, + v: true, o: true, }), opts); }, slideToggle: function (opts) { return this.animate(genFx('toggle', { - v: true, + v: true, o: true, }), opts); }, - + // 立即停止当前动画 stop: function (clearQueue, jumpToEnd) { if (clearQueue) { this.clearQueue(); }; - + this.each(function () { for (var i = timers.length - 1; i >= 0; i--) { if (timers[i].elem == this) {//是当前元素的属性动画 @@ -890,13 +916,13 @@ if (!jumpToEnd) { this.dequeue(); }; - - + + return this; - }, + }, clearQueue: function () { this.queue([]); - + return this; }, delay: function (duration) { @@ -907,67 +933,67 @@ }, duration); }); }, - - + + each: function (fn) { each(this, fn); - + return this; }, queue: function (fn, type) { type = type || 'fx'; - + return this.each(function () { - + // 取出队列 var q = data(this, type + 'queue'); if (!q) {// 初始化 q = []; }; - - + + if (typeof fn == 'function') { q.push(fn); } else if (Array.isArray(fn)) { // array类型,直接覆盖掉 q = fn; }; - + data(this, type + 'queue', q); - + if (type == 'fx' && q.length == 1) { // 如果动画队列中只有自己,立即执行 q[0].call(this); }; - + }); }, dequeue: function (type) { type = type || 'fx'; - + return this.each(function () { // 取出队列 var q = data(this, type + 'queue'); if (!q) {// 初始化 q = []; }; - + q.shift();// 删除第一个 - + data(this, type + 'queue', q); - + if (q[0]) { q[0].call(this); }; - + }); }, }; - + //对象克隆,接受{}和[] function cloneObject(obj, deep) { var value; var ret = Array.isArray(obj) ? [] : {}; - + for (var key in obj) { if (!obj.hasOwnProperty(key)) continue; value = obj[key]; @@ -984,17 +1010,17 @@ function now() { return Date.now(); }; - + // 空函数 function emptyFn() { }; - + // 在指定对象上保存数据 var data = (function () { 'use strict'; - + var cache = { objs: [], data: {}, @@ -1015,17 +1041,17 @@ return cache.data[id][key] = value; }; }; - + return data; })(); - + var timers = []; var aning = null; - var requestAF = window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.msRequestAnimationFrame || + var requestAF = window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.msRequestAnimationFrame || window.oRequestAnimationFrame; // 算法 @@ -1043,9 +1069,9 @@ var pros = { o: ['opacity',], h: ['width', 'paddingLeft', 'paddingRight', 'borderLeftWidth', 'borderRightWidth', 'marginLeft', 'marginRight',], - v: ['height', 'paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth', 'marginTop', 'marginBottom',], + v: ['height', 'paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth', 'marginTop', 'marginBottom',], }; - + var ret = {}; for (var i in pros) { if (!pros.hasOwnProperty(i)) continue; @@ -1055,10 +1081,10 @@ }); }; }; - + return ret; }; - + // 绘制动画 function draw() { for ( var i = 0, l = timers.length; i < l; i++ ) { @@ -1076,7 +1102,7 @@ }; }; - + // 每个属性创建一个FX实例 function FX(elem, pro, opts) { // 配置 @@ -1086,28 +1112,28 @@ // 动画属性 this.pro = pro; }; - + FX.off = false;// 关闭动画 - + FX.prototype = { // 更新属性值 update: function () { var pro = this.pro; var elem = this.elem; var opts = this.opts; - + // 调用step函数,可以修改this对象 opts.step.call( elem, this.now, this ); - + var style = elem.style; - + if (pro in style) { if ((pro == 'height' || pro == 'width') && typeof opts.overflowX == 'undefined') { opts.overflowX = style.overflowX; opts.overflowY = style.overflowY; style.overflow = 'hidden'; }; - + style[pro] = this.now + this.unit; } else if (pro in elem) { elem[pro] = this.now; @@ -1116,14 +1142,14 @@ // 开启动画 custom: function (from, to, unit) { this.startTime = now();//动画开始时间 - + this.start = from;//位置开始点 this.end = to;//位置结果点 - + this.unit = unit;// 单位 - + this.now = this.start;//位置当前点 - + //pos是按一定算法把时间上的比率折算到位置上的比率 //state是时间间隔在总的duration的比率 this.pos = this.state = 0; @@ -1136,10 +1162,10 @@ return self.step(jumpToEnd); }; t.elem = this.elem;//删除的时候做判断用 - + //timers栈是公共的,不同的元素的不同的属性step都是放在这里面。 timers.push(t); - + if ( aning == null ) { aning = true; requestAF(draw); @@ -1148,24 +1174,24 @@ }, step: function (jumpToEnd) { var t = now();//运行到当前的时间 - + var opts = this.opts; - + // 强行指定结束或当前时间大于startTime+duration if (FX.off || jumpToEnd || t >= opts.duration + this.startTime ) { this.now = this.end;//当前的位置为结束位置 this.pos = this.state = 1;//当前的state,pos的比率为1.最大。 this.update();//显示 - + //标识这个属性的动画已经完成 var curAnim = opts.curAnim; curAnim[ this.pro ] = true; - + //再一次判断是否这个元素的所有属性都已完成 var done = true; for ( var i in curAnim ) { if (!curAnim.hasOwnProperty(i)) continue; - + if ( curAnim[i] !== true ) { done = false; break; @@ -1174,7 +1200,7 @@ if ( done ) { var style = this.elem.style; - + if (opts.hide || opts.show) { if (opts.hide) { style.display = 'none'; @@ -1182,7 +1208,7 @@ style.setProperty('display', 'none', 'important'); }; }; - + // 还原css属性 var orig = opts.orig; for (var i in orig) { @@ -1190,21 +1216,21 @@ style[i] = orig[i]; }; }; - + if (typeof opts.overflowX != 'undefined') { style.overflowX = opts.overflowX; style.overflowY = opts.overflowY; }; - + // 执行回调函数 opts.completeW.call( this.elem ); }; - + return false; - }; - - + }; + + var n = t - this.startTime;//时间间隔 this.state = n / opts.duration;//时间间隔比率 @@ -1216,29 +1242,29 @@ // 显示 this.update(); - + return true; - + }, }; - - + + return $; - + })(); - - + + var url = location.href; - - + + // 重新初始化插件 function reinitPlugin(plugin) { // 重载flash让参数生效 // chrome firefox 切换display none就能引发重载,ie不行。 // chrome firefox 删除后,添加进dom引发重载,ie不行 // chrome 切换常规流绝对定位流引发重载,ie不行 - + var pluNS = plugin.nextSibling; var pluPN = plugin.parentNode; pluPN.removeChild(plugin); @@ -1251,7 +1277,7 @@ pluPN.appendChild(plugin); }; }, 20); - + /* var pStyle = plugin.style; var oSDis = pStyle.display; pStyle.display = 'none'; @@ -1266,7 +1292,7 @@ // 找到的插件统统由这个函数处理 function initializer(plugins) { // console.log(plugins); - + plugins.forEach(function (plugin) { // plugin是否在已插入文档中 @@ -1277,7 +1303,7 @@ var src; var type; var isObject = plugin.nodeName == 'OBJECT'; - + if (isObject) { if (plugin.hasAttribute('data')) { src = plugin.data; @@ -1285,11 +1311,11 @@ if (plugin.hasAttribute('type')) { type = plugin.type; }; - + if (src === undefined || type === undefined) { nativeMethods.some.call(plugin.children, function (child){ if (child.nodeName != 'PARAM') return; - + var key = child.name; var value = child.value; if (/^(?:src|movie)$/i.test(key)) { @@ -1302,7 +1328,7 @@ }; }); }; - + type = type || ''; } else {// embed标签 src = plugin.src; @@ -1313,7 +1339,7 @@ // 如果不存在src或者不是flash插件 if (!src || !/^(?:|application\/x-shockwave-flash)$/i.test(type)) return; - + // 匹配到的规则 var matched; rules.some(function (rule) { @@ -1328,10 +1354,10 @@ var pFragment; function addParamO(name, value) { name = name.toLowerCase(); - + if (!nativeMethods.some.call(plugin.children, function (child) { if (child.nodeName != 'PARAM') return; - + if (child.name.toLowerCase() == name){ if (name == 'flashvars'){ child.value = gFlashVars(child.value, value); @@ -1349,24 +1375,24 @@ pFragment = pFragment ? pFragment : document.createDocumentFragment(); pFragment.appendChild(param); }; - + }; // 生成新的flashvars字符串 function gFlashVars(oValue, add) { if (!oValue) return add; if (!add) return oValue; - + // 转成数组 ['a=1', 'b=2', 'c=']之类的形式 oValue = oValue.split('&'); add = add.split('&'); // 转成字典 {a:'1', b:'2', c:''}之类的形式 var oVDict = {}; - + function gDict(kv) { if (!kv) return; - + var index = kv.indexOf('='); if (index == -1) { if (kv !=' ') { @@ -1378,11 +1404,11 @@ }; }; }; - + // 用新的值覆盖旧的值 oValue.forEach(gDict); add.forEach(gDict); - + // 转会字符串 var fVars = []; for (var key in oVDict) { @@ -1425,37 +1451,37 @@ addParamO('flashVars', fvs); } else { plugin.setAttribute('flashVars', gFlashVars(plugin.getAttribute('flashVars') || '', fvs)); - + }; }; if (pFragment) { plugin.appendChild(pFragment); }; - + // 标记已经修改 plugin.fvReInitialized = true; - + reinitPlugin(plugin); }); }; - - + + // 一些规则根据excludes强行设置enabled为false rules.forEach(function (rule) { if (rule.hasOwnProperty('excludes') && rule.excludes.test(url)) { // console.log('根据excludes禁用规则', rule); rule.enabled = false; }; - + }); - + // 先处理脚本运行前已经加载的flash initializer([].slice.call(document.querySelectorAll('object, embed'), 0)); - - + + // 建立一个监视事件,处理后来追加的插件 if(support.MutationObserver) (new window[support.MutationObserver](function (mRecords) { @@ -1473,26 +1499,26 @@ if (/^(?:OBJECT|EMBED)$/.test(node.nodeName)) { wPlugins.push(node); }; - + [].push.apply(wPlugins, node.querySelectorAll('object, embed')); - + }); - + }); // console.log(wPlugins); - + initializer(wPlugins); })).observe(document, { - childList: true, - subtree: true, + childList: true, + subtree: true, }); - - + + }; - + if (prefs.allowReinitFlash) { // console.log(document.contentType); // 修复firefox标签单独请求一个flash,加载本脚本后导致不能正常加载flash的问题 @@ -1502,8 +1528,8 @@ }; }; - - + + // -------------------------------------------- // 弹出视频 function PopVideo(video) { @@ -1518,7 +1544,7 @@ PopVideo.timerId = null; PopVideo.scrollFx = null; PopVideo.topVideo = null; - + PopVideo.prototype = { lighting: true, @@ -1527,26 +1553,103 @@ isFullscreen: false, minWidth: 325, minHeight: 150, - + + scale: function (e) { + if (this.pinned || this.maximized) return; + if (e.deltaY > 0) { + this.zoomLevel += -0.1; + if (this.zoomLevel > 3) this.zoomLevel = 1; + else if (this.zoomLevel < 0.1) this.zoomLevel = 0.1; + } else { + this.zoomLevel += 0.1; + if (this.zoomLevel < 0.5) this.zoomLevel = 1; + } + var oriSize = { + h: parseInt(this.vOriStyle.height), + w: parseInt(this.vOriStyle.width) + }; + var afterSize = { + h: oriSize.h * this.zoomLevel || 10, + w: oriSize.w * this.zoomLevel || 10, + }; + var controlLayerSize = { + h: parseInt(this.controlLayer.style.height), + w: parseInt(this.controlLayer.style.width) + }; + var ratio = { + x: e.offsetX / controlLayerSize.w, + y: e.offsetY / controlLayerSize.h + }; + this.controlLayer.style.width = afterSize.w + "px"; + this.controlLayer.style.height = afterSize.h + "px"; + this.controlLayer.style.top = parseInt(this.controlLayer.style.top) - (afterSize.h - controlLayerSize.h) * ratio.y + "px"; + this.controlLayer.style.left = parseInt(this.controlLayer.style.left) - (afterSize.w - controlLayerSize.w) * ratio.x + "px"; + e.preventDefault(); + }, + + videoMouseDown: function (e) { + if (this.zoomLevel === 1) return; + e.stopPropagation(); + let self = this, mousemoved = false; + let oriPos = { + x: parseInt(this.controlLayer.style.left), + y: parseInt(this.controlLayer.style.top) + }; + let oriMouse = { + x: e.pageX, + y: e.pageY + }; + let mouseupHandler = e => { + document.removeEventListener("mouseup", mouseupHandler); + document.removeEventListener("mousemove", mousemoveHandler); + if (mousemoved) { + e.preventDefault(); + e.stopPropagation(); + } + }; + let mouseclickHandler = e => { + document.removeEventListener("click", mouseclickHandler); + if (mousemoved) { + e.preventDefault(); + e.stopPropagation(); + } + }; + let mousemoveHandler = e => { + mousemoved = true; + self.controlLayer.style.top = oriPos.y + (e.pageY - oriMouse.y) + "px"; + self.controlLayer.style.left = oriPos.x + (e.pageX - oriMouse.x) + "px"; + e.preventDefault(); + e.stopPropagation(); + }; + document.addEventListener("mouseup", mouseupHandler); + document.addEventListener("click", mouseclickHandler); + document.addEventListener("mousemove", mousemoveHandler); + }, + init: function () { this.addStyle(); - + var self = this; - + var video = this.video; this.vOriControls = video.controls; var vNodeName = video.nodeName; - + // 如果是这些元素,那么pin的时候直接用fixed方式(这些元素随便调整position不会引发重载) - var fixedPin = /^(?:IFRAME|VIDEO|AUDIO)$/.test(vNodeName); + var fixedPin = /^(?:IFRAME|VIDEO|AUDIO|CANVAS)$/.test(vNodeName); this.fixedPin = fixedPin; - + video.fvPopVideo = true;// 标记弹出中。 - + this.zoomLevel = 1; + video.addEventListener("wheel", this.scale.bind(this)); + if (vNodeName === "VIDEO") { + video.addEventListener("mousedown", this.videoMouseDown.bind(this), true); + } + // 很多网站加载flash为了兼容现代浏览器和ie,经常使用 object classid嵌套object或者embed的格式 var vPEIsObject; var vCEIsPlugin; - + if (/^(?:EMBED|OBJECT)$/.test(vNodeName)) {// object,embed标签 if ((vPEIsObject = video.parentElement) && vPEIsObject.nodeName == 'OBJECT') {// 弹出的是被嵌套的object或者embed vPEIsObject.fvPopVideo = true; @@ -1561,23 +1664,23 @@ } else if(/^(?:VIDEO|AUDIO)$/.test(vNodeName)) {// html5 video,audio标签 video.controls = true; // 显示播放控件 } else {// iframe 标签 - + }; - + // 创建创造关灯效果的黑色覆盖层 var fixedOverlayer = document.createElement('fvspan'); this.fixedOverlayer = fixedOverlayer; fixedOverlayer.className = 'fv-p-v-light-off'; document.body.appendChild(fixedOverlayer); - + // 创建控制video缩放的控制层,放在video的下面,但是在light层的上面 var controlLayer = document.createElement('fvspan'); this.controlLayer = controlLayer; controlLayer.className = 'fv-p-v-control-layer'; - controlLayer.innerHTML = getMStr(function () { + controlLayer.innerHTML = createHTML(getMStr(function () { var innerHTML; /* @@ -1621,7 +1724,6 @@ - @@ -1642,16 +1744,16 @@ */ - }).innerHTML; - + }).innerHTML); + document.body.appendChild(controlLayer); - + // 获取元素 var cTitleBar = controlLayer.querySelector('.fv-p-v-control-title-bar'); this.cTitleBar = cTitleBar; - + this.cSizeInfo = controlLayer.querySelector('.fv-p-v-control-size-info'); - + var cCommandL = controlLayer.querySelector('.fv-p-v-control-light'); this.cCommandL = cCommandL; var cCommandP = controlLayer.querySelector('.fv-p-v-control-pin'); @@ -1701,22 +1803,22 @@ // 监听标题栏的命令点击 cTitleBar.addEventListener('click', function (e) { if (e.button != 0) return; - + var target = e.target; var classList = target.classList; - + if (!classList.contains('fv-p-v-control-command')) return; - + switch (target) { case cCommandL: self.toggleLight(); - break; + break; case cCommandP: self.togglePin(); - break; + break; case cCommandM: self.toggleMaximize(); - break; + break; case cCommandR: self.restore(); break; @@ -1736,20 +1838,20 @@ self.restore(true); break; }; - + }, true); - + // 双击标题栏切换最大化和还原 cTitleBar.addEventListener('dblclick', function (e) { if (e.button != 0) return; - + var target = e.target; if (target != this) return; - + self.toggleMaximize(); }, true); - - + + // 给resize添加监听函数 controlLayer.addEventListener('mousedown', function (e) { if (e.button != 0) return;// 非左键 @@ -1760,7 +1862,7 @@ var classList = target.classList; // 如果不是缩放手柄和标题栏 if (!classList.contains('fv-p-v-control-resize-hand') && target != cTitleBar) return; - + e.preventDefault(); // 禁止拖曳的时候选中文字 // 点击时鼠标的位置,controlLayer 的长宽,top left的坐标 @@ -1773,32 +1875,33 @@ left: parseFloat(cLS.left), }; var size = { - height: parseFloat(cLS.height), + height: parseFloat(cLS.height), width: parseFloat(cLS.width), }; - + // 缩放处理函数 function reize(allowSize, allowOffset) { - + function move(e) { video.style.transform = ""; + cCommandRatio.value = ""; var mCoorA = { pageX: e.pageX, pageY: e.pageY, }; - + var height; if (allowSize.height) { var yMove = mCoorA.pageY - mCoor.pageY; height = (allowSize.hMinus ? -yMove : yMove) + size.height; }; - + var minHeight = self.minHeight; - + if (allowOffset.top) { var top = offset.top + mCoorA.pageY - mCoor.pageY; - + if (typeof height == 'number') { if (height >= minHeight) { if (top >= 0) { @@ -1818,20 +1921,20 @@ } else { cLS.height = Math.max(minHeight, height) + 'px'; }; - - - + + + var width; if (allowSize.width) { var xMove = mCoorA.pageX - mCoor.pageX; width = (allowSize.wMinus ? -xMove : xMove) + size.width; }; - + var minWidth = self.minWidth; - + if (allowOffset.left) { var left = offset.left + mCoorA.pageX - mCoor.pageX; - + if (typeof width == 'number') { if (width >= minWidth) { if (left >= 0) { @@ -1845,42 +1948,42 @@ cLS.left = left - (minWidth - width) + 'px'; cLS.width = minWidth + 'px'; }; - + } else { // 单纯的移动 cLS.left = Math.max(0, left) + 'px'; }; } else { cLS.width = Math.max(minWidth, width) + 'px'; }; - - + + }; - - + + // 结束拖拽 function up() { PopVideo.movingHelperStyle.disabled = true; - + // 重新订一下 if (self.pinned) { self.beforePin(); - + if (!fixedPin) { self.unpin(); self.pin(); }; }; - + document.removeEventListener('mousemove', move, true); document.removeEventListener('mouseup', up, true); }; - + document.addEventListener('mousemove', move, true); document.addEventListener('mouseup', up, true); }; - + // 移动的时候取消iframe的pointer-events,否则移动到iframe上面的时候mousemove事件检测不到。 PopVideo.movingHelperStyle.disabled = false; @@ -1894,7 +1997,7 @@ } else if (classList.contains('fv-p-v-control-resize-hand-n')) {// 北 reize({ height: true, - + hMinus: true,// 标记反向 }, { top: true, @@ -1907,7 +2010,7 @@ } else if (classList.contains('fv-p-v-control-resize-hand-w')) {// 西 reize({ width: true, - + wMinus: true,// 标记反向 }, { left: true, @@ -1916,12 +2019,12 @@ reize({ width: true, }, { - }); + }); } else if (classList.contains('fv-p-v-control-resize-hand-nw')) {// 西北 reize({ width: true, height: true, - + wMinus: true, hMinus: true, }, { @@ -1933,25 +2036,25 @@ width: true, height: true, }, { - }); + }); } else if (classList.contains('fv-p-v-control-resize-hand-ne')) {// 东北 reize({ width: true, height: true, - + hMinus: true, }, { top: true, - }); + }); } else if (classList.contains('fv-p-v-control-resize-hand-sw')) {// 西南 reize({ width: true, height: true, - + wMinus: true, }, { left: true, - }); + }); }; }, true); @@ -1963,34 +2066,34 @@ mouseEventListener.add('mouseenter', video, this.videoEnterHandler); mouseEventListener.add('mouseenter', controlLayer, this.videoEnterHandler); - + // 调整前video的位置 var vCCliRect = getContentClientRect(video); // console.log(vCCliRect); - + // 控制层的大小和video保持一致 var cLS = controlLayer.style; cLS.width = Math.max(vCCliRect.width, this.minWidth) + 'px';// 内容区域的宽度 cLS.height = Math.max(vCCliRect.height, this.minHeight) + 'px';// 内容区域的高度 - - + + // 为了以后还原,先保存一些需要更改的旧值 var vOriStyle = {}; this.vOriStyle = vOriStyle; - + var vStylePros = [ - 'position', 'z-index', - 'width', 'height', - 'top', 'left', + 'position', 'z-index', + 'width', 'height', + 'top', 'left', ]; - + var vS = video.style; - + vStylePros.forEach(function (pro) { vOriStyle[pro] = [vS.getPropertyValue(pro), vS.getPropertyPriority(pro)]; }); // console.log(vOriStyle); - + // 如果是特殊站点,通过特殊规则修复兼容 popVideoRules.some(function (rule) { @@ -2002,24 +2105,24 @@ style.textContent = rule.css; var parentNode = document.head || document.documentElement; parentNode.appendChild(style); - + self.removePopVideoFix = function () { parentNode.removeChild(style); }; break; - + }; - + return true; }; }); // 修改video样式 video.classList.add('fv-p-v-video'); - + vS.setProperty('top', 0, 'important'); vS.setProperty('left', 0, 'important'); - + // 用zindex提升flash层级,先设置position为relative或absolute // 为避免更改position导致flash重载,不要让flash在常规流和绝对定位之间切换(chrome) @@ -2029,7 +2132,7 @@ vS.setProperty('position', 'absolute', 'important'); }; - + // 允许flash到最高层,不要被祖父级别的层叠上下文给限制主。 设置祖先的z-index为auto // 允许调整大小,设置祖先(包含块)的overflow等于 visible var ancestor = video; @@ -2039,10 +2142,10 @@ var ancestors = []; //保存所有的祖先的引用 this.ancestors = ancestors; var docBody = document.body; - + while ((ancestor = ancestor.parentElement) && ancestor != docBody) { ancestors.push(ancestor); - + ancestorData = data(ancestor, 'data'); if (ancestorData) {// 保存的修改之前的样式数据 ancestorData.count ++ ;// 多个video共用的祖先,标记+1。还原的时候,检测这个值,如果不等于1就不还原这个祖先元素的样式 @@ -2055,12 +2158,12 @@ 'overflow-y': [ancestorStyle.getPropertyValue('overflow-y'), ancestorStyle.getPropertyPriority('overflow-y')], 'z-index': [ancestorStyle.getPropertyValue('z-index'), ancestorStyle.getPropertyPriority('z-index')], 'position': [ancestorStyle.getPropertyValue('position'), ancestorStyle.getPropertyPriority('position')], - }, + }, }; // 保存 data(ancestor, 'data', ancestorData); - + ancestorStyle.setProperty('overflow', 'visible', 'important'); ancestorStyle.setProperty('z-index', 'auto', 'important'); // 有绝对定位的父元素,改成absolute。 @@ -2069,7 +2172,7 @@ }; } }; - + // 注册controlLayer的监控函数,让video永远跟着走。 if(support.MutationObserver){ @@ -2079,16 +2182,16 @@ }); this.cLObserver = cLObserver; - + cLObserver.observe(controlLayer, { attributes: true, attributeFilter: ['style'], }); } - - - + + + // 让控制层摆放在视频弹出前所在的位置 cLS.top = 0; cLS.left = 0; @@ -2096,20 +2199,20 @@ // 保证top不要小于0否则标题栏会到窗口外面去。 cLS.top = Math.max(vCCliRect.top - cLCCliRect.top, 0) + 'px'; cLS.left = vCCliRect.left - cLCCliRect.left + 'px'; - - + + // 一定的时间之内,同步一次位置 PopVideo.all.push(this); - + if (!PopVideo.timerId) { PopVideo.timerId = setInterval(function () { - + var all = PopVideo.all; - + all.forEach(function (obj) { obj.followControlLayer(); }); - + if (!all.length) { clearInterval(PopVideo.timerId); PopVideo.timerId = null; @@ -2121,7 +2224,7 @@ this.wResizeListener = function () { self.followControlLayer(); }; - + window.addEventListener('resize', this.wResizeListener, true); // 全屏事件监听 @@ -2129,36 +2232,36 @@ // 退出全屏 var fsE = document[support.fullscreenElement]; // console.log('全屏元素:', fsE); - + if (!fsE) { self.exitFullscreen(); } else if (fsE == video) { self.fullscreen(); }; }; - + document.addEventListener(support.fullscreenchange, this.fullscreenchangeListener, true); - - + + // 提升到顶层 this.setZIndex(); - + // 关灯 if (prefs.popVideo.lightOff.enabled) { this.lightOff(); }; - + // pin if (prefs.popVideo.pin) { this.beforePin(); this.pin(); }; - + // 最大化 if (prefs.popVideo.maximize) { this.maximize(); }; - + if (!this.pinned) { this.smoothScrollIntoView(controlLayer); }; @@ -2166,14 +2269,14 @@ exitFullscreen: function () { if (!this.isFullscreen) return; this.isFullscreen = false; - + this.setZIndex(true); }, fullscreen: function () { var video = this.video; var vS = video.style; - + // firefox 会将全屏的元素自动fixed处理,然后拉伸 /* :-moz-full-screen:not(:root) { -moz-box-sizing: border-box !important; @@ -2190,15 +2293,15 @@ right: 0 !important; top: 0 !important; width: 100% !important; - z-index: 2147483647 !important; + z-index: 2147483647 !important; } */ - + // chrome 只有当全屏元素是iframe的时候才会做fixed处理,并且拉伸 // 其他元素的时候,当元素为非绝对定位流的时候会全屏居中,绝对定位流时以屏幕左上角为原点定位 /* video:-webkit-full-screen { width: 100%; height: 100%; - } + } audio:-webkit-full-screen { background-color: transparent; position: relative; @@ -2232,18 +2335,18 @@ vS.setProperty('height', '100%', 'important'); vS.setProperty('width', document.body.clientWidth+'px', 'important'); vS.setProperty('z-index', 2147483647, 'important'); - + // 标记全屏状态中 - this.isFullscreen = true; + this.isFullscreen = true; }, maximize: function () { if (this.maximized) return; this.maximized = true; - + var controlLayer = this.controlLayer; controlLayer.classList.add('fv-p-v-control-layer_maximized'); - + // 去掉滚动条 var style = document.createElement('style'); style.type = 'text/css'; @@ -2256,11 +2359,11 @@ */ }).cssText; (document.head || document.documentElement).appendChild(style); - + var cLS = controlLayer.style; var cBCRect = controlLayer.getBoundingClientRect(); - + // 备份数据,等下还原用 this.maximizeBackup = { pinned: this.pinned,// 备份之前的状态 @@ -2279,11 +2382,11 @@ function fitScreen() { var wSize = getWindowSize(); cLS.height = wSize.height - 30 + 'px'; - cLS.width = wSize.width - 10 + 'px'; + cLS.width = wSize.width - 10 + 'px'; }; - + fitScreen(); - + // 固定 if (this.pinned) { if (!this.fixedPin) { @@ -2294,32 +2397,32 @@ this.pin(); this.cCommandP.classList.remove('fv-p-v-control-command-selected'); }; - + this.maximizeResizeHandler = fitScreen; window.addEventListener('resize', this.maximizeResizeHandler, true); - + this.cCommandM.classList.add('fv-p-v-control-command-selected'); - - + + }, exitMaximize: function () { if (!this.maximized) return; this.maximized = false; - + var controlLayer = this.controlLayer; var cLS = controlLayer.style; - + controlLayer.classList.remove('fv-p-v-control-layer_maximized'); - + var mBackup = this.maximizeBackup; cLS.top = parseFloat(cLS.top) + mBackup.offset.top + 'px'; cLS.left = parseFloat(cLS.left) + mBackup.offset.left + 'px'; cLS.width = mBackup.width; cLS.height = mBackup.height; - + mBackup.style.parentNode.removeChild(mBackup.style); - + // 还原最大化前的固定状态 if (mBackup.pinned) { if (!this.fixedPin) { @@ -2328,9 +2431,9 @@ }; } else { this.unpin(); - }; - - + }; + + window.removeEventListener('resize', this.maximizeResizeHandler, true); this.cCommandM.classList.remove('fv-p-v-control-command-selected'); }, @@ -2345,10 +2448,10 @@ beforePin: function () {// pin的时候确保不要pin到可视范围外面去。 var controlLayer = this.controlLayer; var cLS = controlLayer.style; - + var wSize = getWindowSize(); - - // 如果pin的时候,标题栏不在浏览器窗口,调整top + + // 如果pin的时候,标题栏不在浏览器窗口,调整top var cLBCRect = controlLayer.getBoundingClientRect(); if (cLBCRect.top < 0) { @@ -2356,7 +2459,7 @@ } else if (cLBCRect.top > wSize.height - 50) { cLS.top = parseFloat(cLS.top) - (cLBCRect.top - (wSize.height - 50)) + 'px'; }; - + if (cLBCRect.left < 0) { cLS.left = parseFloat(cLS.left) - cLBCRect.left + 'px'; } else if (cLBCRect.left > wSize.width - 50) { @@ -2371,37 +2474,37 @@ var controlLayer = this.controlLayer; var cLS = controlLayer.style; - + // 针对iframe video audio 元素,直接设置fixed获取更好的效果 if (this.fixedPin) { this.pinData = {}; // 备份数据 - + var cLBCRect = controlLayer.getBoundingClientRect(); cLS.position = 'fixed'; cLS.top = cLBCRect.top + 'px'; cLS.left = cLBCRect.left + 'px'; - + var vS = this.video.style; - + this.pinData.position = vS.position; vS.setProperty('position', 'fixed', 'important'); } else { var scrolled = getScrolled(); var offset = { top: parseFloat(cLS.top), - left: parseFloat(cLS.left), + left: parseFloat(cLS.left), }; - + this.pinScrollHandler = function () { var scrolledA = getScrolled(); - + var top = scrolledA.y - scrolled.y + offset.top; cLS.top = top + 'px'; - + var left = scrolledA.x - scrolled.x + offset.left; cLS.left = left + 'px'; }; - + window.addEventListener('scroll', this.pinScrollHandler, true); }; }, @@ -2409,12 +2512,12 @@ if (!this.pinned) return; this.pinned = false; this.cCommandP.classList.remove('fv-p-v-control-command-selected'); - + if (this.fixedPin) { var controlLayer = this.controlLayer; var cLS = controlLayer.style; var scrolled = getScrolled(); - + cLS.position = 'absolute'; cLS.top = parseFloat(cLS.top) + scrolled.y + 'px'; cLS.left = parseFloat(cLS.left) + scrolled.x + 'px'; @@ -2429,7 +2532,7 @@ this.cCommandP.classList[(this.maximizeBackup.pinned = !this.maximizeBackup.pinned) ? 'add' : 'remove']('fv-p-v-control-command-selected'); return; }; - + if (this.pinned) { this.unpin(); } else { @@ -2440,27 +2543,27 @@ lightOn: function () { if (this.lighting) return; this.lighting = true; - + var lOS = this.fixedOverlayer.style; lOS.opacity = 0; this.lightOnTimerId = setTimeout(function () { lOS.display = 'none'; }, 200); - + this.cCommandL.classList.remove('fv-p-v-control-command-selected'); }, lightOff: function () { if (!this.lighting) return; this.lighting = false; - + var lOS = this.fixedOverlayer.style; lOS.display = 'block'; clearTimeout(this.lightOnTimerId); setTimeout(function () { lOS.opacity = prefs.popVideo.lightOff.opacity; }, 100); - + this.cCommandL.classList.add('fv-p-v-control-command-selected'); }, toggleLight: function () { @@ -2474,46 +2577,48 @@ restore: function (close) { // 从所有列表中删除自己 PopVideo.all.splice(PopVideo.all.indexOf(this), 1); - + var video = this.video; - + video.removeEventListener("wheel", this.scale.bind(this)); + video.removeEventListener("mousedown", this.videoMouseDown.bind(this), true); + this.unpin();// 解除scroll监听 this.exitMaximize();// 解除resize监听 - + // 移除各种监听 this.cLObserver.disconnect(); - + window.removeEventListener('resize', this.wResizeListener, true); mouseEventListener.remove('mouseenter', video, this.videoEnterHandler); document.removeEventListener(support.fullscreenchange, this.fullscreenchangeListener, true); - + // 移除dom this.fixedOverlayer.parentNode.removeChild(this.fixedOverlayer); this.controlLayer.parentNode.removeChild(this.controlLayer); - + // 还原video相关的domstyle; - + var vS = video.style; video.controls = this.vOriControls; var vOriStyle = this.vOriStyle; - + for (var pro in vOriStyle) { if (!vOriStyle.hasOwnProperty(pro)) continue; // console.log(pro); // chrome 用setProperty覆盖style上原有的值上存在important声明的时候 // 设置的值也必须有important声明,否则设置不上,并且就算有important声明,setProperty传递null或空字符串时,也无法删除原值。 //removeProperty移除有 important声明的时候,组合值必须一个一个移除。比如 removeProperty('padding') 无效,需要单独移除每个padding - + vS.removeProperty(pro); vS.setProperty(pro, vOriStyle[pro][0], vOriStyle[pro][1]); }; video.classList.remove('fv-p-v-video'); - - + + // 移除popVideo标记 delete video.fvPopVideo; - + if (this.vPEIsObject) { delete this.vPEIsObject.fvPopVideo; } else if (this.vCEIsPlugin) { @@ -2523,7 +2628,7 @@ // 还原video的祖先元素们的样式 var ancestors = this.ancestors; - + ancestors.forEach(function (ancestor) { var ancestorData = data(ancestor, 'data'); if (ancestorData.count == 1) { @@ -2539,13 +2644,13 @@ ancestorData.count -- ; }; }); - + // 还原特殊修正 if (this.removePopVideoFix) { this.removePopVideoFix(); }; - + // 是否是直接关闭视频 if (close) { new CloseVideo(video); @@ -2553,68 +2658,68 @@ // 平滑滚动到视频处 this.smoothScrollIntoView(video); }; - + }, setZIndex: function (force) { if (!force && PopVideo.topVideo == this) return; - + PopVideo.topVideo = this; - + this.fixedOverlayer.style.zIndex = PopVideo.maxIndex ++; this.controlLayer.style.zIndex = PopVideo.maxIndex; - + this.video.style.setProperty('z-index', PopVideo.maxIndex ++, 'important'); }, followControlLayer: function () { // 全屏状态禁止调整video的大小 if (this.isFullscreen) return; - + var video = this.video; - + if (!document.contains(video) || getComputedStyle(video).display == 'none') { this.restore(); return; }; - + var controlLayer = this.controlLayer; - + var cLS = controlLayer.style; var vS = video.style; - + vS.setProperty('height', cLS.height, 'important'); vS.setProperty('width', cLS.width, 'important'); - + this.cSizeInfo.textContent = 'W: ' + parseFloat(cLS.width) + ' H: ' + parseFloat(cLS.height); - + var cLCRect = getContentClientRect(controlLayer); var vCRect = getContentClientRect(video); - + // 使用top left 修正到和之前的位置一样 if (!video.style.transform) { vS.setProperty('top', parseFloat(vS.top) + cLCRect.top - vCRect.top + 'px', 'important'); vS.setProperty('left', parseFloat(vS.left) + cLCRect.left - vCRect.left + 'px', 'important'); } - + }, smoothScrollIntoView: function (elem) { if (!document.contains(elem) || getComputedStyle(elem).display == 'none') return; - + var eBCRect = elem.getBoundingClientRect(); var wSize = getWindowSize(); var scrolled = getScrolled(); var pros = {}; - + // y轴 if (eBCRect.top < 0 || eBCRect.top > wSize.height) { pros.scrollTop = Math.max(scrolled.y + eBCRect.top - 10, 0); }; - + // x轴 if (eBCRect.left < 0 || eBCRect.left > wSize.width) { pros.scrollLeft = Math.max(scrolled.x + eBCRect.left - 10, 0); }; - - + + var scrollFx = PopVideo.scrollFx; if (!scrollFx) { scrollFx = PopVideo.scrollFx = fx('html,body'); @@ -2623,17 +2728,17 @@ scrollFx.animate(pros,{ duration: 400, }); - + }, addStyle: function () { if (PopVideo.styleAdded) return; PopVideo.styleAdded = true; - + var style = document.createElement('style'); style.type = 'text/css'; style.id = 'flash-viewer-pop-video'; - + style.textContent = getMStr(function () { var cssText; /* @@ -2647,7 +2752,7 @@ visibility: hidden; overflow: hidden; } - + .fv-p-v-video { min-width: 0 !important; min-height: 0 !important; @@ -2672,7 +2777,7 @@ width: 100% !important; height: 100% !important; } - + .fv-p-v-light-off { position: fixed; top: 0; @@ -2707,7 +2812,7 @@ background-color: #535353; pointer-events: all; } - + .fv-p-v-control-title-bar { -moz-user-select: none; -webkit-user-select: none; @@ -2732,7 +2837,7 @@ cursor: -webkit-grabbing; cursor: grabbing; } - + .fv-p-v-control-title-bar-left-side { float: left; color: #AFAFAF; @@ -2757,7 +2862,7 @@ color: white; background: #535353; } - + .fv-p-v-control-resize-hand-n { height: 5px; top: 0; @@ -2818,7 +2923,7 @@ left: 0; cursor: nesw-resize } - + .fv-p-v-control-command { cursor: pointer; display: inline-block; @@ -2829,12 +2934,12 @@ background: transparent center no-repeat; opacity: 0.6; transition: opacity 0.2s ease-in-out; - + } .fv-p-v-control-command-selected { background-color: #404040; } - + .fv-p-v-control-command:hover { opacity: 1; } @@ -2854,16 +2959,16 @@ .fv-p-v-control-light { background-image:url("$light$") - } + } .fv-p-v-control-pin { background-image:url("$pin$"); - } + } .fv-p-v-control-maximize { background-image:url("$maximize$"); - } + } .fv-p-v-control-fullscreen { background-image:url("$fullscreen$"); - } + } .fv-p-v-control-restore { background-image:url("$restore$"); } @@ -2878,14 +2983,14 @@ .replace('$fullscreen$', icons.popVideo.fullscreen) .replace('$restore$', icons.popVideo.restore) .replace('$close$', icons.popVideo.close); - - + + var style2 = document.createElement('style'); PopVideo.movingHelperStyle = style2; - + style2.type = 'text/css'; style2.id = 'flash-viewer-pop-video-moving-helper'; - + style2.textContent = getMStr(function () { var cssText; /* @@ -2896,12 +3001,12 @@ */ }).cssText; var parentEle = document.head || document.documentElement; - + parentEle.appendChild(style); parentEle.appendChild(style2); style2.disabled = true;// style添加到文档之后disabled属性才有效 - + }, }; @@ -2916,66 +3021,66 @@ CloseVideo.prototype = { init: function () { this.addStyle(); - + var plugin = this.plugin; - + // 如果父元素是object,那么隐藏object元素 var pluginP; if ((pluginP = plugin.parentElement) && pluginP.nodeName == 'OBJECT') { plugin = pluginP; }; - + this.plugin = plugin; - + var pCStyle = getComputedStyle(plugin); - + // 设置一个占位符 var placeholder = document.createElement('fvspan'); placeholder.className = 'fv-c-v-placeholder'; placeholder.title = "点击还原视频"; - - placeholder.innerHTML = getMStr(function () { + + placeholder.innerHTML = createHTML(getMStr(function () { var innerHTML; /* */ - }).innerHTML; - + }).innerHTML); + // 复制样式 var phStyle = placeholder.style; var pros = [// 尽量拆开写,浏览器对复合值的返回不一样 'display', 'cssFloat', - 'position', 'zIndex', - 'top', 'bottom', 'left', 'right', - 'height', 'width', - 'borderTopWidth', 'borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', - 'paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight', - 'marginTop', 'marginBottom', 'marginLeft', 'marginRight', + 'position', 'zIndex', + 'top', 'bottom', 'left', 'right', + 'height', 'width', + 'borderTopWidth', 'borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', + 'paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight', + 'marginTop', 'marginBottom', 'marginLeft', 'marginRight', support.cssBoxSizing, ]; pros.forEach(function (pro) { phStyle[pro] = pCStyle[pro]; }); - + // iframe,audio,video默认display inline。但是普通元素的的话inline设置height width是无效的 if (phStyle.display == 'inline') { phStyle.display = 'inline-block'; }; - + // 如果是static定位那么改成relative定位,为占位符的内部关闭按钮做包含块 if (phStyle.position = 'static') { phStyle.position = 'relative'; phStyle.zIndex = 'auto'; }; - - + + // 监听占位符的点击操作 placeholder.addEventListener('click', function (e) { placeholder.parentNode.removeChild(placeholder); - + var target = e.target; if (target == this) {//显示视频 plugin.classList.remove('fv-c-v-hide-plugin'); @@ -2986,10 +3091,10 @@ plugin.parentNode.removeChild(plugin); }; }, true); - + // 插入占位符 var pluginNS = plugin.nextSibling; - var pluginP = plugin.parentNode; + pluginP = plugin.parentNode; if (pluginNS) { pluginP.insertBefore(placeholder, pluginNS); } else { @@ -3000,7 +3105,7 @@ var pNName = plugin.nodeName; var oSrc; plugin.classList.add('fv-c-v-hide-plugin'); - + if (/^(?:VIDEO|AUDIO)$/.test(pNName)) {// video audio标签,暂停播放 plugin.pause(); } else if (pNName == 'IFRAME') { @@ -3015,7 +3120,7 @@ var style = document.createElement('style'); style.type = 'text/css'; style.id = 'flash-viewer-close-video' - + style.textContent = getMStr(function () { var cssText; /* @@ -3031,7 +3136,7 @@ .fv-c-v-placeholder:hover { opacity: 1; } - + .fv-c-v-close { position: absolute; top: 5px; @@ -3055,7 +3160,7 @@ width: 24px; height: 24px; } - + .fv-c-v-hide-plugin { display: none !important; } @@ -3064,20 +3169,20 @@ .replace('$video$', icons.video); (document.head || document.documentElement).appendChild(style); - + }, }; - + // 浮动工具栏 function FloatBar() { this.init(); }; FloatBar.styleAdded = false; - + FloatBar.prototype = { hideDelay: 566, hidden: true, - + init: function () { this.addStyle(); @@ -3085,8 +3190,8 @@ var floatBar = document.createElement('fvspan'); this.floatBar = floatBar; floatBar.id = 'fv-f-b-container'; - - floatBar.innerHTML = getMStr(function () { + + floatBar.innerHTML = createHTML(getMStr(function () { var innerHTML; /* @@ -3136,7 +3241,7 @@ */ - }).innerHTML; + }).innerHTML); var butonOrder = prefs.floatBar.butonOrder.slice(0); butonOrder.push('download'); @@ -3147,7 +3252,7 @@ nativeMethods.forEach.call(floatBar.children, function (child) { var classlist = child.classList; if (!classlist.contains('fv-f-b-button')) return; - + var bName = butonOrder.shift(); if (!bName) { child.style.display = 'none'; @@ -3155,7 +3260,7 @@ }; classlist.add('fv-f-b-button-' + bName); - + var titleMap = { pop: '弹出视频', reload: '重载视频', @@ -3165,16 +3270,16 @@ ratio: '长宽比', bright: '亮度' }; - + child.title = titleMap[bName]; - + // 相关命令保存在dom上 child.dataset.clickCommand = bName; - + }); - + document.body.appendChild(floatBar); - + this.downloadButton = floatBar.querySelector('.fv-f-b-button-download'); var self = this; @@ -3203,34 +3308,34 @@ let ratio = e.target.value; self.target.style.transform = ratio ? `scale(${ratio})` : ""; }, true); - + // 监听按钮点击 floatBar.addEventListener('click', function (e) { if (e.button !=0) return;// 非左键点击 - + var plugin = self.target; - + // 如果点击按钮的时候,插件被删除了,或者被隐藏了 if (!document.contains(plugin) || getComputedStyle(plugin).display == 'none') { self.hide(); return; }; - + var bName = e.target.dataset.clickCommand; if (!bName) return; // console.log(bName); - + switch (bName) { // 点击了弹出命令按钮 case 'pop': self.hide(); - + new PopVideo(plugin); break; // 点击了重载命令按钮 case 'reload': self.hide(); - + var pNName = plugin.nodeName; if (/^(?:VIDEO|AUDIO)$/.test(pNName)) {// video 和 audio标签 plugin.load(); @@ -3247,18 +3352,18 @@ // 点击了关闭命令按钮 case 'close': self.hide(); - + new CloseVideo(plugin); break; case 'download': self.hide(); - + window.open('http://www.flvcd.com/parse.php?kw=' + encodeURIComponent(self.downloadUrl)); break; }; - + }, true); - + // 监听mouse进出 mouseEventListener.add('mouseleave', floatBar, function (e) { self.hideTimerId = setTimeout(function () { @@ -3273,10 +3378,10 @@ show: function () { if (!this.hidden) return; this.hidden = false; - + this.setPosition(); this.downloadable(); - + var fbs = this.floatBar.style; fbs.display = 'block'; setTimeout(function () { @@ -3286,7 +3391,7 @@ hide: function () { if (this.hidden) return; this.hidden = true; - + var fbs = this.floatBar.style; fbs.display = 'none'; fbs.opacity = 0; @@ -3294,7 +3399,7 @@ downloadable: function () {// 如果可下载,那么显示下载按钮 var plugin = this.target; var pNName = plugin.nodeName; - + if (!/^(?:OBJECT|EMBED)$/.test(pNName)) { this.downloadButton.style.display = 'none'; return; @@ -3302,10 +3407,10 @@ function convertFVars2Obj(fVars) { var ret = {}; - + fVars.split('&').forEach(function (item) { if (!item) return; - + var index = item.indexOf('='); if (index == -1) { if (item !=' ') { @@ -3317,22 +3422,22 @@ }; }; }); - + return ret; }; - + var src; var fVars; - + if (pNName == 'EMBED') { src = plugin.src; fVars = plugin.getAttribute('flashvars'); } else {// object src = plugin.data; - + nativeMethods.some.call(plugin.children, function (child) { if (child.nodeName != 'PARAM') return; - + var name = child.name.toLowerCase(); var value = child.value; switch (name) { @@ -3349,72 +3454,72 @@ if (src && fVars) return true; }); - + }; - + if (!src) { this.downloadButton.style.display = 'none'; return; }; - + fVars = fVars || ''; - + fVars = convertFVars2Obj(fVars); - + var qIndex; var hIndex; var qFVars; var key; - + qIndex = src.indexOf('?'); - + if (qIndex != -1) { qIndex ++; - + hIndex = src.indexOf('#'); hIndex = hIndex == -1 ? src.length : hIndex; - + qFVars = src.slice(qIndex, hIndex); - + qFVars = convertFVars2Obj(qFVars); // 合并参数 for (key in fVars) { if (!fVars.hasOwnProperty(key)) continue; - + qFVars[key] = fVars[key]; }; - + fVars = qFVars; }; var downloadUrl; - + var youkuId; var qqVid; var yytId; - + var srcOrigin = src.match(/[^:]+:\/\/[^/]+/)[0]; - + if (/\.youku\.com/i.test(srcOrigin)) {// youku if (youkuId = src.match(/\/sid\/(\w{13,})\//)) { youkuId = youkuId[1]; } else { youkuId = fVars.VideoIDS; }; - + if (youkuId) { downloadUrl = 'http://v.youku.com/v_show/id_' + youkuId + '.html'; }; } else if (/\.qq\.com/.test(srcOrigin)) {// 腾讯视频 qqVid = fVars.vid; - + if (qqVid) { downloadUrl = 'http://static.video.qq.com/TPout.swf?vid=' + qqVid; }; } else if (/player\.yinyuetai\.com/.test(srcOrigin)) {// 音悦台 - + if (yytId = src.match(/^https?:\/\/player\.yinyuetai\.com\/video\/swf\/(\d+)\//)) { downloadUrl = 'http://v.yinyuetai.com/video/' + yytId[1]; }; @@ -3423,7 +3528,7 @@ downloadUrl = 'http://v.yinyuetai.com/video/' + yytId; }; }; - + if (downloadUrl) { this.downloadUrl = downloadUrl; this.downloadButton.style.display = ''; @@ -3444,7 +3549,7 @@ var scrolled = getScrolled(); var fbs = this.floatBar.style; - + var setPosition = { top: function () { var top = targetPosi.top + scrolled.y; @@ -3486,11 +3591,11 @@ setPosition[floatBarPosi[1]](); }, start: function (target) { - + if (this.target) { mouseEventListener.remove('mouseleave', this.target, this.targetLeaveHandler); }; - + this.target = target; // console.log(target); @@ -3518,7 +3623,7 @@ mouseDown = true; lastRate = target.playbackRate; speedUpTimer = setTimeout(() => { - target.playbackRate = 3; + target.playbackRate = 5; target.play(); }, 500); lastPos = e.clientX; @@ -3535,7 +3640,6 @@ mouseDown = false; }, true); target.addEventListener('mousemove', function (e) { - clearTimeout(speedUpTimer); if (!mouseDown) return; if (!mouseMoving) { if (Math.abs(e.clientX - lastPos) > 10) { @@ -3543,6 +3647,7 @@ } return; } + clearTimeout(speedUpTimer); target.playbackRate = lastRate; target.pause(); target.currentTime += (e.clientX - lastPos) / 5; @@ -3578,12 +3683,12 @@ // chrome的鼠标事件发生顺序坑爹,鼠标从a进入b,a(leave) > b(enter) > a(out) > b(over) // firefox a(out) > a(leave) > b(over) > b(enter) - + // 注册鼠标离开插件后隐藏浮动栏 mouseEventListener.add('mouseleave', target, targetLeaveHandler); clearTimeout(this.hideTimerId); - + if (this.hidden) { this.showTimerId = setTimeout(function () { self.show(); @@ -3593,12 +3698,12 @@ this.downloadable(); this.setPosition(); }; - + }, addStyle: function () { if (FloatBar.styleAdded) return; FloatBar.styleAdded = true; - + var style = document.createElement('style'); style.type = 'text/css'; style.id = 'flash-viewer-float-bar'; @@ -3618,7 +3723,7 @@ display: none; padding: 5px; border-radius: 3px; - z-index: 999999999; + z-index: 2147483647; line-height: 0; font-size: 0; opacity: 0; @@ -3629,6 +3734,9 @@ #fv-f-b-container:hover { opacity: 1 !important; } + #fv-f-b-container:hover+#pv-float-bar-container { + display: none!important; + } .fv-f-b-button { display: inline-block; @@ -3714,8 +3822,8 @@ opacity: 1; pointer-events: all; } - - + + */ }).cssText.replace('$close$', icons.floatBar.close) .replace('$pop$', icons.floatBar.pop) @@ -3723,9 +3831,9 @@ .replace('$download$', icons.floatBar.download); (document.head || document.documentElement).appendChild(style); - }, + }, }; - + var plugFloatBar; // 监控鼠标是否摸到了插件 document.addEventListener('mouseover', function (e) { @@ -3736,19 +3844,38 @@ target = video[0]; tNName = 'VIDEO'; } - + // 可弹出元素 - if (!/^(?:OBJECT|EMBED|VIDEO|AUDIO|IFRAME)$/.test(tNName)) return; - + const availableNode = /^(?:OBJECT|EMBED|VIDEO|AUDIO|IFRAME|CANVAS)$/i; + if (!availableNode.test(tNName)) { + target = null; + if (document.elementsFromPoint) { + let elements = document.elementsFromPoint(e.clientX, e.clientY); + let checkLen = Math.min(elements.length, 5); + for (let i = 0; i < checkLen; i++) { + let ele = elements[i]; + if (!ele) continue; + if (availableNode.test(ele.nodeName)) { + target = ele; + tNName = ele.nodeName; + break; + } + } + } + if (!target) { + return; + } + } + // console.log(target); - + // popVideo中。 if (target.fvPopVideo) return; - + // 如果是插件判断是否为flash插件 if (/^(?:OBJECT|EMBED)$/.test(tNName)) { // console.log(target); - + if (tNName == 'EMBED') { if (!/^(?:application\/x-shockwave-flash|)$/.test(target.type) || !target.src) { return; @@ -3760,75 +3887,107 @@ }; }; }; + }; - // 如果flash太小,一般不是引用视频,不出现工具栏 - var cCRect = getContentClientRect(target); - if (!(cCRect.width >= prefs.floatBar.minSizeLimit.width && cCRect.height >= prefs.floatBar.minSizeLimit.height)) { - // console.log(cCRect); - return; - }; + // 如果flash太小,一般不是引用视频,不出现工具栏 + var cCRect = getContentClientRect(target); + if (!(cCRect.width >= prefs.floatBar.minSizeLimit.width && cCRect.height >= prefs.floatBar.minSizeLimit.height)) { + // console.log(cCRect); + return; }; - - + + if (!plugFloatBar) { plugFloatBar = new FloatBar(); }; - + plugFloatBar.start(target); - + }, true); - + }; - + var _isunsafe = null; + function isunsafe(){ + if (_isunsafe === null) { + try { + let escapeHTMLPolicy; + let win = typeof unsafeWindow == 'undefined'? window : unsafeWindow; + if (win.trustedTypes && win.trustedTypes.createPolicy) { + escapeHTMLPolicy = win.trustedTypes.createPolicy('fv_default', { + createScript: string => string + }); + } + function createScript(html) { + return escapeHTMLPolicy ? escapeHTMLPolicy.createScript(html) : html; + } + _isunsafe = unsafeWindow.eval(createScript("false")); + } catch (e) { + _isunsafe = true; + } + } + return _isunsafe; + } + // 如果发生通信的话,需要一个独一无二的ID var messageID = Math.random().toString(); - + // 把指定函数丢到真实环境中执行,规避一切脚本管理器乱七八糟的执行环境产生的奇葩Bug, // 特别是chrome上的那个坑爹tampermonkey。。。 function runInPageContext(fn) { if (typeof fn !== 'function') { return; - }; - + } + if (isunsafe()) { + fn(); + return; + } + // 创建一个脚本插入到pageContext执行 var script = document.createElement('script'); script.type = 'text/javascript'; - + // 去掉函数名,防止污染全局环境。 var sContent = ';(' + fn.toString().replace(/[^(]+/, 'function ') + ')(' + JSON.stringify(messageID) + ');'; - + // console.log('执行的脚本实际内容\n', sContent); - + script.textContent = sContent; // 检测html元素是否可访问 // scriptish @run-at document-start时,html元素在第一时间不可访问 var de = document.documentElement; - + if (de) { // console.log(de.outerHTML); - - de.appendChild(script); - de.removeChild(script); + + try { + de.appendChild(script); + de.removeChild(script); + } catch (e) { + fn(); + } } else { if(support.MutationObserver) new (window.MutationObserver || window.WebKitMutationObserver)(function (ms, observer) { - + var de = document.documentElement; if (de) { // console.log(de.outerHTML); - + observer.disconnect(); - - de.appendChild(script); - de.removeChild(script); + try { + de.appendChild(script); + de.removeChild(script); + } catch (e) { + fn(); + } }; }).observe(document, { childList: true, }); }; - + }; runInPageContext(contentScript); diff --git "a/FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/showcase.jpg" b/FlashViewer-HTML5 Video/showcase.jpg similarity index 100% rename from "FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/showcase.jpg" rename to FlashViewer-HTML5 Video/showcase.jpg diff --git "a/FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/README.md" "b/FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/README.md" deleted file mode 100644 index 9a8d7c5b218..00000000000 --- "a/FlashViewer-HTML5\350\247\206\351\242\221\345\242\236\345\274\272/README.md" +++ /dev/null @@ -1,10 +0,0 @@ -# [FlashViewer](https://github.com/hoothin/UserScripts/raw/master/FlashViewer-HTML5%E8%A7%86%E9%A2%91%E5%A2%9E%E5%BC%BA/flashViewer.user.js) -HTML5 视频增强脚本 - -原作者 NLF - -在 NLF 的脚本基础上添加了**自定义视频速度**、**更改视频比例**与**自定义亮度**功能并做了些许优化。弹出视频后在工具栏右侧即可看到。 - -长按三倍速,在视频上左右拖动鼠标微调进度。 - -![showcase](showcase.jpg) diff --git a/Invite Code Tool/README.md b/Invite Code Tool/README.md new file mode 100644 index 00000000000..9888ec8feb8 --- /dev/null +++ b/Invite Code Tool/README.md @@ -0,0 +1,5 @@ +Not maintained anymore +=== + +[注冊邀請碼助手](https://chrome.google.com/webstore/detail/ndmlflmkmohjoechiepcpflbljadmemp) +--- diff --git a/Kill Baidu AD/Kill Baidu AD.user.js b/Kill Baidu AD/Kill Baidu AD.user.js index 95031c3b776..565821eb870 100644 --- a/Kill Baidu AD/Kill Baidu AD.user.js +++ b/Kill Baidu AD/Kill Baidu AD.user.js @@ -1,38 +1,59 @@ // ==UserScript== // @name 百度广告(首尾推广及右侧广告)清理 -// @name:en Kill Baidu AD +// @name:zh-CN 百度广告(首尾推广及右侧广告)清理 // @name:zh-TW 百度廣告(首尾推廣及右側廣告)清理 +// @name:en Kill Baidu AD // @namespace hoothin -// @version 1.22 -// @description 彻底清理百度搜索(www.baidu.com)结果首尾的推广广告、二次顽固广告、右侧广告,并防止反复 +// @version 1.23.12 +// @description 彻底清理百度搜索(www.baidu.com)结果首尾的推广广告、二次顽固广告、右侧广告,去除重定向,删除百家号 +// @description:zh-CN 彻底清理百度搜索(www.baidu.com)结果首尾的推广广告、二次顽固广告、右侧广告,去除重定向,移除百家号 +// @description:zh-TW 徹底清理百度搜索(www.baidu.com)結果首尾的推廣廣告、二次頑固廣告、右側廣告,去除重定向,刪除百家號 // @description:en Just Kill Baidu AD -// @description:zh-TW 徹底清理百度搜索(www.baidu.com)結果首尾的推廣廣告、二次頑固廣告、右側廣告,並防止反復 // @author hoothin -// @include http*://www.baidu.com/* -// @include http*://m.baidu.com/* +// @match *://www.baidu.com/* +// @match *://m.baidu.com/* +// @match *://greasyfork.org/*/scripts/24192-* // @grant GM_xmlhttpRequest +// @grant GM_addStyle +// @grant GM_getValue +// @grant GM_setValue +// @grant GM_openInTab +// @grant GM_registerMenuCommand +// @grant GM_unregisterMenuCommand +// @connect * // @run-at document-start // @license MIT License // @compatible chrome 测试通过 // @compatible firefox 测试通过 // @compatible opera 未测试 // @compatible safari 未测试 -// @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation -// @contributionAmount 1 // ==/UserScript== (function() { 'use strict'; - var killBaijiaType=2; - var MO = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; - if(MO){ - var observer = new MO(function(records){ + var MO = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver, killBaijiaType = 1, killRight, killRightStyle, killRightRegister, hidePicture, keepBaijia, hidePictureStyle, hidePictureRegister, blackList; + killRight = !!GM_getValue("killRight"); + hidePicture = !!GM_getValue("hidePicture"); + keepBaijia = !!GM_getValue("keepBaijia"); + blackList = GM_getValue("blackList") || []; + if (MO) { + var observer = new MO(function(records) { records.map(function(record) { - if(record.addedNodes.length){ - [].forEach.call(record.addedNodes,function(addedNode) { + if (record.addedNodes.length) { + [].forEach.call(record.addedNodes, function(addedNode) { clearOneAD(addedNode); }); } + if (record.removedNodes.length) { + [].forEach.call(record.removedNodes, function(removedNode) { + if (killRight && removedNode === killRightStyle) { + document.head.appendChild(killRightStyle); + document.body.classList.add("killRight"); + } else if (hidePicture && removedNode === hidePictureStyle) { + document.head.appendChild(hidePictureStyle); + } + }); + } }); }); var option = { @@ -42,22 +63,22 @@ observer.observe(document, option); } - function checkBaijia(item){ - var itemHref=item.querySelector("a").href; - item.style.display="none"; - if(itemHref.indexOf("baidu.com")==-1)return; - var gmxhr=GM_xmlhttpRequest({ + function checkBaijia(item) { + var itemHref = item.querySelector("a").href; + item.style.display = "none"; + if (itemHref.indexOf("baidu.com") == -1) return; + var gmxhr = GM_xmlhttpRequest({ url: itemHref, headers: { "Accept": "text/html" }, method: "head", - onreadystatechange:function(response) { - if(response.readyState==4){ - if(response.finalUrl.indexOf("baijiahao.baidu.com")!=-1){ + onreadystatechange: function(response) { + if (response.readyState == 4) { + if (response.finalUrl.indexOf("baijiahao.baidu.com") != -1) { item.remove(); - }else{ - item.style.display=""; + } else { + item.style.display = ""; } gmxhr.abort(); } @@ -65,117 +86,491 @@ }); } - function clearAD(){ - if(!document.querySelectorAll)return; - var mAds=document.querySelectorAll(".ec_wise_ad,.ec_youxuan_card,.page-banner"),i; - for(i=0;idiv,#content_left>table"); - for(i=0;ispan"); + if (span && span.innerHTML == "广告") { item.remove(); - }else{ - var span=item.querySelector("div>span"); - if(span && span.innerHTML=="广告"){ + } + [].forEach.call(item.querySelectorAll("span,a"), function(span) { + if (span && (span.innerHTML == "广告" || span.getAttribute("data-tuiguang"))) { item.remove(); } - [].forEach.call(item.querySelectorAll("span,a"),function(span){ - if(span && (span.innerHTML=="广告" || span.getAttribute("data-tuiguang"))){ - item.remove(); + }); + if (killBaijiaType == 2) { + [].forEach.call(item.querySelectorAll("a>div>span+img"), function(img) { + if (img && /^https?:\/\/pic\.rmb\.bdstatic\.com/.test(img.src)) { + //checkBaijia(item); + !keepBaijia && item.remove(); } }); - if(killBaijiaType==2){ - [].forEach.call(item.querySelectorAll("a>div>span+img"),function(img){ - if(img && /^https?:\/\/pic\.rmb\.bdstatic\.com/.test(img.src)){ - //checkBaijia(item); - item.remove(); - } - }); - } } } + } - var eb = document.querySelectorAll("#content_right>table>tbody>tr>td>div"); - for(i=0;idiv>div>div"); - if(nr){ - var nra=nr.querySelectorAll("a"); - for(i=0;i.result"); + for (let i = 0; i < list.length; i++) { + let item = list[i]; + checkMobileItem(item); + } + } + + function clearAD() { + if (!document.querySelectorAll) return; + if (killRight) { + document.body.classList.add("killRight"); + } else document.body.classList.remove("killRight"); + removeEcAd(document); + var list = document.querySelectorAll("#content_left>div,#content_left>table"); + for (let i = 0; i < list.length; i++) { + let item = list[i]; + checkLeftItem(item); + } + + var eb = document.querySelectorAll("#content_right>table>tbody>tr>td>div"); + checkRightTable(eb); + + var nr = document.querySelector("#content_right>div>div>div"); + if (nr) { + checkRightAd(nr); + } + } + + function clearOneAD(ele) { + if (ele.nodeType != 1) return; + if (ele.classList.contains("ec-tuiguang") || ele.classList.contains("ec_wise_ad") || ele.classList.contains("ec_youxuan_card") || ele.classList.contains("page-banner")) { ele.remove(); return; } - if(ele.parentNode && ele.parentNode.id=="content_left" && (ele.nodeName=="DIV" || ele.nodeName=="TABLE")){ - let s = ele.getAttribute("style"); - if (s && /display:(table|block)\s!important/.test(s)) { - ele.remove(); - }else{ - var span=ele.querySelector("div>span"); - if(span && span.innerHTML=="广告"){ - ele.remove(); - } - [].forEach.call(ele.querySelectorAll("span,a"),function(span){ - if(span && (span.innerHTML=="广告" || span.getAttribute("data-tuiguang"))){ - ele.remove(); - } - }); - if(killBaijiaType==2){ - [].forEach.call(ele.querySelectorAll("a>div>span+img"),function(img){ - if(img && /^https?:\/\/pic\.rmb\.bdstatic\.com/.test(img.src)){ - //checkBaijia(ele); - ele.remove(); - } - }); + if (ele.parentNode && ele.parentNode.id == "content_left" && (ele.nodeName == "DIV" || ele.nodeName == "TABLE")) { + checkLeftItem(ele); + } else if (ele.parentNode && ele.parentNode.id == "content_right") { + if (ele.nodeName == "TABLE") { + var eb = ele.querySelectorAll("tbody>tr>td>div"); + checkRightTable(eb); + } + if (ele.nodeName == "DIV") { + var nr = ele.querySelector("div>div"); + if (nr) { + checkRightAd(nr); } } - }else if(ele.parentNode && ele.parentNode.id=="content_right"){ - if(ele.nodeName=="TABLE"){ - var eb = ele.querySelectorAll("tbody>tr>td>div"); - for(var i=0;idiv,#content_left>table"); + [].forEach.call(eles, e => {clearOneAD(e)}); + } + } + function initCss() { + killRightStyle && killRightStyle.parentNode && killRightStyle.parentNode.removeChild(killRightStyle); + GM_addStyle(` + body:not(.showBlocked) .blocked { + display: none!important; + } + body.showBlocked .blocked { + background: linen; + } + `); + if (killRight) { + killRightStyle = GM_addStyle(` + #content_right,[tpl="recommend_list"],#rs_new { + display: none; + } + #container.sam_newgrid { + width: calc(100% - 150px); + } + #container.sam_newgrid #content_left { + column-width: 590px; + width: 100%; + } + #content_left .result-op, #content_left .result { + page-break-inside: avoid; + } + `); + } + hidePictureStyle && hidePictureStyle.parentNode && hidePictureStyle.parentNode.removeChild(hidePictureStyle); + if (hidePicture) { + hidePictureStyle = GM_addStyle(` + #wrapper_wrapper { + background: rgba(228, 228, 228, 0.29); + } + #content_left .cos-color-bg-page { + background-color: unset; + } + #head:not(.s-skin-hasbg), + [tpl="app/head-tab"] { + background: #f7f7f7; + } + #container a, + #container a em { + text-decoration: auto!important; + } + #result_logo { + opacity: 0.75; + } + .cos-col[style*="width:33"],.cos-col[style*="width:25"],#content_left .c-span2,#content_left .c-span3,#content_left .c-span4,#content_left .c-span6>.c-img,[tpl="short_video"],[data-module="gp-peopleintro-img-click"],div[class^="img-container"],[data-module="normal-img"],[role="img"],.c-gap-inner-y-img,div[class*="only-multi-image"],.sc-image-rounded-tl-base>.cos-row>.cos-col:first-child,[class^="image-content"] { + display: none; + } + #wrapper>.result-molecule.new-pmd { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1); + } + .new-pmd .c-span9,.new-pmd .c-span6,.new-pmd .c-span10,.cos-col[style*="width:33"]+div,.cos-col[style*="width:25"]+div,.sc-image-rounded-tl-base>.cos-row>.cos-col:first-child+div { + width: 100%!important; + } + a,a:active,#content_right a { + color: rgb(80,80,80); + } + em { + color: #4E6EF2!important; + } + .c-container.result[tpl], .result-op.c-container[tpl], .result-op.xpath-log.new-pmd[tpl] { + transition: box-shadow 350ms; + box-shadow: 0 2px 5px 0px rgba(0, 0, 0, .1); + padding: 16px; + box-sizing: content-box; + } + .c-container.result[tpl] h3, .result-op.c-container[tpl] h3, .result-op.xpath-log.new-pmd[tpl] h3 { + padding-bottom: 10px; + border-bottom: 1px solid rgba(211, 211, 211, 0.63); + } + .c-group-wrapper { + box-shadow: unset; + margin-left: unset; + margin-right: unset; + } + .sc-image { + background-image: none !important; + } + .wrapper_new #head.no-box-shadow, .wrapper_new #head.no-box-shadow.s_down { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1); + } + [class*=card-shadow] { + box-shadow: unset!important; + } + #wrapper #content_left .op-soft-title h3>a:after, #wrapper #content_left .result h3>a:after, #wrapper #content_left .result-op h3>a.sc-link:after, #wrapper #content_left > .c-container h3>a:after, #wrapper #content_left .op-soft-title a:visited:after, #wrapper #content_left .result h3>a:visited:after, #wrapper #content_left .result-op h3>a.sc-link:visited:after, #wrapper #content_left > .c-container h3>a:visited:after { + content: ""; + position: relative; + border-bottom: 2px solid #3075d0; + bottom: -2px; + display: block; + left: 100%; + width: 0; + transition: width 300ms, left 300ms; + } + #wrapper #content_left .op-soft-title a:hover:after, #wrapper #content_left .result a:hover:after, #wrapper #content_left .result-op a.sc-link:hover:after, #wrapper #content_left > .c-container a:hover:after, #wrapper #content_left .op-soft-title a:visited:hover:after, #wrapper #content_left .result a:visited:hover:after, #wrapper #content_left .result-op a.sc-link:visited:hover:after, #wrapper #content_left > .c-container a:visited:hover:after { + left: 0; + width: 100%; + transition: width 300ms; + } + #wrapper #content_left > .c-container:hover, #wrapper #content_left > .result:hover, #wrapper #content_left > .result-op:hover { + box-shadow: 0 2px 10px 1px rgba(0, 0, 0, .3); + } + `); + } + } + + function checkBlackList(url, title) { + if (!blackList || !blackList.forEach) return false; + for (let i = 0; i < blackList.length; i++) { + try { + let isBlack = checkBlack(url, title, blackList[i]); + if (isBlack) return true; + } catch (e) { + console.log(e); + } + } + return false; + } + + function checkBlack(url, title, pattern) { + pattern = pattern && pattern.replace(/\s*#.*/, ""); + if (!pattern || !pattern.trim() || pattern.indexOf("#") === 0 || pattern.indexOf("!") === 0 || pattern.indexOf(" ") === 0 || pattern.indexOf("Update") === 0) return false; + if (pattern.indexOf("/") === 0) { + let match = pattern.match(/^\/(.*)\/(\w*)$/); + if (match) { + return new RegExp(match[1], match[2]).test(url); + } + } + if (pattern.indexOf("title") === 0) { + let match = pattern.replace("title", "").trim(); + if (match.indexOf("/") === 0) { + match = match.match(/^\/(.*)\/(\w*)$/); + if (match) { + return new RegExp(match[1], match[2]).test(title); + } + } else if (match.indexOf("=~") === 0) { + match = match.match(/^=~\s*\/(.*)\/(\w*)$/); + if (match) { + return new RegExp(match[1], match[2]).test(title); + } + } else if (match.indexOf("=") === 0) { + match = match.match(/^=\s*"(.*)"$/); + if (match) { + return title === match[1]; + } + } else if (match.indexOf("^=") === 0) { + match = match.match(/^\^=\s*"(.*)"$/); + if (match) { + return title.indexOf(match[1]) === 0; + } + } else if (match.indexOf("$=") === 0) { + match = match.match(/^\$=\s*"(.*)"$/); + if (match) { + return title.endsWith(match[1]); + } + } else if (match.indexOf("*=") === 0) { + match = match.match(/^\*=\s*"(.*)"$/); + if (match) { + return title.indexOf(match[1]) !== -1; + } + } + } + return matchPattern(url, pattern); + } + + function matchPattern(url, pattern) { + if (pattern === '') { + return true; + } + try { + let match = pattern.match(/^(\*|[\w-]+):\/{2,3}(?:(\*|\*\.[^/*]+|[^/*]+)\/)?(.*)$/); + if (!match) return url.indexOf(pattern) !== -1; + const [, scheme, host, path] = match; + const urlScheme = url.split(':')[0]; + const urlParam = new URL(url); + if (scheme === '*' || urlScheme === scheme) { + if (host !== '*') { + const urlHost = urlParam.hostname; + if (host.startsWith('*')) { + const hostPattern = host.slice(2); + if (!urlHost.endsWith(hostPattern)) return false; + } else { + if (urlHost !== host) return false; } } + const urlPath = urlParam.pathname + urlParam.search; + const pathRegex = new RegExp(`^${path.replace(/([\.\?])/g, '\\$1').replace(/\*/g, '.*')}$`); + return pathRegex.test(urlPath); } - if(ele.nodeName=="DIV"){ - var nr = ele.querySelector("div>div"); - if(nr){ - var nra=nr.querySelectorAll("a"); - for(i=0;i { + GM_unregisterMenuCommand(killRightRegister); + GM_unregisterMenuCommand(hidePictureRegister); + hidePicture = !hidePicture; + GM_setValue("hidePicture", hidePicture); + registerMenuCommand(); + }); + killRightRegister = GM_registerMenuCommand(killRight ? "✅ 恢复右边栏与布局" : "❌ 隐藏右边栏并多列显示", () => { + GM_unregisterMenuCommand(killRightRegister); + GM_unregisterMenuCommand(hidePictureRegister); + killRight = !killRight; + GM_setValue("killRight", killRight); + registerMenuCommand(); + }); + } + + function run() { + try { + if (location.host === "greasyfork.org") { + function initConfig() { + let parent = document.querySelector('#additional-info'); + let baseCon = document.createElement('div'); + baseCon.style.margin = '20px'; + parent.insertBefore(baseCon, parent.children[0]); + let checkIndex = 0; + let createCheckbox = (name, defaultValue) => { + let box = document.createElement('div'); + let checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.checked = defaultValue; + let id = 'stcnsc-checkbox' + checkIndex++; + checkbox.id = id; + let label = document.createElement('label'); + label.setAttribute('for', id); + label.innerText = name; + box.appendChild(checkbox); + box.appendChild(label); + baseCon.appendChild(box); + return checkbox; + }; + let hidePictureInput = createCheckbox('隐藏图片并简化样式', hidePicture); + let killRightInput = createCheckbox('隐藏右边栏并多列显示', killRight); + let keepBaijiaInput = createCheckbox('保留百家号', keepBaijia); + let importInput = document.createElement('textarea'); + importInput.placeholder = '订阅 uBlacklist 规则:如 https://git.io/ublacklist'; + importInput.style.width = '100%'; + importInput.style.marginBottom = '10px'; + baseCon.appendChild(importInput); + let blackListInput = document.createElement('textarea'); + blackListInput.placeholder = '*://*.12345.cn/*\n*://*.54321.com/*\n一行一条'; + blackListInput.style.width = '100%'; + blackListInput.style.minHeight = "60px"; + blackListInput.value = blackList.join("\n"); + baseCon.appendChild(blackListInput); + function saveBlackList() { + GM_setValue("blackList", blackList); } + let saveBtn = document.createElement('button'); + saveBtn.innerText = '保存'; + saveBtn.style.display = 'block'; + saveBtn.style.fontSize = 'x-large'; + saveBtn.style.fontWeight = 'bold'; + saveBtn.style.pointerEvents = 'all'; + saveBtn.style.cursor = 'pointer'; + saveBtn.addEventListener("click", function(e) { + hidePicture = hidePictureInput.checked; + killRight = killRightInput.checked; + keepBaijia = keepBaijiaInput.checked; + GM_setValue("hidePicture", hidePicture); + GM_setValue("killRight", killRight); + GM_setValue("keepBaijia", keepBaijia); + if (importInput.value) { + alert("读取规则中……"); + let importUrls = importInput.value.trim().split("\n"); + importUrls.forEach(url => { + url = url && url.trim(); + if (!url) return; + GM_xmlhttpRequest({ + url: url, + onload: function(res) { + let result = res.response || res.responseText; + if (!result) return; + blackList = blackList.concat(result.split("\n")); + blackList = blackList.filter((value, index) => blackList.indexOf(value) === index); + saveBlackList(); + blackListInput.value = blackList.join("\n"); + }, + onerror: function(e) { + console.log(e); + alert("网络错误,导入失败"); + } + }); + }); + } else { + blackList = blackListInput.value.split("\n"); + saveBlackList(); + } + alert("设置完毕"); + }); + baseCon.appendChild(saveBtn); + baseCon.appendChild(document.createElement("hr")); + } + if (document.readyState == "complete") { + initConfig(); + } else { + document.addEventListener("readystatechange", e => { + if (document.readyState == "complete") { + initConfig(); + } + }); } + return; } - }else{ - let eles=ele.querySelectorAll("#content_left>div,#content_left>table"); - [].forEach.call(eles, e=>{clearOneAD(e)}); - } + registerMenuCommand(); + GM_registerMenuCommand("👁️ 检查屏蔽元素", () => { + alert(`屏蔽元素数量:${document.body.querySelectorAll(".blocked").length}`) + document.body.classList.toggle("showBlocked"); + }); + GM_registerMenuCommand("🔧 打开设置页", () => { + GM_openInTab("https://greasyfork.org/scripts/24192", {active: true}); + }); + } catch(e) {} + clearAD(); + } + + if (document.readyState == "complete" || document.readyState == "interactive") { + run(); + } else { + document.addEventListener("readystatechange", e => { + if (document.readyState == "interactive") { + run(); + } + }); } - setTimeout(()=>{clearAD();},2000); })(); \ No newline at end of file diff --git a/Kill TieBa AD/README.md b/Kill TieBa AD/README.md new file mode 100644 index 00000000000..eb7b0482809 --- /dev/null +++ b/Kill TieBa AD/README.md @@ -0,0 +1,2 @@ +Not maintained anymore +=== diff --git "a/\346\226\260\346\265\252\346\263\225\347\224\262/messi.user.js" b/Messi/messi.user.js similarity index 100% rename from "\346\226\260\346\265\252\346\263\225\347\224\262/messi.user.js" rename to Messi/messi.user.js diff --git a/Pagetual/README.md b/Pagetual/README.md index 70c8278d25b..40854710e73 100644 --- a/Pagetual/README.md +++ b/Pagetual/README.md @@ -1,8 +1,8 @@ -[☯️](https://greasyfork.org/scripts/438684)東方永頁機 v.1.9.36.43 +[☯️](https://greasyfork.org/scripts/438684 "Install from greasyfork")東方永頁機 [v.1.9.37.131](https://hoothin.github.io/UserScripts/Pagetual/pagetual.user.js "Latest version") == -*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**Wiki**](https://pagetual.hoothin.com/en/)* +*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites !* -🔧Configuration page on wiki +🔧CONFIGURATION PAGE

    @@ -11,34 +11,121 @@ https://raw.githubusercontent.com/hoothin/UserScripts/master/Pagetual/pagetualRu
     
     ---
     
    +
    +    
    +        
    +    
    +    
    +        
    +        
    +        
    +    
    +    
    +        
    +    
    +    
    +        
    +    
    +    
    +        
    +    
    +    
    +        
    +    
    +
    Buy me a coffee if you get help💞

    PayPal

    Ko-fi

    愛發電
    Join 💬Discord
    Follow 🕊️twitter
    Send 📧email

    Made with ❤️ by Hoothin
    + +
    +

    Pagetual User-defined rules cases

    + ++ [TerenceCK pagetualRules](https://github.com/TerenceCK/pagetualRules/blob/main/happymh.json) ++ [Liu's-Pagetual-Rule](https://github.com/JPLiu/TestFiles/blob/main/UserScripts/Pagetual/Liu's-Pagetual-Rule.json) ++ [skofkyo pagetualRules_EX](https://github.com/skofkyo/AutoPager/blob/main/pagetualRules_EX.json) ++ [MovByte eToolsPagetual](https://gist.github.com/MovByte/a585456490d2e1c8ca815871db0887f7) +
    + +
    + +

    Call functionality from other extensions

    +
    + +1. **Immediately load next page** + +> Please send the following message body: +``` +command: "pagetual" +action: "nextPage" +detail: The number of pages to turn, 0 for unlimited, -1 to stop +``` + +> For example: +``` +window.postMessage({ action: 'nextPage', command: 'patetual', detail: 5 }, '*'); +``` + +2. **Set configuration** + +> Please send the following message body: +``` +command: "pagetual" +action: "config" +detail: The configuration item to be changed +``` + +> For example: +``` +window.postMessage({ action: 'config', command: 'patetual', detail: {enableWhiteList: true} }, '*'); +``` + +3. **Click load more button** + +> Please send the following message body: +``` +command: "pagetual" +action: "loadMore" +detail: null by default, 0 for unlimited checking load more button, -1 to stop +``` + +> For example: +``` +window.postMessage({ action: 'loadMore', command: 'patetual', detail: 0 }, '*'); +``` ++ **Receive messages** + +> When the next page is inserted, the following message body will be sent: +``` +{ + action: 'insert', + command: 'patetual' +} +``` + +> When the last page has been reached, the following message body will be sent: +``` +{ + action: 'lastPage', + command: 'patetual' +} +``` + +
    + [Rules example](https://pagetual.hoothin.com/en/rule.html) == ``` json [ { "name":"beauty", - "url":"^https://www\\.jpmn8\\.com/", + "url":"^https://www\\.jpmn-demo\\.com/", "pageElement":"p>img" }, { "name":"Expreview", - "url":"^https://www\\.expreview\\.com/", + "url":"^https://www\\.expreview-demo\\.com/", "loadMore":"span.load" } ] ``` - - - - - - - -
    Buy me a coffee if it helps you💞
    PayPal.MeKo-fi愛發電
    - -![donate](https://s2.loli.net/2023/02/06/afTMxeASm48z5vE.jpg) - name -- Name of the target site @@ -60,30 +147,34 @@ Example url of this rule "example": "https://abc.com" ``` -[url](https://pagetual.hoothin.com/en/rules/url.html) +[url](https://pagetual.hoothin.com/rules/url.html) -- RegExp for the url of target site -[nextLink](https://pagetual.hoothin.com/en/rules/nextLink.html) +[nextLink](https://pagetual.hoothin.com/rules/nextLink.html) -- -Selector or xpath of next page link, disable when set to 0, you can let it to be a array to contains multiple next links. +Selector or xpath of next page link, disable when set to 0, you can let it to be a array to contains multiple next links. You may leave it empty because it will be generated automatically. -[pageElement](https://pagetual.hoothin.com/en/rules/pageElement.html) +[pageElement](https://pagetual.hoothin.com/rules/pageElement.html) -- -Selector or xpath of main content which need to insert, you can let it to be a array to contains multiple page elements. +Selector or xpath of main content which need to insert, you can let it to be a array to contains multiple page elements. You may leave it empty because it will be generated automatically. -[enable](https://pagetual.hoothin.com/en/rules/enable.html) +[enable](https://pagetual.hoothin.com/rules/enable.html) -- 0 means stop action when all matched -[include](https://pagetual.hoothin.com/en/rules/include.html) +[include](https://pagetual.hoothin.com/rules/include.html) -- Selector or xpath of the element which must include -[exclude](https://pagetual.hoothin.com/en/rules/exclude.html) +[exclude](https://pagetual.hoothin.com/rules/exclude.html) -- Selector or xpath of the element which must not include -[action](https://pagetual.hoothin.com/en/rules/action.html) +[action](https://pagetual.hoothin.com/rules/action.html) -- 0 means load url and insert with static html, 1 means load by iframe so that dynamic javaScript code on page may effect, 2 means force insert iframe to bottom + +[loadMore](https://pagetual.hoothin.com/rules/loadMore.html) +-- +Selector of "load more" button you want to auto click diff --git a/Pagetual/items_all.json b/Pagetual/items_all.json index 09762c780d7..2b5769c0881 100644 --- a/Pagetual/items_all.json +++ b/Pagetual/items_all.json @@ -1,4 +1,993 @@ [ +{ + "resource_url": "http://wedata.net/items/86244", + "data": { + "insertBefore": "", + "pageElement": "//div[starts-with(@id, 'zone-twilight')]//div[@class='zone__content']", + "nextLink": "//a[@rel='next']", + "url": "^https://www\\.huffpost\\.com/", + "exampleUrl": "https://www.huffpost.com/news/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "HuffPost", + "created_at": "2024-08-31T07:10:48+09:00", + "updated_at": "2024-08-31T07:10:48+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86242", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='sysItemList aa']/ul", + "nextLink": "//div[@class='sysPagination']/ul/li[last()]/a", + "url": "^https://mirai-dora-world-online\\.com/", + "exampleUrl": "https://mirai-dora-world-online.com/ic" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "タックン君", + "name": "ドラえもん未来デパート オンライン", + "created_at": "2024-08-27T18:01:20+09:00", + "updated_at": "2024-08-27T18:01:20+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86240", + "data": { + "pageElement": "//div[@class='act-video-list']", + "nextLink": "//div[@class='pagination']/b/a[text()='次へ']\r\n", + "url": "^https://www.minnano-av\\.com/", + "exampleUrl": "https://www.minnano-av.com/actress218689.html" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "blekai", + "name": "みんなのAV.com", + "created_at": "2024-08-04T09:53:36+09:00", + "updated_at": "2024-08-18T14:37:33+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86239", + "data": { + "pageElement": "//div[@class='grid grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-5']", + "nextLink": "//span[@class='relative z-0 inline-flex shadow-sm']/a[last()][@rel='next']", + "url": "^https://missav\\.com/", + "exampleUrl": "https://missav.com/dm36/ja/actresses/%E4%B8%80%E4%B9%8B%E7%80%AC%E3%81%99%E3%81%9A" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "blekai", + "name": "MISSAV", + "created_at": "2024-08-02T17:07:28+09:00", + "updated_at": "2024-08-04T10:06:35+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86237", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='glry']", + "nextLink": "//a[img[@src='imgs/next-page.jpg']]", + "url": "^https://www\\.creativeuncut\\.com/", + "exampleUrl": "https://www.creativeuncut.com/art_kirbys-return-to-dream-land_a.html" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "Creative Uncut Video Game Art Library", + "created_at": "2024-07-21T21:42:18+09:00", + "updated_at": "2024-07-21T21:42:18+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86236", + "data": { + "insertBefore": "", + "pageElement": "id('NWrelart:Body release_list')[last()]/*", + "nextLink": "//img[@alt='next']/parent::a", + "url": "^https://www\\.cdjournal\\.com/", + "exampleUrl": "https://www.cdjournal.com/main/news/?type=new\r\nhttps://www.cdjournal.com/release/do/?target=cd&g=all&term=current" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "CDJournal.com", + "created_at": "2024-07-21T21:37:56+09:00", + "updated_at": "2024-07-21T21:37:56+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86235", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='c-arrows']/preceding-sibling::ul[@class='l-list']", + "nextLink": "descendant::a[contains(@class,'next')][last()]", + "url": "^https://footwearnews\\.com/", + "exampleUrl": "https://footwearnews.com/page/2/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "Footwear News", + "created_at": "2024-07-14T08:28:01+09:00", + "updated_at": "2024-07-14T08:28:01+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86234", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ',@class,' '),' layout-book-section ')]", + "nextLink": "//li[contains(concat(' ',@class,' '),' to-next ')]/a", + "url": "^https://comic-boost\\.com/", + "exampleUrl": "https://comic-boost.com/genre/\r\nhttps://comic-boost.com/tag/%E7%95%B0%E4%B8%96%E7%95%8C" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "comic boost 検索・一覧系", + "created_at": "2024-06-24T22:04:17+09:00", + "updated_at": "2024-06-24T22:04:17+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86233", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' browsetableinside ')]/ul", + "nextLink": "//a[contains(@class, 'active')][number()>0]/following-sibling::a[1]", + "url": "^https://xxxclub\\.(cc|to)/", + "exampleUrl": "https://xxxclub.cc/torrents/browse/0/\r\nhttps://xxxclub.to/torrents/browse/1/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "XXXClub", + "created_at": "2024-06-14T19:18:16+09:00", + "updated_at": "2024-06-14T19:18:16+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86231", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ', normalize-space(@class), ' '), ' article-body ')]|//div[contains(concat(' ', normalize-space(@class), ' '), ' gallery-image ')]", + "nextLink": "//a[contains(concat(' ', normalize-space(@class), ' '), ' --next ')]", + "url": "^https://shueisha\\.online/articles/", + "exampleUrl": "https://shueisha.online/articles/-/250383" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "altpragmatist", + "name": "集英社オンライン", + "created_at": "2024-06-03T11:08:46+09:00", + "updated_at": "2024-06-03T11:08:46+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86228", + "data": { + "pageElement": "//div[@class='p-content']/div[.//img]", + "nextLink": "//a[@rel='next']", + "url": "^https://filmarks\\.com/users/", + "exampleUrl": "https://filmarks.com/users/dpandaramu/clips\r\nhttps://filmarks.com/users/dpandaramu/followers" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "shaolon", + "name": "filmarks /users/", + "created_at": "2024-05-23T14:24:20+09:00", + "updated_at": "2024-08-06T22:08:35+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86227", + "data": { + "insertBefore": "", + "pageElement": "id('load_more_target')", + "nextLink": "//span[@aria-current='page'][number()>0]/following-sibling::a[1]", + "url": "^https://jp\\.cryptonews\\.com/", + "exampleUrl": "https://jp.cryptonews.com/news/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "jp.cryptonews.com", + "created_at": "2024-05-16T20:23:44+09:00", + "updated_at": "2024-05-16T20:23:44+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86226", + "data": { + "pageElement": "//div[@class=\"m-pager\"]/preceding-sibling::*[./preceding-sibling::*]", + "nextLink": "//ul[@class='m-pager-list']/li[./span]/following-sibling::li/a", + "url": "^https://www\\.fnn\\.jp/articles/-/\\d", + "exampleUrl": "https://www.fnn.jp/articles/-/652714" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "マンガ『会社をやめて馬主やります! アキコノユメヲ』 / fnnプライムオンライン", + "created_at": "2024-05-14T01:07:54+09:00", + "updated_at": "2024-05-14T01:25:52+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86223", + "data": { + "pageElement": "//div[@class='book-product-wrapper']", + "insertBefore": "//div[@class='width-container']/node()[last()]", + "nextLink": "//li[contains(concat(' ',@class,' '),' to-next ')]/a", + "url": "^https://comic-boost\\.com/content/", + "exampleUrl": "https://comic-boost.com/content/00050001" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "comic boost", + "created_at": "2024-04-23T03:06:24+09:00", + "updated_at": "2024-06-24T22:05:45+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86219", + "data": { + "insertBefore": "", + "pageElement": "//ul[contains(concat(' ', @class, ' '), ' usercar-list ')]", + "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']", + "url": "^https://minkara\\.carview\\.co\\.jp/usercar/", + "exampleUrl": "https://minkara.carview.co.jp/usercar/\r\nhttps://minkara.carview.co.jp/usercar/decotora/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "みんカラ /usercar/", + "created_at": "2024-04-03T16:29:47+09:00", + "updated_at": "2024-04-03T16:29:47+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86218", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='single_page_text']", + "nextLink": "//span[contains(@class, 'current')][number()>0]/following-sibling::a[1]", + "url": "^https://juventus-journal\\.com/archives/\\d+", + "exampleUrl": "https://juventus-journal.com/archives/129133" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "J-JOURNAL 記事", + "created_at": "2024-04-02T18:03:47+09:00", + "updated_at": "2024-04-02T18:03:47+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86217", + "data": { + "pageElement": "//div[contains(@class,'page-num') or @class='pagechunk']/preceding-sibling::*[self::ul[starts-with(@class, 'summary')] or .//a[contains(@href, '/userid/')]]", + "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']", + "url": "^https?://minkara\\.carview\\.co\\.jp/", + "exampleUrl": "https://minkara.carview.co.jp/car/mini/mini/partsreview/ https://minkara.carview.co.jp/car/mini/mini/note/ https://minkara.carview.co.jp/usercar/decotora/ https://minkara.carview.co.jp/note/?ci=1 https://minkara.carview.co.jp/partsreview/?bi=1&ci=1\r\n\r\nhttps://minkara.carview.co.jp/search/?q=f-zero&c=0\r\nhttps://minkara.carview.co.jp/blog/\r\nhttps://minkara.carview.co.jp/review/\r\n\r\nhttps://minkara.carview.co.jp/spot/unit.aspx\r\nhttps://minkara.carview.co.jp/like/1/\r\nhttps://minkara.carview.co.jp/select/\r\nhttps://minkara.carview.co.jp/summary/newly/\r\nhttps://minkara.carview.co.jp/summary/ranking/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "みんカラ", + "created_at": "2024-03-30T10:35:10+09:00", + "updated_at": "2024-04-02T22:19:12+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86216", + "data": { + "pageElement": "//div[@class='product-list product-list--collection product-list--with-sidebar']", + "nextLink": "//a[@rel='next']", + "url": "^https://jp\\.daisonet\\.com/", + "exampleUrl": "https://jp.daisonet.com/collections/electricity" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "タックン君", + "name": "ダイソーネットストア", + "created_at": "2024-03-20T15:18:37+09:00", + "updated_at": "2024-03-20T15:21:04+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86215", + "data": { + "insertBefore": "", + "pageElement": "//section[contains(concat(' ', @class, ' '), ' main-post-list ')]/ul", + "nextLink": "//div[contains(concat(' ', @class, ' '), ' pagination ')]/span[contains(@class, 'current')][number()>0]/following-sibling::a[1]", + "url": "^https://blog\\.domesoccer\\.jp/", + "exampleUrl": "https://blog.domesoccer.jp/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ドメサカブログ", + "created_at": "2024-03-11T18:17:35+09:00", + "updated_at": "2024-03-11T18:17:35+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86214", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' hentry ')]", + "nextLink": "//a[@rel='next']", + "url": "^https://worldfn\\.net/", + "exampleUrl": "https://worldfn.net/\r\nhttps://worldfn.net/search/%E6%97%A5%E6%9C%AC?p=2" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "WorldFootballNewS", + "created_at": "2024-03-11T18:12:36+09:00", + "updated_at": "2024-03-11T18:12:36+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86213", + "data": { + "pageElement": "//div[@class='theme-grid row justify-content-center']", + "nextLink": "//a[@data-toggle='page-jump']/following-sibling::a[1]", + "url": "^https?://themeplaza\\.art/", + "exampleUrl": "https://themeplaza.art/themes" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "タックン君", + "name": "Theme Plaza", + "created_at": "2024-03-09T17:58:59+09:00", + "updated_at": "2024-03-09T23:42:39+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86212", + "data": { + "insertBefore": "", + "pageElement": "//table[contains(@class, 'a-bordered')]/tbody/tr", + "nextLink": "//a[text()='次へ']", + "url": "^https?://www\\.amazon\\.co\\.jp/gp/css/gc/balance", + "exampleUrl": "https://www.amazon.co.jp/gp/css/gc/balance?ref_=ya_d_c_gc" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "foo2", + "name": "Amazon.co.jp - ギフトカード残高", + "created_at": "2024-03-07T23:04:44+09:00", + "updated_at": "2024-03-07T23:04:44+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86211", + "data": { + "pageElement": "//div[@class='pagesprit01']/preceding-sibling::*", + "nextLink": "//p[@class='next-page-link']/a", + "url": "^https://monomax\\.jp/archives/\\d+", + "exampleUrl": "https://monomax.jp/archives/213091/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "モノマックス(MonoMax)", + "created_at": "2024-03-03T20:05:40+09:00", + "updated_at": "2024-05-26T14:32:51+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86208", + "data": { + "insertBefore": "", + "pageElement": "id('article')/div[@id]", + "nextLink": "//ul[contains(concat(' ',@class,' '),' pagenav ')]/li[a/@class='active']/following-sibling::li/a", + "url": "^https://kyotolove\\.kyoto/", + "exampleUrl": "https://kyotolove.kyoto/I0000332/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "Kyoto Love. Kyoto KLK", + "created_at": "2024-02-06T02:30:53+09:00", + "updated_at": "2024-02-06T02:30:53+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86206", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='index_box']/*", + "nextLink": "//a[@class='novelview_pager-next']", + "url": "^https://(?:ncode|novel18)\\.syosetu\\.com/n[^/]+/", + "exampleUrl": "https://ncode.syosetu.com/n8799hu/\r\nhttps://novel18.syosetu.com/n6382hq/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "小説家になろう 作品目次", + "created_at": "2024-01-26T21:47:14+09:00", + "updated_at": "2024-01-26T21:47:14+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86205", + "data": { + "pageElement": "//section[@class='itemlist']/ul", + "nextLink": "//a[contains(@id,'lnkNext')]", + "url": "^https://minkara\\.carview\\.co\\.jp/search/", + "exampleUrl": "https://minkara.carview.co.jp/search/?q=f-zero&c=0" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "foo2", + "name": "みんカラ /search/", + "created_at": "2024-01-23T11:13:33+09:00", + "updated_at": "2024-04-03T18:34:02+09:00" +}, +{ + "data": { + "insertBefore": "", + "pageElement": "id('category_list')/ul/li", + "nextLink": "//div[@class='page_nav']/ul/li[@class='active']/following-sibling::a", + "url": "^https://www\\.megahobby\\.jp/products/", + "exampleUrl": "https://www.megahobby.jp/products/lookup/9/?sort=new" + }, + "created_by": "t_f_m'", + "name": "メガホビ MEGA HOBBY STATION メガハウスのホビー商品情報サイト", + "created_at": "2024-01-15T14:29:37+09:00", + "updated_at": "2024-01-15T14:29:37+09:00", + "resource_url": "http://wedata.net/items/86204", + "database_resource_url": "http://wedata.net/databases/AutoPagerize" +}, +{ + "resource_url": "http://wedata.net/items/86203", + "data": { + "insertBefore": "", + "pageElement": "id('ichiran-first')/div[@class='booklist']", + "nextLink": "id('pager')/a[@title='next page']", + "url": "^https://www\\.h-up\\.com/e/index\\.php", + "exampleUrl": "https://www.h-up.com/e/index.php?Series=S01&flg_searchmode=shousai&ORDERBY=DateShuppan&ORDERBY2=DateShotenhatsubai&SORTORDER=DESC&action_search_do=true&page=8" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "法政大学出版局", + "created_at": "2024-01-11T16:15:48+09:00", + "updated_at": "2024-01-11T16:15:48+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86201", + "data": { + "insertBefore": "", + "pageElement": "//div[@class=\"l-section\"]/a", + "nextLink": "//span[@class=\"mod-pager__next\"]/a", + "url": "^https://search\\.shinchosha\\.co\\.jp/search", + "exampleUrl": "https://search.shinchosha.co.jp/search?site=ZXE8UIDC&design=sitesearch&group=sitesearch&charset=UTF-8&query=%E3%83%AD%E3%83%B3%E3%83%89%E3%83%B3#result-list" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "新潮社 検索", + "created_at": "2024-01-04T17:12:40+09:00", + "updated_at": "2024-01-04T17:12:40+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86198", + "data": { + "insertBefore": "", + "pageElement": "id('wishlist')//table[contains(concat(' ', @class, ' '), ' n_worklist ')]/tbody/*", + "nextLink": "id('wishlist')/table[contains(concat(' ', @class, ' '), ' global_pagination ')]//a[.='次へ']", + "url": "https://www.dlsite.com/*/mypage/wishlist", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "htsign_0", + "name": "DLSite wishlist", + "created_at": "2023-12-26T03:03:02+09:00", + "updated_at": "2023-12-26T03:03:02+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86196", + "data": { + "pageElement": "//div[@id='divMain']", + "nextLink": "(//div[@class='pagebar'])[1]/a[last()-1]", + "url": "^https://comics888\\.com/", + "exampleUrl": "https://comics888.com/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "blekai", + "name": "Comics888", + "created_at": "2023-12-19T18:44:25+09:00", + "updated_at": "2023-12-20T16:38:15+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86194", + "data": { + "insertBefore": "", + "pageElement": "//ul[@class='boxContentList']/li", + "nextLink": "//link[@rel='next']", + "url": "^https://www\\.dmm\\.co(?:m|\\.jp)/mono/[^/]+/-/special/", + "exampleUrl": "https://www.dmm.co.jp/mono/figure/-/special/=/id=156/page=2/ https://www.dmm.com/mono/dvd/-/special/=/id=166/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "DMM/Fanza 通販 特集", + "created_at": "2023-12-09T00:05:09+09:00", + "updated_at": "2023-12-09T00:05:09+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86193", + "data": { + "insertBefore": "", + "pageElement": "id('post-list post4-list')[1]", + "nextLink": "//link[@rel='next']", + "url": "^https?://av-photograph\\.com/", + "exampleUrl": "http://av-photograph.com/\r\nhttp://av-photograph.com/blog-category-253.html" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "エロ画像まとめ 綺麗なお姉さん。", + "created_at": "2023-12-04T22:43:00+09:00", + "updated_at": "2023-12-04T22:43:00+09:00" +}, +{ + "data": { + "insertBefore": "", + "pageElement": "id('pagingNavi')/preceding-sibling::*", + "nextLink": "//span[number()>0]/following-sibling::a[1][number()>0]", + "url": "^https://toyotatimes\\.jp/", + "exampleUrl": "https://toyotatimes.jp/spotlights/1033.html" + }, + "created_by": "Griever3", + "resource_url": "http://wedata.net/items/86192", + "name": "トヨタイムズ 記事", + "created_at": "2023-12-03T14:53:53+09:00", + "updated_at": "2023-12-03T14:53:53+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize" +}, +{ + "resource_url": "http://wedata.net/items/86191", + "data": { + "insertBefore": "", + "pageElement": "//section[contains(concat(' ', @class, ' '), ' entry-content ')]", + "nextLink": "//li[contains(concat(' ', @class, ' '), ' next ')]/a", + "url": "^https://cancam\\.jp/archives/.", + "exampleUrl": "https://cancam.jp/archives/1162153" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "CanCam.jp 分割記事", + "created_at": "2023-11-26T21:56:24+09:00", + "updated_at": "2023-11-26T21:56:24+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86189", + "data": { + "pageElement": "//div[@class='searchinfo-mainwrap-center']/div[contains(concat(' ',@class,' '),' itemcolmn ')]/div", + "nextLink": "//a[contains(concat(' ',@class,' '),' next ')]", + "url": "^https://netmall\\.hardoff\\.co\\.jp/cate/", + "exampleUrl": "https://netmall.hardoff.co.jp/cate/00010012/?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "HARD OFF 通販 netmall", + "created_at": "2023-11-24T18:38:36+09:00", + "updated_at": "2024-04-21T11:38:31+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86188", + "data": { + "insertBefore": "", + "pageElement": "//ul[@class='store_list2']/li", + "nextLink": "//a[@rel='next']", + "url": "^https://www\\.hardoff\\.co\\.jp/shop/list/", + "exampleUrl": "https://www.hardoff.co.jp/shop/list/?pg=1&a=13&w=&t1=on&t3=on&t8=on&t5=on&t4=on&t6=on&t2=on&t9=on" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "HARD OFF 店舗", + "created_at": "2023-11-24T18:33:09+09:00", + "updated_at": "2023-11-24T18:33:09+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86187", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(@class,'movie-list')]/div[@class='item']", + "nextLink": "//a[@rel='next']", + "url": "^https://javdb\\.com/", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mogglyone", + "name": "JavDB", + "created_at": "2023-11-20T19:07:57+09:00", + "updated_at": "2023-11-20T19:07:57+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86185", + "data": { + "insertBefore": "", + "pageElement": "id('the_content')/node()[not(@class='related-links')]", + "nextLink": "//li[span[@aria-current='page']][number()>0]/following-sibling::li[1]/a", + "url": "^https://ananweb\\.jp/.", + "exampleUrl": "https://ananweb.jp/column/ikemendorama/498426/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ananweb 記事", + "created_at": "2023-11-13T20:54:27+09:00", + "updated_at": "2023-11-13T20:54:27+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86184", + "data": { + "insertBefore": "", + "pageElement": "//a[contains(concat(' ', @class, ' '), ' hentry ')][not(ancestor::aside)]", + "nextLink": "//div[@class='nav-next']/a", + "url": "^https://ananweb\\.jp/", + "exampleUrl": "https://ananweb.jp/\r\nhttps://ananweb.jp/tags/love/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ananweb", + "created_at": "2023-11-13T20:54:06+09:00", + "updated_at": "2023-11-13T20:54:06+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86183", + "data": { + "pageElement": "//div[@class='CtgryLink']|//div[@class='CtgryLink']/following-sibling::*[1]", + "comment": "If you do not specify the block element specified by CSS after the CtgryLink class in pageElement, the Design will be affected.", + "nextLink": "//span[@class='TargetPage']/following-sibling::a[1][number()>0]", + "url": "^https://[^/]+\\.weblio\\.jp/.", + "exampleUrl": "https://www.weblio.jp/category/\r\nhttps://kobun.weblio.jp/category/aa\r\nhttps://www.weblio.jp/category/people/tltdb/ha/10" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "Weblio 索引", + "created_at": "2023-11-08T19:30:31+09:00", + "updated_at": "2023-11-09T07:10:50+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86182", + "data": { + "insertBefore": "", + "pageElement": "//div[ul[@class='pagination']]/preceding-sibling::*[@class='view-content' or self::ol[contains(concat(' ', @class, ' '), ' search-results ')]]/*", + "nextLink": "//li[contains(concat(' ', @class, ' '), ' next ')]/a", + "url": "^https://netshop\\.impress\\.co\\.jp/", + "exampleUrl": "https://netshop.impress.co.jp/taxonomy/term/2896\r\nhttps://netshop.impress.co.jp/search/site/AI" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "ネットショップ担当者フォーラム", + "created_at": "2023-11-05T16:15:24+09:00", + "updated_at": "2023-11-05T16:15:24+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86181", + "data": { + "insertBefore": "", + "pageElement": "//article[contains(concat(' ', @class, ' '), ' mod-job-index-item ')]", + "nextLink": "//link[@rel='next']", + "url": "^https://type\\.jp/job-", + "exampleUrl": "https://type.jp/job-1/1001/?pathway=4" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "type.jp 転職・求人情報", + "created_at": "2023-11-04T20:09:37+09:00", + "updated_at": "2023-11-04T20:09:37+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86178", + "data": { + "insertBefore": "", + "pageElement": "//div[@data-a-name=\"orders\"]", + "nextLink": "//a[@aria-current='page']/parent::node()/following-sibling::li[1]/a", + "url": "^https://www.amazon.co.jp/vine/orders", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "OHM_79", + "name": "Amazon Vine 注文", + "created_at": "2023-10-16T18:54:49+09:00", + "updated_at": "2023-10-16T18:54:49+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86177", + "data": { + "insertBefore": "", + "pageElement": "//div[@data-a-name=\"vine-reviews\"]", + "nextLink": "//a[@aria-current='page']/parent::node()/following-sibling::li[1]/a", + "url": "^https://www.amazon.co.jp/vine/vine-reviews", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "OHM_79", + "name": "Amazon Vine レビュー", + "created_at": "2023-10-16T18:53:18+09:00", + "updated_at": "2023-10-16T18:53:18+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86176", + "data": { + "pageElement": "//div[@data-a-name=\"vine-items\"]", + "nextLink": "//a[@aria-current='page']/parent::node()/following-sibling::li[1]/a", + "url": "^https://www\\.amazon\\.co\\.jp/vine/vine-items", + "exampleUrl": "https://www.amazon.co.jp/vine/vine-items?queue=encore" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "OHM_79", + "name": "Amazon Vine 追加商品", + "created_at": "2023-10-08T11:22:25+09:00", + "updated_at": "2023-10-08T11:45:53+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86175", + "data": { + "insertBefore": "", + "pageElement": "//section[@class='cont']", + "nextLink": "//a[@rel='next']", + "url": "^https://www\\.kanaloco\\.jp/", + "exampleUrl": "https://www.kanaloco.jp/zenkoku" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "カナロコ", + "created_at": "2023-10-08T06:34:18+09:00", + "updated_at": "2023-10-08T06:34:18+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86174", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='card-ls-2-container']/a", + "nextLink": "//link[@rel='next']", + "url": "^https://kurukura\\.jp/", + "exampleUrl": "https://kurukura.jp/cars/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "KURU KURA(くるくら)", + "created_at": "2023-10-07T19:39:55+09:00", + "updated_at": "2023-10-07T19:39:55+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86173", + "data": { + "insertBefore": "", + "pageElement": "//ul[@class='articleBox__items']", + "nextLink": "//div[@class='next']/a", + "url": "^https://saita-puls\\.com/", + "exampleUrl": "https://saita-puls.com/category/101 https://saita-puls.com/search?k=a" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "saita(サイタ)", + "created_at": "2023-10-04T11:39:16+09:00", + "updated_at": "2023-10-04T11:39:16+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86172", + "data": { + "pageElement": "//div[@class='p2s1-banner-v']|//ul[@class='p1s1-list-v__main']", + "insertBefore": "//div[@class='content__main']/div[not(@class)]/following-sibling::node()[1]", + "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a", + "url": "^https://websunday\\.net/(news|comics)/", + "exampleUrl": "https://websunday.net/comics/\r\nhttps://websunday.net/news/\r\n" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "少年サンデー [WEBサンデー]", + "created_at": "2023-10-03T19:52:49+09:00", + "updated_at": "2023-10-20T16:06:03+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86171", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='news-list']/section", + "nextLink": "//link[@rel='next']", + "url": "^https://roundup-gamers\\.jp/.", + "exampleUrl": "https://roundup-gamers.jp/article/?page=2 https://roundup-gamers.jp/category/hardware/latest/?page=1" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "RUGs(ラグス)", + "created_at": "2023-10-02T19:43:31+09:00", + "updated_at": "2023-10-02T19:43:31+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86170", + "data": { + "insertBefore": "", + "pageElement": "//article", + "nextLink": "//div[@class='pagination']/span/following-sibling::a", + "url": "^https://choiyaki\\.com/", + "exampleUrl": "https://choiyaki.com/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "iPhoneと本と数学となんやかんやと", + "created_at": "2023-09-29T19:06:28+09:00", + "updated_at": "2023-09-29T19:06:28+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86169", + "data": { + "insertBefore": "", + "pageElement": "//div[@class=\"g1-collection-viewport\"]", + "nextLink": "//a[@class=\"next\"]", + "url": "^https://watchjavidol\\.com/", + "exampleUrl": "" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mechchorogi", + "name": "watchjavidol", + "created_at": "2023-09-26T17:09:51+09:00", + "updated_at": "2023-09-26T17:09:51+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86168", + "data": { + "insertBefore": "", + "pageElement": "//ul[@class='category__list']", + "nextLink": "//a[@rel='next']", + "url": "^https://www\\.lisani\\.jp/", + "exampleUrl": "https://www.lisani.jp/interview/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "リスアニ!", + "created_at": "2023-09-25T19:41:16+09:00", + "updated_at": "2023-09-25T19:41:16+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86167", + "data": { + "pageElement": "//div[@class='view-content']", + "nextLink": "//a[@rel='next']", + "url": "^https://research\\.impress\\.co\\.jp/", + "exampleUrl": "https://research.impress.co.jp/report/list https://research.impress.co.jp/topics/list https://research.impress.co.jp/search?keywords=a" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "インプレス総合研究所", + "created_at": "2023-09-25T14:43:21+09:00", + "updated_at": "2023-09-25T15:17:59+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86166", + "data": { + "pageElement": "//main/ul", + "nextLink": "//span[@class='current']/following-sibling::a[1]", + "url": "^https://www\\.gaji\\.jp/blog/", + "exampleUrl": "https://www.gaji.jp/blog/ https://www.gaji.jp/blog/author/emi-imanishi/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "Gaji-Laboブログ", + "created_at": "2023-09-25T14:27:14+09:00", + "updated_at": "2023-09-25T14:31:29+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86165", + "data": { + "insertBefore": "", + "pageElement": "id('page-nav')/preceding-sibling::div[contains(@class,'-entry') or contains(@id,'-archive')]", + "nextLink": "//a[@rel='next']", + "url": "^https://karapaia\\.com/", + "exampleUrl": "https://karapaia.com/ https://karapaia.com/archives/cat_50034588.html https://karapaia.com/tag/K9" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "カラパイア", + "created_at": "2023-09-24T11:09:10+09:00", + "updated_at": "2023-09-24T11:09:10+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86162", + "data": { + "insertBefore": "", + "pageElement": "//div[./a[@class='card-link']]|//div[@class='container']/h2/following-sibling::div[./following-sibling::div]", + "nextLink": "//li[@class='page-item']/following-sibling::li[last()]/a", + "url": "^https://claypier\\.com/", + "exampleUrl": "https://claypier.com/ https://claypier.com/?s=a https://claypier.com/category/apple/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "CLAYPIER", + "created_at": "2023-09-17T20:07:34+09:00", + "updated_at": "2023-09-17T20:07:34+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86153", + "data": { + "insertBefore": "", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' m-article-main-body ')]", + "comment": "有料会員限定につき動作未確認", + "nextLink": "//div[contains(concat(' ', @class, ' '), ' m-article-main-paginte-box ')]//a", + "url": "^https://premium\\.kai-you\\.net/article/\\d+", + "exampleUrl": "https://premium.kai-you.net/article/587" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "KAI-YOU Premium", + "created_at": "2023-09-05T22:11:37+09:00", + "updated_at": "2023-09-05T22:11:37+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86152", + "data": { + "pageElement": "//div[@class=\"info_list\"]/ul | //div[@class=\"blog_content\"]", + "nextLink": "//link[@rel=\"next\"]", + "url": "^https://fm-kyoto\\.jp/", + "exampleUrl": "https://fm-kyoto.jp/information\r\nhttps://fm-kyoto.jp/blog/sevencolors/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "atk", + "name": "α-STATION エフエム京都", + "created_at": "2023-09-05T15:05:02+09:00", + "updated_at": "2023-09-05T22:18:00+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86150", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='pokemon_list']/div", + "nextLink": "//ul[@class='pager']/li[@class='pager_next']/a", + "url": "^https://yakkun\\.com/[^/]+/zukan/search/", + "exampleUrl": "https://yakkun.com/sv/zukan/search/?move=33" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "ポケモン徹底攻略", + "created_at": "2023-08-22T18:12:10+09:00", + "updated_at": "2023-08-22T18:12:10+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86149", + "data": { + "insertBefore": "", + "pageElement": "//li[./article]", + "nextLink": "//ul[starts-with(@class,'styles_numbersList')]/li[div]/following-sibling::li/a[contains(@href, 'page=')]", + "url": "^https://friday\\.kodansha\\.co\\.jp/category/", + "exampleUrl": "https://friday.kodansha.co.jp/category/entertainment" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "FRIDAY デジタル カテゴリ", + "created_at": "2023-08-21T20:04:55+09:00", + "updated_at": "2023-08-21T20:04:55+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86148", + "data": { + "insertBefore": "", + "pageElement": "//div[@class='thumbnail-slide']/preceding-sibling::*", + "nextLink": "//a[@class='next']", + "url": "^https://toyokeizai\\.net/articles/photo/", + "exampleUrl": "https://toyokeizai.net/articles/photo/694833" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "kenzou_ogawa2", + "name": "東洋経済オンライン 画像", + "created_at": "2023-08-17T07:47:13+09:00", + "updated_at": "2023-08-17T07:47:13+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86146", + "data": { + "insertBefore": "", + "pageElement": "//div[@class=\"link-line\"]", + "nextLink": "//div[@class=\"page-next\"]/a", + "url": "^https://bbspirits\\.com/", + "exampleUrl": "https://bbspirits.com/wleague/w23072601bsr/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "eom", + "name": "バスケットボールスピリッツ", + "created_at": "2023-08-04T17:08:28+09:00", + "updated_at": "2023-08-04T17:08:28+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86145", + "data": { + "insertBefore": "", + "pageElement": "//article", + "nextLink": "//a[img[@aria-label='次のページへ']]", + "url": "^https://dengekibunko\\.jp/novecomi/novel/", + "exampleUrl": "https://dengekibunko.jp/novecomi/novel/16817330658837934226/16817330658880855335.html" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m'", + "name": "電撃ノベコミ+", + "created_at": "2023-08-04T14:27:14+09:00", + "updated_at": "2023-08-04T14:27:14+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86144", + "data": { + "pageElement": "//div[@class='lcont']/ul/li", + "nextLink": "//div[@class='pfooter']/a[@style][b]/following-sibling::a", + "url": "^https://(?:m|www)\\.nvhai8\\.com/", + "exampleUrl": "https://www.nvhai8.com/f_19/" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "unknown11", + "name": "女人吧", + "created_at": "2023-08-03T14:13:29+09:00", + "updated_at": "2023-08-03T14:15:14+09:00" +}, +{ + "resource_url": "http://wedata.net/items/86143", + "data": { + "pageElement": "//figure/*[self::figcaption or @class='photo-slide-img' or @class='photo-link-main']", + "nextLink": "descendant::figure[1]//a[@class='arrow-right-link'][not(contains(@href,'/1#gallery-img'))]", + "url": "^https://www\\.crank-in\\.net/(?:.*(gallery|person).*)/\\d+", + "exampleUrl": "https://www.crank-in.net/person/2729\r\nhttps://www.crank-in.net/gallery/column/76673\r\nhttps://www.crank-in.net/trend/gallery/life/125002" + }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Griever3", + "name": "クランクイン! - 写真 -", + "created_at": "2023-08-01T21:21:39+09:00", + "updated_at": "2023-08-03T09:54:41+09:00" +}, { "resource_url": "http://wedata.net/items/86142", "data": { @@ -148,7 +1137,7 @@ { "resource_url": "http://wedata.net/items/86122", "data": { - "pageElement": "id('main')//div[@class='panel-body']//div[contains(@class,'row-eq-height')]/div", + "pageElement": "id('main')//div[@class='panel-body']//div[contains(@class,'row-eq-height')]", "nextLink": "(//a[@rel='next'])[1]", "url": "^https://fantia\\.jp/fanclubs/\\d+/posts\r\n" }, @@ -156,7 +1145,7 @@ "created_by": "jawata", "name": "Fantia Club", "created_at": "2023-05-23T13:32:13+09:00", - "updated_at": "2023-05-23T13:48:11+09:00" + "updated_at": "2024-01-29T13:41:54+09:00" }, { "resource_url": "http://wedata.net/items/86116", @@ -190,31 +1179,30 @@ { "resource_url": "http://wedata.net/items/86110", "data": { - "insertBefore": "", - "pageElement": "//section[@class='content']", - "nextLink": "//ul[@class='pagePager']/li[contains(concat(' ',@class,' '),' pagePager__item-current ')]/following-sibling::li/a", + "pageElement": "(//section[@class='content']|//div[@class='fc content selector'])[last()]/*[not(preceding-sibling::div[.//li[contains(@class, 'pagePager__item-current')]])]|id('wym_custom_archive')", + "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a|//div[@class='wym_front_more']/a", "url": "^https://young-machine\\.com/", - "exampleUrl": "https://young-machine.com/2022/08/06/354094/" + "exampleUrl": "https://young-machine.com/latest-article/\r\nhttps://young-machine.com/page/2/\r\nhttps://young-machine.com/2022/08/06/354094/\r\nhttps://young-machine.com/2023/09/15/489213/\r\nhttps://young-machine.com/creator/2024/05/18/547866/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m'", "name": "WEBヤングマシン", "created_at": "2023-04-25T20:55:07+09:00", - "updated_at": "2023-04-25T20:55:07+09:00" + "updated_at": "2024-05-23T17:57:09+09:00" }, { - "resource_url": "http://wedata.net/items/86108", "data": { - "pageElement": "//div[contains(concat(' ', @class, ' '), ' viewableWrapper ')]/ul[li]", + "pageElement": "id('comment-main')/ul[.//article]", "nextLink": "//a[contains(@href, 'page=') and text()='次へ']", "url": "^https://news\\.yahoo\\.co\\.jp/articles/.+?/comments", "exampleUrl": "https://news.yahoo.co.jp/articles/009828f57dc6e4b74f4be1505978e2544fcace52/comments" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Griever3", + "resource_url": "http://wedata.net/items/86108", "name": "コメント一覧 - Yahoo!ニュース", "created_at": "2023-04-22T22:14:36+09:00", - "updated_at": "2023-07-25T19:37:06+09:00" + "updated_at": "2023-11-01T17:36:30+09:00" }, { "resource_url": "http://wedata.net/items/86107", @@ -741,16 +1729,17 @@ { "resource_url": "http://wedata.net/items/86055", "data": { - "pageElement": "//div[contains(concat(' ', @class, ' '), ' paginator ')]/preceding-sibling::div[.//figure]", - "nextLink": "//li[a[contains(concat(' ',@class,' '),' is-current ')]]/following-sibling::li/a", + "pageElement": "(//section[@class='section']|//section[@class='section']/div[@class='py-5'])[last()]/div[.//a[contains(@href, '/posts/')]//img]", + "considerationUrl": "https://www.chichi-pui.com/posts/following/", + "nextLink": "//a[text()='次へ' and contains(concat(' ', @class, ' '), ' button ')][not(id('js-image-posts-following'))]\r\n|//li[a[contains(concat(' ',@class,' '),' is-current ')]]/following-sibling::li[1]/a", "url": "^https://www\\.chichi-pui\\.com/", - "exampleUrl": "https://www.chichi-pui.com/posts/" + "exampleUrl": "https://www.chichi-pui.com/posts/\r\nhttps://www.chichi-pui.com/posts/?taste=illustration\r\nhttps://www.chichi-pui.com/users/AI_o_to_to/\r\nhttps://www.chichi-pui.com/illustration/posts/tags/%E7%99%BB%E5%B1%B1/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m'", "name": "chichi-pui ちちぷい", "created_at": "2023-01-19T21:51:13+09:00", - "updated_at": "2023-06-17T22:52:47+09:00" + "updated_at": "2023-09-02T20:29:39+09:00" }, { "resource_url": "http://wedata.net/items/86054", @@ -1090,17 +2079,16 @@ { "resource_url": "http://wedata.net/items/86024", "data": { - "insertBefore": "", - "pageElement": "id('mainwrap')/div[not(./p)][last()]/following-sibling::*[1]/preceding-sibling::*", + "pageElement": "id('mainwrap')/*[not(@class='unit-link-next' or @class='pagernav')]", "nextLink": "//link[@rel='next']", "url": "^https://beauty\\.oricon\\.co\\.jp/", - "exampleUrl": "https://beauty.oricon.co.jp/special/100852/" + "exampleUrl": "https://beauty.oricon.co.jp/special/100852/\r\nhttps://beauty.oricon.co.jp/special/102022/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa2", "name": "eltha", "created_at": "2022-12-09T15:57:28+09:00", - "updated_at": "2022-12-09T15:57:28+09:00" + "updated_at": "2023-09-22T20:13:22+09:00" }, { "resource_url": "http://wedata.net/items/86022", @@ -1458,18 +2446,18 @@ "updated_at": "2022-11-12T05:43:42+09:00" }, { - "resource_url": "http://wedata.net/items/85996", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { "pageElement": "//div[@class='c_content']/a", "nextLink": "(//a[@style='background:green;color:white']/following-sibling::a)[1]", - "url": "^https://(www|m).gril8\\.net/", - "exampleUrl": "https://www.gril8.net/body/202111/51485.htm" + "url": "^https://(www|m).nvhai8\\.com/", + "exampleUrl": "https://www.gril8.net/body/202111/51485.htm\r\nhttps://www.nvhai8.com/body/202111/51485.htm" }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "powertalent", + "resource_url": "http://wedata.net/items/85996", "name": "徐娘半老_成熟自拍照_美女生活照_美女自拍 - 女人吧", "created_at": "2022-11-11T15:20:11+09:00", - "updated_at": "2022-11-12T10:19:59+09:00" + "updated_at": "2023-08-03T14:09:18+09:00" }, { "resource_url": "http://wedata.net/items/85994", @@ -1930,7 +2918,8 @@ { "resource_url": "http://wedata.net/items/85949", "data": { - "pageElement": "//div[@class='contentsArea']", + "pageElement": "//div[@class='contentsArea']|//style", + "comment": "This does not work.", "nextLink": "//li[@class='active']/following-sibling::li/a", "url": "^https://magazine\\.cainz\\.com/article/", "exampleUrl": "https://magazine.cainz.com/article/82938" @@ -1939,7 +2928,7 @@ "created_by": "t_f_m'", "name": "となりのカインズさん 記事", "created_at": "2022-08-31T17:27:44+09:00", - "updated_at": "2022-08-31T17:34:04+09:00" + "updated_at": "2023-08-18T06:43:15+09:00" }, { "resource_url": "http://wedata.net/items/85948", @@ -1987,18 +2976,18 @@ "updated_at": "2022-08-27T22:53:13+09:00" }, { - "resource_url": "http://wedata.net/items/85945", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "pageElement": "descendant::div[@class='news_feed'][last()-1]/*[not(self::div)][last()]|descendant::div[@class='news_feed'][last()-1]/*[not(self::div)][last()]/preceding-sibling::*", + "pageElement": "//div[@class='newsArticle_pager']/preceding-sibling::*[not(@class='label_continue' or count(./div)>1)]", "nextLink": "//link[@rel='next']", "url": "^https://thetv.jp/news/detail/", - "exampleUrl": "https://thetv.jp/news/detail/1097587/\r\nhttps://thetv.jp/news/detail/1103073/p2/\r\nhttps://thetv.jp/news/detail/1026443/\r\nhttps://thetv.jp/news/detail/194206/" + "exampleUrl": "https://thetv.jp/news/detail/1097587/\r\nhttps://thetv.jp/news/detail/1103073/p2/\r\nhttps://thetv.jp/news/detail/1026443/\r\nhttps://thetv.jp/news/detail/194206/\r\nhttps://thetv.jp/news/detail/1150149/\r\nhttps://thetv.jp/news/detail/1150220/p2/" }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "autopagerizebanzai", + "resource_url": "http://wedata.net/items/85945", "name": "WEBザテレビジョン", "created_at": "2022-08-19T21:06:16+09:00", - "updated_at": "2022-10-20T16:36:46+09:00" + "updated_at": "2023-08-03T08:49:46+09:00" }, { "resource_url": "http://wedata.net/items/85944", @@ -2145,18 +3134,20 @@ "updated_at": "2022-06-08T14:20:34+09:00" }, { + "resource_url": "http://wedata.net/items/85928", "data": { - "pageElement": "//div[starts-with(@class,'styles_articleContent')]", + "pageElement": "//div[starts-with(@class,'styles_articleContent')][not(//div[@data-friday-nextpage-lead])]/div/*|descendant::div[@data-friday-nextpage-lead][1]/following-sibling::*", + "considerationUrl": "https://friday.kodansha.co.jp/article/327248?page=2", + "comment": "AutoPagerize でリクエスト先の script 要素が参照できないためページ番号が取得できず、page=2 を開いた際に内容が重複します(対応保留)", "nextLink": "//ul[starts-with(@class,'styles_numbersList')]/li[div]/following-sibling::li/a[contains(@href, 'page=')]", "url": "^https://friday\\.kodansha\\.co\\.jp/article/", - "exampleUrl": "https://friday.kodansha.co.jp/article/245048\r\nhttps://friday.kodansha.co.jp/article/307496" + "exampleUrl": "https://friday.kodansha.co.jp/article/245048\r\nhttps://friday.kodansha.co.jp/article/307496\r\nhttps://friday.kodansha.co.jp/article/327248" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m'", - "resource_url": "http://wedata.net/items/85928", "name": "FRIDAY デジタル", "created_at": "2022-06-02T17:22:53+09:00", - "updated_at": "2023-04-26T20:11:42+09:00" + "updated_at": "2023-08-21T18:56:56+09:00" }, { "resource_url": "http://wedata.net/items/85925", @@ -2231,19 +3222,18 @@ "updated_at": "2022-09-07T19:46:59+09:00" }, { + "resource_url": "http://wedata.net/items/85918", "data": { - "insertBefore": "", - "pageElement": "//div[@class=\"articleDetailTxtTit\"]", - "nextLink": "//a[@class=\"articleDetailNext\"]", + "pageElement": "//div[contains(concat(' ', normalize-space(@class), ' '), ' articleDetailTxt ')]", + "nextLink": "//li[contains(concat(' ', @class, ' '), ' pager-active ')]/following-sibling::li[1]/a", "url": "^https?://cinema\\.ne\\.jp/article/", "exampleUrl": "https://cinema.ne.jp/article/detail/49610" }, - "resource_url": "http://wedata.net/items/85918", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "brib2", "name": "cinemas PLUS", "created_at": "2022-05-17T08:47:09+09:00", - "updated_at": "2022-05-17T08:47:09+09:00", - "database_resource_url": "http://wedata.net/databases/AutoPagerize" + "updated_at": "2023-10-12T20:16:36+09:00" }, { "resource_url": "http://wedata.net/items/85916", @@ -2395,16 +3385,16 @@ { "resource_url": "http://wedata.net/items/85904", "data": { - "pageElement": "//ul[@class='rank' or @class='list']/li", - "nextLink": "//a[@title='次のページ']|//li[@class='next']/a", + "pageElement": "//ul[@class='rank' or @class='list']/li[not(contains(concat(' ', @class, ' '), ' ads '))]", + "nextLink": "//a[@title='次のページ']|//ul[contains(concat(' ', @class, ' '), ' pagenavi ')]/li[@class='next']/a", "url": "^https://blog\\.with2\\.net/", - "exampleUrl": "https://blog.with2.net/ranking/1400 https://blog.with2.net/search/blog?q=internet" + "exampleUrl": "https://blog.with2.net/ranking/1400 https://blog.with2.net/search/blog?q=internet\r\nhttps://blog.with2.net/ranking/1000" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "usave", "name": "BLOG RANKING 人気ブログランキング", "created_at": "2022-04-24T13:42:27+09:00", - "updated_at": "2022-04-25T05:19:54+09:00" + "updated_at": "2023-09-09T18:44:08+09:00" }, { "resource_url": "http://wedata.net/items/85903", @@ -3099,33 +4089,32 @@ "updated_at": "2022-01-24T19:38:36+09:00" }, { + "resource_url": "http://wedata.net/items/85824", "data": { - "insertBefore": "", "pageElement": "//div[@class=\"p-body-pageContent\"]//article[contains(concat(\" \", normalize-space(@class), \" \"), \" message \")]", "nextLink": "//link[@rel=\"next\"]", - "url": "^https?://www\\.racedepartment\\.com/threads/?", + "url": "^https?://www\\.(racedepartment\\.com|overtake\\.gg)/threads/?", "exampleUrl": "https://www.racedepartment.com/threads/assetto-corsa-latest-news-discussion.44395/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "awoifajwojfiawf", - "resource_url": "http://wedata.net/items/85824", - "name": "RaceDepartment Forums", + "name": "OverTake (Formerly RaceDepartment) Forums", "created_at": "2022-01-23T20:29:59+09:00", - "updated_at": "2022-01-23T20:29:59+09:00" + "updated_at": "2024-08-19T05:05:04+09:00" }, { "resource_url": "http://wedata.net/items/85823", "data": { "pageElement": "descendant::*[./*[@data-author]][1]/*[@data-author]", "nextLink": "//link[@rel=\"next\"]", - "url": "^https?://www\\.racedepartment\\.com/", + "url": "^https?://www\\.(racedepartment\\.com|overtake\\.gg)/", "exampleUrl": "https://www.racedepartment.com/downloads/categories/ac-tracks.8/\r\nhttps://www.racedepartment.com/search/15502838/?q=test&o=relevance\r\nhttps://www.racedepartment.com/\r\nhttps://www.racedepartment.com/whats-new/media/1019969/\r\nhttps://www.racedepartment.com/store/categories/fanatec.2/\r\n" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "awoifajwojfiawf", - "name": "RaceDepartment", + "name": "OverTake (Formerly RaceDepartment)", "created_at": "2022-01-23T20:15:46+09:00", - "updated_at": "2022-01-23T20:40:55+09:00" + "updated_at": "2024-08-19T05:04:54+09:00" }, { "resource_url": "http://wedata.net/items/85822", @@ -3660,32 +4649,31 @@ { "resource_url": "http://wedata.net/items/85783", "data": { - "insertBefore": "", "pageElement": "//article[@data-post-id]", - "nextLink": "//link[@rel='next']", + "nextLink": "//span[contains(@class, 'current')][number()>0]/following-sibling::span[1][number()>0]/a", "url": "^https://hollywoodlife\\.com/", - "exampleUrl": "https://hollywoodlife.com/" + "exampleUrl": "https://hollywoodlife.com/\r\nhttps://hollywoodlife.com/?s=test" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Griever3", "name": "Hollywood Life", "created_at": "2022-01-05T17:40:34+09:00", - "updated_at": "2022-01-05T17:40:34+09:00" + "updated_at": "2023-12-04T22:44:16+09:00" }, { "resource_url": "http://wedata.net/items/85782", "data": { - "insertBefore": "", - "pageElement": "//ul[contains(@class,\"editorial\") and contains(@class,\"compact\")]", + "pageElement": "id('river')//*[contains(concat(' ', @class, ' '), ' editorial ')]", + "comment": "cf. http://wedata.net/items/32471?rev=156036", "nextLink": "//a[@title=\"Next page\"]", "url": "^https://comicvine\\.gamespot\\.com/", - "exampleUrl": "https://comicvine.gamespot.com/characters/ https://comicvine.gamespot.com/series/ https://comicvine.gamespot.com/movies/ https://comicvine.gamespot.com/issues/" + "exampleUrl": "https://comicvine.gamespot.com/characters/ https://comicvine.gamespot.com/series/ https://comicvine.gamespot.com/movies/ https://comicvine.gamespot.com/issues/\r\nhttps://comicvine.gamespot.com/news/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa2", "name": "Comic Vine", "created_at": "2022-01-05T11:43:59+09:00", - "updated_at": "2022-01-05T11:43:59+09:00" + "updated_at": "2024-07-21T21:35:03+09:00" }, { "resource_url": "http://wedata.net/items/85781", @@ -3764,14 +4752,14 @@ "data": { "pageElement": "//article/descendant::*[count(//article//dl)=count(.//dl)][last()]", "nextLink": "//link[@rel=\"next\"]", - "url": "^https://(hisa-himi|basement-times|fis314|shoiblog|soratobunezumi)", - "exampleUrl": "https://hisa-himi.site/ https://basement-times.com/ https://fis314.com/category/diary/ https://shoiblog.com/page/2/ https://soratobunezumi.co.jp/media/" + "url": "^https://(hisa-himi|basement-times|fis314|shoiblog)", + "exampleUrl": "https://hisa-himi.site/ http://basement-times.com/category/posts/page/2/ https://fis314.com/category/diary/ https://shoiblog.com/page/2/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa2", "name": "Article dl", "created_at": "2022-01-02T13:56:46+09:00", - "updated_at": "2022-05-28T10:31:53+09:00" + "updated_at": "2023-09-13T09:16:48+09:00" }, { "resource_url": "http://wedata.net/items/85774", @@ -4079,14 +5067,14 @@ "data": { "pageElement": "//div[@class=\"interview-container\"]/div[position()>2]", "nextLink": "descendant::div[contains(@class,\"bottom\")][1]//a[not(contains(@class,\"prev\"))]", - "url": "^https://www\\.nintendo\\.co\\.jp/interview/", - "exampleUrl": "https://www.nintendo.co.jp/interview/switch-oled/index.html" + "url": "^https://www\\.nintendo\\.com/jp/interview/", + "exampleUrl": "https://www.nintendo.com/jp/interview/switch-oled/index.html" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m_", "name": "開発者に訊きました 任天堂", "created_at": "2021-10-08T23:17:05+09:00", - "updated_at": "2021-10-09T08:07:07+09:00" + "updated_at": "2024-04-07T07:46:34+09:00" }, { "resource_url": "http://wedata.net/items/85725", @@ -4105,16 +5093,16 @@ { "resource_url": "http://wedata.net/items/85724", "data": { - "pageElement": "descendant::div[contains(@class,'bgc_fff')][1]/*[contains(@class,'bg')]/following-sibling::*", + "pageElement": "//div[@class='bgc_fff mt7 cf' and div[@class='a_list02 cf']]/div", "nextLink": "//li[./span]/following-sibling::li[1]/a", "url": "^https://tvfan\\.kyodo\\.co\\.jp/", - "exampleUrl": "https://tvfan.kyodo.co.jp/feature-interview/interview\r\nhttps://tvfan.kyodo.co.jp/tag/%e6%ba%80%e5%b3%b6%e3%81%b2%e3%81%8b%e3%82%8a" + "exampleUrl": "https://tvfan.kyodo.co.jp/feature-interview/interview\r\nhttps://tvfan.kyodo.co.jp/tag/%e6%ba%80%e5%b3%b6%e3%81%b2%e3%81%8b%e3%82%8a\r\nhttps://tvfan.kyodo.co.jp/feature-interview/column" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa2", "name": "エンタメOVO(オーヴォ)", "created_at": "2021-10-03T20:07:28+09:00", - "updated_at": "2023-02-03T13:39:07+09:00" + "updated_at": "2023-09-10T20:20:49+09:00" }, { "resource_url": "http://wedata.net/items/85723", @@ -4350,16 +5338,16 @@ { "resource_url": "http://wedata.net/items/85690", "data": { - "pageElement": "//div[@class=\"post\"][not(//div[@class=\"article__content\"])]|//div[@class=\"article__content\"]/p[last()]/preceding-sibling::*", + "pageElement": "//div[@class=\"post\"][not(//div[@class=\"article__content\"])]|//div[@class=\"article__content\"]/*[not(contains(@class, '_CLS_'))]", "nextLink": "//li[@class=\"next\"]/a|//div[@data-max-page]/following-sibling::div[1]/a", "url": "^https://bestcarweb\\.jp/", - "exampleUrl": "https://bestcarweb.jp/news/296665\r\nhttps://bestcarweb.jp/feature/column/357128\r\nhttps://bestcarweb.jp/news/261798?prd=4\r\nhttps://bestcarweb.jp/latest\r\nhttps://bestcarweb.jp/newcar" + "exampleUrl": "https://bestcarweb.jp/news/296665\r\nhttps://bestcarweb.jp/feature/column/357128\r\nhttps://bestcarweb.jp/feature/column/357128?prd=4\r\nhttps://bestcarweb.jp/news/261798?prd=4\r\nhttps://bestcarweb.jp/latest\r\nhttps://bestcarweb.jp/newcar" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m_", "name": "ベストカー Web", "created_at": "2021-07-01T19:30:54+09:00", - "updated_at": "2022-01-21T20:52:13+09:00" + "updated_at": "2023-12-15T22:35:32+09:00" }, { "resource_url": "http://wedata.net/items/85687", @@ -4567,16 +5555,16 @@ { "resource_url": "http://wedata.net/items/85654", "data": { - "pageElement": "id('snsArea')/following-sibling::*[following-sibling::div[@class='pager_area'][ul]]", - "nextLink": "//li[@class='next']/a", - "url": "^https://motor-fan\\.jp/article/", - "exampleUrl": "https://motor-fan.jp/article/10019107" + "pageElement": "//div[contains(concat(' ',@class,' '),' p-entry-content ')]/*", + "nextLink": "//div[@class='nav-links']/span[@aria-current]/following-sibling::a", + "url": "^https://motor-fan\\.jp/(?:bikes/)?article/", + "exampleUrl": "https://motor-fan.jp/bikes/article/84701/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m_", "name": "motor-fan", "created_at": "2021-05-05T17:34:23+09:00", - "updated_at": "2021-05-05T17:35:34+09:00" + "updated_at": "2023-09-12T06:39:19+09:00" }, { "resource_url": "http://wedata.net/items/85653", @@ -4726,7 +5714,7 @@ { "resource_url": "http://wedata.net/items/85630", "data": { - "pageElement": "//main//div[contains(@class, 'kanren')]/*\r\n|//div[@class='entry-content']/h2[1]/preceding-sibling::*[1]/following-sibling::*", + "pageElement": "//main//aside/div[contains(@class, 'kanren')]/*\r\n|//div[@class='entry-content']/h2[1]/preceding-sibling::*[1]/following-sibling::*", "nextLink": "//link[@rel=\"next\"]", "url": "^https?://bushoojapan\\.com/", "exampleUrl": "https://bushoojapan.com/\r\nhttps://bushoojapan.com/bushoo/others/2022/01/05/87277" @@ -4735,7 +5723,7 @@ "created_by": "kenzou_ogawa", "name": "BUSHOO!JAPAN(武将ジャパン)", "created_at": "2021-03-29T13:14:01+09:00", - "updated_at": "2022-01-10T08:48:36+09:00" + "updated_at": "2024-05-02T20:14:59+09:00" }, { "resource_url": "http://wedata.net/items/85627", @@ -4841,17 +5829,17 @@ { "resource_url": "http://wedata.net/items/85609", "data": { - "insertBefore": "id('entry')/div[div[@class='pager']]", "pageElement": "id('entry')/div[(@class='block' and not(.//p[@class='hdg'])) or .//div[@class='thumb']]", + "insertBefore": "id('entry')/div[div[@class='pager']]", "nextLink": "//div[@class='pager']//a[@class='btn' and span/i[contains(concat(' ', @class, ' '), ' fa-arrow-right ')]]", - "url": "^https://www.chunichi.co.jp/article/.+?", - "exampleUrl": "" + "url": "^https://www\\.chunichi\\.co\\.jp/article/\\d+", + "exampleUrl": "https://www.chunichi.co.jp/article/947611/1" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "htsign00", "name": "中日新聞", "created_at": "2021-02-13T15:46:27+09:00", - "updated_at": "2021-02-13T15:46:27+09:00" + "updated_at": "2024-08-25T08:37:46+09:00" }, { "resource_url": "http://wedata.net/items/85606", @@ -5407,16 +6395,16 @@ { "resource_url": "http://wedata.net/items/85518", "data": { - "pageElement": "//*[./div[contains(@data-href,\"/article/\")]] | //div[@class=\"cmp-thmb002\"]/div[@class=\"wrp\"]", - "nextLink": "//div[@class=\"pager\"]//a[contains(span/text(),\"次\")] | //a[@class=\"lnk next\"]", + "pageElement": "//div[@class='pager']/../preceding-sibling::div[1][contains(@class, '-lst00')]", + "nextLink": "//div[@class='cmp-misc002']//li[@class='is-active']/following-sibling::li[1]/a[number() > 0]", "url": "^https?://www\\.tokyo-np\\.co\\.jp/", - "exampleUrl": "https://www.tokyo-np.co.jp/tokyo/t_news\r\nhttps://www.tokyo-np.co.jp/tokyo/hotweb/1\r\nhttps://www.tokyo-np.co.jp/article_photo/list?article_id=159660&pid=589621" + "exampleUrl": "https://www.tokyo-np.co.jp/tokyo/t_news\r\nhttps://www.tokyo-np.co.jp/tokyo/gururi/1\r\nhttps://www.tokyo-np.co.jp/f/photo/square\r\nhttps://www.tokyo-np.co.jp/beans/recipe\r\nhttps://www.tokyo-np.co.jp/tags/tag_movie\r\nhttps://www.tokyo-np.co.jp/english_articles/covid19_in_english\r\nhttps://www.tokyo-np.co.jp/tags/tokyo140th\r\nhttps://www.tokyo-np.co.jp/n/genpatsu\r\nhttps://www.tokyo-np.co.jp/event/list/buyou" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "brib2", "name": "東京新聞", "created_at": "2020-09-29T21:12:21+09:00", - "updated_at": "2022-02-14T14:20:36+09:00" + "updated_at": "2024-04-11T22:18:50+09:00" }, { "resource_url": "http://wedata.net/items/85517", @@ -5826,17 +6814,16 @@ { "resource_url": "http://wedata.net/items/85461", "data": { - "insertBefore": "", "pageElement": "//div[contains(@class, \"entry_main\")]/*", "nextLink": "//span[contains(concat(\" \",@class,\" \"), \" current \")]/following-sibling::a", - "url": "^https://travel\\.spot-app\\.jp/(?!page).+/\\d", + "url": "^https://travel\\.spot-app\\.jp/", "exampleUrl": "https://travel.spot-app.jp/seisyun18kippu_ekimemo/2/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa", "name": "SPOT 個別記事", "created_at": "2020-08-29T21:48:33+09:00", - "updated_at": "2020-08-29T21:48:33+09:00" + "updated_at": "2023-08-17T14:43:08+09:00" }, { "resource_url": "http://wedata.net/items/85458", @@ -6296,7 +7283,8 @@ { "resource_url": "http://wedata.net/items/85419", "data": { - "pageElement": "descendant::h2[1]/following-sibling::div[last()]", + "pageElement": "//div[@class='article']/div[contains(@class, 'wysiwyg')]/*[not(@id='rectangle')]|//div[@class='archive_list']", + "comment": "個別記事の2ページ目が正しく取得できていなかったのを修正", "nextLink": "//span[@aria-current]/following-sibling::a[1]", "url": "^https?://sirabee\\.com/", "exampleUrl": "https://sirabee.com/2020/07/22/20162374456/\r\nhttps://sirabee.com/genre/%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%93%e3%83%a5%e3%83%bc/" @@ -6305,7 +7293,7 @@ "created_by": "brib2", "name": "ニュースサイトしらべぇ", "created_at": "2020-07-24T10:53:21+09:00", - "updated_at": "2021-12-11T10:36:37+09:00" + "updated_at": "2023-09-21T18:54:07+09:00" }, { "resource_url": "http://wedata.net/items/85418", @@ -6528,16 +7516,17 @@ { "resource_url": "http://wedata.net/items/85401", "data": { - "pageElement": "//p[@class=\"main-txt\"] | //*[@class=\"photo-link-main\" or @class=\"photo-caption\"] | //ul[@class=\"tag-list\"]", - "nextLink": "//link[@rel=\"next\"] | //a[contains(span/text(),\"もっと見る\")]", + "pageElement": "//div[./p[@class='main-txt']] | //ul[@class='tag-list' or @class='news_list_area']", + "considerationUrl": "https://www.crank-in.net/interview/131280/3", + "nextLink": "//a[@class='this_page']/following-sibling::a[1] | //a[@href and contains(span/text(),'もっと見る')]", "url": "^https?://www\\.crank-in\\.net/", - "exampleUrl": "https://www.crank-in.net/column/78253/1\r\nhttps://www.crank-in.net/gallery/column/76673\r\nhttps://www.crank-in.net/news" + "exampleUrl": "https://www.crank-in.net/column/78253/1\r\nhttps://www.crank-in.net/news\r\nhttps://www.crank-in.net/trend/report" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "brib2", "name": "クランクイン!", "created_at": "2020-07-06T18:13:04+09:00", - "updated_at": "2020-07-06T21:08:35+09:00" + "updated_at": "2023-08-02T15:59:11+09:00" }, { "resource_url": "http://wedata.net/items/85400", @@ -7022,15 +8011,15 @@ "resource_url": "http://wedata.net/items/85355", "data": { "pageElement": "//article[contains(@class, 'hentry')]", - "nextLink": "//span[@class='current']/following-sibling::a[1]|//link[@rel='prev']", + "nextLink": "//span[@class='current']/following-sibling::a[1]|//a[@rel='prev']", "url": "^https://mon-ja\\.net/.+", - "exampleUrl": "https://mon-ja.net/articles/page/2/ https://mon-ja.net/200523-01_bicycle-insurance-mandatory/" + "exampleUrl": "https://mon-ja.net/articles/page/2/ https://mon-ja.net/tag/nisa/page/2/ https://mon-ja.net/200523-01_bicycle-insurance-mandatory/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kenzou_ogawa", "name": "MonJa", "created_at": "2020-05-28T12:12:09+09:00", - "updated_at": "2020-07-16T20:42:07+09:00" + "updated_at": "2024-03-17T21:40:07+09:00" }, { "resource_url": "http://wedata.net/items/85354", @@ -8357,19 +9346,18 @@ "updated_at": "2020-01-15T06:17:32+09:00" }, { - "name": "アニメイトタイムズ 記事", + "resource_url": "http://wedata.net/items/85188", "data": { + "pageElement": "//div[@class='c-pagination']/preceding-sibling::*[not(contains(@class, 'c-banner-common'))]", + "nextLink": "//a[contains(concat(\" \",@class,\" \"),\" is-current \")]/following-sibling::a", "url": "^https://www\\.animatetimes\\.com/news/", - "pageElement": "//div[contains(concat(\" \",@class,\" \"),\" news-content \")]", - "exampleUrl": "https://www.animatetimes.com/news/details.php?id=1578293211", - "insertBefore": "", - "nextLink": "//a[contains(concat(\" \",@class,\" \"),\" is-current \")]/following-sibling::a" + "exampleUrl": "https://www.animatetimes.com/news/details.php?id=1578293211\r\nhttps://www.animatetimes.com/news/details.php?id=1696194873\r\nhttps://www.animatetimes.com/news/details.php?id=1696194873&p=2" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m_", - "resource_url": "http://wedata.net/items/85188", + "name": "アニメイトタイムズ 記事", "created_at": "2020-01-06T19:03:06+09:00", - "updated_at": "2020-01-06T19:03:06+09:00" + "updated_at": "2023-10-03T19:45:03+09:00" }, { "resource_url": "http://wedata.net/items/85187", @@ -9287,17 +10275,17 @@ }, { "resource_url": "http://wedata.net/items/82197", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "pageElement": "//div[@class=\"p-cardList\"]", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' p-cardList ')]", "nextLink": "//link[@rel=\"next\"]", "url": "^https?://www\\.businessinsider\\.jp/.", - "exampleUrl": "https://www.businessinsider.jp/articles/" + "exampleUrl": "https://www.businessinsider.jp/articles/\r\nhttps://www.businessinsider.jp/moneyplan/" }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "BUSINESS INSIDER JAPAN", "created_at": "2019-06-29T07:18:24+09:00", - "updated_at": "2022-01-19T17:21:08+09:00" + "updated_at": "2024-04-13T22:27:04+09:00" }, { "resource_url": "http://wedata.net/items/82196", @@ -9373,18 +10361,17 @@ }, { "resource_url": "http://wedata.net/items/82190", - "name": "FRaU", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2019-06-24T20:28:25+09:00", "data": { - "exampleUrl": "https://gendai.ismedia.jp/articles/-/65430", - "url": "^https://gendai\\.ismedia\\.jp/articles/-/", "pageElement": "//div[@class=\"articleBody\"]", - "insertBefore": "", - "nextLink": "//div[@class=\"nextpageTitle\"]/a" + "nextLink": "//div[@class=\"nextpageTitle\"]/a", + "url": "^https://gendai\\.media/articles/-/", + "exampleUrl": "https://gendai.media/articles/-/65430" }, - "created_at": "2019-06-24T20:28:25+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "FRaU", + "created_at": "2019-06-24T20:28:25+09:00", + "updated_at": "2024-06-15T08:37:58+09:00" }, { "data": { @@ -9474,18 +10461,18 @@ }, { "resource_url": "http://wedata.net/items/82182", - "name": "はてなブックマーク ユーザーのブックマーク", - "created_by": "hatenaZZZ", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2019-06-12T20:52:01+09:00", "data": { - "exampleUrl": "https://b.hatena.ne.jp/hatebookmarking/", + "pageElement": "dummy//ul[contains(@class,\"js-user-bookmark-item-list\")]", + "comment": "はてなブックマークのデフォルトページャライズ機能と重複実行されてしまうため。試験運用して問題なさそうならこのアイテムごと削除したい。", + "nextLink": "dummy//span[@class=\"centerarticle-pager-next\"]/a[@href]", "url": "^https?://b\\.hatena\\.ne\\.jp/", - "pageElement": "//ul[contains(@class,\"js-user-bookmark-item-list\")]", - "insertBefore": "", - "nextLink": "//span[@class=\"centerarticle-pager-next\"]/a[@href]" + "exampleUrl": "https://b.hatena.ne.jp/hatebookmarking/" }, - "created_at": "2019-06-12T20:52:01+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "hatenaZZZ", + "name": "はてなブックマーク ユーザーのブックマーク", + "created_at": "2019-06-12T20:52:01+09:00", + "updated_at": "2023-08-24T13:48:54+09:00" }, { "resource_url": "http://wedata.net/items/82181", @@ -10289,18 +11276,17 @@ }, { "resource_url": "http://wedata.net/items/82101", - "name": "キミラノ", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2019-03-19T17:46:08+09:00", "data": { - "exampleUrl": "https://kimirano.jp/tag/15", + "pageElement": "//ul[@class=\"std_lists\" or @class=\"read_lists\"]/li", + "nextLink": "//div[@class=\"pagination\"]/div[@class=\"ctr_next\"]/a", "url": "^https://kimirano\\.jp/", - "pageElement": "//ul[@class=\"std_lists\"]/li", - "insertBefore": "", - "nextLink": "//div[@class=\"pagination\"]/div[@class=\"ctr_next\"]/a" + "exampleUrl": "https://kimirano.jp/tag/15\r\nhttps://kimirano.jp/kakuyomu_contents/" }, - "created_at": "2019-03-19T17:46:08+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "キミラノ", + "created_at": "2019-03-19T17:46:08+09:00", + "updated_at": "2023-10-16T15:55:42+09:00" }, { "resource_url": "http://wedata.net/items/82099", @@ -10742,16 +11728,16 @@ { "resource_url": "http://wedata.net/items/82058", "data": { - "pageElement": "//div[contains(@class, 'articleBody')]/*[contains(@class, 'pagination')][1]/preceding-sibling::*[not(contains(@class, 'adRectangle'))]", - "nextLink": "//li[contains(@class, \"p-pagination_list_item\") and contains(@class, \"-next\")]/a[@aria-label=\"次のページへリンク\"]", + "pageElement": "//div[contains(concat(' ',@class,' '), ' articleBody ')]/node()[self::nav or contains(.,'.p-article_watchBox')]/preceding-sibling::*", + "nextLink": "//li[contains(concat(' ',@class,' '), ' -next ')]/a[@aria-label=\"次のページへリンク\"]", "url": "^https://business\\.nikkei\\.com/", - "exampleUrl": "https://business.nikkei.com/atcl/seminar/19/00030/032200460/\r\nhttps://business.nikkei.com/atcl/gen/19/00533/030600006/\r\nhttps://business.nikkei.com/atcl/gen/19/00297/041900122/" + "exampleUrl": "https://business.nikkei.com/atcl/seminar/19/00030/032200460/\r\nhttps://business.nikkei.com/atcl/gen/19/00533/030600006/\r\nhttps://business.nikkei.com/atcl/gen/19/00297/041900122/\r\nhttps://business.nikkei.com/atcl/gen/19/00562/012900029/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "love_livedoor", "name": "日経ビジネス電子版", "created_at": "2019-01-16T14:26:53+09:00", - "updated_at": "2023-05-06T08:53:05+09:00" + "updated_at": "2024-01-31T17:56:47+09:00" }, { "resource_url": "http://wedata.net/items/82056", @@ -10759,13 +11745,13 @@ "pageElement": "//*[./*[last()][self::div] and ./*[last()-1][self::table]]/table[last()]/tbody/tr", "nextLink": "id(\"mainContents\")//td[@align=\"center\"]/b/following-sibling::a[1]|//a[@rel=\"next\"]", "url": "^https://(?:backnumber\\.)?dailyportalz\\.jp/(?!dpq)", - "exampleUrl": "https://backnumber.dailyportalz.jp/cs/link/backnumber/1.htm https://dailyportalz.jp/kiji?ccm_paging_p=1&ccm_order_by=h.publicDate&ccm_order_by_direction=desc https://dailyportalz.jp/writer/kijilist/163" + "exampleUrl": "https://backnumber.dailyportalz.jp/cs/link/backnumber/1.htm https://dailyportalz.jp/writer/kijilist/163" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "デイリーポータルZ バックナンバー ライタープロフィール", "created_at": "2019-01-12T10:22:25+09:00", - "updated_at": "2022-10-27T10:17:31+09:00" + "updated_at": "2023-08-24T07:14:20+09:00" }, { "resource_url": "http://wedata.net/items/82055", @@ -10816,14 +11802,14 @@ "pageElement": "//*[contains(@class,\"autopagerize_page_element\")]", "comment": "Without this, the archive design will be corrupted. Probably because autopagerize_insert_before is not in the right place.", "nextLink": "//a[@rel=\"next\"]", - "url": "^https://(www\\.)?(srdk|onaji|e-aidem|hotpepper|fanthology|text\\.sanographix|techtekt|tech\\.nri-net|times\\.hrbrain|kaelife|inside\\.pixiv)", - "exampleUrl": "https://srdk.rakuten.jp/archive https://onaji.me/archive https://www.e-aidem.com/ch/listen/archive https://www.hotpepper.jp/mesitsu/archive https://www.fanthology.me/archive https://text.sanographix.net/ https://techtekt.persol-career.co.jp/archive https://tech.nri-net.com/archive/category/Technology https://times.hrbrain.co.jp/?page=1640070118 https://kaelife.hondaaccess.jp/archive https://inside.pixiv.blog/archive" + "url": "^https://(www\\.)?(soredoko|onaji|e-aidem|hotpepper|text\\.sanographix|techtekt|tech\\.nri-net|times\\.hrbrain|kaelife|inside\\.pixiv|tech\\.uzabase)", + "exampleUrl": "https://soredoko.jp/archive https://onaji.me/archive https://www.e-aidem.com/ch/listen/archive https://www.hotpepper.jp/mesitsu/archive https://text.sanographix.net/ https://techtekt.persol-career.co.jp/archive https://tech.nri-net.com/archive/category/Technology https://times.hrbrain.co.jp/?page=1640070118 https://kaelife.hondaaccess.jp/archive https://inside.pixiv.blog/archive https://tech.uzabase.com/archive/category/blog" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "autopagerize_insert_before measures", "created_at": "2018-12-29T20:24:47+09:00", - "updated_at": "2022-03-01T19:43:06+09:00" + "updated_at": "2023-10-08T17:02:57+09:00" }, { "resource_url": "http://wedata.net/items/82051", @@ -11072,20 +12058,6 @@ }, "created_at": "2018-11-20T23:05:03+09:00" }, -{ - "name": "東京2020特集 - スポーツナビ", - "data": { - "url": "^https://2020\\.yahoo\\.co\\.jp/column/", - "pageElement": "//section[@class=\"article__body\"]", - "exampleUrl": "https://2020.yahoo.co.jp/column/detail/201810250001-spnavi/", - "nextLink": "//a[span/text()=\"次へ\"]" - }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_by": "jpmyke", - "resource_url": "http://wedata.net/items/82021", - "created_at": "2018-11-16T14:01:22+09:00", - "updated_at": "2020-04-04T12:21:03+09:00" -}, { "resource_url": "http://wedata.net/items/82020", "name": "Us Weekly", @@ -11132,17 +12104,17 @@ }, { "resource_url": "http://wedata.net/items/82017", - "name": "アルファポリス Web小説 エピソード", - "created_by": "usefulpocket", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-11-11T22:52:29+09:00", "data": { - "exampleUrl": "https://www.alphapolis.co.jp/novel/638137573/992069999/episode/423049", - "url": "^https://(www\\.)?alphapolis\\.co\\.jp/novel/*", - "pageElement": "//div[id(\"main\")]/div[contains(@class,\"novel-body\")]", - "nextLink": "//div[id(\"main\")]/div[contains(@class,\"episode-navigation\")][2]/a[contains(@class,\"next\")]" + "pageElement": "id('main')/div[contains(@class, 'novel-body')]", + "nextLink": "//a[contains(concat(' ', @class, ' '), ' next ')]", + "url": "^https://(www\\.)?alphapolis\\.co\\.jp/novel/\\d+", + "exampleUrl": "https://www.alphapolis.co.jp/novel/638137573/992069999/episode/423049" }, - "created_at": "2018-11-11T22:46:12+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "usefulpocket", + "name": "アルファポリス Web小説 エピソード", + "created_at": "2018-11-11T22:46:12+09:00", + "updated_at": "2024-07-02T20:39:29+09:00" }, { "resource_url": "http://wedata.net/items/82011", @@ -11160,18 +12132,18 @@ }, { "resource_url": "http://wedata.net/items/82010", - "name": "日本将棋連盟", - "created_by": "jigendaddy_be", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-11-08T16:32:48+09:00", "data": { - "exampleUrl": "https://www.shogi.or.jp/column/ https://www.shogi.or.jp/tsume_shogi/everyday/", + "pageElement": "//div[div[@class='pagingElements01']]/preceding-sibling::*[.//a]", + "considerationUrl": "https://www.shogi.or.jp/column/2023/09/abema2023_0902_playback.html", + "nextLink": "//li[@class='active'][number()>0]/following-sibling::li[1]/a", "url": "^https://www\\.shogi\\.or\\.jp/", - "pageElement": "//div[@class=\"section04\"]//div[@class=\"inner\"]|//ul[contains(@class,\"section04\")]/li", - "insertBefore": "", - "nextLink": "//li[@class=\"next\"]/a" + "exampleUrl": "https://www.shogi.or.jp/column/ https://www.shogi.or.jp/tsume_shogi/everyday/\r\nhttps://www.shogi.or.jp/event/search/?from=&to=&keyword=" }, - "created_at": "2018-11-08T16:32:48+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "jigendaddy_be", + "name": "日本将棋連盟", + "created_at": "2018-11-08T16:32:48+09:00", + "updated_at": "2023-09-13T19:36:08+09:00" }, { "resource_url": "http://wedata.net/items/82007", @@ -11218,18 +12190,17 @@ }, { "resource_url": "http://wedata.net/items/82004", - "name": "CanCam.jp", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-10-25T22:23:43+09:00", "data": { - "exampleUrl": "https://cancam.jp/archives/577651", + "pageElement": "id(\"primary\")/*", + "nextLink": "//a[@rel=\"prev\"]", "url": "^https://cancam\\.jp/archives/", - "pageElement": "id(\"primary\")", - "insertBefore": "", - "nextLink": "//a[@rel=\"prev\"]" + "exampleUrl": "https://cancam.jp/archives/577651" }, - "created_at": "2018-10-25T22:23:43+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "CanCam.jp", + "created_at": "2018-10-25T22:23:43+09:00", + "updated_at": "2023-11-26T21:58:17+09:00" }, { "resource_url": "http://wedata.net/items/82003", @@ -12228,18 +13199,18 @@ }, { "resource_url": "http://wedata.net/items/81754", - "name": "pixiv series", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-06-06T16:35:02+09:00", "data": { - "exampleUrl": "https://www.pixiv.net/user/10232794/series/12174", + "pageElement": "//li[.//a[contains(@href,'/artworks/')]]", + "comment": "This does not work.", + "nextLink": "//button[@aria-current='true']/following-sibling::a[1]", "url": "^https://www\\.pixiv\\.net/user/\\d+/series/", - "pageElement": "//div[@class=\"works\"]/*", - "insertBefore": "", - "nextLink": "//a[@rel=\"next\"]" + "exampleUrl": "https://www.pixiv.net/user/10232794/series/12174" }, - "created_at": "2018-06-06T16:35:02+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "pixiv series", + "created_at": "2018-06-06T16:35:02+09:00", + "updated_at": "2023-09-09T19:16:08+09:00" }, { "data": { @@ -13439,17 +14410,18 @@ }, { "resource_url": "http://wedata.net/items/81586", - "name": "Ecosia.org Search", - "created_by": "WolframH", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-08-06T18:20:54+09:00", "data": { - "exampleUrl": "https://www.ecosia.org/search?q=hallo", - "url": "^https://(www\\.)?ecosia\\.org/search", - "pageElement": "//div[@class='card-desktop card-web']/*", - "nextLink": "//a[contains(@class, 'pagination-next')]" + "pageElement": "//section[@data-test-id='mainline']/div[.//article]", + "insertBefore": "//div[contains(concat(' ', @class, ' '), ' mainline__footer ')]", + "nextLink": "//a[@data-test-id='next-button']", + "url": "^https://www\\.ecosia\\.org/search\\?", + "exampleUrl": "https://www.ecosia.org/search?q=hallo" }, - "created_at": "2017-10-06T02:06:47+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "WolframH", + "name": "Ecosia.org Search", + "created_at": "2017-10-06T02:06:47+09:00", + "updated_at": "2024-07-07T14:03:45+09:00" }, { "resource_url": "http://wedata.net/items/81585", @@ -13512,16 +14484,16 @@ { "resource_url": "http://wedata.net/items/81579", "data": { - "pageElement": "//article/section/div[2]", + "pageElement": "//article/section/div[contains(@class, 'kijiwrap')]", "nextLink": "//link[@rel=\"next\"]", "url": "^https?://kinmaweb\\.jp/archives/", - "exampleUrl": "https://kinmaweb.jp/archives/70121" + "exampleUrl": "https://kinmaweb.jp/archives/70121 https://kinmaweb.jp/archives/70121/2" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "キンマweb", "created_at": "2017-09-30T13:23:47+09:00", - "updated_at": "2022-01-01T17:05:39+09:00" + "updated_at": "2024-08-18T08:03:14+09:00" }, { "resource_url": "http://wedata.net/items/81578", @@ -13754,7 +14726,8 @@ { "resource_url": "http://wedata.net/items/81529", "data": { - "pageElement": "//div[contains(concat(' ',@class),' UserNewsEntry')]/div", + "pageElement": "//div[contains(concat(' ',@class),' UserNewsEntry_userNewsEntry')]/div", + "considerationUrl": "https://kakuyomu.jp/users/takikotarou/news", "nextLink": "//div[contains(concat(' ',@class),' Pager_next')]/a", "url": "^https://kakuyomu\\.jp/users/", "exampleUrl": "https://kakuyomu.jp/users/Fafs_falira/news/1177354054883907651\r\nhttps://kakuyomu.jp/users/OmoriHanon/news/1177354054884027830\r\nhttps://kakuyomu.jp/users/rocket_syoukai/news/16816927859771687306" @@ -13763,7 +14736,7 @@ "created_by": "t_f_m", "name": "カクヨム 近況ノート", "created_at": "2017-09-04T13:56:15+09:00", - "updated_at": "2022-01-28T00:10:52+09:00" + "updated_at": "2023-08-25T20:43:04+09:00" }, { "resource_url": "http://wedata.net/items/81527", @@ -14069,16 +15042,16 @@ { "resource_url": "http://wedata.net/items/81435", "data": { - "pageElement": "//div[contains(concat(' ', normalize-space(@class), ' '), ' mtop10 ')]", - "nextLink": "//li[@class=\"active\"]/following-sibling::li[1]/a", + "pageElement": "//div[contains(concat(' ', @class, ' '), ' rating')]/following-sibling::div[contains(concat(' ', @class, ' '), ' clearfix ') and .//a[@href='#cancel']]\r\n|//div[@class='bg_ch']\r\n|//div[@class='rating']/table/tbody/tr", + "nextLink": "//li[@class=\"active\"][number()>0]/following-sibling::li[1]/a", "url": "^https?://kabusensor\\.com/", - "exampleUrl": "http://kabusensor.com/signal/kai/?t_cd=9&s_cd=2&mk=3" + "exampleUrl": "http://kabusensor.com/signal/kai/?t_cd=9&s_cd=2&mk=3\r\nhttps://kabusensor.com/ranking/kaisignal/\r\nhttps://kabusensor.com/ranking/tech/?sh=10&mk=2\r\nhttps://kabusensor.com/screening/?page=2&ma=0&mkt=1&sd=1" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "株センサー", "created_at": "2017-07-13T20:49:04+09:00", - "updated_at": "2020-07-20T23:58:57+09:00" + "updated_at": "2023-10-07T19:30:55+09:00" }, { "resource_url": "http://wedata.net/items/81425", @@ -14732,15 +15705,15 @@ "resource_url": "http://wedata.net/items/81262", "data": { "pageElement": "//article/div[@class='p-block']", - "nextLink": "//p[@class='c-text-next']/a", - "url": "^https?://(www\\.)?dailyshincho\\.jp/article/", - "exampleUrl": "http://www.dailyshincho.jp/article/2017/03270801/?all=1\r\nhttps://www.dailyshincho.jp/article/2022/08310556/?all=1" + "nextLink": "//a[contains(@class, 'next') and contains(@href, 'page=')]", + "url": "^https?://www\\.dailyshincho\\.jp/article/", + "exampleUrl": "https://www.dailyshincho.jp/article/2017/03270801/?all=1\r\nhttps://www.dailyshincho.jp/article/2022/08310556/?all=1\r\nhttps://www.dailyshincho.jp/article/2022/09211755/?all=1" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "hatenaZZZ", "name": "dailyshincho", "created_at": "2017-03-27T17:54:23+09:00", - "updated_at": "2022-08-31T16:40:59+09:00" + "updated_at": "2023-08-19T15:30:03+09:00" }, { "resource_url": "http://wedata.net/items/81254", @@ -15108,7 +16081,7 @@ "created_by": "hatenaZZZ", "name": "nikkansports", "created_at": "2017-02-21T19:35:57+09:00", - "updated_at": "2022-02-14T21:50:28+09:00" + "updated_at": "2024-08-27T07:13:41+09:00" }, { "resource_url": "http://wedata.net/items/81207", @@ -15788,20 +16761,6 @@ }, "created_at": "2016-11-21T00:25:03+09:00" }, -{ - "resource_url": "http://wedata.net/items/81082", - "data": { - "pageElement": "//div[@id='fpMainContent']/div[@class='gridCategory removeHidden']|//div[@class='post clearfix']|//div[@id='comment_list']", - "nextLink": "//a[@class='button'][.='Next']|//a[contains(@class, 'icon-arrow-right2')][1]|//a[@class='search_pagenav search_pagenav_text' and contains(text(),'Next')][1]", - "url": "^https?://(?:[^.] \\.)?slickdeals\\.net/", - "exampleUrl": "https://slickdeals.net/?page=2 https://slickdeals.net/f/10525332-far-acronis-true-image-2017-1-device-free-after-35-rebate-5-newegg-promo-card" - }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_by": "qazplm", - "name": "Slickdeals", - "created_at": "2016-11-19T09:08:29+09:00", - "updated_at": "2020-09-13T02:48:12+09:00" -}, { "resource_url": "http://wedata.net/items/81081", "name": "businessnetwork.jp", @@ -16298,17 +17257,17 @@ }, { "resource_url": "http://wedata.net/items/80969", - "name": "thehackernews", - "created_by": "wOxxOm=-", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-09-03T05:14:19+09:00", "data": { - "exampleUrl": "http://thehackernews.com/", + "pageElement": "id('Blog1')//div[contains(concat(' ', @class, ' '), ' body-post ')]", + "nextLink": "id('blog-pager-older-link')/a", "url": "^https://thehackernews\\.com/", - "pageElement": "//article", - "nextLink": "id('blog-pager-older-link')/a" + "exampleUrl": "http://thehackernews.com/" }, - "created_at": "2016-09-01T23:54:09+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "wOxxOm=-", + "name": "thehackernews", + "created_at": "2016-09-01T23:54:09+09:00", + "updated_at": "2024-07-21T21:39:48+09:00" }, { "resource_url": "http://wedata.net/items/80968", @@ -16654,8 +17613,7 @@ "resource_url": "http://wedata.net/items/80883", "data": { "pageElement": "id('grid')", - "Stylish": "@-moz-document domain(\"wornontv.net\") {\r\n .ga-wrap{display:none;}\r\n}", - "nextLink": "//a[@class='next']", + "nextLink": "//li[@class='pagination-next']/a", "url": "^https://wornontv\\.net/", "exampleUrl": "https://wornontv.net/new/page/2/" }, @@ -16663,7 +17621,7 @@ "created_by": "Tanookirby", "name": "WornOnTV", "created_at": "2016-07-15T12:19:29+09:00", - "updated_at": "2020-06-20T10:49:51+09:00" + "updated_at": "2023-09-17T11:20:42+09:00" }, { "resource_url": "http://wedata.net/items/80882", @@ -17885,16 +18843,16 @@ { "resource_url": "http://wedata.net/items/79966", "data": { - "pageElement": "//div[@class=\"widget-pager\"]/preceding-sibling::*[self::div or self::section][not(@class=\"ui-tab\")]", - "nextLink": "//p[@class='widget-pagerNext']/a", + "pageElement": "//div[@class='widget-pager' or contains(@class, 'Pager_pager')]/preceding-sibling::*[.//a[contains(@href, '/works/') or contains(@href, '/user') or contains(@href, '/features/')]]", + "nextLink": "//p[@class='widget-pagerNext']/a|//div[contains(@class, 'Pager_next')]/a", "url": "^https://kakuyomu\\.jp/", - "exampleUrl": "https://kakuyomu.jp/recent_works https://kakuyomu.jp/tags/%E4%BA%BA%E5%A4%96 https://kakuyomu.jp/contests/musashino_bungaku https://kakuyomu.jp/recent_reviews https://kakuyomu.jp/search?genre_name=fantasy&order=last_episode_published_at https://kakuyomu.jp/user_events/closed https://kakuyomu.jp/recent_user_news" + "exampleUrl": "https://kakuyomu.jp/recent_works https://kakuyomu.jp/tags/%E4%BA%BA%E5%A4%96 https://kakuyomu.jp/recent_reviews https://kakuyomu.jp/search?genre_name=fantasy&order=last_episode_published_at https://kakuyomu.jp/user_events/closed https://kakuyomu.jp/recent_user_news https://kakuyomu.jp/features https://kakuyomu.jp/contests/kakuyomukoshien2023 https://kakuyomu.jp/users/sneaker/works https://kakuyomu.jp/works/1177354054891139802/reviews https://kakuyomu.jp/works/1177354054891139802/followers" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m", "name": "カクヨム", "created_at": "2016-02-29T11:49:17+09:00", - "updated_at": "2022-01-25T07:51:31+09:00" + "updated_at": "2023-08-25T20:44:41+09:00" }, { "resource_url": "http://wedata.net/items/79964", @@ -18001,8 +18959,8 @@ { "resource_url": "http://wedata.net/items/79433", "data": { - "pageElement": "//ul[@class=\"article-list\"]/li", - "nextLink": "//span[@class=\"current\"]/following-sibling::a[1]", + "pageElement": "//div[@class='color-blog-content-masonry']", + "nextLink": "//span[@aria-current='page'][number()>0]/following-sibling::a[1]", "url": "^https://buzz-plus\\.com/", "exampleUrl": "https://buzz-plus.com/?s=a" }, @@ -18010,7 +18968,7 @@ "created_by": "jigendaddy_be", "name": "バズプラスニュース Buzz+", "created_at": "2016-02-19T15:43:15+09:00", - "updated_at": "2020-06-14T18:00:00+09:00" + "updated_at": "2024-05-11T09:20:28+09:00" }, { "resource_url": "http://wedata.net/items/79432", @@ -18127,17 +19085,17 @@ }, { "resource_url": "http://wedata.net/items/77846", - "name": "All About News Dig", - "created_by": "iwakuma2828", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-08-26T11:08:28+09:00", "data": { - "exampleUrl": "https://news.allabout.co.jp/articles/d/73598/", + "pageElement": "id('sys_gtm_url')/*[not(@class='aa-article-content-related-article' or starts-with(@id, 'logly-lift-') or self::script)]", + "nextLink": "//link[@rel=\"next\"]", "url": "^https://news\\.allabout\\.co\\.jp/", - "pageElement": "id('sys_mtx_url')/*", - "nextLink": "//link[@rel=\"next\"]" + "exampleUrl": "https://news.allabout.co.jp/articles/d/73598/\r\nhttps://news.allabout.co.jp/articles/o/69926/" }, - "created_at": "2016-02-05T11:29:30+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "iwakuma2828", + "name": "All About NEWS", + "created_at": "2016-02-05T11:29:30+09:00", + "updated_at": "2023-10-26T21:35:03+09:00" }, { "resource_url": "http://wedata.net/items/77845", @@ -18469,17 +19427,17 @@ }, { "resource_url": "http://wedata.net/items/77750", - "name": "小説家になろう ユーザーページ", - "created_by": "phodra", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-08-25T18:58:43+09:00", "data": { - "exampleUrl": "https://syosetu.com/favnovelmain/list/?nowcategory=1&order=newlist\r\nhttps://syosetu.com/favnovelmain/isnoticelist/\r\nhttps://syosetu.com/usernovelimpression/list/\r\nhttps://syosetu.com/favuser/list/\r\nhttps://syosetu.com/messagebox/top/", + "pageElement": "//ul[contains(concat(' ',@class,' '),' c-up-panel__list ')]/li", + "nextLink": "//div[contains(concat(' ',@class,' '),' c-up-pager ')]//span[contains(concat(' ',@class,' '),' is-current ')]/following-sibling::a", "url": "^https?://syosetu\\.com/", - "pageElement": "id('favuser writtingnovellist favuser') | //table | //div[@class='novelcomment_list'] | //ul[@class='bloglist']", - "nextLink": "//div[@class='pager_idou']/a[@title='next page'] | //div[@class='page_bar']//a[contains(., '>>')]" + "exampleUrl": "https://syosetu.com/favnovelmain/list/?nowcategory=1&order=newlist\r\nhttps://syosetu.com/favnovelmain/isnoticelist/\r\nhttps://syosetu.com/usernovelimpression/list/\r\nhttps://syosetu.com/favuser/list/\r\nhttps://syosetu.com/messagebox/top/" }, - "created_at": "2016-01-04T01:43:02+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "phodra", + "name": "小説家になろう ユーザーページ", + "created_at": "2016-01-04T01:43:02+09:00", + "updated_at": "2024-06-22T07:58:54+09:00" }, { "resource_url": "http://wedata.net/items/77749", @@ -18695,8 +19653,9 @@ { "resource_url": "http://wedata.net/items/77727", "data": { - "pageElement": "id('content')/div[contains(@class,'post')]", - "nextLink": "//a[@rel=\"prev\"]", + "pageElement": "id('content')/div[contains(@class,'post') or @class='entry-utility-article']", + "considerationUrl": "https://www.asagei.com/page/2", + "nextLink": "//body[contains(@class, 'single-post')]//a[@rel='prev']", "url": "^https://www\\.asagei\\.com/", "exampleUrl": "https://www.asagei.com/32605" }, @@ -18704,7 +19663,7 @@ "created_by": "t_f_m", "name": "アサ芸plus", "created_at": "2015-12-20T18:13:51+09:00", - "updated_at": "2022-02-02T22:18:39+09:00" + "updated_at": "2023-08-26T21:43:30+09:00" }, { "resource_url": "http://wedata.net/items/77724", @@ -19174,7 +20133,8 @@ { "resource_url": "http://wedata.net/items/77646", "data": { - "pageElement": "//div[@class=\"sd-main\"]//*[./a[@title]]", + "pageElement": "//div[@class=\"sd-main\"]//*[./div/a[@title]]", + "comment": "最後のアイテム内に継ぎ足されていたのを修正", "nextLink": "//a[@rel='next']", "url": "^https://speakerdeck\\.com/.+", "exampleUrl": "https://speakerdeck.com/p/all" @@ -19183,7 +20143,7 @@ "created_by": "Tanookirby", "name": "Speaker Deck", "created_at": "2015-11-08T03:43:39+09:00", - "updated_at": "2022-01-27T09:39:14+09:00" + "updated_at": "2024-06-07T22:14:23+09:00" }, { "resource_url": "http://wedata.net/items/77643", @@ -19388,16 +20348,16 @@ { "resource_url": "http://wedata.net/items/77625", "data": { - "pageElement": "//div[@class='block--2_RlJqhg']", + "pageElement": "id('maincontent')/*[not(contains(@class, 'pagination'))]", "nextLink": "//a[@rel='next']", "url": "^https?://(www\\.)?macrumors\\.com/", - "exampleUrl": "https://www.macrumors.com/mac/" + "exampleUrl": "https://www.macrumors.com/\r\nhttps://www.macrumors.com/mac/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", "name": "Mac Rumors: Apple Mac iOS Rumors and News You Care About", "created_at": "2015-11-01T09:39:03+09:00", - "updated_at": "2020-06-15T08:36:34+09:00" + "updated_at": "2024-03-09T12:25:29+09:00" }, { "resource_url": "http://wedata.net/items/77624", @@ -20288,16 +21248,16 @@ { "resource_url": "http://wedata.net/items/77441", "data": { - "pageElement": "descendant::*[./article][1]/article", + "pageElement": "//div[@class='sentinel-search-latestArticles']", "nextLink": "//a[@class='next']", - "url": "^https?://screenrant\\.com/.+", - "exampleUrl": "https://screenrant.com/search/?q=masked%20singer&page=2" + "url": "^https?://(screen|game)rant\\.com/.+", + "exampleUrl": "https://screenrant.com/search/?q=masked%20singer&page=2\r\nhttps://gamerant.com/search/?q=rpg" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", - "name": "Screen Rant", + "name": "Screen Rant, Game Rant", "created_at": "2015-08-04T04:56:30+09:00", - "updated_at": "2023-02-12T10:11:58+09:00" + "updated_at": "2023-11-01T17:43:50+09:00" }, { "resource_url": "http://wedata.net/items/77437", @@ -21053,17 +22013,17 @@ }, { "resource_url": "http://wedata.net/items/77246", - "name": "Vivaldi.net Forum", - "created_by": "Wolfram", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-08-20T14:09:41+09:00", "data": { - "exampleUrl": "https://forum.vivaldi.net/category/82/team-blog\r\nhttps://forum.vivaldi.net/topic/20015/vivaldi-1-11-focus-on-accessibility", - "url": "^https://forum\\.vivaldi\\.net/", "pageElement": "//ul[@class='topic-list' or @class='posts']/li", - "nextLink": "//a[i/@class='fa fa-chevron-right']" + "nextLink": "//li[not(contains(@class, 'disabled'))]/a[i/@class='fa fa-chevron-right']", + "url": "^https://forum\\.vivaldi\\.net/", + "exampleUrl": "https://forum.vivaldi.net/category/82/team-blog\r\nhttps://forum.vivaldi.net/topic/20015/vivaldi-1-11-focus-on-accessibility" }, - "created_at": "2015-05-22T00:07:46+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Wolfram", + "name": "Vivaldi.net Forum", + "created_at": "2015-05-22T00:07:46+09:00", + "updated_at": "2023-10-24T19:21:10+09:00" }, { "resource_url": "http://wedata.net/items/77245", @@ -22086,18 +23046,18 @@ "updated_at": "2020-06-07T06:42:42+09:00" }, { - "resource_url": "http://wedata.net/items/77057", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "pageElement": "//div[@class='topPageNav']/following-sibling::*[./following-sibling::div[@class='btmPageNav']][not(id('kiji'))]|id('kiji')/p[last()]/preceding-sibling::*|id('kiji')/p[last()][./text()]|id('newsListResult')//li", + "pageElement": "//div[@class='topPageNav']/following-sibling::*[./following-sibling::div[@class='btmPageNav']][not(id('kiji'))]|id('kiji')/*|id('newsListResult')//li", "nextLink": "//a[@class='nextPage']|//span[@class='next']/a", "url": "^https://natgeo\\.nikkeibp\\.co\\.jp", - "exampleUrl": "https://natgeo.nikkeibp.co.jp/nng/article/20150312/438925/?P=1 https://natgeo.nikkeibp.co.jp/nng/article/20121107/329698/ https://natgeo.nikkeibp.co.jp/atcl/web/15/050700006/050700001/ https://natgeo.nikkeibp.co.jp/atcl/news/22/013100045/ https://natgeo.nikkeibp.co.jp/nng/news/" + "exampleUrl": "https://natgeo.nikkeibp.co.jp/nng/article/20150312/438925/?P=1 https://natgeo.nikkeibp.co.jp/nng/article/20121107/329698/ https://natgeo.nikkeibp.co.jp/atcl/web/15/050700006/050700001/ https://natgeo.nikkeibp.co.jp/atcl/news/22/013100045/ https://natgeo.nikkeibp.co.jp/atcl/news/24/041000202/?P=1 https://natgeo.nikkeibp.co.jp/nng/news/" }, - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "t_f_m", + "resource_url": "http://wedata.net/items/77057", "name": "ナショナルジオグラフィック 日経BP", "created_at": "2015-03-31T18:06:35+09:00", - "updated_at": "2022-02-08T17:14:18+09:00" + "updated_at": "2024-04-10T19:45:55+09:00" }, { "resource_url": "http://wedata.net/items/77056", @@ -23273,6 +24233,7 @@ "data": { "pageElement": "id('content')//*[@class='container index-container' or @id='image-container' or @id='favcontainer' or @id='tag-container']", "insertBefore": "//section[@class='pagination']", + "comment": "Adjusted the pageElement to not include the image-container because it causes the image size to be small initially. Updated on behalf of: https://github.com/sixcious/infy-scroll/issues/85", "nextLink": "//a[@class='next']", "url": "^https?://nhentai\\.net/", "exampleUrl": "http://nhentai.net/artist/kokutou-nikke/ http://nhentai.net/?page=3 http://nhentai.net/g/124271/1/" @@ -23281,7 +24242,7 @@ "created_by": "theydonotwant", "name": "nHentai", "created_at": "2014-12-28T23:26:34+09:00", - "updated_at": "2022-11-18T08:32:21+09:00" + "updated_at": "2024-05-11T01:15:46+09:00" }, { "resource_url": "http://wedata.net/items/76713", @@ -23355,18 +24316,18 @@ }, { "resource_url": "http://wedata.net/items/76697", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "exampleUrl": "http://www.webdoku.jp/rensai/sakka/michi155_tsumura/20141217_3.html http://www.webdoku.jp/rensai/sakka/michi84.html http://www.webdoku.jp/rensai/sakka/michi68.html http://www.webdoku.jp/rensai/sakka/michi31.html", "pageElement": "//div[@class=\"entry-content\"]|id(\"sakka\")|id(\"sakka-header\")[.//p[contains(@class,\"date\")]]", + "comment": "cf.http://wedata.net/items/63656", "nextLink": "//p[contains(@class,\"contentNavi\")]/a[1]", - "url": "^http://www\\.webdoku\\.jp/rensai/sakka/michi", - "comment": "cf.http://wedata.net/items/63656" + "url": "^https://www\\.webdoku\\.jp/rensai/sakka/michi", + "exampleUrl": "http://www.webdoku.jp/rensai/sakka/michi155_tsumura/20141217_3.html http://www.webdoku.jp/rensai/sakka/michi84.html http://www.webdoku.jp/rensai/sakka/michi68.html http://www.webdoku.jp/rensai/sakka/michi31.html" }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "WEB本の雑誌 作家の読書道 個別記事", "created_at": "2014-12-18T15:49:28+09:00", - "updated_at": "2014-12-18T17:53:34+09:00" + "updated_at": "2023-12-01T03:08:58+09:00" }, { "resource_url": "http://wedata.net/items/76693", @@ -23862,18 +24823,18 @@ "updated_at": "2014-11-08T15:31:30+09:00" }, { + "resource_url": "http://wedata.net/items/76448", "data": { - "pageElement": "//article/div[@class='content']/*|//ul[@class='gdy-newarticle-list gdy-list-a'][not(//article)]/li", + "pageElement": "//div[@class='gdy-pager']/preceding-sibling::*[@class='content' or self::ul or self::h2]", "nextLink": "//*[@class='gdy-btn-d next']/*", "url": "^https://gooday\\.nikkei\\.co\\.jp/", - "exampleUrl": "https://gooday.nikkei.co.jp/do/ https://gooday.nikkei.co.jp/atcl/column/14/091100001/102800002/?ST=exercise&P=2" + "exampleUrl": "https://gooday.nikkei.co.jp/do/ https://gooday.nikkei.co.jp/atcl/column/14/091100001/102800002/?ST=exercise&P=2\r\nhttps://gooday.nikkei.co.jp/atcl/column/14/091100006/?i_cid=nbpgdy_sied_list_col\r\nhttps://gooday.nikkei.co.jp/atcl/report/16/033100012/?ST=special&i_cid=nbpgdy_sied_breadcrumb" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "ghj", - "resource_url": "http://wedata.net/items/76448", "name": "日経Gooday", "created_at": "2014-11-08T14:08:25+09:00", - "updated_at": "2020-06-01T12:46:10+09:00" + "updated_at": "2023-10-02T18:11:43+09:00" }, { "resource_url": "http://wedata.net/items/76441", @@ -24274,17 +25235,17 @@ }, { "resource_url": "http://wedata.net/items/76358", - "name": "小説家になろう 他ユーザーの各ページ", - "created_by": "t_f_m", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-10-28T03:35:11+09:00", "data": { - "exampleUrl": "http://mypage.syosetu.com/mypageblog/list/userid/227614/\r\nhttp://mypage.syosetu.com/mypageblog/list/userid/76491/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/227614/blogkey/894986/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=1\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=2\r\nhttp://mypage.syosetu.com/mypagefavnovelmain/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagefavuser/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagenovelhyoka/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypage/reviewlist/userid/88780/\r\nhttp://xmypage.syosetu.com/mypageblog/list/xid/44910/\r\nhttp://xmypage.syosetu.com/mypageblog/view/xid/24986/blogkey/144187/", + "pageElement": "id('bloglistbg bloglist')/div|(id('blogbg')|id('main')/div[@id='blogview']|id('blog_comment')/h3)[not(id('blog_comment')//div[@class='blogcomment_l']/a)]|//div[@class='comment_view']|id('novellist novelpointlist novelreviewlist')/ul|id('favuser')//li|//div[@class='c-novel-list' or contains(concat(' ',@class,' '),' c-panel__list ')]/div", + "nextLink": "//a[@title='next page' or @title='次へ' or ../@class='blogcomment_r']|(id('my_blog_l')|//div[@class='my_blog_l'])/a[not(//a[../@class='blogcomment_r'])]", "url": "^https?://x?mypage\\.syosetu\\.com/mypage", - "pageElement": "id('bloglistbg bloglist')/div|(id('blogbg')|id('main')/div[@id='blogview']|id('blog_comment')/h3)[not(id('blog_comment')//div[@class='blogcomment_l']/a)]|//div[@class='comment_view']|id('novellist novelpointlist novelreviewlist')/ul|id('favuser')//li", - "nextLink": "//a[@title='next page' or ../@class='blogcomment_r']|(id('my_blog_l')|//div[@class='my_blog_l'])/a[not(//a[../@class='blogcomment_r'])]" + "exampleUrl": "http://mypage.syosetu.com/mypageblog/list/userid/227614/\r\nhttp://mypage.syosetu.com/mypageblog/list/userid/76491/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/227614/blogkey/894986/\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=1\r\nhttp://mypage.syosetu.com/mypageblog/view/userid/76491/blogkey/145793/index.php?p=2\r\nhttp://mypage.syosetu.com/mypagefavnovelmain/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagefavuser/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypagenovelhyoka/list/userid/88780/\r\nhttp://mypage.syosetu.com/mypage/reviewlist/userid/88780/\r\nhttp://xmypage.syosetu.com/mypageblog/list/xid/44910/\r\nhttp://xmypage.syosetu.com/mypageblog/view/xid/24986/blogkey/144187/\r\nhttps://xmypage.syosetu.com/mypage/novellist/xid/x7149bl/?xid=377112&all=1&all2=1&all3=1&all4=1&p=1" }, - "created_at": "2014-09-21T11:42:50+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", + "name": "小説家になろう 他ユーザーの各ページ", + "created_at": "2014-09-21T11:42:50+09:00", + "updated_at": "2024-03-23T03:29:17+09:00" }, { "resource_url": "http://wedata.net/items/76357", @@ -24739,16 +25700,17 @@ { "resource_url": "http://wedata.net/items/76304", "data": { - "pageElement": "//div[@class='article_body' or @class='story_photoreport' or @class='article-contents']", - "nextLink": "//a[@id='script_pagination_next' and @data-ga_category='zd_article_pagination']|//a[ @class='mediaNext noluke']", + "pageElement": "//div[@class='article-contents']|//li[.//p[@class='txt-update']]", + "considerationUrl": "https://japan.zdnet.com/article/35148978/", + "nextLink": "descendant::a[@rel='next'][not(@href='#')]", "url": "^https://japan\\.zdnet\\.com/", - "exampleUrl": "https://japan.zdnet.com/sp/ziddy/20197967/\r\nhttps://japan.zdnet.com/sp/enterprise-trend/35011766/\r\nhttps://japan.zdnet.com/article/35148978/\r\n" + "exampleUrl": "https://japan.zdnet.com/article/35011766/ https://japan.zdnet.com/archives/foreign/\r\n\r\n" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "bimi", "name": "ZDNet Japan", "created_at": "2014-09-09T15:49:10+09:00", - "updated_at": "2020-08-12T09:38:29+09:00" + "updated_at": "2023-10-29T07:03:15+09:00" }, { "resource_url": "http://wedata.net/items/76302", @@ -24826,19 +25788,19 @@ }, { "resource_url": "http://wedata.net/items/76290", - "name": "Variety", "data": { - "url": "^https://variety\\.com", "pageElement": "//ul[contains(@class,'o-tease-news-list')]/li[not(.//div[contains(@id,'sponsored')])]", - "Stylish": "@-moz-document url(\"https://variety.com/\") {\r\n img.lazy { display: inline-block !important; } \r\nli.l-list__item figure a{padding:0;}\r\nli.l-list__item:nth-of-type(-n+14) figure a{opacity:0;height:100%}\r\n}", "bookmarklet": "Array.prototype.forEach.call(document.querySelectorAll('img'), function(img) { var lazySrc = img.hasAttribute('data-src') ? img.getAttribute('data-src') : img.getAttribute('data-original'); if (lazySrc) { img.src = lazySrc;} });", - "exampleUrl": "https://variety.com https://variety.com/v/tv/", - "nextLink": "//div[@class='o-more-link // lrv-u-margin-l-auto']/a" + "Stylish": "@-moz-document url(\"https://variety.com/\") {\r\n img.lazy { display: inline-block !important; } \r\nli.l-list__item figure a{padding:0;}\r\nli.l-list__item:nth-of-type(-n+14) figure a{opacity:0;height:100%}\r\n}", + "nextLink": "//div[starts-with(normalize-space(@class),'o-more-link // lrv-u-text-align-right ')]/a", + "url": "^https://variety\\.com", + "exampleUrl": "https://variety.com https://variety.com/v/tv/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", + "name": "Variety", "created_at": "2014-09-03T07:41:14+09:00", - "updated_at": "2020-04-03T06:27:04+09:00" + "updated_at": "2024-04-24T23:16:02+09:00" }, { "resource_url": "http://wedata.net/items/76288", @@ -24912,18 +25874,18 @@ }, { "resource_url": "http://wedata.net/items/76259", - "name": "スポーツナビ コラム本文", - "created_by": "hohoho", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2018-05-14T10:17:27+09:00", "data": { - "exampleUrl": "http://sports.yahoo.co.jp/column/detail/201507310001-spnavi\r\nhttp://sports.yahoo.co.jp/sports/soccer/eusoccer/1516/columndtl/201507310001-spnavi", + "pageElement": "id('series')/following-sibling::section", "comment": "こちらはスポーツナビのコラム関連です。スポーツナビの新旧2つのレイアウト上で動作します。コラム関連以外のものはhttp://wedata.net/items/76256を参照してください。", - "url": "^https://sports\\.yahoo\\.co.jp/(column|sports)", - "pageElement": "//*[@class=\"mod-content\" or @class=\"newsList\" or @class=\"modBody\"]", - "nextLink": "//a[(text()=\"次へ\") or (text()=\"次 »\")]" + "nextLink": "//a[(text()=\"次へ\")]", + "url": "^https://sports\\.yahoo\\.co.jp/column/detail/", + "exampleUrl": "https://sports.yahoo.co.jp/column/detail/201507310001-spnavi\r\nhttps://sports.yahoo.co.jp/column/detail/2023090900004-spnavi" }, - "created_at": "2014-08-28T14:54:43+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "hohoho", + "name": "スポーツナビ コラム本文", + "created_at": "2014-08-28T14:54:43+09:00", + "updated_at": "2023-09-16T13:23:50+09:00" }, { "data": { @@ -25269,16 +26231,17 @@ { "resource_url": "http://wedata.net/items/75006", "data": { - "pageElement": "//div[@aria-label=\"article\"][.//div[@class=\"author-list\"]]", + "pageElement": "//div[starts-with(@id, 'zone-twilight')]//div[@class='zone__content']", + "comment": "記事の取りこぼし修正。記事に css: order があるため zone__content を取得。", "nextLink": "//a[@rel='next']", - "url": "^https?://www\\.huffingtonpost\\.jp/", - "exampleUrl": "https://www.huffingtonpost.jp/news/" + "url": "^https?://www\\.huffingtonpost(\\.co)?\\.\\w{2}/", + "exampleUrl": "https://www.huffingtonpost.jp/news/\r\nhttps://www.huffingtonpost.co.uk/news/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "ハフィントンポスト", "created_at": "2014-08-02T12:33:40+09:00", - "updated_at": "2022-01-11T08:24:06+09:00" + "updated_at": "2024-08-25T08:34:17+09:00" }, { "resource_url": "http://wedata.net/items/74999", @@ -25632,17 +26595,18 @@ }, { "resource_url": "http://wedata.net/items/74948", - "name": "スイッチサイエンス", - "created_by": "rei tanaka", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2016-05-08T14:34:58+09:00", "data": { - "exampleUrl": "https://www.switch-science.com/catalog/list/1/", - "url": "^https?://www\\.switch-science\\.com/catalog/list/", - "pageElement": "id('products')/ul/li", - "nextLink": "id('pagination')/p/a[contains(.,'>>')]" + "pageElement": "//ul[@data-productgrid-items]", + "comment": "ページ下部に作られる『最近閲覧した商品』を取得しないように修正", + "nextLink": "//li[@class='pagination--next']/a", + "url": "^https?://www\\.switch-science\\.com/", + "exampleUrl": "https://www.switch-science.com/collections/marketplace" }, - "created_at": "2014-07-05T16:24:26+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "rei tanaka", + "name": "スイッチサイエンス", + "created_at": "2014-07-05T16:24:26+09:00", + "updated_at": "2023-10-12T20:29:41+09:00" }, { "resource_url": "http://wedata.net/items/74947", @@ -25761,16 +26725,16 @@ { "resource_url": "http://wedata.net/items/74923", "data": { - "pageElement": "//div[contains(@class,'a-archive-grid__story')]|descendant::*[div[contains(@class,'o-card')]][1]|//div[@class='story_list_blk']/*|//li[@class='l-list__item'][article]|id('main')/article[@id]", + "pageElement": "//div[contains(@class,'a-archive-grid__story')]|//section[@class='pmc-u-margin-tb-1']//*[div[contains(@class,'o-card')]][1]|//div[@class='story_list_blk']/*|id('main')/article[@id]", "nextLink": "descendant::a[contains(@class,'next')][last()]|//div[@class='nav-previous']/a|//div[contains(@class,'more-stories')]/a[contains(@class,'a-icon-right-arrow')]", - "url": "^https?://.*(?:bollywoodlife|deadline|footwearnews)\\.com", - "exampleUrl": "https://www.deadline.com/ https://deadline.com/vcategory/the-contenders-emmys/page/2/ https://deadline.com/tag/caa/page/2/ https://www.bollywoodlife.com/ https://footwearnews.com/page/2/" + "url": "^https?://.*(?:bollywoodlife|deadline)\\.com", + "exampleUrl": "https://www.deadline.com/ https://deadline.com/vcategory/the-contenders-emmys/page/2/ https://deadline.com/tag/caa/page/2/ https://www.bollywoodlife.com/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "Tanookirby", "name": "PMC Brands", "created_at": "2014-06-26T02:58:29+09:00", - "updated_at": "2023-06-10T10:44:45+09:00" + "updated_at": "2024-07-14T08:26:58+09:00" }, { "resource_url": "http://wedata.net/items/74912", @@ -25846,7 +26810,7 @@ "resource_url": "http://wedata.net/items/74897", "data": { "pageElement": "//div[@class='l-article']/div[@class='article-body']", - "nextLink": "//div[contains(concat(' ',@class,' '),' m-pagination ')]/a[@class='is-active']/following-sibling::a", + "nextLink": "//div[contains(concat(' ',@class,' '),' m-pagination ')]/*[@class='is-active']/following-sibling::a", "url": "^https?://dot\\.asahi\\.com/", "exampleUrl": "https://dot.asahi.com/wa/2022080300076.html?page=1\r\nhttps://dot.asahi.com/dot/photoarticle/2019060500079.html?page=1\r\nhttps://dot.asahi.com/articles/-/196996?page=1" }, @@ -25854,7 +26818,7 @@ "created_by": "t_f_m", "name": "dot asahi", "created_at": "2014-06-13T17:32:13+09:00", - "updated_at": "2023-07-26T15:14:34+09:00" + "updated_at": "2024-02-27T19:25:45+09:00" }, { "resource_url": "http://wedata.net/items/74895", @@ -26424,16 +27388,16 @@ { "resource_url": "http://wedata.net/items/74789", "data": { - "pageElement": "//div[@itemprop='articleBody']/p[last()]|//div[@itemprop='articleBody']/p[last()]/preceding-sibling::*", - "nextLink": "//link[@rel=\"next\"]", - "url": "https://bizgate\\.nikkei\\.co\\.jp/article/.+", - "exampleUrl": "https://bizgate.nikkei.co.jp/article/DGXMZO5957527026052020000000?channel=DF050420183723" + "pageElement": "//ul[contains(concat(' ', @class, ' '), ' pagination-article ')]/preceding-sibling::*", + "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a", + "url": "^https://bizgate\\.nikkei\\.com/article/.+", + "exampleUrl": "https://bizgate.nikkei.com/article/DGXMZO5957527026052020000000?channel=DF050420183723\r\nhttps://bizgate.nikkei.com/article/DGXZQOLM2752S027112023000000?page=3" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "nkmry", "name": "日経BizGate", "created_at": "2014-04-22T20:37:42+09:00", - "updated_at": "2023-02-05T14:07:30+09:00" + "updated_at": "2024-02-08T18:05:58+09:00" }, { "resource_url": "http://wedata.net/items/74786", @@ -26521,17 +27485,17 @@ }, { "resource_url": "http://wedata.net/items/74732", - "name": "The Wrap", - "created_by": "Tanookirby", - "updated_at": "2017-12-06T11:05:49+09:00", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", "data": { - "exampleUrl": "https://www.thewrap.com/category/movies/\r\nhttps://www.thewrap.com/category/channelphoto/", + "pageElement": "//div[@class='content-area']/ul/li", + "nextLink": "//a[@class='wp-block-query-pagination-next']", "url": "^https?://(www\\.)?thewrap\\.com/", - "pageElement": "id('main')/div/ul/li[.//img]", - "nextLink": "//a[@class='p-next page-numbers']" + "exampleUrl": "https://www.thewrap.com/category/movies/" }, - "created_at": "2014-04-14T04:03:48+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "Tanookirby", + "name": "The Wrap", + "created_at": "2014-04-14T04:03:48+09:00", + "updated_at": "2023-08-01T21:25:44+09:00" }, { "resource_url": "http://wedata.net/items/74731", @@ -28265,17 +29229,17 @@ }, { "resource_url": "http://wedata.net/items/72582", - "name": "All About ガイド記事一覧", - "created_by": "memi", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-03-19T17:06:41+09:00", "data": { - "exampleUrl": "http://allabout.co.jp/gm/gp/714/library/\r\nhttp://allabout.co.jp/gm/gc/462037/\r\nhttp://allabout.co.jp/gm/gc/13353/\r\nhttp://allabout.co.jp/gm/gl/421/\r\nhttp://allabout.co.jp/recipe/search/material/10/", + "pageElement": "//div[@class=\"article-list\"]//li|//div[@class='aa_article-content']|//main[@class=\"aa_main\"]//ul[@class=\"aa_media-list\"]/li", + "nextLink": "//a[(text()=\"次のページへ\")]", "url": "^https://allabout\\.co\\.jp/gm/(gc|gp|gl)|^https://allabout\\.co\\.jp/recipe", - "pageElement": "//div[@class=\"article-list\"]//li|id(\"popin_read\")|//main[@class=\"aa_main\"]//ul[@class=\"aa_media-list\"]/li", - "nextLink": "//a[(text()=\"次のページへ\")]" + "exampleUrl": "https://allabout.co.jp/gm/gp/714/library/\r\nhttps://allabout.co.jp/gm/gc/462037/\r\nhttps://allabout.co.jp/gm/gc/13353/\r\nhttps://allabout.co.jp/gm/gl/421/\r\nhttps://allabout.co.jp/recipe/search/material/10/" }, - "created_at": "2013-05-01T09:39:59+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "memi", + "name": "All About ガイド記事一覧", + "created_at": "2013-05-01T09:39:59+09:00", + "updated_at": "2024-01-08T21:21:21+09:00" }, { "resource_url": "http://wedata.net/items/72581", @@ -31003,17 +31967,18 @@ }, { "resource_url": "http://wedata.net/items/64117", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2012-10-21T17:22:55+09:00", "data": { - "pageElement": "//table[@class='list']//tr[last()]/preceding-sibling::tr[not(@bgcolor)]", - "exampleUrl": "https://www.bookshop-ps.com/bsp/bsp_mag_search?sha=1&sc=066000", + "pageElement": "//table[@class='list']", + "comment": "CSSで偶数番目のtr要素が非表示になるためtable要素を取得する必要があります。", + "nextLink": "//a[contains(.,'次へ>>>')]", "url": "^https://(www\\.)?bookshop-ps\\.com/bsp/bsp_(?!detail|magcode)", - "nextLink": "//a[contains(.,'次へ>>>')]" + "exampleUrl": "https://www.bookshop-ps.com/bsp/bsp_mag_search?sha=1&sc=066000" }, - "updated_at": "2020-05-23T06:23:11+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "plais", "name": "BOOK SHOP 小学館", - "created_by": "plais" + "created_at": "2012-10-21T17:22:55+09:00", + "updated_at": "2024-05-10T23:00:31+09:00" }, { "resource_url": "http://wedata.net/items/64116", @@ -32333,7 +33298,7 @@ { "resource_url": "http://wedata.net/items/62666", "data": { - "pageElement": "//div[contains(concat(' ',@class,' '),' tweet_box ')]/div[not(@id)]", + "pageElement": "//section[contains(concat(' ',@class,' '),' tweet_box ')]/div[not(@id)]", "insertBefore": "id('hidden_tweet_box')/following-sibling::node()[1]", "nextLink": "//link[@rel='next']", "url": "^https?://togetter\\.com/li/", @@ -32343,7 +33308,7 @@ "created_by": "t_f_m", "name": "Togetter 個別記事", "created_at": "2012-08-08T11:21:17+09:00", - "updated_at": "2022-11-21T16:25:59+09:00" + "updated_at": "2024-07-10T16:59:14+09:00" }, { "name": "Staffさん。", @@ -32402,18 +33367,18 @@ "created_at": "2012-08-02T02:15:15+09:00" }, { + "resource_url": "http://wedata.net/items/62561", "data": { - "pageElement": "//main//div[@class=\"l-artlst001\"]|//main//*[./div[@class=\"wrp lv2\"]][.//div[@class=\"thumb\"] and not(.//ul)]", + "pageElement": "//main//div[@class=\"cmp-thmb001 pt-20 pb-20\" or @class=\"l-artlst001\"]", "nextLink": "descendant::li[contains(@class,\"is-active\")][1]/following-sibling::li[1]/a", - "url": "^https://(www\\.)?chunichi\\.co\\.jp/(chuspo|tags)/", - "exampleUrl": "https://www.chunichi.co.jp/tags/tag_shimenlink/ https://www.chunichi.co.jp/chuspo/dragons/draban/" + "url": "^https://www\\.chunichi\\.co\\.jp/", + "exampleUrl": "https://www.chunichi.co.jp/tags/tag_shimenlink/ https://www.chunichi.co.jp/chuspo/dragons/draban/\r\nhttps://www.chunichi.co.jp/tags/yourdigital/yourdigital_repo" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", - "resource_url": "http://wedata.net/items/62561", "name": "中日スポーツ-日付別記事一覧系", "created_at": "2012-07-29T13:47:10+09:00", - "updated_at": "2021-02-18T10:42:29+09:00" + "updated_at": "2024-08-25T08:37:04+09:00" }, { "resource_url": "http://wedata.net/items/62559", @@ -33374,16 +34339,16 @@ { "resource_url": "http://wedata.net/items/60005", "data": { - "pageElement": "//div[@class='img']", + "pageElement": "//div[@class='extMdlSeriesMngrArticleMargin']/div", "nextLink": "//a[@class='btnNext']\r\n", "url": "^https?://mangalifewin\\.takeshobo\\.co\\.jp/", - "exampleUrl": "http://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-1/001/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-3/033/" + "exampleUrl": "https://mangalifewin.takeshobo.co.jp/rensai/slanleat/slanleat-001/25887/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-1/001/\r\nhttp://mangalifewin.takeshobo.co.jp/rensai/halfde_ittoko/item-3/033/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "ゆるっとcafe / まんがライフWIN", "created_at": "2012-04-08T11:52:07+09:00", - "updated_at": "2023-03-18T09:19:42+09:00" + "updated_at": "2024-01-01T16:27:07+09:00" }, { "resource_url": "http://wedata.net/items/59945", @@ -33668,18 +34633,17 @@ }, { "resource_url": "http://wedata.net/items/58377", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2012-03-03T15:04:23+09:00", "data": { - "pageElement": "//div[@class='article_wrap']/p[1][following-sibling::div[@class='para_title_blue' or @class='device_box']]/following-sibling::*|//ul[@class='list']/li|//dl[@class='newslist_sky']/*|//div[@class='article_wrap'][div[@class='para_title_blue'][not(preceding-sibling::p)]]/*|id('topics')/table//tbody/tr", - "Stylish": "@-moz-document domain(\"hb-nippon.com\") {\r\n [src*=\"banner\"]{display:none !important;}\r\n}", - "exampleUrl": "http://www.hb-nippon.com/interview/785-intvw2012/6461-20120227no92\r\nhttp://www.hb-nippon.com/column/437-baseballclub/6966-20120117no55bc\r\nhttp://www.hb-nippon.com/interview/785-intvw2012\r\nhttp://www.hb-nippon.com/column/626-tokusyu/6741-20110330no01tks\r\nhttp://www.hb-nippon.com/column/626-tokusyu/7069-20120424no06tks\r\nhttp://www.hb-nippon.com/column/1036-syakaizin/7639-20130515no01ab?page=3\r\nhttp://www.hb-nippon.com/news/52-column\r\nhttp://www.hb-nippon.com/interview/1173-intvw2014/6643-20140225no176\r\nhttp://www.hb-nippon.com/column/437-baseballclub/8348-20140313no124\r\nhttp://www.hb-nippon.com/column/437-baseballclub/9571-20150705no250?page=2\r\nhttp://www.hb-nippon.com/interview/1507-intvw2016/6932-20160409no390?page=2\r\nhttp://www.hb-nippon.com/bbs/player", + "pageElement": "//p[@class='post-nav-links']/preceding-sibling::*[preceding-sibling::div[contains(@class, 'share_save_container')]]|\r\n//ul[contains(concat(' ', @class, ' '), ' mvp-main-blog-wrap ')]", + "nextLink": "//span[contains(@class, 'current')][number()>0]/following-sibling::a[1][parent::p[@class='post-nav-links'] or not(ancestor::article)]", "url": "^https?://(?:www\\.)?hb-nippon\\.com/", - "nextLink": "//li[@class='current']/following-sibling::li[1]/a" + "exampleUrl": "https://www.hb-nippon.com/2024/05/05/2523048/\r\nhttps://www.hb-nippon.com/players-directory/\r\nhttps://www.hb-nippon.com/category/column/" }, - "updated_at": "2020-05-19T07:26:08+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "jigendaddy_be", "name": "高校野球ドットコム", - "created_by": "jigendaddy_be" + "created_at": "2012-03-03T15:04:23+09:00", + "updated_at": "2024-05-19T08:08:28+09:00" }, { "resource_url": "http://wedata.net/items/58112", @@ -34121,15 +35085,16 @@ "resource_url": "http://wedata.net/items/56888", "data": { "pageElement": "//div[@class='pager']/preceding-sibling::*", - "nextLink": "//link[@rel='next']", + "comment": "link[@rel='next'] NG https://thetv.jp/news/search/?kw=&c=movie", + "nextLink": "//div[@class='pager']//li[span/@class='current']/following-sibling::li[1]/a", "url": "^https://(.+)?thetv\\.jp", - "exampleUrl": "https://thetv.jp/news/\r\nhttps://thetv.jp/feature/matome/758/\r\nhttps://thetv.jp/program/finder/drama/?slot=256\r\nhttps://thetv.jp/person/feature/657/" + "exampleUrl": "https://thetv.jp/news/\r\nhttps://thetv.jp/feature/matome/758/\r\nhttps://thetv.jp/program/finder/drama/?slot=256\r\nhttps://thetv.jp/person/feature/657/\r\nhttps://thetv.jp/news/search/?kw=&c=movie" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "kisara", "name": "webザテレビジョン", "created_at": "2012-01-14T15:22:34+09:00", - "updated_at": "2022-10-20T17:00:47+09:00" + "updated_at": "2023-08-31T19:55:07+09:00" }, { "resource_url": "http://wedata.net/items/56870", @@ -34712,16 +35677,16 @@ { "resource_url": "http://wedata.net/items/55808", "data": { - "pageElement": "id('category')//article[@class='card']|id('single_post')/header/following-sibling::*[./following-sibling::ol]", + "pageElement": "id('category')/div[@class='cardArea']|id('single_post')/header/following-sibling::*[./following-sibling::ol]", "nextLink": "//link[@rel='next']", "url": "^https://type\\.jp/", - "exampleUrl": "https://type.jp/et/feature/1047 https://type.jp/et/feature/posts" + "exampleUrl": "https://type.jp/et/feature/1047 https://type.jp/et/feature/posts\r\nhttps://type.jp/et/feature/category/skill/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "jigendaddy_be", "name": "エンジニアtype", "created_at": "2011-11-09T15:40:31+09:00", - "updated_at": "2022-02-19T17:08:20+09:00" + "updated_at": "2023-11-04T19:54:53+09:00" }, { "resource_url": "http://wedata.net/items/55794", @@ -36472,18 +37437,18 @@ "created_by": "haragu" }, { - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "name": "朝日新聞デジタル", - "created_by": "mi", - "updated_at": "2017-04-07T13:22:14+09:00", "resource_url": "http://wedata.net/items/53640", "data": { - "exampleUrl": "http://sitesearch.asahi.com/.cgi/sitesearch/sitesearch.pl?access=p&sort=RELEASE_DATE:desc:score:desc&output=xml_no_dtd&site=Asahi&filter=1&ie=UTF-8&oe=UTF-8&client=asahicom&Keywords=%EF%BC%92&num=12&link=0&ip=&detail=&or=&relation=&updown=&lr=lang_ja|lang_en&tvsubmit=%E6%A4%9C%E7%B4%A2&title=&start=12&start1=10&start2=2&idx=6&j_idx=4&s_idx=9", - "url": "^https?://sitesearch\\.asahi\\.com/", "pageElement": "id('SiteSearchResult')/li", - "nextLink": "//a[@class='Next']" + "nextLink": "//a[contains(text(), '次へ')]", + "url": "^https?://sitesearch\\.asahi\\.com/", + "exampleUrl": "http://sitesearch.asahi.com/.cgi/sitesearch/sitesearch.pl?access=p&sort=RELEASE_DATE:desc:score:desc&output=xml_no_dtd&site=Asahi&filter=1&ie=UTF-8&oe=UTF-8&client=asahicom&Keywords=%EF%BC%92&num=12&link=0&ip=&detail=&or=&relation=&updown=&lr=lang_ja|lang_en&tvsubmit=%E6%A4%9C%E7%B4%A2&title=&start=12&start1=10&start2=2&idx=6&j_idx=4&s_idx=9" }, - "created_at": "2011-05-18T16:48:29+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mi", + "name": "朝日新聞デジタル", + "created_at": "2011-05-18T16:48:29+09:00", + "updated_at": "2023-08-14T17:23:23+09:00" }, { "resource_url": "http://wedata.net/items/53606", @@ -37961,31 +38926,31 @@ }, { "resource_url": "http://wedata.net/items/41315", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "name": "Weblio英語例文検索", - "created_by": "mi", - "updated_at": "2017-04-03T10:10:03+09:00", "data": { - "exampleUrl": "http://ejje.weblio.jp/sentence/content/%E6%84%9F%E3%81%98%E3%82%8B", + "pageElement": "id('main')//div[contains(concat(' ', @class, ' '), ' mainBlock ')][.//div[contains(concat(' ', @class, ' '), ' qotC ')]]", + "nextLink": "//span[@class='TargetPage']/following-sibling::a[1]", "url": "^https?://ejje\\.weblio\\.jp/sentence/content/", - "pageElement": "id('main')//div[contains(concat(' ', @class, ' '), ' kiji ')]/div[contains(concat(' ', @class, ' '), ' qotC ')]", - "nextLink": "//span[@class='TargetPage']/following-sibling::a[1]" + "exampleUrl": "http://ejje.weblio.jp/sentence/content/%E6%84%9F%E3%81%98%E3%82%8B" }, - "created_at": "2011-01-11T20:11:35+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mi", + "name": "Weblio英語例文検索", + "created_at": "2011-01-11T20:11:35+09:00", + "updated_at": "2024-01-13T17:03:32+09:00" }, { "resource_url": "http://wedata.net/items/41272", "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2011-01-10T13:18:29+09:00", "data": { - "pageElement": "//table[@class='table']//tr[not(td/@bgcolor='#99CCFF')]", - "exampleUrl": "https://www.atsoho.com/jobinfo/index/type-all.html", - "url": "^https://(www\\.)?atsoho\\.com/(?:job|soho)info/index/type-", - "nextLink": "id('center_contents')/div[contains(concat(' ', @class, ' '), ' table_sentence ')][last()]/text()[contains(.,'1') or contains(.,'2') or contains(.,'3') or contains(.,'4') or contains(.,'5') or contains(.,'6') or contains(.,'7') or contains(.,'8') or contains(.,'9')]/following-sibling::a[1]" + "pageElement": "//div[@class='et_pb_code_inner' or @class='et_pb_text_inner']/div[contains(concat(' ', @class, ' '), ' et_pb_section ')]", + "nextLink": "//strong/following-sibling::a[1][contains(@href, 'pg=')]", + "url": "^https://atsoho\\.com/", + "exampleUrl": "https://atsoho.com/job/\r\nhttps://atsoho.com/work/category?type=all" }, - "updated_at": "2020-05-14T11:35:04+09:00", - "name": "@SOHO  お仕事を探す・SOHOを探す", - "created_by": "itouhiro" + "created_by": "itouhiro", + "name": "@SOHO", + "created_at": "2011-01-10T13:18:29+09:00", + "updated_at": "2023-11-04T20:25:26+09:00" }, { "resource_url": "http://wedata.net/items/41269", @@ -38964,7 +39929,7 @@ { "resource_url": "http://wedata.net/items/39011", "data": { - "pageElement": "//div[normalize-space(@class)=\"story\"]/node()[not(contains(@class, 'ad-aside') or @class=\"pager-Nextpage\" or preceding-sibling::div[@class=\"pager-Nextpage\"])]", + "pageElement": "//div[normalize-space(@class)='story']/br[last()]/preceding-sibling::node()[not(contains(@class, 'ad-aside'))][./preceding-sibling::div or ./preceding-sibling::script]", "nextLink": "//link[@rel=\"next\"]", "url": "^https?://www\\.excite\\.co\\.jp/news/article/", "exampleUrl": "https://www.excite.co.jp/news/article/E1681948296976/\r\nhttps://www.excite.co.jp/news/article/E1683710030978/" @@ -38973,7 +39938,7 @@ "created_by": "t_f_m", "name": "エキサイトニュース 記事", "created_at": "2010-10-30T21:52:08+09:00", - "updated_at": "2023-05-22T22:23:41+09:00" + "updated_at": "2023-08-05T09:03:35+09:00" }, { "resource_url": "http://wedata.net/items/38952", @@ -40481,17 +41446,18 @@ }, { "resource_url": "http://wedata.net/items/33375", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2010-06-30T19:18:08+09:00", "data": { - "pageElement": "//article", - "exampleUrl": "https://websunday.net/backstage/hata/", - "url": "^https://websunday\\.net/backstage/[^/]+/", - "nextLink": "//li[@class='prev']/a" + "pageElement": "id('bn')/preceding-sibling::*", + "considerationUrl": "https://websunday.net/5930/", + "nextLink": "//nav/ul/li[@class='prev']/a", + "url": "^https://websunday\\.net/.", + "exampleUrl": "https://websunday.net/author/670/ https://websunday.net/6369/" }, - "updated_at": "2020-05-11T07:20:48+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "furyu-tei", "name": "サンデーまんが家BACKSTAGE", - "created_by": "furyu-tei" + "created_at": "2010-06-30T19:18:08+09:00", + "updated_at": "2023-10-03T20:12:36+09:00" }, { "resource_url": "http://wedata.net/items/33367", @@ -40888,17 +41854,17 @@ }, { "resource_url": "http://wedata.net/items/33051", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2010-05-31T22:01:38+09:00", "data": { - "pageElement": "//section[@class=\"news-list\"]//li", - "exampleUrl": "https://news.biglobe.ne.jp/economy/whole/", + "pageElement": "//section[contains(@class, '-list')]/div[@class='bx']/ul", + "nextLink": "//a[@class='next']", "url": "^https://news\\.biglobe\\.ne\\.jp/", - "nextLink": "//a[@class='next']" + "exampleUrl": "https://news.biglobe.ne.jp/economy/whole/\r\nhttps://news.biglobe.ne.jp/list/006/557/%E3%83%97%E3%83%AD%E9%87%8E%E7%90%83.html\r\nhttps://news.biglobe.ne.jp/video/" }, - "updated_at": "2020-05-10T11:00:20+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", "name": "BIGLOBEニュース", - "created_by": "t_f_m" + "created_at": "2010-05-31T22:01:38+09:00", + "updated_at": "2023-09-20T22:24:07+09:00" }, { "name": "\u9ad8\u6728\u6d69\u5149\uff20\u81ea\u5b85\u306e\u65e5\u8a18", @@ -41014,18 +41980,18 @@ "created_by": "zumlin" }, { - "name": "Filehippo - Latest Software Updates", + "resource_url": "http://wedata.net/items/32964", "data": { - "url": "^https://.*filehippo\\.com/.", - "pageElement": "//ul[@class='list-programs mb-m']/li|//div[contains(concat(' ', @class, ' '), ' post-item ')]", - "exampleUrl": "https://filehippo.com/latest\r\nhttps://filehippo.com/jp/latest/\r\nhttps://news.filehippo.com/blog/", - "nextLink": "//link[@rel='next']|//a[@class='next']" + "pageElement": "//ul[@class='list-programs mb-m']/li|//div[contains(concat(' ', @class, ' '), ' post-item ') and contains(@class, 'type-post')]", + "nextLink": "//link[@rel='next']|//a[@class='next']", + "url": "^https://(\\w+\\.)?filehippo\\.com/.", + "exampleUrl": "https://filehippo.com/latest\r\nhttps://filehippo.com/jp/latest/\r\nhttps://news.filehippo.com/blog/" }, + "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "zumlin", - "resource_url": "http://wedata.net/items/32964", + "name": "Filehippo - Latest Software Updates", "created_at": "2010-05-22T20:42:22+09:00", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2020-03-09T03:59:45+09:00" + "updated_at": "2024-07-14T07:50:11+09:00" }, { "resource_url": "http://wedata.net/items/32962", @@ -43664,17 +44630,17 @@ }, { "resource_url": "http://wedata.net/items/31136", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "created_at": "2010-01-17T17:26:45+09:00", "data": { - "pageElement": "//div[@class=\"maincol_inner\"]/*[./following-sibling::ul]", - "exampleUrl": "https://www.publickey.jp/blog/09/post_51.html\r\nhttps://www.publickey.jp/bookmarked/09/perl.html\r\nhttps://www.publickey1.jp/blog/10/nosqlcap.html", - "url": "^https://(?:www\\.)?publickey1?\\.jp/[^/]+/\\d+/\\w+\\.html", - "nextLink": "id('maincol')//em[contains(.,'前の記事')]/following-sibling::a" + "pageElement": "//li[./span[@class='date']]", + "nextLink": "//div[@class='content-nav']/p/a", + "url": "^https://(?:www\\.)?publickey1?\\.jp/", + "exampleUrl": "https://www.publickey1.jp/cloud/" }, - "updated_at": "2020-05-05T13:11:59+09:00", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "t_f_m", "name": "Publickey", - "created_by": "t_f_m" + "created_at": "2010-01-17T17:26:45+09:00", + "updated_at": "2023-10-03T09:12:10+09:00" }, { "resource_url": "http://wedata.net/items/31126", @@ -45101,31 +46067,31 @@ { "resource_url": "http://wedata.net/items/29499", "data": { - "pageElement": "//nav[@class=\"NA_pager_wrapper\"]/preceding-sibling::*[1][contains(@class,\"NA_imglist\") or contains(@class,\"NA_card_wrapper\")]", + "pageElement": "//nav[@class='NA_pager_wrapper']/following-sibling::*[./following-sibling::nav]", "nextLink": "//li[contains(concat(' ', normalize-space(@class), ' '), ' NA_pager_next ')]/a", - "url": "^https://natalie\\.mu/(?:[^/]+/)*?(?:artist|(?:site)?news|pp|work|gallery/hot|tag)", - "exampleUrl": "http://natalie.mu/sitenews\r\nhttp://natalie.mu/comic/gallery/hot" + "url": "^https?://natalie\\.mu/", + "exampleUrl": "https://natalie.mu/sitenews https://natalie.mu/comic/column/394626" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "inucara", - "name": "ナタリー - ニュース、アーティスト、作品一覧", + "name": "ナタリー", "created_at": "2009-08-12T21:58:46+09:00", - "updated_at": "2020-12-07T21:17:08+09:00" + "updated_at": "2023-08-24T07:10:45+09:00" }, { "resource_url": "http://wedata.net/items/29498", "data": { - "pageElement": "//div[@class=\"NA_article_body\"]", + "pageElement": "//nav[@class='NA_pager_wrapper']/preceding-sibling::*[not(self::nav)][not(./preceding-sibling::nav)]", "comment": "url of 29498 must longer than http://wedata.net/items/29499", "nextLink": "//ul[@class=\"NA_pager\"]/li[contains(concat(\" \",@class,\" \"),\" NA_pager_next \")]/a|//div[contains(concat(\" \",@class,\" \"),\" NA_article_img \")]/a|//div[contains(concat(\" \",@class,\" \"),\" NA_article_gallery \")]/ul[@class=\"NA_imglist\"]/li/a", - "url": "^https?://natalie\\.mu/(?:(?:(?:com|mus)ic|eiga|o(?:yatsu|warai)|stage)/)?(?:column|news|gallery/[^/]+/\\d+(?:/media)?)/\\d", - "exampleUrl": "https://natalie.mu/music/gallery/news/19812/28317\r\nhttps://natalie.mu/comic/gallery/news/18577/26375\r\nhttps://natalie.mu/comic/news/18577\r\nhttps://natalie.mu/music/news/120722\r\nhttps://natalie.mu/eiga/news/156194\r\nhttps://natalie.mu/stage/news/212854\r\nhttps://natalie.mu/eiga/news/288207\r\nhttps://natalie.mu/comic/news/239966\r\nhttps://natalie.mu/comic/column/394626\r\nhttps://natalie.mu/comic/gallery/column/394626/1437095\r\nhttps://natalie.mu/comic/gallery/news/407671/media/39848" + "url": "^https?://natalie\\.mu/(?:(?:(?:com|mus)ic|eiga|o(?:yatsu|warai)|stage)/)?gallery", + "exampleUrl": "https://natalie.mu/music/gallery/news/19812/28317\r\nhttps://natalie.mu/comic/gallery/news/18577/26375\r\nhttps://natalie.mu/comic/gallery/column/394626/1437095\r\nhttps://natalie.mu/comic/gallery/news/407671/media/39848" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "inucara", - "name": "ナタリー - 画像 ニュース 統合", + "name": "ナタリー - ギャラリー", "created_at": "2009-08-12T21:40:29+09:00", - "updated_at": "2020-12-08T01:48:03+09:00" + "updated_at": "2023-08-24T07:07:36+09:00" }, { "resource_url": "http://wedata.net/items/29492", @@ -45818,20 +46784,18 @@ }, { "resource_url": "http://wedata.net/items/29177", - "name": "Slickdeals", - "created_by": "mark", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-01-31T14:37:50+09:00", "data": { - "Stylish": "@-moz-document domain(\"slickdeals.net\") {\r\n .autopagerize_page_separator~.gridCategory .gridHeading{display:none !important;}\r\n}", - "exampleUrl": "https://slickdeals.net/deals/ https://slickdeals.net/deals/games/ https://slickdeals.net/f/9374587-samsung-saturday-is-on-sams-club-cctv-security-system-199-00\r\n", - "comment": "Check your expression before deleting others' one, or at least leave a comment saying why did you delete it. I've corrected it, btw.\r\nUncaught DOMException: Failed to execute '$x' on 'CommandLineAPI': The string '//div[@class='dealRow' or @class='postReplyContainer']|id('deals')/div[.//@class='itemBottomRow']|' is not a valid XPath expression.\r\n", - "bookmarklet": "Array.prototype.forEach.call(document.querySelectorAll('img'), function(img) { var lazySrc = img.hasAttribute('data-src') ? img.getAttribute('data-src') : img.getAttribute('data-original'); if (lazySrc) { img.src = lazySrc;} });", - "url": "^https?://(?:[^.]+\\.)?slickdeals\\.net/", - "pageElement": "//div[@class='dealRow' or @class='postReplyContainer']|id('deals')/div[contains(@class,'fpGridBox grid')]", - "nextLink": "//a[@class='button' and .='Next' or contains(@class,'icon-arrow-right2')]" + "pageElement": "//div[@data-module-name]/div[@class='dealRow'] |\r\n//div[@data-module-name]/div[@class='resultRow'] |\r\n//ul[contains(@class,'frontpageGrid')] |\r\n//ul[@class='categoryPageDealGrid'] |\r\n//section[@class='commentsSection']/div[@class='commentsSectionComment']", + "comment": "2023 Update: This item now works for all parts of the Slickdeals website, including the Front Page, Deal Pages, Search, and Comments. Note that this item hasn't been updated in nearly 7 years and was no longer working, so the \"bookmarklet\" and \"Stylish\" keys were removed as a precaution (they can be re-added with their new correct values if needed).", + "nextLink": "//div[contains(@class,'pagination')]/a[contains(.,'Next')] |\r\n//div[@class='paginationPages']/span/following-sibling::a |\r\n//div[contains(@class,'slickdealsPagination')]/span[@class='slickdealsPagination__pageNumber']/following-sibling::a", + "url": "^https://(?:[^.]+\\.)?slickdeals\\.net/", + "exampleUrl": "https://slickdeals.net/\r\nhttps://slickdeals.net/deals/home/\r\nhttps://slickdeals.net/newsearch.php?q=infinity\r\nhttps://slickdeals.net/f/17077657-pokemon-trading-card-game-scarlet-violet-151-ultra-premium-collection-96-free-shipping" }, - "created_at": "2009-06-22T07:57:28+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "mark", + "name": "Slickdeals", + "created_at": "2009-06-22T07:57:28+09:00", + "updated_at": "2023-11-22T12:12:29+09:00" }, { "resource_url": "http://wedata.net/items/29155", @@ -47120,7 +48084,7 @@ { "resource_url": "http://wedata.net/items/27186", "data": { - "pageElement": "id(\"imglst\")|id(\"body\")", + "pageElement": "id('article_contents')", "nextLink": "//a[@class='next']", "url": "^https?://carview\\.yahoo\\.co\\.jp/article/detail/", "exampleUrl": "https://carview.yahoo.co.jp/article/detail/12d5012bd31849b44885026cdc03cf9e7a22f514/" @@ -47129,7 +48093,7 @@ "created_by": "morimasa", "name": "試乗レポート - carview!", "created_at": "2009-02-19T14:35:03+09:00", - "updated_at": "2020-07-12T10:33:38+09:00" + "updated_at": "2023-09-16T12:31:10+09:00" }, { "name": "Unicode Character Search", @@ -47783,17 +48747,17 @@ }, { "resource_url": "http://wedata.net/items/26590", - "name": "写真素材 [フォトライブラリー]", - "created_by": "クリト", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2016-02-09T08:26:08+09:00", "data": { - "exampleUrl": "http://www.photolibrary.jp/search/?p=%B3%D8%B9%BB", - "url": "^https?://(?:www\\.)?photolibrary\\.jp/search/", - "pageElement": "//ul[@class='pList pListLarge']/li[.//@class='photo']", - "nextLink": "//span[@class='next']//a" + "pageElement": "//ul[@class='pList pListLarge']/li[.//*[contains(@class, 'photo')]]", + "nextLink": "//span[@class='next']//a", + "url": "^https?://(?:www\\.)?photolibrary\\.jp/", + "exampleUrl": "https://www.photolibrary.jp/search/?p=%B3%D8%B9%BB\r\nhttps://www.photolibrary.jp/newarrival/\r\nhttps://www.photolibrary.jp/cat/cooking_1.html" }, - "created_at": "2009-01-06T22:50:33+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "クリト", + "name": "写真素材 [フォトライブラリー]", + "created_at": "2009-01-06T22:50:33+09:00", + "updated_at": "2024-08-25T08:35:31+09:00" }, { "resource_url": "http://wedata.net/items/26587", @@ -48082,8 +49046,9 @@ "resource_url": "http://wedata.net/items/25843", "data": { "pageElement": "//div[contains(@class, 'article-body')][./*][not(//div[contains(@class,'skin-premium')])]", - "considerationUrl": "http://jbpress.ismedia.jp/articles/-/5619 http://jbpress.ismedia.jp/articles/-/3524 http://jbpress.ismedia.jp/articles/-/42311 ", - "nextLink": "//*[contains(@class,'next')]/descendant-or-self::a", + "considerationUrl": "http://jbpress.ismedia.jp/articles/-/5619 http://jbpress.ismedia.jp/articles/-/3524 http://jbpress.ismedia.jp/articles/-/42311 https://jbpress.ismedia.jp/articles/-/82158?page=4", + "comment": "https://jbpress.ismedia.jp/articles/-/82158?page=4 から別の記事を取得しないように修正", + "nextLink": "//*[contains(@class,'next')]/descendant-or-self::a[contains(@href,'page=')]", "url": "^https?://(?:jbpress|wedge)\\.ismedia\\.jp/articles/", "exampleUrl": "http://wedge.ismedia.jp/articles/-/142" }, @@ -48091,7 +49056,7 @@ "created_by": "think", "name": "isMedia Network [JBpress(old design), WEDGE Infinity, etc]", "created_at": "2008-11-27T00:55:35+09:00", - "updated_at": "2022-02-27T19:12:59+09:00" + "updated_at": "2024-07-21T21:56:35+09:00" }, { "resource_url": "http://wedata.net/items/25823", @@ -48433,17 +49398,17 @@ }, { "resource_url": "http://wedata.net/items/25601", - "name": "みんカラ", "data": { - "url": "^https?://minkara\\.carview\\.co\\.jp/", - "pageElement": "//div[@class='mainright']/table[@class='car-table']//tr|//ul[ ../@class='maincontents_body displaymode-detail' or @class='pr_search_result_box' or @class='gallery-list-photo clearfix']/li", - "exampleUrl": "http://minkara.carview.co.jp/en/car/mini/mini/partsreview/? http://minkara.carview.co.jp/en/car/mini/mini/note/ http://minkara.carview.co.jp/en/usercar/decotora/ http://minkara.carview.co.jp/en/note/?ci=1 http://minkara.carview.co.jp/en/partsreview/?bi=1&ci=1", - "nextLink": "//a[contains(@id,'lnkNext') or @class='page-num next']" + "pageElement": "//div[@class='contents'][count(./*)>1]", + "nextLink": "//div[@class='paging']//a[contains(., '>')]", + "url": "^https?://minkara\\.carview\\.co\\.jp/userid/\\d+/blog/", + "exampleUrl": "https://minkara.carview.co.jp/userid/2209010/blog/b/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "x2xx", + "name": "みんカラ ブログ", "created_at": "2008-10-26T01:16:07+09:00", - "updated_at": "2020-04-05T07:13:38+09:00" + "updated_at": "2024-03-30T11:03:00+09:00" }, { "name": "\u3044\u3061\u3054\u3046\u3057\u3064", @@ -48952,17 +49917,17 @@ }, { "resource_url": "http://wedata.net/items/2665", - "name": "PC Magazine", "data": { + "pageElement": "//ul[contains(concat(' ', @class, ' '), ' pagination ')]/preceding-sibling::div[@class='w-full']", + "nextLink": "//a[@rel='next']", "url": "^https://(www\\.)?pcmag\\.com/.", - "pageElement": "//div[@class='w-full']", - "exampleUrl": "https://www.pcmag.com/picks", - "nextLink": "//a[@rel='next']" + "exampleUrl": "https://www.pcmag.com/picks\r\nhttps://www.pcmag.com/categories/system-utilities" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "triptoy", + "name": "PC Magazine", "created_at": "2008-09-28T15:17:02+09:00", - "updated_at": "2020-04-01T11:20:18+09:00" + "updated_at": "2024-07-14T07:48:12+09:00" }, { "name": "FREESPOT", @@ -49456,18 +50421,18 @@ "created_at": "2008-08-27T17:07:44+09:00" }, { - "name": "Amazon.co.jp - \u6ce8\u6587\u5c65\u6b74", - "resource_url": "http:\/\/wedata.net\/items\/2351", - "updated_at": "2012-01-17T01:42:18+09:00", - "created_by": "haoyayoi@hatena", - "database_resource_url": "http:\/\/wedata.net\/databases\/AutoPagerize", + "resource_url": "http://wedata.net/items/2351", "data": { - "pageElement": "id(\"cs-orders\")\/div[@class=\"action-box rounded\"]", - "url": "^https:\/\/www\\.amazon\\.co\\.jp\/gp\/css\/history(?:\/orders)?\/view\\.html", - "nextLink": "id(\"cs-orders\")\/div\/div\/div\/a[.=\"\u6b21\u3078 \u00bb\"]", - "exampleUrl": "https:\/\/www.amazon.co.jp\/gp\/css\/history\/view.html?ie=UTF8&startAtIndex=0&orderFilter=year-2007&groupID=0" + "pageElement": "//div[@class='order-card js-order-card']", + "nextLink": "//a[text()='次へ']", + "url": "^https?://www\\.amazon\\.co\\.jp/(gp/css/order-history||your-orders/)", + "exampleUrl": "https://www.amazon.co.jp/gp/css/order-history?ref_=nav_orders_first\r\nhttps://www.amazon.co.jp/your-orders/orders?timeFilter=year-2024&ref_=ppx_yo2ov_dt_b_filter_all_y2024" }, - "created_at": "2008-08-27T12:11:07+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "haoyayoi@hatena", + "name": "Amazon.co.jp - 注文履歴", + "created_at": "2008-08-27T12:11:07+09:00", + "updated_at": "2024-03-07T11:17:10+09:00" }, { "resource_url": "http://wedata.net/items/2258", @@ -50062,14 +51027,14 @@ "data": { "pageElement": "id('searched')/li|//table[@class='rank']/tbody/tr", "nextLink": "//a[@class='next']", - "url": "^https://(?:\\w+db\\.)?supleks\\.jp/search", - "exampleUrl": "https://ramendb.supleks.jp/search\r\nhttps://supleks.jp/search?q=カレー" + "url": "^https://(?:[^/]+db\\.)?supleks\\.jp/search", + "exampleUrl": "https://ramendb.supleks.jp/search\r\nhttps://supleks.jp/search?q=カレー\r\nhttps://tokyo-ramendb.supleks.jp/search?state=tokyo" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "ngs", "name": "なんとかデータベース", "created_at": "2008-07-23T00:07:49+09:00", - "updated_at": "2020-07-01T17:58:28+09:00" + "updated_at": "2024-02-04T10:42:36+09:00" }, { "resource_url": "http://wedata.net/items/2025", @@ -50582,17 +51547,17 @@ }, { "resource_url": "http://wedata.net/items/1868", - "name": "dafont.com", "data": { + "pageElement": "//a[@name]|//a[@name]/following-sibling::*[preceding-sibling::div/@class=\"dfxsmall\"][following-sibling::div/@class=\"titlebar\"]", + "nextLink": "//a[@title=\"Keyboard shortcut: Right arrow\"]", "url": "^https://(www\\.)?dafont\\.com/", - "pageElement": "//div[@class='titlebar'][1]/following-sibling::div[form/@name='nb'][1]/following-sibling::*[following-sibling::div/@class='titlebar']", - "exampleUrl": "https://www.dafont.com/theme.php?cat=113\r\nhttps://www.dafont.com/new.php", - "nextLink": "//span[@class='select']/following-sibling::a[1]" + "exampleUrl": "https://www.dafont.com/theme.php?cat=113\r\nhttps://www.dafont.com/new.php" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "cool_ni_ikou", + "name": "dafont.com", "created_at": "2008-06-28T06:32:03+09:00", - "updated_at": "2020-03-28T11:57:55+09:00" + "updated_at": "2024-04-13T16:02:33+09:00" }, { "resource_url": "http://wedata.net/items/1867", @@ -50667,16 +51632,16 @@ { "resource_url": "http://wedata.net/items/1857", "data": { - "pageElement": "id(\"article-body-inner\")/*", + "pageElement": "//div[contains(concat(' ', normalize-space(@class), ' '), ' article-body-inner ')]|id('article-body-inner')", "nextLink": "//*[@class=\"next\"]/a", "url": "^https?://(www\\.)?toyokeizai\\.net/articles/", - "exampleUrl": "http://toyokeizai.net/articles/-/11744" + "exampleUrl": "https://toyokeizai.net/articles/-/11744" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "takotako", "name": "東洋経済オンライン article", "created_at": "2008-06-27T13:44:17+09:00", - "updated_at": "2022-01-24T15:33:30+09:00" + "updated_at": "2024-07-23T00:49:11+09:00" }, { "resource_url": "http://wedata.net/items/1855", @@ -51313,17 +52278,17 @@ }, { "resource_url": "http://wedata.net/items/1567", - "name": "ニコニコ大百科", - "created_by": "gifnksm", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2019-03-09T12:41:46+09:00", "data": { - "exampleUrl": "http://dic.nicovideo.jp/m/u/a/", + "pageElement": "id(\"main\")//div[contains(@class,\"st-box_contents\")]/table[@class]//tr[td]|\r\n//dd[starts-with(@id, 'search_table_contents_')]", + "nextLink": "id(\"main\")//div[contains(@class,\"st-box_contents\")]//div[@class=\"st-pg_contents\"]/span[@class=\"current\"]/following-sibling::a", "url": "^https://dic\\.nicovideo\\.jp/(?:m/[nu]|s)/(?:[aciluv]|all|al|oekaki|mml)/", - "pageElement": "id(\"main\")//div[contains(@class,\"st-box_contents\")]/table[@class=\"st-table\"]//tr[td]", - "nextLink": "id(\"main\")//div[contains(@class,\"st-box_contents\")]//div[@class=\"st-pg_contents\"]/span[@class=\"current\"]/following-sibling::a" + "exampleUrl": "https://dic.nicovideo.jp/m/u/a/\r\nhttps://dic.nicovideo.jp/s/oekaki/a/A/rev_created/desc/1-?query_type=a\r\nhttps://dic.nicovideo.jp/s/mml/a/A/rev_created/desc/1-?query_type=a\r\nhttps://dic.nicovideo.jp/s/al/t/A/rev_created/desc/1-?query_type=t" }, - "created_at": "2008-05-24T05:16:36+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "gifnksm", + "name": "ニコニコ大百科", + "created_at": "2008-05-24T05:16:36+09:00", + "updated_at": "2023-11-10T18:23:48+09:00" }, { "resource_url": "http://wedata.net/items/1563", @@ -51835,19 +52800,19 @@ "updated_at": "2020-03-27T13:28:06+09:00" }, { - "name": "Hatena Bookmark News", - "updated_at": "2008-05-23T21:42:58+09:00", - "created_by": "os0x", - "resource_url": "http:\/\/wedata.net\/items\/834", - "database_resource_url": "http:\/\/wedata.net\/databases\/AutoPagerize", + "resource_url": "http://wedata.net/items/834", "data": { - "pageElement": "\/\/div[@class=\"entry\"][position()!=1]", - "insertBefore": "\/\/h3[@class=\"main-navi\"]", - "url": "^http:\/\/labs\\.ceek\\.jp\/hbnews\/.", - "nextLink": "\/\/h3[@class=\"main-navi\"]\/a[last()]", - "exampleUrl": "http:\/\/labs.ceek.jp\/hbnews\/list.cgi" + "pageElement": "//div[@class=\"entry\"]", + "insertBefore": "//h3[@class=\"main-navi\"]", + "nextLink": "//h3[@class=\"main-navi\"]/a[last()]", + "url": "^http://labs\\.ceek\\.jp/hbnews/.", + "exampleUrl": "http://labs.ceek.jp/hbnews/list.cgi" }, - "created_at": "2008-04-20T20:46:01+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "os0x", + "name": "Hatena Bookmark News", + "created_at": "2008-04-20T20:46:01+09:00", + "updated_at": "2024-07-14T07:45:37+09:00" }, { "resource_url": "http://wedata.net/items/832", @@ -52064,31 +53029,31 @@ }, { "resource_url": "http://wedata.net/items/731", - "name": "ニコニコ動画", - "created_by": "swdyh", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-12-15T17:30:26+09:00", "data": { - "exampleUrl": "http://www.nicovideo.jp/newarrival\r\nhttp://www.nicovideo.jp/mylist_search/test\r\nhttp://www.nicovideo.jp/openlist/sm9\r\nhttp://www.nicovideo.jp/recent\r\nhttp://www.nicovideo.jp/related_tag/test\r\nhttp://www.nicovideo.jp/search/test\r\nhttp://www.nicovideo.jp/tag/test", - "url": "^https?://(?:www|nine)\\.nicovideo\\.jp/(?:newarrival|mylist_search|migiue|openlist|recent|related_tag|search|tag)", - "pageElement": "id('PAGEBODY')/div[starts-with(@class,'content_672')]/*[preceding::table/@class='pager' or preceding-sibling::div[h1][not(count(following::table[@class='pager'])=2)]][following::table/@class='pager'][not(self::script)]|//div[contains(concat(' ',normalize-space(@class),' '), ' main ') or @data-main-contents]/div[contains(@class,'contentBody')]/ul[@class='list']/node()", - "nextLink": "(/descendant::span|//div[@class='pager']/a)[contains(@class,'active') or contains(@class,'here')]/following-sibling::a[1]" + "pageElement": "//div[contains(concat(' ', @class, ' '), ' NewVideosPage-videoList ')]|\r\n//div[contains(concat(' ', @class, ' '), ' OpenlistPage-openList ')]|\r\n//ul[contains(concat(' ', @class, ' '), ' RelatedTagPage-tagList ')]|\r\n//div[contains(concat(' ',normalize-space(@class),' '), ' main ') or @data-main-contents]/div[contains(@class,'contentBody')]/ul[@class='videoListInner']/node()", + "nextLink": "//li[contains(@class, 'current')][number()>0]/following-sibling::li[1]/a[number()>0]|\r\n//div[@class='pager']/a[contains(@class,'active')]/following-sibling::a[1]", + "url": "^https?://www\\.nicovideo\\.jp/(?:newarrival|openlist|recent|related_tag|search|tag)", + "exampleUrl": "http://www.nicovideo.jp/newarrival\r\nhttp://www.nicovideo.jp/openlist/sm9\r\nhttp://www.nicovideo.jp/recent\r\nhttp://www.nicovideo.jp/related_tag/test\r\nhttp://www.nicovideo.jp/search/test\r\nhttp://www.nicovideo.jp/tag/test" }, - "created_at": "2008-04-16T12:36:46+09:00" + "created_by": "swdyh", + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "name": "ニコニコ動画", + "created_at": "2008-04-16T12:36:46+09:00", + "updated_at": "2024-04-05T22:43:44+09:00" }, { "resource_url": "http://wedata.net/items/728", - "name": "デイリーポータルZ", "data": { - "url": "^https://(?:backnumber\\.)?dailyportalz\\.jp/20", - "pageElement": "//td[@width='540' or @width='640' or @width='600'][@align='center']/*", - "exampleUrl": "https://backnumber.dailyportalz.jp/2010/04/19/c/", - "nextLink": "//a[contains(.,'>')]" + "pageElement": "//div[@class='ccm-pagination-wrapper']/preceding-sibling::div[contains(concat(' ', @class, ' '), ' headline-row ')]", + "nextLink": "//a[@rel='next']", + "url": "^https://dailyportalz\\.jp/kiji", + "exampleUrl": "https://dailyportalz.jp/kiji\r\nhttps://dailyportalz.jp/kiji/2023/1" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "swdyh", + "name": "特集 :: デイリーポータルZ", "created_at": "2008-04-16T12:36:46+09:00", - "updated_at": "2020-03-27T07:50:07+09:00" + "updated_at": "2023-08-23T20:29:20+09:00" }, { "resource_url": "http://wedata.net/items/725", @@ -52926,17 +53891,17 @@ }, { "resource_url": "http://wedata.net/items/510", - "name": "CodeZine、EnterpriseZine、MarkeZine、MONEYzine(記事一覧、個別記事)", "data": { - "url": "^https?://(?:c(?:areer|ode)|enterprise|m(?:arke|oney))zine\\.jp/(?:a(?:rticle|uthor)/|\\w+online/|iti/)", - "pageElement": "//ul[@class='catList' or @class='catTopList result cf']/li|//div[@class='article']", - "exampleUrl": "http://codezine.jp/article/tag/169\r\nhttp://enterprisezine.jp/article/corner/120\r\nhttp://enterprisezine.jp/article/detail/2221\r\nhttp://markezine.jp/article/\r\nhttp://enterprisezine.jp/article/detail/1991\r\nhttp://codezine.jp/article/corner/210\r\nhttp://codezine.jp/article/detail/2979\r\nhttp://enterprisezine.jp/author/133\r\nhttp://enterprisezine.jp/dbonline/detail/6123\r\nhttp://enterprisezine.jp/iti/detail/5752\r\n", - "nextLink": "//a[@rel='next' or ../@class='nextBtn']" + "pageElement": "//ul[@class='c-articleindex_list']/ancestor-or-self::*[position()=1 or @class='c-primarysection -level2'][last()]|id('c-article_content')", + "nextLink": "//a[@rel='next']|//div[@class='c-pager_next']/a[not(//div[@class='c-article_wall'])]", + "url": "^https?://(?:code|enterprise|marke|ec|biz|hr|edtech|product)zine\\.jp/", + "exampleUrl": "https://codezine.jp/article/tag/169\r\nhttps://enterprisezine.jp/article/corner/120\r\nhttps://enterprisezine.jp/article/detail/2221\r\nhttps://markezine.jp/article/\r\nhttps://enterprisezine.jp/article/detail/1991\r\nhttps://codezine.jp/article/corner/210\r\nhttps://enterprisezine.jp/author/133\r\nhttps://eczine.jp/article/detail/13259\r\nhttps://bizzine.jp/article/detail/9498\r\nhttps://hrzine.jp/article/detail/5133\r\nhttps://edtechzine.jp/article/detail/9930\r\nhttps://productzine.jp/article/detail/2005" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "swdyh", + "name": "CodeZine、EnterpriseZine、MarkeZine、他(記事一覧、個別記事)", "created_at": "2008-04-16T12:35:45+09:00", - "updated_at": "2020-03-26T04:55:15+09:00" + "updated_at": "2023-10-24T20:34:11+09:00" }, { "resource_url": "http://wedata.net/items/503", @@ -53181,16 +54146,16 @@ { "resource_url": "http://wedata.net/items/446", "data": { - "pageElement": "id('groupsContent')/*", - "nextLink": "//li[@class='next ']/a", + "pageElement": "id('groupsContent')/*|//div[@data-hook='all_content'][//a[@href='https://www.deviantart.com/users/login']]", + "nextLink": "//link[@rel='next']|//li[@class='next ']/a", "url": "^https://[^.]+\\.deviantart\\.com/", - "exampleUrl": "http://groups.deviantart.com/\r\n" + "exampleUrl": "https://www.deviantart.com/ https://www.deviantart.com/groups/" }, "database_resource_url": "http://wedata.net/databases/AutoPagerize", "created_by": "swdyh", "name": "deviantART", "created_at": "2008-04-16T12:35:31+09:00", - "updated_at": "2020-07-23T11:19:12+09:00" + "updated_at": "2023-09-03T13:08:34+09:00" }, { "resource_url": "http://wedata.net/items/442", @@ -53319,17 +54284,17 @@ }, { "resource_url": "http://wedata.net/items/414", - "name": "All About 新着記事一覧", - "created_by": "swdyh", - "database_resource_url": "http://wedata.net/databases/AutoPagerize", - "updated_at": "2017-01-17T10:18:19+09:00", "data": { - "exampleUrl": "https://allabout.co.jp/gm/latest/1732/", + "pageElement": "//main/section[contains(@data-tracking-zone, 'mainContents')]|\r\n//ul[contains(concat(' ', @class, ' '), ' aa_media-list ')]", + "nextLink": "//a[.='次のページへ']", "url": "^https?://allabout\\.co\\.jp/", - "pageElement": "id('popin_read')/div/ul/*", - "nextLink": "//a[.='次のページへ']" + "exampleUrl": "https://allabout.co.jp/gm/latest/1732/\r\nhttps://allabout.co.jp/r_hobby/latest/" }, - "created_at": "2008-04-16T12:35:21+09:00" + "database_resource_url": "http://wedata.net/databases/AutoPagerize", + "created_by": "swdyh", + "name": "All About 新着記事一覧", + "created_at": "2008-04-16T12:35:21+09:00", + "updated_at": "2024-02-24T18:13:35+09:00" }, { "resource_url": "http://wedata.net/items/412", diff --git a/Pagetual/pagetual.schema.json b/Pagetual/pagetual.schema.json new file mode 100644 index 00000000000..565b8b77851 --- /dev/null +++ b/Pagetual/pagetual.schema.json @@ -0,0 +1,27 @@ +{ + "title": "Sites data", + "description": "Object containing site config", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "title": "Site Name", + "description": "The site's name.", + "examples": [ + "Google" + ], + "type": "string" + }, + "url": { + "title": "Site Url", + "description": "The Regexp of site's url.", + "examples": [ + "^https:\/\/google\\.com\/" + ], + "type": "string" + } + }, + "required": ["name", "url"] + } +} \ No newline at end of file diff --git a/Pagetual/pagetual.user.js b/Pagetual/pagetual.user.js index e5c27226239..ae4b3ad94f3 100644 --- a/Pagetual/pagetual.user.js +++ b/Pagetual/pagetual.user.js @@ -4,16 +4,38 @@ // @name:zh-TW 東方永頁機 // @name:ja 東方永頁機 // @name:ko 東方永頁機 +// @name:pt-BR Pagetual // @name:ru Pagetual // @name:de Pagetual // @name:es Pagetual // @name:fr Pagetual // @name:it Pagetual +// @name:id Pagetual +// @name:th Pagetual +// @name:nb Pagetual +// @name:sv Pagetual +// @name:sr Pagetual +// @name:sk Pagetual +// @name:hu Pagetual +// @name:ro Pagetual +// @name:fi Pagetual +// @name:el Pagetual +// @name:eo Pagetual +// @name:bg Pagetual +// @name:cs Pagetual +// @name:vi Pagetual +// @name:pl Pagetual +// @name:uk Pagetual +// @name:tr Pagetual +// @name:nl Pagetual +// @name:da Pagetual +// @name:fr-CA Pagetual // @namespace hoothin -// @version 1.9.36.43 -// @description Perpetual pages - powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule. +// @version 1.9.37.132 +// @description Perpetual pages - powerful auto-pager script. Auto fetching next paginated web pages and inserting into current page for infinite scroll. Support thousands of web sites without any rule. // @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页 // @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁 +// @description:pt-BR Páginas infinitas - um poderoso script de paginação automática. Carrega automaticamente as próximas páginas da web paginadas e as insere na página atual para rolagem infinita. Suporta milhares de sites sem nenhuma regra. // @description:ja Webページを自動で読み込み継ぎ足し表示を行うブラウザ拡張です、次のページ付けされた Web ページの自動読み込みと現在のページへの挿入 ルールなしで何千もの Web サイトをサポートします。 // @description:ko 페이지가 매겨진 다음 웹 페이지를 자동으로 로드하고 현재 페이지에 삽입합니다. 규칙 없이 수천 개의 웹 사이트를 지원합니다. // @description:ru Автоматическая подгрузка следующих страниц и вставка их содержимого в текущую страницу. Поддерживает тысячи сайтов даже с настройками по умолчанию. @@ -21,6 +43,26 @@ // @description:es Carga automática de las siguientes páginas web paginadas e inserción en la página actual. Admite miles de sitios web sin ninguna regla. // @description:fr Chargement automatique des pages Web paginées suivantes et insertion dans la page en cours. Prend en charge des milliers de sites Web sans aucune règle. // @description:it Caricamento automatico delle pagine Web impaginate successive e inserimento nella pagina corrente. Supporta migliaia di siti web senza alcuna regola. +// @description:id Pengambilan otomatis halaman web yang dipaginasi berikutnya dan penyisipan ke halaman saat ini untuk pengguliran tak terbatas. Mendukung ribuan situs web tanpa aturan apa pun. +// @description:th ดึงหน้าเว็บแบบแบ่งหน้าถัดไปโดยอัตโนมัติและแทรกลงในหน้าปัจจุบันเพื่อเลื่อนแบบไม่มีที่สิ้นสุด รองรับเว็บไซต์หลายพันแห่งโดยไม่มีกฎเกณฑ์ใดๆ +// @description:nb Henter automatisk neste paginerte nettsider og setter inn på gjeldende side for uendelig rulling. Støtt tusenvis av nettsider uten noen regel. +// @description:sv Hämtar automatiskt nästa paginerade webbsidor och infogar på aktuell sida för oändlig rullning. Stöd tusentals webbplatser utan några regler. +// @description:sr Аутоматско преузимање следећих пагинираних веб страница и уметање у тренутну страницу за бесконачно померање. Подржите хиљаде веб локација без икаквог правила. +// @description:sk Samodejno pridobivanje naslednjih paginiranih spletnih strani in vstavljanje v trenutno stran za neskončno drsenje. Podprite na tisoče spletnih mest brez pravil. +// @description:hu A következő oldalszámozott weboldalak automatikus lekérése és beszúrása az aktuális oldalra a végtelen görgetés érdekében. Több ezer webhely támogatása szabály nélkül. +// @description:ro Preluare automată a următoarelor pagini web paginate și inserare în pagina curentă pentru defilare infinită. Suportă mii de site-uri web fără nicio regulă. +// @description:fi Hakee automaattisesti seuraavat sivutetut verkkosivut ja lisäämällä nykyiselle sivulle loputonta vieritystä. Tukee tuhansia web-sivustoja ilman sääntöjä. +// @description:el Αυτόματη ανάκτηση επόμενων σελιδοποιημένων ιστοσελίδων και εισαγωγή στην τρέχουσα σελίδα για άπειρη κύλιση. Υποστηρίξτε χιλιάδες ιστοσελίδες χωρίς κανένα κανόνα. +// @description:eo Aŭtomate alportado de sekvaj paĝigitaj retpaĝoj kaj enmetado en nunan paĝon por senfina movo. Subtenu milojn da retejoj sen ajna regulo. +// @description:bg Автоматично извличане на следващите уеб страници с пагиниране и вмъкване в текущата страница за безкрайно превъртане. Поддържайте хиляди уеб сайтове без никакви правила. +// @description:cs Automatické načítání dalších stránkovaných webových stránek a vkládání do aktuální stránky pro nekonečné posouvání. Podporujte tisíce webových stránek bez jakýchkoli pravidel. +// @description:vi Tự động tìm các trang web được phân trang tiếp theo và chèn vào trang hiện tại để cuộn vô hạn. Hỗ trợ hàng ngàn trang web mà không cần bất kỳ quy tắc nào. +// @description:pl Automatyczne pobieranie kolejnych stron internetowych z podziałem na strony i wstawianie ich do bieżącej strony w celu nieskończonego przewijania. Obsługa tysięcy stron internetowych bez żadnej reguły. +// @description:uk Автоматичне отримання наступних веб-сторінок із розбивкою на сторінки та вставка на поточну сторінку для нескінченного прокручування. Підтримка тисяч веб-сайтів без будь-яких правил. +// @description:tr Sonraki sayfalı web sayfalarını otomatik olarak getirme ve sonsuz kaydırma için geçerli sayfaya ekleme. Hiçbir kural olmadan binlerce web sitesini destekleyin. +// @description:nl Automatisch ophalen van volgende gepagineerde webpagina's en invoegen in huidige pagina voor oneindig scrollen. Ondersteun duizenden websites zonder enige regel. +// @description:da Automatisk hentning af næste paginerede websider og indsættelse på nuværende side for uendelig rulning. Støt tusindvis af websteder uden nogen regler. +// @description:fr-CA Récupération automatique des pages Web paginées suivantes et insertion dans la page actuelle pour un défilement infini. Prise en charge de milliers de sites Web sans aucune règle. // @author hoothin // @license MPL-2.0 // @match *://*/* @@ -45,38 +87,68 @@ // @grant GM.deleteValue // @grant GM.info // @grant GM.setClipboard -// @downloadURL https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js -// @updateURL https://greasyfork.org/scripts/438684-pagetual/code/Pagetual.user.js +// @homepage https://github.com/hoothin/UserScripts/tree/master/Pagetual // @supportURL https://github.com/hoothin/UserScripts/issues // @connect wedata.net // @connect githubusercontent.com // @connect ghproxy.com +// @connect ghp.ci // @connect hoothin.github.io -// @run-at document-idle +// @run-at document-end // @connect * +// @contributionURL https://ko-fi.com/hoothin +// @contributionAmount 1 // ==/UserScript== (function() { 'use strict'; - + const pauseVideo = () => { + setTimeout(() => { + [].forEach.call(document.querySelectorAll("video"), video => { + video.removeAttribute && video.removeAttribute("autoplay"); + video.pause && video.pause(); + video.muted = true; + }); + }, 1000); + }; if (window.name === 'pagetual-iframe' || (window.frameElement && window.frameElement.name === 'pagetual-iframe')) { + [].forEach.call(document.querySelectorAll("iframe"), iframe => { + iframe.name = 'pagetual-iframe'; + }); var domloaded = function() { window.parent.postMessage('pagetual-iframe:DOMLoaded', '*'); }; if (window.opera) { document.addEventListener('DOMContentLoaded', domloaded, false); + pauseVideo(); } else { domloaded(); + if (document.readystate === 'complete') { + pauseVideo(); + } else { + window.addEventListener('load', () => { + pauseVideo(); + }, false); + } + } + if (getComputedStyle(document.documentElement).display === 'none') { + document.documentElement.style.display = 'block'; } - if (getComputedStyle(document.documentElement).display == 'none') document.documentElement.style.display = 'block'; - if (document.body && getComputedStyle(document.body).display == 'none') document.body.style.display = 'block'; + if (document.body && getComputedStyle(document.body).display === 'none') { + document.body.style.display = 'block'; + } + Element.prototype.scrollIntoView = function() { + console.log('ScrollIntoView blocked.'); + }; return; } - if (window.top != window.self) { + if (window.top !== window.self) { try { if (window.self.innerWidth < 300 || window.self.innerHeight < 300) { - return; + if (window.top.location.origin !== window.self.location.origin) { + return; + } } } catch(e) { return; @@ -84,18 +156,3497 @@ } const noRuleTest = false; - const lang = navigator.appName == "Netscape" ? navigator.language : navigator.userLanguage; - let config = {}; - switch (lang) { - case "zh-CN": - case "zh-SG": - config = { + var langName = navigator.appName === "Netscape" ? navigator.language : navigator.userLanguage; + const langData = [ + { + // English translation update by github.com/https433, admin@abby0666.xyz. + name: "English", + match: ["en"], + lang: { + enableDebug: "Enable debug output to console", + updateNotification: "Notification after rules updated", + disable: "Temporarily disable", + disableSite: "Toggle disabled state", + disableSiteTips: "Disabled on this site.", + enableSiteTips: "Enabled on this site.", + enable: "✅Enable automatic page turning", + tempActive: "Temporarily active", + toTop: "Back to Top.", + toBottom: "Go to Bottom.", + current: "Current Page.", + forceIframe: "Force to join next page", + cancelForceIframe: "Cancel Force join", + configure: "Configure Pagetual", + firstUpdate: "Click here to initialize the default rule list", + update: "Update online rules", + click2update: "Click to update rules from url now", + loadNow: "Load next automatically", + loadConfirm: "How many pages do you want to load? (0 means infinite)", + noNext: "No next link found, please create a new rule", + passSec: "Updated #t# seconds ago", + passMin: "Updated #t# minutes ago", + passHour: "Updated #t# hours ago", + passDay: "Updated #t# days ago", + cantDel: "Can't delete builtin rules", + confirmDel: "Are you sure you want to delete this rule?", + updateSucc: "Update succeeded", + beginUpdate: "Begin update, wait a moment please", + customUrls: "Import Pagetual or AutoPagerize rule url, one url per line.", + customRules: "Input custom rules. ✍️Contribute rules", + save: "Save", + loadingText: "Shojo Now Loading...", + opacity: "Opacity", + opacityPlaceholder: "0: hide spacer", + hideBar: "Hide the pagnation spacer", + hideBarButNoStop: "Hide but not stop", + dbClick2Stop: "Double-click on the blank space to pause", + sortTitle: "Sorting takes effect after the next rule update", + autoRun: "Auto enable (blacklist mode)", + autoLoadNum: "Amount for preload pages", + turnRate: "Turn the next page when it's less than 【X】 times page height from the footer", + inputPageNum: "Enter page number to jump", + enableHistory: "Write browsing history after page turning", + enableHistoryAfterInsert: "Write browsing history immediately after splicing, otherwise write after browsing", + contentVisibility: "Automatically switch content-visibility to improve rendering performance", + initRun: "Turn pages immediately after opening", + preload: "Preload next page for speeding up", + click2ImportRule: "Click to import base rules link, and then wait until the update is complete: ", + forceAllBody: "Join full body of page?", + openInNewTab: "Open urls of additions in new tab", + importSucc: "Import complete", + import: "Import", + editCurrent: "Edit rule for current website", + editBlacklist: "Edit the url blacklist, one entry per line, Supports [?,*] wildcarding.", + upBtnImg: "Icon of back to top", + downBtnImg: "Icon of go to footer", + sideControllerIcon: "Icon of sidebar", + loadingTextTitle: "Loading", + dbClick2StopCtrl: "Ctrl key", + dbClick2StopAlt: "Alt key", + dbClick2StopShift: "Shift key", + dbClick2StopMeta: "Meta key", + dbClick2StopKey: "Shortcut key", + pageElementCss: "Custom style for main page elements", + customCss: "Custom complete css", + firstAlert: "You have not imported the base rule, please select the appropriate rule to import", + picker: "Pagetual element picker", + closePicker: "Close Pagetual picker", + pickerPlaceholder: "Element selector, (Advanced users only, leave blank otherwise)", + pickerCheck: "Check selector and copy", + switchSelector: "Click to switch element", + gotoEdit: "Go to edit rule with current selector", + manualMode: "Disable splicing, manually advance next page using the right arrow key (or dispatch event 'pagetual.next')", + clickMode: "Disable splicing, automatically click the next page when scrolling to the end of the page", + pageBarMenu: "Click the center of the page bar to open the picker menu", + nextSwitch: "Switch next link", + arrowToScroll: "Press left arrow to scroll back and right arrow to advance page", + sideController: "Display the paging control bar in the sidebar", + sideControllerScroll: "Scroll toggle", + sideControllerAlways: "Always show", + hideLoadingIcon: "Hide loading animation", + hideBarArrow: "Hide arrow for page bar", + duplicate: "Duplicate Pagetual have been installed, check your script manager!", + forceStateIframe: "Embed full page as iframe", + forceStateDynamic: "Load dynamic content via iframe", + forceStateDisable: "Disable page turning on this site", + autoScrollRate: "Scroll speed (1~1000)", + disableAutoScroll: "Stop Auto Scroll", + enableAutoScroll: "Enable Auto Scroll", + toggleAutoScroll: "Toggle Auto Scroll", + ruleRequest: "Rule Request", + page: "Page ", + prevPage: "Prev page", + nextPage: "Next page", + errorRulesMustBeArray: "Rules must be an Array!", + errorJson: "JSON error, Check again!", + editSuccess: "Edit successfully", + errorWrongUrl: "Wrong url, Check again!", + errorAlreadyExists: "A rule already exists!", + settingsSaved: "The settings are saved, refresh to view", + iframe: "Forced split by iframe", + dynamic: "Dynamic loading", + reloadPage: "Edit completed, reload now?", + copied: "Copied", + noValidContent: "No valid content detected, a Captcha may be present", + outOfDate: "The script is outdated, update to the latest version please.", + hideBarTips: "Hide the pagination bar, toggle immersive experience", + setConfigPage: "Set current page as the default configuration page", + wedata2github: "Change the wedata address to the mirror address in the github repository", + addOtherProp: "Add rule properties", + addNextSelector: "Add selector content as nextLink", + addPageSelector: "Add selector content as pageElement", + propName: "Enter rule property name", + propValue: "Enter rule property value", + customFirst: "Ignore cache for local custom rules", + rulesExample: "Rules Example", + lastPage: "Reached the last page", + lastPageTips: "Show tips when reaching the last page" + } + }, + { + name: "한국어", + match: ["ko"], + lang: { + enableDebug: "콘솔에 디버그 출력 활성화", + updateNotification: "규칙 업데이트 후 알림", + disable: "일시적으로 비활성화", + disableSite: "비활성화 상태 전환", + disableSiteTips: "이 사이트에서 비활성화됨.", + enableSiteTips: "이 사이트에서 활성화됨.", + enable: "✅자동 페이지 넘김 활성화", + tempActive: "일시적으로 활성", + toTop: "맨 위로 이동.", + toBottom: "맨 아래로 이동.", + current: "현재 페이지.", + forceIframe: "다음 페이지 강제 결합", + cancelForceIframe: "강제 결합 취소", + configure: "Pagetual 설정", + firstUpdate: "기본 규칙 목록을 초기화하려면 여기를 클릭하세요", + update: "온라인 규칙 업데이트", + click2update: "URL에서 규칙을 지금 업데이트하려면 클릭하세요", + loadNow: "다음 페이지 자동 로드", + loadConfirm: "몇 페이지를 로드하시겠습니까? (0은 무한을 의미)", + noNext: "다음 링크를 찾을 수 없습니다. 새 규칙을 만들어 주세요", + passSec: "#t#초 전에 업데이트됨", + passMin: "#t#분 전에 업데이트됨", + passHour: "#t#시간 전에 업데이트됨", + passDay: "#t#일 전에 업데이트됨", + cantDel: "내장된 규칙은 삭제할 수 없습니다", + confirmDel: "이 규칙을 정말로 삭제하시겠습니까?", + updateSucc: "업데이트 성공", + beginUpdate: "업데이트를 시작합니다. 잠시만 기다려 주세요", + customUrls: "Pagetual 또는 AutoPagerize 규칙 URL 가져오기, 한 줄에 하나의 URL.", + customRules: "사용자 정의 규칙을 입력하세요. ✍️규칙 기여하기", + save: "저장", + loadingText: "로딩 중...", + opacity: "불투명도", + opacityPlaceholder: "0: 구분선 숨기기", + hideBar: "페이지 구분선 숨기기", + hideBarButNoStop: "숨기지만 중지하지 않음", + dbClick2Stop: "일시 중지하려면 빈 공간을 두 번 클릭하세요", + sortTitle: "정렬은 다음 규칙 업데이트 후에 적용됩니다", + autoRun: "자동 활성화 (블랙리스트 모드)", + autoLoadNum: "미리 로드할 페이지 수", + turnRate: "바닥글로부터 페이지 높이의 【X】배 미만일 때 다음 페이지로 넘기기", + inputPageNum: "이동할 페이지 번호를 입력하세요", + enableHistory: "페이지 넘김 후 방문 기록 저장", + enableHistoryAfterInsert: "페이지 결합 직후 방문 기록 저장, 그렇지 않으면 탐색 후 저장", + contentVisibility: "렌더링 성능 향상을 위해 content-visibility 자동 전환", + initRun: "페이지 열람 직후 자동 넘김 시작", + preload: "속도 향상을 위해 다음 페이지 미리 로드", + click2ImportRule: "기본 규칙 링크를 가져오려면 클릭하고 업데이트가 완료될 때까지 기다리세요: ", + forceAllBody: "페이지의 전체 본문을 결합하시겠습니까?", + openInNewTab: "추가된 URL을 새 탭에서 열기", + importSucc: "가져오기 완료", + import: "가져오기", + editCurrent: "현재 웹사이트 규칙 편집", + editBlacklist: "URL 블랙리스트 편집, 한 줄에 하나씩 입력, [?,*] 와일드카드 지원.", + upBtnImg: "맨 위로 가기 아이콘", + downBtnImg: "맨 아래로 가기 아이콘", + sideControllerIcon: "사이드바 아이콘", + loadingTextTitle: "로딩", + dbClick2StopCtrl: "Ctrl 키", + dbClick2StopAlt: "Alt 키", + dbClick2StopShift: "Shift 키", + dbClick2StopMeta: "Meta 키", + dbClick2StopKey: "단축키", + pageElementCss: "주요 페이지 요소에 대한 사용자 정의 스타일", + customCss: "사용자 정의 전체 CSS", + firstAlert: "기본 규칙을 가져오지 않았습니다. 가져올 적절한 규칙을 선택해주세요", + picker: "Pagetual 요소 선택기", + closePicker: "Pagetual 선택기 닫기", + pickerPlaceholder: "요소 선택기 (고급 사용자 전용, 그렇지 않으면 비워두세요)", + pickerCheck: "선택기 확인 및 복사", + switchSelector: "클릭하여 요소 전환", + gotoEdit: "현재 선택기로 규칙 편집하러 가기", + manualMode: "결합 비활성화, 오른쪽 화살표 키를 사용하여 수동으로 다음 페이지로 이동 (또는 'pagetual.next' 이벤트 전달)", + clickMode: "결합 비활성화, 페이지 끝까지 스크롤하면 다음 페이지 자동 클릭", + pageBarMenu: "페이지 바 중앙을 클릭하여 선택기 메뉴 열기", + nextSwitch: "다음 링크 전환", + arrowToScroll: "왼쪽 화살표를 눌러 뒤로 스크롤하고 오른쪽 화살표를 눌러 페이지 이동", + sideController: "사이드바에 페이징 제어 바 표시", + sideControllerScroll: "스크롤 시 표시/숨김", + sideControllerAlways: "항상 표시", + hideLoadingIcon: "로딩 애니메이션 숨기기", + hideBarArrow: "페이지 바 화살표 숨기기", + duplicate: "중복된 Pagetual이 설치되었습니다. 스크립트 관리자를 확인하세요!", + forceStateIframe: "전체 페이지를 iframe으로 삽입", + forceStateDynamic: "iframe을 통해 동적 콘텐츠 로드", + forceStateDisable: "이 사이트에서 페이지 넘김 비활성화", + autoScrollRate: "스크롤 속도 (1~1000)", + disableAutoScroll: "자동 스크롤 중지", + enableAutoScroll: "자동 스크롤 활성화", + toggleAutoScroll: "자동 스크롤 전환", + ruleRequest: "규칙 요청", + page: "페이지 ", + prevPage: "이전 페이지", + nextPage: "다음 페이지", + errorRulesMustBeArray: "규칙은 배열이어야 합니다!", + errorJson: "JSON 오류, 다시 확인해주세요!", + editSuccess: "성공적으로 편집되었습니다", + errorWrongUrl: "잘못된 URL, 다시 확인해주세요!", + errorAlreadyExists: "규칙이 이미 존재합니다!", + settingsSaved: "설정이 저장되었습니다. 확인하려면 새로고침하세요", + iframe: "iframe으로 강제 분할", + dynamic: "동적 로딩", + reloadPage: "편집 완료, 지금 새로고침하시겠습니까?", + copied: "복사됨", + noValidContent: "유효한 콘텐츠를 찾을 수 없습니다. 보안 문자(Captcha)가 있을 수 있습니다", + outOfDate: "스크립트가 오래되었습니다. 최신 버전으로 업데이트해주세요.", + hideBarTips: "페이지네이션 바 숨기기, 몰입형 경험 전환", + setConfigPage: "현재 페이지를 기본 설정 페이지로 지정", + wedata2github: "wedata 주소를 github 저장소의 미러 주소로 변경", + addOtherProp: "규칙 속성 추가", + addNextSelector: "선택기 콘텐츠를 nextLink로 추가", + addPageSelector: "선택기 콘텐츠를 pageElement로 추가", + propName: "규칙 속성 이름 입력", + propValue: "규칙 속성 값 입력", + customFirst: "로컬 사용자 정의 규칙 캐시 무시", + rulesExample: "규칙 예시", + lastPage: "마지막 페이지에 도달했습니다", + lastPageTips: "마지막 페이지 도달 시 팁 표시" + } + }, + { + name: "Deutsch", + match: ["de", "de-AT", "de-CH", "de-DE", "de-LI", "de-LU"], + lang: { + enableDebug: "Debug-Ausgabe in der Konsole aktivieren", + updateNotification: "Benachrichtigung nach Aktualisierung der Regeln", + disable: "Vorübergehend deaktivieren", + disableSite: "Deaktivierungszustand umschalten", + disableSiteTips: "Auf dieser Seite deaktiviert.", + enableSiteTips: "Auf dieser Seite aktiviert.", + enable: "✅Automatisches Blättern aktivieren", + tempActive: "Vorübergehend aktiv", + toTop: "Zurück nach oben.", + toBottom: "Nach unten gehen.", + current: "Aktuelle Seite.", + forceIframe: "Zwingen, die nächste Seite zu laden", + cancelForceIframe: "Zwangsöffnung abbrechen", + configure: "Pagetual konfigurieren", + firstUpdate: "Hier klicken, um die Standardregel-Liste zu initialisieren", + update: "Online-Regeln aktualisieren", + click2update: "Jetzt klicken, um Regeln von der URL zu aktualisieren", + loadNow: "Nächste Seite automatisch laden", + loadConfirm: "Wie viele Seiten möchten Sie laden? (0 bedeutet unendlich)", + noNext: "Keinen nächsten Link gefunden, bitte erstellen Sie eine neue Regel", + passSec: "Vor #t# Sekunden aktualisiert", + passMin: "Vor #t# Minuten aktualisiert", + passHour: "Vor #t# Stunden aktualisiert", + passDay: "Vor #t# Tagen aktualisiert", + cantDel: "Kann integrierte Regeln nicht löschen", + confirmDel: "Sind Sie sicher, dass Sie diese Regel löschen möchten?", + updateSucc: "Aktualisierung erfolgreich", + beginUpdate: "Aktualisierung beginnen, bitte einen Moment warten", + customUrls: "Pagetual oder AutoPagerize Regel-URL importieren, eine URL pro Zeile.", + customRules: "Benutzerdefinierte Regeln eingeben. ✍️Regeln beitragen", + save: "Speichern", + loadingText: "Shojo lädt jetzt...", + opacity: "Opazität", + opacityPlaceholder: "0: Platzhalter ausblenden", + hideBar: "Den Platzhalter für die Seitenanzahl ausblenden", + hideBarButNoStop: "Ausblenden, aber nicht stoppen", + dbClick2Stop: "Doppelklicken Sie auf den leeren Bereich, um zu pausieren", + sortTitle: "Die Sortierung wird nach der nächsten Regelaktualisierung wirksam", + autoRun: "Automatisch aktivieren (Blacklist-Modus)", + autoLoadNum: "Anzahl der vorzuladenden Seiten", + turnRate: "Blättern zur nächsten Seite, wenn sie weniger als 【X】 Mal die Seitenshöhe vom Fußbereich entfernt ist", + inputPageNum: "Seitenzahl eingeben, um zu springen", + enableHistory: "Browserverlauf nach dem Blättern aufzeichnen", + enableHistoryAfterInsert: "Browserverlauf sofort nach dem Einfügen aufzeichnen, andernfalls nach dem Browsen aufzeichnen", + contentVisibility: "Inhaltssichtbarkeit automatisch umschalten, um die Render-Leistung zu verbessern", + initRun: "Seiten sofort nach dem Öffnen blättern", + preload: "Nächste Seite vorladen, um zu beschleunigen", + click2ImportRule: "Klicken Sie, um den Basisregel-Link zu importieren, und warten Sie, bis die Aktualisierung abgeschlossen ist: ", + forceAllBody: "Gesamten Seiteninhalt als iframe einfügen?", + openInNewTab: "URLs der Ergänzungen in neuem Tab öffnen", + importSucc: "Import abgeschlossen", + import: "Importieren", + editCurrent: "Regel für die aktuelle Website bearbeiten", + editBlacklist: "Bearbeiten Sie die URL-Blacklist, ein Eintrag pro Zeile, unterstützt Wildcards [?,*].", + upBtnImg: "Symbol zum Zurück nach oben", + downBtnImg: "Symbol zum Gehen zum Fußbereich", + sideControllerIcon: "Symbol der Seitenleiste", + loadingTextTitle: "Laden", + dbClick2StopCtrl: "Strg-Taste", + dbClick2StopAlt: "Alt-Taste", + dbClick2StopShift: "Shift-Taste", + dbClick2StopMeta: "Meta-Taste", + dbClick2StopKey: "Kurzbefehl-Taste", + pageElementCss: "Benutzerdefinierter Stil für Hauptelemente der Seite", + customCss: "Benutzerdefiniertes vollständiges CSS", + firstAlert: "Sie haben die Basisregel nicht importiert, bitte wählen Sie die passende Regel zum Importieren aus", + picker: "Pagetual Elementauswahl", + closePicker: "Pagetual Picker schließen", + pickerPlaceholder: "Elementauswahl, (nur für Fortgeschrittene, andernfalls leer lassen)", + pickerCheck: "Wählen Sie den Selektor aus und kopieren", + switchSelector: "Klicken Sie, um das Element zu wechseln", + gotoEdit: "Gehe zur Regelbearbeitung mit dem aktuellen Selektor", + manualMode: "Splicing deaktivieren, manuell zur nächsten Seite mit der rechten Pfeiltaste weiterblättern (oder das Ereignis 'pagetual.next' auslösen)", + clickMode: "Splicing deaktivieren, automatisch zur nächsten Seite klicken, wenn das Ende der Seite erreicht ist", + pageBarMenu: "Klicken Sie auf die Mitte der Seitenleiste, um das Picker-Menü zu öffnen", + nextSwitch: "Nächsten Link wechseln", + arrowToScroll: "Drücken Sie die linke Pfeiltaste, um nach hinten zu scrollen, und die rechte Pfeiltaste, um zur nächsten Seite zu blättern", + sideController: "Die Steuerleiste für das Blättern in der Seitenleiste anzeigen", + sideControllerScroll: "Scroll-Umschaltung", + sideControllerAlways: "Immer anzeigen", + hideLoadingIcon: "Ladeanimation ausblenden", + hideBarArrow: "Pfeil für die Seitenleiste ausblenden", + duplicate: "Duplikat Pagetual wurde installiert, überprüfen Sie Ihren Skriptmanager!", + forceStateIframe: "Gesamte Seite als iframe einfügen", + forceStateDynamic: "Dynamische Inhalte über iframe laden", + forceStateDisable: "Blättern auf dieser Seite deaktivieren", + autoScrollRate: "Scrollgeschwindigkeit (1~1000)", + disableAutoScroll: "Auto-Scroll stoppen", + enableAutoScroll: "Auto-Scroll aktivieren", + toggleAutoScroll: "Auto-Scroll umschalten", + ruleRequest: "Regelanfrage", + page: "Seite ", + prevPage: "Vorherige Seite", + nextPage: "Nächste Seite", + errorRulesMustBeArray: "Regeln müssen ein Array sein!", + errorJson: "JSON-Fehler, bitte erneut überprüfen!", + editSuccess: "Erfolgreich bearbeitet", + errorWrongUrl: "Falsche URL, bitte erneut überprüfen!", + errorAlreadyExists: "Eine Regel existiert bereits!", + settingsSaved: "Die Einstellungen wurden gespeichert, bitte aktualisieren, um sie zu sehen", + iframe: "Zwangsaufteilung durch iframe", + dynamic: "Dynamisches Laden", + reloadPage: "Bearbeitung abgeschlossen, jetzt neu laden?", + copied: "Kopiert", + noValidContent: "Kein gültiger Inhalt erkannt, möglicherweise ist ein Captcha vorhanden", + outOfDate: "Das Skript ist veraltet, bitte auf die neueste Version aktualisieren.", + hideBarTips: "Die Seitenzahlenleiste ausblenden, um ein immersives Erlebnis zu ermöglichen", + setConfigPage: "Aktuelle Seite als Standardkonfigurationsseite festlegen", + wedata2github: "Die wedata-Adresse auf die Spiegeladresse im GitHub-Repository ändern", + addOtherProp: "Regelattribute hinzufügen", + addNextSelector: "Selector-Inhalt als nextLink hinzufügen", + addPageSelector: "Selector-Inhalt als pageElement hinzufügen", + propName: "Regelattributnamen eingeben", + propValue: "Regelattributwert eingeben", + customFirst: "Cache für lokale benutzerdefinierte Regeln ignorieren", + rulesExample: "Regeln Beispiel", + lastPage: "Letzte Seite erreicht", + lastPageTips: "Tipps anzeigen, wenn die letzte Seite erreicht ist" + } + }, + { + name: "ไทย", + match: ["th"], + lang: { + enableDebug: "เปิดใช้งานเอาต์พุตการดีบักไปยังคอนโซล", + updateNotification: "การแจ้งเตือนหลังจากอัปเดตกฎ", + disable: "ปิดใช้งานชั่วคราว", + disableSite: "สลับสถานะการปิดใช้งาน", + disableSiteTips: "ปิดใช้งานบนไซต์นี้", + enableSiteTips: "เปิดใช้งานบนไซต์นี้", + enable: "✅เปิดใช้งานการเปลี่ยนหน้าอัตโนมัติ", + tempActive: "ใช้งานชั่วคราว", + toTop: "กลับไปด้านบน", + toBottom: "ไปที่ด้านล่าง", + current: "หน้าปัจจุบัน", + forceIframe: "บังคับให้เข้าร่วมหน้าถัดไป", + cancelForceIframe: "ยกเลิกการเข้าร่วมบังคับ", + configure: "กำหนดค่า Pagetual", + firstUpdate: "คลิกที่นี่เพื่อเริ่มต้นรายการกฎเริ่มต้น", + update: "อัปเดตกฎออนไลน์", + click2update: "คลิกเพื่ออัปเดตกฎจาก url ทันที", + loadNow: "โหลดหน้าถัดไปโดยอัตโนมัติ", + loadConfirm: "คุณต้องการโหลดกี่หน้า (0 หมายถึงไม่สิ้นสุด)", + noNext: "ไม่พบลิงก์ถัดไป โปรดสร้างกฎใหม่", + passSec: "อัปเดตเมื่อ #t# วินาทีที่แล้ว", + passMin: "อัปเดตเมื่อ #t# นาทีที่แล้ว", + passHour: "อัปเดตเมื่อ #t# ชั่วโมงที่แล้ว", + passDay: "อัปเดตเมื่อ #t# วันที่แล้ว", + cantDel: "ไม่สามารถลบกฎในตัวได้", + confirmDel: "คุณแน่ใจหรือไม่ว่าต้องการลบกฎนี้", + updateSucc: "อัปเดตสำเร็จ", + beginUpdate: "เริ่มอัปเดต โปรดรอสักครู่", + customUrls: "นำเข้า URL กฎ Pagetual หรือ AutoPagerize หนึ่ง URL ต่อบรรทัด", + customRules: "ป้อนกฎที่กำหนดเอง ✍️มีส่วนร่วมในกฎ", + save: "บันทึก", + loadingText: "กำลังโหลด...", + opacity: "ความทึบ", + opacityPlaceholder: "0: ซ่อนตัวเว้นวรรค", + hideBar: "ซ่อนตัวเว้นวรรคของหน้า", + hideBarButNoStop: "ซ่อนแต่ไม่หยุด", + dbClick2Stop: "ดับเบิลคลิกที่พื้นที่ว่างเพื่อหยุดชั่วคราว", + sortTitle: "การเรียงลำดับจะมีผลหลังจากการอัปเดตกฎครั้งถัดไป", + autoRun: "เปิดใช้งานอัตโนมัติ (โหมดบัญชีดำ)", + autoLoadNum: "จำนวนหน้าที่โหลดล่วงหน้า", + turnRate: "เปลี่ยนหน้าถัดไปเมื่ออยู่ห่างจากส่วนท้ายน้อยกว่า【X】เท่าของความสูงของหน้า", + inputPageNum: "ป้อนหมายเลขหน้าเพื่อข้ามไป", + enableHistory: "เขียนประวัติการเข้าชมหลังจากการเปลี่ยนหน้า", + enableHistoryAfterInsert: "เขียนประวัติการเข้าชมทันทีหลังจากต่อเข้าด้วยกัน มิฉะนั้นจะเขียนหลังจากการเข้าชม", + contentVisibility: "สลับ content-visibility โดยอัตโนมัติเพื่อปรับปรุงประสิทธิภาพการเรนเดอร์", + initRun: "เปลี่ยนหน้าทันทีหลังจากเปิด", + preload: "โหลดหน้าถัดไปล่วงหน้าเพื่อเพิ่มความเร็ว", + click2ImportRule: "คลิกเพื่อนำเข้าลิงก์กฎพื้นฐาน แล้วรอจนกว่าการอัปเดตจะเสร็จสมบูรณ์: ", + forceAllBody: "เข้าร่วมเนื้อหาทั้งหมดของหน้าหรือไม่", + openInNewTab: "เปิด URL ของส่วนเพิ่มเติมในแท็บใหม่", + importSucc: "นำเข้าสำเร็จ", + import: "นำเข้า", + editCurrent: "แก้ไขกฎสำหรับเว็บไซต์ปัจจุบัน", + editBlacklist: "แก้ไขบัญชีดำของ URL หนึ่งรายการต่อบรรทัด รองรับ [?,*] wildcards", + upBtnImg: "ไอคอนกลับไปด้านบน", + downBtnImg: "ไอคอนไปที่ส่วนท้าย", + sideControllerIcon: "ไอคอนของแถบด้านข้าง", + loadingTextTitle: "กำลังโหลด", + dbClick2StopCtrl: "ปุ่ม Ctrl", + dbClick2StopAlt: "ปุ่ม Alt", + dbClick2StopShift: "ปุ่ม Shift", + dbClick2StopMeta: "ปุ่ม Meta", + dbClick2StopKey: "ปุ่มลัด", + pageElementCss: "สไตล์ที่กำหนดเองสำหรับองค์ประกอบหน้าหลัก", + customCss: "CSS ที่กำหนดเองทั้งหมด", + firstAlert: "คุณยังไม่ได้นำเข้ากฎพื้นฐาน โปรดเลือกกฎที่เหมาะสมเพื่อนำเข้า", + picker: "ตัวเลือกองค์ประกอบ Pagetual", + closePicker: "ปิดตัวเลือก Pagetual", + pickerPlaceholder: "ตัวเลือกองค์ประกอบ (สำหรับผู้ใช้ขั้นสูงเท่านั้น เว้นว่างไว้)", + pickerCheck: "ตรวจสอบตัวเลือกและคัดลอก", + switchSelector: "คลิกเพื่อสลับองค์ประกอบ", + gotoEdit: "ไปที่การแก้ไขกฎด้วยตัวเลือกปัจจุบัน", + manualMode: "ปิดใช้งานการต่อเข้าด้วยกัน เลื่อนหน้าถัดไปด้วยตนเองโดยใช้ปุ่มลูกศรขวา (หรือส่งเหตุการณ์ 'pagetual.next')", + clickMode: "ปิดใช้งานการต่อเข้าด้วยกัน คลิกหน้าถัดไปโดยอัตโนมัติเมื่อเลื่อนไปที่ท้ายหน้า", + pageBarMenu: "คลิกที่กึ่งกลางของแถบหน้าเพื่อเปิดเมนูตัวเลือก", + nextSwitch: "สลับลิงก์ถัดไป", + arrowToScroll: "กดลูกศรซ้ายเพื่อเลื่อนกลับและลูกศรขวาเพื่อเลื่อนหน้า", + sideController: "แสดงแถบควบคุมการแบ่งหน้าในแถบด้านข้าง", + sideControllerScroll: "สลับการเลื่อน", + sideControllerAlways: "แสดงเสมอ", + hideLoadingIcon: "ซ่อนภาพเคลื่อนไหวการโหลด", + hideBarArrow: "ซ่อนลูกศรสำหรับแถบหน้า", + duplicate: "มีการติดตั้ง Pagetual ที่ซ้ำกัน ตรวจสอบผู้จัดการสคริปต์ของคุณ!", + forceStateIframe: "ฝังหน้าเต็มเป็น iframe", + forceStateDynamic: "โหลดเนื้อหาแบบไดนามิกผ่าน iframe", + forceStateDisable: "ปิดใช้งานการเปลี่ยนหน้าบนไซต์นี้", + autoScrollRate: "ความเร็วในการเลื่อน (1~1000)", + disableAutoScroll: "หยุดการเลื่อนอัตโนมัติ", + enableAutoScroll: "เปิดใช้งานการเลื่อนอัตโนมัติ", + toggleAutoScroll: "สลับการเลื่อนอัตโนมัติ", + ruleRequest: "ขอกฎ", + page: "หน้า ", + prevPage: "หน้าก่อนหน้า", + nextPage: "หน้าถัดไป", + errorRulesMustBeArray: "กฎต้องเป็นอาร์เรย์!", + errorJson: "ข้อผิดพลาด JSON ตรวจสอบอีกครั้ง!", + editSuccess: "แก้ไขสำเร็จ", + errorWrongUrl: "URL ไม่ถูกต้อง ตรวจสอบอีกครั้ง!", + errorAlreadyExists: "มีกฎอยู่แล้ว!", + settingsSaved: "บันทึกการตั้งค่าแล้ว รีเฟรชเพื่อดู", + iframe: "บังคับแยกโดย iframe", + dynamic: "การโหลดแบบไดนามิก", + reloadPage: "แก้ไขเสร็จแล้ว โหลดใหม่ตอนนี้หรือไม่", + copied: "คัดลอกแล้ว", + noValidContent: "ไม่พบเนื้อหาที่ถูกต้อง อาจมี Captcha", + outOfDate: "สคริปต์ล้าสมัย โปรดอัปเดตเป็นเวอร์ชันล่าสุด", + hideBarTips: "ซ่อนแถบเลขหน้า สลับประสบการณ์ที่สมจริง", + setConfigPage: "ตั้งค่าหน้าปัจจุบันเป็นหน้าการกำหนดค่าเริ่มต้น", + wedata2github: "เปลี่ยนที่อยู่ wedata เป็นที่อยู่มิเรอร์ในที่เก็บ github", + addOtherProp: "เพิ่มคุณสมบัติของกฎ", + addNextSelector: "เพิ่มเนื้อหาตัวเลือกเป็น nextLink", + addPageSelector: "เพิ่มเนื้อหาตัวเลือกเป็น pageElement", + propName: "ป้อนชื่อคุณสมบัติของกฎ", + propValue: "ป้อนค่าคุณสมบัติของกฎ", + customFirst: "ไม่สนใจแคชสำหรับกฎที่กำหนดเองในเครื่อง", + rulesExample: "ตัวอย่างกฎ", + lastPage: "ถึงหน้าสุดท้ายแล้ว", + lastPageTips: "แสดงเคล็ดลับเมื่อถึงหน้าสุดท้าย" + } + }, + { + name: "Norsk (Bokmål)", + match: ["nb", "nb-NO"], + lang: { + enableDebug: "Aktiver feilsøkingsutdata til konsollen", + updateNotification: "Varsling etter at regler er oppdatert", + disable: "Deaktiver midlertidig", + disableSite: "Veksle deaktivert tilstand", + disableSiteTips: "Deaktivert på dette nettstedet.", + enableSiteTips: "Aktivert på dette nettstedet.", + enable: "✅Aktiver automatisk sidevending", + tempActive: "Midlertidig aktiv", + toTop: "Tilbake til toppen.", + toBottom: "Gå til bunnen.", + current: "Gjeldende side.", + forceIframe: "Tving til å koble til neste side", + cancelForceIframe: "Avbryt tvungen tilkobling", + configure: "Konfigurer Pagetual", + firstUpdate: "Klikk her for å initialisere standard regelliste", + update: "Oppdater nettbaserte regler", + click2update: "Klikk for å oppdatere regler fra url nå", + loadNow: "Last neste automatisk", + loadConfirm: "Hvor mange sider vil du laste? (0 betyr uendelig)", + noNext: "Ingen neste lenke funnet, vennligst opprett en ny regel", + passSec: "Oppdatert for #t# sekunder siden", + passMin: "Oppdatert for #t# minutter siden", + passHour: "Oppdatert for #t# timer siden", + passDay: "Oppdatert for #t# dager siden", + cantDel: "Kan ikke slette innebygde regler", + confirmDel: "Er du sikker på at du vil slette denne regelen?", + updateSucc: "Oppdatering vellykket", + beginUpdate: "Starter oppdatering, vent et øyeblikk", + customUrls: "Importer Pagetual eller AutoPagerize regel-url, én url per linje.", + customRules: "Skriv inn egendefinerte regler. ✍️Bidra med regler", + save: "Lagre", + loadingText: "Laster nå...", + opacity: "Opasitet", + opacityPlaceholder: "0: skjul avstandsstykke", + hideBar: "Skjul pagineringsavstandsstykket", + hideBarButNoStop: "Skjul, men ikke stopp", + dbClick2Stop: "Dobbeltklikk på det tomme området for å pause", + sortTitle: "Sortering trer i kraft etter neste regeloppdatering", + autoRun: "Auto-aktiver (svartelistemodus)", + autoLoadNum: "Antall for forhåndslastede sider", + turnRate: "Snu til neste side når det er mindre enn 【X】 ganger sidehøyden fra bunnteksten", + inputPageNum: "Skriv inn sidetall for å hoppe", + enableHistory: "Skriv nettleserlogg etter sidevending", + enableHistoryAfterInsert: "Skriv nettleserlogg umiddelbart etter spleising, ellers skriv etter surfing", + contentVisibility: "Bytt automatisk innholdssynlighet for å forbedre gjengivelsesytelsen", + initRun: "Snu sider umiddelbart etter åpning", + preload: "Forhåndslast neste side for å øke hastigheten", + click2ImportRule: "Klikk for å importere grunnregellenke, og vent deretter til oppdateringen er fullført: ", + forceAllBody: "Koble til hele sidens kropp?", + openInNewTab: "Åpne url-er for tillegg i ny fane", + importSucc: "Import fullført", + import: "Importer", + editCurrent: "Rediger regel for gjeldende nettsted", + editBlacklist: "Rediger url-svartelisten, én oppføring per linje, støtter [?,*] jokertegn.", + upBtnImg: "Ikon for tilbake til toppen", + downBtnImg: "Ikon for å gå til bunntekst", + sideControllerIcon: "Ikon for sidefelt", + loadingTextTitle: "Laster", + dbClick2StopCtrl: "Ctrl-tast", + dbClick2StopAlt: "Alt-tast", + dbClick2StopShift: "Shift-tast", + dbClick2StopMeta: "Meta-tast", + dbClick2StopKey: "Hurtigtast", + pageElementCss: "Egendefinert stil for hovedsideelementer", + customCss: "Egendefinert komplett css", + firstAlert: "Du har ikke importert grunnregelen, vennligst velg riktig regel å importere", + picker: "Pagetual elementvelger", + closePicker: "Lukk Pagetual-velger", + pickerPlaceholder: "Elementvelger, (Kun avanserte brukere, la stå tomt ellers)", + pickerCheck: "Sjekk velger og kopier", + switchSelector: "Klikk for å bytte element", + gotoEdit: "Gå til redigeringsregel med gjeldende velger", + manualMode: "Deaktiver spleising, gå manuelt frem til neste side med høyre piltast (eller send hendelsen 'pagetual.next')", + clickMode: "Deaktiver spleising, klikk automatisk på neste side når du ruller til slutten av siden", + pageBarMenu: "Klikk på midten av sidelinjen for å åpne velgermenyen", + nextSwitch: "Bytt neste lenke", + arrowToScroll: "Trykk venstre piltast for å rulle tilbake og høyre piltast for å gå frem en side", + sideController: "Vis pagineringskontrollinjen i sidefeltet", + sideControllerScroll: "Rulleveksling", + sideControllerAlways: "Vis alltid", + hideLoadingIcon: "Skjul lasteanimasjon", + hideBarArrow: "Skjul pil for sidelinje", + duplicate: "Duplikat Pagetual har blitt installert, sjekk skriptbehandleren din!", + forceStateIframe: "Bygg inn hele siden som iframe", + forceStateDynamic: "Last dynamisk innhold via iframe", + forceStateDisable: "Deaktiver sidevending på dette nettstedet", + autoScrollRate: "Rullehastighet (1~1000)", + disableAutoScroll: "Stopp automatisk rulling", + enableAutoScroll: "Aktiver automatisk rulling", + toggleAutoScroll: "Veksle automatisk rulling", + ruleRequest: "Regelforespørsel", + page: "Side ", + prevPage: "Forrige side", + nextPage: "Neste side", + errorRulesMustBeArray: "Regler må være en matrise!", + errorJson: "JSON-feil, sjekk igjen!", + editSuccess: "Redigering vellykket", + errorWrongUrl: "Feil url, sjekk igjen!", + errorAlreadyExists: "En regel eksisterer allerede!", + settingsSaved: "Innstillingene er lagret, oppdater for å se", + iframe: "Tvunget delt av iframe", + dynamic: "Dynamisk lasting", + reloadPage: "Redigering fullført, last på nytt nå?", + copied: "Kopiert", + noValidContent: "Ingen gyldig innhold funnet, en Captcha kan være til stede", + outOfDate: "Skriptet er utdatert, vennligst oppdater til den nyeste versjonen.", + hideBarTips: "Skjul pagineringslinjen, veksle mellom oppslukende opplevelse", + setConfigPage: "Angi gjeldende side som standard konfigurasjonsside", + wedata2github: "Endre wedata-adressen til speiladressen i github-depotet", + addOtherProp: "Legg til regelegenskaper", + addNextSelector: "Legg til velgerinnhold som nextLink", + addPageSelector: "Legg til velgerinnhold som pageElement", + propName: "Skriv inn regelegenskapsnavn", + propValue: "Skriv inn regelegenskapsverdi", + customFirst: "Ignorer hurtigbuffer for lokale egendefinerte regler", + rulesExample: "Regeleksempel", + lastPage: "Nådde den siste siden", + lastPageTips: "Vis tips når du når den siste siden" + } + }, + { + name: "Svenska", + match: ["sv"], + lang: { + enableDebug: "Aktivera felsökningsutdata till konsolen", + updateNotification: "Meddelande efter att regler har uppdaterats", + disable: "Inaktivera tillfälligt", + disableSite: "Växla inaktiverat läge", + disableSiteTips: "Inaktiverad på denna webbplats.", + enableSiteTips: "Aktiverad på denna webbplats.", + enable: "✅Aktivera automatisk sidvändning", + tempActive: "Tillfälligt aktiv", + toTop: "Tillbaka till toppen.", + toBottom: "Gå till botten.", + current: "Nuvarande sida.", + forceIframe: "Tvinga att ansluta till nästa sida", + cancelForceIframe: "Avbryt tvångsanslutning", + configure: "Konfigurera Pagetual", + firstUpdate: "Klicka här för att initiera standardregellistan", + update: "Uppdatera onlineregler", + click2update: "Klicka för att uppdatera regler från url nu", + loadNow: "Ladda nästa automatiskt", + loadConfirm: "Hur många sidor vill du ladda? (0 betyder oändligt)", + noNext: "Ingen nästa länk hittades, skapa en ny regel", + passSec: "Uppdaterad för #t# sekunder sedan", + passMin: "Uppdaterad för #t# minuter sedan", + passHour: "Uppdaterad för #t# timmar sedan", + passDay: "Uppdaterad för #t# dagar sedan", + cantDel: "Kan inte ta bort inbyggda regler", + confirmDel: "Är du säker på att du vill ta bort denna regel?", + updateSucc: "Uppdatering lyckades", + beginUpdate: "Påbörjar uppdatering, vänta ett ögonblick", + customUrls: "Importera Pagetual eller AutoPagerize regel-url, en url per rad.", + customRules: "Ange anpassade regler. ✍️Bidra med regler", + save: "Spara", + loadingText: "Laddar nu...", + opacity: "Opacitet", + opacityPlaceholder: "0: dölj mellanrum", + hideBar: "Dölj pagineringsmellanrummet", + hideBarButNoStop: "Dölj men stoppa inte", + dbClick2Stop: "Dubbelklicka på det tomma utrymmet för att pausa", + sortTitle: "Sortering träder i kraft efter nästa regeluppdatering", + autoRun: "Auto-aktivera (svartlistningsläge)", + autoLoadNum: "Antal för förinläsning av sidor", + turnRate: "Vänd till nästa sida när det är mindre än 【X】 gånger sidhöjden från sidfoten", + inputPageNum: "Ange sidnummer för att hoppa", + enableHistory: "Skriv webbhistorik efter sidvändning", + enableHistoryAfterInsert: "Skriv webbhistorik omedelbart efter sammanfogning, annars skriv efter surfning", + contentVisibility: "Växla automatiskt innehållssynlighet för att förbättra renderingsprestanda", + initRun: "Vänd sidor omedelbart efter öppning", + preload: "Förinläs nästa sida för att påskynda", + click2ImportRule: "Klicka för att importera grundregellänk, och vänta sedan tills uppdateringen är klar: ", + forceAllBody: "Anslut hela sidans kropp?", + openInNewTab: "Öppna webbadresser för tillägg i ny flik", + importSucc: "Importen är klar", + import: "Importera", + editCurrent: "Redigera regel för aktuell webbplats", + editBlacklist: "Redigera webbadress-svartlistan, en post per rad, stöder [?,*] jokertecken.", + upBtnImg: "Ikon för tillbaka till toppen", + downBtnImg: "Ikon för att gå till sidfot", + sideControllerIcon: "Ikon för sidofältet", + loadingTextTitle: "Laddar", + dbClick2StopCtrl: "Ctrl-tangent", + dbClick2StopAlt: "Alt-tangent", + dbClick2StopShift: "Shift-tangent", + dbClick2StopMeta: "Meta-tangent", + dbClick2StopKey: "Snabbtangent", + pageElementCss: "Anpassad stil för huvudsidaelement", + customCss: "Anpassad komplett css", + firstAlert: "Du har inte importerat grundregeln, välj lämplig regel att importera", + picker: "Pagetual elementväljare", + closePicker: "Stäng Pagetual-väljare", + pickerPlaceholder: "Elementväljare, (Endast avancerade användare, lämna tomt annars)", + pickerCheck: "Kontrollera väljare och kopiera", + switchSelector: "Klicka för att byta element", + gotoEdit: "Gå till redigera regel med aktuell väljare", + manualMode: "Inaktivera sammanfogning, gå manuellt framåt till nästa sida med höger piltangent (eller skicka händelsen 'pagetual.next')", + clickMode: "Inaktivera sammanfogning, klicka automatiskt på nästa sida när du rullar till slutet av sidan", + pageBarMenu: "Klicka på mitten av sidfältet för att öppna väljarmenyn", + nextSwitch: "Byt nästa länk", + arrowToScroll: "Tryck på vänster piltangent för att rulla tillbaka och höger piltangent för att gå fram en sida", + sideController: "Visa pagineringskontrollfältet i sidofältet", + sideControllerScroll: "Rullningsväxling", + sideControllerAlways: "Visa alltid", + hideLoadingIcon: "Dölj laddningsanimation", + hideBarArrow: "Dölj pil för sidfält", + duplicate: "Duplicerad Pagetual har installerats, kontrollera din skripthanterare!", + forceStateIframe: "Bädda in hela sidan som iframe", + forceStateDynamic: "Ladda dynamiskt innehåll via iframe", + forceStateDisable: "Inaktivera sidvändning på denna webbplats", + autoScrollRate: "Rullningshastighet (1~1000)", + disableAutoScroll: "Stoppa automatisk rullning", + enableAutoScroll: "Aktivera automatisk rullning", + toggleAutoScroll: "Växla automatisk rullning", + ruleRequest: "Regelförfrågan", + page: "Sida ", + prevPage: "Föregående sida", + nextPage: "Nästa sida", + errorRulesMustBeArray: "Regler måste vara en array!", + errorJson: "JSON-fel, kontrollera igen!", + editSuccess: "Redigering lyckades", + errorWrongUrl: "Fel webbadress, kontrollera igen!", + errorAlreadyExists: "En regel finns redan!", + settingsSaved: "Inställningarna har sparats, uppdatera för att se", + iframe: "Tvingad delning av iframe", + dynamic: "Dynamisk laddning", + reloadPage: "Redigering slutförd, ladda om nu?", + copied: "Kopierad", + noValidContent: "Inget giltigt innehåll hittades, en Captcha kan finnas", + outOfDate: "Skriptet är föråldrat, uppdatera till den senaste versionen.", + hideBarTips: "Dölj pagineringsfältet, växla till en uppslukande upplevelse", + setConfigPage: "Ange aktuell sida som standardkonfigurationssida", + wedata2github: "Ändra wedata-adressen till spegeladressen i github-förvaret", + addOtherProp: "Lägg till regelegenskaper", + addNextSelector: "Lägg till väljarinnehåll som nextLink", + addPageSelector: "Lägg till väljarinnehåll som pageElement", + propName: "Ange regelegenskapsnamn", + propValue: "Ange regelegenskapsvärde", + customFirst: "Ignorera cache för lokala anpassade regler", + rulesExample: "Regelexempel", + lastPage: "Nådde sista sidan", + lastPageTips: "Visa tips när du når sista sidan" + } + }, + { + name: "Српски", + match: ["sr"], + lang: { + enableDebug: "Омогући отклањање грешака на конзоли", + updateNotification: "Обавештење након ажурирања правила", + disable: "Привремено онемогући", + disableSite: "Промени стање онемогућености", + disableSiteTips: "Онемогућено на овом сајту.", + enableSiteTips: "Омогућено на овом сајту.", + enable: "✅Омогући аутоматско окретање страница", + tempActive: "Привремено активно", + toTop: "Назад на врх.", + toBottom: "Иди на дно.", + current: "Тренутна страница.", + forceIframe: "Присили спајање следеће странице", + cancelForceIframe: "Откажи присилно спајање", + configure: "Конфигуриши Pagetual", + firstUpdate: "Кликните овде да бисте покренули подразумевану листу правила", + update: "Ажурирај правила на мрежи", + click2update: "Кликните да бисте одмах ажурирали правила са УРЛ-а", + loadNow: "Учитај следеће аутоматски", + loadConfirm: "Колико страница желите да учитате? (0 значи бесконачно)", + noNext: "Није пронађена следећа веза, креирајте ново правило", + passSec: "Ажурирано пре #t# секунди", + passMin: "Ажурирано пре #t# минута", + passHour: "Ажурирано пре #t# сати", + passDay: "Ажурирано пре #t# дана", + cantDel: "Не могу се избрисати уграђена правила", + confirmDel: "Да ли сте сигурни да желите да избришете ово правило?", + updateSucc: "Ажурирање је успело", + beginUpdate: "Започни ажурирање, сачекајте тренутак", + customUrls: "Увезите Pagetual или AutoPagerize УРЛ правила, један УРЛ по линији.", + customRules: "Унесите прилагођена правила. ✍️Допринесите правилима", + save: "Сачувај", + loadingText: "Учитавање у току...", + opacity: "Провидност", + opacityPlaceholder: "0: сакриј размак", + hideBar: "Сакриј размак за пагинацију", + hideBarButNoStop: "Сакриј, али не заустављај", + dbClick2Stop: "Двапут кликните на празан простор да бисте паузирали", + sortTitle: "Сортирање ступа на снагу након следећег ажурирања правила", + autoRun: "Аутоматско омогућавање (режим црне листе)", + autoLoadNum: "Количина за унапред учитане странице", + turnRate: "Окрените следећу страницу када је мање од 【X】 пута висине странице од подножја", + inputPageNum: "Унесите број странице за скок", + enableHistory: "Упиши историју прегледања након окретања странице", + enableHistoryAfterInsert: "Упиши историју прегледања одмах након спајања, у супротном упиши након прегледања", + contentVisibility: "Аутоматски промени видљивост садржаја да би се побољшале перформансе приказивања", + initRun: "Окрени странице одмах након отварања", + preload: "Унапред учитај следећу страницу ради убрзања", + click2ImportRule: "Кликните да бисте увезли везу основних правила, а затим сачекајте док се ажурирање не заврши: ", + forceAllBody: "Спојити цело тело странице?", + openInNewTab: "Отвори УРЛ-ове додатака у новој картици", + importSucc: "Увоз је завршен", + import: "Увези", + editCurrent: "Уреди правило за тренутни веб-сајт", + editBlacklist: "Уредите УРЛ црну листу, један унос по линији, подржава џокере [?,*].", + upBtnImg: "Икона за повратак на врх", + downBtnImg: "Икона за одлазак на подножје", + sideControllerIcon: "Икона бочне траке", + loadingTextTitle: "Учитавање", + dbClick2StopCtrl: "Тастер Ctrl", + dbClick2StopAlt: "Тастер Alt", + dbClick2StopShift: "Тастер Shift", + dbClick2StopMeta: "Тастер Meta", + dbClick2StopKey: "Тастер пречице", + pageElementCss: "Прилагођени стил за главне елементе странице", + customCss: "Прилагођени комплетан ЦСС", + firstAlert: "Нисте увезли основно правило, изаберите одговарајуће правило за увоз", + picker: "Pagetual бирач елемената", + closePicker: "Затвори Pagetual бирач", + pickerPlaceholder: "Бирач елемената, (Само напредни корисници, иначе оставите празно)", + pickerCheck: "Провери бирач и копирај", + switchSelector: "Кликните да бисте променили елемент", + gotoEdit: "Иди на уређивање правила са тренутним бирачем", + manualMode: "Онемогући спајање, ручно пређи на следећу страницу помоћу десног тастера са стрелицом (или пошаљи догађај 'pagetual.next')", + clickMode: "Онемогући спајање, аутоматски кликни на следећу страницу приликом померања до краја странице", + pageBarMenu: "Кликните на центар траке странице да бисте отворили мени бирача", + nextSwitch: "Промени следећу везу", + arrowToScroll: "Притисните леви тастер са стрелицом за померање уназад и десни тастер са стрелицом за прелазак на страницу", + sideController: "Прикажи контролну траку за пагинацију у бочној траци", + sideControllerScroll: "Промена померања", + sideControllerAlways: "Увек прикажи", + hideLoadingIcon: "Сакриј анимацију учитавања", + hideBarArrow: "Сакриј стрелицу за траку странице", + duplicate: "Дупликат Pagetual је инсталиран, проверите свој менаџер скрипти!", + forceStateIframe: "Угради целу страницу као iframe", + forceStateDynamic: "Учитај динамички садржај путем iframe-a", + forceStateDisable: "Онемогући окретање страница на овом сајту", + autoScrollRate: "Брзина померања (1~1000)", + disableAutoScroll: "Заустави аутоматско померање", + enableAutoScroll: "Омогући аутоматско померање", + toggleAutoScroll: "Промени аутоматско померање", + ruleRequest: "Захтев за правило", + page: "Страница ", + prevPage: "Претходна страница", + nextPage: "Следећа страница", + errorRulesMustBeArray: "Правила морају бити низ!", + errorJson: "ЈСОН грешка, проверите поново!", + editSuccess: "Успешно уређено", + errorWrongUrl: "Погрешан УРЛ, проверите поново!", + errorAlreadyExists: "Правило већ постоји!", + settingsSaved: "Подешавања су сачувана, освежите да бисте видели", + iframe: "Присилно подељено iframe-ом", + dynamic: "Динамичко учитавање", + reloadPage: "Уређивање је завршено, поново учитати сада?", + copied: "Копирано", + noValidContent: "Није детектован важећи садржај, можда је присутан Цаптцха", + outOfDate: "Скрипта је застарела, ажурирајте на најновију верзију.", + hideBarTips: "Сакријте траку за пагинацију, промените имерзивно искуство", + setConfigPage: "Постави тренутну страницу као подразумевану страницу за конфигурацију", + wedata2github: "Промените wedata адресу на адресу огледала у гитхуб спремишту", + addOtherProp: "Додај својства правила", + addNextSelector: "Додај садржај бирача као nextLink", + addPageSelector: "Додај садржај бирача као pageElement", + propName: "Унесите назив својства правила", + propValue: "Унесите вредност својства правила", + customFirst: "Игнориши кеш за локална прилагођена правила", + rulesExample: "Пример правила", + lastPage: "Достигнута је последња страница", + lastPageTips: "Прикажи савете приликом достизања последње странице" + } + }, + { + name: "Slovenčina", + match: ["sk"], + lang: { + enableDebug: "Povoliť výstup ladenia do konzoly", + updateNotification: "Oznámenie po aktualizácii pravidiel", + disable: "Dočasne zakázať", + disableSite: "Prepnúť stav zakázania", + disableSiteTips: "Na tejto stránke zakázané.", + enableSiteTips: "Na tejto stránke povolené.", + enable: "✅Povoliť automatické otáčanie stránok", + tempActive: "Dočasne aktívne", + toTop: "Späť na začiatok.", + toBottom: "Ísť na koniec.", + current: "Aktuálna stránka.", + forceIframe: "Vynútiť pripojenie k ďalšej stránke", + cancelForceIframe: "Zrušiť vynútené pripojenie", + configure: "Konfigurovať Pagetual", + firstUpdate: "Kliknite sem pre inicializáciu predvoleného zoznamu pravidiel", + update: "Aktualizovať online pravidlá", + click2update: "Kliknite pre aktualizáciu pravidiel z URL teraz", + loadNow: "Načítať ďalšie automaticky", + loadConfirm: "Koľko stránok chcete načítať? (0 znamená nekonečno)", + noNext: "Nenašiel sa žiadny ďalší odkaz, vytvorte nové pravidlo", + passSec: "Aktualizované pred #t# sekundami", + passMin: "Aktualizované pred #t# minútami", + passHour: "Aktualizované pred #t# hodinami", + passDay: "Aktualizované pred #t# dňami", + cantDel: "Nie je možné odstrániť vstavané pravidlá", + confirmDel: "Ste si istí, že chcete odstrániť toto pravidlo?", + updateSucc: "Aktualizácia úspešná", + beginUpdate: "Začína sa aktualizácia, chvíľu počkajte", + customUrls: "Importovať URL pravidla Pagetual alebo AutoPagerize, jedno URL na riadok.", + customRules: "Zadajte vlastné pravidlá. ✍️Prispieť pravidlami", + save: "Uložiť", + loadingText: "Načítava sa...", + opacity: "Nepriehľadnosť", + opacityPlaceholder: "0: skryť medzerník", + hideBar: "Skryť medzerník stránkovania", + hideBarButNoStop: "Skryť, ale nezastaviť", + dbClick2Stop: "Dvojitým kliknutím na prázdne miesto pozastavíte", + sortTitle: "Triedenie sa prejaví po ďalšej aktualizácii pravidiel", + autoRun: "Automatické povolenie (režim čiernej listiny)", + autoLoadNum: "Množstvo pre prednačítané stránky", + turnRate: "Otočte na ďalšiu stránku, keď je menej ako 【X】 násobok výšky stránky od pätičky", + inputPageNum: "Zadajte číslo stránky na preskočenie", + enableHistory: "Zapísať históriu prehliadania po otočení stránky", + enableHistoryAfterInsert: "Zapísať históriu prehliadania ihneď po spojení, inak zapísať po prehliadaní", + contentVisibility: "Automaticky prepínať viditeľnosť obsahu na zlepšenie výkonu vykresľovania", + initRun: "Otočiť stránky ihneď po otvorení", + preload: "Prednačítať ďalšiu stránku na zrýchlenie", + click2ImportRule: "Kliknite pre import odkazu na základné pravidlá a potom počkajte, kým sa aktualizácia nedokončí: ", + forceAllBody: "Pripojiť celé telo stránky?", + openInNewTab: "Otvoriť URL adries prídavkov v novej karte", + importSucc: "Import dokončený", + import: "Importovať", + editCurrent: "Upraviť pravidlo pre aktuálnu webovú stránku", + editBlacklist: "Upraviť čiernu listinu URL, jeden záznam na riadok, podporuje zástupné znaky [?,*].", + upBtnImg: "Ikona späť na začiatok", + downBtnImg: "Ikona ísť na pätičku", + sideControllerIcon: "Ikona bočného panela", + loadingTextTitle: "Načítavanie", + dbClick2StopCtrl: "Kláves Ctrl", + dbClick2StopAlt: "Kláves Alt", + dbClick2StopShift: "Kláves Shift", + dbClick2StopMeta: "Kláves Meta", + dbClick2StopKey: "Klávesová skratka", + pageElementCss: "Vlastný štýl pre hlavné prvky stránky", + customCss: "Vlastné kompletné CSS", + firstAlert: "Neimportovali ste základné pravidlo, vyberte prosím vhodné pravidlo na import", + picker: "Výber prvkov Pagetual", + closePicker: "Zavrieť výber Pagetual", + pickerPlaceholder: "Výber prvkov, (Iba pre pokročilých používateľov, inak nechajte prázdne)", + pickerCheck: "Skontrolovať výber a kopírovať", + switchSelector: "Kliknutím prepnete prvok", + gotoEdit: "Prejsť na úpravu pravidla s aktuálnym výberom", + manualMode: "Zakázať spájanie, manuálne prejsť na ďalšiu stránku pomocou klávesu so šípkou doprava (alebo odoslať udalosť 'pagetual.next')", + clickMode: "Zakázať spájanie, automaticky kliknúť na ďalšiu stránku pri posunutí na koniec stránky", + pageBarMenu: "Kliknutím na stred lišty stránky otvoríte menu výberu", + nextSwitch: "Prepnúť ďalší odkaz", + arrowToScroll: "Stlačením ľavej šípky sa posuniete späť a pravou šípkou prejdete na stránku", + sideController: "Zobraziť ovládací panel stránkovania v bočnom paneli", + sideControllerScroll: "Prepnúť posúvanie", + sideControllerAlways: "Vždy zobraziť", + hideLoadingIcon: "Skryť animáciu načítavania", + hideBarArrow: "Skryť šípku pre lištu stránky", + duplicate: "Duplicitný Pagetual bol nainštalovaný, skontrolujte svoj správcu skriptov!", + forceStateIframe: "Vložiť celú stránku ako iframe", + forceStateDynamic: "Načítať dynamický obsah cez iframe", + forceStateDisable: "Zakázať otáčanie stránok na tejto stránke", + autoScrollRate: "Rýchlosť posúvania (1~1000)", + disableAutoScroll: "Zastaviť automatické posúvanie", + enableAutoScroll: "Povoliť automatické posúvanie", + toggleAutoScroll: "Prepnúť automatické posúvanie", + ruleRequest: "Žiadosť o pravidlo", + page: "Stránka ", + prevPage: "Predchádzajúca stránka", + nextPage: "Ďalšia stránka", + errorRulesMustBeArray: "Pravidlá musia byť pole!", + errorJson: "Chyba JSON, skontrolujte znova!", + editSuccess: "Úspešne upravené", + errorWrongUrl: "Nesprávne URL, skontrolujte znova!", + errorAlreadyExists: "Pravidlo už existuje!", + settingsSaved: "Nastavenia sú uložené, obnovte pre zobrazenie", + iframe: "Vynútené rozdelenie pomocou iframe", + dynamic: "Dynamické načítavanie", + reloadPage: "Úprava dokončená, načítať znova?", + copied: "Skopírované", + noValidContent: "Nebol zistený žiadny platný obsah, môže byť prítomná Captcha", + outOfDate: "Skript je zastaraný, aktualizujte prosím na najnovšiu verziu.", + hideBarTips: "Skryť lištu stránkovania, prepnúť pohlcujúci zážitok", + setConfigPage: "Nastaviť aktuálnu stránku ako predvolenú konfiguračnú stránku", + wedata2github: "Zmeniť adresu wedata na zrkadlovú adresu v repozitári github", + addOtherProp: "Pridať vlastnosti pravidla", + addNextSelector: "Pridať obsah výberu ako nextLink", + addPageSelector: "Pridať obsah výberu ako pageElement", + propName: "Zadajte názov vlastnosti pravidla", + propValue: "Zadajte hodnotu vlastnosti pravidla", + customFirst: "Ignorovať vyrovnávaciu pamäť pre lokálne vlastné pravidlá", + rulesExample: "Príklad pravidiel", + lastPage: "Dosiahli ste poslednú stránku", + lastPageTips: "Zobraziť tipy pri dosiahnutí poslednej stránky" + } + }, + { + name: "Magyar", + match: ["hu"], + lang: { + enableDebug: "Hibakeresési kimenet engedélyezése a konzolon", + updateNotification: "Értesítés a szabályok frissítése után", + disable: "Ideiglenes letiltás", + disableSite: "Letiltott állapot váltása", + disableSiteTips: "Letiltva ezen az oldalon.", + enableSiteTips: "Engedélyezve ezen az oldalon.", + enable: "✅Automatikus lapozás engedélyezése", + tempActive: "Ideiglenesen aktív", + toTop: "Vissza a tetejére.", + toBottom: "Ugrás az aljára.", + current: "Jelenlegi oldal.", + forceIframe: "Következő oldal csatlakozásának kényszerítése", + cancelForceIframe: "Kényszerített csatlakozás megszakítása", + configure: "Pagetual konfigurálása", + firstUpdate: "Kattintson ide az alapértelmezett szabálylista inicializálásához", + update: "Online szabályok frissítése", + click2update: "Kattintson a szabályok URL-ről történő frissítéséhez", + loadNow: "Következő automatikus betöltése", + loadConfirm: "Hány oldalt szeretne betölteni? (0 a végtelent jelenti)", + noNext: "Nincs következő link, hozzon létre új szabályt", + passSec: "#t# másodperce frissítve", + passMin: "#t# perce frissítve", + passHour: "#t# órája frissítve", + passDay: "#t# napja frissítve", + cantDel: "Beépített szabályok nem törölhetők", + confirmDel: "Biztosan törli ezt a szabályt?", + updateSucc: "Sikeres frissítés", + beginUpdate: "Frissítés megkezdése, kérem várjon egy pillanatot", + customUrls: "Pagetual vagy AutoPagerize szabály URL importálása, soronként egy URL.", + customRules: "Adjon meg egyéni szabályokat. ✍️Szabályok beküldése", + save: "Mentés", + loadingText: "Betöltés...", + opacity: "Átlátszóság", + opacityPlaceholder: "0: elválasztó elrejtése", + hideBar: "Lapozó elválasztó elrejtése", + hideBarButNoStop: "Elrejtés, de nem leállítás", + dbClick2Stop: "Dupla kattintás az üres területre a szüneteltetéshez", + sortTitle: "A rendezés a következő szabályfrissítés után lép érvénybe", + autoRun: "Automatikus engedélyezés (feketelista mód)", + autoLoadNum: "Előtöltendő oldalak száma", + turnRate: "Lapozzon a következő oldalra, ha a lábléctől mért távolság kevesebb, mint az oldal magasságának 【X】-szerese", + inputPageNum: "Adja meg az ugrani kívánt oldalszámot", + enableHistory: "Böngészési előzmények írása lapozás után", + enableHistoryAfterInsert: "Böngészési előzmények írása azonnal az illesztés után, egyébként a böngészés után", + contentVisibility: "A content-visibility automatikus váltása a renderelési teljesítmény javítása érdekében", + initRun: "Oldalak lapozása azonnal a megnyitás után", + preload: "Következő oldal előtöltése a gyorsítás érdekében", + click2ImportRule: "Kattintson az alapszabályok linkjének importálásához, majd várja meg a frissítés befejezését: ", + forceAllBody: "Csatlakoztatja az oldal teljes törzsét?", + openInNewTab: "A kiegészítések URL-jeinek megnyitása új lapon", + importSucc: "Importálás befejezve", + import: "Importálás", + editCurrent: "Szabály szerkesztése az aktuális webhelyhez", + editBlacklist: "URL feketelista szerkesztése, soronként egy bejegyzés, támogatja a [?,*] helyettesítő karaktereket.", + upBtnImg: "Vissza a tetejére ikon", + downBtnImg: "Ugrás a lábléchez ikon", + sideControllerIcon: "Oldalsáv ikonja", + loadingTextTitle: "Betöltés", + dbClick2StopCtrl: "Ctrl billentyű", + dbClick2StopAlt: "Alt billentyű", + dbClick2StopShift: "Shift billentyű", + dbClick2StopMeta: "Meta billentyű", + dbClick2StopKey: "Gyorsbillentyű", + pageElementCss: "Egyéni stílus a fő oldalelemekhez", + customCss: "Egyéni teljes CSS", + firstAlert: "Nem importálta az alapszabályt, kérjük, válassza ki a megfelelő szabályt az importáláshoz", + picker: "Pagetual elemkiválasztó", + closePicker: "Pagetual kiválasztó bezárása", + pickerPlaceholder: "Elemválasztó (Csak haladó felhasználóknak, egyébként hagyja üresen)", + pickerCheck: "Választó ellenőrzése és másolása", + switchSelector: "Kattintson az elem váltásához", + gotoEdit: "Ugrás a szabály szerkesztéséhez az aktuális választóval", + manualMode: "Illesztés letiltása, manuális lapozás a jobb nyílbillentyűvel (vagy a 'pagetual.next' esemény küldésével)", + clickMode: "Illesztés letiltása, automatikus kattintás a következő oldalra az oldal végére görgetve", + pageBarMenu: "Kattintson az oldalsáv közepére a kiválasztó menü megnyitásához", + nextSwitch: "Következő link váltása", + arrowToScroll: "Nyomja meg a bal nyilat a visszagörgetéshez és a jobb nyilat az oldallapozáshoz", + sideController: "A lapozásvezérlő sáv megjelenítése az oldalsávon", + sideControllerScroll: "Görgetés váltása", + sideControllerAlways: "Mindig mutassa", + hideLoadingIcon: "Betöltési animáció elrejtése", + hideBarArrow: "Oldalsáv nyilának elrejtése", + duplicate: "Duplikált Pagetual telepítve van, ellenőrizze a szkriptkezelőjét!", + forceStateIframe: "Teljes oldal beágyazása iframe-ként", + forceStateDynamic: "Dinamikus tartalom betöltése iframe-en keresztül", + forceStateDisable: "Lapozás letiltása ezen az oldalon", + autoScrollRate: "Görgetési sebesség (1-1000)", + disableAutoScroll: "Automatikus görgetés leállítása", + enableAutoScroll: "Automatikus görgetés engedélyezése", + toggleAutoScroll: "Automatikus görgetés váltása", + ruleRequest: "Szabálykérés", + page: "Oldal ", + prevPage: "Előző oldal", + nextPage: "Következő oldal", + errorRulesMustBeArray: "A szabályoknak tömbnek kell lenniük!", + errorJson: "JSON hiba, ellenőrizze újra!", + editSuccess: "Sikeres szerkesztés", + errorWrongUrl: "Hibás URL, ellenőrizze újra!", + errorAlreadyExists: "Már létezik egy szabály!", + settingsSaved: "A beállítások mentve, frissítsen a megtekintéshez", + iframe: "Iframe által kényszerített felosztás", + dynamic: "Dinamikus betöltés", + reloadPage: "Szerkesztés befejezve, újratölti most?", + copied: "Másolva", + noValidContent: "Nincs érvényes tartalom, lehet, hogy Captcha van jelen", + outOfDate: "A szkript elavult, kérjük, frissítsen a legújabb verzióra.", + hideBarTips: "A lapozósáv elrejtése, magával ragadó élmény váltása", + setConfigPage: "Az aktuális oldal beállítása alapértelmezett konfigurációs oldalként", + wedata2github: "A wedata cím megváltoztatása a tükör címre a github tárolóban", + addOtherProp: "Szabálytulajdonságok hozzáadása", + addNextSelector: "Választó tartalmának hozzáadása nextLink-ként", + addPageSelector: "Választó tartalmának hozzáadása pageElement-ként", + propName: "Adja meg a szabálytulajdonság nevét", + propValue: "Adja meg a szabálytulajdonság értékét", + customFirst: "Gyorsítótár figyelmen kívül hagyása a helyi egyéni szabályoknál", + rulesExample: "Szabályok példa", + lastPage: "Elérte az utolsó oldalt", + lastPageTips: "Tippek megjelenítése az utolsó oldal elérésekor" + } + }, + { + name: "Română", + match: ["ro"], + lang: { + enableDebug: "Activați ieșirea de depanare în consolă", + updateNotification: "Notificare după actualizarea regulilor", + disable: "Dezactivați temporar", + disableSite: "Comutați starea de dezactivare", + disableSiteTips: "Dezactivat pe acest site.", + enableSiteTips: "Activat pe acest site.", + enable: "✅Activați întoarcerea automată a paginii", + tempActive: "Activ temporar", + toTop: "Înapoi sus.", + toBottom: "Mergi jos.", + current: "Pagina curentă.", + forceIframe: "Forțați alăturarea la pagina următoare", + cancelForceIframe: "Anulați alăturarea forțată", + configure: "Configurați Pagetual", + firstUpdate: "Faceți clic aici pentru a inițializa lista de reguli implicită", + update: "Actualizați regulile online", + click2update: "Faceți clic pentru a actualiza regulile de la URL acum", + loadNow: "Încărcați următoarea automat", + loadConfirm: "Câte pagini doriți să încărcați? (0 înseamnă infinit)", + noNext: "Nu s-a găsit niciun link următor, vă rugăm să creați o nouă regulă", + passSec: "Actualizat acum #t# secunde", + passMin: "Actualizat acum #t# minute", + passHour: "Actualizat acum #t# ore", + passDay: "Actualizat acum #t# zile", + cantDel: "Nu se pot șterge regulile încorporate", + confirmDel: "Sunteți sigur că doriți să ștergeți această regulă?", + updateSucc: "Actualizare reușită", + beginUpdate: "Începe actualizarea, vă rugăm așteptați un moment", + customUrls: "Importați URL-ul regulii Pagetual sau AutoPagerize, un URL pe linie.", + customRules: "Introduceți reguli personalizate. ✍️Contribuiți cu reguli", + save: "Salvați", + loadingText: "Se încarcă...", + opacity: "Opacitate", + opacityPlaceholder: "0: ascundeți distanțierul", + hideBar: "Ascundeți distanțierul de paginare", + hideBarButNoStop: "Ascundeți, dar nu opriți", + dbClick2Stop: "Faceți dublu clic pe spațiul gol pentru a întrerupe", + sortTitle: "Sortarea intră în vigoare după următoarea actualizare a regulilor", + autoRun: "Activare automată (mod listă neagră)", + autoLoadNum: "Cantitatea de pagini de preîncărcat", + turnRate: "Întoarceți la pagina următoare când este mai puțin de 【X】 ori înălțimea paginii de la subsol", + inputPageNum: "Introduceți numărul paginii pentru a sări", + enableHistory: "Scrieți istoricul de navigare după întoarcerea paginii", + enableHistoryAfterInsert: "Scrieți istoricul de navigare imediat după îmbinare, altfel scrieți după navigare", + contentVisibility: "Comutați automat vizibilitatea conținutului pentru a îmbunătăți performanța de randare", + initRun: "Întoarceți paginile imediat după deschidere", + preload: "Preîncărcați pagina următoare pentru a accelera", + click2ImportRule: "Faceți clic pentru a importa linkul regulilor de bază, apoi așteptați până la finalizarea actualizării: ", + forceAllBody: "Alăturați corpul complet al paginii?", + openInNewTab: "Deschideți URL-urile adăugirilor într-o filă nouă", + importSucc: "Import finalizat", + import: "Importați", + editCurrent: "Editați regula pentru site-ul web curent", + editBlacklist: "Editați lista neagră de URL-uri, o intrare pe linie, suportă caracterele [?,*].", + upBtnImg: "Pictogramă înapoi sus", + downBtnImg: "Pictogramă mergi la subsol", + sideControllerIcon: "Pictogramă bară laterală", + loadingTextTitle: "Se încarcă", + dbClick2StopCtrl: "Tasta Ctrl", + dbClick2StopAlt: "Tasta Alt", + dbClick2StopShift: "Tasta Shift", + dbClick2StopMeta: "Tasta Meta", + dbClick2StopKey: "Tastă de comandă rapidă", + pageElementCss: "Stil personalizat pentru elementele principale ale paginii", + customCss: "CSS complet personalizat", + firstAlert: "Nu ați importat regula de bază, vă rugăm să selectați regula corespunzătoare pentru a o importa", + picker: "Selector de elemente Pagetual", + closePicker: "Închideți selectorul Pagetual", + pickerPlaceholder: "Selector de elemente (Doar utilizatori avansați, altfel lăsați necompletat)", + pickerCheck: "Verificați selectorul și copiați", + switchSelector: "Faceți clic pentru a comuta elementul", + gotoEdit: "Mergeți la editarea regulii cu selectorul curent", + manualMode: "Dezactivați îmbinarea, avansați manual la pagina următoare folosind tasta săgeată dreapta (sau trimiteți evenimentul 'pagetual.next')", + clickMode: "Dezactivați îmbinarea, faceți clic automat pe pagina următoare la derularea până la sfârșitul paginii", + pageBarMenu: "Faceți clic în centrul barei de pagină pentru a deschide meniul selectorului", + nextSwitch: "Comutați linkul următor", + arrowToScroll: "Apăsați săgeata stânga pentru a derula înapoi și săgeata dreapta pentru a avansa pagina", + sideController: "Afișați bara de control a paginării în bara laterală", + sideControllerScroll: "Comutare derulare", + sideControllerAlways: "Afișați întotdeauna", + hideLoadingIcon: "Ascundeți animația de încărcare", + hideBarArrow: "Ascundeți săgeata pentru bara de pagină", + duplicate: "Pagetual duplicat a fost instalat, verificați managerul de scripturi!", + forceStateIframe: "Încorporați pagina completă ca iframe", + forceStateDynamic: "Încărcați conținut dinamic prin iframe", + forceStateDisable: "Dezactivați întoarcerea paginii pe acest site", + autoScrollRate: "Viteza de derulare (1~1000)", + disableAutoScroll: "Opriți derularea automată", + enableAutoScroll: "Activați derularea automată", + toggleAutoScroll: "Comutați derularea automată", + ruleRequest: "Cerere de regulă", + page: "Pagina ", + prevPage: "Pagina anterioară", + nextPage: "Pagina următoare", + errorRulesMustBeArray: "Regulile trebuie să fie un tablou!", + errorJson: "Eroare JSON, verificați din nou!", + editSuccess: "Editat cu succes", + errorWrongUrl: "URL greșit, verificați din nou!", + errorAlreadyExists: "O regulă există deja!", + settingsSaved: "Setările sunt salvate, reîmprospătați pentru a vizualiza", + iframe: "Divizare forțată de iframe", + dynamic: "Încărcare dinamică", + reloadPage: "Editare finalizată, reîncărcați acum?", + copied: "Copiat", + noValidContent: "Nu s-a detectat niciun conținut valid, este posibil să existe un Captcha", + outOfDate: "Scriptul este învechit, vă rugăm să actualizați la cea mai recentă versiune.", + hideBarTips: "Ascundeți bara de paginare, comutați experiența imersivă", + setConfigPage: "Setați pagina curentă ca pagină de configurare implicită", + wedata2github: "Schimbați adresa wedata cu adresa oglindă din depozitul github", + addOtherProp: "Adăugați proprietăți de regulă", + addNextSelector: "Adăugați conținutul selectorului ca nextLink", + addPageSelector: "Adăugați conținutul selectorului ca pageElement", + propName: "Introduceți numele proprietății regulii", + propValue: "Introduceți valoarea proprietății regulii", + customFirst: "Ignorați memoria cache pentru regulile personalizate locale", + rulesExample: "Exemplu de reguli", + lastPage: "Ați ajuns la ultima pagină", + lastPageTips: "Afișați sfaturi la atingerea ultimei pagini" + } + }, + { + name: "Suomi", + match: ["fi"], + lang: { + enableDebug: "Ota virheenkorjaustuloste käyttöön konsolissa", + updateNotification: "Ilmoitus sääntöjen päivityksen jälkeen", + disable: "Poista väliaikaisesti käytöstä", + disableSite: "Vaihda käytöstä poistettu tila", + disableSiteTips: "Poistettu käytöstä tällä sivustolla.", + enableSiteTips: "Otettu käyttöön tällä sivustolla.", + enable: "✅Ota automaattinen sivunvaihto käyttöön", + tempActive: "Väliaikaisesti aktiivinen", + toTop: "Takaisin ylös.", + toBottom: "Mene alas.", + current: "Nykyinen sivu.", + forceIframe: "Pakota liittymään seuraavalle sivulle", + cancelForceIframe: "Peruuta pakotettu liittyminen", + configure: "Määritä Pagetual", + firstUpdate: "Napsauta tästä alustaaksesi oletussääntöluettelon", + update: "Päivitä verkkosäännöt", + click2update: "Napsauta päivittääksesi säännöt URL-osoitteesta nyt", + loadNow: "Lataa seuraava automaattisesti", + loadConfirm: "Kuinka monta sivua haluat ladata? (0 tarkoittaa ääretöntä)", + noNext: "Seuraavaa linkkiä ei löytynyt, luo uusi sääntö", + passSec: "Päivitetty #t# sekuntia sitten", + passMin: "Päivitetty #t# minuuttia sitten", + passHour: "Päivitetty #t# tuntia sitten", + passDay: "Päivitetty #t# päivää sitten", + cantDel: "Sisäänrakennettuja sääntöjä ei voi poistaa", + confirmDel: "Haluatko varmasti poistaa tämän säännön?", + updateSucc: "Päivitys onnistui", + beginUpdate: "Aloitetaan päivitys, odota hetki", + customUrls: "Tuo Pagetual- tai AutoPagerize-säännön URL-osoite, yksi URL-osoite riviä kohti.", + customRules: "Syötä mukautettuja sääntöjä. ✍️Osallistu sääntöihin", + save: "Tallenna", + loadingText: "Ladataan...", + opacity: "Läpinäkyvyys", + opacityPlaceholder: "0: piilota välilevy", + hideBar: "Piilota sivutuksen välilevy", + hideBarButNoStop: "Piilota, mutta älä pysäytä", + dbClick2Stop: "Kaksoisnapsauta tyhjää tilaa keskeyttääksesi", + sortTitle: "Lajittelu tulee voimaan seuraavan sääntöpäivityksen jälkeen", + autoRun: "Ota automaattisesti käyttöön (mustan listan tila)", + autoLoadNum: "Esiladattavien sivujen määrä", + turnRate: "Vaihda seuraavalle sivulle, kun se on alle 【X】 kertaa sivun korkeuden päässä alatunnisteesta", + inputPageNum: "Syötä sivunumero siirtyäksesi", + enableHistory: "Kirjoita selaushistoria sivunvaihdon jälkeen", + enableHistoryAfterInsert: "Kirjoita selaushistoria heti liittämisen jälkeen, muuten kirjoita selauksen jälkeen", + contentVisibility: "Vaihda automaattisesti sisällön näkyvyyttä parantaaksesi renderöintisuorituskykyä", + initRun: "Vaihda sivuja heti avaamisen jälkeen", + preload: "Esilataa seuraava sivu nopeuttaaksesi", + click2ImportRule: "Napsauta tuodaksesi perussääntöjen linkin ja odota sitten, kunnes päivitys on valmis: ", + forceAllBody: "Liitetäänkö sivun koko runko?", + openInNewTab: "Avaa lisäysten URL-osoitteet uudessa välilehdessä", + importSucc: "Tuonti onnistui", + import: "Tuo", + editCurrent: "Muokkaa nykyisen verkkosivuston sääntöä", + editBlacklist: "Muokkaa URL-mustaa listaa, yksi merkintä riviä kohti, tukee [?,*] -jokerimerkkejä.", + upBtnImg: "Takaisin ylös -kuvake", + downBtnImg: "Mene alatunnisteeseen -kuvake", + sideControllerIcon: "Sivupalkin kuvake", + loadingTextTitle: "Ladataan", + dbClick2StopCtrl: "Ctrl-näppäin", + dbClick2StopAlt: "Alt-näppäin", + dbClick2StopShift: "Shift-näppäin", + dbClick2StopMeta: "Meta-näppäin", + dbClick2StopKey: "Pikakuvake", + pageElementCss: "Mukautettu tyyli pääsivun elementeille", + customCss: "Mukautettu täydellinen CSS", + firstAlert: "Et ole tuonut perussääntöä, valitse sopiva sääntö tuotavaksi", + picker: "Pagetual-elementin valitsin", + closePicker: "Sulje Pagetual-valitsin", + pickerPlaceholder: "Elementin valitsin (Vain edistyneille käyttäjille, muuten jätä tyhjäksi)", + pickerCheck: "Tarkista valitsin ja kopioi", + switchSelector: "Napsauta vaihtaaksesi elementtiä", + gotoEdit: "Siirry muokkaamaan sääntöä nykyisellä valitsimella", + manualMode: "Poista liittäminen käytöstä, siirry manuaalisesti seuraavalle sivulle oikealla nuolinäppäimellä (tai lähetä tapahtuma 'pagetual.next')", + clickMode: "Poista liittäminen käytöstä, napsauta automaattisesti seuraavaa sivua, kun vierität sivun loppuun", + pageBarMenu: "Napsauta sivupalkin keskustaa avataksesi valitsinvalikon", + nextSwitch: "Vaihda seuraava linkki", + arrowToScroll: "Paina vasenta nuolta selataksesi taaksepäin ja oikeaa nuolta siirtyäksesi sivulle", + sideController: "Näytä sivutuksen ohjauspalkki sivupalkissa", + sideControllerScroll: "Vierityksen vaihto", + sideControllerAlways: "Näytä aina", + hideLoadingIcon: "Piilota latausanimaatio", + hideBarArrow: "Piilota nuoli sivupalkille", + duplicate: "Pagetualin kaksoiskappale on asennettu, tarkista komentosarjojen hallinta!", + forceStateIframe: "Upota koko sivu iframeksi", + forceStateDynamic: "Lataa dynaamista sisältöä iframen kautta", + forceStateDisable: "Poista sivunvaihto käytöstä tällä sivustolla", + autoScrollRate: "Vieritysnopeus (1-1000)", + disableAutoScroll: "Pysäytä automaattinen vieritys", + enableAutoScroll: "Ota automaattinen vieritys käyttöön", + toggleAutoScroll: "Vaihda automaattista vieritystä", + ruleRequest: "Sääntöpyyntö", + page: "Sivu ", + prevPage: "Edellinen sivu", + nextPage: "Seuraava sivu", + errorRulesMustBeArray: "Sääntöjen on oltava taulukko!", + errorJson: "JSON-virhe, tarkista uudelleen!", + editSuccess: "Muokkaus onnistui", + errorWrongUrl: "Väärä URL-osoite, tarkista uudelleen!", + errorAlreadyExists: "Sääntö on jo olemassa!", + settingsSaved: "Asetukset on tallennettu, päivitä nähdäksesi", + iframe: "Pakotettu jako iframella", + dynamic: "Dynaaminen lataus", + reloadPage: "Muokkaus valmis, ladataanko uudelleen nyt?", + copied: "Kopioitu", + noValidContent: "Kelvollista sisältöä ei havaittu, Captcha saattaa olla läsnä", + outOfDate: "Komentosarja on vanhentunut, päivitä uusimpaan versioon.", + hideBarTips: "Piilota sivutuspalkki, vaihda immersiiviseen kokemukseen", + setConfigPage: "Aseta nykyinen sivu oletusmäärityssivuksi", + wedata2github: "Vaihda wedata-osoite github-arkiston peiliosoitteeseen", + addOtherProp: "Lisää säännön ominaisuuksia", + addNextSelector: "Lisää valitsimen sisältö nimellä nextLink", + addPageSelector: "Lisää valitsimen sisältö nimellä pageElement", + propName: "Syötä säännön ominaisuuden nimi", + propValue: "Syötä säännön ominaisuuden arvo", + customFirst: "Ohita välimuisti paikallisille mukautetuille säännöille", + rulesExample: "Sääntöesimerkki", + lastPage: "Viimeinen sivu saavutettu", + lastPageTips: "Näytä vinkkejä, kun saavutaan viimeiselle sivulle" + } + }, + { + name: "Ελληνικά", + match: ["el"], + lang: { + enableDebug: "Ενεργοποίηση εξόδου εντοπισμού σφαλμάτων στην κονσόλα", + updateNotification: "Ειδοποίηση μετά την ενημέρωση των κανόνων", + disable: "Προσωρινή απενεργοποίηση", + disableSite: "Εναλλαγή κατάστασης απενεργοποίησης", + disableSiteTips: "Απενεργοποιημένο σε αυτόν τον ιστότοπο.", + enableSiteTips: "Ενεργοποιημένο σε αυτόν τον ιστότοπο.", + enable: "✅Ενεργοποίηση αυτόματης αλλαγής σελίδας", + tempActive: "Προσωρινά ενεργό", + toTop: "Επιστροφή στην κορυφή.", + toBottom: "Μετάβαση στο κάτω μέρος.", + current: "Τρέχουσα σελίδα.", + forceIframe: "Εξαναγκασμός συμμετοχής στην επόμενη σελίδα", + cancelForceIframe: "Ακύρωση εξαναγκασμένης συμμετοχής", + configure: "Διαμόρφωση Pagetual", + firstUpdate: "Κάντε κλικ εδώ για να αρχικοποιήσετε την προεπιλεγμένη λίστα κανόνων", + update: "Ενημέρωση διαδικτυακών κανόνων", + click2update: "Κάντε κλικ για να ενημερώσετε τους κανόνες από το URL τώρα", + loadNow: "Φόρτωση του επόμενου αυτόματα", + loadConfirm: "Πόσες σελίδες θέλετε να φορτώσετε; (0 σημαίνει άπειρο)", + noNext: "Δεν βρέθηκε επόμενος σύνδεσμος, δημιουργήστε έναν νέο κανόνα", + passSec: "Ενημερώθηκε πριν από #t# δευτερόλεπτα", + passMin: "Ενημερώθηκε πριν από #t# λεπτά", + passHour: "Ενημερώθηκε πριν από #t# ώρες", + passDay: "Ενημερώθηκε πριν από #t# ημέρες", + cantDel: "Δεν είναι δυνατή η διαγραφή ενσωματωμένων κανόνων", + confirmDel: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον κανόνα;", + updateSucc: "Η ενημέρωση ολοκληρώθηκε με επιτυχία", + beginUpdate: "Έναρξη ενημέρωσης, περιμένετε μια στιγμή", + customUrls: "Εισαγωγή URL κανόνα Pagetual ή AutoPagerize, ένα URL ανά γραμμή.", + customRules: "Εισαγωγή προσαρμοσμένων κανόνων. ✍️Συνεισφέρετε κανόνες", + save: "Αποθήκευση", + loadingText: "Φόρτωση...", + opacity: "Αδιαφάνεια", + opacityPlaceholder: "0: απόκρυψη διαχωριστικού", + hideBar: "Απόκρυψη του διαχωριστικού σελιδοποίησης", + hideBarButNoStop: "Απόκρυψη αλλά όχι διακοπή", + dbClick2Stop: "Κάντε διπλό κλικ στον κενό χώρο για παύση", + sortTitle: "Η ταξινόμηση τίθεται σε ισχύ μετά την επόμενη ενημέρωση κανόνων", + autoRun: "Αυτόματη ενεργοποίηση (λειτουργία μαύρης λίστας)", + autoLoadNum: "Ποσότητα για προφόρτωση σελίδων", + turnRate: "Μετάβαση στην επόμενη σελίδα όταν απέχει λιγότερο από 【X】 φορές το ύψος της σελίδας από το υποσέλιδο", + inputPageNum: "Εισαγάγετε τον αριθμό σελίδας για μετάβαση", + enableHistory: "Εγγραφή ιστορικού περιήγησης μετά την αλλαγή σελίδας", + enableHistoryAfterInsert: "Εγγραφή ιστορικού περιήγησης αμέσως μετά τη συγκόλληση, διαφορετικά εγγραφή μετά την περιήγηση", + contentVisibility: "Αυτόματη εναλλαγή της ορατότητας περιεχομένου για βελτίωση της απόδοσης απόδοσης", + initRun: "Αλλαγή σελίδων αμέσως μετά το άνοιγμα", + preload: "Προφόρτωση της επόμενης σελίδας για επιτάχυνση", + click2ImportRule: "Κάντε κλικ για να εισαγάγετε τον σύνδεσμο των βασικών κανόνων και, στη συνέχεια, περιμένετε μέχρι να ολοκληρωθεί η ενημέρωση: ", + forceAllBody: "Συμμετοχή ολόκληρου του σώματος της σελίδας;", + openInNewTab: "Άνοιγμα των URL των προσθηκών σε νέα καρτέλα", + importSucc: "Η εισαγωγή ολοκληρώθηκε", + import: "Εισαγωγή", + editCurrent: "Επεξεργασία κανόνα για τον τρέχοντα ιστότοπο", + editBlacklist: "Επεξεργαστείτε τη μαύρη λίστα URL, μία καταχώριση ανά γραμμή, υποστηρίζει μπαλαντέρ [?,*].", + upBtnImg: "Εικονίδιο επιστροφής στην κορυφή", + downBtnImg: "Εικονίδιο μετάβασης στο υποσέλιδο", + sideControllerIcon: "Εικονίδιο πλευρικής γραμμής", + loadingTextTitle: "Φόρτωση", + dbClick2StopCtrl: "Πλήκτρο Ctrl", + dbClick2StopAlt: "Πλήκτρο Alt", + dbClick2StopShift: "Πλήκτρο Shift", + dbClick2StopMeta: "Πλήκτρο Meta", + dbClick2StopKey: "Πλήκτρο συντόμευσης", + pageElementCss: "Προσαρμοσμένο στυλ για τα κύρια στοιχεία της σελίδας", + customCss: "Προσαρμοσμένο πλήρες CSS", + firstAlert: "Δεν έχετε εισαγάγει τον βασικό κανόνα, επιλέξτε τον κατάλληλο κανόνα για εισαγωγή", + picker: "Επιλογέας στοιχείων Pagetual", + closePicker: "Κλείσιμο του επιλογέα Pagetual", + pickerPlaceholder: "Επιλογέας στοιχείων (Μόνο για προχωρημένους χρήστες, αλλιώς αφήστε κενό)", + pickerCheck: "Έλεγχος επιλογέα και αντιγραφή", + switchSelector: "Κάντε κλικ για εναλλαγή στοιχείου", + gotoEdit: "Μετάβαση στην επεξεργασία κανόνα με τον τρέχοντα επιλογέα", + manualMode: "Απενεργοποίηση συγκόλλησης, μη αυτόματη μετάβαση στην επόμενη σελίδα χρησιμοποιώντας το δεξί βέλος (ή αποστολή συμβάντος 'pagetual.next')", + clickMode: "Απενεργοποίηση συγκόλλησης, αυτόματο κλικ στην επόμενη σελίδα κατά την κύλιση στο τέλος της σελίδας", + pageBarMenu: "Κάντε κλικ στο κέντρο της γραμμής σελίδας για να ανοίξετε το μενού επιλογέα", + nextSwitch: "Εναλλαγή επόμενου συνδέσμου", + arrowToScroll: "Πατήστε το αριστερό βέλος για κύλιση προς τα πίσω και το δεξί βέλος για μετάβαση στη σελίδα", + sideController: "Εμφάνιση της γραμμής ελέγχου σελιδοποίησης στην πλευρική γραμμή", + sideControllerScroll: "Εναλλαγή κύλισης", + sideControllerAlways: "Πάντα εμφάνιση", + hideLoadingIcon: "Απόκρυψη κινούμενης εικόνας φόρτωσης", + hideBarArrow: "Απόκρυψη βέλους για τη γραμμή σελίδας", + duplicate: "Έχει εγκατασταθεί διπλότυπο Pagetual, ελέγξτε τον διαχειριστή σεναρίων σας!", + forceStateIframe: "Ενσωμάτωση ολόκληρης της σελίδας ως iframe", + forceStateDynamic: "Φόρτωση δυναμικού περιεχομένου μέσω iframe", + forceStateDisable: "Απενεργοποίηση αλλαγής σελίδας σε αυτόν τον ιστότοπο", + autoScrollRate: "Ταχύτητα κύλισης (1~1000)", + disableAutoScroll: "Διακοπή αυτόματης κύλισης", + enableAutoScroll: "Ενεργοποίηση αυτόματης κύλισης", + toggleAutoScroll: "Εναλλαγή αυτόματης κύλισης", + ruleRequest: "Αίτημα κανόνα", + page: "Σελίδα ", + prevPage: "Προηγούμενη σελίδα", + nextPage: "Επόμενη σελίδα", + errorRulesMustBeArray: "Οι κανόνες πρέπει να είναι πίνακας!", + errorJson: "Σφάλμα JSON, ελέγξτε ξανά!", + editSuccess: "Η επεξεργασία ολοκληρώθηκε με επιτυχία", + errorWrongUrl: "Λάθος URL, ελέγξτε ξανά!", + errorAlreadyExists: "Ένας κανόνας υπάρχει ήδη!", + settingsSaved: "Οι ρυθμίσεις αποθηκεύτηκαν, ανανεώστε για προβολή", + iframe: "Εξαναγκασμένος διαχωρισμός από iframe", + dynamic: "Δυναμική φόρτωση", + reloadPage: "Η επεξεργασία ολοκληρώθηκε, επαναφόρτωση τώρα;", + copied: "Αντιγράφηκε", + noValidContent: "Δεν εντοπίστηκε έγκυρο περιεχόμενο, ενδέχεται να υπάρχει Captcha", + outOfDate: "Το σενάριο είναι ξεπερασμένο, ενημερώστε στην πιο πρόσφατη έκδοση.", + hideBarTips: "Απόκρυψη της γραμμής σελιδοποίησης, εναλλαγή καθηλωτικής εμπειρίας", + setConfigPage: "Ορισμός της τρέχουσας σελίδας ως προεπιλεγμένης σελίδας διαμόρφωσης", + wedata2github: "Αλλάξτε τη διεύθυνση wedata στη διεύθυνση καθρέφτη στο αποθετήριο github", + addOtherProp: "Προσθήκη ιδιοτήτων κανόνα", + addNextSelector: "Προσθήκη περιεχομένου επιλογέα ως nextLink", + addPageSelector: "Προσθήκη περιεχομένου επιλογέα ως pageElement", + propName: "Εισαγάγετε το όνομα ιδιότητας κανόνα", + propValue: "Εισαγάγετε την τιμή ιδιότητας κανόνα", + customFirst: "Παράβλεψη κρυφής μνήμης για τοπικούς προσαρμοσμένους κανόνες", + rulesExample: "Παράδειγμα κανόνων", + lastPage: "Φτάσατε στην τελευταία σελίδα", + lastPageTips: "Εμφάνιση συμβουλών κατά την άφιξη στην τελευταία σελίδα" + } + }, + { + name: "Esperanto", + match: ["eo"], + lang: { + enableDebug: "Aktivigi sencimigan eligon al la konzolo", + updateNotification: "Sciigo post ĝisdatigo de reguloj", + disable: "Provizore malŝalti", + disableSite: "Baskuligi malŝaltitan staton", + disableSiteTips: "Malŝaltita en ĉi tiu retejo.", + enableSiteTips: "Ŝaltita en ĉi tiu retejo.", + enable: "✅Aktivigi aŭtomatan paĝo-turnadon", + tempActive: "Provizore aktiva", + toTop: "Reen al supro.", + toBottom: "Iri al malsupro.", + current: "Nuna paĝo.", + forceIframe: "Devigi kunigon de la sekva paĝo", + cancelForceIframe: "Nuligi devigitan kunigon", + configure: "Agordi Pagetual", + firstUpdate: "Klaku ĉi tie por pravalorizi la defaŭltan regul-liston", + update: "Ĝisdatigi retajn regulojn", + click2update: "Klaku por ĝisdatigi regulojn el URL nun", + loadNow: "Ŝargi la sekvan aŭtomate", + loadConfirm: "Kiom da paĝoj vi volas ŝargi? (0 signifas senfine)", + noNext: "Neniu sekva ligilo trovita, bonvolu krei novan regulon", + passSec: "Ĝisdatigita antaŭ #t# sekundoj", + passMin: "Ĝisdatigita antaŭ #t# minutoj", + passHour: "Ĝisdatigita antaŭ #t# horoj", + passDay: "Ĝisdatigita antaŭ #t# tagoj", + cantDel: "Ne eblas forigi enkonstruitajn regulojn", + confirmDel: "Ĉu vi certas, ke vi volas forigi ĉi tiun regulon?", + updateSucc: "Ĝisdatigo sukcesis", + beginUpdate: "Komencante ĝisdatigon, bonvolu atendi momenton", + customUrls: "Importi regulan URL de Pagetual aŭ AutoPagerize, unu URL po linio.", + customRules: "Enigu proprajn regulojn. ✍️Kontribui regulojn", + save: "Konservi", + loadingText: "Ŝargante...", + opacity: "Opakeco", + opacityPlaceholder: "0: kaŝi apartigilon", + hideBar: "Kaŝi la paĝrangan apartigilon", + hideBarButNoStop: "Kaŝi sed ne haltigi", + dbClick2Stop: "Duoble-klaku sur la malplena spaco por paŭzi", + sortTitle: "Ordigo efektiviĝas post la sekva ĝisdatigo de reguloj", + autoRun: "Aŭtomata aktivigo (nigra listo reĝimo)", + autoLoadNum: "Kvanto por antaŭŝargitaj paĝoj", + turnRate: "Turnu la sekvan paĝon kiam ĝi estas malpli ol 【X】 fojojn la paĝa alteco de la piedlinio", + inputPageNum: "Enigu paĝan numeron por salti", + enableHistory: "Skribi foliumhistorion post paĝo-turnado", + enableHistoryAfterInsert: "Skribi foliumhistorion tuj post kunigo, alie skribi post foliumado", + contentVisibility: "Aŭtomate baskuligi enhavan videblecon por plibonigi bildigan rendimenton", + initRun: "Turni paĝojn tuj post malfermo", + preload: "Antaŭŝargi la sekvan paĝon por rapidigi", + click2ImportRule: "Klaku por importi bazan regulan ligilon, kaj poste atendu ĝis la ĝisdatigo finiĝos: ", + forceAllBody: "Kunigi la plenan korpon de la paĝo?", + openInNewTab: "Malfermi URL-ojn de aldonoj en nova langeto", + importSucc: "Importado finiĝis", + import: "Importi", + editCurrent: "Redakti regulon por la nuna retejo", + editBlacklist: "Redakti la nigran liston de URL-oj, unu enigo po linio, subtenas [?,*] ĵokerojn.", + upBtnImg: "Ikono por reen al supro", + downBtnImg: "Ikono por iri al piedlinio", + sideControllerIcon: "Ikono de flanka stango", + loadingTextTitle: "Ŝargante", + dbClick2StopCtrl: "Klavo Ctrl", + dbClick2StopAlt: "Klavo Alt", + dbClick2StopShift: "Klavo Shift", + dbClick2StopMeta: "Klavo Meta", + dbClick2StopKey: "Fulmoklavo", + pageElementCss: "Propra stilo por ĉefaj paĝaj elementoj", + customCss: "Propra kompleta CSS", + firstAlert: "Vi ne importis la bazan regulon, bonvolu elekti la taŭgan regulon por importi", + picker: "Pagetual elementa elektilo", + closePicker: "Fermi la elektilon de Pagetual", + pickerPlaceholder: "Elementa elektilo (Nur por spertaj uzantoj, alie lasu malplena)", + pickerCheck: "Kontroli elektilon kaj kopii", + switchSelector: "Klaku por ŝanĝi elementon", + gotoEdit: "Iri al redakto de regulo kun la nuna elektilo", + manualMode: "Malŝalti kunigon, permane antaŭeniri al la sekva paĝo per la dekstra sagoklavo (aŭ sendi eventon 'pagetual.next')", + clickMode: "Malŝalti kunigon, aŭtomate alklaki la sekvan paĝon rulumante ĝis la fino de la paĝo", + pageBarMenu: "Klaku la centron de la paĝa stango por malfermi la elektilan menuon", + nextSwitch: "Ŝanĝi la sekvan ligilon", + arrowToScroll: "Premu la maldekstran sagon por rulumigi reen kaj la dekstran sagon por antaŭeniri paĝon", + sideController: "Montri la paĝrangan kontrolstangon en la flanka stango", + sideControllerScroll: "Rulumiga baskulo", + sideControllerAlways: "Ĉiam montri", + hideLoadingIcon: "Kaŝi ŝargan animacion", + hideBarArrow: "Kaŝi sagon por la paĝa stango", + duplicate: "Duplikata Pagetual estis instalita, kontrolu vian skript-administrilon!", + forceStateIframe: "Enigi plenan paĝon kiel iframe", + forceStateDynamic: "Ŝargi dinamikan enhavon per iframe", + forceStateDisable: "Malŝalti paĝo-turnadon en ĉi tiu retejo", + autoScrollRate: "Rulumrapido (1~1000)", + disableAutoScroll: "Haltigi Aŭtomatan Rulumadon", + enableAutoScroll: "Aktivigi Aŭtomatan Rulumadon", + toggleAutoScroll: "Baskuligi Aŭtomatan Rulumadon", + ruleRequest: "Regula Peto", + page: "Paĝo ", + prevPage: "Antaŭa paĝo", + nextPage: "Sekva paĝo", + errorRulesMustBeArray: "Reguloj devas esti tabelo!", + errorJson: "JSON-eraro, Rekontrolu!", + editSuccess: "Sukcese redaktita", + errorWrongUrl: "Malĝusta URL, Rekontrolu!", + errorAlreadyExists: "Regulo jam ekzistas!", + settingsSaved: "La agordoj estas konservitaj, refreŝigu por vidi", + iframe: "Devigita disigo per iframe", + dynamic: "Dinamika ŝargado", + reloadPage: "Redakto finiĝis, ĉu reŝargi nun?", + copied: "Kopiita", + noValidContent: "Neniu valida enhavo detektita, Captcha eble ĉeestas", + outOfDate: "La skripto estas malmoderna, bonvolu ĝisdatigi al la plej nova versio.", + hideBarTips: "Kaŝi la paĝrangan stangon, baskuligi imersivan sperton", + setConfigPage: "Agordi la nunan paĝon kiel la defaŭltan agordan paĝon", + wedata2github: "Ŝanĝi la wedata-adreson al la spegula adreso en la github-deponejo", + addOtherProp: "Aldoni regulajn ecojn", + addNextSelector: "Aldoni elektilan enhavon kiel nextLink", + addPageSelector: "Aldoni elektilan enhavon kiel pageElement", + propName: "Enigu regulan econan nomon", + propValue: "Enigu regulan econan valoron", + customFirst: "Ignori kaŝmemoron por lokaj propraj reguloj", + rulesExample: "Regula Ekzemplo", + lastPage: "Atingis la lastan paĝon", + lastPageTips: "Montri konsilojn atinginte la lastan paĝon" + } + }, + { + name: "Български", + match: ["bg"], + lang: { + enableDebug: "Активиране на изход за отстраняване на грешки в конзолата", + updateNotification: "Известие след актуализиране на правилата", + disable: "Временно деактивиране", + disableSite: "Превключване на деактивирано състояние", + disableSiteTips: "Деактивирано на този сайт.", + enableSiteTips: "Активирано на този сайт.", + enable: "✅Активиране на автоматично прелистване на страници", + tempActive: "Временно активно", + toTop: "Обратно горе.", + toBottom: "Към дъното.", + current: "Текуща страница.", + forceIframe: "Принудително присъединяване към следващата страница", + cancelForceIframe: "Отказ от принудително присъединяване", + configure: "Конфигуриране на Pagetual", + firstUpdate: "Щракнете тук, за да инициализирате списъка с правила по подразбиране", + update: "Актуализиране на онлайн правилата", + click2update: "Щракнете, за да актуализирате правилата от URL сега", + loadNow: "Зареждане на следващото автоматично", + loadConfirm: "Колко страници искате да заредите? (0 означава безкрайност)", + noNext: "Няма намерена следваща връзка, моля, създайте ново правило", + passSec: "Актуализирано преди #t# секунди", + passMin: "Актуализирано преди #t# минути", + passHour: "Актуализирано преди #t# часа", + passDay: "Актуализирано преди #t# дни", + cantDel: "Не могат да се изтриват вградени правила", + confirmDel: "Сигурни ли сте, че искате да изтриете това правило?", + updateSucc: "Актуализацията е успешна", + beginUpdate: "Започва актуализация, моля, изчакайте малко", + customUrls: "Импортиране на URL на правило Pagetual или AutoPagerize, един URL на ред.", + customRules: "Въведете персонализирани правила. ✍️Допринесете с правила", + save: "Запазване", + loadingText: "Зареждане...", + opacity: "Непрозрачност", + opacityPlaceholder: "0: скриване на разделителя", + hideBar: "Скриване на разделителя за пагинация", + hideBarButNoStop: "Скриване, но не спиране", + dbClick2Stop: "Двоен клик върху празното пространство за пауза", + sortTitle: "Сортирането влиза в сила след следващата актуализация на правилата", + autoRun: "Автоматично активиране (режим на черен списък)", + autoLoadNum: "Количество за предварително заредени страници", + turnRate: "Превъртете на следващата страница, когато е на по-малко от 【X】 пъти височината на страницата от долния колонтитул", + inputPageNum: "Въведете номер на страница за прескачане", + enableHistory: "Записване на историята на сърфиране след прелистване на страница", + enableHistoryAfterInsert: "Записване на историята на сърфиране веднага след снаждане, в противен случай записване след сърфиране", + contentVisibility: "Автоматично превключване на видимостта на съдържанието за подобряване на производителността на изобразяване", + initRun: "Превъртане на страници веднага след отваряне", + preload: "Предварително зареждане на следващата страница за ускоряване", + click2ImportRule: "Щракнете, за да импортирате връзката към основните правила, и след това изчакайте, докато актуализацията приключи: ", + forceAllBody: "Присъединяване на цялото тяло на страницата?", + openInNewTab: "Отваряне на URL адресите на допълненията в нов раздел", + importSucc: "Импортирането е завършено", + import: "Импортиране", + editCurrent: "Редактиране на правило за текущия уебсайт", + editBlacklist: "Редактирайте черния списък с URL адреси, един запис на ред, поддържа заместващи символи [?,*].", + upBtnImg: "Икона за връщане горе", + downBtnImg: "Икона за преминаване към долния колонтитул", + sideControllerIcon: "Икона на страничната лента", + loadingTextTitle: "Зареждане", + dbClick2StopCtrl: "Клавиш Ctrl", + dbClick2StopAlt: "Клавиш Alt", + dbClick2StopShift: "Клавиш Shift", + dbClick2StopMeta: "Клавиш Meta", + dbClick2StopKey: "Клавишна комбинация", + pageElementCss: "Персонализиран стил за основните елементи на страницата", + customCss: "Персонализиран пълен CSS", + firstAlert: "Не сте импортирали основното правило, моля, изберете подходящото правило за импортиране", + picker: "Избор на елементи на Pagetual", + closePicker: "Затваряне на избора на Pagetual", + pickerPlaceholder: "Избор на елементи (Само за напреднали потребители, в противен случай оставете празно)", + pickerCheck: "Проверка на селектора и копиране", + switchSelector: "Щракнете, за да превключите елемент", + gotoEdit: "Отидете на редактиране на правило с текущия селектор", + manualMode: "Деактивиране на снаждането, ръчно преминаване към следващата страница с помощта на десния клавиш със стрелка (или изпращане на събитие 'pagetual.next')", + clickMode: "Деактивиране на снаждането, автоматично щракване върху следващата страница при превъртане до края на страницата", + pageBarMenu: "Щракнете в центъра на лентата на страницата, за да отворите менюто за избор", + nextSwitch: "Превключване на следваща връзка", + arrowToScroll: "Натиснете лявата стрелка, за да превъртите назад, и дясната стрелка, за да преминете напред", + sideController: "Показване на контролната лента за пагинация в страничната лента", + sideControllerScroll: "Превключване на превъртането", + sideControllerAlways: "Винаги показване", + hideLoadingIcon: "Скриване на анимацията за зареждане", + hideBarArrow: "Скриване на стрелката за лентата на страницата", + duplicate: "Инсталиран е дубликат на Pagetual, проверете вашия мениджър на скриптове!", + forceStateIframe: "Вграждане на цялата страница като iframe", + forceStateDynamic: "Зареждане на динамично съдържание чрез iframe", + forceStateDisable: "Деактивиране на прелистването на страници на този сайт", + autoScrollRate: "Скорост на превъртане (1-1000)", + disableAutoScroll: "Спиране на автоматичното превъртане", + enableAutoScroll: "Активиране на автоматичното превъртане", + toggleAutoScroll: "Превключване на автоматичното превъртане", + ruleRequest: "Искане за правило", + page: "Страница ", + prevPage: "Предишна страница", + nextPage: "Следваща страница", + errorRulesMustBeArray: "Правилата трябва да са масив!", + errorJson: "Грешка в JSON, проверете отново!", + editSuccess: "Редактирането е успешно", + errorWrongUrl: "Грешен URL, проверете отново!", + errorAlreadyExists: "Правило вече съществува!", + settingsSaved: "Настройките са запазени, опреснете, за да видите", + iframe: "Принудително разделяне от iframe", + dynamic: "Динамично зареждане", + reloadPage: "Редактирането е завършено, презареждане сега?", + copied: "Копирано", + noValidContent: "Не е открито валидно съдържание, може да има Captcha", + outOfDate: "Скриптът е остарял, моля, актуализирайте до най-новата версия.", + hideBarTips: "Скрийте лентата за пагинация, превключете поглъщащото изживяване", + setConfigPage: "Задайте текущата страница като страница за конфигурация по подразбиране", + wedata2github: "Променете адреса на wedata на огледалния адрес в хранилището на github", + addOtherProp: "Добавяне на свойства на правилото", + addNextSelector: "Добавяне на съдържание на селектора като nextLink", + addPageSelector: "Добавяне на съдържание на селектора като pageElement", + propName: "Въведете име на свойството на правилото", + propValue: "Въведете стойност на свойството на правилото", + customFirst: "Игнориране на кеша за локални персонализирани правила", + rulesExample: "Пример за правила", + lastPage: "Достигната е последната страница", + lastPageTips: "Показване на съвети при достигане на последната страница" + } + }, + { + name: "Čeština", + match: ["cs"], + lang: { + enableDebug: "Povolit výstup ladění do konzole", + updateNotification: "Oznámení po aktualizaci pravidel", + disable: "Dočasně zakázat", + disableSite: "Přepnout stav zakázání", + disableSiteTips: "Na této stránce zakázáno.", + enableSiteTips: "Na této stránce povoleno.", + enable: "✅Povolit automatické otáčení stránek", + tempActive: "Dočasně aktivní", + toTop: "Zpět nahoru.", + toBottom: "Jít dolů.", + current: "Aktuální stránka.", + forceIframe: "Vynutit připojení k další stránce", + cancelForceIframe: "Zrušit vynucené připojení", + configure: "Konfigurovat Pagetual", + firstUpdate: "Klikněte sem pro inicializaci výchozího seznamu pravidel", + update: "Aktualizovat online pravidla", + click2update: "Klikněte pro aktualizaci pravidel z URL nyní", + loadNow: "Načíst další automaticky", + loadConfirm: "Kolik stránek chcete načíst? (0 znamená nekonečno)", + noNext: "Nenalezen žádný další odkaz, vytvořte nové pravidlo", + passSec: "Aktualizováno před #t# sekundami", + passMin: "Aktualizováno před #t# minutami", + passHour: "Aktualizováno před #t# hodinami", + passDay: "Aktualizováno před #t# dny", + cantDel: "Nelze odstranit vestavěná pravidla", + confirmDel: "Jste si jisti, že chcete toto pravidlo odstranit?", + updateSucc: "Aktualizace úspěšná", + beginUpdate: "Zahajuje se aktualizace, chvíli prosím počkejte", + customUrls: "Importovat URL pravidla Pagetual nebo AutoPagerize, jedno URL na řádek.", + customRules: "Zadejte vlastní pravidla. ✍️Přispějte pravidly", + save: "Uložit", + loadingText: "Načítání...", + opacity: "Neprůhlednost", + opacityPlaceholder: "0: skrýt oddělovač", + hideBar: "Skrýt oddělovač stránkování", + hideBarButNoStop: "Skrýt, ale nezastavit", + dbClick2Stop: "Dvojitým kliknutím na prázdné místo pozastavíte", + sortTitle: "Třídění se projeví po další aktualizaci pravidel", + autoRun: "Automatické povolení (režim černé listiny)", + autoLoadNum: "Množství pro přednačtené stránky", + turnRate: "Otočte na další stránku, když je méně než 【X】 násobek výšky stránky od zápatí", + inputPageNum: "Zadejte číslo stránky pro skok", + enableHistory: "Zapsat historii procházení po otočení stránky", + enableHistoryAfterInsert: "Zapsat historii procházení ihned po spojení, jinak zapsat po procházení", + contentVisibility: "Automaticky přepínat viditelnost obsahu pro zlepšení výkonu vykreslování", + initRun: "Otočit stránky ihned po otevření", + preload: "Přednačíst další stránku pro zrychlení", + click2ImportRule: "Klikněte pro import odkazu na základní pravidla a poté počkejte, dokud se aktualizace nedokončí: ", + forceAllBody: "Připojit celé tělo stránky?", + openInNewTab: "Otevřít URL adres přídavků v nové kartě", + importSucc: "Import dokončen", + import: "Importovat", + editCurrent: "Upravit pravidlo pro aktuální webovou stránku", + editBlacklist: "Upravit černou listinu URL, jeden záznam na řádek, podporuje zástupné znaky [?,*].", + upBtnImg: "Ikona zpět nahoru", + downBtnImg: "Ikona jít do zápatí", + sideControllerIcon: "Ikona bočního panelu", + loadingTextTitle: "Načítání", + dbClick2StopCtrl: "Klávesa Ctrl", + dbClick2StopAlt: "Klávesa Alt", + dbClick2StopShift: "Klávesa Shift", + dbClick2StopMeta: "Klávesa Meta", + dbClick2StopKey: "Klávesová zkratka", + pageElementCss: "Vlastní styl pro hlavní prvky stránky", + customCss: "Vlastní kompletní CSS", + firstAlert: "Neimportovali jste základní pravidlo, vyberte prosím vhodné pravidlo k importu", + picker: "Výběr prvků Pagetual", + closePicker: "Zavřít výběr Pagetual", + pickerPlaceholder: "Výběr prvků (Pouze pro pokročilé uživatele, jinak nechte prázdné)", + pickerCheck: "Zkontrolovat výběr a kopírovat", + switchSelector: "Kliknutím přepnete prvek", + gotoEdit: "Přejít na úpravu pravidla s aktuálním výběrem", + manualMode: "Zakázat spojování, ručně přejít na další stránku pomocí klávesy se šipkou doprava (nebo odeslat událost 'pagetual.next')", + clickMode: "Zakázat spojování, automaticky kliknout na další stránku při posunutí na konec stránky", + pageBarMenu: "Kliknutím na střed lišty stránky otevřete menu výběru", + nextSwitch: "Přepnout další odkaz", + arrowToScroll: "Stisknutím levé šipky se posunete zpět a pravou šipkou přejdete na stránku", + sideController: "Zobrazit ovládací panel stránkování v bočním panelu", + sideControllerScroll: "Přepnout posouvání", + sideControllerAlways: "Vždy zobrazit", + hideLoadingIcon: "Skrýt animaci načítání", + hideBarArrow: "Skrýt šipku pro lištu stránky", + duplicate: "Duplicitní Pagetual byl nainstalován, zkontrolujte svůj správce skriptů!", + forceStateIframe: "Vložit celou stránku jako iframe", + forceStateDynamic: "Načíst dynamický obsah přes iframe", + forceStateDisable: "Zakázat otáčení stránek на této stránce", + autoScrollRate: "Rychlost posouvání (1-1000)", + disableAutoScroll: "Zastavit automatické posouvání", + enableAutoScroll: "Povolit automatické posouvání", + toggleAutoScroll: "Přepnout automatické posouvání", + ruleRequest: "Žádost o pravidlo", + page: "Stránka ", + prevPage: "Předchozí stránka", + nextPage: "Další stránka", + errorRulesMustBeArray: "Pravidla musí být pole!", + errorJson: "Chyba JSON, zkontrolujte znovu!", + editSuccess: "Úspěšně upraveno", + errorWrongUrl: "Nesprávné URL, zkontrolujte znovu!", + errorAlreadyExists: "Pravidlo již existuje!", + settingsSaved: "Nastavení jsou uložena, obnovte pro zobrazení", + iframe: "Vynucené rozdělení pomocí iframe", + dynamic: "Dynamické načítání", + reloadPage: "Úprava dokončena, načíst znovu?", + copied: "Zkopírováno", + noValidContent: "Nebyl zjištěn žádný platný obsah, může být přítomna Captcha", + outOfDate: "Skript je zastaralý, aktualizujte prosím na nejnovější verzi.", + hideBarTips: "Skrýt lištu stránkování, přepnout pohlcující zážitek", + setConfigPage: "Nastavit aktuální stránku jako výchozí konfigurační stránku", + wedata2github: "Změnit adresu wedata na zrcadlovou adresu v repozitáři github", + addOtherProp: "Přidat vlastnosti pravidla", + addNextSelector: "Přidat obsah výběru jako nextLink", + addPageSelector: "Přidat obsah výběru jako pageElement", + propName: "Zadejte název vlastnosti pravidla", + propValue: "Zadejte hodnotu vlastnosti pravidla", + customFirst: "Ignorovat mezipaměť pro místní vlastní pravidla", + rulesExample: "Příklad pravidel", + lastPage: "Dosáhli jste poslední stránky", + lastPageTips: "Zobrazit tipy při dosažení poslední stránky" + } + }, + { + name: "Tiếng Việt", + match: ["vi"], + lang: { + enableDebug: "Bật đầu ra gỡ lỗi vào bảng điều khiển", + updateNotification: "Thông báo sau khi cập nhật quy tắc", + disable: "Tạm thời vô hiệu hóa", + disableSite: "Chuyển đổi trạng thái vô hiệu hóa", + disableSiteTips: "Đã vô hiệu hóa trên trang này.", + enableSiteTips: "Đã bật trên trang này.", + enable: "✅Bật tự động chuyển trang", + tempActive: "Tạm thời hoạt động", + toTop: "Quay lại đầu trang.", + toBottom: "Đi đến cuối trang.", + current: "Trang hiện tại.", + forceIframe: "Buộc tham gia trang tiếp theo", + cancelForceIframe: "Hủy bỏ buộc tham gia", + configure: "Cấu hình Pagetual", + firstUpdate: "Nhấp vào đây để khởi tạo danh sách quy tắc mặc định", + update: "Cập nhật quy tắc trực tuyến", + click2update: "Nhấp để cập nhật quy tắc từ url ngay bây giờ", + loadNow: "Tải trang tiếp theo tự động", + loadConfirm: "Bạn muốn tải bao nhiêu trang? (0 có nghĩa là vô hạn)", + noNext: "Không tìm thấy liên kết tiếp theo, vui lòng tạo quy tắc mới", + passSec: "Đã cập nhật #t# giây trước", + passMin: "Đã cập nhật #t# phút trước", + passHour: "Đã cập nhật #t# giờ trước", + passDay: "Đã cập nhật #t# ngày trước", + cantDel: "Không thể xóa các quy tắc cài sẵn", + confirmDel: "Bạn có chắc chắn muốn xóa quy tắc này không?", + updateSucc: "Cập nhật thành công", + beginUpdate: "Bắt đầu cập nhật, vui lòng đợi một lát", + customUrls: "Nhập URL quy tắc Pagetual hoặc AutoPagerize, mỗi URL một dòng.", + customRules: "Nhập các quy tắc tùy chỉnh. ✍️Đóng góp quy tắc", + save: "Lưu", + loadingText: "Đang tải...", + opacity: "Độ mờ", + opacityPlaceholder: "0: ẩn dấu phân cách", + hideBar: "Ẩn dấu phân cách phân trang", + hideBarButNoStop: "Ẩn nhưng không dừng", + dbClick2Stop: "Nhấp đúp vào khoảng trống để tạm dừng", + sortTitle: "Việc sắp xếp có hiệu lực sau khi cập nhật quy tắc tiếp theo", + autoRun: "Tự động bật (chế độ danh sách đen)", + autoLoadNum: "Số lượng trang tải trước", + turnRate: "Chuyển sang trang tiếp theo khi còn cách chân trang chưa đến 【X】 lần chiều cao trang", + inputPageNum: "Nhập số trang để chuyển đến", + enableHistory: "Ghi lại lịch sử duyệt web sau khi chuyển trang", + enableHistoryAfterInsert: "Ghi lại lịch sử duyệt web ngay sau khi ghép nối, nếu không thì ghi lại sau khi duyệt", + contentVisibility: "Tự động chuyển đổi khả năng hiển thị nội dung để cải thiện hiệu suất hiển thị", + initRun: "Chuyển trang ngay sau khi mở", + preload: "Tải trước trang tiếp theo để tăng tốc", + click2ImportRule: "Nhấp để nhập liên kết quy tắc cơ sở, sau đó đợi cho đến khi cập nhật hoàn tất: ", + forceAllBody: "Tham gia toàn bộ nội dung của trang?", + openInNewTab: "Mở các url bổ sung trong tab mới", + importSucc: "Nhập hoàn tất", + import: "Nhập", + editCurrent: "Chỉnh sửa quy tắc cho trang web hiện tại", + editBlacklist: "Chỉnh sửa danh sách đen url, mỗi mục một dòng, hỗ trợ ký tự đại diện [?,*].", + upBtnImg: "Biểu tượng quay lại đầu trang", + downBtnImg: "Biểu tượng đi đến chân trang", + sideControllerIcon: "Biểu tượng của thanh bên", + loadingTextTitle: "Đang tải", + dbClick2StopCtrl: "Phím Ctrl", + dbClick2StopAlt: "Phím Alt", + dbClick2StopShift: "Phím Shift", + dbClick2StopMeta: "Phím Meta", + dbClick2StopKey: "Phím tắt", + pageElementCss: "Kiểu tùy chỉnh cho các phần tử trang chính", + customCss: "CSS hoàn chỉnh tùy chỉnh", + firstAlert: "Bạn chưa nhập quy tắc cơ sở, vui lòng chọn quy tắc thích hợp để nhập", + picker: "Bộ chọn phần tử Pagetual", + closePicker: "Đóng bộ chọn Pagetual", + pickerPlaceholder: "Bộ chọn phần tử (Chỉ dành cho người dùng nâng cao, nếu không thì để trống)", + pickerCheck: "Kiểm tra bộ chọn và sao chép", + switchSelector: "Nhấp để chuyển đổi phần tử", + gotoEdit: "Chuyển đến chỉnh sửa quy tắc với bộ chọn hiện tại", + manualMode: "Vô hiệu hóa việc ghép nối, chuyển đến trang tiếp theo theo cách thủ công bằng phím mũi tên phải (hoặc gửi sự kiện 'pagetual.next')", + clickMode: "Vô hiệu hóa việc ghép nối, tự động nhấp vào trang tiếp theo khi cuộn đến cuối trang", + pageBarMenu: "Nhấp vào giữa thanh trang để mở menu bộ chọn", + nextSwitch: "Chuyển đổi liên kết tiếp theo", + arrowToScroll: "Nhấn mũi tên trái để cuộn lại và mũi tên phải để chuyển trang", + sideController: "Hiển thị thanh điều khiển phân trang trong thanh bên", + sideControllerScroll: "Chuyển đổi cuộn", + sideControllerAlways: "Luôn hiển thị", + hideLoadingIcon: "Ẩn hoạt ảnh tải", + hideBarArrow: "Ẩn mũi tên cho thanh trang", + duplicate: "Pagetual trùng lặp đã được cài đặt, hãy kiểm tra trình quản lý tập lệnh của bạn!", + forceStateIframe: "Nhúng toàn bộ trang dưới dạng iframe", + forceStateDynamic: "Tải nội dung động qua iframe", + forceStateDisable: "Vô hiệu hóa việc chuyển trang trên trang này", + autoScrollRate: "Tốc độ cuộn (1~1000)", + disableAutoScroll: "Dừng cuộn tự động", + enableAutoScroll: "Bật cuộn tự động", + toggleAutoScroll: "Chuyển đổi cuộn tự động", + ruleRequest: "Yêu cầu quy tắc", + page: "Trang ", + prevPage: "Trang trước", + nextPage: "Trang tiếp theo", + errorRulesMustBeArray: "Quy tắc phải là một mảng!", + errorJson: "Lỗi JSON, hãy kiểm tra lại!", + editSuccess: "Chỉnh sửa thành công", + errorWrongUrl: "URL sai, hãy kiểm tra lại!", + errorAlreadyExists: "Một quy tắc đã tồn tại!", + settingsSaved: "Cài đặt đã được lưu, hãy làm mới để xem", + iframe: "Tách bắt buộc bằng iframe", + dynamic: "Tải động", + reloadPage: "Chỉnh sửa hoàn tất, tải lại ngay bây giờ?", + copied: "Đã sao chép", + noValidContent: "Không phát hiện thấy nội dung hợp lệ, có thể có Captcha", + outOfDate: "Tập lệnh đã lỗi thời, vui lòng cập nhật lên phiên bản mới nhất.", + hideBarTips: "Ẩn thanh phân trang, chuyển đổi trải nghiệm đắm chìm", + setConfigPage: "Đặt trang hiện tại làm trang cấu hình mặc định", + wedata2github: "Thay đổi địa chỉ wedata thành địa chỉ nhân bản trong kho lưu trữ github", + addOtherProp: "Thêm thuộc tính quy tắc", + addNextSelector: "Thêm nội dung bộ chọn làm nextLink", + addPageSelector: "Thêm nội dung bộ chọn làm pageElement", + propName: "Nhập tên thuộc tính quy tắc", + propValue: "Nhập giá trị thuộc tính quy tắc", + customFirst: "Bỏ qua bộ nhớ cache cho các quy tắc tùy chỉnh cục bộ", + rulesExample: "Ví dụ về quy tắc", + lastPage: "Đã đến trang cuối cùng", + lastPageTips: "Hiển thị mẹo khi đến trang cuối cùng" + } + }, + { + name: "Polski", + match: ["pl"], + lang: { + enableDebug: "Włącz wyjście debugowania do konsoli", + updateNotification: "Powiadomienie po aktualizacji reguł", + disable: "Tymczasowo wyłącz", + disableSite: "Przełącz stan wyłączenia", + disableSiteTips: "Wyłączone na tej stronie.", + enableSiteTips: "Włączone na tej stronie.", + enable: "✅Włącz automatyczne przewracanie stron", + tempActive: "Tymczasowo aktywne", + toTop: "Powrót na górę.", + toBottom: "Przejdź na dół.", + current: "Bieżąca strona.", + forceIframe: "Wymuś dołączenie do następnej strony", + cancelForceIframe: "Anuluj wymuszone dołączenie", + configure: "Skonfiguruj Pagetual", + firstUpdate: "Kliknij tutaj, aby zainicjować domyślną listę reguł", + update: "Aktualizuj reguły online", + click2update: "Kliknij, aby zaktualizować reguły z adresu URL teraz", + loadNow: "Załaduj następną automatycznie", + loadConfirm: "Ile stron chcesz załadować? (0 oznacza nieskończoność)", + noNext: "Nie znaleziono następnego linku, utwórz nową regułę", + passSec: "Zaktualizowano #t# sekund temu", + passMin: "Zaktualizowano #t# minut temu", + passHour: "Zaktualizowano #t# godzin temu", + passDay: "Zaktualizowano #t# dni temu", + cantDel: "Nie można usunąć wbudowanych reguł", + confirmDel: "Czy na pewno chcesz usunąć tę regułę?", + updateSucc: "Aktualizacja zakończona powodzeniem", + beginUpdate: "Rozpoczynam aktualizację, proszę czekać", + customUrls: "Importuj adres URL reguły Pagetual lub AutoPagerize, jeden adres URL na linię.", + customRules: "Wprowadź niestandardowe reguły. ✍️Współtwórz reguły", + save: "Zapisz", + loadingText: "Ładowanie...", + opacity: "Przezroczystość", + opacityPlaceholder: "0: ukryj separator", + hideBar: "Ukryj separator paginacji", + hideBarButNoStop: "Ukryj, ale nie zatrzymuj", + dbClick2Stop: "Kliknij dwukrotnie w puste miejsce, aby wstrzymać", + sortTitle: "Sortowanie zacznie obowiązywać po następnej aktualizacji reguł", + autoRun: "Automatyczne włączanie (tryb czarnej listy)", + autoLoadNum: "Ilość stron do wstępnego załadowania", + turnRate: "Przewróć na następną stronę, gdy odległość od stopki jest mniejsza niż 【X】-krotność wysokości strony", + inputPageNum: "Wprowadź numer strony, aby przejść", + enableHistory: "Zapisuj historię przeglądania po przewróceniu strony", + enableHistoryAfterInsert: "Zapisuj historię przeglądania natychmiast po połączeniu, w przeciwnym razie zapisuj po przeglądaniu", + contentVisibility: "Automatycznie przełączaj widoczność zawartości, aby poprawić wydajność renderowania", + initRun: "Przewracaj strony natychmiast po otwarciu", + preload: "Wstępnie załaduj następną stronę, aby przyspieszyć", + click2ImportRule: "Kliknij, aby zaimportować link do podstawowych reguł, a następnie poczekaj na zakończenie aktualizacji: ", + forceAllBody: "Dołączyć całą treść strony?", + openInNewTab: "Otwórz adresy URL dodatków w nowej karcie", + importSucc: "Import zakończony", + import: "Importuj", + editCurrent: "Edytuj regułę dla bieżącej witryny", + editBlacklist: "Edytuj czarną listę adresów URL, jeden wpis na linię, obsługuje symbole wieloznaczne [?,*].", + upBtnImg: "Ikona powrotu na górę", + downBtnImg: "Ikona przejścia do stopki", + sideControllerIcon: "Ikona paska bocznego", + loadingTextTitle: "Ładowanie", + dbClick2StopCtrl: "Klawisz Ctrl", + dbClick2StopAlt: "Klawisz Alt", + dbClick2StopShift: "Klawisz Shift", + dbClick2StopMeta: "Klawisz Meta", + dbClick2StopKey: "Klawisz skrótu", + pageElementCss: "Niestandardowy styl dla głównych elementów strony", + customCss: "Niestandardowy kompletny CSS", + firstAlert: "Nie zaimportowałeś podstawowej reguły, wybierz odpowiednią regułę do zaimportowania", + picker: "Selektor elementów Pagetual", + closePicker: "Zamknij selektor Pagetual", + pickerPlaceholder: "Selektor elementów (Tylko dla zaawansowanych użytkowników, w przeciwnym razie pozostaw puste)", + pickerCheck: "Sprawdź selektor i skopiuj", + switchSelector: "Kliknij, aby przełączyć element", + gotoEdit: "Przejdź do edycji reguły z bieżącym selektorem", + manualMode: "Wyłącz łączenie, ręcznie przejdź do następnej strony za pomocą klawisza strzałki w prawo (lub wyślij zdarzenie 'pagetual.next')", + clickMode: "Wyłącz łączenie, automatycznie kliknij następną stronę po przewinięciu do końca strony", + pageBarMenu: "Kliknij środek paska strony, aby otworzyć menu selektora", + nextSwitch: "Przełącz następny link", + arrowToScroll: "Naciśnij lewą strzałkę, aby przewinąć do tyłu, a prawą strzałkę, aby przejść do przodu", + sideController: "Wyświetl pasek sterowania paginacją na pasku bocznym", + sideControllerScroll: "Przełączanie przewijania", + sideControllerAlways: "Zawsze pokazuj", + hideLoadingIcon: "Ukryj animację ładowania", + hideBarArrow: "Ukryj strzałkę paska strony", + duplicate: "Zainstalowano zduplikowany Pagetual, sprawdź menedżera skryptów!", + forceStateIframe: "Osadź całą stronę jako iframe", + forceStateDynamic: "Załaduj dynamiczną zawartość przez iframe", + forceStateDisable: "Wyłącz przewracanie stron na tej stronie", + autoScrollRate: "Prędkość przewijania (1-1000)", + disableAutoScroll: "Zatrzymaj automatyczne przewijanie", + enableAutoScroll: "Włącz automatyczne przewijanie", + toggleAutoScroll: "Przełącz automatyczne przewijanie", + ruleRequest: "Żądanie reguły", + page: "Strona ", + prevPage: "Poprzednia strona", + nextPage: "Następna strona", + errorRulesMustBeArray: "Reguły muszą być tablicą!", + errorJson: "Błąd JSON, sprawdź ponownie!", + editSuccess: "Edycja zakończona pomyślnie", + errorWrongUrl: "Błędny adres URL, sprawdź ponownie!", + errorAlreadyExists: "Reguła już istnieje!", + settingsSaved: "Ustawienia zostały zapisane, odśwież, aby zobaczyć", + iframe: "Wymuszony podział przez iframe", + dynamic: "Dynamiczne ładowanie", + reloadPage: "Edycja zakończona, przeładować teraz?", + copied: "Skopiowano", + noValidContent: "Nie wykryto prawidłowej zawartości, może być obecna Captcha", + outOfDate: "Skrypt jest przestarzały, zaktualizuj do najnowszej wersji.", + hideBarTips: "Ukryj pasek paginacji, przełącz na tryb immersyjny", + setConfigPage: "Ustaw bieżącą stronę jako domyślną stronę konfiguracji", + wedata2github: "Zmień adres wedata na adres lustrzany w repozytorium github", + addOtherProp: "Dodaj właściwości reguły", + addNextSelector: "Dodaj zawartość selektora jako nextLink", + addPageSelector: "Dodaj zawartość selektora jako pageElement", + propName: "Wprowadź nazwę właściwości reguły", + propValue: "Wprowadź wartość właściwości reguły", + customFirst: "Ignoruj pamięć podręczną dla lokalnych niestandardowych reguł", + rulesExample: "Przykład reguł", + lastPage: "Osiągnięto ostatnią stronę", + lastPageTips: "Pokaż wskazówki po osiągnięciu ostatniej strony" + } + }, + { + name: "Українська", + match: ["uk"], + lang: { + enableDebug: "Увімкнути вивід налагодження в консоль", + updateNotification: "Сповіщення після оновлення правил", + disable: "Тимчасово вимкнути", + disableSite: "Перемкнути стан вимкнення", + disableSiteTips: "Вимкнено на цьому сайті.", + enableSiteTips: "Увімкнено на цьому сайті.", + enable: "✅Увімкнути автоматичне перегортання сторінок", + tempActive: "Тимчасово активний", + toTop: "Повернутися нагору.", + toBottom: "Перейти вниз.", + current: "Поточна сторінка.", + forceIframe: "Примусово приєднати наступну сторінку", + cancelForceIframe: "Скасувати примусове приєднання", + configure: "Налаштувати Pagetual", + firstUpdate: "Натисніть тут, щоб ініціалізувати стандартний список правил", + update: "Оновити онлайн-правила", + click2update: "Натисніть, щоб оновити правила з URL зараз", + loadNow: "Завантажити наступну автоматично", + loadConfirm: "Скільки сторінок ви хочете завантажити? (0 означає нескінченно)", + noNext: "Не знайдено наступного посилання, створіть нове правило", + passSec: "Оновлено #t# секунд тому", + passMin: "Оновлено #t# хвилин тому", + passHour: "Оновлено #t# годин тому", + passDay: "Оновлено #t# днів тому", + cantDel: "Неможливо видалити вбудовані правила", + confirmDel: "Ви впевнені, що хочете видалити це правило?", + updateSucc: "Оновлення успішне", + beginUpdate: "Починається оновлення, зачекайте хвилинку", + customUrls: "Імпортувати URL правила Pagetual або AutoPagerize, один URL на рядок.", + customRules: "Введіть власні правила. ✍️Додайте правила", + save: "Зберегти", + loadingText: "Завантаження...", + opacity: "Непрозорість", + opacityPlaceholder: "0: приховати роздільник", + hideBar: "Приховати роздільник пагінації", + hideBarButNoStop: "Приховати, але не зупиняти", + dbClick2Stop: "Двічі клацніть на порожньому місці, щоб призупинити", + sortTitle: "Сортування набуде чинності після наступного оновлення правил", + autoRun: "Автоматичне ввімкнення (режим чорного списку)", + autoLoadNum: "Кількість для попередньо завантажених сторінок", + turnRate: "Перегорніть на наступну сторінку, коли до нижнього колонтитула залишиться менше 【X】 висот сторінки", + inputPageNum: "Введіть номер сторінки для переходу", + enableHistory: "Записувати історію переглядів після перегортання сторінки", + enableHistoryAfterInsert: "Записувати історію переглядів одразу після з'єднання, інакше записувати після перегляду", + contentVisibility: "Автоматично перемикати видимість вмісту для покращення продуктивності рендерингу", + initRun: "Перегортати сторінки одразу після відкриття", + preload: "Попередньо завантажити наступну сторінку для прискорення", + click2ImportRule: "Натисніть, щоб імпортувати посилання на базові правила, а потім зачекайте, доки оновлення не завершиться: ", + forceAllBody: "Приєднати все тіло сторінки?", + openInNewTab: "Відкрити URL-адреси доповнень у новій вкладці", + importSucc: "Імпорт завершено", + import: "Імпортувати", + editCurrent: "Редагувати правило для поточного веб-сайту", + editBlacklist: "Редагувати чорний список URL-адрес, один запис на рядок, підтримує символи підстановки [?,*].", + upBtnImg: "Іконка повернення нагору", + downBtnImg: "Іконка переходу до нижнього колонтитула", + sideControllerIcon: "Іконка бічної панелі", + loadingTextTitle: "Завантаження", + dbClick2StopCtrl: "Клавіша Ctrl", + dbClick2StopAlt: "Клавіша Alt", + dbClick2StopShift: "Клавіша Shift", + dbClick2StopMeta: "Клавіша Meta", + dbClick2StopKey: "Клавіша швидкого доступу", + pageElementCss: "Власний стиль для основних елементів сторінки", + customCss: "Власний повний CSS", + firstAlert: "Ви не імпортували базове правило, будь ласка, виберіть відповідне правило для імпорту", + picker: "Вибір елементів Pagetual", + closePicker: "Закрити вибір Pagetual", + pickerPlaceholder: "Вибір елементів (Лише для досвідчених користувачів, інакше залиште порожнім)", + pickerCheck: "Перевірити селектор і скопіювати", + switchSelector: "Натисніть, щоб перемкнути елемент", + gotoEdit: "Перейти до редагування правила з поточним селектором", + manualMode: "Вимкнути з'єднання, вручну переходити на наступну сторінку за допомогою клавіші зі стрілкою вправо (або надіслати подію 'pagetual.next')", + clickMode: "Вимкнути з'єднання, автоматично клацати на наступну сторінку при прокручуванні до кінця сторінки", + pageBarMenu: "Натисніть на центр панелі сторінки, щоб відкрити меню вибору", + nextSwitch: "Перемкнути наступне посилання", + arrowToScroll: "Натисніть ліву стрілку, щоб прокрутити назад, і праву стрілку, щоб перейти на сторінку вперед", + sideController: "Відображати панель керування пагінацією в бічній панелі", + sideControllerScroll: "Перемикання прокрутки", + sideControllerAlways: "Завжди показувати", + hideLoadingIcon: "Приховати анімацію завантаження", + hideBarArrow: "Приховати стрілку для панелі сторінки", + duplicate: "Встановлено дублікат Pagetual, перевірте свій менеджер скриптів!", + forceStateIframe: "Вбудувати повну сторінку як iframe", + forceStateDynamic: "Завантажувати динамічний вміст через iframe", + forceStateDisable: "Вимкнути перегортання сторінок на цьому сайті", + autoScrollRate: "Швидкість прокрутки (1-1000)", + disableAutoScroll: "Зупинити автоматичну прокрутку", + enableAutoScroll: "Увімкнути автоматичну прокрутку", + toggleAutoScroll: "Перемкнути автоматичну прокрутку", + ruleRequest: "Запит на правило", + page: "Сторінка ", + prevPage: "Попередня сторінка", + nextPage: "Наступна сторінка", + errorRulesMustBeArray: "Правила повинні бути масивом!", + errorJson: "Помилка JSON, перевірте ще раз!", + editSuccess: "Відредаговано успішно", + errorWrongUrl: "Неправильна URL-адреса, перевірте ще раз!", + errorAlreadyExists: "Правило вже існує!", + settingsSaved: "Налаштування збережено, оновіть, щоб переглянути", + iframe: "Примусове розділення за допомогою iframe", + dynamic: "Динамічне завантаження", + reloadPage: "Редагування завершено, перезавантажити зараз?", + copied: "Скопійовано", + noValidContent: "Не виявлено дійсного вмісту, можливо, є Captcha", + outOfDate: "Скрипт застарів, оновіть до останньої версії.", + hideBarTips: "Приховати панель пагінації, перемкнути на захоплюючий досвід", + setConfigPage: "Встановити поточну сторінку як сторінку конфігурації за замовчуванням", + wedata2github: "Змінити адресу wedata на дзеркальну адресу в репозиторії github", + addOtherProp: "Додати властивості правила", + addNextSelector: "Додати вміст селектора як nextLink", + addPageSelector: "Додати вміст селектора як pageElement", + propName: "Введіть назву властивості правила", + propValue: "Введіть значення властивості правила", + customFirst: "Ігнорувати кеш для локальних власних правил", + rulesExample: "Приклад правил", + lastPage: "Досягнуто останньої сторінки", + lastPageTips: "Показувати поради при досягненні останньої сторінки" + } + }, + { + name: "Türkçe", + match: ["tr"], + lang: { + enableDebug: "Konsola hata ayıklama çıktısını etkinleştir", + updateNotification: "Kurallar güncellendikten sonra bildirim", + disable: "Geçici olarak devre dışı bırak", + disableSite: "Devre dışı bırakma durumunu değiştir", + disableSiteTips: "Bu sitede devre dışı bırakıldı.", + enableSiteTips: "Bu sitede etkinleştirildi.", + enable: "✅Otomatik sayfa çevirmeyi etkinleştir", + tempActive: "Geçici olarak aktif", + toTop: "Başa dön.", + toBottom: "Sona git.", + current: "Mevcut sayfa.", + forceIframe: "Sonraki sayfaya katılmaya zorla", + cancelForceIframe: "Zorla katılmayı iptal et", + configure: "Pagetual'ı yapılandır", + firstUpdate: "Varsayılan kural listesini başlatmak için buraya tıklayın", + update: "Çevrimiçi kuralları güncelle", + click2update: "Kuralları şimdi URL'den güncellemek için tıkla", + loadNow: "Sonrakini otomatik olarak yükle", + loadConfirm: "Kaç sayfa yüklemek istiyorsunuz? (0 sonsuz demektir)", + noNext: "Sonraki bağlantı bulunamadı, lütfen yeni bir kural oluşturun", + passSec: "#t# saniye önce güncellendi", + passMin: "#t# dakika önce güncellendi", + passHour: "#t# saat önce güncellendi", + passDay: "#t# gün önce güncellendi", + cantDel: "Yerleşik kurallar silinemez", + confirmDel: "Bu kuralı silmek istediğinizden emin misiniz?", + updateSucc: "Güncelleme başarılı", + beginUpdate: "Güncelleme başlıyor, lütfen bir dakika bekleyin", + customUrls: "Pagetual veya AutoPagerize kural URL'sini içe aktarın, her satıra bir URL.", + customRules: "Özel kuralları girin. ✍️Kurallara katkıda bulunun", + save: "Kaydet", + loadingText: "Yükleniyor...", + opacity: "Opaklık", + opacityPlaceholder: "0: ayırıcıyı gizle", + hideBar: "Sayfalandırma ayırıcısını gizle", + hideBarButNoStop: "Gizle ama durdurma", + dbClick2Stop: "Duraklatmak için boş alana çift tıklayın", + sortTitle: "Sıralama bir sonraki kural güncellemesinden sonra etkili olur", + autoRun: "Otomatik etkinleştir (kara liste modu)", + autoLoadNum: "Önceden yüklenecek sayfa miktarı", + turnRate: "Altbilgiden sayfa yüksekliğinin 【X】 katından daha az olduğunda sonraki sayfaya geçin", + inputPageNum: "Atlamak için sayfa numarasını girin", + enableHistory: "Sayfa çevirdikten sonra tarama geçmişini yaz", + enableHistoryAfterInsert: "Birleştirmeden hemen sonra tarama geçmişini yaz, aksi takdirde taramadan sonra yaz", + contentVisibility: "Oluşturma performansını iyileştirmek için içerik görünürlüğünü otomatik olarak değiştir", + initRun: "Açtıktan hemen sonra sayfaları çevir", + preload: "Hızlandırmak için sonraki sayfayı önceden yükle", + click2ImportRule: "Temel kurallar bağlantısını içe aktarmak için tıklayın ve ardından güncelleme tamamlanana kadar bekleyin: ", + forceAllBody: "Sayfanın tam gövdesine katılsın mı?", + openInNewTab: "Eklerin URL'lerini yeni sekmede aç", + importSucc: "İçe aktarma tamamlandı", + import: "İçe aktar", + editCurrent: "Mevcut web sitesi için kuralı düzenle", + editBlacklist: "URL kara listesini düzenleyin, her satıra bir giriş, [?,*] joker karakterlerini destekler.", + upBtnImg: "Başa dön simgesi", + downBtnImg: "Altbilgiye git simgesi", + sideControllerIcon: "Kenar çubuğu simgesi", + loadingTextTitle: "Yükleniyor", + dbClick2StopCtrl: "Ctrl tuşu", + dbClick2StopAlt: "Alt tuşu", + dbClick2StopShift: "Shift tuşu", + dbClick2StopMeta: "Meta tuşu", + dbClick2StopKey: "Kısayol tuşu", + pageElementCss: "Ana sayfa öğeleri için özel stil", + customCss: "Özel tam CSS", + firstAlert: "Temel kuralı içe aktarmadınız, lütfen içe aktarmak için uygun kuralı seçin", + picker: "Pagetual öğe seçici", + closePicker: "Pagetual seçiciyi kapat", + pickerPlaceholder: "Öğe seçici (Yalnızca ileri düzey kullanıcılar, aksi takdirde boş bırakın)", + pickerCheck: "Seçiciyi kontrol et ve kopyala", + switchSelector: "Öğeyi değiştirmek için tıkla", + gotoEdit: "Mevcut seçiciyle kuralı düzenlemeye git", + manualMode: "Birleştirmeyi devre dışı bırak, sağ ok tuşunu kullanarak sonraki sayfaya manuel olarak ilerle (veya 'pagetual.next' olayını gönder)", + clickMode: "Birleştirmeyi devre dışı bırak, sayfanın sonuna kaydırıldığında sonraki sayfayı otomatik olarak tıkla", + pageBarMenu: "Seçici menüsünü açmak için sayfa çubuğunun ortasına tıklayın", + nextSwitch: "Sonraki bağlantıyı değiştir", + arrowToScroll: "Geri kaydırmak için sol oka, sayfayı ilerletmek için sağ oka basın", + sideController: "Sayfalandırma kontrol çubuğunu kenar çubuğunda göster", + sideControllerScroll: "Kaydırmayı değiştir", + sideControllerAlways: "Her zaman göster", + hideLoadingIcon: "Yükleme animasyonunu gizle", + hideBarArrow: "Sayfa çubuğu için oku gizle", + duplicate: "Yinelenen Pagetual yüklendi, komut dosyası yöneticinizi kontrol edin!", + forceStateIframe: "Tam sayfayı iframe olarak göm", + forceStateDynamic: "Dinamik içeriği iframe aracılığıyla yükle", + forceStateDisable: "Bu sitede sayfa çevirmeyi devre dışı bırak", + autoScrollRate: "Kaydırma hızı (1-1000)", + disableAutoScroll: "Otomatik Kaydırmayı Durdur", + enableAutoScroll: "Otomatik Kaydırmayı Etkinleştir", + toggleAutoScroll: "Otomatik Kaydırmayı Değiştir", + ruleRequest: "Kural İsteği", + page: "Sayfa ", + prevPage: "Önceki sayfa", + nextPage: "Sonraki sayfa", + errorRulesMustBeArray: "Kurallar bir Dizi olmalıdır!", + errorJson: "JSON hatası, Tekrar kontrol edin!", + editSuccess: "Başarıyla düzenlendi", + errorWrongUrl: "Yanlış URL, Tekrar kontrol edin!", + errorAlreadyExists: "Bir kural zaten var!", + settingsSaved: "Ayarlar kaydedildi, görüntülemek için yenileyin", + iframe: "Iframe tarafından zorla bölündü", + dynamic: "Dinamik yükleme", + reloadPage: "Düzenleme tamamlandı, şimdi yeniden yüklensin mi?", + copied: "Kopyalandı", + noValidContent: "Geçerli içerik algılanmadı, bir Captcha olabilir", + outOfDate: "Komut dosyası güncel değil, lütfen en son sürüme güncelleyin.", + hideBarTips: "Sayfalandırma çubuğunu gizle, sürükleyici deneyime geç", + setConfigPage: "Mevcut sayfayı varsayılan yapılandırma sayfası olarak ayarla", + wedata2github: "Wedata adresini github deposundaki ayna adresine değiştirin", + addOtherProp: "Kural özellikleri ekle", + addNextSelector: "Seçici içeriğini nextLink olarak ekle", + addPageSelector: "Seçici içeriğini pageElement olarak ekle", + propName: "Kural özelliği adını girin", + propValue: "Kural özelliği değerini girin", + customFirst: "Yerel özel kurallar için önbelleği yoksay", + rulesExample: "Kurallar Örneği", + lastPage: "Son sayfaya ulaşıldı", + lastPageTips: "Son sayfaya ulaşıldığında ipuçları göster" + } + }, + { + name: "Nederlands", + match: ["nl"], + lang: { + enableDebug: "Foutopsporingsuitvoer naar console inschakelen", + updateNotification: "Melding nadat regels zijn bijgewerkt", + disable: "Tijdelijk uitschakelen", + disableSite: "Uitgeschakelde status omschakelen", + disableSiteTips: "Uitgeschakeld op deze site.", + enableSiteTips: "Ingeschakeld op deze site.", + enable: "✅Automatisch pagina's omslaan inschakelen", + tempActive: "Tijdelijk actief", + toTop: "Terug naar boven.", + toBottom: "Ga naar beneden.", + current: "Huidige pagina.", + forceIframe: "Dwingen om volgende pagina te koppelen", + cancelForceIframe: "Gedwongen koppeling annuleren", + configure: "Pagetual configureren", + firstUpdate: "Klik hier om de standaardregellijst te initialiseren", + update: "Online regels bijwerken", + click2update: "Klik om regels nu vanaf URL bij te werken", + loadNow: "Laad volgende automatisch", + loadConfirm: "Hoeveel pagina's wilt u laden? (0 betekent oneindig)", + noNext: "Geen volgende link gevonden, maak een nieuwe regel", + passSec: "#t# seconden geleden bijgewerkt", + passMin: "#t# minuten geleden bijgewerkt", + passHour: "#t# uur geleden bijgewerkt", + passDay: "#t# dagen geleden bijgewerkt", + cantDel: "Ingebouwde regels kunnen niet worden verwijderd", + confirmDel: "Weet u zeker dat u deze regel wilt verwijderen?", + updateSucc: "Update geslaagd", + beginUpdate: "Start update, een ogenblik geduld", + customUrls: "Importeer Pagetual of AutoPagerize regel-URL, één URL per regel.", + customRules: "Voer aangepaste regels in. ✍️Draag regels bij", + save: "Opslaan", + loadingText: "Laden...", + opacity: "Dekking", + opacityPlaceholder: "0: verberg scheidingsteken", + hideBar: "Verberg het pagineringsscheidingsteken", + hideBarButNoStop: "Verbergen maar niet stoppen", + dbClick2Stop: "Dubbelklik op de lege ruimte om te pauzeren", + sortTitle: "Sorteren wordt van kracht na de volgende regelupdate", + autoRun: "Automatisch inschakelen (zwarte lijst-modus)", + autoLoadNum: "Aantal voor vooraf geladen pagina's", + turnRate: "Sla de volgende pagina om wanneer deze minder dan 【X】 keer de paginahoogte van de voettekst is", + inputPageNum: "Voer paginanummer in om te springen", + enableHistory: "Schrijf browsegeschiedenis na het omslaan van de pagina", + enableHistoryAfterInsert: "Schrijf browsegeschiedenis onmiddellijk na het splitsen, anders schrijven na het browsen", + contentVisibility: "Schakel automatisch de zichtbaarheid van inhoud om de renderprestaties te verbeteren", + initRun: "Sla pagina's onmiddellijk na het openen om", + preload: "Laad de volgende pagina vooraf om te versnellen", + click2ImportRule: "Klik om de link met basisregels te importeren en wacht vervolgens tot de update is voltooid: ", + forceAllBody: "Volledige body van de pagina koppelen?", + openInNewTab: "Open URL's van toevoegingen in een nieuw tabblad", + importSucc: "Importeren voltooid", + import: "Importeren", + editCurrent: "Regel voor huidige website bewerken", + editBlacklist: "Bewerk de URL-zwarte lijst, één item per regel, ondersteunt [?,*] jokertekens.", + upBtnImg: "Pictogram terug naar boven", + downBtnImg: "Pictogram ga naar voettekst", + sideControllerIcon: "Pictogram zijbalk", + loadingTextTitle: "Laden", + dbClick2StopCtrl: "Ctrl-toets", + dbClick2StopAlt: "Alt-toets", + dbClick2StopShift: "Shift-toets", + dbClick2StopMeta: "Meta-toets", + dbClick2StopKey: "Sneltoets", + pageElementCss: "Aangepaste stijl voor hoofdpagina-elementen", + customCss: "Aangepaste volledige CSS", + firstAlert: "U heeft de basisregel niet geïmporteerd, selecteer de juiste regel om te importeren", + picker: "Pagetual-elementenkiezer", + closePicker: "Pagetual-kiezer sluiten", + pickerPlaceholder: "Elementenkiezer (Alleen voor gevorderde gebruikers, laat anders leeg)", + pickerCheck: "Controleer kiezer en kopieer", + switchSelector: "Klik om van element te wisselen", + gotoEdit: "Ga naar regel bewerken met huidige kiezer", + manualMode: "Schakel splitsen uit, ga handmatig naar de volgende pagina met de rechterpijltoets (of verstuur gebeurtenis 'pagetual.next')", + clickMode: "Schakel splitsen uit, klik automatisch op de volgende pagina bij het scrollen naar het einde van de pagina", + pageBarMenu: "Klik op het midden van de paginabalk om het kiezermenu te openen", + nextSwitch: "Wissel volgende link", + arrowToScroll: "Druk op de linkerpijl om terug te scrollen en op de rechterpijl om naar de volgende pagina te gaan", + sideController: "Toon de pagineringsbalk in de zijbalk", + sideControllerScroll: "Scroll-schakelaar", + sideControllerAlways: "Altijd tonen", + hideLoadingIcon: "Verberg laadanimatie", + hideBarArrow: "Verberg pijl voor paginabalk", + duplicate: "Dubbele Pagetual is geïnstalleerd, controleer uw scriptmanager!", + forceStateIframe: "Volledige pagina insluiten als iframe", + forceStateDynamic: "Laad dynamische inhoud via iframe", + forceStateDisable: "Schakel het omslaan van pagina's op deze site uit", + autoScrollRate: "Scrollsnelheid (1-1000)", + disableAutoScroll: "Stop automatisch scrollen", + enableAutoScroll: "Schakel automatisch scrollen in", + toggleAutoScroll: "Schakel automatisch scrollen om", + ruleRequest: "Regelverzoek", + page: "Pagina ", + prevPage: "Vorige pagina", + nextPage: "Volgende pagina", + errorRulesMustBeArray: "Regels moeten een array zijn!", + errorJson: "JSON-fout, controleer opnieuw!", + editSuccess: "Succesvol bewerkt", + errorWrongUrl: "Verkeerde URL, controleer opnieuw!", + errorAlreadyExists: "Er bestaat al een regel!", + settingsSaved: "De instellingen zijn opgeslagen, ververs om te bekijken", + iframe: "Gedwongen gesplitst door iframe", + dynamic: "Dynamisch laden", + reloadPage: "Bewerking voltooid, nu opnieuw laden?", + copied: "Gekopieerd", + noValidContent: "Geen geldige inhoud gedetecteerd, er is mogelijk een Captcha aanwezig", + outOfDate: "Het script is verouderd, update naar de nieuwste versie.", + hideBarTips: "Verberg de pagineringsbalk, schakel de meeslepende ervaring om", + setConfigPage: "Stel de huidige pagina in als de standaardconfiguratiepagina", + wedata2github: "Wijzig het wedata-adres in het spiegeladres in de github-repository", + addOtherProp: "Voeg regeleigenschappen toe", + addNextSelector: "Voeg kiezerinhoud toe als nextLink", + addPageSelector: "Voeg kiezerinhoud toe als pageElement", + propName: "Voer de naam van de regeleigenschap in", + propValue: "Voer de waarde van de regeleigenschap in", + customFirst: "Cache negeren voor lokale aangepaste regels", + rulesExample: "Voorbeeld van regels", + lastPage: "Laatste pagina bereikt", + lastPageTips: "Toon tips bij het bereiken van de laatste pagina" + } + }, + { + name: "Dansk", + match: ["da"], + lang: { + enableDebug: "Aktivér fejlfindingsoutput til konsollen", + updateNotification: "Meddelelse efter opdatering af regler", + disable: "Deaktiver midlertidigt", + disableSite: "Skift deaktiveret tilstand", + disableSiteTips: "Deaktiveret på dette websted.", + enableSiteTips: "Aktiveret på dette websted.", + enable: "✅Aktivér automatisk sidevending", + tempActive: "Midlertidigt aktiv", + toTop: "Tilbage til toppen.", + toBottom: "Gå til bunden.", + current: "Nuværende side.", + forceIframe: "Tving tilslutning til næste side", + cancelForceIframe: "Annuller tvungen tilslutning", + configure: "Konfigurer Pagetual", + firstUpdate: "Klik her for at initialisere standardregellisten", + update: "Opdater onlineregler", + click2update: "Klik for at opdatere regler fra URL nu", + loadNow: "Indlæs næste automatisk", + loadConfirm: "Hvor mange sider vil du indlæse? (0 betyder uendelig)", + noNext: "Intet næste link fundet, opret en ny regel", + passSec: "Opdateret for #t# sekunder siden", + passMin: "Opdateret for #t# minutter siden", + passHour: "Opdateret for #t# timer siden", + passDay: "Opdateret for #t# dage siden", + cantDel: "Kan ikke slette indbyggede regler", + confirmDel: "Er du sikker på, at du vil slette denne regel?", + updateSucc: "Opdatering lykkedes", + beginUpdate: "Starter opdatering, vent venligst et øjeblik", + customUrls: "Importer Pagetual- eller AutoPagerize-regel-URL, én URL pr. linje.", + customRules: "Indtast brugerdefinerede regler. ✍️Bidrag med regler", + save: "Gem", + loadingText: "Indlæser...", + opacity: "Opacitet", + opacityPlaceholder: "0: skjul afstandsstykke", + hideBar: "Skjul pagineringsafstandsstykket", + hideBarButNoStop: "Skjul, men stop ikke", + dbClick2Stop: "Dobbeltklik på det tomme rum for at sætte på pause", + sortTitle: "Sortering træder i kraft efter næste regelopdatering", + autoRun: "Automatisk aktivering (sortlistetilstand)", + autoLoadNum: "Antal for forudindlæste sider", + turnRate: "Vend til næste side, når den er mindre end 【X】 gange sidehøjden fra sidefoden", + inputPageNum: "Indtast sidetal for at hoppe", + enableHistory: "Skriv browserhistorik efter sidevending", + enableHistoryAfterInsert: "Skriv browserhistorik umiddelbart efter splejsning, ellers skriv efter browsing", + contentVisibility: "Skift automatisk indholdssynlighed for at forbedre gengivelsesydelsen", + initRun: "Vend sider umiddelbart efter åbning", + preload: "Forudindlæs næste side for at fremskynde", + click2ImportRule: "Klik for at importere link til grundregler, og vent derefter, indtil opdateringen er fuldført: ", + forceAllBody: "Tilslut hele sidens krop?", + openInNewTab: "Åbn URL'er for tilføjelser i ny fane", + importSucc: "Import fuldført", + import: "Importer", + editCurrent: "Rediger regel for nuværende websted", + editBlacklist: "Rediger URL-sortlisten, én post pr. linje, understøtter [?,*] jokertegn.", + upBtnImg: "Ikon for tilbage til toppen", + downBtnImg: "Ikon for at gå til sidefod", + sideControllerIcon: "Sidebjælkeikon", + loadingTextTitle: "Indlæser", + dbClick2StopCtrl: "Ctrl-tast", + dbClick2StopAlt: "Alt-tast", + dbClick2StopShift: "Shift-tast", + dbClick2StopMeta: "Meta-tast", + dbClick2StopKey: "Genvejstast", + pageElementCss: "Brugerdefineret stil for hovedsideelementer", + customCss: "Brugerdefineret komplet CSS", + firstAlert: "Du har ikke importeret grundreglen, vælg den relevante regel at importere", + picker: "Pagetual-elementvælger", + closePicker: "Luk Pagetual-vælger", + pickerPlaceholder: "Elementvælger (Kun avancerede brugere, ellers lad være tomt)", + pickerCheck: "Kontroller vælger og kopier", + switchSelector: "Klik for at skifte element", + gotoEdit: "Gå til redigeringsregel med nuværende vælger", + manualMode: "Deaktiver splejsning, gå manuelt frem til næste side ved hjælp af højre piletast (eller send hændelsen 'pagetual.next')", + clickMode: "Deaktiver splejsning, klik automatisk på næste side, når du ruller til slutningen af siden", + pageBarMenu: "Klik på midten af sidebjælken for at åbne vælgermenuen", + nextSwitch: "Skift næste link", + arrowToScroll: "Tryk på venstre pil for at rulle tilbage og højre pil for at gå frem en side", + sideController: "Vis pagineringskontrolbjælken i sidebjælken", + sideControllerScroll: "Rul-skift", + sideControllerAlways: "Vis altid", + hideLoadingIcon: "Skjul indlæsningsanimation", + hideBarArrow: "Skjul pil for sidebjælke", + duplicate: "Duplikat Pagetual er blevet installeret, tjek din scriptmanager!", + forceStateIframe: "Integrer hele siden som en iframe", + forceStateDynamic: "Indlæs dynamisk indhold via iframe", + forceStateDisable: "Deaktiver sidevending på dette websted", + autoScrollRate: "Rullehastighed (1-1000)", + disableAutoScroll: "Stop automatisk rulning", + enableAutoScroll: "Aktivér automatisk rulning", + toggleAutoScroll: "Skift automatisk rulning", + ruleRequest: "Regelanmodning", + page: "Side ", + prevPage: "Forrige side", + nextPage: "Næste side", + errorRulesMustBeArray: "Regler skal være en matrix!", + errorJson: "JSON-fejl, tjek igen!", + editSuccess: "Redigering lykkedes", + errorWrongUrl: "Forkert URL, tjek igen!", + errorAlreadyExists: "En regel eksisterer allerede!", + settingsSaved: "Indstillingerne er gemt, opdater for at se", + iframe: "Tvunget opdelt af iframe", + dynamic: "Dynamisk indlæsning", + reloadPage: "Redigering fuldført, genindlæs nu?", + copied: "Kopieret", + noValidContent: "Intet gyldigt indhold fundet, en Captcha kan være til stede", + outOfDate: "Scriptet er forældet, opdater venligst til den nyeste version.", + hideBarTips: "Skjul pagineringsbjælken, skift til en fordybende oplevelse", + setConfigPage: "Indstil den aktuelle side som standardkonfigurationsside", + wedata2github: "Skift wedata-adressen til spejladressen i github-depotet", + addOtherProp: "Tilføj regelegenskaber", + addNextSelector: "Tilføj vælgerindhold som nextLink", + addPageSelector: "Tilføj vælgerindhold som pageElement", + propName: "Indtast regelegenskabsnavn", + propValue: "Indtast regelegenskabsværdi", + customFirst: "Ignorer cache for lokale brugerdefinerede regler", + rulesExample: "Regeleksempel", + lastPage: "Nåede den sidste side", + lastPageTips: "Vis tips, når du når den sidste side" + } + }, + { + name: "Français (Canada)", + match: ["fr-CA"], + lang: { + enableDebug: "Activer la sortie de débogage dans la console", + updateNotification: "Notification après la mise à jour des règles", + disable: "Désactiver temporairement", + disableSite: "Basculer l'état de désactivation", + disableSiteTips: "Désactivé sur ce site.", + enableSiteTips: "Activé sur ce site.", + enable: "✅Activer le changement de page automatique", + tempActive: "Temporairement actif", + toTop: "Retour en haut.", + toBottom: "Aller en bas.", + current: "Page actuelle.", + forceIframe: "Forcer la jonction de la page suivante", + cancelForceIframe: "Annuler la jonction forcée", + configure: "Configurer Pagetual", + firstUpdate: "Cliquez ici pour initialiser la liste de règles par défaut", + update: "Mettre à jour les règles en ligne", + click2update: "Cliquez pour mettre à jour les règles depuis l'URL maintenant", + loadNow: "Charger la suite automatiquement", + loadConfirm: "Combien de pages voulez-vous charger ? (0 pour infini)", + noNext: "Aucun lien suivant trouvé, veuillez créer une nouvelle règle", + passSec: "Mis à jour il y a #t# secondes", + passMin: "Mis à jour il y a #t# minutes", + passHour: "Mis à jour il y a #t# heures", + passDay: "Mis à jour il y a #t# jours", + cantDel: "Impossible de supprimer les règles intégrées", + confirmDel: "Êtes-vous sûr de vouloir supprimer cette règle ?", + updateSucc: "Mise à jour réussie", + beginUpdate: "Début de la mise à jour, veuillez patienter", + customUrls: "Importer l'URL des règles Pagetual ou AutoPagerize, une URL par ligne.", + customRules: "Saisir des règles personnalisées. ✍️Contribuer aux règles", + save: "Enregistrer", + loadingText: "Chargement en cours...", + opacity: "Opacité", + opacityPlaceholder: "0 : masquer le séparateur", + hideBar: "Masquer le séparateur de pagination", + hideBarButNoStop: "Masquer mais ne pas arrêter", + dbClick2Stop: "Double-cliquez sur l'espace vide pour mettre en pause", + sortTitle: "Le tri prendra effet après la prochaine mise à jour des règles", + autoRun: "Activation automatique (mode liste noire)", + autoLoadNum: "Nombre de pages à précharger", + turnRate: "Passer à la page suivante lorsqu'elle est à moins de 【X】 fois la hauteur de la page du pied de page", + inputPageNum: "Entrez le numéro de page pour y accéder", + enableHistory: "Inscrire l'historique de navigation après le changement de page", + enableHistoryAfterInsert: "Inscrire l'historique de navigation immédiatement après la jonction, sinon après la navigation", + contentVisibility: "Basculer automatiquement content-visibility pour améliorer les performances de rendu", + initRun: "Changer de page immédiatement après l'ouverture", + preload: "Précharger la page suivante pour accélérer", + click2ImportRule: "Cliquez pour importer le lien des règles de base, puis attendez la fin de la mise à jour : ", + forceAllBody: "Joindre le corps complet de la page ?", + openInNewTab: "Ouvrir les URL ajoutées dans un nouvel onglet", + importSucc: "Importation terminée", + import: "Importer", + editCurrent: "Modifier la règle pour le site actuel", + editBlacklist: "Modifier la liste noire d'URL, une entrée par ligne, supporte les jokers [?,*].", + upBtnImg: "Icône de retour en haut", + downBtnImg: "Icône d'aller en bas de page", + sideControllerIcon: "Icône de la barre latérale", + loadingTextTitle: "Chargement", + dbClick2StopCtrl: "Touche Ctrl", + dbClick2StopAlt: "Touche Alt", + dbClick2StopShift: "Touche Maj", + dbClick2StopMeta: "Touche Méta", + dbClick2StopKey: "Touche de raccourci", + pageElementCss: "Style personnalisé pour les éléments principaux de la page", + customCss: "CSS complet personnalisé", + firstAlert: "Vous n'avez pas importé la règle de base, veuillez sélectionner la règle appropriée à importer", + picker: "Sélecteur d'éléments Pagetual", + closePicker: "Fermer le sélecteur Pagetual", + pickerPlaceholder: "Sélecteur d'élément (Utilisateurs avancés seulement, laissez vide sinon)", + pickerCheck: "Vérifier le sélecteur et copier", + switchSelector: "Cliquez pour changer d'élément", + gotoEdit: "Aller à l'édition de la règle avec le sélecteur actuel", + manualMode: "Désactiver la jonction, avancer manuellement à la page suivante avec la flèche droite (ou envoyer l'événement 'pagetual.next')", + clickMode: "Désactiver la jonction, cliquer automatiquement sur la page suivante en faisant défiler jusqu'à la fin de la page", + pageBarMenu: "Cliquez au centre de la barre de page pour ouvrir le menu du sélecteur", + nextSwitch: "Changer de lien suivant", + arrowToScroll: "Appuyez sur la flèche gauche pour revenir en arrière et la flèche droite pour avancer", + sideController: "Afficher la barre de contrôle de pagination dans la barre latérale", + sideControllerScroll: "Afficher au défilement", + sideControllerAlways: "Toujours afficher", + hideLoadingIcon: "Masquer l'animation de chargement", + hideBarArrow: "Masquer les flèches de la barre de page", + duplicate: "Un doublon de Pagetual a été installé, vérifiez votre gestionnaire de scripts !", + forceStateIframe: "Intégrer la page complète en tant qu'iframe", + forceStateDynamic: "Charger le contenu dynamique via iframe", + forceStateDisable: "Désactiver le changement de page sur ce site", + autoScrollRate: "Vitesse de défilement (1~1000)", + disableAutoScroll: "Arrêter le défilement auto", + enableAutoScroll: "Activer le défilement auto", + toggleAutoScroll: "Basculer le défilement auto", + ruleRequest: "Demande de règle", + page: "Page ", + prevPage: "Page préc.", + nextPage: "Page suiv.", + errorRulesMustBeArray: "Les règles doivent être un tableau (Array) !", + errorJson: "Erreur JSON, veuillez vérifier !", + editSuccess: "Modification réussie", + errorWrongUrl: "URL incorrecte, veuillez vérifier !", + errorAlreadyExists: "Une règle existe déjà !", + settingsSaved: "Les paramètres sont enregistrés, actualisez pour voir les changements", + iframe: "Division forcée par iframe", + dynamic: "Chargement dynamique", + reloadPage: "Modification terminée, recharger maintenant ?", + copied: "Copié", + noValidContent: "Aucun contenu valide détecté, un Captcha peut être présent", + outOfDate: "Le script est obsolète, veuillez mettre à jour vers la dernière version.", + hideBarTips: "Masquer la barre de pagination, basculer l'expérience immersive", + setConfigPage: "Définir la page actuelle comme page de configuration par défaut", + wedata2github: "Changer l'adresse wedata pour l'adresse miroir dans le dépôt github", + addOtherProp: "Ajouter des propriétés à la règle", + addNextSelector: "Ajouter le contenu du sélecteur comme nextLink", + addPageSelector: "Ajouter le contenu du sélecteur comme pageElement", + propName: "Entrez le nom de la propriété de la règle", + propValue: "Entrez la valeur de la propriété de la règle", + customFirst: "Ignorer le cache pour les règles personnalisées locales", + rulesExample: "Exemple de règles", + lastPage: "Dernière page atteinte", + lastPageTips: "Afficher une notification en atteignant la dernière page" + } + }, + { + name: "Bahasa Indonesia", + match: ["id"], + lang: { + enableDebug: "Aktifkan output debug ke konsol", + updateNotification: "Notifikasi setelah aturan diperbarui", + disable: "Nonaktifkan sementara", + disableSite: "Ubah status nonaktif", + disableSiteTips: "Dinonaktifkan di situs ini.", + enableSiteTips: "Diaktifkan di situs ini.", + enable: "✅Aktifkan pembalik halaman otomatis", + tempActive: "Aktif sementara", + toTop: "Kembali ke Atas.", + toBottom: "Pergi ke Bawah.", + current: "Halaman Saat Ini.", + forceIframe: "Paksa untuk menggabungkan halaman berikutnya", + cancelForceIframe: "Batalkan penggabungan paksa", + configure: "Konfigurasi Pagetual", + firstUpdate: "Klik di sini untuk menginisialisasi daftar aturan default", + update: "Perbarui aturan online", + click2update: "Klik untuk memperbarui aturan dari URL sekarang", + loadNow: "Muat berikutnya secara otomatis", + loadConfirm: "Berapa halaman yang ingin Anda muat? (0 berarti tak terbatas)", + noNext: "Tautan berikutnya tidak ditemukan, harap buat aturan baru", + passSec: "Diperbarui #t# detik yang lalu", + passMin: "Diperbarui #t# menit yang lalu", + passHour: "Diperbarui #t# jam yang lalu", + passDay: "Diperbarui #t# hari yang lalu", + cantDel: "Tidak dapat menghapus aturan bawaan", + confirmDel: "Apakah Anda yakin ingin menghapus aturan ini?", + updateSucc: "Pembaruan berhasil", + beginUpdate: "Memulai pembaruan, harap tunggu sebentar", + customUrls: "Impor URL aturan Pagetual atau AutoPagerize, satu URL per baris.", + customRules: "Masukkan aturan khusus. ✍️Kontribusi aturan", + save: "Simpan", + loadingText: "Sedang Memuat...", + opacity: "Opasitas", + opacityPlaceholder: "0: sembunyikan pemisah", + hideBar: "Sembunyikan pemisah paginasi", + hideBarButNoStop: "Sembunyikan tapi jangan hentikan", + dbClick2Stop: "Klik dua kali pada ruang kosong untuk menjeda", + sortTitle: "Pengurutan berlaku setelah pembaruan aturan berikutnya", + autoRun: "Aktifkan otomatis (mode daftar hitam)", + autoLoadNum: "Jumlah halaman pramuat", + turnRate: "Buka halaman berikutnya saat jarak dari footer kurang dari 【X】 kali tinggi halaman", + inputPageNum: "Masukkan nomor halaman untuk melompat", + enableHistory: "Tulis riwayat penjelajahan setelah membalik halaman", + enableHistoryAfterInsert: "Tulis riwayat penjelajahan segera setelah penyambungan, jika tidak, tulis setelah menjelajah", + contentVisibility: "Secara otomatis mengganti content-visibility untuk meningkatkan kinerja rendering", + initRun: "Balik halaman segera setelah dibuka", + preload: "Pramuat halaman berikutnya untuk mempercepat", + click2ImportRule: "Klik untuk mengimpor tautan aturan dasar, lalu tunggu hingga pembaruan selesai: ", + forceAllBody: "Gabungkan seluruh badan halaman?", + openInNewTab: "Buka URL tambahan di tab baru", + importSucc: "Impor selesai", + import: "Impor", + editCurrent: "Edit aturan untuk situs web saat ini", + editBlacklist: "Edit daftar hitam URL, satu entri per baris, Mendukung wildcard [?,*].", + upBtnImg: "Ikon kembali ke atas", + downBtnImg: "Ikon pergi ke footer", + sideControllerIcon: "Ikon bilah sisi", + loadingTextTitle: "Memuat", + dbClick2StopCtrl: "Tombol Ctrl", + dbClick2StopAlt: "Tombol Alt", + dbClick2StopShift: "Tombol Shift", + dbClick2StopMeta: "Tombol Meta", + dbClick2StopKey: "Tombol pintas", + pageElementCss: "Gaya kustom untuk elemen halaman utama", + customCss: "CSS kustom lengkap", + firstAlert: "Anda belum mengimpor aturan dasar, silakan pilih aturan yang sesuai untuk diimpor", + picker: "Pemilih elemen Pagetual", + closePicker: "Tutup pemilih Pagetual", + pickerPlaceholder: "Selektor elemen, (Hanya pengguna tingkat lanjut, biarkan kosong jika tidak)", + pickerCheck: "Periksa selektor dan salin", + switchSelector: "Klik untuk mengganti elemen", + gotoEdit: "Pergi ke edit aturan dengan selektor saat ini", + manualMode: "Nonaktifkan penyambungan, maju ke halaman berikutnya secara manual menggunakan tombol panah kanan (atau kirim acara 'pagetual.next')", + clickMode: "Nonaktifkan penyambungan, klik halaman berikutnya secara otomatis saat menggulir ke akhir halaman", + pageBarMenu: "Klik tengah bilah halaman untuk membuka menu pemilih", + nextSwitch: "Ganti tautan berikutnya", + arrowToScroll: "Tekan panah kiri untuk menggulir ke belakang dan panah kanan untuk maju halaman", + sideController: "Tampilkan bilah kontrol paging di bilah sisi", + sideControllerScroll: "Tampilkan saat bergulir", + sideControllerAlways: "Selalu tampilkan", + hideLoadingIcon: "Sembunyikan animasi memuat", + hideBarArrow: "Sembunyikan panah untuk bilah halaman", + duplicate: "Pagetual duplikat telah diinstal, periksa manajer skrip Anda!", + forceStateIframe: "Sematkan halaman penuh sebagai iframe", + forceStateDynamic: "Muat konten dinamis melalui iframe", + forceStateDisable: "Nonaktifkan pembalik halaman di situs ini", + autoScrollRate: "Kecepatan gulir (1~1000)", + disableAutoScroll: "Hentikan Gulir Otomatis", + enableAutoScroll: "Aktifkan Gulir Otomatis", + toggleAutoScroll: "Ubah Gulir Otomatis", + ruleRequest: "Permintaan Aturan", + page: "Halaman ", + prevPage: "Halaman seb.", + nextPage: "Halaman ber.", + errorRulesMustBeArray: "Aturan harus berupa Array!", + errorJson: "Kesalahan JSON, Periksa lagi!", + editSuccess: "Berhasil diedit", + errorWrongUrl: "URL salah, Periksa lagi!", + errorAlreadyExists: "Aturan sudah ada!", + settingsSaved: "Pengaturan disimpan, segarkan untuk melihat", + iframe: "Pemisahan paksa oleh iframe", + dynamic: "Pemuatan dinamis", + reloadPage: "Pengeditan selesai, muat ulang sekarang?", + copied: "Disalin", + noValidContent: "Tidak ada konten valid yang terdeteksi, mungkin ada Captcha", + outOfDate: "Skrip sudah usang, harap perbarui ke versi terbaru.", + hideBarTips: "Sembunyikan bilah paginasi, alihkan pengalaman imersif", + setConfigPage: "Atur halaman saat ini sebagai halaman konfigurasi default", + wedata2github: "Ubah alamat wedata ke alamat cermin di repositori github", + addOtherProp: "Tambahkan properti aturan", + addNextSelector: "Tambahkan konten selektor sebagai nextLink", + addPageSelector: "Tambahkan konten selektor sebagai pageElement", + propName: "Masukkan nama properti aturan", + propValue: "Masukkan nilai properti aturan", + customFirst: "Abaikan cache untuk aturan kustom lokal", + rulesExample: "Contoh Aturan", + lastPage: "Telah mencapai halaman terakhir", + lastPageTips: "Tampilkan tip saat mencapai halaman terakhir" + } + }, + { + // Traduzido por Thiago Ramos (thiagojramos@outlook.com). + name: "Português (Brasil)", + match: ["pt", "pt-BR", "pt-PT"], + lang: { + enableDebug: "Ativar log de depuração no console.", + updateNotification: "Notificar após a atualização das regras", + disable: "Desativar temporariamente.", + disableSite: "Rolagem infinita: Ativar / Desativar.", + disableSiteTips: "Desabilitado neste site.", + enableSiteTips: "Ativado neste site.", + enable: "✅Ativar rolagem automática de página.", + tempActive: "Temporariamente ativo", + toTop: "Voltar ao Topo.", + toBottom: "Ir para o Rodapé.", + current: "Página Atual.", + forceIframe: "Forçar inclusão da próxima página", + cancelForceIframe: "Cancelar Inclusão Forçada", + configure: "Configurar o Pagetual", + firstUpdate: "Clique aqui para inicializar a lista de regras padrão", + update: "Atualizar regras online", + click2update: "Clique para atualizar as regras da URL agora", + loadNow: "Carregar mais páginas automaticamente", + loadConfirm: "Quantas páginas você deseja carregar? (0 = infinitas)", + noNext: "Nenhum link para a próxima página encontrado. Crie uma nova regra.", + passSec: "Atualizado há #t# segundos", + passMin: "Atualizado há #t# minutos", + passHour: "Atualizado há #t# horas", + passDay: "Atualizado há #t# dias", + cantDel: "Não é possível excluir as regras internas", + confirmDel: "Tem certeza que deseja excluir esta regra?", + updateSucc: "Atualização concluída com sucesso", + beginUpdate: "Iniciando atualização. Aguarde um momento, por favor.", + customUrls: "Importar URLs de regras do Pagetual ou AutoPagerize, uma URL por linha.", + customRules: "Inserir regras personalizadas. ✍️Contribuir com regras", + save: "Salvar", + loadingText: "Carregando...", + opacity: "Opacidade", + opacityPlaceholder: "0: ocultar espaçador", + hideBar: "Ocultar o espaçador de paginação", + hideBarButNoStop: "Ocultar, mas não parar", + dbClick2Stop: "Clique duplo no espaço em branco para pausar", + sortTitle: "A classificação terá efeito após a próxima atualização da regra", + autoRun: "Ativar automaticamente (modo de lista negra)", + autoLoadNum: "Número de páginas para pré-carregar", + turnRate: "Mudar para a próxima página quando estiver a menos de 【X】 vezes a altura da página do rodapé", + inputPageNum: "Digite o número da página para pular", + enableHistory: "Gravar histórico de navegação após virar a página", + enableHistoryAfterInsert: "Gravar histórico de navegação imediatamente após a inclusão, caso contrário, gravar após a navegação", + contentVisibility: "Alternar automaticamente a visibilidade do conteúdo para melhorar o desempenho de renderização", + initRun: "Virar páginas imediatamente após a abertura", + preload: "Pré-carregar a próxima página para acelerar", + click2ImportRule: "Clique para importar o link com as regras básicas e aguarde até que a atualização seja concluída: ", + forceAllBody: "Incluir o corpo inteiro da página?", + openInNewTab: "Abrir URLs de adições em uma nova guia", + importSucc: "Importação concluída", + import: "Importar", + editCurrent: "Editar regra para o site atual.", + editBlacklist: "Editar a lista negra de URLs, uma entrada por linha, suporta curingas [?,*].", + upBtnImg: "Ícone de voltar ao topo", + downBtnImg: "Ícone de ir para o rodapé", + sideControllerIcon: "Ícone da barra lateral", + loadingTextTitle: "Carregando.", + dbClick2StopCtrl: "Tecla Ctrl", + dbClick2StopAlt: "Tecla Alt", + dbClick2StopShift: "Tecla Shift", + dbClick2StopMeta: "Tecla Meta", + dbClick2StopKey: "Tecla de Atalho", + pageElementCss: "Estilo CSS personalizado para os elementos da página principal", + customCss: "CSS completo personalizado", + firstAlert: "Você não importou a regra básica. Selecione a regra apropriada para importar.", + picker: "Seletor de elementos de página do Pagetual", + closePicker: "Fechar seletor do Pagetual", + pickerPlaceholder: "Seletor de elemento (apenas para usuários avançados, deixe em branco caso contrário)", + pickerCheck: "Verificar seletor e copiar", + switchSelector: "Clique para alternar o elemento", + gotoEdit: "Ir para editar regra com o seletor atual", + manualMode: "Desativar inclusão automática. Avançar manualmente para a próxima página usando a tecla de seta para a direita (ou enviar o evento 'pagetual.next')", + clickMode: "Desativar inclusão automática. Clicar automaticamente na próxima página ao rolar até o final da página", + pageBarMenu: "Clique no centro da barra de páginas para abrir o menu do seletor", + nextSwitch: "Alternar link 'próximo'", + arrowToScroll: "Pressione as setas para navegar: esquerda para voltar, direita para avançar página", + sideController: "Exibir a barra de controle de paginação na barra lateral", + sideControllerScroll: "Alternar rolagem", + sideControllerAlways: "Sempre mostrar", + hideLoadingIcon: "Ocultar animação de carregamento", + hideBarArrow: "Ocultar seta da barra de páginas", + duplicate: "Pagetual duplicado instalado! Verifique seu gerenciador de scripts.", + forceStateIframe: "Incorporar página inteira como iframe", + forceStateDynamic: "Carregar conteúdo dinâmico via iframe", + forceStateDisable: "Desativar rolagem de páginas neste site", + autoScrollRate: "Velocidade de rolagem (1 a 1000)", + disableAutoScroll: "Parar Rolagem Automática", + enableAutoScroll: "Ativar Rolagem Automática", + toggleAutoScroll: "Alternar Rolagem Automática", + ruleRequest: "Solicitar Regra", + page: "Página ", + prevPage: "Página anterior", + nextPage: "Próxima página", + errorRulesMustBeArray: "As regras devem ser um Array!", + errorJson: "Erro de JSON! Verifique novamente.", + editSuccess: "Edição feita com sucesso!", + errorWrongUrl: "URL incorreta! Verifique novamente.", + errorAlreadyExists: "Já existe uma regra!", + settingsSaved: "As configurações foram salvas. Atualize para visualizar.", + iframe: "Divisão forçada por iframe.", + dynamic: "Carregamento dinâmico.", + reloadPage: "Edição concluída. Deseja recarregar agora?", + copied: "Copiado", + noValidContent: "Nenhum conteúdo válido detectado. Um Captcha pode estar presente.", + outOfDate: "O script está desatualizado, atualize para a versão mais recente.", + hideBarTips: "Ocultar a barra de paginação, mudar para experiência imersiva", + setConfigPage: "Definir a página atual como a página de configuração padrão", + wedata2github: "Alterar o endereço do Wedata para o endereço espelho no repositório do GitHub", + addOtherProp: "Adicionar propriedades de regra", + addNextSelector: "Adicionar conteúdo do seletor como nextLink", + addPageSelector: "Adicionar conteúdo do seletor como pageElement", + propName: "Digite o nome da propriedade da regra", + propValue: "Digite o valor da propriedade da regra", + customFirst: "Ignorar cache para regras personalizadas locais", + rulesExample: "Exemplo de Regras", + lastPage: "Última página atingida", + lastPageTips: "Mostrar dicas ao atingir a última página" + } + }, + { + name: "Français", + match: ["fr"], + lang: { + enableDebug: "Activer la sortie de débogage dans la console", + updateNotification: "Notification après la mise à jour des règles", + disable: "Désactiver temporairement", + disableSite: "Basculer l'état de désactivation", + disableSiteTips: "Désactivé sur ce site.", + enableSiteTips: "Activé sur ce site.", + enable: "✅Activer le changement de page automatique", + tempActive: "Temporairement actif", + toTop: "Retour en haut.", + toBottom: "Aller en bas.", + current: "Page actuelle.", + forceIframe: "Forcer la jonction de la page suivante", + cancelForceIframe: "Annuler la jonction forcée", + configure: "Configurer Pagetual", + firstUpdate: "Cliquez ici pour initialiser la liste de règles par défaut", + update: "Mettre à jour les règles en ligne", + click2update: "Cliquez pour mettre à jour les règles depuis l'URL maintenant", + loadNow: "Charger la suite automatiquement", + loadConfirm: "Combien de pages voulez-vous charger ? (0 pour infini)", + noNext: "Aucun lien suivant trouvé, veuillez créer une nouvelle règle", + passSec: "Mis à jour il y a #t# secondes", + passMin: "Mis à jour il y a #t# minutes", + passHour: "Mis à jour il y a #t# heures", + passDay: "Mis à jour il y a #t# jours", + cantDel: "Impossible de supprimer les règles intégrées", + confirmDel: "Êtes-vous sûr de vouloir supprimer cette règle ?", + updateSucc: "Mise à jour réussie", + beginUpdate: "Début de la mise à jour, veuillez patienter", + customUrls: "Importer l'URL des règles Pagetual ou AutoPagerize, une URL par ligne.", + customRules: "Saisir des règles personnalisées. ✍️Contribuer aux règles", + save: "Enregistrer", + loadingText: "Chargement en cours...", + opacity: "Opacité", + opacityPlaceholder: "0 : masquer le séparateur", + hideBar: "Masquer le séparateur de pagination", + hideBarButNoStop: "Masquer mais ne pas arrêter", + dbClick2Stop: "Double-cliquez sur l'espace vide pour mettre en pause", + sortTitle: "Le tri prendra effet après la prochaine mise à jour des règles", + autoRun: "Activation automatique (mode liste noire)", + autoLoadNum: "Nombre de pages à précharger", + turnRate: "Passer à la page suivante lorsqu'elle est à moins de 【X】 fois la hauteur de la page du pied de page", + inputPageNum: "Entrez le numéro de page pour y accéder", + enableHistory: "Inscrire l'historique de navigation après le changement de page", + enableHistoryAfterInsert: "Inscrire l'historique de navigation immédiatement après la jonction, sinon après la navigation", + contentVisibility: "Basculer automatiquement content-visibility pour améliorer les performances de rendu", + initRun: "Changer de page immédiatement après l'ouverture", + preload: "Précharger la page suivante pour accélérer", + click2ImportRule: "Cliquez pour importer le lien des règles de base, puis attendez la fin de la mise à jour : ", + forceAllBody: "Joindre le corps complet de la page ?", + openInNewTab: "Ouvrir les URL ajoutées dans un nouvel onglet", + importSucc: "Importation terminée", + import: "Importer", + editCurrent: "Modifier la règle pour le site actuel", + editBlacklist: "Modifier la liste noire d'URL, une entrée par ligne, supporte les jokers [?,*].", + upBtnImg: "Icône de retour en haut", + downBtnImg: "Icône d'aller en bas de page", + sideControllerIcon: "Icône de la barre latérale", + loadingTextTitle: "Chargement", + dbClick2StopCtrl: "Touche Ctrl", + dbClick2StopAlt: "Touche Alt", + dbClick2StopShift: "Touche Maj", + dbClick2StopMeta: "Touche Méta", + dbClick2StopKey: "Touche de raccourci", + pageElementCss: "Style personnalisé pour les éléments principaux de la page", + customCss: "CSS complet personnalisé", + firstAlert: "Vous n'avez pas importé la règle de base, veuillez sélectionner la règle appropriée à importer", + picker: "Sélecteur d'éléments Pagetual", + closePicker: "Fermer le sélecteur Pagetual", + pickerPlaceholder: "Sélecteur d'élément (Utilisateurs avancés seulement, laissez vide sinon)", + pickerCheck: "Vérifier le sélecteur et copier", + switchSelector: "Cliquez pour changer d'élément", + gotoEdit: "Aller à l'édition de la règle avec le sélecteur actuel", + manualMode: "Désactiver la jonction, avancer manuellement à la page suivante avec la flèche droite (ou envoyer l'événement 'pagetual.next')", + clickMode: "Désactiver la jonction, cliquer automatiquement sur la page suivante en faisant défiler jusqu'à la fin de la page", + pageBarMenu: "Cliquez au centre de la barre de page pour ouvrir le menu du sélecteur", + nextSwitch: "Changer de lien suivant", + arrowToScroll: "Appuyez sur la flèche gauche pour revenir en arrière et la flèche droite pour avancer", + sideController: "Afficher la barre de contrôle de pagination dans la barre latérale", + sideControllerScroll: "Afficher au défilement", + sideControllerAlways: "Toujours afficher", + hideLoadingIcon: "Masquer l'animation de chargement", + hideBarArrow: "Masquer les flèches de la barre de page", + duplicate: "Un doublon de Pagetual a été installé, vérifiez votre gestionnaire de scripts !", + forceStateIframe: "Intégrer la page complète en tant qu'iframe", + forceStateDynamic: "Charger le contenu dynamique via iframe", + forceStateDisable: "Désactiver le changement de page sur ce site", + autoScrollRate: "Vitesse de défilement (1~1000)", + disableAutoScroll: "Arrêter le défilement auto", + enableAutoScroll: "Activer le défilement auto", + toggleAutoScroll: "Basculer le défilement auto", + ruleRequest: "Demande de règle", + page: "Page ", + prevPage: "Page préc.", + nextPage: "Page suiv.", + errorRulesMustBeArray: "Les règles doivent être un tableau (Array) !", + errorJson: "Erreur JSON, veuillez vérifier !", + editSuccess: "Modification réussie", + errorWrongUrl: "URL incorrecte, veuillez vérifier !", + errorAlreadyExists: "Une règle existe déjà !", + settingsSaved: "Les paramètres sont enregistrés, actualisez pour voir les changements", + iframe: "Division forcée par iframe", + dynamic: "Chargement dynamique", + reloadPage: "Modification terminée, recharger maintenant ?", + copied: "Copié", + noValidContent: "Aucun contenu valide détecté, un Captcha peut être présent", + outOfDate: "Le script est obsolète, veuillez mettre à jour vers la dernière version.", + hideBarTips: "Masquer la barre de pagination, basculer l'expérience immersive", + setConfigPage: "Définir la page actuelle comme page de configuration par défaut", + wedata2github: "Changer l'adresse wedata pour l'adresse miroir dans le dépôt github", + addOtherProp: "Ajouter des propriétés à la règle", + addNextSelector: "Ajouter le contenu du sélecteur comme nextLink", + addPageSelector: "Ajouter le contenu du sélecteur comme pageElement", + propName: "Entrez le nom de la propriété de la règle", + propValue: "Entrez la valeur de la propriété de la règle", + customFirst: "Ignorer le cache pour les règles personnalisées locales", + rulesExample: "Exemple de règles", + lastPage: "Dernière page atteinte", + lastPageTips: "Afficher une notification en atteignant la dernière page" + } + }, + { + name: "Italiano", + match: ["it"], + lang: { + enableDebug: "Abilita output di debug nella console", + updateNotification: "Notifica dopo l'aggiornamento delle regole", + disable: "Disabilita temporaneamente", + disableSite: "Attiva/disattiva lo stato di disabilitazione", + disableSiteTips: "Disabilitato su questo sito.", + enableSiteTips: "Abilitato su questo sito.", + enable: "✅Abilita il cambio pagina automatico", + tempActive: "Temporaneamente attivo", + toTop: "Torna in cima.", + toBottom: "Vai in fondo.", + current: "Pagina corrente.", + forceIframe: "Forza l'unione della pagina successiva", + cancelForceIframe: "Annulla unione forzata", + configure: "Configura Pagetual", + firstUpdate: "Clicca qui per inizializzare l'elenco delle regole predefinite", + update: "Aggiorna regole online", + click2update: "Clicca per aggiornare le regole dall'URL ora", + loadNow: "Carica la prossima automaticamente", + loadConfirm: "Quante pagine vuoi caricare? (0 significa infinite)", + noNext: "Nessun link 'successivo' trovato, crea una nuova regola", + passSec: "Aggiornato #t# secondi fa", + passMin: "Aggiornato #t# minuti fa", + passHour: "Aggiornato #t# ore fa", + passDay: "Aggiornato #t# giorni fa", + cantDel: "Impossibile eliminare le regole predefinite", + confirmDel: "Sei sicuro di voler eliminare questa regola?", + updateSucc: "Aggiornamento riuscito", + beginUpdate: "Inizio aggiornamento, attendere un momento prego", + customUrls: "Importa URL di regole Pagetual o AutoPagerize, un URL per riga.", + customRules: "Inserisci regole personalizzate. ✍️Contribuisci alle regole", + save: "Salva", + loadingText: "Caricamento in corso...", + opacity: "Opacità", + opacityPlaceholder: "0: nascondi separatore", + hideBar: "Nascondi il separatore di pagina", + hideBarButNoStop: "Nascondi ma non fermare", + dbClick2Stop: "Fai doppio clic sullo spazio vuoto per mettere in pausa", + sortTitle: "L'ordinamento avrà effetto dopo il prossimo aggiornamento delle regole", + autoRun: "Abilitazione automatica (modalità lista nera)", + autoLoadNum: "Numero di pagine da precaricare", + turnRate: "Gira alla pagina successiva quando la distanza dal fondo è inferiore a 【X】 volte l'altezza della pagina", + inputPageNum: "Inserisci il numero di pagina a cui saltare", + enableHistory: "Scrivi la cronologia di navigazione dopo aver girato pagina", + enableHistoryAfterInsert: "Scrivi la cronologia subito dopo l'unione, altrimenti dopo la navigazione", + contentVisibility: "Cambia automaticamente content-visibility per migliorare le prestazioni di rendering", + initRun: "Inizia a girare le pagine subito dopo l'apertura", + preload: "Precarica la pagina successiva per velocizzare", + click2ImportRule: "Clicca per importare il link delle regole di base, poi attendi il completamento dell'aggiornamento: ", + forceAllBody: "Unire l'intero corpo della pagina?", + openInNewTab: "Apri gli URL aggiunti in una nuova scheda", + importSucc: "Importazione completata", + import: "Importa", + editCurrent: "Modifica regola per il sito corrente", + editBlacklist: "Modifica la lista nera di URL, una voce per riga, supporta i caratteri jolly [?,*].", + upBtnImg: "Icona per tornare in cima", + downBtnImg: "Icona per andare in fondo", + sideControllerIcon: "Icona della barra laterale", + loadingTextTitle: "Caricamento", + dbClick2StopCtrl: "Tasto Ctrl", + dbClick2StopAlt: "Tasto Alt", + dbClick2StopShift: "Tasto Maiusc", + dbClick2StopMeta: "Tasto Meta", + dbClick2StopKey: "Tasto di scelta rapida", + pageElementCss: "Stile personalizzato per gli elementi principali della pagina", + customCss: "CSS completo personalizzato", + firstAlert: "Non hai importato la regola di base, seleziona la regola appropriata da importare", + picker: "Selettore di elementi Pagetual", + closePicker: "Chiudi selettore Pagetual", + pickerPlaceholder: "Selettore di elementi (Solo utenti esperti, altrimenti lasciare vuoto)", + pickerCheck: "Controlla selettore e copia", + switchSelector: "Clicca per cambiare elemento", + gotoEdit: "Vai alla modifica della regola con il selettore corrente", + manualMode: "Disabilita unione, avanza manualmente alla pagina successiva con la freccia destra (o invia l'evento 'pagetual.next')", + clickMode: "Disabilita unione, clicca automaticamente la pagina successiva scorrendo fino alla fine", + pageBarMenu: "Clicca al centro della barra di pagina per aprire il menu del selettore", + nextSwitch: "Cambia link successivo", + arrowToScroll: "Premi freccia sinistra per scorrere indietro e freccia destra per avanzare di pagina", + sideController: "Mostra la barra di controllo della paginazione nella barra laterale", + sideControllerScroll: "Mostra durante lo scorrimento", + sideControllerAlways: "Mostra sempre", + hideLoadingIcon: "Nascondi animazione di caricamento", + hideBarArrow: "Nascondi frecce della barra di pagina", + duplicate: "È stato installato un duplicato di Pagetual, controlla il tuo gestore di script!", + forceStateIframe: "Incorpora la pagina intera come iframe", + forceStateDynamic: "Carica contenuto dinamico tramite iframe", + forceStateDisable: "Disabilita il cambio pagina su questo sito", + autoScrollRate: "Velocità di scorrimento (1~1000)", + disableAutoScroll: "Ferma scorrimento automatico", + enableAutoScroll: "Abilita scorrimento automatico", + toggleAutoScroll: "Attiva/disattiva scorrimento automatico", + ruleRequest: "Richiesta regola", + page: "Pagina ", + prevPage: "Pagina prec.", + nextPage: "Pagina succ.", + errorRulesMustBeArray: "Le regole devono essere un Array!", + errorJson: "Errore JSON, controlla di nuovo!", + editSuccess: "Modificato con successo", + errorWrongUrl: "URL errato, controlla di nuovo!", + errorAlreadyExists: "Una regola esiste già!", + settingsSaved: "Le impostazioni sono state salvate, aggiorna per visualizzare", + iframe: "Divisione forzata tramite iframe", + dynamic: "Caricamento dinamico", + reloadPage: "Modifica completata, ricaricare ora?", + copied: "Copiato", + noValidContent: "Nessun contenuto valido rilevato, potrebbe esserci un Captcha", + outOfDate: "Lo script non è aggiornato, si prega di aggiornare all'ultima versione.", + hideBarTips: "Nascondi la barra di paginazione, attiva/disattiva l'esperienza immersiva", + setConfigPage: "Imposta la pagina corrente come pagina di configurazione predefinita", + wedata2github: "Cambia l'indirizzo wedata con l'indirizzo mirror nel repository github", + addOtherProp: "Aggiungi proprietà alla regola", + addNextSelector: "Aggiungi contenuto del selettore come nextLink", + addPageSelector: "Aggiungi contenuto del selettore come pageElement", + propName: "Inserisci il nome della proprietà della regola", + propValue: "Inserisci il valore della proprietà della regola", + customFirst: "Ignora la cache per le regole personalizzate locali", + rulesExample: "Esempio di regole", + lastPage: "Raggiunta l'ultima pagina", + lastPageTips: "Mostra un avviso quando si raggiunge l'ultima pagina" + } + }, + { + // Translated by SrKalopsia (srkalopsia@gmail.com). + name: "Español", + match: ["es", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-DO", "es-EC", "es-ES", "es-GT", "es-HN", "es-MX", "es-NI", "es-PA", "es-PE", "es-PR", "es-PY", "es-SV", "es-UY", "es-VE"], + lang: { + enableDebug: "Habilitar salida de depuración", + updateNotification: "Notificación después de actualizar las reglas", + disable: "Desactivar", + disableSite: "Alternar estado desactivado", + disableSiteTips: "Desactivado en este sitio", + enableSiteTips: "Activado en este sitio", + enable: "✅Habilitar", + tempActive: "Temporalmente activo", + toTop: "Ir al inicio", + toBottom: "Ir al final", + current: "Página actual", + forceIframe: "Forzar para unirse a la siguiente página", + cancelForceIframe: "Cancelar unión forzada", + configure: "Configurar", + firstUpdate: "Haga clic aquí para inicializar las reglas", + update: "Actualizar reglas en línea", + click2update: "Haga clic para actualizar las reglas desde la URL ahora", + loadNow: "Cargar el siguiente automáticamente", + loadConfirm: "¿Cuántas páginas desea cargar? (0 significa infinito)", + noNext: "No se encontró el enlace siguiente, por favor cree una nueva regla", + passSec: "Actualizado hace #t# segundos", + passMin: "Actualizado hace #t# minutos", + passHour: "Actualizado hace #t# horas", + passDay: "Actualizado hace #t# días", + cantDel: "No se pueden eliminar las reglas incorporadas", + confirmDel: "¿Está seguro de que desea eliminar esta regla?", + updateSucc: "Actualización exitosa", + beginUpdate: "Comenzar actualización, espere un momento por favor", + customUrls: "Importar URL de reglas de Pagetual o AutoPagerize, una URL por línea", + customRules: "Introduzca reglas personalizadas. ✍️Contribuir reglas", + save: "Guardar", + loadingText: "Shojo Cargando...", + opacity: "Opacidad", + opacityPlaceholder: "0: ocultar espaciador", + hideBar: "Ocultar el espaciador de paginación", + hideBarButNoStop: "Ocultar pero no detener", + dbClick2Stop: "Haga doble clic en el espacio en blanco para pausar", + sortTitle: "La ordenación surtirá efecto después de la próxima actualización de reglas", + autoRun: "Habilitar automáticamente (modo lista negra)", + autoLoadNum: "Cantidad de páginas para precargar", + turnRate: "Pasar a la siguiente página cuando esté a menos de 【X】 veces la altura de la página desde el pie de página", + inputPageNum: "Ingrese el número de página para saltar", + enableHistory: "Escribir historial de navegación después de pasar la página", + enableHistoryAfterInsert: "Escribir historial de navegación inmediatamente después de unir, de lo contrario escribir después de navegar", + contentVisibility: "Cambiar automáticamente la visibilidad del contenido para mejorar el rendimiento de renderización", + initRun: "Pasar páginas inmediatamente después de abrir", + preload: "Precargar la siguiente página para acelerar", + click2ImportRule: "Haga clic para importar el enlace de reglas base, luego espere hasta que la actualización esté completa: ", + forceAllBody: "¿Unir el cuerpo completo de la página?", + openInNewTab: "Abrir URLs de adiciones en una nueva pestaña", + importSucc: "Importación completada", + import: "Importar", + editCurrent: "Editar regla para la actual", + editBlacklist: "Editar URLs de la lista negra, una por línea, admite ? * para comodín", + upBtnImg: "Icono de volver al inicio", + downBtnImg: "Icono de ir al pie de página", + sideControllerIcon: "Icono de la barra lateral", + loadingTextTitle: "Texto de carga", + dbClick2StopCtrl: "Tecla Ctrl", + dbClick2StopAlt: "Tecla Alt", + dbClick2StopShift: "Tecla Shift", + dbClick2StopMeta: "Tecla Meta", + dbClick2StopKey: "Tecla de acceso rápido", + pageElementCss: "Estilo personalizado para los elementos principales de la página", + customCss: "CSS completo personalizado", + firstAlert: "No ha importado la regla base, por favor seleccione la regla adecuada para importar", + picker: "Selector de elementos de página de Pagetual", + closePicker: "Cerrar selector de Pagetual", + pickerPlaceholder: "Selector de elementos, déjelo vacío si no tiene idea", + pickerCheck: "Comprobar selector y copiar", + switchSelector: "Haga clic para cambiar el elemento", + gotoEdit: "Ir a editar la regla con el selector actual", + manualMode: "Deshabilitar unión, pasar páginas manualmente con las teclas de flecha derecha (o despachar evento 'pagetual.next')", + clickMode: "Deshabilitar unión, hacer clic automáticamente en la siguiente página al desplazarse al final de la página", + pageBarMenu: "Haga clic en el centro de la barra de página para abrir el menú del selector", + nextSwitch: "Cambiar al siguiente enlace", + arrowToScroll: "Presione la tecla de flecha izquierda para desplazarse anterior y la tecla de flecha derecha para desplazarse siguiente", + sideController: "Mostrar la barra de control de paginación en la barra lateral", + sideControllerScroll: "Alternar desplazamiento", + sideControllerAlways: "Mostrar siempre", + hideLoadingIcon: "Ocultar animación de carga", + hideBarArrow: "Ocultar flecha para la barra de página", + duplicate: "Pagetual duplicado ha sido instalado, ¡revise su gestor de scripts!", + forceStateIframe: "Incrustar página completa como iframe", + forceStateDynamic: "Cargar contenido dinámico a través de iframe", + forceStateDisable: "Deshabilitar pasar páginas en este sitio", + autoScrollRate: "Velocidad de desplazamiento (1~1000)", + disableAutoScroll: "Detener desplazamiento automático", + enableAutoScroll: "Habilitar desplazamiento automático", + toggleAutoScroll: "Alternar desplazamiento automático", + ruleRequest: "Solicitud de regla", + page: "Página ", + prevPage: "Página anterior", + nextPage: "Página siguiente", + errorRulesMustBeArray: "¡Las reglas deben ser un array!", + errorJson: "Error JSON, ¡verifique de nuevo!", + editSuccess: "Editado exitosamente", + errorWrongUrl: "URL incorrecta, ¡verifique de nuevo!", + errorAlreadyExists: "¡Ya existe!", + settingsSaved: "La configuración se ha guardado, actualice para ver", + iframe: "Iframe", + dynamic: "Dinámico", + reloadPage: "Edición completada, ¿recargar página ahora?", + copied: "Copiado", + noValidContent: "No se detectó contenido válido, puede ser necesario realizar una acción de Captcha, haga clic para ver", + outOfDate: "El script está desactualizado, ¡actualice a la última versión a tiempo!", + hideBarTips: "Ocultar la barra de paginación, alternar experiencia inmersiva", + setConfigPage: "Establecer la página actual como la página de configuración predeterminada", + wedata2github: "Cambiar la dirección de wedata a la dirección espejo en el repositorio de GitHub", + addOtherProp: "Agregar propiedad de regla", + addNextSelector: "Agregar contenido del selector como nextLink", + addPageSelector: "Agregar contenido del selector como pageElement", + propName: "Ingrese el nombre de la propiedad de la regla", + propValue: "Ingrese el valor de la propiedad de la regla", + customFirst: "Ignorar caché para reglas personalizadas locales", + rulesExample: "Ejemplo de reglas", + lastPage: "Llegó a la última página", + lastPageTips: "Mostrar consejos al llegar a la última página" + } + }, + { + // Translated by Prankster 199 (vfggf95565). + name: "Arabic", + match: ["ar", "ar-AE", "ar-BH", "ar-DZ", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LB", "ar-LY", "ar-MA", "ar-OM", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-YE"], + encode: true, // In Firefox, Arabic characters may cause issues. + lang: { + enableDebug: "%D8%AA%D9%85%D9%83%D9%8A%D9%86%20%D8%AA%D8%B5%D8%AD%D9%8A%D8%AD%20%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1", + updateNotification: "%D8%A5%D8%B4%D8%B9%D8%A7%D8%B1%20%D8%A8%D8%B9%D8%AF%20%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF", + disable: "%D9%85%D8%B9%D8%B7%D9%84", + disableSite: "%D8%AA%D8%A8%D8%AF%D9%8A%D9%84%20%D8%AD%D8%A7%D9%84%D8%A9%20%D8%A7%D9%84%D8%AA%D8%B9%D8%B7%D9%8A%D9%84/%D8%A7%D9%84%D8%AA%D9%81%D8%B9%D9%8A%D9%84%20%D9%84%D9%84%D9%85%D9%88%D9%82%D8%B9", + disableSiteTips: "%D9%85%D8%B9%D8%B7%D9%84%20%D8%B9%D9%84%D9%89%20%D9%87%D8%B0%D8%A7%20%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9", + enableSiteTips: "%D9%85%D9%81%D8%B9%D9%84%20%D8%B9%D9%84%D9%89%20%D9%87%D8%B0%D8%A7%20%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9", + enable: "%D9%85%D9%81%D8%B9%D9%84", + tempActive: "%D9%86%D8%B4%D8%B7%20%D9%85%D8%A4%D9%82%D8%AA%D8%A7", + toTop: "%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%A3%D8%B9%D9%84%D9%89", + toBottom: "%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%A3%D8%B3%D9%81%D9%84", + current: "%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D9%8A%D8%A9", + forceIframe: "%D8%A5%D8%AC%D8%A8%D8%A7%D8%B1%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D8%A7%D9%86%D8%B6%D9%85%D8%A7%D9%85%20%D9%84%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9", + cancelForceIframe: "%D8%A5%D9%84%D8%BA%D8%A7%D8%A1%20%D8%A7%D9%84%D8%A7%D9%86%D8%B6%D9%85%D8%A7%D9%85%20%D8%A7%D9%84%D9%82%D8%B3%D8%B1%D9%8A", + configure: "%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF", + firstUpdate: "%D8%A7%D9%86%D9%82%D8%B1%20%D9%87%D9%86%D8%A7%20%D9%84%D8%AA%D9%81%D8%B9%D9%8A%D9%84%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D9%84%D8%A3%D9%88%D9%84%20%D9%85%D8%B1%D8%A9", + update: "%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D8%B9%D8%A8%D8%B1%20%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA", + click2update: "%D8%A7%D9%86%D9%82%D8%B1%20%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D9%85%D9%86%20%D8%A7%D9%84%D8%B1%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D8%A2%D9%86", + loadNow: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%20%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7", + loadConfirm: "%D9%83%D9%85%20%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D8%A7%D9%84%D8%AA%D9%8A%20%D8%AA%D8%B1%D8%BA%D8%A8%20%D8%AA%D8%AD%D9%85%D9%8A%D9%84%D9%87%D8%A7%D8%9F%20(0%20%D9%8A%D8%B9%D9%86%D9%8A%20%D9%84%D8%A7%D9%86%D9%87%D8%A7%D8%A6%D9%8A)", + noNext: "%D9%84%D9%85%20%D9%8A%D8%AA%D9%85%20%D8%A7%D9%84%D8%B9%D8%AB%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D8%B1%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9%D8%8C%20%D9%8A%D8%B1%D8%AC%D9%89%20%D8%A5%D9%86%D8%B4%D8%A7%D8%A1%20%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9", + passSec: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D9%85%D9%86%D8%B0%20#t#%20%D8%AB%D8%A7%D9%86%D9%8A%D8%A9", + passMin: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D9%85%D9%86%D8%B0%20#t#%20%D8%AF%D9%82%D9%8A%D9%82%D8%A9", + passHour: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D9%85%D9%86%D8%B0%20#t#%20%D8%B3%D8%A7%D8%B9%D8%A9", + passDay: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D9%85%D9%86%D8%B0%20#t#%20%D9%8A%D9%88%D9%85", + cantDel: "%D9%84%D8%A7%20%D9%8A%D9%85%D9%83%D9%86%20%D8%AD%D8%B0%D9%81%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D8%A7%D9%84%D9%85%D8%AF%D9%85%D8%AC%D8%A9", + confirmDel: "%D9%87%D9%84%20%D8%A3%D9%86%D8%AA%20%D9%85%D8%AA%D8%A3%D9%83%D8%AF%20%D9%85%D9%86%20%D8%AD%D8%B0%D9%81%20%D9%87%D8%B0%D9%87%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%D8%9F", + updateSucc: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D8%A8%D9%86%D8%AC%D8%A7%D8%AD", + beginUpdate: "%D8%A8%D8%AF%D8%A3%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%D8%8C%20%D9%8A%D8%B1%D8%AC%D9%89%20%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D8%B8%D8%A7%D8%B1%20%D9%84%D8%AD%D8%B8%D8%A9", + customUrls: "%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF%20%D8%B1%D8%A7%D8%A8%D8%B7%20%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20Pagetual%20%D8%A3%D9%88%20AutoPagerize%D8%8C%20%D8%B1%D8%A7%D8%A8%D8%B7%20%D9%88%D8%A7%D8%AD%D8%AF%20%D9%84%D9%83%D9%84%20%D8%B3%D8%B7%D8%B1", + customRules: "%D8%A5%D8%AF%D8%AE%D8%A7%D9%84%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9.%20%3Ca%20href='#t#'%3E%E2%9C%8D%EF%B8%8F%D8%B3%D8%A7%D9%87%D9%85%20%D8%A8%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%3C/a%3E", + save: "%D8%AD%D9%81%D8%B8", + loadingText: "%D8%AC%D8%A7%D8%B1%D9%8D%20%D8%A7%D9%84%D8%AA%D8%AD%D9%85%D9%8A%D9%84...", + opacity: "%D8%A7%D9%84%D8%B4%D9%81%D8%A7%D9%81%D9%8A%D8%A9", + opacityPlaceholder: "0:%20%D8%A5%D8%AE%D9%81%D8%A7%D8%A1%20%D8%A7%D9%84%D9%81%D8%A7%D8%B5%D9%84", + hideBar: "%D8%A5%D8%AE%D9%81%D8%A7%D8%A1%20%D8%A7%D9%84%D9%81%D8%A7%D8%B5%D9%84%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D8%AD%D9%8A", + hideBarButNoStop: "%D8%A5%D8%AE%D9%81%D8%A7%D8%A1%D8%8C%20%D9%84%D9%83%D9%86%20%D9%84%D8%A7%20%D8%AA%D8%AA%D9%88%D9%82%D9%81", + dbClick2Stop: "%D8%A7%D9%86%D9%82%D8%B1%20%D9%85%D8%B2%D8%AF%D9%88%D8%AC%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A9%20%D8%A7%D9%84%D9%81%D8%A7%D8%B1%D8%BA%D8%A9%20%D9%84%D9%84%D8%A5%D9%8A%D9%82%D8%A7%D9%81", + sortTitle: "%D9%8A%D8%AA%D9%85%20%D8%AA%D9%81%D8%B9%D9%8A%D9%84%20%D8%A7%D9%84%D9%81%D8%B1%D8%B2%20%D8%A8%D8%B9%D8%AF%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%20%D9%84%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF", + autoRun: "%D8%AA%D9%85%D9%83%D9%8A%D9%86%20%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%20(%D9%88%D8%B6%D8%B9%20%D8%A7%D9%84%D9%82%D8%A7%D8%A6%D9%85%D8%A9%20%D8%A7%D9%84%D8%B3%D9%88%D8%AF%D8%A7%D8%A1)", + autoLoadNum: "%D8%B9%D8%AF%D8%AF%20%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D8%A7%D9%84%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%85%D8%B3%D8%A8%D9%82", + turnRate: "%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%20%D9%84%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9%20%D8%B9%D9%86%D8%AF%D9%85%D8%A7%20%D8%AA%D9%83%D9%88%D9%86%20%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D9%81%D8%A9%20%D8%A3%D9%82%D9%84%20%D9%85%D9%86%20%E3%80%90X%E3%80%91%20%D9%85%D8%B1%D8%A7%D8%AA%20%D8%A7%D8%B1%D8%AA%D9%81%D8%A7%D8%B9%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D9%85%D9%86%20%D8%A7%D9%84%D8%AA%D8%B0%D9%8A%D9%8A%D9%84", + inputPageNum: "%D8%A3%D8%AF%D8%AE%D9%84%20%D8%B1%D9%82%D9%85%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D9%84%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84", + enableHistory: "%D9%83%D8%AA%D8%A7%D8%A8%D8%A9%20%D8%B3%D8%AC%D9%84%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D8%AD%20%D8%A8%D8%B9%D8%AF%20%D8%AA%D8%AD%D9%88%D9%8A%D9%84%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9", + enableHistoryAfterInsert: "%D9%83%D8%AA%D8%A7%D8%A8%D8%A9%20%D8%B3%D8%AC%D9%84%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D8%AD%20%D9%81%D9%88%D8%B1%D9%8B%D8%A7%20%D8%A8%D8%B9%D8%AF%20%D8%A7%D9%84%D8%AF%D9%85%D8%AC%D8%8C%20%D8%A3%D9%88%20%D8%A8%D8%B9%D8%AF%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D8%AD", + contentVisibility: "%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84%20%D8%A7%D9%84%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%20%D9%84%D8%B1%D8%A4%D9%8A%D8%A9%20%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89,%20%D9%84%D8%AA%D8%AD%D8%B3%D9%8A%D9%86%20%D8%A3%D8%AF%D8%A7%D8%A1%20%D8%A7%D9%84%D8%B9%D8%B1%D8%B6", + initRun: "%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%20%D8%A8%D9%8A%D9%86%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D9%81%D9%88%D8%B1%20%D8%A7%D9%84%D9%81%D8%AA%D8%AD", + preload: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9%20%D9%85%D8%B3%D8%A8%D9%82%D9%8B%D8%A7%20%D9%84%D8%AA%D8%B3%D8%B1%D9%8A%D8%B9%20%D8%A7%D9%84%D8%A3%D8%AF%D8%A7%D8%A1", + click2ImportRule: "%D8%A7%D9%86%D9%82%D8%B1%20%D9%84%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF%20%D8%B1%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9%D8%8C%20%D8%AB%D9%85%20%D8%A7%D9%86%D8%AA%D8%B8%D8%B1%20%D8%AD%D8%AA%D9%89%20%D9%8A%D9%83%D8%AA%D9%85%D9%84%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB", + forceAllBody: "%D8%AF%D9%85%D8%AC%20%D9%83%D8%A7%D9%85%D9%84%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D9%83%D8%A5%D8%B7%D8%A7%D8%B1%D8%9F", + openInNewTab: "%D9%81%D8%AA%D8%AD%20%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D9%8A%D8%A9%20%D9%81%D9%8A%20%D8%B9%D9%84%D8%A7%D9%85%D8%A9%20%D8%AA%D8%A8%D9%88%D9%8A%D8%A8%20%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9", + importSucc: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF%20%D8%A8%D9%86%D8%AC%D8%A7%D8%AD", + import: "%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF", + editCurrent: "%D8%AA%D8%AD%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D9%84%D9%84%D8%AD%D8%A7%D9%84%D9%8A%D8%A9", + editBlacklist: "%D8%AA%D8%AD%D8%B1%D9%8A%D8%B1%20%D8%B9%D9%86%D8%A7%D9%88%D9%8A%D9%86%20%D8%A7%D9%84%D9%82%D8%A7%D8%A6%D9%85%D8%A9%20%D8%A7%D9%84%D8%B3%D9%88%D8%AF%D8%A7%D8%A1%D8%8C%20%D8%B3%D8%B7%D8%B1%20%D8%A8%D8%B3%D8%B7%D8%B1%D8%8C%20%D8%AF%D8%B9%D9%85%D8%9F%20*%20%D9%84%D9%84%D8%B1%D9%85%D9%88%D8%B2%20%D8%A7%D9%84%D9%85%D8%AA%D8%AD%D8%B1%D9%83%D8%A9", + upBtnImg: "%D8%A3%D9%8A%D9%82%D9%88%D9%86%D8%A9%20%D8%A7%D9%84%D8%B9%D9%88%D8%AF%D8%A9%20%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%A3%D8%B9%D9%84%D9%89", + downBtnImg: "%D8%A3%D9%8A%D9%82%D9%88%D9%86%D8%A9%20%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%20%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%A3%D8%B3%D9%81%D9%84", + sideControllerIcon: "%D8%A3%D9%8A%D9%82%D9%88%D9%86%D8%A9%20%D8%A7%D9%84%D8%B4%D8%B1%D9%8A%D8%B7%20%D8%A7%D9%84%D8%AC%D8%A7%D9%86%D8%A8%D9%8A", + loadingTextTitle: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%86%D8%B5", + dbClick2StopCtrl: "%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20Ctrl", + dbClick2StopAlt: "%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20Alt", + dbClick2StopShift: "%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20Shift", + dbClick2StopMeta: "%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20Meta", + dbClick2StopKey: "%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD%20%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B1", + pageElementCss: "%D9%86%D9%85%D8%B7%20%D9%85%D8%AE%D8%B5%D8%B5%20%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9", + customCss: "%D9%85%D8%AE%D8%B5%D8%B5%20%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D9%85%D9%84%20CSS%20%D9%86%D9%85%D8%B7", + firstAlert: "%D9%84%D9%85%20%D8%AA%D8%B3%D8%AA%D9%88%D8%B1%D8%AF%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9%20%D8%A8%D8%B9%D8%AF%D8%8C%20%D9%8A%D8%B1%D8%AC%D9%89%20%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%A7%D9%84%D9%85%D9%86%D8%A7%D8%B3%D8%A8%D8%A9%20%D9%84%D9%84%D8%A7%D8%B3%D8%AA%D9%8A%D8%B1%D8%A7%D8%AF", + picker: "%D9%85%D8%AD%D8%AF%D8%AF%20%D8%B9%D9%86%D8%A7%D8%B5%D8%B1%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20Pagetual", + closePicker: "%D8%A5%D8%BA%D9%84%D8%A7%D9%82%20%D9%85%D8%AD%D8%AF%D8%AF%20Pagetual", + pickerPlaceholder: "%D9%85%D8%AD%D8%AF%D8%AF%20%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1%D8%8C%20%D8%A7%D8%AA%D8%B1%D9%83%D9%87%20%D9%81%D8%A7%D8%B1%D8%BA%D9%8B%D8%A7%20%D8%A5%D8%B0%D8%A7%20%D9%83%D9%86%D8%AA%20%D9%84%D8%A7%20%D8%AA%D8%B9%D8%B1%D9%81", + pickerCheck: "%D8%AA%D8%AD%D9%82%D9%82%20%D9%85%D9%86%20%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%20%D9%88%D9%86%D8%B3%D8%AE", + switchSelector: "%D8%A7%D9%86%D9%82%D8%B1%20%D9%84%D9%84%D8%AA%D8%A8%D8%AF%D9%8A%D9%84%20%D8%A8%D9%8A%D9%86%20%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1", + gotoEdit: "%D8%A7%D8%B0%D9%87%D8%A8%20%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%A8%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D9%8A", + manualMode: "%D8%AA%D8%B9%D8%B7%D9%8A%D9%84%20%D8%A7%D9%84%D8%AF%D9%85%D8%AC/%D8%A7%D9%84%D8%B1%D8%A8%D8%B7%D8%8C%20%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%20%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D8%A7%D9%84%D8%A7%D8%AA%D8%AC%D8%A7%D9%87%20%D8%A7%D9%84%D8%A3%D9%8A%D9%85%D9%86%20%D9%8A%D8%AF%D9%88%D9%8A%D9%8B%D8%A7%20%D9%84%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%D8%8C%20%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%20%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D8%A7%D9%84%D8%B3%D9%87%D9%85%20%D8%A7%D9%84%D8%A3%D9%8A%D8%B3%D8%B1%20%D9%84%D9%84%D8%B1%D8%AC%D9%88%D8%B9", + clickMode: "%D8%AA%D8%B9%D8%B7%D9%8A%D9%84%20%D8%A7%D9%84%D8%AF%D9%85%D8%AC/%D8%A7%D9%84%D8%B1%D8%A8%D8%B7%D8%8C%20%D8%B9%D9%86%D8%AF%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20%D8%A5%D9%84%D9%89%20%D9%86%D9%87%D8%A7%D9%8A%D8%A9%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%D8%8C%20%D8%B3%D9%8A%D8%AA%D9%85%20%D8%A7%D9%84%D9%86%D9%82%D8%B1%20%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A%D9%8B%D8%A7%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9", + pageBarMenu: "%D8%A7%D9%86%D9%82%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%85%D8%B1%D9%83%D8%B2%20%D8%B4%D8%B1%D9%8A%D8%B7%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D9%84%D9%81%D8%AA%D8%AD%20%D9%82%D8%A7%D8%A6%D9%85%D8%A9%20%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF", + nextSwitch: "%D8%AA%D8%A8%D8%AF%D9%8A%D9%84%20%D8%A7%D9%84%D8%B1%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A", + arrowToScroll: "%D8%A7%D9%86%D9%82%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D8%A7%D9%84%D8%B3%D9%87%D9%85%20%D8%A7%D9%84%D8%A3%D9%8A%D9%85%D9%86%20%D9%84%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%20%D9%88%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D8%A7%D9%84%D8%B3%D9%87%D9%85%20%D8%A7%D9%84%D8%A3%D9%8A%D8%B3%D8%B1%20%D9%84%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D8%B3%D8%A7%D8%A8%D9%82", + sideController: "%D8%B9%D8%B1%D8%B6%20%D8%B4%D8%B1%D9%8A%D8%B7%20%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D8%AD%20%D8%A7%D9%84%D8%AA%D8%B1%D9%82%D9%8A%D9%85%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%B4%D8%B1%D9%8A%D8%B7%20%D8%A7%D9%84%D8%AC%D8%A7%D9%86%D8%A8%D9%8A", + sideControllerScroll: "%D8%AA%D8%A8%D8%AF%D9%8A%D9%84%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1", + sideControllerAlways: "%D8%B9%D8%B1%D8%B6%20%D8%AF%D8%A7%D8%A6%D9%85%D9%8B%D8%A7", + hideLoadingIcon: "%D8%A5%D8%AE%D9%81%D8%A7%D8%A1%20%D8%B1%D9%85%D8%B2%20%D8%A7%D9%84%D8%AA%D8%AD%D9%85%D9%8A%D9%84", + hideBarArrow: "%D8%A5%D8%AE%D9%81%D8%A7%D8%A1%20%D8%B3%D9%87%D9%85%20%D8%B4%D8%B1%D9%8A%D8%B7%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9", + duplicate: "%D8%AA%D9%85%20%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%20Pagetual%20%D9%85%D9%83%D8%B1%D8%B1%D8%8C%20%D8%AA%D8%AD%D9%82%D9%82%20%D9%85%D9%86%20%D9%85%D8%AF%D9%8A%D8%B1%20%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5%20%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9%20%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%20%D8%A8%D9%83!", + forceStateIframe: "%D8%AA%D8%B6%D9%85%D9%8A%D9%86%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A8%D8%A7%D9%84%D9%83%D8%A7%D9%85%D9%84%20%D9%83%D8%A5%D8%B7%D8%A7%D8%B1", + forceStateDynamic: "%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89%20%D8%A7%D9%84%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A%20%D8%B9%D8%A8%D8%B1%20%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1", + forceStateDisable: "%D8%AA%D8%B9%D8%B7%D9%8A%D9%84%20%D8%AA%D8%AD%D9%88%D9%8A%D9%84%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%20%D8%B9%D9%84%D9%89%20%D9%87%D8%B0%D8%A7%20%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9", + autoScrollRate: "%D8%B3%D8%B1%D8%B9%D8%A9%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20(1~1000)", + disableAutoScroll: "%D8%A5%D9%8A%D9%82%D8%A7%D9%81%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A", + enableAutoScroll: "%D8%AA%D9%85%D9%83%D9%8A%D9%86%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A", + toggleAutoScroll: "%D8%AA%D8%A8%D8%AF%D9%8A%D9%84%20%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1%20%D8%A7%D9%84%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A", + ruleRequest: "%D8%B7%D9%84%D8%A8%20%D9%82%D8%A7%D8%B9%D8%AF%D8%A9", + page: "%D8%B5%D9%81%D8%AD%D8%A9%20", + prevPage: "%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%B3%D8%A7%D8%A8%D9%82%D8%A9", + nextPage: "%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%8A%D8%A9", + errorRulesMustBeArray: "%D9%8A%D8%AC%D8%A8%20%D8%A3%D9%86%20%D8%AA%D9%83%D9%88%D9%86%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D9%85%D8%B5%D9%81%D9%88%D9%81%D8%A9!", + errorJson: "%D8%AE%D8%B7%D8%A3%20%D9%81%D9%8A%20JSON%D8%8C%20%D8%AA%D8%AD%D9%82%D9%82%20%D9%85%D8%B1%D8%A9%20%D8%A3%D8%AE%D8%B1%D9%89!", + editSuccess: "%D8%AA%D9%85%20%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D8%B1%20%D8%A8%D9%86%D8%AC%D8%A7%D8%AD", + errorWrongUrl: "%D8%B9%D9%86%D9%88%D8%A7%D9%86%20URL%20%D8%AE%D8%A7%D8%B7%D8%A6%D8%8C%20%D8%AA%D8%AD%D9%82%D9%82%20%D9%85%D8%B1%D8%A9%20%D8%A3%D8%AE%D8%B1%D9%89!", + errorAlreadyExists: "%D9%85%D9%88%D8%AC%D9%88%D8%AF%20%D8%A8%D8%A7%D9%84%D9%81%D8%B9%D9%84!", + settingsSaved: "%D8%AA%D9%85%20%D8%AD%D9%81%D8%B8%20%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA%D8%8C%20%D9%82%D9%85%20%D8%A8%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D9%84%D8%B9%D8%B1%D8%B6", + iframe: "%D8%A5%D8%B7%D8%A7%D8%B1", + dynamic: "%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A", + reloadPage: "%D8%A7%D9%83%D8%AA%D9%85%D9%84%20%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D8%B1%D8%8C%20%D8%A5%D8%B9%D8%A7%D8%AF%D8%A9%20%D8%AA%D8%AD%D9%85%D9%8A%D9%84%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%A2%D9%86%D8%9F", + copied: "%D8%AA%D9%85%20%D8%A7%D9%84%D9%86%D8%B3%D8%AE", + noValidContent: "%D9%84%D9%85%20%D9%8A%D8%AA%D9%85%20%D8%A7%D9%84%D9%83%D8%B4%D9%81%20%D8%B9%D9%86%20%D9%85%D8%AD%D8%AA%D9%88%D9%89%20%D8%B5%D8%A7%D9%84%D8%AD%D8%8C%20%D9%82%D8%AF%20%D9%8A%D9%83%D9%88%D9%86%20%D8%A7%D9%84%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1%20Captcha%20%D9%85%D8%B7%D9%84%D9%88%D8%A8%D9%8B%D8%A7%D8%8C%20%D8%A7%D9%86%D9%82%D8%B1%20%D9%84%D8%B9%D8%B1%D8%B6", + outOfDate: "%D8%A7%D9%84%D9%86%D8%B5%20%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%20%D9%82%D8%AF%D9%8A%D9%85%D8%8C%20%D9%82%D9%85%20%D8%A8%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB%20%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%20%D8%A7%D9%84%D8%A3%D8%AD%D8%AF%D8%AB%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%88%D9%82%D8%AA%20%D8%A7%D9%84%D9%85%D9%86%D8%A7%D8%B3%D8%A8!", + hideBarTips: "%D8%A5%D8%AE%D9%81%D8%A7%D8%A1%20%D8%B4%D8%B1%D9%8A%D8%B7%20%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%AA%D8%B5%D9%81%D8%AD%20%D8%A7%D9%84%D8%AA%D8%B1%D9%82%D9%8A%D9%85%20%D8%8C%20%D9%88%D8%A7%D9%84%D8%AA%D8%A8%D8%AF%D9%8A%D9%84%20%D9%84%D9%88%D8%B6%D8%B9%20%D9%83%D8%A7%D9%85%D9%84%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9", + setConfigPage: "%D8%AA%D8%B9%D9%8A%D9%8A%D9%86%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D9%8A%D8%A9%20%D9%83%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%20%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9", + wedata2github: "%D8%AA%D8%BA%D9%8A%D9%8A%D8%B1%20%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D8%A7%D9%84%D9%88%D9%8A%D8%A8%20%D8%AF%D8%A7%D8%AA%D8%A7%20%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D8%A7%D9%84%D8%A8%D8%AF%D9%8A%D9%84%20%D8%A7%D9%84%D9%85%D8%B1%D8%A2%D8%A9,%20%D9%81%D9%8A%20%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%20%D8%AC%D9%8A%D8%AA%20%D9%87%D8%A7%D8%A8", + addOtherProp: "%D8%A5%D8%B6%D8%A7%D9%81%D8%A9%20%D8%AE%D8%A7%D8%B5%D9%8A%D8%A9%20%D9%82%D8%A7%D8%B9%D8%AF%D8%A9", + addNextSelector: "%D8%A5%D8%B6%D8%A7%D9%81%D8%A9%20%D9%85%D8%AD%D8%AA%D9%88%D9%89%20%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%20%D9%83%D9%80%20nextLink", + addPageSelector: "%D8%A5%D8%B6%D8%A7%D9%81%D8%A9%20%D9%85%D8%AD%D8%AA%D9%88%D9%89%20%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%20%D9%83%D9%80%20pageElement", + propName: "%D8%A3%D8%AF%D8%AE%D9%84%20%D8%A7%D8%B3%D9%85%20%D8%AE%D8%A7%D8%B5%D9%8A%D8%A9%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9", + propValue: "%D8%A3%D8%AF%D8%AE%D9%84%20%D9%82%D9%8A%D9%85%D8%A9%20%D8%AE%D8%A7%D8%B5%D9%8A%D8%A9%20%D8%A7%D9%84%D9%82%D8%A7%D8%B9%D8%AF%D8%A9", + customFirst: "%D8%AA%D8%AC%D8%A7%D9%87%D9%84%20%D8%B0%D8%A7%D9%83%D8%B1%D8%A9%20%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86%20%D8%A7%D9%84%D9%85%D8%A4%D9%82%D8%AA%20%D9%84%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF%20%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9%20%D8%A7%D9%84%D9%85%D8%AD%D9%84%D9%8A%D8%A9", + rulesExample: "%D9%85%D8%AB%D8%A7%D9%84%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%B9%D8%AF", + lastPage: "%D8%AA%D9%85%20%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84%20%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%A3%D8%AE%D9%8A%D8%B1%D8%A9", + lastPageTips: "%D8%B9%D8%B1%D8%B6%20%D8%AA%D9%84%D9%85%D9%8A%D8%AD%D8%A7%D8%AA%20%D8%B9%D9%86%D8%AF%20%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84%20%D8%A5%D9%84%D9%89%20%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9%20%D8%A7%D9%84%D8%A3%D8%AE%D9%8A%D8%B1%D8%A9" + } + }, + { + name: "简体中文", + match: ["zh-CN", "zh-SG"], + lang: { enableDebug: "调试模式,输出信息至控制台", + updateNotification: "规则更新后提示", disable: "暂时禁用", disableSite: "站点禁用开关", disableSiteTips: "已在此站禁用", enableSiteTips: "已在此站启用", - enable: "启用自动翻页", + enable: "✅启用自动翻页", + tempActive: "临时启用翻页", toTop: "回到顶部", toBottom: "前往页尾", current: "当前页", @@ -117,7 +3668,7 @@ updateSucc: "更新成功", beginUpdate: "正在更新,请耐心等待,不要关闭页面", customUrls: "导入 Pagetual 或 AutoPagerize 规则 url,一行一条", - customRules: "输入【东方永页机】格式的自定义规则 贡献规则", + customRules: "输入【东方永页机】格式的自定义规则 ✍️贡献规则", save: "保存设置", loadingText: "少女祈祷中...", opacity: "不透明值", @@ -135,7 +3686,7 @@ contentVisibility: "自动切换 contentVisibility,提升渲染性能", initRun: "打开页面后立即尝试翻页,否则滚动至页尾再翻页", preload: "翻页前预读下一页,加速浏览", - click2ImportRule: "点击下方添加特殊规则库,并静待更新成功:", + click2ImportRule: "点击下方任意一条添加规则库,并静待更新成功,请预先打开链接确认能正常访问再行导入:", forceAllBody: "是否拼接整个页面?", openInNewTab: "使拼接页面的内容在新页面打开", importSucc: "导入成功", @@ -146,10 +3697,10 @@ downBtnImg: "前往页尾图标", sideControllerIcon: "侧边栏图标", loadingTextTitle: "加载中文字", - dbClick2StopCtrl: "Ctrl 键", - dbClick2StopAlt: "Alt 键", - dbClick2StopShift: "Shift 键", - dbClick2StopMeta: "Meta 键", + dbClick2StopCtrl: "Ctrl", + dbClick2StopAlt: "Alt", + dbClick2StopShift: "Shift", + dbClick2StopMeta: "Meta", dbClick2StopKey: "快捷键", pageElementCss: "页面主体框架的样式", customCss: "自定义 css", @@ -166,6 +3717,8 @@ nextSwitch: "切换其他页码", arrowToScroll: "左方向键滚动至上一页,右方向键滚动至下一页", sideController: "在侧边显示翻页控制栏", + sideControllerScroll: "滚动开关", + sideControllerAlways: "始终显示", hideLoadingIcon: "隐藏加载动画", hideBarArrow: "隐藏分隔条定位箭头", duplicate: "检测到永页机重复安装,请删除其他脚本管理器中的永页机!", @@ -176,6 +3729,7 @@ disableAutoScroll: "停止自动滚动", enableAutoScroll: "开启自动滚动", toggleAutoScroll: "自动滚动开关", + ruleRequest: "适配请求", page: "Page ", prevPage: "上一页", nextPage: "下一页", @@ -189,7 +3743,7 @@ dynamic: "动态加载", reloadPage: "编辑完成,是否立即刷新页面?", copied: "已复制", - noValidContent: "没有检测到有效内容,点击查看", + noValidContent: "没有检测到有效内容,可能需要人机校验,点击查看", outOfDate: "脚本已过时,请及时更新到最新版本!", hideBarTips: "隐藏分页隔条,沉浸式体验", setConfigPage: "将当前页面设为默认配置页", @@ -200,18 +3754,23 @@ propName: "输入规则属性名", propValue: "输入规则属性值", customFirst: "为本地自定义规则忽略缓存", - rulesExample: "自定义规则详解" - }; - break; - case "zh-TW": - case "zh-HK": - config = { + rulesExample: "自定义规则详解", + lastPage: "已到达最后一页", + lastPageTips: "到达最后一页时进行提示" + } + }, + { + name: "正體中文", + match: ["zh", "zh-TW", "zh-HK"], + lang: { enableDebug: "調試模式,輸出信息至控制台", + updateNotification: "規則更新后提示", disable: "暫時禁用", disableSite: "站點禁用開關", disableSiteTips: "已在此站禁用", enableSiteTips: "已在此站啟用", - enable: "啟用自動翻頁", + enable: "✅啟用自動翻頁", + tempActive: "臨時啟用翻頁", toTop: "回到頂部", toBottom: "前往頁尾", current: "當前頁", @@ -233,7 +3792,7 @@ updateSucc: "更新成功", beginUpdate: "正在更新,請稍候", customUrls: "導入 Pagetual 或 AutoPagerize 規則 url,一行一條", - customRules: "輸入【東方永頁機】格式的自定義規則 貢獻規則", + customRules: "輸入【東方永頁機】格式的自定義規則 ✍️貢獻規則", save: "存儲設置", loadingText: "少女祈禱中...", opacity: "不透明值", @@ -262,10 +3821,10 @@ downBtnImg: "前往頁尾圖標", sideControllerIcon: "側邊欄圖標", loadingTextTitle: "加載中文字", - dbClick2StopCtrl: "Ctrl 鍵", - dbClick2StopAlt: "Alt 鍵", - dbClick2StopShift: "Shift 鍵", - dbClick2StopMeta: "Meta 鍵", + dbClick2StopCtrl: "Ctrl", + dbClick2StopAlt: "Alt", + dbClick2StopShift: "Shift", + dbClick2StopMeta: "Meta", dbClick2StopKey: "快捷鍵", pageElementCss: "頁面主體框架的樣式", customCss: "自定義 css", @@ -282,6 +3841,8 @@ nextSwitch: "切換其他頁碼", arrowToScroll: "左方向鍵滾動至上一頁,右方向鍵滾動至下一頁", sideController: "在側邊顯示翻頁控制欄", + sideControllerScroll: "滾燈開關", + sideControllerAlways: "始終顯示", hideLoadingIcon: "隱藏加載動畫", hideBarArrow: "隱藏分隔條定位箭頭", duplicate: "檢測到永頁機重複安裝,請刪除其他腳本管理器中的永頁機!", @@ -292,6 +3853,7 @@ disableAutoScroll: "停止自動滾動", enableAutoScroll: "開啟自動滾動", toggleAutoScroll: "自動滾動開關", + ruleRequest: "適配請求", page: "Page ", prevPage: "上一頁", nextPage: "下一頁", @@ -305,7 +3867,7 @@ dynamic: "動態加載", reloadPage: "編輯完成,是否立即刷新頁面?", copied: "已復制", - noValidContent: "沒有檢測到有效内容,點擊查看", + noValidContent: "沒有檢測到有效内容,可能需要人機校驗,點擊查看", outOfDate: "脚本已過時,請及時更新到最新版本!", hideBarTips: "隱藏分頁隔條,沉浸式體驗", setConfigPage: "將當前頁面設為默認配置頁", @@ -316,17 +3878,23 @@ propName: "輸入規則屬性名", propValue: "輸入規則屬性值", customFirst: "為本地自定義規則忽略緩存", - rulesExample: "自定義規則詳解" - }; - break; - case "ja": - config = { + rulesExample: "自定義規則詳解", + lastPage: "已到達最後一頁", + lastPageTips: "到達最後一頁時進行提示" + } + }, + { + name: "日本語", + match: ["ja", "ja-JP"], + lang: { enableDebug: "デバッグモード", + updateNotification: "ルール更新後の通知", disable: "一時的に無効", disableSite: "無効状態の切り替え", disableSiteTips: "このサイトで既に無効になっています", enableSiteTips: "このサイトで既に有効になっています", - enable: "ページめくりを有効にする", + enable: "✅ページめくりを有効にする", + tempActive: "一時的にアクティブ", toTop: "トップに戻る", toBottom: "ページの下部に移動", current: "現在のページ", @@ -335,7 +3903,7 @@ configure: "設定ページを開く", firstUpdate: "ここをクリックしてルールを初期化します", update: "更新ルール", - click2update: "今すぐルールを更新してください", + click2update: "今すぐルールを更新", loadNow: "今すぐページをめくる", loadConfirm: "数ページめくりたいですか?(0は途切れない)", noNext: "次のページが見つかりません、新しいルールを作成してください", @@ -348,7 +3916,7 @@ updateSucc: "更新に成功しました", beginUpdate: "更新中、お待ちください", customUrls: "インポートルールのURL、1行に1つ", - customRules: "【東方永頁機】の形式でカスタムルールを入力してください 寄稿ルール", + customRules: "【東方永頁機】の形式でルールを入力してください ✍️寄稿", save: "設定を保存", loadingText: "少女祈祷中...", opacity: "不透明値", @@ -357,7 +3925,7 @@ hideBarButNoStop: "非表示にするが停止しない", dbClick2Stop: "空白部分をダブルクリックしてページめくりを一時停止します", sortTitle: "並べ替えは、次のルールの更新後に有効になります", - autoRun: "自動的に有効", + autoRun: "自動的に有効 (blacklist mode)", autoLoadNum: "指定したページ数を自動的に読み込みます", turnRate: "ページの端からページの高さの【X】倍になったらページをめくる", inputPageNum: "ジャンプするページ番号を入力", @@ -373,9 +3941,9 @@ import: "インポート", editCurrent: "現在のルールの編集", editBlacklist: "ブラックリストのURLを編集し、1行ずつ、サポート? *ワイルドカード", - upBtnImg: "トップアイコンに戻る", - downBtnImg: "フッターアイコンに移動", - sideControllerIcon: "サイドバー アイコン", + upBtnImg: "Icon of back to top", + downBtnImg: "Icon of go to footer", + sideControllerIcon: "Icon of sidebar", loadingTextTitle: "テキストをロード", dbClick2StopCtrl: "Ctrlキー", dbClick2StopAlt: "Altキー", @@ -397,6 +3965,8 @@ nextSwitch: "次のページに切り替え", arrowToScroll: "左矢印キーで前へ、右矢印キーで次へ", sideController: "サイドバーにページング コントロール バーを表示する", + sideControllerScroll: "スクロール スイッチ", + sideControllerAlways: "常に表示", hideLoadingIcon: "読み込み中のアニメーションを隠す", hideBarArrow: "分割線の位置矢印を隠す", duplicate: "Pagetual の重複インストールが検出されました。他のスクリプト マネージャで永続的なページ マシンを削除してください!", @@ -405,8 +3975,9 @@ forceStateDisable: "このステーションでのページめくりを無効にする", autoScrollRate: "スクロール速度 (1~1000)", disableAutoScroll: "自動スクロールを停止します", - EnableAutoScroll: "自動スクロールを有効にする", + enableAutoScroll: "自動スクロールを有効にする", toggleAutoScroll: "自動スクロールの切り替え", + ruleRequest: "ルール要求", page: "Page ", prevPage: "Prev page", nextPage: "Next page", @@ -431,18 +4002,23 @@ propName: "ルールのプロパティ名を入力してください", propValue: "ルールのプロパティ値を入力してください", customFirst: "ローカルカスタムルールのキャッシュを無視する", - rulesExample: "カスタムルールの詳しい説明" - }; - break; - case "ru": - case "ru-RU": - config = { + rulesExample: "カスタムルールの詳しい説明", + lastPage: "最後のページに到達しました", + lastPageTips: "最後のページに到達した時にヒントを表示する" + } + }, + { + name: "Русский", + match: ["ru", "ru-RU"], + lang: { enableDebug: "Включить отладку", + updateNotification: "Уведомление после обновления правила", disable: "Выключить", disableSite: "Включить/выключить на сайте", disableSiteTips: "Выключено для этого сайта", enableSiteTips: "Включено для этого сайта", - enable: "Включить", + enable: "✅Включить", + tempActive: "Временно активен", toTop: "Наверх", toBottom: "Вниз", current: "Текущая страница", @@ -464,7 +4040,7 @@ updateSucc: "Правила обновлены", beginUpdate: "Обновление. Пожалуйста, немного подождите", customUrls: "Ссылки с правилами для импорта. Одна ссылка на строку", - customRules: "Введите пользовательские правила в формате Pagetual. Улучшить встроенные правила", + customRules: "Введите пользовательские правила в формате Pagetual. ✍️Улучшить встроенные правила", save: "Сохранить настройки", loadingText: "Следующая страница подгружается…", opacity: "Прозрачность", @@ -513,6 +4089,8 @@ nextSwitch: "Переключить ссылку на следующую страницу", arrowToScroll: "Листать страницы клавишами со стрелками влево и вправо", sideController: "Показать справа панель перемещения по вкладке", + sideControllerScroll: "Переключатель прокрутки", + sideControllerAlways: "Всегда показывать", hideLoadingIcon: "Скрыть анимацию загрузки", hideBarArrow: "Скрыть кнопки перемещения на разделителе", duplicate: "Похоже, Pagetual установлен несколько раз. Пожалуйста, удалите Pagetual из других менеджеров скриптов!", @@ -523,6 +4101,7 @@ disableAutoScroll: "Остановить автоматическую прокрутку", enableAutoScroll: "Включить автопрокрутку", toggleAutoScroll: "Переключить автопрокрутку", + ruleRequest: "Запрос правил", page: "Страница ", prevPage: "Предыдущая страница", nextPage: "Следующая страница", @@ -547,199 +4126,294 @@ propName: "Введите имя свойства правила", propValue: "Введите значение свойства правила", customFirst: "Игнорировать кеш для локальных пользовательских правил", - rulesExample: "Подробное объяснение настраиваемых правил" - }; - break; - default: - config = { - enableDebug: "Enable debug output", - disable: "Disable", - disableSite: "Toggle disabled state", - disableSiteTips: "Disabled on this site", - enableSiteTips: "Enabled on this site", - enable: "Enable", - toTop: "To Top", - toBottom: "To Bottom", - current: "Current Page", - forceIframe: "Force to join next page", - cancelForceIframe: "Cancel Force join", - configure: "Configure", - firstUpdate: "Click here to initialize the rules", - update: "Update online rules", - click2update: "Click to update rules from url now", - loadNow: "Load next page manually", - loadConfirm: "How much pages do you want to load? (0 means infinite)", - noNext: "No next link found, please create a new rule", - passSec: "Updated #t# seconds ago", - passMin: "Updated #t# minutes ago", - passHour: "Updated #t# hours ago", - passDay: "Updated #t# days ago", - cantDel: "Can't delete buildin rules", - confirmDel: "Are you sure you want to delete this rule?", - updateSucc: "Update succeeded", - beginUpdate: "Begin update, wait a minute please", - customUrls: "Import Pagetual or AutoPagerize rule url, One url per line", - customRules: "Input custom rules with [Pagetual] format. Contribute rules", - save: "Save", - loadingText: "Shojo Now Loading...", - opacity: "Opacity", - opacityPlaceholder: "0: hide spacer", - hideBar: "Hide the paging spacer", - hideBarButNoStop: "Hide but not stop", - dbClick2Stop: "Double-click on the blank space to pause", - sortTitle: "Sorting takes effect after the next rule update", - autoRun: "Auto run (black list mode)", - autoLoadNum: "Amount for preload pages", - turnRate: "Turn the next page when it's less than 【X】 times page height from the footer", - inputPageNum: "Enter page number to jump", - enableHistory: "Write history after page turning", - enableHistoryAfterInsert: "Write history immediately after splicing, otherwise write after browsing", - contentVisibility: "Automatically switch contentVisibility to improve rendering performance", - initRun: "Turn pages immediately after opening", - preload: "Preload next page for speeding up", - click2ImportRule: "Click to import base rules link, then wait until the update is complete: ", - forceAllBody: "Join full body of page?", - openInNewTab: "Open urls of additions in new tab", - importSucc: "Import completed", - import: "Import", - editCurrent: "Edit rule for current", - editBlacklist: "Edit the blacklist urls, line by line, Support ? * for wildcard", - upBtnImg: "Icon of back to top", - downBtnImg: "Icon of go to footer", - sideControllerIcon: "Icon of sidebar", - loadingTextTitle: "Loading text", - dbClick2StopCtrl: "Ctrl key", - dbClick2StopAlt: "Alt key", - dbClick2StopShift: "Shift key", - dbClick2StopMeta: "Meta key", - dbClick2StopKey: "Shortcut key", - pageElementCss: "Custom style for main page elements", - customCss: "Custom complete css", - firstAlert: "You have not imported the base rule, please select the appropriate rule to import", - picker: "Pagetual page element picker", - closePicker: "Close Pagetual picker", - pickerPlaceholder: "Element selector, Leave empty if you have no idea", - pickerCheck: "Check selector and copy", - switchSelector: "Click to switch element", - gotoEdit: "Go to edit rule with current selector", - manualMode: "Disable splicing, manually turn pages with the right arrow keys (or dispatch event 'pagetual.next')", - clickMode: "Disable splicing, automatically click the next page when scrolling to the end of the page", - pageBarMenu: "Click the middle of the page bar to open the menu", - nextSwitch: "Switch next link", - arrowToScroll: "Press left arrow key to scroll prev and right arrow key to scroll next", - sideController: "Display the paging control bar in the sidebar", - hideLoadingIcon: "Hide loading animation", - hideBarArrow: "Hide arrow for page bar", - duplicate: "Duplicate Pagetual have been installed, check your script manager!", - forceStateIframe: "Embed full page as iframe", - forceStateDynamic: "Load dynamic content via iframe", - forceStateDisable: "Disable page turning on this site", - autoScrollRate: "Scroll speed (1~1000)", - disableAutoScroll: "Stop Auto Scroll", - enableAutoScroll: "Enable Auto Scroll", - toggleAutoScroll: "Toggle Auto Scroll", - page: "Page ", - prevPage: "Prev page", - nextPage: "Next page", - errorRulesMustBeArray: "Rules must be a Array!", - errorJson: "JSON error, check again!", - editSuccess: "Edit successfully", - errorWrongUrl: "Wrong url, check again!", - errorAlreadyExists: "Already exists!", - settingsSaved: "The settings are saved, refresh to view", - iframe: "Iframe", - dynamic: "Dynamic", - reloadPage: "Edit completed, reload page now?", - copied: "Copied", - noValidContent: "No valid content detected, click to view", - outOfDate: "The script is outdated, update to the latest version in time!", - hideBarTips: "Hide the pagination bar, toggle immersive experience", - setConfigPage: "Set current page as the default configuration page", - wedata2github: "Change the wedate address to the mirror address in the github repository", - addOtherProp: "Add rule property", - addNextSelector: "Add selector content as nextLink", - addPageSelector: "Add selector content as pageElement", - propName: "Enter rule property name", - propValue: "Enter rule property value", - customFirst: "Ignore cache for local custom rules", - rulesExample: "Rules Example" - }; - break; + rulesExample: "Подробное объяснение настраиваемых правил", + lastPage: "Достигнута последняя страница", + lastPageTips: "Показывать подсказки при достижении последней страницы" + } + } + ]; + var langList = {}; + langData.forEach(lang => { + langList[lang.match[0]] = lang.name; + }); + var i18nData = langData[0].lang; + function setLang(la) { + langName = la; + for (let i = 0; i < langData.length; i++) { + let lang = langData[i]; + if (lang && lang.match.indexOf(la) !== -1) { + i18nData = lang.lang; + if (lang.encode) { + for (let k in i18nData) { + i18nData[k] = decodeURI(i18nData[k]); + } + } + break; + } + } } + setLang(langName); var enableDebug = true; + var _GM_xmlhttpRequest, _GM_registerMenuCommand, _GM_notification, _GM_addStyle, _GM_openInTab, _GM_info, _GM_setClipboard; function i18n(name, param) { - return config[name] ? config[name].replace("#t#", param) : name; - }; + return i18nData[name] ? i18nData[name].replace("#t#", param) : name; + } function debug(str, title) { if (enableDebug) { console.log( `%c【Pagetual v.${_GM_info.script.version}】 ${title ? title : 'debug'}:`, - 'color: yellow;font-size: large;font-weight: bold;background-color: darkblue;', + 'color: yellow;font-size: large;font-weight: bold;background-color: darkblue;border-radius: 10px;text-shadow: 1px 1px 3px black;padding: 5px;', str ); } - }; + } - var _GM_xmlhttpRequest, _GM_registerMenuCommand, _GM_notification, _GM_addStyle, _GM_openInTab, _GM_info, _GM_setClipboard; - if (typeof GM_xmlhttpRequest != 'undefined') { - _GM_xmlhttpRequest = GM_xmlhttpRequest; - } else if (typeof GM != 'undefined' && typeof GM.xmlHttpRequest != 'undefined') { - _GM_xmlhttpRequest = GM.xmlHttpRequest; + function requestWithFetch(f, onFetchError) { + function getHeaderValue(headers, name) { + if (!headers || !name) return ""; + let lowerName = String(name).toLowerCase(); + if (typeof Headers !== "undefined" && headers instanceof Headers) { + return headers.get(lowerName) || ""; + } + if (typeof headers === "object") { + for (let key in headers) { + if (Object.prototype.hasOwnProperty.call(headers, key) && String(key).toLowerCase() === lowerName) { + return headers[key] || ""; + } + } + } + return ""; + } + function extractCharsetFromContentType(contentType) { + if (!contentType || typeof contentType !== "string") return ""; + let match = contentType.match(/charset\s*=\s*["']?([^;"'\s]+)/i); + return match && match[1] ? match[1].trim() : ""; + } + function decodeArrayBufferByCharset(buffer, preferredCharset) { + let bytes = new Uint8Array(buffer); + let decoderList = []; + let normalize = label => String(label || "").trim().toLowerCase(); + let addAlias = (name, aliases) => { + if (aliases.indexOf(normalizedPreferred) !== -1) { + pushDecoder(name); + for (let i = 0; i < aliases.length; i++) { + pushDecoder(aliases[i]); + } + } + }; + let pushDecoder = label => { + let raw = String(label || "").trim(); + if (raw && decoderList.indexOf(raw) === -1) { + decoderList.push(raw); + } + }; + let normalizedPreferred = normalize(preferredCharset).replace(/["']/g, ""); + pushDecoder(preferredCharset); + pushDecoder(normalizedPreferred); + pushDecoder(normalizedPreferred.replace(/_/g, "-")); + pushDecoder(normalizedPreferred.replace(/-/g, "_")); + addAlias("shift_jis", ["shiftjis", "shift-jis", "sjis", "ms_kanji", "windows-31j", "cp932", "ms932"]); + addAlias("euc-jp", ["eucjp"]); + addAlias("iso-2022-jp", ["iso2022jp", "jis"]); + addAlias("gb18030", ["gbk", "gb2312", "x-gbk", "cp936", "ms936", "windows-936"]); + addAlias("big5", ["big-5", "cn-big5", "x-x-big5"]); + addAlias("euc-kr", ["euckr", "ks_c_5601-1987", "ksc5601", "windows-949", "cp949"]); + addAlias("windows-1251", ["cp1251"]); + addAlias("windows-1252", ["cp1252", "iso-8859-1", "latin1", "latin-1"]); + pushDecoder("utf-8"); + for (let i = 0; i < decoderList.length; i++) { + try { + return new TextDecoder(decoderList[i]).decode(bytes); + } catch (e) {} + } + try { + return new TextDecoder().decode(bytes); + } catch (e) { + return ""; + } + } + function detectCharsetFromHtmlHead(buffer) { + if (!buffer || !buffer.byteLength) return ""; + let scanLen = Math.min(buffer.byteLength, 16384); + let bytes = new Uint8Array(buffer, 0, scanLen); + let ascii = ""; + for (let i = 0; i < bytes.length; i++) { + let code = bytes[i]; + ascii += code < 128 ? String.fromCharCode(code) : " "; + } + let charsetMatch = ascii.match(/]*charset\s*=\s*["']?\s*([a-zA-Z0-9._-]+)/i); + if (!charsetMatch) { + charsetMatch = ascii.match(/]*content\s*=\s*["'][^"']*charset\s*=\s*([a-zA-Z0-9._-]+)/i); + } + return charsetMatch && charsetMatch[1] ? charsetMatch[1].trim() : ""; + } + function isUtf8Charset(label) { + let normalized = String(label || "").trim().toLowerCase().replace(/_/g, "-"); + return !normalized || normalized === "utf-8" || normalized === "utf8"; + } + if (!f || !f.url || typeof fetch === "undefined") { + if (onFetchError) { + onFetchError({error: "Fetch not available"}); + } else if (f && f.onerror) { + f.onerror({error: "Fetch not available"}); + } + return; + } + let method = (f.method || "GET").toUpperCase(); + let timeoutId = null; + let controller = typeof AbortController !== "undefined" ? new AbortController() : null; + if (f.timeout > 0 && controller) { + timeoutId = setTimeout(() => { + controller.abort(); + }, f.timeout); + } + let options = { + method: method, + headers: f.headers || {} + }; + if (controller) options.signal = controller.signal; + if (method !== "GET" && method !== "HEAD" && typeof f.data !== "undefined") { + options.body = f.data; + } + fetch(f.url, options).then(async response => { + if (timeoutId) clearTimeout(timeoutId); + let responseCharset = extractCharsetFromContentType(response.headers.get("content-type") || ""); + let overrideCharset = extractCharsetFromContentType(f.overrideMimeType || ""); + let requestCharset = extractCharsetFromContentType(getHeaderValue(options.headers, "content-type")); + let text; + let charsetFromHeaders = responseCharset || overrideCharset || requestCharset; + if (charsetFromHeaders) { + if (isUtf8Charset(charsetFromHeaders)) { + text = await response.text(); + } else { + text = decodeArrayBufferByCharset(await response.arrayBuffer(), charsetFromHeaders); + } + } else { + let rawBuffer = await response.arrayBuffer(); + let metaCharset = detectCharsetFromHtmlHead(rawBuffer); + let targetCharset = metaCharset || charset || "utf-8"; + if (isUtf8Charset(targetCharset)) { + text = new TextDecoder("utf-8").decode(new Uint8Array(rawBuffer)); + } else { + text = decodeArrayBufferByCharset(rawBuffer, targetCharset); + } + } + let headers = ""; + response.headers.forEach((value, key) => { + headers += key + ": " + value + "\r\n"; + }); + if (f.onload) { + f.onload({ + response: text, + responseText: text, + status: response.status, + statusText: response.statusText, + finalUrl: response.url, + responseHeaders: headers + }); + } + }).catch(error => { + if (timeoutId) clearTimeout(timeoutId); + if (error && error.name === "AbortError" && f.ontimeout) { + f.ontimeout(error); + return; + } + if (onFetchError) { + onFetchError(error); + } else if (f.onerror) { + f.onerror(error); + } + }); + } + function isSameOriginRequest(f) { + if (!f || !f.url || typeof location === "undefined") return false; + try { + return new URL(f.url, location.href).origin === location.origin; + } catch (e) { + return false; + } + } + let nativeGMRequest = null; + if (typeof GM_xmlhttpRequest !== 'undefined') { + nativeGMRequest = GM_xmlhttpRequest; + } else if (typeof GM !== 'undefined' && typeof GM.xmlHttpRequest !== 'undefined') { + nativeGMRequest = GM.xmlHttpRequest; + } + if (nativeGMRequest) { + _GM_xmlhttpRequest = function(f) { + if (!f) return nativeGMRequest(f); + if (isSameOriginRequest(f)) { + requestWithFetch(f); + return; + } + let originalOnerror = f.onerror; + let request = Object.assign({}, f); + request.onerror = function(gmError) { + requestWithFetch(f, function(fetchError) { + if (originalOnerror) { + originalOnerror(fetchError || gmError || {error: "Request failed"}); + } + }); + }; + return nativeGMRequest(request); + }; } else { - _GM_xmlhttpRequest = (f) => {fetch(f.url).then(response => response.text()).then(data => {let res = {response:data}; f.onload(res)}).catch(e => f.onerror(e))}; + _GM_xmlhttpRequest = function(f) { + requestWithFetch(f); + }; } - if (typeof GM_registerMenuCommand != 'undefined') { + if (typeof GM_registerMenuCommand !== 'undefined') { _GM_registerMenuCommand = GM_registerMenuCommand; - } else if (typeof GM != 'undefined' && typeof GM.registerMenuCommand != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.registerMenuCommand !== 'undefined') { _GM_registerMenuCommand = GM.registerMenuCommand; } else { - _GM_registerMenuCommand = (s, f) => {}; + _GM_registerMenuCommand = (s, f) => {debug(s); debug(f);}; } - if (typeof GM_info != 'undefined') { + if (typeof GM_info !== 'undefined') { _GM_info = GM_info; - } else if (typeof GM != 'undefined' && typeof GM.info != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.info !== 'undefined') { _GM_info = GM.info; } else { _GM_info = {script: {}}; } - if (typeof GM_notification != 'undefined') { + if (typeof GM_notification !== 'undefined') { _GM_notification = GM_notification; - } else if (typeof GM != 'undefined' && typeof GM.notification != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.notification !== 'undefined') { _GM_notification = GM.notification; } else { - _GM_notification = (s) => {showTips(s)}; + _GM_notification = (s) => {showTips(String(s.text || s));}; } - if (typeof GM_openInTab != 'undefined') { + if (typeof GM_openInTab !== 'undefined') { _GM_openInTab = GM_openInTab; - } else if (typeof GM != 'undefined' && typeof GM.openInTab != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.openInTab !== 'undefined') { _GM_openInTab = GM.openInTab; } else { - _GM_openInTab = (s,t) => {window.open(s)}; + _GM_openInTab = (s,t) => {window.open(s); debug(t);}; } - if (typeof GM_addStyle != 'undefined') { + if (typeof GM_addStyle !== 'undefined') { _GM_addStyle = GM_addStyle; - } else if (typeof GM != 'undefined' && typeof GM.addStyle != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.addStyle !== 'undefined') { _GM_addStyle = GM.addStyle; } else { _GM_addStyle = cssStr => { let styleEle = document.createElement("style"); - styleEle.innerHTML = cssStr; + setHTML(styleEle, cssStr); document.head.appendChild(styleEle); return styleEle; }; } - if (typeof GM_setClipboard != 'undefined') { + if (typeof GM_setClipboard !== 'undefined') { _GM_setClipboard = GM_setClipboard; - } else if (typeof GM != 'undefined' && typeof GM.setClipboard != 'undefined') { + } else if (typeof GM !== 'undefined' && typeof GM.setClipboard !== 'undefined') { _GM_setClipboard = GM.setClipboard; } else { - _GM_setClipboard = (s, i) => {}; + _GM_setClipboard = (s, i) => {debug(s); debug(i);}; } - const _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;//兼容 ios userscripts 的寫法 + const _unsafeWindow = (typeof unsafeWindow === 'undefined') ? window : unsafeWindow;//兼容 ios userscripts 的寫法 const storage = { - supportGM: typeof GM_getValue == 'function' && typeof GM_getValue('a', 'b') != 'undefined', - supportGMPromise: typeof GM != 'undefined' && typeof GM.getValue == 'function' && typeof GM.getValue('a', 'b') != 'undefined' && typeof GM.getValue('a', 'b').then == 'function', + supportGM: typeof GM_getValue === 'function' && typeof GM_getValue('a', 'b') !== 'undefined', + supportGMPromise: typeof GM !== 'undefined' && typeof GM.getValue === 'function' && typeof GM.getValue('a', 'b') !== 'undefined' && typeof GM.getValue('a', 'b').then === 'function', supportCrossSave: function() { return this.supportGM || this.supportGMPromise; }, @@ -758,12 +4432,12 @@ setItem: function(key, value) { if (this.supportGMPromise) { GM.setValue(key, value); - if (value === "" && typeof GM != 'undefined' && typeof GM.deleteValue != 'undefined') { + if (value === "" && typeof GM !== 'undefined' && typeof GM.deleteValue !== 'undefined') { GM.deleteValue(key); } } else if (this.supportGM) { GM_setValue(key, value); - if (value === "" && typeof GM_deleteValue != 'undefined') { + if (value === "" && typeof GM_deleteValue !== 'undefined') { GM_deleteValue(key); } } else if (this.operaUJSStorage) { @@ -777,7 +4451,7 @@ getItem: function(key, cb) { var value; if (this.supportGMPromise) { - value = GM.getValue(key).then(v => {cb(v)}); + value = GM.getValue(key).then(v => {cb(v);}); return; } else if (this.supportGM) { value = GM_getValue(key); @@ -787,37 +4461,92 @@ value = this.mxAppStorage.getConfig(key); } else if (window.localStorage) { value = window.localStorage.getItem(key); - }; + } cb(value); } }; - var rulesData = {uninited: true}, ruleUrls, updateDate; - const configPage = ["https://github.com/hoothin/UserScripts/tree/master/Pagetual", - "https://hoothin.github.io/UserScripts/Pagetual/"]; + async function getData(key) { + return new Promise((resolve) => { + storage.getItem(key, value => { + resolve(value); + }); + }); + } + async function getListData(list, key) { + return new Promise((resolve) => { + storage.getItem(list, listData => { + let value; + if (listData) { + for(var i = 0; i < listData.length; i++) { + let data = listData[i]; + if (data.k === key) { + value = data.v; + break; + } + } + } + resolve(value); + }); + }); + } + function setListData(list, key, value, length) { + storage.getItem(list, listData => { + if (!listData) { + listData = []; + } + listData = listData.filter(data => data && data.k !== key); + if (value !== "") { + listData.unshift({k: key, v: value}); + if (listData.length > (length || 100)) { + listData.pop(); + } + } + storage.setItem(list, listData); + }); + } + const isMobile = ('ontouchstart' in document.documentElement && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)); + const cnConfigPage = "https://pagetual.hoothin.com/cn/rule.html"; + const configPage = ["https://pagetual.hoothin.com/rule.html", + "https://github.com/hoothin/UserScripts/tree/master/Pagetual", + "https://hoothin.github.io/UserScripts/Pagetual/"]; + const firstRunPage = "https://pagetual.hoothin.com/firstRun"; + const wedataRulesUrl = "http://wedata.net/databases/AutoPagerize/items_all.json"; + const wedataMirrorRulesUrl = "https://hoothin.github.io/UserScripts/Pagetual/items_all.json"; const guidePage = /^https?:\/\/.*pagetual.*rule\.html/i; - const ruleImportUrlReg = /greasyfork\.org\/.*scripts\/438684(\-[^\/]*)?(\/discussions|\/?$|\/feedback)|github\.com\/hoothin\/UserScripts\/(tree\/master\/Pagetual|issues)/i; + const ruleImportUrlReg = /greasyfork\.org\/.*scripts\/438684(\-[^\/]*)?(\/discussions|\/?$|\/feedback)|github\.com\/hoothin\/UserScripts\/(tree\/master\/Pagetual|issues)|^https:\/\/pagetual\.hoothin\.com\/.*first(Run|-run)\.html/i; const allOfBody = "body>*"; - const mainSel = "article,.article,[role=main],main,.main,#main"; - const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u0020\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u003f\u0024\u007cВперед", "i"); - const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u4e2a\u500b\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u005c\u002d\u005f\u2014\u0020\u005c\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005c\u005b\u3010\u3001\uff08\u005c\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u005d\u007c\u0024\u0029", "i"); - const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; - _GM_registerMenuCommand(i18n("configure"), () => { - _GM_openInTab(rulesData.configPage || configPage[0], {active: true}); - }); - _GM_registerMenuCommand(i18n("editCurrent"), () => { - picker.start(); - }); + const mainSel = ["article,.article","[role=main],main,.main,#main","#results"]; + const nextTextReg1 = new RegExp("\u005e\u7ffb\u003f\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u2500\u0031\u005d\u003f\u005b\u9875\u9801\u5f20\u5f35\u005d\u007c\u005e\u006e\u0065\u0078\u0074\u005b\u005c\u0073\u005f\u002d\u005d\u003f\u0070\u0061\u0067\u0065\u005c\u0073\u002a\u005b\u203a\u003e\u2192\u00bb\u005d\u003f\u0024\u007c\u6b21\u306e\u30da\u30fc\u30b8\u007c\u005e\u6b21\u3078\u0024\u007c\u0412\u043f\u0435\u0440\u0435\u0434\u007c\u005e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435", "i"); + const nextTextReg2 = new RegExp("\u005e\u0028\u005b\u4e0b\u540e\u5f8c\u6b21\u005d\u005b\u4e00\u30fc\u2500\u0031\u005d\u003f\u005b\u7ae0\u8bdd\u8a71\u8282\u7bc0\u5e45\u005d\u007c\u006e\u0065\u0078\u0074\u002e\u003f\u0063\u0068\u0061\u0070\u0074\u0065\u0072\u0029\u0028\u005b\u003a\uff1a\u005c\u002d\u005f\u2014\u005c\u0073\u005c\u002e\u3002\u003e\u0023\u00b7\u005c\u005b\u3010\u3001\uff08\u005c\u0028\u002f\u002c\uff0c\uff1b\u003b\u2192\u005d\u007c\u0024\u0029", "i"); + const nextTextReg3 = /^(next\s*(»|>>|>|›|→|❯|\d+)?|>|▶|>|›|→|❯)\s*$/i; + const prevReg = new RegExp("\u005e\u005c\u0073\u002a\u0028\u005b\u4e0a\u524d\u9996\u5c3e\u005d\u007c\u0070\u0072\u0065\u0076\u007c\u0065\u006e\u0064\u0029", "i"); + const lazyImgAttr = ["data-lazy-src", "data-s", "data-lazy", "data-isrc", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"]; + var rulesData = {uninited: true, firstRun: true, sideController: !isMobile}, ruleUrls, updateDate, loadNowNum = 5, autoScrollRate = 50; + var isPause = false, manualPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, initAutoLoadNum = 0, nextIndex = 0, stopScroll = false, clickMode = false, openInNewTab = 0, charset = "UTF-8", charsetValid = true, urlWillChange = false, hidePageBar = false; + var tryTimes = 0, showedLastPageTips = false, rate = 1, author = ''; function getBody(doc) { return doc.body || doc.querySelector('body') || doc; } function getElementByXpath(xpath, doc, contextNode) { - doc = doc || document; + if (doc && doc.ownerDocument) doc = doc.ownerDocument; + doc = (doc && doc.evaluate) ? doc : document; contextNode = contextNode || doc; try { - let result = doc.evaluate(xpath, contextNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); - return result.singleNodeValue && result.singleNodeValue.nodeType === 1 && result.singleNodeValue; + let xpathNode = (s, d, n) => { + let result = d.evaluate(s, n, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null); + return result.singleNodeValue && result.singleNodeValue.nodeType === 1 && result.singleNodeValue; + }; + let selSplit = xpath.split(" =>> "); + if (selSplit.length === 2) { + let ele = xpathNode(selSplit[0], doc, contextNode); + if (ele && ele.shadowRoot) { + return xpathNode(selSplit[1], ele.shadowRoot, ele.shadowRoot); + } + } else { + return xpathNode(xpath, doc, contextNode); + } } catch (err) { debug(`Invalid xpath: ${xpath}`); } @@ -825,14 +4554,17 @@ } function getAllElementsByXpath(xpath, contextNode, doc) { - doc = doc || document; + if (doc && doc.ownerDocument) doc = doc.ownerDocument; + doc = (doc && doc.evaluate) ? doc : document; contextNode = contextNode || doc; var result = []; try { var query = doc.evaluate(xpath, contextNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < query.snapshotLength; i++) { var node = query.snapshotItem(i); - if (node.nodeType === 1) result.push(node); + if (node.nodeType === 1) { + result.push(node); + } } } catch (err) { debug(`Invalid xpath: ${xpath}`); @@ -841,12 +4573,18 @@ } function isXPath(xpath) { - if (!xpath) return false; + if (!xpath) { + return false; + } return /^\(*(descendant::|\.\/|\/|id\()/.test(xpath); } function getAllElements(sel, doc, contextNode) { try { + if (sel.indexOf(" =>> ") !== -1) { + let result = getElement(sel, doc, contextNode); + return result && [result]; + } if (!isXPath(sel)) { return doc.querySelectorAll(sel); } @@ -859,17 +4597,26 @@ function getElement(sel, doc, contextNode, bySort) { try { if (!isXPath(sel)) { + let checkShadow = s => { + let selSplit = s.split(" =>> "); + if (selSplit.length === 2) { + let ele = doc.querySelector(selSplit[0]); + return ele && ele.shadowRoot && ele.shadowRoot.querySelector(selSplit[1]); + } else return doc.querySelector(s); + }; if (!bySort) { - return doc.querySelector(sel); + return checkShadow(sel); } else { let selArr = sel.split(","); try { for (let i = 0; i < selArr.length; i++) { - let ele = doc.querySelector(selArr[i].trim()); - if (ele) return ele; + let ele = checkShadow(selArr[i].trim()); + if (ele) { + return ele; + } } } catch(e) { - return doc.querySelector(sel); + return checkShadow(sel); } return null; } @@ -880,13 +4627,26 @@ return getElementByXpath(sel, doc, contextNode); } - function geneSelector(ele, addID) { + function compareNodeName(node, names) { + if (!node || !node.nodeName || !node.nodeName.toLowerCase) { + return false; + } + let nodeName = node.nodeName.toLowerCase(); + for (let i = 0; i < names.length; i++) { + if (names[i] === nodeName) { + return true; + } + } + return false; + } + + function geneSelector(ele, addID, exact) { let selector = ele.nodeName.toLowerCase(); //Google id class都是隨機。百度更過分,style script順序都是隨機的 - if (selector != "html" && selector != "body") { + if (selector !== "html" && selector !== "body") { let hasId = false; if (addID && ele.id && /^[a-z_][\w\-_]*$/i.test(ele.id)) { - if (ele.ownerDocument && ele.ownerDocument.querySelectorAll("#" + ele.id).length == 1) { + if (ele.ownerDocument && ele.ownerDocument.querySelectorAll("#" + ele.id).length === 1) { hasId = true; selector = '#' + ele.id; } @@ -894,10 +4654,10 @@ if (!hasId) { let className = ""; if (ele.className) { - let classList = ele.classList, i = 0; + let classList = ele.classList; for (let i = 0; i < classList.length; i++) { let c = classList[i]; - if (/^[\w\-_]+$/.test(c) && !/\d{4,}/.test(c)) { + if (c !== 'scrolling' && /^[a-z_][\w\-_]*$/.test(c) && !/\d{4,}/.test(c)) { className += '.' + c; } } @@ -905,20 +4665,51 @@ } let parent = ele.parentElement; if (parent) { - selector = geneSelector(parent, addID) + ' > ' + selector; - if (!className && !hasId && parent.children.length > 1 && !/^HTML$/i.test(parent.nodeName)) { + if (exact) { let i, nth = 0, all = 0; for (i = 0; i < parent.children.length; i++) { - if (parent.children[i].nodeName == ele.nodeName) { + if (parent.children[i].nodeName === ele.nodeName) { all++; - if (parent.children[i] == ele) { + if (parent.children[i] === ele) { nth = all; } - if (nth > 0 && all > 1) break; + if (nth > 0 && all > 1) { + break; + } + } + } + selector += (all === 1 ? "" : `:nth-of-type(${nth})`); + } else if (!className && !hasId && parent.children.length > 1 && !compareNodeName(parent, ["html"])) { + let prevE = ele.previousElementSibling; + if (prevE && prevE.className) { + let classList = prevE.classList; + for (let i = 0; i < classList.length; i++) { + let c = classList[i]; + if (c !== 'scrolling' && /^[a-z_][\w\-_]*$/.test(c) && !/\d{4,}/.test(c)) { + className += '.' + c; + } } + if (className) { + selector = prevE.nodeName.toLowerCase() + className + "+" + selector; + } + } + if (!className) { + let i, nth = 0, all = 0; + for (i = 0; i < parent.children.length; i++) { + if (parent.children[i].nodeName === ele.nodeName) { + all++; + if (parent.children[i] === ele) { + nth = all; + } + if (nth > 0 && all > 1) { + break; + } + } + } + selector += (all === 1 ? "" : `:nth-of-type(${nth})`); } - selector += (all == 1 ? "" : `:nth-of-type(${nth})`); } + selector = geneSelector(parent, addID, exact) + ' > ' + selector; } } } @@ -927,18 +4718,22 @@ function createXPathFromElement(elm) { let allNodes = document.getElementsByTagName('*'), segs; - for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) { - if (/^(BODY|HTML)$/i.test(elm.nodeName)) { + for (segs = []; elm && elm.nodeType === 1; elm = elm.parentNode) { + if (compareNodeName(elm, ["body", "html"])) { segs.unshift(elm.localName.toLowerCase()); continue; } if (elm.hasAttribute && elm.hasAttribute('id')) { var uniqueIdCount = 0; for (var n = 0; n < allNodes.length; n++) { - if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++; - if (uniqueIdCount > 1) break; + if (allNodes[n].hasAttribute('id') && allNodes[n].id === elm.id) { + uniqueIdCount++; + } + if (uniqueIdCount > 1) { + break; + } } - if ( uniqueIdCount == 1) { + if ( uniqueIdCount === 1) { segs.unshift('id("' + elm.getAttribute('id') + '")'); return segs.join('/'); } else { @@ -949,7 +4744,9 @@ } else { let i, sib; for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) { - if (sib.localName == elm.localName) i++; + if (sib.localName === elm.localName) { + i++; + } } segs.unshift(elm.localName.toLowerCase() + '[' + i + ']'); } @@ -957,12 +4754,211 @@ return segs.length ? '/' + segs.join('/') : null; } - const escapeHTMLPolicy = (_unsafeWindow.trustedTypes && _unsafeWindow.trustedTypes.createPolicy) ? _unsafeWindow.trustedTypes.createPolicy('pagetual_default', { - createHTML: (string, sink) => string - }) : null; + function createHTML(html, doc) { + const targetDoc = doc || document; + const fragment = targetDoc.createDocumentFragment(); + if (html === null || html === undefined || html === '') return fragment; + parseHTMLToFragment(String(html), fragment, targetDoc); + return fragment; + } + let canDirectSetHTML = true; + let canPolicySetHTML = true; + let escapeHTMLPolicy; + let escapeHTMLCreator; + const MY_POLICY_NAME = 'pagetual_default'; + const SVG_NS = 'http://www.w3.org/2000/svg'; + const VOID_TAGS = { + area: true, + base: true, + br: true, + col: true, + embed: true, + hr: true, + img: true, + input: true, + link: true, + meta: true, + param: true, + source: true, + track: true, + wbr: true + }; + const RAW_TEXT_TAGS = { + script: true, + style: true, + textarea: true, + title: true, + xmp: true, + plaintext: true, + noscript: true + }; + const HTML_ENTITIES = { + amp: '&', + lt: '<', + gt: '>', + quot: '"', + apos: "'", + nbsp: '\u00A0' + }; + function decodeEntities(text) { + return text.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g, function(_, code) { + if (code[0] === '#') { + const isHex = code[1] === 'x' || code[1] === 'X'; + const num = parseInt(code.slice(isHex ? 2 : 1), isHex ? 16 : 10); + if (!isNaN(num)) { + try { return String.fromCodePoint(num); } catch(e) {} + } + return '&' + code + ';'; + } + const key = code.toLowerCase(); + return (key in HTML_ENTITIES) ? HTML_ENTITIES[key] : '&' + code + ';'; + }); + } + function parseHTMLToFragment(html, fragment, doc) { + const stack = [fragment]; + const tokenRe = /|]*>|<\/?[a-zA-Z][^>]*>|[^<]+/gi; + let match; + while ((match = tokenRe.exec(html))) { + const token = match[0]; + if (token[0] !== '<') { + const text = decodeEntities(token); + if (text) stack[stack.length - 1].appendChild(doc.createTextNode(text)); + continue; + } + if (token.indexOf('','');setTimeout(()=>{$('.top-bar-tool').removeAttr('style');$('.bottom-bar').removeAttr('style')},0)}function showtoolbar(){let t=ge('body.toolbar');if(t){$('body').removeClass('toolbar')}else{$('body').addClass('toolbar')}};document.addEventListener('click',showtoolbar);document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src});", + "nextLink": "//a[text()='下一章']", + "pageElement": "#cp_img", + "replaceElement": ".bottom-bar,.toast-win,head>title", + "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=ge('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{let m=document.title.match(/([^_]+)_([^_]+)/);let t=document.querySelector('.top-title');t.innerText=m[1].replace('漫畫','')+'_'+m[2];$('.bottom-bar').removeAttr('style')},100);", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", + "pageBarText": "let t=doc.querySelector('title');if(t)return t.innerText.match(/_(.+)_/)[1]" +}, +{ + "name": "Xmanhua - PC版閱讀", + "author": "skofkyo", + "example": "https://xmanhua.com/m10344/", + "url": "^https?://(www\\.)?xmanhua\\.com/m\\d+(-p\\d+)?/", + "include": ".reader-bottom-page-list", + "pinUrl": true, + "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img>img');if(set){clearInterval(loop);ge('#cp_img').innerHTML=ge('#cp_img>img').outerHTML;ge('#showimage').removeAttribute('style');}},100);function showtoolbar(){let t=ge('.header.toolbar');if(t){$('.header').removeClass('toolbar');$('.header').removeAttr('style')}else{$('.header').addClass('toolbar');$('.header').attr('style','top: -64px;')}let b=ge('.reader-bottom.toolbar');if(b){$('.reader-bottom').removeClass('toolbar');$('.reader-bottom').removeAttr('style')}else{$('.reader-bottom').addClass('toolbar');$('.reader-bottom').attr('style','bottom: -50px;')}};document.addEventListener('click',showtoolbar);function hidetoolbar(){var e=e||window.event;if(e.wheelDelta<0||e.detail>0){$('.header').addClass('toolbar');$('.header').attr('style','top: -64px;');$('.reader-bottom').addClass('toolbar');$('.reader-bottom').attr('style','bottom: -50px;')}else{$('.header').removeClass('toolbar');$('.header').removeAttr('style');$('.reader-bottom').removeClass('toolbar');$('.reader-bottom').removeAttr('style')}};document.addEventListener('wheel',hidetoolbar);document.addEventListener('DOMMouseScroll',hidetoolbar);function keyhidetoolbar(e){let key=window.event?e.keyCode:e.which;if(key=='34'||key=='32'||key=='40'){$('.header').addClass('toolbar');$('.header').attr('style','top: -64px;');$('.reader-bottom').addClass('toolbar');$('.reader-bottom').attr('style','bottom: -50px;')}else{$('.header').removeClass('toolbar');$('.header').removeAttr('style');$('.reader-bottom').removeClass('toolbar');$('.reader-bottom').removeAttr('style')}};document.addEventListener('keydown',keyhidetoolbar);", + "nextLinkByJs": "let m=doc.querySelector('.relative>a').innerText.match(/(\\d+)\\/(\\d+)/);let nc=doc.querySelector('img[src*=right-2]');if(m[1]!=m[2]){let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/XMANHUA_CURL/)>-1).innerHTML;let c=eval(code.match(/XMANHUA_CURL[^;]+/)[0]);let url=location.origin+c;let next=url.replace(/(-p\\d+)?\\/$/,'')+'-p'+(parseInt(m[1])+1)+'/';return next}else if(nc&&nc.parentNode){if(/javascript/.test(nc.parentNode.href)){return;}else{return nc.parentNode.href}}", + "pageElement": "#cp_img>img", + "replaceElement": ".container", + "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-p\\d+\\/$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", + "pageBarText": "let t=doc.querySelector('.reader-title>a:last-child');if(t)return t.innerText.trim()", + "rate": 5, + "css": ".container{width:auto!important}#cp_img img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.reader-img-con{padding:64px 0 50px !important;}" +}, +{ + "name": "Mangabz - PC版閱讀", + "author": "skofkyo", + "example": "https://www.mangabz.com/m38701/", + "url": "^https?://(www\\.)?mangabz\\.com/m\\d+(-p\\d+)?/", + "include": ".container", + "pinUrl": true, + "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img>img');if(set){clearInterval(loop);ge('#cp_img').innerHTML=ge('#cp_img>img').outerHTML}},100);function hidetoolbar(){var e=e||window.event;if(e.wheelDelta<0||e.detail>0){$('.top-bar').attr('style','top: -74px;')}else{$('.top-bar').removeAttr('style')}};document.addEventListener('wheel',hidetoolbar);document.addEventListener('DOMMouseScroll',hidetoolbar);function keyhidetoolbar(e){let key=window.event?e.keyCode:e.which;if(key=='34'||key=='32'||key=='40'){$('.top-bar').attr('style','top: -74px;')}else{$('.top-bar').removeAttr('style')}};document.addEventListener('keydown',keyhidetoolbar);", + "nextLinkByJs": "let m=doc.querySelector('[class^=bottom-page]').innerText.match(/(\\d+)-(\\d+)/);let nc=doc.querySelector('img[src*=xiayizhang]');if(m[1]!=m[2]){let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/MANGABZ_CURL/)>-1).innerHTML;let c=eval(code.match(/MANGABZ_CURL[^;]+/)[0]);let url=location.origin+c;let next=url.replace(/(-p\\d+)?\\/$/,'')+'-p'+(parseInt(m[1])+1)+'/';return next}else if(nc&&nc.parentNode){if(/javascript/.test(nc.parentNode.href)){return;}else{return nc.parentNode.href}}", + "pageElement": "#cp_img>img", + "replaceElement": ".container", + "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-p\\d+\\/$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", + "pageBarText": "let t=doc.querySelector('.top-title');if(t)return t.innerText.trim()", + "rate": 5, + "css": "a[href^='j']{display:none!important}.container{width:auto!important}#cp_img img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "Mangabz / Xmanhua - 分類", + "author": "skofkyo", + "example": "https://www.mangabz.com/manga-list-0-0-0/,https://xmanhua.com/manga-list-0-0-0/", + "url": "^https?://(www\\.)?(mangabz|xmanhua)\\.com/(manga-list|search)", + "nextLink": "//div[contains(@class,'page-pagination')]//a[contains(text(), '>')]", + "pageElement": "ul.mh-list", + "replaceElement": ".page-pagination", + "css": ".mh-list{padding-bottom:0px!important}.pagetual_pageBar+.mh-list{padding-top:10px!important}.pagetual_pageBar{margin-top:0px!important}" +}, +{ + "name": "動漫狂 - 閱讀", + "author": "skofkyo", + "example": "https://cc.fun8.us/post/438700022035001.html", + "url": "^https?://cc\\.fun8\\.us/post/\\d+\\.html", + "history": 2, + "init": "document.onkeydown=null;let ge=e=>document.querySelector(e);let imgDir=ge('img[onload],img[oncontextmenu]').src.match(/.+\\//)[0];let max=ge('.onpage').parentNode.lastElementChild.previousElementSibling.innerText;let F=new DocumentFragment();for(let i=1;i<=max;i++){let imgSrc=imgDir+String(i).padStart(3,'0')+'.jpg';let img=new Image();img.className='PagetualImg';img.src=imgSrc;F.appendChild(img)};let E=ge('img[oncontextmenu]').parentNode.parentNode;E.innerHTML='';E.appendChild(F);", + "nextLink": "//td[@width='150' and a[img[@src='/image/rad.gif']]]/a | //a[b]", + "pageElement": "//script[contains(text(),'googletag.display')]", + "replaceElement": "head>title", + "insert": "//td[img[@class='PagetualImg']] | //td[a[img[@oncontextmenu]]]", + "insertPos": 2, + "pageAction": "let docge=e=>doc.querySelector(e);let ge=e=>document.querySelector(e);let imgDir=docge('img[onload],img[oncontextmenu]').src.match(/.+\\//)[0];let max=docge('.onpage').parentNode.lastElementChild.previousElementSibling.innerText;let E=ge('.PagetualImg').parentNode;let F=new DocumentFragment();for(let i=1;i<=max;i++){let imgSrc=imgDir+String(i).padStart(3,'0')+'.jpg';let img=new Image();img.className='PagetualImg';img.src=imgSrc;F.appendChild(img)};E.appendChild(F);", + "pageBarText": "return doc.title", + "css": ".PagetualImg{max-width: 100% !important;display: block !important;margin: 0 auto !important;}td[valign='top'][width='160'],td[width='12'],select[name],body>table>tbody>tr:nth-child(5){display:none!important}" +}, +{ + "name": "動漫狂 - 分類", + "author": "skofkyo", + "example": "https://www.cartoonmad.com/hotrank.html", + "url": "^https?://www\\.cartoonmad\\.(cc|com)/(hotrank|topcm|newcm|comic\\d+)(\\.\\d+)?\\.html", + "nextLink": "a.onpage+a", + "pageElement": "//table[tbody/tr/td/table/tbody/tr/td/a/span[@class='covers']]", + "replaceElement": "td[align='right']>table:last-child", + "css": ".pagetual_pageBar{margin-bottom:0px!important}" +}, +{ + "name": "漫画人 / dm5 動漫屋 / 極速漫畫 - 手機版 - 漫畫在新分頁打開", + "author": "skofkyo", + "example": "https://m.dm5.com/", + "url": "^https?://(www\\.manhuaren|m\\.dm5|m\\.1kkk)\\.com/", + "exclude": [ + "#cp_img", + "#tempc" + ], + "init": "let openInNewTab=()=>document.querySelectorAll('.swiper-wrapper a:not([target=_blank]),.manga-list a:not([target=_blank]),.rank-list a:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});" +}, +{ + "name": "漫画人 / dm5 動漫屋 / 極速漫畫 - 手機版閱讀", + "author": "skofkyo", + "example": "https://www.manhuaren.com/manhua-list-s2/,https://www.manhuaren.com/m198122/,https://m.dm5.com/m1331307/,https://m.1kkk.com/ch1063-1331307/,https://m.1kkk.com/vol1-4761/", + "url": "^https?://(www|m)\\.(manhuaren|1kkk|dm5)\\.(com|cn)/(m|ch|vol|other)[-_0-9]+/$", + "exclude": ".view-paging", + "history": 2, + "pinUrl": true, + "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img img');if(set){clearInterval(loop);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML.slice(4,-1);let imgData=eval(eval(code).replace('var',''));let E=ge('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F)}},100)", + "nextLinkByJs": "let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let next=gx(\"//ul[@class='view-bottom-bar']//a[text()='下一章' and not(contains(@href,'-end'))]\");if(next)return location.origin+next.href.split(\"'\")[1]", + "pageElement": "#cp_img", + "replaceElement": "head>title,.view-fix-top-bar-title,ul.view-bottom-bar,.view-fix-bottom-bar", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML.slice(4,-1);let imgData=eval(eval(code).replace('var',''));let E=doc.querySelector('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let cs=gae('#cp_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let t=document.querySelector('body.toolbar');if(t){$('body').removeClass('toolbar')}else{$('body').addClass('toolbar')}});let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{gae('a[href*=pushHistory]').forEach(a=>{a.href=a.href.split(\"'\")[1]})},300);", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML.slice(4,-1);let imgSrcArr=eval(eval(code).replace('var',''));return imgSrcArr", + "pageBarText": "let t=doc.querySelector('title');if(t)return t.innerText.match(/_([^_]+)/)[1]", + "css": ".view-bottom-bar>li:nth-child(n+2):nth-child(-n+3),.view-fix-bottom-bar>a:nth-child(2),.guide{display:none!important}.view-bottom-bar li{width:50%!important}.view-fix-bottom-bar>a{width:25%!important}" +}, +{ + "name": "極速漫畫 - PC版單行本閱讀", + "author": "skofkyo", + "example": "https://www.1kkk.com/vol1-4761/", + "url": "^https?://(www|hk)\\.1kkk\\.com/vol[-_0-9]+/$", + "include": "#chapterpager", + "pinUrl": true, + "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img img');if(set){clearInterval(loop);document.body.style.overflow='scroll';ge('#cp_img').innerHTML='';let pcData=async(page)=>{if(page>DM5_IMAGE_COUNT){return}if(!mkey){var mkey=''}let apiUrl=location.href+'chapterfun.ashx'+`?cid=${DM5_CID}&page=${page}&key=${mkey}&language=1>k=6&_cid=${DM5_CID}&_mid=${DM5_MID}&_dt=${DM5_VIEWSIGN_DT}&_sign=${DM5_VIEWSIGN}`;let res=await fetch(apiUrl);let resText=await res.text();let imgSrc=await eval(resText)[0];let img=new Image();img.src=imgSrc;ge('#cp_img').appendChild(img);page++;pcData(page)};pcData(1)}},100)", + "nextLink": "//a[text()='下一章']", + "manualMode": true, + "css": "a[href^='j'],.chapterpager,.view-comment{display:none!important}#cp_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.container{width:auto!important}" +}, +{ + "name": "dm5 動漫屋 / 極速漫畫 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.dm5.com/m1331307/,https://www.1kkk.com/ch1063-1331307/", + "url": "^https?://(www|tel|en|cnc)?\\.?(dm5|1kkk)\\.(com|cn)/(m|ch)[-_0-9]+/$", + "include": "#chapterpager", + "pinUrl": true, + "init": "let ge=(e)=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img>img');if(set){clearInterval(loop);ge('body').removeAttribute('style');ge('#cp_img').innerHTML=ge('#cp_img>img').outerHTML}},100);", + "nextLinkByJs": "let ge=(e)=>doc.querySelector(e);let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let c=ge('.chapterpager>span.current').innerText;let m=ge('.chapterpager>*:last-child').innerText;let nc=gx(\"//a[text()='下一章']\");if(c!=m){let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/DM5_CURL/)>-1).innerHTML;let dc=eval(code.match(/DM5_CURL[^;]+/)[0]);let url=location.origin+dc;let next=url.replace(/(-p\\d+)?\\/$/,'')+'-p'+(parseInt(c)+1)+'/';return next}else if(nc){return nc.href}else{return null}", + "pageElement": "#cp_img>img", + "replaceElement": ".container", + "pageAction": "let gae=(e)=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-p\\d+\\/$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", + "pageBarText": "let t=doc.querySelector('.active');if(t)return t.innerText.trim()", + "rate": 10, + "css": "a[href^='j'],.chapterpager{display:none!important}#cp_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.container{width:auto!important}" +}, +{ + "name": "dm5 動漫屋 / 極速漫畫 - 分類", + "author": "skofkyo", + "example": "https://www.dm5.com/manhua-list/,https://www.1kkk.com/manhua-list/", + "url": "^https?://(www|tel|en|cnc|hk)?\\.?(dm5|1kkk)\\.(com|cn)/manhua-([a-z]+/|list-area|list-tag|list-char)", + "init": "document.querySelectorAll('.cat-filter a').forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 1000)')})", + "nextLink": "//a[text()=' > ']", + "pinUrl": true, + "pageElement": ".box-body", + "replaceElement": ".page-pagination" +}, +{ + "name": "無限動漫 - 動漫大全", + "author": "skofkyo", + "example": "https://www.8comic.com/list/all_all_all/", + "url": "^https?://www\\.8comic\\.com/list/", + "nextLink": "//a[span/@class='mdi mdi-skip-next']", + "pageElement": "a.comicpic_col6", + "replaceElement": ".pager" +}, +{ + "name": "無限動漫 - 分類", + "author": "skofkyo", + "example": "https://www.8comic.com/comic/u-1.html", + "url": "^https?://www\\.8comic\\.com/comic/[a-z0-9-]+\\.html", + "nextLink": "//a[span/@class='mdi mdi-skip-next']", + "pageElement": ".row>div:has(>div.cat2_list)", + "replaceElement": ".pager", + "css": ".pagetual_pageBar{margin-top:-14px!important}" +}, +{ + "name": "無限動漫 - 圖庫原圖瀏覽", + "author": "skofkyo", + "example": "https://www.8comic.com/photo/p6041.html?n=1", + "url": "^https?://www\\.8comic\\.com/photo/p[0-9-]+\\.html\\?n=\\d+$", + "init": "let total=document.querySelectorAll('#pageindex option').length;let imgSrc=new URL(document.querySelector('#TheImg').src).pathname;let html='';for(let i=1;i<=total;i++){let num=String(i).padStart(3,'0');let src=imgSrc.replace(/(\\d+)(\\.\\w)$/,`${num}$2`);html+=``}document.querySelector('.photo_main_div').innerHTML=html;", + "css": "#TheImg{margin:2px auto;display:block}", + "pinUrl": true +}, +{ + "name": "無限動漫 - 圖庫清單載入大圖", + "author": "skofkyo", + "example": "https://www.8comic.com/photo/6041.html", + "url": "^https?://www\\.8comic\\.com/photo/\\d+\\.html$", + "init": "document.querySelectorAll('#dl img').forEach(img=>{let f=img.src.replace('.jpe','.jpg');img.src=f})", + "pinUrl": true +}, +{ + "name": "無限動漫 - 圖庫分類", + "author": "skofkyo", + "example": "https://www.8comic.com/photo/3-1.html", + "url": "^https?://www\\.8comic\\.com/photo/[0-9-]+\\.html$", + "nextLink": "a:has(>.mdi-skip-next)", + "pageElement": ".row:has(>div>.cat2_list)", + "replaceElement": ".pager" +}, +{ + "name": "無限動漫 - 類別停止自動匹配", + "author": "skofkyo", + "example": "https://www.8comic.com/html/1/", + "url": "^https?://www\\.8comic\\.com/html/\\d+/$", + "enable": 0 +}, +{ + "name": "砂之船动漫家 - 手機版閱讀", + "author": "skofkyo", + "example": "https://www.szcdmj.com/szcchapter/736400", + "url": "^https?://www\\.szcdmj\\.com/szcchapter/\\d+(\\?page=\\d+)?", + "include": ".view-bottom-bar", + "history": 2, + "pinUrl": true, + "nextLink": "//a[@href][text()='下一页' or text()='下一话']", + "pageElement": "#cp_img>img", + "replaceElement": ".view-bottom-bar,.view-fix-top-bar,.view-fix-bottom-bar", + "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/page=/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", + "pageBarText": "let t=doc.querySelector('.view-fix-top-bar-title');if(t)return t.innerText", + "css": ".view-bottom-bar>li:nth-child(n+3):nth-child(-n+4),.view-fix-bottom-bar-item:nth-child(n+4):nth-child(-n+5){display:none!important}.view-fix-bottom-bar-item,.view-bottom-bar>li{width:33.33%!important}" +}, +{ + "name": "砂之船动漫家 / 土豪漫画 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.szcdmj.com/szcchapter/736400,https://7hxy.com/chapter/968191?page=8&id=968191", + "url": "^https?://(www\\.)?(szcdmj|7hxy)\\.com/\\w{0,5}chapter/\\d+", + "include": ".read-section", + "history": 2, + "pinUrl": true, + "nextLink": "//a[@href][text()='下一页' or text()='下一话' or text()='下一章']", + "pageElement": ".comiclist>.comicpage", + "replaceElement": ".fanye", + "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/page=/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('.comiclist>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", + "pageBarText": "let t=doc.querySelector('.title');if(t)return t.innerText.match(/\\s(.+)/)[1]", + "css": ".comiclist img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "砂之船动漫家 - 分類", + "author": "skofkyo", + "example": "https://www.szcdmj.com/szcbolist", + "url": "^https?://www\\.szcdmj\\.com/szcbolist", + "nextLink": "#nextPage,a[title='下一页'],li.active+li>a", + "pageElement": ".mh-list,.manga-list>ul", + "replaceElement": ".pagination", + "pageAction": "document.querySelectorAll('.mh-cover').forEach(e=>{e.style=e.getAttribute('style')})", + "css": ".mh-list+.pagetual_pageBar{margin-top:20px!important}.manga-list-2-cover-img{opacity: 1!important}" +}, +{ + "name": "来漫画 - 手機版閱讀", + "author": "skofkyo", + "example": "https://m.laimanhua88.com/kanmanhua/kaijujiangliyiyitiaoming/1684241122.html", + "url": "^https?://m\\.laimanhua88\\.com/kanmanhua/\\w+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let E=ge('#manga');let F=new DocumentFragment();json.images.forEach(e=>{let img=new Image();img.src=realurl+json.path+e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let next=json.nextUrlid;if(next>0)return location.href.replace(/\\d+\\.html$/,'')+next+'.html';", + "pageElement": "#manga", + "replaceElement": "head>title,#mangaTitle", + "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let E=ge('#manga');let F=new DocumentFragment();json.images.forEach(e=>{let img=new Image();img.src=realurl+json.path+e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#manga');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let imgSrcArr=[];json.images.forEach(e=>{let imgSrc=realurl+json.path+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('#mangaTitle');if(t)return t.innerHTML.replace(/.+<.+>/g,'').trim()", + "css": ".action-list li{width:50%!important}#action>ul>li:nth-child(n+2):nth-child(-n+3),.manga-page,[id^='jusha']{display:none!important}.manga-box img{border-top:0px!important;border-bottom:0px!important}" +}, +{ + "name": "来漫画 - 閱讀", + "author": "skofkyo", + "example": "https://www.laimanhua88.com/kanmanhua/kaijujiangliyiyitiaoming/1684241122.html", + "url": "^https?://www\\.laimanhua88\\.com/kanmanhua/\\w+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/picTree/)>-1).innerHTML;let base64=eval(code.match(/picTree[^;]+/)[0]);let imgData=base64_decode(base64).split('$qingtiandy$');let host=getpicdamin();let E=ge('#pic-list');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=encodeURI(host+e);F.appendChild(img)});E.innerHTML='';E.appendChild(F);$('head').append('')", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextUrlid/)>-1).innerHTML;let next=eval(code.match(/nextUrlid[^,]+/)[0]);if(next>0)return location.href.replace(/\\d+\\.html$/,'')+next+'.html'", + "pageElement": "#pic-list", + "replaceElement": "head>title,h1,#position>b", + "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/picTree/)>-1).innerHTML;let base64=eval(code.match(/picTree[^;]+/)[0]);let imgData=base64_decode(base64).split('$qingtiandy$');let host=getpicdamin();let E=ge('#pic-list');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=encodeURI(host+e);F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/picTree/)>-1).innerHTML;let base64=eval(code.match(/picTree[^;]+/)[0]);let imgData=base64_decode(base64).split('$qingtiandy$');let host=getpicdamin();let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=encodeURI(host+e);imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('#position>b');if(t)return t.innerText", + "css": ".img_info{display:none!important}#pic-list>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}.pagetual_pageBar+.img-box{margin-top:0px!important}" +}, +{ + "name": "古风漫画网 - 手機版閱讀", + "author": "skofkyo", + "example": "https://m.gufengmh9.com/manhua/wokeyiwuxianzhaohuan/2042963.html", + "url": "^https?://m\\.gufengmh\\d?\\.com/manhua/[a-z]+/\\d+\\.html", + "history": 2, + "pinUrl": true, + "init": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);ge('body>div:nth-child(1)').innerHTML=ge('#panel-title').innerHTML;ge('.iconRet').href=comicUrl;gae('.beforeChapter,.afterChapter').forEach(e=>{e.removeAttribute('onclick')});let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);if(next.id>0){gae('.afterChapter').forEach(e=>{e.href=comicUrl+next.id+'.html'})}else{gae('.afterChapter').forEach(e=>{e.href=comicUrl;})}if(prev.id>0){gae('.beforeChapter').forEach(e=>{e.href=comicUrl+prev.id+'.html'})}", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return comicUrl+next.id+'.html'", + "pageElement": "#images", + "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);if(next.id>0){gae('.afterChapter').forEach(e=>{e.href=comicUrl+next.id+'.html'})}else{gae('.afterChapter').forEach(e=>{e.href=comicUrl;})}if(prev.id>0){gae('.beforeChapter').forEach(e=>{e.href=comicUrl+prev.id+'.html'})}", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=imghost+imgPath+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.trim()", + "css": "#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body>div:nth-child(1) .iconRet{position:absolute;left:0px;width:45px;height:45px;top:-3px;display:block;background:url(https://m.gufengmh.com/assets/f0660635/images/bg_icon_ret.png) no-repeat 20px 14px;background-size:9px 17px}" +}, +{ + "name": "古风漫画网 - 手機版分類", + "author": "skofkyo", + "example": "https://m.gufengmh9.com/update/", + "url": "^https?://m\\.gufengmh\\d?\\.com/", + "nextLink": ".pagination li.active+li>a", + "pageElement": "//div[@class='UpdateList'] | //ul[li[@class='list-comic']]", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar+.UpdateList{margin-top:0px!important}" +}, +{ + "name": "古风漫画网 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.gufengmh9.com/manhua/yuanlaiwoshixianjiezhizun/2053294.html", + "url": "^https?://www\\.gufengmh\\d?\\.com/manhua/[a-z]+/\\d+\\.html", + "history": 2, + "pinUrl": true, + "autoClick": "#chapter-pagination:not(.active)", + "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return comicUrl+next.id+'.html'", + "pageElement": "#images", + "replaceElement": "h2,.wrap_last_head,.wrap_last_mid", + "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);if(next.id>0){gae('.nextC').forEach(e=>{e.href=comicUrl+next.id+'.html'})}else{gae('.nextC').forEach(e=>{e.href=comicUrl;e.style.display='none';})}if(prev.id>0){gae('.prevC').forEach(e=>{e.href=comicUrl+prev.id+'.html'})}", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=imghost+imgPath+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", + "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" +}, +{ + "name": "优酷漫画手機版 - 閱讀", + "author": "skofkyo", + "example": "http://m.ykmh.net/manhua/DrSTONEshijiyuan/2456.html", + "url": "^https?://m\\.ykmh\\.net/manhua/[a-z]+/\\d+\\.html", + "history": 2, + "pinUrl": true, + "init": "$('#images').unbind('click',SinTheme.nextPage);$('#images').unbind('mousedown');let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgs=eval(code.match(/chapterImages[^;]+/)[0]);let host=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+/)[0];let F=new DocumentFragment();imgs.forEach(e=>{let img=new Image();img.src=host+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url;", + "pageElement": "#images", + "replaceElement": "head>title,.BarTit", + "pageInit": "let ge=e=>document.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgs=eval(code.match(/chapterImages[^;]+/)[0]);let host=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+/)[0];let F=new DocumentFragment();imgs.forEach(e=>{let img=new Image();img.src=host+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let n=ge('#action>ul>li:nth-child(4)>a');let n2=ge('.afterChapter');if(next.id>0){n.href=next.uri;n2.outerHTML=`下一章>`}else{n.removeAttribute('href');n.innerText='無下一章';n2.outerHTML=`無下一章`}let prev=eval(code.match(/prevChapterData[^;]+/)[0]);let p=ge('#action>ul>li:nth-child(1)>a');let p2=ge('.beforeChapter');if(prev.id>0){p.href=prev.uri;p2.outerHTML=`<上一章`}", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgs=eval(code.match(/chapterImages[^;]+/)[0]);let host=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+/)[0];let imgSrcArr=[];imgs.forEach(e=>{let imgSrc=host+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerHTML.match(/\\n?([^<]+)/)[1]", + "css": ".subHeader span,#action>ul>li:nth-child(n+2):nth-child(-n+3),.letchepter>section,.letchepter>svg,i~div[id][class],body>span~div:not(#pagetual-preload):not(.pagetual_tipsWords),.comic-comment{display:none!important}.action-list li{width:50%!important}.chapter-view #images img{margin:0 auto 0px!important}" +}, +{ + "name": "优酷漫画 - PC版閱讀", + "author": "skofkyo", + "example": "http://www.ykmh.net/manhua/DrSTONEshijiyuan/2457.html", + "url": "^https?://www\\.ykmh\\.net/manhua/[a-z]+/\\d+\\.html", + "history": 2, + "pinUrl": true, + "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);", + "nextLink": ".next>a", + "pageElement": "#images", + "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=imghost+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.head_wz');if(t)return t.innerHTML.replace(/.+;/,'')", + "pageNum": "{$p}\\.html$", + "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" +}, +{ + "name": "漫画456 - 手機版閱讀", + "author": "skofkyo", + "example": "https://m.manhua456.com/manhua/moliwuxiandezuiqiangmonvyongchuangzaomofazaiyishijieyouzaishenghuo/537951.html", + "url": "^https?://m\\.manhua456\\.com/manhua/\\w+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "init": "jQuery('#images').off();let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#images img');if(set){clearInterval(loop);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih = eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F)}},200)", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", + "pageElement": "#images", + "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih = eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=ih+cp+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.trim()", + "css": "#page-info,#action li:nth-child(2),#action li:nth-child(3),.control_bottom~*:not(.pagetual_tipsWords),.chapter-view~*:not(.pagetual_tipsWords),#loading{display:none!important}#action li{width:50%!important}.chapter-view>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "漫画456 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.manhua456.com/manhua/wodeshifumeidaodaxiancaitupo/766673.html", + "url": "^https?://www\\.manhua456\\.com/manhua/[a-z]+/\\d+\\.html", + "history": 2, + "pinUrl": true, + "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#images img');if(set){clearInterval(loop);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih;if(SinConf.resHost1){ih=SinConf.resHost1+'/'}else{ih=SinMH.getResHostDomain()+'/'}let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='.comic_wraCon>#images:nth-child(1)>img:nth-child('+imgData.length+')~*{display: none!important}';ge('head').appendChild(style)}},200)", + "nextLink": ".next>a", + "pageElement": "#images", + "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid", + "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih;if(SinConf.resHost1){ih=SinConf.resHost1+'/'}else{ih=SinMH.getResHostDomain()+'/'}let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih;if(SinConf.resHost1){ih=SinConf.resHost1+'/'}else{ih=SinMH.getResHostDomain()+'/'}let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=ih+cp+e;imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.head_wz');if(t)return t.innerHTML.replace(/.+;/,'')", + "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span,.block.clearfix{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" +}, +{ + "name": "古风漫画网 / 优酷漫画 / 亲亲漫画 / 漫画456 - 分類", + "author": "skofkyo", + "example": "www.gufengmh9.com,www.ykmh.com,www.acgvd.com,www.manhua456.com", + "url": "^https?://www\\.(gufengmh\\d?|ykmh|acg(w|u|q|v)d|manhua456)\\.com/", + "nextLink": "li.next>a", + "pageElement": "li.item-lg,.list-comic", + "replaceElement": "ul.pagination", + "css": ".pagetual_pageBar{margin-top:-30px!important;margin-bottom:10px!important}" +}, +{ + "name": "动漫啦 - 手機版閱讀", + "author": "skofkyo", + "example": "https://m.dongman.la/manhua/chapter/5985/54979/", + "url": "^https?://m\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", + "history": 2, + "pinUrl": true, + "action": 1, + "wait": 1000, + "init": "let gae=e=>document.querySelectorAll(e);let _img='';gae('img[data-src]').forEach(e=>{_img+=``});let loop=setInterval(()=>{let set=gae('.chapter-images img')[0];if(set){clearInterval(loop);gae('.chapter-images')[0].innerHTML=_img}},200)", + "nextLink": "//a[label[text()='下一章']][starts-with(@href,'http')]", + "pageElement": ".chapter-images", + "replaceElement": "//head/title | //a[@class='mdui-typo-title'] | //div[@class='main']/following-sibling::footer[1]//a", + "pageInit": "let gae=e=>doc.querySelectorAll(e);let _img='';gae('img[data-src]').forEach(e=>{_img+=``});gae('.chapter-images')[0].innerHTML=_img", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.chapter-images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "pageBarText": "let t=doc.querySelector('.mdui-typo-title');if(t)return t.innerText", + "css": ".chapter-images>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "动漫啦 - PC版閱讀 - 单页滚动模式 - 雙擊下一章,鍵盤左右鍵上下章", + "author": "skofkyo", + "example": "https://www.dongman.la/manhua/chapter/5985/54979/1.html", + "url": "^https?://www\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", + "include": "//a[text()='分页查看模式 ']", + "pinUrl": true, + "init": "document.querySelectorAll(\"a[href*='m.d']\").forEach(a=>{a.href=a.href.replace('/m.','/www.')});function gx(x){return document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue};function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=gx(\"//a[label[text()='上一章']][starts-with(@href,'http')]\");if(p){p.click()}else{alert('沒有上一章了!')}}};document.addEventListener('keydown',prev);function dcnext(){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}};document.addEventListener('dblclick',dcnext);", + "manualMode": true, + "css": ".pagetual_tipsWords{display:none!important}" +}, +{ + "name": "动漫啦 - PC版閱讀 - 分页查看模式 - 雙擊下一章,鍵盤左右鍵上下章", + "author": "skofkyo", + "example": "https://www.dongman.la/manhua/chapter/5985/54979/1.html", + "url": "^https?://www\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", + "include": "//a[text()='单页滚动模式 ']", + "init": "document.querySelectorAll(\"a[href*='m.d']\").forEach(a=>{a.href=a.href.replace(\"/m.\",'/www.')});setTimeout(()=>{let link=document.querySelector('.imgListBox>a');link.removeAttribute('href')},100);function gx(x){return document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue};function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=gx(\"//a[label[text()='上一章']][starts-with(@href,'http')]\");if(p){p.click()}else{alert('沒有上一章了!')}}};document.addEventListener('keydown',prev);function dcnext(){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}};document.addEventListener('dblclick',dcnext);", + "nextLink": ".imgListBox>a[href^='http']", + "pageElement": ".imgListBox img", + "replaceElement": "button.prePic,button.nextPic", + "css": "a.mdui-btn.mdui-btn-icon,button.prePic,button.nextPic,button.allBtn{display:none!important}.mdui-container{width:100%!important;padding:0px!important}.imgListBox img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto!important}.pagetual_tipsWords{display:none!important}" +}, +{ + "name": "动漫啦 - 分類", + "author": "skofkyo", + "example": "https://www.dongman.la/manhua/oumei/2.html", + "url": "^https?://www\\.dongman\\.la/", + "include": ".NewPages", + "pinUrl": true, + "nextLink": "//a[text()='下一页']", + "pageElement": ".cy_list_mh", + "replaceElement": ".NewPages" +}, +{ + "name": "漫画160 - 手機版閱讀", + "author": "skofkyo", + "example": "https://m.mh160mh.com/kanmanhua/yuanlaiwoshixianjiezhizun/1689580801.html", + "url": "^https?://m\\.mh160mh\\.com/kanmanhua/\\w+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=document.querySelector('#commicBox');E.innerHTML='';E.appendChild(F);", + "nextLink": "#k_Pic_nextArr[href$='html']", + "pageElement": "#commicBox", + "replaceElement": ".BarTit,#action", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=doc.querySelector('#commicBox');E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#commicBox');if(c.length>10){c[0].parentNode.remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=f_qTcms_Pic_curUrl_realpic(e);imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.match(/[^\\(]+/)[0].trim()", + "css": "#commicBox>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.action-list li{width:50%!important}#action>ul>li:nth-child(n+2):nth-child(-n+3){display:none!important}" +}, +{ + "name": "漫画160 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.mh160mh.com/kanmanhua/tianqiyubao/1668716868.html", + "url": "^https?://www\\.mh160mh\\.com/kanmanhua/\\w+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=document.querySelector('#qTcms_Pic_middle').parentNode;E.innerHTML='';E.appendChild(F);", + "nextLink": "#k_Pic_nextArr[href$='html']", + "pageElement": ".cf:not([id])", + "replaceElement": "head>title,.title>h2,.main-btn,#pager", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=doc.querySelector('#qTcms_Pic_middle').parentNode;E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.cf:not([id])');if(c.length>10){c[0].parentNode.remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=f_qTcms_Pic_curUrl_realpic(e);imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", + "css": "#subNav,#prev,#k_next,#k_pageSelect,#pager,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}.cf>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "漫画160 - 分類", + "author": "skofkyo", + "example": "www.mh160mh.com", + "url": "^https?://www\\.mh160mh\\.com/", + "nextLink": "//a[text()='下一页'] | //li[a[@class='active']]/following-sibling::li[1]/a", + "pageElement": ".cy_list_r,.grid-row.clearfix,#dmList,#contList,[class^='bookList'],.mh-search-list", + "replaceElement": ".NewPages,.pager,.page_moreDiv", + "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:0px!important}.mh-search-list+.pagetual_pageBar{display:none!important}" +}, +{ + "name": "动漫之家 - 手機版 - 漫畫在新分頁打開", + "author": "skofkyo", + "example": "https://m.idmzj.com/", + "url": "^https?://m\\.i?dmzj\\.com/", + "exclude": [ + "div[id^='charpet']", + "#list" + ], + "init": "let openInNewTab=()=>document.querySelectorAll('.main_image a[href]:not([target=_blank]),.imgBox a[href]:not([target=_blank]),.UpdateList a[href]:not([target=_blank]),.topicList a[href]:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});" +}, +{ + "name": "动漫之家手機版 - 閱讀", + "author": "skofkyo", + "example": "https://m.idmzj.com/view/60351/119828.html", + "url": "^https?://m\\.i?dmzj\\.com/view/\\d+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "init": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);ge('.iconRet').setAttribute('onclick','goBack();');gae('.letchepter>a[onclick]').forEach(a=>{a.removeAttribute('onclick')});let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/comic_id/)>-1).innerHTML.replaceAll('\"','');let n=code.search(/next_chap/);let p=code.search(/prev_chap/);let cm=code.match(/comic_id:(\\d+)/)[1];if(n>-1){let nm=code.match(/next_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+nm+'.html';ge('.afterChapter').href=url}else{ge('.afterChapter').href=ge('.ChapterLestMune').href}if(p>-1){let pm=code.match(/prev_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+pm+'.html';ge('.beforeChapter').href=url}else{ge('.beforeChapter').href=ge('.ChapterLestMune').href}", + "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/comic_id/)>-1).innerHTML.replaceAll('\"','');let n=code.search(/next_chap/);if(n>-1){let cm=code.match(/comic_id:(\\d+)/)[1];let nm=code.match(/next_chap_id:(\\d+)/)[1];return location.origin+'/view/'+cm+'/'+nm+'.html'}", + "pageElement": "div[id^='charpet']", + "replaceElement": "head>title,a.BarTit,.botNav .tc", + "pageInit": "let ge=e=>doc.querySelector(e);let gae=e=>doc.querySelectorAll(e);ge('.iconRet').setAttribute('onclick','goBack();');gae('.letchepter>a[onclick]').forEach(a=>{a.removeAttribute('onclick')});let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/comic_id/)>-1).innerHTML.replaceAll('\"','');let n=code.search(/next_chap/);let p=code.search(/prev_chap/);let cm=code.match(/comic_id:(\\d+)/)[1];if(n>-1){let nm=code.match(/next_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+nm+'.html';ge('.afterChapter').href=url}else{ge('.afterChapter').href=ge('.ChapterLestMune').href}if(p>-1){let pm=code.match(/prev_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+pm+'.html';ge('.beforeChapter').href=url}else{ge('.beforeChapter').href=ge('.ChapterLestMune').href}", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('div[id^=charpet]');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/initData/)>-1).innerHTML;let imgSrcArr=eval(code.match(/page_url.+(\\[.+\\])/)[1]);return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText", + "css": "#commicBox img{opacity:1!important}#m_r_panelbox,#khdDown,#divAD,.appTil{display:none!important}" +}, +{ + "name": "漫画DB - 閱讀", + "author": "skofkyo", + "example": "https://www.manhuadb.com/manhua/1167/1315_13028.html", + "url": "^https?://www\\.manhuadb\\.com/manhua/\\d+/\\w+\\.html", + "pinUrl": true, + "history": 2, + "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.replace('var',''));let imgData=eval(atob(Base64));let vgrdata=document.querySelector('.vg-r-data');let imgHost=vgrdata.getAttribute('data-host');let imgPre=vgrdata.getAttribute('data-img_pre');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.className='img-fluid show-pic';if(is_webp!=1&&e.img_webp){img.src=imgHost+imgPre+e.img_webp}else{img.src=imgHost+imgPre+e.img}F.appendChild(img)});let E=document.querySelector('#all');E.innerHTML='';E.appendChild(F);", + "nextLinkByJs": "return new Promise((resolve)=>{let v=doc.querySelector('.vg-r-data');let n=v.dataset.num;$.ajax({type:'post',url:'/book/goNumPage',data:{ccid:v.dataset.ccid,id:v.dataset.id,num:parseInt(n)+1,d:v.dataset.d,type:'next'},dataType:'json',success:function(json){if(json.state==0){resolve(null)}else{let url=json.url;resolve(location.origin+url)}}})}).then((res)=>{return res});", + "pageElement": "#all", + "replaceElement": "head>title,.h4.text-center,ol.breadcrumb", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.replace('var',''));let imgData=eval(atob(Base64));let vgrdata=doc.querySelector('.vg-r-data');let imgHost=vgrdata.getAttribute('data-host');let imgPre=vgrdata.getAttribute('data-img_pre');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.className='img-fluid show-pic';if(is_webp!=1&&e.img_webp){img.src=imgHost+imgPre+e.img_webp}else{img.src=imgHost+imgPre+e.img}F.appendChild(img)});let E=doc.querySelector('#all');E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#all');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.replace('var',''));let imgData=eval(atob(Base64));let vgrdata=doc.querySelector('.vg-r-data');let imgHost=vgrdata.getAttribute('data-host');let imgPre=vgrdata.getAttribute('data-img_pre');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc;if(is_webp!=1&&e.img_webp){imgSrc=imgHost+imgPre+e.img_webp}else{imgSrc=imgHost+imgPre+e.img}imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.h4.text-center');if(t)return t.innerText", + "css": "nav.d-none+div.row,#left,#right,.pagination .form-inline>*:nth-child(n+2):nth-child(-n+4){display:none!important}.row>*{padding:0px!important}#all,img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "漫画DB - 分類", + "author": "skofkyo", + "example": "https://www.manhuadb.com/manhua/list-r-4-a-4-c-12.html", + "url": "^https?://www\\.manhuadb\\.com/manhua/list", + "nextLink": "a[title='下一页']", + "pageElement": ".comic-main-section>*", + "replaceElement": ".pagination" +}, +{ + "name": "動漫戲說 - 漫畫閱讀", + "author": "skofkyo", + "example": "https://comic.acgn.cc/view-202.htm", + "url": "^https?://comic\\.acgn\\.cc/view-", + "history": 2, + "pinUrl": true, + "action": 1, + "init": "let ge=e=>document.querySelector(e);let c=ge('.tbCenter>tbody').cloneNode(true);ge('.tbCenter').appendChild(c);let F=new DocumentFragment();document.querySelectorAll('.pic[_src][id]').forEach(e=>{let img=new Image();img.src=e.getAttribute('_src');F.appendChild(img)});let E=ge('#pic_list');E.innerHTML='';E.appendChild(F);", + "nextLink": "#next_chapter", + "pageElement": "#pic_list", + "replaceElement": "#top,#breadcrumb,[class^='display_'],head>title", + "pageInit": "let F=new DocumentFragment();doc.querySelectorAll('.pic[_src][id]').forEach(e=>{let img=new Image();img.src=e.getAttribute('_src');F.appendChild(img)});let E=doc.querySelector('#pic_list');E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pic_list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{let ge=e=>document.querySelector(e);ge('.tbCenter>tbody:last-child').outerHTML=ge('.tbCenter>tbody').outerHTML},200)", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let imgSrcArr=[];doc.querySelectorAll('.pic[_src][id]').forEach(e=>{let imgSrc=e.getAttribute('_src');imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText", + "css": ".btn_wrap,#ss-toolbar{display:none!important}#pic_list>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "動漫戲說 - 分類", + "author": "skofkyo", + "example": "https://comic.acgn.cc/cate-1.htm", + "url": "^https?://comic\\.acgn\\.cc/", + "nextLink": "a[rel='next']", + "pageElement": "ul#display", + "replaceElement": "#pagination", + "css": ".pagetual_pageBar{margin-bottom:0px!important}" +}, +{ + "name": "新新漫画 - 閱讀 - 沒有顯示圖片時需要換服務器", + "author": "skofkyo", + "example": "https://www.77mh.xyz/202102/481169.html,http://m.77mh.xyz/202102/481169.html", + "url": "^https?://(www|m)\\.77mh\\.[a-z]{2,3}/\\d+/\\d+\\.html", + "history": 2, + "pinUrl": true, + "action": 1, + "wait": "return ('ImgSvrList' in doc.defaultView && ImgSvrList != '' || 'img_qianz' in doc.defaultView) && img_qianz != ''", + "init": "let ge=e=>document.querySelector(e);let code=eval(Array.from(document.scripts).find(s=>s.innerHTML.search(/msg/)>-1).innerHTML.trim().slice(4));let imgData=eval(code.match(/msg[^;]+/)[0]).split('|');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.hostname.indexOf('m.77mh')!=-1){img.src=ImgSvrList+e}else{img.src=img_qianz+e}F.appendChild(img)});if(location.hostname.indexOf('m.77mh')!=-1){let E=ge('.mg-co');E.innerHTML='';E.appendChild(F)}else{let E=ge('#comicImg');E.innerHTML='';E.appendChild(F)}", + "nextLinkByJs": "let code=eval(Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextLink_b/)>-1).innerHTML.trim().slice(4));let next=eval(code.match(/nextLink_b[^;]+/)[0]);if(next.indexOf('html')!=-1)return location.origin+next", + "pageElement": "#comicImg,.mg-co", + "replaceElement": "head>title,#subTitle>h1,#pnpage,.page_num,.nav.nav-back", + "pageInit": "let ge=e=>doc.querySelector(e);let code=eval(Array.from(doc.scripts).find(s=>s.innerHTML.search(/msg/)>-1).innerHTML.trim().slice(4));let imgData=eval(code.match(/msg[^;]+/)[0]).split('|');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.hostname.indexOf('m.77mh')!=-1){img.src=ImgSvrList+e}else{img.src=img_qianz+e}F.appendChild(img)});if(location.hostname.indexOf('m.77mh')!=-1){let E=ge('.mg-co');E.innerHTML='';E.appendChild(F)}else{let E=ge('#comicImg');E.innerHTML='';E.appendChild(F)}", + "pageAction": "let gae=e=>document.querySelectorAll(e);if(location.hostname.indexOf('m.77mh')!=-1){let m=gae('.mg-co');if(m.length>10){gae('.mg-co')[0].remove()}}else{let c=gae('#comicImg');if(c.length>10){gae('#comicImg')[0].remove()}}let p=gae('.pagetual_pageBar');if(p.length>10){gae('.pagetual_pageBar')[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=eval(Array.from(doc.scripts).find(s=>s.innerHTML.search(/msg/)>-1).innerHTML.trim().slice(4));let imgData=eval(code.match(/msg[^;]+/)[0]).split('|');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc;if(location.hostname.indexOf('m.77mh')!=-1){imgSrc=ImgSvrList+e}else{imgSrc=img_qianz+e}imgSrcArr.push(imgSrc)});return imgSrcArr", + "pageBarText": "let t1=doc.querySelector('h1>a');let t2=doc.querySelector('.tit>a');if(t1){return t1.innerText.replace(/\\S+/,'').trim()}else if(t2){return t2.innerText.replace(/\\S+/,'').trim()}", + "css": "#main>*:not(#comicImg):not(.pagetual_pageBar),.qrcode_div,.content~*:not(#toApp),body>p{display:none!important}#comicImg>img,.mg-co>img{max-width:100%!important;display:block!important;margin: 0 auto !important;border:0px!important;}" +}, +{ + "name": "新新漫画手機版 - 分類", + "author": "skofkyo", + "example": "http://m.77mh.xyz/lianzai/index.html", + "url": "^https?://(m|so)\\.77mh\\.[a-z]{2,3}/", + "include": ".lpagelist", + "nextLink": "//a[text()='下一页']", + "pageElement": "//ul[a/li/img]", + "replaceElement": ".lpagelist" +}, +{ + "name": "新新漫画 - 分類", + "author": "skofkyo", + "example": "http://www.77mh.xyz/lianzai/index.html", + "url": "^https?://(www|so)\\.77mh\\.[a-z]{2,3}/", + "include": ".pages_s", + "nextLink": "a.current+a, a.next", + "pageElement": "//ul[dl/dt/a/img] | //div[ul/li/a/img and @class='ar_list_co']", + "replaceElement": ".pages_s", + "css": ".pagetual_pageBar{margin-top:3px!important}" +}, +{ + "name": "漫漫聚 / KuKu动漫 - 閱讀", + "author": "skofkyo", + "example": "http://www.manmanju.cc/comiclist/3658/97532/1.htm,http://manhua.ikukudm.com/comiclist/3756/102656/1.htm", + "url": "/comiclist/\\d+/\\d+/1\\.htm$", + "include": "input~a", + "action": 1, + "init": "let ia = document.querySelector('input~a');let sa = document.querySelector('script[language]+a');if(ia){ia.removeAttribute('href');}else{sa.removeAttribute('href');}", + "nextLink": "//a[./img[@src='/images/d.gif']][not(@href='/exit/exit.htm')] | //a[span[text()='下一页']][not(@href='/exit/exit.htm')]", + "pageElement": "//script[@language]/following-sibling::a/img[@src][not(contains(@src,'.gif'))]", + "replaceElement": "//a[./img[@src='/images/d.gif']] | //a[./img[@src='/images/t.gif']] | //div[@class='bottom']/ul[@class='subNav'] | //li[@class='txtA']" +}, +{ + "name": "漫漫聚 / KuKu动漫 - 分類", + "author": "skofkyo", + "example": "http://www.manmanju.cc/comictype/3_1.htm,http://www.ikukudm.cc/comictype/3_1.htm", + "url": "^https?://((www\\.)?manmanju\\.cc|(www\\.)?ikukudm\\.cc)/comictype/", + "nextLink": "//a[text()='下一页'] | //a[span[text()='下一页']]", + "pageElement": "//dl[@id='comicmain'] | //div[@class='imgBox']", + "replaceElement": "//dl[@id='comicmain']/preceding-sibling::table | //dl[@id='comicmain']/following-sibling::table | //ul[@class='subNav']", + "css": ".pagetual_pageBar+dl,.imgBox+.pagetual_pageBar{margin-top:-2px!important}" +}, +{ + "name": "漫客栈手機版 - 閱讀", + "author": "skofkyo", + "example": "https://m.mkzhan.com/216512/1006597.html", + "url": "^https?://m\\.mkzhan\\.com/\\d+/\\d+\\.html", + "pinUrl": true, + "history": 2, + "action": 1, + "waitElement": [ + ".next-chapter[data-href]" + ], + "nextLinkByJs": "let n = doc.querySelector('.next-chapter[data-href$=html]');if (n) return location.origin+n.getAttribute('data-href');", + "pageElement": ".comic-list,.read-end", + "replaceElement": "head>title,h1.comic-name,.prev-chapter,.next-chapter,.chapter-end", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "pageBarText": "let t=doc.querySelector('h1.comic-name');if(t)return t.innerText", + "css": "p.read-pos{display:none!important}" +}, +{ + "name": "漫客栈 - 卷軸模式", + "author": "skofkyo", + "example": "https://www.mkzhan.com/216512/1007019.html", + "url": "^https?://www\\.mkzhan\\.com/\\d+/\\d+\\.html", + "history": 2, + "action": 1, + "waitElement": [ + "#pages-tpl>*" + ], + "init": "document.querySelectorAll('img.lazy-read').forEach(img=>{let dc=img.getAttribute('data-src');img.src=dc})", + "nextLinkByJs": "let next=doc.querySelector('.rd-aside__item.j-rd-next:not([style])');if(next)return location.origin+next.getAttribute('href')", + "pageElement": "#pages-tpl", + "replaceElement": ".rd-aside__item.j-rd-prev,.rd-aside__item.j-rd-next,head>title,.last-crumb", + "pageInit": "doc.querySelectorAll('img.lazy-read').forEach(img=>{let dc=img.getAttribute('data-src');img.src=dc})", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pages-tpl');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "pageBarText": "let t=doc.querySelector('.last-crumb');if(t)return t.innerText", + "css": ".ds,.adv-img,.page-index__btn{display:none!important}#mainView{margin-top:0px!important}.rd-article__pic{min-height: auto!important}" +}, +{ + "name": "漫画屋 - 手機版閱讀", + "author": "skofkyo", + "example": "https://www.mhua5.com/index.php/chapter/1183359", + "url": "^https?://www\\.mhua5\\.com/index\\.php/chapter/\\d+|[0-9-]+\\.html", + "include": ".bottom-tool-bar", + "history": 2, + "action": 1, + "init": "let ge=e=>document.querySelector(e);let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let nh=ge('li.next-chapter').getAttribute('_href');let ph=ge('li.prev-chapter').getAttribute('_href');setTimeout(()=>{let p=ge('.prev-chapter.prev-btn');p.setAttribute('class','chapterprev');p.removeAttribute('_href');if(ph.indexOf('/')!=-1){let plink=`location.href='` + ph + `'`;p.setAttribute('onclick',plink)};if(nh.indexOf('/')!=-1){let n=ge('.next-chapter.next-btn');n.setAttribute('class','chapternext');n.removeAttribute('_href');let nlink=`location.href='` + nh + `'`;n.setAttribute('onclick',nlink)};let s=gx(\"//li[@class='switch'][span[text()='卷轴']]\");if(s){s.click()}},1000);setTimeout(()=>{if(location.hostname=='m.mianzhui.com'){document.querySelectorAll('img.lazy-image[data-original]').forEach(e=>{e.src=e.dataset.original})}},100);setTimeout(()=>{if(ph.indexOf('/')!=-1){ge('.end-itm.prev').outerHTML='
  • 上一章
  • '}else{ge('.end-itm.prev').outerHTML='
  • 無上一章
  • '}if(nh.indexOf('/')!=-1){ge('.end-itm.next').outerHTML='
  • 下一章
  • '}else{ge('.end-itm.next').outerHTML='
  • 無下一章
  • '}},150)", + "nextLinkByJs": "let n = doc.querySelector('li.next-chapter');if (n.getAttribute('_href').indexOf('/')!=-1) return location.origin+n.getAttribute('_href');", + "pageElement": ".comic-list,.read-end:not(.hide)", + "replaceElement": "head>title,h1.comic-name,.end-txt", + "pageInit": "let docge=e=>doc.querySelector(e);let ge=e=>document.querySelector(e);let gae=e=>doc.querySelectorAll(e);gae(`.comic-page[style='display: none;']`).forEach(e=>{e.style.display='list-item'});gae('.ldimg[mob-ec]').forEach(e=>{e.src=e.getAttribute('mob-ec')});let nh=docge('li.next-chapter').getAttribute('_href');let ph=docge('li.prev-chapter').getAttribute('_href');setTimeout(()=>{if(nh.indexOf('/')!=-1){ge('.end-itm.next').outerHTML=`
  • 下一章
  • `;let nlink=`location.href='${nh}'`;ge('.chapternext').setAttribute('onclick',nlink)}else{ge('.end-itm.next').outerHTML='
  • 無下一章
  • ';ge('.chapternext').removeAttribute('onclick')}ge('.end-itm.prev').outerHTML=`
  • 上一章
  • `;let plink=`location.href='${ph}'`;ge('.chapterprev').setAttribute('onclick',plink)},200)", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "pageBarText": "let t=doc.querySelector('h1.comic-name');if(t)return t.innerText", + "css": ".read-pos,.ds,ins{display:none!important}" +}, +{ + "name": "漫画屋 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.mhua5.com/index.php/chapter/1183359", + "url": "^https?://www\\.mhua5\\.com/index\\.php/chapter/\\d+|[0-9-]+\\.html", + "exclude": ".bottom-tool-bar", + "autoClick": "//div[@class='rd-aside__item j-rd-mod'][span[text()='卷轴']]", + "history": 2, + "action": 1, + "init": "document.querySelectorAll('img[data-original]').forEach(e=>{e.src=e.dataset.original})", + "nextLinkByJs": "let next = doc.querySelector('.rd-aside__item.j-rd-next:not([style])'); if (next) return location.origin + next.getAttribute('_href')", + "pageElement": ".rd-article-wr", + "replaceElement": ".last-crumb,.rd-aside__item.j-rd-prev,.rd-aside__item.j-rd-next,head>title", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.rd-article-wr');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "pageBarText": "let t=doc.querySelector('.last-crumb');if(t)return t.innerText", + "css": ".ds,.adv-img,.page-index__btn{display:none!important}.rd-article-wr>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "漫客栈 / 漫画屋 - 分類", + "author": "skofkyo", + "example": "https://www.mkzhan.com/category/,https://www.mhua5.com/category/", + "url": "^https?://(www\\.)?(mkzhan|mhua5)\\.com/((category|search)|index\\.php/(category|search))", + "nextLink": "a.next", + "pageElement": ".cate-comic-list", + "replaceElement": "#Pagination", + "css": ".pagetual_pageBar{margin-top:-20px!important}.pagetual_pageBar+.cate-comic-list{margin-top:2px!important}" +}, +{ + "name": "漫本 - 手機版閱讀", + "author": "skofkyo", + "example": "http://www.manben.com/m1149741/", + "url": "^https?://www\\.manben\\.com/m\\d+(#page_\\d+)?", + "exclude": "id('mainControlNext')", + "init": "window.onscroll=null;let ge=e=>document.querySelector(e);function showtoolbar(){let t=ge(\".titleBar[style*='40px']\");if(t){$('.titleBar').attr('style','background-color:#373737;top: 0px;')}else{$('.titleBar').attr('style','background-color:#373737;top: -40px;')}let b=ge('.toolBar[style]');if(b){$('.toolBar').removeAttr('style')}else{$('.toolBar').attr('style','bottom: -65px;')}};document.addEventListener('click',showtoolbar);function keyshowtoolbar(e){let key=window.event?e.keyCode:e.which;if(key=='34'||key=='32'||key=='40'){return}else{$('.titleBar').attr('style','background-color:#373737;top: 0px;');$('.toolBar').removeAttr('style')}};document.addEventListener('keydown',keyshowtoolbar);let F=new DocumentFragment();newImgs.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#cp_img');E.innerHTML='';E.appendChild(F);", + "history": 2, + "pinUrl": true, + "nextLink": "//p[text()='下一章']/preceding-sibling::a[starts-with(@href,'/m')] | //a[@class='readTipForm' and not(@href='/m0/')]", + "pageElement": "#cp_img", + "replaceElement": "//head/title | id('title') | //a[@class='readTipForm'] | //p[contains(text(), '上一章') or contains(text(), '下一章')]/preceding-sibling::a", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=doc.querySelector('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", + "pageBarText": "let t=doc.querySelector('#title');if(t)return t.innerText.replace(/\\S+/,'').trim()" +}, +{ + "name": "漫本 - PC版閱讀", + "author": "skofkyo", + "example": "http://www.manben.com/m1149741/", + "url": "^https?://www\\.manben\\.com/m\\d+(#page_\\d+)?", + "include": "//script[contains(text(),'eval') and contains(text(),'newImgs')]", + "exclude": "//p[text()='下一章'] | //a[@class='readTipForm']", + "pinUrl": true, + "init": "$('#mainView').removeAttr('style');let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#comicContain img');if(set){clearInterval(loop);let F=new DocumentFragment();newImgs.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#comicContain');E.innerHTML='';E.appendChild(F)}},100)", + "nextLink": "id('mainControlNext') | //a[img[@alt='下一章'] and not(@href='javascript:void(0);')]", + "pageElement": "#comicContain", + "replaceElement": "head>title,.title-comicHeading,.main_control,.catalog~a", + "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=doc.querySelector('#comicContain');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", + "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#comicContain');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", + "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", + "pageBarText": "let t=doc.querySelector('.title-comicHeading');if(t)return t.innerText", + "css": "p.num,p.say,.comic-text{display:none!important}#comicContain img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "漫本 - PC/手機版查看更多", + "author": "skofkyo", + "example": "http://www.manben.com/mh-updated/", + "url": "^https?://www\\.manben\\.com/(mh-updated|mh-list)/", + "loadMore": "#moreDiv", + "css": "div[class^=''floatBar][style*='.png']{display:none!important}" +}, +{ + "name": "拷貝漫畫 - 分類頁", + "author": "skofkyo", + "example": "https://copymanga.site/comics", + "url": "^https?://(www\\.)?copymanga\\.site/comics", + "action": 1, + "nextLink": "li.next>a", + "pageElement": ".container.exemptComicList", + "replaceElement": ".container>.page-all" +}, +{ + "name": "拷貝漫畫 - 推薦頁", + "author": "skofkyo", + "example": "https://copymanga.site/recommend", + "url": "^https?://(www\\.)?copymanga\\.site/recommend", + "nextLink": "li.next>a", + "pageElement": ".container.correlationList", + "replaceElement": ".container>.page-all", + "css": ".pagetual_pageBar {margin-top: -10px !important;margin-bottom: 20px !important;}" +}, +{ + "name": "二次元動漫 - 閱讀", + "author": "skofkyo", + "example": "https://www.2animx.com/index-look-name-%E5%A6%96%E7%A5%9E%E8%A8%98-cid-22592-id-235546", + "url": "^https?://www\\.2animx\\.com/index-look-name", + "init": "document.querySelectorAll('#img_ad_img>img[style*=none]').forEach(e=>{e.remove()});document.querySelectorAll('#ComicPic').forEach(e=>{e.outerHTML=``});", + "nextLink": "//a[text()='下一頁'][not(starts-with(@href,'javascript'))] | //a[text()='下一章']", + "pageElement": "#img_ad_img>img", + "replaceElement": "head>title,script+div.c,.e+.c,.b", + "pageAction": "let gae=e=>document.querySelectorAll(e);gae('#img_ad_img>img[style*=none]').forEach(e=>{e.remove()});gae('#ComicPic').forEach(e=>{e.outerHTML=``});gae('.pagetual_pageBar>a').forEach(e=>{if(/-p-/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>5){ps[0].remove();let ds=gae('#img_ad_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", + "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText.match(/-([^-]+)/)[1].trim();", + "rate": 10, + "css": ".e>h1,.e>p,.fb-share-button,#index_mian,.c>.fanye,.c>select,#k_zsy,.lookpage{display:none!important}#img_ad_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" +}, +{ + "name": "二次元動漫 - 分類", + "author": "skofkyo", + "example": "https://www.2animx.com/index-html-status-1", + "url": "^https?://www\\.2animx\\.com/index-html-status", + "nextLink": "//a[text()='下一頁']", + "pageElement": ".box.across.list>.box-bd>.liemh.htmls.indliemh", + "replaceElement": ".pagination" +}, +{ + "name": "快看 - 分類", + "author": "skofkyo", + "example": "https://www.kuaikanmanhua.com/tag/0", + "url": "^https?://www\\.kuaikanmanhua\\.com/tag/\\d+", + "init": "let ge=e=>document.querySelector(e);let link=ge('.headerContent>div>ul>li:nth-child(2)>a');link.href='/tag/0\\?region=1&pays=0&state=0&sort=1&page=1';link.removeAttribute('target');if(!location.search){ge('.selList.fl.cls>a:first-child').click()}", + "action": 1, + "nextLinkByUrl": [ + "&page=(\\d+)$", + "&page={$1+1}", + "ul.pagination>li:not(.disabled):last-child" + ], + "pageElement": ".tagContent.cls>*", + "replaceElement": ".TagPages.pagesBox", + "pageAction": "setTimeout(()=>{let ge=e=>document.querySelector(e);let url=location.search.replace(/(\\d+)$/,'');document.querySelectorAll('.itemBten:not(.active)>a:not(.prev):not(.Next)').forEach(a=>{a.href=url+a.innerText});let cp=ge('.pagination>li.active>a').innerText;let ppn=cp-1;let hb=ge('.pagination>li:not(.disabled):first-child>a');if(hb){hb.href=url+ppn}let pb=ge('a.prev');if(pb){pb.href=url+ppn}let next=ge('.pagination>li.active+li>a');let nb=ge('a.Next');if(next){nb.href=url+next.innerText}let enb=ge('.pagination>li:not(.disabled):last-child>a');if(enb){enb.href=url+next.innerText}},1000)", + "css": ".pagetual_pageBar{margin-top:-20px!important}.blankImg" +}, +{ + "name": "comic.bh3.com", + "author": "skofkyo", + "example": "https://comic.bh3.com/book/1001/1", + "url": "^https?://comic\\.bh3\\.com/book/\\d+/\\d+", + "nextLinkByJs": "let n=doc.querySelector('.comic-wrapper>a:last-child');if(n){return location.origin+n.href.split('\\'')[3]}", + "pageElement": "img.comic_img,.comic-wrapper>.read-next", + "replaceElement": ".comic-wrapper>a:last-child,.header_word", + "css": ".comic-wrapper {overflow-y: initial !important;} .comic_img{display: inline;}" +}, +{ + "name": "kantv.io", + "author": "skofkyo", + "example": "http://kantv.io/home/", + "url": "^https?://kantv\\.io/", + "nextLink": "li.active+li>a", + "pageElement": ".subom-post", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-8px!important;}" +}, +{ + "name": "R3SUB - 搜索", + "author": "skofkyo", + "example": "https://r3sub.com/search.php?s=king", + "url": "^https?://r3sub\\.com/search\\.php", + "nextLink": "li.active+li>a", + "pageElement": ".movie.movie--preview.ddd", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:10px!important;}.pagetual_pageBar+.movie{margin-top:-2px!important;}" +}, +{ + "name": "SubHD", + "author": "skofkyo", + "example": "https://subhd.tv/sub/movie", + "url": "^https?://subhd(tw)?\\.(tv|com|la|cc|me)/(zu|sub|search)/", + "include": "nav.clearfix", + "nextLink": "li.active+li>a", + "pageElement": ".bg-white.shadow-sm.rounded-3", + "replaceElement": ".pagination", + "insert": "nav.clearfix", + "insertPos": 1, + "css": ".col-lg-3.pt-5{display:none!important}.pagetual_pageBar{margin-top:-10px!important;}", + "rate": 3, + "sleep": 1000 +}, +{ + "name": "伪射手网", + "author": "skofkyo", + "example": "http://assrt.net/xml/list/sub/", + "url": "^https?://assrt\\.net/", + "nextLinkByJs": "let next = doc.querySelector('#pl-current+a'); if (next) return location.origin + location.pathname + '?page=' + next.innerText", + "pageElement": ".subitem:not([style])", + "replaceElement": ".pagelinkcard", + "insert": ".pagelinkcard", + "insertPos": 1, + "css": ".pagetual_pageBar{margin-top:10px!important}.pagetual_pageBar+.subitem{margin-top:-2px!important}" +}, +{ + "name": "點點字幕", + "author": "skofkyo", + "example": "http://www.samfunny.com/download/xslist.php?key=king", + "url": "^https?://www\\.samfunny\\.com/\\w+/xslist\\.php", + "nextLink": "li.disabled+li>a", + "pageElement": ".list>ul>li:not(.first)", + "replaceElement": "div.pagination" +}, +{ + "name": "SkrBT / BT1207", + "author": "skofkyo", + "example": "https://bt1207ju.top/search?keyword=king", + "url": "^https?://.*(bt1207|skrbt)[^/]+/", + "include": "#search-form", + "nextLinkByJs": "let n=doc.querySelector('ul.pagination>li.active+li>a');if(!n)return null;let params=[];let form=doc.querySelector('#search-form');form.querySelectorAll('input').forEach(input=>{if(input.name=='p')params.push('p='+n.innerText);else params.push(input.name+'='+input.value)});return form.action+'?'+params.join('&')", + "pageElement": "ul.list-unstyled", + "replaceElement": "nav>.pagination", + "css": ".pagetual_pageBar+.list-unstyled{margin-top:0px!important;}#right-panel{display:none!important}" +}, +{ + "name": "limetorrents.cc", + "author": "skofkyo", + "example": "https://www.limetorrents.lol/browse-torrents/Movies/", + "url": "^https?://www\\.limetorrents\\.lol/(browse-torrents|search)/", + "nextLink": "#next", + "pageElement": "table.table2>tbody>tr:not(:first-of-type)", + "replaceElement": ".search_stat" +}, +{ + "name": "BT 之家", + "author": "skofkyo", + "example": "https://www.btbtt15.com/forum-index-fid-950.htm", + "url": "^https?://www\\.btbtt\\d+\\.com/", + "pinUrl": true, + "nextLink": "//div[@class='page']/a[text()='▶' or text()='下一页']", + "pageElement": "#threadlist>.thread", + "replaceElement": "div+div.page", + "rate": 3 +}, +{ + "name": "蜜柑计划", + "author": "skofkyo", + "example": "https://mikanani.me/Home/Classic", + "url": "^https?://mikanani\\.me/Home/Classic", + "action": 1, + "nextLinkByJs": "let next=doc.querySelector('.pagination>li.active+li:not([style]):not([class])>a');if(next)return location.origin+location.pathname.replace(/\\/\\d+$/,'')+'/'+next.innerText", + "pageElement": "//table/tbody/tr", + "replaceElement": ".pagination" +}, +{ + "name": "動漫花園", + "author": "skofkyo", + "example": "http://share.dmhy.org/topics/list/sort_id/2", + "url": "^https?://(www|share|dmhy)?(\\.)?(dmhy|anoneko)\\.(org|com)", + "action": 1, + "nextLink": "//a[text()='下一頁']", + "pageElement": "thead+tbody", + "replaceElement": ".table.clear>.nav_title,script+.nav_title", + "rate": 3 +}, +{ + "name": "愛戀動漫&MioBT", + "author": "skofkyo", + "example": "http://www.kisssub.org/,http://miobt.com/", + "url": "^https?://(www\\.|m|share\\.)?(kisssub|miobt|comicat|acgnx|anix|36dm)\\.(org|com|se|moe|club)", + "action": 1, + "nextLink": "span.current+a", + "pageElement": "#data_list>tr,.lists", + "replaceElement": ".pages.clear", + "rate": 3 +}, +{ + "name": "MINI4K", + "author": "skofkyo", + "example": "https://www.mini4k.com/movies", + "url": "^https?://www\\.mini4k\\.com/movies", + "nextLink": "a.pager__item--next", + "pageElement": "div[class*='-item-list']>ul>.column", + "replaceElement": ".pagination" +}, +{ + "name": "limetorrents", + "author": "skofkyo", + "example": "https://en.limetorrent-official.site/movies", + "url": "limetorrent-official\\.site", + "action": 1, + "nextLink": "a[rel='next']", + "pageElement": "section>.row", + "replaceElement": ".tsc_pagination", + "css": "#social_popup{display:none!important}.pagetual_pageBar{margin-top:0px!important}" +}, +{ + "name": "1337x", + "author": "skofkyo", + "example": "https://www.1377x.to/", + "url": "^https?://www\\.1377x\\.", + "nextLink": ".pagination li.active+li>a", + "pageElement": "table.table-list>tbody", + "replaceElement": ".pagination" +}, +{ + "name": "YTS", + "author": "skofkyo", + "example": "https://yts.mx/browse-movies", + "url": "^https?://yts\\.mx/browse-movies", + "nextLink": "//ul[contains(@class, 'tsc_pagination')]/li[a/@class='current']/following-sibling::li[1]/a", + "pageElement": ".browse-movie-wrap", + "replaceElement": ".tsc_pagination" +}, +{ + "name": "萌番组 lite", + "author": "skofkyo", + "example": "https://bangumi.moe/lite/", + "url": "^https?://bangumi\\.moe/lite/", + "nextLink": "//section/a[span[contains(@class, 'next')]]", + "pageElement": ".torrents-ul", + "replaceElement": ".page-btn-section", + "pageAction": "eval(document.querySelector('head>script:not([src])').innerHTML)", + "css": ".pagetual_pageBar+ul{padding-top:0px!important}" +}, +{ + "name": "萌番组", + "author": "skofkyo", + "example": "https://bangumi.moe/", + "url": "^https?://bangumi\\.moe/", + "loadMore": "[torrent-list='lattorrents'] button[ng-click='loadMore()'] ,[torrent-list='torrents'] button[ng-click='loadMore()']" +}, +{ + "name": "AniRena", + "author": "skofkyo", + "example": "https://www.anirena.com/", + "url": "^https?://www\\.anirena\\.com/", + "action": 1, + "nextLink": "a.disabled+a:not(.disabled)", + "pageElement": ".full2, .full2+script", + "replaceElement": ".full3.buttons", + "pageAction": "let ss=document.querySelectorAll('.full2+script');let n=Math.ceil(ss.length/100);for(let i=(n-1)*100-1;ia", + "pageElement": "table.post-index>tbody", + "replaceElement": "ul.pagination" +}, +{ + "name": "anime1.me", + "author": "skofkyo", + "example": "https://anime1.me/", + "url": "^https?://anime1\\.me/", + "waitElement": [ + "#table-list>tbody>tr.even" + ], + "nextLink": "a.next", + "pageElement": "#table-list>tbody>tr" +}, +{ + "name": "筆趣影視", + "author": "skofkyo", + "example": "http://biquysw.com/acg/y2022/", + "url": "^https?://(www\\.)?biquysw.com/(acg|zongyi|mov|tv)/", + "action": 1, + "wait": "return !!doc.querySelector('ul.main img');", + "nextLink": "//a[@class='a1' and text()='下一页']", + "pageElement": ".index-tj", + "replaceElement": ".page", + "css": ".pagetual_pageBar{margin-top:-10px!important;}.mb {margin-bottom: 10px!important;}" +}, +{ + "name": "libgen.rs", + "author": "skofkyo", + "example": "http://libgen.rs/search.php?&req=The+Way+Out&phrase=1&view=simple&column=def&sort=def&sortmode=ASC&page=1", + "url": "^https?://libgen\\.rs/", + "action": 1, + "waitElement": [ + "//td[span/strong]" + ], + "nextLink": "//td[span/strong]/following-sibling::td[1]//a | //table/tbody/tr/td/font[@color]/a", + "pageElement": "//tr[td[@nowrap]]", + "replaceElement": "//div[contains(@class,'paginator')] | //table[tbody/tr/td/font[@color]]" +}, +{ + "name": "steamcommunity.com", + "author": "skofkyo", + "url": "^https?://steamcommunity\\.com/", + "include": ".workshopBrowsePaging", + "nextLink": "a.pagebtn:last-child", + "pageElement": ".workshopBrowseItems", + "replaceElement": ".workshopBrowsePaging", + "pageAction": "let ps=document.querySelectorAll('.workshopBrowseItems');let last=ps.length-1;ps[last].querySelectorAll('script').forEach(e=>{eval(e.innerHTML)})", + "css": ".pagetual_pageBar{margin-top:0px!important}" +}, +{ + "name": "游研社", + "author": "skofkyo", + "example": "https://www.yystv.cn/docs", + "url": "^https?://www\\.yystv\\.cn/", + "action": 1, + "nextLinkByJs": "let next = doc.querySelector('.cur-page+li'); if (next) return location.origin + location.pathname + '?page=' + next.innerText", + "pageElement": ".list-container>li,.video-list,.img-mode", + "replaceElement": ".page-list", + "css": ".pagetual_pageBar{margin-top:-5px!important}", + "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);gae('.scale-img').forEach(e=>{e.style=e.getAttribute('style')});setTimeout(()=>{let ls=gae('.page-num-list li:not([class])');let lp=location.pathname;ls.forEach(e=>{let p=e.innerText;let link=lp+'?page='+p;let ps=`location.href='${link}'`;e.setAttribute('onclick',ps)});let h=ge('.page-list>li:nth-child(1)');let gohp=`location.href='${lp}'`;h.setAttribute('onclick',gohp);let n=ge('.page-list>li:nth-child(2)');let np=ge('.cur-page+li');if(n&&np){let link=lp+'?page='+np.innerText;let next=`location.href='${link}'`;n.setAttribute('onclick',next)}else{n.removeAttribute('onclick')}let input=ge('.page-list-custom-input');input.addEventListener('keydown',(e)=>{let key=window.event?e.keyCode:e.which;if(key=='13'){let url=location.href.replace(/\\?page=\\d+/,'');if(input.value>0)location.href=url+'?page='+input.value}})},500)" +}, +{ + "name": "Vilipix", + "author": "skofkyo", + "example": "https://www.vilipix.com/new", + "url": "^https?://www\\.vilipix\\.com/", + "action": 2, + "nextLinkByJs": "let next=doc.querySelector('li.number.active+li.number');if(next)return location.origin+location.pathname+'?p='+next.innerText", + "pageElement": "ul.illust-content", + "replaceElement": "ul.el-pager", + "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);setTimeout(()=>{let cpn=ge('.el-pager>.number.active').innerText;let ps=gae('.el-pager>.number:not(.active)');let lp=location.pathname;ps.forEach(e=>{let p=e.innerText;let lpp=lp+'?p='+p;let link=`location.href='${lpp}'`;e.setAttribute('onclick',link)});let pb=ge('button.btn-prev');if(pb){if(cpn>1){pb.removeAttribute('disabled');let p=cpn-1;let lpp=lp+'?p='+p;let link=`location.href='${lpp}'`;pb.setAttribute('onclick',link)}}let nb=ge('button.btn-next');if(nb){let last=ge('.el-pager>li.active:last-child');if(last){nb.setAttribute('disabled','disabled')}else{let npn=ge('.el-pager>.number.active+li').innerText;let p=parseInt(cpn)+1;let lpp=lp+'?p='+p;let link=`location.href='${lpp}'`;nb.setAttribute('onclick',link)}}},500)" +}, +{ + "name": "低端影视", + "author": "skofkyo", + "example": "https://ddys.pro/category/movie/", + "url": "^https?://ddys\\d?\\.[a-z]{2,3}/", + "nextLink": "a.next", + "pageElement": ".post-box-list", + "replaceElement": ".pagination_wrap" +}, +{ + "name": "马克喵", + "author": "skofkyo", + "example": "https://www.macat.vip/%e5%ad%97%e4%bd%93", + "url": "^https?://www\\.macat\\.vip/", + "action": 1, + "include": ".posts-wrapper.row", + "nextLink": ".next", + "pageElement": ".posts-wrapper>div", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:0px!important}" +}, +{ + "name": "NO视频", + "author": "skofkyo", + "example": "https://www.novipnoad.net/movie/", + "url": "^https?://www\\.novipnoad\\.net/", + "nextLink": "a.nextpostslink", + "pageElement": "//div[div[@id and contains(@class,'video-item')] and contains(@class,'col-md-3')] | //div[@id and contains(@class,'blog-item video-item')]", + "replaceElement": ".wp-pagenavi" +}, +{ + "name": "飛極速線上", + "author": "skofkyo", + "example": "http://www.fjisu2.com/acg/japan/", + "url": "^https?://(www\\.|m\\.)?(fjisu|feijisu)\\d+\\.com/\\w+/\\w+/", + "action": 1, + "nextLink": "//a[text()='下一页']", + "pageElement": ".b-listtab,.picTxt>.picTxt", + "replaceElement": ".pages", + "css": ".pagetual_pageBar+div {margin-top: -10px !important;}" +}, +{ + "name": "onehu.xyz", + "author": "skofkyo", + "example": "https://onehu.xyz/", + "url": "^https?://onehu\\.xyz/", + "nextLink": "span.current+a", + "pageElement": "//div[article]", + "replaceElement": "#pagination" +}, +{ + "name": "https://www.orcy.net.cn/", + "author": "skofkyo", + "example": "https://www.orcy.net.cn/", + "url": "^https?://www\\.orcy\\.net\\.cn/", + "nextLink": ".nextpostslink", + "pageElement": ".Article__content", + "replaceElement": ".wp-pagenavi" +}, +{ + "name": "小众软件", + "author": "skofkyo", + "example": "https://www.appinn.com/abouttime/amp/", + "url": "^https?://www\\.appinn\\.com/", + "nextLink": "a.next,.next>a", + "pageElement": "article,.amp-post-title,.amp-featured-image,.cntn-wrp", + "replaceElement": "#pagination,.pagination,.sp-lt,.s_stk", + "css": ".pagetual_pageBar{margin-top:0px!important}" +}, +{ + "name": "ijtsrd.com", + "author": "skofkyo", + "example": "https://www.ijtsrd.com/archive/21/volume-3/issue-4", + "url": "^https?://www\\.ijtsrd\\.com/", + "include": "//ul[li[@class='active'] and @class='pagination']/following-sibling::ul[1]//a[@href]", + "nextLinkByJs": "let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let next=gx(\"//ul[li[@class='active'] and @class='pagination']/following-sibling::ul[1]//a[@href]\");if(next)return location.href.replace(/\\/p-\\d+$/,'')+'/p-'+next.innerText", + "pageElement": ".mGrid", + "replaceElement": "ul.pagination" +}, +{ + "name": "scloud.ws", + "author": "skofkyo", + "url": "^https?://scloud\\.ws/", + "nextLink": ".js-ls-pagination-next", + "pageElement": ".topic-card-wrapper" +}, +{ + "name": "Winaero", + "author": "skofkyo", + "example": "https://winaero.com/category/windows-10/", + "url": "^https?://winaero\\.com/", + "nextLink": "a.next", + "pageElement": "#main>article", + "replaceElement": ".pagination", + "rate": 3 +}, +{ + "name": "docs.oracle.com", + "author": "skofkyo", + "example": "https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html", + "url": "^https?://docs\\.oracle\\.com/", + "action": 2, + "nextLink": "//a[text()='Next']", + "pageElement": ".chapter,.index,.appendix" +}, +{ + "name": "w3school.com.cn", + "author": "skofkyo", + "example": "https://www.w3school.com.cn/js/index.asp", + "url": "^https?://www\\.w3school\\.com\\.cn/", + "action": 1, + "nextLinkByJs": "let next=doc.querySelector('li.next>a[href]');if(next&&next.href.indexOf('/index.')===-1)return next.href", + "pageElement": "#maincontent>*:not([class*='prenextnav']):not(#bpn):not(#tpn)", + "replaceElement": "ul.prenext, #navsecond", + "insert": "id('bpn') | //div[contains(@class, 'prenextnav')][last()]", + "insertPos": 1, + "pageBarText": 1, + "initRun": 1, + "autoLoadNum": 2 +}, +{ + "name": "菜鸟教程 - 分类页", + "author": "skofkyo", + "example": "https://www.runoob.com/w3cnote", + "url": "^https?://www\\.runoob\\.com/w3cnote", + "nextLink": "li.next-page>a", + "pageElement": ".archive-list>.archive-list-item", + "replaceElement": "#wp_page_numbers" +}, +{ + "name": "菜鸟教程 - 文章页", + "author": "skofkyo", + "example": "https://www.runoob.com/js/js-tutorial.html", + "url": "^https?://www\\.runoob\\.com/[a-z/-]+\\.html", + "action": 1, + "nextLink": "a[style^='b']+a,a[style^='b']+br+h2+a", + "pageElement": ".article-heading, .article-body", + "waitElement": [ + "a[target='_top'][style^='background']" + ], + "replaceElement": ".sidebar-box" +}, +{ + "name": "奔跑中的奶酪", + "author": "skofkyo", + "example": "http://www.runningcheese.com/", + "url": "^https?://www\\.runningcheese\\.com/", + "nextLink": "a.next", + "pageElement": ".ajaxpost", + "replaceElement": ".pagination" +}, +{ + "name": "423down", + "author": "skofkyo", + "example": "https://www.423down.com/", + "url": "^https?://www\\.423down\\.com/", + "nextLink": "//a[text()='下一页']", + "pageElement": ".content>.excerpt, .commentlist>li", + "replaceElement": ".paging, .pagenav" +}, +{ + "name": "大眼仔旭", + "author": "skofkyo", + "example": "http://www.dayanzai.me/windows", + "url": "^https?://www\\.dayanzai\\.me/", + "nextLink": ".page>span+a", + "pageElement": "ul.c-news", + "replaceElement": ".page" +}, +{ + "name": "果核剥壳", + "author": "skofkyo", + "example": "https://www.ghxi.com/category/all/pcsoft", + "url": "^https?://www\\.ghxi\\.com/", + "nextLink": "a.next", + "pageElement": "ul.post-loop>.item", + "replaceElement": ".pagination" +}, +{ + "name": "億破姐", + "author": "skofkyo", + "example": "https://www.ypojie.com/pc", + "url": "^https?://www\\.ypojie\\.com/", + "nextLink": ".next-page>a", + "pageElement": "article[class^='excerpt excerpt-']", + "replaceElement": ".pagination", + "rate": 3 +}, +{ + "name": "FC Portables", + "author": "skofkyo", + "example": "https://www.fcportables.com/", + "url": "^https?://www\\.fcportables\\.com/", + "nextLink": "a.next", + "pageElement": "article[class^='post']", + "replaceElement": ".pagination", + "pageInit": "doc.querySelectorAll('a.img-holder[data-src]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.src}')`;a.classList.add('b-loaded');a.removeAttribute('data-src')})" +}, +{ + "name": "KaranPc", + "author": "skofkyo", + "example": "https://karanpc.com/windows/download-managers/", + "url": "^https?://karanpc\\.com/", + "include": "#nav-below", + "nextLink": "a.next", + "pageElement": "article[id^='post']", + "replaceElement": "#nav-below" +}, +{ + "name": "阿榮福利味", + "author": "skofkyo", + "example": "https://www.azofreeware.com/", + "url": "^https?://www\\.azofreeware\\.com/", + "action": 1, + "nextLink": ".blog-pager-older-link", + "pageElement": ".blog-posts.hfeed", + "replaceElement": "#blog-pager" +}, +{ + "name": "Apkpure", + "author": "skofkyo", + "example": "https://apkpure.com/tw/game", + "url": "^https?://apkpure\\.com/", + "loadMore": "a.show-more" +}, +{ + "name": "Gdaily", + "author": "skofkyo", + "example": "https://www.gdaily.org/software", + "url": "^https?://www\\.gdaily\\.org/(search|software|app|online|teaching)", + "init": "document.querySelectorAll('.adsbygoogle').forEach(e=>{e.parentNode.parentNode.remove()})", + "nextLink": "li.active+li>a", + "pageElement": ".columns .column", + "replaceElement": ".navigation", + "pageInit": "doc.querySelectorAll('.adsbygoogle').forEach(e=>{e.parentNode.parentNode.remove()})" +}, +{ + "name": "Mobile01 - 手機版內文", + "author": "skofkyo", + "example": "https://m.mobile01.com/topicdetail.php?f=300&t=6660682", + "url": "^https?://m\\.mobile01\\.com/topicdetail", + "nextLink": ".c-pagination--next", + "pageElement": ".u-gapNextV--lg>.u-gapNextV--md", + "replaceElement": ".u-gapNextV--lg.u-tac", + "rate": 2, + "sleep": 1000 +}, +{ + "name": "Mobile01 - 內文", + "author": "skofkyo", + "example": "https://www.mobile01.com/topicdetail.php?f=300&t=6660682", + "url": "^https?://www\\.mobile01\\.com/topicdetail", + "nextLink": "li.l-pagination__page.is-active+li>a", + "pageElement": "//div[(div/@class='l-articlePage__author') and @class='l-articlePage']", + "replaceElement": "ul.l-pagination", + "rate": 2, + "sleep": 1000 +}, +{ + "name": "Mobile01 - 文章列表", + "author": "skofkyo", + "example": "https://www.mobile01.com/topiclist.php?f=300", + "url": "^https?://(www|m)\\.mobile01\\.com/(forumtopic|topiclist)", + "nextLink": "li.l-pagination__page.is-active+li>a,.c-pagination--next", + "pageElement": ".l-listTable__tbody,.u-gapNextV--lg>.u-gapNextV--lg>div[class$='u-gapNextV--lg'] .l-articleList", + "replaceElement": ".l-tabulate__action,.l-pagination", + "rate": 3, + "sleep": 2000 +}, +{ + "name": "巴哈姆特 - 內文", + "author": "skofkyo", + "example": "https://forum.gamer.com.tw/C.php?bsn=23805&snA=610529&tnum=14858", + "url": "^https?://forum\\.gamer\\.com.tw/C\\.php", + "nextLink": "a.next[href]", + "pageElement": ".c-section[id*='post']", + "replaceElement": [ + "div.forum-ad_top+section>.c-section__main>#BH-pagebtn", + "section+section>.c-section__main>#BH-pagebtn" + ] +}, +{ + "name": "巴哈姆特 - 文章列表", + "author": "skofkyo", + "example": "https://forum.gamer.com.tw/B.php?bsn=23805", + "url": "^https?://forum\\.gamer\\.com.tw/B\\.php", + "nextLink": "a.next[href]", + "pageElement": ".b-list>tbody>tr:not(.b-list__head)", + "replaceElement": [ + ".forum-ad_top+.b-pager.pager", + ".b-popular.popular+.b-pager.pager" + ], + "pageAction": "Forum.B.lazyThumbnail();Forum.Common.drawNoImageCanvas()" +}, +{ + "name": "Erowall.com", + "author": "skofkyo", + "example": "https://erowall.com/", + "url": "^https?://erowall\\.com/", + "nextLink": "//a[contains(text(),'Next')]", + "pageElement": ".wpmini", + "replaceElement": ".paginator" +}, +{ + "name": "ftopx.com", + "author": "skofkyo", + "example": "https://ftopx.com/", + "url": "^https?://ftopx\\.com/", + "nextLink": "li.active+li>a", + "pageElement": "//div[div[@class='thumbnail']]", + "replaceElement": "#pagination" +}, +{ + "name": "套图之家 - 圖片", + "author": "skofkyo", + "example": "https://taotuhome.com/19377.html", + "url": "^https?://taotuhome\\.com/", + "nextLink": "span.current+a", + "pageElement": "//p[img[@alt]]", + "replaceElement": ".page-links", + "pageBar": 0 +}, +{ + "name": "套图之家 - 分類", + "author": "skofkyo", + "example": "https://taotuhome.com/category/xgyw/", + "url": "^https?://taotuhome\\.com/", + "nextLink": "span.current+a", + "pageElement": "//main[@id='main'][article/figure[@class='thumbnail']]", + "replaceElement": ".pagenav-clear" +}, +{ + "name": "俊美图 - 圖片", + "author": "skofkyo", + "example": "https://www.meijuntu.com/beauty/wanghongnenmo_abbyliya_wanmeishencainvshen_mistar_vol_144.html", + "url": "^https?://(www\\.meijuntu\\.com|www\\.junmeitu\\.com|www\\.jeya\\.de|www\\.jeya\\.jp)/", + "include": ".next_picture", + "init": "document.querySelectorAll('.pictures>a').forEach(e=>{e.remove()})", + "nextLink": ".pages>span +a:not(.a1)", + "pageElement": ".pictures>img[alt]", + "replaceElement": ".pages", + "pageBar": 0 +}, +{ + "name": "看妹图", + "author": "skofkyo", + "example": "https://kanmeitu1.cc/p/", + "url": "^https?://kanmeitu\\d\\.cc/p/(index_\\d+.html)?", + "pageElement": "#list", + "replaceElement": ".pages" +}, +{ + "name": "俊美图 - 分類", + "author": "skofkyo", + "example": "https://www.meijuntu.com/beauty/", + "url": "^https?://(www\\.meijuntu\\.com|www\\.junmeitu\\.com|www\\.jeya\\.de|www\\.jeya\\.jp)/", + "exclude": ".next_picture", + "nextLink": ".pages>span +a:not(.a1)", + "pageElement": ".pic-list>ul>*", + "replaceElement": ".th_page" +}, +{ + "name": "青年美圖", + "author": "skofkyo", + "example": "https://jrants.com/", + "url": "^https?://jrants\\.com/", + "action": 1, + "nextLink": "a.next", + "pageElement": ".masonry-container", + "replaceElement": ".paging-navigation" +}, +{ + "name": "imhentai.xxx - 圖片", + "author": "skofkyo", + "example": "https://imhentai.xxx/view/1053673/1/", + "url": "^https?://imhentai\\.xxx/view/\\d+/\\d+/", + "nextLink": ".nav_next", + "pageElement": "#gimg", + "replaceElement": "span.current", + "pageBar": 0, + "rate": 3, + "css": ".nav_pagination,#bar,#footer,.prev_nav.page_prev,.next_nav.page_next{display:none!important}" +}, +{ + "name": "imhentai.xxx", + "author": "skofkyo", + "example": "https://imhentai.xxx/?page=1", + "url": "^https?://imhentai\\.xxx/(\\?page=\\d+|search)?", + "nextLink": ".page-item.active+li:not(.disabled)>a", + "pageElement": ".thumb", + "replaceElement": ".pagination" +}, +{ + "name": "Simply Hentai", + "author": "skofkyo", + "example": "https://www.simply-hentai.com/", + "url": "^https?://www\\.simply-hentai\\.com/", + "pageElement": "//div[div[article[a[div[@class='image-wrapper']/img[@data-src]]]]]", + "insert": "nav.pagination", + "insertPos": 1, + "pageInit": "doc.querySelectorAll('.image-loader').forEach(e=>{e.remove()});", + "css": ".text-center{display:none!important}" +}, +{ + "name": "妹妹图", + "author": "skofkyo", + "example": "https://mm.tvv.tw/", + "url": "^https?://mm\\.tvv\\.tw/", + "action": 1, + "nextLink": "a.next", + "pageElement": "//div[div/div[@class='blog-image']]", + "replaceElement": ".pagination" +}, +{ + "name": "留园酷18", + "author": "skofkyo", + "example": "https://www.cool18.com/bbs/index.php?app=forum&act=cachepage&cp=tree1", + "url": "^https?://www\\.cool18\\.com/bbs", + "nextLink": "//a[text()='下一页']", + "pageElement": "#d_list", + "replaceElement": "#d_list_page,#d_list_foot" +}, +{ + "name": "24tupian - 圖集列表", + "author": "skofkyo", + "example": "https://www.24tupian.org/", + "url": "^https?://www\\.24tupian\\.org/(meinv|nvyou|tuimo|gaoqing|model|class|Serch)", + "nextLink": "a.on+a[href$='html']", + "pageElement": ".lbleft>.lbl,.paihan.fl>ul,.model,.big.fl>ul,.gtps.fl>ul", + "replaceElement": ".page", + "pageInit": "[...doc.querySelectorAll(\"img[src*='load.']\")].forEach(img => (img.src = 'https://imgs.diercun.com' + img.getAttribute('data')))" +}, +{ + "name": "美女目录网 - 圖片", + "author": "skofkyo", + "example": "http://www.girldir.com/photos/lichengmin_1156859/", + "url": "^https?://[^/]+/photos/", + "include": "//title[contains(text(), '美女目录网')]", + "action": 1, + "init": "function ge(e){return document.querySelector(e)}let a = ge('.photo-box>a');a.outerHTML=a.innerHTML;ge('source').remove()", + "nextLink": "//a[span[text()='下一张']]", + "pageElement": ".photo-box picture img[alt]", + "replaceElement": ".tools.row", + "pageBar": 0 +}, +{ + "name": "美女目录网 - 分類禁用", + "author": "skofkyo", + "example": "http://www.girldir.com/star/v_siwa/", + "url": "^https?://[^/]+/star/", + "include": "//title[contains(text(), '美女目录网')]", + "enable": "0" +}, +{ + "name": "遛无写真 - 看圖", + "author": "skofkyo", + "example": "https://www.6evu.com/30131.html", + "url": "^https?://www\\.6evu\\.com/\\d+\\.html", + "nextLink": ".pagelist>span+a", + "init": "function gae(e){return document.querySelectorAll(e)}let _img='';gae('#post_content img').forEach(e=>{_img+=e.outerHTML});gae('#post_content')[0].innerHTML=_img;", + "pageElement": "#post_content img", + "replaceElement": ".pagelist", + "pageBar": 0 +}, +{ + "name": "遛无写真", + "author": "skofkyo", + "example": "https://www.6evu.com/jgmntp", + "url": "^https?://www\\.6evu\\.com/", + "include": ".pagination", + "nextLink": "a.next", + "pageElement": "#post_container", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-8px!important}" +}, +{ + "name": "爱美女 - 看圖", + "author": "skofkyo", + "example": "www.92meinv.com,mm.92meinv.com", + "url": "^https?://(www|mm)\\.\\d?2meinv\\.com/article", + "init": "function ge(e){return document.querySelector(e)}let a=ge('.hh+.pp > a');let a2=ge('.clearfix.arcmain a');if(a){a.outerHTML=a.innerHTML}else{a2.outerHTML=a2.innerHTML}", + "nextLink": "//div[@class='page-show' or contains(@class,'article-page')]/a[contains(@href,'html') and text()='下一页']", + "pageElement": ".hh+.pp img[alt],.clearfix.arcmain img", + "replaceElement": ".page-show,h1>span,.article-page", + "pageBar": 0, + "css": ".pgg1+.hh{display:none!important}" +}, +{ + "name": "美图录 - 看圖", + "author": "skofkyo", + "example": "https://meitulu.me/item/3242.html", + "url": "^https?://meitulu\\.me/item/\\d+\\.html", + "nextLink": "//a[text()='下一页']", + "pageElement": ".container-inner-fix-m>img", + "replaceElement": ".pagination", + "pageBar": 0 +}, +{ + "name": "美图录 - 分類", + "author": "skofkyo", + "example": "https://meitulu.me/t/nvshen/", + "url": "^https?://meitulu\\.me/(t|xihuan|rihan|gangtai|guochan|search)", + "nextLink": "//a[text()='下一页']", + "pageElement": ".row.my-gutters-b", + "replaceElement": ".pagination" +}, +{ + "name": "胴体的诱惑", + "author": "skofkyo", + "example": "https://dongti.blog.2nt.com/", + "url": "^https?://dongti\\.blog\\.2nt\\.com/", + "action": 1, + "nextLink": "//li[span[@class='current']]/following-sibling::li[1]/a", + "pageElement": "#grid-container>*", + "replaceElement": ".pager" +}, +{ + "name": "MEITU131 - 手機版看圖", + "author": "skofkyo", + "example": "https://m.meitu131.com/meinv/8140/", + "url": "^https?://m\\.meitu131\\.com/", + "include": ".uk-article", + "init": "let a=document.querySelector('.uk-article-bd a');a.outerHTML=a.innerHTML;", + "nextLink": "//a[text()='下一页']", + "pageElement": ".uk-article-bd img[alt]", + "replaceElement": ".uk-page", + "pageBar": 0 +}, +{ + "name": "MEITU131 手機版", + "author": "skofkyo", + "example": "https://m.meitu131.com/meinv/", + "url": "^https?://m\\.meitu131\\.com/", + "exclude": ".uk-article", + "nextLink": "//a[text()='下一页']", + "pageElement": ".uk-container li", + "replaceElement": ".uk-page" +}, +{ + "name": "MEITU131 - 看圖", + "author": "skofkyo", + "example": "https://www.meitu131.com/meinv/7672/", + "url": "^https?://www\\.meitu131\\.com/meinv/\\d+", + "init": "document.querySelectorAll('p>a').forEach(e=>{e.outerHTML=e.innerHTML})", + "nextLink": "//a[text()='下一页']", + "pageElement": ".work-content img", + "replaceElement": "#pages", + "pageBar": 0 +}, +{ + "name": "MEITU131", + "author": "skofkyo", + "example": "https://www.meitu131.com/rank/dalu/", + "url": "^https?://www\\.meitu131\\.com/(e/search|rank|meinv|shouji|sucai|nvshen|hot)/([a-z]+)?", + "exclude": "h1", + "nextLink": "//a[text()='下一页']", + "pageElement": ".details>ul,.cover-list", + "replaceElement": "#pages", + "lazyImgSrc": "data-echo", + "css": ".cover-list+.pagetual_pageBar{margin-top:0px!important}.pagetual_pageBar+.cover-list{margin-top:-4px!important}" +}, +{ + "name": "亿图全景图库 - 手機版看圖", + "author": "skofkyo", + "example": "https://m.yeitu.com/meinv/xinggan/20221205_32251.html", + "url": "^https?://m\\.yeitu\\.com/", + "include": ".uk-article", + "init": "let a=document.querySelector('.gallery-item>a');a.outerHTML=a.innerHTML;", + "nextLink": "//a[text()='下一页']", + "pageElement": ".gallery-item img[alt]", + "replaceElement": ".yt-pages,.imageset-current", + "pageBar": 0 +}, +{ + "name": "亿图全景图库手機版", + "author": "skofkyo", + "example": "https://m.yeitu.com/meinv/xinggan/", + "url": "^https?://m.yeitu.com/", + "include": ".uk-pagination", + "nextLink": "//a[@class='a1' and text()='下一页']", + "pageElement": ".uk-container>ul li", + "replaceElement": ".uk-pagination" +}, +{ + "name": "亿图全景图库 - 看圖", + "author": "skofkyo", + "example": "https://www.yeitu.com/meinv/xinggan/20220725_31887.html", + "url": "^https?://www\\.yeitu\\.com/", + "include": ".article-body img", + "init": "let a=document.querySelector('.article-body>a');a.outerHTML=a.innerHTML;", + "nextLink": "//a[@class='a1' and text()='下一页']", + "pageElement": ".article-body img", + "replaceElement": ".pages,.num" +}, +{ + "name": "亿图全景图库", + "author": "skofkyo", + "example": "https://www.yeitu.com/meinv/xinggan/", + "url": "^https?://www\\.yeitu\\.com/", + "include": ".pages", + "nextLink": "//a[@class='a1' and text()='下一页']", + "pageElement": ".atlas-list", + "replaceElement": ".pages" +}, +{ + "name": "NudesLegion", + "author": "skofkyo", + "example": "https://nudeslegion.com/", + "url": "^https?://nudeslegion\\.com/", + "nextLink": "span.current+a", + "pageElement": "article[id]", + "replaceElement": ".pagination", + "css": "footer+script+div[id]{display:none!important}" +}, +{ + "name": "Yellow Fever", + "author": "skofkyo", + "example": "https://yellowfever18.com/chinese/", + "url": "^https?://yellowfever18\\.com/(tag|chinese|korean|japanese|\\?s=)", + "nextLink": "a.next", + "pageElement": ".jeg_postblock_15 .jeg_post", + "replaceElement": ".jeg_block_navigation", + "rate": 3 +}, +{ + "name": "NudeBird", + "author": "skofkyo", + "example": "https://nudebird.biz/", + "url": "^https?://nudebird\\.biz/(tag|category|\\?s=)?", + "nextLink": "li.current+li>a", + "pageElement": ".excerpt", + "replaceElement": ".pagination" +}, +{ + "name": "NUDECOSPLAY - 圖片", + "author": "skofkyo", + "example": "https://nudecosplaygirls.com/%e4%b9%a0%e5%91%86%e5%91%86-%e5%88%bb%e6%99%b4/", + "url": "^https?://nudecosplaygirls\\.com/", + "include": [ + ".entry-content img[decoding='async']:not(.lazy)" + ], + "pinUrl": true, + "css": ".entry-content>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#secondary{display:none!important}h1.g1-mega{text-align:center}" +}, +{ + "name": "NUDECOSPLAY - 圖片", + "author": "skofkyo", + "example": "https://nudecosplaygirls.com/haneame-summer/", + "url": "^https?://nudecosplaygirls\\.com/", + "include": [ + ".entry-content", + "img[decoding='async'].lazy" + ], + "pinUrl": true, + "css": ".entry-content>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#secondary{display:none!important}h1.g1-mega{text-align:center}" +}, +{ + "name": "NUDECOSPLAY", + "author": "skofkyo", + "example": "https://nudecosplaygirls.com/", + "url": "^https?://nudecosplaygirls\\.com/(category)?", + "nextLink": "a.next", + "pageElement": ".g1-collection-viewport", + "replaceElement": ".g1-pagination" +}, +{ + "name": "Nlegs - 預覽圖清單", + "author": "skofkyo", + "example": "https://www.nlegs.com/girls/2022/10/01/28219.html", + "url": "^https?://www\\.nlegs\\.com/girls/[^.]+\\.html", + "nextLink": "li.active+li>a", + "pageElement": "//div[a/div[contains(@style,'thumb')]]", + "replaceElement": ".pagination", + "pageBar": 0 +}, +{ + "name": "Nlegs", + "author": "skofkyo", + "example": "https://www.nlegs.com/", + "url": "^https?://www\\.nlegs\\.com/", + "nextLink": "li.active+li>a", + "pageElement": "//div[div/a/div/@class='img-div']", + "replaceElement": ".pagination" +}, +{ + "name": "Mitaku - 看圖禁用", + "author": "skofkyo", + "enable": 0, + "example": "https://mitaku.net/ero-cosplay/byoru-riamu-yumemi-nekomini/", + "url": "^https?://mitaku\\.net/", + "include": ".msacwl-slider-wrap", + "pinUrl": true +}, +{ + "name": "Mitaku", + "author": "skofkyo", + "example": "https://mitaku.net/", + "url": "^https?://mitaku\\.net/", + "nextLink": ".current+a", + "pageElement": "article.post", + "replaceElement": ".wp-pagenavi", + "rate": 3 +}, +{ + "name": "idol.gravureprincess.date", + "author": "skofkyo", + "example": "http://idol.gravureprincess.date/", + "url": "^https?://idol\\.gravureprincess\\.date/", + "pinUrl": true, + "init": "document.querySelectorAll('.date-outer').forEach(e=>{e.removeAttribute('style')})", + "nextLink": ".blog-pager-older-link", + "pageElement": ".blog-posts>.date-outer", + "replaceElement": "#blog-pager", + "pageInit": "doc.querySelectorAll('.date-outer').forEach(e=>{e.removeAttribute('style')})" +}, +{ + "name": "Cosplaytele - 分類", + "author": "skofkyo", + "example": "https://cosplaytele.com/", + "url": "^https?://cosplaytele\\.com/", + "action": 1, + "nextLink": "a.next", + "pageElement": "#content .row .row", + "replaceElement": ".page-numbers" +}, +{ + "name": "4KHD - 圖片", + "author": "skofkyo", + "example": "https://www.4khd.com/2023/01/15/puremedia-vol210-seer.html", + "url": "^https?://www\\.4khd\\.com/content/\\d+/", + "nextLink": ".current+li>a", + "pageElement": "#basicExample>a,figure.wp-block-image,.entry-content>p>a", + "replaceElement": ".page-link-box", + "pageBar": 0 +}, +{ + "name": "4KHD - 分類", + "author": "skofkyo", + "example": "https://www.4khd.com/", + "url": "^https?://www\\.4khd\\.com/", + "nextLink": "span.current+a", + "pageElement": ".wp-block-post-template.is-flex-container", + "replaceElement": "nav[aria-label='Pagination']" +}, +{ + "name": "4KUP - 分類", + "author": "skofkyo", + "example": "https://4kup.net/", + "url": "^https?://4kup\\.net/", + "pinUrl": true, + "include": ".paging-navigation", + "nextLink": "span.current+a:not(.next)", + "pageElement": "article[id^=post]", + "replaceElement": ".paging-navigation" +}, +{ + "name": "Goddess247", + "author": "skofkyo", + "example": "https://goddess247.com/", + "url": "^https?://goddess247\\.com/", + "nextLink": "a.next", + "pageElement": "article[class*=post]", + "replaceElement": "nav.elementor-pagination", + "css": ".pagetual_pageBar{margin-top:10px!important}.pagetual_pageBar+div{margin-top:-6px!important}" +}, +{ + "name": "Buon Dua - 看圖", + "author": "skofkyo", + "example": "https://buondua.com/saint-photolife-%E2%80%93-zzyuri-%EC%AE%B8%EB%A6%AC-blueming-part-2-57-photos-27769", + "url": "^https?://buondua\\.com/", + "init": "document.querySelectorAll('.article-fulltext>*:not(p)').forEach(e=>{e.remove()});", + "nextLink": "//span[a/@class='pagination-link is-current']/following-sibling::span/a", + "pageElement": ".article-fulltext p", + "replaceElement": "nav.pagination", + "pageBar": 0, + "css": ".content p:not(:last-child){margin-bottom:0!important}" +}, +{ + "name": "Buon Dua - 分類", + "author": "skofkyo", + "example": "https://buondua.com/", + "url": "^https?://buondua\\.com/", + "nextLink": ".pagination-next", + "pageElement": ".blog.columns", + "replaceElement": "nav.pagination", + "rate": 3, + "css": ".view-list>div:not(.search-box,.blog.columns){display:none!important;}" +}, +{ + "name": "HOTGIRLchina - 看圖", + "author": "skofkyo", + "example": "https://hotgirlchina.com/xiuren-no-5261-zhu-ke-er-%e6%9c%b1%e5%8f%af%e5%84%bfflora-115-photos/", + "url": "^https?://hotgirlchina\\.com/.+photos/", + "nextLink": ".nextpostslink", + "pageElement": ".entry-inner>p", + "replaceElement": "nav.pagination", + "css": ".entry p{margin-bottom:0!important}[id^='boxzilla']{display:none!important}", + "pageBar": 0 +}, +{ + "name": "HOTGIRLchina - 搜索 - 修正頁碼錯誤", + "author": "skofkyo", + "example": "https://hotgirlchina.com/?s=XIUREN", + "url": "^https?://hotgirlchina\\.com/(page/(\\d+)/)?\\?s=", + "init": "setTimeout(()=>{document.querySelectorAll('.wp-pagenavi a').forEach(a=>{a.href=a.href.replace(/\\/$/,'')})},1000)", + "nextLinkByUrl": [ + "(page/(\\d+)/)?(\\?s=\\w+)$", + "page/{($2.0||1)+1}/$3", + ".nextpostslink" + ], + "pageElement": "#grid-wrapper article", + "pageAction": "setTimeout(()=>{document.querySelectorAll('.wp-pagenavi a').forEach(a=>{a.href=a.href.replace(/\\/$/,'')})},1000)", + "replaceElement": "nav.pagination", + "rate": 3 +}, +{ + "name": "HOTGIRLchina - 分類", + "author": "skofkyo", + "example": "https://hotgirlchina.com/tag/xiuren/", + "url": "^https?://hotgirlchina\\.com/tag/", + "nextLink": ".nextpostslink", + "pageElement": "#grid-wrapper article", + "replaceElement": "nav.pagination", + "rate": 3 +}, +{ + "name": "BeautyLeg - 圖片", + "author": "skofkyo", + "example": "http://www.beautyleg6.com/xingganmeinv/201406/133.html", + "url": "^https?://www.beautyleg\\d+\\.com/.+\\.html", + "init": "function gae(e){return document.querySelectorAll(e)}let imgs=gae('.contents img');let _img='';for(let i=0;ia", + "pageElement": "#videos", + "replaceElement": ".pagination" +}, +{ + "name": "MissKon.com - 看圖", + "author": "skofkyo", + "example": "https://misskon.com/xiaoyu-vol-831-yang-chen-chen-yome-74-anh/", + "url": "^https?://misskon\\.com/", + "init": "document.querySelectorAll('p>br').forEach(br=>{br.remove()})", + "nextLink": ".page-link>span+a", + "pageElement": "p>img", + "replaceElement": ".page-link", + "pageBar": 0 +}, +{ + "name": "MissKon.com", + "author": "skofkyo", + "example": "https://misskon.com/", + "url": "^https?://misskon\\.com/(page/\\d+/)?", + "nextLink": ".current+a", + "pageElement": "article.item-list", + "replaceElement": ".pagination", + "rate": 3 +}, +{ + "name": "Sexyxbody - 看圖", + "author": "skofkyo", + "example": "https://cn.sexyxbody.com/sexy_article/i103swym3j/", + "url": "^https?://cn\\.sexyxbody\\.com/sexy_article", + "nextLink": "//a[text()='下一页»']", + "pageElement": ".album-post-body>.separator,.album-post-body>br", + "pageBar": 0, + "replaceElement": ".pgz-pagination,.album-post-inner,.breadcrumbs" +}, +{ + "name": "Sexyxbody", + "author": "skofkyo", + "example": "https://cn.sexyxbody.com/zone_detail/ouz5i1j", + "url": "^https?://cn\\.sexyxbody\\.com/(zone_detail|tag_list|tag_detail)", + "nextLink": "a.next", + "pageElement": ".blog-posts", + "rate": 3, + "replaceElement": ".pgz-pagination" +}, +{ + "name": "爱看 INS", + "author": "skofkyo", + "example": "https://www.ikanins.com/", + "url": "^https?://www\\.ikanins\\.com/", + "nextLink": "a[rel='next']", + "pageElement": "#masonry", + "replaceElement": ".wp-pagenavi" +}, +{ + "name": "Xiuren 秀人网", + "author": "skofkyo", + "example": "http://www.xiuren.org/category/TuiGirl.html", + "url": "^https?://www\\.xiuren\\.org/", + "include": "#page", + "pinUrl": true, + "nextLink": ".next", + "pageElement": "#main>.loop", + "replaceElement": "#page", + "rate": 3 +}, +{ + "name": "优美图库 - 圖片", + "author": "skofkyo", + "example": "https://www.umei.cc/meinvtupian/xingganmeinv/255974.htm", + "url": "^https?://(www\\.)?(umeitu|umei)\\.(com|fun|cc)/", + "include": ".pages", + "nextLink": "li.thisclass+li>a", + "pageElement": ".big-pic>a", + "replaceElement": ".pages", + "pageBar": 0 +}, +{ + "name": "优美图库 - 分類", + "author": "skofkyo", + "example": "https://www.umei.cc/meinvtupian/xingganmeinv/", + "url": "^https?://(www\\.)?(umeitu|umei)\\.(com|fun|cc)/", + "include": "#pageNum", + "nextLink": ".thisclass+a", + "pageElement": "#infinite_scroll,.pic-list>ul", + "replaceElement": "#pageNum", + "css": "#infinite_scroll+.pagetual_pageBar{margin-top:-15px!important}.pagetual_pageBar+#infinite_scroll{margin-top:-15px!important}ul+.pagetual_pageBar{margin-top:-10px!important}" +}, +{ + "name": "24fa", + "author": "skofkyo", + "example": "https://www.24fa.com/n93763c49.aspx", + "url": "^https?://(www\\.)?\\d{2,3}(m|w|faw|fa|aa)?\\.[a-z]{2,4}/m?n\\w+\\.aspx$", + "include": "//title[contains(text(),'24FA')]", + "init": "document.querySelectorAll('#content br').forEach(br=>{br.remove()})", + "nextLink": "li.p_current+li>a", + "pageElement": "#content img[alt]", + "replaceElement": ".pager", + "css": "img{margin-top:0px!important;margin-bottom:1px!important}", + "pageBar": 0 +}, +{ + "name": "無名網", + "author": "skofkyo", + "example": "https://9wm9.info/viewforum/38", + "url": "^https?://9wm9\\.info/", + "nextLink": "//a[text()='Next page']", + "pageElement": ".box tbody", + "replaceElement": "nav.pagination" +}, +{ + "name": "亞色影庫", + "author": "skofkyo", + "example": "https://www.yasetube.com/video/category/javhd", + "url": "^https?://www\\.yasetube\\.com/", + "action": 1, + "waitElement": [ + ".video-preview+img[data-src].loaded" + ], + "nextLink": "//li[a/@class='current']/following-sibling::li[1]/a", + "pageElement": "#main .videos-list", + "replaceElement": ".pagination", + "pageAction": "let gae=e=>document.querySelectorAll(e);let url=gae('#wpst-main-js')[0].src;if(url){fetch(url).then(res=>res.text()).then((res)=>{eval(res)})}let ps=gae('.videos-list');let last=ps.length-1;ps[last].querySelectorAll('img.loaded').forEach(img=>{if(!img.parentNode.getAttribute('data-thumbs')){img.onmouseenter=e=>{img.classList.add('video-img--hidden')}}})" +}, +{ + "name": "r18.clickme.net", + "author": "skofkyo", + "example": "https://r18.clickme.net/c/new", + "url": "^https?://r18\\.clickme\\.net/", + "nextLink": "li.active+li>a", + "pageElement": "#article-list", + "replaceElement": "#pages" +}, +{ + "name": "fc2cm 去模糊", + "author": "skofkyo", + "example": "https://fc2cm.com/?c=sensen321&nc=0", + "url": "^https?://fc2cm\\.com/", + "pinUrl": true, + "nextLink": "span+a", + "pageElement": "#contentInner aside dl", + "replaceElement": ".st-pagelink", + "pageBar": 0, + "css": ".sampleimg_b,img{-webkit-filter:none!important}img{-moz-opacity:1!important;opacity:1!important}" +}, +{ + "name": "fc2hub", + "author": "skofkyo", + "example": "https://javten.com/", + "url": "^https?://javten\\.com/", + "action": 1, + "nextLink": "a[rel='next']", + "pageElement": "//div[(div/div/@class='card shadow') and @class='row']", + "replaceElement": ".pagination" +}, +{ + "name": "PPP.Porn", + "author": "skofkyo", + "example": "https://ppp.porn/", + "url": "^https?://ppp\\.porn/", + "nextLink": "//li[a/@class='pagination__item pagination__item--selected']/following-sibling::li[1]/a", + "pageElement": "div[id^='list_videos']", + "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae(\"div[id^='list_videos']\");let last=ps.length-1;ps[last].querySelectorAll('figure.aspect-ratio>a').forEach(a=>{a.onmouseenter=e=>{let v=document.createElement('VIDEO');let img=a.querySelector('img');$(v).attr({loop:'',autoplay:'',src:img.getAttribute('data-preview'),webkitplaysinline:'true',playsinline:'true'});$(v).css({position:'absolute',left:'0',top:'0',width:img.offsetWidth+'px',height:img.offsetHeight+'px',background:'#000000',visibility:'visible'});a.appendChild(v)};a.onmouseleave=e=>{a.querySelector('VIDEO').remove()}})", + "replaceElement": "nav.pagination", + "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:16px!important}.padding-bottom-md{padding-bottom:unset!important}nav.pagination{padding-top:var(--space-md)!important}" +}, +{ + "name": "PPP.Porn - 首頁(載入更多 …)", + "author": "skofkyo", + "example": "https://ppp.porn/", + "url": "^https?://ppp\\.porn/", + "loadMore": ".btn.btn--sm" +}, +{ + "name": "R18hub", + "author": "skofkyo", + "example": "https://r18hub.com/", + "url": "^https?://r18hub\\.com/", + "exclude": ".model-wrapper", + "nextLink": "li.active+li.wave-effect>a", + "pageElement": "ul.item-list", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-5px!important}" +}, +{ + "name": "tokyomotion", + "author": "skofkyo", + "example": "https://www.tokyomotion.net/videos", + "url": "^https?://www\\.tokyomotion\\.net/(videos|albums)", + "nextLink": "ul.pagination:not(.pagination-lg) li.active+li>a", + "pageElement": ".well.well-sm+.row,#wrapper>.container>.row .row>*", + "replaceElement": ".pagination" +}, +{ + "name": "tokyomotion - 相簿原圖", + "author": "skofkyo", + "example": "https://www.tokyomotion.net/photo/884869/", + "url": "^https?://www\\.tokyomotion\\.net/photo", + "nextLink": "//a[text()='下一步' or text()='Next']", + "pageElement": ".thumb-overlay", + "replaceElement": ".clearfix+div.pull-left+div", + "pageBar": 0 +}, +{ + "name": "tokyomotion - 相簿", + "author": "skofkyo", + "example": "https://www.tokyomotion.net/album/67719", + "url": "^https?://www\\.tokyomotion\\.net/album/\\d+", + "nextLink": "ul.pagination:not(.pagination-lg) li.active+li>a", + "pageElement": ".row>div[id^=album_photo_]", + "replaceElement": ".pagination", + "pageBar": 0 +}, +{ + "name": "tokyomotion", + "author": "skofkyo", + "example": "https://www.tokyomotion.net/", + "url": "^https?://www\\.tokyomotion\\.net/(page=\\d+)?$", + "action": 1, + "nextLink": "li.active+li>a", + "pageElement": ".col-sm-12>.row>.col-sm-12>.row>*", + "replaceElement": ".pagination", + "wait": "return !!doc.querySelector('.col-lg-4 img');" +}, +{ + "name": "7mmtv - 分類", + "author": "skofkyo", + "example": "https://7mmtv.sx/zh/uncensored_random/all/index.html", + "url": "^https?://7mmtv\\.sx/(zh|en|ja|ko)/[a-z]+_(random|list)/", + "nextLink": "li.page-item.current+li.page-item>a", + "pageElement": ".row.content", + "replaceElement": "nav.pagination-row", + "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae('.row.content');let last=ps.length-1;ps[last].querySelectorAll('.video').forEach(div=>{div.onmouseenter=e=>{let v=div.querySelector('video[data-src]');v.setAttribute('src',v.getAttribute('data-src'));$(v).css({visibility:'visible'});let l=div.querySelector('.video-loader');$(l).css({visibility:'visible'});setTimeout(()=>{$(l).css({visibility:'hidden'})},500)};div.onmouseleave=e=>{let v=div.querySelector('video[data-src]');let l=div.querySelector('.video-loader');v.setAttribute('src','');v.setAttribute('style','');$(l).css({visibility:'hidden'})}})", + "css": ".pagetual_pageBar{margin-top:-10px!important}" +}, +{ + "name": "tktube", + "author": "skofkyo", + "example": "https://tktube.com/categories/fc2/", + "url": "^https?://(www\\.)?tktube\\.com/", + "nextLink": ".next>a", + "pageElement": ".list-videos", + "replaceElement": "[id$='pagination']", + "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae('.list-videos');let last=ps.length-1;ps[last].querySelectorAll('.item>a>.img').forEach(div=>{div.onmouseenter=e=>{let v=document.createElement('video');let img=div.querySelector('.thumb');$(v).attr({loop:'',autoplay:'',src:img.getAttribute('data-preview'),webkitplaysinline:'true',playsinline:'true'});$(v).css({position:'absolute',left:'0',top:'0',width:img.offsetWidth+'px',height:img.offsetHeight+'px',background:'#000000',visibility:'visible'});div.appendChild(v)};div.onmouseleave=e=>{div.querySelector('video').remove()}})" +}, +{ + "name": "playav", + "author": "skofkyo", + "example": "https://playav.tv/category/chinese-model", + "url": "^https?://playav\\.tv/", + "pinUrl": true, + "nextLink": "//li[a/@class='current']/following-sibling::li[1]/a", + "pageElement": "#main .thumb-block", + "replaceElement": ".pagination", + "rate": 3, + "pageInit": "doc.querySelectorAll('.post-thumbnail-container>img:not(.loaded)').forEach(img=>{if(img){img.setAttribute('class','loaded')}})", + "pageAction": "let url=document.querySelector('#wpst-main-js').src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})", + "css": "#dclm_modal_screen,#dclm_modal_content,[class^='happy'],.widget.widget_text{display:none!important}" +}, +{ + "name": "JAVCT", + "author": "skofkyo", + "example": "https://javct.net/uncensored", + "url": "^https?://javct\\.net/", + "nextLink": "li.paginator__item.paginator__item--next>a", + "pageElement": ".container>.row.row--grid>*", + "replaceElement": ".paginator", + "rate": 3, + "css": ".text__links{display:none!important}" +}, +{ + "name": "Jable", + "author": "skofkyo", + "example": "https://jable.tv/new-release/", + "url": "^https?://(jable\\.tv|fs1\\.app)/", + "action": 0, + "refreshByClick": "[data-action='ajax']", + "nextLinkByJs": "let checked=doc.querySelector('.container li.active>a,.container li:has(>.active)+li>a');let blockId=checked.dataset.blockId;let parameters=checked.dataset.parameters.replace(/.*;sort_by:/, '');let[sortBy,from]=parameters.split(';');sortBy=sortBy.replace('sort_by:','');from=from.replace('from:','');let searchParams=new URLSearchParams({mode:'async',function:'get_block',block_id:blockId,sort_by:sortBy,from:from});return'?'+searchParams;", + "pageElement": "section>.row", + "replaceElement": ".pagination", + "pageAction": "let ps=[...document.querySelectorAll('section>.row')];let last=ps.at(-1);last.querySelectorAll('.img-box>a').forEach(a=>{a.onmouseenter=e=>{let v=document.createElement('video');let img=a.querySelector('img');let src=img.dataset.preview;$(v).attr({loop:'',autoplay:'',src:src});$(v).css({position:'absolute',left:'0',top:'0',width:img.offsetWidth+'px',height:img.offsetHeight+'px',background:'#000000',visibility:'visible'});a.appendChild(v)};a.onmouseleave=e=>{a.querySelector('video').remove()}})", + "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:20px!important}" +}, +{ + "name": "壹纳网 - 內文", + "author": "skofkyo", + "example": "https://yinaw.com/23035.html", + "url": "^https?://yinaw\\.com/\\d+\\.html", + "nextLink": ".fenye span+a", + "pageElement": ".article-content>p,.article-content>h2,.article-content>#erphpdown", + "replaceElement": ".fenye", + "pageBar": 0 +}, +{ + "name": "壹纳网 - 文章", + "author": "skofkyo", + "example": "https://yinaw.com/", + "url": "^https?://yinaw\\.com/", + "nextLink": ".next-page>a", + "pageElement": ".excerpt", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar+.excerpt{margin-top:-2px!important;}" +}, +{ + "name": "Rawkuma - 漫畫閱讀", + "author": "skofkyo", + "example": "https://rawkuma.com/mikata-ga-yowa-sugite-hojo-mahou-ni-toushite-ita-kyuutei-mahou-shi-tsuihou-sarete-saikyou-wo-mezasu-chapter-1/", + "url": "^https?://rawkuma\\.com/", + "pinUrl": true, + "action": 1, + "history": 2, + "nextLink": ".ch-next-btn", + "pageElement": "#readerarea", + "replaceElement": ".chnav.ctop" +}, +{ + "name": "鹹濕仔日報", + "author": "skofkyo", + "example": "https://jdaily18.com/view1/category/%e5%af%ab%e7%9c%9f/", + "url": "^https?://jdaily18\\.com/", + "nextLink": "a.next", + "pageElement": "#post_container>*", + "replaceElement": ".pagination", + "rate": 3 +}, +{ + "name": "ACG漫画网 - 阅读", + "author": "skofkyo", + "example": "https://www.acgxmh.com/h/314618.html", + "url": "^https?://www\\.acgxmh\\.com/", + "nextLink": "#pages span+a", + "pageElement": ".manga-page img", + "replaceElement": "#pages", + "pageBar": 0, + "css": ".manga-page a{display:none!important}" +}, +{ + "name": "ACG漫画网 - 分类页", + "author": "skofkyo", + "example": "https://www.acgxmh.com/hentai/", + "url": "^https?://www\\.acgxmh\\.com/", + "nextLink": ".page.bigpage span+a", + "pageElement": "#list,#doujin_album", + "replaceElement": ".page.bigpage" +}, +{ + "name": "18x78", + "author": "skofkyo", + "example": "https://18x78.com/", + "url": "^https?://18x78\\.com/", + "nextLink": "a.next", + "pageElement": ".posts-wrapper", + "replaceElement": ".page-numbers", + "rate": 3 +}, +{ + "name": "绅士漫画 - 閱讀", + "author": "skofkyo", + "example": "https://wnacg.com/photos-view-id-15403544.html", + "action": 1, + "url": "^https?://(www\\.)?(wnacg|htcomic|ssmh\\d+)\\.[^/]+/photos-view", + "include": "span.newpagelabel", + "init": "let a=document.querySelector('#imgarea>a');a.outerHTML=a.innerHTML;", + "nextLink": "//a[text()='下一頁']", + "stopSign": "let p=doc.querySelector('span.newpagelabel').textContent;let m=p.match(/(\\d+)\\/(\\d+)/);if(m[1]==m[2])return true;", + "pageElement": "#picarea", + "replaceElement": ".newpagewrap,.png.bread,.grid_2.cc", + "pageBar": 0 +}, +{ + "name": "绅士漫画", + "author": "skofkyo", + "example": "https://wnacg.com/albums-index-cate-9.html", + "url": "^https?://(www\\.)?(wnacg|htcomic|ssmh\\d+)\\.[^/]+/(albums|search|photos-index)", + "nextLink": "span.thispage+a", + "pageElement": "li.gallary_item", + "replaceElement": ".paginator" +}, +{ + "name": "松鼠症倉庫 - 閱讀", + "author": "skofkyo", + "example": "https://ahri8.top/readOnline2.php?ID=97432&host_id=0", + "url": "^https?://[^/]+/readOnline2\\.php", + "include": "//div[@id='logo-group']//a[contains(text(),'松鼠症倉庫') or contains(text(),'松鼠症仓库')]", + "action": 1, + "pageElement": "[id^=read_online_image]", + "replaceElement": "#page_num1,#next_page_btn_area,#page_num2,#next_page_btn_area2", + "pageBar": 0, + "css": "#content>.col-lg-12,[id^=read_online_ads_area],#Big_Image~*{display:none!important}" +}, +{ + "name": "松鼠症倉庫", + "author": "skofkyo", + "example": "https://ahri8.top/index.php?route=comic/comicList&t=1714492800", + "url": "^https?://[^/]+/.+\\.php", + "include": "//div[@id='logo-group']//a[contains(text(),'松鼠症倉庫') or contains(text(),'松鼠症仓库')]", + "action": 1, + "nextLink": ".pagination li.active+li>a", + "pageElement": "#gallery", + "replaceElement": ".pagination", + "css": "#content>[style^='text-align']{display:none!important}" +}, +{ + "name": "LoLHentai", + "author": "skofkyo", + "example": "https://www.lolhentai.net/", + "url": "^https?://www\\.lolhentai\\.net/", + "action": 1, + "waitElement": [ + "#thumbnails img.thumbnail" + ], + "nextLink": "a[rel='next']", + "pageElement": "//div[ul/li/div/a/img[@class='thumbnail']]", + "replaceElement": ".pagination", + "rate": 3 +}, +{ + "name": "The Hentai World", + "author": "skofkyo", + "example": "https://thehentaiworld.com/?new", + "url": "^https?://thehentaiworld\\.com/", + "nextLink": "a.next, .current+.minithumb>a", + "papageElementeE": ".thumb, #doujin>a", + "replaceElement": ".navigation, #miniThumbContainer" +}, +{ + "name": "nhentai - Free Hentai Manga, Doujinshi and Adult Comics", + "url": "^https?://nhentai\\.website/g/", + "example": "https://nhentai.website/g/514378/70/", + "preload": 0, + "action": 3 +}, +{ + "name": "nhentai.net - Free Hentai Manga, Doujinshi and Adult Comics", + "url": "^https?://nhentai\\.net/g/\\d+/", + "example": "https://nhentai.net/g/583072/1", + "pageElement": "#image-container", + "nextLink": "#content > section.reader-bar > div.reader-pagination > a.next" +}, +{ + "name": "Danbooru", + "author": "skofkyo", + "example": "danbooru.donmai.us,e621.net", + "url": "^https?://(danbooru\\.)?(donmai|e621)\\.(us|net)/", + "nextLink": "a[rel='next']", + "pageElement": "article", + "replaceElement": ".paginator" +}, +{ + "name": "Rule34", + "author": "skofkyo", + "example": "rule34hentai.net,rule34.paheal.net", + "url": "^https?://rule34(hentai|\\.paheal)\\.net/", + "action": 1, + "nextLink": "//a[text()='Next']", + "pageElement": ".thumb", + "replaceElement": "#paginator" +}, +{ + "name": "Gelbooru", + "author": "skofkyo", + "example": "gelbooru.com,tbib.org,safebooru.org,illusioncards.booru.org,rule34.xxx,hypnohub.net,xbooru.com", + "url": "^https?://(illusioncards\\.)?(gelbooru|tbib|safebooru|booru|rule34|hypnohub|xbooru)\\.(com|org|xxx|net)/.+s=list", + "nextLink": "a[alt='next']", + "pageElement": ".thumbnail-container, span.thumb", + "replaceElement": "#paginator", + "action": 1 +}, +{ + "name": "yande", + "author": "skofkyo", + "example": "konachan.net,konachan.com,yande.re,www.sakugabooru.com", + "url": "^https?://(konachan\\.net|konachan\\.com|yande\\.re|www\\.sakugabooru\\.com)/(post|comment)($|\\?|#|/search\\?)", + "pageElement": "//li[contains(@class, 'creator-id-')]|//div[@id='comment-list']/div[@class='post']|//table[@class='highlightable']", + "nextLink": "//a[@class='next_page']", + "replaceElement": "#paginator", + "css": ".javascript-hide { display: inline-block !important; }.pagetual_pageBar { display: inline-flex!important;width: 100%!important; }" +}, +{ + "name": "hitomi - Gallery Info", + "author": "skofkyo", + "example": "https://hitomi.la/doujinshi/akisame-mabara-ni-natte-%E4%B8%AD%E6%96%87-2431684.html#1", + "url": "^https?://hitomi\\.la/(cg|manga|doujinshi|gamecg)/.+\\.html#1$", + "pinUrl": true, + "css": "li[class^='simplePagerPage']{display: inline-block!important;}.simplePagerNav{display:none!important}" +}, +{ + "name": "hitomi - 分類", + "author": "skofkyo", + "example": "https://hitomi.la/?page=2", + "url": "^https?://hitomi\\.la/", + "include": ".page-container", + "action": 1, + "nextLinkByUrl": [ + "([^?]+)(\\?page=(\\d+))?$", + "$1?page={($3.0||1)+1}", + ".page-container>ul>li:last-child>a" + ], + "pageElement": ".gallery-content>*", + "replaceElement": ".page-container", + "waitElement": [ + "", + ".gallery-content[style]" + ] +}, +{ + "name": "E-Hentai", + "author": "skofkyo", + "example": "http://e-hentai.org/,https://exhentai.org/", + "url": "^https?://(e-hentai|exhentai)\\.org/", + "nextLink": "//table[@class='ptt']//a[string()='>'] | id('next') | id('unext')", + "pageElement": ".itg>div,.itg>tbody>tr:not(:first-of-type),.gl1t, #gdt>div:not(.c),#gdt>a:not(.c), #img", + "replaceElement": ".ptt,.ptb,.sn,.searchnav", + "css": "#img {max-width: 100% !important;height: auto !important;min-height: 400px;}", + "pageInit": "let img=doc.getElementById('img');img&&img.setAttribute('onerror','setTimeout(()=>{this.src=this.src.replace(/(\\\\?time=.*)?$/,`?time=${Date.now()}`)},3000)');" +}, +{ + "name": "177 漫画/xxiav - 圖片", + "author": "skofkyo", + "example": "www.177picyy.com,www.xxiav.com", + "url": "^https?://www.(177picyy|177pica|xxiav).com/", + "include": ".page-links", + "nextLink": "//div[@class='page-links']/a[span/i[@class='be be-arrowright']]", + "pageElement": ".single-content", + "replaceElement": ".page-links", + "pageBar": 0, + "css": ".single-content+.single-content{margin-top:0px!important}" +}, +{ + "name": "177 漫画/xxiav - 分類", + "author": "skofkyo", + "example": "www.177picyy.com,www.xxiav.com", + "url": "^https?://www.(177picyy|177pica|xxiav)\\.com/", + "include": ".nav-links", + "nextLink": "span.current+a", + "pageElement": "#main article", + "replaceElement": ".nav-links" +}, +{ + "name": "禁漫天堂 - 分类页", + "author": "skofkyo", + "example": "https://18comic.vip/,https://18comic.org/", + "url": "^https?://18comic\\.(vip|org)/(album|search|blogs|videos|movies|promotes)", + "pinUrl": true, + "init": "setTimeout(()=>{let c=document.querySelector('button#chk_cover');if(c){c.click()}},2000);document.querySelectorAll(`img[src*='blank.jpg'][data-original]`).forEach(img=>{img.src=img.getAttribute('data-original')})", + "nextLink": "#wrapper>.container>div:not(.row)>.pagination .prevnext", + "pageElement": "#wrapper>.container>.row:not(:last-of-type):not(.visible-xs)", + "replaceElement": "#wrapper>.container>div:not(.row)>.pagination", + "autoClick": "#chk_cover", + "css": ".row>[style='z-index: 0;'], .col-lg-3.col-md-3.col-sm-3.col-xs-6 {display: none !important;}" +}, +{ + "name": "Hanime1 - 漫画", + "author": "skofkyo", + "example": "https://hanime1.me/comic/80357/1", + "url": "^https?://hanime1\\.me/comic\\/\\d+\\/\\d", + "nextLink": "a.comic-show-content-nav-item-wrapper.arrow-right", + "pageElement": "img#current-page-image", + "replaceElement": ".comic-show-content-nav", + "css": "#current-page-image {display: block !important; margin: 0 auto !important; max-height: calc(250vh) !important;}", + "pageBar": 0 +}, +{ + "name": "Hanime1", + "author": "skofkyo", + "example": "https://hanime1.me/search?genre=%E8%A3%8F%E7%95%AA&duration=&sort=&query=&year=&month=", + "url": "^https?://hanime1\\.me/(search|comics)", + "nextLink": "a[rel='next']", + "pageElement": ".home-rows-videos-wrapper>a,.content-padding-new,.comics-related-wrapper>.comic-rows-videos-div", + "replaceElement": ".pagination", + "lazyImgSrc": "data-srcset", + "css": ".home-rows-videos-div{margin-bottom:10px!important;}.search-pagination{margin-top:-50px!important;}" +}, +{ + "name": "尤美图库", + "author": "skofkyo", + "example": "https://www.umeitu.com/i/", + "url": "^https?://www\\.umeitu\\.com/", + "nextLink": "a.current+a", + "pageElement": ".viptop~li", + "replaceElement": ".page_navi", + "css": "img{opacity:1!important}" +}, +{ + "name": "嘿~色女孩", + "author": "skofkyo", + "example": "https://heysexgirl.com/", + "url": "^https?://heysexgirl\\.com/", + "action": 1, + "nextLink": "span.current+a:not(.next)", + "pageElement": "#main" +}, +{ + "name": "photo.camcam.cc", + "author": "skofkyo", + "example": "http://photo.camcam.cc/", + "url": "^https?://photo\\.camcam\\.cc/", + "action": 1, + "nextLink": ".current+a", + "pageElement": "#post_masonry", + "replaceElement": ".wp-pagenavi" +}, +{ + "name": "免费私房图 - 看圖", + "author": "skofkyo", + "example": "http://www.mfsft.com/gaoqing/photo/20221021/139363.html,http://www.ywmtw.com/yao/kantu/20240223/160249.html", + "url": "^https?://[^/]+/", + "include": "#ztlui3", + "action": 1, + "init": "document.querySelectorAll('#picg a').forEach(a=>{a.outerHTML=a.innerHTML})", + "nextLink": "//div[@class='page']/div[@class='pagelist']//a[text()='下一页']", + "pageElement": "#picg img[alt]", + "replaceElement": ".page>.pagelist", + "css": "#picg img:hover{transform:none !important}#picg img{max-width:100% !important;display:block !important;margin:0 auto !important;filter:blur(0px) !important}body>br,.interestline+center,center+#pic,#xzpap1,#divpsgx,#bdivpx,#divfts,#divftsp,#app+div,#xzappsq,div.bg-text,#divpsg,#divStayTopright2,#bdssy,#qrcode2,#d5tig,#pcapicb,#google_translate_element,#d5a>*:not([id]):not([class]){display:none !important}", + "pageBar": 0 +}, +{ + "name": "免费私房图 - 分類", + "author": "skofkyo", + "example": "http://www.mfsft.com/gaoqing/tulie/1_1.html,http://www.ywmtw.com/yao/kantum/1_1.html", + "url": "^https?://[^/]+/", + "include": ".pagelist a[title='尾页']", + "init": "let gax=x=>{let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes};gax(\"//div[@id='list']/ul/li[a[not(@title)] or starts-with(@id,'listmmt')]\").forEach(e=>{e.remove()})", + "nextLink": "//div[@class='pagelist']/p/u[b]/following-sibling::a[1]", + "pageElement": "//div[@id='list']/ul/li[a[@title and img[@class='lazy']]/following-sibling::div[@class='title']]", + "replaceElement": ".pagelist", + "rate": 4, + "css": "[href^='https://www.358a.vip/'],#span_xzappsq,#span_listp,#bdssx,#listmt,#listmt2,#listmt3,#listmt4,#listmmt2,#xzappsq,#listp,#listja,.interestline~br{display:none!important}" +}, +{ + "name": "秀人集 / 秀人美女網 / 爱美女网 - 搜索", + "author": "skofkyo", + "example": "https://www.123783.xyz/plus/search/index.asp?keyword=XiuRen,https://www.xiu01.top/plus/search/index.asp?keyword=XiuRen,http://www.imn5.vip/plus/search/index.asp?keyword=XiuRen", + "url": "/plus/search/", + "include": ".page", + "nextLink": "a.current+a", + "pageElement": ".list>.node", + "replaceElement": ".page", + "css": "section.container>p{display:none!important}" +}, +{ + "name": "秀人集 / 秀人美女網 / 爱美女网 - 看圖", + "author": "skofkyo", + "example": "https://www.123783.xyz/XiuRen/11496.html,https://www.xiu01.top/XiuRen/2022/202212158.html,http://www.imn5.vip/XiuRen/XiuRen/11535.html", + "url": "^https?://", + "include": ".page", + "init": "document.querySelectorAll('br').forEach(br=>{br.remove()})", + "nextLink": "//a[text()='下页']", + "pageElement": ".content img,.imgwebp img", + "replaceElement": ".page", + "pageBar": 0, + "css": ".item_title>[id],section.container>p{display:none!important}" +}, +{ + "name": "秀人集 / 秀人美女網 / 爱美女网 - 分類", + "author": "skofkyo", + "example": "https://www.123783.xyz/XiuRen/,https://www.xiu01.top/XiuRen/,http://www.imn5.vip/XiuRen/XiuRen/", + "url": "^https?://", + "include": "div.page", + "exclude": [ + ".item_info", + ".imgwebp" + ], + "nextLink": "//a[text()='下页']", + "pageElement": "div.page+ul.update_area_lists>*,script+ul.update_area_lists>*,.excerpts>.excerpt", + "replaceElement": "div.page" +}, +{ + "name": "Xiutaku - 分類", + "author": "skofkyo", + "example": "https://xiutaku.com/brand/1", + "url": "^https?://(xiutaku\\.com|kiutaku\\.com)/(\\w+/\\d+|\\w+)?$", + "init": "document.querySelectorAll('.search-form~*,.blog~*:not([class]),.pagination~*').forEach(e=>{e.remove()});", + "pageElement": ".columns", + "replaceElement": ".pagination" +}, +{ + "name": "绅士猫 - 分類", + "author": "skofkyo", + "example": "https://www.cos6.net/", + "url": "^https?://www\\.cos6\\.net/", + "pageElement": "posts.posts-item", + "insert": ".pagenav.ajax-pag", + "insertPos": 1, + "replaceElement": ".pagenav" +}, +{ + "name": "图宅网 - 分類", + "author": "skofkyo", + "example": "https://www.tuzac.com/", + "url": "^https?://www\\.tuzac\\.com/", + "pageElement": "#content", + "css": ".content-container .content{margin-right:0px!important}.ad-side-right,.footer{display:none!important}" +}, +{ + "name": "Fuskator- 分類", + "author": "skofkyo", + "example": "https://fuskator.com/", + "url": "^https?://fuskator\\.com/", + "pageElement": ".thumblinks", + "replaceElement": "td.pages" +}, +{ + "name": "Asianude4u - 分類", + "author": "skofkyo", + "example": "https://www.asianude4u.net/", + "url": "^https?://www\\.asianude4u\\.net/", + "action": 1, + "pageElement": "#infinite-articles", + "replaceElement": ".wp-pagenavi", + "css": ".ms-item.homeimg{display:none!important}" +}, +{ + "name": "美人图 - 看圖", + "author": "skofkyo", + "example": "https://meirentu.cc/pic/147617207297.html", + "url": "^https?://meirentu\\.\\w+/pic/", + "include": ".item_info", + "init": "document.querySelectorAll('.content br').forEach(br=>{br.remove()})", + "nextLink": "//a[text()='下页']", + "pageElement": ".content img", + "replaceElement": "div.page", + "pageBar": 0 +}, +{ + "name": "美人图 - 分類", + "author": "skofkyo", + "example": "https://meirentu.cc/group/xiuren.html", + "url": "^https?://meirentu\\.\\w+/group", + "nextLink": "//a[text()='下页'] | //a[@class='current']/following-sibling::a[1]", + "stopSign": [ + "ul.update_area_lists img" + ], + "pageElement": "ul.update_area_lists", + "replaceElement": "div.page", + "css": ".pagetual_pageBar{margin-top: -10px!important;margin-bottom: -10px!important;}.update_area_lists{margin-top: -10px!important;margin-bottom: 0px!important;}" +}, +{ + "name": "JieAV", + "author": "skofkyo", + "example": "www.jieav.com,www.qinav.com,www.qinimg.com,www.yinmh.com,www.txtxi.com,www.dnaav.com,www.jiedm.com,www.tasexy.com,www.feiav.com,www.liliav.com,www.keaiav.com,www.miliav.com,www.huiav.com,www.heihd.com,www.pornff.com,www.comfff.com", + "url": "^https?://(www|cn|jp|kr|ru)\\.(jieav|qinav|qinimg|yinmh|txtxi|dnaav|jiedm|tasexy|feiav|liliav|keaiav|miliav|huiav|heihd|pornff|comfff)\\.(com|xyz|top)/", + "nextLink": "a.active+a", + "pageElement": ".list_box>ul:not([id]):not([class]),.site+.actor_box>ul", + "replaceElement": ".pages", + "lazyImgSrc": "img", + "rate": 3, + "pageInit": "doc.querySelectorAll(`.image>img[img^='h']`).forEach(img=>{img.src=img.getAttribute('img');img.setAttribute('img','')})" +}, +{ + "name": "成人色情分享論壇", + "author": "skofkyo", + "example": "https://www.rouav.com/magnet/index.html", + "url": "^https?://www\\.rouav\\.com/magnet", + "nextLink": ".active+a", + "pageElement": "//div[@class='magnet']", + "replaceElement": ".pages", + "css": ".pagetual_pageBar{margin-top:-17px!important;margin-bottom:0px!important}" +}, +{ + "name": "成人色情分享論壇", + "author": "skofkyo", + "example": "https://www.rouav.com/", + "url": "^https?://www\\.rouav\\.com/(home)?", + "nextLink": ".active+a", + "pageElement": "//div[not(div/@id='loading') and @class='box']", + "replaceElement": ".pages", + "lazyImgSrc": "img" +}, +{ + "name": "FC2 电子市场", + "author": "skofkyo", + "example": "https://adult.contents.fc2.com/search/?q=&genre=30&type=1", + "url": "^https?://adult\\.contents\\.fc2\\.com/search", + "nextLink": "span.items+a[data-link-name='pager']", + "pageElement": ".c-cntCard-110-f", + "replaceElement": ".c-pager-101" +}, +{ + "name": "俺の3Dエロ動画", + "author": "skofkyo", + "example": "https://oreno3d.com/", + "url": "^https?://oreno3d\\.com/", + "nextLink": "a[rel='next']", + "pageElement": ".g-main-grid>article", + "replaceElement": ".pagination" +}, +{ + "name": "JavTorrent", + "author": "skofkyo", + "example": "ijavtorrent.com,projectjav.com", + "url": "^https?://(ijavtorrent|projectjav)\\.com/", + "nextLink": "a.btn-secondary+a", + "pageElement": ".movie-list, .articles-list, .actress-list", + "replaceElement": "//a[contains(@class, 'gonext')]/parent::div", + "css": ".pagetual_pageBar{margin-top:0px!important}" +}, +{ + "name": "JAV Library", + "author": "skofkyo", + "example": "https://www.javlibrary.com/", + "url": "^https?://www\\.javlibrary\\.com/", + "action": 1, + "nextLink": "a.next", + "pageElement": ".video, table.pubgroup>tbody>tr:not(#header), table.post", + "replaceElement": ".page_selector" +}, +{ + "name": "JavBooks", + "author": "skofkyo", + "example": "https://javbooks.com/,https://jmvbt.com/", + "url": "^https?://(javbooks|jmvbt)\\.com/", + "nextLink": "span.pageback>a", + "pageElement": ".Po_topic, .Po_u_topic", + "replaceElement": ".PageBar", + "css": ".pagetual_pageBar{margin-top:10px!important;margin-bottom:2px!important}" +}, +{ + "name": "141 JAV", + "author": "skofkyo", + "example": "https://www.141jav.com/new", + "url": "^https?://www\\.(141jav|141ppv)\\.com/", + "nextLink": "a.pagination-next", + "pageElement": "body>.container>.card, body>.container>.columns", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-10px!important;margin-bottom:20px!important;}" +}, +{ + "name": "AV6K", + "author": "skofkyo", + "example": "https://av6k.com/rihanwuma/", + "url": "^https?://av6k\\.com/(rihanwuma|rihanyouma|jxny|chinese-av-porn|surenzipai|oumeiwuma|chengrendongman|plus)", + "nextLink": ".thisclass+li>a,td[width='50']>a", + "pageElement": ".listA:not(.clickadulist)", + "replaceElement": ".pages_c" +}, +{ + "name": "JAVMOST 禁用", + "author": "skofkyo", + "example": "https://www.javmost.cx/category/uncensor/", + "url": "^https?://www\\.javmost\\.cx/", + "enable": 0 +}, +{ + "name": "MOVIEFFM", + "author": "skofkyo", + "example": "https://www.movieffm.net/category/hd-uncensored/", + "url": "^https?://www\\.movieffm\\.net/", + "nextLink": "span.current+a", + "pinUrl": true, + "pageElement": "#archive-content,.items,.blog-list-items", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-25px!important}" +}, +{ + "name": "Avgle & AV01", + "author": "skofkyo", + "example": "avgle.com,www.av01.tv", + "url": "^https?://(www\\.)?(avgle|av01)\\.(com|tv)/", + "nextLink": ".prevnext", + "pageElement": "//div[(div/div/a/div/@class='thumb-overlay') and @class='row']", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-9px!important}" +}, +{ + "name": "GGJAV", + "author": "skofkyo", + "example": "https://ggjav.com/main/uncensored", + "url": "^https?://ggjav\\.com/", + "nextLink": ".pager>a:last-child[href]", + "pageElement": ".item.columns:not(.native_ads), .columns.model_chunk", + "replaceElement": ".pager" +}, +{ + "name": "Porn87", + "author": "skofkyo", + "example": "https://porn87.com/", + "url": "^https?://porn87\\.com/", + "nextLink": ".pagination-next:not(.mobile_pagination)>a", + "pageElement": ".column:not(.native_ads)", + "replaceElement": ".pagination" +}, +{ + "name": "porn78.info", + "author": "skofkyo", + "example": "https://porn78.info/,https://nyaa.porn78.info/", + "url": "^https?://(nyaa\\.)?porn78.info/", + "action": 1, + "nextLink": ".general-pagination .selected+li>a", + "pageElement": "#portfolio>li", + "replaceElement": ".general-pagination" +}, +{ + "name": "JavDisk", + "author": "skofkyo", + "example": "https://javdoe.to/,https://javfinder.li/", + "url": "^https?://(javdoe|javfinder)\\.[a-z]{2,3}/", + "action": 1, + "nextLink": "//a[text()='Next']", + "pageElement": ".videos-list", + "replaceElement": ".pagination" +}, +{ + "name": "Javhd.today", + "author": "skofkyo", + "example": "https://javhd.today/", + "url": "^https?://javhd\\.today/", + "nextLink": ".pagination>li.active+li>a", + "pageElement": "ul.videos,ul.playlists,div.models,[id^='blog']", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:10px!important}" +}, +{ + "name": "JavBus / AVMOO", + "author": "skofkyo", + "example": "https://www.javbus.com/,https://avmoo.click/tw", + "url": "^https?://(www\\.)?(javbus|avmoo)\\.(com|click)/", + "nextLink": "#next, .pagination>.active+li>a", + "pageElement": "#waterfall.masonry", + "replaceElement": ".pagination" +}, +{ + "name": "JavDB", + "author": "skofkyo", + "example": "https://javdb.com/", + "url": "^https?://javdb\\.com/", + "nextLink": "a.pagination-next", + "pageElement": ".movie-list, #videos, #makers, #series, #actors>div", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:5px!important}" +}, +{ + "name": "H 次元", + "author": "skofkyo", + "example": "https://h-ciyuan.com/", + "url": "^https?://h-ciyuan\\.com/", + "nextLink": ".next", + "pageElement": ".gridview-posts", + "replaceElement": ".nav-links" +}, +{ + "name": "Latino Hentai", + "author": "skofkyo", + "example": "https://latinohentai.com/", + "url": "^https?://latinohentai\\.com/", + "nextLink": ".current+a", + "pageElement": ".items", + "replaceElement": ".pagination" +}, +{ + "name": "ACG - 🏠 西普拉斯驿站|小西驿站 - 数码,音乐,ACG论坛", + "url": "^https?://post\\.cplus8\\.com/", + "example": "https://post.cplus8.com/t/acg", + "pageElement": ".DiscussionList-discussions>li", + "nextLink": "//li[button[contains(@class, 'Button--primary') and @data-page]]/following-sibling::li[1]/button[@data-page]" +}, +{ + "name": "韩漫天堂漫画", + "url": "^https?://\\w+\\.npdn\\.top/chapter/", + "example": "https://w226.npdn.top/chapter/yirenzhixia/101661.html", + "nextLink": "#mainControlNext", + "action": 2, + "pageElement": "body > div.main > ul" +}, +{ + "name": "YouJizz", + "author": "skofkyo", + "example": "https://www.youjizz.com/", + "url": "^https?://www\\.youjizz\\.com/", + "action": 1, + "nextLink": ".pagination-next", + "pageElement": "//div[div[@class='video-thumb']]", + "replaceElement": ".pagination, .mobilePager", + "pageInit": "doc.querySelectorAll('video[preload]').forEach(e=>{e.src=e.parentNode.getAttribute('data-clip')})", + "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}let ps=gax(\"//div[div[@class='video-thumb']]\");let last=ps.length-1;ps[last].querySelectorAll('a.frame.video').forEach(a=>{a.onmouseenter=e=>{let v=a.querySelector('video');v.style='';v.setAttribute('loop','')};a.onmouseleave=e=>{let v=a.querySelector('video');v.style.display='none';v.removeAttribute('loop')}})" +}, +{ + "name": "PornPic", + "author": "skofkyo", + "example": "https://www.pornpic.com/", + "url": "^https?://www\\.pornpic\\.com/", + "action": 2, + "pageElement": ".grid.gallery-grid" +}, +{ + "name": "Good Sex Porn", + "author": "skofkyo", + "example": "http://goodsexporn.org/", + "url": "^https?://goodsexporn\\.org/", + "nextLink": ".pagination>span+a:not(.next)", + "pageElement": ".block.block", + "replaceElement": ".pagination" +}, +{ + "name": "EPORNER", + "author": "skofkyo", + "example": "https://www.eporner.com/", + "url": "^https?://[a-z]{2,3}\\.eporner\\.com/", + "nextLink": ".nmnext", + "pageElement": "#vidresults>[id],.photosgrid,main>.mbprofile", + "replaceElement": ".numlist2", + "pageAction": "EPtbnsStandardRebind()", + "css": ".pagetual_pageBar{margin-top:-15px!important}.photosgrid+.pagetual_pageBar{margin-top:10px!important}.mbprofile+.pagetual_pageBar{margin-top:0px!important}.mbphoto2+.pagetual_pageBar{display:none!important}" +}, +{ + "name": "色色啦", + "author": "skofkyo", + "example": "https://www.seselah.com/", + "url": "^https?://www\\.seselah\\.com/", + "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.classList.add('loaded');e.previousElementSibling.setAttribute('srcset',e.previousElementSibling.getAttribute('data-srcset'))})", + "nextLink": "li.active+li>a", + "pageElement": "//div[a/div/picture]", + "replaceElement": ".pagination", + "pageInit": "doc.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.classList.add('loaded');e.previousElementSibling.setAttribute('srcset',e.previousElementSibling.getAttribute('data-srcset'))})" +}, +{ + "name": "91Porn", + "author": "skofkyo", + "example": "http://91porn.com/index.php", + "action": 1, + "url": "^https?://(0118\\.)?(91porn|workarea7)\\.(com|live)/", + "nextLink": "//a[text()='»']", + "pageElement": ".row .row>div", + "replaceElement": "#paging" +}, +{ + "name": "Thumbzilla", + "author": "skofkyo", + "example": "https://www.thumbzilla.com/newest", + "url": "^https?://www\\.thumbzilla\\.com/", + "nextLink": ".page_next>a", + "pageElement": ".responsiveListing>li:not([id]", + "replaceElement": ".pagination" +}, +{ + "name": "RedTube", + "author": "skofkyo", + "example": "https://www.redtube.com/hot?cc=us", + "url": "^https?://www\\.redtube\\.com/", + "exclude": "#trending_country_section", + "nextLink": "#wp_navNext", + "pageElement": ".videoblock_list:not([id*='_vid_']):not([id*='_premium_']), .content_limit>ul>li.channel-box", + "replaceElement": "#w_pagination", + "pageAction": "let url=document.querySelector(\"script[src*='default-redtube.js']\").src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})", + "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:0px!important}" +}, +{ + "name": "Porned Up 禁用", + "author": "skofkyo", + "example": "https://pornedup.com/", + "url": "^https?://pornedup.com/", + "enable": 0 +}, +{ + "name": "PicHunter 禁用", + "author": "skofkyo", + "example": "https://www.pichunter.com/", + "url": "^https?://www\\.pichunter\\.com/", + "enable": 0 +}, +{ + "name": "PornHub photo", + "author": "skofkyo", + "example": "https://cn.pornhub.com/photo/825175581", + "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/photo/\\d+", + "init": "let a=document.querySelector('.centerImage img[alt]').parentNode;a.outerHTML=a.innerHTML;", + "nextLink": ".arrowRight", + "stopSign": [ + [ + ".itemCount", + "(\\d+)$" ], - "init": "setTimeout(()=>{document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.getAttribute('data-src');e.classList.add('loaded')})},5000)", - "nextLink": "a.nextBtn:not([disabled])", - "pageElement": "#chapterContent", - "replaceElement": "head>title,.i-block:nth-child(3) span[itemprop='name'],h1.fs-25,.prevBtn,a.nextBtn", - "pageInit": "doc.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.getAttribute('data-src');e.classList.add('loaded')})" - }, - { - "name": "K-漫神 閱讀", - "example": "https://kmansin09.com/bbs/board.php?bo_table=2001&wr_id=9984280", - "url": "^https?://kmansin\\d+\\.com/", - "include": "#ep_box", - "nextLink": ".panel-heading a[title='次']", - "pageElement": ".view-content", - "rate": 10, - "css": ".view-padding{padding:0px!important}.remote{display:none!important}" - }, - { - "name": "K-漫神 目錄", - "example": "https://kmansin09.com/bbs/board.php?bo_table=2001&wr_id=9984203&sfl=wr_subject&stx=PICK+ME+UP", - "url": "^https?://kmansin\\d+\\.com/", - "exclude": "#ep_box", - "nextLink": ".pagination li.active+li:not(.disabled)>a[href]", - "pageElement": ".list-body", - "replaceElement": ".pagination", - "pageBar": 0, - "rate": 10 - }, - { - "name": "嗨皮漫畫 - 給本王顯示全部章節", - "example": "https://m.happymh.com/manga/daiwangraoming", - "url": "^https?://m\\.happymh\\.com/manga/", - "autoClick": "#expandButton" - }, - { - "name": "嗨皮漫畫 - 更新頁", - "example": "https://m.happymh.com/latest", - "url": "^https?://m\\.happymh\\.com/latest$", - "loadMore": ".more-div-btn" - }, - { - "name": "嗨皮漫畫 - 閱讀 - 禁用", - "example": "https://m.happymh.com/manga/shishijilingdishejishi", - "url": "^https?://m\\.happymh\\.com/reads/", - "enable": "0" - }, - { - "name": "包子漫畫分類 - 漫畫在新分頁打開", - "example": "https://www.webmota.com/", - "url": "^https?://[^/]+/", - "include": [ - "//title[contains(text(),'包子漫畫') or contains(text(),'包子漫画')]", - ".comics-card" - ], - "exclude": [ - ".comic-contain", - ".comics-detail" - ], - "init": "let openInNewTab=()=>document.querySelectorAll('.comics-card a:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});", - "nextLink": "0" - }, - { - "name": "包子漫畫 - 查看全部章節", - "example": "https://www.baozimh.com/comic/dawangraoming-yuedongwenhua", - "url": "^https?://[^/]+/comic/", - "include": [ - "//title[contains(text(),'包子漫畫') or contains(text(),'包子漫画')]", - "#button_show_all_chatper" - ], - "nextLink": "0", - "autoClick": "#button_show_all_chatper" - }, - { - "name": "包子漫畫 - 閱讀", - "example": "https://www.kukuc.co/comic/chapter/dawangraoming-yuedongwenhua/0_0.html", - "url": "^https?://[^/]+/comic/chapter/[^/]+/\\w+\\.html", - "include": [ - "//title[contains(text(),'包子漫畫') or contains(text(),'包子漫画')]", - ".chapter-main.scroll-mode>.comic-contain amp-img>img[amp-img-id]" - ], - "history": 2, - "action": 1, - "pinUrl": true, - "init": "let gae=e=>document.querySelectorAll(e);let E=gae('.comic-contain')[0];let F=new DocumentFragment();let imgs=gae('.comic-contain amp-img');imgs.forEach(e=>{let img=new Image();img.className='comic-contain__item';img.src=e.getAttribute('src');F.appendChild(img)});E.innerHTML='';E.appendChild(F);let loop=setInterval(()=>{let set=document.querySelector('#interstitial_fade');if(set){clearInterval(loop);set.remove()}},100);setTimeout(()=>{if(loop)clearInterval(loop)},5000)", - "nextLink": "#next-chapter", - "pageElement": ".comic-contain", - "replaceElement": "//head/title | //span[@class='title'] | //div[@class='comic-chapter']/div[@class='next_chapter'] | //div[@class='bottom-bar']", - "pageInit": "let gae=e=>doc.querySelectorAll(e);let E=gae('.comic-contain')[0];let F=new DocumentFragment();let imgs=gae('.comic-contain amp-img');imgs.forEach(e=>{let img=new Image();img.className='comic-contain__item';img.src=e.getAttribute('src');F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar a').forEach(e=>{if(/\\/\\d+_\\d+_\\d+\\.html$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>10){ps[0].remove();let ds=gae('.chapter-main>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('span.title');if(t)return t.innerText", - "css": ".mobadsq{display:none!important}ul{margin-block-start:-2px!important;margin-block-end:2px!important}.pagetual_pageBar{margin-top:7px!important}" - }, - { - "name": "包子漫畫2 - 閱讀", - "example": "https://baozimh.org/manga/kaijuyizuoshan-yulemeicuo/0_2/", - "url": "^https?://baozimh\\.org/manga/[^/]+/\\w+/", - "history": 2, - "pinUrl": true, - "init": "let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let E=gx(\"//div[(div/img) and contains(@class,'gb-container')]\");let F=new DocumentFragment();document.querySelectorAll('img[data-src]').forEach(e=>{let img=new Image();img.src=e.dataset.src;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "nextLink": "//a[span[text()='下一话']]", - "pageElement": "//div[(div/img) and contains(@class,'gb-container')] | //div[(img) and contains(@class,'gb-container')]", - "replaceElement": "head>title,.gb-inside-container>h1,.last,#pagenation", - "pageInit": "let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let E=gx(\"//div[(div/img) and contains(@class,'gb-container')]\");let F=new DocumentFragment();doc.querySelectorAll('img[data-src]').forEach(e=>{let img=new Image();img.src=e.dataset.src;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}let c=gax(\"//div[(img) and contains(@class,'gb-container')]\");if(c.length>10){c[0].remove()}let p=gax(\"//*[contains(@class,'pagetual_pageBar')]\");if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.last');if(t)return t.innerText", - "css": ".pagetual_pageBar+.gb-container{margin-top:-3px!important}" - }, - { - "name": "包子漫畫2 - 分類/搜索", - "example": "https://baozimh.org/", - "url": "^https?://baozimh\\.org/", - "nextLink": "span.current+a,a[aria-label='Next page']", - "pageElement": "#main>article article,header.page-header~article", - "replaceElement": "nav.ct-pagination,.paging-navigation", - "pageBar": 0 - }, - { - "name": "GODA漫画 - 閱讀", - "example": "https://chapter.godamanga.com/manga/wozhendebushiqiyunzhizi-vv/0_0/", - "url": "^https?://([a-z]{2,7}\\.)?godamanga\\.com/manga/[^/]+/\\w+/", - "history": 2, - "init": "document.querySelectorAll('img[data-lazy-src]').forEach(e=>{e.src=e.getAttribute('data-lazy-src')})", - "nextLink": "//a[span[text()='下一话']]", - "pageElement": "//div[div/div/div/img[@decoding='async']]", - "replaceElement": "head>title,.hero-section,#pagenation", - "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}let c=gax(\"//div[div/div/div/img[@decoding='async']]\");if(c.length>10){c[0].remove()}let p=gax(\"//*[contains(@class,'pagetual_pageBar')]\");if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.last-item>span');if(t)return t.innerText", - "css": ".pagetual_pageBar+.stk-row{margin-top:-3px!important}" - }, - { - "name": "GODA漫画 - 分類/搜索", - "example": "https://godamanga.com/", - "url": "^https?://(cn\\.)?godamanga\\.com/", - "nextLink": "span.current+a,a[aria-label='Next page']", - "pageElement": "//article[a/img]", - "replaceElement": "nav.ct-pagination,.paging-navigation", - "pageBar": 0 - }, - { - "name": "COCOMANGA - 閱讀 - 雙擊前往下一章,鍵盤左右鍵上下章", - "example": "https://www.colamanhua.com/15177/1/2.html", - "url": "^https?://www\\.colamanhua\\.com/", - "include": ".mh_comicpic", - "init": "let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;function next(e){let key=window.event?e.keyCode:e.which;if(key==39){e.preventDefault();let n=gx(\"//a[contains(@href,'html') and text()='下一章']\");if(n){n.click()}else{alert('沒有下一章了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){e.preventDefault();let p=gx(\"//a[contains(@href,'html') and text()='上一章']\");if(p){p.click()}else{alert('沒有上一章了!')}}};document.addEventListener('keydown',prev);function dcnext(){let n=gx(\"//a[contains(@href,'html') and text()='下一章']\");if(n){n.click()}else{alert('沒有下一章了!')}};document.addEventListener('dblclick',dcnext);", - "nextLink": "0", - "pinUrl": true, - "css": ".mh_wrap{width:100%!important;min-width:100%!important}" - }, - { - "name": "COCOMANGA - 分類/搜索", - "example": "https://www.colamanhua.com/show?orderBy=update", - "url": "^https?://www\\.colamanhua\\.com/(show|search)", - "init": "let w = document.querySelector(`h2 a[href*='weeklyCount']`); if (!location.search) w.click()", - "nextLinkByJs": "let next=doc.querySelector('.fed-page-info a.fed-btns-green+a[onclick]');if(next)return location.origin+location.pathname+location.search.replace(/&page=\\d+$/,'')+'&page='+next.innerText", - "pageElement": "//div[contains(@class,'fed-list-head')]/following-sibling::ul[li/a/span] | //dl[dt/a/span]", - "pageInit": "doc.querySelectorAll('a[data-original]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.original}')`})", - "replaceElement": ".fed-page-info" - }, - { - "name": "看漫画手機版 - 閱讀", - "example": "https://m.manhuagui.com/comic/30278/405998.html", - "url": "^https?://m\\.manhuagui\\.com/comic/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "$('body').append('
    ');let ge=e=>document.querySelector(e);let str=`var imagesObserver=new IntersectionObserver((entries,observer)=>{entries.forEach(entry=>{if(entry.isIntersecting){observer.unobserve(entry.target);let realSrc=entry.target.dataset.src,nE=entry.target.nextElementSibling;if(realSrc){entry.target.src=realSrc;}if(nE&&nE.tagName=='IMG'&&nE.dataset.src){nE.src=nE.dataset.src;}}})});var loading_bak='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAAAAACbDccAAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAACYktHRAD/h4/MvwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cDDhUEC4m58W4AAAABb3JOVAHPoneaAAAF+UlEQVR42u3SQQkAMAzAwPo3MatVEQblTkEemQeB+R3ATcYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBILoeSc6MiLXg0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDMtMTRUMjE6MDM6NDcrMDA6MDBTB1yAAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTAzLTE0VDIxOjAzOjQ3KzAwOjAwIlrkPAAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0wMy0xNFQyMTowNDoxMSswMDowMLyj5cQAAAAASUVORK5CYII=';`;let script=document.createElement('script');script.type='text/javascript';script.innerHTML=str;ge('body').appendChild(script);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/x6c/)>-1).innerHTML.slice(26,-1);let imgDataCode=eval(code).slice(10,-11);let imgData=eval(imgDataCode);let loop=setInterval(()=>{let set=ge('#manga img');if(set){clearInterval(loop);let domain='https://i.hamreus.com';let F=new DocumentFragment();imgData.images.forEach(e=>{let img=new Image();img.src=loading_bak;img.dataset.src=`${domain+e}?e=${imgData.sl.e}&m=${imgData.sl.m}`;imagesObserver.observe(img);F.appendChild(img)});let E=ge('#manga');E.innerHTML='';E.appendChild(F);let n=ge(\"a[data-action='chapter.next']\");if(imgData.nextId==0){n.href=location.pathname.replace(/\\d+\\.html$/,'');n.innerText='返回目录'}}},100)", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/x6c/)>-1).innerHTML.slice(26,-1);let imgDataCode=eval(code).slice(10,-11);let imgData=eval(imgDataCode);let n=imgData.nextId;if(n!=0)return location.href.replace(/\\d+\\.html$/,'')+n+'.html';", - "pageElement": "//script[contains(text(),'x6c')]", - "insert": "#manga", - "insertPos": 2, - "replaceElement": "#mangaTitle", - "pageInit": "let ge=e=>document.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/x6c/)>-1).innerHTML.slice(26,-1);let imgDataCode=eval(code).slice(10,-11);let imgData=eval(imgDataCode);let domain='https://i.hamreus.com';let F=new DocumentFragment();imgData.images.forEach(e=>{let img=new Image();img.src=loading_bak;img.dataset.src=`${domain+e}?e=${imgData.sl.e}&m=${imgData.sl.m}`;imagesObserver.observe(img);F.appendChild(img)});let E=ge('#manga');E.appendChild(F);let n=ge(\"a[data-action='chapter.next']\");if(imgData.nextId==0){n.href=location.pathname.replace(/\\d+\\.html$/,'');n.innerText='返回目录'}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let titles=gae('.pagetual_pageBar');if(titles.length>10){titles[0].remove();let removes=gae('#manga>*');for(let i in removes){if(/pagetual_pageBar/.test(removes[i].className)){break}removes[i].remove()}}", - "pageBarText": "let t=doc.querySelector('#mangaTitle');if(t)return t.innerHTML.replace(/<.+>\\s?/g,'')", - "css": ".action-list li{width:50%!important}#action>ul>li:nth-child(n+2):nth-child(-n+3),.manga-page,.clickforceads{display:none!important}.manga-box img{border-top:0px!important;border-bottom:0px!important}" - }, - { - "name": "看漫画手機版 - 最新更新/排行榜/書架/搜索/漫画大全 檢視下20條記錄 - 漫畫在新分頁打開", - "example": "https://m.manhuagui.com/list/update.html", - "url": "^https?://m\\.manhuagui\\.com/", - "exclude": [ - "#manga", - "#chapter" - ], - "init": "let openInNewTab=()=>document.querySelectorAll('.top-slider-wrap a,.main-list a:not([target=_blank]),.cont-list a:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});", - "loadMore": "#more:not([style*='none'])>.more-go", - "css": ".clickforceads{display:none!important}" - }, - { - "name": "看漫画 - 閱讀", - "example": "https://www.manhuagui.com/comic/30278/405998.html", - "url": "^https?://(tw|www)\\.manhuagui\\.com/comic/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let str=`var imagesObserver=new IntersectionObserver((entries,observer)=>{entries.forEach(entry=>{if(entry.isIntersecting){observer.unobserve(entry.target);let realSrc=entry.target.dataset.src,nE=entry.target.nextElementSibling;if(realSrc){entry.target.src=realSrc;}if(nE&&nE.tagName=='IMG'&&nE.dataset.src){nE.src=nE.dataset.src;}}})});var loading_bak='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAAAAACbDccAAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAACYktHRAD/h4/MvwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cDDhUEC4m58W4AAAABb3JOVAHPoneaAAAF+UlEQVR42u3SQQkAMAzAwPo3MatVEQblTkEemQeB+R3ATcYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBILoeSc6MiLXg0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDMtMTRUMjE6MDM6NDcrMDA6MDBTB1yAAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTAzLTE0VDIxOjAzOjQ3KzAwOjAwIlrkPAAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0wMy0xNFQyMTowNDoxMSswMDowMLyj5cQAAAAASUVORK5CYII=';`;let script=document.createElement('script');script.type='text/javascript';script.innerHTML=str;ge('body').appendChild(script);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/x6c/)>-1).innerHTML.slice(26,-1);let imgDataCode=eval(code).slice(11,-11);let imgData=eval(imgDataCode);let loop=setInterval(()=>{let set=ge('.pr.tbCenter.cb img');if(set){clearInterval(loop);let domain='https://i.hamreus.com';let F=new DocumentFragment();imgData.files.forEach(e=>{let img=new Image();img.src=loading_bak;img.dataset.src=`${domain+imgData.path+e}?e=${imgData.sl.e}&m=${imgData.sl.m}`;imagesObserver.observe(img);F.appendChild(img)});let E=ge('.pr.tbCenter.cb');E.innerHTML='';E.appendChild(F)}},100)", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/x6c/)>-1).innerHTML.slice(26,-1);let imgDataCode=eval(code).slice(11,-11);let imgData=eval(imgDataCode);let n=imgData.nextId;if(n!=0)return location.href.replace(/\\d+\\.html$/,'')+n+'.html';", - "pageElement": "//script[contains(text(),'x6c')]", - "insert": ".pr.tbCenter.cb", - "insertPos": 2, - "replaceElement": ".title h2", - "pageInit": "let ge=e=>document.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/x6c/)>-1).innerHTML.slice(26,-1);let imgDataCode=eval(code).slice(11,-11);let imgData=eval(imgDataCode);let domain='https://i.hamreus.com';let F=new DocumentFragment();imgData.files.forEach(e=>{let img=new Image();img.src=loading_bak;img.dataset.src=`${domain+imgData.path+e}?e=${imgData.sl.e}&m=${imgData.sl.m}`;imagesObserver.observe(img);F.appendChild(img)});let E=ge('.pr.tbCenter.cb');E.appendChild(F);let pc=ge('.btn-red.prevC');let curl=location.href.replace(/\\d+\\.html.*/,'');let purl=curl+imgData.prevId+'.html';let nurl=curl+imgData.nextId+'.html';pc.href=purl;pc.removeAttribute('onclick');let p=ge('.btn-red.prev');p.href=purl;p.removeAttribute('onclick');if(imgData.nextId!=0){ge('.btn-red.nextC').href=nurl;let n=ge('.btn-red.next+a');n.href=nurl;n.removeAttribute('onclick')}else{ge('.btn-red.nextC').href=curl;let n=ge('.btn-red.next+a');n.href=curl;n.innerText=ge('#viewList').innerText;n.removeAttribute('onclick')}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let titles=gae('.pagetual_pageBar');if(titles.length>10){titles[0].remove();let removes=gae('.pr.tbCenter.cb>*');for(let i in removes){if(/pagetual_pageBar/.test(removes[i].className)){break}removes[i].remove()}}", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": ".title>div:not(.fr)>span,#pageSelect,.main-btn>a[href^='j'],.pager>a[href*='goPage'],.pager>span{display:none!important}.pr.tbCenter.cb>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "看漫画 - 分類", - "example": "https://www.manhuagui.com/list/lianzai/", - "url": "^https?://(www|tw)\\.manhuagui\\.com/list/", - "nextLink": "span.current+a", - "pageElement": "#contList", - "replaceElement": ".pager-cont,.result-count", - "css": ".pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "漫畫屋 - 閱讀", - "example": "https://mh5.tw/series-wunalfy-484928-1-%E4%B8%8D%E5%B9%B8%E8%81%B7%E6%A5%AD%E7%9A%84%E5%B9%B8%E9%81%8B?", - "url": "^https?://mh5\\.tw/series", - "pinUrl": true, - "nextLinkByJs": "let ge=e=>doc.querySelector(e);let np=ge('.num>.cur+a');let nc=ge('.next>a:not(.hui)');let c=ge('.num>.cur').innerText;let m=ge('.num>a:last-child').innerText-1;if(c!=m){return np.href}else if(nc){return nc.href}else return;", - "pageElement": ".ptview>img:not([style])", - "replaceElement": ".setnmh-pagedos", - "pageAction": "let gae=e=>document.querySelectorAll(e);let d=gae('img[alt][style]')[0];if(d)d.remove();gae('.pagetual_pageBar>a').forEach(e=>{if(!/-1-/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('.ptview>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText.replace(/\\(\\d+P\\)/,'')", - "rate": 10, - "css": ".setnmh-seebox img{max-width: 100% !important;display: block !important;margin: 0 auto !important;box-shadow:none!important}.setnmh-seebox{width:auto !important;max-width:800px !important}.num>a:last-child{display:none!important}" - }, - { - "name": "漫畫屋 - 分類", - "example": "https://mh5.tw/allcartoonlist", - "url": "^https?://mh5\\.tw/allcartoonlist", - "nextLink": "a.cur+a", - "pageElement": "dl.alllist", - "replaceElement": "div.num", - "css": ".pagetual_pageBar{margin-bottom:0px!important}.pagetual_pageBar+dl{margin-top:-10px!important}" - }, - { - "name": "zero搬运网 - PC版閱讀", - "example": "http://www.zerobywgeat.com/plugin.php?id=jameson_manhua&a=read&zjid=346180", - "url": "^https?://www\\.zerobywgeat\\.com/plugin\\.php", - "nextLink": "//a[span[contains(@uk-icon,'right')]]", - "pageElement": ".uk-zjimg", - "replaceElement": ".uk-grid-collapse,.uk-text-center,head>title", - "pageBarText": 1, - "css": ".uk-text-center.xg1.xs2{display:none!important}img[id]{margin-top:0px!important;margin-bottom:0px!important}" - }, - { - "name": "zero搬运网 - 分類", - "example": "http://www.zerobywgeat.com/", - "url": "^https?://www\\.zerobywgeat\\.com/", - "nextLink": "a.nxt", - "pageElement": "//div[div[contains(@class,'mbm')] and contains(@class,'rootcate')]", - "replaceElement": ".pg.page", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "Mangabz / Xmanhua - 漫畫目錄展開章節", - "example": "https://xmanhua.com/1904xm/,https://www.mangabz.com/1904bz/", - "url": "^https?://(www\\.)?(mangabz|xmanhua)\\.com/\\d+(bz|xm)/$", - "pinUrl": true, - "init": "showMoreItem()", - "autoClick": "//a[text()='章節']" - }, - { - "name": "Xmanhua - 手機版閱讀", - "example": "https://xmanhua.com/m10344/", - "url": "^https?://(www\\.)?xmanhua\\.com/m\\d+(-p\\d+)?/", - "include": ".bottom-bar", - "history": 2, - "pinUrl": true, - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.dataset.src});", - "nextLink": "//a[text()='下一章']", - "pageElement": "#cp_img", - "replaceElement": ".top-title,.bottom-bar,.toast-win,head>title", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=doc.querySelector('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{let m=document.title.match(/([^_]+)_([^_]+)/);let t=ge('.top-title');t.innerText=m[1].replace('漫畫','')+'_'+m[2]},100);let cs=gae('#cp_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let t=ge('body.toolbar');if(t){$('body').removeClass('toolbar')}else{$('body').addClass('toolbar')}});", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.top-title');if(t)return t.innerText.replace(/XManhua\\?.+\\?/,'')" - }, - { - "name": "Mangabz - 手機版閱讀", - "example": "https://www.mangabz.com/m38701/", - "url": "^https?://(www\\.)?mangabz\\.com/m\\d+(-p\\d+)?/", - "include": ".bottom-bar", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let b=ge('body.viewbody');if(b){b.innerHTML=b.innerHTML.replace('','');setTimeout(()=>{$('.top-bar-tool').removeAttr('style');$('.bottom-bar').removeAttr('style')},0)}function showtoolbar(){let t=ge('body.toolbar');if(t){$('body').removeClass('toolbar')}else{$('body').addClass('toolbar')}};document.addEventListener('click',showtoolbar);document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src});", - "nextLink": "//a[text()='下一章']", - "pageElement": "#cp_img", - "replaceElement": ".bottom-bar,.toast-win,head>title", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=ge('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{let m=document.title.match(/([^_]+)_([^_]+)/);let t=document.querySelector('.top-title');t.innerText=m[1].replace('漫畫','')+'_'+m[2];$('.bottom-bar').removeAttr('style')},100);", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('title');if(t)return t.innerText.match(/_(.+)_/)[1]" - }, - { - "name": "Xmanhua - PC版閱讀", - "example": "https://xmanhua.com/m10344/", - "url": "^https?://(www\\.)?xmanhua\\.com/m\\d+(-p\\d+)?/", - "include": ".reader-bottom-page-list", - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img>img');if(set){clearInterval(loop);ge('#cp_img').innerHTML=ge('#cp_img>img').outerHTML;ge('#showimage').removeAttribute('style');}},100);function showtoolbar(){let t=ge('.header.toolbar');if(t){$('.header').removeClass('toolbar');$('.header').removeAttr('style')}else{$('.header').addClass('toolbar');$('.header').attr('style','top: -64px;')}let b=ge('.reader-bottom.toolbar');if(b){$('.reader-bottom').removeClass('toolbar');$('.reader-bottom').removeAttr('style')}else{$('.reader-bottom').addClass('toolbar');$('.reader-bottom').attr('style','bottom: -50px;')}};document.addEventListener('click',showtoolbar);function hidetoolbar(){var e=e||window.event;if(e.wheelDelta<0||e.detail>0){$('.header').addClass('toolbar');$('.header').attr('style','top: -64px;');$('.reader-bottom').addClass('toolbar');$('.reader-bottom').attr('style','bottom: -50px;')}else{$('.header').removeClass('toolbar');$('.header').removeAttr('style');$('.reader-bottom').removeClass('toolbar');$('.reader-bottom').removeAttr('style')}};document.addEventListener('wheel',hidetoolbar);document.addEventListener('DOMMouseScroll',hidetoolbar);function keyhidetoolbar(e){let key=window.event?e.keyCode:e.which;if(key=='34'||key=='32'||key=='40'){$('.header').addClass('toolbar');$('.header').attr('style','top: -64px;');$('.reader-bottom').addClass('toolbar');$('.reader-bottom').attr('style','bottom: -50px;')}else{$('.header').removeClass('toolbar');$('.header').removeAttr('style');$('.reader-bottom').removeClass('toolbar');$('.reader-bottom').removeAttr('style')}};document.addEventListener('keydown',keyhidetoolbar);", - "nextLinkByJs": "let m=doc.querySelector('.relative>a').innerText.match(/(\\d+)\\/(\\d+)/);let nc=doc.querySelector('img[src*=right-2]');if(m[1]!=m[2]){let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/XMANHUA_CURL/)>-1).innerHTML;let c=eval(code.match(/XMANHUA_CURL[^;]+/)[0]);let url=location.origin+c;let next=url.replace(/(-p\\d+)?\\/$/,'')+'-p'+(parseInt(m[1])+1)+'/';return next}else if(nc&&nc.parentNode){if(/javascript/.test(nc.parentNode.href)){return;}else{return nc.parentNode.href}}", - "pageElement": "#cp_img>img", - "replaceElement": ".container", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-p\\d+\\/$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('.reader-title>a:last-child');if(t)return t.innerText.trim()", - "rate": 5, - "css": ".container{width:auto!important}#cp_img img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.reader-img-con{padding:64px 0 50px !important;}" - }, - { - "name": "Mangabz - PC版閱讀", - "example": "https://www.mangabz.com/m38701/", - "url": "^https?://(www\\.)?mangabz\\.com/m\\d+(-p\\d+)?/", - "include": ".container", - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img>img');if(set){clearInterval(loop);ge('#cp_img').innerHTML=ge('#cp_img>img').outerHTML}},100);function hidetoolbar(){var e=e||window.event;if(e.wheelDelta<0||e.detail>0){$('.top-bar').attr('style','top: -74px;')}else{$('.top-bar').removeAttr('style')}};document.addEventListener('wheel',hidetoolbar);document.addEventListener('DOMMouseScroll',hidetoolbar);function keyhidetoolbar(e){let key=window.event?e.keyCode:e.which;if(key=='34'||key=='32'||key=='40'){$('.top-bar').attr('style','top: -74px;')}else{$('.top-bar').removeAttr('style')}};document.addEventListener('keydown',keyhidetoolbar);", - "nextLinkByJs": "let m=doc.querySelector('[class^=bottom-page]').innerText.match(/(\\d+)-(\\d+)/);let nc=doc.querySelector('img[src*=xiayizhang]');if(m[1]!=m[2]){let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/MANGABZ_CURL/)>-1).innerHTML;let c=eval(code.match(/MANGABZ_CURL[^;]+/)[0]);let url=location.origin+c;let next=url.replace(/(-p\\d+)?\\/$/,'')+'-p'+(parseInt(m[1])+1)+'/';return next}else if(nc&&nc.parentNode){if(/javascript/.test(nc.parentNode.href)){return;}else{return nc.parentNode.href}}", - "pageElement": "#cp_img>img", - "replaceElement": ".container", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-p\\d+\\/$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('.top-title');if(t)return t.innerText.trim()", - "rate": 5, - "css": "a[href^='j']{display:none!important}.container{width:auto!important}#cp_img img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "Mangabz / Xmanhua - 分類", - "example": "https://www.mangabz.com/manga-list-0-0-0/,https://xmanhua.com/manga-list-0-0-0/", - "url": "^https?://(www\\.)?(mangabz|xmanhua)\\.com/(manga-list|search)", - "nextLink": "//div[contains(@class,'page-pagination')]//a[contains(text(), '>')]", - "pageElement": "ul.mh-list", - "replaceElement": ".page-pagination", - "css": ".mh-list{padding-bottom:0px!important}.pagetual_pageBar+.mh-list{padding-top:10px!important}.pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "风之动漫 - 閱讀", - "example": "https://manhua.fffdm.com/2/1040/,https://www.fffdm.com/manhua/132/222/", - "url": "^https?://(manhua|www)\\.fffdm\\.com/(manhua/)?\\d+/.+/", - "pinUrl": true, - "init": "let loop=setInterval(()=>{let mhpic=document.querySelector('#mhpic');if(mhpic&&mhpic.parentNode){let a=mhpic.parentNode;a.nextElementSibling.remove();a.outerHTML=a.innerHTML;clearInterval(loop)}},100);setTimeout(()=>{try{clearInterval(loop)}catch(e){}},5000)", - "nextLink": "//div[@class='navigation']/a[text()='下一页'][@href]", - "pageElement": "#mhpic", - "replaceElement": ".text-xl,.navigation", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#mhpic{border:none!important;padding:0!important;border-radius:0px!important;width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#main>div>div:not([id]){display:none!important}" - }, - { - "name": "動漫狂 - 手機版閱讀", - "example": "https://www.cartoonmad.com/m/comic/618700022010001.html", - "url": "^https?://www\\.cartoonmad\\.(cc|com)/m/comic/\\d+\\.html", - "history": 2, - "init": "let ge=e=>document.querySelector(e);let _src=ge('img[oncontextmenu]').src.match(/.+\\//)[0];let max=ge('.onpage').parentNode.lastElementChild.previousElementSibling.innerText;let F=new DocumentFragment();for(let i=1;i<=max;i++){let imgSrc;if(i<10){imgSrc=_src+'00'+i}else if(i<100){imgSrc=_src+'0'+i}else{imgSrc=_src+i}let img=new Image();img.className='PagetualImg';img.src=imgSrc;F.appendChild(img)};let E=ge('img[oncontextmenu]').parentNode.parentNode;E.innerHTML='';E.appendChild(F);", - "nextLinkByJs": "let lastPage=doc.querySelector('.onpage').parentNode.lastElementChild.previousElementSibling;let parseHTML=srt=>new DOMParser().parseFromString(srt,'text/html');return fetch(lastPage.href).then(res=>res.text()).then(async res=>{let fdoc=parseHTML(res);let ele=fdoc.querySelector('body>table>tbody>tr:nth-child(3)>td>a');return await fetch(ele.href).then(res=>res.text()).then(res=>{let ffdoc=parseHTML(res);let next=ffdoc.querySelector('.pages');if(next){return next.href}else{return null}})})", - "pageElement": "script[src*='/gpt.js']", - "insert": "body>table>tbody>tr:nth-child(3)>td", - "insertPos": 2, - "pageInit": "let ge=e=>doc.querySelector(e);let _src=ge('img[oncontextmenu]').src.match(/.+\\//)[0];let max=ge('.onpage').parentNode.lastElementChild.previousElementSibling.innerText;let F=new DocumentFragment();for(let i=1;i<=max;i++){let imgSrc;if(i<10){imgSrc=_src+'00'+i}else if(i<100){imgSrc=_src+'0'+i}else{imgSrc=_src+i}let img=new Image();img.className='PagetualImg';img.src=imgSrc;F.appendChild(img)};let E=document.querySelector('.PagetualImg').parentNode;E.appendChild(F);", - "pageAction": "let ps=document.querySelectorAll('.pagetual_pageBar');if(ps.length>10){ps[0].remove();let ds=document.querySelector('.PagetualImg').parentNode.querySelectorAll('*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}};const fetchPicSrc=url=>{return fetch(url).then(res=>{return res.url})};document.querySelectorAll('img.PagetualImg[src*=file]').forEach(async(img)=>{img.src=await fetchPicSrc(img.src)})", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let ge=e=>doc.querySelector(e);let _src=ge('img[oncontextmenu]').src.match(/.+\\//)[0];let max=ge('.onpage').parentNode.lastElementChild.previousElementSibling.innerText;let imgSrcArr=[];for(let i=1;i<=max;i++){let imgSrc;if(i<10){imgSrc=_src+'00'+i}else if(i<100){imgSrc=_src+'0'+i}else{imgSrc=_src+i}imgSrcArr.push(imgSrc)};return imgSrcArr", - "pageBarText": "let t=doc.querySelector('body>table>tbody>tr:nth-child(1)>td>table>tbody>tr>td:nth-child(2)>li>a:nth-child(3)');if(t)return t.innerText;", - "css": ".PagetualImg{max-width: 100% !important;display: block !important;margin: 0 auto !important;}body>table>tbody>tr:nth-child(5){display:none!important}" - }, - { - "name": "動漫狂 - 閱讀", - "url": "^https?://www\\.cartoonmad\\.(cc|com)/comic/\\d+\\.html", - "example": "https://www.cartoonmad.com/comic/6187.html", - "history": 2, - "init": "document.onkeydown=null;let ge=e=>document.querySelector(e);let _src=ge('img[onload]').src.match(/.+\\//)[0];let max=document.querySelectorAll('option[value]').length;let E=ge('img[onload]').parentNode.parentNode;let F=new DocumentFragment();for(let i=1;i<=max;i++){let imgSrc;if(i<10){imgSrc=_src+'00'+i}else if(i<100){imgSrc=_src+'0'+i}else{imgSrc=_src+i}let img=new Image();img.className='PagetualImg';img.src=imgSrc;F.appendChild(img)};E.innerHTML='';E.appendChild(F);let p=ge('body>table>tbody>tr:nth-child(2)').cloneNode(true);let c=ge('body>table>tbody>tr:last-child');c.parentNode.insertBefore(p,c);", - "nextLink": "//a[img[@src='/image/rad.gif']]", - "pageElement": "//script[contains(text(),'top.')]", - "replaceElement": "head>title", - "insert": "//td[@align]//td", - "insertPos": 2, - "pageInit": "let docge=e=>doc.querySelector(e);let ge=e=>document.querySelector(e);let _src=docge('img[onload]').src.match(/.+\\//)[0];let max=doc.querySelectorAll('option[value]').length;let E=ge('.PagetualImg').parentNode;let F=new DocumentFragment();for(let i=1;i<=max;i++){let imgSrc;if(i<10){imgSrc=_src+'00'+i}else if(i<100){imgSrc=_src+'0'+i}else{imgSrc=_src+i}let img=new Image();img.className='PagetualImg';img.src=imgSrc;F.appendChild(img)};E.appendChild(F);let re=docge('body>table>tbody>tr:nth-child(2)').outerHTML;ge('body>table>tbody>tr:nth-child(2)').outerHTML=re;ge('body>table>tbody>tr:nth-child(6)').outerHTML=re;", - "pageAction": "let ps=document.querySelectorAll('.pagetual_pageBar');if(ps.length>10){ps[0].remove();let ds=document.querySelector('.PagetualImg').parentNode.querySelectorAll('*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}};const fetchPicSrc=url=>{return fetch(url).then(res=>{return res.url})};document.querySelectorAll('img.PagetualImg[src*=file]').forEach(async(img)=>{img.src=await fetchPicSrc(img.src)})", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let ge=e=>doc.querySelector(e);let _src=ge('img[onload]').src.match(/.+\\//)[0];let max=doc.querySelectorAll('option[value]').length;let imgSrcArr=[];for(let i=1;i<=max;i++){let imgSrc;if(i<10){imgSrc=_src+'00'+i}else if(i<100){imgSrc=_src+'0'+i}else{imgSrc=_src+i}imgSrcArr.push(imgSrc)};return imgSrcArr", - "pageBarText": "let t=doc.querySelector('b+a[style]');if(t)return t.innerText;", - "css": ".PagetualImg{max-width: 100% !important;display: block !important;margin: 0 auto !important;}td[valign='top'][width='160'],td[width='12'],select[name],body>table>tbody>tr:nth-child(5){display:none!important}" - }, - { - "name": "動漫狂 - 分類", - "example": "https://www.cartoonmad.com/hotrank.html", - "url": "^https?://www\\.cartoonmad\\.(cc|com)/(hotrank|topcm|newcm|comic\\d+)(\\.\\d+)?\\.html", - "nextLink": "a.onpage+a", - "pageElement": "//table[tbody/tr/td/table/tbody/tr/td/a/span[@class='covers']]", - "replaceElement": "td[align='right']>table:last-child", - "css": ".pagetual_pageBar{margin-bottom:0px!important}" - }, - { - "name": "漫画人 / dm5 動漫屋 / 極速漫畫 - 手機版 - 漫畫在新分頁打開", - "example": "https://m.dm5.com/", - "url": "^https?://(www\\.manhuaren|m\\.dm5|m\\.1kkk)\\.com/", - "exclude": [ - "#cp_img", - "#tempc" - ], - "init": "let openInNewTab=()=>document.querySelectorAll('.swiper-wrapper a:not([target=_blank]),.manga-list a:not([target=_blank]),.rank-list a:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});" - }, - { - "name": "漫画人 / dm5 動漫屋 / 極速漫畫 - 手機版閱讀", - "example": "https://www.manhuaren.com/manhua-list-s2/,https://www.manhuaren.com/m198122/,https://m.dm5.com/m1331307/,https://m.1kkk.com/ch1063-1331307/,https://m.1kkk.com/vol1-4761/", - "url": "^https?://(www|m)\\.(manhuaren|1kkk|dm5)\\.(com|cn)/(m|ch|vol|other)[-_0-9]+/$", - "exclude": ".view-paging", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img img');if(set){clearInterval(loop);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML.slice(4,-1);let imgData=eval(eval(code).replace('var',''));let E=ge('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F)}},100)", - "nextLinkByJs": "let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let next=gx(\"//ul[@class='view-bottom-bar']//a[text()='下一章' and not(contains(@href,'-end'))]\");if(next)return location.origin+next.href.split(\"'\")[1]", - "pageElement": "#cp_img", - "replaceElement": "head>title,.view-fix-top-bar-title,ul.view-bottom-bar,.view-fix-bottom-bar", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML.slice(4,-1);let imgData=eval(eval(code).replace('var',''));let E=doc.querySelector('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let cs=gae('#cp_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let t=document.querySelector('body.toolbar');if(t){$('body').removeClass('toolbar')}else{$('body').addClass('toolbar')}});let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{gae('a[href*=pushHistory]').forEach(a=>{a.href=a.href.split(\"'\")[1]})},300);", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML.slice(4,-1);let imgSrcArr=eval(eval(code).replace('var',''));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('title');if(t)return t.innerText.match(/_([^_]+)/)[1]", - "css": ".view-bottom-bar>li:nth-child(n+2):nth-child(-n+3),.view-fix-bottom-bar>a:nth-child(2),.guide{display:none!important}.view-bottom-bar li{width:50%!important}.view-fix-bottom-bar>a{width:25%!important}" - }, - { - "name": "極速漫畫 - PC版單行本閱讀", - "example": "https://www.1kkk.com/vol1-4761/", - "url": "^https?://(www|hk)\\.1kkk\\.com/vol[-_0-9]+/$", - "include": "#chapterpager", - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img img');if(set){clearInterval(loop);document.body.style.overflow='scroll';ge('#cp_img').innerHTML='';let pcData=async(page)=>{if(page>DM5_IMAGE_COUNT){return}if(!mkey){var mkey=''}let apiUrl=location.href+'chapterfun.ashx'+`?cid=${DM5_CID}&page=${page}&key=${mkey}&language=1>k=6&_cid=${DM5_CID}&_mid=${DM5_MID}&_dt=${DM5_VIEWSIGN_DT}&_sign=${DM5_VIEWSIGN}`;let res=await fetch(apiUrl);let resText=await res.text();let imgSrc=await eval(resText)[0];let img=new Image();img.src=imgSrc;ge('#cp_img').appendChild(img);page++;pcData(page)};pcData(1)}},100)", - "nextLink": "//a[text()='下一章']", - "manualMode": true, - "css": "a[href^='j'],.chapterpager,.view-comment{display:none!important}#cp_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.container{width:auto!important}" - }, - { - "name": "dm5 動漫屋 / 極速漫畫 - PC版閱讀", - "example": "https://www.dm5.com/m1331307/,https://www.1kkk.com/ch1063-1331307/", - "url": "^https?://(www|tel|en|cnc)?\\.?(dm5|1kkk)\\.(com|cn)/(m|ch)[-_0-9]+/$", - "include": "#chapterpager", - "pinUrl": true, - "init": "let ge=(e)=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#cp_img>img');if(set){clearInterval(loop);ge('body').removeAttribute('style');ge('#cp_img').innerHTML=ge('#cp_img>img').outerHTML}},100);", - "nextLinkByJs": "let ge=(e)=>doc.querySelector(e);let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let c=ge('.chapterpager>span.current').innerText;let m=ge('.chapterpager>*:last-child').innerText;let nc=gx(\"//a[text()='下一章']\");if(c!=m){let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/DM5_CURL/)>-1).innerHTML;let dc=eval(code.match(/DM5_CURL[^;]+/)[0]);let url=location.origin+dc;let next=url.replace(/(-p\\d+)?\\/$/,'')+'-p'+(parseInt(c)+1)+'/';return next}else if(nc){return nc.href}else{return null}", - "pageElement": "#cp_img>img", - "replaceElement": ".container", - "pageAction": "let gae=(e)=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-p\\d+\\/$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('.active');if(t)return t.innerText.trim()", - "rate": 10, - "css": "a[href^='j'],.chapterpager{display:none!important}#cp_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.container{width:auto!important}" - }, - { - "name": "dm5 動漫屋 / 極速漫畫 - 分類", - "example": "https://www.dm5.com/manhua-list/,https://www.1kkk.com/manhua-list/", - "url": "^https?://(www|tel|en|cnc|hk)?\\.?(dm5|1kkk)\\.(com|cn)/manhua-([a-z]+/|list-area|list-tag|list-char)", - "init": "document.querySelectorAll('.cat-filter a').forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 1000)')})", - "nextLink": "//a[text()=' > ']", - "pinUrl": true, - "pageElement": ".box-body", - "replaceElement": ".page-pagination" - }, - { - "name": "無限動漫手機版 - 漫畫閱讀 - 雙擊下一集,鍵盤左右鍵上下集", - "example": "https://8.twobili.com/comic/insurance_15059.html?ch=1", - "url": "^https?://8\\.twobili\\.com/comic/insurance", - "pinUrl": true, - "init": "ge=e=>document.querySelector(e);function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=ge('#nextvol:not([style])');if(n){n.click()}else{alert('沒有下一集了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=ge('#prevvol');if(ch==1){alert('沒有上一集了!')}else{p.click()}}};document.addEventListener('keydown',prev);function dcnext(e){let n=ge('#nextvol:not([style])');if(n){n.click()}else{alert('沒有下一集了!')}};document.addEventListener('dblclick',dcnext);let E=ge('#TheTable>ul>li');let F=new DocumentFragment();for(let i=1;i<=ps;i++){let imgSrc='//img'+ss(c,4,2)+'.8comic.com/'+ss(c,6,1)+'/'+ti+'/'+ss(c,0,4)+'/'+nn([i])+'_'+ss(c,mm([i])+10,3,f)+'.jpg';let img=new Image();img.src=imgSrc;F.appendChild(img)};E.innerHTML='';E.appendChild(F);let ul=ge('#TheTable>ul');let v1=ge('.view_tmenu').cloneNode(true);let v2=document.querySelectorAll('.view_menut')[1];ul.appendChild(v2);ul.appendChild(v1);let b1=ge('.book_inc_title');let b2=ge('.book_link_item');ul.appendChild(b1);ul.appendChild(b2);", - "nextLink": "0", - "css": ".pinch-zoom-container{height: auto!important; display: contents!important}#pagenum,[onclick^='j'],#pageindex,ico+a+.material-icons.right-logo{display:none!important}.view_menut a{width:33.3%!important;max-width:33.3%!important}" - }, - { - "name": "無限動漫手機版 - 分類", - "example": "https://m.comicbus.com/category/update_comic-1.html", - "url": "^https?://m\\.comicbus\\.com/category/", - "nextLink": "//a[span/@class='mdi mdi-skip-next mdi-next-btn']", - "pageElement": "#list_dl", - "replaceElement": ".pager", - "css": ".pagetual_pageBar{margin-top:-1px!important;margin-bottom:5px!important}" - }, - { - "name": "無限動漫 - 漫畫閱讀2 - 鍵盤左右鍵上下集", - "example": "https://www.comicabc.com/online/new-18722.html?ch=26", - "url": "^https?://www\\.comicabc\\.com/online/new-\\d+\\.html(\\?ch=\\d+(-\\d+)?)?$", - "init": "if(location.href.indexOf('ch=')==-1)location.href=location.href+'?ch=1';function ge(e){return document.querySelector(e)}function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=ge('#nextvol:not([style])');if(n){n.click()}else{alert('沒有下一集了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=ge('#prevvol');if(location.href.match(/ch=(\\d+)/)[1]==1){alert('沒有上一集了!')}else{p.click()}}};document.addEventListener('keydown',prev);", - "nextLinkByUrl": [ - "(ch=\\d+)(-(\\d+))?$", - "$1-{($3.0||1)+1}" - ], - "stopSign": [ - [ - "#pagenum", - "(\\d+)" - ], - [ - "#pagenum", - "\\/(\\d+)" - ] - ], - "pageElement": "#TheImg", - "replaceElement": "#pagenum", - "css": "img[name='TheImg'] {max-width: 100% !important;display: block !important;margin: 0 auto !important;}#TheTable td:nth-child(1),#TheTable td:nth-child(3),.comment_block,#prevnext2,#prev,#next{display:none!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "無限動漫 - 漫畫閱讀 - 鍵盤左右鍵上下集", - "example": "https://www.comicabc.com/ReadComic/103/1/1_FU4_LD9_7.html", - "url": "^https?://www\\.comicabc\\.com/ReadComic/\\d+/\\d+/\\w+\\.html", - "init": "function ge(e){return document.querySelector(e)}function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=ge('#nextvol:not([style])');if(n){n.click()}else{alert('沒有下一集了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=ge('#prevvol');if(location.pathname.split('/')[3]==1){alert('沒有上一集了!')}else{p.click()}}};document.addEventListener('keydown',prev);", - "nextLinkByUrl": [ - "html(\\?p=(\\d+))?$", - "html?p={($2.0||1)+1}" - ], - "stopSign": [ - [ - "#pagenum", - "(\\d+)" - ], - [ - "#pagenum", - "\\/(\\d+)" - ] - ], - "pageElement": "#TheImg", - "replaceElement": "#pagenum", - "css": "img[name='TheImg'] {max-width: 100% !important;display: block !important;margin: 0 auto !important;}#TheTable td:nth-child(1),#TheTable td:nth-child(3),.comment_block,#prevnext2,#prev,#next{display:none!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "無限動漫 - 動漫大全", - "example": "https://www.comicabc.com/list/all_all_all/", - "url": "^https?://www\\.comicabc\\.com/list/", - "nextLink": "//a[span/@class='mdi mdi-skip-next']", - "pageElement": ".default_row_width .row>.p-0", - "replaceElement": ".pager", - "css": ".pagetual_pageBar{margin-top:-14px!important}" - }, - { - "name": "無限動漫 - 分類", - "example": "https://www.comicabc.com/comic/6-1.html", - "url": "^https?://www\\.comicabc\\.com/comic/[a-z0-9-]+\\.html", - "nextLink": "//a[span/@class='mdi mdi-skip-next']", - "pageElement": ".default_row_width>.p-0", - "replaceElement": ".pager", - "css": ".pagetual_pageBar{margin-top:-14px!important}" - }, - { - "name": "無限動漫 - 圖庫原圖瀏覽", - "example": "https://www.comicabc.com/photo/p6038.html?n=1", - "url": "^https?://www\\.comicabc\\.com/photo/p\\d+\\.html\\?n=\\d+$", - "nextLinkByUrl": [ - "(\\?n=(\\d+))$", - "?n={$2+1}", - "#next:not([style])" - ], - "pageElement": "img[name='TheImg']", - "replaceElement": ".photo_main_div > div:nth-child(1)", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "img[name='TheImg'] {max-width: 98% !important;display: block !important;margin: 0 auto !important;}" - }, - { - "name": "無限動漫 - 圖庫清單載入大圖", - "example": "https://www.comicabc.com/photo/6041.html", - "url": "^https?://www\\.comicabc\\.com/photo/\\d+\\.html$", - "init": "document.querySelectorAll('#dl img').forEach(img=>{let f=img.src.replace('.jpe','.jpg');img.src=f})", - "pinUrl": true - }, - { - "name": "無限動漫 - 圖庫", - "example": "https://www.comicabc.com/photo/1-1.html", - "url": "^https?://www\\.comicabc\\.com/photo/[0-9-]+\\.html$", - "nextLink": "//a[span/@class='mdi mdi-skip-next']", - "pageElement": ".photo_main_div .row", - "replaceElement": ".pager" - }, - { - "name": "無限動漫 - 類別停止自動匹配", - "example": "https://www.comicabc.com/html/1/", - "url": "^https?://www\\.comicabc\\.com/html/\\d+/$", - "nextLink": "0" - }, - { - "name": "砂之船动漫家 / 361中文漫画 - 手機版閱讀", - "example": "https://www.szcdmj.com/szcchapter/736400,https://www.361zw.com/361zwchapter/318949", - "url": "^https?://www\\.(szcdmj|361zw)\\.com/\\w{3,5}chapter/\\d+(\\?page=\\d+)?", - "include": ".view-bottom-bar", - "history": 2, - "pinUrl": true, - "nextLink": "//a[@href][text()='下一页' or text()='下一话']", - "pageElement": "#cp_img>img", - "replaceElement": ".view-bottom-bar,.view-fix-top-bar,.view-fix-bottom-bar", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/page=/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#cp_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('.view-fix-top-bar-title');if(t)return t.innerText", - "css": ".view-bottom-bar>li:nth-child(n+3):nth-child(-n+4),.view-fix-bottom-bar-item:nth-child(n+4):nth-child(-n+5){display:none!important}.view-fix-bottom-bar-item,.view-bottom-bar>li{width:33.33%!important}" - }, - { - "name": "砂之船动漫家 / 361中文漫画 / 土豪漫画 - PC版閱讀", - "example": "https://www.szcdmj.com/szcchapter/736400,https://www.361zw.com/361zwchapter/318168,https://7hxy.com/chapter/968191?page=8&id=968191", - "url": "^https?://(www\\.)?(szcdmj|361zw|7hxy)\\.com/\\w{0,5}chapter/\\d+", - "include": ".read-section", - "history": 2, - "pinUrl": true, - "nextLink": "//a[@href][text()='下一页' or text()='下一话' or text()='下一章']", - "pageElement": ".comiclist>.comicpage", - "replaceElement": ".fanye", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/page=/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('.comiclist>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('.title');if(t)return t.innerText.match(/\\s(.+)/)[1]", - "css": ".comiclist img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "砂之船动漫家 / 361中文漫画 - 分類", - "example": "https://www.szcdmj.com/szcbolist", - "url": "^https?://www\\.(szcdmj|361zw)\\.com/(szcbolist|booklist)", - "nextLink": "#nextPage,a[title='下一页'],li.active+li>a", - "pageElement": ".mh-list,.manga-list>ul", - "replaceElement": ".pagination", - "pageAction": "document.querySelectorAll('.mh-cover').forEach(e=>{e.style=e.getAttribute('style')})", - "css": ".mh-list+.pagetual_pageBar{margin-top:20px!important}.manga-list-2-cover-img{opacity: 1!important}" - }, - { - "name": "生辰漫画网 - 手機版閱讀", - "example": "https://m.chashengchen.com/manhua/xianziniyoudaxiongzhizhao/2867318.html", - "url": "^https?://m\\.chashengchen\\.com/manhua/\\w+/\\d+\\.html", - "action": 1, - "init": "let ge=e=>document.querySelector(e);let F=new DocumentFragment();document.querySelectorAll('#image,.scroll-item img').forEach(e=>{let img=new Image();if(e.dataset.src){img.src=e.dataset.src}else{img.src=e.src}F.appendChild(img)});let E=ge('#scroll-image');E.innerHTML='';E.appendChild(F);ge('.erPag').remove();", - "nextLink": "//a[text()='下一章' and contains(@href,'html')]", - "pageElement": "#scroll-image", - "replaceElement": "head>title,h1,#action", - "pageInit": "let F=new DocumentFragment();doc.querySelectorAll('#image,.scroll-item img').forEach(e=>{let img=new Image();if(e.dataset.src){img.src=e.dataset.src}else{img.src=e.src}F.appendChild(img)});let E=doc.querySelector('#scroll-image');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#scroll-image');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1>span');if(t)return t.innerText.replace(/[^>]+>/,'')", - "css": ".action-list li{width:50%!important}.right,#action>ul>li:nth-child(n+2):nth-child(-n+3),.UnderPage+div+script+div[id]{display:none!important}" - }, - { - "name": "漫画连 - 閱讀", - "example": "https://www.100mhl.com/manhua/yuanlaiwoshixianjiezhizun/1268523.html", - "url": "^https?://www\\.100mhl\\.com/manhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=ge('#imagesOld');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(e.indexOf('http')!=-1){img.src=e}else{img.src=SinConf.resHost[0].domain+e}F.appendChild(img)});E.innerHTML='';E.appendChild(F);$('head').append('')", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#imagesOld", - "replaceElement": "head>title,h1", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=ge('#imagesOld');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(e.indexOf('http')!=-1){img.src=e}else{img.src=SinConf.resHost[0].domain+e}F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerHTML.replace(/\\s<.+>/,'')", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span,.img_info{display:none!important}#imagesOld>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}" - }, - { - "name": "生辰漫画网 / 奇妙漫画 - 閱讀", - "example": "https://www.chashengchen.com/manhua/xianziniyoudaxiongzhizhao/2867318.html", - "url": "^https?://www\\.(chashengchen|qmiaomh)\\.com/manhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=ge('#images');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(e.indexOf('http')!=-1){img.src=e}else{img.src=SinConf.resHost[0].domain+e}F.appendChild(img)});E.innerHTML='';E.appendChild(F);$('head').append('')", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "replaceElement": "head>title,h1", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=ge('#images');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(e.indexOf('http')!=-1){img.src=e}else{img.src=SinConf.resHost[0].domain+e}F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc;if(e.indexOf('http')!=-1){imgSrc=e}else{imgSrc=SinConf.resHost[0].domain+e}imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerHTML.replace(/\\s<.+>/,'')", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span,.img_info{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}" - }, - { - "name": "来漫画 - 手機版閱讀", - "example": "https://m.laimanhua.net/kanmanhua/kaijujiangliyiyitiaoming/1684241122.html", - "url": "^https?://m\\.laimanhua\\.net/kanmanhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let E=ge('#manga');let F=new DocumentFragment();json.images.forEach(e=>{let img=new Image();img.src=realurl+json.path+e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let next=json.nextUrlid;if(next>0)return location.href.replace(/\\d+\\.html$/,'')+next+'.html';", - "pageElement": "#manga", - "replaceElement": "head>title,#mangaTitle", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let E=ge('#manga');let F=new DocumentFragment();json.images.forEach(e=>{let img=new Image();img.src=realurl+json.path+e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#manga');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/mhInfo/)>-1).innerHTML;let json=eval(code.match(/mhInfo[^;]+/)[0]);let imgSrcArr=[];json.images.forEach(e=>{let imgSrc=realurl+json.path+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('#mangaTitle');if(t)return t.innerHTML.replace(/.+<.+>/g,'').trim()", - "css": ".action-list li{width:50%!important}#action>ul>li:nth-child(n+2):nth-child(-n+3),.manga-page,[id^='jusha']{display:none!important}.manga-box img{border-top:0px!important;border-bottom:0px!important}" - }, - { - "name": "来漫画 - 閱讀", - "example": "https://www.laimanhua.net/kanmanhua/kaijujiangliyiyitiaoming/1684241122.html", - "url": "^https?://www\\.laimanhua\\.net/kanmanhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/picTree/)>-1).innerHTML;let base64=eval(code.match(/picTree[^;]+/)[0]);let imgData=base64_decode(base64).split('$qingtiandy$');let host=getpicdamin();let E=ge('#pic-list');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=encodeURI(host+e);F.appendChild(img)});E.innerHTML='';E.appendChild(F);$('head').append('')", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextUrlid/)>-1).innerHTML;let next=eval(code.match(/nextUrlid[^,]+/)[0]);if(next>0)return location.href.replace(/\\d+\\.html$/,'')+next+'.html'", - "pageElement": "#pic-list", - "replaceElement": "head>title,h1,#position>b", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/picTree/)>-1).innerHTML;let base64=eval(code.match(/picTree[^;]+/)[0]);let imgData=base64_decode(base64).split('$qingtiandy$');let host=getpicdamin();let E=ge('#pic-list');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=encodeURI(host+e);F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/picTree/)>-1).innerHTML;let base64=eval(code.match(/picTree[^;]+/)[0]);let imgData=base64_decode(base64).split('$qingtiandy$');let host=getpicdamin();let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=encodeURI(host+e);imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('#position>b');if(t)return t.innerText", - "css": ".img_info{display:none!important}#pic-list>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}.pagetual_pageBar+.img-box{margin-top:0px!important}" - }, - { - "name": "漫画吧 / 漫画连 - 手機版閱讀", - "example": "https://m.dmhua8.com/manhua/shengnvyintaiguowanmeibugoukeaierbeifeichuhunyuebingmaidaolinguo/966591.html", - "url": "^https?://m\\.(d?mhua8|100mhl)\\.com/manhua/[a-z]+/\\d+\\.html", - "init": "let gae=e=>document.querySelectorAll(e);let Imgs=gae('#images')[0];let Img=gae('img[alt]');let _img='';for(let i=0;ia');if(/html$/.test(n.href))return n.href", - "pageElement": "#images img[alt]", - "replaceElement": "head>title,.BarTit,#action", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-\\d+\\.html$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>9){ps[0].remove();let ds=document.querySelectorAll('#images>*');for(let i=0;idocument.querySelector(e);let E=ge('#images');let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='#tbCenter>#images:nth-child(1)>img:nth-child('+chapterImages.length+')~*{display: none!important}';ge('head').appendChild(style);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "replaceElement": "head>title,h2", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=doc.querySelector('#images');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": "#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}.img_info{display:none!important}" - }, - { - "name": "85漫画网手機版 - 漫畫閱讀", - "example": "https://m.85iu.com/manhua/mofaxueyuandeweizhuangjiaoshi/2740936.html", - "url": "^https?://m\\.85iu\\.com/manhua/\\w+/\\d+\\.html", - "pinUrl": true, - "init": "let Imgs=document.querySelector('.erPag');let Img=document.querySelector('.erPag img');Imgs.innerHTML=Img.outerHTML;", - "nextLink": "//a[text()='下一页' and contains(@href,'html')]", - "pageElement": ".erPag img", - "replaceElement": "head>title,h1,#action", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-\\d+\\.html$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('.erPag>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('h1>span');if(t)return t.innerText.replace(/[^>]+>/,'')", - "rate": 10, - "css": ".right{display:none!important}" - }, - { - "name": "xlsmh下拉式漫画 / 奇妙漫画 - 手機版閱讀", - "example": "https://m.xlsmh.com/manhua/wodetexingnengwuxianchengzhang/1308826.html", - "url": "^https?://m\\.(xlsmh|qmiaomh)\\.com/manhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let F=new DocumentFragment();document.querySelectorAll('#image,.scroll-item img').forEach(e=>{let img=new Image();if(e.dataset.src){img.src=e.dataset.src}else{img.src=e.src}F.appendChild(img)});let E=ge('#scroll-image');E.innerHTML='';E.appendChild(F);ge('#images').remove();", - "nextLink": "//a[contains(text(),'下一章') and contains(@href,'html')]", - "pageElement": "#scroll-image", - "replaceElement": "head>title,h1,.letchepter", - "pageInit": "let F=new DocumentFragment();doc.querySelectorAll('#image,.scroll-item img').forEach(e=>{let img=new Image();if(e.dataset.src){img.src=e.dataset.src}else{img.src=e.src}F.appendChild(img)});let E=doc.querySelector('#scroll-image');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#scroll-image');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1>span');if(t)return t.innerText.replace(/[^>]+>/,'')", - "css": ".right,.letchepter+p,.action-list{display:none!important}" - }, - { - "name": "xlsmh下拉式漫画 / 85漫画网 - 閱讀", - "example": "https://www.xlsmh.com/manhua/wodetexingnengwuxianchengzhang/1308826.html,https://www.85iu.com/manhua/mofaxueyuandeweizhuangjiaoshi/2740936.html", - "url": "^https?://www\\.(xlsmh|85iu)\\.com/manhua/\\w+/\\d+\\.?\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let E=ge('#images');let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='#tbCenter>#images:nth-child(1)>img:nth-child('+chapterImages.length+')~*{display: none!important}';ge('head').appendChild(style);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "replaceElement": "head>title,h1", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=doc.querySelector('#images');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgSrcArr=eval(code.match(/chapterImages[^;]+/)[0]);return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerHTML.match(/\\S+([^<]+)<.+>/)[1]", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span,.img_info{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}" - }, - { - "name": "爱米推漫画 / 蔷薇漫画 - 手機版閱讀", - "example": "https://m.imitui.com/manhua/yuanzun/3683.html,https://m.qwmanhua.com/manhua/woshenmeshihouwudile/1239188.html", - "url": "^https?://m\\.(imitui|qwmanhua)\\.com/manhua/\\w+/\\d+\\.html", - "action": 1, - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);document.querySelectorAll('.comic-panel a:last-child').forEach(e=>{e.removeAttribute('onclick');if(next.id>0){e.href=next.url}else{e.href='';e.innerText='無下一章'}});document.querySelectorAll('.comic-panel a:first-child').forEach(e=>{e.removeAttribute('onclick');if(prev.id>0)e.href=prev.url});let ge=e=>document.querySelector(e);let F=new DocumentFragment();document.querySelectorAll('#image,.scroll-item img').forEach(e=>{let img=new Image();if(e.dataset.src){img.src=e.dataset.src}else{img.src=e.src}F.appendChild(img)});let E=ge('#scroll-image');E.innerHTML='';E.appendChild(F);ge('#images').remove();", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#scroll-image", - "replaceElement": "head>title,h1,.BarTit", - "pageInit": "let F=new DocumentFragment();doc.querySelectorAll('#image,.scroll-item img').forEach(e=>{let img=new Image();if(e.dataset.src){img.src=e.dataset.src}else{img.src=e.src}F.appendChild(img)});let E=doc.querySelector('#scroll-image');E.innerHTML='';E.appendChild(F);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);document.querySelectorAll('.comic-panel a:last-child').forEach(e=>{if(next.id>0){e.href=next.url}else{e.href='';e.innerText='無下一章'}});document.querySelectorAll('.comic-panel a:first-child').forEach(e=>{if(prev.id>0)e.href=prev.url});", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#scroll-image');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText;", - "css": ".nav+div{display:none!important}#scroll-image img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫画芯 / 最漫画 - 手機版閱讀", - "example": "https://m.mhxin.com/manhua/douluodalu/631505.html,https://m.zuimh.com/manhua/douluodalu/314222.html", - "url": "^https?://m\\.(mhxin|zuimh)\\.com/manhua/[a-z]+/\\d+\\.html", - "init": "let a=document.querySelector('#images a');a.outerHTML=a.innerHTML;", - "nextLinkByJs": "let ge=e=>doc.querySelector(e);let m=ge('.image-content>p:last-child').innerText.match(/(\\d+)\\/(\\d+)/);let np=ge('.action-list li:nth-child(3)>a');let nc=ge('.action-list li:nth-child(4)>a');if(m[1]!=m[2]){return np.href}else if(/html$/.test(nc.href)){return nc.href}", - "pinUrl": true, - "pageElement": "#images img[id]", - "replaceElement": ".image-content>p:last-child", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-\\d+\\.html$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>5){ps[0].remove();let ds=document.querySelector('#images img[id]').parentNode.querySelectorAll('*');for(let i=0;iul>li:nth-child(n+2):nth-child(-n+3){display:none!important}.action-list li{width:50%!important}.chapter-view #images img{margin:0 auto 0px!important}" - }, - { - "name": "最漫画 / 爱米推漫画 - PC版閱讀", - "example": "https://www.zuimh.com/manhua/maoshendoumaocao/1755415.html,https://www.imitui.com/manhua/yuanzun/3683.html", - "url": "^https?://www\\.(zuimh|imitui)\\.com/manhua/[a-z]+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "autoClick": "#chapter-scroll:not(.active)", - "init": "let ge=e=>document.querySelector(e);let E=ge('#images');let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='#tbCenter>#images:nth-child(1)>img:nth-child('+chapterImages.length+')~*{display: none!important}';ge('head').appendChild(style);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "replaceElement": "head>title,h2", - "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let E=doc.querySelector('#images');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);setTimeout(()=>{let c=eval(code.match(/comicUrl[^;]+/)[0]);let p=eval(code.match(/prevChapterData[^;]+/)[0]);let n=eval(code.match(/nextChapterData[^;]+/)[0]);gae('.nextC').forEach(e=>{if(n.id>0){e.href=n.url}else{e.href=c;e.innerHTML=e.innerHTML.replace('下一章','返回目录')}});gae('.prevC').forEach(e=>{e.href=p.url})},300)", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgSrcArr=eval(code.match(/chapterImages[^;]+/)[0]);return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}" - }, - { - "name": "前未漫画 / 漫画芯 / 蔷薇漫画 - PC版閱讀", - "example": "https://www.mhxin.com/manhua/taixugongyu/2345840.html,https://www.qianmh.com/manhua/dianjuren/253973.html,https://www.qwmanhua.com/manhua/woshenmeshihouwudile/1239187.html", - "url": "^https?://www\\.(qianmh|mhxin|qwmanhua)\\.com/manhua/[a-z]+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#images');if(E){E.innerHTML='';E.appendChild(F)}let style=document.createElement('style');style.innerHTML='.comic_wraCon>#images:nth-child(1)>img:nth-child('+chapterImages.length+')~*{display: none!important}';ge('head').appendChild(style);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0 && !document.querySelector('.ip-body'))return next.url", - "pageElement": "#images", - "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#images');if(E){E.innerHTML='';E.appendChild(F)}", - "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{let n=ge('.next>a');if(n){ge('.btm_chapter_btn.fr').href=n.href}else{ge('.btm_chapter_btn').href=ge('.head_wz>a+a').href}let p=ge('.pre>a');if(p){ge('.btm_chapter_btn.fl').href=p.href}},300);", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgSrcArr=eval(code.match(/chapterImages[^;]+/)[0]);return imgSrcArr", - "pageBarText": "let t=document.querySelector('.head_wz');let t2=document.querySelector('a+h1');if(t){return t.innerHTML.replace(/.+;/,'').replace(/\\s-\\s漫画芯/,'')}else if(t2){return t2.innerText.match(/\\S+\\s(\\S+\\s\\S+)/)[1]}", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" - }, - { - "name": "古风漫画网 - 手機版閱讀", - "example": "https://m.gufengmh.com/manhua/wokeyiwuxianzhaohuan/2042963.html", - "url": "^https?://m\\.gufengmh\\.com/manhua/[a-z]+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);ge('body>div:nth-child(1)').innerHTML=ge('#panel-title').innerHTML;ge('.iconRet').href=comicUrl;gae('.beforeChapter,.afterChapter').forEach(e=>{e.removeAttribute('onclick')});let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);if(next.id>0){gae('.afterChapter').forEach(e=>{e.href=comicUrl+next.id+'.html'})}else{gae('.afterChapter').forEach(e=>{e.href=comicUrl;})}if(prev.id>0){gae('.beforeChapter').forEach(e=>{e.href=comicUrl+prev.id+'.html'})}", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return comicUrl+next.id+'.html'", - "pageElement": "#images", - "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);if(next.id>0){gae('.afterChapter').forEach(e=>{e.href=comicUrl+next.id+'.html'})}else{gae('.afterChapter').forEach(e=>{e.href=comicUrl;})}if(prev.id>0){gae('.beforeChapter').forEach(e=>{e.href=comicUrl+prev.id+'.html'})}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=imghost+imgPath+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.trim()", - "css": "#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body>div:nth-child(1) .iconRet{position:absolute;left:0px;width:45px;height:45px;top:-3px;display:block;background:url(https://m.gufengmh.com/assets/f0660635/images/bg_icon_ret.png) no-repeat 20px 14px;background-size:9px 17px}" - }, - { - "name": "古风漫画网 - 手機版分類", - "example": "https://m.gufengmh.com/update/", - "url": "^https?://m\\.gufengmh\\.com/", - "nextLink": ".pagination li.active+li>a", - "pageElement": "//div[@class='UpdateList'] | //ul[li[@class='list-comic']]", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar+.UpdateList{margin-top:0px!important}" - }, - { - "name": "古风漫画网 - PC版閱讀", - "example": "https://www.gufengmh.com/manhua/yuanlaiwoshixianjiezhizun/2053294.html", - "url": "^https?://www\\.gufengmh\\.com/manhua/[a-z]+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "autoClick": "#chapter-pagination:not(.active)", - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return comicUrl+next.id+'.html'", - "pageElement": "#images", - "replaceElement": "h2,.wrap_last_head,.wrap_last_mid", - "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+imgPath+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let prev=eval(code.match(/prevChapterData[^;]+/)[0]);if(next.id>0){gae('.nextC').forEach(e=>{e.href=comicUrl+next.id+'.html'})}else{gae('.nextC').forEach(e=>{e.href=comicUrl;e.style.display='none';})}if(prev.id>0){gae('.prevC').forEach(e=>{e.href=comicUrl+prev.id+'.html'})}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgPath=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=imghost+imgPath+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" - }, - { - "name": "优酷漫画手機版 - 閱讀", - "example": "http://wap.ykmh.com/manhua/yiquanchaoren/346.html", - "url": "^https?://wap\\.ykmh\\.com/manhua/[a-z]+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "init": "$('#images').unbind('click',SinTheme.nextPage);$('#images').unbind('mousedown');let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgs=eval(code.match(/chapterImages[^;]+/)[0]);let host=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+/)[0];let F=new DocumentFragment();imgs.forEach(e=>{let img=new Image();img.src=host+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url;", - "pageElement": "#images", - "replaceElement": "head>title,.BarTit", - "pageInit": "let ge=e=>document.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgs=eval(code.match(/chapterImages[^;]+/)[0]);let host=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+/)[0];let F=new DocumentFragment();imgs.forEach(e=>{let img=new Image();img.src=host+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);let next=eval(code.match(/nextChapterData[^;]+/)[0]);let n=ge('#action>ul>li:nth-child(4)>a');let n2=ge('.afterChapter');if(next.id>0){n.href=next.uri;n2.outerHTML=`下一章>`}else{n.removeAttribute('href');n.innerText='無下一章';n2.outerHTML=`無下一章`}let prev=eval(code.match(/prevChapterData[^;]+/)[0]);let p=ge('#action>ul>li:nth-child(1)>a');let p2=ge('.beforeChapter');if(prev.id>0){p.href=prev.uri;p2.outerHTML=`<上一章`}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgs=eval(code.match(/chapterImages[^;]+/)[0]);let host=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+/)[0];let imgSrcArr=[];imgs.forEach(e=>{let imgSrc=host+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerHTML.match(/\\n?([^<]+)/)[1]", - "css": ".subHeader span,#action>ul>li:nth-child(n+2):nth-child(-n+3),.letchepter>section,.letchepter>svg,i~div[id][class],body>span~div:not(#pagetual-preload):not(.pagetual_tipsWords),.comic-comment{display:none!important}.action-list li{width:50%!important}.chapter-view #images img{margin:0 auto 0px!important}" - }, - { - "name": "优酷漫画 - PC版閱讀", - "example": "http://www.ykmh.com/manhua/yiquanchaoren/346.html", - "url": "^https?://www\\.ykmh\\.com/manhua/[a-z]+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);", - "nextLink": ".next>a", - "pageElement": "#images", - "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=imghost+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imghost=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=imghost+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.head_wz');if(t)return t.innerHTML.replace(/.+;/,'')", - "pageNum": "{$p}\\.html$", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" - }, - { - "name": "90漫畫網手機版 - 漫畫閱讀", - "example": "http://wap.90mh.com/manhua/DRAWINGzuiqiangmanhuajialiyonghuihuajinengzaiyishijiekaiwushuang/204311.html", - "url": "^https?://wap\\.90mh\\.com/manhua/", - "init": "let Imgs=document.querySelector('#chapter-image');let Img=document.querySelector('#chapter-image img');Imgs.innerHTML=Img.outerHTML;", - "nextLinkByJs": "function ge(e){return doc.querySelector(e)}let page=ge('#k_page').innerText;let total=ge('#k_total').innerText;let np=ge('.action-list li:nth-child(3) a');let nc=ge('.action-list li:nth-child(4) a');if(page!=total){return np.href}else if(/html$/.test(nc.href)){return nc.href}", - "pageElement": "#chapter-image img", - "replaceElement": "head>title,h1,#m_r_bottom", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar>a').forEach(e=>{if(/-\\d+\\.html$/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#chapter-image>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText.match(/>(.+)\\n/)[1];", - "rate": 10, - "css": ".friendly,#action>ul>li:nth-child(n+2):nth-child(-n+3){display:none!important}.action-list li{width:50%!important}" - }, - { - "name": "90漫畫網 / 生辰漫画网 - 手機版分類", - "example": "http://wap.90mh.com/update/,https://m.chashengchen.com/list/update/", - "url": "^https?://(wap|m)\\.(90mh|chashengchen)\\.com/(update|list)/", - "nextLink": "#update_list li.next>a,#w0 li.next>a", - "pageElement": ".itemBox,.list-comic", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "90漫畫網 - PC版閱讀", - "example": "http://www.90mh.com/manhua/DRAWINGzuiqiangmanhuajialiyonghuihuajinengzaiyishijiekaiwushuang/204311.html", - "url": "^https?://www\\.90mh\\.com/manhua/\\w+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "autoClick": "#chapter-scroll:not(.active)", - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=document.querySelector('#images');E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='#tbCenter>#images:nth-child(1)>img:nth-child('+imgData.length+')~*{display: none!important}';ge('head').appendChild(style);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "replaceElement": "head>title,h2", - "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);setTimeout(()=>{let c=eval(code.match(/comicUrl[^;]+/)[0]);let p=eval(code.match(/prevChapterData[^;]+/)[0]);let n=eval(code.match(/nextChapterData[^;]+/)[0]);gae('.nextC').forEach(e=>{if(n.id>0){e.href=n.uri}else{e.href=c;e.innerHTML=e.innerHTML.replace('下一章','返回目录')}});gae('.prevC').forEach(e=>{e.href=p.uri})},300)", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=ih+cp+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}" - }, - { - "name": "90漫畫網 - 分類", - "example": "http://www.90mh.com/update/", - "url": "^https?://www\\.90mh\\.com/(update|list)/", - "nextLink": "li.next>a", - "pageElement": "#contList", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "古漫画 / 360 漫画 - 手機版分類", - "example": "https://m.izhegu.com/update/,https://m.100fanwo.com/update/", - "url": "^https?://(m)\\.(100fanwo|izhegu)\\.com/", - "nextLink": "li.next>a", - "pageElement": ".UpdateList>.itemBox,.list-comic", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "古漫画 / 360 漫画 - PC版閱讀", - "example": "https://www.izhegu.com/manhua/banbenDAYS/2011818.html,https://www.100fanwo.com/manhua/banbenDAYS/3434626.html", - "url": "^https?://www\\.(izhegu|100fanwo)\\.com/manhua/[a-z]+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imghost='https://res1.izhegu.com';let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(e.indexOf('http')!=-1){img.src=e}else{img.src=imghost+e}F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='#tbCenter>#images:nth-child(1)>img:nth-child('+imgData.length+')~*{display: none!important}';ge('head').appendChild(style);", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "replaceElement": "head>title,h2", - "pageInit": "let gae=e=>document.querySelectorAll(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imghost='https://res1.izhegu.com';let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(e.indexOf('http')!=-1){img.src=e}else{img.src=imghost+e}F.appendChild(img)});let E=doc.querySelector('#images');E.innerHTML='';E.appendChild(F);setTimeout(()=>{let c=eval(code.match(/comicUrl[^;]+/)[0]);let p=eval(code.match(/prevChapterData[^;]+/)[0]);let n=eval(code.match(/nextChapterData[^;]+/)[0]);gae('.nextC').forEach(e=>{if(n.id>0){e.href=n.uri}else{e.href=c;e.innerHTML=e.innerHTML.replace('下一章','返回目录')}});gae('.prevC').forEach(e=>{e.href=p.uri})},300)", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}.w996,.tbCenter{width:auto!important}" - }, - { - "name": "漫画456 - 手機版章節全部展開", - "example": "https://m.manhua456.com/manhua/zhongniannandeyishijiewanggoushenghuo/", - "url": "^https?://m\\.manhua456\\.com/manhua/\\w+/$", - "pinUrl": true, - "autoClick": "//a[@title='全部展开']" - }, - { - "name": "漫画456 - 手機版閱讀", - "example": "https://m.manhua456.com/manhua/moliwuxiandezuiqiangmonvyongchuangzaomofazaiyishijieyouzaishenghuo/537951.html", - "url": "^https?://m\\.manhua456\\.com/manhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "$('#images').unbind('click',SinTheme.nextPage);$('#images').unbind('mousedown');let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#images img');if(set){clearInterval(loop);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih = eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F)}},200)", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "#images", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih = eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih=eval(code.match(/pageImage[^;]+/)[0]).match(/^https?:\\/\\/[^/]+\\//)[0];let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=ih+cp+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.trim()", - "css": "#page-info,#action li:nth-child(2),#action li:nth-child(3),.control_bottom~*:not(.pagetual_tipsWords),.chapter-view~*:not(.pagetual_tipsWords),#loading{display:none!important}#action li{width:50%!important}.chapter-view>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫画456 - PC版閱讀", - "example": "https://www.manhua456.com/manhua/wodeshifumeidaodaxiancaitupo/766673.html", - "url": "^https?://www\\.manhua456\\.com/manhua/[a-z]+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#images img');if(set){clearInterval(loop);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih;if(SinConf.resHost1){ih=SinConf.resHost1+'/'}else{ih=SinMH.getResHostDomain()+'/'}let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);let style=document.createElement('style');style.innerHTML='.comic_wraCon>#images:nth-child(1)>img:nth-child('+imgData.length+')~*{display: none!important}';ge('head').appendChild(style)}},200)", - "nextLink": ".next>a", - "pageElement": "#images", - "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih;if(SinConf.resHost1){ih=SinConf.resHost1+'/'}else{ih=SinMH.getResHostDomain()+'/'}let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=ih+cp+e;F.appendChild(img)});let E=ge('#images');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let ih;if(SinConf.resHost1){ih=SinConf.resHost1+'/'}else{ih=SinMH.getResHostDomain()+'/'}let cp=eval(code.match(/chapterPath[^;]+/)[0]);let imgData=eval(code.match(/chapterImages[^;]+/)[0]);let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=ih+cp+e;imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.head_wz');if(t)return t.innerHTML.replace(/.+;/,'')", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span,.block.clearfix{display:none!important}#images>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" - }, - { - "name": "亲亲漫画 - 手機版漫畫在新分頁打開", - "example": "https://m.acgqd.com/update/", - "url": "^https?://m\\.acg(u|q)d\\.com/(update|list|list/wanjie)?/?$", - "pinUrl": true, - "init": "let openInNewTab=()=>document.querySelectorAll('.itemBox a:not([target=_blank]),.list-comic a:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});" - }, - { - "name": "亲亲漫画 - 手機版章節全部展開", - "example": "https://m.acgqd.com/manhua/38496/", - "url": "^https?://m\\.acg(u|q)d\\.com/manhua/\\d+/$", - "pinUrl": true, - "autoClick": "//a[@title='全部展开']", - "css": "script+a{display:none!important}.Introduct_Sub{background:url(https://m.idmzj.com/images/int_bg.png)!important;background-size:100% 100%!important}" - }, - { - "name": "亲亲漫画 - 手機版閱讀", - "example": "https://m.acgqd.com/manhua/39305/1277010.html", - "url": "^https?://m\\.acg(u|q)d\\.com/manhua/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);$('.control_bottom').append('
    ');let imgs=document.createElement('div');imgs.className='PagetualImgBox';let host=SinConf.resHost[0].domain+'/';let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=host+chapterPath+e;F.appendChild(img)});imgs.appendChild(F);let x=ge('#loading');x.parentNode.insertBefore(imgs,x);ge('a.iconRet').href=comicUrl;let n=ge('#action li:nth-child(4)>a');if(nextChapterData.id==null){n.href=comicUrl;n.innerText='返回目录'}", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextChapterData/)>-1).innerHTML;let next=eval(code.match(/nextChapterData[^;]+/)[0]);if(next.id>0)return next.url", - "pageElement": "//script[contains(text(),'chapterImages')]", - "replaceElement": "head>title,.BarTit", - "insert": "#loading", - "insertPos": 1, - "pageInit": "let ge=e=>document.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;let s=document.createElement('script');s.textContent=code;let x=document.querySelector('#loading');x.parentNode.insertBefore(s,x);let cd=eval(code.match(/comicUrl[^;]+/)[0]);let pd=eval(code.match(/prevChapterData[^;]+/)[0]);let nd=eval(code.match(/nextChapterData[^;]+/)[0]);let p=ge('#action li:nth-child(1)>a');let n=ge('#action li:nth-child(4)>a');if(nd.id>0){n.href=nd.uri;n.innerText='下一章'}else{n.href=cd;n.innerText='返回目录'}p.href=pd.uri;", - "pageAction": "jmzz20191018();let imgs=document.createElement('div');imgs.className='PagetualImgBox';let host=SinConf.resHost[0].domain+'/';let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=host+chapterPath+e;F.appendChild(img)});imgs.appendChild(F);let x=document.querySelector('#loading');x.parentNode.insertBefore(imgs,x);let gae=e=>document.querySelectorAll(e);let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#images~*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.match(/[^(]+/)[0];", - "sleep": 1000, - "css": "#page-info,#action li:nth-child(2),#action li:nth-child(3),.control_bottom~*,.chapter-view~*,#images{display:none!important}#action li{width:50%!important}.chapter-view img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.side_public{opacity:0.4;border-radius: 50%;position:fixed;bottom:60px;right:13px;width:36px;height:35px;display:none;margin-left:20px}.side_public a{border-radius: 50%;display:inline-block;*zoom:1;*display:inline;width:36px;height:36px;border:1px solid #e6e6e6;}.side_public a.return-top{background:#fff url(https://www.acgqd.com/assets/4155373f/images/side_ico.png) no-repeat 2px -81px}" - }, - { - "name": "亲亲漫画 - PC版閱讀", - "example": "http://www.acgud.com/manhua/39305/1277010.html", - "url": "^https?://www\\.acg(u|q)d\\.com/manhua/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let imgs=document.createElement('div');imgs.className='PagetualImgBox';let host=SinConf.resHost[0].domain+'/';let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=host+chapterPath+e;F.appendChild(img)});imgs.appendChild(F);document.querySelector('.comic_wraCon').appendChild(imgs);", - "nextLink": "span.next>a", - "pageElement": "//script[contains(text(),'chapterImages')]", - "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid,.btmBtnBox", - "insert": ".comic_wraCon", - "insertPos": 2, - "pageInit": "let code = Array.from(doc.scripts).find(s=>s.innerHTML.search(/chapterImages/)>-1).innerHTML;document.querySelector('.comic_wraCon').appendChild(document.createElement('script')).textContent = code;", - "pageAction": "jmzz20191018();let imgs=document.createElement('div');imgs.className='PagetualImgBox';let host=SinConf.resHost[0].domain+'/';let F=new DocumentFragment();chapterImages.forEach(e=>{let img=new Image();img.src=host+chapterPath+e;F.appendChild(img)});imgs.appendChild(F);document.querySelector('.comic_wraCon').appendChild(imgs);let gae=e=>document.querySelectorAll(e);let ps=gae('.pagetual_pageBar');if(ps.length>4){ps[0].remove();let ds=gae('#images~*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText;", - "sleep": 1000, - "css": ".comic_wraCon img{border:none!important;padding:0!important;width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}select,.img_land_prev,.img_land_next,#images{display:none!important}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}" - }, - { - "name": "古风漫画网 / 优酷漫画 / 360 漫画 / 古漫画 / 前未漫画 / 最漫画 / 漫画芯 / 亲亲漫画 / 漫画456 / 爱米推漫画 / 蔷薇漫画 - 分類", - "example": "www.gufengmh.com,www.ykmh.com,www.qianwee.com,www.100fanwo.com,www.izhegu.com,www.zuimh.com,www.mhxin.com,www.acgud.com,www.manhua456.com,www.imitui.com,www.qwmanhua.com", - "url": "^https?://www\\.(gufengmh|ykmh|qianwee|100fanwo|izhegu|zuimh|mhxin|acg(u|q)d|manhua456|imitui|qwmanhua)\\.com/", - "nextLink": "li.next>a", - "pageElement": "li.item-lg,.list-comic", - "replaceElement": "ul.pagination", - "css": ".pagetual_pageBar{margin-top:-30px!important;margin-bottom:10px!important}" - }, - { - "name": "动漫啦 - 手機版閱讀", - "example": "https://m.dongman.la/manhua/chapter/5985/54979/", - "url": "^https?://m\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", - "history": 2, - "pinUrl": true, - "action": 1, - "wait": 1000, - "init": "let gae=e=>document.querySelectorAll(e);let _img='';gae('img[data-src]').forEach(e=>{_img+=``});let loop=setInterval(()=>{let set=gae('.chapter-images img')[0];if(set){clearInterval(loop);gae('.chapter-images')[0].innerHTML=_img}},200)", - "nextLink": "//a[label[text()='下一章']][starts-with(@href,'http')]", - "pageElement": ".chapter-images", - "replaceElement": "//head/title | //a[@class='mdui-typo-title'] | //div[@class='main']/following-sibling::footer[1]//a", - "pageInit": "let gae=e=>doc.querySelectorAll(e);let _img='';gae('img[data-src]').forEach(e=>{_img+=``});gae('.chapter-images')[0].innerHTML=_img", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.chapter-images');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.mdui-typo-title');if(t)return t.innerText", - "css": ".chapter-images>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "动漫啦 - PC版閱讀 - 单页滚动模式 - 雙擊下一章,鍵盤左右鍵上下章", - "example": "https://www.dongman.la/manhua/chapter/5985/54979/1.html", - "url": "^https?://www\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", - "include": "//a[text()='分页查看模式 ']", - "pinUrl": true, - "init": "document.querySelectorAll(\"a[href*='m.d']\").forEach(a=>{a.href=a.href.replace('/m.','/www.')});function gx(x){return document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue};function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=gx(\"//a[label[text()='上一章']][starts-with(@href,'http')]\");if(p){p.click()}else{alert('沒有上一章了!')}}};document.addEventListener('keydown',prev);function dcnext(){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}};document.addEventListener('dblclick',dcnext);", - "nextLink": "0", - "manualMode": true, - "css": ".pagetual_tipsWords{display:none!important}" - }, - { - "name": "动漫啦 - PC版閱讀 - 分页查看模式 - 雙擊下一章,鍵盤左右鍵上下章", - "example": "https://www.dongman.la/manhua/chapter/5985/54979/1.html", - "url": "^https?://www\\.dongman\\.la/manhua/chapter/\\d+/\\d+/", - "include": "//a[text()='单页滚动模式 ']", - "init": "document.querySelectorAll(\"a[href*='m.d']\").forEach(a=>{a.href=a.href.replace(\"/m.\",'/www.')});setTimeout(()=>{let link=document.querySelector('.imgListBox>a');link.removeAttribute('href')},100);function gx(x){return document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue};function next(e){let key=window.event?e.keyCode:e.which;if(key==39){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}}};document.addEventListener('keydown',next);function prev(e){let key=window.event?e.keyCode:e.which;if(key==37){let p=gx(\"//a[label[text()='上一章']][starts-with(@href,'http')]\");if(p){p.click()}else{alert('沒有上一章了!')}}};document.addEventListener('keydown',prev);function dcnext(){let n=gx(\"//a[label[text()='下一章']][starts-with(@href,'http')]\");if(n){n.click()}else{alert('沒有下一章了!')}};document.addEventListener('dblclick',dcnext);", - "nextLink": ".imgListBox>a[href^='http']", - "pageElement": ".imgListBox img", - "replaceElement": "button.prePic,button.nextPic", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "a.mdui-btn.mdui-btn-icon,button.prePic,button.nextPic,button.allBtn{display:none!important}.mdui-container{width:100%!important;padding:0px!important}.imgListBox img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto!important}.pagetual_tipsWords{display:none!important}" - }, - { - "name": "动漫啦 / 免追漫画 - 分類", - "example": "https://www.dongman.la/manhua/oumei/2.html,https://www.mianzhui.com/category/list/1", - "url": "^https?://www\\.(dongman|mianzhui)\\.(la|com)/", - "include": ".NewPages", - "pinUrl": true, - "nextLink": "//a[text()='下一页']", - "pageElement": ".cy_list_mh", - "replaceElement": ".NewPages", - "pageBar": 0 - }, - { - "name": "七夕漫画", - "example": "http://www.qiximh2.com/21429/999975.html,http://m.qiximh2.com/22914/1235326.html", - "url": "^https?://(www|m)\\.qiximh\\d\\.com/\\d+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "action": 1, - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.dataset.src;img.removeAttribute('data-src')})", - "nextLink": "//a[img[@alt='下一章'] and contains(@href,'html')] | //a[p[text()='下一篇'] and contains(@href,'html')]", - "pageElement": ".main_img", - "replaceElement": "h1.chaptitle,.imgFloat>p:not(.chappl),head>title,.bottom_menu,.bottom-fix,.bottom-nav,.top_left,.readend", - "pageBarText": "let t1=doc.querySelector('.chaptitle');let t2=doc.querySelector('.chapter_title');if(t1){return t1.innerText}else if(t2){return t2.innerText}", - "lazyImgSrc": [ - "data-src", - "data-src" - ], - "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);if(location.hostname=='www.qiximh2.com'){setTimeout(()=>{let last=ge('.imgFloat>p:nth-child(3)>a:not([href$=html])');if(last){ge('.cy_intro_r.wxfocus').innerHTML='





    ^_^感谢您的阅读,已经沒有下一章了哦!


    点击下一章按钮可以返回目录哦!




    '}},100)};if(location.hostname=='m.qiximh2.com'){let cs=document.querySelectorAll('.main_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let t=document.querySelector('.top-layout.hide_nav.show_nav');if(t){$('.top-layout.hide_nav').removeClass('show_nav');$('.bottom-layout.hide_footer').removeClass('show_footer')}else{$('.top-layout.hide_nav').addClass('show_nav');$('.bottom-layout.hide_footer').addClass('show_footer')}})};let c=gae('.main_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "css": ".cy_intro_r>img,.cy_intro_r>p:nth-child(3),.logo.lbc{display:none!important}.cy_intro_r{height:30px!important;}" - }, - { - "name": "漫画星球手機版 - 閱讀", - "example": "http://m.mhxqiu2.com/22914/1235326.html", - "url": "^https?://m\\.mhxqiu\\d\\.com/\\d+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "action": 1, - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", - "nextLink": "//a[i[@class='ift-next']]", - "pageElement": ".main_img", - "replaceElement": "head>title,.chapter_title,.bottom-nav,.bottom_menu", - "pageInit": "doc.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", - "pageAction": "let gae=e=>document.querySelectorAll(e);let cs=gae('.main_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let t=document.querySelector('.nav-box.show_nav');if(t){$('.nav-box').removeClass('show_nav');$('.bottom-box').removeClass('show_footer')}else{$('.nav-box').addClass('show_nav');$('.bottom-box').addClass('show_footer')}});let c=gae('.main_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.chapter_title');if(t)return t.innerText", - "css": "#adhtml,.pinglunadd-btn{display:none!important}" - }, - { - "name": "七夕漫画手機版 / 漫画星球手機版 - 点击加载更多", - "example": "http://m.qiximh2.com/sort/1-1.html,http://m.mhxqiu2.com/sort/1.html", - "url": "^https?://m\\.(qiximh\\d|mhxqiu\\d)\\.com/", - "include": ".list_notdone>button", - "nextLink": "0", - "loadMore": ".list_notdone>button" - }, - { - "name": "七夕漫画 / 漫画星球 - 分類", - "example": "http://www.qiximh2.com/sort/1-1.html,http://www.mhxqiu2.com/sort/1-1.html", - "url": "^https?://www\\.(qiximh\\d|mhxqiu\\d)\\.com/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".cy_list_mh", - "replaceElement": ".NewPages", - "css": ".pagetual_pageBar{margin-bottom:0px!important}.pagetual_pageBar+div{margin-top:-20px!important;}" - }, - { - "name": "6 漫画手機版 - 閱讀", - "example": "http://m.6mh66.com/25528/1411234.html", - "url": "^https?://m\\.6mh66\\.com/\\d+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML.trim().slice(4);let imgData=eval(eval(code).slice(12));let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let loop=setInterval(()=>{let set=ge('.main_img img');if(set){clearInterval(loop);let E=ge('.main_img');E.innerHTML='';E.appendChild(F)}},200)", - "nextLink": ".next>a[href$='html']", - "pageElement": ".main_img", - "replaceElement": ".swiper-chapter,head>title,.title>h1,.end-btns", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML.trim().slice(4);let imgData=eval(eval(code).slice(12));let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=doc.querySelector('.main_img');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let ge=e=>document.querySelector(e);let cs=gae('.main_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let v=ge('.van-nav-bar:not([style])');let vn=ge('.van-nav-bar[style*=none]');let vb=ge('.van-nav-bar[style*=block]');let b=ge('.reader-footer:not([style])');let bn=ge('.reader-footer[style*=none]');let bb=ge('.reader-footer[style*=flex]');if(v){v.setAttribute('style','display: block;')}if(b){b.setAttribute('style','display: flex;')}if(vn){vn.style.display='block'}else{vb.style.display='none'}if(bn){bn.style.display='flex'}else{bb.style.display='none'}});let c=gae('.main_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML.trim().slice(4);let imgSrcArr=eval(eval(code).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText", - "css": "#adhtml{display:none!important}.main_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "奇漫屋手機版 - 閱讀", - "example": "http://qiman59.com/21429/999975.html", - "url": "^https?://(m\\.)?qiman\\d{2}\\.com/\\d+/\\d+\\.html", - "include": ".bottom-tool-bar", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML.trim().slice(4);let imgData=eval(eval(code).slice(12));let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let loop=setInterval(()=>{let set=ge('.comic-list img');if(set){clearInterval(loop);let E=ge('.comic-list');E.innerHTML='';E.appendChild(F)}},200)", - "nextLink": ".next>a[href$='html']", - "pageElement": ".comic-list", - "replaceElement": "head>title,h1.comic-name,li.prev-chapter,li.next-chapter,.chapter-end,p.read-pos", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML.trim().slice(4);let imgData=eval(eval(code).slice(12));let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('.comic-list');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML.trim().slice(4);let imgSrcArr=eval(eval(code).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h1.comic-name');if(t)return t.innerText", - "css": "#adhtml,.guide-download,.read-end~*:not(.pagetual_tipsWords):not(.bottom-tool-bar){display:none!important}.comic-list>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "奇漫屋 / 漫画星球 / 6 漫画 - PC閱讀", - "example": "http://www.qiman58.com/21429/1416724.html,http://www.mhxqiu2.com/22914/1235326.html,http://www.6mh66.com/22914/1235327.html", - "url": "^https?://(www\\.qiman5\\d\\.com|www\\.mhxqiu\\d\\.com|www\\.6mh66\\.com)/\\d+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);$('#mainView').removeAttr('style');let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let loop=setInterval(()=>{let set=ge('#comicContain>li');if(set){clearInterval(loop);let E=ge('#comicContain');E.innerHTML='';E.appendChild(F)}},200)", - "nextLink": "#mainControlNext", - "pageElement": "#comicContain", - "replaceElement": "head>title,.main_control,#mainView~a", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#comicContain');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#comicContain');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.chaptername_title');if(t)return t.innerText", - "css": "body.view .logo-sub-wrap,.guide-download{display:none!important}#mainView img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.pagetual_pageBar{margin-top:30px!important;margin-bottom:22px!important}" - }, - { - "name": "漫画星球 / 6 漫画 / 奇漫屋 - 手機版分類", - "example": "m.mhxqiu1.com,m.sixmh7.com,m.qiman57.com", - "url": "^https?://(m\\.)?((six|6)mh\\d+|mhxqiu\\d|qiman\\d+)\\.com/(sort|rank)/", - "loadMore": ".getmore,.getmore1", - "nextLink": "0" - }, - { - "name": "57漫画网 - 漫畫閱讀", - "example": "http://www.wuqimh.com/45107/01.html", - "url": "^https?://(www|m)\\.wuqimh\\.com/\\d+/\\d+(\\.html|/)$", - "include": "//script[contains(text(),'images') and contains(text(),'tingliu')]", - "pinUrl": true, - "history": 2, - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/images/)>-1).innerHTML.match(/eval[^$]+/)[0].trim().slice(4);let data=eval('('+eval(code).replace(/^[^{]+/,'').replace(/;$/,'')+')');let _img='';for(let i=0;i`};document.querySelector('.cf:not([id])).innerHTML=_img;", - "nextLink": ".nextC:not([href^='j'])", - "pageElement": ".cf:not([id])", - "replaceElement": "head>title,.title>h2,.main-btn,#mangaTitle,#action", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/images/)>-1).innerHTML.match(/eval[^$]+/)[0].trim().slice(4);let data=eval('('+eval(code).replace(/^[^{]+/,'').replace(/;$/,'')+')');let _img='';for(let i=0;i`};doc.querySelector('.cf:not([id])').innerHTML=_img;", - "pageAction": "function ge(e){return document.querySelector(e)}setTimeout(()=>{let ph=ge('.prevC').href;let nh=ge('.nextC').href;ge('#pager>.prev').outerHTML=`上一章`;ge('#pager>.next:last-child').outerHTML=`下一章`},1000);function gae(e){return document.querySelectorAll(e)};setTimeout(()=>{let c=gae('#subNav~.cf');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}},10000)", - "pageBarText": 1, - "css": ".title>*:nth-child(n+5):nth-child(-n+6):not(.cf),.bd_960_90,.main-btn>*:nth-child(n+3):nth-child(-n+5),.help,#pager>*:not(.prev):not(.next:last-child),.bd_960_90+[style]:not(.w996),#action~*:not(#pageNo):not(.pagetual_tipsWords),span.manga-page,#action>ul>li:nth-child(n+2):nth-child(-n+3){display:none!important}.cf>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.action-list li{width:50%!important}body{padding-bottom:0px!important}" - }, - { - "name": "x18漫画网 - 漫畫閱讀", - "example": "https://www.x18mh.com/manhua/60497/996071.html,https://m.x18mh.com/manhua/60497/996071.html", - "url": "^https?://(www|m)\\.x18mh\\.com/manhua/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=eval(code.match(/qTcms_S_m_murl_e[^;]+/)[0]);let imgData=window.atob(imgBase64).split('$qingtiandy$');let p='/statics/pic/?p=';let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.origin.indexOf('/m.')==-1){img.src=p+e}else{img.src=p+e;img.id='qTcms_pic';img.setAttribute('width','100%')}F.appendChild(img)});if(location.origin.indexOf('/m.')==-1){let E=ge('.cf:not([id])');E.innerHTML='';E.appendChild(F)}else{let E=ge('.UnderPage');E.innerHTML='';E.appendChild(F)}", - "nextLink": "#k_Pic_nextArr[href$='html']", - "pageElement": ".cf:not([id]),.UnderPage", - "replaceElement": "head>title,.title>h2,.main-btn,#pager,#m_r_title,#action", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=eval(code.match(/qTcms_S_m_murl_e[^;]+/)[0]);let imgData=window.atob(imgBase64).split('$qingtiandy$');let p='/statics/pic/?p=';let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.origin.indexOf('/m.')==-1){img.src=p+e}else{img.src=p+e;img.id='qTcms_pic';img.setAttribute('width','100%')}F.appendChild(img)});if(location.origin.indexOf('/m.')==-1){let E=ge('.cf:not([id])');E.innerHTML='';E.appendChild(F)}else{let E=ge('.UnderPage');E.innerHTML='';E.appendChild(F)}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let cf=gae('#subNav~.cf');if(cf.length>10){cf[0].remove()}let c=gae('.UnderPage');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t1=doc.querySelector('h2');let t2=doc.querySelector('.BarTit');if(t1){return t1.innerText}else if(t2){return t2.innerText.match(/[^(]+/)[0].trim()}", - "css": "#subNav,#prev,#k_next,#k_pageSelect,#pager,.title.pr>em:nth-child(5),.title.pr>span,.control_bottom+.img_001{display:none!important}.cf>img,.UnderPage>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#action>ul>li:nth-child(n+2):nth-child(-n+3){display:none!important}.action-list li{width:50%!important}" - }, - { - "name": "爱漫之家 - 漫畫閱讀", - "example": "http://www.17fuman.com/rszimukaitou/34599/171775.html,http://m.17fuman.com/rszimukaitou/34669/172185.html,http://m.fumanhua44.com/rszimukaitou/34761/172779.html", - "url": "^https?://(www|m\\d?)\\.(17fuman|fumanhua-?\\d+)\\.com/[a-z]+/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/var qTcms_S_m_murl_e=\"([^\"]+)/)[1];let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.origin.indexOf('/m.')==-1){img.src=e}else{img.src=qTcms_m_weburl+e;img.id='qTcms_pic';img.setAttribute('width','100%')}F.appendChild(img)});let E=ge('#qTcms_pic').parentNode;E.innerHTML='';E.appendChild(F);", - "nextLink": "#k_Pic_nextArr[href$='html']", - "pageElement": ".cf:not([id]),.UnderPage", - "replaceElement": "head>title,.title>h2,.main-btn,#pager,#m_r_title,#action", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/var qTcms_S_m_murl_e=\"([^\"]+)/)[1];let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.origin.indexOf('/m.')==-1){img.src=e}else{img.src=qTcms_m_weburl+e;img.id='qTcms_pic';img.setAttribute('width','100%')}F.appendChild(img)});let E=ge('#qTcms_pic').parentNode;E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);if(location.origin.indexOf('/m.')==-1){let cf=gae('.cf:not([id])');if(cf.length>10){cf[0].remove()}}else{let c=gae('.UnderPage');if(c.length>10){c[0].remove()}}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/var qTcms_S_m_murl_e=\"([^\"]+)/)[1];let imgData=base64_decode(imgBase64).split('$qingtiandy$');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc;if(location.origin.indexOf('/m.')==-1){imgSrc=e}else{imgSrc=qTcms_m_weburl+e}imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t1=doc.querySelector('h2');let t2=doc.querySelector('.BarTit');if(t1){return t1.innerText}else if(t2){return t2.innerText.match(/[^(]+/)[0].trim()}", - "css": "#subNav,#prev,#k_next,#k_pageSelect,#pager,.title.pr>em:nth-child(5),.title.pr>span,#bd1,.globalPadding{display:none!important}.cf>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#action>ul>li:nth-child(n+2):nth-child(-n+3){display:none!important}.action-list li{width:50%!important}" - }, - { - "name": "73漫画 - 閱讀", - "example": "http://www.73mh.net/mh/63788_1633109/1", - "url": "^https?://www\\.73mh\\.net/mh/\\w+/\\d+", - "pinUrl": true, - "history": 2, - "init": "document.querySelectorAll('section .v_con_box>p').forEach(e=>{e.outerHTML=e.innerHTML})", - "nextLink": "//a[text()='下一话']", - "pageElement": "//div[@class='v_con_box'][p/img] | //div[@class='v_con_box'][img]", - "replaceElement": "head>title,.v-page", - "pageInit": "doc.querySelectorAll('section .v_con_box>p').forEach(e=>{e.outerHTML=e.innerHTML})", - "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}let gae=e=>document.querySelectorAll(e);let c=gae(\"//div[@class='v_con_box'][img]\");if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.v-page>span');if(t)return t.innerText", - "css": ".v_con_box>img{margin-bottom:-6px!important}.icon>.container{padding-right:0px!important;padding-left:0px!important}" - }, - { - "name": "漫画160 - 手機版閱讀", - "example": "https://m.mh160.cc/kanmanhua/yuanlaiwoshixianjiezhizun/1689580801.html", - "url": "^https?://m\\.mh160\\.cc/kanmanhua/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=document.querySelector('#commicBox');E.innerHTML='';E.appendChild(F);", - "nextLink": "#k_Pic_nextArr[href$='html']", - "pageElement": "#commicBox", - "replaceElement": ".BarTit,#action", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=doc.querySelector('#commicBox');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#commicBox');if(c.length>10){c[0].parentNode.remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=f_qTcms_Pic_curUrl_realpic(e);imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText.match(/[^\\(]+/)[0].trim()", - "css": "#commicBox>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}.action-list li{width:50%!important}#action>ul>li:nth-child(n+2):nth-child(-n+3){display:none!important}" - }, - { - "name": "733 动漫 - 手機版漫畫閱讀", - "example": "https://m.733.so/mh/54709/1353912/1.html", - "url": "^https?://m\\.733\\.so/mh/\\d+/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let imgs = Array.from(document.scripts).find(s => s.innerHTML.search(/temp_pic_all/) > -1).innerHTML.slice(18, -1).replace(/<\\/?p>/g,'');document.querySelector('#pic_box').innerHTML = imgs;", - "nextLink": "//a[text()='下一话']", - "pageElement": "#pic_box", - "replaceElement": "head>title,.v-page", - "pageInit": "let imgs = Array.from(doc.scripts).find(s => s.innerHTML.search(/temp_pic_all/) > -1).innerHTML.slice(18, -1).replace(/<\\/?p>/g,'');doc.querySelector('#pic_box').innerHTML = imgs;", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pic_box');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let imgs=Array.from(doc.scripts).find(s=>s.innerHTML.search(/temp_pic_all/)>-1).innerHTML.slice(18);let html=new DOMParser().parseFromString(imgs,'text/html');let imgData=html.querySelectorAll('img');let imgSrcArr=[];imgData.forEach(e=>{imgSrcArr.push(e.src)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.v-page>span');if(t)return t.innerText", - "css": "#pic_box img{margin-bottom:-6px!important}.icon>.container{padding-right:0px!important;padding-left:0px!important}" - }, - { - "name": "733 动漫 / 73漫画 - 手機版分類", - "example": "https://m.733.so/all/all/all/all/0/1.html,http://www.73mh.net/neidi/", - "url": "^https?://(m\\.733\\.so|www\\.73mh\\.net)/", - "exclude": [ - "#pic_box", - "//div[@class='v_con_box'][p/img]" - ], - "nextLink": "//a[text()='下一页']", - "pageElement": ".tv-list", - "replaceElement": ".v-page", - "css": ".pagetual_pageBar{margin-top:-5px!important}" - }, - { - "name": "733 动漫 / 漫画160 - PC版閱讀", - "example": "https://www.733.so/mh/33671/614269.html,https://www.mh160.cc/kanmanhua/tianqiyubao/1668716868.html", - "url": "^https?://www\\.(733|mh160)\\.(so|cc)/(mh|kanmanhua)/\\w+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=document.querySelector('#qTcms_Pic_middle').parentNode;E.innerHTML='';E.appendChild(F);", - "nextLink": "#k_Pic_nextArr[href$='html']", - "pageElement": ".cf:not([id])", - "replaceElement": "head>title,.title>h2,.main-btn,#pager", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=f_qTcms_Pic_curUrl_realpic(e);F.appendChild(img)});let E=doc.querySelector('#qTcms_Pic_middle').parentNode;E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.cf:not([id])');if(c.length>10){c[0].parentNode.remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/qTcms_S_m_murl_e/)>-1).innerHTML;let imgBase64=code.match(/qTcms_S_m_murl_e=([^;]+)/)[1].replaceAll('\"','');let imgData=base64_decode(imgBase64).split('$qingtiandy$');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=f_qTcms_Pic_curUrl_realpic(e);imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": "#subNav,#prev,#k_next,#k_pageSelect,#pager,.title.pr>em:nth-child(5),.title.pr>span{display:none!important}.cf>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫画星球 / 6 漫画 / 733 动漫 / 爱漫之家 / x18漫画网 / 57漫画网 / 奇漫屋 / 漫画160 - 分類", - "example": "www.mhxqiu1.com,www.sixmh7.com,www.733.so,www.17fuman.com,https://www.x18mh.com/,http://www.wuqimh.com/list/,http://www.qiman58.com/,www.mh160.cc", - "url": "^https?://(www|m)\\.((six|6)mh\\d+|mhxqiu\\d|733|17fuman|x18mh|wuqimh|qiman58|mh160)\\.(com|so|cc)/", - "nextLink": "//a[text()='下一页'] | //li[a[@class='active']]/following-sibling::li[1]/a", - "pageElement": ".cy_list_r,.grid-row.clearfix,#dmList,#contList,[class^='bookList'],.mh-search-list", - "replaceElement": ".NewPages,.pager,.page_moreDiv", - "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:0px!important}.mh-search-list+.pagetual_pageBar{display:none!important}" - }, - { - "name": "木马漫画 - 閱讀", - "example": "https://www.omyschool.com/article_detail/19057/672194/%E7%A5%9E%E6%98%8E%E5%AD%B8%E6%A0%A1%E7%9A%84%E5%B7%AE%E7%AD%89%E7%94%9F/01%E8%A9%B1/", - "url": "^https?://www\\.omyschool\\.com/article_detail/\\d+/\\d+/", - "history": 2, - "init": "const gax=xpath=>{let nodes=[];let results=document.evaluate(xpath,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes};setTimeout(()=>{[...gax('//div[span[@style]]')].forEach(e=>{e.remove()})},0)", - "nextLink": ".nav_button.next", - "pageElement": "//div[amp-img]", - "pageBarText": "return doc.querySelector('.uk-breadcrumb').innerText.trim().slice(2).trim()", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let arr=[];[...doc.querySelectorAll('#imgs amp-img')].forEach(e=>{arr.push(e.getAttribute('src'))});return arr", - "css": "#col_right{display:none!important}" - }, - { - "name": "木马漫画 - 分類", - "example": "https://www.omyschool.com/rank/update/", - "url": "^https?://www\\.omyschool\\.com/", - "nextLink": "a.next", - "pageElement": "#book_list>.item", - "replaceElement": ".uk-pagination", - "pageBar": 0 - }, - { - "name": "动漫之家 - 手機版 - 漫畫在新分頁打開", - "example": "https://m.idmzj.com/", - "url": "^https?://m\\.i?dmzj\\.com/", - "exclude": [ - "div[id^='charpet']", - "#list" - ], - "init": "let openInNewTab=()=>document.querySelectorAll('.main_image a[href]:not([target=_blank]),.imgBox a[href]:not([target=_blank]),.UpdateList a[href]:not([target=_blank]),.topicList a[href]:not([target=_blank])').forEach(a=>{a.setAttribute('target','_blank')});openInNewTab();new MutationObserver(()=>{openInNewTab()}).observe(document.body,{childList:true,subtree:true});" - }, - { - "name": "动漫之家手機版 - 閱讀", - "example": "https://m.idmzj.com/view/60351/119828.html", - "url": "^https?://m\\.i?dmzj\\.com/view/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "init": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);ge('.iconRet').setAttribute('onclick','goBack();');gae('.letchepter>a[onclick]').forEach(a=>{a.removeAttribute('onclick')});let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/comic_id/)>-1).innerHTML.replaceAll('\"','');let n=code.search(/next_chap/);let p=code.search(/prev_chap/);let cm=code.match(/comic_id:(\\d+)/)[1];if(n>-1){let nm=code.match(/next_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+nm+'.html';ge('.afterChapter').href=url}else{ge('.afterChapter').href=ge('.ChapterLestMune').href}if(p>-1){let pm=code.match(/prev_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+pm+'.html';ge('.beforeChapter').href=url}else{ge('.beforeChapter').href=ge('.ChapterLestMune').href}", - "nextLinkByJs": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/comic_id/)>-1).innerHTML.replaceAll('\"','');let n=code.search(/next_chap/);if(n>-1){let cm=code.match(/comic_id:(\\d+)/)[1];let nm=code.match(/next_chap_id:(\\d+)/)[1];return location.origin+'/view/'+cm+'/'+nm+'.html'}", - "pageElement": "div[id^='charpet']", - "replaceElement": "head>title,a.BarTit,.botNav .tc", - "pageInit": "let ge=e=>doc.querySelector(e);let gae=e=>doc.querySelectorAll(e);ge('.iconRet').setAttribute('onclick','goBack();');gae('.letchepter>a[onclick]').forEach(a=>{a.removeAttribute('onclick')});let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/comic_id/)>-1).innerHTML.replaceAll('\"','');let n=code.search(/next_chap/);let p=code.search(/prev_chap/);let cm=code.match(/comic_id:(\\d+)/)[1];if(n>-1){let nm=code.match(/next_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+nm+'.html';ge('.afterChapter').href=url}else{ge('.afterChapter').href=ge('.ChapterLestMune').href}if(p>-1){let pm=code.match(/prev_chap_id:(\\d+)/)[1];let url='/view/'+cm+'/'+pm+'.html';ge('.beforeChapter').href=url}else{ge('.beforeChapter').href=ge('.ChapterLestMune').href}", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('div[id^=charpet]');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/initData/)>-1).innerHTML;let imgSrcArr=eval(code.match(/page_url.+(\\[.+\\])/)[1]);return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.BarTit');if(t)return t.innerText", - "css": "#commicBox img{opacity:1!important}#m_r_panelbox,#khdDown,#divAD,.appTil{display:none!important}" - }, - { - "name": "动漫之家2 - 閱讀", - "example": "https://www.idmzj.com/view/siwangleyuan/75382.html", - "url": "^https?://www\\.i?dmzj\\.com/view/", - "pinUrl": true, - "history": 2, - "action": 1, - "waitElement": [ - ".btmBtnBox" - ], - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/arr_img/)>-1).innerHTML.slice(71,-1);let Data=eval('('+eval(code).slice(11,-2)+')');let imgData=Data.page_url.split('\\r\\n');let host='https://images.idmzj.com/';let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=host+decodeURI(e).replace(/amp;/g,'');F.appendChild(img)});let E=document.querySelector('.comic_wraCon');E.innerHTML='';E.appendChild(F);", - "nextLink": "span.next>a", - "pageElement": ".comic_wraCon", - "replaceElement": "head>title,.wrap_last_head,.wrap_last_mid,.btmBtnBox", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/arr_img/)>-1).innerHTML.slice(71,-1);let Data=eval('('+eval(code).slice(11,-2)+')');let imgData=Data.page_url.split('\\r\\n');let host='https://images.idmzj.com/';let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=host+decodeURI(e).replace(/amp;/g,'');F.appendChild(img)});let E=doc.querySelector('.comic_wraCon');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic_wraCon');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/arr_img/)>-1).innerHTML.slice(71,-1);let Data=eval('('+eval(code).slice(11,-2)+')');let imgData=Data.page_url.split('\\r\\n');let host='https://images.idmzj.com/';let imgSrcArr=[];imgData.forEach(e=>{let imgSrc=host+decodeURI(e).replace(/amp;/g,'');imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h2');if(t)return t.innerText", - "css": ".nav-pagination,.img_land_prev,.img_land_next,#page_select,.img_info,.title.pr>em:nth-child(5),.title.pr>span,.user_show,.login_tip.out,#floatCode,.ad_bottom_code,script[src]+[style*=both]{display:none!important}.comic_wraCon>img{max-width: 100% !important;display: block !important;margin: 0 auto -2px auto !important;border:0px!important;padding:0px!important;}body,.autoHeight,.wrap_last_mid .pre,.wrap_last_mid .next,.chapter-view .panel,.mainNav_inner{width:auto!important;min-width:auto!important}.head_wz,.foot-detail-wrap{width:auto!important}" - }, - { - "name": "动漫之家2 - 分類", - "example": "https://www.idmzj.com/update/", - "url": "^https?://www\\.i?dmzj\\.com/(update|category|rank)", - "nextLink": "//a[text()='下一页']", - "pageElement": ".list_con_li,.ph_r_con_li", - "replaceElement": ".top_page.page,.bottom_page.page", - "css": ".wrap_list,.wrap_mhlist .wrap_mhlist_l,.wrap_mhlist .wrap_mhlist_r{height:auto!important}.pagetual_pageBar{margin-top:-10px!important;margin-bottom:0px!important}.ph_r_con_li+.pagetual_pageBar{display:none!important}" - }, - { - "name": "动漫之家 - 閱讀", - "example": "https://manhua.idmzj.com/shenghuomosgushimentiaozhanmigong/118093.shtml", - "url": "^https?://manhua\\.i?dmzj\\.com/[a-z]+/\\d+\\.shtml", - "pinUrl": true, - "autoClick": "//a[@id='qiehuan_txt' and text()='切换到上下滚动阅读']", - "history": 2, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let F=new DocumentFragment();eval(pages).forEach(e=>{let img=new Image();img.src='//images.idmzj.com/'+decodeURI(e);F.appendChild(img)});let loop=setInterval(()=>{let set=ge('#center_box img');if(set){clearInterval(loop);let E=ge('#center_box');E.innerHTML='';E.appendChild(F)}},100)", - "nextLink": "a.fr", - "pageElement": "#center_box", - "replaceElement": "head>title,.display_graybg,.btmBtnBox", - "pageInit": "let ge=e=>doc.querySelector(e);let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML;let imgs=eval(code.match(/eval.+\\)\\)/)[0].slice(4));let imgsArr=eval(imgs.match(/\\[.+\\]/)[0]);let F=new DocumentFragment();imgsArr.forEach(e=>{let img=new Image();img.src='//images.idmzj.com/'+decodeURI(e);F.appendChild(img)});let E=ge('#center_box');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#center_box');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/eval/)>-1).innerHTML;let imgs=eval(code.match(/eval.+\\)\\)/)[0].slice(4));let imgsArr=eval(imgs.match(/\\[.+\\]/)[0]);let imgSrcArr=[];imgsArr.forEach(e=>{let imgSrc='//images.dmzj.com/'+decodeURI(e);imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('span.redhotl');if(t)return t.innerText", - "css": "#center_box img{opacity:1!important;width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important;border: none!important;padding: 0px!important;}" - }, - { - "name": "动漫之家 - 分類", - "example": "https://manhua.idmzj.com/update_1.shtml", - "url": "^https?://manhua\\.i?dmzj\\.com/", - "action": 1, - "nextLink": "//a[text()='下一页']", - "pageElement": ".newpic_bg,.newpic_bgno,.tcaricature_block.tcaricature_block2", - "replaceElement": ".pages", - "css": ".pagetual_pageBar{margin:20px 5px 0!important}.newpic_bgno,.tcaricature_block+.pagetual_pageBar{margin-top:5px!important}.pagetual_pageBar+.tcaricature_block{margin-top:0px!important}", - "iframeInit": "win.self=win.top" - }, - { - "name": "漫画猫 - 閱讀", - "example": "https://www.maofly.com/manga/39027/515484.html", - "url": "^https?://www\\.maofly\\.com/manga/", - "pinUrl": true, - "history": 2, - "init": "let vgrdata=document.querySelector('.vg-r-data');let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.match(/img_data = \".+\"/g)[0]);let imgData=LZString.decompressFromBase64(Base64).split(',');let imgPre='/uploads/';let assetDomain=vgrdata.getAttribute('data-chapter-domain');let assetKey=vgrdata.getAttribute('data-chapter-key');let _img='';for(let i=0;i`};document.querySelector('.img-content').innerHTML=_img;", - "nextLinkByJs": "let vgrdata=doc.querySelector('.vg-r-data');let num=vgrdata.getAttribute('data-chapter_num');let type=vgrdata.getAttribute('data-chapter-type');let n=1;let json='/chapter_num?chapter_id='+num+'&ctype='+n+'&type='+type;return fetch(json).then((response)=>{return response.json()}).then((json)=>{if(json.code!='0000'){return null}else{return json.url}}).then((res)=>{return res});", - "pageElement": ".img-content", - "replaceElement": "head>title,.breadcrumb-item.active,.h4.text-center", - "pageInit": "let vgrdata=doc.querySelector('.vg-r-data');let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.match(/img_data = \".+\"/g)[0]);let imgData=LZString.decompressFromBase64(Base64).split(',');let imgPre='/uploads/';let assetDomain=vgrdata.getAttribute('data-chapter-domain');let assetKey=vgrdata.getAttribute('data-chapter-key');let _img='';for(let i=0;i`};doc.querySelector('.img-content').innerHTML=_img;", - "pageAction": "function gae(e){return document.querySelectorAll(e)};setTimeout(()=>{let c=gae('.img-content');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}},10000)", - "pageBarText": 1, - "css": "a[onclick],a[href*='false']{display:none!important}.img-content>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫画猫 - 分類", - "example": "https://www.maofly.com/update.html", - "url": "^https?://www\\.maofly\\.com/(update|list)", - "nextLink": "//a[text()=' 下一页']", - "pageElement": "//div[(div/a/img) and @class='row m-0'] | //div[(a/img) and contains(@class,'media')] | //div[(a/img) and contains(@class,'media')]/following-sibling::hr[1]", - "replaceElement": ".pagination", - "css": ".row+.pagetual_pageBar{margin-top:-1px!important;margin-bottom:15px!important}hr+.pagetual_pageBar{display:none!important}" - }, - { - "name": "漫画DB - 閱讀", - "example": "https://www.manhuadb.com/manhua/1167/1315_13028.html", - "url": "^https?://www\\.manhuadb\\.com/manhua/\\d+/\\w+\\.html", - "pinUrl": true, - "history": 2, - "init": "let code=Array.from(document.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.replace('var',''));let imgData=eval(atob(Base64));let vgrdata=document.querySelector('.vg-r-data');let imgHost=vgrdata.getAttribute('data-host');let imgPre=vgrdata.getAttribute('data-img_pre');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.className='img-fluid show-pic';if(is_webp!=1&&e.img_webp){img.src=imgHost+imgPre+e.img_webp}else{img.src=imgHost+imgPre+e.img}F.appendChild(img)});let E=document.querySelector('#all');E.innerHTML='';E.appendChild(F);", - "nextLinkByJs": "return new Promise((resolve)=>{let v=doc.querySelector('.vg-r-data');let n=v.dataset.num;$.ajax({type:'post',url:'/book/goNumPage',data:{ccid:v.dataset.ccid,id:v.dataset.id,num:parseInt(n)+1,d:v.dataset.d,type:'next'},dataType:'json',success:function(json){if(json.state==0){resolve(null)}else{let url=json.url;resolve(location.origin+url)}}})}).then((res)=>{return res});", - "pageElement": "#all", - "replaceElement": "head>title,.h4.text-center,ol.breadcrumb", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.replace('var',''));let imgData=eval(atob(Base64));let vgrdata=doc.querySelector('.vg-r-data');let imgHost=vgrdata.getAttribute('data-host');let imgPre=vgrdata.getAttribute('data-img_pre');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.className='img-fluid show-pic';if(is_webp!=1&&e.img_webp){img.src=imgHost+imgPre+e.img_webp}else{img.src=imgHost+imgPre+e.img}F.appendChild(img)});let E=doc.querySelector('#all');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#all');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/img_data/)>-1).innerHTML;let Base64=eval(code.replace('var',''));let imgData=eval(atob(Base64));let vgrdata=doc.querySelector('.vg-r-data');let imgHost=vgrdata.getAttribute('data-host');let imgPre=vgrdata.getAttribute('data-img_pre');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc;if(is_webp!=1&&e.img_webp){imgSrc=imgHost+imgPre+e.img_webp}else{imgSrc=imgHost+imgPre+e.img}imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.h4.text-center');if(t)return t.innerText", - "css": "nav.d-none+div.row,#left,#right,.pagination .form-inline>*:nth-child(n+2):nth-child(-n+4){display:none!important}.row>*{padding:0px!important}#all,img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫画DB - 分類", - "example": "https://www.manhuadb.com/manhua/list-r-4-a-4-c-12.html", - "url": "^https?://www\\.manhuadb\\.com/manhua/list", - "nextLink": "a[title='下一页']", - "pageElement": ".comic-main-section>*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "快岸漫画 - 閱讀", - "example": "https://www.kanbook.net/comic/1661/1/1", - "url": "^https?://(www\\.)?kanbook\\.net/", - "include": "nav+.container-fluid+.container-fluid", - "pinUrl": true, - "history": 2, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let str=`var imagesObserver=new IntersectionObserver((entries,observer)=>{entries.forEach(entry=>{if(entry.isIntersecting){let realSrc=entry.target.dataset.src,nE=entry.target.nextElementSibling;if(realSrc){entry.target.src=realSrc;}if(nE&&nE.tagName=='IMG'&&nE.dataset.src){nE.src=nE.dataset.src;}}})});var loading_bak='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAAAAACbDccAAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAACYktHRAD/h4/MvwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cDDhUEC4m58W4AAAABb3JOVAHPoneaAAAF+UlEQVR42u3SQQkAMAzAwPo3MatVEQblTkEemQeB+R3ATcYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBLGImEsEsYiYSwSxiJhLBILoeSc6MiLXg0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDMtMTRUMjE6MDM6NDcrMDA6MDBTB1yAAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTAzLTE0VDIxOjAzOjQ3KzAwOjAwIlrkPAAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0wMy0xNFQyMTowNDoxMSswMDowMLyj5cQAAAAASUVORK5CYII=';var addGlobalscript=code=>{let script=document.createElement('script');script.type='text/javascript';script.innerHTML=code;document.body.appendChild(script)}`;let script=document.createElement('script');script.type='text/javascript';script.innerHTML=str;ge('body').appendChild(script);setTimeout(()=>{let imgData=[];if(is_refresh==0){for(let i=0;is.innerHTML.search(/comic_id/)>-1).innerHTML;addGlobalscript(code1);let code2=Array.from(doc.scripts).find(s=>s.innerHTML.search(/x_tokens/)>-1).innerHTML;addGlobalscript(code2);", - "pageAction": "let ge=e=>document.querySelector(e);let imgData=[];if(is_refresh==0){for(let i=0;idocument.querySelectorAll(e);let titles=gae('.pagetual_pageBar');if(titles.length>9){titles[0].remove();let removes=gae('nav+.container-fluid+.container-fluid>*');for(let i in removes){if(/pagetual_pageBar/.test(removes[i].className)){break}removes[i].remove()}}", - "sleep": 1000, - "pageBarText": "let t=doc.querySelector('div.justify-content-center.mt-3.mt-md-4.text-left.view-title.one-line>span:nth-child(5)');if(t)return t.innerText", - "css": "nav+.container-fluid+.container-fluid>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}h2~span:not(.h4),.ppre,.pnext,#page-selector,.pagination>a:nth-child(1)~*:not(.next_part){display:none!important}.container-fluid{max-width:1000px}" - }, - { - "name": "快岸漫画 - 分類", - "example": "https://www.kanbook.net/list-r-1", - "url": "^https?://www\\.kanbook\\.net/(update|list|rank|news)", - "nextLink": "//a[@title='下一页' or @title='下一頁']", - "pageElement": "//div[div/div/a/img[starts-with(@class,'comic-book-cover')]] | //div[div/div/div/div/a/img][starts-with(@class,'comic-main-section')] | //ul[li/div/a/img][starts-with(@class,'top10-list')] | //ul[@class='list-body'] | //div[div/div[starts-with(@class,'comicbook-index')]]", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "動漫戲說 - 漫畫閱讀", - "example": "https://comic.acgn.cc/view-202.htm", - "url": "^https?://comic\\.acgn\\.cc/view-", - "history": 2, - "pinUrl": true, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let c=ge('.tbCenter>tbody').cloneNode(true);ge('.tbCenter').appendChild(c);let F=new DocumentFragment();document.querySelectorAll('.pic[_src][id]').forEach(e=>{let img=new Image();img.src=e.getAttribute('_src');F.appendChild(img)});let E=ge('#pic_list');E.innerHTML='';E.appendChild(F);", - "nextLink": "#next_chapter", - "pageElement": "#pic_list", - "replaceElement": "#top,#breadcrumb,[class^='display_'],head>title", - "pageInit": "let F=new DocumentFragment();doc.querySelectorAll('.pic[_src][id]').forEach(e=>{let img=new Image();img.src=e.getAttribute('_src');F.appendChild(img)});let E=doc.querySelector('#pic_list');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pic_list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}setTimeout(()=>{let ge=e=>document.querySelector(e);ge('.tbCenter>tbody:last-child').outerHTML=ge('.tbCenter>tbody').outerHTML},200)", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let imgSrcArr=[];doc.querySelectorAll('.pic[_src][id]').forEach(e=>{let imgSrc=e.getAttribute('_src');imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText", - "css": ".btn_wrap,#ss-toolbar{display:none!important}#pic_list>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "動漫戲說 - 分類", - "example": "https://comic.acgn.cc/cate-1.htm", - "url": "^https?://comic\\.acgn\\.cc/", - "nextLink": "a[rel='next']", - "pageElement": "ul#display", - "replaceElement": "#pagination", - "css": ".pagetual_pageBar{margin-bottom:0px!important}" - }, - { - "name": "新新漫画 - 閱讀 - 沒有顯示圖片時需要換服務器", - "example": "https://www.77mh.xyz/202102/481169.html,http://m.77mh.xyz/202102/481169.html", - "url": "^https?://(www|m)\\.77mh\\.[a-z]{2,3}/\\d+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "action": 1, - "wait": 1000, - "init": "let ge=e=>document.querySelector(e);setTimeout(()=>{let code=eval(Array.from(document.scripts).find(s=>s.innerHTML.search(/msg/)>-1).innerHTML.trim().slice(4));let imgData=eval(code.match(/msg[^;]+/)[0]).split('|');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.hostname.indexOf('m.77mh')!=-1){img.src=ImgSvrList+e}else{img.src=img_qianz+e}F.appendChild(img)});if(location.hostname.indexOf('m.77mh')!=-1){let E=ge('.mg-co');E.innerHTML='';E.appendChild(F)}else{let E=ge('#comicImg');E.innerHTML='';E.appendChild(F)}},1000)", - "nextLinkByJs": "let code=eval(Array.from(doc.scripts).find(s=>s.innerHTML.search(/nextLink_b/)>-1).innerHTML.trim().slice(4));let next=eval(code.match(/nextLink_b[^;]+/)[0]);if(next.indexOf('html')!=-1)return location.origin+next", - "pageElement": "#comicImg,.mg-co", - "replaceElement": "head>title,#subTitle>h1,#pnpage,.page_num,.nav.nav-back", - "pageInit": "let ge=e=>doc.querySelector(e);let code=eval(Array.from(doc.scripts).find(s=>s.innerHTML.search(/msg/)>-1).innerHTML.trim().slice(4));let imgData=eval(code.match(/msg[^;]+/)[0]).split('|');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();if(location.hostname.indexOf('m.77mh')!=-1){img.src=ImgSvrList+e}else{img.src=img_qianz+e}F.appendChild(img)});if(location.hostname.indexOf('m.77mh')!=-1){let E=ge('.mg-co');E.innerHTML='';E.appendChild(F)}else{let E=ge('#comicImg');E.innerHTML='';E.appendChild(F)}", - "pageAction": "let gae=e=>document.querySelectorAll(e);if(location.hostname.indexOf('m.77mh')!=-1){let m=gae('.mg-co');if(m.length>10){gae('.mg-co')[0].remove()}}else{let c=gae('#comicImg');if(c.length>10){gae('#comicImg')[0].remove()}}let p=gae('.pagetual_pageBar');if(p.length>10){gae('.pagetual_pageBar')[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=eval(Array.from(doc.scripts).find(s=>s.innerHTML.search(/msg/)>-1).innerHTML.trim().slice(4));let imgData=eval(code.match(/msg[^;]+/)[0]).split('|');let imgSrcArr=[];imgData.forEach(e=>{let imgSrc;if(location.hostname.indexOf('m.77mh')!=-1){imgSrc=ImgSvrList+e}else{imgSrc=img_qianz+e}imgSrcArr.push(imgSrc)});return imgSrcArr", - "pageBarText": "let t1=doc.querySelector('h1>a');let t2=doc.querySelector('.tit>a');if(t1){return t1.innerText.replace(/\\S+/,'').trim()}else if(t2){return t2.innerText.replace(/\\S+/,'').trim()}", - "css": "#main>*:not(#comicImg):not(.pagetual_pageBar),.qrcode_div,.content~*:not(#toApp),body>p{display:none!important}#comicImg>img,.mg-co>img{max-width:100%!important;display:block!important;margin: 0 auto !important;border:0px!important;}" - }, - { - "name": "新新漫画手機版 - 分類", - "example": "http://m.77mh.xyz/lianzai/index.html", - "url": "^https?://(m|so)\\.77mh\\.[a-z]{2,3}/", - "include": ".lpagelist", - "nextLink": "//a[text()='下一页']", - "pageElement": "//ul[a/li/img]", - "replaceElement": ".lpagelist" - }, - { - "name": "新新漫画 - 分類", - "example": "http://www.77mh.xyz/lianzai/index.html", - "url": "^https?://(www|so)\\.77mh\\.[a-z]{2,3}/", - "include": ".pages_s", - "nextLink": "a.current+a, a.next", - "pageElement": "//ul[dl/dt/a/img] | //div[ul/li/a/img and @class='ar_list_co']", - "replaceElement": ".pages_s", - "css": ".pagetual_pageBar{margin-top:3px!important}" - }, - { - "name": "漫漫聚 / KuKu动漫 - 閱讀", - "example": "http://www.manmanju.com/comiclist/3658/97532/1.htm,http://manhua.ikukudm.com/comiclist/3756/102656/1.htm,http://m.manmanju.com/comiclist/3658/97532/1.htm,", - "url": "^https?://(m|a|b|www|manhua)\\.(manmanju|ikukudm)\\.com/comiclist/\\d+/\\d+/\\d+\\.htm$", - "action": 1, - "init": "let ia = document.querySelector('input~a');let sa = document.querySelector('script[language]+a');if(ia){ia.removeAttribute('href');}else{sa.removeAttribute('href');}", - "nextLink": "//a[./img[@src='/images/d.gif']][not(@href='/exit/exit.htm')] | //a[span[text()='下一页']][not(@href='/exit/exit.htm')]", - "pageElement": "//script[@language]/following-sibling::a/img[@src][not(contains(@src,'.gif'))]", - "replaceElement": "//a[./img[@src='/images/d.gif']] | //a[./img[@src='/images/t.gif']] | //div[@class='bottom']/ul[@class='subNav'] | //li[@class='txtA']", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "漫漫聚 / KuKu动漫 - 分類", - "example": "http://www.manmanju.com/comictype/3_1.htm,http://manhua.ikukudm.com/comictype/3_1.htm", - "url": "^https?://(m|www|manhua)\\.(manmanju|ikukudm)\\.com/comictype/", - "nextLink": "//a[text()='下一页'] | //a[span[text()='下一页']]", - "pageElement": "//dl[@id='comicmain'] | //div[@class='imgBox']", - "replaceElement": "//dl[@id='comicmain']/preceding-sibling::table | //dl[@id='comicmain']/following-sibling::table | //ul[@class='subNav']", - "css": ".pagetual_pageBar+dl,.imgBox+.pagetual_pageBar{margin-top:-2px!important}" - }, - { - "name": "鬼罗丽漫画", - "example": "http://www.gllmh.com/", - "url": "^https?://www\\.gllmh\\.com/", - "pinUrl": true, - "nextLink": "li.thisclass+li>a", - "pageElement": ".article-content img, #newsArticle img, .listl>ul, ul.news_list_1", - "replaceElement": ".pagination, .pages, .page", - "css": ".article-content img, #newsArticle img{visibility:visible!important;opacity:1!important;}" - }, - { - "name": "漫画屋 / 免追漫画 - 手機版閱讀", - "example": "https://www.mhua5.com/chapter-1582203.html,https://www.mh5.org/index.php/chapter/233329", - "url": "^https?://(www|m)\\.(mh5|mhua5|mianzhui)\\.(org|com)/(chapter-\\d+\\.html|index\\.php/chapter/\\d+|[0-9-]+\\.html)", - "include": ".bottom-tool-bar", - "pinUrl": true, - "history": 2, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let nh=ge('li.next-chapter').getAttribute('_href');let ph=ge('li.prev-chapter').getAttribute('_href');setTimeout(()=>{let p=ge('.prev-chapter.prev-btn');p.setAttribute('class','chapterprev');p.removeAttribute('_href');if(ph.indexOf('/')!=-1){let plink=`location.href='` + ph + `'`;p.setAttribute('onclick',plink)};if(nh.indexOf('/')!=-1){let n=ge('.next-chapter.next-btn');n.setAttribute('class','chapternext');n.removeAttribute('_href');let nlink=`location.href='` + nh + `'`;n.setAttribute('onclick',nlink)};let s=gx(\"//li[@class='switch'][span[text()='卷轴']]\");if(s){s.click()}},1000);setTimeout(()=>{if(location.hostname=='m.mianzhui.com'){document.querySelectorAll('img.lazy-image[data-original]').forEach(e=>{e.src=e.dataset.original})}},100);setTimeout(()=>{if(ph.indexOf('/')!=-1){ge('.end-itm.prev').outerHTML='
  • 上一章
  • '}else{ge('.end-itm.prev').outerHTML='
  • 無上一章
  • '}if(nh.indexOf('/')!=-1){ge('.end-itm.next').outerHTML='
  • 下一章
  • '}else{ge('.end-itm.next').outerHTML='
  • 無下一章
  • '}},150)", - "nextLinkByJs": "let n = doc.querySelector('li.next-chapter');if (n.getAttribute('_href').indexOf('/')!=-1) return location.origin+n.getAttribute('_href');", - "pageElement": ".comic-list,.read-end:not(.hide)", - "replaceElement": "head>title,h1.comic-name,.end-txt", - "pageInit": "let docge=e=>doc.querySelector(e);let ge=e=>document.querySelector(e);let gae=e=>doc.querySelectorAll(e);gae(`.comic-page[style='display: none;']`).forEach(e=>{e.style.display='list-item'});gae('.ldimg[mob-ec]').forEach(e=>{e.src=e.getAttribute('mob-ec')});let nh=docge('li.next-chapter').getAttribute('_href');let ph=docge('li.prev-chapter').getAttribute('_href');setTimeout(()=>{if(nh.indexOf('/')!=-1){ge('.end-itm.next').outerHTML=`
  • 下一章
  • `;let nlink=`location.href='${nh}'`;ge('.chapternext').setAttribute('onclick',nlink)}else{ge('.end-itm.next').outerHTML='
  • 無下一章
  • ';ge('.chapternext').removeAttribute('onclick')}ge('.end-itm.prev').outerHTML=`
  • 上一章
  • `;let plink=`location.href='${ph}'`;ge('.chapterprev').setAttribute('onclick',plink)},200)", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1.comic-name');if(t)return t.innerText", - "css": ".read-pos,.ds,ins{display:none!important}" - }, - { - "name": "漫画屋 / 免追漫画 - PC版閱讀", - "example": "https://www.mhua5.com/chapter-1612038.html,https://mh5.org/index.php/chapter/741258", - "url": "^https?://(www\\.)?(mh5|mhua5|mianzhui)\\.(org|com)/(chapter-\\d+\\.html|index\\.php/chapter/\\d+|[0-9-]+\\.html)", - "exclude": ".bottom-tool-bar", - "pinUrl": true, - "autoClick": "//div[@class='rd-aside__item j-rd-mod'][span[text()='卷轴']]", - "history": 2, - "action": 1, - "wait": 1000, - "init": "document.querySelectorAll('img[data-original]').forEach(e=>{e.src=e.dataset.original})", - "nextLinkByJs": "let next = doc.querySelector('.rd-aside__item.j-rd-next:not([style])'); if (next) return location.origin + next.getAttribute('_href')", - "pageElement": ".rd-article-wr", - "replaceElement": ".last-crumb,.rd-aside__item.j-rd-prev,.rd-aside__item.j-rd-next,head>title", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.rd-article-wr');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.last-crumb');if(t)return t.innerText", - "css": ".ds,.adv-img,.page-index__btn{display:none!important}.rd-article-wr>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫客栈手機版 - 閱讀", - "example": "https://m.mkzhan.com/216512/1006597.html", - "url": "^https?://m\\.mkzhan\\.com/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "action": 1, - "waitElement": [ - ".next-chapter[data-href]" - ], - "nextLinkByJs": "let n = doc.querySelector('.next-chapter[data-href$=html]');if (n) return location.origin+n.getAttribute('data-href');", - "pageElement": ".comic-list,.read-end", - "replaceElement": "head>title,h1.comic-name,.prev-chapter,.next-chapter,.chapter-end", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1.comic-name');if(t)return t.innerText", - "css": "p.read-pos{display:none!important}" - }, - { - "name": "漫客栈 - 卷軸模式", - "example": "https://www.mkzhan.com/216512/1007019.html", - "url": "^https?://www\\.mkzhan\\.com/\\d+/\\d+\\.html", - "history": 2, - "action": 1, - "waitElement": [ - "#pages-tpl>*" - ], - "init": "document.querySelectorAll('img.lazy-read').forEach(img=>{let dc=img.getAttribute('data-src');img.src=dc})", - "nextLinkByJs": "let next=doc.querySelector('.rd-aside__item.j-rd-next:not([style])');if(next)return location.origin+next.getAttribute('href')", - "pageElement": "#pages-tpl", - "replaceElement": ".rd-aside__item.j-rd-prev,.rd-aside__item.j-rd-next,head>title,.last-crumb", - "pageInit": "doc.querySelectorAll('img.lazy-read').forEach(img=>{let dc=img.getAttribute('data-src');img.src=dc})", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#pages-tpl');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.last-crumb');if(t)return t.innerText", - "css": ".ds,.adv-img,.page-index__btn{display:none!important}#mainView{margin-top:0px!important}.rd-article__pic{min-height: auto!important}" - }, - { - "name": "好漫 6手機版 - 閱讀", - "example": "https://www.haoman6.com/chapter/520621", - "url": "^https?://www\\.haoman6\\.com/chapter/\\d+", - "include": ".bottom-tool-bar", - "pinUrl": true, - "history": 2, - "action": 1, - "init": "let ge=e=>document.querySelector(e);let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;$('#mainView').removeAttr('style');let nh=ge('li.next-chapter').getAttribute('_href');let ph=ge('li.prev-chapter').getAttribute('_href');setTimeout(()=>{let p=ge('.prev-chapter.prev-btn');p.setAttribute('class','chapterprev');p.removeAttribute('_href');if(ph.indexOf('/')!=-1){let plink=`location.href='${ph}'`;p.setAttribute('onclick',plink)};if(nh.indexOf('/')!=-1){let n=ge('.next-chapter.next-btn');n.setAttribute('class','chapternext');n.removeAttribute('_href');let nlink=`location.href='${nh}'`;n.setAttribute('onclick',nlink)};let s=gx(\"//li[@class='switch'][span[text()='卷轴']]\");if(s){s.click()}},1000);setTimeout(()=>{if(ph.indexOf('/')!=-1){ge('.end-itm.prev').outerHTML='
  • 上一章
  • '}else{ge('.end-itm.prev').outerHTML='
  • 無上一章
  • '}if(nh.indexOf('/')!=-1){ge('.end-itm.next').outerHTML='
  • 下一章
  • '}else{ge('.end-itm.next').outerHTML='
  • 無下一章
  • '}},150);setTimeout(()=>{let F=new DocumentFragment();document.querySelectorAll('.ldimg[mob-ec]').forEach(e=>{let img=new Image();img.src=e.getAttribute('mob-ec');F.appendChild(img)});let E=ge('.main_img');E.innerHTML='';E.appendChild(F)},100);", - "nextLinkByJs": "let n = doc.querySelector('li.next-chapter');if (n.getAttribute('_href').indexOf('/')!=-1) return location.origin+n.getAttribute('_href');", - "pageElement": ".comic-list,.read-end:not(.hide)", - "replaceElement": "head>title,h1.comic-name,.end-txt", - "pageInit": "let docge=e=>doc.querySelector(e);let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);let nh=docge('li.next-chapter').getAttribute('_href');let ph=docge('li.prev-chapter').getAttribute('_href');setTimeout(()=>{if(nh.indexOf('/')!=-1){ge('.end-itm.next').outerHTML='
  • 下一章
  • ';let nlink=`location.href='${nh}'`;ge('.chapternext').setAttribute('onclick',nlink)}else{ge('.end-itm.next').outerHTML='
  • 無下一章
  • ';ge('.chapternext').removeAttribute('onclick')}ge('.end-itm.prev').outerHTML='
  • 上一章
  • ';let plink=`location.href='${ph}'`;ge('.chapterprev').setAttribute('onclick',plink)},200);let F=new DocumentFragment();doc.querySelectorAll('.ldimg[mob-ec]').forEach(e=>{let img=new Image();img.src=e.getAttribute('mob-ec');F.appendChild(img)});let E=docge('.main_img');E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1.comic-name');if(t)return t.innerText", - "css": ".read-pos,.ds,.top-tool-bar+div[style]{display:none!important}.comic-list>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "好漫 6 - 閱讀 - 修正PC版漫畫下架", - "example": "https://www.haoman6.com/chapter/1630368", - "url": "^https?://www\\.haoman6\\.com/chapter/\\d+", - "exclude": ".bottom-tool-bar", - "pinUrl": true, - "history": 2, - "action": 1, - "wait": 1000, - "init": "document.querySelectorAll(`.rd-article__pic[style='display: none;']`).forEach(e=>{e.style.display='block'});document.querySelectorAll('img.lazy-read').forEach(img=>{img.src=img.getAttribute('data-ecp')})", - "nextLinkByJs": "let next = doc.querySelector('.rd-aside__item.j-rd-next:not([style])'); if (next) return location.origin + next.getAttribute('_href')", - "pageElement": ".rd-article-wr", - "replaceElement": ".last-crumb,.rd-aside__item.j-rd-prev,.rd-aside__item.j-rd-next,head>title", - "pageInit": "doc.querySelectorAll(`.rd-article__pic[style='display: none;']`).forEach(e=>{e.style.display='block'});doc.querySelectorAll('img.lazy-read').forEach(img=>{img.src=img.getAttribute('data-ecp')})", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.rd-article-wr');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.last-crumb');if(t)return t.innerText", - "css": ".ds,.adv-img,.page-index__btn{display:none!important}#mainView{margin-top:0px!important}.rd-article__pic{min-height: auto!important}" - }, - { - "name": "好漫 6 / 漫客栈 / 漫画屋 - 分類", - "example": "https://www.haoman6.com/category/,https://www.mkzhan.com/category/,https://www.mhua5.com/category/,https://mh5.org/index.php/category/", - "url": "^https?://(www\\.)?(haoman6|g-lens|mkzhan|mhua5|mh5)\\.(com|org)/((category|search)|index\\.php/(category|search))", - "nextLink": "a.next", - "pageElement": ".cate-comic-list", - "replaceElement": "#Pagination", - "css": ".pagetual_pageBar{margin-top:-20px!important}.pagetual_pageBar+.cate-comic-list{margin-top:2px!important}" - }, - { - "name": "好漫 6 手機版 - 加載更多", - "example": "https://www.haoman6.com/,http://www.g-lens.com/", - "url": "^https?://www\\.(haoman6|g-lens)\\.com/category/(tags|finish|pay|list)/", - "include": ".getmore", - "loadMore": ".getmore" - }, - { - "name": "漫本 - 手機版閱讀", - "example": "http://www.manben.com/m1149741/", - "url": "^https?://www\\.manben\\.com/m\\d+(#page_\\d+)?", - "exclude": "id('mainControlNext')", - "init": "window.onscroll=null;let ge=e=>document.querySelector(e);function showtoolbar(){let t=ge(\".titleBar[style*='40px']\");if(t){$('.titleBar').attr('style','background-color:#373737;top: 0px;')}else{$('.titleBar').attr('style','background-color:#373737;top: -40px;')}let b=ge('.toolBar[style]');if(b){$('.toolBar').removeAttr('style')}else{$('.toolBar').attr('style','bottom: -65px;')}};document.addEventListener('click',showtoolbar);function keyshowtoolbar(e){let key=window.event?e.keyCode:e.which;if(key=='34'||key=='32'||key=='40'){return}else{$('.titleBar').attr('style','background-color:#373737;top: 0px;');$('.toolBar').removeAttr('style')}};document.addEventListener('keydown',keyshowtoolbar);let F=new DocumentFragment();newImgs.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#cp_img');E.innerHTML='';E.appendChild(F);", - "history": 2, - "pinUrl": true, - "nextLink": "//p[text()='下一章']/preceding-sibling::a[starts-with(@href,'/m')] | //a[@class='readTipForm' and not(@href='/m0/')]", - "pageElement": "#cp_img", - "replaceElement": "//head/title | id('title') | //a[@class='readTipForm'] | //p[contains(text(), '上一章') or contains(text(), '下一章')]/preceding-sibling::a", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=doc.querySelector('#cp_img');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#cp_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('#title');if(t)return t.innerText.replace(/\\S+/,'').trim()" - }, - { - "name": "漫本 - PC版閱讀", - "example": "http://www.manben.com/m1149741/", - "url": "^https?://www\\.manben\\.com/m\\d+(#page_\\d+)?", - "include": "//script[contains(text(),'eval') and contains(text(),'newImgs')]", - "exclude": "//p[text()='下一章'] | //a[@class='readTipForm']", - "pinUrl": true, - "init": "$('#mainView').removeAttr('style');let ge=e=>document.querySelector(e);let loop=setInterval(()=>{let set=ge('#comicContain img');if(set){clearInterval(loop);let F=new DocumentFragment();newImgs.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});let E=ge('#comicContain');E.innerHTML='';E.appendChild(F)}},100)", - "nextLink": "id('mainControlNext') | //a[img[@alt='下一章'] and not(@href='javascript:void(0);')]", - "pageElement": "#comicContain", - "replaceElement": "head>title,.title-comicHeading,.main_control,.catalog~a", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgData=eval(eval(code.trim().slice(4)).slice(12));let E=doc.querySelector('#comicContain');let F=new DocumentFragment();imgData.forEach(e=>{let img=new Image();img.src=e;F.appendChild(img)});E.innerHTML='';E.appendChild(F);", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('#comicContain');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "preloadImages": "document.querySelector('#pagetual-preload').innerHTML='';let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/newImgs/)>-1).innerHTML;let imgSrcArr=eval(eval(code.trim().slice(4)).slice(12));return imgSrcArr", - "pageBarText": "let t=doc.querySelector('.title-comicHeading');if(t)return t.innerText", - "css": "p.num,p.say,.comic-text{display:none!important}#comicContain img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "漫本 - PC/手機版查看更多", - "example": "http://www.manben.com/mh-updated/", - "url": "^https?://www\\.manben\\.com/(mh-updated|mh-list)/", - "loadMore": "#moreDiv", - "css": "div[class^=''floatBar][style*='.png']{display:none!important}" - }, - { - "name": "好漫8手機版 - 閱讀", - "example": "http://haoman8.com/comic/222/746937", - "url": "^https?://(www\\.)?haoman8\\.com/comic/\\d+/\\d+", - "include": ".bottom-tool-bar", - "pinUrl": true, - "history": 2, - "action": 1, - "wait": 2000, - "init": "function gx(x){return document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}setTimeout(()=>{document.querySelectorAll('img[data-echo]').forEach(e=>{e.src=e.getAttribute('data-echo')})},2000);let nh=document.querySelector('li.next-chapter').getAttribute('_href');let ph=document.querySelector('li.prev-chapter').getAttribute('_href');setTimeout(()=>{let p=document.querySelector('.prev-chapter.prev-btn');p.setAttribute('class','chapterprev');p.removeAttribute('_href');if(ph.indexOf('/')!=-1){let plink=`location.href='` + ph + `'`;p.setAttribute('onclick',plink)};if(nh.indexOf('/')!=-1){let n=document.querySelector('.next-chapter.next-btn');n.setAttribute('class','chapternext');n.removeAttribute('_href');let nlink=`location.href='` + nh + `'`;n.setAttribute('onclick',nlink)};let s=gx(\"//li[@class='switch'][span[text()='卷轴']]\");if(s){s.click()}},1000);setTimeout(()=>{if(ph.indexOf('/')!=-1){document.querySelector('.end-itm.prev').outerHTML='
  • 上一章
  • '}else{document.querySelector('.end-itm.prev').outerHTML='
  • 無上一章
  • '}if(nh.indexOf('/')!=-1){document.querySelector('.end-itm.next').outerHTML='
  • 下一章
  • '}else{document.querySelector('.end-itm.next').outerHTML='
  • 無下一章
  • '}},150)", - "nextLinkByJs": "let n = doc.querySelector('li.next-chapter');if (n.getAttribute('_href').indexOf('/')!=-1) return location.origin+n.getAttribute('_href');", - "pageElement": ".comic-list,.read-end:not(.hide)", - "replaceElement": "head>title,h1.comic-name,.end-txt", - "lazyImgSrc": [ - "data-echo", - "data-echo" - ], - "pageInit": "let nh=doc.querySelector('li.next-chapter').getAttribute('_href');let ph=doc.querySelector('li.prev-chapter').getAttribute('_href');setTimeout(()=>{if(nh.indexOf('/')!=-1){document.querySelector('.end-itm.next').outerHTML='
  • 下一章
  • ';let nlink=`location.href='` + nh + `'`;document.querySelector('.chapternext').setAttribute('onclick',nlink)}else{document.querySelector('.end-itm.next').outerHTML='
  • 無下一章
  • ';document.querySelector('.chapternext').removeAttribute('onclick')}document.querySelector('.end-itm.prev').outerHTML='
  • 上一章
  • ';let plink=`location.href='` + ph + `'`;document.querySelector('.chapterprev').setAttribute('onclick',plink)},200)", - "pageAction": "function gae(e){return document.querySelectorAll(e)};setTimeout(()=>{let c=gae('.comic-list');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}let r=gae('.read-end')[0];if(r){gae('.prev-chapter')[0].remove()}},10000);", - "pageBarText": 1, - "css": ".read-pos,.ds{display:none!important}.comic-list>.comic-page{margin-top:-3px!important}" - }, - { - "name": "好漫8 - 閱讀 - 修正PC版漫畫下架", - "example": "http://haoman8.com/comic/222/718631", - "url": "^https?://(www\\.)?haoman8\\.com/comic/\\d+/\\d+", - "exclude": ".bottom-tool-bar", - "pinUrl": true, - "init": "setTimeout(()=>{let s=document.querySelector('#js_swichV:not(.hide)');if(s){s.click()}},1000);let _img='';document.querySelectorAll('img[data-echo]').forEach(e=>{_img+=``});document.querySelector('#reader-scroll').innerHTML=_img", - "nextLinkByJs": "let next = document.querySelector(`#js_pageNextBtn[_href^='/']`); if (next) return location.origin + next.getAttribute('_href')", - "manualMode": true - }, - { - "name": "好漫8 - 分類", - "example": "http://haoman8.com/category/", - "url": "^https?://haoman8\\.com/category/", - "nextLink": "a.on+a", - "pageElement": ".acgn-comic-list", - "replaceElement": ".acgn-pages", - "css": ".pagetual_pageBar{margin-top:-15px!important}.acgn-comic-list{margin-bottom:0px!important}" - }, - { - "name": "拷貝漫畫 - 分類頁", - "example": "https://copymanga.site/comics", - "url": "^https?://copymanga\\.site/comics", - "action": 1, - "nextLink": "li.next>a", - "pageElement": ".container.exemptComicList", - "replaceElement": ".container>.page-all" - }, - { - "name": "拷貝漫畫 - 推薦頁", - "example": "https://copymanga.site/recommend", - "url": "^https?://copymanga\\.site/recommend", - "nextLink": "li.next>a", - "pageElement": ".container.correlationList", - "replaceElement": ".container>.page-all", - "css": ".pagetual_pageBar {margin-top: -10px !important;margin-bottom: 20px !important;}" - }, - { - "name": "二次元動漫 - 閱讀", - "example": "https://www.2animx.com/index-look-name-%E5%A6%96%E7%A5%9E%E8%A8%98-cid-22592-id-235546", - "url": "^https?://www\\.2animx\\.com/index-look-name", - "init": "document.querySelectorAll('#img_ad_img>img[style*=none]').forEach(e=>{e.remove()});document.querySelectorAll('#ComicPic').forEach(e=>{e.outerHTML=``});", - "nextLink": "//a[text()='下一頁'][not(starts-with(@href,'javascript'))] | //a[text()='下一章']", - "pageElement": "#img_ad_img>img", - "replaceElement": "head>title,script+div.c,.e+.c,.b", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('#img_ad_img>img[style*=none]').forEach(e=>{e.remove()});gae('#ComicPic').forEach(e=>{e.outerHTML=``});gae('.pagetual_pageBar>a').forEach(e=>{if(/-p-/.test(e.href))e.parentNode.remove()});let ps=gae('.pagetual_pageBar');if(ps.length>5){ps[0].remove();let ds=gae('#img_ad_img>*');for(let i in ds){if(/pagetual/.test(ds[i].id)){break};ds[i].remove()}}", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText.match(/-([^-]+)/)[1].trim();", - "rate": 10, - "css": ".e>h1,.e>p,.fb-share-button,#index_mian,.c>.fanye,.c>select,#k_zsy,.lookpage{display:none!important}#img_ad_img>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "二次元動漫 - 分類", - "example": "https://www.2animx.com/index-html-status-1", - "url": "^https?://www\\.2animx\\.com/index-html-status", - "nextLink": "//a[text()='下一頁']", - "pageElement": ".box.across.list>.box-bd>.liemh.htmls.indliemh", - "replaceElement": ".pagination" - }, - { - "name": "酷漫屋 - 閱讀", - "example": "http://www.kumw7.com/24186/1259138.html", - "url": "^https?://www\\.(kumw|kuman)\\d+\\.com/\\d+/\\d+\\.html$", - "history": 2, - "action": 1, - "nextLink": "a.next[href$='html']", - "pageElement": ".main_img", - "replaceElement": ".chaptitle,.chapend,head>title", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.main_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('h1');if(t)return t.innerText", - "css": ".chapter-img-box{margin-bottom:-1px!important}.chapend .next,.chapend .prev{margin:0 auto!important}" - }, - { - "name": "酷漫屋 - 分類", - "example": "http://www.kumw7.com/sort/13-1.html", - "url": "^https?://www\\.(kumw|kuman)\\d+\\.com/(sort|rank)/", - "nextLink": "//a[text()=' > ']", - "pageElement": ".box.container", - "replaceElement": "section+footer", - "css": ".pagetual_pageBar {margin-top: -8px !important;}.pagetual_pageBar+section {margin-top: 5px !important;}" - }, - { - "name": "酷漫屋手機版 - 閱讀", - "example": "http://kumw7.com/25387/1391494.html", - "url": "^https?://(m\\.)?(kumw|kuman)\\d+\\.com/\\d+/\\d+\\.html", - "history": 2, - "pinUrl": true, - "action": 1, - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')});let ge=e=>document.querySelector(e);", - "nextLink": "li.end-itm.next>a[href$='html']", - "pageElement": ".main_img", - "replaceElement": ".chapter-end,.rd-static,div.title,head>title", - "lazyImgSrc": [ - "data-src", - "data-src" - ], - "pageAction": "let gae=e=>document.querySelectorAll(e);let ge=e=>document.querySelector(e);let cs=gae('.main_img');let last=cs.length-1;cs[last].addEventListener('click',()=>{let v=ge('.van-nav-bar:not([style])');let vn=ge('.van-nav-bar[style*=none]');let vb=ge('.van-nav-bar[style*=block]');let b=ge('.bottom-tool-bar:not([style])');let bn=ge('.bottom-tool-bar[style*=none]');let bb=ge('.bottom-tool-bar[style*=block]');if(v){v.setAttribute('style','display: block;')}if(b){b.setAttribute('style','display: block;')}if(vn){vn.style.display='block'}else{vb.style.display='none'}if(bn){bn.style.display='block'}else{bb.style.display='none'}});let c=gae('.main_img');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "pageBarText": "let t=doc.querySelector('.rd-static>span');if(t)return t.innerText", - "css": ".img_Page,.morepl,#adhtml{display:none!important}" - }, - { - "name": "酷漫屋手機版 - 分類", - "example": "http://kumw7.com/rank/5-1.html", - "url": "^https?://(m\\.)?(kumw|kuman)\\d+\\.com/(sort|rank)/", - "nextLink": "//a[text()=' > ']", - "pageElement": ".manList>ul", - "replaceElement": "div+footer", - "css": "aside{display:none!important}.pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "快看 - 分類", - "example": "https://www.kuaikanmanhua.com/tag/0", - "url": "^https?://www\\.kuaikanmanhua\\.com/tag/\\d+", - "init": "let ge=e=>document.querySelector(e);let link=ge('.headerContent>div>ul>li:nth-child(2)>a');link.href='/tag/0\\?region=1&pays=0&state=0&sort=1&page=1';link.removeAttribute('target');if(!location.search){ge('.selList.fl.cls>a:first-child').click()}", - "action": 1, - "nextLinkByUrl": [ - "&page=(\\d+)$", - "&page={$1+1}", - "ul.pagination>li:not(.disabled):last-child" - ], - "pageElement": ".tagContent.cls>*", - "replaceElement": ".TagPages.pagesBox", - "pageAction": "setTimeout(()=>{let ge=e=>document.querySelector(e);let url=location.search.replace(/(\\d+)$/,'');document.querySelectorAll('.itemBten:not(.active)>a:not(.prev):not(.Next)').forEach(a=>{a.href=url+a.innerText});let cp=ge('.pagination>li.active>a').innerText;let ppn=cp-1;let hb=ge('.pagination>li:not(.disabled):first-child>a');if(hb){hb.href=url+ppn}let pb=ge('a.prev');if(pb){pb.href=url+ppn}let next=ge('.pagination>li.active+li>a');let nb=ge('a.Next');if(next){nb.href=url+next.innerText}let enb=ge('.pagination>li:not(.disabled):last-child>a');if(enb){enb.href=url+next.innerText}},1000)", - "css": ".pagetual_pageBar{margin-top:-20px!important}.blankImg" - }, - { - "name": "快看 - 閱讀", - "example": "https://www.kuaikanmanhua.com/web/comic/190217/", - "url": "^https?://www\\.kuaikanmanhua\\.com/web/comic/\\d+", - "history": 2, - "pinUrl": true, - "action": 1, - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src})", - "nextLink": "//a[not(@href='javascript:void(0);') and text()='下一话']", - "pageElement": ".imgList", - "replaceElement": ".comicDetails h3,.AdjacentChapters,head>title", - "pageAction": "let gae=e=>document.querySelectorAll(e);let c=gae('.imgList');if(c.length>10){c[0].remove()}let p=gae('.pagetual_pageBar');if(p.length>10){p[0].remove()}", - "css": ".giude{display:none!important}", - "pageBarText": "let t=doc.querySelector('title');if(t)return t.innerText.match(/[^|]+/)[0].trim()" - }, - { - "name": "comic.bh3.com", - "example": "https://comic.bh3.com/book/1001/1", - "url": "^https?://comic\\.bh3\\.com/book/\\d+/\\d+", - "nextLinkByJs": "let n=doc.querySelector('.comic-wrapper>a:last-child');if(n){return location.origin+n.href.split('\\'')[3]}", - "pageElement": "img.comic_img,.comic-wrapper>.read-next", - "replaceElement": ".comic-wrapper>a:last-child,.header_word", - "css": ".comic-wrapper {overflow-y: initial !important;} .comic_img{display: inline;}" - }, - { - "name": "kantv.io", - "example": "http://kantv.io/home/", - "url": "^https?://kantv\\.io/", - "nextLink": "li.active+li>a", - "pageElement": ".subom-post", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-8px!important;}" - }, - { - "name": "R3SUB - 搜索", - "example": "https://r3sub.com/search.php?s=king", - "url": "^https?://r3sub\\.com/search\\.php", - "nextLink": "li.active+li>a", - "pageElement": ".movie.movie--preview.ddd", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:10px!important;}.pagetual_pageBar+.movie{margin-top:-2px!important;}" - }, - { - "name": "SubHD", - "example": "https://subhd.tv/sub/movie", - "url": "^https?://subhd(tw)?\\.(tv|com|la|cc|me)/(zu|sub|search)/", - "include": "nav.clearfix", - "nextLink": "//a[text()='下一页']", - "pageElement": ".bg-white.shadow-sm.rounded-3", - "replaceElement": ".pagination", - "insert": "nav.clearfix", - "insertPos": 1, - "css": ".col-lg-3.pt-5{display:none!important}.pagetual_pageBar{margin-top:-10px!important;}", - "rate": 3, - "sleep": 1000 - }, - { - "name": "伪射手网", - "example": "http://assrt.net/xml/list/sub/", - "url": "^https?://assrt\\.net/", - "nextLinkByJs": "let next = doc.querySelector('#pl-current+a'); if (next) return location.origin + location.pathname + '?page=' + next.innerText", - "pageElement": ".subitem:not([style])", - "replaceElement": ".pagelinkcard", - "insert": ".pagelinkcard", - "insertPos": 1, - "css": ".pagetual_pageBar{margin-top:10px!important}.pagetual_pageBar+.subitem{margin-top:-2px!important}" - }, - { - "name": "A4k 字幕網", - "example": "https://www.a4k.net/", - "url": "^https?://www\\.a4k\\.net/", - "nextLink": "a.pager__item--next", - "pageElement": ".list>.item", - "replaceElement": "nav.pager", - "pageBar": 0 - }, - { - "name": "字幕库 zmk", - "example": "https://zimuku.org/", - "url": "^https?://zimuku\\.org/", - "nextLink": "a.next", - "pageElement": "table>tbody", - "replaceElement": ".pagination" - }, - { - "name": "中文字幕网 zimuzimu", - "example": "http://cn.zimuzimu.com/so_zimu.htm?q=2020", - "url": "^https?://cn\\.zimuzimu\\.com/", - "nextLink": "li.page-item.active+li>a", - "pageElement": "li.thread", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "點點字幕", - "example": "http://www.ddzimu.com/download/xslist.php?key=king", - "url": "^https?://www\\.ddzimu\\.com/\\w+/xslist\\.php", - "nextLink": "li.disabled+li>a", - "pageElement": ".list>ul>li:not(.first)", - "replaceElement": "div.pagination" - }, - { - "name": "SkrBT / BT1207", - "example": "http://ibt120701.xyz/search?keyword=king", - "url": "^https?://.*(bt1207|skrbt)[^/]+/", - "include": "#search-form", - "nextLinkByJs": "let n=doc.querySelector('ul.pagination>li.active+li>a');if(!n)return null;let params=[];let form=doc.querySelector('#search-form');form.querySelectorAll('input').forEach(input=>{if(input.name=='p')params.push('p='+n.innerText);else params.push(input.name+'='+input.value)});return form.action+'?'+params.join('&')", - "pageElement": "ul.list-unstyled", - "replaceElement": "nav>.pagination", - "css": ".pagetual_pageBar+.list-unstyled{margin-top:0px!important;}#right-panel{display:none!important}" - }, - { - "name": "RARBG", - "example": "https://rarbg.to/torrents.php?category=movies", - "url": "^https?://(proxy|unblocked)?rarbg([a-z0-9]+)?\\.(to|org|com)/", - "pinUrl": true, - "action": 2, - "include": "#pager_links", - "nextLink": "#pager_links>a[title='next page']", - "pageElement": "//table[tbody/tr[@class='lista2']/td/a/img]", - "replaceElement": "#pager_links", - "pageAction": "document.querySelectorAll('iframe[name]').forEach(iftame=>{iftame.style.margin='0 -2px 2px 0px'});let w=document.querySelector('.lista2t .lista2>td[align=center]:not([width])').clientWidth-2;let iframes=document.getElementsByTagName('iframe');for(let i=0;itd[align=center]:not([width])').forEach(e=>{e.setAttribute('width',w)})};", - "sleep": 1000, - "css": "inIframe:body,table{margin:0!important;padding:0!important;width:100.1%!important}td[width='100'],.lista2t tr:not(.lista2){display:none!important}body{background:none!important}table.lista2t{border-top:2px solid #a0cff0}" - }, - { - "name": "limetorrents.cc", - "example": "https://www.limetorrents.lol/browse-torrents/Movies/", - "url": "^https?://www\\.limetorrents\\.lol/(browse-torrents|search)/", - "nextLink": "#next", - "pageElement": "table.table2>tbody>tr:not(:first-of-type)", - "replaceElement": ".search_stat" - }, - { - "name": "BT 之家", - "example": "https://www.btbtt15.com/forum-index-fid-950.htm", - "url": "^https?://www\\.btbtt\\d+\\.com/", - "pinUrl": true, - "nextLink": "//div[@class='page']/a[text()='▶' or text()='下一页']", - "pageElement": "#threadlist>.thread", - "replaceElement": "div+div.page", - "pageBar": 0, - "rate": 3 - }, - { - "name": "蜜柑计划", - "example": "https://mikanani.me/Home/Classic", - "url": "^https?://mikanani\\.me/Home/Classic", - "action": 1, - "nextLinkByJs": "let next=doc.querySelector('.pagination>li.active+li:not([style]):not([class])>a');if(next)return location.origin+location.pathname.replace(/\\/\\d+$/,'')+'/'+next.innerText", - "pageElement": "//table/tbody/tr", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "動漫花園", - "example": "http://share.dmhy.org/topics/list/sort_id/2", - "url": "^https?://(www|share|dmhy)?(\\.)?(dmhy|anoneko)\\.(org|com)", - "action": 1, - "nextLink": "//a[text()='下一頁']", - "pageElement": "thead+tbody", - "replaceElement": ".table.clear>.nav_title,script+.nav_title", - "pageBar": 0, - "rate": 3 - }, - { - "name": "愛戀動漫&MioBT", - "example": "http://www.kisssub.org/,http://miobt.com/", - "url": "^https?://(www\\.|m|share\\.)?(kisssub|miobt|comicat|acgnx|anix|36dm)\\.(org|com|se|moe|club)", - "action": 1, - "nextLink": "span.current+a", - "pageElement": "#data_list>tr,.lists", - "replaceElement": ".pages.clear", - "pageBar": 0, - "rate": 3 - }, - { - "name": "言耽社 - 閱讀", - "example": "https://yandanshe.com/", - "url": "^https?://yandanshe\\.com/\\d+", - "nextLink": "span.current+a", - "pageElement": "title,.article-content", - "replaceElement": ".list", - "pageBarText": "let t=doc.querySelector('.article-content');if(t)return t.innerText" - }, - { - "name": "言耽社 - 分类页", - "example": "https://yandanshe.com/", - "url": "^https?://yandanshe\\.com/b", - "nextLink": ".next-page>a", - "pageElement": ".excerpts", - "replaceElement": ".pagination" - }, - { - "name": "MINI4K", - "example": "https://www.mini4k.com/movies", - "url": "^https?://www\\.mini4k\\.com/movies", - "nextLink": "a.pager__item--next", - "pageElement": "div[class*='-item-list']>ul>.column", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "WebHD - 搜索页", - "example": "http://webhd.cc/search/king", - "url": "^https?://webhd\\.cc/search/", - "nextLink": "//a[@class='page-link'][contains(text(), '下一页')]", - "pageElement": ".col-lg-9 .bg-white.shadow-sm.rounded-3", - "replaceElement": "ul.pagination", - "insert": "nav[aria-label='pagination']", - "insertPos": 1, - "pageBar": 0 - }, - { - "name": "WebHD", - "example": "http://webhd.cc/", - "url": "^https?://webhd\\.cc/", - "nextLink": "//a[@class='page-link'][contains(text(), '下一页')]", - "pageElement": ".col-lg-9 .bg-white.shadow-sm.rounded-3>.row.gx-0", - "replaceElement": "ul.pagination", - "pageBar": 0 - }, - { - "name": "limetorrents", - "example": "https://ww1.limetorrents.icu/movies", - "url": "^https?://(\\w{1,3}\\.)?limetorrents\\.icu/", - "nextLink": "a[rel='next']", - "pageElement": "section>.row", - "replaceElement": ".tsc_pagination", - "css": "#social_popup{display:none!important}.pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "TorrentGalaxy", - "example": "https://torrentgalaxy.to/torrents.php", - "url": "^https?://torrentgalaxy\\.to/", - "nextLink": "li.page-item.active+li.page-item>a", - "pageElement": ".tgxtable>.tgxtablerow", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "kickasss", - "example": "https://kickasss.to/", - "url": "^https?://(kickasss|katcr)\\.", - "nextLink": "a.active+a", - "pageElement": "table.data.frontPageWidget>tbody>tr:not(.firstr)", - "replaceElement": ".pages", - "pageBar": 0 - }, - { - "name": "1337x", - "example": "https://www.1377x.to/", - "url": "^https?://www\\.1377x\\.", - "nextLink": ".pagination li.active+li>a", - "pageElement": "table.table-list>tbody", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "YTS", - "example": "https://yts.mx/browse-movies", - "url": "^https?://yts\\.mx/browse-movies", - "nextLink": "//ul[contains(@class, 'tsc_pagination')]/li[a/@class='current']/following-sibling::li[1]/a", - "pageElement": ".browse-movie-wrap", - "replaceElement": ".tsc_pagination", - "pageBar": 0 - }, - { - "name": "萌番组 lite", - "example": "https://bangumi.moe/lite/", - "url": "^https?://bangumi\\.moe/lite/", - "nextLink": "//section/a[span[contains(@class, 'next')]]", - "pageElement": ".torrents-ul", - "replaceElement": ".page-btn-section", - "pageAction": "eval(document.querySelector('head>script:not([src])').innerHTML)", - "css": ".pagetual_pageBar+ul{padding-top:0px!important}" - }, - { - "name": "萌番组", - "example": "https://bangumi.moe/", - "url": "^https?://bangumi\\.moe/", - "loadMore": "[torrent-list='lattorrents'] button[ng-click='loadMore()'] ,[torrent-list='torrents'] button[ng-click='loadMore()']" - }, - { - "name": "AniRena", - "example": "https://www.anirena.com/", - "url": "^https?://www\\.anirena\\.com/", - "nextLink": "a.disabled+a:not(.disabled)", - "pageElement": ".full2, .full2+script", - "replaceElement": ".full3.buttons", - "pageAction": "let ss=document.querySelectorAll('.full2+script');let n=Math.ceil(ss.length/100);for(let i=(n-1)*100-1;ia", - "pageElement": "table.post-index>tbody", - "replaceElement": "ul.pagination" - }, - { - "name": "anime1.me", - "example": "https://anime1.me/", - "url": "^https?://anime1\\.me/", - "nextLink": "a.next", - "pageElement": "#table-list>tbody>tr" - }, - { - "name": "233 动漫 - 排行榜", - "example": "https://www.dm233.cc/rank/", - "url": "^https?://www\\.dm233\\.cc/rank/", - "nextLink": "//div[@class='pagelist']//a[contains(text(), '下一页') or contains(text(), '下一頁')]", - "pageElement": ".side-update.normal-wai>.normal-nei", - "replaceElement": ".pagelist" - }, - { - "name": "233 动漫", - "example": "https://www.dm233.cc/catalog/", - "url": "^https?://www\\.dm233\\.cc/", - "nextLink": "//div[@class='pagelist']//a[contains(text(), '下一页') or contains(text(), '下一頁')]", - "pageElement": ".dhnew ul, .xgyd ul", - "replaceElement": ".pagelist" - }, - { - "name": "AGE 动漫 - 排行榜", - "example": "https://www.agemys.cc/rank", - "url": "^https?://www\\.agemys\\.cc/rank", - "nextLink": "id('container')/ul[@style][not(@class)]/li/a[contains(text(), '下一页')]", - "pageElement": "#container>.div_right .blockcontent.div_right_r_3>ul", - "replaceElement": "#container>ul[style]:not([class])", - "css": ".pagetual_pageBar+ul{margin-top:-5px!important}" - }, - { - "name": "AGE 动漫", - "example": "https://www.agemys.net/catalog/all-all-all-all-all-time-1", - "url": "^https?://www\\.agemys\\.[^/]+/", - "nextLink": "id('container')//div[@class='blockcontent']/div[@style][not(@class)]/li/a[contains(text(), '下一页')]", - "pageElement": "#container .blockcontent1>div, #container .blockcontent>ul:not(.search-list)>li", - "replaceElement": "#container .blockcontent>div[style]:not([class])" - }, - { - "name": "漫岛动漫", - "example": "https://www.mandao.tv/list/lm1.html", - "url": "^https?://www\\.mandao\\.tv/", - "nextLink": "//div[contains(@class, 'page')]/a[text()='>']", - "pageElement": ".index-tj>ul", - "replaceElement": ".page", - "css": ".pagetual_pageBar{margin-top:-30px!important}" - }, - { - "name": "妮可动漫", - "example": "http://www.nicotv.me/video/type3/-----4-addtime.html", - "url": "^https?://www\\.nicotv\\.me/", - "nextLink": "//ul[contains(@class, 'pagination ')]//a[text()='»']", - "pageElement": "ul.list-unstyled", - "replaceElement": "ul.pagination" - }, - { - "name": "怡萱动漫", - "example": "https://www.yxdmlove.com/resource/", - "url": "^https?://www\\.yxdmlove\\.com/", - "nextLink": "//a[@class='nextPage' or text()='下一页']", - "pageElement": ".dhnew>ul", - "replaceElement": ".pagelist" - }, - { - "name": "LIBVIO", - "example": "https://libvio.me/type/1.html", - "url": "^https?://libvio\\.me/", - "action": 1, - "wait": 1000, - "nextLink": "li.active+li>a", - "pageElement": ".stui-vodlist", - "replaceElement": ".stui-page__item", - "pageInit": "let defaultImg='https://vkceyugu.cdn.bspapp.com/VKCEYUGU-ae4eabf5-1b15-425e-bdc9-144e48cded99/c9d2141e-8569-4996-9c73-d633a0669fa8.gif';doc.querySelectorAll('a.lazyload').forEach((item)=>{let imgUrl=item.dataset.original;let image=new Image();image.src=imgUrl;if(!image.complete){item.style.backgroundImage=`url(${defaultImg})`}})", - "css": ".stui-page__all{display:none!important}" - }, - { - "name": "筆趣影視", - "example": "http://biquys.com/acg/y2022/", - "url": "^https?://(www\\.)?biquys.com/(acg|zongyi|mov|tv)/", - "action": 1, - "nextLink": "//a[@class='a1' and text()='下一页']", - "pageElement": ".index-tj", - "replaceElement": ".page", - "wait": "let img=doc.querySelector('ul.main img');return img!=null", - "css": ".pagetual_pageBar{margin-top:-10px!important;}.mb {margin-bottom: 10px!important;}" - }, - { - "name": "libgen.rs", - "example": "http://libgen.rs/search.php?&req=The+Way+Out&phrase=1&view=simple&column=def&sort=def&sortmode=ASC&page=1", - "url": "^https?://libgen\\.rs/", - "action": 1, - "waitElement": [ - "//td[span/strong]" - ], - "nextLink": "//td[span/strong]/following-sibling::td[1]//a | //table/tbody/tr/td/font[@color]/a", - "pageElement": "//tr[td[@nowrap]]", - "replaceElement": "//div[contains(@class,'paginator')] | //table[tbody/tr/td/font[@color]]" - }, - { - "name": "99images", - "example": "https://www.99images.com/celebrities/aisha-sharma", - "url": "^https?://www.99images.com/", - "action": 1, - "init": "document.querySelectorAll('.gallery-images-container').forEach(e=>{e.nextElementSibling.remove()})", - "nextLink": "a[rel='next']", - "pageElement": ".gallery-images-container", - "replaceElement": ".pagination" - }, - { - "name": "steamcommunity.com", - "url": "^https?://steamcommunity\\.com/", - "include": ".workshopBrowsePaging", - "nextLink": "a.pagebtn:last-child", - "pageElement": ".workshopBrowseItems", - "replaceElement": ".workshopBrowsePaging", - "pageAction": "let ps=document.querySelectorAll('.workshopBrowseItems');let last=ps.length-1;ps[last].querySelectorAll('script').forEach(e=>{eval(e.innerHTML)})", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "游研社", - "example": "https://www.yystv.cn/docs", - "url": "^https?://www\\.yystv\\.cn/", - "action": 1, - "nextLinkByJs": "let next = doc.querySelector('.cur-page+li'); if (next) return location.origin + location.pathname + '?page=' + next.innerText", - "pageElement": ".list-container>li,.video-list,.img-mode", - "replaceElement": ".page-list", - "css": ".pagetual_pageBar{margin-top:-5px!important}", - "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);gae('.scale-img').forEach(e=>{e.style=e.getAttribute('style')});setTimeout(()=>{let ls=gae('.page-num-list li:not([class])');let lp=location.pathname;ls.forEach(e=>{let p=e.innerText;let link=lp+'?page='+p;let ps=`location.href='${link}'`;e.setAttribute('onclick',ps)});let h=ge('.page-list>li:nth-child(1)');let gohp=`location.href='${lp}'`;h.setAttribute('onclick',gohp);let n=ge('.page-list>li:nth-child(2)');let np=ge('.cur-page+li');if(n&&np){let link=lp+'?page='+np.innerText;let next=`location.href='${link}'`;n.setAttribute('onclick',next)}else{n.removeAttribute('onclick')}let input=ge('.page-list-custom-input');input.addEventListener('keydown',(e)=>{let key=window.event?e.keyCode:e.which;if(key=='13'){let url=location.href.replace(/\\?page=\\d+/,'');if(input.value>0)location.href=url+'?page='+input.value}})},500)" - }, - { - "name": "Vilipix", - "example": "https://www.vilipix.com/new", - "url": "^https?://www\\.vilipix\\.com/", - "action": 2, - "nextLinkByJs": "let next=doc.querySelector('li.number.active+li.number');if(next)return location.origin+location.pathname+'?p='+next.innerText", - "pageElement": "ul.illust-content", - "replaceElement": "ul.el-pager", - "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);setTimeout(()=>{let cpn=ge('.el-pager>.number.active').innerText;let ps=gae('.el-pager>.number:not(.active)');let lp=location.pathname;ps.forEach(e=>{let p=e.innerText;let lpp=lp+'?p='+p;let link=`location.href='${lpp}'`;e.setAttribute('onclick',link)});let pb=ge('button.btn-prev');if(pb){if(cpn>1){pb.removeAttribute('disabled');let p=cpn-1;let lpp=lp+'?p='+p;let link=`location.href='${lpp}'`;pb.setAttribute('onclick',link)}}let nb=ge('button.btn-next');if(nb){let last=ge('.el-pager>li.active:last-child');if(last){nb.setAttribute('disabled','disabled')}else{let npn=ge('.el-pager>.number.active+li').innerText;let p=parseInt(cpn)+1;let lpp=lp+'?p='+p;let link=`location.href='${lpp}'`;nb.setAttribute('onclick',link)}}},500)" - }, - { - "name": "吐槽弹幕网 - 搜索页", - "example": "https://www.tucao.lol/index.php?m=content&c=search&a=init&catid=24&dosubmit=1&orderby=a.id+DESC&info%5Btitle%5D=%E8%BD%AC%E7%94%9F&page=3", - "action": 1, - "url": "^https?://www\\.tucao\\.[a-z]{3}/index\\.php\\?", - "nextLink": "//a[@class='a1' and contains(text(), '下一页')]", - "pageElement": "//div[div[@class='search_info']]", - "replaceElement": ".newpages", - "css": ".pagetual_pageBar{margin-bottom:0px!important}.pagetual_pageBar+div{margin-top:10px!important}" - }, - { - "name": "吐槽弹幕网", - "example": "https://www.tucao.lol/list/7/", - "url": "^https?://www\\.tucao\\.[a-z]{3}/", - "nextLink": ".pagego a", - "pageElement": ".list>ul", - "replaceElement": ".newpages,.pagego,#float_sho" - }, - { - "name": "ZzzFun 动漫", - "example": "http://www.zzzfun.com/vod_type_id_1.html", - "url": "^https?://www\\.zzzfun\\.com/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".main-guide>.search-result>a", - "replaceElement": "#page", - "pageBar": 0 - }, - { - "name": "91 美剧网", - "example": "https://91mjw.vip/category/dianying", - "url": "^https?://(91mjw|91mj)\\.vip/", - "nextLink": ".next-page>a", - "pageElement": ".m-movies>.u-movie", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "核桃影院", - "example": "http://kkkk.plus/vodshow/1-----------.html", - "url": "^https?://kkkk\\.plus/", - "nextLink": ".page-next", - "pageElement": ".module-items", - "replaceElement": "#page", - "css": ".pagetual_pageBar{margin-bottom:20px!important}" - }, - { - "name": "低端影视", - "example": "https://ddys.tv/category/movie/", - "url": "^https?://ddys\\d?\\.[a-z]{2,3}/", - "nextLink": "a.next", - "pageElement": ".post-box-list", - "replaceElement": ".pagination_wrap", - "pageBar": 0 - }, - { - "name": "马克喵", - "example": "https://www.macat.vip/%e5%ad%97%e4%bd%93", - "url": "^https?://www\\.macat\\.vip/", - "include": ".posts-wrapper.row", - "nextLink": ".next", - "pageElement": ".posts-wrapper>div", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "电影狗", - "example": "https://www.dianyinggou.com/yingku/", - "url": "^https?://www\\.dianyinggou\\.com/", - "nextLink": ".mainPage li.selected+li>a", - "pageElement": ".movies,.celebrity,.cntBox.articles", - "replaceElement": ".mainPage ", - "lazyImgSrc": "data-url", - "css": ".movies+.pagetual_pageBar,.celebrity+.pagetual_pageBar{margin-top:-40px!important}" - }, - { - "name": "厂长资源", - "example": "https://czzy01.com/", - "url": "^https?://[^/]+/", - "include": "//title[contains(text(),'厂长资源')]", - "nextLink": ".current+a", - "pageElement": ".bt_img>ul", - "replaceElement": ".pagenavi_txt", - "pageBar": 0 - }, - { - "name": "NO视频", - "example": "https://www.novipnoad.com/movie/", - "url": "^https?://www\\.novipnoad\\.com/", - "nextLink": "a.nextpostslink", - "pageElement": "//div[div[@id and contains(@class,'video-item')] and contains(@class,'col-md-3')] | //div[@id and contains(@class,'blog-item video-item')]", - "replaceElement": ".wp-pagenavi", - "pageBar": 0 - }, - { - "name": "115看劇 - 分類", - "example": "https://115kanju.com/center", - "url": "^https?://115kanju\\.com/", - "nextLink": "li[title='下一页']", - "pageElement": "//div[div/div/a/img[@alt]]", - "replaceElement": ".ant-pagination", - "css": ".pagetual_pageBar{margin-bottom:20px!important}" - }, - { - "name": "飛極速線上", - "example": "http://www.fjisu2.com/acg/japan/", - "url": "^https?://(www\\.|m\\.)?(fjisu|feijisu)\\d+\\.com/\\w+/\\w+/", - "action": 1, - "nextLink": "//a[text()='下一页']", - "pageElement": ".b-listtab,.picTxt>.picTxt", - "replaceElement": ".pages", - "css": ".pagetual_pageBar+div {margin-top: -10px !important;}" - }, - { - "name": "淘豆网 - 閱讀", - "example": "https://m.taodocs.com/p-118668992.html", - "url": "^https?://m\\.taodocs\\.com/", - "autoClick": ".view", - "loadMore": "#moreBtn" - }, - { - "name": "200btsow.vip", - "example": "https://200btsow.vip/", - "url": "^https?://200btsow\\.vip/", - "nextLink": "//a[text()='下一页']", - "pageElement": "//tr[td/a[@title]]", - "replaceElement": "//a[text()='下一页']", - "pageBar": 0 - }, - { - "name": "onehu.xyz", - "example": "https://onehu.xyz/", - "url": "^https?://onehu\\.xyz/", - "nextLink": "span.current+a", - "pageElement": "//div[article]", - "replaceElement": "#pagination", - "pageBar": 0 - }, - { - "name": "www.thingiverse.com", - "example": "https://www.thingiverse.com/", - "url": "^https?://www\\.thingiverse\\.com/", - "action": 1, - "waitElement": [ - "img[alt='Make Card'][loading]" - ], - "nextLink": "//a[div[span[text()='More']]]", - "pageElement": "[class^='SearchResult__searchResultItems']", - "replaceElement": "[class^='Pagination__pagination']", - "css": ".pagetual_pageBar{margin-top:2px!important;margin-bottom:0px!important}" - }, - { - "name": "https://www.orcy.net.cn/", - "example": "https://www.orcy.net.cn/", - "url": "^https?://www\\.orcy\\.net\\.cn/", - "nextLink": ".nextpostslink", - "pageElement": ".Article__content", - "replaceElement": ".wp-pagenavi" - }, - { - "name": "小众软件", - "example": "https://www.appinn.com/abouttime/amp/", - "url": "^https?://www\\.appinn\\.com/", - "nextLink": "a.next,.next>a", - "pageElement": "article,.amp-post-title,.amp-featured-image,.cntn-wrp", - "replaceElement": "#pagination,.pagination,.sp-lt,.s_stk", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "ijtsrd.com", - "example": "https://www.ijtsrd.com/archive/21/volume-3/issue-4", - "url": "^https?://www\\.ijtsrd\\.com/", - "include": "//ul[li[@class='active'] and @class='pagination']/following-sibling::ul[1]//a[@href]", - "nextLinkByJs": "let gx=x=>doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let next=gx(\"//ul[li[@class='active'] and @class='pagination']/following-sibling::ul[1]//a[@href]\");if(next)return location.href.replace(/\\/p-\\d+$/,'')+'/p-'+next.innerText", - "pageElement": ".mGrid", - "replaceElement": "ul.pagination" - }, - { - "name": "scloud.ws", - "url": "^https?://scloud\\.ws/", - "nextLink": ".js-ls-pagination-next", - "pageElement": ".topic-card-wrapper" - }, - { - "name": "Winaero", - "example": "https://winaero.com/category/windows-10/", - "url": "^https?://winaero\\.com/", - "nextLink": "a.next", - "pageElement": "#main>article", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "cahdroid", - "example": "https://cahdroid.com/", - "url": "^https?://cahdroid\\.com/", - "include": ".pagination", - "nextLink": "span.page-numbers.current+a", - "pageElement": ".relat,.post-show", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "4download", - "example": "https://4download.net/software/", - "url": "^https?://4download\\.net/", - "include": ".pagi-nav.clearfix.ignore-select", - "nextLink": "span.pnext>a", - "pageElement": ".short-item", - "replaceElement": ".pagi-nav", - "rate": 2, - "pageBar": 0 - }, - { - "name": "docs.oracle.com", - "example": "https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html", - "url": "^https?://docs\\.oracle\\.com/", - "action": 2, - "nextLink": "//a[text()='Next']", - "pageElement": ".chapter,.index,.appendix" - }, - { - "name": "w3school.com.cn", - "example": "https://www.w3school.com.cn/js/index.asp", - "url": "^https?://www\\.w3school\\.com\\.cn/", - "action": 1, - "nextLinkByJs": "let next=doc.querySelector('li.next>a[href]');if(next&&next.href.indexOf('/index.')===-1)return next.href", - "pageElement": "#maincontent>*:not([class*='prenextnav']):not(#bpn):not(#tpn)", - "replaceElement": "ul.prenext, #navsecond", - "insert": "id('bpn') | //div[contains(@class, 'prenextnav')][last()]", - "insertPos": 1, - "pageBarText": 1, - "initRun": 1, - "autoLoadNum": 2 - }, - { - "name": "菜鸟教程 - 分类页", - "example": "https://www.runoob.com/w3cnote", - "url": "^https?://www\\.runoob\\.com/w3cnote", - "nextLink": "li.next-page>a", - "pageElement": ".archive-list>.archive-list-item", - "replaceElement": "#wp_page_numbers" - }, - { - "name": "菜鸟教程 - 文章页", - "example": "https://www.runoob.com/js/js-tutorial.html", - "url": "^https?://www\\.runoob\\.com/[a-z/-]+\\.html", - "action": 1, - "nextLink": "a[style^='b']+a,a[style^='b']+br+h2+a", - "pageElement": ".article-heading, .article-body", - "waitElement": [ - "a[target='_top'][style^='background']" - ], - "replaceElement": ".sidebar-box" - }, - { - "name": "奔跑中的奶酪", - "example": "http://www.runningcheese.com/", - "url": "^https?://www\\.runningcheese\\.com/", - "nextLink": "a.next", - "pageElement": ".ajaxpost", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "423down", - "example": "https://www.423down.com/", - "url": "^https?://www\\.423down\\.com/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".content>.excerpt, .commentlist>li", - "replaceElement": ".paging, .pagenav", - "pageBar": 0 - }, - { - "name": "大眼仔旭", - "example": "http://www.dayanzai.me/", - "url": "^https?://www\\.dayanzai\\.me/", - "nextLink": ".page>span+a", - "pageElement": "ul.c-news", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "果核剥壳", - "example": "https://www.ghxi.com/category/all/pcsoft", - "url": "^https?://www\\.ghxi\\.com/", - "nextLink": "a.next", - "pageElement": "ul.post-loop>.item", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "億破姐&電腦系統吧", - "example": "http://www.dnxitong.com/soft/", - "url": "^https?://www\\.(ypojie|dnxitong)\\.com/", - "nextLink": ".next-page>a", - "pageElement": "article[class^='excerpt excerpt-']", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "FC Portables", - "example": "https://www.fcportables.com/", - "url": "^https?://www\\.fcportables\\.com/", - "nextLink": "a.next", - "pageElement": "article[class^='post']", - "replaceElement": ".pagination", - "pageInit": "doc.querySelectorAll('a.img-holder').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.src}')`;a.classList.add('b-loaded');a.removeAttribute('data-src')})", - "pageBar": 0 - }, - { - "name": "KaranPc", - "example": "https://karanpc.com/windows/download-managers/", - "url": "^https?://karanpc\\.com/", - "include": "#nav-below", - "nextLink": "a.next", - "pageElement": "article[id^='post']", - "replaceElement": "#nav-below", - "pageBar": 0 - }, - { - "name": "阿榮福利味", - "example": "https://www.azofreeware.com/", - "url": "^https?://www\\.azofreeware\\.com/", - "action": 1, - "nextLink": ".blog-pager-older-link", - "pageElement": ".blog-posts.hfeed", - "replaceElement": "#blog-pager" - }, - { - "name": "Apkpure", - "example": "https://apkpure.com/tw/game", - "url": "^https?://apkpure\\.com/", - "nextLink": "a.loadmore", - "pageElement": "#pagedata", - "replaceElement": ".loadmore", - "pageBar": 0 - }, - { - "name": "軟體部落", - "example": "https://softblog.tw/green-portable", - "url": "^https?://softblog\\.tw/", - "include": ".page-numbers", - "nextLink": "a.next", - "pageElement": "#blog-entries", - "replaceElement": ".oceanwp-pagination.clr", - "pageBar": 0 - }, - { - "name": "Gdaily", - "example": "https://www.gdaily.org/software", - "url": "^https?://www\\.gdaily\\.org/(search|software|app|online|teaching)", - "init": "document.querySelectorAll('.adsbygoogle').forEach(e=>{e.parentNode.parentNode.remove()})", - "nextLink": "li.active+li>a", - "pageElement": ".columns .column", - "replaceElement": ".navigation", - "pageInit": "doc.querySelectorAll('.adsbygoogle').forEach(e=>{e.parentNode.parentNode.remove()})", - "pageBar": 0 - }, - { - "name": "94i.in - 自動簽到", - "example": "https://94i.in/", - "url": "^https?://94i\\.in/", - "autoClick": "#pper_a:not([style='display: none;'])" - }, - { - "name": "Mobile01 - 手機版內文", - "example": "https://m.mobile01.com/topicdetail.php?f=300&t=6660682", - "url": "^https?://m\\.mobile01\\.com/topicdetail", - "nextLink": ".c-pagination--next", - "pageElement": ".u-gapNextV--lg>.u-gapNextV--md", - "replaceElement": ".u-gapNextV--lg.u-tac", - "pageBar": 0, - "rate": 2, - "sleep": 1000 - }, - { - "name": "Mobile01 - 內文", - "example": "https://www.mobile01.com/topicdetail.php?f=300&t=6660682", - "url": "^https?://www\\.mobile01\\.com/topicdetail", - "nextLink": "li.l-pagination__page.is-active+li>a", - "pageElement": "//div[(div/@class='l-articlePage__author') and @class='l-articlePage']", - "replaceElement": "ul.l-pagination", - "pageBar": 0, - "rate": 2, - "sleep": 1000 - }, - { - "name": "Mobile01 - 文章列表", - "example": "https://www.mobile01.com/topiclist.php?f=300", - "url": "^https?://(www|m)\\.mobile01\\.com/(forumtopic|topiclist)", - "nextLink": "li.l-pagination__page.is-active+li>a,.c-pagination--next", - "pageElement": ".l-listTable__tbody,.u-gapNextV--lg>.u-gapNextV--lg>div[class$='u-gapNextV--lg'] .l-articleList", - "replaceElement": ".l-tabulate__action,.l-pagination", - "rate": 3, - "sleep": 2000 - }, - { - "name": "巴哈姆特 - 內文", - "example": "https://forum.gamer.com.tw/C.php?bsn=23805&snA=610529&tnum=14858", - "url": "^https?://forum\\.gamer\\.com.tw/C\\.php", - "nextLink": "a.next", - "pageElement": ".c-section[id*='post']", - "replaceElement": [ - "div.forum-ad_top+section>.c-section__main>#BH-pagebtn", - "section+section>.c-section__main>#BH-pagebtn" - ], - "pageBar": 0 - }, - { - "name": "巴哈姆特 - 文章列表", - "example": "https://forum.gamer.com.tw/B.php?bsn=23805", - "url": "^https?://forum\\.gamer\\.com.tw/B\\.php", - "nextLink": "a.next", - "pageElement": ".b-list>tbody>tr:not(.b-list__head)", - "replaceElement": [ - ".forum-ad_top+.b-pager.pager", - ".b-popular.popular+.b-pager.pager" - ], - "pageAction": "Forum.B.lazyThumbnail();Forum.Common.drawNoImageCanvas()", - "pageBar": 0 - }, - { - "name": "Erowall.com", - "example": "https://erowall.com/", - "url": "^https?://erowall\\.com/", - "nextLink": "//a[contains(text(),'Next')]", - "pageElement": ".wpmini", - "replaceElement": ".paginator", - "pageBar": 0 - }, - { - "name": "ftopx.com", - "example": "https://ftopx.com/", - "url": "^https?://ftopx\\.com/", - "nextLink": "li.active+li>a", - "pageElement": "//div[div[@class='thumbnail']]", - "replaceElement": "#pagination", - "pageBar": 0 - }, - { - "name": "448人体艺术", - "example": "https://488xm.com/666rentiyishu/", - "url": "^https?://488xm\\.com/\\w+/", - "pageElement": "#container>.grid", - "replaceElement": ".pagelist" - }, - { - "name": "gogo人体艺术 - 圖片", - "example": "https://gogortrt.com/gmgqdd/1305/", - "url": "^https?://gogortrt\\.[a-z]{2,3}/[a-z]+/\\d+/", - "init": "let a=document.querySelector('.main>div:not(.atc_new_head)>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".main>div:not(.atc_new_head):not(.keywords) img[alt]", - "replaceElement": ".Mrlsr55,.RlpeZsp,.cgdijkn,.d70rZyL,.i09cWt8,.pages,.pfb45A1,.vd7O8HI,.wpwRCvy,.zrLIsoJ", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "gogo人体艺术", - "example": "https://gogortrt.com/gmgqdd/", - "url": "^https?://gogortrt\\.[a-z]{2,3}/[a-z]+/", - "include": ".index_list", - "nextLink": "//a[text()='下一页' and contains(@href,'html')]", - "pageElement": ".ulPic", - "replaceElement": ".pages", - "pageBar": 0, - "css": "iframe{height:55px!important}" - }, - { - "name": "956体艺术 - 圖片", - "example": "https://956n.com/rbddszysz/1398/", - "url": "^https?://956[a-z]{1,2}\\.[a-z]{2,3}/[a-z]+/\\d+/(\\d+\\.html$)?", - "init": "document.querySelectorAll('.content>a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//a[text()='下一页' and contains(@href,'html')]", - "pageElement": ".content img[alt]", - "replaceElement": ".page", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "956人体艺术", - "example": "https://956n.com/rbddszysz/", - "url": "^https?://956[a-z]{1,2}\\.[a-z]{2,3}/", - "exclude": ".title", - "nextLink": "//a[text()='下一页' and contains(@href,'html')]", - "pageElement": "//ul[li/a/@title]", - "replaceElement": ".page", - "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:0px!important}" - }, - { - "name": "666人体艺术 - 圖片", - "example": "https://6666rt.com/ArtZG/2152/1.html", - "url": "^https?://[6]{3,4}[a-z]{2}\\.[a-z]{2,3}/[a-zA-Z]+/\\d+/\\d+\\.html", - "init": "document.querySelectorAll('.imgbox>a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//a[text()='下一页 >>' and contains(@href,'html')]", - "pageElement": ".imgbox img[alt]", - "replaceElement": ".page,span>h1,.www", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "img[alt]{margin-top:0px!important;margin-bottom:0px!important}.dis{display:none!important}" - }, - { - "name": "666人体艺术", - "example": "https://6666rt.com/ArtZG/", - "url": "^https?://[6]{3,4}[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".tpm02>.fzltp>ul", - "replaceElement": ".pagelist" - }, - { - "name": "64体艺术 - 圖片", - "example": "http://www.64ay.com/xxrtddbkxb/313.html", - "url": "^https?://www\\.64[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "init": "document.querySelectorAll('.tu>a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//a[text()='下一页']", - "pageElement": ".tu img[alt]", - "replaceElement": ".page-show", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "img[alt]{margin-top:0px!important;margin-bottom:0px!important}" - }, - { - "name": "64人体艺术", - "example": "http://www.64ay.com/xxrtddbkxb/", - "url": "^https?://www\\.64[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".tu_list", - "replaceElement": ".page-show", - "css": ".wzlist{height:auto!important}" - }, - { - "name": "98体艺术 - 圖片", - "example": "http://www.98ah.com/GOGOqqddgqrt/415.html", - "url": "^https?://www\\.98[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "init": "let a=document.querySelector('.content-pic>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".content-pic img[alt]", - "replaceElement": ".page-show", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "img[alt]{margin-top:0px!important;margin-bottom:0px!important}" - }, - { - "name": "98人体艺术", - "example": "http://www.98ah.com/gogoltmnysxz/", - "url": "^https?://www\\.98[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".main>dl>dd", - "replaceElement": ".page-show" - }, - { - "name": "54体艺术 - 圖片", - "example": "http://www.54aj.com/gogogmbspqq/432.html", - "url": "^https?://www\\.54[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "init": "let a=document.querySelector('.content>a:not([href*=tags])');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".content img[alt]", - "replaceElement": ".page", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "54人体艺术", - "example": "http://www.54aj.com/gogogmbspqq/", - "url": "^https?://www\\.54[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": "//div[(li/a/img/@alt) and @class='yyy']", - "replaceElement": ".page" - }, - { - "name": "48人体艺术 - 圖片", - "example": "http://www.48gd.com/yyrtdd/448.html", - "url": "^https?://www\\.48[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "init": "let a=document.querySelector('#content>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": "#content img[alt]", - "replaceElement": ".pagelist,h3", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "48人体艺术", - "example": "http://www.48gd.com/qltysz/", - "url": "^https?://www\\.48[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".grid", - "replaceElement": ".pagelist" - }, - { - "name": "42人体艺术 - 圖片", - "example": "http://www.42jd.com/ddrGOGOtysgq/417.html", - "url": "^https?://www\\.42[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "action": 1, - "init": "let a=document.querySelector('.imgbox>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".imgbox img[alt]", - "replaceElement": ".pagelist,.imgbox>h1", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "42人体艺术 - 搜索", - "example": "http://www.42jd.com/plus/search.php?keyword=%E7%BE%8E%E5%A5%B3&searchtype=titlekeyword&channeltype=0&orderby=&kwtype=0&pagesize=24&typeid=0&TotalResult=50&PageNo=1", - "url": "^https?://www\\.[0-9]{2}[a-z]{2}\\.[a-z]{2,3}/plus/search\\.php", - "action": 1, - "nextLink": "//a[text()='下一页']", - "pageElement": "//ul[li/a/@title]", - "replaceElement": ".page-show" - }, - { - "name": "42人体艺术", - "example": "http://www.42jd.com/ddxxltmnrt/", - "url": "^https?://www\\.42[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".fzltp>ul", - "replaceElement": ".pagelist" - }, - { - "name": "36人体艺术 - 圖片", - "example": "www.36ut.com,xixirt.org", - "url": "^https?://(www\\.)?(36[a-z]{2}|xixirt)\\.[a-z]{2,3}/[a-z]+/(\\d+/|\\d+(_\\d+)?\\.html)", - "action": 1, - "init": "let a=document.querySelector('.pp>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".pp img", - "replaceElement": ".page-show", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".picTip{display:none!important}" - }, - { - "name": "36人体艺术", - "example": "www.36ut.com,xixirt.org", - "url": "^https?://(www\\.)?(36[a-z]{2}|xixirt)\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".detail-list", - "replaceElement": ".page-show", - "css": ".pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "23人体艺术 - 圖片", - "example": "http://www.23fe.com/gogoddppys/435.html", - "url": "^https?://www\\.23[a-z]{2}\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "action": 1, - "init": "let a=document.querySelector('#content-p a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": "#content-p img", - "replaceElement": ".gengduo", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "img[alt]{margin-bottom:0px!important}" - }, - { - "name": "23人体艺术", - "example": "http://www.23fe.com/gogoddppys/", - "url": "^https?://www\\.23[a-z]{2}\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".fitCont_2>ul", - "replaceElement": ".gengduo" - }, - { - "name": "AJ人体艺术 - 圖片", - "example": "https://www.02aj.com/yzrt/8674.html", - "url": "^https?://www\\.02aj\\.[a-z]{2,3}/[a-z]+/\\d+(_\\d+)?\\.html", - "action": 1, - "init": "document.querySelectorAll('.content>a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//a[text()='下一页']", - "pageElement": ".content img", - "replaceElement": ".paging", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "img[alt]{margin-bottom:0px!important}" - }, - { - "name": "AJ人体艺术", - "example": "https://www.02aj.com/yzrt/", - "url": "^https?://www\\.\\d+aj\\.[a-z]{2,3}/", - "nextLink": "//a[text()='下一页']", - "pageElement": "//div[(div/div/a/img/@alt) and @class='list']", - "replaceElement": ".page-list", - "css": ".pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "139人体艺术手機版 - 圖片", - "example": "https://m.139tu.com/rtysyz/20200710/7479.html", - "url": "^https?://(m|wap)\\.([0-9]{2,4}[a-z]{1,5}|[a-z]{2,5}[0-9]{1,3}|\\d+aj|\\d+|xixirt|gogortrt|7m11)\\.[a-z]{2,3}/[a-zA-Z]+/(\\d+/(\\d+\\.html$)?|\\d+(_\\d+)?\\.html$|\\d+/\\d+(_\\d+)?\\.html$)", - "init": "document.querySelectorAll('.tal>a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//a[text()='下一页']", - "pageElement": ".tal img[alt]", - "replaceElement": ".page,body>[style='font-size:14px;'],.tip", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "[style='margin:3px 0 0 0;']{display:none!important}img[alt]{opacity: 1!important}" - }, - { - "name": "139人体艺术手機版", - "example": "88rtys.com,https://m.139tu.com/rtysyz/", - "url": "^https?://(m|wap)\\.([0-9]{2,4}[a-z]{1,5}|[a-z]{2,5}[0-9]{1,3}|\\d+aj|\\d+|xixirt|gogortrt|7m11)\\.[a-z]{2,3}/", - "include": ".page-show", - "nextLink": "//a[text()='下一页']", - "pageElement": ".listmain", - "replaceElement": ".page-show", - "lazyImgSrc": "lazysrc", - "css": "[style='margin:3px 0 0 0;']{display:none!important}img[alt]{opacity: 1!important}" - }, - { - "name": "139人体艺术 - 圖片", - "example": "https://www.139tu.com/rtysyz/20210829/8674.html", - "url": "^https?://www\\.139tu\\.[a-z]{2,3}/[a-z]+/\\d+/\\d+(_\\d+)?\\.html", - "action": 1, - "init": "document.querySelectorAll('.img_box>a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//a[text()='下一页']", - "pageElement": ".img_box img", - "replaceElement": "#pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "139人体艺术", - "example": "88rtys.com,https://www.139tu.com/rtysyz/", - "url": "^https?://www\\.139tu\\.[a-z]{2,3}/", - "include": ".list_tags", - "nextLink": "//a[text()='下一页']", - "pageElement": ".list-box", - "replaceElement": "#pages", - "lazyImgSrc": "data-echo", - "css": ".pagetual_pageBar{margin-top:4px!important}" - }, - { - "name": "GOGO人体艺术 - 圖片", - "example": "http://www.gogort2.com/html/yazhou/9988.html", - "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/html/\\w+/\\d+(_\\d+)?\\.html$", - "action": 1, - "init": "document.querySelectorAll('.main>div>a[title]').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "span+a:not(.a1)", - "pageElement": ".avrquwl img,.stmyzbx img,.cgdijkk img,.pwb45A1 img,.wppRCvy img,.zKLIsoJ img,.RlHeZsp img,.d70qZyL img,.vI7O8HI img,.i099Wt8 img,.Mrlhr55 img,.ApxBGcj img,.O5hE1YO img,.bFzVVIb img,.cgKhHJm img,.NpowfkG img,.fFva0bX img,.ARSR2Ka img,.flZ0dv3 img,.oP7WdAw img,.wd8SrVn img,.UsP0xCk img,.yH0NSlb img,.HStHSH0 img,.re8tbBu img", - "replaceElement": "//div[a/@class='a1']", - "css": ".main>iframe{display:none!important}iframe{height:55px!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "GOGO人体艺术 - 標籤", - "example": "http://www.gogort2.net/index.php?m=content&c=tag&a=lists&tag=%B3%AC%B4%F3%B3%DF%B6%C8", - "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/index\\.php\\?m=content&c=tag", - "nextLink": "span+a:not(.a1)", - "pageElement": ".search_list ul", - "replaceElement": ".pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "10" - }, - { - "name": "GOGO人体艺术 - 搜索", - "example": "http://www.gogort2.com/index.php?m=search&c=index&a=init&typeid=&siteid=1&q=%B4%F3%B5%A8", - "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/index\\.php\\?m=search", - "nextLink": "span+a:not(.a1)", - "pageElement": ".search_content", - "replaceElement": ".pages", - "pageBar": 0 - }, - { - "name": "GOGO人体艺术", - "example": "http://www.gogort2.com/html/yazhou/index_2.html", - "url": "^https?://www\\.gogort\\d?\\.[a-z]{2,3}/html/[a-z]+/(index_\\d+\\.html)?", - "include": ".index_list", - "nextLink": "span+a:not(.a1)", - "pageElement": ".ulPic", - "replaceElement": ".pages", - "pageBar": 0, - "css": "iframe{height:55px!important}" - }, - { - "name": "图集岛", - "example": "https://www.tujidao03.com/u/?action=gengxin", - "url": "^https?://www\\.tujidao\\d+\\.com/", - "nextLink": ".num+.next", - "pageElement": "div.hezi>ul>li", - "replaceElement": "#pages" - }, - { - "name": "Kemono - post", - "example": "https://kemono.party/fantia/user/17148/post/1528173", - "url": "^https?://kemono\\.party/fantia/user/\\d+/post/\\d+$", - "nextLink": ".post__nav-item>a.next", - "pageElement": ".post__header,.post__body" - }, - { - "name": "Kemono - user", - "example": "https://kemono.party/fantia/user/17148?o=0", - "url": "^https?://kemono\\.party/fantia/user/\\d+\\?o=", - "nextLink": "a.pagination-button-after-current", - "stopSign": [ - "", - "li.pagination-button-disabled.pagination-button-current+li.pagination-button-disabled.pagination-button-after-current" - ], - "pageElement": ".card-list__items>article", - "pageBar": 0 - }, - { - "name": "Kemono - posts", - "example": "https://kemono.party/posts", - "url": "^https?://kemono\\.party/posts", - "nextLink": "a.pagination-button-after-current", - "stopSign": [ - "", - ".card-list__item--no-results" - ], - "pageElement": ".card-list.card-list--legacy" - }, - { - "name": "全图网 - 圖片 - 直接載入全部圖片", - "example": "http://qq.quantuwang1.com/m/fb9deaa66efefa21.html,http://m.54mn.cc/m/29491/1.html", - "url": "^https?://(qq?|t|w|m)\\.(quantuwang\\d?|54mn)\\.(com|cc)/m/", - "include": [ - ".index_c_img img[alt]", - ".index_c_page" - ], - "pinUrl": true, - "nextLink": "0", - "init": "let ge=e=>document.querySelector(e);let end=ge('.index_c_page>a:last-child').innerText;let m=ge('.index_c_img img').src.match(/(^.+\\/)(\\d+)(\\.[a-z]{3}$)/);let path=m[1];let start=m[2];let ex=m[3];let max=parseInt(end)+parseInt(start)-1;let _img='';for(let i=start;i<=max;i++){let imgSrc=path+i+ex;let p;if(i<10){p='00'+i}else if(i<100){p='0'+i}else{p=i}let alt=ge('.index_c_title').innerText+'_P'+p;_img+=`${alt}`};ge('.index_c_img').innerHTML=_img;", - "css": "body>[style*='z-index'],img[src*='/aaa/'],.index_c_page{display:none!important}body{padding-bottom:0px!important}" - }, - { - "name": "全图网 - 分類", - "example": "http://qq.quantuwang1.com/meinv/taotu/,http://m.54mn.cc/meinv/taotu/", - "url": "^https?://(qq?|t|w|m)\\.(quantuwang\\d?|54mn)\\.(com|cc)/", - "exclude": ".index_c_img img[alt]", - "nextLink": "span+a", - "pageElement": ".index_middle_c", - "replaceElement": ".index_c_page,.list_page", - "css": "body>[style*='z-index'],img[src*='/aaa/']{display:none!important}" - }, - { - "name": "套图之家 - 圖片", - "example": "https://taotuhome.com/19377.html", - "url": "^https?://taotuhome\\.com/", - "nextLink": "span.current+a", - "pageElement": "//p[img[@alt]]", - "replaceElement": ".page-links", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "套图之家 - 分類", - "example": "https://taotuhome.com/category/xgyw/", - "url": "^https?://taotuhome\\.com/", - "nextLink": "span.current+a", - "pageElement": "//main[@id='main'][article/figure[@class='thumbnail']]", - "replaceElement": ".pagenav-clear", - "pageBar": 0 - }, - { - "name": "俊美图 - 圖片", - "example": "https://www.meijuntu.com/beauty/wanghongnenmo_abbyliya_wanmeishencainvshen_mistar_vol_144.html", - "url": "^https?://www\\.meijuntu\\.com/", - "include": ".next_picture", - "init": "document.querySelectorAll('.pictures>a').forEach(e=>{e.remove()})", - "nextLink": ".pages>span +a:not(.a1)", - "pageElement": ".pictures>img[alt]", - "replaceElement": ".pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "看妹图", - "example": "https://kanmeitu1.cc/p/", - "url": "^https?://kanmeitu\\d\\.cc/p/(index_\\d+.html)?", - "pageElement": ".sou-con-list>ul", - "replaceElement": ".pages" - }, - { - "name": "俊美图 - 分類", - "example": "https://www.meijuntu.com/beauty/", - "url": "^https?://www\\.meijuntu\\.com/", - "exclude": ".next_picture", - "nextLink": ".pages>span +a:not(.a1)", - "pageElement": ".pic-list>ul>*", - "replaceElement": ".th_page" - }, - { - "name": "美女图片网 - 圖片", - "example": "https://www.mevtu.com/xingganmm/15275.html", - "url": "^https?://www\\.mevtu\\.com/", - "include": ".page_imges", - "init": "let a=document.querySelector('.imageclick-href');a.outerHTML=a.innerHTML;", - "nextLink": "span.current+a:not(.prev)", - "pageElement": "#image_div img[alt]", - "replaceElement": ".nav-links,.mbx-nav-right", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#content>a{display:none!important}" - }, - { - "name": "美女图片网 - 分類", - "example": "https://www.mevtu.com/", - "url": "^https?://www\\.mevtu\\.com/", - "include": ".nav-links", - "nextLink": "span.current+a", - "pageElement": "#index_ajax_list>*", - "replaceElement": ".nav-links", - "pageBar": 0 - }, - { - "name": "Pic Yailay - 圖片", - "example": "https://pic.yailay.com/articles/UTVKYXJDOFRFVy8zVGlINHUySk1Ldz09.html,https://nungvl.net/gallerys/87379.cg?page=1", - "url": "^https?://(pic\\.yailay\\.com|nungvl\\.net)/(articles|gallerys)", - "pinUrl": true, - "nextLink": "//a[text()='Next >']", - "pageElement": "img[onerror]+br,img[onerror]", - "replaceElement": ".article-header>h1,.entry-title,.dept-ct.show-less,.pagination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".spa-title,.spa-title+div{display:none!important}" - }, - { - "name": "Pic Yailay", - "example": "https://pic.yailay.com/?page=1", - "url": "^https?://(pic\\.yailay\\.com|nungvl\\.net)/", - "nextLink": ".pagination-next", - "pageElement": ".blog", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "imhentai.xxx - 圖片", - "example": "https://imhentai.xxx/view/932112/1/", - "url": "^https?://imhentai\\.xxx/view/\\d+/\\d+/", - "nextLink": ".nav_next", - "pageElement": "#gimg", - "replaceElement": "span.current", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".nav_pagination,#bar,#footer,.prev_nav.page_prev,.next_nav.page_next{display:none!important}" - }, - { - "name": "imhentai.xxx - 圖片清單檢視全部", - "example": "https://imhentai.xxx/gallery/928466/", - "url": "^https?://imhentai\\.xxx/gallery/\\d+/$", - "pinUrl": true, - "nextLink": "0", - "init": "let loop=setInterval(()=>{let b=document.querySelector('#load_all:not([style])');if(b){b.click()}if(!b){clearInterval(loop)}},2000)" - }, - { - "name": "imhentai.xxx", - "example": "https://imhentai.xxx/?page=1", - "url": "^https?://imhentai\\.xxx/(\\?page=\\d+|search)?", - "nextLink": ".page-item.active+li:not(.disabled)>a", - "pageElement": ".thumb", - "replaceElement": ".pagination" - }, - { - "name": "nhentai - 閱讀", - "example": "https://nhentai.net/g/422938/1/", - "url": "^https?://n(ya)?hentai\\.(net|to|xxx|red)/g/\\d+/\\d+/?", - "init": "let a = document.querySelector('#image-container>a');a.outerHTML=a.innerHTML;", - "nextLink": "a.next", - "stopSign": [ - [ - "span.current", - "(\\d+)" - ], - [ - "span.num-pages", - "(\\d+)" - ] - ], - "pageElement": "#content>img,.container>img,#image-container", - "replaceElement": ".reader-pagination,span.current", - "pageInit": "let a = doc.querySelector('#image-container>a');a.outerHTML=a.innerHTML;", - "pageAction": "document.querySelectorAll('#image-container').forEach(e=>{e.outerHTML=e.innerHTML});document.querySelectorAll('img').forEach(e=>{e.src=e.src})", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#content>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "nhentai", - "example": "https://nhentai.net/", - "url": "^https?://(n(ya)?hentai|cathentai)\\.(net|to|xxx|red)/(search|\\?page=|tags|artists|characters|parodies|groups)?", - "nextLink": "a.next,a.current+a,a.last,span.next>a", - "pageElement": "//section[contains(@class,'pagination')]/preceding-sibling::div[1]/div", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar+div{margin-top:0px!important}" - }, - { - "name": "Simply Hentai", - "example": "https://www.simply-hentai.com/", - "url": "^https?://www\\.simply-hentai\\.com/", - "pageElement": "//div[div[article[a[div[@class='image-wrapper']/img[@data-src]]]]]", - "insert": "nav.pagination", - "insertPos": 1, - "pageInit": "doc.querySelectorAll('.image-loader').forEach(e=>{e.remove()});", - "css": ".text-center{display:none!important}" - }, - { - "name": "西图阁", - "example": "https://www.xtg123.cc/xrall", - "url": "^https?://www\\.xtg123\\.cc/([a-z]+|\\?s=)", - "nextLink": "a.next", - "pageElement": ".posts-wrapper>.row", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "妹妹图", - "example": "https://mm.tvv.tw/", - "url": "^https?://mm\\.tvv\\.tw/", - "action": 1, - "nextLink": "a.next", - "pageElement": "//div[div/div[@class='blog-image']]", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "留园酷18", - "example": "https://www.cool18.com/bbs/index.php?app=forum&act=cachepage&cp=tree1", - "url": "^https?://www\\.cool18\\.com/bbs", - "nextLink": "//a[text()='下一页']", - "pageElement": "#d_list", - "replaceElement": "#d_list_page,#d_list_foot" - }, - { - "name": "24tupian - 圖片原圖", - "example": "https://www.24tupian.org/2022/10-12/tuimo52612_1.html", - "url": "^https?://www\\.24tupian\\.org/\\d+/[0-9-]+/\\w+\\.html", - "init": "let a=document.querySelector('#imgshow>a');a.outerHTML=a.innerHTML;", - "nextLink": "//div[@class='bb']//li[img/@id='bimg']/following-sibling::li[1]/a", - "pageElement": "#imgshow img", - "replaceElement": ".bb ul,.hddiv+span", - "css": "#imgshow img {max-width: 100%;}", - "pageBar": 0, - "rate": 3 - }, - { - "name": "24tupian - 圖片清單", - "example": "https://www.24tupian.org/hd2/tuimo52612.html", - "url": "^https?://www\\.24tupian\\.org/hd\\d+/\\w+\\.html", - "nextLink": "a.on+a[href$=html]", - "pageElement": ".gtps.fl>ul", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "24tupian", - "example": "https://www.24tupian.org/", - "url": "^https?://www\\.24tupian\\.org/(meinv|nvyou|tuimo|gaoqing|model|class|Serch)", - "nextLink": "a.on+a[href$='html']", - "pageElement": ".lbleft>.lbl,.paihan.fl>ul,.model,.big.fl>ul,.gtps.fl>ul", - "replaceElement": ".page" - }, - { - "name": "新老友图社 - 看圖", - "example": "https://m.xtushe.com/photo/10377.html", - "url": "^https?://m\\.xtushe\\.com/photo/\\w+\\.html", - "nextLink": "li.next>a[title='下一张']", - "pageElement": "#content-photo>img", - "replaceElement": "#content-title,.pagebreak", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "新老友图社", - "example": "https://m.xtushe.com/catalog/xinggan.html", - "url": "^https?://m\\.xtushe\\.com/", - "nextLink": "li.next>a[title='下一页']", - "pageElement": "#content-list", - "replaceElement": ".pagebreak", - "pageBar": 0 - }, - { - "name": "爱看图吧 - 看圖", - "example": "https://www.9iktb.com/gallery/46215", - "url": "^https?://www\\.9iktb\\.com/gallery/", - "nextLink": "li.active+li>a", - "pageElement": ".gallery-detail-img", - "replaceElement": ".pagination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "爱看图吧", - "example": "https://www.9iktb.com/galleryList/", - "url": "^https?://www\\.9iktb\\.com/(galleryList|search)", - "nextLink": "a[aria-label='Next']", - "pageElement": ".book-list>*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "美女目录网 - 圖片列表模式載入原圖", - "example": "https://www.girldir.com/photos/aozhongmaqin_list/", - "url": "^https?://[^/]+/photos/", - "include": [ - "//nav[@id='topNavBar']/a[@class='navbar-brand']/img[@src='/assets/logo.png']", - ".page-item.active", - "nav.pagination" - ], - "action": 1, - "init": "document.querySelectorAll('source').forEach(e=>{e.remove()});document.querySelectorAll('picture>img').forEach(img=>{img.src=img.src.match(/[^/]+\\/\\/[^/]+\\/[^.]+\\.[a-z]{3}/)[0]})", - "nextLink": "li.page-item.active+li>a", - "pageElement": ".photo-list.row", - "replaceElement": "nav.pagination", - "pageInit": "doc.querySelectorAll('source').forEach(e=>{e.remove()});doc.querySelectorAll('picture>img').forEach(img=>{img.src=img.src.match(/[^/]+\\/\\/[^/]+\\/[^.]+\\.[a-z]{3}/)[0]})" - }, - { - "name": "美女目录网 - 圖片", - "example": "http://www.girldir.com/photos/lichengmin_1156859/", - "url": "^https?://[^/]+/photos/", - "include": "//title[contains(text(), '美女目录网')]", - "action": 1, - "init": "function ge(e){return document.querySelector(e)}let a = ge('.photo-box>a');a.outerHTML=a.innerHTML;ge('source').remove()", - "nextLink": "//a[text()='下一张>']", - "pageElement": ".photo-box picture img[alt]", - "replaceElement": ".tools row", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "美女目录网 - 分類停止自動匹配", - "example": "http://www.girldir.com/star/v_siwa/", - "url": "^https?://[^/]+/star/", - "include": "//title[contains(text(), '美女目录网')]", - "nextLink": "0" - }, - { - "name": "3G 壁纸 - 圖片", - "example": "https://www.3gbizhi.com/meinv/mn1869.html", - "url": "^https?://www\\.3gbizhi\\.com/meinv/\\w+\\.html", - "init": "function ge(e){return document.querySelector(e)}ge('#showimg').appendChild(ge('#showpicnow'));document.querySelectorAll('#showimg>a').forEach(e=>{e.remove()})", - "nextLinkByUrl": [ - "/([^_]+)(_(\\d+))?\\.html$", - "/$1_{$3+1}.html" - ], - "stopSign": [ - [ - ".showtitle>h2", - "(\\d+)" - ], - [ - ".showtitle>h2", - "\\/(\\d+)" - ] - ], - "pageElement": "#showpicnow", - "replaceElement": "h2,.showpicboxw", - "insert": "#showimg", - "insertPos": 2, - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".morew,#showimg>a{display:none!important}" - }, - { - "name": "3G 壁纸", - "example": "https://www.3gbizhi.com/meinv/", - "url": "^https?://www\\.3gbizhi\\.com/", - "init": "document.querySelectorAll('img[alt][lazysrc]').forEach(img=>{img.src=img.getAttribute('lazysrc');img.removeAttribute('lazysrc');img.setAttribute('srcset',img.getAttribute('lazysrc2x'));img.removeAttribute('lazysrc2x');img.style='width: 100%; display: inline;'})", - "nextLink": "#pageNum span+a", - "pageElement": "//ul[@class='cl'][li/a[@class='imgw']/div[@class='img']/img]", - "replaceElement": "#pageNum", - "pageInit": "doc.querySelectorAll('img[alt][lazysrc]').forEach(img=>{img.src=img.getAttribute('lazysrc');img.removeAttribute('lazysrc');img.setAttribute('srcset',img.getAttribute('lazysrc2x'));img.removeAttribute('lazysrc2x');img.style='width: 100%; display: inline;'})", - "pageAction": "document.querySelectorAll('img').forEach(img=>{img.src=img.src})", - "css": ".pagetual_pageBar{margin-top:-8px!important}" - }, - { - "name": "nvsheng - 圖片", - "example": "www.nvsheng.cc,m.nvsheng.cc", - "url": "^https?://(www|m)\\.nvsheng\\.cc/.+\\.html", - "nextLink": ".now-page+a", - "pageElement": ".info-imtg-box>img", - "replaceElement": ".pagebar", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".img-next{display:none!important}" - }, - { - "name": "nvsheng", - "example": "www.nvsheng.cc,m.nvsheng.cc", - "url": "^https?://(www|m)\\.nvsheng\\.cc/(meizi|weibo|mx|cos|search)/", - "nextLink": "a[title='›']", - "pageElement": ".main.wide>.row>*", - "replaceElement": ".pagebar", - "pageBar": 0 - }, - { - "name": "遛无写真 - 看圖", - "example": "https://www.6evu.com/30131.html", - "url": "^https?://www\\.6evu\\.com/\\d+\\.html", - "nextLink": ".pagelist>span+a", - "init": "function gae(e){return document.querySelectorAll(e)}let _img='';gae('#post_content img').forEach(e=>{_img+=e.outerHTML});gae('#post_content')[0].innerHTML=_img;", - "pageElement": "#post_content img", - "replaceElement": ".pagelist", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "遛无写真", - "example": "https://www.6evu.com/jgmntp", - "url": "^https?://www\\.6evu\\.com/", - "include": ".pagination", - "nextLink": "a.next", - "pageElement": "#post_container", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-8px!important}" - }, - { - "name": "爱美女 - 看圖", - "example": "www.2meinv.com,wap.2meinv.com", - "url": "^https?://(www|wap)\\.2meinv\\.com/article", - "init": "function ge(e){return document.querySelector(e)}let a=ge('.hh+.pp > a');let a2=ge('.clearfix.arcmain a');if(a){a.outerHTML=a.innerHTML}else{a2.outerHTML=a2.innerHTML}", - "nextLink": "//div[@class='page-show' or contains(@class,'article-page')]/a[contains(@href,'html') and text()='下一页']", - "pageElement": ".hh+.pp img[alt],.clearfix.arcmain img", - "replaceElement": ".page-show,h1>span,.article-page", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".pgg1+.hh{display:none!important}" - }, - { - "name": "爱美女", - "example": "www.2meinv.com,wap.2meinv.com", - "url": "^https?://(www|wap)\\.2meinv\\.com/(search|tags|index)?", - "exclude": ".title,h1>span", - "nextLink": "//a[contains(@href,'html') and text()='下一页']", - "pageElement": "ul.detail-list, .arcmain li, #listcon>ul", - "replaceElement": ".page-show, .article-page" - }, - { - "name": "娱乐吧 - 圖片", - "example": "www.yuleba.org,m.yuleba.org", - "url": "^https?://(www|m)\\.yuleba\\.org/a/", - "nextLink": "//div[@class='paging']/a[text()='下一页']", - "pageElement": ".picture>p, .a_img>p", - "replaceElement": ".paging", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "娱乐吧", - "example": "www.yuleba.org,m.yuleba.org", - "url": "^https?://(www|m)\\.yuleba\\.org/b/", - "nextLink": "//div[@class='paging']/a[text()='下一页']", - "pageElement": ".b_txt,.b_img:not(:nth-child(7))>ul", - "replaceElement": ".paging" - }, - { - "name": "新闻吧 - xinwenba.net", - "example": "www.xinwenba.net,m.xinwenba.net", - "url": "^https?://(www|m)\\.xinwenba\\.net/plus/view", - "nextLink": "//a[text()='下一页']", - "pageElement": ".picture>p, .view_img>p", - "replaceElement": ".paging", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "新闻吧 - xinwenba.net", - "example": "www.xinwenba.net,m.xinwenba.net", - "url": "^https?://(www|m)\\.xinwenba\\.net/plus/list", - "nextLink": "//a[text()='下一页']", - "pageElement": ".list_image>ul>li,.list_img", - "replaceElement": ".paging" - }, - { - "name": "凸凹吧/撸女吧/女优吧/撸哥吧/欲女吧 - 圖片", - "example": "www.tuao.one,www.63mm.cc,www.97mm.cc,www.luge8.co,luge8.co", - "url": "^https?://(www\\.)?(tuao8?|tumm|\\d+mm|luge8?)\\.[a-z]{2,3}/(post|web)/", - "init": "let a=document.querySelector('img[title][original]').parentNode;a.outerHTML=a.innerHTML;", - "nextLink": "li.next-page>a", - "pageElement": ".entry img, .article-content img", - "replaceElement": "#dm-fy", - "css": "img[src$='.gif'],body>[style*='float']{display: none !important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "凸凹吧/撸女吧/女优吧/撸哥吧/欲女吧 - 手機版分類", - "example": "www.tuao.one,www.63mm.cc,www.97mm.cc,www.luge8.co,luge8.co", - "url": "^https?://(www\\.)?(tuao\\d?|tumm|\\d+mm|luge8?)\\.[a-z]{2,3}/", - "include": ".pagination", - "nextLink": ".next-page>a", - "pageElement": ".excerpt", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "凸凹吧/撸女吧/女优吧/撸哥吧/欲女吧 - 分類", - "example": "www.tuao.one,www.63mm.cc,www.97mm.cc,www.luge8.co,luge8.co", - "url": "^https?://(www\\.)?(tuao\\d?|tumm|\\d+mm|luge8?)\\.[a-z]{2,3}/", - "include": ".pagenavi", - "nextLink": ".now-page+a", - "pageElement": "main.main>article", - "replaceElement": ".pagenavi", - "css": "img[src$='.gif'],body>[style*='float']{display: none !important;}" - }, - { - "name": "美图录 - 看圖", - "example": "https://meitulu.me/item/3242.html", - "url": "^https?://meitulu\\.me/item/\\d+\\.html", - "nextLink": "//a[text()='下一页']", - "pageElement": ".container-inner-fix-m>img", - "replaceElement": ".pagination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "美图录 - 分類", - "example": "https://meitulu.me/t/nvshen/", - "url": "^https?://meitulu\\.me/(t|xihuan|rihan|gangtai|guochan|search)", - "nextLink": "//a[text()='下一页']", - "pageElement": ".row.my-gutters-b", - "replaceElement": ".pagination" - }, - { - "name": "胴体的诱惑", - "example": "https://dongti.blog.2nt.com/", - "url": "^https?://dongti\\.blog\\.2nt\\.com/", - "action": 1, - "nextLink": "//li[span[@class='current']]/following-sibling::li[1]/a", - "pageElement": "#grid-container>*", - "replaceElement": ".pager" - }, - { - "name": "胴体的秘密 - 看圖", - "example": "https://dongti2022.com/751999.html", - "url": "^https?://dongti[^/]+/", - "include": [ - ".j-wpcom-lightbox:not([href*='loding'])", - ".entry-content" - ], - "pinUrl": true, - "init": "setTimeout(()=>{document.querySelectorAll(\"a.j-wpcom-lightbox:not([href*='loding'])\").forEach(e=>{e.parentNode.outerHTML=``})},1000)" - }, - { - "name": "胴体的秘密 - 標籤", - "example": "https://dongti2022.com/tag/%e6%a1%9c%e4%ba%95%e5%ae%81%e5%ae%81", - "url": "^https?://dongti[^/]+/tag/", - "nextLink": "li.active+li>a", - "pageElement": ".post-loop", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "胴体的秘密", - "example": "https://dongtidemimi.org/", - "url": "^https?://dongti[^/]+/(category|\\?s=)", - "nextLink": "a.next", - "pageElement": "ul.post-loop.post-loop-image.cols-4,.post-loop-default", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "MEITU131 - 手機版看圖", - "example": "https://m.meitu131.com/meinv/8140/", - "url": "^https?://m\\.meitu131\\.com/", - "include": ".uk-article", - "init": "let a=document.querySelector('.uk-article-bd a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".uk-article-bd img[alt]", - "replaceElement": ".uk-page", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "MEITU131 手機版", - "example": "https://m.meitu131.com/meinv/", - "url": "^https?://m\\.meitu131\\.com/", - "exclude": ".uk-article", - "nextLink": "//a[text()='下一页']", - "pageElement": ".uk-container li", - "replaceElement": ".uk-page", - "pageBar": 0 - }, - { - "name": "MEITU131 - 看圖", - "example": "https://www.meitu131.net/meinv/7672/", - "url": "^https?://www\\.meitu131\\.net/meinv/\\d+", - "init": "document.querySelectorAll('p>a').forEach(e=>{e.outerHTML=e.innerHTML})", - "nextLink": "//a[text()='下一页']", - "pageElement": ".work-content img", - "replaceElement": "#pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "MEITU131", - "example": "https://www.meitu131.net/rank/dalu/", - "url": "^https?://www\\.meitu131\\.net/(e/search|rank|meinv|shouji|sucai|nvshen|hot)/([a-z]+)?", - "exclude": "h1", - "nextLink": "//a[text()='下一页']", - "pageElement": ".details>ul,.cover-list", - "replaceElement": "#pages", - "lazyImgSrc": "data-echo", - "css": ".cover-list+.pagetual_pageBar{margin-top:0px!important}.pagetual_pageBar+.cover-list{margin-top:-4px!important}" - }, - { - "name": "亿图全景图库 - 手機版看圖", - "example": "https://m.yeitu.com/meinv/xinggan/20221205_32251.html", - "url": "^https?://m\\.yeitu\\.com/", - "include": ".uk-article", - "init": "let a=document.querySelector('.gallery-item>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".gallery-item img[alt]", - "replaceElement": ".yt-pages,.imageset-current", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "亿图全景图库手機版", - "example": "https://m.yeitu.com/meinv/xinggan/", - "url": "^https?://m.yeitu.com/", - "include": ".uk-pagination", - "nextLink": "//a[@class='a1' and text()='下一页']", - "pageElement": ".uk-container>ul li", - "replaceElement": ".uk-pagination", - "pageBar": 0 - }, - { - "name": "亿图全景图库 - 看圖", - "example": "https://www.yeitu.com/meinv/xinggan/20220725_31887.html", - "url": "^https?://www\\.yeitu\\.com/", - "include": ".img_content", - "init": "let a=document.querySelector('.img_box>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[@class='a1' and text()='下一页']", - "pageElement": ".img_box img[alt]", - "replaceElement": "#pages,.imageset-current", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "亿图全景图库", - "example": "https://www.yeitu.com/meinv/xinggan/", - "url": "^https?://www\\.yeitu\\.com/", - "include": "#pages", - "nextLink": "//a[@class='a1' and text()='下一页']", - "pageElement": ".list-box-p", - "replaceElement": "#pages", - "lazyImgSrc": "data-echo", - "css": ".pagetual_pageBar{margin-top:-8px!important}" - }, - { - "name": "Make Girls", - "example": "https://asdcosplay.com/category/collections/djawa/", - "url": "^https?://asdcosplay\\.com/(\\?s=|category)?", - "nextLink": "a.next", - "pageElement": "article.post", - "replaceElement": ".nav-links", - "pageBar": 0 - }, - { - "name": "Asian Girls", - "example": "https://allasiangirls.net/category/free-content/", - "url": "^https?://allasiangirls\\.net/(category|\\?s=)", - "nextLink": "a.next", - "pageElement": "//div[div/@class='col post-item']", - "replaceElement": ".page-numbers", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": 4 - }, - { - "name": "Yellow Fever", - "example": "https://yellowfever18.com/chinese/", - "url": "^https?://yellowfever18\\.com/(tag|chinese|korean|japanese|\\?s=)", - "nextLink": "a.next", - "pageElement": ".jeg_postblock_15 .jeg_post", - "replaceElement": ".jeg_block_navigation", - "rate": 3, - "pageBar": 0 - }, - { - "name": "ASD ASFD CN", - "example": "https://asdasfd.net/", - "url": "^https?://asdasfd\\.net/(category|\\?s=)", - "nextLink": "//a[text()='Older posts']", - "pageElement": "article.post", - "replaceElement": ".navigation", - "pageBar": 0 - }, - { - "name": "NudeBird", - "example": "https://nudebird.biz/", - "url": "^https?://nudebird\\.biz/(tag|category|\\?s=)?", - "nextLink": "li.current+li>a", - "pageElement": ".excerpt", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "NUDECOSPLAY - 圖片", - "example": "https://nudecosplaygirls.com/%e4%b9%a0%e5%91%86%e5%91%86-%e5%88%bb%e6%99%b4/", - "url": "^https?://nudecosplaygirls\\.com/", - "include": [ - ".entry-content img[decoding='async']:not(.lazy)" - ], - "pinUrl": true, - "init": "let imgs=document.querySelectorAll(\".entry-content img[decoding='async']\");let _img='';for(let i=0;i`};document.querySelector('.entry-content').innerHTML=_img;", - "css": ".entry-content>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#secondary{display:none!important}h1.g1-mega{text-align:center}" - }, - { - "name": "NUDECOSPLAY - 圖片", - "example": "https://nudecosplaygirls.com/haneame-summer/", - "url": "^https?://nudecosplaygirls\\.com/", - "include": [ - ".entry-content", - "img[decoding='async'].lazy" - ], - "pinUrl": true, - "init": "let imgs=document.querySelectorAll('img.lazy');let _img='';for(let i=0;i`};document.querySelector('.entry-content').innerHTML=_img;", - "css": ".entry-content>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#secondary{display:none!important}h1.g1-mega{text-align:center}" - }, - { - "name": "NUDECOSPLAY", - "example": "https://nudecosplaygirls.com/", - "url": "^https?://nudecosplaygirls\\.com/(category)?", - "nextLink": "a.next", - "pageElement": ".g1-collection-viewport li", - "replaceElement": ".g1-pagination", - "pageBar": 0 - }, - { - "name": "Nlegs - 預覽圖清單", - "example": "https://www.nlegs.com/girls/2022/10/01/28219.html", - "url": "^https?://www\\.nlegs\\.com/girls/[^.]+\\.html", - "nextLink": "li.active+li>a", - "pageElement": "//div[a/div[contains(@style,'thumb') and span]]", - "replaceElement": "#dnav", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".col-md-12.col-xs-12>img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "Nlegs", - "example": "https://www.nlegs.com/", - "url": "^https?://www\\.nlegs\\.com/", - "nextLink": "li.active+li>a", - "pageElement": "//div[div/a/div/@class='img-div']", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:10px!important}.pagetual_pageBar+div{margin-top:0px!important}" - }, - { - "name": "Mitaku - 看圖", - "enable": 0, - "example": "https://mitaku.net/ero-cosplay/byoru-riamu-yumemi-nekomini/", - "url": "^https?://mitaku\\.net/", - "include": ".msacwl-slider-wrap", - "pinUrl": true - }, - { - "name": "Mitaku", - "example": "https://mitaku.net/", - "url": "^https?://mitaku\\.net/", - "nextLink": ".current+a", - "pageElement": "article.post", - "replaceElement": ".wp-pagenavi", - "rate": 3, - "pageBar": 0 - }, - { - "name": "idol.gravureprincess.date", - "example": "http://idol.gravureprincess.date/", - "url": "^https?://idol\\.gravureprincess\\.date/", - "pinUrl": true, - "init": "document.querySelectorAll('.date-outer').forEach(e=>{e.removeAttribute('style')})", - "nextLink": ".blog-pager-older-link", - "pageElement": ".blog-posts>.date-outer", - "replaceElement": "#blog-pager", - "pageInit": "doc.querySelectorAll('.date-outer').forEach(e=>{e.removeAttribute('style')})" - }, - { - "name": "NongMo.Zone", - "example": "http://www.ilovexs.com/", - "url": "^https?://www\\.ilovexs\\.com/(category)?", - "nextLink": ".nav-next>a", - "pageElement": "//div[article]", - "replaceElement": ".nav-links", - "rate": 3, - "pageBar": 0, - "initRun": 1, - "autoLoadNum": 10 - }, - { - "name": "CoserBOX - 分類", - "example": "https://coserbox.org/rootcategory/62b6e84d412f63180e09d1a0,https://picacg.org/rootcategory/62fd110a5a40959e2fed9352", - "url": "^https?://[^/]+/(rootcategory|category|search)", - "include": "//img[contains(@alt,'CoserBOX')]", - "nextLink": "li.active+li>a", - "pageElement": "//div[a[@class='category']] | //div[div[@class='card']]", - "replaceElement": ".catalog__paginator-wrap", - "pageBar": 0 - }, - { - "name": "CoserBOX - 首頁", - "enable": 0, - "example": "https://acg.coserbox.net/,https://coserbox.org/,https://picacg.org/,https://loli.pub/", - "url": "^https?://[^/]+/$", - "include": "//img[contains(@alt,'CoserBOX')]", - "loadMore": ".load-more:not(:disabled)" - }, - { - "name": "Cosplaytele - 分類", - "example": "https://cosplaytele.com/", - "url": "^https?://cosplaytele\\.com/", - "action": 1, - "nextLink": "a.next", - "pageElement": "#content .row .row", - "replaceElement": ".page-numbers", - "pageBar": 0 - }, - { - "name": "4KHD - 圖片", - "example": "https://www.4khd.com/2023/01/15/puremedia-vol210-seer.html", - "url": "^https?://www\\.4khd\\.com/[^.]+\\.html", - "action": 1, - "init": "document.querySelectorAll('a[data-fancybox]').forEach(e=>{e.outerHTML=``})", - "nextLink": "li.current+li>a", - "pageElement": ".wp-block-image", - "pageInit": "doc.querySelectorAll('a[data-fancybox]').forEach(e=>{e.outerHTML=``})", - "replaceElement": ".page-link-box", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "4KHD - 分類", - "example": "https://www.4khd.com/", - "url": "^https?://www\\.4khd\\.com/", - "nextLink": "span.current+a", - "pageElement": ".wp-block-post-template.is-flex-container", - "replaceElement": "nav[aria-label='Pagination']", - "pageBar": 0 - }, - { - "name": "4KUP - 分類", - "example": "https://www.4kup.net/", - "url": "^https?://www\\.4kup\\.net/", - "include": "#pagination", - "pinUrl": true, - "pageElement": "article.item-post", - "pageBar": 0, - "css": ".lazyload{opacity:1!important}" - }, - { - "name": "Goddess247", - "example": "https://goddess247.com/", - "url": "^https?://goddess247\\.com/", - "nextLink": "a.next", - "pageElement": "article[class*=post]", - "replaceElement": "nav.elementor-pagination", - "css": ".pagetual_pageBar{margin-top:10px!important}.pagetual_pageBar+div{margin-top:-6px!important}" - }, - { - "name": "Popular JAV", - "example": "https://javme.net/", - "url": "^https?://javme\\.net/", - "nextLink": ".pagination-next", - "pageElement": ".column.is-one-fifth-desktop", - "replaceElement": "nav.pagination", - "pageBar": 0 - }, - { - "name": "Buon Dua - 看圖", - "example": "https://buondua.com/saint-photolife-%E2%80%93-zzyuri-%EC%AE%B8%EB%A6%AC-blueming-part-2-57-photos-27769", - "url": "^https?://buondua\\.com/", - "init": "document.querySelectorAll('.article-fulltext>*:not(p)').forEach(e=>{e.remove()});", - "nextLink": "//span[a/@class='pagination-link is-current']/following-sibling::span/a", - "pageElement": ".article-fulltext p", - "replaceElement": "nav.pagination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".content p:not(:last-child){margin-bottom:0!important}" - }, - { - "name": "Buon Dua - 分類", - "example": "https://buondua.com/", - "url": "^https?://buondua\\.com/", - "nextLink": ".pagination-next", - "pageElement": ".blog.columns", - "replaceElement": "nav.pagination", - "initRun": 1, - "autoLoadNum": 1, - "rate": 3, - "pageBar": 0 - }, - { - "name": "BAOBUA.COM - 看圖", - "example": "https://www.baobua.com/post/d00yYmh4WFNoZERNdFd5Q1QwNHhrNmZPZlMzUUI5UUo3OFVDRm5jWG11OFZ6aDJaeXpHdGh0Sm5sU0s4WjF5aXVIR0pLTTJvb0h3SDdlM1NSR0JxSHc9PQ==", - "url": "^https?://www\\.baobua\\.com/post/", - "nextLink": ".current+a,.current+.dots+a", - "pageElement": ".entry-content.read-details>.wp-block-image", - "replaceElement": "nav.pagination,.trail-items", - "pageAction": "document.querySelectorAll('.entry-content.read-details>*:not(.wp-block-image)').forEach(e=>{e.remove()});", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".wp-block-image{margin-bottom:0!important}" - }, - { - "name": "BAOBUA.COM - 搜索", - "example": "https://www.baobua.com/?cat=Tm1ydGlaZ1A2YWM3a3BvYWh6L3dIdz09", - "url": "^https?://www\\.baobua\\.com/\\?cat=", - "action": 1, - "nextLinkByUrl": [ - "(\\?cat=[^&]+)(\\&page=(\\d+))?$", - "$1&page={($3.0||1)+1}", - ".next.page-numbers" - ], - "pageElement": "main#main article", - "replaceElement": "nav.pagination", - "rate": 3, - "wait": 500, - "pageBar": 0 - }, - { - "name": "BAOBUA.COM - 影片分類", - "example": "https://www.baobua.com/video/index.html", - "url": "^https?://www\\.baobua\\.com/video/index\\.html", - "action": 1, - "wait": 500, - "nextLinkByUrl": [ - "html(\\?&page=(\\d+))?$", - "html?&page={($2.0||1)+1}", - ".next.page-numbers" - ], - "pageElement": "main#main article", - "replaceElement": "nav.pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "BAOBUA.COM - 圖片分類", - "example": "https://www.baobua.com/?page=1", - "url": "^https?://www\\.baobua\\.com/\\?page=", - "action": 1, - "nextLinkByUrl": [ - "page=(\\d+)$", - "page={$1+1}", - ".next.page-numbers" - ], - "pageElement": "main#main article", - "replaceElement": "nav.pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "BaoBua.Com - 看圖", - "example": "https://blog.baobua.com/mlem/6350798069264574102~rogle-song-hana-%EC%86%A1%ED%95%98%EB%82%98-leggings", - "url": "^https?://(blog|fb)\\.baobua\\.com/", - "include": "img[data-original]", - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);ge('#fix_scale').setAttribute('id','fix');let fimgs=document.querySelectorAll('.article-content img[data-original]');let _img='';for(let i=0;i`};ge('.article-body').innerHTML=_img;" - }, - { - "name": "BaoBua.Com - 搜索", - "example": "https://blog.baobua.com/mlem?cat=korean", - "url": "^https?://blog\\.baobua\\.com/mlem\\?cat=", - "include": ".pagination-custom", - "nextLinkByUrl": [ - "(cat=[^&]+)(&page=(\\d+))?$", - "$1&page={$3+1}", - "span.nextPage" - ], - "pageElement": ".large--one-third", - "replaceElement": ".pagination-custom", - "rate": 3, - "initRun": 1, - "autoLoadNum": 4, - "pageBar": 0 - }, - { - "name": "BaoBua.Com - 分類", - "example": "https://blog.baobua.com/mlem", - "url": "^https?://blog\\.baobua\\.com/mlem(\\?&page=(\\d+))?$", - "include": ".pagination-custom", - "nextLinkByUrl": [ - "mlem(\\?&page=(\\d+))?$", - "mlem?&page={$2+1}", - "span.nextPage" - ], - "pageElement": ".large--one-third", - "replaceElement": ".pagination-custom", - "rate": 3, - "initRun": 1, - "autoLoadNum": 4, - "pageBar": 0 - }, - { - "name": "HOTGIRLchina - 看圖", - "example": "https://hotgirlchina.com/xiuren-no-5261-zhu-ke-er-%e6%9c%b1%e5%8f%af%e5%84%bfflora-115-photos/", - "url": "^https?://hotgirlchina\\.com/.+photos/", - "nextLink": ".nextpostslink", - "pageElement": ".entry-inner>p", - "replaceElement": "nav.pagination", - "css": ".entry p{margin-bottom:0!important}[id^='boxzilla']{display:none!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "HOTGIRLchina - 搜索 - 修正頁碼錯誤", - "example": "https://hotgirlchina.com/?s=XIUREN", - "url": "^https?://hotgirlchina\\.com/(page/(\\d+)/)?\\?s=", - "init": "setTimeout(()=>{document.querySelectorAll('.wp-pagenavi a').forEach(a=>{a.href=a.href.replace(/\\/$/,'')})},1000)", - "nextLinkByUrl": [ - "(page/(\\d+)/)?(\\?s=\\w+)$", - "page/{($2.0||1)+1}/$3", - ".nextpostslink" - ], - "pageElement": "#grid-wrapper article", - "pageAction": "setTimeout(()=>{document.querySelectorAll('.wp-pagenavi a').forEach(a=>{a.href=a.href.replace(/\\/$/,'')})},1000)", - "replaceElement": "nav.pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "HOTGIRLchina - 分類", - "example": "https://hotgirlchina.com/tag/xiuren/", - "url": "^https?://hotgirlchina\\.com/tag/", - "nextLink": ".nextpostslink", - "pageElement": "#grid-wrapper article", - "replaceElement": "nav.pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "BeautyLeg - 圖片", - "example": "http://www.beautyleg6.com/xingganmeinv/201406/133.html", - "url": "^https?://www.beautyleg\\d+\\.com/.+\\.html", - "init": "function gae(e){return document.querySelectorAll(e)}let imgs=gae('.contents img');let _img='';for(let i=0;ia", - "pageElement": "#videos", - "replaceElement": ".pagination" - }, - { - "name": "MM131美女图片手機版 - 看圖", - "example": "https://m.mmm131.com/xinggan/5761.html", - "url": "^https?://m\\.mmm131\\.com/.+\\html$", - "init": "let a=document.querySelector('.post-content>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一张']", - "pageElement": ".post-content img", - "replaceElement": ".paging", - "css": ".bannert_ios,.bannerb_ios,.tips{display:none!important}.single-post-content{line-height: 0!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "MM131美女图片手機版 - 分類", - "example": "https://m.mmm131.com/xinggan/", - "url": "^https?://m\\.mmm131\\.com/", - "include": "#listm", - "init": "document.querySelectorAll('.post.nop').forEach(e=>{e.classList.remove('nop')})", - "nextLink": "//a[text()='下一页' and contains(@href,'html')]", - "pageElement": ".post", - "replaceElement": "#webpage", - "lazyImgSrc": "data-img", - "pageAction": "document.querySelectorAll('.post.nop').forEach(e=>{e.classList.remove('nop')})", - "pageBar": 0 - }, - { - "name": "MM131美女图片手機版 - 首頁", - "example": "https://m.mmm131.com/", - "url": "^https?://m\\.mmm131\\.com/$", - "css": ".bannert_ios,.bannerb_ios,.tips{display:none!important}", - "nextLinkByJs": "homemore()" - }, - { - "name": "MM131美女图片 - 看圖", - "example": "https://www.mmm131.com/xinggan/5774.html", - "url": "^https?://www\\.mmm131\\.com/.+\\html$", - "init": "let a=document.querySelector('.content-pic>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一页']", - "pageElement": ".content-pic img", - "replaceElement": ".content-page", - "css": ".content-tips{display:none!important}.content-pic img{margin-top:0px!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "MM131美女图片 - 列表", - "example": "https://www.mmm131.com/xinggan/", - "url": "^https?://www\\.mmm131\\.com/", - "nextLink": "//a[text()='下一页']", - "pageElement": "//dl[@class='list-left public-box']/dd[a/@target]", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "Nsfwp", - "example": "https://nsfwx.pics/", - "url": "^https?://nsfwx\\.pics/", - "nextLink": "a.next", - "pageElement": "article[id^='post']", - "replaceElement": ".pag-wrapper", - "rate": 3, - "pageBar": 0 - }, - { - "name": "推图网 - 展開全圖", - "example": "https://m.tuiimg.com/meinv/2653/", - "url": "^https?://(www|m)\\.tuiimg\\.com/meinv/\\d+/", - "init": "goshowall()", - "pinUrl": true - }, - { - "name": "推图网 - 手機版 - 查看更多", - "example": "https://m.tuiimg.com/", - "url": "^https?://m\\.tuiimg\\.com/$", - "nextLinkByJs": "showmore()" - }, - { - "name": "推图网 - 手機版", - "example": "https://m.tuiimg.com/meinv/", - "url": "^https?://m\\.tuiimg\\.com/", - "nextLink": ".now+a", - "pageElement": "#main", - "replaceElement": ".page", - "lazyImgSrc": "realsrc", - "pageBar": 0 - }, - { - "name": "推图网", - "example": "https://www.tuiimg.com/meinv/", - "url": "^https?://www\\.tuiimg\\.com/", - "nextLink": "em+a", - "pageElement": ".beauty>ul,.main>ul", - "replaceElement": ".page", - "css": ".beauty>.pagetual_pageBar+ul{padding-top:15px!important}.main>ul+.pagetual_pageBar{margin-top:10px!important}.main>.pagetual_pageBar+ul{margin-top:-14px!important}" - }, - { - "name": "Mrcong - 看圖", - "enable": 0, - "example": "https://mrcong.com/xiaoyu-vol-831-yang-chen-chen-yome-74-anh/", - "url": "^https?://mrcong\\.com/", - "init": "document.querySelectorAll('p>br').forEach(br=>{br.remove()})", - "nextLink": ".page-link>span+a", - "pageElement": "p>img", - "replaceElement": ".page-link", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "Mrcong", - "example": "https://mrcong.com/", - "url": "^https?://mrcong\\.com/(page/\\d+/)?", - "nextLink": ".current+a", - "pageElement": "article.item-list", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "宅男女神 - 看圖", - "example": "www.gnvshen.com,www.fnvshen.com", - "url": "^https?://www\\.(gnvshen|fnvshen|)\\.com/g/", - "nextLink": "#pages>span +a:not(.a1), a.cur+a", - "pageElement": "#hgallery>img", - "replaceElement": "#pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#hgallery img{margin:0px!important}" - }, - { - "name": "宅男女神", - "example": "www.gnvshen.com,www.fnvshen.com", - "url": "^https?://www\\.(gnvshen|fnvshen)\\.com/(gallery|tag)/", - "nextLink": "a.cur+a", - "pageElement": "#listdiv>ul>li", - "replaceElement": ".pagesYY", - "css": ".pagetual_pageBar{margin-bottom:-5px!important}" - }, - { - "name": "爱女神 - 看圖", - "example": "https://www.99nvshen.com/gallery/15123", - "url": "^https?://www\\.99nvshen\\.com/(gallery|galleryImg)/\\d+", - "nextLink": ".pagination-box li.active+li>a", - "pageElement": ".gallery-detail-img,.gallery-img", - "replaceElement": ".pagination-box", - "pageAction": "document.querySelectorAll('.gallery-img').forEach(a=>{a.removeAttribute('href')})", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".book-list>div[style]{display:none!important}" - }, - { - "name": "爱女神", - "example": "https://www.99nvshen.com/galleryList/", - "url": "^https?://www\\.99nvshen\\.com/(articles|galleryList|modelList|paihang)", - "nextLink": ".pagination-box li.active+li>a", - "pageElement": ".book-list-title+.book-list,.book-list>.row", - "replaceElement": ".pagination-box", - "css": ".pagetual_pageBar{margin-bottom:-5px!important}" - }, - { - "name": "Sexyxbody - 看圖", - "example": "https://cn.sexyxbody.com/sexy_article/i103swym3j/", - "url": "^https?://cn\\.sexyxbody\\.com/sexy_article", - "nextLink": "//a[text()='下一页»']", - "pageElement": ".album-post-body>.separator,.album-post-body>br", - "initRun": 1, - "autoLoadNum": "0", - "pageBar": 0, - "replaceElement": ".pgz-pagination,.album-post-inner,.breadcrumbs" - }, - { - "name": "Sexyxbody", - "example": "https://cn.sexyxbody.com/zone_detail/ouz5i1j", - "url": "^https?://cn\\.sexyxbody\\.com/(zone_detail|tag_list|tag_detail)", - "nextLink": "a.next", - "pageElement": ".blog-posts", - "initRun": 1, - "autoLoadNum": 1, - "rate": 3, - "replaceElement": ".pgz-pagination" - }, - { - "name": "爱看 INS", - "example": "https://www.ikanins.com/", - "url": "^https?://www\\.ikanins\\.com/", - "nextLink": "a[rel='next']", - "pageElement": "#masonry", - "replaceElement": ".wp-pagenavi" - }, - { - "name": "Dmmtu 美女图 - 看圖", - "example": "https://www.dmmtu.com/xiezhen/25837.html", - "url": "^https?://www\\.dmmtu\\.com/", - "include": ".link_pages", - "nextLink": "//a[text()='下一页']", - "pageElement": ".main-body>img", - "replaceElement": ".link_pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "Dmmtu 美女图 - 分類", - "example": "https://www.dmmtu.com/new/", - "url": "^https?://www\\.dmmtu\\.com/", - "include": "#pagenavi", - "nextLink": "//a[text()='下一页']", - "pageElement": "#postlist>*", - "replaceElement": "#pagenavi", - "pageBar": 0 - }, - { - "name": "jpmnb 精品美女吧 - 搜索", - "example": "https://www.jpmnb.net/plus/search/index.asp?keyword=XiuRen", - "url": "^https?://www\\.jpmnb\\.net/plus/search/", - "nextLink": "a.current+a", - "pageElement": ".list>.node", - "replaceElement": ".pagination1", - "pageBar": 0 - }, - { - "name": "jpmnb 精品美女吧 - 看圖", - "example": "https://www.jpmnb.net/Xrqj/XiuRen/19379.html", - "url": "^https?://www\\.jpmnb\\.net/", - "init": "document.querySelectorAll('p br').forEach(br=>{br.remove()})", - "nextLink": "//a[text()='下一页']", - "pageElement": "p img", - "replaceElement": ".pagination1", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "jpmnb 精品美女吧 - 分類", - "example": "https://www.jpmnb.net/Xrqj/XiuRen/", - "url": "^https?://www\\.jpmnb\\.net/", - "nextLink": "//a[text()='下一页']", - "pageElement": ".container>.excerpt", - "replaceElement": ".pagination1", - "pageBar": 0 - }, - { - "name": "MM 范 - 圖片", - "example": "https://www.95mm.tv/65309.html", - "url": "^https?://www\\.95mm\\.\\w+/\\w+\\.html", - "init": "let a=document.querySelector('.post a');a.outerHTML=a.innerHTML;", - "include": ".post img[alt]", - "nextLinkByUrl": [ - "/(\\d+)(/)?(\\d+)?(\\.html)", - "/$1/{($3.0||1)+1}$4" - ], - "stopSign": [ - [ - ".post-title", - "(\\d+)" - ], - [ - ".post-title", - "\\/(\\d+)" - ] - ], - "pageElement": ".post img", - "replaceElement": "h1.h3", - "pageAction": "document.querySelectorAll('.post img[title]').forEach(img=>{img.removeAttribute('title')})", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "span.d-md-inline-block.d-none:not(.mx-1),.text-xs.text-muted>b{display:none!important}" - }, - { - "name": "MM 范", - "example": "https://www.95mm.org/qingchun", - "url": "^https?://www\\.95mm\\.org/(qingchun|sifang|xinggan|tag)?", - "include": ".dposts-ajax-load", - "loadMore": ".dposts-ajax-load" - }, - { - "name": "Everia.club", - "example": "https://everia.club/category/gravure/", - "url": "^https?://everia\\.club/category", - "nextLink": ".next", - "pageElement": ".posts-wrapper article", - "replaceElement": ".page-numbers", - "pageBar": 0 - }, - { - "name": "Xiuren 秀人网", - "example": "http://www.xiuren.org/category/TuiGirl.html", - "url": "^https?://www\\.xiuren\\.org/", - "include": "#page", - "pinUrl": true, - "nextLink": ".next", - "pageElement": "#main>.loop", - "replaceElement": "#page", - "rate": 3 - }, - { - "name": "套圖吧手機版", - "example": "https://m.taotu8.xyz/", - "url": "^https?://m\\.taotu8\\.(top|com|xyz)/", - "include": "#morepic", - "nextLink": "0", - "loadMore": "#morepic" - }, - { - "name": "套圖吧 - 看圖", - "example": "https://www.taotu8.xyz/gq/meinv/xiaoyu847.html", - "url": "^https?://(www|m)\\.(192[a-z+]|taotu8)\\.(top|com|xyz)/", - "include": ".picmainer>h1", - "action": 1, - "nextLinkByUrl": [ - "/([^_]+)(_)?(\\d+)?(\\.html)$", - "/$1_{($3.0||1)+1}$4", - ".next[href*='_']" - ], - "pageElement": ".picsbox img", - "replaceElement": ".next,.pre,.picmainer>h1", - "waitElement": [ - ".picsbox img[style]" - ], - "css": ".picsbox img{opacity: 1!important}.national-day,.picpege,.pictopline p.pright,#back-to-top{display:none!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "套圖吧", - "example": "https://www.taotu8.xyz/", - "url": "^https?://(www|m)\\.(192[a-z+]|taotu8)\\.(top|com|xyz)/", - "include": ".page", - "nextLink": ".page b+a", - "pageElement": ".piclist>ul", - "lazyImgSrc": [ - "lazysrc", - "lazysrc" - ], - "replaceElement": ".page", - "css": ".pagetual_pageBar{margin-top:-20px!important;margin-bottom:10px!important}" - }, - { - "name": "蕾丝猫 - 圖片", - "example": "https://www.lesmao.site/thread-31035-1-1.html", - "url": "^https?://www\\.(lsm|lesmao|lsmpx)\\.(site|me|pro|co|com|org)/thread", - "nextLink": "strong+a,a.r", - "pageElement": "#thread-pic li,#pic", - "replaceElement": "#thread-page", - "css": "#thread-pic li,#pic li{margin-bottom: 0px!important;}#pic img{width:100%!important;height:auto!important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "蕾丝猫", - "example": "https://www.lesmao.site/", - "url": "^https?://www\\.(lsm|lesmao|lsmpx)\\.(site|me|pro|co|com|org)/", - "nextLink": ".current+a,strong+a", - "pageElement": "#index-pic,#ul-pic", - "replaceElement": ".pg", - "css": ".pagetual_pageBar{margin-bottom:20px!important}#ul-pic img{display:none!important}" - }, - { - "name": "Wndfx 妹子图 - 圖片", - "example": "https://www.wndfx.com/gogort/zg/8364.html", - "url": "^https?://www\\.wndfx\\.com/gogort/", - "include": ".nav-links.page_imges", - "nextLink": "span+a", - "pageElement": ".article-content img", - "replaceElement": ".nav-links.page_imges", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "Wndfx 妹子图", - "example": "https://www.wndfx.com/", - "url": "^https?://www.\\wndfx\\.com/", - "include": "nav.pagination", - "nextLink": "//a[text()='下一页 »']", - "pageElement": ".update_area_lists", - "replaceElement": "nav.pagination", - "css": ".update_area_lists+.pagetual_pageBar{margin-top:-15px!important}.pagetual_pageBar+.update_area_lists{margin-top:-5px!important}" - }, - { - "name": "优美图库 - 圖片", - "example": "https://www.umei.cc/meinvtupian/xingganmeinv/255974.htm", - "url": "^https?://(www\\.)?(umeitu|umei)\\.(com|fun|cc)/", - "include": ".pages", - "nextLink": "li.thisclass+li>a", - "pageElement": ".big-pic>a", - "replaceElement": ".pages", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "优美图库 - 分類", - "example": "https://www.umei.cc/meinvtupian/xingganmeinv/", - "url": "^https?://(www\\.)?(umeitu|umei)\\.(com|fun|cc)/", - "include": "#pageNum", - "nextLink": ".thisclass+a", - "pageElement": "#infinite_scroll,.pic-list>ul", - "replaceElement": "#pageNum", - "css": "#infinite_scroll+.pagetual_pageBar{margin-top:-15px!important}.pagetual_pageBar+#infinite_scroll{margin-top:-15px!important}ul+.pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "Hentai Image - 圖片", - "example": "hentai-img.com,hentai-cosplays.com,porn-images-xxx.com", - "url": "^https?://(.+)?(porn-images-xxx|hentai-cosplays|hentai-img)\\.com/image/", - "nextLink": "//a[contains(text(),'>') or contains(text(),'next')]", - "pageElement": "#display_image_detail img", - "replaceElement": "script+#paginator,#detail_tag+div+div", - "css": "#display_image_detail a[id]{display:none!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "Hentai Image - 分類", - "example": "https://ja.porn-images-xxx.com/search/", - "url": "^https?://(.+)?(porn-images-xxx|hentai-cosplays|hentai-img)\\.com/(search|recently|ranking|search-video|ranking-video)/", - "nextLink": "span+a", - "pageElement": "#center>#display_area_image", - "replaceElement": ".wp-pagenavi", - "css": ".pagetual_pageBar{margin-top:-30px!important;}#post_list_title+#display_area_image,.pagetual_pageBar+#display_area_image{margin-bottom:0px!important;}", - "initRun": 1, - "autoLoadNum": 1, - "rate": 3 - }, - { - "name": "24fa", - "example": "https://www.24fa.com/n93763c49.aspx", - "url": "^https?://(www\\.)?\\d{2,3}(m|w|faw|fa|aa)?\\.[a-z]{2,4}/m?n\\w+\\.aspx$", - "include": "//title[contains(text(),'24FA')]", - "init": "document.querySelectorAll('#content br').forEach(br=>{br.remove()})", - "nextLink": "li.p_current+li>a", - "pageElement": "#content img[alt]", - "replaceElement": ".pager", - "css": "img{margin-top:0px!important;margin-bottom:1px!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "無名網", - "example": "https://9wm9.info/viewforum/38", - "url": "^https?://9wm9\\.info/", - "nextLink": "//a[text()='Next page']", - "pageElement": ".box tbody", - "replaceElement": "nav.pagination" - }, - { - "name": "小丑擼 輕便版", - "example": "https://www.jokerlutxt.top/index.php/vodtype/131.html", - "url": "^https?://www\\.jokerlutxt\\.top/index\\.php/vodtype/.+\\.html", - "nextLink": "//a[text()='下一页']", - "pageElement": ".box tbody", - "replaceElement": "nav.pagination" - }, - { - "name": "小丑擼", - "example": "https://www.jokerlu357.cc/index.php/vodtype/121.html", - "url": "^https?://www\\.jokerlu\\d+\\.cc/index\\.php/vodtype/.+\\.html", - "nextLink": "//a[text()='下一页']", - "pageElement": ".main-grids>.top-grids+.recommended>.recommended-grids.english-grid", - "replaceElement": ".recommended+.recommended>.recommended-grids.english-grid>.clearfix>.pagination", - "css": ".pagetual_pageBar{margin-top:12px!important;}" - }, - { - "name": "亞色影庫", - "example": "https://www.yasetube.com/video/category/javhd", - "url": "^https?://www\\.yasetube\\.com/", - "action": 1, - "waitElement": [ - ".video-preview+img[data-src].loaded", - ".video-preview+img[data-src]:not(.loaded)" - ], - "nextLink": "//li[a/@class='current']/following-sibling::li[1]/a", - "pageElement": ".videos-list article", - "replaceElement": ".pagination", - "pageAction": "let gae=e=>document.querySelectorAll(e);let url=gae('#wpst-main-js')[0].src;if(url){fetch(url).then(res=>res.text()).then((res)=>{eval(res)})}let ps=gae('.videos-list');let last=ps.length-1;ps[last].querySelectorAll('img.loaded').forEach(img=>{if(!img.parentNode.getAttribute('data-thumbs')){img.onmouseenter=e=>{img.classList.add('video-img--hidden')}}})", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "黃色倉庫", - "example": "http://2364ck.cc/vodtype/15.html", - "url": "^https?://[^/]+/", - "include": "//title[contains(text(),'黄色仓库')]", - "pinUrl": true, - "nextLink": "li.hidden-xs.active+li>a", - "pageElement": ".stui-pannel-bd", - "replaceElement": ".stui-pannel-ft", - "css": "body>*:nth-child(1),.stui-vodlist>li:nth-child(n+1):nth-child(-n+3){display:none!important}.pagetual_pageBar{margin-top:0px!important;margin-bottom:0px!important}.pagetual_pageBar+*{margin-top:-10px!important;}a[data-original]{opacity:1!important}" - }, - { - "name": "r18.clickme.net", - "example": "https://r18.clickme.net/c/new", - "url": "^https?://r18\\.clickme\\.net/", - "nextLink": "li.active+li>a", - "pageElement": "#article-list", - "replaceElement": "#pages" - }, - { - "name": "fc2cm 去模糊", - "example": "https://fc2cm.com/?c=sensen321&nc=0", - "url": "^https?://fc2cm\\.com/", - "pinUrl": true, - "nextLink": "span+a", - "pageElement": "#contentInner aside dl", - "replaceElement": ".st-pagelink", - "pageBar": 0, - "css": ".sampleimg_b,img{-webkit-filter:none!important}img{-moz-opacity:1!important;opacity:1!important}" - }, - { - "name": "fc2hub", - "example": "https://fc2hub.com/", - "url": "^https?://fc2hub\\.com/", - "action": 1, - "nextLink": "a[rel='next']", - "pageElement": "//div[(div/div/@class='card shadow') and @class='row']", - "replaceElement": ".pagination" - }, - { - "name": "PPP.Porn", - "example": "https://ppp.porn/", - "url": "^https?://ppp\\.porn/", - "nextLink": "//li[a/@class='pagination__item pagination__item--selected']/following-sibling::li[1]/a", - "pageElement": "div[id^='list_videos']", - "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae(\"div[id^='list_videos']\");let last=ps.length-1;ps[last].querySelectorAll('figure.aspect-ratio>a').forEach(a=>{a.onmouseenter=e=>{let v=document.createElement('VIDEO');let img=a.querySelector('img');$(v).attr({loop:'',autoplay:'',src:img.getAttribute('data-preview'),webkitplaysinline:'true',playsinline:'true'});$(v).css({position:'absolute',left:'0',top:'0',width:img.offsetWidth+'px',height:img.offsetHeight+'px',background:'#000000',visibility:'visible'});a.appendChild(v)};a.onmouseleave=e=>{a.querySelector('VIDEO').remove()}})", - "replaceElement": "nav.pagination", - "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:16px!important}.padding-bottom-md{padding-bottom:unset!important}nav.pagination{padding-top:var(--space-md)!important}" - }, - { - "name": "PPP.Porn - 首頁(載入更多 …)", - "example": "https://ppp.porn/", - "url": "^https?://ppp\\.porn/$", - "loadMore": ".btn.btn--sm" - }, - { - "name": "YavTube", - "example": "https://yavtube.com/,https://r18hub.com/", - "url": "^https?://(yavtube|r18hub)\\.com/", - "exclude": ".model-wrapper", - "nextLink": "li.active+li.wave-effect>a", - "pageElement": "ul.item-list", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-5px!important}" - }, - { - "name": "magnetdl.com", - "example": "www.magnetdl.com", - "url": "^https?://www\\.magnetdl\\.com/", - "nextLink": "id('pages')/a[contains(string(),'>')]", - "pageElement": ".download>tbody>tr:nth-last-child(n+4)", - "replaceElement": "#pages" - }, - { - "name": "tokyomotion", - "example": "https://www.tokyomotion.net/videos", - "url": "^https?://www\\.tokyomotion\\.net/(videos|albums)", - "nextLink": "ul.pagination:not(.pagination-lg) li.active+li>a", - "pageElement": ".well.well-sm+.row,#wrapper>.container>.row .row>*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "tokyomotion - 相簿原圖", - "example": "https://www.tokyomotion.net/photo/884869/", - "url": "^https?://www\\.tokyomotion\\.net/photo", - "nextLink": "//a[text()='下一步' or text()='Next']", - "pageElement": ".thumb-overlay", - "replaceElement": ".clearfix+div.pull-left+div", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "tokyomotion - 相簿", - "example": "https://www.tokyomotion.net/album/67719", - "url": "^https?://www\\.tokyomotion\\.net/album/\\d+", - "nextLink": "ul.pagination:not(.pagination-lg) li.active+li>a", - "pageElement": ".row>div[id^=album_photo_]", - "replaceElement": ".pagination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "tokyomotion", - "example": "https://www.tokyomotion.net/", - "url": "^https?://www\\.tokyomotion\\.net/(page=\\d+)?$", - "action": 1, - "nextLink": "li.active+li>a", - "pageElement": ".col-sm-12>.row>.col-sm-12>.row>*", - "replaceElement": ".pagination", - "wait": "let img=doc.querySelector('.col-lg-4 img');return img!=null", - "pageBar": 0 - }, - { - "name": "7mmtv - 分類", - "example": "https://7mmtv.sx/zh/uncensored_random/all/index.html", - "url": "^https?://7mmtv\\.sx/(zh|en|ja|ko)/[a-z]+_(random|list)/", - "nextLink": "li.page-item.current+li.page-item>a", - "pageElement": ".row.content", - "replaceElement": "nav.pagination-row", - "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae('.row.content');let last=ps.length-1;ps[last].querySelectorAll('.video').forEach(div=>{div.onmouseenter=e=>{let v=div.querySelector('video[data-src]');v.setAttribute('src',v.getAttribute('data-src'));$(v).css({visibility:'visible'});let l=div.querySelector('.video-loader');$(l).css({visibility:'visible'});setTimeout(()=>{$(l).css({visibility:'hidden'})},500)};div.onmouseleave=e=>{let v=div.querySelector('video[data-src]');let l=div.querySelector('.video-loader');v.setAttribute('src','');v.setAttribute('style','');$(l).css({visibility:'hidden'})}})", - "css": ".pagetual_pageBar{margin-top:-10px!important}" - }, - { - "name": "tktube", - "example": "https://www.tktube.com/categories/fc2/", - "url": "^https?://(www\\.)?tktube\\.com/", - "nextLink": ".next>a", - "pageElement": ".list-videos", - "replaceElement": "[id$='pagination']", - "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae('.list-videos');let last=ps.length-1;ps[last].querySelectorAll('.item>a>.img').forEach(div=>{div.onmouseenter=e=>{let v=document.createElement('video');let img=div.querySelector('.thumb');$(v).attr({loop:'',autoplay:'',src:img.getAttribute('data-preview'),webkitplaysinline:'true',playsinline:'true'});$(v).css({position:'absolute',left:'0',top:'0',width:img.offsetWidth+'px',height:img.offsetHeight+'px',background:'#000000',visibility:'visible'});div.appendChild(v)};div.onmouseleave=e=>{div.querySelector('video').remove()}})" - }, - { - "name": "RIRI TV / playav", - "example": "https://ri1.site/?filter=random,https://playav.tv/category/chinese-model", - "url": "^https?://(ri1\\.site|playav\\.tv)/", - "pinUrl": true, - "nextLink": "//li[a/@class='current']/following-sibling::li[1]/a", - "pageElement": "#main .thumb-block", - "replaceElement": ".pagination", - "rate": 3, - "pageInit": "doc.querySelectorAll('.post-thumbnail-container>img:not(.loaded)').forEach(img=>{if(img){img.setAttribute('class','loaded')}})", - "pageAction": "let url=document.querySelector('#wpst-main-js').src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})", - "pageBar": 0, - "css": "#dclm_modal_screen,#dclm_modal_content,[class^='happy'],.widget.widget_text{display:none!important}" - }, - { - "name": "JAVCT", - "example": "https://javct.net/uncensored", - "url": "^https?://javct\\.net/", - "nextLink": "li.paginator__item.paginator__item--next>a", - "pageElement": ".container>.row.row--grid>*", - "replaceElement": ".paginator", - "rate": 3, - "pageBar": 0, - "css": ".text__links{display:none!important}" - }, - { - "name": "Jable", - "example": "https://jable.tv/new-release/", - "url": "^https?://(jable|fs1)\\.(tv|app)/", - "init": "document.querySelectorAll('#list_videos_common_videos_list_sort_list a').forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 800)')})", - "nextLink": "//li[span/@class='page-link active disabled']/following-sibling::li[1]/a", - "pageElement": "section>.row", - "replaceElement": ".pagination", - "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae('section>.row');let last=ps.length-1;ps[last].querySelectorAll('.img-box>a').forEach(a=>{a.onmouseenter=e=>{let v=document.createElement('video');let img=a.querySelector('img');let src=img.getAttribute('data-preview');$(v).attr({loop:'',autoplay:'',src:img.getAttribute('data-preview')});$(v).css({position:'absolute',left:'0',top:'0',width:img.offsetWidth+'px',height:img.offsetHeight+'px',background:'#000000',visibility:'visible'});a.appendChild(v)};a.onmouseleave=e=>{a.querySelector('video').remove()}})", - "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:20px!important}" - }, - { - "name": "javpark.net", - "example": "https://javpark.net/category/movie/", - "url": "^https?://javpark\\.net/category/", - "action": 1, - "nextLink": "a.next.page-numbers", - "pageElement": "#main article", - "replaceElement": "nav.navigation.pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "壹纳网 - 內文", - "example": "https://yinaw.com/23035.html", - "url": "^https?://yinaw\\.com/\\d+\\.html", - "nextLink": ".fenye span+a", - "pageElement": ".article-content>p,.article-content>h2,.article-content>#erphpdown", - "replaceElement": ".fenye", - "pageBar": 0 - }, - { - "name": "壹纳网 - 文章", - "example": "https://yinaw.com/", - "url": "^https?://yinaw\\.com/", - "nextLink": ".next-page>a", - "pageElement": ".excerpt", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar+.excerpt{margin-top:-2px!important;}" - }, - { - "name": "mangabtt - 漫畫閱讀", - "example": "https://mangabtt.com/manga/transmigrating-to-the-otherworld-once-more/chapter-30-eng-li/291628", - "url": "^https?://mangabtt\\.com/", - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.getAttribute('data-src')})", - "include": "option[selected]", - "nextLink": "#nextChapter", - "pageElement": ".reading-detail", - "replaceElement": "#chapter-nav" - }, - { - "name": "klmanga - 漫畫閱讀", - "example": "https://klmanga.net/bsaq-i-became-a-magical-cheat-loli-witch-my-different-world-life-with-my-reincarnation-privilege-creation-magic-and-the-seed-of-magic-manga-chapter-5.html", - "url": "^https?://klmanga\\.net/", - "include": "option[selected]", - "pinUrl": true, - "action": 1, - "history": 2, - "nextLinkByJs": "function gx(x){return doc.evaluate(x,doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}let next = gx('//option[@selected]/preceding-sibling::option[1]'); if (next) return location.href.replace(/[^-]+\\.html$/,'') + next.innerText.match(/[0-9.]+/)[0]+'.html'", - "pageElement": "center .chapter-content", - "replaceElement": ".navbar-nav" - }, - { - "name": "Rawkuma - 漫畫閱讀", - "example": "https://rawkuma.com/mikata-ga-yowa-sugite-hojo-mahou-ni-toushite-ita-kyuutei-mahou-shi-tsuihou-sarete-saikyou-wo-mezasu-chapter-1/", - "url": "^https?://rawkuma\\.com/", - "pinUrl": true, - "action": 1, - "history": 2, - "nextLink": ".ch-next-btn", - "pageElement": "#readerarea", - "replaceElement": ".chnav.ctop" - }, - { - "name": "manga1001 - 漫畫閱讀", - "example": "manga1001.in,manga1001.su,mangaraw.vip", - "url": "^https?://(manga1001|mangaraw)\\.(in|su|vip)/chapters/", - "pinUrl": true, - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.getAttribute('data-src')})", - "nextLink": "a[rel='next'],.nextchapter", - "manualMode": true - }, - { - "name": "MANGAROW - 漫畫閱讀", - "url": "^https?://mangarow\\.org/chapters/", - "pinUrl": true, - "history": 2, - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.getAttribute('data-src')})", - "nextLink": "a[rel='next']", - "pageElement": ".container-chapter-reader", - "replaceElement": "//div[div/div/select]" - }, - { - "name": "MANGA1000 - 漫畫閱讀", - "example": "https://manga1000.top/197/8175/", - "url": "^https?://manga1000\\.top/\\d+/\\d+/", - "pinUrl": true, - "history": 2, - "init": "setTimeout(()=>{document.querySelectorAll('img.chapter-img').forEach(img=>{img.src=img.src.replace('https://welovekai.com/proxy.php?link=','')})},500)", - "nextLinkByJs": "let n = doc.querySelector('ul.chapter_select option[selected]').previousElementSibling;if(n!=null) return location.origin+n.value", - "pageElement": "div.chapter-content>img", - "pageInit": "doc.querySelectorAll('img.chapter-img').forEach(img=>{img.src=img.src.replace('https://welovekai.com/proxy.php?link=','')})", - "replaceElement": "span[itemprop='name']", - "css": "img.chapter-img{max-width: 98% !important;display: block !important;margin: 0 auto !important;}" - }, - { - "name": "MANGA1000 - 分类/搜索页", - "example": "https://manga1000.top/", - "url": "^https?://manga1000\\.top/", - "include": ".pagination", - "nextLink": "//a[text()='»']", - "pinUrl": true, - "pageElement": ".thumb-item-flow", - "replaceElement": ".pagination, .col-md-8>.btn-group:first-child" - }, - { - "name": "鹹濕仔日報", - "example": "https://jdaily18.com/view1/category/%e5%af%ab%e7%9c%9f/", - "url": "^https?://jdaily18\\.com/", - "nextLink": "a.next", - "pageElement": "#post_container>*", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "ACG漫画网 - 阅读", - "example": "https://www.acgxmh.com/h/314618.html", - "url": "^https?://www\\.acgxmh\\.com/", - "nextLink": "#pages span+a", - "pageElement": ".manga-page img", - "replaceElement": "#pages", - "pageBar": 0, - "css": ".manga-page a{display:none!important}" - }, - { - "name": "ACG漫画网 - 分类页", - "example": "https://www.acgxmh.com/hentai/", - "url": "^https?://www\\.acgxmh\\.com/", - "nextLink": ".page.bigpage span+a", - "pageElement": "#list,#doujin_album", - "replaceElement": ".page.bigpage" - }, - { - "name": "ACGN小鎮/皮皮动漫社", - "example": "https://www.bbsacgn.com/,https://pipidm.top/,https://www.pipidm.top/", - "url": "^https?://(www\\.bbsacgn\\.com|pipidm\\.top|www\\.pipidm\\.top)/", - "pageElement": ".posts-wrapper.scroll>*", - "replaceElement": ".pagination" - }, - { - "name": "18x78", - "example": "https://18x78.com/", - "url": "^https?://18x78\\.com/", - "nextLink": "a.next", - "pageElement": ".posts-wrapper", - "replaceElement": ".page-numbers", - "rate": 3, - "pageBar": 0 - }, - { - "name": "绅士漫画 - 閱讀", - "example": "https://wnacg.org/photos-view-id-15403544.html", - "url": "^https?://(www\\.)?(wnacg|htcomic|ssmh\\d+)\\.[^/]+/photos-view", - "include": "span.newpagelabel", - "init": "let a=document.querySelector('#imgarea>a');a.outerHTML=a.innerHTML;", - "nextLink": "//a[text()='下一頁']", - "stopSign": "let p=doc.querySelector('span.newpagelabel').textContent;let m=p.match(/(\\d+)\\/(\\d+)/);if(m[1]==m[2])return true;", - "pageElement": "#picarea", - "replaceElement": ".newpagewrap,.png.bread,.grid_2.cc", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "绅士漫画", - "example": "https://wnacg.org/albums-index-cate-9.html", - "url": "^https?://(www\\.)?(wnacg|htcomic|ssmh\\d+)\\.[^/]+/(albums|search|photos-index)", - "nextLink": "span.thispage+a", - "pageElement": "li.gallary_item", - "replaceElement": ".paginator", - "pageBar": 0 - }, - { - "name": "松鼠症倉庫 - 閱讀", - "example": "https://ahri8.top/readOnline2.php?ID=97432&host_id=0", - "url": "^https?://[^/]+/readOnline2\\.php", - "include": "//div[@id='logo-group']//a[contains(text(),'松鼠症倉庫') or contains(text(),'松鼠症仓库')]", - "action": 1, - "pageElement": "[id^=read_online_image]", - "replaceElement": "#page_num1,#next_page_btn_area,#page_num2,#next_page_btn_area2", - "pageBar": 0, - "css": "#content>.col-lg-12,[id^=read_online_ads_area],#Big_Image~*{display:none!important}" - }, - { - "name": "松鼠症倉庫", - "example": "https://ahri8.top/dnew.php?t=1669824000", - "url": "^https?://[^/]+/dnew\\.php", - "include": "//div[@id='logo-group']//a[contains(text(),'松鼠症倉庫') or contains(text(),'松鼠症仓库')]", - "action": 1, - "nextLink": ".pagination li.active+li>a", - "pageElement": "#gallery", - "replaceElement": ".pagination", - "css": "#content>[style^='text-align']{display:none!important}" - }, - { - "name": "绅士会所", - "example": "www.hentaiclub.net,www.sshs.club", - "url": "^https?://www\\.(hentaiclub|sshs)\\.(net|club)/", - "nextLink": "li.next-page>a", - "pageElement": "article[class]:not(.excerpt-minic-index)", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "绅士仓库 - 排行/作者墙", - "example": "https://cangku.icu/", - "url": "^https?://cangku\\.[^/]+/(rank|author)", - "loadMore": ".container .el-button:not(.is-loading)" - }, - { - "name": "绅士仓库", - "example": "https://cangku.icu/", - "url": "^https?://cangku\\.", - "action": 1, - "nextLink": "li.number.active+li.number", - "pageElement": ".post-list>.row, .category-post>.row, #user-post>.row, #user-favorite>.row, #user-comment .comment-list", - "waitElement": [ - ".post-card-content>.cover" - ], - "replaceElement": ".page-pagination", - "css": ".pagetual_pageBar{margin-top:-12px!important}" - }, - { - "name": "LoLHentai", - "example": "https://www.lolhentai.net/", - "url": "^https?://www\\.lolhentai\\.net/", - "action": 1, - "wait": 2000, - "nextLink": "a[rel='next']", - "pageElement": "//div[ul/li/div/a/img[@class='thumbnail']]", - "replaceElement": ".pagination", - "rate": 3 - }, - { - "name": "The Hentai World", - "example": "https://thehentaiworld.com/?new", - "url": "^https?://thehentaiworld\\.com/", - "nextLink": "a.next, .current+.minithumb>a", - "papageElementeE": ".thumb, #doujin>a", - "replaceElement": ".navigation, #miniThumbContainer" - }, - { - "name": "Danbooru", - "example": "danbooru.donmai.us,e621.net", - "url": "^https?://(danbooru\\.)?(donmai|e621)\\.(us|net)/", - "nextLink": "a[rel='next']", - "pageElement": "article", - "replaceElement": ".paginator" - }, - { - "name": "Rule34", - "example": "rule34hentai.net,rule34.paheal.net", - "url": "^https?://rule34(hentai|\\.paheal)\\.net/", - "nextLink": "//a[text()='Next']", - "pageElement": ".thumb", - "replaceElement": "#paginator" - }, - { - "name": "Gelbooru", - "example": "gelbooru.com,tbib.org,safebooru.org,illusioncards.booru.org,rule34.xxx,hypnohub.net,xbooru.com", - "url": "^https?://(illusioncards\\.)?(gelbooru|tbib|safebooru|booru|rule34|hypnohub|xbooru)\\.(com|org|xxx|net)/.+s=list", - "nextLink": "a[alt='next']", - "pageElement": ".thumbnail-container, span.thumb", - "replaceElement": "#paginator", - "pageBar": 0 - }, - { - "name": "yande", - "example": "konachan.net,konachan.com,yande.re,www.sakugabooru.com", - "url": "^https?://(konachan\\.net|konachan\\.com|yande\\.re|www\\.sakugabooru\\.com)/(post|comment)($|\\?|#|/search\\?)", - "pageElement": "//li[contains(@class, 'creator-id-')]|//div[@id='comment-list']/div[@class='post']|//table[@class='highlightable']", - "nextLink": "//a[@class='next_page']", - "replaceElement": "#paginator", - "pageBar": 0, - "css": ".javascript-hide { display: inline-block !important; }.pagetual_pageBar { display: inline-flex!important;width: 100%!important; }" - }, - { - "name": "hitomi - Gallery Info", - "example": "https://hitomi.la/doujinshi/akisame-mabara-ni-natte-%E4%B8%AD%E6%96%87-2431684.html#1", - "url": "^https?://hitomi\\.la/(cg|manga|doujinshi|gamecg)/.+\\.html#1$", - "pinUrl": true, - "css": "li[class^='simplePagerPage']{display: inline-block!important;}.simplePagerNav{display:none!important}" - }, - { - "name": "hitomi - 分類", - "example": "https://hitomi.la/?page=2", - "url": "^https?://hitomi\\.la/", - "include": ".page-container", - "action": 1, - "nextLinkByUrl": [ - "([^?]+)(\\?page=(\\d+))?$", - "$1?page={($3.0||1)+1}", - ".page-container>ul>li:last-child>a" - ], - "pageElement": ".gallery-content>*", - "replaceElement": ".page-container", - "waitElement": [ - "", - ".gallery-content[style]" - ], - "pageBar": 0 - }, - { - "name": "Orzqwq", - "example": "https://orzqwq.com/manga-genre/big-breasts/", - "url": "^https?://orzqwq\\.com/", - "action": 1, - "nextLink": ".nextpostslink,li.active+li>a", - "pageElement": ".page-content-listing.item-big_thumbnail,.chapter-images-list>.image-item", - "replaceElement": ".wp-pagenavi,.pagination", - "rate": 3, - "pageBar": 0, - "initRun": 1, - "autoLoadNum": 10 - }, - { - "name": "E-Hentai", - "example": "http://e-hentai.org/,https://exhentai.org/", - "url": "^https?://(e-hentai|exhentai)\\.org/", - "nextLink": "//table[@class='ptt']//a[string()='>'] | id('next') | id('unext')", - "pageElement": ".itg>div,.itg>tbody>tr:not(:first-of-type),.gl1t, #gdt>div:not(.c), #img", - "replaceElement": ".ptt,.ptb,.sn,.searchnav", - "css": "#img {max-width: 100% !important;height: auto !important;min-height: 400px;}" - }, - { - "name": "177 漫画/xxiav - 圖片", - "example": "www.177picyy.com,www.xxiav.com", - "url": "^https?://www.(177picyy|177pica|xxiav).com/", - "init": "let _img='';document.querySelectorAll('img[data-lazy-src]').forEach(e=>{_img+=``});document.querySelector('.single-content').innerHTML=_img;", - "include": ".page-links", - "nextLink": "//div[@class='page-links']/a[span/i[@class='be be-arrowright']]", - "pageElement": ".single-content", - "replaceElement": ".page-links", - "pageInit": "let _img='';doc.querySelectorAll('img[data-lazy-src]').forEach(e=>{_img+=``});doc.querySelector('.single-content').innerHTML=_img;", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".single-content+.single-content{margin-top:0px!important}" - }, - { - "name": "177 漫画/xxiav - 分類", - "example": "www.177picyy.com,www.xxiav.com", - "url": "^https?://www.(177picyy|177pica|xxiav)\\.com/", - "include": ".nav-links", - "nextLink": "span.current+a", - "pageElement": "#main article", - "replaceElement": ".nav-links", - "pageBar": 0 - }, - { - "name": "18 禁漫 - 閱讀", - "example": "https://www.18mh.cc/index-look-name-%E8%AB%8B%E6%BB%91%E5%85%A5%E8%A7%A3%E9%8E%96-cid-NaTcMaxcMjYO0O0O-id-619923", - "url": "^https?://www\\.18mh\\.cc/index-look", - "nextLink": "//div[@class='c']/a[text()='下一頁'][not(@class='n fanye')]", - "pageElement": ".e>img:not([style='display:none;'])", - "replaceElement": ".c, .b", - "css": ".e img {display: block; margin: 0 auto;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "lazyImgSrc": "data-url" - }, - { - "name": "18 禁漫 - 分類", - "example": "https://www.18mh.cc/index-html-status-2", - "url": "^https?://www\\.18mh\\.cc/", - "nextLink": "//a[text()='下一頁']", - "pageElement": ".liemh.htmls.indliemh>*", - "replaceElement": ".pagination", - "lazyImgSrc": "data-url", - "pageBar": 0 - }, - { - "name": "禁漫天堂 - 分类页", - "example": "https://18comic.vip/,https://18comic.org/", - "url": "^https?://18comic\\.(vip|org)/(album|search|blogs|videos|movies|promotes)", - "pinUrl": true, - "init": "setTimeout(()=>{let c=document.querySelector('button#chk_cover');if(c){c.click()}},2000);document.querySelectorAll(`img[src*='blank.jpg'][data-original]`).forEach(img=>{img.src=img.getAttribute('data-original')})", - "nextLink": "#wrapper>.container>div:not(.row)>.pagination .prevnext", - "pageElement": "#wrapper>.container>.row:not(:last-of-type):not(.visible-xs)", - "replaceElement": "#wrapper>.container>div:not(.row)>.pagination", - "autoClick": "#chk_cover", - "css": ".row>[style='z-index: 0;'], .col-lg-3.col-md-3.col-sm-3.col-xs-6 {display: none !important;}" - }, - { - "name": "Hanime1 - 漫画", - "example": "https://hanime1.me/comic/80357/1", - "url": "^https?://hanime1\\.me/comic\\/\\d+\\/\\d", - "nextLink": "a.comic-show-content-nav-item-wrapper.arrow-right", - "pageElement": "img#current-page-image", - "replaceElement": ".comic-show-content-nav", - "css": "#current-page-image {display: block !important; margin: 0 auto !important; max-height: calc(250vh) !important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "Hanime1 - 圖片清單檢視全部", - "example": "https://hanime1.me/comic/65225", - "url": "^https?://hanime1\\.me/comic/\\d+$", - "pinUrl": true, - "nextLink": "0", - "init": "let loop=setInterval(()=>{let b=document.querySelector(\"#comics-thumbnail-show-btn-wrapper:not([style*='none'])\");if(b){b.querySelector('#show-all-comics-btn').click()}if(!b){clearInterval(loop)}},2000)" - }, - { - "name": "Hanime1", - "example": "https://hanime1.me/search?genre=%E8%A3%8F%E7%95%AA&duration=&sort=&query=&year=&month=", - "url": "^https?://hanime1\\.me/(search|comics)", - "nextLink": "a[rel='next']", - "pageElement": ".home-rows-videos-wrapper>a,.content-padding-new,.comics-related-wrapper>.comic-rows-videos-div", - "replaceElement": ".pagination", - "lazyImgSrc": "data-srcset", - "css": ".home-rows-videos-div{margin-bottom:10px!important;}.search-pagination{margin-top:-50px!important;}" - }, - { - "name": "Models Vibe", - "example": "https://www.modelsvibe.com/albums/china/", - "url": "^https?://www\\.modelsvibe\\.com/albums/\\w+/", - "nextLinkByUrl": [ - "(albums/\\w+/)(page/(\\d+)/)?", - "$1page/{$3+1}/" - ], - "pageElement": ".td_flex_block:not(.td-flex-radius),.td_block_inner.tdb-block-inner", - "pageInit": "doc.querySelectorAll('span[data-img-url]').forEach(span=>{span.classList.add('td-animation-stack-type0-2');span.style.backgroundImage=`url('${span.dataset.imgUrl}')`})" - }, - { - "name": "尤美图库", - "example": "https://www.umeitu.com/i/", - "url": "^https?://www\\.umeitu\\.com/", - "nextLink": "a.current+a", - "pageElement": ".viptop~li", - "replaceElement": ".page_navi", - "css": "img{opacity:1!important}" - }, - { - "name": "劍心回憶", - "example": "https://kenshin.hk/category/jnews/photoalbum/", - "url": "^https?://kenshin\\.hk/", - "nextLink": "span.current+a", - "pageElement": "div[id^=post].post", - "replaceElement": ".navigation" - }, - { - "name": "芸能アイドルモデル女優水着画像集", - "example": "https://www.mizugigurabia.com/", - "url": "^https?://www\\.mizugigurabia\\.com/", - "action": 1, - "nextLink": ".pn2 .page-link+a", - "pageElement": ".list>li", - "replaceElement": ".pn2", - "css": ".kb-l img,.kb-r{opacity:1!important}#content1>br{display:none!important}", - "rate": 3 - }, - { - "name": "免费私房图 - 看圖", - "example": "http://www.mfsft.com/gaoqing/photo/20221021/139363.html,http://www.ywmtw.com/yao/kantu/20240223/160249.html", - "url": "^https?://[^/]+/", - "include": "#ztlui3", - "action": 1, - "init": "document.querySelectorAll('#picg a').forEach(a=>{a.outerHTML=a.innerHTML})", - "nextLink": "//div[@class='page']/div[@class='pagelist']//a[text()='下一页']", - "pageElement": "#picg img[alt]", - "replaceElement": ".page>.pagelist", - "css": "#picg img:hover{transform:none !important}#picg img{max-width:100% !important;display:block !important;margin:0 auto !important;filter:blur(0px) !important}body>br,.interestline+center,center+#pic,#xzpap1,#divpsgx,#bdivpx,#divfts,#divftsp,#app+div,#xzappsq,div.bg-text,#divpsg,#divStayTopright2,#bdssy,#qrcode2,#d5tig,#pcapicb,#google_translate_element,#d5a>*:not([id]):not([class]){display:none !important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "免费私房图 - 分類", - "example": "http://www.mfsft.com/gaoqing/tulie/1_1.html,http://www.ywmtw.com/yao/kantum/1_1.html", - "url": "^https?://[^/]+/", - "include": ".pagelist a[title='尾页']", - "init": "let gax=x=>{let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes};gax(\"//div[@id='list']/ul/li[a[not(@title)] or starts-with(@id,'listmmt')]\").forEach(e=>{e.remove()})", - "nextLink": "//div[@class='pagelist']/p/u[b]/following-sibling::a[1]", - "pageElement": "//div[@id='list']/ul/li[a[@title and img[@class='lazy']]/following-sibling::div[@class='title']]", - "replaceElement": ".pagelist", - "rate": 4, - "pageBar": 0, - "css": "[href^='https://www.358a.vip/'],#span_xzappsq,#span_listp,#bdssx,#listmt,#listmt2,#listmt3,#listmt4,#listmmt2,#xzappsq,#listp,#listja,.interestline~br{display:none!important}" - }, - { - "name": "秀人集 / 秀人美女網 / 爱美女网 - 搜索", - "example": "https://www.xiurenba.cc/plus/search/index.asp?keyword=XiuRen,https://www.xrmn01.cc/plus/search/index.asp?keyword=XiuRen,http://www.imn5.net/plus/search/index.asp?keyword=XiuRen", - "url": "^https?://www\\.(xiuren|xrmn|imn5)(\\w{1,2})?\\.[a-z]{2,3}/plus/search/", - "nextLink": "a.current+a", - "pageElement": ".list>.node", - "replaceElement": ".page", - "pageBar": 0, - "css": "section.container>p{display:none!important}" - }, - { - "name": "秀人集 / 秀人美女網 / 爱美女网 - 看圖", - "example": "https://www.xiurenba.cc/XiuRen/11496.html,https://www.xrmn01.cc/XiuRen/2022/202212158.html,http://www.imn5.net/XiuRen/XiuRen/11535.html", - "url": "^https?://www\\.(xiuren|xrmn|imn5)(\\w{1,2})?\\.[a-z]{2,3}/", - "init": "document.querySelectorAll('br').forEach(br=>{br.remove()})", - "nextLink": "//a[text()='下页']", - "pageElement": ".content img,.imgwebp img", - "replaceElement": ".page", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".item_title>[id],section.container>p{display:none!important}" - }, - { - "name": "秀人集 / 秀人美女網 / 爱美女网 - 分類", - "example": "https://www.xiurenba.cc/XiuRen/,https://www.xrmn01.cc/XiuRen/,http://www.imn5.net/XiuRen/XiuRen/", - "url": "^https?://www\\.(xiuren|xrmn|imn5)(\\w{1,2})?\\.[a-z]{2,3}/", - "exclude": [ - ".item_info", - ".imgwebp" - ], - "nextLink": "//a[text()='下页']", - "pageElement": "div.page+ul.update_area_lists>*,script+ul.update_area_lists>*,.excerpts>.excerpt", - "replaceElement": "div.page", - "pageBar": 0 - }, - { - "name": "秀人图集 - 分類", - "example": "http://xiuren0.com/", - "url": "^https?://xiuren0\\.com/", - "init": "let gax=x=>{let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes};gax(\"//div[div[a[img[contains(@data-src,'igusoft')]]]]\").forEach(e=>{e.remove()})", - "pageElement": "//div[div[a[img[not(contains(@data-src,'igusoft.com'))]]]]", - "replaceElement": ".pagination" - }, - { - "name": "Xiutaku - 分類", - "example": "https://xiutaku.com/brand/1", - "url": "^https?://xiutaku\\.com/(\\w+/\\d+|\\w+)?$", - "init": "document.querySelectorAll('.search-form~*,.blog~*:not([class]),.pagination~*').forEach(e=>{e.remove()});", - "pageElement": ".columns", - "replaceElement": ".pagination" - }, - { - "name": "萝丝派 - 分類", - "example": "https://www.yylsp.com/", - "url": "^https?://www\\.yylsp\\.com/", - "pageElement": ".posts-item.card", - "insert": ".pagenav.ajax-pag", - "insertPos": 1, - "replaceElement": ".pagenav" - }, - { - "name": "绅士猫 - 分類", - "example": "https://www.cos6.net/", - "url": "^https?://www\\.cos6\\.net/", - "pageElement": "posts.posts-item", - "insert": ".pagenav.ajax-pag", - "insertPos": 1, - "replaceElement": ".pagenav" - }, - { - "name": "COSPLAY ZIP - 分類", - "example": "https://www.coszip.com/", - "url": "^https?://www\\.coszip\\.com/", - "pageElement": ".jeg_inner_content .jeg_block_container", - "insert": ".jeg_block_navigation", - "insertPos": 1, - "replaceElement": ".jeg_block_navigation" - }, - { - "name": "Chinese Beauties - 分類", - "example": "https://sxchinesegirlz.one/", - "url": "^https?://sxchinesegirlz\\.one/", - "nextLinkByJs": "let next=doc.querySelector('span.current+a');if(next)return next.href.replace(/\\?fbclid=\\w+/i,'');", - "pageElement": ".latestPost.excerpt", - "insert": ".pagination", - "insertPos": 1, - "replaceElement": ".pagination" - }, - { - "name": "图宅网 - 分類", - "example": "https://www.tuzac.com/", - "url": "^https?://www\\.tuzac\\.com/", - "pageElement": ".node-teaser", - "insert": "#pager", - "insertPos": 1, - "replaceElement": "#pager", - "css": ".content-container .content{margin-right:0px!important}.ad-side-right,.footer{display:none!important}" - }, - { - "name": "Fuskator- 分類", - "example": "https://fuskator.com/", - "url": "^https?://fuskator\\.com/", - "pageElement": ".thumblinks", - "replaceElement": "td.pages" - }, - { - "name": "Asianude4u - 分類", - "example": "https://www.asianude4u.net/", - "url": "^https?://www\\.asianude4u\\.net/", - "action": 1, - "pageElement": "#infinite-articles", - "replaceElement": ".wp-pagenavi", - "css": ".ms-item.homeimg{display:none!important}" - }, - { - "name": "美人图 - 看圖", - "example": "https://meirentu.cc/pic/147617207297.html", - "url": "^https?://meirentu\\.cc/pic/", - "include": ".item_info", - "init": "document.querySelectorAll('.content br').forEach(br=>{br.remove()})", - "nextLink": "//a[text()='下页']", - "pageElement": ".content img", - "replaceElement": "div.page", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "美人图 - 分類", - "example": "https://meirentu.cc/group/xiuren.html", - "url": "^https?://meirentu\\.cc/", - "include": ".fl_title", - "nextLink": "//a[text()='下页']", - "stopSign": [ - "ul.update_area_lists img" - ], - "pageElement": "ul.update_area_lists", - "replaceElement": "div.page", - "css": ".pagetual_pageBar{margin-top: -10px!important;margin-bottom: -10px!important;}.update_area_lists{margin-top: -10px!important;margin-bottom: 0px!important;}" - }, - { - "name": "NEXE channels/models", - "example": "https://nehen.xyz/models", - "url": "^https?://[^/]+/(models|channels)", - "pinUrl": true, - "include": "//title[contains(text(),'NEXE')]", - "nextLink": "//li[a/@class='active']/following-sibling::li[1][not(@title)]/a", - "pageElement": ".margin-top-sm>.hex,.padding-lr-sm>.hex", - "replaceElement": ".pagination", - "pageInit": "doc.querySelectorAll('div.media[data-src]').forEach(div=>{div.style.width=div.dataset.width;div.style.height=div.dataset.height+'px';div.style.backgroundImage=`url('${div.dataset.src}')`;div.removeAttribute('data-src');div.removeAttribute('data-height');div.removeAttribute('data-width');div.classList.remove('loading')})", - "css": "h2~.pagetual_pageBar{margin-top:-20px!important}.pagetual_pageBar{margin-top:2px!important}.padding-lr-xs.margin-tb-xs {display: none !important;}.mobile .content{padding:0!important}" - }, - { - "name": "NEXE", - "example": "https://nehen.xyz/", - "url": "^https?://[^/]+/(\\?forwarding.+|best.+|search.+|index.+|amateur.+|danmaku.*|keywords.*)?$", - "pinUrl": true, - "include": "//title[contains(text(),'NEXE')]", - "nextLink": "//li[a/@class='active']/following-sibling::li[1][not(@title)]/a", - "pageElement": ".margin-top-sm>.hex,.hot-keywords", - "replaceElement": ".pagination", - "pageInit": "doc.querySelectorAll('div.media[data-thumb]').forEach(div=>{div.style.backgroundImage=`url('${div.dataset.src}')`;div.removeAttribute('data-src');div.classList.remove('loading');})", - "pageAction": "let es=document.querySelectorAll('.margin-top-sm>.hex');if(es.length>1){let last=[...es].pop();last.querySelectorAll('div[data-thumb]').forEach(e=>{let img=new Image();img.src=e.getAttribute('data-thumb');img.onerror=()=>{e.classList.add('error')}})}", - "css": ".pagetual_pageBar{margin-top:0px!important}.hot-keywords+.pagetual_pageBar{margin-top:6px!important}.pagetual_pageBar+.hot-keywords{margin-top:0px!important}.padding-lr-xs.margin-tb-xs {display: none !important;}.mobile .content{padding:0!important}" - }, - { - "name": "JieAV", - "example": "www.jieav.com,www.qinav.com,www.qinimg.com,www.yinmh.com,www.txtxi.com,www.dnaav.com,www.jiedm.com,www.tasexy.com,www.feiav.com,www.liliav.com,www.keaiav.com,www.miliav.com,www.huiav.com,www.heihd.com,www.pornff.com,www.comfff.com", - "url": "^https?://(www|cn|jp|kr|ru)\\.(jieav|qinav|qinimg|yinmh|txtxi|dnaav|jiedm|tasexy|feiav|liliav|keaiav|miliav|huiav|heihd|pornff|comfff)\\.(com|xyz|top)/", - "nextLink": "a.active+a", - "pageElement": ".list_box>ul:not([id]):not([class]),.site+.actor_box>ul", - "replaceElement": ".pages", - "lazyImgSrc": "img", - "rate": 3, - "initRun": 1, - "autoLoadNum": 1, - "pageInit": "doc.querySelectorAll(`.image>img[img^='h']`).forEach(img=>{img.src=img.getAttribute('img');img.setAttribute('img','')})", - "pageBar": 0 - }, - { - "name": "成人色情分享論壇", - "example": "https://www.rouav.com/magnet/index.html", - "url": "^https?://www\\.rouav\\.com/magnet", - "nextLink": ".active+a", - "pageElement": "//div[@class='magnet']", - "replaceElement": ".pages", - "css": ".pagetual_pageBar{margin-top:-17px!important;margin-bottom:0px!important}" - }, - { - "name": "成人色情分享論壇", - "example": "https://www.rouav.com/", - "url": "^https?://www\\.rouav\\.com/(home)?", - "nextLink": ".active+a", - "pageElement": "//div[not(div/@id='loading') and @class='box']", - "replaceElement": ".pages", - "lazyImgSrc": "img", - "pageBar": 0 - }, - { - "name": "CartoonPornVideos", - "example": "https://www.cartoonpornvideos.com/popular", - "url": "^https?://www\\.cartoonpornvideos\\.com/", - "nextLink": ".next", - "pageElement": ".thumb-list>div", - "replaceElement": ".content>.pagination" - }, - { - "name": "hentai.tv", - "example": "https://hentai.tv/", - "url": "^https?://hentai\\.tv/(trending|genre)", - "nextLink": "button[data-next]", - "pageElement": "[data-results]", - "css": ".pagetual_pageBar{margin-top:-5px!important}" - }, - { - "name": "FC2 电子市场", - "example": "https://adult.contents.fc2.com/search/?q=&genre=30&type=1", - "url": "^https?://adult\\.contents\\.fc2\\.com/search", - "nextLink": "span.items+a[data-link-name='pager']", - "pageElement": ".c-cntCard-110-f", - "replaceElement": ".c-pager-101", - "pageBar": 0 - }, - { - "name": "俺の3Dエロ動画", - "example": "https://oreno3d.com/", - "url": "^https?://oreno3d\\.com/", - "nextLink": "a[rel='next']", - "pageElement": ".g-main-grid>article", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "Sex Nori", - "example": "https://www.sexnori26.me/bbs/board.php?bo_table=av_korea", - "url": "^https?://www\\.sexnori(\\d+)?\\.me/", - "nextLink": "a.next", - "pageElement": ".gallery-item", - "replaceElement": ".eb-pagination", - "css": ".pagetual_pageBar{margin-top:12px!important}.gallery-item {position: static !important;float: left !important;}" - }, - { - "name": "UraakaList", - "example": "https://uraakalist.com/", - "url": "^https?://uraakalist\\.com/", - "action": 1, - "nextLink": "a.next_page", - "pageElement": ".image-list,.prof-list", - "replaceElement": "#pagenation", - "css": ".pagetual_pageBar{margin-top:-4px!important;margin-bottom:10px!important}.prof-list+.pagetual_pageBar{margin-top:10px!important;margin-bottom:10px!important}" - }, - { - "name": "JavTorrent", - "example": "ijavtorrent.com,projectjav.com", - "url": "^https?://(ijavtorrent|projectjav)\\.com/", - "nextLink": "a.btn-secondary+a", - "pageElement": ".movie-list, .articles-list, .actress-list", - "replaceElement": "//a[contains(@class, 'gonext')]/parent::div", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "JAV Library", - "example": "https://www.javlibrary.com/", - "url": "^https?://www\\.javlibrary\\.com/", - "nextLink": "a.next", - "pageElement": ".video, table.pubgroup>tbody>tr:not(#header), table.post", - "replaceElement": ".page_selector" - }, - { - "name": "JavBooks", - "example": "https://javbooks.com/,https://jmvbt.com/", - "url": "^https?://(javbooks|jmvbt)\\.com/", - "nextLink": "span.pageback>a", - "pageElement": ".Po_topic, .Po_u_topic", - "replaceElement": ".PageBar", - "css": ".pagetual_pageBar{margin-top:10px!important;margin-bottom:2px!important}" - }, - { - "name": "141 JAV", - "example": "https://www.141jav.com/new", - "url": "^https?://www\\.(141jav|141ppv)\\.com/", - "nextLink": "a.pagination-next", - "pageElement": "body>.container>.card, body>.container>.columns", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-10px!important;margin-bottom:20px!important;}" - }, - { - "name": "AV6K", - "example": "https://av6k.com/rihanwuma/", - "url": "^https?://av6k\\.com/(rihanwuma|rihanyouma|jxny|chinese-av-porn|surenzipai|oumeiwuma|chengrendongman|plus)", - "nextLink": ".thisclass+li>a,td[width='50']>a", - "pageElement": ".listA:not(.clickadulist)", - "replaceElement": ".pages_c" - }, - { - "name": "AV皇8影城", - "example": "https://www.royal888.xyz/news", - "url": "^https?://www\\.royal888\\.xyz/", - "nextLink": "a[rel='next']", - "pageElement": ".recommended-grids>.resent-grid", - "replaceElement": ".pagination" - }, - { - "name": "85TUBE", - "example": "https://85tube.com/latest-updates/", - "url": "^https?://85tube\\.com/", - "nextLink": ".next>a", - "pageElement": "#list_videos_most_recent_videos_items,#list_videos_latest_videos_list_items,#list_videos_common_videos_list_items", - "replaceElement": ".pagination", - "pageAction": "let url=document.querySelector(\"script[src*='main.min.js']\").src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})", - "css": ".pagetual_pageBar{margin-top:10px!important}" - }, - { - "name": "JavDove 番号鸽", - "example": "https://www.javdove.com/videos/uncensored", - "url": "^https?://www\\.javdove\\.com/", - "nextLink": ".prevnext[rel='next']", - "pageElement": ".row>.col-video", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-5px!important}" - }, - { - "name": "BuzzAV - photo", - "example": "https://www.buzzav.com/photo/3972/", - "url": "^https?://www\\.buzzav\\.com/photo/\\d+", - "init": "document.querySelector('.thumb-overlay>a').removeAttribute('href');", - "nextLink": "//a[text()='Next']", - "pageElement": ".img-responsive-mw", - "replaceElement": ".float-right", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "BuzzAV - album", - "example": "https://www.buzzav.com/album/260/jk", - "url": "^https?://www\\.buzzav\\.com/album/\\d+", - "nextLink": ".page-item.active+li>a", - "pageElement": ".row>.col-12>.row.content-row", - "replaceElement": ".pagination,.well-info", - "pageBar": 0 - }, - { - "name": "BuzzAV", - "example": "https://www.buzzav.com/videos", - "url": "^https?://www\\.buzzav\\.com/(videos|albums)", - "nextLink": ".page-item.active+li>a", - "pageElement": ".content-left>.row.content-row", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "JAVMOST", - "example": "https://www.javmost.cx/category/uncensor/", - "url": "^https?://\\w+\\.javmost\\.[a-z]{2,3}/", - "nextLink": ".pagination>li.active+li>a", - "pageElement": "#content-update", - "replaceElement": ".pagination,#nav-page", - "css": ".pagetual_pageBar{margin-top:-5px!important}" - }, - { - "name": "爱漫福利社", - "example": "https://jav889.xyz/", - "url": "^https?://jav889\\.[^/]+/", - "nextLink": "//li[span/@class='page-numbers current']/following-sibling::li[1]/a", - "pageElement": ".posts-wrapper", - "replaceElement": ".page-numbers", - "css": ".pagetual_pageBar{margin-top:-16px!important}" - }, - { - "name": "MOVIEFFM", - "example": "https://www.movieffm.net/category/hd-uncensored/", - "url": "^https?://www\\.movieffm\\.net/", - "nextLink": "span.current+a", - "pinUrl": true, - "pageElement": "#archive-content,.items,.blog-list-items", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-25px!important}" - }, - { - "name": "258PORN", - "example": "http://www.258porn.com/list/%E6%97%A5%E9%9F%93%E7%84%A1%E7%A2%BC/0.html", - "url": "^https?://www\\.258porn\\.com/", - "nextLink": ".next-page>a", - "pageElement": ".excerpts-wrapper", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-30px!important}" - }, - { - "name": "CCAVB", - "example": "https://ccavb.tv/category/%E6%9C%80%E6%96%B0%E4%B8%8A%E5%82%B3", - "url": "^https?://ccavb\\.tv/", - "init": "document.querySelectorAll('div.__mantine-ref-control').forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 200)')})", - "nextLinkByJs": "let next=doc.querySelector('[aria-current]+button[tabindex]');if(next)return location.origin+location.pathname.replace(/\\/\\d+$/,'')+'/'+next.textContent;", - "pageElement": "//div[div/a/div/figure]", - "insert": "//div[div/div/div/a/div/figure][2]", - "insertPos": 2, - "replaceElement": "[role='navigation']", - "pageAction": "let ge=e=>document.querySelector(e);let url=location.pathname.replace(/\\/\\d+$/,'');setTimeout(()=>{let bs=document.querySelectorAll(`button[tabindex='0']`);bs.forEach(button=>{let link=url+'/'+button.textContent;let lh=`location.href='${link}'`;button.setAttribute('onclick',lh)});let pb=ge(`button[aria-disabled='false']:first-child`);let nb=ge(`button[aria-disabled='false']:last-child`);let cp=ge('[aria-current]').textContent;let pn=cp-1;if(pb){let link=url+'/'+pn;let lh=`location.href='${link}'`;pb.setAttribute('onclick',lh)}if(nb){let nn=ge('[aria-current]+button[tabindex]').textContent;let link=url+'/'+nn;let lh=`location.href='${link}'`;nb.setAttribute('onclick',lh)}},1000)", - "css": "[style='margin-top:20px'],[style='margin-top: 20px;'],.mantine-SimpleGrid-root[style^='margin-bottom']>div:nth-child(1),[style='width:300px;height:190px;margin:0 auto'],[style='width: 300px; height: 190px; margin: 0px auto;'],#__next>.mantine-Stack-root{display:none!important}.mantine-Container-root .mantine-Image-image{margin: 0 auto !important;width: auto!important;height: 210px!important}", - "pageBar": 0 - }, - { - "name": "Jav223", - "example": "https://www.jav223.com/?m=video_list*5*1", - "url": "^https?://www\\.jav223\\.com/", - "action": 1, - "nextLinkByJs": "let next = doc.querySelector('span.curwrpage+a'); if (next) return location.href.replace(/\\d+$/,'') + next.innerText", - "pageElement": ".video-content", - "waitElement": [ - "span.curwrpage" - ], - "replaceElement": "#wr-page", - "pageAction": "let ge=e=>document.querySelector(e);let url=location.search.replace(/\\d+$/,'');setTimeout(()=>{let as=document.querySelectorAll('a.wrpage_number');as.forEach(a=>{a.href=url+a.innerText});let hp=ge('a.wr_pagefirst');if(hp){hp.href=url+'1'}let ep=ge('a.wr_pageend');if(ep){let epn=ge('span.wr_pagefirst').innerText.match(/(\\d+)/)[1];ep.href=url+epn}let pp=ge('a.wr_pagepre');if(pp){let cp=ge('span.curwrpage').innerText;let cpn=cp-1;pp.href=url+cpn}let np=ge('a.wr_pagenext');if(np){let npn=ge('span.curwrpage+a').innerText;np.href=url+npn}},1000)", - "css": ".pagetual_pageBar{margin-top:-5px!important}" - }, - { - "name": "Avgle & AV01", - "example": "avgle.com,www.av01.tv", - "url": "^https?://(www\\.)?(avgle|av01)\\.(com|tv)/", - "nextLink": ".prevnext", - "pageElement": "//div[(div/div/a/div/@class='thumb-overlay') and @class='row']", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-9px!important}" - }, - { - "name": "GGJAV", - "example": "https://ggjav.com/main/uncensored", - "url": "^https?://ggjav\\.com/", - "nextLink": ".pager>a:last-child[href]", - "pageElement": ".item.columns:not(.native_ads), .columns.model_chunk", - "replaceElement": ".pager" - }, - { - "name": "Porn87", - "example": "https://porn87.com/", - "url": "^https?://porn87\\.com/", - "nextLink": ".pagination-next:not(.mobile_pagination)>a", - "pageElement": ".column:not(.native_ads)", - "replaceElement": ".pagination" - }, - { - "name": "porn78.info", - "example": "https://porn78.info/,https://nyaa.porn78.info/", - "url": "^https?://(nyaa\\.)?porn78.info/", - "action": 1, - "nextLink": ".next>a", - "pageElement": "#portfolio>li", - "replaceElement": ".general-pagination" - }, - { - "name": "JavDisk", - "example": "https://javdoe.to/,https://javfinder.li/", - "url": "^https?://(javdoe|javfinder)\\.[a-z]{2,3}/", - "action": 1, - "nextLink": "//a[text()='Next']", - "pageElement": ".videos-list", - "replaceElement": ".pagination" - }, - { - "name": "Javhd.today", - "example": "https://javhd.today/", - "url": "^https?://javhd\\.today/", - "nextLink": ".pagination>li.active+li>a", - "pageElement": "ul.videos,ul.playlists,div.models,[id^='blog']", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:10px!important}" - }, - { - "name": "JavBus / AVMOO", - "example": "https://www.javbus.com/,https://avmoo.click/tw", - "url": "^https?://(www\\.)?(javbus|avmoo)\\.(com|click)/", - "nextLink": "#next, .pagination>.active+li>a", - "pageElement": "#waterfall>.item", - "replaceElement": ".pagination", - "css": "#waterfall>.item {position: static !important; float: left !important; height: 400px !important;}", - "pageBar": 0 - }, - { - "name": "JavDB", - "example": "https://javdb.com/", - "url": "^https?://javdb\\.com/", - "nextLink": "a.pagination-next", - "pageElement": ".movie-list, #videos, #makers, #series, #actors>div", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:5px!important}" - }, - { - "name": "H 次元", - "example": "https://h-ciyuan.com/", - "url": "^https?://h-ciyuan\\.com/", - "nextLink": ".next", - "pageElement": ".gridview-posts", - "replaceElement": ".nav-links" - }, - { - "name": "Avbebe", - "example": "https://avbebe.com/", - "url": "^https?://avbebe\\.com/", - "nextLink": ".next", - "pageElement": ".jeg_block_container", - "replaceElement": ".jeg_block_navigation", - "css": ".pagetual_pageBar{margin-top:-16px!important}" - }, - { - "name": "Hentai Anime Zone / HentaiDLs / Hentai-Hot", - "example": "https://hentaianimezone.com/,https://hentaidls.com/,https://hentai-hot.com/", - "url": "^https?://(hentaianimezone|hentaidls|hentai-hot)\\.com/", - "nextLink": ".navigation>span+a,.nav-links>span.current+a,.pagi-nav span.pnext>a", - "pageElement": "#dle-content>article,.writemag-compact-post-wrapper,.skladchik-item", - "replaceElement": ".navigation,.nav-links,.pagi-nav", - "pageBar": 0 - }, - { - "name": "Latino Hentai", - "example": "https://latinohentai.com/", - "url": "^https?://latinohentai\\.com/", - "nextLink": ".current+a", - "pageElement": ".items", - "replaceElement": ".pagination" - }, - { - "name": "ACG RW", - "example": "https://www.acgrw.net/category/lifan/", - "url": "^https?://www\\.acgrw\\.net/", - "nextLink": "a.next", - "pageElement": ".uk-animation-slide-bottom-small", - "replaceElement": ".nav-links", - "pageInit": "doc.querySelectorAll('.media-content.scrollLoading:not(.ojbk)').forEach(div=>{div.style.backgroundImage=`url('${div.dataset.xurl}')`;div.classList.add('ojbk');div.removeAttribute('data-xurl')})" - }, - { - "name": "DaftSex - other", - "example": "https://daftsex.com/browse", - "url": "^https?://daftsex\\.com/", - "nextLink": "li.active+li>a", - "pageElement": ".video-item", - "replaceElement": ".pagination", - "pageInit": "doc.querySelectorAll('.video-thumb').forEach(div=>{div.style.backgroundImage=`url('${div.dataset.thumb}')`})", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "DaftSex - 首頁", - "example": "https://daftsex.com/", - "url": "^https?://daftsex\\.com/$", - "loadMore": ".more" - }, - { - "name": "YouJizz", - "example": "https://www.youjizz.com/", - "url": "^https?://www\\.youjizz\\.com/", - "action": 1, - "nextLink": ".pagination-next", - "pageElement": "//div[div[@class='video-thumb']]", - "replaceElement": ".pagination, .mobilePager", - "pageInit": "doc.querySelectorAll('video[preload]').forEach(e=>{e.src=e.parentNode.getAttribute('data-clip')})", - "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}let ps=gax(\"//div[div[@class='video-thumb']]\");let last=ps.length-1;ps[last].querySelectorAll('a.frame.video').forEach(a=>{a.onmouseenter=e=>{let v=a.querySelector('video');v.style='';v.setAttribute('loop','')};a.onmouseleave=e=>{let v=a.querySelector('video');v.style.display='none';v.removeAttribute('loop')}})" - }, - { - "name": "EPORNER Photo", - "example": "https://www.eporner.com/photo/02USX1vSH4e/8/", - "url": "^https?://[a-z]{2,3}\\.eporner\\.com/photo/", - "init": "let img = document.querySelector('.photohref>img[alt]');img.src = img.parentNode.href;", - "nextLink": "#photobitrighta", - "pageElement": "#gridphoto>.photohref,#gridphoto>.mainphoto", - "pageInit": "let img = doc.querySelector('.photohref>img[alt]');img.src = img.parentNode.href;", - "pageAction": "document.querySelectorAll('.photohref').forEach(e=>{e.outerHTML=e.innerHTML})", - "replaceElement": "#photobitlefta,#photobitrighta", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#photobitlefta,#photobitrighta{display:none!important}#gridphoto *{overflow: initial !important;position: initial !important;}img[alt]{max-width: 98% !important;display: block !important;margin: 0 auto !important;}" - }, - { - "name": "EPORNER", - "example": "https://www.eporner.com/", - "url": "^https?://[a-z]{2,3}\\.eporner\\.com/", - "nextLink": ".nmnext", - "pageElement": "#vidresults>[id],.photosgrid,main>.mbprofile", - "replaceElement": ".numlist2", - "pageAction": "EPtbnsStandardRebind()", - "css": ".pagetual_pageBar{margin-top:-15px!important}.photosgrid+.pagetual_pageBar{margin-top:10px!important}.mbprofile+.pagetual_pageBar{margin-top:0px!important}.mbphoto2+.pagetual_pageBar{display:none!important}" - }, - { - "name": "xHamster gallery2", - "example": "https://zh.xhamster.com/photos/gallery/15979608/513740284", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos/gallery/", - "exclude": ".gallery-list", - "nextLink": ".fotorama__arr--next", - "stopSign": [ - [ - ".photo-amounts-info", - "^(\\d+)" - ], - [ - ".photo-amounts-info", - "(\\d+)$" - ] - ], - "pageElement": ".fotorama__active>img", - "replaceElement": ".gallery-thumbs,.photo-amounts-info", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#photo_slider *{overflow: initial !important;position: initial !important;}.fotorama__stage{height:auto!important;}.fotorama__loaded--img:not(.fotorama__active){display:none!important}.fotorama__img {max-width: 98% !important;display: block !important;margin: 0 auto !important;}" - }, - { - "name": "xHamster gallery1 在清單頁面載入大圖", - "example": "https://zh.xhamster.com/photos/gallery/selfie-porn-pic-134-15984561,https://zh.xhamster.com/photos/gallery/selfie-porn-pic-122-15979608", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos/gallery/", - "include": ".gallery-list", - "pinUrl": true, - "init": "let F=new DocumentFragment();window.initials.photosGalleryModel.photos.forEach(e=>{let a=document.createElement('a');a.href=e.pageURL;let img=new Image();img.src=e.imageURL;a.appendChild(img);F.appendChild(a)});let E=document.querySelector('.gallery-list');E.innerHTML='';E.appendChild(F);", - "action": 1, - "waitElement": [ - "", - ".image-thumb:not([style])" - ], - "nextLink": ".next>a[href^='http']", - "pageElement": ".gallery-list", - "replaceElement": ".pager-section>[data-sync]", - "pageInit": "let code=Array.from(doc.scripts).find(s=>s.innerHTML.search(/initials/)>-1).innerHTML;let imgData=eval(code).photosGalleryModel.photos;let F=new DocumentFragment();imgData.forEach(e=>{let a=document.createElement('a');a.href=e.pageURL;let img=new Image();img.src=e.imageURL;a.appendChild(img);F.appendChild(a)});let E=doc.querySelector('.gallery-list');E.innerHTML='';E.appendChild(F);", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": ".gallery-list img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}" - }, - { - "name": "xHamster photos", - "example": "https://zh.xhamster.com/photos", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/photos", - "nextLink": "li.next>a", - "pageElement": ".thumb-list.gallery.thumb-list--sidebar", - "replaceElement": ".pager-section", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "xHamster channels", - "example": "https://zh.xhamster.com/channels", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/channels", - "nextLink": "li.next>a", - "pageElement": ".best-list-block>.width-wrap>.channels-thumbs", - "replaceElement": ".pager-section", - "rate": 3, - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "xHamster creators", - "example": "https://zh.xhamster.com/creators", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/creators", - "nextLink": "li.next>a", - "pageElement": ".best-list-block>.width-wrap>.thumb-container", - "replaceElement": ".pager-section", - "rate": 3, - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "xHamster pornstars", - "example": "https://zh.xhamster.com/pornstars", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/pornstars", - "nextLink": "li.next>a", - "pageElement": ".thumb-container", - "replaceElement": ".pager-section", - "rate": 3, - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "xHamster", - "example": "https://zh.xhamster.com/newest", - "url": "^https?://([a-z]{2}\\.)?xhamster\\.com/", - "exclude": ".fotorama__img", - "nextLink": "a[rel='next']", - "pageElement": ".thumb-list", - "replaceElement": ".pager-section", - "pageAction": "let gae=e=>document.querySelectorAll(e);let ps=gae('.thumb-list');let last=ps.length-1;ps[last].querySelectorAll('a[data-previewvideo]').forEach(a=>{a.onmouseenter=e=>{let v=document.createElement('video');v.setAttribute('loop','loop');v.setAttribute('autoplay','autoplay');v.setAttribute('playsinline','playsinline');v.setAttribute('webkitplaysinline','webkitplaysinline');v.setAttribute('src',a.getAttribute('data-previewvideo'));v.setAttribute('class','thumb-image-container__video');v.setAttribute('eid1','156');a.appendChild(v)};a.onmouseleave=e=>{a.querySelector('video').remove()}})" - }, - { - "name": "色色啦", - "example": "https://www.seselah.com/", - "url": "^https?://www\\.seselah\\.com/", - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.classList.add('loaded');e.previousElementSibling.setAttribute('srcset',e.previousElementSibling.getAttribute('data-srcset'))})", - "nextLink": "li.active+li>a", - "pageElement": "//div[a/div/picture]", - "replaceElement": ".pagination", - "pageInit": "doc.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.classList.add('loaded');e.previousElementSibling.setAttribute('srcset',e.previousElementSibling.getAttribute('data-srcset'))})", - "pageBar": 0 - }, - { - "name": "91Porn", - "example": "http://91porn.com/index.php", - "url": "^https?://(0118\\.)?(91porn|workarea7)\\.(com|live)/", - "nextLink": "//a[text()='»']", - "pageElement": ".row .row>div", - "replaceElement": "#paging", - "pageBar": 0 - }, - { - "name": "Thumbzilla", - "example": "https://www.thumbzilla.com/newest", - "url": "^https?://www\\.thumbzilla\\.com/", - "nextLink": ".page_next>a", - "pageElement": ".responsiveListing>li:not([id]", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "Tube8", - "example": "https://www.tube8.com/newest.html", - "url": "^https?://[a-z]{2,3}\\.tube8\\.com/", - "nextLink": "#pagination_next", - "pageElement": "#category_video_list .video_box, #result_container>.video_box, .sectionWrapper .video_box", - "replaceElement": "#pagination", - "lazyImgSrc": "data-thumb", - "pageBar": 0, - "css": "#home_page_wrapper>.sectionWrapper:nth-last-child(-n+3) {display: none;}" - }, - { - "name": "RedTube", - "example": "https://www.redtube.com/hot?cc=us", - "url": "^https?://www\\.redtube\\.com/", - "exclude": "#trending_country_section", - "nextLink": "#wp_navNext", - "pageElement": ".videoblock_list:not([id*='_vid_']):not([id*='_premium_']), .content_limit>ul>li.channel-box", - "replaceElement": "#w_pagination", - "pageAction": "let url=document.querySelector(\"script[src*='default-redtube.js']\").src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})", - "css": ".pagetual_pageBar{margin-top:0px!important;margin-bottom:0px!important}" - }, - { - "name": "YouPorn", - "example": "https://www.youporn.com/recommended/", - "url": "^https?://www\\.youporn\\.com/", - "pinUrl": true, - "nextLink": "li.current+li>a", - "pageElement": ".full-row-thumbs>[data-espnode='videobox'],.channelLists .full-row-channel,.all-erotica-section>.erotica-box,.fifteen-column .porn-star-list", - "replaceElement": "#pagination", - "pageBar": 0 - }, - { - "name": "Porned Up", - "example": "https://pornedup.com/", - "url": "^https?://pornedup.com/pics/\\d+/[^/]+/", - "nextLink": "a.control.next", - "pageElement": "div.main" - }, - { - "name": "PicHunter", - "example": "https://www.pichunter.com/", - "url": "^https?://www\\.pichunter\\.com/", - "enable": 0 - }, - { - "name": "PornHub photo", - "example": "https://cn.pornhub.com/photo/825175581", - "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/photo/\\d+", - "init": "let a=document.querySelector('.centerImage img[alt]').parentNode;a.outerHTML=a.innerHTML;", - "nextLink": ".arrowRight", - "stopSign": [ - [ - ".itemCount", - "(\\d+)$" - ], - [ - ".itemCount", - "^(\\d+)" - ] - ], - "pageElement": ".centerImage img[alt]", - "replaceElement": ".arrowLeft,.arrowRight,.thumbSliderButtons,.thumbSliderContent,.itemCount", - "pageBar": 0, - "css": ".arrowLeft,.arrowRight{display:none!important}#photoImageSection img{margin:0!important}" - }, - { - "name": "PornHub album", - "example": "https://cn.pornhub.com/albums,https://cn.pornhub.com/album/10042641", - "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/album", - "pinUrl": true, - "nextLink": ".page_next:not(.disabled)>a", - "pageElement": ".photoAlbumListContainer,#albumListResults>*,.photosAlbumsListing,.albumList>*", - "replaceElement": ".paginationGated", - "pageInit": "doc.querySelectorAll('.js_lazy_bkg').forEach(div=>{div.style.backgroundImage=`url('${div.dataset.bkg}')`})", - "lazyImgSrc": "data-thumb_url", - "pageBar": 0 - }, - { - "name": "Pornhub", - "example": "https://cn.pornhub.com/", - "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/", - "exclude": [ - ".photoAlbumListContainer", - "#albumListResults", - ".photosAlbumsListing", - ".albumList", - ".centerImage img[alt]" - ], - "pinUrl": true, - "action": 1, - "nextLink": ".page_next:not(.disabled)>a", - "pageElement": "#singleFeedSection>.pcVideoListItem,#videoCategory>.pcVideoListItem,#videoSearchResult>.pcVideoListItem,.videoList,.homeSection", - "replaceElement": ".paginationGated" - }, - { - "name": "XVIDEOS", - "example": "https://www.xvideos.com/", - "url": "^https?://www\\.(xvideos|xnxx)\\.com/", - "nextLink": "//li[a/@class='active']/following-sibling::li[1]/a", - "pinUrl": true, - "pageElement": ".mozaique.cust-nb-cols", - "replaceElement": ".pagination", - "pageAction": "xv.thumb_block_initiator.init_listing()" - }, - { - "name": "麻豆村", - "example": "https://madoucun.com/", - "url": "^https?://madoucun\\.com/", - "include": ".hl-page-wrap", - "pageElement": ".hl-list-item", - "replaceElement": ".hl-page-wrap", - "pageInit": "doc.querySelectorAll('a[data-original]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.original}')`})" - }, - { - "name": "麻豆社,草麻豆", - "example": "https://madou.club/,https://xxxmadou.com/", - "url": "^https?://(madou|xxxmadou|)\\.(club|com)/", - "loadMore": ".ias_trigger>a" - }, - { - "name": "牛C網 - 列表", - "example": "https://niuc.icu/sex", - "url": "^https?://niuc[^/]+/(blog|sex|pornhub|apps)", - "init": "document.querySelectorAll('a[data-src]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.src}')`})", - "nextLink": "span.current+a", - "pageElement": ".cat_list", - "replaceElement": ".posts-nav", - "pageInit": "doc.querySelectorAll('a[data-src]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.src}')`})", - "css": ".pagetual_pageBar{margin-top:-4px!important}#search+div.row.mb-4,#content>.slide-blog.mb-4{display:none!important}" - }, - { - "name": "牛C網 - 看圖", - "example": "https://niuc.icu/78111.html", - "url": "^https?://niuc[^/]+/\\d+\\.html", - "init": "document.querySelectorAll('a.js').forEach(e=>{e.outerHTML=e.innerHTML})", - "nextLink": "span+a", - "pageElement": "div.panel-body.single.mt-2 > p", - "replaceElement": ".page-nav", - "css": ".alignnone,p{margin:0!important}.post-apd{display: none!important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "牛C網 - 正文", - "example": "https://niuc.icu/67307.html", - "url": "^https?://niuc[^/]+/\\d+\\.html", - "exclude": ".page-nav", - "nextLink": ".nav.previous>a", - "pageElement": ".panel.card,.single-top-area.text-sm.card.mt-4", - "replaceElement": ".near-navigation.rounded.mt-4.py-2", - "pageAction": "let ps=document.querySelectorAll('.panel.card');let last=ps.length-1;ps[last].querySelectorAll('script').forEach(e=>{eval(e.innerHTML)})", - "css": "#content>main>div.content-wrap>div>h4,h4+div,#comments.comments,.post-apd{display: none!important;}.pagetual_pageBar{margin-top:0px!important;margin-bottom:1rem!important}" - }, - { - "name": "HPJAV", - "example": "https://hpav.tv/ja/category/uncensored", - "url": "^https?://(hpav|hpjav)\\.tv/", - "init": "document.querySelectorAll('img[data-original]').forEach(img=>{img.src=img.getAttribute('data-original')})", - "nextLink": "li.active+li>a", - "pageElement": ".post-list>*,.models-list>.col-md-2", - "replaceElement": "nav>.pagination", - "pageBar": 0 - }, - { - "name": "CableAV", - "example": "https://cableav.tv/playlist/lk4cv1f3j1v/", - "url": "^https?://cableav\\.tv/", - "nextLink": "span.current+a", - "pageElement": ".blog-items>article", - "replaceElement": ".wp-pagenavi", - "pageBar": 0 - }, - { - "name": "肉漫屋 - 閱讀", - "example": "https://rouman5.com/books/354b56da-1ab9-4909-9330-743842c5a5bf/0", - "url": "^https?://rouman[0-9]{1,2}\\.[a-z]{3}/books/[^/]+/", - "history": 2, - "action": 2, - "init": "document.querySelector(\"div[class^='id_chapterRoot']\").setAttribute('style','padding-right:0px!important;padding-left:0px!important;');", - "nextLink": "//a[text()='下一頁']", - "pageElement": "//div[div/img[@id]]", - "replaceElement": "div[class^='id_pagination']", - "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}let p=gax(\"//*[@class='pagetual_pageBar']\");if(p.length>1){if(gax('//div[div/img[@id]]').length>0){gax(\"//div[div/img[@id]]/preceding-sibling::*[not(contains(@class,'id_pagination'))]\").forEach(e=>{e.remove()});gax('//div[div/img[@id]]')[0].remove()}gax('//iframe')[0].remove();p[0].remove()}", - "pageBarText": 1, - "css": "inIframe:nav.navbar,#__next>div[class^='footer'],.row,div[class^='id_pagination']{display:none!important}.container{padding-right:0px!important;padding-left:0px!important;max-width: 800px!important;}" - }, - { - "name": "肉漫屋", - "example": "https://rouman5.com/books,https://rouman01.xyz/books", - "url": "^https?://rouman\\d{1,2}\\.[a-z]{3}/", - "include": "div[class^='pagination']", - "nextLink": "//a[text()='下一頁']", - "pageElement": "ul[class^='books_list']>li", - "replaceElement": "div[class^='pagination']", - "pageBar": 0 - }, - { - "name": "肉視頻", - "example": "https://rouv01.xyz/t/%E6%8E%A2%E8%8A%B1", - "url": "^https?://(rouv\\d+|rou)\\.(xyz|video)/(t|v|search)", - "pinUrl": true, - "nextLink": "//a[text()='下一頁']", - "pageElement": ".grid-cols-2>.shadow", - "replaceElement": ".bg-white.px-4.py-3", - "pageBar": 0, - "css": ".col-span-2.md\\:col-span-1{display:none!important}" - }, - { - "name": "jav9999", - "example": "https://jav9999.com/uded/1", - "url": "^https?://jav9999\\.com/(1|uded|amateur|chinese|actress|wuman|search)?", - "nextLink": "//a[text()='下一頁']", - "pageElement": ".yps>.yp", - "replaceElement": ".row+.ad-list+.row.text-center.fanye>ul.text-center", - "pageBar": 0 - }, - { - "name": "onejav.com", - "example": "https://onejav.com/new", - "url": "^https?://onejav\\.com/(new|popular|tag|actress|search)", - "nextLink": "//a[text()='Next']", - "pageElement": "div.card.mb-3,.columns.is-multiline", - "replaceElement": "nav.pagination", - "css": ".pagetual_pageBar {margin-top: -10px !important;margin-bottom: 21px !important;}" - }, - { - "name": "onejav.com - 首頁", - "example": "https://onejav.com/", - "url": "^https?://onejav\\.com/$", - "loadMore": "#button-load-more" - }, - { - "name": "女神社", - "example": "https://nshens.com/,https://inewgirl.com/", - "url": "^https?://(nshens\\.com|inewgirl\\.com)/", - "include": ".v-pagination", - "pageElement": ".justify-start>.col" - }, - { - "name": "微圖坊 - 看圖", - "example": "https://www.v2ph.com/album/SSA-392", - "url": "^https?://(www\\.)?v2ph\\.(com|net|ovh)/album/", - "nextLink": ".active.page-item+li>a", - "pageElement": "div.album-photo", - "replaceElement": ".pagination", - "pageBar": 0, - "css": ".album-photo,.photos-list img{opacity:1 !important;position:unset !important;padding:0 !important}" - }, - { - "name": "微圖坊 - 分類", - "example": "https://www.v2ph.com/country/taiwan", - "url": "^https?://(www\\.)?v2ph\\.(com|net|ovh)/", - "nextLink": ".active.page-item+li>a", - "pageElement": "//div[(div/div/div/a/@class='media-cover') and contains(@class,'albums-list')]", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar {margin-top: 5px!important;}.pagetual_pageBar+div {margin-top: -8px!important;}img{opacity:1!important}" - }, - { - "name": "美图乐 - 分類", - "example": "https://www.meitule.cc/i/", - "url": "^https?://www\\.meitule\\.cc/", - "pageElement": ".list-item", - "replaceElement": ".page", - "css": ".list-img img{opacity:1!important}" - }, - { - "name": "極品性感美女 - 搜索", - "example": "https://www.xgmn01.com/plus/search/index.asp?keyword=XiuRen", - "url": "^https?://[^/]+/plus/search/index\\.asp\\?keyword=", - "include": "body>.container>.container+font>font>font>.list>.list>.node+.pagination", - "nextLink": ".current+a", - "pageElement": ".node", - "replaceElement": ".node+.pagination", - "css": ".pagetual_pageBar {margin-top: -5px !important;margin-bottom: 15px !important;}" - }, - { - "name": "極品性感美女 - 看圖", - "example": "https://www.xgmn01.com/Xiuren/Xiuren23112.html", - "url": "^https?://[^/]+/\\w+/\\w+\\.html", - "include": [ - "body>section.container>div.content-wrap>div.content>article.article-content img[alt]", - ".article-content>.pagination", - "//div[@class='content']//a[text()='极品性感美女']" - ], - "action": 1, - "nextLink": ".current+a", - "pageElement": ".article-content img[alt]:not([width])", - "replaceElement": ".pagination", - "pageBar": 0, - "pageAction": "document.querySelectorAll('article img[alt]').forEach(img=>{img.removeAttribute('title')})", - "initRun": 1, - "autoLoadNum": "0", - "css": ".article-content img[width],.article-content br{display:none!important}" - }, - { - "name": "極品性感美女 - 分類", - "example": "https://www.xgmn01.com/Xiuren/", - "url": "^https?://[^/]+/\\w+/", - "include": [ - "body>.container>.content-wrap>.content>.speedbar+.widget-title", - ".widget-title+.pagination", - "//div[@class='content']//a[text()='极品性感美女']" - ], - "nextLink": ".current+a", - "pageElement": ".widget-title", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-15px !important}" - }, - { - "name": "Nyaa", - "example": "https://sukebei.nyaa.si/", - "url": "^https?://(sukebei\\.)?nyaa\\.si/", - "nextLink": "a[rel='next'], li.next>a", - "pageElement": "table.torrent-list>tbody>tr", - "replaceElement": "ul.pagination" - }, - { - "name": "U9A9", - "example": "https://u9a9.net/", - "url": "^https?://u9a9\\.[a-z]{2,3}", - "nextLink": "li.active+li>a", - "pageElement": "table>tbody>tr", - "replaceElement": "nav>.pagination" - }, - { - "name": "Jerk-Off Instruction", - "example": "https://joi-me.com/lastnews/", - "url": "^https?://joi-me\\.com", - "action": "1", - "waitElement": [ - "article[style]" - ], - "nextLink": ".page_next>a", - "pageElement": "#container", - "replaceElement": ".navigation", - "pageBar": 0 - }, - { - "name": "Mixfemdomcc", - "example": "https://mixfemdomcc.com/lastnews/", - "url": "^https?://mixfemdomcc.com/", - "nextLink": ".nnext>a", - "pageElement": ".gray-block", - "replaceElement": ".basenavi", - "pageAction": "eval(document.querySelector('.gray-block>script').innerHTML)", - "pageBar": 0 - }, - { - "name": "Femdom", - "example": "https://femdomup.net/lastnews/", - "url": "^https?://femdomup\\.net/", - "nextLink": "//a[text()='Next']", - "pageElement": "article.shortstory", - "replaceElement": ".navigation", - "pageAction": "let url=document.querySelector(\"script[src*='cat.js']\").src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})", - "pageBar": 0 - }, - { - "name": "xstarshub", - "example": "https://xstarshub.com/", - "url": "^https?://xstarshub.com/", - "nextLink": "a.next", - "pageElement": ".posts-list>article", - "replaceElement": ".nav-links", - "pageBar": 0 - }, - { - "name": "New Videos", - "example": "https://watchporn.to/latest-updates/", - "url": "^https?://watchporn\\.to/", - "nextLink": "//a[text()='Next']", - "pageElement": ".list-videos", - "replaceElement": ".pagination", - "pageAction": "let url=document.querySelector(\"script[src*='main.min.js']\").src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})" - }, - { - "name": "SpankBang", - "example": "https://jp.spankbang.com/trending_videos/", - "url": "^https?://([a-z]{2}\\.)?spankbang\\.com/", - "pinUrl": true, - "nextLink": ".next:not(.disabled)>a,a.next", - "pageElement": ".video-list .video-item[id],#pornstars ul.results li", - "replaceElement": ".pagination", - "pageAction": "image_rotate('.video-rotate .thumb')", - "pageBar": 0 - }, - { - "name": "MISSAV", - "example": "https://missav.com/fc2", - "url": "^https?://missav.com/", - "nextLink": "a[rel='next']", - "pageElement": "//div[div/div/a/video] | //div[div/a/img[@data-src] and contains(@class,'shadow-lg')]", - "replaceElement": "nav.flex", - "pageBar": 0 - }, - { - "name": "愛污傳媒", - "example": "https://aiwucm.com/", - "url": "aiw", - "include": [ - "//title[contains(text(),'爱污传媒')]", - ".pagination.justify-content-center" - ], - "nextLink": "a[title='Go to next page!']", - "pageElement": ".grid.mx-auto.videos>.cell.video", - "replaceElement": ".pagination.justify-content-center", - "pageBar": 0 - }, - { - "name": "3xchina.net", - "example": "https://3xchina.net/category/chinese-av/", - "url": "^https?://3xchina\\.net/", - "nextLink": "//a[text()='Next']", - "pageElement": ".videos-list>article", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "fanxxx.net", - "example": "https://fanxxx.net/", - "url": "^https?://fanxxx\\.net/", - "nextLink": "a[rel='next']", - "pageElement": ".video-list", - "replaceElement": ".pagenavi", - "pageBar": 0 - }, - { - "name": "JAVDAY", - "example": "https://javday.tv/category/uncensored-leaked/", - "url": "^https?://javday\\.tv/(category|search)/", - "nextLink": ".layui-laypage-next", - "pageElement": ".videoGroup .video-wrapper .col-style.loaded", - "replaceElement": "div.av", - "pageBar": 0 - }, - { - "name": "AV RBO", - "example": "https://avbro.top/index.php/vod/type/id/12.html", - "url": "^https?://avbro\\.top/index\\.php/vod/", - "nextLink": ".page>li.active+li>a", - "pageElement": ".vodlist.clearfix", - "replaceElement": ".page", - "pageAction": "document.querySelectorAll('a[data-original]').forEach(a=>{a.style.backgroundImage=`url('${a.dataset.original}')`})", - "pageBar": 0 - }, - { - "name": "AVPRO - 搜索", - "example": "https://avpro.cc/search?keyword=%E7%BE%8E%E5%A5%B3&page_id=1", - "url": "^https?://avpro\\.cc/search", - "nextLinkByUrl": [ - "(keyword=[^&]+)(&page_id=(\\d+))?$", - "$1&page_id={($3.0||1)+1}", - "li.active+li>a:not([title='Last Page']" - ], - "pageElement": ".videos-latest-list>*", - "replaceElement": ".pagination,.showing_pages", - "pageAction": "let ge=e=>document.querySelector(e);setTimeout(()=>{let as=document.querySelectorAll('a.waves-effect:not([title])');let ls=location.search.replace(/&page_id=\\d+/,'');as.forEach(a=>{let p=a.innerText;let ap=ls+'&page_id='+p;a.href=ap;a.removeAttribute('onclick')});let fp=ge(`a[title='First Page']`);fp.href=ls;fp.removeAttribute('onclick');let cp=ge('li.active>a').innerText;let app=ge(`a[title='Previous Page']`);if(app!=null){let pp=cp-1;app.href=ls+'&page_id='+pp;app.removeAttribute('onclick')}let np=ge('li.active+li>a').innerText;let anp=ge(`a[title='Next Page']`);if(anp!=null){anp.href=ls+'&page_id='+np;anp.removeAttribute('onclick')}let lp=ge('.showing_pages').innerText;let match=lp.match(/of (\\d+)/);let alp=ge(`a[title='Last Page']`);alp.href=ls+'&page_id='+match[1];alp.removeAttribute('onclick')},1000)", - "pageBar": 0 - }, - { - "name": "AVPRO", - "example": "https://avpro.cc/videos/category/847?page_id=1", - "url": "^https?://avpro\\.cc/", - "nextLink": "a[title='Next Page']", - "pageElement": ".videos-latest-list>*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "AV時間", - "example": "https://avtime.tv/category/28/", - "url": "^https?://avtime\\.tv/", - "nextLink": "//li[(span) and @class='page-item']/following-sibling::li[1]/a", - "pageElement": "//div[div/div/@class='img-box cover-md']", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "癡漢隊長", - "example": "https://javcaptain.com/uncensored", - "url": "^https?://javcaptain\\.com/(en/|ja/|zh/|ko/)?(rank/|series/)?(censored|uncensored|western|fc2|hanime|search)", - "nextLink": "a.page-link[rel='next']", - "pageElement": ".card-deck.row>.px-1", - "replaceElement": ".pagination.pagination-sm", - "pageBar": 0 - }, - { - "name": "Supjav", - "example": "https://supjav.com/ja/category/uncensored-jav", - "url": "^https?://supjav\\.com/(zh/|ja/)?(\\?s=|popular|category)", - "nextLink": "li.active+li>a", - "pageElement": ".posts.clearfix>*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "加勒逼A片網", - "example": "https://159i.com/video/", - "url": "^https?://159i\\.com/video/((category|search)/.+/)?$", - "nextLink": ".next>a", - "pageElement": "#content>.post.f", - "replaceElement": ".page-navigator", - "pageBar": 0 - }, - { - "name": "NETFLAV3", - "example": "https://netflav.com/all?genre=%E6%80%A7%E6%84%9F%E7%9A%84&page=2", - "url": "^https?://(www\\.)?netflav\\.com/all\\?(genre|actress)=.+(&page=\\d+)?$", - "init": "let gae=e=>document.querySelectorAll(e);let ds=document.querySelectorAll(\"div[class^='genre_filter_item']\");ds.forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});let as=document.querySelectorAll('.desktop_header_root>div>a.desktop_header_item:not([href=\"/\"])');as.forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});", - "action": 1, - "nextLinkByJs": "let next=doc.querySelector('a.active.item+a.item:not(.icon)');if(next)return location.origin+location.pathname+location.search.replace(/&page=\\d+/,'')+'&page='+next.getAttribute('value')", - "pageElement": ".video_grid_container>.grid_root>*", - "waitElement": [ - "a[aria-current='true']+a", - "div.lazyload-placeholder,.grid_cover.image:not(.fadeIn)" - ], - "replaceElement": ".general_pagination", - "rate": 3, - "pageAction": "setTimeout(()=>{let as=document.querySelectorAll('#general-pagination a');as.forEach(a=>{let link=location.search.replace(/&page=\\d+/,'')+'&page='+a.getAttribute('value');a.href=link})},200)", - "pageBar": 0 - }, - { - "name": "NETFLAV2", - "example": "https://netflav.com/uncensored?genre=FC2PPV", - "url": "^https?://(www\\.)?netflav\\.com/(censored|uncensored|chinese-sub|actress)\\?genre=[^&]+(&page=\\d+)?$", - "init": "let gae=e=>document.querySelectorAll(e);let ds=gae(\"div[class^='genre_filter_item']\");ds.forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});let as=gae('.desktop_header_root>div>a.desktop_header_item:not([href=\"/\"])');as.forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});", - "action": 1, - "nextLinkByJs": "let next=doc.querySelector('a.active.item+a.item:not(.icon)');if(next)return location.origin+location.pathname+location.search.replace(/&page=\\d+/,'')+'&page='+next.getAttribute('value')", - "pageElement": ".video_grid_container>.grid_root>*", - "waitElement": [ - "a[aria-current='true']+a", - "div.lazyload-placeholder,.grid_cover.image:not(.fadeIn)" - ], - "replaceElement": ".general_pagination", - "rate": 3, - "pageAction": "setTimeout(()=>{let as=document.querySelectorAll('#general-pagination a');as.forEach(a=>{let link=location.search.replace(/&page=\\d+/,'')+'&page='+a.getAttribute('value');a.href=link})},200)", - "pageBar": 0 - }, - { - "name": "NETFLAV1", - "example": "https://netflav.com/uncensored", - "url": "^https?://(www\\.)?netflav\\.com/(censored|uncensored|chinese-sub|actress)(\\?page=\\d+)?$", - "init": "let gae=e=>document.querySelectorAll(e);let ds=gae(\"div[class^='genre_filter_item']\");ds.forEach(div=>{div.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});let as=gae('.desktop_header_root>div>a.desktop_header_item:not([href=\"/\"])');as.forEach(a=>{a.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});", - "action": 1, - "nextLinkByJs": "let next=doc.querySelector('a.active.item+a.item:not(.icon)');if(next)return location.origin+location.pathname+'?page='+next.getAttribute('value')", - "pageElement": "//div[@class='video_grid_container']/div[contains(@class,'grid_root')]/* | //div[a[@href]/div/img[@class='ui image']]", - "waitElement": [ - "a[aria-current='true']+a", - "div.lazyload-placeholder,.grid_cover.image:not(.fadeIn)" - ], - "replaceElement": ".general_pagination", - "rate": 3, - "pageAction": "setTimeout(()=>{let as=document.querySelectorAll('#general-pagination a');as.forEach(a=>{let link=location.pathname+'?page='+a.getAttribute('value');a.href=link})},200)", - "pageBar": 0 - }, - { - "name": "avple.tv - 類別", - "example": "https://avple.tv/tags/135/1/date", - "url": "^https?://avple\\.tv/tags/\\d+/\\d+/\\w+$", - "action": 1, - "nextLinkByUrl": [ - "(/\\d+/)(\\d+)(/\\w+)$", - "$1{$2+1}$3", - "[aria-label='Go to next page']:not(.Mui-disabled)" - ], - "pageElement": ".jss23", - "replaceElement": ".jss15", - "waitElement": [ - ".lazyload-wrapper>img", - ".lazyload-placeholder" - ], - "pageInit": "doc.querySelectorAll('img.jss29').forEach(img=>{img.setAttribute('class','jss28');img.src=img.src})", - "pageAction": "let ge=e=>document.querySelector(e);setTimeout(()=>{let bs=document.querySelectorAll(`button[aria-label^='Go to page']`);let pp=ge(`button[aria-label='Go to previous page']:not(.Mui-disabled)`);let cp=ge('button.Mui-selected');let np=ge(`button[aria-label='Go to next page']:not(.Mui-disabled)`);let lp=location.pathname;let lps=lp.split('/');bs.forEach(button=>{let pn=button.textContent;let link='/'+lps[1]+'/'+lps[2]+'/'+pn+'/'+lps[4];let lh=`location.href='${link}'`;button.setAttribute('onclick',lh)});if(pp){let cpn=cp.textContent;let p=cpn-1;let link='/'+lps[1]+'/'+lps[2]+'/'+p+'/'+lps[4];let lh=`location.href='${link}'`;pp.setAttribute('onclick',lh)}if(np){let npn=cp.parentNode.nextSibling.textContent;let link='/'+lps[1]+'/'+lps[2]+'/'+npn+'/'+lps[4];let lh=`location.href='${link}'`;np.setAttribute('onclick',lh)}},1000)", - "css": ".lazyload-wrapper+span.jss28{display:none!important}" - }, - { - "name": "avple.tv - 搜索", - "example": "https://avple.tv/search?key=FC2PPV&page=1&sort=date", - "action": 1, - "url": "^https?://avple\\.tv/search\\?key=", - "nextLinkByUrl": [ - "(&page=)(\\d+)(&.+)$", - "$1{$2+1}$3", - "[aria-label='Go to next page']:not(.Mui-disabled)" - ], - "pageElement": ".jss23", - "replaceElement": ".jss15", - "waitElement": [ - ".lazyload-wrapper>img", - ".lazyload-placeholder" - ], - "pageInit": "doc.querySelectorAll('img.jss29').forEach(img=>{img.setAttribute('class','jss28');img.src=img.src})", - "pageAction": "let ge=e=>document.querySelector(e);setTimeout(()=>{let bs=document.querySelectorAll(`button[aria-label^='Go to page']`);let pp=ge(`button[aria-label='Go to previous page']:not(.Mui-disabled)`);let cp=ge('button.Mui-selected');let np=ge(`button[aria-label='Go to next page']:not(.Mui-disabled)`);let ls=location.search;let m=ls.match(/^(\\?key=)([^&]+)(&page=)(\\d+)(&sort=date|&sort=view_count|&sort=favorite)/);bs.forEach(button=>{let pn=button.textContent;let link=m[1]+m[2]+m[3]+pn+m[5];let lh=`location.href='${link}'`;button.setAttribute('onclick',lh)});if(pp){let cpn=cp.textContent;let p=cpn-1;let link=m[1]+m[2]+m[3]+p+m[5];let lh=`location.href='${link}'`;pp.setAttribute('onclick',lh)}if(np){let npn=cp.parentNode.nextSibling.textContent;let link=m[1]+m[2]+m[3]+npn+m[5];let lh=`location.href='${link}'`;np.setAttribute('onclick',lh)}},1000)", - "css": ".lazyload-wrapper+span.jss28{display:none!important;}" - }, - { - "name": "X5AV", - "example": "https://x5av.com/e/action/ListInfo/?classid=2", - "url": "^https?://x5av\\.com/(e|popular)/((action|search)/)?", - "pageElement": ".videos-container>*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "javbangers.com", - "example": "https://www.javbangers.com/latest-updates/", - "url": "^https?://www\\.javbangers\\.com/", - "include": ".pagination", - "nextLink": "li.page-current+li.page>a", - "pageElement": ".porntrex-box .video-item,.box .item", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "HOTGIRL.asia - 清單", - "example": "https://hotgirl.asia/genre/china/", - "url": "^https?://hotgirl\\.asia/(\\?s=|genre|tag|photos|livestream|china|korea|videos)(\\/)?", - "nextLink": "li.active+li>a", - "pageElement": ".vl-item,.movies-list,#myimg", - "replaceElement": "#pagination" - }, - { - "name": "HOTGIRL.asia - 寫真", - "example": "https://hotgirl.asia/imiss%e7%88%b1%e8%9c%9c%e7%a4%be-vol-693-lavinia%e8%82%89%e8%82%89/", - "url": "^https?://hotgirl\\.asia/[^/]+/", - "include": ".mx-auto", - "init": "document.querySelectorAll(\"img[alt][src^='data']\").forEach(e=>{e.parentNode.remove()})", - "nextLink": "li.active+li>a", - "pageElement": "//div[@class='galeria_img'][img[starts-with(@src,'http')]]", - "css": "#footer,#commentfb,.content-kuss{display: none!important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "imgasd", - "example": "https://imgasd.com/", - "url": "^https?://imgasd\\.com", - "nextLink": "a.active+a", - "pageElement": ".list>li", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "Taotuxp.com - 看圖", - "example": "https://www.taotucc.com/252555.html", - "url": "^https?://www\\.taotucc\\.com/\\d+\\.html", - "nextLink": ".pagelist>span+a", - "pageElement": "#post_content>p", - "replaceElement": ".pagelist", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "#post_content img{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0 auto !important}#content p{margin:0!important}" - }, - { - "name": "Taotuxp.com - 分類", - "example": "https://www.taotucc.com/", - "url": "^https?://www\\.taotucc\\.com/", - "nextLink": "a.current+a", - "pageElement": "#post_container", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-8px!important}" - }, - { - "name": "超级美女图库 - 手機版看圖", - "example": "https://m.2avtt.com/xiuren/56166.html", - "url": "^https?://m\\.[^/]+/", - "include": "//title[contains(text(),'超级美女图库')]", - "action": 1, - "init": "document.querySelectorAll('.wallpaper-container br').forEach(e=>{e.remove()});let a=document.querySelector('.wallpaper-container>a');a.outerHTML=a.innerHTML;", - "nextLinkByUrl": [ - "/([^_]+)(_(\\d+))?\\.html$", - "/$1_{$3+1}.html" - ], - "stopSign": [ - [ - ".title>h2>em", - "(\\d+)" - ], - [ - ".title>h2>i", - "(\\d+)" - ] - ], - "pageElement": ".wallpaper-container img", - "replaceElement": ".title>h2>em", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "strong,.wallpaper-container+div[align]{display:none!important}" - }, - { - "name": "超级美女图库 - 手機版分類", - "example": "https://m.2avtt.com/xingan/", - "url": "^https?://m\\.[^/]+/", - "include": "//title[contains(text(),'超级美女图库')]", - "nextLink": "//a[@class='last' and text()='下一页']", - "pageElement": "//div[(span) and @class='items']", - "replaceElement": "p.action", - "pageBar": 0 - }, - { - "name": "超级美女图库 - 看圖", - "example": "https://www.2avtt.com/xingan/54985.html", - "url": "^https?://[^/]+/", - "include": "//title[contains(text(),'超级美女图库')]", - "action": 1, - "init": "let a=document.querySelector('#nextPageTagA');a.outerHTML=a.innerHTML;", - "nextLink": "li.thisclass+li>a", - "pageElement": "#photoMain img[alt]", - "replaceElement": ".page,.local>span", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "css": "div[align='center']+div[align='center'],#photoMain br{display:none!important}" - }, - { - "name": "超级美女图库 - 分類", - "example": "https://www.2avtt.com/xingan/", - "url": "^https?://[^/]+/", - "include": "//title[contains(text(),'超级美女图库')]", - "nextLink": "li.thisclass+li>a", - "pageElement": "//div[@class='col-left-right'][div/div[@align='center']/following-sibling::div[1]/div[@class='item']]", - "replaceElement": ".page", - "css": ".pagetual_pageBar{margin-top:0px!important}" - }, - { - "name": "Xgirls - 看圖", - "example": "https://xgirlscollection.com/collection/2015", - "url": "^https?://xgirlscollection\\.com/", - "nextLink": "//a[i[@class='fa fa-angle-right']]", - "pageElement": "img[id].collection-image", - "replaceElement": ".pagination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "Xgirls - 分類", - "example": "https://xgirlscollection.com/collections", - "url": "^https?://xgirlscollection\\.com/", - "nextLink": "//a[i[@class='fa fa-angle-right']]", - "pageElement": "//div[@class='container']/div[@class='row']/div/div[div/div[@class='card-wrapper']/div[@class='card-img']/a/img][@class='row']/*", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "Porn Pics - 圖片清單載入大圖", - "example": "https://www.pornpics.com/galleries/brunette-asian-girl-yui-uehara-gives-a-blowjob-and-gets-fucked-by-two-knobs-29982680/", - "url": "^https?://www\\.pornpics\\.com/galleries/[^/]+/", - "include": "a[data-tid]", - "pinUrl": true, - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.parentNode.href})" - }, - { - "name": "优丝库HD - 分類", - "example": "https://yskhd.com/archives/category/xiuren/xiuren%e7%a7%80%e4%ba%ba%e7%bd%91?t", - "url": "^https?://yskhd\\.com/", - "include": ".pagination", - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.getAttribute('data-src')})", - "nextLink": "li.active+li>a", - "pageElement": ".posts", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar{margin-top:-8px!important}.grids{margin:0 -10px 0px!important}" - }, - { - "name": "心动美图 - 看圖", - "example": "https://www.wai77.com/xiuren%e7%a7%80%e4%ba%ba%e7%bd%91-no-5566-manuela%e7%8e%9b%e9%b2%81%e5%a8%9c-%e6%b7%a1%e7%bb%bf%e7%81%b0%e8%89%b2%e4%b8%8a%e8%a1%a3%e6%90%ad%e9%85%8d%e7%99%bd%e8%89%b2%e7%9f%ad%e8%a3%99/", - "url": "^https?://www\\.wai77\\.com/[^/]+/", - "init": "let fimgs=document.querySelectorAll('div[data-src]');let alts=document.querySelectorAll('#lightgallery img[alt]');let _img='';for(let i=0;i`};document.querySelector('#lightgallery').innerHTML=_img;", - "nextLink": "span.current+a", - "pageElement": "#lightgallery", - "replaceElement": ".single-nav-links", - "pageInit": "let fimgs=doc.querySelectorAll('div[data-src]');let alts=doc.querySelectorAll('#lightgallery img[alt]');let _img='';for(let i=0;i`};doc.querySelector('#lightgallery').innerHTML=_img;", - "css": ".cbox{display:block!important}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "心动美图 - 分類", - "example": "https://www.wai77.com/tag/%E7%A7%80%E4%BA%BA%E7%BD%91/", - "url": "^https?://www\\.wai77\\.com/(tag|category|\\?s=)", - "nextLink": "span.current+a", - "pageElement": "#recent-content>[id^='post']", - "replaceElement": ".nav-links", - "pageBar": 0 - }, - { - "name": "秀色女神 - 手機版看圖", - "example": "https://m.xsnvshen.co/album/39844?p=1", - "url": "^https?://m\\.xsnvshen\\.[a-z]{2,3}/album/\\d+(\\?p=\\d+)?", - "pinUrl": true, - "action": 1, - "init": "document.querySelectorAll('#arcbox img.nolazy').forEach(img=>{img.src=img.src.replace(/thumb[^/]+\\//,'');img.removeAttribute('style');img.parentNode.outerHTML=img.outerHTML});document.querySelectorAll('#arcbox img.lazy[alt]').forEach(img=>{img.src=img.getAttribute('data-original').replace(/thumb[^/]+\\//,'');img.removeAttribute('data-original');img.setAttribute('class','nolazy');img.removeAttribute('style');img.parentNode.outerHTML=img.outerHTML});", - "nextLink": "a.pg_next", - "pageElement": "#arcbox img[alt]", - "replaceElement": "#pageNum", - "pageInit": "doc.querySelectorAll('#arcbox img.nolazy').forEach(img=>{img.src=img.src.replace(/thumb[^/]+\\//,'');img.removeAttribute('style');});doc.querySelectorAll('#arcbox img.lazy[alt]').forEach(img=>{img.src=img.getAttribute('data-original').replace(/thumb[^/]+\\//,'');img.removeAttribute('data-original');img.removeAttribute('style');img.setAttribute('class','nolazy')});", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0", - "sleep": 5000, - "css": "#arcbox img[alt]{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0px auto !important}[id^='ad']{display:none!important}" - }, - { - "name": "秀色女神 - 分類", - "example": "https://www.xsnvshen.co/girl/", - "url": "^https?://www\\.xsnvshen\\.[a-z]{2,3}/", - "include": "#pageNum", - "nextLink": "a.active+a", - "pageElement": "//ul[li[contains(@class,'min')]/a[@class='itemimg']]", - "replaceElement": "#pageNum", - "pageBar": 0 - }, - { - "name": "X成人论坛 帖子內", - "example": "https://xbbs.me/thread/id-620bd15362b3d.html", - "url": "^https?://(tw\\.)?xbbs\\.me/thread/[^.]+\\.html", - "pinUrl": true, - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", - "nextLink": "a.next", - "pageElement": "//div[div[@class='xbbs-thread-content reply']]", - "insert": ".pager", - "insertPos": 1, - "replaceElement": ".pager" - }, - { - "name": "X成人论坛 帖子", - "example": "https://xbbs.me/forum/id-61fe70f2b9631.html", - "url": "^https?://(tw\\.)?xbbs\\.me/forum/[^.]+\\.html", - "nextLink": "a.next", - "pageElement": ".xbbs-item", - "replaceElement": [ - "div.article>div.pager:first-child", - "div.article>div.pager:last-child" - ], - "css": ".slider-ad,.push-top{display:none!important}" - }, - { - "name": "丽图·污漫画 - 閱讀", - "example": "https://litu100.xyz/comic/id-624428abcf548/1.html", - "url": "^https?://litu100\\.xyz/comic/id-\\w+/\\d+\\.html", - "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", - "nextLink": "a.next", - "pageElement": ".article.comic", - "pageInit": "doc.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", - "replaceElement": ".prevNext", - "pageBarText": "return doc.querySelector('.tag[checked=true]').innerText;", - "css": ".banner_ad{display:none!important}.pagetual_pageBar{margin-top:2px!important}" - }, - { - "name": "丽图·污漫画 - 分類", - "example": "https://litu100.xyz/comics.html", - "url": "^https?://litu100\\.xyz/", - "nextLink": "a.next", - "pageElement": ".list>.item", - "replaceElement": ".pager", - "css": "._728x90{display:none!important}" - }, - { - "name": "海棠小说网 - 手机阅读", - "example": "https://m.haitangtxt.net/19/19363/1736943.html", - "url": "^https?://m\\.haitangtxt\\.net/", - "nextLink": "//a[contains(text(),'下一页') or contains(text(),'下一章')]", - "pageElement": ".content_title,#articlecontent", - "replaceElement": ".content_top,.novelbutton", - "pageBar": 0 - }, - { - "name": "海棠小说网 - 分类页", - "example": "https://m.haitangtxt.net/top/", - "url": "^https?://m\\.haitangtxt\\.net/", - "nextLink": "//a[text()='下一页' or text()='下页']", - "pageElement": ".articlegeneral,.full_content,.chapters>li", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "小黃書 - 成人小說閱讀", - "example": "https://tw.xchina.co/fiction/id-64036d06046a5/1.html", - "url": "^https?://(tw\\.)?xchina\\.co/fiction/id-\\w+/\\d+\\.html", - "nextLink": "a.next", - "pageElement": ".article.large", - "replaceElement": ".prevNext", - "css": ".banner_ad{display:none!important}" - }, - { - "name": "小黃書 - 模特、小說目錄", - "example": "https://tw.xchina.co/fiction/id-64036d06046a5.html,https://tw.xchina.co/model/id-605849cd980ad.html", - "url": "^https?://(tw\\.)?xchina\\.co/(fiction|model)/id-\\w+\\.html", - "pinUrl": true, - "nextLink": "0", - "css": ".aside>.center,.banner_ad{display:none!important}" - }, - { - "name": "小黃書 - 搜索", - "example": "https://tw.xchina.co/search/keyword-%E4%B8%9D%E8%A2%9C/mode-photo.html", - "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/search/", - "init": "let bs = document.querySelector('body[style]');if(bs)bs.removeAttribute('style');", - "nextLink": "a.next", - "pageElement": ".article.result>.list", - "replaceElement": [ - "div.article:not(.result)+div.pager", - "div.article.result+div.pager" - ], - "css": ".pagetual_pageBar+div{margin-top:-5px !important;}.slider-ad,.jquery-modal.blocker.current,.article.ad,.body>*:not(.article):not(.pager),.banner_ad{display:none!important}", - "rate": 3 - }, - { - "name": "小黃書 - 原圖瀏覽", - "example": "https://tw.xchina.co/photoShow.php?server=1&id=6311c6080f9a5&index=0&pageSize=19&title=%E3%80%90%E6%9C%AA%E5%88%86%E9%A1%9E%E4%BA%BA%E9%AB%94%E6%94%9D%E5%BD%B1%E3%80%91%E9%87%91%E9%AD%9Akinngyo%E3%80%8A%E5%A4%8F%E6%97%A5%E5%8D%88%E5%BE%8C%E3%80%8B", - "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/photoShow\\.php", - "action": 1, - "nextLink": "//div[@class='image']/a[3][i[@class='fa fa-arrow-right right']][not(starts-with(@href,'java'))]", - "pageElement": ".container > img", - "replaceElement": ".image>.index,.image>a", - "css": ".image>a:nth-child(3),.image>a:nth-child(4),body>.image~*:not([id^='pv-']):not([class^='pv-']):not(.pagetual_tipsWords){display: none!important;}.container>img {max-width: 100% !important;display: block !important;margin: 0 auto !important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "小黃書 - 圖片清單", - "example": "https://tw.xchina.co/photo/id-63d02a8cdaf75.html,https://8se.me/photo/id-63938c1972fde.html", - "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/photo/", - "include": "img.cr_only", - "pinUrl": true, - "action": 1, - "waitElement": [ - "img.cr_only" - ], - "nextLink": "a.next", - "pageElement": ".photos > a", - "replaceElement": [ - "div.article>div.pager:first-child", - "div.article>div.pager:last-child" - ], - "css": ".photos>div.item,.jquery-modal.blocker.current,.slider-ad,.article.ad,.pager>.tips,body>footer~*:not([id^='pv-']):not([class^='pv-']):not(.pagetual_tipsWords):not(.customPicDownloadMsg):not(#customPicDownload),.photoMask,.banner_ad{display: none!important;}", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "小黃書 - 分類", - "example": "https://tw.xchina.co/photos/kind-2.html,https://8se.me/photos/model-61be1af337a19.html", - "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.(co|me|pro)/(photos|videos|models|fictions|torrents)", - "exclude": "body>.image", - "init": "let bs = document.querySelector('body[style]');if(bs)bs.removeAttribute('style');", - "pinUrl": true, - "nextLink": "a.next", - "pageElement": ".list>.item:not(._300x250),.list>.fiction,.list>.torrent,.videos>.item", - "replaceElement": [ - "div.article>div.pager:first-child", - "div.article>div.pager:last-child" - ], - "rate": 3, - "css": ".pagetual_pageBar{margin-bottom:5px!important}.videos .pagetual_pageBar{margin-top:30px!important;margin-bottom:0px!important}.slider-ad,.article.ad,.jquery-modal.blocker.current,.banner_ad,.tips,.aside>.center,.item._300x250{display:none!important}" - }, - { - "name": "hitxhot - 寫真", - "example": "https://www.hitxhot.org/gallerys/TUNPcCtCSVhEMXNPZU52TWI2ZnB2Zz09.html", - "url": "^https?://www\\.hitxhot\\.org/gallerys/", - "action": 1, - "init": "let F=new DocumentFragment();document.querySelectorAll('.contentme img').forEach(e=>{let img=new Image();img.src=e.src;F.appendChild(img)});let E=document.querySelector('.contentme');E.innerHTML='';E.appendChild(F);", - "nextLink": "//a[contains(text(),'Next')]", - "pageElement": ".contentme img", - "replaceElement": ".pag>.pagination-site,.c-denomination.s-denomination", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "hitxhot - 清單", - "example": "https://www.hitxhot.org/", - "url": "^https?://www\\.hitxhot\\.org/(\\?page=\\d+)?$", - "include": ".pag>.pagination-site", - "nextLink": "//a[contains(text(),'Next')]", - "pageElement": ".videos>.thumb-view", - "replaceElement": ".pag>.pagination-site", - "pageBar": 0 - }, - { - "name": "女神研究所", - "example": "https://www.simracingzone.net/", - "url": "^https?://www\\.simracingzone\\.net/", - "nextLink": "span.current+a", - "pageElement": "#index_ajax_list>*", - "replaceElement": ".nav-links", - "pageBar": 0 - }, - { - "name": "秘图社", - "example": "https://www.sssins.com/,https://www.nicesss.com/", - "url": "^https?://www\\.(sssins|nicesss)\\.com/", - "nextLink": "//li[span[@aria-current='page']]/following-sibling::li[1]/a", - "pageElement": ".posts-wrapper>*", - "replaceElement": "ul.page-numbers", - "pageBar": 0 - }, - { - "name": "YINGPIAN影片社", - "example": "https://yingpian89.com/", - "url": "^https?://(yingpian89|69avfilm).com/", - "nextLink": "a[rel='next'],.nav-previous>a", - "pageElement": "div[id^='post-']", - "replaceElement": ".wp-pagenavi", - "wait": "let img=doc.querySelector('#content img');return img!=null", - "rate": 3, - "pageBar": 0 - }, - { - "name": "國模網", - "example": "https://gm23.xyz/", - "url": "^https?://gm\\d+\\.xyz/", - "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.dataset.src})", - "nextLink": "a.next", - "pageElement": "#main > article", - "replaceElement": "#nav-below", - "pageBar": 0 - }, - { - "name": "性趣套圖 - 搜索", - "example": "https://myjkwd.com/e/search/result/?searchid=7898", - "url": "^https?://myjkwd\\.com/e/search/", - "nextLink": "//a[text()='下一页']", - "pageElement": "h2.r,table[width^='8']", - "replaceElement": ".list_page", - "css": "table.nav,table[width^='8'] tr:nth-child(1){display:none!important;}td{font:12px/1.5 Verdana,Arial,Helvetica,sans-serif,'微软雅黑'!important}", - "pageBar": 0 - }, - { - "name": "性趣套圖 - 看圖", - "example": "https://myjkwd.com/e/action/ShowInfo.php?classid=1&id=23726", - "url": "^https?://myjkwd\\.com/e/action/ShowInfo\\.php", - "pinUrl": true, - "init": "let ge=e=>document.querySelector(e);let e=ge('.entry');e.innerHTML=e.innerHTML.replace('\">','');document.addEventListener('keydown',(e)=>{let key=window.event?e.keyCode:e.which;if(key=='39'){let n=ge('.nextinfo a');if(n)n.click()}});document.addEventListener('keydown',(e)=>{let key=window.event?e.keyCode:e.which;if(key=='37'){let p=ge('.nextinfo p:last-child a');if(p)p.click()}});", - "nextLink": ".pageLink b+a", - "pageElement": ".entry img", - "replaceElement": ".pageLink", - "pageBar": 0, - "rate": 10, - "css": "aside.side,.pageLink{display:none!important;}.main-content{margin-left:0px!important;}" - }, - { - "name": "性趣套圖 - 列表", - "example": "https://myjkwd.com/e/action/ListInfo/?classid=1", - "url": "^https?://myjkwd.com/e/action/ListInfo", - "nextLink": "//a[text()='下一页']", - "pageElement": ".bloglist > ul", - "replaceElement": ".pageLink", - "css": ".pagetual_pageBar{width:98.6%!important;}aside.side{display:none!important;}.main-content{margin-left:0px!important;}body{background:#EDEDED!important;}", - "initRun": 1, - "autoLoadNum": 1 - }, - { - "name": "雅拉伊", - "example": "https://www.yalayi.com/gallery/", - "url": "^https?://www\\.yalayi\\.com/", - "action": 1, - "nextLink": "//a[text()='下一页']", - "pageElement": "//ul[li/div[@class='img-box']] | //div[@class='girls']/ul", - "replaceElement": ".pages", - "css": ".pagetual_pageBar{margin-top:-10px!important;margin-bottom:0px!important}" - }, - { - "name": "Bookshop.tw", - "example": "https://www.bookshop.tw/", - "url": "^https?://www\\.bookshop\\.tw", - "action": 1, - "waitElement": [ - "#url_ne[href$='htm']" - ], - "nextLink": "#url_ne[href$='htm']", - "pageElement": ".listbg0", - "replaceElement": "//td[a/@id='url_fr']", - "pageBar": 0 - }, - { - "name": "Mox.moe", - "example": "https://mox.moe/", - "url": "^https?://mox\\.moe", - "action": 1, - "nextLink": "//a[button/text()='下頁']", - "pageElement": ".listbg", - "replaceElement": "td.listtitle[colspan='5']", - "pageBar": 0 - }, - { - "name": "BOOK☆WALKER TW 更多", - "example": "https://www.bookwalker.com.tw/block/1", - "url": "^https?://www\\.bookwalker\\.com\\.tw/", - "nextLink": "//li[span/@class='active']/following-sibling::li[1]/a", - "pageElement": ".book_package", - "replaceElement": ".bw_main2 > div:first-child,.bw_main2 > div:last-child,.pagebar", - "initRun": 1, - "autoLoadNum": 4, - "pageBar": 0 - }, - { - "name": "BOOK☆WALKER TW", - "example": "https://www.bookwalker.com.tw/search?m=2&series_display=1&vertical=0&order=sell_desc&s=19", - "url": "^https?://www\\.bookwalker\\.com\\.tw/search", - "nextLink": "//li[span/@class='active']/following-sibling::li[1]/a", - "pageElement": ".bookdesc2.clearfix,.row.listbox.clearfix+.row.mar0pad0", - "replaceElement": ".bw_main2 > div:first-child,.bw_main2 > div:last-child,.pagebar", - "initRun": 1, - "autoLoadNum": 2, - "pageBar": 0 - }, - { - "name": "BOOK☆WALKER JP - 手機版", - "example": "https://bookwalker.jp/new/?qsto=st2", - "url": "^https?://bookwalker\\.jp/(category|search|new)/", - "include": ".o-pager-box", - "nextLink": "li.o-select-box+li>a", - "pageElement": ".o-tile-list>.o-tile", - "replaceElement": ".o-pager-box", - "pageBar": 0, - "rate": 3 - }, - { - "name": "BOOK☆WALKER JP", - "example": "https://bookwalker.jp/new/?qsto=st2", - "url": "^https?://bookwalker\\.jp/(category|search|new)/", - "include": ".o-list--menu,.o-list--footer", - "nextLink": ".o-pager-next>a", - "pageElement": ".o-contents-section__body .m-tile", - "replaceElement": [ - ".o-list--menu", - ".o-list--footer" - ], - "pageBar": 0 - }, - { - "name": "优书网 - 書籍分類", - "example": "https://www.yousuu.com/booklists/?type=man", - "url": "^https?://www\\.yousuu\\.com/(bookstore|booklists)/", - "action": 1, - "waitElement": [ - "", - ".loadingBlock" - ], - "init": "setTimeout(()=>{document.querySelectorAll('label.tab').forEach(e=>{e.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});document.querySelectorAll('h1>span').forEach(e=>{e.setAttribute('onclick','setTimeout(()=>{location.reload()}, 100)')});},1000)", - "nextLinkByJs": "let next=doc.querySelector('li.number.active+li.number');if(next)return location.origin+location.pathname+location.search.replace(/&page=\\d+$/,'')+'&page='+next.innerText", - "pageElement": ".booklist-card", - "replaceElement": ".pagination", - "pageAction": "let ge=e=>document.querySelector(e);let gae=e=>document.querySelectorAll(e);let lsr=location.search.replace(/&page=\\d+$/,'');setTimeout(()=>{gae('.number:not(.active)').forEach(e=>{let ls=lsr+'&page='+e.innerText;let link=`location.href='${ls}'`;e.setAttribute('onclick',link)});let pb=ge('.btn-prev');let nb=ge('.btn-next');let c=ge('.number.active');let n=ge('.number.active+.number');if(n){let ls=lsr+'&page='+n.innerText;let link=`location.href='${ls}'`;nb.setAttribute('onclick',link)}if(c.innerText>1){let p=c.innerText-1;let ls=lsr+'&page='+p;let link=`location.href='${ls}'`;pb.setAttribute('onclick',link)}},200)", - "pageBar": 0 - }, - { - "name": "www.shoujixs.net_手机小说 - 阅读", - "example": "https://www.shoujixs.net/shoujixs_161450_40736191.html", - "url": "^https?://www\\.shoujixs\\.net/\\w+\\.html$", - "history": 2, - "nextLink": "//a[text()='下一章' and contains(@href,'html')]", - "pageElement": "//div[@class='bookname']/h1 | //div[@id and p]", - "replaceElement": ".bottem1,.bottem2", - "pageBar": 0, - "css": "[id]+h1{padding-top:10px;text-align:center}" - }, - { - "name": "www.shoujixs.net_手机小说 - 分类页", - "example": "https://www.shoujixs.net/xhqh/", - "url": "^https?://www\\.shoujixs\\.net/", - "nextLink": "#pagelink strong+a:not([class])", - "pageElement": ".shoujixsl li,.c_row", - "replaceElement": "#pagelink" - }, - { - "name": "博仕書屋手機版 - 閱讀", - "example": "https://m.77z5.com/boshi/28_28437/14990400.html", - "url": "^https?://m\\.(boshisw|77z5)\\.com/boshi/\\w+/[0-9_]+\\.html", - "history": 2, - "nextLink": "#pt_next", - "pageElement": "header#top,#chaptercontent", - "replaceElement": "head>title,.Readpage", - "pageBar": 0, - "css": "#chaptercontent p[style],#chaptercontent p[style]+p,#chaptercontent+#top a,[style='text-align: left;color: #028aa0;font-size: 18px;font-weight:bold;']{display: none!important;}#chaptercontent+#top{height:30px!important;line-height:30px!important}", - "initRun": 1, - "autoLoadNum": 1 - }, - { - "name": "博仕書屋手機版 - 小說章節", - "example": "https://m.77z5.com/boshi/28_28437/all.html", - "url": "^https?://m\\.(boshisw|77z5)\\.com/boshi/\\w+/(all|p\\d+)\\.html", - "init": "let b = document.querySelector('body');b.innerHTML = b.innerHTML.replace(/
    \\n\\w+<\\/b>[^<]+[^<]+<\\/b>[^<]+\\d+<\\/b>
    /,'');", - "nextLink": "//a[text()='下一页']", - "pageElement": "//div[@id='chapterlist']/p[a/@title]", - "replaceElement": ".listpage", - "pageBar": 0, - "css": "#chapterlist>p[style]{display:none!important;}" - }, - { - "name": "博仕書屋手機版 - 書籍分類", - "example": "https://m.77z5.com/boshi/quanben.html", - "url": "^https?://m\\.(boshisw|77z5)\\.com/boshi/\\w+\\.html", - "nextLink": "//a[text()='下一页']", - "pageElement": "#main", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "博仕書屋 - 閱讀", - "example": "https://www.77z5.com/boshi/28_28437/14990400.html", - "url": "^https?://www\\.(boshisw|77z5)\\.com/boshi/\\w+/\\d+\\.html", - "history": 2, - "nextLink": "//a[text()='下一章']", - "pageElement": ".bookname>h1,#content", - "replaceElement": "head>title,.bottem1,bottem2", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", - "css": "table+h1,#content+h1,.bookname+h1{padding-top:20px;text-align:center}" - }, - { - "name": "博仕書屋 - 書籍分類", - "example": "https://www.77z5.com/boshi/xuanhuanqihuan/", - "url": "^https?://www\\.(boshisw|77z5)\\.com/(boshi|modules)/(xuanhuanqihuan|wuxiaxianxia|dushiyanqing|lishijunshi|kehuanlingyi|wangyoudongman|wanben|article)/", - "nextLink": "a.next", - "pageElement": "#newscontent>.l>h2,#newscontent>.l>ul,#content>table.grid #nr", - "replaceElement": ".page_b,.pages" - }, - { - "name": "歡喜冤家小說網 - 閱讀", - "example": "https://www.huanxiyuanjia.com/12_12849/5258090.html", - "url": "^https?://www.huanxiyuanjia.com/[0-9_]+/\\d+\\.html", - "init": "let gae=e=>document.querySelectorAll(e);gae('#TextContent>*:not(p):nth-child(n+1):nth-child(-n+999)').forEach(e=>{e.remove()});gae('#TextContent>p:nth-child(n+1):nth-child(-n+2)').forEach(e=>{e.remove()});let t=gae('#TextContent')[0];t.innerHTML=t.innerHTML.replace('huanxiyuanjia.com 欢喜冤家','');", - "action": 1, - "history": 2, - "nextLink": "#next_url", - "pageElement": "h1,#TextContent", - "replaceElement": "head>title,.mlfy_page+.mlfy_page", - "pageBar": 0, - "css": ".mlfy_main h1{padding-bottom:0px!important;border-bottom:none!important}#TextContent>p:nth-child(n+2):nth-child(-n+3){display: none!important;}", - "pageInit": "let gae=e=>doc.querySelectorAll(e);gae('#TextContent>*:not(p):nth-child(n+1):nth-child(-n+999)').forEach(e=>{e.remove()});gae('#TextContent>p:nth-child(n+1):nth-child(-n+2)').forEach(e=>{e.remove()});let t=gae('#TextContent')[0];t.innerHTML=t.innerHTML.replace('huanxiyuanjia.com 欢喜冤家','');", - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#TextContent');if(t.length>10){h[0].remove();t[0].remove()}" - }, - { - "name": "歡喜冤家小說網 - 書籍分類", - "example": "https://www.huanxiyuanjia.com/fenlei/xuanhuan/1/", - "url": "^https?://www.huanxiyuanjia.com/fenlei/", - "nextLink": "//a[text()='>>']", - "pageElement": "#sitebox", - "replaceElement": ".pages", - "pageBar": 0 - }, - { - "name": "筆趣閣bqg9527 - 手機版閱讀", - "example": "https://m.bqg9527.com/zh_hant/book/265472/194745565.html", - "url": "^https?://m\\.bqg9527\\.com/(zh_hant/)?book/\\d+/\\d+\\.html", - "action": 1, - "history": 2, - "nextLink": "//a[text()='下一章']", - "pageElement": "#nr_title,#nr.nr_nr", - "replaceElement": "head>title,.nr_page", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('#nr_title');let t=gae('#nr.nr_nr');if(t.length>10){h[0].remove();t[0].remove()}" - }, - { - "name": "筆趣閣bqg9527 - PC版閱讀", - "example": "https://www.bqg9527.com/zh_hant/book/265472/194745565.html", - "url": "^https?://www\\.bqg9527\\.com/(zh_hant/)?book/\\d+/\\d+\\.html", - "action": 1, - "history": 2, - "nextLink": "//a[text()='下一章']", - "pageElement": ".bookname>h1,#content", - "replaceElement": "head>title,.bottem1,.bottem2", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", - "css": ".read-top-ad{display:none!important}h1{font: 30px 黑体!important;text-align:center!important}" - }, - { - "name": "筆趣閣bqg9527 - 書籍分類", - "example": "https://www.bqg9527.com/sort/1/", - "url": "^https?://www\\.bqg9527\\.com/", - "include": "#newscontent", - "nextLink": "0" - }, - { - "name": "筆趣閣biqu86 - 閱讀", - "example": "https://www.biqu86.com/xiuzhen/3211/1.html", - "url": "^https?://(www|m)\\.biqu86\\.com/[a-z]+/\\d+/\\d+\\.html", - "action": 1, - "history": 2, - "nextLink": "//a[text()='下一章']", - "pageElement": ".bookname>h1,#content", - "replaceElement": "head>title,.bottem1,.bottem2", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", - "css": "#ifexplorer+h1,#content+h1{font:35px 雅黑;padding-top:20px;text-align:center}.read-top-ad{display:none!important}" - }, - { - "name": "筆趣閣biqu86 - 書籍分類", - "example": "https://www.biqu86.com/xuanhuan/", - "url": "^https?://(www|m)\\.biqu86\\.com/(xuanhuan|xiuzhen|chuanyue|dushi|lishi|wangyou|kehuan|xiaoshuodaquan)", - "action": 1, - "nextLink": "li.current+li>a", - "pageElement": ".l>ul", - "replaceElement": ".pages", - "css": "img{opacity:1!important}" - }, - { - "name": "和圖書手機版 - 目錄", - "example": "https://m.hetubook.com/book/5849/catalog-1.html", - "url": "^https?://m\\.(hetubook|hetushu)\\.com/book/\\d+/catalog-\\d+\\.html", - "nextLink": "//a[text()='下一頁']", - "pageElement": ".dir>dd:not([id])", - "pageBar": 0, - "initRun": 1, - "autoLoadNum": "0" - }, - { - "name": "和圖書手機版 - 閱讀", - "example": "https://m.hetubook.com/book/5849/4387851.html", - "url": "^https?://m\\.(hetubook|hetushu)\\.com/book2?/\\d+/\\d+\\.html", - "action": 1, - "history": 2, - "nextLink": "a#next", - "pageElement": ".title>h2,#content", - "waitElement": [ - "", - ".cmask" - ], - "replaceElement": "head>title,#spage", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.title>h2');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", - "css": ".body>h2{text-align:center!important;}" - }, - { - "name": "和圖書 -閱讀", - "example": "https://www.hetubook.com/book/5849/4387851.html", - "url": "^https?://www\\.(hetubook|hetushu)\\.com/book2?/\\d+/\\d+\\.html", - "action": 1, - "history": 2, - "nextLink": "a#next", - "pageElement": "#content", - "waitElement": [ - "", - ".mask.mask2" - ], - "replaceElement": "head>title,#right", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let t=gae('#content');if(t.length>10){t[0].remove()}", - "css": "body,#center,#cbox,#content {overflow: initial !important;position: initial !important;} #right,.sidebarbox{position: fixed !important;right: 0;}#content+#content{padding-top:-10px!important}" - }, - { - "name": "和圖書 -分類", - "example": "https://www.hetubook.com/book/index.php", - "url": "^https?://www\\.(hetubook|hetushu)\\.com/book2?/index\\.php", - "nextLink": "span.current+a", - "pageElement": "#list", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "同人圈 -閱讀", - "example": "http://tongrenquan.org/tongren/7070/1.html", - "url": "^https?://tongrenquan\\.org/tongren/\\d+/\\d+\\.html", - "pinUrl": true, - "history": 2, - "action": 1, - "nextLink": "//a[text()='下一章']", - "pageElement": ".read_chapterName,.read_chapterDetail", - "replaceElement": "head>title,.pageNav", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.read_chapterName');let t=gae('.read_chapterDetail');if(t.length>10){h[0].remove();t[0].remove()}", - "css": ".read_chapterName h1{font:24px 'Microsoft YaHei'!important}.read_chapterName{margin-top:25px!important;margin-bottom:15px!important}" - }, - { - "name": "同人圈 -分類", - "example": "http://tongrenquan.org/", - "url": "^https?://tongrenquan\\.org/", - "pinUrl": true, - "nextLink": ".page b+a", - "pageElement": ".books>.bk", - "replaceElement": ".page", - "pageBar": 0 - }, - { - "name": "69書吧 -閱讀", - "example": "https://www.69shu.com/txt/38161/26369110", - "url": "^https?://www\\.69shu\\.com/txt/\\d+/\\d+", - "history": 2, - "action": 1, - "nextLink": "//a[text()='下一章']", - "pageElement": ".txtnav", - "replaceElement": "head>title", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let t=gae('.txtnav');if(t.length>10)t[0].remove()" - }, - { - "name": "乐文小说网 -閱讀", - "example": "http://www.lewenlou.org/132/132683/41065575.html", - "url": "^https?://www\\.lewenlou\\.org/\\d+/\\d+/\\d+\\.html", - "history": 2, - "nextLink": ".next>a", - "pageElement": "//div[div[contains(@class,'content-body')]]", - "replaceElement": "head>title,.pager", - "pageAction": "let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;let t=gax(\"//div[div[contains(@class,'content-body')]]\");if(t.length>10){t[0].remove()}", - "pageBar": 0, - "css": ".chaptera,#pccontent_tip{display:none!important}" - }, - { - "name": "乐文小说网 - 分類", - "example": "http://www.lewenlou.org/list/1-1.html", - "url": "^https?://www\\.lewenlou\\.org/list/", - "nextLink": "li.active+li>a", - "pageElement": "//div[@class='panel-body'][div[contains(@class,'col-sm-index')]]", - "replaceElement": ".pagination", - "rate": 3, - "pageBar": 0 - }, - { - "name": "69書吧 - 書籍分類", - "example": "https://www.69shu.com/top/0.htm", - "url": "^https?://www\\.69shu\\.com/top/", - "nextLink": "0" - }, - { - "name": "次元姬小说 - 閱讀", - "example": "https://www.ciyuanji.com/chapter/5077_2227754.html", - "url": "^https?://www\\.ciyuanji\\.com/chapter/\\w+\\.htm", - "history": 2, - "nextLink": "//a[button[text()='下一章']]", - "pageElement": "[class^=chapter_title],[class^=chapter_list],[class^=chapter_article]", - "replaceElement": "head>title,[class^='chapter_footer']", - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('[class^=chapter_title]');let t=gae('[class^=chapter_article]');let l=gae('[class^=chapter_list]');if(t.length>10){h[0].remove();t[0].remove();l[0].remove()}", - "pageBar": 0, - "css": "[class^=chapter_article]+[class^=chapter_title]{padding-top:0px!important}" - }, - { - "name": "轻小说文库 - 閱讀", - "example": "https://www.wenku8.net/novel/1/1973/69567.htm", - "url": "^https?://www\\.wenku8\\.net/novel/\\d+/\\d+/\\d+\\.htm", - "pinUrl": true, - "init": "document.querySelectorAll('#contentmain>[id^=adv]').forEach(e=>{e.remove()})", - "action": 1, - "history": 2, - "nextLink": "//a[text()='下一页' or text()='下一頁' and contains(@href,'.htm')]", - "pageElement": "#title,#content", - "replaceElement": "head>title,#footlink", - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('#title');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", - "pageBar": 0 - }, - { - "name": "稷下書院 - 閱讀", - "example": "https://www.novel543.com/1004298677/8001_1.html", - "url": "^https?://www\\.novel543\\.com/\\d+/\\w+\\.html", - "history": 2, - "init": "let ge=e=>document.querySelector(e);let h=ge('h1');h.innerText=h.innerText.split('-')[1].trim();let c=ge('.content');c.innerHTML=c.innerHTML.replace(/[^\\u4e00-\\u9fa5]+(
    )?/,'
    ').replace(/[^\\u4e00-\\u9fa5]+$/,'');let ad=ge('.gadBlock,.adBlock');if(ad){ad.remove()}c.innerHTML=c.innerHTML.replace(/

    /g,'
    ');", - "nextLink": "//a[text()='下一章' and not(contains(@href,'end'))]", - "pageElement": "h1,.content", - "replaceElement": "head>title,.is-active,.foot-nav", - "pageInit": "let ge=e=>doc.querySelector(e);let h=ge('h1');h.innerText=h.innerText.split('-')[1].trim();let c=ge('.content');c.innerHTML=c.innerHTML.replace(/[^\\u4e00-\\u9fa5]+(
    )?/,'
    ').replace(/[^\\u4e00-\\u9fa5]+$/,'');let ad=ge('.gadBlock,.adBlock');if(ad){ad.remove()}c.innerHTML=c.innerHTML.replace(/

    /g,'
    ');", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('amp-addthis').forEach(e=>{e.remove()});let h=gae('h1');let t=gae('.content');if(t.length>10){h[0].remove();t[0].remove()}", - "pageBar": 0, - "css": ".gadBlock,.adBlock{display:none!important}#read h1{padding:20px 0 0px!important}" - }, - { - "name": "稷下書院 - 分類", - "example": "https://www.novel543.com/bookstack/", - "url": "^https?://www\\.novel543\\.com/", - "nextLink": ".next>a", - "pageElement": ".layui-row>li", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "天天看小說 - 顯示全部目錄", - "example": "https://tw.ttkan.co/novel/chapters/yedemingmingshu-huishuohuadezhouzi", - "url": "^https?://[^/]+/novel/chapters/", - "include": [ - "//title[contains(text(),'天天看小說') or contains(text(),'天天看小说')]", - "#button_show_all_chatper" - ], - "nextLink": "0", - "autoClick": "#button_show_all_chatper" - }, - { - "name": "天天看小說 - 閱讀", - "example": "https://tw.bg3.co/novel/pagea/yedemingmingshu-huishuohuadezhouzi_1.html", - "url": "^https?://[^/]+/novel/pagea/[^.]+\\.html", - "include": "//title[contains(text(),'天天看小說') or contains(text(),'天天看小说')]", - "action": 1, - "history": 2, - "nextLink": ".next_page_links>a[href$='html']", - "pageElement": ".title,.content", - "replaceElement": "head>title,.prev_page,.next_page_links", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('amp-addthis').forEach(e=>{e.remove()});let h=gae('.title');let t=gae('.content');if(t.length>10){h[0].remove();t[0].remove()}", - "pageBar": 0, - "css": ".content>center{display:none!important}" - }, - { - "name": "小說狂人 - 閱讀", - "example": "https://czbooks.net/n/ul6pe/ukcme", - "url": "^https?://czbooks\\.net/n/\\w+/\\w+", - "action": 1, - "history": 2, - "nextLink": "//a[text()='下一章']", - "pageElement": ".name,.content", - "replaceElement": "head>title,.container .chapter-nav,.main>.chapter-nav,#mm-5>.chapter-nav", - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.name');let t=gae('.content');if(t.length>10){h[0].remove();t[0].remove()}", - "pageBar": 0 - }, - { - "name": "小說狂人 - 書籍分類", - "example": "https://czbooks.net/c/xuanhuan", - "url": "^https?://czbooks\\.net/c/\\w+", - "nextLink": ".nav.paginate>li.active+li>a", - "pageElement": ".novel-list>.novel-item-wrapper", - "replaceElement": ".nav.paginate", - "pageBar": 0 - }, - { - "name": "新笔下文学 - 手機版閱讀", - "example": "https://www.bxwx.cc/112/112794/56123570.html", - "url": "^https?://www\\.bxwx\\.cc/\\d+/\\d+/\\w+\\.html", - "history": 2, - "action": 1, - "nextLink": "#pb_next", - "pageElement": "#chaptername,#txt", - "replaceElement": "head>title,.chapter-page-btn", - "pageBar": 0 - }, - { - "name": "新笔下文学 - 閱讀", - "example": "https://www.bxwx.cc/112/112794/56123570.html", - "url": "^https?://www\\.bxwx\\.cc/\\d+/\\d+/\\w+\\.html", - "history": 2, - "action": 1, - "nextLink": "//a[contains(text(),'下一章')]", - "pageElement": ".word_read>*:not(.read_btn)", - "replaceElement": "head>title,.read_btn", - "pageBar": 0 - }, - { - "name": "笔下文学bixia - 閱讀", - "example": "http://www.bixia.org/book/3726/9586349.html", - "url": "^https?://www\\.bixia\\.org/book/\\d+/\\d+\\.html", - "history": 2, - "action": 1, - "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", - "pageElement": ".chapter-name,#content", - "replaceElement": "head>title,.g-content-nav", - "pageAction": "let gae=e=>document.querySelectorAll(e);let gx=x=>document.evaluate(x,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;setTimeout(()=>{let n=gx(\"//a[contains(text(),'下一章')]\");if(n){let l=gae('.chapter-name').length-1;gae('.chapter-name')[l].remove()}},0);setTimeout(()=>{let t=gae('.chapter-name');if(t.length>10){gae('.g-reader>*:not(.chapter-opt):nth-child(n+1):nth-child(-n+4)').forEach(e=>{e.remove()})}},1000)", - "pageBar": 0, - "css": ".chapter-name{font-size:20px!important;font-weight:bold!important;padding-top:10px;padding-bottom:10px;}" - }, - { - "name": "笔下文学bixia - 目錄", - "example": "http://www.bixia.org/book/3726/", - "url": "^https?://www\\.bixia\\.org/book/\\d+/", - "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]", - "pageElement": "#main .list>li", - "replaceElement": ".pages", - "pageBar": 0 - }, - { - "name": "起點小說 - 閱讀", - "example": "https://read.qidian.com/chapter/9r9u8W1evJUCpOPIBxLXdQ2/EKq5eZhajBtMs5iq0oQwLQ2/", - "url": "^https?://read\\.qidian\\.com/chapter/", - "history": 2, - "nextLink": "#j_chapterNext:not(.disabled)", - "pageElement": ".text-head,.read-content", - "replaceElement": "head>title,.chapter-control.dib-wrap", - "css": ".admire-wrap,.chapter-end-qrcode{display:none!important}", - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.text-head');let t=gae('.read-content');if(t.length>10){h[0].remove();t[0].remove()}" - }, - { - "name": "起點小說 - 分類", - "example": "https://www.qidian.com/finish/size5-update1/", - "url": "^https?://www\\.qidian\\.com/(all|finish|rank|free)/(chanId|size|vip|sign|update|tag)?", - "nextLink": "//li[a/@class='lbf-pagination-page lbf-pagination-current']/following-sibling::li[1]/a[not(starts-with(@href,'javascript'))]", - "pinUrl": true, - "pageElement": "#book-img-text", - "replaceElement": ".pagination", - "pageBar": 0 - }, - { - "name": "無限小說 - 閱讀", - "example": "https://www.8book.com/read/125687/?312407", - "url": "^https?://(www\\.)?8book\\.com/read/", - "action": 1, - "history": 2, - "init": "setTimeout(()=>{let t=document.querySelector('#text');t.innerHTML=t.innerHTML.replace(/[
    ]{4}[⒏88⒏⑧⑻ВbbьOσoоοoKkкcсcmmм.。·.]{9,10}/gi,'')},1000)", - "nextLink": "span.next>a", - "pageElement": "//div[div/@id='subtitle'] | id('text')", - "waitElement": [ - "#text>br" - ], - "replaceElement": "//head/title | //div[@class='row mx-0 read_btn_gp']", - "pageInit": "let t=doc.querySelector('#text');t.innerHTML=t.innerHTML.replace(/[
    ]{4}[⒏88⒏⑧⑻ВbbьOσoоοoKkкcсcmmм.。·.]{9,10}/gi,'')", - "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}gax(\"//*[contains(@class,'pagetual_pageBar')]\")[0].remove();let t=gax(\"//div[@id='text']\");let s=gax(\"//div[div/@id='subtitle']\");if(t.length>4){t[0].remove();s[0].remove()}", - "css": "#text>br:nth-child(even){display:none!important}#subtitle{margin-bottom:0px!important}" - }, - { - "name": "無限小說 - 書籍分類", - "example": "https://www.8book.com/booklists/update/", - "url": "^https?://(www\\.)?8book\\.com/booklists/(update|newrelease|finish|list|\\d+)/", - "nextLink": "li[onclick]+li>a", - "pageElement": ".row>div.p-2", - "replaceElement": ".row>li", - "pageBar": 0 - }, - { - "name": "UU看書 - 手機版 - 閱讀", - "example": "https://t.uukanshu.com/read.aspx?tid=47854&sid=32186", - "url": "^https?://(t|sj)\\.uukanshu\\.com/read\\.aspx", - "init": "$('.ad_content').remove()", - "action": 1, - "history": 2, - "nextLink": "#read_next", - "pageElement": "#divContent > h3,#bookContent", - "replaceElement": "head>title,#read-page>.rp-switch", - "pageAction": "let gae=e=>document.querySelectorAll(e);gae('.pagetual_pageBar')[0].remove();let h=gae('h3');let t=gae('#bookContent');if(t.length>10){h[0].remove();t[0].remove()}gae('.ad_content')[0].remove()" - }, - { - "name": "UU看書手機版 - 列表(加載更多小說)", - "example": "https://t.uukanshu.com/booklist.aspx?c=1", - "url": "^https?://(t|sj)\\.uukanshu\\.com/(booklist|quanben|)\\.aspx", - "loadMore": "#showMore" - }, - { - "name": "UU看書 - 閱讀", - "example": "https://www.uukanshu.com/b/47854/32175.html", - "url": "^https?://(www|tw)\\.uukanshu\\.com/b/", - "action": 1, - "history": 2, - "nextLink": "#next", - "pageElement": ".h1title,.contentbox", - "replaceElement": "head>title,.fanye", - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.h1title');let t=gae('#contentbox');if(t.length>10){h[0].remove();t[0].remove()}" - }, - { - "name": "UU看書 - 書籍列表", - "example": "https://www.uukanshu.com/list/xuanhuan-1.html", - "url": "^https?://(www|tw)\\.uukanshu\\.com/list/", - "nextLink": "//a[text()='下一頁' or text()='下一页']", - "pageElement": ".content.clearfix>span", - "replaceElement": "#page", - "pageBar": 0 - }, - { - "name": "UU看書網uuks.org手機版 - 閱讀", - "example": "https://m.uuks.org/b/59/731.html", - "url": "^https?://m\\.uuks\\.org/b/", - "action": 1, - "history": 2, - "nextLink": "#read_next", - "pageElement": "#top,#bookContent", - "replaceElement": "head>title,#read>.rp-switch,#read-page>.rp-switch", - "css": "#read-page .iconback,#read-page .iconhome{display: none!important;}", - "insert": "#read-page>.rp-switch", - "insertPos": 1, - "pageBar": 0 - }, - { - "name": "UU看書網uuks.org - 閱讀", - "example": "https://www.uuks.org/b/53487/668581.html", - "url": "^https?://www\\.uuks\\.org/b/", - "action": 1, - "history": 2, - "nextLink": "#next", - "pageElement": ".h1title,#contentbox", - "replaceElement": ".fanye", - "insert": ".fanye", - "insertPos": 1, - "pageBar": 0, - "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.h1title');let t=gae('#contentbox');if(t.length>10){h[0].remove();t[0].remove()}" - }, - { - "name": "愛下電子書 - 閱讀", - "example": "https://tw.ixdzs.com/read/38804/p1.html", - "url": "^https?://tw\\.ixdzs\\.com/read/\\d+/\\w+\\.html", - "history": 2, - "nextLink": "a.chapter-paging.chapter-next", - "pageElement": "#page .page-content", - "replaceElement": "head>title,.page-d.page-turn,.page-d-top,.read-next,.read-pre,.read-prog-info", - "pageAction": "function gae(e){return document.querySelectorAll(e)}gae('.pagetual_pageBar')[0].remove();let t=gae('#page .page-content');if(t.length>10){t[0].remove()}", - "css": ".page-content{margin-top:.16rem!important}.page-content h3{line-height:.20rem!important;font-size:.24rem!important;text-align:center!important}" - }, - { - "name": "愛下電子書 - 書籍列表", - "example": "https://tw.ixdzs.com/sort/1/", - "url": "^https?://tw\\.ixdzs\\.com/(sort|hot|end)/", - "nextLink": "a.num.current+a", - "pageElement": ".u-list", - "replaceElement": "div.panel+div>.pagei", - "pageBar": 0 - }, - { - "name": "Discuz Archiver", - "example": "https://bbs.yxfanfan.com/archiver/?fid-13.html,https://bbs.yxfanfan.com/archiver/?tid-225893.html", - "url": "^https?://[^/]+/archiver/\\?(fid|tid)", - "nextLink": "strong+a", - "pageElement": "#content", - "css": ".pagetual_pageBar{margin-bottom:0px!important}" - }, - { - "name": "Yandex", - "url": "^https?://yandex\\.(com|ru)/search/", - "pageElement": "#search-result>li", - "pageElementCss": "content-visibility:visible" - }, - { - "name": "yandex web search mobile", - "example": "https://yandex.com/", - "url": "^https?://yandex\\.(com|ru)/", - "include": ".Pager-More", - "loadMore": ".Pager-More" - }, - { - "name": "yandex Images Video search mobile", - "example": "https://yandex.com/", - "url": "^https?://yandex\\.(com|ru)/", - "include": ".more_direction_next", - "loadMore": ".more_direction_next>button" - }, - { - "name": "google search mobile", - "action": 0, - "url": "^https://(?:www\\.)?google\\..*/search", - "pageElement": "id('rso')/div|id('rso')/style", - "insert": "//div[@role=\"progressbar\"]/following-sibling::a[@role=\"button\"]|id(\"extrares\")//span[count(a)>0]/span/following-sibling::a", - "nextLink": 0, - "loadMore": "div[role='progressbar']+a[role='button']" - }, - { - "name": "Google Search", - "nextLink": [ - "id('pnnext')|id('navbar navcnt nav')//td[span]/following-sibling::td[1]/a|id('nn')/parent::a", - "id('pnprev')|id('navbar navcnt nav')//td[span]/following-sibling::td[1]/a|id('nn')/parent::a" - ], - "pageElement": "id('rso')|id('center_col')/style[contains(.,'relative')][id('rso')]|id('search')/div/div/style[1]", - "action": 1, - "pageNum": "&start={10*($p-1)}", - "pageBarTop": 55, - "url": "^https?://[^./]+\\.google(?:\\.[^./]{2,3}){1,2}/(?:c(?:se|ustom)|search|webhp|m|#)", - "replaceElement": "[role='navigation']>[role='presentation']", - "css": "ol>li{display: inline-flex;}" - }, - { - "name": "Apphot", - "url": "^https?://apphot\\.cc/", - "pageElement": "section.container > div.content-wrap > div.content > article" - }, - { - "name": "16Personalities", - "url": "^https://www\\.16personalities\\.com", - "enable": 0 - }, - { - "name": "Linux Tips, Tricks and Tutorials | Linuxize", - "url": "^https://linuxize\\.com", - "pageElement": ".post-list>.flex-wrap>section", - "lazyImgSrc": "data-cfsrc" - }, - { - "name": "Vipergirls", - "pageElement": "#threads,.posts", - "url": "^https://vipergirls\\.to", - "nextLink": [ - "a[rel='next']", - "a[rel='prev']" - ], - "pageNum": "page{$p}$" - }, - { - "name": "linuxfromscratch", - "url": "^https://www\\.linuxfromscratch\\.org", - "pageElement": "body>*", - "css": ".sect1{overflow-wrap: break-word;}div.navheader{position: relative;}" - }, - { - "name": "Standards DOC", - "url": "\\.html$", - "nextLink": ".header>p>[rel=next]", - "pageElement": ".header~*" - }, - { - "name": "xda-developers", - "url": "^https://forum\\.xda\\-developers\\.com/t/", - "pageElement": ".block-body>article" - }, - { - "name": "Pixabay", - "url": "^https://pixabay\\.com", - "pageAction": "eles.forEach(ele=>{let media=ele.querySelector('div.media');let timer;media.onmouseenter=e=>{timer=setTimeout((function() {var mp4 = media.dataset.mp4, webm = media.dataset.webm ? mp4.rsplit(\".\", 1)[0] + \".webm\": \"\", mp4Source = ''), webmSource = webm ?' ') : \"\", videoElement = '\");media.insertBefore($(videoElement)[0], media.firstChild)}), 300);};media.onmouseleave=e=>{clearTimeout(timer);if(media.firstChild.tagName==='VIDEO')media.removeChild(media.firstChild)};})", - "pageElement": ".video-search-results>.row-masonry-cell", - "nextLink": ".media_list>a.pure-button", - "lazyImgSrc": "data-lazy" - }, - { - "name": "Bing", - "action": 1, - "url": "^https://.*\\.bing\\.com/", - "nextLink": "a[title='Next page'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl", - "pageElement": "ol#b_results>li.b_algo", - "wait": "if(doc==document)return true;doc.documentElement.scrollTop=99999;return doc.querySelector('a[title=\\'Next page\\'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl')", - "pageBar": "pageBar.className='b_pageBar'" - }, - { - "name": "Duckduckgo", - "url": "^https://duckduckgo\\.com/\\?", - "loadMore": ".result--more>a,#more-results" - }, - { - "name": "F 搜", - "url": "^https://fsoufsou\\.com/search", - "nextLink": ".bottom-pagination-bar+.turn-page-btn", - "pinUrl": true, - "css": "svg{visibility: visible;}", - "pageElement": "div.organic-results>div", - "stopSign": [ - "", - ".empty-result-container" - ] - }, - { - "name": "gog", - "action": 1, - "url": "^https://www\\.gog\\.com/", - "pageElement": "paginated-products-grid.ng-star-inserted", - "nextLinkByUrl": [ - "(&page=(\\d+))?$", - "&page={$2+1}" - ], - "pageAction": "[].forEach.call(eles, ele=>{[].forEach.call(ele.querySelectorAll('source[lazyload]'), source=>{source.setAttribute('srcset',source.getAttribute('lazyload'))})})" - }, - { - "name": "Pixiv", - "url": "^https://www\\.pixiv\\.net/", - "action": 2, - "pageElement": "section>div>div>ul,section>div>ul,div.sc-l7cibp-0.juyBTC>*,div.sc-1eop7y7-0.cJYTWr>*", - "nextLink": "a[class*='filterProps-Styled-Component']:last-child", - "wait": 500, - "fitWidth": false, - "css": "@media (min-width: 1000px) {@supports (display:grid) {.krFoBL { grid-template-columns: repeat(6, 184px); }}}" - }, - { - "name": "Z-Library", - "url": "^https?://.*(1lib\\.(to|us|org)|z-lib\\.org|booksc\\.(org|eu)|bookfi\\.net|b\\-ok\\.(asia|africa)|1lib\\.pl|sg1lib\\.org|2lib\\.org|book4you\\.org)/s/", - "pageElement": "#searchResultBox" - }, - { - "name": "Startpage", - "url": "^https://www\\.startpage\\.com/", - "pageElement": "section.w-gl>div.w-gl__result", - "nextLink": "button.next", - "action": 0 - }, - { - "name": "图书书目检索", - "url": "^https?://pcpt\\.nlc\\.cn/", - "pageElement": "#content > div.list-panel.thelist > div.block > table.table", - "nextLinkByJs": "let max=doc.querySelector(`.pagination>.result>b:nth-child(2)`),cur=doc.querySelector(`.pagination>.result>b:nth-child(3)`);let form=doc.querySelector('#fm_id'),params=[];if(!max||!cur||max.innerText==cur.innerText||!form)return null;let formData = new FormData(form); for (let [key, value] of formData) {params.push(key+'='+encodeURIComponent(value))};return form.action.replace(/\\?pageCount.*/,'')+'?pageCount='+(parseInt(cur.innerText) + 1)+'#p{'+params.join('&')+'}'" - }, - { - "name": "全國古籍普查登記基本數據庫", - "url": "^https?://202\\.96\\.31\\.78/", - "pageElement": "body > div.wrap > div#side.list > div.item", - "nextLinkByJs": "let n=doc.querySelector('[title=\"Next Page\"]');if(!n)return;let params=n.getAttribute('onclick').match(/JavaScript:toUrl\\('(.*)',(\\d+)\\);/);let temp=params[1];let index=params[2];if(temp.indexOf('&cGFn')!=-1)temp=temp.substring(0,temp.indexOf('&cGFn'));let code=window.btoa('page='+index);return temp+'&'+code;" - }, - { - "name": "Search Getty Images", - "url": "^https://www\\.gettyimages\\.ie", - "nextLink": "button[title='Next page']", - "pageElement": "[data-testid=galleryMosaicAsset]" - }, - { - "name": "IMHentai", - "url": "^https://imhentai\\.xxx", - "pageElement": "#gimg", - "nextLink": ".nav_next", - "css": "#footer,#bar{display:none}.pre_img+.nav_pagination{bottom: 10px; position: fixed; width: 100%;left:0;}.return_btn{bottom: 0; position: fixed; width: 100%;left:0;}", - "lazyImgSrc": 0 - }, - { - "name": "Moebooru:Danbooru clones", - "url": "^https?://(konachan\\.com|yande\\.re|www\\.sakugabooru\\.com)/(post|comment)($|\\?|#|/search\\?)", - "pageElement": "//li[contains(@class, 'creator-id-')]|//div[@id='comment-list']/div[@class='post']|//table[@class='highlightable']", - "nextLink": "//a[@class='next_page']", - "css": ".javascript-hide { display: inline-block !important; }.pagetual_pageBar { display: inline-flex!important;width: 100%!important; }" - }, - { - "name": "developer.wordpress", - "url": "^https://developer\\.wordpress\\.org/", - "pageElement": "#primary>*", - "nextLink": "[rel=next]" - }, - { - "name": "playstation", - "action": 1, - "css": ".psw-visually-hide{opacity:1!important}.pagetual_loading{display:none!important}[name='pagetual-iframe']{display:none}", - "url": "^https://store\\.playstation\\.com/.*/\\d+$", - "pageElement": "ul.psw-grid-list", - "wait": "let img=doc.querySelector('ul.psw-grid-list img');return img!=null", - "nextLinkByUrl": [ - "(.*/)(\\d+)$", - "$1{$2+1}" - ], - "pageAction": "[].forEach.call(eles[0].querySelectorAll('[loading=lazy]'),img=>{img.src=img.src.replace('w=54&thumb=true','w=230&thumb=false');img.classList.remove('psw-blur')});" - }, - { - "name": "yande", - "action": 0, - "url": "^https://yande\\.re/", - "pageElement": "ul#post-list-posts>li", - "nextLink": "a.next_page", - "css": ".javascript-hide {display: inline-block !important;}" - }, - { - "name": "Expreview", - "url": "^https://www\\.expreview\\.com/", - "loadMore": "span.load" - }, - { - "name": "goddessfantasy", - "type": 0, - "url": "^https://www\\.goddessfantasy\\.net/bbs/", - "pageElement": "//div[@id='messageindex']|//form[@id='quickModForm']", - "nextLink": "//div[@class='pagelinks']/a[text()='»']", - "pinUrl": true - }, - { - "name": "哈啦區 - 巴哈姆特", - "url": "^https?://forum\\.gamer\\.com\\.tw/(index|$)", - "enable": 0 - }, - { - "name": "COCOMANGA", - "url": "^https?://www\\.cocomanga\\.com/", - "pageElement": "body > div#mangalist.mh_mangalist", - "action": 2 - }, - { - "name": "古籍館 - 閲讀", - "url": "^https?://(www\\.)?gujiguan\\.com/Book_View\\.aspx", - "pageElement": "div#content > img#book" - }, - { - "name": "古籍館 - 檢索", - "url": "^https?://(www\\.)?gujiguan\\.com/Search_Result\\.aspx", - "pageElement": "#DataList1>tbody>tr", - "wait": "let nv=doc.querySelector('#keyValue'),ov=document.querySelector('#keyValue');if(!nv||!ov)return false;if(nv.value==ov.value)return true;nv.value=ov.value;doc.querySelector('#sreach').click();doc.querySelector('#DataList1').innerHTML='';return false;", - "refreshByClick": "#sreach" - }, - { - "name": "SkrBT", - "url": "^https://skrbt", - "pageElement": "ul.list-unstyled", - "nextLinkByJs": "let form=doc.querySelector('#search-form'),params=[];if(!form)return null;[].forEach.call(form.querySelectorAll('input'),input=>{params.push(input.name+'='+(input.name=='p'?parseInt(input.value)+1:input.value))});return form.action+'?'+params.join('&')" - }, - { - "name": "Discuz! mobile postlist1", - "url": ".", - "pageElement": ".postlist>div[id^=pid]", - "nextLink": ".page>#select_a+a:not([class])", - "action": 1 - }, - { - "name": "Discuz! mobile postlist2", - "url": ".", - "pageElement": ".bm:not(#postlist)>div[id^=post_],.bm:not(#postlist)>div[id^=post_]+div", - "nextLink": "a.nxt", - "action": 1 - }, - { - "name": "bbsPostlist1", - "url": ".", - "nextLink": [ - "a.nxt", - "a.prev" - ], - "pageNum": "\\-\\d+\\-{$p}\\-\\d+\\.html", - "pageElement": "div#postlist>*", - "replaceElement": ".pgt>div.pg" - }, - { - "name": "bbsPostlist2", - "url": ".", - "nextLink": ".page-item.active+.page-item>a", - "pageElement": "ul.postlist>*", - "replaceElement": "ul.pagination" - }, - { - "name": "bbsThreadlist1", - "url": "/f", - "nextLink": [ - "a.nxt", - "a.prev" - ], - "pageNum": "\\-\\d+\\-{$p}\\.html", - "pageElement": "div#threadlist form", - "replaceElement": "#pgt div.pg" - }, - { - "name": "Discuz7.2Postlist", - "url": "\\?tid", - "nextLink": "a.next", - "pageNum": "page={$p}", - "pageElement": "div#postlist>*" - }, - { - "name": "Discuz7.2Threadlist", - "url": "\\?fid", - "nextLink": "a.next", - "pageNum": "page={$p}", - "pageElement": "div#threadlist form" - }, - { - "name": "chevereto", - "url": ".", - "nextLink": "a[data-pagination='next']", - "pageAction": "let w=document.querySelector('.list-item').style.width;let content=eles[0].querySelector('.pad-content-listing');content.style.display='flex';content.style.flexFlow='row wrap';[].forEach.call(eles[0].querySelectorAll('.list-item'),i=>{i.style.display='block';i.style.width=w;i.style.position='sticky';i.querySelector('.list-item-image').style.height=w;})", - "pageElement": "div#content-listing-tabs" - }, - { - "name": "FC Portables", - "url": "^https://www\\.fcportables\\.com", - "pageElement": ".listing-blog>article", - "pageAction": "eles.forEach(e=>{let a=e.querySelector('.img-holder');if(!a)return;a.style.backgroundImage=`url(\"${a.dataset.src}\")`;a.classList.add('b-loaded')})" - }, - { - "name": "1688全部商品页", - "url": "^https://.*\\.1688\\.com/page", - "pageElement": "#bd_1_container_0 > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(6) > div", - "pageAction": "window.setUrl=null;window.index=0;eles.forEach(e=>{let img=e.querySelector('.main-picture[src^=data]');if(!img)return;img.src=img.nextElementSibling.children[0].src;e.onclick=()=>window.open(e.dataset.url,'_blank')})", - "pageInit": "if(!window.index)window.index=0;if(!window.setUrl){window.setUrl=()=>{setTimeout(()=>{if(window.url){eles[window.index++].dataset.url=window.url;window.url=null;}if(eles[window.index]){eles[window.index].click();window.setUrl()}},1)};Object.defineProperty(doc.defaultView, 'open', { get: function () { return (s)=>window.url=s; } });window.setUrl();}if(eles.length<=window.index)return true;else return false;" - }, - { - "name": "blog1", - "url": ".", - "pageElement": "section.posts-expand>article.post", - "nextLink": "li.pagination-active+li>a", - "css": "section.posts-expand>article.post{opacity:1}" - }, - { - "name": "AfreecaTV 搜索", - "url": "^https?://afreecatv\\.com/total_search", - "pageElement": "ul#detailVideoPageList>li", - "nextLink": ".pg_area>em+a", - "wait": 500, - "replaceElement": ".pg_area" - }, - { - "name": "Baidu", - "insertPos": 1, - "nextLink": [ - "//*[@id=\"page\"]/div/a[contains(text(),'下')]", - "//*[@id=\"page\"]/div/a[contains(text(),'上')]" - ], - "pageElement": "//*[@id=\"content_style\"]|//*[@id=\"content_left\"]/*", - "pageNum": "&pn={10*($p-1)}", - "url": "^https?://www\\.baidu\\.com/(s|baidu)\\b.", - "pageBarTop": 75, - "replaceElement": "#page", - "wait": 500 - }, - { - "name": "手机百度", - "url": "^https://(m|www|wap)\\.baidu\\.com/", - "nextLink": "a.new-nextpage-only,a.new-nextpage", - "pageElement": "#results" - }, - { - "name": "百度贴吧列表", - "action": 1, - "pageBar": "pageBar.classList.add('j_thread_list');pageBar.dataset.field='{}'", - "url": "^https?://tieba\\.baidu\\.com/.+", - "pageElement": "ul#thread_list>li", - "pageNum": "&pn={50*($p-1)}", - "nextLink": ".next.pagination-item " - }, - { - "name": "百度贴吧看贴", - "pageBar": "pageBar.classList.add('l_post')", - "nextLink": "//div[@class=\"pb_footer\"]//a[starts-with(text(), '下一页')]", - "pageElement": "//div[@class=\"p_postlist\"]/div[starts-with(@class, 'l_post')]", - "type": 0, - "action": 1, - "pageNum": "&pn={$p}", - "url": "^https?://tieba\\.baidu\\.com/p/.+", - "wait": "if(doc==document)return true;let lzl=doc.querySelector('div.hideLzl');if(lzl){var actualTop=lzl.offsetTop;var current=lzl.offsetParent;while(current!==null){actualTop+=current.offsetTop;current=current.offsetParent;}doc.body.scrollTop=actualTop;doc.documentElement.scrollTop=actualTop;return false}else{return true}", - "history": 0 - }, - { - "name": "搜狗wap", - "url": "^https?://(wap|m)\\.sogou\\.com/web/(searchList\\.jsp|sl\\?)", - "loadMore": "#ajax_next_page", - "nextLink": 0 - }, - { - "name": "头条搜索手机版", - "url": "^https?://(so|m)\\.toutiao\\.com/search/", - "nextLink": "a[class^=container_],a[class^=containerRight]" - }, - { - "name": "Camp Firefox Forum", - "url": "^https://www\\.camp-firefox\\.de/forum/ungelesene-beitraege/", - "pageElement": "#content > div > ol.tabularList", - "nextLink": "nav.pagination > ul > li.skip:last-child > a", - "updatedAt": "2022-09-10", - "author": "benzBrake" - }, - { - "name": "秀人网", - "url": "^https://www\\.(?:imn5|mntp|jpmnb|jpmn8|mn5|xgmn|jpxgmn|jpxgyw|xiurenji|xiurenb|xrmn|xrmn5)\\.(?:com|net|vip|cc|top)/.*\\.html", - "pageElement": "p>img", - "author": "bmp4cwa" - }, - { - "name": "美女图123", - "url": "^https://(www|m)\\.meinvtu123\\.cc/", - "pageElement": "div>img", - "author": "bmp4cwa" - }, - { - "name": "雪球", - "url": "^https://xueqiu\\.com/", - "pageElement": ".status-list>article", - "nextLink": "a.pagination__next" - }, - { - "name": "行情 - 雪球", - "url": "^https?://xueqiu\\.com/hq", - "pageElement": "div#stockList table.portfolio", - "pinUrl": true, - "action": 3 - }, - { - "name": "中国知网", - "url": "^https://kns\\.cnki\\.net/kns8/defaultresult/index", - "nextLink": "a#PageNext", - "pageElement": ".result-table-list tbody>*", - "iframeInit": "let doc;let ready=()=>{let fn1=window.BriefExtend.setFullTextState;window.BriefExtend.setFullTextState=()=>{fn1();win.$('#PageNext').attr('data-curPage',window.$('#PageNext').attr('data-curPage'))}; win.BriefParam._getSearchPaperArgModel=(isSearch, cPage)=>{return window.BriefParam._getSearchPaperArgModel(isSearch, (!!cPage ? cPage : win.BriefParam._getCurPage()))};doc.querySelector('#txt_search').value=document.querySelector('#txt_search').value;doc.querySelector('.search-btn').click()};let checkPage=()=>{if(win.document.querySelector('#txt_search')){doc=win.document;ready();}else setTimeout(checkPage,100)};checkPage();", - "initRun": 0, - "wait": 1000 - }, - { - "name": "图怪兽", - "url": "^https://818ps\\.com/", - "pageElement": "#masonry" - }, - { - "name": "创客贴", - "url": "^https://www\\.chuangkit\\.com/", - "type": 0, - "nextLink": "//div[@class='number']/ul/li[@class='item active']/following-sibling::li/a", - "pageElement": "//div[@class='ckt-waterfall-content']", - "pageAction": "let infos=doc.querySelector('body>script').innerText.match(/designTemplateId:\\d+,designTemplateImageUrl:\".*?\"/g),infoMap;if(infos){infoMap={};infos.forEach(i=>{let id=i.replace(/designTemplateId:(\\d+).*/,'$1');let src=i.replace(/.*designTemplateImageUrl:\"(.+)\"/,'$1');src=JSON.stringify(src);src=src.replace(/\\\\\\\\/g,'\\\\');src=JSON.parse(src);infoMap[id]=src;})};[].forEach.call(eles[0].querySelectorAll('.temp-sec__bottom>div>a'),a=>{let id=a.href.replace(/.*?(\\d+).*/,'$1');let src=infoMap[id];let img=a.parentNode.parentNode.previousElementSibling.querySelector('img');img.src=src;img.style.opacity=1;})" - }, - { - "name": "水木桌面端", - "url": "^https://www\\.mysmth\\.net/nForum/#!article/", - "nextLink": "a[title='下一页']", - "pageElement": "div.b-content" - }, - { - "name": "水木移动端", - "url": "^https://m\\.mysmth\\.net/article/", - "pageElement": "#m_main>ul.list" - }, - { - "name": "汽车之家", - "url": "^https://club\\.autohome\\.com\\.cn", - "pageElement": "#js-reply-list-container", - "action": 2, - "nextLink": ".athm-page__next" - }, - { - "name": "煎蛋吐槽", - "url": "^https?://jandan\\.net/", - "nextLink": "a.previous-comment-page", - "pageElement": "ol.commentlist>li", - "pageAction": "let gif_click_load = getCookie('gif-click-load');let bad_click_load = getCookie('bad-click-load');let nsfw_click_load = getCookie('nsfw-click-load');let gif_on = (gif_click_load == 'on' || gif_click_load == null) ? true : false;let nsfw_on = (nsfw_click_load == 'on' || nsfw_click_load == null) ? true : false;let bad_on = (bad_click_load == 'on' || bad_click_load == null) ? true : false;[].forEach.call(eles, e => { let tucao = e.querySelector('a.tucao-btn'); if (tucao) tucao.onclick = e => { var n = $(e.currentTarget); var m = n.data('id'); var o = n.closest('li'); var l = o.find('div.jandan-tucao'); if (l.length) { l.slideToggle('fast') } else { tucao_load_content(o, m) } }; e=$(e);var is_bad = false; if (bad_on) { var oo = parseInt(e.find('.comment-like').next('span').text()); var xx = parseInt(e.find('.comment-unlike').next('span').text());if ( (oo + xx) >= 50 && (oo / xx) < 0.618 ) {is_bad = true;var r = e.find(\"p\").not('.bad_content');r.hide();e.find('.righttext').after('

    因不受欢迎已被超载鸡自动隐藏.[手贱一回]

    ');e.find(\".view_bad\").click(function () {if (this.innerHTML == '[手贱一回]' || this.innerHTML == '[再手贱一回]') {r.show();if (this.innerHTML == '[手贱一回]') {r.find('.gif-mask').remove();r.find('img').each(function() {var org_src = this.getAttribute('org_src');if (org_src)this.src = org_src;});}this.innerHTML = '[真不该手贱]';} else {r.hide();this.innerHTML = '[再手贱一回]';}});}}if ( ! is_bad && nsfw_on) {var p = e.find(\"p\").not('.bad_content');if (p.length == 0) return;let content = p.html();if (content.indexOf('NSFW') > -1) {p.hide();e.find('.righttext').after('

    此图被标记为NSFW被超载鸡自动隐藏.[旁边没人]

    ');e.find(\".view_nsfw\").click(function () {if (this.innerHTML == '[旁边没人]' || this.innerHTML == '[旁边还是没人]') {p.show();p.find('.gif-mask').remove();if (this.innerHTML == '[旁边没人]') {p.find('img').each(function() {var org_src = this.getAttribute('org_src');if (org_src)this.src = org_src;});}this.innerHTML = '[看完了,擦键盘]';} else {p.hide();this.innerHTML = '[旁边还是没人]';}});}}let img=e.find('p>img');if(img){img.css('max-width', '100%');img.css('max-height', '450px').click(function () {var $this = img;if ($this.css('max-height') == 'none') {var max_width = img.parent().parent().width();$this.css('max-width', max_width);$this.css('max-height', '450px');} else {if ($this.parent().hasClass('acv_comment'))$this.css('max-width', 'none');$this.css('max-height', 'none');}$(\"html,body\").animate({scrollTop: $this.offset().top - 40},325);});}})" - }, - { - "name": "xxgame", - "action": 0, - "url": "^http://www\\.xxgame\\.net/chinese", - "pageElement": "div.layui-row>div.layui-col-md4:not(div:nth-child(5),div:nth-child(6),div:nth-child(7))", - "nextLinkByUrl": [ - "(http://www\\.xxgame\\.net/chinese/?)(?:\\?page=|$)(\\d*)", - "$1?page={($2.0||1)+1}" - ] - }, - { - "name": "斗鱼", - "url": "^https://www\\.douyu\\.com/directory/", - "nextLink": "li.dy-Pagination-next[aria-disabled='false']", - "pageElement": "ul.layout-Cover-list", - "wait": 1000, - "enable": 0 - }, - { - "name": "Literotica", - "type": 0, - "action": 0, - "url": "^https://www\\.literotica\\.com/.", - "pageElement": "//div[contains(@class,\"panel article\") or @class=\"b-story-list\"]/div", - "nextLink": "//a[@title='Next Page' or @class='b-pager-next']", - "wait": 3000 - }, - { - "name": "站酷", - "url": "^https://www\\.zcool\\.com\\.cn/search/content", - "action": 2, - "nextLinkByUrl": [ - "(.*/content\\?&?word=[^&]+)(?:&page=|$)(\\d*)", - "$1&page={($2.0||1)+1}" - ] - }, - { - "name": "masuit", - "action": 0, - "url": "^https://masuit\\.com/", - "pageElement": ".ibox.wow", - "nextLink": "a[aria-label=Next]" - }, - { - "name": "佛弟子文库", - "url": "^https?://www\\.fodizi\\.net/", - "nextLink": "a.current+a", - "pageElement": "div.wrap>*:not(.page)" - }, - { - "name": "smzdm", - "action": 0, - "url": "^https://.*\\.smzdm\\.com", - "pageElement": "ul#feed-main-list>li", - "nextLink": ".pagenation-list>li.current+li>a", - "insert": "ul#feed-main-list", - "insertPos": 2 - }, - { - "name": "mhgui", - "action": 0, - "url": "^https://.*\\.mhgui\\.com/comic/\\d+", - "pageElementByJs": "let link=document.querySelector('#mangaBox>img').src; let match=link.match(/(.*)(\\d{3})(\\.jpg.*)/); window.i=window.i||parseInt(match[2]);window.i++; let src=match[1]+(window.i>99?window.i:(window.i>9?'0'+window.i:'00'+window.i))+match[3]; let img=document.createElement('img');img.onload=()=>{over([img])};img.onerror=e=>{over()};img.src=src;", - "insert": "#mangaBox", - "insertPos": 2 - }, - { - "name": "manga1000", - "url": "^https://manga1000\\.top/\\d+/\\d+", - "pageElement": "div.chapter-content>*", - "css": ".chapter-content>img{display:unset!important}", - "nextLink": "ul.chapter_select a.next" - }, - { - "name": "javdb", - "action": 0, - "url": "^https://javdb\\.com/", - "pageElement": "#videos.video-container", - "css": ".grid.columns{display: flex; flex-wrap: wrap;}" - }, - { - "name": "喜马拉雅", - "url": "^https://www\\.ximalaya\\.com/", - "nextLink": ".page-next>a", - "wait": 1000, - "action": 2, - "pageElement": ".list-container,.main-content" - }, - { - "name": "方正字库", - "url": "^https://www\\.foundertype\\.com/", - "nextLink": "#page>a.on+a", - "pageElement": "#fonPar,#chinese_ft1", - "action": 1 - }, - { - "name": "Trakt", - "url": "^https://trakt\\.tv", - "pageElement": "section#info-wrapper > div.container > div.row > div#overview>*", - "action": 1, - "waitElement": [ - ".summary-activity", - "#popular-comments.fade:not(.in)" - ] - }, - { - "name": "北邮人论坛", - "url": "bbs\\.byr\\.cn(|/(|#!)default)$", - "listenHashChange": true, - "pinUrl": true - }, - { - "name": "北邮人论坛-版块", - "url": "bbs\\.byr\\.cn/(|#!)board", - "listenHashChange": true, - "pageElement": ".b-content> table>tbody", - "pinUrl": true, - "history": 0, - "action": 1 - }, - { - "name": "北邮人论坛-帖子内", - "url": "bbs\\.byr\\.cn/(|#!)article", - "listenHashChange": true, - "pageElement": ".b-content", - "replaceElement": ".page", - "pinUrl": true, - "history": 0, - "action": 1 - }, - { - "name": "北大未名BBS-版块", - "url": "bbs\\.pku\\.edu\\.cn/v2/thread.php", - "pageElement": "#list-content", - "nextLink": "//div[contains(text(),'下一页')]/a", - "replaceElement": ".paging" - }, - { - "name": "北大未名BBS-帖子内", - "url": "bbs\\.pku\\.edu\\.cn/v2/post-read.php", - "pageElement": ".card-list", - "nextLink": "//div[contains(text(),'下一页')]/a", - "replaceElement": ".paging" - }, - { - "name": "bilibili search", - "action": 1, - "url": "^https://search\\.bilibili\\.com", - "pageElement": "ul>li.video-item,div.video-list.row>*", - "nextLinkByUrl": [ - "(.*keyword=.*?)(?:&page=|$)(\\d*).*", - "$1&page={($2.0||1)+1}" - ], - "sandbox": false, - "wait": "return doc.querySelector('.bili-video-card__wrap')" - }, - { - "name": "bilibili space", - "url": "^https://space\\.bilibili\\.com/", - "sandbox": false, - "pageElement": "ul.cube-list>li,ul.video-list>li,ul.relation-list>li", - "nextLink": ".be-pager-next,.next-page", - "wait": 1000 - }, - { - "name": "动漫屋1", - "action": 1, - "url": "^https?://www\\.(dm5|1kkk)\\.(com|cn)/(m|ch)", - "pageElement": ".view-main>.item", - "nextLink": "span.current+a,div#chapterpager+a+a", - "rate": 3 - }, - { - "name": "动漫屋2", - "action": 1, - "type": 0, - "url": "^https?://www\\.(dm5|1kkk)\\.(com|cn)/(m|ch)", - "pageElement": "//div[@id=\"barChapter\"]/img", - "nextLink": "//div[@class=\"view-paging\"]/div/a[contains(text(),'下一')]", - "rate": 3 - }, - { - "name": "异次元", - "url": "^https://www\\.iplaysoft\\.com/", - "pageElement": "#postlist", - "nextLink": ".pagenavi>a[title='下一页']" - }, - { - "name": "魂+", - "url": "^https?://((www\\.|bbs\\.)?(south|north|level|white|soul|snow|east|spring|summer|blue)-plus.(net|org)|bbs.imoutolove.me)/", - "action": 1, - "sleep": 1000 - }, - { - "name": "魂+阅读页", - "url": "^https?://((www\\.|bbs\\.)?(south|north|level|white|soul|snow|east|spring|summer|blue)-plus.(net|org)|bbs.imoutolove.me)/", - "action": 1, - "type": 0, - "pageElement": "//div[@id='main']/form", - "nextLink": "//div[@class='pages']/ul/li[.//b]/following-sibling::li/a", - "sleep": 1000, - "pageNum": "page-{$p}.html" - }, - { - "name": "魂+列表页", - "url": "^https?://((www\\.|bbs\\.)?(south|north|level|white|soul|snow|east|spring|summer|blue)-plus.(net|org)|bbs.imoutolove.me)/", - "action": 1, - "type": 0, - "pageElement": "//tr[@align='center']", - "nextLink": "//div[@class='pages']/ul/li[.//b]/following-sibling::li/a", - "sleep": 1000, - "pageNum": "page-{$p}.html" - }, - { - "name": "动漫啦", - "url": "^https://www\\.dongman\\.la/manhua/chapter/", - "pageElement": ".chapter-images img", - "nextLink": ".mdui-bottom-nav>a+a", - "init": "let is=document.querySelectorAll('.chapter-images img'),j=document.querySelector('.lazyBox');is.forEach(i=>{i.src=i.dataset.srcset;j.appendChild(i);})", - "pageAction": "let j=document.querySelector('.lazyBox');eles.forEach(i=>{i.src=i.dataset.srcset;})", - "insert": ".lazyBox", - "insertPos": 2 - }, - { - "name": "bookmarkearth", - "action": 0, - "url": "^https://www\\.bookmarkearth\\.com(?:/?$|/page\\?currentPage=)", - "pageElement": ".source>.document-piece", - "nextLinkByUrl": [ - "(.*\\.com)(?:/?$|/page\\?currentPage=)(\\d*)", - "$1/page?currentPage={($2.0||1)+1}" - ] - }, - { - "name": "音范丝", - "action": 1, - "url": "^https://www\\.yinfans\\.me/", - "pageElement": "#post_container", - "nextLink": "a.next", - "waitElement": [ - "#post_container[style]" - ] - }, - { - "name": "bookmarkearth search", - "action": 0, - "url": "^https://www\\.bookmarkearth\\.com/s/search\\?q=", - "pageElement": ".source>.document-piece", - "nextLinkByUrl": [ - "(.*/s/search\\?q=.*¤tPage=)(\\d*)", - "$1{$2+1}" - ] - }, - { - "name": "深圳人社局通知公告", - "action": 0, - "url": "^http://hrss\\.sz\\.gov\\.cn/tzgg", - "pageElement": ".newsList>ul", - "nextLink": "a.next" - }, - { - "name": "什么值得买社区", - "action": 0, - "url": "^https://post\\.smzdm\\.com/p", - "pageElement": "#comment", - "nextLink": ".pagedown>a" - }, - { - "name": "51元素", - "action": 1, - "url": "^https://www\\.51yuansu\\.com", - "pageElement": ".f-content", - "nextLink": "a.nextpage" - }, - { - "name": "Asian Sister", - "url": "^https://asiansister\\.com/", - "pageElement": "div.itemBox,div.itemBox_video" - }, - { - "name": "小说站1", - "type": 0, - "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", - "pageElement": "//div[@id='content']|//div[@id='chaptercontent']|//div[@id='BookText']", - "url": "\\d+/[\\d_-]+\\.html?$", - "pageBarText": 1 - }, - { - "name": "小说站2", - "type": 0, - "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", - "pageElement": "//div[@class='content']|//div[@class='chaptercontent']", - "url": "\\d+/[\\d_-]+\\.html?$", - "pageBarText": 1 - }, - { - "name": "晋江文学城", - "url": "^http://www\\.jjwxc\\.net", - "pageElement": "div.noveltext,#lockpage", - "pageBarText": 1 - }, - { - "name": "厚海网", - "url": "^http://www\\.houhaiwang\\.com", - "pageElement": ".col-a1>.row-b7", - "pageBarText": 1, - "nextLink": ".col-d3>span>a" - }, - { - "name": "17K小说网_免费章节", - "url": "^https://www\\.17k\\.com", - "pageElement": ".area>.read,.area>.comment", - "css": ".infoPath,.read_tit,.rightSide,.tuijian{display:none}.readAreaBox{width:auto}", - "pageBarText": 1, - "nextLink": ".nextChapter" - }, - { - "name": "17K小说网_付费章节", - "url": "^https://www\\.17k\\.com", - "pageElement": ".Context>.Article", - "pageBarText": 1, - "action": 1, - "nextLink": ".nextChapter", - "wait": "return doc.querySelector('.copy')==null", - "include": "div.content" - }, - { - "name": "netflav", - "url": "^https://netflav\\.com/", - "pageElement": ".video_grid_container>.grid_root", - "nextLink": "#general-pagination>div>a[aria-current='true']+a", - "waitElement": [ - "a[aria-current='true']+a", - "div.lazyload-placeholder,.grid_cover.image:not(.fadeIn)" - ] - }, - { - "name": "版主小说", - "url": "/\\d+/\\d+/\\d+\\.html", - "pageElement": "div.page-content", - "nextLinkByJs": "let next=doc.querySelector('a.curr+a');if(next)return next.href.replace(/^javascript:.*\\('\\d+','\\d+','(\\d+)','(\\d+)'\\);/,'$1_$2.html');", - "action": 2 - }, - { - "name": "纵横中文网手机版", - "url": "^https://m\\.zongheng\\.com/h5/chapter", - "type": 0, - "pageElement": "//div[@class='title']|//div[@class='text']", - "nextLink": "//div[contains(text(),'下一页')]|//div[contains(text(),'下一章')]", - "wait": 500, - "css": ".text>div,#fukerr_bot,#fukerr{display:none!important}", - "pageBarText": 1 - }, - { - "name": "Yurifans", - "url": "^https://yuri\\.website/[a-z]", - "type": 0, - "action": 1, - "pageElement": "id('post-list')/ul", - "nextLink": "//div[@class='btn-pager']/button[text()='❯']", - "wait": "500", - "include": "id('post-list')/ul/li" - }, - { - "name": "拷貝漫畫", - "url": "^https://copymanga\\.org/comic/.*/chapter/", - "pageElement": "ul.comicContent-list>li", - "nextLink": ".comicContent-next>a", - "action": 1, - "insert": "ul.comicContent-list", - "insertPos": 2, - "wait": "if(doc==document)return true;let sy=doc.defaultView.scrollY;let cur=doc.querySelector('.comicIndex').innerText;let max=doc.querySelector('.comicCount').innerText;if(window._cur==cur){doc.defaultView.scroll(0, 0);window._cur='';}else{doc.defaultView.scroll(0, sy+9999999);window._cur=cur;}return cur==max;" - }, - { - "name": "Hacker News", - "action": 0, - "url": "^https?://news\\.ycombinator\\.com/", - "pageElement": "table.itemlist>tbody>tr", - "nextLink": "a.morelink" - }, - { - "name": "ekşi sözlük", - "action": 0, - "url": "^https://eksisozluk\\.com", - "pageElement": "#entry-item-list", - "nextLinkByJs": "let pager=doc.querySelector('.pager');if(!pager || pager.dataset.currentpage==pager.dataset.pagecount)return null;else return location.href.replace(/&p=\\d+/,'')+'&p='+(parseInt(pager.dataset.currentpage)+1)" - }, - { - "name": "参考消息手机版", - "action": 1, - "url": "^http://m\\.cankaoxiaoxi\\.com/", - "pageElement": "div.content", - "nextLink": "li.next>a" - }, - { - "name": "58pic", - "url": "^https://www\\.58pic\\.com/tupian/", - "css": ".card-lazy{display:none}.pagetual_pageBar{margin-bottom: 20px!important;}", - "pageElement": "div.search-v3-content>.card-grid-box" - }, - { - "name": "千库网", - "url": "^https://588ku\\.com/", - "action": 1, - "pageElement": ".data-box>.data-list" - }, - { - "name": "Freepik", - "url": "^https?://www\\.freepik\\.com/", - "pageElement": "div.list-content > section.showcase", - "action": 0, - "css": ".showcase:not(.showcase--completed){display:flex;flex-wrap: wrap;}.showcase:not(.showcase--completed)>figure{visibility: visible;}.showcase:not(.showcase--completed)>div{display: none!important;}" - }, - { - "name": "中国大学MOOC课程评论区", - "url": "^https://www\\.icourse163\\.org/course/", - "wait": 1000, - "type": 0, - "init": "if(doc)doc.querySelector('#review-tag-button').click()", - "nextLink": "//ul[@class='ux-pager']/li/a[text()='下一页']", - "pageElement": "//div[@class='ux-mooc-comment-course-comment_comment-list']/div[@class='ux-mooc-comment-course-comment_comment-list_item']" - }, - { - "name": "铅笔小说", - "nextLinkByJs": "let script=doc.querySelector('body>.mlfy_main>script:nth-of-type(2)');if(!script)return null;return location.origin+script.innerText.match(/.*url_next:'([^']+)'.*/i)[1]", - "pageElement": "#mlfy_main_text", - "url": "^https://www\\.23qb\\.(net|com)/book/" - }, - { - "name": "NGA", - "url": "^https?://(.*\\.nga\\.cn|nga\\.178\\.com|ngabbs\\.com)/read\\.php", - "nextLink": "a[title='下一页']", - "action": 2, - "pageElement": "div#m_posts", - "init": "doc&&doc.addEventListener('mouseover',e=>{e.preventDefault();e.stopPropagation()},true)" - }, - { - "name": "NGA列表页", - "url": "^https?://(.*\\.nga\\.cn|nga\\.178\\.com|ngabbs\\.com)/thread\\.php", - "action": 1, - "pageElement": "#topicrows" - }, - { - "name": "淮安新闻网", - "url": "^http://www\\.hynews\\.net/", - "loadMore": "#_more" - }, - { - "name": "淘股吧内贴", - "url": "^https://www\\.taoguba\\.com\\.cn/Article/\\d+/\\d+", - "pageElement": "#new_wrap_container", - "nextLinkByJs": "let pageSpan=doc.querySelector('.t_page>.left>span:last-child');if(!pageSpan)return false;let maxPage=pageSpan.innerText.replace(/.*\\/(\\d+).*/,'$1'),curPage=pageSpan.querySelector('b').innerText.trim();if(parseInt(curPage).left>span:last-child');if(!pageSpan)return false;let maxPage=pageSpan.innerText.replace(/.*\\/(\\d+).*/,'$1'),curPage=pageSpan.querySelector('b').innerText.trim();if(parseInt(curPage).left>span:last-child');if(!pageSpan)return false;let maxPage=pageSpan.innerText.replace(/.*\\/(\\d+).*/,'$1'),curPage=pageSpan.querySelector('b').innerText.trim();if(parseInt(curPage)3]", - "type": 0, - "nextLink": "//ul[@class=\"pages\"]/li/a[contains(text(),'下一页')]" - }, - { - "name": "K.F. 绯月阅读页", - "url": "^https://(bbs\\.9shenmi\\.com|kf\\.miaola\\.work)/read.php", - "pageElement": "//form/div[@class=\"readlou\"]|//form/div[@class=\"readtext\"]|//form/div[@class=\"c\"]", - "type": 0, - "nextLink": "//ul[@class=\"pages\"]/li/a[contains(text(),'下一页')]" - }, - { - "name": "alternativeto", - "url": "^https://alternativeto\\.net/", - "nextLink": "nav[aria-label='Pagination Navigation']>a", - "action": 1, - "pageElement": "div.container>ol>li", - "pageInit": "eles.forEach(e=>{let span=e.querySelector('div>div>div>span');if(span)span.onVisible()})" - }, - { - "name": "hirelateral", - "url": "^https://www\\.hirelateral\\.com/", - "pageElement": "div.mainwrap > div.contentwrap > div.leftwrap > table.table-bordered > tbody> tr" - }, - { - "name": "Agristudyinfo & 20govtjobs", - "url": "^(https://agristudyinfo\\.in/|https://20govtjobs\\.com/)", - "pageElement": "#main>article", - "nextLink": ".page-numbers.current+a" - }, - { - "name": "秀色女神", - "url": "^https://www\\.xsnvshen\\.co", - "pageElement": ".container> div.longConWhite> div.workContentWrapper > div.workShow > ul > li > img#bigImg", - "nextLink": "span#next" - }, - { - "name": "Anime Time", - "url": "^https://www\\.animetime\\.pw", - "pageElement": "div.blog-posts.container > div.grid-posts", - "nextLink": "a.page-num.page-next", - "waitElement": [ - "", - "img.post-thumb:not(.lazy-yard)" - ] - }, - { - "name": "YTS Movies", - "type": 0, - "url": "^https://yts\\.mx/browse-movies", - "pageElement": "//section/div[@class=\"row\"]/div", - "nextLink": "//li[./a[@class=\"current\"]]/following-sibling::li[1]/a", - "css": "img{visibility: visible!important; display: block!important;}", - "lazyImgSrc": "data-cfsrc" - }, - { - "name": "Mobilism", - "type": 0, - "url": "^https://forum\\.mobilism\\.org/", - "pageElement": "id('page-body')//section|id('page-body')/main/table[last()]/tbody/tr|//div[@class='row-fluid blue-bar']", - "nextLink": "//a[i/@class='icon-chevron-right']", - "css": "table.phone .stats-color,table.phone .last-color,table.phone td.center { display: none; }" - }, - { - "name": "不死鸟", - "url": "^https://iao\\.su/", - "pageElement": "#index>article", - "action": 1 - }, - { - "name": "3DM搜索", - "url": "^https://so\\.3dmgame\\.com", - "pageElement": "body > div.content > div.search_wrap > div.search_lis", - "action": 1 - }, - { - "name": "deviantArt", - "url": "^https://www\\.deviantart\\.com/search", - "pageElement": "div[data-hook='all_content']>div>div>div:not([class])" - }, - { - "name": "豆瓣小组内页", - "url": "^https://www\\.douban\\.com/group/topic/", - "pageElement": "ul#comments>li", - "pageNum": "start={100*($p-1)}" - }, - { - "name": "Github issues and pulls", - "type": 0, - "action": 0, - "url": "^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/(?:issues|pulls)", - "pageElement": "//div[starts-with(@id,'issue_')]", - "nextLink": "//a[@class='next_page']", - "pinUrl": true - }, - { - "name": "Repository search results · GitHub", - "url": "^https?://github\\.com/search", - "example": "https://github.com/search?q=C%2B%2B", - "nextLinkByUrl": [ - "(&p=(\\d+))?$", - "&p={$2+1}" - ], - "pageElement": "[data-testid='results-list']", - "action": 0, - "include": "[rel='next']" - }, - { - "name": "Actions · github", - "action": 0, - "url": "^https?://github\\.com/", - "pageElement": "div.Box-row.js-socket-channel.js-updatable-content", - "nextLink": "//a[text()='Next']" - }, - { - "name": "Hoothin github page", - "url": "^https?://hoothin\\.github\\.io/", - "enable": 0 - }, - { - "name": "360搜索", - "url": "^https://www\\.so\\.com/s", - "lazyImgSrc": "data-isrc", - "css": ".so-lazyimg{opacity:1!important}.so-rich-news .pics li{float:left;margin-right:17px;}", - "pageNum": "pn={$p}" - }, - { - "name": "Mixfemdomcc", - "url": "^https://mixfemdomcc\\.com", - "css": ".gray-block a.highslide_new > img{transform:unset}" - }, - { - "name": "Handpicked Jerk-Off Instruction (JOI) Videos", - "url": "^https://joi-me\\.com", - "action": "1", - "pageElement": "#container" - }, - { - "name": "Konachan.com Anime Wallpapers", - "url": "^https://konachan\\.com/post", - "nextLink": "id(\"post-view\")/div[@class=\"sidebar\"]/div[5]/ul/li[2]/a", - "pageElement": "id(\"image\")" - }, - { - "name": "Femdom", - "url": "^https://femdomup\\.net", - "pageElement": ".cat-shortstory>article", - "pageAction": "eles.forEach(ele=>{let video=ele.querySelector('video');video.onmouseenter=e=>{video.src=video.dataset.src;video.classList.add('prev-video')};video.onmouseleave=e=>{video.src='/templates/videok2s/dleimages/plug.webm';video.classList.remove('prev-video')}})" - }, - { - "name": "Amedia", - "url": "^https://amedia\\.online", - "pageElement": "#dle-content", - "css": "img[data-src] { opacity: 1; }" - }, - { - "name": "XFantazy", - "url": "^https://xfantazy\\.com", - "pageElement": ".MuiGrid-container", - "action": 2, - "fitWidth": false - }, - { - "name": "PornAV", - "url": "^https://pornav\\.co", - "pageElement": "div#grid-container", - "css": ".cbp-lightbox{visibility: visible;}.cbp-caption-defaultWrap{-webkit-transition: -webkit-transform .6s cubic-bezier(.19,1,.22,1); transition: transform .6s cubic-bezier(.19,1,.22,1)}.cbp-caption:hover .cbp-caption-defaultWrap{-webkit-transform: scale(1.25); -moz-transform: scale(1.25); transform: scale(1.25);}.cbp-caption-activeWrap{opacity:0}.cbp-caption-activeWrap:hover{opacity:1}#grid-container.cbp-l-grid-blog{visibility: visible;}" - }, - { - "name": "Pornhub.com", - "action": 0, - "url": "^https://[^.]+\\.pornhub\\.com/(?!view_video\\.php).+", - "pageElement": "id(\"videoCategory\") | \r\nid(\"incategoryVideos\") | \r\nid(\"videoSearchResult\") | \r\nid(\"mostRecentVideosSection\") | \r\nid(\"photosAlbumsSection\") | \r\nid(\"claimedRecentVideoSection\") | \r\n//div[@class='recommendedVideosContainer']/ul | \r\nid(\"popularPornstars\") | \r\n//ul[contains(concat(' ', normalize-space(@class), ' '), ' streamateContent ')] | \r\nid('filterChannelsSection') | \r\nid('playListSection')", - "nextLink": "//li[contains(concat(\" \", normalize-space(@class), \" \"), \" page_next \")][not(contains(@class, \"disabled\"))]/a" - }, - { - "name": "草榴社區", - "type": 0, - "url": "htm_data/\\d+/\\d+/\\d+\\.html|read\\.php\\?tid=|thread0806\\.php\\?fid=", - "pageElement": "id('ajaxtable')//tr[.//a][./preceding-sibling::tr or ./following-sibling::tr]|//div[@class='t t2']", - "sleep": 2000, - "nextLink": "//div[@class='pages']/a[u]/following-sibling::a[1]", - "action": 0 - }, - { - "name": "起点中文网", - "url": "^https?://www\\.qidian\\.com/", - "nextLink": "//a[contains(@class,'lbf-pagination-current')]/parent::li/following::li/a[not(contains(@class,'lbf-pagination-disabled'))]", - "pinUrl": true - }, - { - "name": "phpwind read", - "url": "/read\\.php\\?", - "pageElement": ".main-box>.bbs-read-subbox" - }, - { - "name": "phpwind old read", - "url": "/read\\.php\\?", - "pageElement": "form[name='delatc']>a[name]", - "nextLink": "td>b+a", - "insert": "form[name='delatc']>a:last-child>table:nth-child(2)", - "insertPos": 1 - }, - { - "name": "phpwind old list", - "url": "/thread\\.php\\?", - "pageElement": "tr.t_two", - "nextLink": "td>b+a" - }, - { - "name": "虎扑", - "url": "^https?://bbs\\.hupu\\.com/\\d+", - "pageElement": ".bbs-post-wrapper-content", - "nextLink": "li.hupu-rc-pagination-next>a:not([disabled])" - }, - { - "name": "小木虫论坛", - "url": "^http://muchong\\.com", - "pageElement": "div#maincontent" - }, - { - "name": "极简", - "url": "^https://bz\\.zzzmh\\.cn/", - "pageElement": "div.img-box", - "nextLink": "div.vue_pagination_next", - "wait": "let preload=doc.querySelector('.v-image__image--preload');if(preload){var actualTop=preload.offsetTop;var current=preload.offsetParent;while(current!==null){actualTop+=current.offsetTop;current=current.offsetParent;}doc.documentElement.scrollTop=actualTop;return false;}return doc.querySelector('div.vue_pagination_next');", - "init": "if(iframe){iframe.style.position='fixed';iframe.style.top=0;iframe.height=1000;let mask=doc.querySelector('div.mask');setInterval(()=>{if(mask.style.display!='none'){iframe.style.visibility='';}else{iframe.style.visibility='hidden'}},1000)}", - "enable": 0 - }, - { - "name": "极简", - "url": "^https://chrome\\.zzzmh\\.cn/", - "pageElement": ".row>.index-card-box", - "nextLink": "[aria-label='Next page']", - "waitElement": [ - "!.v-image__image--preload" - ] - }, - { - "name": "东方财富", - "url": "^http://quote\\.eastmoney\\.com/", - "pinUrl": true, - "nextLink": "a.next:not(.disabled)", - "pageElement": "#table_wrapper-table>tbody>tr" - }, - { - "name": "mikuclub", - "url": "^https://www\\.mikuclub\\.cc/", - "loadMore": "button.get-next-page", - "nextLink": "0" - }, - { - "name": "smzdm jingxuan", - "action": 0, - "url": "^https://.*\\.smzdm\\.com/jingxuan", - "pageElement": "ul#feed-main-list>li", - "nextLinkByUrl": [ - "(.*jingxuan)(/p)?(\\d*)", - "$1/p{($3.0||1)+3}" - ], - "insert": "ul#feed-main-list", - "insertPos": 2, - "delay": "let curpage=location.href.match(/\\d+$/);if(curpage)curpage=parseInt(curpage[0])+2;else curpage=3;return document.querySelector('#J_feed_pagenation>li.current').innerText>=curpage&&document.querySelector('#J_feed_loading').style.display=='none'" - }, - { - "name": "天涯列表页", - "url": "^http://bbs\\.tianya\\.cn/list", - "pageElement": "table.tab-bbs-list>tbody:not(tbody:nth-of-type(1))" - }, - { - "name": "天涯内容页", - "url": "^http://bbs\\.tianya\\.cn/post", - "pageElement": ".atl-main>.atl-item" - }, - { - "name": "Fiction.live", - "url": "^https://fiction\\.live/", - "pageElement": "#storyPosts>div>article.chapter", - "nextLink": ".nextChapter", - "action": 1, - "wait": 500 - }, - { - "name": "微博搜索", - "url": "^https://s\\.weibo\\.com/", - "pageElement": "#pl_feedlist_index>div>div.card-wrap", - "action": 1, - "pageAction": "eles.forEach(e=>{let vc=e.querySelector('a.WB_video_h5');if(vc){let v=vc.querySelector('video');let b=vc.querySelector('button.wbpv-big-play-button');b.onclick=e=>{v.style.zIndex=9;v.controls=true;v.play()}}})" - }, - { - "name": "某小说站", - "url": "^https://yuyan\\.pw/novel/\\d+/\\d+", - "pageElement": "#nr>div", - "pageAction": "eles[0].innerHTML='  '+eval(doc.querySelector('body>script:nth-of-type(8)').innerHTML.match(/var chapter =(.*?);\\n/)[1]);" - }, - { - "name": "翠微居", - "url": "^https://www\\.cuiwei\\.org/book/\\d+/\\d+\\.html", - "action": 1, - "nextLink": "a.next", - "pageElement": "#chapter-content>p" - }, - { - "name": "套图吧", - "url": "^https://www\\.192tp\\.com/", - "pageElement": ".picsboxcenter" - }, - { - "name": "昵图网", - "url": "^https://www\\.nipic\\.com/", - "css": "a.new-works-img-box>span>img{display:initial!important}" - }, - { - "name": "inoveltranslation", - "url": "^https://inoveltranslation\\.com/", - "pageElement": ".chakra-skeleton>p", - "insert": "#chapterreadtrck", - "nextLink": "button[aria-label='next chapter']" - }, - { - "name": "lightnovelstranslations", - "url": "^https://lightnovelstranslations\\.com/", - "nextLink": "p.alignright>a", - "pageElement": ".entry-content>p" - }, - { - "name": "书山有路", - "url": "^https?://www\\.ssylu\\.com/", - "nextLink": ".pagenavi>span.current+a" - }, - { - "name": "bjav", - "url": "^https://thebjav\\.com/|^https://sexbjcam\\.com/", - "css": "img[data-src]{opacity: 1;}" - }, - { - "name": "scribblehub", - "url": "^https://www\\.scribblehub\\.com/read", - "pageElement": "#chp_raw", - "nextLink": "a.btn-next", - "pageAction": "eles.forEach(ele=>{[].forEach.call(ele.querySelectorAll('.sp-head'),sp=>{sp.onclick=e=>{sp.nextElementSibling.classList.toggle('folded')}})})" - }, - { - "name": "serx.ml", - "url": "^https?://serx\\.ml/", - "pageElement": "article.result" - }, - { - "name": "Ru.Board", - "url": "^https?://forum\\.ru-board\\.com/", - "nextLink": "table .small>b+a" - }, - { - "name": "淘宝已买到的宝贝", - "url": "^https://buyertrade\\.taobao\\.com/", - "pageElement": "table[data-reactid]", - "lockScroll": true - }, - { - "name": "淘宝店铺1", - "url": "^https?://.*\\.taobao\\.com/search\\.htm", - "pageElement": ".skin-box-bd>.grid>.item3line1", - "pagePre": "return decodeURI(response).replace(/[\\\\]/g,'')", - "nextLinkByJs": "let n=doc.querySelector('.pagination>a.next');if(!n)return;return n.href.replace(/(.*)\\/search\\.htm\\?(.*)/,'$1/i/asynSearch.htm?$2').replace(/&callback=.*?&/,'&')", - "wait": 500 - }, - { - "name": "423Down评论", - "url": "^https?://www\\.423down\\.com/", - "pageElement": "div#postcomments > ol.commentlist> li.comment" - }, - { - "name": "奔跑的奶酪", - "url": "^https://www\\.runningcheese\\.com/", - "pageElement": "ul.ajaxposts>li" - }, - { - "name": "奔跑的奶酪内页禁用", - "url": "^https://www\\.runningcheese\\.com/", - "pageElement": "section#scroll article.entry", - "enable": 0 - }, - { - "name": "异星软件", - "url": "^https://www\\.yxssp\\.com/", - "pageElement": ".td-modules-container", - "nextLink": "span.current+a" - }, - { - "name": "题目列表 - 洛谷", - "url": "^https://www\\.luogu\\.com\\.cn/problem/list", - "nextLinkByUrl": [ - "(\\?page=|$)(\\d*)", - "?page={$2+1}" - ], - "wait": 1000, - "pagePre": [ - "(.*?)", - "
    $1
    " - ], - "pageElement": ".row" - }, - { - "name": "题单广场 - 洛谷", - "url": "^https://www\\.luogu\\.com\\.cn/training/list", - "nextLinkByUrl": [ - "(&page=|$)(\\d*)", - "&page={$2+1}" - ], - "wait": 1000, - "pagePre": [ - "
  • (.*?)
  • ", - "" - ], - "pageElement": ".row" - }, - { - "name": "SteamPY", - "url": "^https?://steampy\\.com/", - "pageElement": ".market-detail > div.ivu-tabs > div.ivu-tabs-content > div.ivu-tabs-tabpane div.flex-row > .gameblock", - "nextLink": ".page-ul > li.active + li:not(.disabled)", - "pinUrl": true - }, - { - "name": "Steam Community Workshop Items", - "url": "^https?://steamcommunity\\.com/", - "pageElement": "#leftContents>div.workshopBrowsePaging+div.workshopBrowseItems" - }, - { - "name": "buondua", - "url": "^https://(.*\\.)?buondua\\.com/", - "type": 0, - "pageElement": "//div[@class='article-fulltext']", - "nextLink": "//span[.//a[@class='pagination-link is-current']]/following-sibling::span/a" - }, - { - "name": "Alibaba", - "url": "^https://www\\.alibaba\\.com//?trade/search", - "pageElement": ".organic-list>*", - "nextLink": ".seb-pagination__pages>span+a", - "action": 1, - "pageAction": "eles.forEach(ele=>{let img=ele.querySelector('div[data-image]>img');if(!img)return;img.src=img.parentNode.dataset.image})", - "wait": "return doc.querySelector('.seb-pagination__pages') && !doc.querySelector('.organic-list>p>i.ui2-icon-loading')" - }, - { - "name": "MGS Videos", - "url": "^https?://tktube\\.com/", - "pageElement": " div.list-videos > div#list_videos_common_videos_list_items > div.item", - "nextLink": ".next>a[href^='#']", - "pageAction": "eles.forEach(ele=>{let img=ele.querySelector('img[data-preview]');if(!img)return;let video=document.createElement('video');video.src=img.dataset.preview;video.setAttribute('playsinline','true');video.setAttribute('autoplay','');video.setAttribute('loop','');video.style.cssText='position: absolute; left: 0px; top: 0px; width: 318px; height: 179px; background: rgb(0, 0, 0); visibility: visible;';ele.onmouseenter=e=>{video.play();img.parentNode.appendChild(video)};ele.onmouseleave=e=>{img.parentNode.removeChild(video)}})" - }, - { - "name": "初音社", - "url": "^https://www\\.mikuclub\\.online", - "pageElement": "#post-list > div.col.card", - "lazyImgSrc": "file", - "css": "img.sl_lazyimg{opacity:1}", - "pageAction": "eles.forEach(ele=>{let img=ele.querySelector('img');img.classList.remove('sl_lazyimg')})" - }, - { - "name": "易书 电子书聚合搜索引擎", - "url": "^https?://search\\.zhelper\\.net/", - "pinUrl": true, - "nextLink": "//a[text()='下一页']", - "pageElement": "ol.list-group>a", - "pageAction": "eles.forEach(ele=>{let source=ele.querySelector('.card-title').nextSibling.data.match(/书源:(\\S+)/)[1];let id=ele.querySelector('small').innerText.match(/ID:(\\d+)/)[1];ele.onclick=e=>{axios.post('https://api.ylibrary.org/api/detail/', {id: id,source: source}).then(response=>{if (response.data.errorn) {alert(response.data.msg)} else {let detail=response.data;document.querySelector('#detailModal .modal-body').innerHTML=``}}).catch(error=>{if (error.toJSON().status == 429) {alert('请求过于频繁,请稍等一下再次尝试(429)')} else {alert(`未知错误,请打开控制台查看(${error.message})`)}});var myModal = new bootstrap.Modal(document.getElementById('detailModal'),{});myModal.toggle()}})" - }, - { - "name": "Gamersky.com", - "url": "^https://(.+)?gamersky\\.com/", - "pageElement": "(id('gspaging')|//div[contains(@class,'Mid')][contains(@class,'L')][contains(@class,'con')])/p", - "nextLink": "//div[@class='page_css']/b/following-sibling::a[1]", - "action": 0, - "css": ".post_ding{position: fixed; bottom: 5%; left: 0; z-index: 11;}.post_ding>.Content_Paging{padding: 5px 20px; width: auto;}.post_ding>.Content_Paging>.hd{width: auto;}.post_ding>.Content_Paging>.bd{display: none;}.post_ding:hover>.Content_Paging>.bd{display: block;}" - }, - { - "name": "Zoeken met Startpagina en Google", - "url": "^https?://startgoogle\\.startpagina\\.nl/.*query=", - "pinUrl": true, - "history": 0, - "nextLinkByUrl": [ - "/(search)?\\?(.*)&(query|q)=(\\w+)(&page=(\\d+))?.*", - "/search?$2&q=$4&page={$6+1}&start={($6-1)*10}&num=10" - ], - "pageElement": "#organic-results>.organic", - "pagePre": "let lis=[];JSON.parse(response).results.forEach(r=>{let li=`
  • ${r.title}

    ${r.display_url}
    ${r.snippet}
  • `;lis.push(li)});return `
      ${lis.join('')}
    `;" - }, - { - "name": "Parts search", - "url": "^https?://pcpph\\.in/", - "init": "$('#search_results')[0].dataset.pageLength=100;$('#search_results_length select').val(100).trigger('change');" - }, - { - "name": "SpankBang", - "example": "https://jp.spankbang.com/trending_videos/", - "url": "^https?://([a-z]{2}\\.)?spankbang\\.com/(trending_videos|new_videos|category|pornstar|upcoming|most_popular|s)", - "pageElement": ".video-list.video-rotate.video-list-with-ads", - "replaceElement": ".pagination", - "css": ".pagetual_pageBar+div {margin-top: -5px !important;}" - }, - { - "name": "法務部行政執行署拍賣公告查詢系統", - "url": "^https?://www\\.tpkonsale\\.moj\\.gov\\.tw/", - "nextLinkByUrl": [ - "&PAGINATION_PAGE_NO=(\\d+)", - "&PAGINATION_PAGE_NO={$1+1}" - ], - "pageElement": ".table_scroll" - }, - { - "name": "贵州省图", - "url": "^https?://sxgzlib\\.chineseall\\.cn/", - "nextLink": ".item.twocol>span:nth-child(2)", - "css": "#bookContent{overflow: scroll;}" - }, - { - "name": "夺宝岛列表-京东_拍拍", - "url": "^https?://1paipai\\.jd\\.com/", - "nextLink": ".btn-next", - "pinUrl": true, - "stopSign": [ - "", - ".btn-next[disabled]" - ], - "pageElement": "body > div:nth-of-type(1) > div.auction-list > div.list-selector > div.container > div:nth-of-type(2)" - }, - { - "name": "高校古文献資源庫读者检索系统", - "url": "^https?://rbsc\\.calis\\.edu\\.cn:8086/", - "pageElement": "input~tr" - }, - { - "name": "Ru.Board", - "url": "^https?://forum\\.ru-board\\.com/", - "nextLink": "table .small>b+a" - }, - { - "name": "iconfont-阿里巴巴矢量图标库", - "url": "^https://www\\.iconfont\\.cn", - "pageElement": "ul.block-icon-list>li", - "wait": 500, - "nextLink": "a.next" - }, - { - "name": "16Personalities", - "url": "^https://www\\.16personalities\\.com", - "enable": 0 - }, - { - "name": "Soccercatch.com", - "url": "^https://www\\.soccercatch\\.com", - "nextLink": ".tabs-page[data-active=true] .pagination-next", - "init": "if(doc){let tabName=document.querySelector('[data-active=true]').dataset.title;doc.querySelector('[data-title='+tabName+']').click()}", - "pageElement": "[data-active=true]>section>*", - "wait": "if(doc==document)return true;let tabName=document.querySelector('[data-active=true]').dataset.title;doc.querySelector('[data-title='+tabName+']').click();return true;" - }, - { - "name": "Upwork", - "url": "^https?://www\\.upwork\\.com/.*/search/", - "pageElement": ".up-card-section.up-card-hover", - "wait": 1000, - "iframeInit": "win.self=win.top" - }, - { - "name": "All the Internet", - "url": "^https://www\\.alltheinternet\\.com", - "pageElement": ".gsc-result", - "nextLink": ".pagebuttons", - "wait": 500 - }, - { - "name": "Google cse", - "url": "^(https://www\\.lukol\\.com|https://www\\.searchcraigslist\\.net|https://cse\\.google\\.com.*&gsc\\.q=)", - "pageElement": ".gsc-expansionArea>.gsc-result", - "nextLink": ".gsc-cursor-current-page+div", - "wait": 500 - }, - { - "name": "微博", - "url": "^https://weibo\\.com", - "pageElement": ".WB_feed", - "nextLink": "a.next", - "exclude": ".container", - "wait": 500 - }, - { - "name": "蝦皮購物台灣", - "url": "^https?://shopee\\.tw/", - "pinUrl": true, - "nextLink": "button.shopee-icon-button--right", - "pageElement": ".shopee-search-item-result__items", - "waitElement": [ - "", - ".shopee-search-item-result__item img:not([src]),.shopee-image-placeholder" + [ + ".itemCount", + "^(\\d+)" ] - }, - { - "name": "露天市集", - "url": "^https?://www\\.ruten\\.com\\.tw/find/", - "nextLink": "button[aria-label='下一頁']", - "pageElement": ".search-result-container", - "wait": 1000 - }, - { - "name": "Free Porn Videos & Sex Tube Movies at xHamster", - "url": "^https://xhopen\\.com", - "pageElement": ".thumb-list.thumb-list--sidebar", - "action": 2 - }, - { - "name": "全站书库-优书网", - "url": "^https://www\\.yousuu\\.com", - "pageElement": "div.result", - "nextLink": "button.btn-next", - "lockScroll": true - }, - { - "name": "infinitenoveltranslations", - "url": "^https://infinitenoveltranslations\\.net", - "type": 0, - "pageElement": "//div[@class='entry-content']", - "nextLink": "//a[contains(text(),'Next Chapter')]", - "autoClick": "//a[contains(text(),'Enjoy')]", - "pinUrl": true - }, - { - "name": "搜狗wap", - "url": "^https?://wap\\.sogou\\.com/web/searchList\\.jsp", - "loadMore": "#ajax_next_page", - "nextLink": 0 - }, - { - "name": "bt1207", - "url": "^https://bt1207ao\\.xyz/", - "nextLinkByJs": "let n=doc.querySelector('ul.pagination>li.active+li>a');if(!n)return null;let params=[]; let form=doc.querySelector('#search-form'); [].forEach.call(form.querySelectorAll('input'), input=>{ if(input.name=='p')params.push('p='+n.innerText);else params.push(input.name+'='+input.value); }); return form.action+'?'+params.join('&');", - "pageElement": "ul.list-unstyled" - }, - { - "name": "REPACK скачать", - "url": "^https?://lrepacks\\.net/", - "css": ".animated .slideUp{opacity:1}" - }, - { - "name": "豆瓣电影", - "url": "^https://movie\\.douban\\.com", - "wheel": true, - "loadMore": ".explore-more>button" - }, - { - "name": "威锋", - "url": "^https?://www\\.feng\\.com/", - "nextLink": ".next:not(.disable)", - "pinUrl": true, - "loadMore": ".load-more-btn>button" - }, - { - "name": "游戏怀旧灌水首页禁用", - "url": "^https?://www\\.yxhjgs\\.com/$", - "enable": 0 - }, - { - "name": "百度跳转页禁用", - "url": "^https?://jump\\d?\\.bdimg\\.com/safecheck", - "enable": 0 - }, - { - "name": "检测到AC百度就不运行", - "url": ".", - "pageElement": ".AC-style-logo", - "enable": 0 - }, - { - "name": "pan.baidu", - "url": "^https?://.*pan\\.baidu\\.com", - "enable": 0 - }, - { - "name": "baike.baidu", - "url": "^https?://baike\\.baidu\\.com", - "enable": 0 - }, - { - "name": "wenku.baidu", - "url": "^https?://wenku\\.baidu\\.com/view", - "enable": 0 - }, - { - "name": "baofeng", - "url": "^https?://((m|www)\\.)?baofeng\\.com/play", - "enable": 0 - }, - { - "name": "bilibili", - "url": "^https?://((m|www|live)\\.)?bilibili\\.com/(bangumi/play|video|anime|\\d)", - "enable": 0 - }, - { - "name": "instagram", - "url": "^https?://((m|www)\\.)?instagram\\.com", - "enable": 0 - }, - { - "name": "iqiyi", - "url": "^https?://((m|www)\\.)?iqiyi\\.com/(a_|v_|w_|$)", - "enable": 0 - }, - { - "name": "letv", - "url": "^https?://((m|www)\\.)?le\\.com/ptv/vplay", - "enable": 0 - }, - { - "name": "mega", - "url": "^https?://(.*\\.)?mega\\.", - "enable": 0 - }, - { - "name": "mgtv", - "url": "^https?://((m|www)\\.)?mgtv\\.com/b", - "enable": 0 - }, - { - "name": "tudou", - "url": "^https?://((m|i|v|www|play)\\.)?tudou\\.com/(albumplay|listplay|programs/view)", - "enable": 0 - }, - { - "name": "youku", - "url": "^https?://((m|i|v|www|play)\\.)?youku\\.com/(v_|alipay_video)", - "enable": 0 - }, - { - "name": "youtube", - "url": "^https?://(m\\.|www\\.)?youtube\\.com", - "enable": 0 - }, - { - "name": "sohu tv", - "url": "^https?://(m\\.)?(film|tv)\\.sohu\\.com/(album|v)", - "enable": 0 - }, - { - "name": "acfun", - "url": "^https?://((m|www|live)\\.)?acfun\\.cn/(v|live)", - "enable": 0 - }, - { - "name": "pptv", - "url": "^https?://(m|v|vip)\\.pptv\\.com/show", - "enable": 0 - }, - { - "name": "qqtv", - "url": "^https?://(m\\.)?v\\.qq\\.com/(tv|x/cover|x/page)", - "enable": 0 - }, - { - "name": "wasu", - "url": "^https?://(m|www)\\.wasu\\.cn/Play/show", - "enable": 0 - }, - { - "name": "map.google", - "url": "^https?://(maps\\.google\\.|www\\.google\\..*/maps)", - "enable": 0 - }, - { - "name": "order.jd", - "url": "^https?://order\\.jd\\.com", - "enable": 0 - }, - { - "name": "twitter", - "url": "^https?://(m\\.|www\\.)?twitter\\.com", - "enable": 0 - }, - { - "name": "google newtab", - "url": "^https?://www\\.google\\..*/_/chrome/newtab", - "enable": 0 - }, - { - "name": "toodledo", - "url": "^https?://www\\.toodledo\\.com/tasks", - "enable": 0 - }, - { - "name": "imgur", - "url": "^https?://imgur\\.com/", - "enable": 0 - } + ], + "pageElement": ".centerImage img[alt]", + "replaceElement": ".arrowLeft,.arrowRight,.thumbSliderButtons,.thumbSliderContent,.itemCount", + "pageBar": 0, + "css": ".arrowLeft,.arrowRight{display:none!important}#photoImageSection img{margin:0!important}" +}, +{ + "name": "PornHub album", + "author": "skofkyo", + "example": "https://cn.pornhub.com/albums,https://cn.pornhub.com/album/10042641", + "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/album", + "pinUrl": true, + "nextLink": ".page_next:not(.disabled)>a", + "pageElement": ".photoAlbumListContainer,#albumListResults>*,.photosAlbumsListing,.albumList>*", + "replaceElement": ".paginationGated", + "pageInit": "doc.querySelectorAll('.js_lazy_bkg').forEach(div=>{div.style.backgroundImage=`url('${div.dataset.bkg}')`})", + "lazyImgSrc": "data-thumb_url" +}, +{ + "name": "Pornhub", + "author": "skofkyo", + "example": "https://cn.pornhub.com/", + "url": "^https?://[a-z]{2,3}\\.pornhub\\.com/", + "exclude": [ + ".photoAlbumListContainer", + "#albumListResults", + ".photosAlbumsListing", + ".albumList", + ".centerImage img[alt]" + ], + "pinUrl": true, + "action": 1, + "nextLink": ".page_next:not(.disabled)>a", + "pageElement": "#singleFeedSection>.pcVideoListItem,#videoCategory>.pcVideoListItem,#videoSearchResult>.pcVideoListItem,.videoList,.homeSection,#recommendedListings,#mostRecentVideosSection", + "replaceElement": ".paginationGated" +}, +{ + "name": "XVIDEOS", + "author": "skofkyo", + "example": "https://www.xvideos.com/", + "url": "^https?://www\\.(xvideos|xnxx)\\.com/", + "nextLink": "//li[a/@class='active']/following-sibling::li[1]/a | //a[@class='no-page next-page']", + "pinUrl": true, + "pageElement": ".mozaique.cust-nb-cols", + "replaceElement": ".pagination", + "pageAction": "xv.thumb_block_initiator.init_listing()" +}, +{ + "name": "CableAV", + "author": "skofkyo", + "example": "https://cableav.tv/playlist/lk4cv1f3j1v/", + "url": "^https?://cableav\\.tv/", + "nextLink": "span.current+a", + "pageElement": ".blog-items>article", + "replaceElement": ".wp-pagenavi" +}, +{ + "name": "肉視頻", + "author": "skofkyo", + "example": "https://rou.video/t/%E6%8E%A2%E8%8A%B1", + "url": "^https?://(rouv\\d+|rou)\\.(xyz|video)/(t|v|search)", + "pinUrl": true, + "nextLink": "//a[text()='下一頁']", + "pageElement": ".grid-cols-2>.shadow", + "replaceElement": ".bg-white.px-4.py-3", + "css": ".col-span-2.md\\:col-span-1{display:none!important}" +}, +{ + "name": "jav9999", + "author": "skofkyo", + "example": "https://jav9999.com/uded/1", + "url": "^https?://jav9999\\.com/(1|uded|amateur|chinese|actress|wuman|search)?", + "nextLink": "//a[text()='下一頁']", + "pageElement": ".yps>.yp", + "replaceElement": ".row+.ad-list+.row.text-center.fanye>ul.text-center" +}, +{ + "name": "onejav.com", + "author": "skofkyo", + "example": "https://onejav.com/new", + "url": "^https?://onejav\\.com/(new|popular|tag|actress|search)", + "nextLink": "//a[text()='Next']", + "pageElement": "div.card.mb-3,.columns.is-multiline", + "replaceElement": "nav.pagination", + "css": ".pagetual_pageBar {margin-top: -10px !important;margin-bottom: 21px !important;}" +}, +{ + "name": "onejav.com - 首頁", + "author": "skofkyo", + "example": "https://onejav.com/", + "url": "^https?://onejav\\.com/$", + "loadMore": "#button-load-more" +}, +{ + "name": "微圖坊 - 看圖", + "author": "skofkyo", + "example": "https://www.v2ph.com/album/SSA-392", + "url": "^https?://(www\\.)?v2ph\\.(com|net|ovh|ru)/album/", + "nextLink": ".active.page-item+li>a", + "pageElement": "div.album-photo", + "replaceElement": ".pagination", + "pageBar": 0, + "css": ".album-photo,.photos-list img{opacity:1 !important;position:unset !important;padding:0 !important}" +}, +{ + "name": "微圖坊 - 分類", + "author": "skofkyo", + "example": "https://www.v2ph.com/country/taiwan", + "url": "^https?://(www\\.)?v2ph\\.(com|net|ovh|ru)/", + "nextLink": ".active.page-item+li>a", + "pageElement": "//div[(div/div/div/a/@class='media-cover') and contains(@class,'albums-list')]", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar {margin-top: 5px!important;}.pagetual_pageBar+div {margin-top: -8px!important;}img{opacity:1!important}" +}, +{ + "name": "美图乐 - 分類", + "author": "skofkyo", + "example": "https://www.meitule.cc/i/", + "url": "^https?://www\\.meitule\\.\\w+/", + "pageElement": ".list-item", + "replaceElement": ".page", + "css": ".list-img img{opacity:1!important}" +}, +{ + "name": "極品性感美女 - 搜索", + "author": "skofkyo", + "example": "https://www.321782.xyz/plus/search/index.asp?keyword=XiuRen", + "url": "^https?://[^/]+/plus/search/index\\.asp\\?keyword=", + "include": "body>.container>.container+font>font>font>.list>.list>.node+.pagination", + "nextLink": ".current+a", + "pageElement": ".node", + "replaceElement": ".node+.pagination", + "css": ".pagetual_pageBar {margin-top: -5px !important;margin-bottom: 15px !important;}" +}, +{ + "name": "極品性感美女 - 看圖", + "author": "skofkyo", + "example": "https://www.321782.xyz/Xiuren/Xiuren23112.html", + "url": "^https?://[^/]+/\\w+/\\w+\\.html", + "include": [ + "body>section.container>div.content-wrap>div.content>article.article-content img[alt]", + ".article-content>.pagination", + "//div[@class='content']//a[text()='极品性感美女']" + ], + "nextLink": ".current+a", + "pageElement": ".article-content img[alt]:not([width])", + "replaceElement": ".pagination", + "pageBar": 0, + "pageAction": "document.querySelectorAll('article img[alt]').forEach(img=>{img.removeAttribute('title')})", + "css": ".article-content img[width],.article-content br{display:none!important}" +}, +{ + "name": "極品性感美女 - 分類", + "author": "skofkyo", + "example": "https://www.xgmn01.com/Xiuren/", + "url": "^https?://[^/]+/\\w+/", + "include": [ + "body>.container>.content-wrap>.content>.speedbar+.widget-title", + ".widget-title+.pagination", + "//div[@class='content']//a[text()='极品性感美女']" + ], + "nextLink": ".current+a", + "pageElement": ".widget-title", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar{margin-top:-15px !important}" +}, +{ + "name": "Nyaa", + "author": "skofkyo", + "example": "https://sukebei.nyaa.si/", + "url": "^https?://(sukebei\\.)?nyaa\\.si/", + "nextLink": "a[rel='next'], li.next>a", + "pageElement": "table.torrent-list>tbody>tr", + "replaceElement": "ul.pagination" +}, +{ + "name": "Mixfemdomcc", + "author": "skofkyo", + "example": "https://mixfemdomcc.com/lastnews/", + "url": "^https?://mixfemdomcc.com/", + "nextLink": ".nnext>a", + "pageElement": ".gray-block", + "replaceElement": ".basenavi", + "pageAction": "eval(document.querySelector('.gray-block>script').innerHTML)" +}, +{ + "name": "Femdom", + "author": "skofkyo", + "example": "https://femdomup.net/lastnews/", + "url": "^https?://femdomup\\.net/", + "nextLink": "//a[text()='Next']", + "pageElement": "article.shortstory", + "replaceElement": ".navigation" +}, +{ + "name": "xstarshub", + "author": "skofkyo", + "example": "https://xstarshub.com/", + "url": "^https?://xstarshub.com/", + "nextLink": "a.next", + "pageElement": ".posts-list>article", + "replaceElement": ".nav-links" +}, +{ + "name": "New Videos", + "author": "skofkyo", + "example": "https://watchporn.to/latest-updates/", + "url": "^https?://watchporn\\.to/", + "nextLink": "//a[text()='Next']", + "pageElement": ".list-videos", + "replaceElement": ".pagination", + "pageAction": "let url=document.querySelector(\"script[src*='main.min.js']\").src;if(url)fetch(url).then(res=>res.text()).then((res)=>{eval(res)})" +}, +{ + "name": "SpankBang", + "author": "skofkyo", + "example": "https://jp.spankbang.com/trending_videos/", + "url": "^https?://([a-z]{2}\\.)?spankbang\\.com/", + "pinUrl": true, + "nextLink": ".next:not(.disabled)>a,a.next", + "pageElement": ".video-list .video-item[id],#pornstars ul.results li", + "replaceElement": ".pagination", + "pageAction": "image_rotate('.video-rotate .thumb')" +}, +{ + "name": "愛污傳媒", + "author": "skofkyo", + "example": "https://aiwucm.com/", + "url": "aiw", + "include": [ + "//title[contains(text(),'爱污传媒')]", + ".pagination.justify-content-center" + ], + "nextLink": "a[title='Go to next page!']", + "pageElement": ".grid.mx-auto.videos>.cell.video", + "replaceElement": ".pagination.justify-content-center" +}, +{ + "name": "3xchina.net", + "author": "skofkyo", + "example": "https://3xchina.net/category/chinese-av/", + "url": "^https?://3xchina\\.net/", + "nextLink": "//a[text()='Next']", + "pageElement": ".videos-list>article", + "replaceElement": ".pagination" +}, +{ + "name": "AVPRO - 搜索", + "author": "skofkyo", + "example": "https://avpro.cc/search?keyword=%E7%BE%8E%E5%A5%B3&page_id=1", + "url": "^https?://avpro\\.cc/search", + "nextLinkByUrl": [ + "(keyword=[^&]+)(&page_id=(\\d+))?$", + "$1&page_id={($3.0||1)+1}", + "li.active+li>a:not([title='Last Page']" + ], + "pageElement": ".videos-latest-list>*", + "replaceElement": ".pagination,.showing_pages", + "pageAction": "let ge=e=>document.querySelector(e);setTimeout(()=>{let as=document.querySelectorAll('a.waves-effect:not([title])');let ls=location.search.replace(/&page_id=\\d+/,'');as.forEach(a=>{let p=a.innerText;let ap=ls+'&page_id='+p;a.href=ap;a.removeAttribute('onclick')});let fp=ge(`a[title='First Page']`);fp.href=ls;fp.removeAttribute('onclick');let cp=ge('li.active>a').innerText;let app=ge(`a[title='Previous Page']`);if(app!=null){let pp=cp-1;app.href=ls+'&page_id='+pp;app.removeAttribute('onclick')}let np=ge('li.active+li>a').innerText;let anp=ge(`a[title='Next Page']`);if(anp!=null){anp.href=ls+'&page_id='+np;anp.removeAttribute('onclick')}let lp=ge('.showing_pages').innerText;let match=lp.match(/of (\\d+)/);let alp=ge(`a[title='Last Page']`);alp.href=ls+'&page_id='+match[1];alp.removeAttribute('onclick')},1000)" +}, +{ + "name": "AVPRO", + "author": "skofkyo", + "example": "https://avpro.cc/videos/category/847?page_id=1", + "url": "^https?://avpro\\.cc/", + "nextLink": "a[title='Next Page']", + "pageElement": ".videos-latest-list>*", + "replaceElement": ".pagination" +}, +{ + "name": "Supjav", + "author": "skofkyo", + "example": "https://supjav.com/ja/category/uncensored-jav", + "action": 1, + "url": "^https?://supjav\\.com/(zh/|ja/)?(\\?s=|popular|category)", + "nextLink": "li.active+li>a", + "pageElement": ".posts.clearfix>*", + "replaceElement": ".pagination" +}, +{ + "name": "加勒逼A片網", + "author": "skofkyo", + "example": "https://159i.net/video/", + "url": "^https?://159i\\.net/", + "action": 1, + "nextLink": "//a[text()='下一頁']", + "pageElement": "#content>.post.f", + "replaceElement": ".page-navigator" +}, +{ + "name": "avple.tv - 類別", + "author": "skofkyo", + "example": "https://avple.tv/tags/135/1/date", + "url": "^https?://avple\\.tv/tags/\\d+/\\d+/\\w+$", + "nextLinkByUrl": [ + "(/\\d+/)(\\d+)(/\\w+)$", + "$1{$2+1}$3", + "[aria-label='Go to next page']:not(.Mui-disabled)" + ], + "pageElement": ".jss23", + "replaceElement": ".jss15", + "pageAction": "let placeholder=[...document.querySelectorAll('.lazyload-placeholder')];JSON.parse(doc.querySelector('#__NEXT_DATA__').innerText).props.pageProps.data.forEach((e,i)=>{let img=new Image();img.src=e.img_preview;img.alt=e.title;img.className='jss28';placeholder[i].outerHTML=img.outerHTML});let ge=e=>document.querySelector(e);setTimeout(()=>{let bs=document.querySelectorAll(`button[aria-label^='Go to page']`);let pp=ge(`button[aria-label='Go to previous page']:not(.Mui-disabled)`);let cp=ge('button.Mui-selected');let np=ge(`button[aria-label='Go to next page']:not(.Mui-disabled)`);let lp=location.pathname;let lps=lp.split('/');bs.forEach(button=>{let pn=button.textContent;let link='/'+lps[1]+'/'+lps[2]+'/'+pn+'/'+lps[4];let lh=`location.href='${link}'`;button.setAttribute('onclick',lh)});if(pp){let cpn=cp.textContent;let p=cpn-1;let link='/'+lps[1]+'/'+lps[2]+'/'+p+'/'+lps[4];let lh=`location.href='${link}'`;pp.setAttribute('onclick',lh)}if(np){let npn=cp.parentNode.nextSibling.textContent;let link='/'+lps[1]+'/'+lps[2]+'/'+npn+'/'+lps[4];let lh=`location.href='${link}'`;np.setAttribute('onclick',lh)}},1000)", + "css": ".lazyload-wrapper+span.jss28{display:none!important}" +}, +{ + "name": "avple.tv - 搜索", + "author": "skofkyo", + "example": "https://avple.tv/search?key=FC2PPV&page=1&sort=date", + "url": "^https?://avple\\.tv/search\\?key=", + "nextLinkByUrl": [ + "(&page=)(\\d+)(&.+)$", + "$1{$2+1}$3", + "[aria-label='Go to next page']:not(.Mui-disabled)" + ], + "pageElement": ".jss23", + "replaceElement": ".jss15", + "pageAction": "let placeholder=[...document.querySelectorAll('.lazyload-placeholder')];JSON.parse(doc.querySelector('#__NEXT_DATA__').innerText).props.pageProps.data.forEach((e,i)=>{let img=new Image();img.src=e.img_preview;img.alt=e.title;img.className='jss28';placeholder[i].outerHTML=img.outerHTML});let ge=e=>document.querySelector(e);setTimeout(()=>{let bs=document.querySelectorAll(`button[aria-label^='Go to page']`);let pp=ge(`button[aria-label='Go to previous page']:not(.Mui-disabled)`);let cp=ge('button.Mui-selected');let np=ge(`button[aria-label='Go to next page']:not(.Mui-disabled)`);let ls=location.search;let m=ls.match(/^(\\?key=)([^&]+)(&page=)(\\d+)(&sort=date|&sort=view_count|&sort=favorite)/);bs.forEach(button=>{let pn=button.textContent;let link=m[1]+m[2]+m[3]+pn+m[5];let lh=`location.href='${link}'`;button.setAttribute('onclick',lh)});if(pp){let cpn=cp.textContent;let p=cpn-1;let link=m[1]+m[2]+m[3]+p+m[5];let lh=`location.href='${link}'`;pp.setAttribute('onclick',lh)}if(np){let npn=cp.parentNode.nextSibling.textContent;let link=m[1]+m[2]+m[3]+npn+m[5];let lh=`location.href='${link}'`;np.setAttribute('onclick',lh)}},1000)", + "css": ".lazyload-wrapper+span.jss28{display:none!important;}" +}, +{ + "name": "Javbar", + "author": "skofkyo", + "example": "https://javbar.com/category/2.html", + "url": "^https?://javbar\\.com/", + "nextLink": "li.active+li>a", + "pageElement": ".tray-content", + "replaceElement": ".pagination" +}, +{ + "name": "javbangers.com", + "author": "skofkyo", + "example": "https://www.javbangers.com/latest-updates/", + "url": "^https?://www\\.javbangers\\.com/", + "include": ".pagination", + "nextLink": "li.page-current+li.page>a", + "pageElement": ".porntrex-box .video-item,.box .item", + "replaceElement": ".pagination" +}, +{ + "name": "HOTGIRL.asia - 清單", + "author": "skofkyo", + "example": "https://hotgirl.asia/genre/china/", + "url": "^https?://hotgirl\\.asia/(\\?s=|genre|tag|photos|livestream|china|korea|videos)(\\/)?", + "nextLink": "li.active+li>a", + "pageElement": ".vl-item,.movies-list,#myimg", + "replaceElement": "#pagination" +}, +{ + "name": "HOTGIRL.asia - 寫真", + "author": "skofkyo", + "example": "https://hotgirl.asia/imiss%e7%88%b1%e8%9c%9c%e7%a4%be-vol-693-lavinia%e8%82%89%e8%82%89/", + "url": "^https?://hotgirl\\.asia/[^/]+/", + "nextLink": "li.active+li>a", + "pageElement": "//div[@class='galeria_img'][img[starts-with(@src,'http')]]", + "replaceElement": "#pagination", + "css": "#footer,#commentfb,.content-kuss{display: none!important;}", + "pageBar": 0 +}, +{ + "name": "Xgirls - 看圖", + "author": "skofkyo", + "example": "https://xgirlscollection.com/collection/2015", + "url": "^https?://xgirlscollection\\.com/", + "nextLink": "//a[i[@class='fa fa-angle-right']]", + "pageElement": "img[id].collection-image", + "replaceElement": ".pagination", + "pageBar": 0 +}, +{ + "name": "Xgirls - 分類", + "author": "skofkyo", + "example": "https://xgirlscollection.com/collections", + "url": "^https?://xgirlscollection\\.com/", + "nextLink": "//a[i[@class='fa fa-angle-right']]", + "pageElement": "//div[@class='container']/div[@class='row']/div/div[div/div[@class='card-wrapper']/div[@class='card-img']/a/img][@class='row']/*", + "replaceElement": ".pagination" +}, +{ + "name": "心动美图 - 看圖", + "author": "skofkyo", + "example": "https://www.wai77.com/xiuren%e7%a7%80%e4%ba%ba%e7%bd%91-no-5566-manuela%e7%8e%9b%e9%b2%81%e5%a8%9c-%e6%b7%a1%e7%bb%bf%e7%81%b0%e8%89%b2%e4%b8%8a%e8%a1%a3%e6%90%ad%e9%85%8d%e7%99%bd%e8%89%b2%e7%9f%ad%e8%a3%99/", + "url": "^https?://www\\.wai77\\.com/[^/]+/", + "init": "[...document.querySelectorAll('.cbox img')].forEach(img=>{let p=img.parentNode;img.src=p.dataset.src;p.outerHTML=img.outerHTML});", + "nextLink": "span.current+a", + "pageElement": ".cbox", + "replaceElement": ".page-links", + "pageInit": "[...doc.querySelectorAll('.cbox img')].forEach(img=>{let p=img.parentNode;img.src=p.dataset.src;p.outerHTML=img.outerHTML});", + "css": ".cbox{display:block!important}.cbox img{width:100%!important}", + "pageBar": 0 +}, +{ + "name": "心动美图 - 分類", + "author": "skofkyo", + "example": "https://www.wai77.com/tag/%E7%A7%80%E4%BA%BA%E7%BD%91/", + "url": "^https?://www\\.wai77\\.com/(tag|category|\\?s=)", + "nextLink": "span.current+a", + "pageElement": "#recent-content>[id^='post']", + "replaceElement": ".nav-links" +}, +{ + "name": "秀色女神 - 手機版看圖", + "author": "skofkyo", + "example": "https://m.xsnvshen.co/album/39844?p=1", + "url": "^https?://m\\.xsnvshen\\.[a-z]{2,3}/album/\\d+(\\?p=\\d+)?", + "pinUrl": true, + "action": 1, + "init": "document.querySelectorAll('#arcbox img.nolazy').forEach(img=>{img.src=img.src.replace(/thumb[^/]+\\//,'');img.removeAttribute('style');img.parentNode.outerHTML=img.outerHTML});document.querySelectorAll('#arcbox img.lazy[alt]').forEach(img=>{img.src=img.getAttribute('data-original').replace(/thumb[^/]+\\//,'');img.removeAttribute('data-original');img.setAttribute('class','nolazy');img.removeAttribute('style');img.parentNode.outerHTML=img.outerHTML});", + "nextLink": "a.pg_next", + "pageElement": "#arcbox img[alt]", + "replaceElement": "#pageNum", + "pageInit": "doc.querySelectorAll('#arcbox img.nolazy').forEach(img=>{img.src=img.src.replace(/thumb[^/]+\\//,'');img.removeAttribute('style');});doc.querySelectorAll('#arcbox img.lazy[alt]').forEach(img=>{img.src=img.getAttribute('data-original').replace(/thumb[^/]+\\//,'');img.removeAttribute('data-original');img.removeAttribute('style');img.setAttribute('class','nolazy')});", + "pageBar": 0, + "sleep": 5000, + "css": "#arcbox img[alt]{width:auto!important;height:auto!important;max-width:100%!important;display:block!important;margin:0px auto !important}[id^='ad']{display:none!important}" +}, +{ + "name": "秀色女神 - 分類", + "author": "skofkyo", + "example": "https://www.xsnvshen.co/girl/", + "url": "^https?://www\\.xsnvshen\\.[a-z]{2,3}/", + "include": "#pageNum", + "nextLink": "a.active+a", + "pageElement": "//ul[li[contains(@class,'min')]/a[@class='itemimg']]", + "replaceElement": "#pageNum" +}, +{ + "name": "丽图·污漫画 - 閱讀", + "author": "skofkyo", + "example": "https://litu100.xyz/comic/id-624428abcf548/1.html", + "url": "^https?://litu100\\.xyz/comic/id-\\w+/\\d+\\.html", + "init": "document.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", + "nextLink": "a.next", + "pageElement": ".article.comic", + "pageInit": "doc.querySelectorAll('img[data-src]').forEach(e=>{e.src=e.dataset.src;e.removeAttribute('data-src')})", + "replaceElement": ".prevNext", + "pageBarText": "return doc.querySelector('.tag[checked=true]').innerText;", + "css": "body{overflow:unset!important}.banner_ad,.swal2-container,.article:has(.media),.jquery-modal.blocker.current,.push-top-container{display:none!important}" +}, +{ + "name": "丽图·污漫画 - 分類", + "author": "skofkyo", + "example": "https://litu100.xyz/comics.html", + "url": "^https?://litu100\\.xyz/", + "nextLink": "a.next", + "pageElement": ".list>.item", + "replaceElement": ".pager", + "css": "body{overflow:unset!important}.banner_ad,.swal2-container,.article:has(.media),.jquery-modal.blocker.current,.push-top-container{display:none!important}" +}, +{ + "name": "海棠小说网 - 手机阅读", + "author": "skofkyo", + "example": "https://m.haitangtxt.net/19/19363/1736943.html", + "url": "^https?://m\\.haitangtxt\\.net/", + "nextLink": "//a[contains(text(),'下一页') or contains(text(),'下一章')]", + "pageElement": ".content_title,#articlecontent", + "replaceElement": ".content_top,.novelbutton" +}, +{ + "name": "海棠小说网 - 分类页", + "author": "skofkyo", + "example": "https://m.haitangtxt.net/top/", + "url": "^https?://m\\.haitangtxt\\.net/", + "nextLink": "//a[text()='下一页' or text()='下页']", + "pageElement": ".articlegeneral,.full_content,.chapters>li", + "replaceElement": ".page" +}, +{ + "name": "小黃書 - 成人小說閱讀", + "author": "skofkyo", + "example": "https://tw.xchina.co/fiction/id-64036d06046a5/1.html", + "url": "^https?://(\\w+\\.)?xchina\\.\\w+/fiction/id-\\w+/\\d+\\.html", + "nextLink": "a.next", + "pageElement": ".article.large", + "replaceElement": ".prevNext", + "css": ".banner_ad{display:none!important}" +}, +{ + "name": "小黃書 - 模特、小說目錄", + "author": "skofkyo", + "example": "https://tw.xchina.co/fiction/id-64036d06046a5.html,https://tw.xchina.co/model/id-605849cd980ad.html", + "url": "^https?://(\\w+\\.)?xchina\\.\\w+/(fiction|model)/id-\\w+\\.html", + "css": ".aside>.center,.banner_ad{display:none!important}" +}, +{ + "name": "小黃書 - 搜索", + "author": "skofkyo", + "example": "https://tw.xchina.co/search/keyword-%E4%B8%9D%E8%A2%9C/mode-photo.html", + "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.\\w+/search/", + "init": "let bs = document.querySelector('body[style]');if(bs)bs.removeAttribute('style');", + "nextLink": "a.next", + "pageElement": ".article.result>.list", + "replaceElement": [ + "div.article:not(.result)+div.pager", + "div.article.result+div.pager" + ], + "css": ".slider-ad,.jquery-modal.blocker.current,.article.ad,.body>*:not(.article):not(.pager),.banner_ad{display:none!important}", + "rate": 3 +}, +{ + "name": "小黃書 - 原圖瀏覽", + "author": "skofkyo", + "example": "https://tw.xchina.co/photoShow.php?server=1&id=6311c6080f9a5&index=0&pageSize=19&title=%E3%80%90%E6%9C%AA%E5%88%86%E9%A1%9E%E4%BA%BA%E9%AB%94%E6%94%9D%E5%BD%B1%E3%80%91%E9%87%91%E9%AD%9Akinngyo%E3%80%8A%E5%A4%8F%E6%97%A5%E5%8D%88%E5%BE%8C%E3%80%8B", + "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.\\w+/photoShow\\.php", + "action": 1, + "nextLink": "//div[@class='image']/a[3][i[@class='fa fa-arrow-right right']][not(starts-with(@href,'java'))]", + "pageElement": ".container > img", + "replaceElement": ".image>.index,.image>a", + "css": ".image>a:nth-child(3),.image>a:nth-child(4),body>.image~*:not([id^='pv-']):not([class^='pv-']):not(.pagetual_tipsWords){display: none!important;}.container>img {max-width: 100% !important;display: block !important;margin: 0 auto !important;}", + "pageBar": 0 +}, +{ + "name": "小黃書 - 圖片清單", + "author": "skofkyo", + "example": "https://tw.xchina.co/photo/id-63d02a8cdaf75.html,https://8se.me/photo/id-63938c1972fde.html", + "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.\\w+/photo/", + "include": "img.cr_only", + "nextLink": "a.next", + "pageElement": ".photos > a", + "replaceElement": [ + "div.article>div.pager:first-child", + "div.article>div.pager:last-child" + ], + "css": "body{overflow:unset!important}.push-slider,.article:has(>div>.media),div:has(>.links),a[clickmode=ad],a:has(>div>div>img),.photos>div.item,.jquery-modal.blocker.current,.push-top,.push-bottom,.slider-ad,.article.ad,.pager>.tips,.photoMask,.banner_ad,.banner-sexgps,div[class*='backdrop-show']{display: none!important;}", + "pageBar": 0 +}, +{ + "name": "小黃書 - 分類", + "author": "skofkyo", + "example": "https://tw.xchina.co/photos/kind-2.html,https://8se.me/photos/model-61be1af337a19.html", + "url": "^https?://([a-z-]{2}\\.)?(xchina|8se)\\.\\w+/(photos|videos|models|fictions|torrents)", + "exclude": "body>.image", + "init": "let bs = document.querySelector('body[style]');if(bs)bs.removeAttribute('style');", + "nextLink": "a.next", + "pageElement": ".list>.item:not(._300x250),.list>.fiction,.list>.torrent,.videos>.item", + "replaceElement": [ + "div.article>div.pager:first-child", + "div.article>div.pager:last-child" + ], + "rate": 3, + "css": ".videos .pagetual_pageBar{margin-top:30px!important;margin-bottom:0px!important}.slider-ad,.article.ad,.jquery-modal.blocker.current,.banner_ad,.tips,.aside>.center,.item._300x250{display:none!important}" +}, +{ + "name": "國模網", + "author": "skofkyo", + "example": "https://gm67.xyz/", + "url": "^https?://gm\\d+\\.xyz/", + "init": "document.querySelectorAll('img[data-src]').forEach(img=>{img.src=img.dataset.src})", + "nextLink": "a.next", + "pageElement": "#main > article", + "replaceElement": "#nav-below" +}, +{ + "name": "雅拉伊", + "author": "skofkyo", + "example": "https://www.yalayi.com/gallery/", + "url": "^https?://www\\.yalayi\\.com/", + "action": 1, + "nextLink": "//a[text()='下一页']", + "pageElement": "//ul[li/div[@class='img-box']] | //div[@class='girls']/ul", + "replaceElement": ".pages", + "css": ".pagetual_pageBar{margin-top:-10px!important;margin-bottom:0px!important}" +}, +{ + "name": "Bookshop.tw", + "author": "skofkyo", + "example": "https://www.bookshop.tw/", + "url": "^https?://www\\.bookshop\\.tw", + "action": 1, + "nextLink": "#url_ne", + "pageElement": "//tr[td[a[@id='url_ne']]]/preceding-sibling::tr", + "replaceElement": "//td[a/@id='url_fr']" +}, +{ + "name": "Mox.moe", + "author": "skofkyo", + "example": "https://mox.moe/", + "url": "^https?://(mox|kox|kxo|koz)\\.moe", + "action": 1, + "wait": 1000, + "nextLink": "//button[@name='link_page']/b/../../following-sibling::a[1]", + "pageElement": "tr.listbg", + "replaceElement": "tr[style='vertical-align:top']:first-child", + "rate": 3 +}, +{ + "name": "BOOK☆WALKER TW 更多", + "author": "skofkyo", + "example": "https://www.bookwalker.com.tw/block/1", + "url": "^https?://www\\.bookwalker\\.com\\.tw/", + "nextLink": "//li[span/@class='active']/following-sibling::li[1]/a", + "pageElement": ".book_package", + "replaceElement": ".bw_main2 > div:first-child,.bw_main2 > div:last-child,.pagebar", + "initRun": 1, + "autoLoadNum": 4 +}, +{ + "name": "BOOK☆WALKER TW", + "author": "skofkyo", + "example": "https://www.bookwalker.com.tw/search?m=2&series_display=1&vertical=0&order=sell_desc&s=19", + "url": "^https?://www\\.bookwalker\\.com\\.tw/", + "nextLink": "//li[span/@class='active']/following-sibling::li[1]/a", + "pageElement": ".bookdesc2.clearfix,.row.listbox.clearfix+.row.mar0pad0", + "replaceElement": ".bw_main2 > div:first-child,.bw_main2 > div:last-child,.pagebar", + "initRun": 1, + "autoLoadNum": 2 +}, +{ + "name": "BOOK☆WALKER JP - 手機版", + "author": "skofkyo", + "example": "https://bookwalker.jp/new/?qsto=st2", + "url": "^https?://bookwalker\\.jp/(category|search|new)/", + "include": ".o-pager-box", + "nextLink": "li.o-select-box+li>a", + "pageElement": ".o-tile-list>.o-tile", + "replaceElement": ".o-pager-box", + "rate": 3 +}, +{ + "name": "BOOK☆WALKER JP", + "author": "skofkyo", + "example": "https://bookwalker.jp/new/?qsto=st2", + "url": "^https?://bookwalker\\.jp/(category|search|new)/", + "include": ".o-list--menu,.o-list--footer", + "nextLink": ".o-pager-next>a", + "pageElement": ".o-contents-section__body .m-tile", + "replaceElement": [ + ".o-list--menu", + ".o-list--footer" + ] +}, +{ + "name": "www.shoujixs.net_手机小说 - 阅读", + "author": "skofkyo", + "example": "https://www.shoujixs.net/shoujixs_161450_40736191.html", + "url": "^https?://www\\.shoujixs\\.net/\\w+\\.html$", + "history": 2, + "nextLink": "//a[text()='下一章' and contains(@href,'html')]", + "pageElement": "//div[@class='bookname']/h1 | //div[@id and p]", + "replaceElement": ".bottem1,.bottem2", + "css": "[id]+h1{padding-top:10px;text-align:center}" +}, +{ + "name": "www.shoujixs.net_手机小说 - 分类页", + "author": "skofkyo", + "example": "https://www.shoujixs.net/xhqh/", + "url": "^https?://www\\.shoujixs\\.net/", + "nextLink": "#pagelink strong+a:not([class])", + "pageElement": ".shoujixsl li,.c_row", + "replaceElement": "#pagelink" +}, +{ + "name": "博仕書屋手機版 - 閱讀", + "author": "skofkyo", + "example": "https://m.boshishuwu.com/boshi/37_37051/883050297_2.html", + "url": "^https?://m\\.boshishuwu\\.com/boshi/\\w+/[0-9_]+\\.html", + "history": 2, + "nextLink": "#pt_next", + "pageElement": "header#top,#chaptercontent", + "replaceElement": "head>title,.Readpage", + "css": "#chaptercontent p[style],#chaptercontent p[style]+p,#chaptercontent+#top a,[style='text-align: left;color: #028aa0;font-size: 18px;font-weight:bold;']{display: none!important;}#chaptercontent+#top{height:30px!important;line-height:30px!important}", + "initRun": 1, + "autoLoadNum": 1 +}, +{ + "name": "博仕書屋手機版 - 小說章節", + "author": "skofkyo", + "example": "https://m.boshishuwu.com/boshi/28_28437/all.html", + "url": "^https?://m\\.boshishuwu\\.com/boshi/\\w+/(all|p\\d+)\\.html", + "init": "let b = document.querySelector('body');b.innerHTML = b.innerHTML.replace(/
    \\n\\w+<\\/b>[^<]+[^<]+<\\/b>[^<]+\\d+<\\/b>
    /,'');", + "nextLink": "//a[text()='下一页']", + "pageElement": "//div[@id='chapterlist']/p[a/@title]", + "replaceElement": ".listpage", + "css": "#chapterlist>p[style]{display:none!important;}" +}, +{ + "name": "博仕書屋手機版 - 書籍分類", + "author": "skofkyo", + "example": "https://m.boshishuwu.com/boshi/quanben.html", + "url": "^https?://m\\.boshishuwu\\.com/boshi/\\w+\\.html", + "nextLink": "//a[text()='下一页']", + "pageElement": "#main", + "replaceElement": ".page" +}, +{ + "name": "博仕書屋 - 閱讀", + "author": "skofkyo", + "example": "https://www.boshishuwu.com/boshi/28_28437/14990400.html", + "url": "^https?://www\\.boshishuwu\\.com/boshi/\\w+/\\d+\\.html", + "history": 2, + "nextLink": "//a[contains(text(),'下一章')]", + "pageElement": ".bookname>h1,#content", + "replaceElement": "head>title,.bottem1,bottem2", + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", + "css": "table+h1,#content+h1,.bookname+h1{padding-top:20px;text-align:center}" +}, +{ + "name": "歡喜冤家小說網 - 閱讀", + "author": "skofkyo", + "example": "https://www.huanxiyuanjia.com/12_12849/5258090.html", + "url": "^https?://www.huanxiyuanjia.com/[0-9_]+/\\d+\\.html", + "init": "let gae=e=>document.querySelectorAll(e);gae('#TextContent>*:not(p):nth-child(n+1):nth-child(-n+999)').forEach(e=>{e.remove()});gae('#TextContent>p:nth-child(n+1):nth-child(-n+2)').forEach(e=>{e.remove()});let t=gae('#TextContent')[0];t.innerHTML=t.innerHTML.replace('huanxiyuanjia.com 欢喜冤家','');", + "action": 1, + "history": 2, + "nextLink": "#next_url", + "pageElement": "h1,#TextContent", + "replaceElement": "head>title,.mlfy_page+.mlfy_page", + "pageBar": 0, + "css": ".mlfy_main h1{padding-bottom:0px!important;border-bottom:none!important}#TextContent>p:nth-child(n+2):nth-child(-n+3){display: none!important;}", + "pageInit": "let gae=e=>doc.querySelectorAll(e);gae('#TextContent>*:not(p):nth-child(n+1):nth-child(-n+999)').forEach(e=>{e.remove()});gae('#TextContent>p:nth-child(n+1):nth-child(-n+2)').forEach(e=>{e.remove()});let t=gae('#TextContent')[0];t.innerHTML=t.innerHTML.replace('huanxiyuanjia.com 欢喜冤家','');", + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#TextContent');if(t.length>10){h[0].remove();t[0].remove()}" +}, +{ + "name": "歡喜冤家小說網 - 書籍分類", + "author": "skofkyo", + "example": "https://www.huanxiyuanjia.com/fenlei/xuanhuan/1/", + "url": "^https?://www.huanxiyuanjia.com/fenlei/", + "nextLink": "//a[text()='>>']", + "pageElement": "#sitebox", + "replaceElement": ".pages" +}, +{ + "name": "筆趣閣bqg9527 - 手機版閱讀", + "author": "skofkyo", + "example": "https://m.bqg9527.cc/zh_hant/book/265472/194745565.html", + "url": "^https?://m\\.bqg9527\\.cc/(zh_hant/)?book/\\d+/\\d+\\.html", + "action": 1, + "history": 2, + "nextLink": "//a[text()='下一章']", + "pageElement": "#nr_title,#nr.nr_nr", + "replaceElement": "head>title,.nr_page", + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('#nr_title');let t=gae('#nr.nr_nr');if(t.length>10){h[0].remove();t[0].remove()}" +}, +{ + "name": "筆趣閣bqg9527 - PC版閱讀", + "author": "skofkyo", + "example": "https://www.bqg9527.cc/zh_hant/book/265472/194745565.html", + "url": "^https?://www\\.bqg9527\\.cc/(zh_hant/)?book/\\d+/\\d+\\.html", + "action": 1, + "history": 2, + "nextLink": "//a[text()='下一章']", + "pageElement": ".bookname>h1,#content", + "replaceElement": "head>title,.bottem1,.bottem2", + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('h1');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", + "css": ".read-top-ad{display:none!important}h1{font: 30px 黑体!important;text-align:center!important}" +}, +{ + "name": "筆趣閣bqg9527 - 書籍分類 禁用", + "author": "skofkyo", + "example": "https://www.bqg9527.cc/sort/1/", + "url": "^https?://www\\.bqg9527\\.cc/", + "include": "#newscontent", + "enable": 0 +}, +{ + "name": "和圖書手機版 - 目錄", + "author": "skofkyo", + "example": "https://m.hetubook.com/book/5849/catalog-1.html", + "url": "^https?://m\\.(hetubook|hetushu)\\.com/book/\\d+/catalog-\\d+\\.html", + "nextLink": "//a[text()='下一頁']", + "pageElement": ".dir>dd:not([id])" +}, +{ + "name": "和圖書手機版 - 閱讀", + "author": "skofkyo", + "example": "https://m.hetubook.com/book/5849/4387851.html", + "url": "^https?://m\\.(hetubook|hetushu)\\.com/book2?/\\d+/\\d+\\.html", + "action": 1, + "history": 2, + "nextLink": "a#next", + "pageElement": ".title>h2,#content", + "waitElement": [ + "", + ".cmask" + ], + "replaceElement": "head>title,#spage", + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.title>h2');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", + "css": ".body>h2{text-align:center!important;}" +}, +{ + "name": "和圖書 -閱讀", + "author": "skofkyo", + "example": "https://www.hetubook.com/book/5849/4387851.html", + "url": "^https?://www\\.(hetubook|hetushu)\\.com/book2?/\\d+/\\d+\\.html", + "action": 1, + "history": 2, + "nextLink": "a#next", + "pageElement": "#content", + "waitElement": [ + "", + ".mask.mask2" + ], + "replaceElement": "head>title,#right", + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let t=gae('#content');if(t.length>10){t[0].remove()}", + "css": "body,#center,#cbox,#content {overflow: initial !important;position: initial !important;} #right,.sidebarbox{position: fixed !important;right: 0;}#content+#content{padding-top:-10px!important}" +}, +{ + "name": "和圖書 -分類", + "author": "skofkyo", + "example": "https://www.hetubook.com/book/index.php", + "url": "^https?://www\\.(hetubook|hetushu)\\.com/book2?/index\\.php", + "nextLink": "span.current+a", + "pageElement": "#list", + "replaceElement": ".page" +}, +{ + "name": "同人圈 -閱讀", + "author": "skofkyo", + "example": "http://tongrenquan.org/tongren/7070/1.html", + "url": "^https?://tongrenquan\\.org/tongren/\\d+/\\d+\\.html", + "history": 2, + "action": 1, + "nextLink": "//a[text()='下一章']", + "pageElement": ".read_chapterName,.read_chapterDetail", + "replaceElement": "head>title,.pageNav", + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.read_chapterName');let t=gae('.read_chapterDetail');if(t.length>10){h[0].remove();t[0].remove()}", + "css": ".read_chapterName h1{font:24px 'Microsoft YaHei'!important}.read_chapterName{margin-top:25px!important;margin-bottom:15px!important}" +}, +{ + "name": "同人圈 -分類", + "author": "skofkyo", + "example": "http://tongrenquan.org/", + "url": "^https?://tongrenquan\\.org/", + "nextLink": ".page b+a", + "pageElement": ".books>.bk", + "replaceElement": ".page" +}, +{ + "name": "轻小说文库 - 閱讀", + "author": "skofkyo", + "example": "https://www.wenku8.net/novel/1/1973/69567.htm", + "url": "^https?://www\\.wenku8\\.net/novel/\\d+/\\d+/\\d+\\.htm", + "pinUrl": true, + "init": "document.querySelectorAll('#contentmain>[id^=adv]').forEach(e=>{e.remove()})", + "action": 1, + "history": 2, + "nextLink": "//a[text()='下一页' or text()='下一頁' and contains(@href,'.htm')]", + "pageElement": "#title,#content", + "replaceElement": "head>title,#footlink", + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('#title');let t=gae('#content');if(t.length>10){h[0].remove();t[0].remove()}", + "pageBar": 0 +}, +{ + "name": "天天看小說 - 顯示全部目錄", + "author": "skofkyo", + "example": "https://tw.ttkan.co/novel/chapters/yedemingmingshu-huishuohuadezhouzi", + "url": "^https?://[^/]+/novel/chapters/", + "include": [ + "//title[contains(text(),'天天看小說') or contains(text(),'天天看小说')]", + "#button_show_all_chatper" + ], + "autoClick": "#button_show_all_chatper" +}, +{ + "name": "天天看小說 - 閱讀", + "author": "skofkyo", + "example": "https://tw.ttkan.co/novel/pagea/yedemingmingshu-huishuohuadezhouzi_1.html", + "url": "^https?://[^/]+/novel/pagea/[^.]+\\.html", + "include": "//title[contains(text(),'天天看小說') or contains(text(),'天天看小说')]", + "action": 1, + "history": 2, + "nextLink": ".next_page_links>a[href$='html']", + "pageElement": ".title,.content", + "replaceElement": "head>title,.prev_page,.next_page_links", + "pageAction": "let gae=e=>document.querySelectorAll(e);gae('amp-addthis').forEach(e=>{e.remove()});let h=gae('.title');let t=gae('.content');if(t.length>10){h[0].remove();t[0].remove()}", + "pageBar": 0, + "css": ".content>center{display:none!important}" +}, +{ + "name": "小說狂人 - 閱讀", + "author": "skofkyo", + "example": "https://czbooks.net/n/ul6pe/ukcme", + "url": "^https?://czbooks\\.net/n/\\w+/\\w+", + "action": 1, + "history": 2, + "nextLink": "//a[text()='下一章']", + "pageElement": ".name,.content", + "replaceElement": "head>title,.container .chapter-nav,.main>.chapter-nav,#mm-5>.chapter-nav", + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.name');let t=gae('.content');if(t.length>10){h[0].remove();t[0].remove()}", + "pageBar": 0 +}, +{ + "name": "小說狂人 - 書籍分類", + "author": "skofkyo", + "example": "https://czbooks.net/c/xuanhuan", + "url": "^https?://czbooks\\.net/c/\\w+", + "nextLink": ".nav.paginate>li.active+li>a", + "pageElement": ".novel-list>.novel-item-wrapper", + "replaceElement": ".nav.paginate" +}, +{ + "name": "無限小說 - 閱讀", + "author": "skofkyo", + "example": "https://finance.binaccount.com/read/125687/?335030", + "url": "/read/", + "include": "//title[contains(text(),'無限小說')]", + "action": 1, + "history": 2, + "init": "setTimeout(()=>{let t=document.querySelector('#text');t.innerHTML=t.innerHTML.replace(/[
    ]{4}[⒏88⒏⑧⑻ВbbьOσoоοoKkкcсcmmм.。·.]{9,10}/gi,'')},1000)", + "nextLink": "//a[text()='下一頁']|//a[text()='下一篇']", + "pageElement": "//div[div/@id='subtitle'] | id('text')", + "waitElement": [ + "#pch,#ppbt,#nch,#npbt" + ], + "replaceElement": ".read_btn_gp", + "pageInit": "let t=doc.querySelector('#text');t.innerHTML=t.innerHTML.replace(/[
    ]{4}[⒏88⒏⑧⑻ВbbьOσoоοoKkкcсcmmм.。·.]{9,10}/gi,'')", + "pageAction": "function gax(x){let nodes=[];let results=document.evaluate(x,document,null,XPathResult.ANY_TYPE,null);let node;while(node=results.iterateNext()){nodes.push(node)}return nodes}gax(\"//*[contains(@class,'pagetual_pageBar')]\")[0].remove();let t=gax(\"//div[@id='text']\");let s=gax(\"//div[div/@id='subtitle']\");if(t.length>4){t[0].remove();s[0].remove()}", + "css": "#text>br:nth-child(even){display:none!important}#subtitle{margin-bottom:0px!important}" +}, +{ + "name": "無限小說 - 書籍分類", + "author": "skofkyo", + "example": "https://www.8book.com/booklists/update/", + "url": "^https?://(www\\.)?8book\\.com/booklists/(update|newrelease|finish|list|\\d+)/", + "nextLink": "li[onclick]+li>a", + "pageElement": ".row>div.p-2", + "replaceElement": ".row>li" +}, +{ + "name": "UU看書網uuks.org手機版 - 閱讀", + "author": "skofkyo", + "example": "https://uuks.org/b/59/731.html", + "url": "^https?://(m\\.)?uuks\\.org/b/", + "action": 1, + "history": 2, + "nextLink": "#read_next", + "pageElement": "#top,#bookContent", + "replaceElement": "head>title,#read>.rp-switch,#read-page>.rp-switch", + "css": "#read-page .iconback,#read-page .iconhome{display: none!important;}", + "insert": "#read-page>.rp-switch", + "insertPos": 1 +}, +{ + "name": "UU看書網uuks.org - 閱讀", + "author": "skofkyo", + "example": "https://tw.uuks.org/b/53487/668581.html", + "url": "^https?://(www|tw)\\.uuks\\.org/b/", + "action": 1, + "history": 2, + "nextLink": "#next", + "pageElement": ".h1title,#contentbox", + "replaceElement": ".fanye", + "insert": ".fanye", + "insertPos": 1, + "pageBar": 0, + "pageAction": "let gae=e=>document.querySelectorAll(e);let h=gae('.h1title');let t=gae('#contentbox');if(t.length>10){h[0].remove();t[0].remove()}" +}, +{ + "name": "愛下電子書 - 閱讀", + "author": "skofkyo", + "example": "https://ixdzs.tw/read/38804/p1.html", + "url": "^https?://ixdzs\\.tw/read/\\d+/\\w+\\.html", + "history": 2, + "nextLink": "a.chapter-paging.chapter-next", + "pageElement": "#page .page-content", + "replaceElement": "head>title,.page-d.page-turn,.page-d-top,.read-next,.read-pre,.read-prog-info", + "pageAction": "function gae(e){return document.querySelectorAll(e)}gae('.pagetual_pageBar')[0].remove();let t=gae('#page .page-content');if(t.length>10){t[0].remove()}", + "css": ".page-content{margin-top:.16rem!important}.page-content h3{line-height:.20rem!important;font-size:.24rem!important;text-align:center!important}" +}, +{ + "name": "愛下電子書 - 書籍列表", + "author": "skofkyo", + "example": "https://ixdzs.tw/sort/1/", + "url": "^https?://ixdzs\\.tw/(sort|hot|end)/", + "nextLink": "a.num.current+a", + "pageElement": ".u-list", + "replaceElement": "div.panel+div>.pagei" +}, +{ + "name": "Discuz Archiver", + "example": "https://bbs.yxfanfan.com/archiver/?fid-13.html,https://bbs.yxfanfan.com/archiver/?tid-225893.html", + "url": "^https?://[^/]+/archiver/\\?(fid|tid)", + "nextLink": "strong+a", + "pageElement": "#content", + "css": ".pagetual_pageBar{margin-bottom:0px!important}" +}, +{ + "name": "Yandex", + "url": "^https?://yandex\\.(com|ru)/search/", + "pageElement": "#search-result>li", + "pageElementCss": "content-visibility:visible", + "css": "inIframe:.HeaderDesktop{display:none;}", + "action": 2, + "fitWidth": false +}, +{ + "name": "yandex web search mobile", + "example": "https://yandex.com/", + "url": "^https?://yandex\\.(com|ru)/", + "include": ".Pager-More", + "loadMore": ".Pager-More" +}, +{ + "name": "yandex Images Video search mobile", + "example": "https://yandex.com/", + "url": "^https?://yandex\\.(com|ru)/", + "include": ".more_direction_next", + "loadMore": ".more_direction_next>button" +}, +{ + "name": "google search mobile", + "action": 0, + "url": "^https://(?:www\\.)?google\\..*/search", + "pageElement": "id('rso')/div|id('rso')/style", + "insert": "//div[@role=\"progressbar\"]/following-sibling::a[@role=\"button\"]|id(\"extrares\")//span[count(a)>0]/span/following-sibling::a", + "nextLink": 0, + "loadMore": "div[role='progressbar']~a[role='button']", + "exclude": "id('pnnext')" +}, +{ + "name": "Google Search", + "nextLink": [ + "id('pnnext')|id('navbar navcnt nav')//td[span]/following-sibling::td[1]/a|id('nn')/parent::a", + "id('pnprev')|id('navbar navcnt nav')//td[span]/following-sibling::td[1]/a|id('nn')/parent::a" + ], + "pageElement": "id('rso')|id('center_col')/style[contains(.,'relative')]", + "action": 1, + "pageNum": "&start={10*($p-1)}", + "pageBarTop": 55, + "url": "^https?://[^./]+\\.google(?:\\.[^./]{2,3}){1,2}/(?:c(?:se|ustom)|search|webhp|m|#)", + "replaceElement": "[role='navigation']>[role='presentation']", + "css": "inIframe:#searchform,[data-l],[data-is-desktop]{display:none;}" +}, +{ + "name": "Google Trends", + "url": "^https?://trends\\.google\\.com/trends/trendingsearches/", + "example": "https://trends.google.com/trends/trendingsearches/realtime?geo=JP&hl=en-GB&category=all", + "loadMore": ".feed-load-more-button" +}, +{ + "name": "Apphot", + "url": "^https?://apphot\\.cc/", + "pageElement": "section.container > div.content-wrap > div.content > article" +}, +{ + "name": "16Personalities", + "url": "^https://www\\.16personalities\\.com", + "enable": 0 +}, +{ + "name": "Linux Tips, Tricks and Tutorials | Linuxize", + "url": "^https://linuxize\\.com", + "pageElement": ".post-list>.flex-wrap>section", + "lazyImgSrc": "data-cfsrc" +}, +{ + "name": "Vipergirls", + "pageElement": "#threads,.posts", + "url": "^https://vipergirls\\.to", + "nextLink": [ + "a[rel='next']", + "a[rel='prev']" + ], + "pageNum": "page{$p}$" +}, +{ + "name": "linuxfromscratch", + "url": "^https://www\\.linuxfromscratch\\.org", + "pageElement": "body>*", + "css": "div.sect1{position:static;overflow-wrap: break-word;}div.navheader{position: relative;}" +}, +{ + "name": "Форум", + "url": "^https?://www\\.linux\\.org\\.ru/forum/", + "example": "https://www.linux.org.ru/forum/linux-hardware/16844066", + "nextLink": "strong+a,a[rel='next']", + "pinUrl": true, + "pageElement": "article", + "include": ".nav>.page-number" +}, +{ + "name": "Standards DOC", + "url": "\\.html$", + "nextLink": ".header>p>[rel=next]", + "pageElement": ".header~*" +}, +{ + "name": "xda-developers", + "url": "^https://forum\\.xda\\-developers\\.com/t/", + "pageElement": ".block-body>article" +}, +{ + "name": "Pixabay", + "url": "^https://pixabay\\.com", + "pageAction": "eles.forEach(ele=>{let media=ele.querySelector('div.media');let timer;media.onmouseenter=e=>{timer=setTimeout((function() {var mp4 = media.dataset.mp4, webm = media.dataset.webm ? mp4.rsplit(\".\", 1)[0] + \".webm\": \"\", mp4Source = ''), webmSource = webm ?' ') : \"\", videoElement = '\");media.insertBefore($(videoElement)[0], media.firstChild)}), 300);};media.onmouseleave=e=>{clearTimeout(timer);if(media.firstChild.tagName==='VIDEO')media.removeChild(media.firstChild)};})", + "pageElement": ".video-search-results>.row-masonry-cell", + "nextLink": ".media_list>a.pure-button", + "lazyImgSrc": "data-lazy" +}, +{ + "name": "Bing", + "action": 1, + "url": "^https://.*\\.bing\\.com/search", + "nextLink": "a[title='Next page'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl", + "pageElement": "ol#b_results>li.b_algo", + "waitElement": [ + "a[title='Next page'],a.sb_pagN,a.sb_halfnext,a.sb_fullnpl,#b_results>.b_no", + ".siteicon>div,div.rms_iac" + ], + "pageBar": "pageBar.className='b_pageBar'" +}, +{ + "name": "Duckduckgo", + "url": "^https://duckduckgo\\.com/\\?", + "loadMore": ".result--more>a,.content-wrap:not(.is-hidden) #more-results" +}, +{ + "name": "F 搜", + "url": "^https://fsoufsou\\.com/search", + "nextLink": ".bottom-pagination-bar+.turn-page-btn", + "pinUrl": true, + "css": "svg{visibility: visible;}", + "pageElement": "div.organic-results>div", + "stopSign": [ + "", + ".empty-result-container" + ] +}, +{ + "name": "gog", + "action": 1, + "url": "^https://www\\.gog\\.com/", + "pageElement": "paginated-products-grid.ng-star-inserted", + "nextLinkByUrl": [ + "(&page=(\\d+))?$", + "&page={$2+1}" + ], + "pageAction": "[].forEach.call(eles, ele=>{[].forEach.call(ele.querySelectorAll('source[lazyload]'), source=>{source.setAttribute('srcset',source.getAttribute('lazyload'))})})" +}, +{ + "name": "Pixiv", + "url": "^https://www\\.pixiv\\.net/", + "example": "https://www.pixiv.net/tags/%E5%A5%B3%E3%81%AE%E5%AD%90/illustrations", + "action": 2, + "pageElement": "section div>ul,div.sc-l7cibp-0.juyBTC>*,div.sc-1eop7y7-0.cJYTWr>*,ul.sc-9y4be5-1.jtUPOE", + "nextLink": "a[class*='filterProps-Styled-Component'][aria-disabled='false']:last-child", + "wait": 500, + "fitWidth": false, + "listenUrlChange": true, + "css": "@media (min-width: 1000px) {@supports (display:grid) {.krFoBL { grid-template-columns: repeat(6, 184px); }}}" +}, +{ + "name": "Z-Library", + "url": "^https?://.*(1lib\\.(to|us|org)|z-lib\\.org|booksc\\.(org|eu)|bookfi\\.net|b\\-ok\\.(asia|africa)|1lib\\.pl|sg1lib\\.org|2lib\\.org|book4you\\.org)/s/", + "pageElement": "#searchResultBox" +}, +{ + "name": "Startpage Search Results", + "url": "^https?://www\\.startpage\\.com/", + "example": "https://www.startpage.com/sp/search?query=pagetual", + "nextLink": "#main > div.pagination-container > div.pagination > form[aria-label='page Next'] > button", + "pageElement": "#main>.w-gl>div", + "action": 1 +}, +{ + "name": "图书书目检索", + "url": "^https?://pcpt\\.nlc\\.cn/", + "pageElement": "#content > div.list-panel.thelist > div.block > table.table", + "nextLinkByJs": "let max=doc.querySelector(`.pagination>.result>b:nth-child(2)`),cur=doc.querySelector(`.pagination>.result>b:nth-child(3)`);let form=doc.querySelector('#fm_id'),params=[];if(!max||!cur||max.innerText==cur.innerText||!form)return null;let formData = new FormData(form); for (let [key, value] of formData) {params.push(key+'='+encodeURIComponent(value))};return form.action.replace(/\\?pageCount.*/,'')+'?pageCount='+(parseInt(cur.innerText) + 1)+'#p{'+params.join('&')+'}'" +}, +{ + "name": "全國古籍普查登記基本數據庫", + "url": "^https?://202\\.96\\.31\\.78/", + "pageElement": "body > div.wrap > div#side.list > div.item", + "nextLinkByJs": "let n=doc.querySelector('[title=\"Next Page\"]');if(!n)return;let params=n.getAttribute('onclick').match(/JavaScript:toUrl\\('(.*)',(\\d+)\\);/);let temp=params[1];let index=params[2];if(temp.indexOf('&cGFn')!=-1)temp=temp.substring(0,temp.indexOf('&cGFn'));let code=window.btoa('page='+index);return temp+'&'+code;" +}, +{ + "name": "Search Getty Images", + "url": "^https://www\\.gettyimages\\.ie", + "nextLink": "button[title='Next page']", + "pageElement": "[data-testid=galleryMosaicAsset]" +}, +{ + "name": "IMHentai", + "url": "^https://imhentai\\.xxx", + "pageElement": "#gimg", + "nextLink": ".nav_next", + "css": "#footer,#bar{display:none}.pre_img+.nav_pagination{bottom: 10px; position: fixed; width: 100%;left:0;}.return_btn{bottom: 0; position: fixed; width: 100%;left:0;}", + "lazyImgSrc": 0 +}, +{ + "name": "Moebooru:Danbooru clones", + "url": "^https?://(konachan\\.com|yande\\.re|www\\.sakugabooru\\.com)/(post|comment)($|\\?|#|/search\\?)", + "pageElement": "//li[contains(@class, 'creator-id-')]|//div[@id='comment-list']/div[@class='post']|//table[@class='highlightable']", + "nextLink": "//a[@class='next_page']", + "css": ".javascript-hide { display: inline-block !important; }.pagetual_pageBar { display: inline-flex!important;width: 100%!important; }" +}, +{ + "name": "developer.wordpress", + "url": "^https://developer\\.wordpress\\.org/", + "pageElement": "#primary>*", + "nextLink": "[rel=next]" +}, +{ + "name": "playstation", + "action": 1, + "css": ".psw-visually-hide{opacity:1!important}.pagetual_loading{display:none!important}[name='pagetual-iframe']{display:none}", + "url": "^https://store\\.playstation\\.com/.*/\\d+$", + "pageElement": "ul.psw-grid-list", + "wait": "let img=doc.querySelector('ul.psw-grid-list img');return img!=null", + "nextLinkByUrl": [ + "(.*/)(\\d+)$", + "$1{$2+1}" + ], + "pageAction": "[].forEach.call(eles[0].querySelectorAll('[loading=lazy]'),img=>{img.src=img.src.replace('w=54&thumb=true','w=230&thumb=false');img.classList.remove('psw-blur')});" +}, +{ + "name": "yande", + "action": 0, + "url": "^https://yande\\.re/", + "pageElement": "ul#post-list-posts>li", + "nextLink": "a.next_page", + "css": ".javascript-hide {display: inline-block !important;}" +}, +{ + "name": "Expreview", + "url": "^https://www\\.expreview\\.com/", + "loadMore": "span.load" +}, +{ + "name": "goddessfantasy", + "url": "^https://www\\.goddessfantasy\\.net/bbs/", + "pageElement": "//div[@id='messageindex']|//form[@id='quickModForm']", + "nextLink": "//div[@class='pagelinks']/a[text()='»']", + "pinUrl": true +}, +{ + "name": "哈啦區 - 巴哈姆特", + "url": "^https?://forum\\.gamer\\.com\\.tw/(index|$)", + "enable": 0 +}, +{ + "name": "COCOMANGA", + "url": "^https?://www\\.cocomanga\\.com/", + "pageElement": "body > div#mangalist.mh_mangalist", + "action": 2 +}, +{ + "name": "古籍館 - 閲讀", + "url": "^https?://(www\\.)?gujiguan\\.com/Book_View\\.aspx", + "pageElement": "div#content > img#book" +}, +{ + "name": "古籍館 - 檢索", + "url": "^https?://(www\\.)?gujiguan\\.com/Search_Result\\.aspx", + "pageElement": "#DataList1>tbody>tr", + "wait": "let nv=doc.querySelector('#keyValue'),ov=document.querySelector('#keyValue');if(!nv||!ov)return false;if(nv.value==ov.value)return true;nv.value=ov.value;doc.querySelector('#sreach').click();doc.querySelector('#DataList1').innerHTML='';return false;", + "refreshByClick": "#sreach" +}, +{ + "name": "SkrBT", + "url": "^https://skrbt", + "pageElement": "ul.list-unstyled", + "nextLinkByJs": "let form=doc.querySelector('#search-form'),params=[];if(!form)return null;[].forEach.call(form.querySelectorAll('input'),input=>{params.push(input.name+'='+(input.name=='p'?parseInt(input.value)+1:input.value))});return form.action+'?'+params.join('&')" +}, +{ + "name": "Discuz! mobile postlist1", + "url": ".", + "pageElement": ".postlist>div[id^=pid]", + "nextLink": ".page>#select_a+a:not([class])", + "action": 1 +}, +{ + "name": "Discuz! mobile postlist2", + "url": ".", + "pageElement": ".bm:not(#postlist)>div[id^=post_],.bm:not(#postlist)>div[id^=post_]+div", + "nextLink": "a.nxt", + "action": 1 +}, +{ + "name": "bbsPostlist1", + "url": ".", + "nextLink": [ + "a.nxt,a.next", + "a.prev" + ], + "pageNum": "\\-\\d+\\-{$p}\\-\\d+\\.html", + "pageElement": "div#postlist>*", + "replaceElement": ".pgt>div.pg" +}, +{ + "name": "bbsPostlist2", + "url": ".", + "nextLink": ".page-item.active+.page-item>a", + "pageElement": "ul.postlist>*", + "replaceElement": "ul.pagination" +}, +{ + "name": "bbsThreadlist1", + "url": "/f", + "nextLink": [ + "a.nxt,a.next", + "a.prev" + ], + "pageNum": "\\-\\d+\\-{$p}\\.html", + "pageElement": "div#threadlist>div>form", + "replaceElement": "#pgt div.pg" +}, +{ + "name": "Discuz7.2Postlist", + "url": "\\?tid", + "nextLink": "a.next", + "pageNum": "page={$p}", + "pageElement": "div#postlist>*" +}, +{ + "name": "Discuz7.2Threadlist", + "url": "\\?fid", + "nextLink": "a.next", + "pageNum": "page={$p}", + "pageElement": "div#threadlist form" +}, +{ + "name": "chevereto", + "url": ".", + "nextLink": "a[data-pagination='next']", + "pageAction": "let w=document.querySelector('.list-item').style.width;let content=eles[0].querySelector('.pad-content-listing');content.style.display='flex';content.style.flexFlow='row wrap';[].forEach.call(eles[0].querySelectorAll('.list-item'),i=>{i.style.display='block';i.style.width=w;i.style.position='sticky';i.querySelector('.list-item-image').style.height=w;})", + "pageElement": "div#content-listing-tabs" +}, +{ + "name": "FC Portables", + "url": "^https://www\\.fcportables\\.com", + "pageElement": ".listing-blog>article", + "pageAction": "eles.forEach(e=>{let a=e.querySelector('.img-holder[data-src]');if(!a)return;a.style.backgroundImage=`url(\"${a.dataset.src}\")`;a.classList.add('b-loaded')})" +}, +{ + "name": "1688全部商品页", + "url": "^https://.*\\.1688\\.com/page", + "pageElement": "#bd_1_container_0 > div:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(6) > div", + "pageAction": "window.setUrl=null;window.index=0;eles.forEach(e=>{e.onclick=()=>window.open(e.dataset.url,'_blank');})", + "pageInit": "if(!window.index)window.index=0;if(!window.setUrl){window.setUrl=()=>{setTimeout(()=>{if(window.url){eles[window.index++].dataset.url=window.url;window.url=null;}if(eles[window.index]){eles[window.index].click();window.setUrl()}},1)};Object.defineProperty(doc.defaultView, 'open', { get: function () { return (s)=>window.url=s; } });window.setUrl();}if(eles.length<=window.index)return true;else return false;", + "waitElement":"!.main-picture[src^=data]" +}, +{ + "name": "blog1", + "url": ".", + "pageElement": "section.posts-expand>article.post", + "nextLink": "li.pagination-active+li>a", + "css": "section.posts-expand>article.post{opacity:1}" +}, +{ + "name": "AfreecaTV 搜索", + "url": "^https?://afreecatv\\.com/total_search", + "pageElement": "ul#detailVideoPageList>li", + "nextLink": ".pg_area>em+a", + "wait": 500, + "replaceElement": ".pg_area" +}, +{ + "name": "Baidu", + "insertPos": 1, + "nextLink": [ + "//*[@id='page']/div/a[span[contains(text(),'下')]]", + "//*[@id='page']/div/a[span[contains(text(),'上')]]" + ], + "pageElement": "//*[@id=\"content_style\"]/style/following-sibling::*|//*[@id=\"content_left\"]/*", + "pageNum": "&pn={10*($p-1)}", + "url": "^https?://www\\.baidu\\.com/(s|baidu)\\b.", + "pageBarTop": 75, + "replaceElement": "#page", + "exclude": ".AC-style-logo,.killRight,a.new-nextpage-only,a.new-nextpage", + "wait": 500 +}, +{ + "name": "Baidu", + "insertPos": 1, + "nextLink": [ + "//*[@id='page']/div/a[span[contains(text(),'下')]]", + "//*[@id='page']/div/a[span[contains(text(),'上')]]" + ], + "pageElement": "//*[@id=\"content_style\"]|//*[@id=\"content_left\"]", + "pageNum": "&pn={10*($p-1)}", + "url": "^https?://www\\.baidu\\.com/(s|baidu)\\b.", + "pageBar": 0, + "replaceElement": "#page", + "exclude": ".AC-style-logo,a.new-nextpage-only,a.new-nextpage", + "include": ".killRight", + "wait": 500 +}, +{ + "name": "手机百度", + "url": "^https://(m|www|wap)\\.baidu\\.com/", + "nextLink": "a.new-nextpage-only,a.new-nextpage", + "pageElement": "#results" +}, +{ + "name": "百度贴吧列表", + "action": 1, + "pageBar": "pageBar.classList.add('j_thread_list');pageBar.dataset.field='{}'", + "url": "^https?://tieba\\.baidu\\.com/.+", + "pageElement": "ul#thread_list>li", + "pageNum": "[\\?&]pn={50*($p-1)}", + "nextLink": ".next.pagination-item " +}, +{ + "name": "百度贴吧看贴", + "pageBar": "pageBar.classList.add('l_post')", + "nextLink": "//div[@class=\"pb_footer\"]//a[starts-with(text(), '下一页')]", + "pageElement": "//div[@class=\"p_postlist\"]/div[starts-with(@class, 'l_post')]", + "action": 1, + "pageNum": "[\\?&]pn={$p}", + "url": "^https?://tieba\\.baidu\\.com/p/.+", + "wait": "if(doc==document)return true;let lzl=doc.querySelector('div.hideLzl');if(lzl){var actualTop=lzl.offsetTop;var current=lzl.offsetParent;while(current!==null){actualTop+=current.offsetTop;current=current.offsetParent;}doc.body.scrollTop=actualTop;doc.documentElement.scrollTop=actualTop;return false}else{return true}", + "history": 0 +}, +{ + "name": "搜狗wap", + "url": "^https?://(wap|m)\\.sogou\\.com/web/(searchList\\.jsp|sl\\?)", + "loadMore": "#ajax_next_page", + "nextLink": 0 +}, +{ + "name": "头条搜索手机版", + "url": "^https?://(so|m)\\.toutiao\\.com/search/", + "nextLink": "a[class^=container_],a[class^=containerRight]" +}, +{ + "name": "Camp Firefox Forum", + "url": "^https://www\\.camp-firefox\\.de/forum/ungelesene-beitraege/", + "pageElement": "#content > div > ol.tabularList", + "nextLink": "nav.pagination > ul > li.skip:last-child > a", + "updatedAt": "2022-09-10", + "author": "benzBrake" +}, +{ + "name": "秀人网", + "url": "^https://www\\.(?:imn5|mntp|jpmnb|jpmn8|mn5|xgmn|jpxgmn|jpxgyw|xiurenji|xiurenb|xrmn|xrmn5)\\.(?:com|net|vip|cc|top)/.*\\.html", + "pageElement": "p>img", + "author": "bmp4cwa" +}, +{ + "name": "美女图123", + "url": "^https://(www|m)\\.meinvtu123\\.cc/", + "pageElement": "div>img", + "author": "bmp4cwa" +}, +{ + "name": "雪球", + "url": "^https://xueqiu\\.com/", + "pageElement": ".status-list>article", + "nextLink": "a.pagination__next" +}, +{ + "name": "行情 - 雪球", + "url": "^https?://xueqiu\\.com/hq", + "pageElement": "div#stockList table.portfolio", + "pinUrl": true, + "action": 3 +}, +{ + "name": "中国知网", + "url": "^https://kns\\.cnki\\.net/kns8/defaultresult/index", + "nextLink": "a#PageNext", + "pageElement": ".result-table-list tbody>*", + "iframeInit": "let doc;let ready=()=>{let fn1=window.BriefExtend.setFullTextState;window.BriefExtend.setFullTextState=()=>{fn1();win.$('#PageNext').attr('data-curPage',window.$('#PageNext').attr('data-curPage'))}; win.BriefParam._getSearchPaperArgModel=(isSearch, cPage)=>{return window.BriefParam._getSearchPaperArgModel(isSearch, (!!cPage ? cPage : win.BriefParam._getCurPage()))};doc.querySelector('#txt_search').value=document.querySelector('#txt_search').value;doc.querySelector('.search-btn').click()};let checkPage=()=>{if(win.document.querySelector('#txt_search')){doc=win.document;ready();}else setTimeout(checkPage,100)};checkPage();", + "initRun": 0, + "wait": 1000 +}, +{ + "name": "中国知网 AdvSearch", + "url": "^https://kns\\.cnki\\.net/kns8s/AdvSearch", + "nextLink": "a#PageNext", + "pageElement": ".result-table-list tbody>*", + "refreshByClick": ".search-btn", + "initRun": 0, + "wait": 1000 +}, +{ + "name": "图怪兽", + "url": "^https://818ps\\.com/", + "pageElement": "#masonry" +}, +{ + "name": "创客贴", + "url": "^https://www\\.chuangkit\\.com/", + "type": 0, + "nextLink": "//div[@class='number']/ul/li[@class='item active']/following-sibling::li/a", + "pageElement": "//div[@class='ckt-waterfall-content']", + "pageAction": "let infos=doc.querySelector('body>script').innerText.match(/designTemplateId:\\d+,designTemplateImageUrl:\".*?\"/g),infoMap;if(infos){infoMap={};infos.forEach(i=>{let id=i.replace(/designTemplateId:(\\d+).*/,'$1');let src=i.replace(/.*designTemplateImageUrl:\"(.+)\"/,'$1');src=JSON.stringify(src);src=src.replace(/\\\\\\\\/g,'\\\\');src=JSON.parse(src);infoMap[id]=src;})};[].forEach.call(eles[0].querySelectorAll('.temp-sec__bottom>div>a'),a=>{let id=a.href.replace(/.*?(\\d+).*/,'$1');let src=infoMap[id];let img=a.parentNode.parentNode.previousElementSibling.querySelector('img');img.src=src;img.style.opacity=1;})" +}, +{ + "name": "水木桌面端", + "url": "^https://www\\.mysmth\\.net/nForum/#!article/", + "nextLink": "a[title='下一页']", + "pageElement": "div.b-content" +}, +{ + "name": "水木移动端", + "url": "^https://m\\.mysmth\\.net/article/", + "pageElement": "#m_main>ul.list" +}, +{ + "name": "汽车之家", + "url": "^https://club\\.autohome\\.com\\.cn", + "pageElement": "#js-reply-list-container", + "action": 2, + "nextLink": ".athm-page__next" +}, +{ + "name": "煎蛋吐槽", + "url": "^https?://jandan\\.net/", + "nextLink": "a.previous-comment-page", + "pageElement": "ol.commentlist>li", + "pageAction": "let gif_click_load = getCookie('gif-click-load');let bad_click_load = getCookie('bad-click-load');let nsfw_click_load = getCookie('nsfw-click-load');let gif_on = (gif_click_load == 'on' || gif_click_load == null) ? true : false;let nsfw_on = (nsfw_click_load == 'on' || nsfw_click_load == null) ? true : false;let bad_on = (bad_click_load == 'on' || bad_click_load == null) ? true : false;[].forEach.call(eles, e => { let tucao = e.querySelector('a.tucao-btn'); if (tucao) tucao.onclick = e => { var n = $(e.currentTarget); var m = n.data('id'); var o = n.closest('li'); var l = o.find('div.jandan-tucao'); if (l.length) { l.slideToggle('fast') } else { tucao_load_content(o, m) } }; e=$(e);var is_bad = false; if (bad_on) { var oo = parseInt(e.find('.comment-like').next('span').text()); var xx = parseInt(e.find('.comment-unlike').next('span').text());if ( (oo + xx) >= 50 && (oo / xx) < 0.618 ) {is_bad = true;var r = e.find(\"p\").not('.bad_content');r.hide();e.find('.righttext').after('

    因不受欢迎已被超载鸡自动隐藏.[手贱一回]

    ');e.find(\".view_bad\").click(function () {if (this.innerHTML == '[手贱一回]' || this.innerHTML == '[再手贱一回]') {r.show();if (this.innerHTML == '[手贱一回]') {r.find('.gif-mask').remove();r.find('img').each(function() {var org_src = this.getAttribute('org_src');if (org_src)this.src = org_src;});}this.innerHTML = '[真不该手贱]';} else {r.hide();this.innerHTML = '[再手贱一回]';}});}}if ( ! is_bad && nsfw_on) {var p = e.find(\"p\").not('.bad_content');if (p.length == 0) return;let content = p.html();if (content.indexOf('NSFW') > -1) {p.hide();e.find('.righttext').after('

    此图被标记为NSFW被超载鸡自动隐藏.[旁边没人]

    ');e.find(\".view_nsfw\").click(function () {if (this.innerHTML == '[旁边没人]' || this.innerHTML == '[旁边还是没人]') {p.show();p.find('.gif-mask').remove();if (this.innerHTML == '[旁边没人]') {p.find('img').each(function() {var org_src = this.getAttribute('org_src');if (org_src)this.src = org_src;});}this.innerHTML = '[看完了,擦键盘]';} else {p.hide();this.innerHTML = '[旁边还是没人]';}});}}let img=e.find('p>img');if(img){img.css('max-width', '100%');img.css('max-height', '450px').click(function () {var $this = img;if ($this.css('max-height') == 'none') {var max_width = img.parent().parent().width();$this.css('max-width', max_width);$this.css('max-height', '450px');} else {if ($this.parent().hasClass('acv_comment'))$this.css('max-width', 'none');$this.css('max-height', 'none');}$(\"html,body\").animate({scrollTop: $this.offset().top - 40},325);});}})" +}, +{ + "name": "xxgame", + "action": 0, + "url": "^http://www\\.xxgame\\.net/chinese", + "pageElement": "div.layui-row>div.layui-col-md4:not(div:nth-child(5),div:nth-child(6),div:nth-child(7))", + "nextLinkByUrl": [ + "(http://www\\.xxgame\\.net/chinese/?)(?:\\?page=|$)(\\d*)", + "$1?page={($2.0||1)+1}" + ] +}, +{ + "name": "斗鱼", + "url": "^https://www\\.douyu\\.com/directory/", + "nextLink": "li.dy-Pagination-next[aria-disabled='false']", + "pageElement": "ul.layout-Cover-list", + "wait": 1000, + "enable": 0 +}, +{ + "name": "Literotica", + "type": 0, + "action": 0, + "url": "^https://www\\.literotica\\.com/.", + "pageElement": "//div[contains(@class,\"panel article\") or @class=\"b-story-list\"]/div", + "nextLink": "//a[@title='Next Page' or @class='b-pager-next']", + "wait": 3000 +}, +{ + "name": "站酷", + "url": "^https://www\\.zcool\\.com\\.cn/search/content", + "action": 2, + "nextLinkByUrl": [ + "(.*/content\\?&?word=[^&]+)(?:&page=|$)(\\d*)", + "$1&page={($2.0||1)+1}" + ] +}, +{ + "name": "masuit", + "action": 0, + "url": "^https://masuit\\.com/", + "pageElement": ".ibox.wow", + "nextLink": "a[aria-label=Next]" +}, +{ + "name": "佛弟子文库", + "url": "^https?://www\\.fodizi\\.net/", + "nextLink": "a.current+a", + "pageElement": "div.wrap>*:not(.page)" +}, +{ + "name": "smzdm", + "action": 0, + "url": "^https://.*\\.smzdm\\.com", + "pageElement": "ul#feed-main-list>li", + "nextLink": ".pagenation-list>li.current+li>a", + "insert": "ul#feed-main-list", + "insertPos": 2 +}, +{ + "name": "mhgui", + "action": 0, + "url": "^https://.*\\.mhgui\\.com/comic/\\d+", + "pageElementByJs": "let link=document.querySelector('#mangaBox>img').src; let match=link.match(/(.*)(\\d{3})(\\.jpg.*)/); window.i=window.i||parseInt(match[2]);window.i++; let src=match[1]+(window.i>99?window.i:(window.i>9?'0'+window.i:'00'+window.i))+match[3]; let img=document.createElement('img');img.onload=()=>{over([img])};img.onerror=e=>{over()};img.src=src;", + "insert": "#mangaBox", + "insertPos": 2 +}, +{ + "name": "manga1000", + "url": "^https://manga1000\\.top/\\d+/\\d+", + "pageElement": "div.chapter-content>*", + "css": ".chapter-content>img{display:unset!important}", + "nextLink": "ul.chapter_select a.next" +}, +{ + "name": "javdb", + "action": 0, + "url": "^https://javdb\\.com/", + "pageElement": "#videos.video-container", + "css": ".grid.columns{display: flex; flex-wrap: wrap;}" +}, +{ + "name": "喜马拉雅", + "url": "^https://www\\.ximalaya\\.com/", + "nextLink": ".page-next>a", + "wait": 1000, + "action": 2, + "pageElement": ".list-container,.main-content" +}, +{ + "name": "方正字库", + "url": "^https://www\\.foundertype\\.com/", + "nextLink": "#page>a.on+a", + "pageElement": "#fonPar,#chinese_ft1", + "action": 1 +}, +{ + "name": "Trakt", + "url": "^https://trakt\\.tv", + "pageElement": "section#info-wrapper > div.container > div.row > div#overview>*", + "action": 1, + "waitElement": [ + ".summary-activity", + "#popular-comments.fade:not(.in)" + ] +}, +{ + "name": "北邮人论坛", + "url": "bbs\\.byr\\.cn(|/(|#!)default)$", + "listenHashChange": true, + "pinUrl": true, + "author": "lanvent" +}, +{ + "name": "北邮人论坛-版块", + "url": "bbs\\.byr\\.cn/(|#!)board", + "listenHashChange": true, + "pageElement": ".b-content> table>tbody", + "pinUrl": true, + "history": 0, + "action": 1, + "author": "lanvent" +}, +{ + "name": "北邮人论坛-帖子内", + "url": "bbs\\.byr\\.cn/(|#!)article", + "listenHashChange": true, + "pageElement": ".b-content", + "replaceElement": ".page", + "pinUrl": true, + "history": 0, + "action": 1, + "author": "lanvent" +}, +{ + "name": "北大未名BBS-版块", + "url": "bbs\\.pku\\.edu\\.cn/v2/thread.php", + "pageElement": "#list-content", + "nextLink": "//div[contains(text(),'下一页')]/a", + "replaceElement": ".paging", + "author": "lanvent" +}, +{ + "name": "北大未名BBS-帖子内", + "url": "bbs\\.pku\\.edu\\.cn/v2/post-read.php", + "pageElement": ".card-list", + "nextLink": "//div[contains(text(),'下一页')]/a", + "replaceElement": ".paging", + "author": "lanvent" +}, +{ + "name": "bilibili search", + "action": 1, + "url": "^https://search\\.bilibili\\.com", + "pageElement": "ul>li.video-item,div.video-list.row>*", + "sandbox": false, + "waitElement": ".bili-video-card__wrap" +}, +{ + "name": "bilibili space", + "url": "^https://space\\.bilibili\\.com/", + "sandbox": false, + "pageElement": "ul.cube-list>li,ul.video-list>li,ul.relation-list>li,ul.content>li", + "nextLink": ".be-pager-next,.next-page", + "wait": 1000, + "css": ".b-img.sleepy .b-img__inner{opacity:1}" +}, +{ + "name": "动漫屋1", + "action": 1, + "url": "^https?://www\\.(dm5|1kkk)\\.(com|cn)/(m|ch)", + "pageElement": ".view-main>.item", + "nextLink": "span.current+a,div#chapterpager+a+a", + "rate": 3 +}, +{ + "name": "动漫屋2", + "action": 1, + "type": 0, + "url": "^https?://www\\.(dm5|1kkk)\\.(com|cn)/(m|ch)", + "pageElement": "//div[@id=\"barChapter\"]/img", + "nextLink": "//div[@class=\"view-paging\"]/div/a[contains(text(),'下一')]", + "rate": 3 +}, +{ + "name": "异次元", + "url": "^https://www\\.iplaysoft\\.com/", + "pageElement": "#postlist", + "nextLink": ".pagenavi>a[title='下一页']" +}, +{ + "name": "魂+", + "url": "^https?://((www\\.|bbs\\.)?(south|north|level|white|soul|snow|east|spring|summer|blue)-plus.(net|org)|bbs.imoutolove.me)/", + "action": 1, + "sleep": 1000, + "exclude": "//div[@id='main']/form|//tr[@align='center']" +}, +{ + "name": "魂+阅读页", + "url": "^https?://((www\\.|bbs\\.)?(south|north|level|white|soul|snow|east|spring|summer|blue)-plus.(net|org)|bbs.imoutolove.me)/", + "action": 1, + "type": 0, + "pageElement": "//div[@id='main']/form[1]", + "nextLink": "//div[@class='pages']/ul/li[.//b]/following-sibling::li/a", + "sleep": 1000, + "pageNum": "-page-{$p}.html" +}, +{ + "name": "魂+列表页", + "url": "^https?://((www\\.|bbs\\.)?(south|north|level|white|soul|snow|east|spring|summer|blue)-plus.(net|org)|bbs.imoutolove.me)/", + "action": 1, + "type": 0, + "pageElement": "//tr[@align='center']", + "nextLink": "//div[@class='pages']/ul/li[.//b]/following-sibling::li/a", + "sleep": 1000, + "pageNum": "-page-{$p}.html" +}, +{ + "name": "动漫啦", + "url": "^https://www\\.dongman\\.la/manhua/chapter/", + "pageElement": ".chapter-images img", + "nextLink": ".mdui-bottom-nav>a+a", + "init": "let is=document.querySelectorAll('.chapter-images img'),j=document.querySelector('.lazyBox');is.forEach(i=>{i.src=i.dataset.srcset;j.appendChild(i);})", + "pageAction": "let j=document.querySelector('.lazyBox');eles.forEach(i=>{i.src=i.dataset.srcset;})", + "insert": ".lazyBox", + "insertPos": 2 +}, +{ + "name": "Fur Affinity", + "url": "^https?://www\\.furaffinity\\.net/(?:browse|msg/submissions|(?:favorites|gallery|scraps)/[^/]+)/", + "pageElement": "//section[@class='gallery s-200 ']/*", + "nextLink": "//form[@name='replyform']/button[@value='Next']", + "action": 0 +}, +{ + "name": "bookmarkearth", + "action": 0, + "url": "^https://www\\.bookmarkearth\\.com(?:/?$|/page\\?currentPage=)", + "pageElement": ".source>.document-piece", + "nextLinkByUrl": [ + "(.*\\.com)(?:/?$|/page\\?currentPage=)(\\d*)", + "$1/page?currentPage={($2.0||1)+1}" + ] +}, +{ + "name": "音范丝", + "action": 1, + "url": "^https://www\\.yinfans\\.me/", + "pageElement": "#post_container", + "nextLink": "a.next", + "waitElement": [ + "#post_container[style]" + ] +}, +{ + "name": "bookmarkearth search", + "action": 0, + "url": "^https://www\\.bookmarkearth\\.com/s/search\\?q=", + "pageElement": ".source>.document-piece", + "nextLinkByUrl": [ + "(.*/s/search\\?q=.*¤tPage=)(\\d*)", + "$1{$2+1}" + ] +}, +{ + "name": "深圳人社局通知公告", + "action": 0, + "url": "^http://hrss\\.sz\\.gov\\.cn/tzgg", + "pageElement": ".newsList>ul", + "nextLink": "a.next" +}, +{ + "name": "什么值得买社区", + "action": 1, + "url": "^https://post\\.smzdm\\.com/p", + "pageElement": "#comment", + "nextLink": ".pagedown>a" +}, +{ + "name": "51元素", + "action": 1, + "url": "^https://www\\.51yuansu\\.com", + "pageElement": ".f-content", + "nextLink": "a.nextpage" +}, +{ + "name": "Asian Sister", + "url": "^https://asiansister\\.com/", + "pageElement": "div.itemBox,div.itemBox_video" +}, +{ + "name": "小说站1", + "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", + "pageElement": "//div[@id='content']|//div[@id='chaptercontent']|//div[@id='BookText']", + "url": "\\d+/[\\d_-]+\\.html?$", + "pageBarText": 1 +}, +{ + "name": "小说站2", + "nextLink": "//a[contains(text(),'下一页')]|//a[contains(text(),'下一頁')]|//a[contains(text(),'下一章')]", + "pageElement": "//div[@class='content']|//div[@class='chaptercontent']", + "url": "\\d+/[\\d_-]+\\.html?$", + "pageBarText": 1 +}, +{ + "name": "晋江文学城", + "url": "^http://www\\.jjwxc\\.net", + "pageElement": "div.noveltext,#lockpage", + "pageBarText": 1 +}, +{ + "name": "厚海网", + "url": "^http://www\\.houhaiwang\\.com", + "pageElement": ".col-a1>.row-b7", + "pageBarText": 1, + "nextLink": ".col-d3>span>a" +}, +{ + "name": "17K小说网_免费章节", + "url": "^https://www\\.17k\\.com", + "pageElement": ".area>.read,.area>.comment", + "css": ".infoPath,.read_tit,.rightSide,.tuijian{display:none}.readAreaBox{width:auto}", + "pageBarText": 1, + "nextLink": ".nextChapter" +}, +{ + "name": "17K小说网_付费章节", + "url": "^https://www\\.17k\\.com", + "pageElement": ".Context>.Article", + "pageBarText": 1, + "action": 1, + "nextLink": ".nextChapter", + "wait": "return doc.querySelector('.copy')==null", + "include": "div.content" +}, +{ + "name": "netflav", + "url": "^https://netflav\\.com/", + "pageElement": ".video_grid_container>.grid_root", + "nextLink": "#general-pagination>div>a[aria-current='true']+a", + "waitElement": [ + "a[aria-current='true']+a", + "div.lazyload-placeholder,.grid_cover.image:not(.fadeIn)" + ] +}, +{ + "name": "版主小说", + "url": "/\\d+/\\d+/\\d+\\.html", + "pageElement": "div.page-content", + "nextLinkByJs": "let next=doc.querySelector('a.curr+a');if(next)return next.href.replace(/^javascript:.*\\('\\d+','\\d+','(\\d+)','(\\d+)'\\);/,'$1_$2.html');", + "action": 2 +}, +{ + "name": "纵横中文网手机版", + "url": "^https://m\\.zongheng\\.com/h5/chapter", + "type": 0, + "pageElement": "//div[@class='title']|//div[@class='text']", + "nextLink": "//div[contains(text(),'下一页')]|//div[contains(text(),'下一章')]", + "wait": 500, + "css": ".text>div,#fukerr_bot,#fukerr{display:none!important}", + "pageBarText": 1 +}, +{ + "name": "Yurifans", + "url": "^https://yuri\\.website/[a-z]", + "type": 0, + "action": 1, + "pageElement": "id('post-list')/ul", + "nextLink": "//div[@class='btn-pager']/button[text()='❯']", + "wait": "500", + "include": "id('post-list')/ul/li" +}, +{ + "name": "拷貝漫畫", + "url": "^https://copymanga\\.org/comic/.*/chapter/", + "pageElement": "ul.comicContent-list>li", + "nextLink": ".comicContent-next>a", + "action": 1, + "insert": "ul.comicContent-list", + "insertPos": 2, + "wait": "if(doc==document)return true;let sy=doc.defaultView.scrollY;let cur=doc.querySelector('.comicIndex').innerText;let max=doc.querySelector('.comicCount').innerText;if(window._cur==cur){doc.defaultView.scroll(0, 0);window._cur='';}else{doc.defaultView.scroll(0, sy+9999999);window._cur=cur;}return cur==max;" +}, +{ + "name": "Hacker News", + "action": 0, + "url": "^https?://news\\.ycombinator\\.com/", + "nextLink": "a.morelink" +}, +{ + "name": "ekşi sözlük", + "action": 0, + "url": "^https://eksisozluk\\.com", + "pageElement": "#entry-item-list", + "nextLinkByJs": "let pager=doc.querySelector('.pager');if(!pager || pager.dataset.currentpage==pager.dataset.pagecount)return null;else return location.href.replace(/&p=\\d+/,'')+'&p='+(parseInt(pager.dataset.currentpage)+1)" +}, +{ + "name": "参考消息手机版", + "action": 1, + "url": "^http://m\\.cankaoxiaoxi\\.com/", + "pageElement": "div.content", + "nextLink": "li.next>a" +}, +{ + "name": "58pic", + "url": "^https://www\\.58pic\\.com/tupian/", + "css": ".card-lazy{display:none}.pagetual_pageBar{margin-bottom: 20px!important;}", + "pageElement": "div.search-v3-content>.card-grid-box" +}, +{ + "name": "千库网", + "url": "^https://588ku\\.com/", + "action": 1, + "pageElement": ".data-box>.data-list" +}, +{ + "name": "Freepik", + "url": "^https?://www\\.freepik\\.com/", + "pageElement": "div.list-content > section.showcase", + "action": 0, + "css": ".showcase:not(.showcase--completed){display:flex;flex-wrap: wrap;}.showcase:not(.showcase--completed)>figure{visibility: visible;}.showcase:not(.showcase--completed)>div{display: none!important;}" +}, +{ + "name": "中国大学MOOC课程评论区", + "url": "^https://www\\.icourse163\\.org/course/", + "wait": 1000, + "type": 0, + "init": "if(doc)doc.querySelector('#review-tag-button').click()", + "nextLink": "//ul[@class='ux-pager']/li/a[text()='下一页']", + "pageElement": "//div[@class='ux-mooc-comment-course-comment_comment-list']/div[@class='ux-mooc-comment-course-comment_comment-list_item']" +}, +{ + "name": "铅笔小说", + "nextLinkByJs": "let script=doc.querySelector('body>.mlfy_main>script:nth-of-type(2)');if(!script)return null;return location.origin+script.innerText.match(/.*url_next:'([^']+)'.*/i)[1]", + "pageElement": "#mlfy_main_text", + "url": "^https://www\\.23qb\\.(net|com)/book/" +}, +{ + "name": "NGA", + "url": "^https?://(.*\\.nga\\.cn|nga\\.178\\.com|ngabbs\\.com)/read\\.php", + "nextLink": "a[title='下一页']", + "action": 2, + "pageElement": "div#m_posts", + "pageAction": "doc&&doc.addEventListener('mouseover',e=>{e.preventDefault();e.stopPropagation()},true)", + "iframeInit": "win.self=win.top;" +}, +{ + "name": "NGA列表页", + "url": "^https?://(.*\\.nga\\.cn|nga\\.178\\.com|ngabbs\\.com)/thread\\.php", + "action": 1, + "pageElement": "#topicrows" +}, +{ + "name": "淮安新闻网", + "url": "^http://www\\.hynews\\.net/", + "loadMore": "#_more" +}, +{ + "name": "淘股吧内贴", + "url": "^https://www\\.taoguba\\.com\\.cn/Article/\\d+/\\d+", + "pageElement": "#new_wrap_container", + "nextLinkByJs": "let pageSpan=doc.querySelector('.t_page>.left>span:last-child');if(!pageSpan)return false;let maxPage=pageSpan.innerText.replace(/.*\\/(\\d+).*/,'$1'),curPage=pageSpan.querySelector('b').innerText.trim();if(parseInt(curPage).left>span:last-child');if(!pageSpan)return false;let maxPage=pageSpan.innerText.replace(/.*\\/(\\d+).*/,'$1'),curPage=pageSpan.querySelector('b').innerText.trim();if(parseInt(curPage).left>span:last-child');if(!pageSpan)return false;let maxPage=pageSpan.innerText.replace(/.*\\/(\\d+).*/,'$1'),curPage=pageSpan.querySelector('b').innerText.trim();if(parseInt(curPage)3]", + "type": 0, + "nextLink": "//ul[@class=\"pages\"]/li/a[contains(text(),'下一页')]" +}, +{ + "name": "K.F. 绯月阅读页", + "url": "^https://(bbs\\.9shenmi\\.com|kf\\.miaola\\.work)/read.php", + "pageElement": "//form/div[@class=\"readlou\"]|//form/div[@class=\"readtext\"]|//form/div[@class=\"c\"]", + "type": 0, + "nextLink": "//ul[@class=\"pages\"]/li/a[contains(text(),'下一页')]" +}, +{ + "name": "alternativeto", + "url": "^https://alternativeto\\.net/", + "nextLink": "nav[aria-label='Pagination Navigation']>a", + "action": 1, + "pageElement": "div.container>ol>li" +}, +{ + "name": "hirelateral", + "url": "^https://www\\.hirelateral\\.com/", + "pageElement": "div.mainwrap > div.contentwrap > div.leftwrap > table.table-bordered > tbody> tr" +}, +{ + "name": "Agristudyinfo & 20govtjobs", + "url": "^(https://agristudyinfo\\.in/|https://20govtjobs\\.com/)", + "pageElement": "#main>article", + "nextLink": ".page-numbers.current+a" +}, +{ + "name": "秀色女神", + "url": "^https://www\\.xsnvshen\\.co", + "pageElement": ".container> div.longConWhite> div.workContentWrapper > div.workShow > ul > li > img#bigImg", + "nextLink": "span#next" +}, +{ + "name": "Anime Time", + "url": "^https://www\\.animetime\\.pw", + "pageElement": "div.blog-posts.container > div.grid-posts", + "nextLink": "a.page-num.page-next", + "waitElement": [ + "", + "img.post-thumb:not(.lazy-yard)" + ] +}, +{ + "name": "YTS Movies", + "url": "^https://yts\\.mx/browse-movies", + "pageElement": "//section/div[@class=\"row\"]/div", + "nextLink": "//li[./a[@class=\"current\"]]/following-sibling::li[1]/a", + "css": "img{visibility: visible!important; display: block!important;}", + "lazyImgSrc": "data-cfsrc" +}, +{ + "name": "Mobilism", + "url": "^https://forum\\.mobilism\\.org/", + "pageElement": "id('page-body')//section|id('page-body')/main/table[last()]/tbody/tr|//div[@class='row-fluid blue-bar']", + "nextLink": "//a[i/@class='icon-chevron-right']", + "css": "table.phone .stats-color,table.phone .last-color,table.phone td.center { display: none; }" +}, +{ + "name": "Search | Mobilism", + "url": "^https?://forum\\.mobilism\\.org/", + "pageElement": "main > div.row-fluid > div.well.well-small", + "nextLink": "//a[.//i[@class='icon-chevron-right']]" +}, +{ + "name": "不死鸟", + "url": "^https://iao\\.su/", + "pageElement": "#index>article", + "action": 1 +}, +{ + "name": "3DM搜索", + "url": "^https://so\\.3dmgame\\.com", + "pageElement": "body > div.content > div.search_wrap > div.search_lis", + "action": 1 +}, +{ + "name": "deviantArt", + "url": "^https://www\\.deviantart\\.com/search", + "pageElement": "div[data-hook='all_content']>div>div>div:not([class])" +}, +{ + "name": "豆瓣小组内页", + "url": "^https://www\\.douban\\.com/group/topic/", + "pageElement": "ul#comments>li", + "pageNum": "start={100*($p-1)}" +}, +{ + "name": "Github issues", + "action": 0, + "url": "^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/issues", + "pageElement": "[data-listview-component=items-list]>[class^=ListItems]", + "nextLinkByUrl": [ + "&page=(\\d+)", + "&page={$1+1}" + ] +}, +{ + "name": "Github pulls", + "action": 0, + "url": "^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/pulls", + "pageElement": "//div[starts-with(@id,'issue_')]", + "nextLink": "//a[rel=next]" +}, +{ + "name": "Repository search results · GitHub", + "url": "^https?://github\\.com/search", + "example": "https://github.com/search?q=C%2B%2B", + "nextLinkByUrl": [ + "(&p=(\\d+))?$", + "&p={$2+1}" + ], + "pageElement": "[data-testid='results-list']", + "action": 0, + "include": "[rel='next']" +}, +{ + "name": "github repos list", + "url": "^https?://github\\.com/[^/]+\\?tab=repositories", + "pageElement": "//ul[@data-filterable-for='your-repos-filter']", + "nextLink": "//a[@rel='next']", + "action": 0, + "css": ".starring-container+.hide-lg{display:none}" +}, +{ + "name": "Actions · github", + "action": 0, + "url": "^https?://github\\.com/", + "pageElement": "div.Box-row.js-socket-channel.js-updatable-content", + "nextLink": "//a[text()='Next']" +}, +{ + "name": "Hoothin github page", + "url": "^https?://hoothin\\.github\\.io/", + "enable": 0 +}, +{ + "name": "360搜索", + "url": "^https://www\\.so\\.com/s", + "lazyImgSrc": "data-isrc", + "css": ".so-lazyimg{opacity:1!important}.so-rich-news .pics li{float:left;margin-right:17px;}", + "pageNum": "pn={$p}" +}, +{ + "name": "Mixfemdomcc", + "url": "^https://mixfemdomcc\\.com", + "css": ".gray-block a.highslide_new > img{transform:unset}" +}, +{ + "name": "Handpicked Jerk-Off Instruction (JOI) Videos", + "url": "^https://joi-me\\.com", + "action": "1", + "pageElement": "#container" +}, +{ + "name": "Konachan.com Anime Wallpapers", + "url": "^https://konachan\\.com/post", + "nextLink": "id(\"post-view\")/div[@class=\"sidebar\"]/div[5]/ul/li[2]/a", + "pageElement": "id(\"image\")" +}, +{ + "name": "Femdom", + "url": "^https://femdomup\\.net", + "pageElement": ".cat-shortstory>article", + "pageAction": "eles.forEach(ele=>{let video=ele.querySelector('video');video.onmouseenter=e=>{video.src=video.dataset.src;video.classList.add('prev-video')};video.onmouseleave=e=>{video.src='/templates/videok2s/dleimages/plug.webm';video.classList.remove('prev-video')}})" +}, +{ + "name": "Amedia", + "url": "^https://amedia\\.online", + "pageElement": "#dle-content", + "css": "img[data-src] { opacity: 1; }" +}, +{ + "name": "XFantazy", + "url": "^https://xfantazy\\.com", + "pageElement": ".MuiGrid-container", + "action": 2, + "fitWidth": false +}, +{ + "name": "PornAV", + "url": "^https://pornav\\.co", + "pageElement": "div#grid-container", + "css": ".cbp-lightbox{visibility: visible;}.cbp-caption-defaultWrap{-webkit-transition: -webkit-transform .6s cubic-bezier(.19,1,.22,1); transition: transform .6s cubic-bezier(.19,1,.22,1)}.cbp-caption:hover .cbp-caption-defaultWrap{-webkit-transform: scale(1.25); -moz-transform: scale(1.25); transform: scale(1.25);}.cbp-caption-activeWrap{opacity:0}.cbp-caption-activeWrap:hover{opacity:1}#grid-container.cbp-l-grid-blog{visibility: visible;}" +}, +{ + "name": "Pornhub.com", + "action": 0, + "url": "^https://[^.]+\\.pornhub\\.com/(?!view_video\\.php).+", + "pageElement": "id(\"videoCategory\") | \r\nid(\"incategoryVideos\") | \r\nid(\"videoSearchResult\") | \r\nid(\"mostRecentVideosSection\") | \r\nid(\"photosAlbumsSection\") | \r\nid(\"claimedRecentVideoSection\") | \r\n//div[@class='recommendedVideosContainer']/ul | \r\nid(\"popularPornstars\") | \r\n//ul[contains(concat(' ', normalize-space(@class), ' '), ' streamateContent ')] | \r\nid('filterChannelsSection') | \r\nid('playListSection')", + "nextLink": "//li[contains(concat(\" \", normalize-space(@class), \" \"), \" page_next \")][not(contains(@class, \"disabled\"))]/a" +}, +{ + "name": "草榴社區", + "type": 0, + "url": "htm_data/\\d+/\\d+/\\d+\\.html|read\\.php\\?tid=|thread0806\\.php\\?fid=", + "pageElement": "id('ajaxtable')//tr[.//a][./preceding-sibling::tr or ./following-sibling::tr]|//div[@class='t t2']", + "sleep": 2500, + "nextLink": "//div[@class='pages']/a[u]/following-sibling::a[1]", + "action": 0 +}, +{ + "name": "phpwind read", + "url": "/read\\.php\\?", + "pageElement": ".main-box>.bbs-read-subbox" +}, +{ + "name": "phpwind old read", + "url": "/read\\.php\\?", + "pageElement": "form[name='delatc']>a[name]", + "nextLink": "td>b+a", + "insert": "form[name='delatc']>a:last-child>table:nth-child(2)", + "insertPos": 1 +}, +{ + "name": "phpwind old list", + "url": "/thread\\.php\\?", + "pageElement": "tr.t_two", + "nextLink": "td>b+a" +}, +{ + "name": "虎扑", + "url": "^https?://bbs\\.hupu\\.com/\\d+", + "pageElement": ".bbs-post-wrapper-content", + "nextLink": "li.hupu-rc-pagination-next>a:not([disabled])" +}, +{ + "name": "虎扑社区", + "url": "^https?://bbs\\.hupu\\.com/", + "example": "https://bbs.hupu.com/623887205.html", + "author": "Hoothin", + "pageElement": "[class^=\"post-wrapper_bbs-post-wrapper-title\"]+div" +}, +{ + "name": "小木虫论坛", + "url": "^http://muchong\\.com", + "pageElement": "div#maincontent" +}, +{ + "name": "极简", + "url": "^https://bz\\.zzzmh\\.cn/", + "pageElement": "div.img-box", + "nextLink": "div.vue_pagination_next", + "wait": "let preload=doc.querySelector('.v-image__image--preload');if(preload){var actualTop=preload.offsetTop;var current=preload.offsetParent;while(current!==null){actualTop+=current.offsetTop;current=current.offsetParent;}doc.documentElement.scrollTop=actualTop;return false;}return doc.querySelector('div.vue_pagination_next');", + "init": "if(iframe){iframe.style.position='fixed';iframe.style.top=0;iframe.height=1000;let mask=doc.querySelector('div.mask');setInterval(()=>{if(mask.style.display!='none'){iframe.style.visibility='';}else{iframe.style.visibility='hidden'}},1000)}", + "enable": 0 +}, +{ + "name": "极简", + "url": "^https://chrome\\.zzzmh\\.cn/", + "pageElement": ".row>.index-card-box", + "nextLink": "[aria-label='Next page']", + "waitElement": [ + "!.v-image__image--preload" + ] +}, +{ + "name": "东方财富", + "url": "^http://quote\\.eastmoney\\.com/", + "pinUrl": true, + "nextLink": "a.next:not(.disabled)", + "pageElement": "#table_wrapper-table>tbody>tr" +}, +{ + "name": "mikuclub", + "url": "^https://www\\.mikuclub\\.cc/", + "loadMore": "button.get-next-page", + "nextLink": "0" +}, +{ + "name": "smzdm jingxuan", + "action": 0, + "url": "^https://.*\\.smzdm\\.com/jingxuan", + "pageElement": "ul#feed-main-list>li", + "nextLinkByUrl": [ + "(.*jingxuan)(/p)?(\\d*)", + "$1/p{($3.0||1)+3}" + ], + "insert": "ul#feed-main-list", + "insertPos": 2, + "delay": "let curpage=location.href.match(/\\d+$/);if(curpage)curpage=parseInt(curpage[0])+2;else curpage=3;return document.querySelector('#J_feed_pagenation>li.current').innerText>=curpage&&document.querySelector('#J_feed_loading').style.display=='none'" +}, +{ + "name": "天涯列表页", + "url": "^http://bbs\\.tianya\\.cn/list", + "pageElement": "table.tab-bbs-list>tbody:not(tbody:nth-of-type(1))" +}, +{ + "name": "天涯内容页", + "url": "^http://bbs\\.tianya\\.cn/post", + "pageElement": ".atl-main>.atl-item" +}, +{ + "name": "Fiction.live", + "url": "^https://fiction\\.live/", + "pageElement": "#storyPosts>div>article.chapter", + "nextLink": ".nextChapter", + "action": 1, + "wait": 500 +}, +{ + "name": "微博搜索", + "url": "^https://s\\.weibo\\.com/", + "pageElement": "#pl_feedlist_index>div>div.card-wrap", + "action": 1, + "pageAction": "eles.forEach(e=>{let vc=e.querySelector('a.WB_video_h5');if(vc){let v=vc.querySelector('video');let b=vc.querySelector('button.wbpv-big-play-button');b.onclick=e=>{v.style.zIndex=9;v.controls=true;v.play()}}})" +}, +{ + "name": "某小说站", + "url": "^https://yuyan\\.pw/novel/\\d+/\\d+", + "pageElement": "#nr>div", + "pageAction": "eles[0].innerHTML='  '+eval(doc.querySelector('body>script:nth-of-type(8)').innerHTML.match(/var chapter =(.*?);\\n/)[1]);" +}, +{ + "name": "翠微居", + "url": "^https://www\\.cuiwei\\.org/book/\\d+/\\d+\\.html", + "action": 1, + "nextLink": "a.next", + "pageElement": "#chapter-content>p" +}, +{ + "name": "套图吧", + "url": "^https://www\\.192tp\\.com/", + "pageElement": ".picsboxcenter" +}, +{ + "name": "昵图网", + "url": "^https://www\\.nipic\\.com/", + "css": "a.new-works-img-box>span>img{display:initial!important}" +}, +{ + "name": "inoveltranslation", + "url": "^https://inoveltranslation\\.com/", + "pageElement": ".chakra-skeleton>p", + "insert": "#chapterreadtrck", + "nextLink": "button[aria-label='next chapter']" +}, +{ + "name": "lightnovelstranslations", + "url": "^https://lightnovelstranslations\\.com/", + "nextLink": "p.alignright>a", + "pageElement": ".entry-content>p" +}, +{ + "name": "书山有路", + "url": "^https?://www\\.ssylu\\.com/", + "nextLink": ".pagenavi>span.current+a" +}, +{ + "name": "bjav", + "url": "^https://thebjav\\.com/|^https://sexbjcam\\.com/", + "css": "img[data-src]{opacity: 1;}" +}, +{ + "name": "scribblehub", + "url": "^https://www\\.scribblehub\\.com/read", + "pageElement": "#chp_raw", + "nextLink": "a.btn-next", + "pageAction": "eles.forEach(ele=>{[].forEach.call(ele.querySelectorAll('.sp-head'),sp=>{sp.onclick=e=>{sp.nextElementSibling.classList.toggle('folded')}})})" +}, +{ + "name": "serx.ml", + "url": "^https?://serx\\.ml/", + "pageElement": "article.result" +}, +{ + "name": "Ru.Board", + "url": "^https?://forum\\.ru-board\\.com/", + "nextLink": "table .small>b+a", + "exclude": "table.tb" +}, +{ + "name": "Ru.Board", + "url": "^https?://forum\\.ru-board\\.com/", + "nextLink": "table .small>b+a", + "pageElement": "table.tb", + "include": "table.tb" +}, +{ + "name": "淘宝已买到的宝贝", + "url": "^https://buyertrade\\.taobao\\.com/", + "pageElement": "table[data-reactid]", + "lockScroll": true +}, +{ + "name": "淘宝店铺1", + "url": "^https?://.*\\.taobao\\.com/search\\.htm", + "pageElement": ".skin-box-bd>.grid>.item3line1", + "pagePre": "return decodeURI(response).replace(/[\\\\]/g,'')", + "nextLinkByJs": "let n=doc.querySelector('.pagination>a.next');if(!n)return;return n.href.replace(/(.*)\\/search\\.htm\\?(.*)/,'$1/i/asynSearch.htm?$2').replace(/&callback=.*?&/,'&')", + "wait": 500 +}, +{ + "name": "423Down评论", + "url": "^https?://www\\.423down\\.com/", + "pageElement": "div#postcomments > ol.commentlist> li.comment" +}, +{ + "name": "奔跑的奶酪", + "url": "^https://www\\.runningcheese\\.com/", + "pageElement": "ul.ajaxposts>li" +}, +{ + "name": "奔跑的奶酪内页禁用", + "url": "^https://www\\.runningcheese\\.com/", + "pageElement": "section#scroll article.entry", + "enable": 0 +}, +{ + "name": "异星软件", + "url": "^https://www\\.yxssp\\.com/", + "pageElement": ".td-modules-container", + "nextLink": "span.current+a" +}, +{ + "name": "题目列表 - 洛谷", + "url": "^https://www\\.luogu\\.com\\.cn/problem/list", + "nextLinkByUrl": [ + "(\\?page=|$)(\\d*)", + "?page={$2+1}" + ], + "wait": 1000, + "pagePre": [ + "(.*?)", + "
    $1
    " + ], + "pageElement": ".row" +}, +{ + "name": "题单广场 - 洛谷", + "url": "^https://www\\.luogu\\.com\\.cn/training/list", + "nextLinkByUrl": [ + "(&page=|$)(\\d*)", + "&page={$2+1}" + ], + "wait": 1000, + "pagePre": [ + "
  • (.*?)
  • ", + "" + ], + "pageElement": ".row" +}, +{ + "name": "SteamPY", + "url": "^https?://steampy\\.com/", + "pageElement": ".market-detail > div.ivu-tabs > div.ivu-tabs-content > div.ivu-tabs-tabpane div.flex-row > .gameblock", + "nextLink": ".page-ul > li.active + li:not(.disabled)", + "pinUrl": true +}, +{ + "name": "Steam Community Workshop Items", + "url": "^https?://steamcommunity\\.com/", + "pageElement": "#leftContents>div.workshopBrowsePaging+div.workshopBrowseItems" +}, +{ + "name": "SteamPeek", + "url": "^https?://steampeek\\.hu/", + "example": "https://steampeek.hu/?from=108&tagid=86", + "pageElement": "#lister_result_container>article", + "nextLinkByUrl": [ + "\\?(from=(\\d+)&)?", + "?from={$2+36}&" + ], + "lazyImgSrc": "data-src" +}, +{ + "name": "WPLOCKER.COM - GPL LICENSED WORDPRESS THEMES & PLUGINS", + "url": "^https?://www\\.wplocker\\.com/", + "example": "https://www.wplocker.com/index.php?do=search", + "nextLinkByJs": "let kw=document.querySelector('#searchinput').value,page=doc.querySelector('.navigations>span');page=parseInt(page.innerText)+1;return location.href+`#p{do=search&subaction=search&search_start=${page}&full_search=0&result_from=${(page-1)*16+1}&story=${kw}}`", + "pageElement": ".row>.col-xs-12", + "wait": 1000 +}, +{ + "name": "buondua", + "url": "^https://(.*\\.)?buondua\\.com/", + "type": 0, + "pageElement": "//div[@class='article-fulltext']", + "nextLink": "//span[.//a[@class='pagination-link is-current']]/following-sibling::span/a" +}, +{ + "name": "Alibaba", + "url": "^https://www\\.alibaba\\.com//?trade/search", + "pageElement": ".organic-list>*", + "nextLink": ".seb-pagination__pages>span+a", + "action": 1, + "pageAction": "eles.forEach(ele=>{let img=ele.querySelector('div[data-image]>img');if(!img)return;img.src=img.parentNode.dataset.image})", + "wait": "return doc.querySelector('.seb-pagination__pages') && !doc.querySelector('.organic-list>p>i.ui2-icon-loading')" +}, +{ + "name": "MGS Videos", + "url": "^https?://tktube\\.com/", + "pageElement": " div.list-videos > div#list_videos_common_videos_list_items > div.item", + "nextLink": ".next>a[href^='#']", + "pageAction": "eles.forEach(ele=>{let img=ele.querySelector('img[data-preview]');if(!img)return;let video=document.createElement('video');video.src=img.dataset.preview;video.setAttribute('playsinline','true');video.setAttribute('autoplay','');video.setAttribute('loop','');video.style.cssText='position: absolute; left: 0px; top: 0px; width: 318px; height: 179px; background: rgb(0, 0, 0); visibility: visible;';ele.onmouseenter=e=>{video.play();img.parentNode.appendChild(video)};ele.onmouseleave=e=>{img.parentNode.removeChild(video)}})" +}, +{ + "name": "初音社", + "url": "^https://www\\.mikuclub\\.online", + "pageElement": "#post-list > div.col.card", + "lazyImgSrc": "file", + "css": "img.sl_lazyimg{opacity:1}", + "pageAction": "eles.forEach(ele=>{let img=ele.querySelector('img');img.classList.remove('sl_lazyimg')})" +}, +{ + "name": "易书 电子书聚合搜索引擎", + "url": "^https?://search\\.zhelper\\.net/", + "pinUrl": true, + "nextLink": "//a[text()='下一页']", + "pageElement": "ol.list-group>a", + "pageAction": "eles.forEach(ele=>{let source=ele.querySelector('.card-title').nextSibling.data.match(/书源:(\\S+)/)[1];let id=ele.querySelector('small').innerText.match(/ID:(\\d+)/)[1];ele.onclick=e=>{axios.post('https://api.ylibrary.org/api/detail/', {id: id,source: source}).then(response=>{if (response.data.errorn) {alert(response.data.msg)} else {let detail=response.data;document.querySelector('#detailModal .modal-body').innerHTML=``}}).catch(error=>{if (error.toJSON().status == 429) {alert('请求过于频繁,请稍等一下再次尝试(429)')} else {alert(`未知错误,请打开控制台查看(${error.message})`)}});var myModal = new bootstrap.Modal(document.getElementById('detailModal'),{});myModal.toggle()}})" +}, +{ + "name": "Gamersky.com", + "url": "^https://(.+)?gamersky\\.com/", + "pageElement": "(id('gspaging')|//div[contains(@class,'Mid')][contains(@class,'L')][contains(@class,'con')])/p", + "nextLink": "//div[@class='page_css']/b/following-sibling::a[1]", + "action": 0, + "css": ".post_ding{position: fixed; bottom: 5%; left: 0; z-index: 11;}.post_ding>.Content_Paging{padding: 5px 20px; width: auto;}.post_ding>.Content_Paging>.hd{width: auto;}.post_ding>.Content_Paging>.bd{display: none;}.post_ding:hover>.Content_Paging>.bd{display: block;}" +}, +{ + "name": "Zoeken met Startpagina en Google", + "url": "^https?://startgoogle\\.startpagina\\.nl/.*query=", + "pinUrl": true, + "history": 0, + "nextLinkByUrl": [ + "/(search)?\\?(.*)&(query|q)=(\\w+)(&page=(\\d+))?.*", + "/search?$2&q=$4&page={$6+1}&start={($6-1)*10}&num=10" + ], + "pageElement": "#organic-results>.organic", + "pagePre": "let lis=[];JSON.parse(response).results.forEach(r=>{let li=`
  • ${r.title}

    ${r.display_url}
    ${r.snippet}
  • `;lis.push(li)});return `
      ${lis.join('')}
    `;" +}, +{ + "name": "Parts search", + "url": "^https?://pcpph\\.in/", + "init": "$('#search_results')[0].dataset.pageLength=100;$('#search_results_length select').val(100).trigger('change');" +}, +{ + "name": "SpankBang", + "example": "https://jp.spankbang.com/trending_videos/", + "url": "^https?://([a-z]{2}\\.)?spankbang\\.com/(trending_videos|new_videos|category|pornstar|upcoming|most_popular|s)", + "pageElement": ".video-list.video-rotate.video-list-with-ads", + "replaceElement": ".pagination", + "css": ".pagetual_pageBar+div {margin-top: -5px !important;}" +}, +{ + "name": "法務部行政執行署拍賣公告查詢系統", + "url": "^https?://www\\.tpkonsale\\.moj\\.gov\\.tw/", + "nextLinkByUrl": [ + "&PAGINATION_PAGE_NO=(\\d+)", + "&PAGINATION_PAGE_NO={$1+1}" + ], + "pageElement": ".table_scroll" +}, +{ + "name": "贵州省图", + "url": "^https?://sxgzlib\\.chineseall\\.cn/", + "nextLink": ".item.twocol>span:nth-child(2)", + "css": "#bookContent{overflow: scroll;}" +}, +{ + "name": "夺宝岛列表-京东_拍拍", + "url": "^https?://1paipai\\.jd\\.com/", + "nextLink": ".btn-next", + "pinUrl": true, + "stopSign": [ + "", + ".btn-next[disabled]" + ], + "pageElement": "body > div:nth-of-type(1) > div.auction-list > div.list-selector > div.container > div:nth-of-type(2)" +}, +{ + "name": "高校古文献資源庫读者检索系统", + "url": "^https?://rbsc\\.calis\\.edu\\.cn:8086/", + "pageElement": "input~tr" +}, +{ + "name": "Ru.Board", + "url": "^https?://forum\\.ru-board\\.com/", + "nextLink": "table .small>b+a" +}, +{ + "name": "iconfont-阿里巴巴矢量图标库", + "url": "^https://www\\.iconfont\\.cn", + "pageElement": "ul.block-icon-list>li", + "wait": 500, + "nextLink": "a.next" +}, +{ + "name": "16Personalities", + "url": "^https://www\\.16personalities\\.com", + "enable": 0 +}, +{ + "name": "Soccercatch.com", + "url": "^https://www\\.soccercatch\\.com", + "nextLink": ".tabs-page[data-active=true] .pagination-next", + "init": "if(doc){let tabName=document.querySelector('[data-active=true]').dataset.title;doc.querySelector('[data-title='+tabName+']').click()}", + "pageElement": "[data-active=true]>section>*", + "wait": "if(doc==document)return true;let tabName=document.querySelector('[data-active=true]').dataset.title;doc.querySelector('[data-title='+tabName+']').click();return true;" +}, +{ + "name": "Upwork", + "url": "^https?://www\\.upwork\\.com/.*/search/", + "pageElement": ".up-card-section.up-card-hover", + "wait": 1000, + "iframeInit": "win.self=win.top" +}, +{ + "name": "All the Internet", + "url": "^https://www\\.alltheinternet\\.com", + "pageElement": ".gsc-result", + "nextLink": ".pagebuttons", + "wait": 500 +}, +{ + "name": "Google cse", + "url": "^(https://www\\.lukol\\.com|https://www\\.searchcraigslist\\.net)|&gsc\\.q=", + "pageElement": ".gsc-expansionArea>.gsc-result", + "nextLink": ".gsc-cursor-current-page+div", + "wait": 500 +}, +{ + "name": "微博", + "url": "^https://weibo\\.com", + "pageElement": ".WB_feed", + "nextLink": "a.next", + "exclude": ".container", + "wait": 500 +}, +{ + "name": "蝦皮購物台灣", + "url": "^https?://shopee\\.tw/", + "pinUrl": true, + "nextLink": "button.shopee-icon-button--right", + "pageElement": ".shopee-search-item-result__items", + "waitElement": [ + "", + ".shopee-search-item-result__item img:not([src]),.shopee-image-placeholder" + ] +}, +{ + "name": "露天市集", + "url": "^https?://www\\.ruten\\.com\\.tw/find/", + "nextLink": "button[aria-label='下一頁']", + "pageElement": ".search-result-container", + "wait": 1000 +}, +{ + "name": "Free Porn Videos & Sex Tube Movies at xHamster", + "url": "^https://xhopen\\.com", + "pageElement": ".thumb-list.thumb-list--sidebar", + "action": 2 +}, +{ + "name": "全站书库-优书网", + "url": "^https://www\\.yousuu\\.com", + "pageElement": "div.result", + "nextLink": "button.btn-next", + "lockScroll": true +}, +{ + "name": "infinitenoveltranslations", + "url": "^https://infinitenoveltranslations\\.net", + "type": 0, + "pageElement": "//div[@class='entry-content']", + "nextLink": "//a[contains(text(),'Next Chapter')]", + "autoClick": "//a[contains(text(),'Enjoy')]", + "pinUrl": true +}, +{ + "name": "搜狗wap", + "url": "^https?://wap\\.sogou\\.com/web/searchList\\.jsp", + "loadMore": "#ajax_next_page", + "nextLink": 0 +}, +{ + "name": "bt1207", + "url": "^https://bt1207ao\\.xyz/", + "nextLinkByJs": "let n=doc.querySelector('ul.pagination>li.active+li>a');if(!n)return null;let params=[]; let form=doc.querySelector('#search-form'); [].forEach.call(form.querySelectorAll('input'), input=>{ if(input.name=='p')params.push('p='+n.innerText);else params.push(input.name+'='+input.value); }); return form.action+'?'+params.join('&');", + "pageElement": "ul.list-unstyled" +}, +{ + "name": "REPACK скачать", + "url": "^https?://lrepacks\\.net/", + "css": ".animated .slideUp{opacity:1}" +}, +{ + "name": "豆瓣电影", + "url": "^https://movie\\.douban\\.com", + "wheel": true, + "include": ".explore-more>button", + "loadMore": ".explore-more>button" +}, +{ + "name": "SoftArchive", + "url": "^https?://sanet\\.st/search/", + "example": "https://sanet.st/search/?q=too", + "nextLink": ".pagination>.active+li>a", + "pageElement": "tr.filerow", + "pageAction": "eles.forEach(ele=>{if(ele.classList.contains('show_poster_preview')){ele.onmouseenter=e=>{document.querySelector('#pop_poster_preview_box').innerHTML=``;document.getElementById('pop_poster_preview_box').style.display='block'};ele.onmouseleave=e=>{document.getElementById('pop_poster_preview_box').style.display='none'}}})" +}, +{ + "name": "观察者网评论区", + "url": "^https?://www\\.guancha\\.cn/", + "example": "https://www.guancha.cn/economy/2023_10_27_713575_2.shtml", + "nextLink": "li>a.next", + "pageElement": ".comment-list > ul.list-body.list-body-all > li.comment-item.cmt-item", + "include": "#comments-container", + "waitElement": "li>a.next" +}, +{ + "name": "威锋", + "url": "^https?://www\\.feng\\.com/", + "nextLink": ".next:not(.disable)", + "pinUrl": true, + "loadMore": ".load-more-btn>button" +}, +{ + "name": "E-Katalog 5.0", + "url": "^https?://e-katalog\\.lkpp\\.go\\.id/pengumuman", + "example": "https://e-katalog.lkpp.go.id/pengumuman", + "insert": "#usulanList", + "insertPos": 2, + "wait": 500, + "pageBar": 0, + "pageElementByJs": "let url='',params=[],form=document.getElementById('form');let formData=new FormData(form);for (let [key, value] of formData) { params.push(key + '=' + encodeURIComponent(value)); } params = params.join('&');url=form.action + (form.action.indexOf('?') == -1 ? '?' : '&') + params;fetch(url.replace(/&offset=\\d+/,'')+'&offset='+(pageNum+1), { headers: {'X-Requested-With': 'XMLHttpRequest'}}).then(res=>res.json()).then(res=>{let eles=[];res.data.items.forEach(item=>{let ele=document.createElement('div');ele.innerHTML=`
    \"E-Katalog

    Etalase Produk : ${item.komoditas}

    Tanggal Mulai: ${item.started_date_str}

    Tanggal Akhir: ${item.finished_date_str||'-'}

    ${item.komoditas_kategori}
    `;ele.className='col-sm-6 col-md-3 col-lg-3 col-md-3-custom';eles.push(ele)});over(eles) })" +}, +{ + "name": "ArtStation - Human to wolf transformation study", + "enable": 0, + "url": "^https?://www\\.artstation\\.com/artwork/", + "example": "https://www.artstation.com/artwork/EvDNGN", + "nextLink": "li.next>a", + "pageElement": "main.justify-content-center .project-assets-list>.asset", + "waitElement": "li.next>a", + "action": 1 +}, +{ + "name": "AliExpress", + "url": "^https?://www\\.aliexpress\\.com/", + "example": "https://www.aliexpress.com/w/wholesale-Pants.html", + "nextLink": ".comet-pagination-next>button", + "pageElement": "#card-list>div", + "waitElement": "!.lazy-load", + "include": ".comet-pagination-next>button" +}, +{ + "name": "Orion Public Issue Tracker", + "url": "^https?://orionfeedback\\.org/t/", + "example": "https://orionfeedback.org/t/desktop", + "nextLink": ".Orion-DiscussionListPagination > a.Button.Button--icon.hasIcon:last-child", + "action": 3, + "pageElement": "ul.DiscussionList-discussions>li" +}, +{ + "name": "All Discussions - Orion Public Issue Tracker", + "url": "^https?://orionfeedback\\.org/(\\?|$)", + "example": "https://orionfeedback.org/?page=3", + "action": 3 +}, +{ + "name": "RuTracker.org", + "url": "^https?://rutracker\\.org/forum/", + "example": "https://rutracker.org/forum/viewtopic.php?t=239577", + "pageElement": "table.topic" +}, +{ + "name": "骑砍中亚", + "url": "^https?://h5\\.shaoniandream\\.com/pages/chapter/", + "example": "https://h5.shaoniandream.com/pages/chapter/index?bookid=1866", + "nextLink": "//uni-view[text()=\"下一章\"]" +}, +{ + "name": "挥剑诗篇", + "url": "^https?://hlib\\.cc/s/", + "example": "https://hlib.cc/s/7301114", + "nextLink": ".btn.active~a", + "pageElement": ".col-lg-9 .list-group-item", + "action": 0 +}, +{ + "name": "Sanfoundry", + "url": "^https?://www\\.sanfoundry\\.com/", + "example": "https://www.sanfoundry.com/engineering-mathematics-questions-answers-nth-derivative-some-elementary-functions-1/", + "nextLink": ".sf-nav-prev-bottom+div > a[rel=next]" +}, +{ + "name": "KossyDerrickEnt", + "url": "^https?://www\\.kossyderrickent\\.com/", + "example": "https://www.kossyderrickent.com/", + "nextLink": ".showpagePoint+.showpageNum>a", + "pageElement": ".date-posts>.post-outer", + "pageAction": "eles.forEach(ele=>{let thumb=ele.querySelector('.thumb>a');thumb.style.background=thumb.style.background.replace('s72-c','s1600')})", + "waitElement": ".showpagePoint", + "include": ".date-posts>.post-outer" +}, +{ + "name": "thehackernews", + "url": "^https://thehackernews\\.com/", + "pageElement": ".blog-posts", + "nextLink": "id('blog-pager-older-link')/a" +}, +{ + "name": "Switch520", + "url": "^https?://www\\.gamer520\\.com/", + "example": "https://www.gamer520.com/", + "nextLink": "a.next.page-numbers", + "pageElement": "main.site-main > div.row.posts-wrapper" +}, +{ + "name": "Konachan-CHS 汉化 | 动漫壁纸下载 | Konachan中文站", + "url": "^https?://gelbooru\\.wjcodes\\.com/", + "nextLink": "//ul[@class='am-pagination']/li/a[text()='下一页']" +}, +{ + "name": "投稿列表 pixivFANBOX", + "url": "^https?://[^\\.]+\\.fanbox\\.cc/", + "example": "https://ffxivinitiala.fanbox.cc/posts", + "waitElement": "!.gaaMeK,img[class^=LazyImage]:not([src]),[class^=LazyImage__LoadingIcon]" +}, +{ + "name": "游戏怀旧灌水首页禁用", + "url": "^https?://www\\.yxhjgs\\.com/$", + "enable": 0 +}, +{ + "name": "百度跳转页禁用", + "url": "^https?://jump\\d?\\.bdimg\\.com/safecheck", + "enable": 0 +}, +{ + "name": "pan.baidu", + "url": "^https?://.*pan\\.baidu\\.com", + "enable": 0 +}, +{ + "name": "baike.baidu", + "url": "^https?://baike\\.baidu\\.com", + "enable": 0 +}, +{ + "name": "wenku.baidu", + "url": "^https?://wenku\\.baidu\\.com/view", + "enable": 0 +}, +{ + "name": "baofeng", + "url": "^https?://((m|www)\\.)?baofeng\\.com/play", + "enable": 0 +}, +{ + "name": "bilibili", + "url": "^https?://((m|www|live)\\.)?bilibili\\.com/(bangumi/play|video|anime|\\d)", + "enable": 0 +}, +{ + "name": "instagram", + "url": "^https?://((m|www)\\.)?instagram\\.com", + "enable": 0 +}, +{ + "name": "iqiyi", + "url": "^https?://((m|www)\\.)?iqiyi\\.com/(a_|v_|w_|$)", + "enable": 0 +}, +{ + "name": "letv", + "url": "^https?://((m|www)\\.)?le\\.com/ptv/vplay", + "enable": 0 +}, +{ + "name": "mega", + "url": "^https?://(.*\\.)?mega\\.", + "enable": 0 +}, +{ + "name": "mgtv", + "url": "^https?://((m|www)\\.)?mgtv\\.com/b", + "enable": 0 +}, +{ + "name": "tudou", + "url": "^https?://((m|i|v|www|play)\\.)?tudou\\.com/(albumplay|listplay|programs/view)", + "enable": 0 +}, +{ + "name": "youku", + "url": "^https?://((m|i|v|www|play)\\.)?youku\\.com/(v_|alipay_video)", + "enable": 0 +}, +{ + "name": "youtube", + "url": "^https?://(m\\.|www\\.)?youtube\\.com", + "enable": 0 +}, +{ + "name": "sohu tv", + "url": "^https?://(m\\.)?(film|tv)\\.sohu\\.com/(album|v)", + "enable": 0 +}, +{ + "name": "acfun", + "url": "^https?://((m|www|live)\\.)?acfun\\.cn/(v|live)", + "enable": 0 +}, +{ + "name": "pptv", + "url": "^https?://(m|v|vip)\\.pptv\\.com/show", + "enable": 0 +}, +{ + "name": "qqtv", + "url": "^https?://(m\\.)?v\\.qq\\.com/(tv|x/cover|x/page)", + "enable": 0 +}, +{ + "name": "wasu", + "url": "^https?://(m|www)\\.wasu\\.cn/Play/show", + "enable": 0 +}, +{ + "name": "map.google", + "url": "^https?://(maps\\.google\\.|www\\.google\\..*/maps)", + "enable": 0 +}, +{ + "name": "order.jd", + "url": "^https?://order\\.jd\\.com", + "enable": 0 +}, +{ + "name": "twitter", + "url": "^https?://(m\\.|www\\.)?twitter\\.com", + "enable": 0 +}, +{ + "name": "google newtab", + "url": "^https?://www\\.google\\..*/_/chrome/newtab", + "enable": 0 +}, +{ + "name": "toodledo", + "url": "^https?://www\\.toodledo\\.com/tasks", + "enable": 0 +}, +{ + "name": "imgur", + "url": "^https?://imgur\\.com/", + "enable": 0 +}, +{ + "name": "pexels", + "url": "^https?://www\\.pexels\\.com/", + "enable": 0 +}, +{ + "name": "stripe", + "url": "^https?://js\\.stripe\\.com/", + "enable": 0 +}, +{ + "name": "cardinalcommerce", + "url": "^https?://geoissuer\\.cardinalcommerce\\.com/", + "enable": 0 +}, +{ + "name": "Slickdeals", + "url": "^https?://slickdeals\\.net/f/", + "include": ".slickdealsPagination", + "nextLink": "span+a.slickdealsPagination__pageNumber", + "action": 1, + "waitElement": ".slickdealsPagination>a" +}, +{ + "name": "IGGGAMES » Free Download PC Games - Direct Links - Torrent", + "url": "^https?://igg-games\\.com/", + "author": "hhhllll", + "pageElement": "main.tm-main:nth-child(4) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2)", + "nextLink": ".uk-pagination>.uk-active ~ li>a" +}, +{ + "name": "KDays 论坛", + "url": "^https?://bbs2\\.kdays\\.net/(thread|search)/", + "pageElement": "body > div.wrapper > div.container", + "nextLink": "li.current + li >a", + "author": "hhhllll" +}, +{ + "name": "MAL - Genre Search", + "author": "lemonadeforlife", + "example": "https://myanimelist.net/anime/genre/62/Isekai", + "url": "^https://myanimelist\\.net/(anime|manga)/\\genre/\\d+/\\w+", + "nextlink": ".pagination.ac>a", + "pageElement": ".seasonal-anime-list", + "autoLoadNum": 4, + "pageBar": 0, + "replaceElement": ".pagination" +}, +{ + "name": "MAL - Advance Search", + "author": "lemonadeforlife", + "url": "^https?://myanimelist\\.net/(anime|manga)\\.php\\?cat=", + "example": "https://myanimelist.net/anime.php?cat=anime&q=&type=0&score=0&status=2&p=0&r=0&sm=0&sd=0&sy=0&em=0&ed=0&ey=0&c%5B%5D=c&genre%5B%5D=10&genre_ex%5B%5D=12&genre%5B%5D=62&genre_ex%5B%5D=25", + "nextLinkByUrl": [ + "(&show=(\\d+))?$", + "&show={$2+50}" + ], + "pageElement": ".js-categories-seasonal>table", + "replaceElement": ".spaceit>span", + "action": 2, + "pageNum": "&show={50*($p-1)}", + "stopSign": "let pageList=doc.querySelector('.spaceit>span').textContent;let status=pageList.match(/(\\[\\d+\\])$/);if(status!=null)return true;" +}, +{ + "name": "MAL - Top (Anime/Manga)", + "author": "lemonadeforlife", + "url": "^https?://myanimelist\\.net/top(anime|manga)\\.php", + "example": "https://myanimelist.net/topanime.php", + "nextlink": "icon-top-ranking-page-bottom> .link-blue-box.next", + "replaceElement": ".link-blue-box", + "pageElement": ".top-ranking-table", + "action": 2 +}, +{ + "name": "MAL - recommendations", + "author": "lemonadeforlife", + "url": "^https?://myanimelist\\.net/recommendations\\.php", + "example": "https://myanimelist.net/recommendations.php?s=recentrecs&t=anime", + "nextLinkByUrl": ["(&show=(\\d+))?$", "&show={$2+100}"], + "pageElement": "#content > div:nth-child(3)", + "replaceElement": ".spaceit>span", + "pageNum": "&show={50*($p-1)}", + "stopSign": "let pageList=doc.querySelector('.spaceit>span').textContent;let status=pageList.match(/(\\[\\d+\\])$/);if(status!=null)return true;" +}, +{ + "name": "MAL News", + "author": "lemonadeforlife", + "url": "^https?://myanimelist\\.net/news", + "example": "https://myanimelist.net/news", + "nextlink": ".pagination.ac>a", + "replaceElement": ".pagination", + "pageElement": "div.news-list", + "action": 1 +}, +{ + "name": "Торрент-трекер :: NNM-Club", + "url": "^https?://nnmclub\\.to/", + "example": "https://nnmclub.to/", + "pageElement": ".leftnav+td>*", + "pageAction": "eles.forEach(ele=>{let portalImg=ele.querySelector('var.portalImg');if(!portalImg)return;portalImg.innerHTML=``})", + "action": 0 +}, +{ + "name": "Linux Mint Forums", + "url": "^https://forums\\.linuxmint\\.com", + "example": "https://forums.linuxmint.com/https://forums.linuxmint.com/viewforum.php?f=225&sid=68c4b0d85f3ce4c5f9d925204808e035", + "nextlink": "div[class$='bar-top'] > .pagination > ul > li[class='arrow next'] > a", + "replaceElement": "div[class$='bar-bottom'] > .pagination", + "pageElement": "div[class='forumbg'] > .inner> ul[class='topiclist topics']", + "action": 1 +}, +{ + "name": "楽天ウェブ検索", + "url": "^https?://websearch\\.rakuten\\.co\\.jp/", + "example": "https://websearch.rakuten.co.jp/Web?qt=pagetual&st=20&col=OW", + "author": "Hoothin", + "nextLinkByUrl": [ + "st=(\\d+)", + "st={$1+10}" + ], + "action": 0, + "pageElement":".web-result>li", + "pagePre": "let evalData=response.match(/\\*{let ele=document.createElement('li');ele.innerHTML=`
  • ${item.title}


  • `;eles.push(ele);});return eles;" +}, +{ + "name": "EpicentrK - Герметики та мастики", + "author": "epicentrkScraper", + "url": "^https?://epicentrk\\.ua/ua/shop/germetiki-i-silikony/.*$", + "example": "https://epicentrk.ua/ua/shop/germetiki-i-silikony/", + "nextlink": "div.pagination a.pagination__btn--next", + "replaceElement": "div.product-card", + "pageElement": "div.products-catalog__list", + "action": 2 +}, +{ + "name": "xHamster", + "url": "^https://([\\w]+\\.)?(xhamster|xhaccess|xhamster19)\\.(com|desi)/", + "author": "vieller", + "pageElement": "div:has(+ *[data-role*='pagination']), div:has(+ *[class*='pager-section']), div:has(+ *[class*='pagination-'])", + "nextLink": "a[data-page='next'], a[rel='next']", + "action": 1, + "init": "let candidates=Array.from(document.querySelectorAll('.thumb-list__item'));let bestCandidate=candidates.find(c=>c.querySelector('[data-role=\"video-duration\"]'));if(!bestCandidate&&candidates.length) bestCandidate=candidates[0];if(!window._pagetualMasterTemplateVideo){if(bestCandidate){let clone=bestCandidate.cloneNode(true);let badgeElements=clone.querySelectorAll('[data-role=\"video-watched\"], [data-brand=\"full video\"]');badgeElements.forEach(badge=>badge.remove());let xhIcons=clone.querySelectorAll('.xh-icon');xhIcons.forEach(icon=>icon.remove());window._pagetualMasterTemplateVideo=clone.innerHTML;let durationSpan=clone.querySelector('[data-role=\"video-duration\"] [class*=\"tiny-\"]');if(durationSpan){let tinyClass=Array.from(durationSpan.classList).find(c=>c.startsWith('tiny-'));if(tinyClass){let suffix=tinyClass.split('-').pop();if(suffix) window._pagetualSuffix=suffix;}}}} if(!window._pagetualMasterGallery){let galleryCandidates=Array.from(document.querySelectorAll('[class*=\"container-\"] > [class*=\"wrapper\"]'));if(!galleryCandidates.length) galleryCandidates=Array.from(document.querySelectorAll('div[class*=\"wrapper\"]')).filter(el=>el.querySelector('[class*=\"author-\"]'));let bestGallery=galleryCandidates.find(g=>g.querySelector('[class*=\"author-\"]'));if(!bestGallery&&galleryCandidates.length) bestGallery=galleryCandidates[0];if(bestGallery){let clone=bestGallery.cloneNode(true);window._pagetualMasterGallery=clone.innerHTML;let captionSpan=clone.querySelector('[class*=\"caption-\"]');if(captionSpan){let captionClass=Array.from(captionSpan.classList).find(c=>c.startsWith('caption-'));if(captionClass) window._pagetualCaptionSuffix=captionClass.split('-').pop();} let bodySpan=clone.querySelector('[class*=\"body-bold-\"]');if(bodySpan){let bodyClass=Array.from(bodySpan.classList).find(c=>c.startsWith('body-bold-'));if(bodyClass) window._pagetualBodySuffix=bodyClass.split('-').pop();}}} if(!window._pagetualSuffix) window._pagetualSuffix='8643e';if(!window._pagetualCaptionSuffix) window._pagetualCaptionSuffix='8643e';if(!window._pagetualBodySuffix) window._pagetualBodySuffix='8643e';if(!window._pagetualFriendsOnlyTemplate){let rootClass='root-'+window._pagetualSuffix;let iconClass='icon-'+window._pagetualSuffix;window._pagetualFriendsOnlyTemplate=`
    Friends only
    `;}", + "pageInit": "let container = eles[0]; if (!container) return; /* Extract data from window.initials and handle different page types */ let script = doc.querySelector('script#initials-script'); if (!script) { script = Array.from(doc.querySelectorAll('script')).find(s => s.textContent.includes('window.initials='));} if (!script) return; let scriptText = script.textContent; let match = scriptText.match(/window\\.initials\\s*=\\s*(\\{[\\s\\S]*?\\});/); if (!match) return; let jsonStr = match[1]; let initials; try { initials = eval('(' + jsonStr + ')');} catch (e) { return;} /* Regular photo gallery (no hydration, remove skeleton overlays only) */ let skeletonSelector = 'a[class*=\"cover\"] > div[class*=\"container-\"][class*=\"primaryColor-\"]'; let loadingSkeleton = container.querySelector(skeletonSelector); /* if (initials.photosPage !== undefined || initials.galleryPage !== undefined) { */ if (loadingSkeleton) { let galleryItemSelector = 'div[class*=\"wrapper\"], div[style]:not([class])'; let galleryItems = container.querySelectorAll(galleryItemSelector); for (let ele of galleryItems) { /* let skeleton = ele.querySelector('a[class*=\"cover\"] > div[class*=\"container-\"][class*=\"primaryColor-\"]'); */ let skeleton = ele.querySelector(skeletonSelector); if (skeleton && skeleton.querySelector('span[class*=\"dot\"]')) { skeleton.remove();}} return;} function round(value, precision) { let multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier;} function formatViews(v) { if (v >= 1e6) return round(v / 1e6, 1) + 'M'; if (v >= 1e3) return round(v / 1e3, 1) + 'K'; return v.toString();} /* Heuristics: locate photo gallery metadata array in initials */ function findPhotoItems(initials, expectedCount, tolerance = 2) { function search(obj, targetLen, depth = 0) { if (depth > 12) return null; if (!obj || typeof obj !== 'object') return null; if (Array.isArray(obj) && obj.length === targetLen && obj.length > 0) { let first = obj[0]; if (first && typeof first === 'object') { let hasPhotoProps = ('pageURL' in first || 'imageURL' in first) && ('titleLocalized' in first || 'title' in first) && ('imgCount' in first || 'views' in first); if (hasPhotoProps) return obj;}} for (let k in obj) { if (obj.hasOwnProperty(k)) { let result = search(obj[k], targetLen, depth + 1); if (result) return result;}} return null;} let exactMatch = search(initials, expectedCount); if (exactMatch) return exactMatch; for (let delta = -tolerance; delta <= tolerance; delta++) { if (delta === 0) continue; let len = expectedCount + delta; if (len <= 0) continue; let match = search(initials, len); if (match) return match;} return null;} /* Generic photo gallery hydration (heuristics-based) */ let photoItemSelector = 'div[class*=\"container-\"] > div[class*=\"wrapper-\"], div[class*=\"container-\"] > div[class*=\"default-\"]'; let photoItems = container.querySelectorAll(photoItemSelector); if (photoItems.length && window._pagetualMasterGallery) { let items = findPhotoItems(initials, photoItems.length, 4); if (items?.length) { let inner = window._pagetualMasterGallery; for (let i = 0; i < photoItems.length && i < items.length; i++) { let ele = photoItems[i]; let data = items[i]; let div = document.createElement('div'); div.innerHTML = inner; let coverLink = div.querySelector('a[class*=\"coverLink-\"]'); if (coverLink && data.pageURL) { coverLink.href = data.pageURL;} let img = div.querySelector('img[class*=\"cover-\"]'); if (img) { img.src = data.imageURL; img.srcset = data.thumbURL; img.alt = data.titleLocalized || '';} let titleLink = div.querySelector('[class*=\"title-\"]'); if (titleLink && data.pageURL) { titleLink.href = data.pageURL; titleLink.textContent = data.titleLocalized || '';} let authorContainer = div.querySelector('[class*=\"author-\"]'); if (authorContainer && data.author) { authorContainer.href = data.author.link; let nameSpan = authorContainer.querySelector('[class*=\"name-\"]'); if (nameSpan) { nameSpan.textContent = data.author.name;}} let avatarImg = div.querySelector('[class*=\"avatar-\"] img'); if (avatarImg && data.author && data.author.img) { avatarImg.src = data.author.img; avatarImg.alt = data.author.name;} let photoSpan = div.querySelector('[class*=\"caption\"][class*=\"label\"]'); if (photoSpan) photoSpan.textContent = data.imgCount; let viewsSpan = div.querySelector('[class*=\"viewsText-\"]'); if (viewsSpan) viewsSpan.textContent = formatViews(data.views) + ' views'; while (ele.firstChild) ele.removeChild(ele.firstChild); while (div.firstChild) ele.appendChild(div.firstChild);} return;}} /* Heuristics: locate video metadata array in initials */ function findVideoProps(obj, depth) { if (depth > 10) return null; if (!obj || typeof obj !== 'object') return null; if (Array.isArray(obj) && obj.length > 0) { let first = obj[0]; if (first && typeof first === 'object' && 'id' in first && 'duration' in first && 'title' in first && 'pageURL' in first && 'views' in first) { return obj;}} for (let k in obj) if (obj.hasOwnProperty(k)) { let r = findVideoProps(obj[k], depth + 1); if (r) return r;} return null;} function formatDuration(s) { let h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sec = s % 60; if (h) return h + ':' + (m < 10 ? '0' + m : m) + ':' + (sec < 10 ? '0' + sec : sec); return m + ':' + (sec < 10 ? '0' + sec : sec);} /* Generic video page hydration (heuristics-based) */ let videoSelector = 'div[class*=\"thumb-list__item\"]:not([class*=\"loading\"])'; let videoItems = container.querySelectorAll(videoSelector); if (videoItems.length && window._pagetualMasterTemplateVideo) { let props = findVideoProps(initials, 0); if (props?.length) { let inner = window._pagetualMasterTemplateVideo; for (let ele of videoItems) { let id = ele.getAttribute('data-video-id'); if (!id) continue; let data = props.find(p => p.id == id); if (!data) continue; let div = document.createElement('div'); div.innerHTML = inner; let noscripts = div.querySelectorAll('noscript'); for (let ns of noscripts) ns.remove(); let link = div.querySelector('a[data-role=\"thumb-link\"]'); if (link && data.pageURL) { link.href = data.pageURL; link.setAttribute('data-previewvideo', data.trailerURL || ''); link.setAttribute('aria-label', data.title || '');} let img = div.querySelector('img.thumb-image-container__image'); if (img) { if (data.icon === 'friends') { let thumbContainer = div.querySelector('[class*=\"thumb-image-container\"]') || img.parentElement; img.remove(); if (thumbContainer && window._pagetualFriendsOnlyTemplate) { thumbContainer.insertAdjacentHTML('beforeend', window._pagetualFriendsOnlyTemplate);}} else { img.src = data.imageURL; img.srcset = data.thumbURL; img.alt = data.title || '';}} let sprite = div.querySelector('.thumb-image-container__sprite'); if (sprite) { sprite.setAttribute('data-sprite', data.spriteURL || ''); sprite.id = id;} let durationSpan = div.querySelector('[data-role=\"video-duration\"] [class*=\"tiny-\"]'); if (durationSpan) durationSpan.textContent = formatDuration(data.duration); let titleLink = div.querySelector('.video-thumb-info__name'); if (titleLink && data.pageURL) { titleLink.href = data.pageURL; titleLink.title = data.title || ''; titleLink.textContent = data.title || '';} let uploaderData = div.querySelector('.video-uploader-data'); if (uploaderData) { if (data.landing && data.landing.name) { let logo = uploaderData.querySelector('.video-uploader-logo'); if (logo && data.landing.link) { logo.href = data.landing.link; logo.textContent = data.landing.name.charAt(0).toUpperCase();} let name = uploaderData.querySelector('.video-uploader__name'); if (name && data.landing.link) { name.href = data.landing.link; name.textContent = data.landing.name;}} else { let logo = uploaderData.querySelector('.video-uploader-logo'); if (logo) logo.remove(); let name = uploaderData.querySelector('.video-uploader__name'); if (name) name.remove(); let sep = uploaderData.querySelector('.video-thumb-uploader__separator'); if (sep) sep.remove();}} let viewsSpan = div.querySelector('.video-thumb-views'); if (viewsSpan) viewsSpan.textContent = formatViews(data.views) + ' views'; let onVideo = div.querySelector('.thumb-image-container__on-video'); if (onVideo) onVideo.style.zIndex = '20'; if (data.isWatched) { if (onVideo && !onVideo.querySelector('.thumb-image-container__watched')) { let w = document.createElement('div'); w.className = 'thumb-image-container__watched'; w.setAttribute('data-role', 'video-watched'); let tinyBold = 'tiny-bold-' + window._pagetualSuffix; let invert = 'invert-' + window._pagetualSuffix; w.innerHTML = `
    Watched
    `; if (onVideo.firstChild) onVideo.insertBefore(w, onVideo.firstChild); else onVideo.appendChild(w);}} if (data.hasProducerBadge) { let a = div.querySelector('a[data-role=\"thumb-link\"]'); if (a && !a.querySelector('.thumb-image-container__badge')) { let b = document.createElement('div'); b.className = 'thumb-image-container__badge'; b.setAttribute('data-role-producer-badge', ''); b.setAttribute('data-brand', 'full video'); b.innerHTML = ''; a.appendChild(b);}} while (ele.firstChild) ele.removeChild(ele.firstChild); while (div.firstChild) ele.appendChild(div.firstChild);}}}", + "pageAction": "if(!window._pagetualVideoPreviewAdded){window._pagetualVideoPreviewAdded=true;document.body.addEventListener('mouseenter',(e)=>{let anchor=e.target.closest('a[data-role=\"thumb-link\"]');if(!anchor) return;let trailerUrl=anchor.getAttribute('data-previewvideo');if(!trailerUrl) return;if(anchor._videoElem) return;if(getComputedStyle(anchor).position!=='relative') anchor.style.position='relative';let videoElem=Object.assign(document.createElement('video'),{src:trailerUrl,loop:true,muted:true,autoplay:true,playsInline:true});Object.assign(videoElem.style,{position:'absolute',top:0,left:0,width:'100%',height:'100%',objectFit:'cover',zIndex:10,pointerEvents:'none',backgroundColor:'black'});anchor.appendChild(videoElem);videoElem.play().catch(e=>console.warn('play error:',e));anchor._videoElem=videoElem;},true);document.body.addEventListener('mouseleave',(e)=>{let anchor=e.target.closest('a[data-role=\"thumb-link\"]');if(!anchor) return;let videoElem=anchor._videoElem;if(!videoElem) return;videoElem.pause();videoElem.remove();anchor._videoElem=null;},true);}" +} ] diff --git a/Pagetual/version b/Pagetual/version new file mode 100644 index 00000000000..e2a9fee008a --- /dev/null +++ b/Pagetual/version @@ -0,0 +1 @@ +109 diff --git a/Picviewer CE+/Picviewer CE+.user.js b/Picviewer CE+/Picviewer CE+.user.js index fd3876091b4..440b3e10f70 100644 --- a/Picviewer CE+/Picviewer CE+.user.js +++ b/Picviewer CE+/Picviewer CE+.user.js @@ -2,18 +2,20 @@ // @name Picviewer CE+ // @name:zh-CN Picviewer CE+ // @name:zh-TW Picviewer CE+ +// @name:ja Picviewer CE+ // @name:pt-BR Picviewer CE+ // @name:ru Picviewer CE+ // @author NLF && ywzhaiqi && hoothin // @description Powerful picture viewing tool online, which can popup/scale/rotate/batch save pictures automatically // @description:zh-CN 在线看图工具,支持图片翻转、旋转、缩放、弹出大图、批量保存 // @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存 +// @description:ja 画像を強力に閲覧できるツール。ポップアップ表示、拡大・縮小、回転、一括保存などの機能を自動で実行できます // @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente // @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения -// @version 2023.7.5.1 +// @version 2026.2.6.1 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg== // @namespace https://github.com/hoothin/UserScripts -// @homepage https://www.hoothin.com +// @homepage https://pv.hoothin.com/ // @supportURL https://github.com/hoothin/UserScripts/issues // @connect www.google.com // @connect www.google.com.hk @@ -21,9 +23,11 @@ // @connect ipv4.google.com // @connect image.baidu.com // @connect www.tineye.com +// @connect hoothin.com // @connect * // @grant GM_getValue // @grant GM_setValue +// @grant GM_deleteValue // @grant GM_addStyle // @grant GM_openInTab // @grant GM_setClipboard @@ -33,6 +37,7 @@ // @grant GM_download // @grant GM.getValue // @grant GM.setValue +// @grant GM.deleteValue // @grant GM.addStyle // @grant GM.openInTab // @grant GM.setClipboard @@ -40,11 +45,9 @@ // @grant GM.registerMenuCommand // @grant GM.notification // @grant unsafeWindow -// @require https://greasyfork.org/scripts/6158-gm-config-cn/code/GM_config%20CN.js?version=23710 -// @require https://greasyfork.org/scripts/438080-pvcep-rules/code/pvcep_rules.js?version=1211491 -// @require https://greasyfork.org/scripts/440698-pvcep-lang/code/pvcep_lang.js?version=1185366 -// @downloadURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js -// @updateURL https://greasyfork.org/scripts/24204-picviewer-ce/code/Picviewer%20CE+.user.js +// @require https://update.greasyfork.org/scripts/6158/23710/GM_config%20CN.js +// @require https://update.greasyfork.org/scripts/438080/1738227/pvcep_rules.js +// @require https://update.greasyfork.org/scripts/440698/1740314/pvcep_lang.js // @match *://*/* // @exclude http://www.toodledo.com/tasks/* // @exclude http*://maps.google.com*/* @@ -52,11 +55,22 @@ // @exclude *://mega.*/* // @exclude *://*.mega.*/* // @exclude *://onedrive.live.com/* +// @run-at document-end // @created 2011-6-15 -// @contributionURL https://www.buymeacoffee.com/hoothin +// @contributionURL https://ko-fi.com/hoothin // @contributionAmount 1 // ==/UserScript== +if (window.top != window.self) { + try { + if ((window.self.innerWidth && window.self.innerWidth < 250) || (window.self.innerHeight && window.self.innerHeight < 250)) { + return; + } + } catch(e) { + return; + } +} + (function (global, factory) { if (typeof define === "function" && define.amd) { define([], factory); @@ -148,6 +162,9 @@ var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent); + var URL = _global.URL || _global.webkitURL; + var revokeObjectURL = URL.revokeObjectURL; + var createObjectURL = URL.createObjectURL; var saveAs = _global.saveAs || ( // probably in some web worker typeof window !== 'object' || window !== _global ? function saveAs() {} /* noop */ @@ -172,9 +189,9 @@ } } else { // Support blobs - a.href = URL.createObjectURL(blob); + a.href = createObjectURL(blob); setTimeout(function () { - URL.revokeObjectURL(a.href); + revokeObjectURL(a.href); }, 4E4); // 40s setTimeout(function () { @@ -229,13 +246,12 @@ reader.readAsDataURL(blob); } else { - var URL = _global.URL || _global.webkitURL; - var url = URL.createObjectURL(blob); + var url = createObjectURL(blob); if (popup) popup.location = url;else location.href = url; popup = null; // reverse-tabnabbing #460 setTimeout(function () { - URL.revokeObjectURL(url); + revokeObjectURL(url); }, 4E4); // 40s } }); @@ -11617,12 +11633,299 @@ module.exports = typeof setImmediate === 'function' ? setImmediate : },{}]},{},[10])(10) }); +//Bricks.js MIT. © 2017 Michael Cavalea +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Bricks = factory()); +}(this, (function () { 'use strict'; + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +var knot = function knot() { + var extended = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var events = Object.create(null); + + function on(name, handler) { + events[name] = events[name] || []; + events[name].push(handler); + return this; + } + + function once(name, handler) { + handler._once = true; + on(name, handler); + return this; + } + + function off(name) { + var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + handler ? events[name].splice(events[name].indexOf(handler), 1) : delete events[name]; + + return this; + } + + function emit(name) { + var _this = this; + + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // cache the events, to avoid consequences of mutation + var cache = events[name] && events[name].slice(); + + // only fire handlers if they exist + cache && cache.forEach(function (handler) { + // remove handlers added with 'once' + handler._once && off(name, handler); + + // set 'this' context, pass args to handlers + handler.apply(_this, args); + }); + + return this; + } + + return _extends({}, extended, { + + on: on, + once: once, + off: off, + emit: emit + }); +}; + +var bricks = function bricks() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + // privates + + var persist = void 0; // packing new elements, or all elements? + var ticking = void 0; // for debounced resize + + var sizeIndex = void 0; + var sizeDetail = void 0; + + var columnTarget = void 0; + var columnHeights = void 0; + + var nodeTop = void 0; + var nodeLeft = void 0; + var nodeWidth = void 0; + var nodeHeight = void 0; + + var nodes = void 0; + var nodesWidths = void 0; + var nodesHeights = void 0; + + // resolve options + + var packed = options.packed.indexOf('data-') === 0 ? options.packed : 'data-' + options.packed; + var sizes = options.sizes.slice().reverse(); + var position = options.position !== false; + + var container = options.container.nodeType ? options.container : document.querySelector(options.container); + + var selectors = { + all: function all() { + return toArray(container.children); + }, + new: function _new() { + return toArray(container.children).filter(function (node) { + return !node.hasAttribute('' + packed); + }); + } + }; + + // series + + var setup = [setSizeIndex, setSizeDetail, setColumns]; + + var run = [setNodes, setNodesDimensions, setNodesStyles, setContainerStyles]; + + // instance + + var instance = knot({ + pack: pack, + update: update, + resize: resize + }); + + return instance; + + // general helpers + + function runSeries(functions) { + functions.forEach(function (func) { + return func(); + }); + } + + // array helpers + + function toArray(input) { + var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document; + + return Array.prototype.slice.call(input); + } + + function fillArray(length) { + return Array.apply(null, Array(length)).map(function () { + return 0; + }); + } + + // size helpers + + function getSizeIndex() { + // find index of widest matching media query + return sizes.map(function (size) { + return size.mq && window.matchMedia('(min-width: ' + size.mq + ')').matches; + }).indexOf(true); + } + + function setSizeIndex() { + sizeIndex = getSizeIndex(); + } + + function setSizeDetail() { + // if no media queries matched, use the base case + sizeDetail = sizeIndex === -1 ? sizes[sizes.length - 1] : sizes[sizeIndex]; + } + + // column helpers + + function setColumns() { + columnHeights = fillArray(sizeDetail.columns); + } + + // node helpers + + function setNodes() { + nodes = selectors[persist ? 'new' : 'all'](); + } + + function setNodesDimensions() { + // exit if empty container + if (nodes.length === 0) { + return; + } + + nodesWidths = nodes.map(function (element) { + return element.clientWidth; + }); + nodesHeights = nodes.map(function (element) { + return element.clientHeight; + }); + } + + function setNodesStyles() { + nodes.forEach(function (element, index) { + columnTarget = columnHeights.indexOf(Math.min.apply(Math, columnHeights)); + + element.style.position = 'absolute'; + + nodeTop = columnHeights[columnTarget] + 'px'; + nodeLeft = columnTarget * nodesWidths[index] + columnTarget * sizeDetail.gutter + 'px'; + + // support positioned elements (default) or transformed elements + if (position) { + element.style.top = nodeTop; + element.style.left = nodeLeft; + } else { + element.style.transform = 'translate3d(' + nodeLeft + ', ' + nodeTop + ', 0)'; + } + + element.setAttribute(packed, ''); + + // ignore nodes with no width and/or height + nodeWidth = nodesWidths[index]; + nodeHeight = nodesHeights[index]; + + if (nodeWidth && nodeHeight) { + columnHeights[columnTarget] += nodeHeight + sizeDetail.gutter; + } + }); + } + + // container helpers + + function setContainerStyles() { + container.style.position = 'relative'; + container.style.width = sizeDetail.columns * nodeWidth + (sizeDetail.columns - 1) * sizeDetail.gutter + 'px'; + container.style.height = Math.max.apply(Math, columnHeights) - sizeDetail.gutter + 'px'; + } + + // resize helpers + + function resizeFrame() { + if (!ticking) { + window.requestAnimationFrame(resizeHandler); + ticking = true; + } + } + + function resizeHandler() { + if (sizeIndex !== getSizeIndex()) { + pack(); + instance.emit('resize', sizeDetail); + } + + ticking = false; + } + + // API + + function pack() { + persist = false; + runSeries(setup.concat(run)); + + return instance.emit('pack'); + } + + function update() { + persist = true; + runSeries(run); + + return instance.emit('update'); + } + + function resize() { + var flag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + + var action = flag ? 'addEventListener' : 'removeEventListener'; + + window[action]('resize', resizeFrame); + + return instance; + } +}; + +return bricks; + +}))); + var floatBar; ;(function(topObject,window,document,unsafeWindow){ 'use strict'; //var siteInfo = [{}]; - var debug; + var debug = console.log.bind(console); var lang; function initLang(){ let customLang=storage.getItem("customLang")||'auto'; @@ -11650,14 +11953,15 @@ Bing | https://www.bing.com/images/search?view=detailv2&iss=sbi&form=SBIVSP&sbis TinEye | https://www.tineye.com/search?url=#t# Sogou | https://pic.sogou.com/ris?query=#t# 360 | http://st.so.com/stu?imgurl=#t# -WhatAnime | https://trace.moe/?url=#t# Ascii2D | https://ascii2d.net/search/url/#t# Trace Moe | https://trace.moe/?url=#t# KarmaDecay | http://karmadecay.com/#t# -ZXing QRCode | https://zxing.org/w/decode?full=true&u=#t# +QRCode | https://hoothin.com/qrcode/##t# +QRdecode1 | https://zxing.org/w/decode?full=true&u=#t# +QRdecode2 | https://hoothin.com/qrdecode/##t# ImgOps | https://imgops.com/#b#`; - var _GM_openInTab,_GM_setClipboard,_GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification; + var _GM_openInTab,_GM_setClipboard,_GM_xmlhttpRequest,_GM_registerMenuCommand,_GM_notification,GM_fetch,_GM_addStyle; if(typeof GM_openInTab!='undefined'){ _GM_openInTab=GM_openInTab; }else if(typeof GM!='undefined' && typeof GM.openInTab!='undefined'){ @@ -11672,13 +11976,6 @@ ImgOps | https://imgops.com/#b#`; }else{ _GM_setClipboard=(s)=>{}; } - if(typeof GM_xmlhttpRequest!='undefined'){ - _GM_xmlhttpRequest=GM_xmlhttpRequest; - }else if(typeof GM!='undefined' && typeof GM.xmlHttpRequest!='undefined'){ - _GM_xmlhttpRequest=GM.xmlHttpRequest; - }else{ - _GM_xmlhttpRequest=(f)=>{fetch(f.url).then(response=>response.text()).then(data=>{let res={response:data};f.onload(res)}).catch(f.onerror())}; - } if(typeof GM_registerMenuCommand!='undefined'){ _GM_registerMenuCommand=GM_registerMenuCommand; }else if(typeof GM!='undefined' && typeof GM.registerMenuCommand!='undefined'){ @@ -11693,6 +11990,279 @@ ImgOps | https://imgops.com/#b#`; }else{ _GM_notification=(s)=>{alert(s)}; } + if (typeof GM_xmlhttpRequest != 'undefined') { + _GM_xmlhttpRequest = GM_xmlhttpRequest; + GM_fetch = true; + } else if (typeof GM != 'undefined' && typeof GM.xmlHttpRequest != 'undefined') { + _GM_xmlhttpRequest = GM.xmlHttpRequest; + GM_fetch = true; + } else { + _GM_xmlhttpRequest = (f) => {fetch(f.url, (f.method && f.method !== 'GET' ? {method: f.method || 'GET', body: f.data || '', headers: f.headers} : {method: 'GET', headers: f.headers})).then(response => response.text()).then(data => {f.onload({response: data})}).catch(e => f.onerror())}; + } + if (typeof GM_addStyle != 'undefined') { + _GM_addStyle = GM_addStyle; + } else if (typeof GM != 'undefined' && typeof GM.addStyle != 'undefined') { + _GM_addStyle = GM.addStyle; + } else { + _GM_addStyle = cssStr => { + let styleEle = document.createElement("style"); + styleEle.innerHTML = cssStr; + document.head.appendChild(styleEle); + return styleEle; + }; + } + if (GM_fetch) { + GM_fetch = async (url, option) => { + if (!url) return null; + return new Promise((resolve, reject) => { + let isPost = option && /^post$/i.test(option.method); + _GM_xmlhttpRequest({ + method: (option && option.method) || 'GET', + url: url.trim(), + data: (option && option.body) || '', + cookie: cookie, + headers: (option && option.headers) || { + referer: url, + origin: url, + "Content-Type": (isPost ? "application/x-www-form-urlencoded" : "text/html"), + 'X-Requested-With': (isPost ? 'XMLHttpRequest' : '') + }, + onload: function(d) { + let response = d.response; + if (d.status >= 400 || !response) response = ""; + let text = () => new Promise((r) => { + r(response); + }); + let json = () => new Promise((r) => { + try { + r(JSON.parse(response)); + } catch (e) { + r(null); + } + }); + resolve({text: text, json: json, finalUrl: (d.finalUrl || url)}); + }, + onerror: function(e) { + debug(e); + reject(e); + }, + ontimeout: function(e) { + debug(e); + reject(e); + } + }); + }); + } + } else GM_fetch = fetch; + + class ImageSizeFetcher { + constructor(gmXhr, config = {}) { + if (!gmXhr) throw new Error("GM_xmlhttpRequest is required"); + this.gmXhr = gmXhr; + this.cache = new Map(); + this.queue = []; + this.activeCount = 0; + this.concurrency = config.concurrency || 3; + this.timeout = config.timeout || 5000; + } + + async getSize(url, options = {}) { + const { force = false, strategy = 'auto' } = options; + if (!url) return null; + + if (!force && this.cache.has(url)) { + return this.cache.get(url); + } + + if (url.startsWith('data:')) { + const size = this._calculateBase64Size(url); + this.cache.set(url, size); + return size; + } + + if (url.startsWith('blob:')) { + return this._getBlobSize(url); + } + + if (strategy === 'local-only' || strategy === 'auto') { + const perfSize = this._getFromPerformance(url); + if (perfSize !== null) { + this.cache.set(url, perfSize); + return perfSize; + } + if (strategy === 'local-only') return null; + } + + return this._scheduleRequest(url); + } + + _calculateBase64Size(dataUrl) { + const base64Str = dataUrl.split(',')[1]; + if (!base64Str) return 0; + const len = base64Str.length; + const padding = (base64Str.match(/=/g) || []).length; + return (len * 3 / 4) - padding; + } + + async _getBlobSize(blobUrl) { + try { + const response = await fetch(blobUrl); + const blob = await response.blob(); + return blob.size; + } catch (e) { + console.error('Blob fetch failed', e); + return null; + } + } + + _getFromPerformance(url) { + const entries = performance.getEntriesByName(url); + if (entries.length > 0) { + const entry = entries[entries.length - 1]; + if (entry.decodedBodySize > 0) return entry.decodedBodySize; + if (entry.encodedBodySize > 0) return entry.encodedBodySize; + } + return null; + } + + _scheduleRequest(url) { + return new Promise((resolve, reject) => { + this.queue.push({ url, resolve, reject }); + this._processQueue(); + }); + } + + _processQueue() { + if (this.activeCount >= this.concurrency || this.queue.length === 0) { + return; + } + + this.activeCount++; + const { url, resolve, reject } = this.queue.shift(); + + this._fetchByHead(url) + .then(size => { + if (size !== null) this.cache.set(url, size); + resolve(size); + }) + .catch(err => { + console.warn(`Fetch size failed for ${url}`, err); + resolve(null); + }) + .finally(() => { + this.activeCount--; + this._processQueue(); + }); + } + + _fetchByHead(url) { + return new Promise((resolve, reject) => { + this.gmXhr({ + method: "HEAD", + url: url, + timeout: this.timeout, + onload: (response) => { + const lenStr = response.responseHeaders.match(/content-length:\s*(\d+)/i); + if (lenStr && lenStr[1]) { + resolve(parseInt(lenStr[1], 10)); + } else { + resolve(null); + } + }, + onerror: (err) => reject(err), + ontimeout: () => reject(new Error("Timeout")) + }); + }); + } + } + + function formatBytes(bytes) { + if (bytes === null || typeof bytes === "undefined" || isNaN(bytes) || bytes < 0) return ""; + const units = ["B", "KB", "MB", "GB", "TB"]; + let size = bytes; + let unitIndex = 0; + while (size >= 1024 && unitIndex < units.length - 1) { + size /= 1024; + unitIndex++; + } + const precision = size >= 100 ? 0 : (size >= 10 ? 1 : 2); + const value = size.toFixed(precision).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1"); + return value + " " + units[unitIndex]; + } + + function updateGalleryHeaderSize(gallery, img, strategy) { + if (!gallery || !gallery.eleMaps || !gallery.eleMaps['head-left-img-info-size']) return; + const sizeSpan = gallery.eleMaps['head-left-img-info-size']; + sizeSpan.textContent = ""; + sizeSpan.title = ""; + if (!img || img.nodeName !== 'IMG') return; + const sizeUrl = img.src; + if (!sizeUrl) return; + imageSizeFetcher.getSize(sizeUrl, { strategy: strategy || 'auto' }).then(size => { + if (size === null) return; + if (gallery.img !== img || img.src !== sizeUrl) return; + if (img.naturalWidth && img.naturalHeight) { + gallery.eleMaps['head-left-img-info-resolution'].textContent = img.naturalWidth + " x " + img.naturalHeight; + } + const sizeText = formatBytes(size); + sizeSpan.textContent = "(" + sizeText + ")"; + sizeSpan.title = sizeText; + }); + } + + function updateViewmoreSizeLabel(labelNode, baseText, url, strategy, baseTextGetter) { + if (!labelNode || !url) return; + const initText = typeof baseTextGetter === "function" ? baseTextGetter() : baseText; + labelNode.textContent = initText; + imageSizeFetcher.getSize(url, { strategy: strategy || 'local-only' }).then(size => { + if (size === null) return; + const sizeText = formatBytes(size); + const currentBase = typeof baseTextGetter === "function" ? baseTextGetter() : baseText; + labelNode.textContent = currentBase + " | " + sizeText; + }); + } + + var viewmoreAutoSizeThrottle = { last: 0 }; + function scheduleViewmoreAutoSize(labelNode, baseText, url, baseTextGetter) { + if (!labelNode || !url) return; + var now = Date.now(); + var delay = Math.max(0, 800 - (now - viewmoreAutoSizeThrottle.last)); + setTimeout(() => { + viewmoreAutoSizeThrottle.last = Date.now(); + updateViewmoreSizeLabel(labelNode, baseText, url, 'auto', baseTextGetter); + }, delay); + } + + var imageSizeFetcher = new ImageSizeFetcher(_GM_xmlhttpRequest, { concurrency: 3, timeout: 5000 }); + + var canvas = document.createElement('CANVAS'); + if (document.body) { + if (canvas.style) canvas.style.display = "none"; + document.body.appendChild(canvas); + if (typeof canvas.getContext === 'undefined') { + document.body.removeChild(canvas); + canvas = null; + } else { + document.body.removeChild(canvas); + } + } + var formatDict = new Map(); + function icon2Base64(icon, content, iconStyle) { + if (!content || !canvas) return false; + let size = Math.min((icon.clientWidth || icon.offsetWidth), (icon.clientHeight || icon.offsetHeight)); + if (!size) return false; + canvas.width = size; + canvas.height = size; + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.font = iconStyle.font || (iconStyle.fontSize + " " + iconStyle.fontFamily); + ctx.strokeStyle = iconStyle.color || "black"; + ctx.fillStyle = iconStyle.color || "black"; + ctx.textBaseline = "top"; + let metrics = ctx.measureText(content); + ctx.fillText(content, (canvas.width - metrics.width) / 2, (canvas.height - parseInt(iconStyle.fontSize)) / 2); + return canvas.toDataURL("image/png"); + } function getRightSaveName(url, name, type, _ext) { /* @@ -11702,49 +12272,99 @@ ImgOps | https://imgops.com/#b#`; 3: i18n("urlAndText") */ type = parseInt(type || 0); - if (name) name = name.split("\n")[0]; - let nameFromUrl = ""; + if (name) name = name.split("\n")[0].replace(/.*?\/\/[^\/]+\//, "").replace(/\?.*/, "").replace(/^data:.*/, ""); + if (!url.replace || url.indexOf("data:") === 0) url = ""; + url = url.replace(/.*?\/\/[^\/]+\//, ""); + let nameFromUrl = url.match(/.*?([^\/\?\=\&]+)\.\w{2,5}(\?|@|$).*/, "$1"); + nameFromUrl = nameFromUrl ? nameFromUrl[1] : ""; + if (/\=&/.test(nameFromUrl)) { + nameFromUrl = ""; + } else { + try { + nameFromUrl = decodeURIComponent(nameFromUrl); + } catch (e) {} + } let ext; - if (_ext) { + if (_ext && /^\w{2,5}$/.test(_ext)) { ext = "." + _ext; } else { ext = url.match(/(\.\w{2,5})(\?|@|$)/); if (ext) { ext = ext[1]; - nameFromUrl = url.replace(/.*\/([^\/]+?)\.\w{2,5}(\?|@|$).*/, "$1"); - try { - nameFromUrl = decodeURIComponent(nameFromUrl); - } catch (e) {} } } switch (type) { case 1: - name = (name || nameFromUrl || url || document.title || "image").substr(-50); + name = (name || nameFromUrl || "image").substr(-200); break; case 2: - name = (nameFromUrl || url || "image").substr(-50); + name = (nameFromUrl || url || "image").substr(-200); break; case 3: if (nameFromUrl && !name) { - name = nameFromUrl.substr(-50); + name = nameFromUrl.substr(-200); } else if (nameFromUrl && name) { - name = nameFromUrl.substr(-50) + " - " + name.substr(-50); + name = nameFromUrl.substr(-200) + " - " + name.substr(-200); } else if (!nameFromUrl && !name) { - name = (url || document.title || "image").substr(-50); + name = "image"; } break; default: - name = (nameFromUrl || name || url || document.title || "image").substr(-50); + name = (nameFromUrl || name || "image").substr(-200); break; } - return name.replace(/.*\/([^\/]+?)(\?|@|$).*/, "$1").replace(/[\*\/:<>\?\\\|]/g, "").replace(/\.\w{2,5}$/, "").trim() + (ext || ".png"); - } - var _GM_download=(typeof GM_download=='undefined')?(url, name, type)=>{ - name=getRightSaveName(url, name, type); - saveAs(url, name); - }:(url, name, type)=>{ - name=getRightSaveName(url, name, type); - let urlSplit=url.split("/"); + return name.replace(/.*?\/([^\/\?]+?)(\?|@|$).*/, "$1").replace(/[\*\/:<>\?\\\|]/g, "").replace(/\.\w{2,5}$/, "").trim() + (ext || ".png"); + } + + function canonicalUri(src, href, basePath) { + if (!src) { + return ""; + } + if (!href) href = location.href; + let protocol = href.match(/^https?:/); + protocol = protocol ? protocol[0] : location.protocol; + let host = href.match(/^https?:\/\/([^\/]+)/); + host = host ? host[1] : location.host; + if (src.charAt(0) === "#") return href + src; + if (src.charAt(0) === "?") return href.replace(/^([^\?#]+).*/, "$1" + src); + let origin = protocol + '//' + host; + let url = basePath || href; + url = url.replace(/(\?|#).*/, ""); + if (/https?:\/\/[^\/]+$/.test(url)) url = url + '/'; + if (url.indexOf("http") !== 0) url = origin + url; + var root_page = /^[^\?#]*\//.exec(url)[0], + root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0], + absolute_regex = /^\w+\:\/\//; + src = src.replace(/^\/(\.\.\/)+/, "/"); + while (src.indexOf("../") === 0) { + src = src.substr(3); + root_page = root_page.replace(/\/[^\/]+\/$/, "/"); + } + src = src.replace(/\.\//, ""); + if (/^\/\/\/?/.test(src)) { + src = protocol + src; + } + return (absolute_regex.test(src) ? src : ((src.charAt(0) === "/" ? root_domain : root_page) + src)); + } + + var _GM_download = (typeof GM_download == 'undefined') ? (url, name, type) => { + url = canonicalUri(url); + urlToBlob(url, (blob, ext) => { + if(blob){ + try { + saveAs(blob, document.title.replace(/[\*\/:<>\?\\\|]/g, "") + " - " + getRightSaveName(url, name, type, ext)); + } catch(e) { + console.log(e); + } + } + }); + } : (url, name, type) => { + url = canonicalUri(url); + name = document.title.replace(/[\*\/:<>\?\\\|]/g, "") + " - " + getRightSaveName(url, name, type); + let urlSplit = ["", ""]; + if (url.split) { + urlSplit = url.split("/"); + } GM_download({ url: url, name: name, @@ -11755,23 +12375,21 @@ ImgOps | https://imgops.com/#b#`; }], onerror: e => { console.log(e); - saveAs(url, name); }, ontimeout: e => { console.log(e); - saveAs(url, name); } }) }; function dataURLToCanvas(dataurl, cb){ if(!dataurl)return cb(null); - var canvas = document.createElement('CANVAS'); var ctx = canvas.getContext('2d'); var img = new Image(); img.setAttribute("crossOrigin","anonymous"); img.onload = function(){ canvas.width = img.width; canvas.height = img.height; + ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0); cb(canvas); }; @@ -11780,73 +12398,552 @@ ImgOps | https://imgops.com/#b#`; }; img.src = dataurl; } - function urlToBlob(url, cb, errCb, forcePng) { - _GM_xmlhttpRequest({ - method: 'GET', - url: url, - responseType:'blob', - timeout:20000, - headers: { - origin: location.origin, - referer: location.href, - accept: "*/*" - }, - onload: function(d) { - let blob = d.response; - let ext = blob.type.replace("image/", ""); - if (ext == "webp" || forcePng) { - var self = this; - var a = new FileReader(); - a.readAsDataURL(blob); - a.onload = function (e) { - dataURLToCanvas(e.target.result, canvas => { - canvas.toBlob(blob => { - cb(blob, "png"); - }, "image/png"); - }); - }; - a.onerror = function (e){ - if (errCb) errCb(); - } - }else{ - cb(blob, ext); - } - }, + function urlToBlobWithFetch(urlString, cb){ + fetch(urlString).then(response => response.blob()).then(blob => { + let ext = extFromMimeAndUrl(blob.type, urlString); + if (blob.type && blob.type.indexOf("text/html") === 0 && (blob.size || 0) < 1000) return cb(null, ''); + if (ext === "none") ext = "webp"; + let conversion = formatDict.get(ext); + if (canvas && conversion) { + var self = this; + var a = new FileReader(); + a.readAsDataURL(blob); + a.onload = function (e) { + dataURLToCanvas(e.target.result, canvas => { + canvas.toBlob(nblob => { + if (!nblob) { + cb(blob); + } else { + cb(nblob, conversion || "png"); + } + }, "image/" + (conversion || "png")); + }); + }; + a.onerror = function (e){ + cb(blob); + } + } else { + cb(blob, ext); + } + }).catch(error => { + cb(null); + }); + } + function loadVideoJsLibrary() { + if (!window.videoJsStatus) { + window.videoJsStatus = 'none'; + } + + return new Promise((resolve, reject) => { + if (window.videoJsStatus === 'loaded') { + return resolve(); + } + + if (window.videoJsStatus === 'loading') { + const interval = setInterval(() => { + if (window.videoJsStatus === 'loaded') { + clearInterval(interval); + resolve(); + } else if (window.videoJsStatus === 'failed') { + clearInterval(interval); + reject(new Error('Previous Video.js loading attempt failed.')); + } + }, 100); + return; + } + + window.videoJsStatus = 'loading'; + + const cssSources = [ + "https://vjs.zencdn.net/8.23.3/video-js.min.css", + "https://unpkg.com/video.js/dist/video-js.min.css", + "https://cdn.jsdelivr.net/npm/video.js@8.23.3/dist/video-js.min.css" + ]; + const jsSources = [ + "https://vjs.zencdn.net/8.23.3/video.min.js", + "https://unpkg.com/video.js/dist/video.min.js", + "https://cdn.jsdelivr.net/npm/video.js@8.23.3/dist/video.min.js" + ]; + const fetchWithFallback = (urls) => { + return new Promise((resolve, reject) => { + let lastError = null; + const urlsToTry = [...urls]; + + const tryNext = () => { + if (urlsToTry.length === 0) { + reject(new Error(`Failed to load resource after trying all sources. Last error: ${lastError}`)); + return; + } + + const url = urlsToTry.shift(); + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = () => { + if (xhr.status === 200) { + resolve(xhr.responseText); + } else { + lastError = `Status ${xhr.status} from ${url}`; + console.warn(`Failed to load ${url}, trying next source...`); + tryNext(); + } + }; + xhr.onerror = () => { + lastError = `Network error from ${url}`; + console.warn(`Failed to load ${url}, trying next source...`); + tryNext(); + }; + xhr.send(); + }; + + tryNext(); + }); + }; + const pCSS = fetchWithFallback(cssSources).then(cssContent => { + const styleElement = document.createElement('style'); + styleElement.textContent = cssContent; + styleElement.id = 'imagus-videojs-styles'; + document.head.appendChild(styleElement); + }); + const pJS = fetchWithFallback(jsSources).then(jsContent => { + Function(jsContent)(); + }); + + Promise.all([pCSS, pJS]).then(() => { + window.videoJsStatus = 'loaded'; + console.timeEnd('Load Video.js'); + resolve(); + }).catch(error => { + window.videoJsStatus = 'failed'; + console.error('Failed to load Video.js from all available sources.', error); + reject(error); + }); + }); + } + async function initVideojs(media, imgSrc) { + await loadVideoJsLibrary(); + const videoOptions = { + autoplay: true + }; + media.className = "video-js vjs-default-skin vjs-fluid"; + media.width = 1920; + media.height = 1080; + const player = videojs(media, videoOptions); + player.on('loadedmetadata', function() { + const vhs = player.tech({ IWillNotUseThisInPlugins: true }).vhs; + if (!vhs) { + console.warn('VHS engine not found.'); + return; + } + const representations = vhs.representations(); + if (!representations || representations.length === 0) { + return; + } + let highestBandwidth = 0; + let highestRepresentation = null; + for (let i = 0; i < representations.length; i++) { + const representation = representations[i]; + if (representation.bandwidth > highestBandwidth) { + highestBandwidth = representation.bandwidth; + highestRepresentation = representation; + } + } + if (highestRepresentation) { + representations.forEach(representation => { + representation.enabled(representation.id === highestRepresentation.id); + }); + } + const originalWidth = highestRepresentation ? highestRepresentation.width : player.videoWidth(); + const originalHeight = highestRepresentation ? highestRepresentation.height : player.videoHeight(); + this.addClass('vjs-has-started'); + media.naturalWidth = originalWidth; + media.naturalHeight = originalHeight; + media.onload(); + }); + player.src({ + src: imgSrc, + fluid: true, + type: 'application/x-mpegURL' + }); + } + function getCookie(cname) { + let name = cname + "="; + var ca = document.cookie.split(';'); + for(let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1); + if (c.indexOf(name) == 0) + return c.substring(name.length,c.length); + } + return ""; + } + var cookie; + function extFromMimeAndUrl(mimeType, url) { + let ext = ''; + if (mimeType) { + const cleanMime = mimeType.split(';')[0].trim().toLowerCase(); + if (cleanMime.indexOf('image/') === 0) { + ext = cleanMime.slice(6); + } else if (cleanMime.indexOf('text/html') === 0) { + ext = 'text/html'; + } + } + if (!ext) { + const m = String(url || '').match(/\.([a-z0-9]+)(?:$|[?#])/i); + ext = m ? m[1].toLowerCase() : ''; + } + if (ext.indexOf('/') !== -1) ext = ''; + return ext; + } + function urlToBlob(url, cb, forcePng, tryTimes = 0) { + tryTimes++; + if (tryTimes > 3) { + return cb(null, ''); + } + _GM_xmlhttpRequest({ + method: 'GET', + url: url.trim(), + responseType:'blob', + timeout:20000, + headers: { + origin: location.origin, + referer: location.href, + accept: "*/*" + }, + cookie: cookie, + onload: function(d) { + let blob = d.response; + if (!blob.type) return urlToBlob(url, cb, forcePng, tryTimes); + let ext = extFromMimeAndUrl(blob.type, url); + if (blob.type && blob.type.indexOf("text/html") === 0 && (blob.size || 0) < 100000) { + urlToBlobWithFetch(url, cb); + return; + } + if (ext === "none") ext = "webp"; + let conversion = formatDict.get(ext); + if (canvas && (conversion || forcePng)) { + var self = this; + var a = new FileReader(); + a.readAsDataURL(blob); + a.onload = function (e) { + dataURLToCanvas(e.target.result, canvas => { + canvas.toBlob(nblob => { + if (!nblob) { + cb(blob, ext || "png"); + } else { + cb(nblob, conversion || "png"); + } + }, "image/" + (conversion || "png")); + }); + }; + a.onerror = function (e){ + urlToBlob(url, cb, forcePng, tryTimes); + } + } else if (!blob || !blob.size) { + urlToBlob(url, cb, forcePng, tryTimes); + } else { + cb(blob, ext); + } + }, onerror: function(){ - if (errCb) errCb(); + urlToBlob(url, cb, forcePng, tryTimes); }, ontimeout: function(){ - if (errCb) errCb(); + urlToBlob(url, cb, forcePng, tryTimes); } }); } - function downloadImg(url, name, type, errCb) { - urlToBlob(url, (blob, ext) => { - saveAs(blob, getRightSaveName(url, name, type, ext)); - }, () => { - _GM_download(url, name, type); - if (errCb) errCb(); - }); - } var prefs; - var escapeHTMLPolicy; - if (unsafeWindow.trustedTypes && unsafeWindow.trustedTypes.createPolicy) { - escapeHTMLPolicy=unsafeWindow.trustedTypes.createPolicy('pvcep_default', { - createHTML: (string, sink) => string + + function parseTrustedTypes(cspString) { + const policies = new Set(); + let allowDuplicates = false; + let ttDirectiveFound = false; + const ttRegex = /trusted-types\s+([^;]+)/gi; + let match; + + while ((match = ttRegex.exec(cspString)) !== null) { + ttDirectiveFound = true; + match[1].trim().split(/\s+/) + .forEach(name => { + if (name === "'allow-duplicates'") { + allowDuplicates = true; + } else if (name !== "'none'") { + policies.add(name.replace(/'/g, '')); + } + }); + } + return { names: policies, allowDuplicates: allowDuplicates, ttDirectiveFound: ttDirectiveFound }; + } + + async function getCspTrustedTypesInfo() { + const combinedPolicies = new Set(); + let combinedAllowDuplicates = false; + let combinedTtDirectiveFound = false; + + const meta = document.querySelector('meta[http-equiv="Content-Security-Policy"]'); + if (meta) { + const metaResult = parseTrustedTypes(meta.content); + metaResult.names.forEach(name => combinedPolicies.add(name)); + if (metaResult.allowDuplicates) { + combinedAllowDuplicates = true; + } + if (metaResult.ttDirectiveFound) { + combinedTtDirectiveFound = true; + } + } + + return new Promise((resolve) => { + GM_xmlhttpRequest({ + method: "HEAD", + url: window.location.href, + onload: function(response) { + const cspHeader = response.responseHeaders.split('\r\n') + .filter(h => h.toLowerCase().startsWith('content-security-policy:')) + .map(h => h.substring(26).trim()) + .join('; '); + + const headerResult = parseTrustedTypes(cspHeader); + headerResult.names.forEach(name => combinedPolicies.add(name)); + if (headerResult.allowDuplicates) { + combinedAllowDuplicates = true; + } + if (headerResult.ttDirectiveFound) { + combinedTtDirectiveFound = true; + } + + resolve({ + names: combinedPolicies, + allowDuplicates: combinedAllowDuplicates, + ttDirectiveFound: combinedTtDirectiveFound + }); + }, + onerror: function(error) { + resolve({ + names: combinedPolicies, + allowDuplicates: combinedAllowDuplicates, + ttDirectiveFound: combinedTtDirectiveFound + }); + } + }); }); } + function isTrustedTypesEnforced() { + try { + document.createElement('div').innerHTML = ''; + return false; + } catch (e) { + return true; + } + } + + async function createPolicy() { + if (!(unsafeWindow.trustedTypes && unsafeWindow.trustedTypes.createPolicy && isTrustedTypesEnforced())) { + return; + } + + const { names: allowedNames, allowDuplicates, ttDirectiveFound } = await getCspTrustedTypesInfo(); + + if (ttDirectiveFound && !allowDuplicates) { + debug("CSP Trusted Types is enforced without 'allow-duplicates'. " + + "Skipping policy creation to avoid conflicts with the page."); + return; + } + + const MY_POLICY_NAME = 'pvcep_default'; + + try { + escapeHTMLPolicy = unsafeWindow.trustedTypes.createPolicy(MY_POLICY_NAME, { + createHTML: (string, sink) => string, + createScriptURL: string => string, + createScript: string => string + }); + escapeHTMLCreator = escapeHTMLPolicy.createHTML; + return; + } catch (e) { + } + debug("Could not create any trusted types policy."); + } + + let escapeHTMLPolicy = null; + let escapeHTMLCreator = null; + let canDirectSetHTML = true; + let canPolicySetHTML = true; + function getBody(doc){ return doc.body || doc.querySelector('body') || doc; } function createHTML(html){ - return escapeHTMLPolicy?escapeHTMLPolicy.createHTML(html):html; + const fragment = document.createDocumentFragment(); + if (html === null || html === undefined || html === '') return fragment; + parseHTMLToFragment(String(html), fragment, document); + return fragment; + } + const SVG_NS = 'http://www.w3.org/2000/svg'; + const VOID_TAGS = { + area: true, + base: true, + br: true, + col: true, + embed: true, + hr: true, + img: true, + input: true, + link: true, + meta: true, + param: true, + source: true, + track: true, + wbr: true + }; + const RAW_TEXT_TAGS = { + script: true, + style: true, + textarea: true, + title: true, + xmp: true, + plaintext: true, + noscript: true + }; + const HTML_ENTITIES = { + amp: '&', + lt: '<', + gt: '>', + quot: '"', + apos: "'", + nbsp: '\u00A0' + }; + function decodeEntities(text){ + return text.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g, function(_, code){ + if (code[0] === '#') { + const isHex = code[1] === 'x' || code[1] === 'X'; + const num = parseInt(code.slice(isHex ? 2 : 1), isHex ? 16 : 10); + if (!isNaN(num)) { + try { return String.fromCodePoint(num); } catch(e) {} + } + return '&' + code + ';'; + } + const key = code.toLowerCase(); + return (key in HTML_ENTITIES) ? HTML_ENTITIES[key] : '&' + code + ';'; + }); + } + function parseHTMLToFragment(html, fragment, doc){ + const stack = [fragment]; + const tokenRe = /|]*>|<\/?[a-zA-Z][^>]*>|[^<]+/gi; + let match; + while ((match = tokenRe.exec(html))) { + const token = match[0]; + if (token[0] !== '<') { + const text = decodeEntities(token); + if (text) stack[stack.length - 1].appendChild(doc.createTextNode(text)); + continue; + } + if (token.indexOf('|]*>|<\/?[a-zA-Z][^>]*>|[^<]+/gi; + let match; + while ((match = tokenRe.exec(html))) { + const token = match[0]; + if (token[0] !== '<') { + const text = decodeEntities(token); + if (text) stack[stack.length - 1].appendChild(doc.createTextNode(text)); + continue; + } + if (token.indexOf('0){ - if(char_f[x])processChar=char_f[x]+processChar; + if (!char_f[x]) break; + processChar=char_f[x]+processChar; + x++; } x=0; while(badd-->0){ - if(char_b[x])processChar+=char_b[x]; + if (!char_b[x]) break; + processChar+=char_b[x]; + x++; } if(processChar.indexOf(curOther) != -1){ newChar=otherChar; @@ -880,6 +898,7 @@ } function simplized(orgStr){ + if (!orgStr) return ""; var str='', char; for(var i=0;i0){ - if(char_f[x])processChar=char_f[x]+processChar; + if (!char_f[x]) break; + processChar=char_f[x]+processChar; + x++; } x=0; while(badd-->0){ - if(char_b[x])processChar+=char_b[x]; + if (!char_b[x]) break; + processChar+=char_b[x]; + x++; } if(processChar.indexOf(curOther) != -1){ newChar=otherChar; @@ -960,7 +983,7 @@ childs = document.documentElement.childNodes; } if (childs) { - for (let i = 0;i { if (typeof GM_listValues != 'undefined') { cb(GM_listValues()); @@ -1091,12 +1113,30 @@ } else { _GM_getResourceText = (s) => {}; } + if (typeof GM_info != 'undefined') { + _GM_info = GM_info; + } else if (typeof GM != 'undefined' && typeof GM.info != 'undefined') { + _GM_info = GM.info; + } else { + _GM_info = {script: {}}; + } //將接口暴露出去 var _unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow; _unsafeWindow.tc2sc = simplized; _unsafeWindow.sc2tc = traditionalized; + window.addEventListener("message", function(event) { + if (event.data && event.data.type === "switchChineseRequest") { + const receivedData = event.data.payload; + const result = receivedData.target === 'sc' ? simplized(receivedData.str) : traditionalized(receivedData.str); + window.postMessage({ + type: "switchChineseResult", + payload: result + }, "*"); + } + }); + var storage = { supportGM: typeof GM_getValue == 'function' && typeof GM_getValue('a', 'b') != 'undefined', supportGMPromise: typeof GM != 'undefined' && typeof GM.getValue == 'function' && typeof GM.getValue('a','b') != 'undefined', @@ -1149,10 +1189,13 @@ } }; - let currentAction = "action_" + location.hostname.toString().replace(/\./g,"_"); - function setLanguage(){ + var keyCallNotSave = true; + var curInput = null; + var curLang; + var currentAction = "action_" + location.hostname.toString().replace(/\./g,"_"); + function setLanguage(keyCall){ enable = true; - storage.setItem(currentAction, action); + if (!keyCall || !keyCallNotSave) storage.setItem(currentAction, action); switch(action){ case 1: if ( notification ) _GM_notification("已於該網域禁用簡繁切換"); @@ -1172,8 +1215,7 @@ function switchLanguage(){ let reload = action === 1; - action = action == 2 ? 3 : 2; - setLanguage(); + translateAction(document.body); if (reload) location.reload(); } @@ -1183,34 +1225,93 @@ location.reload(); } + function translateAction(activeEle, keyCall){ + if(!activeEle)activeEle=document.activeElement; + if("TEXTAREA"==activeEle.nodeName.toUpperCase()||activeEle.contentEditable=="true"){ + if (curInput != activeEle) { + curLang = isSimple; + } + curLang=!curLang; + activeEle.innerHTML=curLang?simplized(activeEle.innerHTML):traditionalized(activeEle.innerHTML); + activeEle.value=curLang?simplized(activeEle.value):traditionalized(activeEle.value); + }else if("INPUT"==activeEle.nodeName.toUpperCase()){ + if (curInput != activeEle) { + curLang = isSimple; + } + curLang=!curLang; + activeEle.value=curLang?simplized(activeEle.value):traditionalized(activeEle.value); + }else{ + var selecter; + if(window.getSelection()){ + selecter=window.getSelection(); + }else{ + selecter=document.getSelection(); + } + selecter=document.getSelection(); + var selectStr=selecter.toString().trim(); + if(selectStr!=""){ + var rang = selecter.getRangeAt(0); + rang.deleteContents(); + curLang=!curLang; + rang.insertNode(document.createTextNode(curLang?traditionalized(selectStr):simplized(selectStr))); + }else{ + action=action==2?3:2; + setLanguage(keyCall); + } + } + curInput = document.activeElement; + } + var saveAction; function run() { action=saveAction?saveAction:(isSimple?(auto?2:3):(auto?3:2)); enable = !!(auto || saveAction); + var transPool = []; + var transWaiting = false; + function transTask(node) { + if (node) transPool.push(node); + if (transWaiting) return; + transWaiting = true; + setTimeout(() => { + transWaiting = false; + if (transPool.length) { + for (let i = 0; i < transPool.length; i++) { + if (transPool[i]) { + stranBody(transPool[i]); + } + } + transPool = []; + } + }, 500); + } let startStrans = () => { if (action == 1) return; stranBody(); var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; - var observer = new MutationObserver(function(records){ + var observer = new MutationObserver(function(records) { records.map(function(record) { + let target = record.target; + let parentNode = target && target.parentNode; + while (target) { + if (/TEXTAREA/i.test(target.nodeName)) return; + if (/INPUT/i.test(target.nodeName) && (target.value === "" || target.type === "text" || target.type === "search" || target.type === "hidden")) { + return; + } + if (target.contentEditable == 'true') return; + if (target.nodeName.toUpperCase() == 'BODY') { + break; + } + target = target.parentNode; + } if (record.type === "characterData") { - let target = record.target; - let parentNode = target && target.parentNode; if (!parentNode) { return; } - while (target) { - if (target.contentEditable == 'true') return; - if (target.nodeName.toUpperCase() == 'BODY') { - break; - } - target = target.parentNode; - } - stranBody(parentNode); + transTask(parentNode); } if(record.addedNodes){ [].forEach.call(record.addedNodes,function(item){ - stranBody(item); + transTask(item); }); } }); @@ -1236,35 +1337,10 @@ } },50); - var curLang=isSimple; + curLang = isSimple; document.addEventListener("keydown", function(e) { if(e.key == shortcutKey && e.ctrlKey == ctrlKey && e.altKey == altKey && e.shiftKey == shiftKey && e.metaKey == metaKey) { - if("TEXTAREA"==document.activeElement.nodeName.toUpperCase()||document.activeElement.contentEditable=="true"){ - curLang=!curLang; - document.activeElement.innerHTML=curLang?traditionalized(document.activeElement.innerHTML):simplized(document.activeElement.innerHTML); - document.activeElement.value=curLang?traditionalized(document.activeElement.value):simplized(document.activeElement.value); - }else if("INPUT"==document.activeElement.nodeName.toUpperCase()){ - curLang=!curLang; - document.activeElement.value=curLang?traditionalized(document.activeElement.value):simplized(document.activeElement.value); - }else{ - var selecter; - if(window.getSelection()){ - selecter=window.getSelection(); - }else{ - selecter=document.getSelection(); - } - selecter=document.getSelection(); - var selectStr=selecter.toString().trim(); - if(selectStr!=""){ - var rang = selecter.getRangeAt(0); - rang.deleteContents(); - curLang=!curLang; - rang.insertNode(document.createTextNode(curLang?traditionalized(selectStr):simplized(selectStr))); - }else{ - action=action==2?3:2; - setLanguage(); - } - } + translateAction(null, true); } else if(e.key == pinyinShortcutKey && e.ctrlKey == pinyinCtrlKey && e.altKey == pinyinAltKey && e.shiftKey == pinyinShiftKey && e.metaKey == pinyinMetaKey) { showPinyinInit(); } @@ -1293,7 +1369,8 @@ }; let autoInput = createCheckbox('總是自動切換', auto); let notificationInput = createCheckbox('切換成功通知', notification); - let enablePinyinInput = createCheckbox('啓用拼音顯示', !disablePinyin); + let enablePinyinInput = createCheckbox('啟用拼音顯示', !disablePinyin); + let keyCallNotSaveInput = createCheckbox('用快速鍵切換時不記憶選擇', keyCallNotSave); let defaultSimple = document.createElement('select'); let cnOption = document.createElement('option'); @@ -1321,7 +1398,7 @@ shortcutCon.style.alignItems = 'center'; let shortcutTitle = document.createElement('h3'); shortcutTitle.style.margin = '5px 0'; - shortcutTitle.innerText = '繁簡切換快捷鍵:'; + shortcutTitle.innerText = '繁簡切換快速鍵:'; shortcutCon.appendChild(shortcutTitle); let shortcutInput = document.createElement('input'); shortcutInput.style.height = '20px'; @@ -1350,7 +1427,7 @@ pinyinShortcutCon.style.alignItems = 'center'; let pinyinShortcutTitle = document.createElement('h3'); pinyinShortcutTitle.style.margin = '5px 0'; - pinyinShortcutTitle.innerText = '顯示拼音快捷鍵:'; + pinyinShortcutTitle.innerText = '顯示拼音快速鍵:'; pinyinShortcutCon.appendChild(pinyinShortcutTitle); let pinyinShortcutInput = document.createElement('input'); pinyinShortcutInput.style.height = '20px'; @@ -1424,7 +1501,7 @@ let customTermTitle = document.createElement('h3'); customTermTitle.style.margin = '5px 0'; - customTermTitle.innerText = '自定義簡繁用語轉換(可透過通配符設置生效網址範圍):'; + customTermTitle.innerText = '自訂簡繁用語轉換(可透過通配符設定生效網址範圍):'; let addNewGlob1 = document.createElement('button'); addNewGlob1.innerText = '添加生效網站'; @@ -1496,7 +1573,7 @@ let customIlliteracyTitle = document.createElement('h3'); customIlliteracyTitle.style.margin = '5px 0'; - customIlliteracyTitle.innerText = '通用字詞轉換(可透過通配符設置生效網址範圍):'; + customIlliteracyTitle.innerText = '通用字詞轉換(可透過通配符設定生效網址範圍):'; let addNewGlob2 = document.createElement('button'); addNewGlob2.innerText = '添加生效網站'; addNewGlob2.addEventListener("click", function(e) { @@ -1586,12 +1663,16 @@ } }); }); + let buttonCon = document.createElement('div'); let saveBtn = document.createElement('button'); - saveBtn.innerText = '保存設置'; + saveBtn.innerText = '保存設定'; saveBtn.style.display = 'block'; - saveBtn.style.fontSize = 'large'; + saveBtn.style.fontSize = 'x-large'; + saveBtn.style.fontWeight = 'bold'; saveBtn.style.float = 'left'; saveBtn.style.marginRight = '5px'; + saveBtn.style.pointerEvents = 'all'; + saveBtn.style.cursor = 'pointer'; saveBtn.addEventListener("click", function(e) { auto = autoInput.checked; shortcutKey = shortcutInput.value; @@ -1606,14 +1687,17 @@ pinyinMetaKey = pinyinMetaKeyInput.checked; notification = notificationInput.checked; disablePinyin = !enablePinyinInput.checked; + keyCallNotSave = keyCallNotSaveInput.checked; isSimple = defaultSimple.value == 'cn'; if (siteChanged) { - sitesList.forEach(site => { - if (site.indexOf('action_') === 0) { - storage.setItem(site, ""); - } - }); + if (sitesList) { + sitesList.forEach(site => { + if (site.indexOf('action_') === 0) { + storage.setItem(site, ""); + } + }); + } sitesDisableInput.value.trim().split('\n').forEach(site => { if (site.trim()) storage.setItem("action_" + site.replace(/\./g,"_"), 1); }); @@ -1638,37 +1722,50 @@ storage.setItem('notification', notification); storage.setItem('isSimple', isSimple); storage.setItem('disablePinyin', disablePinyin); + storage.setItem('keyCallNotSave', keyCallNotSave); try { sc2tcCombConfig = customTermInput.value ? JSON.parse(customTermInput.value) : ""; storage.setItem('sc2tcCombConfig', sc2tcCombConfig); } catch (e) { console.log(e); + alert("自訂簡繁用語轉換格式錯誤:" + e); + return; } try { illiteracyConfig = customIlliteracyInput.value ? JSON.parse(customIlliteracyInput.value) : ""; storage.setItem('illiteracyConfig', illiteracyConfig); } catch (e) { console.log(e); + alert("通用字詞轉換格式錯誤:" + e); + return; } storage.setItem('sc2tcCombTree', ""); storage.setItem('tc2scCombTree', ""); storage.setItem('fuckIlliteracyTree', ""); - alert('保存設置成功!'); + alert('保存設定成功!'); location.reload(); }); - baseCon.appendChild(saveBtn); + buttonCon.appendChild(saveBtn); let clearBtn = document.createElement('button'); clearBtn.innerText = '清除預處理緩存'; clearBtn.style.display = 'block'; - clearBtn.style.fontSize = 'large'; + clearBtn.style.fontSize = 'x-large'; + clearBtn.style.fontWeight = 'bold'; + clearBtn.style.pointerEvents = "all"; + clearBtn.style.cursor = "pointer"; clearBtn.addEventListener("click", function(e) { + storage.setItem('stDict', ""); + storage.setItem('tsDict', ""); storage.setItem('sc2tcCombTree', ""); storage.setItem('tc2scCombTree', ""); storage.setItem('fuckIlliteracyTree', ""); storage.setItem('pinyinTree', ""); alert('清除成功!'); + location.reload(); }); - baseCon.appendChild(clearBtn); + buttonCon.appendChild(clearBtn); + buttonCon.style.cssText = "width: 100%; position: fixed; z-index: 999; bottom: 0px; left: 0px; display: flex; justify-content: center; background: #00000060; padding-bottom: 10px; pointer-events: none;"; + baseCon.appendChild(buttonCon); createHR(); @@ -1678,7 +1775,7 @@ baseCon.appendChild(testTitle); let testInput = document.createElement('textarea'); testInput.style.width = '100%'; - testInput.setAttribute('placeholder', "輸入文字后,按下快捷鍵"); + testInput.setAttribute('placeholder', "輸入文字后,按下快速鍵"); testInput.onclick = e => { if (!testInput.style.height) { testInput.style.height = "80vh"; @@ -1747,7 +1844,20 @@ return false; } - getMulValue(["auto", "shortcutKey", "ctrlKey", "altKey", "shiftKey", "metaKey", "disablePinyin", "pinyinShortcutKey", "pinyinCtrlKey", "pinyinAltKey", "pinyinShiftKey", "pinyinMetaKey", "sc2tcCombConfig", "illiteracyConfig", "notification", "isSimple", "sc2tcCombTree", "tc2scCombTree", "fuckIlliteracyTree", "stDict", "tsDict", currentAction], async values => { + getMulValue(["version", "auto", "shortcutKey", "ctrlKey", "altKey", "shiftKey", "metaKey", "disablePinyin", "keyCallNotSave", "pinyinShortcutKey", "pinyinCtrlKey", "pinyinAltKey", "pinyinShiftKey", "pinyinMetaKey", "sc2tcCombConfig", "illiteracyConfig", "notification", "isSimple", "sc2tcCombTree", "tc2scCombTree", "fuckIlliteracyTree", "stDict", "tsDict", currentAction], async values => { + if (_GM_info.script && _GM_info.script.version && _GM_info.script.version !== '1.0.0' && values.version != _GM_info.script.version) { + storage.setItem('version', _GM_info.script.version); + storage.setItem('stDict', ""); + storage.setItem('tsDict', ""); + storage.setItem('sc2tcCombTree', ""); + storage.setItem('tc2scCombTree', ""); + storage.setItem('fuckIlliteracyTree', ""); + values.stDict = ""; + values.tsDict = ""; + values.sc2tcCombTree = ""; + values.tc2scCombTree = ""; + values.fuckIlliteracyTree = ""; + } let href = location.href.slice(0, 500); if (values.sc2tcCombConfig) { auto = values.auto; @@ -1757,6 +1867,7 @@ shiftKey = values.shiftKey; metaKey = values.metaKey; disablePinyin = !!values.disablePinyin; + keyCallNotSave = !!values.keyCallNotSave; if (values.pinyinShortcutKey) { pinyinShortcutKey = values.pinyinShortcutKey; pinyinCtrlKey = values.pinyinCtrlKey; @@ -1793,39 +1904,54 @@ sc2tcCombTree = values.sc2tcCombTree; tc2scCombTree = values.tc2scCombTree; } else { - for(let key in sc2tcComb){ - let value=sc2tcComb[key]; + function makeCombTree(key, value) { let curTree=sc2tcCombTree; for(let i=0;i { + makeCombTree(key, v); + }); + } else { + makeCombTree(key, value); + } + } storage.setItem("sc2tcCombTree", sc2tcCombTree); storage.setItem("tc2scCombTree", tc2scCombTree); } @@ -1862,6 +1988,14 @@ if(!stDict[_sc])stDict[_sc]=_tc; if(!tsDict[_tc])tsDict[_tc]=_sc; } + Object.keys(oc2tc).forEach(key => { + let ocList=oc2tc[key]; + for(let i=0;i=12.0.0" + } +} + diff --git a/Switch Traditional Chinese and Simplified Chinese/lib/readme.md b/Switch Traditional Chinese and Simplified Chinese/lib/readme.md new file mode 100644 index 00000000000..670521a96db --- /dev/null +++ b/Switch Traditional Chinese and Simplified Chinese/lib/readme.md @@ -0,0 +1,1082 @@ +# switch-chinese + +[Online Demo](https://tool.hoothin.com/chinese-converter) + +[简体中文](#简体中文) | [繁體中文](#繁體中文) | [English](#english) + +--- + +## 简体中文 + +简繁体中文转换库 - 支持简体中文与繁体中文双向转换,基于词组的智能分词处理「一简多繁」问题 + +[![NPM](https://img.shields.io/npm/v/switch-chinese.svg)](https://www.npmjs.com/package/switch-chinese) [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://www.npmjs.com/package/switch-chinese) + +### 特性 + +- **轻量级**:零依赖,体积小,性能优异 +- **智能转换**:支持基于词组的智能分词和「一简多繁」精准转换 +- **多种数据类型**:支持字符串、数组、对象的转换,自动递归处理嵌套结构 +- **自定义词库**:允许用户自定义简繁转换词汇 +- **缓存机制**:支持字典缓存,避免重复初始化 +- **简繁检测**:自动检测文本是简体中文、繁体中文还是未知类型 +- **术语转换**:内置大陆简体与台湾正体的常用术语转换 +- **无依赖**:纯 JavaScript 实现,无需任何第三方依赖 + +### 安装 + +使用 npm 安装: + +```bash +npm install switch-chinese +``` + +使用 yarn 安装: + +```bash +yarn add switch-chinese +``` + +### 快速开始 + +#### 基础用法 + +```javascript +import stcasc from 'switch-chinese'; + +const { traditionalized, simplized, detect } = stcasc(); + +// 简体转繁体 +const tc = traditionalized('简繁转换 繁简切换 香烟 香烟袅袅'); +console.log(tc); +// 输出: 簡繁轉換 繁簡切換 香菸 香煙裊裊 + +// 繁体转简体 +const sc = simplized('繁體中文'); +console.log(sc); +// 输出: 繁体中文 +``` + +#### 检测中文类型 + +```javascript +import stcasc, { ChineseType } from 'switch-chinese'; + +const { detect } = stcasc(); + +const type1 = detect('简体中文'); +if (type1 === ChineseType.SIMPLIFIED) { + console.log('检测到简体中文'); +} + +const type2 = detect('繁體中文'); +if (type2 === ChineseType.TRADITIONAL) { + console.log('检测到繁体中文'); +} + +const type3 = detect('English'); +if (type3 === ChineseType.UNKNOWN) { + console.log('未检测到中文'); +} +``` + +ChineseType 枚举值: +- `ChineseType.SIMPLIFIED` (0): 简体中文 +- `ChineseType.TRADITIONAL` (1): 繁体中文 +- `ChineseType.UNKNOWN` (2): 未知类型 + +#### 转换数组和对象 + +库支持转换数组和对象中的所有字符串,非字符串值保持原样: + +```javascript +import stcasc from 'switch-chinese'; + +const { traditionalized, simplized } = stcasc(); + +// 转换数组 +const arr = ['简体中文', '软件', '网络', 123, true, null]; +const arrTc = traditionalized(arr); +console.log(arrTc); +// 输出: ['簡體中文', '軟體', '網路', 123, true, null] + +// 转换对象 +const obj = { + title: '简体中文标题', + description: '这是一个简体中文描述', + count: 100, + active: true, + tags: ['软件', '网络', '服务器'] +}; +const objTc = traditionalized(obj); +console.log(objTc); +// 输出: { +// title: '簡體中文標題', +// description: '這是一個簡體中文描述', +// count: 100, +// active: true, +// tags: ['軟體', '網路', '伺服器'] +// } + +// 转换嵌套结构 +const nested = { + user: { + name: '简体名称', + profile: { + bio: '这是简体中文简介', + skills: ['软件开发', '网络管理'] + } + }, + count: 42 +}; +const nestedTc = traditionalized(nested); +// 所有字符串属性值都会被转换,数字等其他类型保持不变 +``` + +### 高级用法 + +#### 使用缓存优化性能 + +在多次调用时,建议使用缓存机制避免重复生成字典,提升性能: + +```javascript +import stcasc from 'switch-chinese'; + +// 第一次调用,生成字典 +let converter = stcasc(); +const cache = converter.cache; + +// 保存缓存到持久化存储(如 localStorage、文件等) +localStorage.setItem('stcasc-cache', JSON.stringify(cache)); + +// 后续调用,直接使用缓存 +const cachedData = JSON.parse(localStorage.getItem('stcasc-cache')); +converter = stcasc(cachedData); + +// 现在可以直接使用,无需重新生成字典 +const result = converter.traditionalized('简体中文'); +``` + +#### 自定义简繁转换词库 + +可以根据业务需求自定义简繁转换规则: + +```javascript +import stcasc from 'switch-chinese'; + +const customDict = { + '身份': '身分', + '转义': '跳脫', + '转换': '轉檔', + '软件': '軟體', + '硬件': '硬體', + '网络': '網路', + '服务器': '伺服器' +}; + +const { traditionalized, simplized } = stcasc({}, customDict); + +console.log(traditionalized('软件转换')); +// 输出: 軟體轉檔(使用自定义词库) +``` + +#### 禁用术语转换 + +默认情况下,库会转换一些特定术语(如「知识产权」→「智慧財產權」)。如需禁用此功能: + +```javascript +import stcasc from 'switch-chinese'; + +// 第三个参数设置为 true 以禁用术语转换 +const { traditionalized } = stcasc({}, {}, true); + +console.log(traditionalized('知识产权')); +// 输出: 知識産權(仅做字符转换,不转换术语) +``` + +#### 输出格式选项 + +库支持多种输出格式: + +```javascript +import stcasc, { OutputFormat } from 'switch-chinese'; + +const { traditionalized } = stcasc(); + +// 普通格式(默认) +const normal = traditionalized('简体中文'); +// 输出: 簡體中文 + +// 括号格式:同时显示原文和转换后的文本 +const bracket = traditionalized('简体中文', { format: OutputFormat.BRACKET }); +// 输出: 簡(简)體(体)中文 + +// Ruby 注音格式:适用于 HTML 显示 +const ruby = traditionalized('简体中文', { format: OutputFormat.RUBY }); +// 输出: 中文 +``` + +OutputFormat 枚举值: +- `OutputFormat.NORMAL` (0): 只输出转换后的结果(默认) +- `OutputFormat.BRACKET` (1): 输出「转换(原文)」格式 +- `OutputFormat.RUBY` (2): 输出 `` HTML 标签格式 + +### API 文档 + +#### stcasc(cache?, custom?, disableTerms?) + +主函数,用于创建转换器实例。 + +**参数:** + +- `cache` (Object, 可选): 缓存对象,用于避免重复生成字典 +- `custom` (Object, 可选): 自定义简繁转换词库 +- `disableTerms` (Boolean, 可选): 是否禁用术语转换,默认 `false` + +**返回值:** + +返回包含以下方法的对象: + +- `traditionalized(input, options?)`: 将简体中文转换为繁体中文 + - `input`: 可以是字符串、数组或对象 + - 字符串:直接转换返回新字符串 + - 数组:转换所有字符串元素,其他类型保持不变 + - 对象:递归转换所有字符串属性值,其他类型保持不变 +- `simplized(input, options?)`: 将繁体中文转换为简体中文 + - `input`: 可以是字符串、数组或对象 + - 支持的数据类型同 `traditionalized` +- `detect(text)`: 检测文本的中文类型,返回 ChineseType 枚举值 +- `cache`: 字典缓存对象 + +**Options 参数:** + +- `format` (Number, 可选): 输出格式,使用 `OutputFormat` 常量 + +#### ChineseType + +导出的常量对象,用于表示中文类型检测结果: + +```javascript +export const ChineseType = { + SIMPLIFIED: 0, // 简体中文 + TRADITIONAL: 1, // 繁体中文 + UNKNOWN: 2 // 未知类型 +}; +``` + +#### OutputFormat + +导出的常量对象,用于表示输出格式选项: + +```javascript +export const OutputFormat = { + NORMAL: 0, // 只输出转换后的结果 + BRACKET: 1, // 输出「转换(原文)」格式 + RUBY: 2 // 输出 HTML 标签格式 +}; +``` + +### 转换示例 + +#### 智能词组转换 + +该库支持基于上下文的智能词组转换,能够正确处理「一简多繁」的情况: + +```javascript +const { traditionalized } = stcasc(); + +// 智能识别词组边界 +console.log(traditionalized('香烟袅袅')); +// 输出: 香煙裊裊 + +console.log(traditionalized('里长面子')); +// 输出: 里長面子(「里长」是职务名称) + +console.log(traditionalized('吃干面')); +// 输出: 吃乾麵(「干面」是食物) + +console.log(traditionalized('把考卷发回来')); +// 输出: 把考卷發回來(「发」是动词) + +console.log(traditionalized('卷发')); +// 输出: 捲髮(「卷发」是发型) +``` + +#### 术语转换 + +内置常用的大陆简体与台湾正体术语转换: + +```javascript +const { traditionalized } = stcasc(); + +console.log(traditionalized('知识产权')); +// 输出: 智慧財產權 + +console.log(traditionalized('计算机软件')); +// 输出: 計算機軟體 + +console.log(traditionalized('网络服务器')); +// 输出: 網路伺服器 +``` + +### 技术特点 + +#### 高性能 + +- 使用字典树(Trie)优化词组匹配 +- 支持缓存机制,避免重复初始化 +- 纯 JavaScript 实现,执行效率高 + +#### 准确转换 + +- 内置大量简繁对照字符 +- 支持「一简多繁」智能识别 +- 基于词组的上下文分析 + +#### 易于集成 + +- ES Module 标准导出 +- TypeScript 类型支持(通过常量枚举) +- 零依赖,兼容性好 + +### 浏览器支持 + +支持所有现代浏览器及 Node.js 环境: + +- Chrome +- Firefox +- Safari +- Edge +- Node.js 12+ + +### 开源协议 + +MIT License + +### 相关链接 + +- [GitHub 仓库](https://github.com/hoothin/UserScripts/tree/master/Switch%20Traditional%20Chinese%20and%20Simplified%20Chinese/lib) +- [NPM 包地址](https://www.npmjs.com/package/switch-chinese) +- [问题反馈](https://github.com/hoothin/UserScripts/issues) + +### 关键词 + +简繁转换, 繁简转换, 简体中文, 繁体中文, 正体中文, 中文转换, 一简多繁, 简繁切换, 繁简切换, 中文检测, 智能分词, 自定义词库, 零依赖, 轻量级 + +--- + +## English + +Lightweight Chinese converter library for bidirectional conversion between Simplified and Traditional Chinese with intelligent word segmentation and one-to-many character mapping support. + +[![NPM](https://img.shields.io/npm/v/switch-chinese.svg)](https://www.npmjs.com/package/switch-chinese) [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://www.npmjs.com/package/switch-chinese) + +### Features + +- **Lightweight**: Zero dependencies, small footprint, excellent performance +- **Intelligent Conversion**: Context-aware word segmentation and accurate one-to-many character mapping +- **Multiple Data Types**: Supports string, array, and object conversion with automatic recursive processing +- **Custom Dictionary**: User-defined conversion rules support +- **Caching Mechanism**: Dictionary caching to avoid repeated initialization +- **Text Detection**: Automatic detection of Simplified Chinese, Traditional Chinese, or unknown text +- **Term Conversion**: Built-in mainland China and Taiwan terminology mapping +- **Zero Dependencies**: Pure JavaScript implementation, no third-party dependencies required + +### Installation + +Install via npm: + +```bash +npm install switch-chinese +``` + +Install via yarn: + +```bash +yarn add switch-chinese +``` + +### Quick Start + +#### Basic Usage + +```javascript +import stcasc from 'switch-chinese'; + +const { traditionalized, simplized, detect } = stcasc(); + +// Simplified to Traditional +const tc = traditionalized('简繁转换 繁简切换 香烟 香烟袅袅'); +console.log(tc); +// Output: 簡繁轉換 繁簡切換 香菸 香煙裊裊 + +// Traditional to Simplified +const sc = simplized('繁體中文'); +console.log(sc); +// Output: 繁体中文 +``` + +#### Text Detection + +```javascript +import stcasc, { ChineseType } from 'switch-chinese'; + +const { detect } = stcasc(); + +const type1 = detect('简体中文'); +if (type1 === ChineseType.SIMPLIFIED) { + console.log('Detected Simplified Chinese'); +} + +const type2 = detect('繁體中文'); +if (type2 === ChineseType.TRADITIONAL) { + console.log('Detected Traditional Chinese'); +} + +const type3 = detect('English'); +if (type3 === ChineseType.UNKNOWN) { + console.log('No Chinese text detected'); +} +``` + +ChineseType enumeration values: +- `ChineseType.SIMPLIFIED` (0): Simplified Chinese +- `ChineseType.TRADITIONAL` (1): Traditional Chinese +- `ChineseType.UNKNOWN` (2): Unknown type + +#### Converting Arrays and Objects + +The library supports converting all strings in arrays and objects, while preserving non-string values: + +```javascript +import stcasc from 'switch-chinese'; + +const { traditionalized, simplized } = stcasc(); + +// Convert array +const arr = ['简体中文', '软件', '网络', 123, true, null]; +const arrTc = traditionalized(arr); +console.log(arrTc); +// Output: ['簡體中文', '軟體', '網路', 123, true, null] + +// Convert object +const obj = { + title: '简体中文标题', + description: '这是一个简体中文描述', + count: 100, + active: true, + tags: ['软件', '网络', '服务器'] +}; +const objTc = traditionalized(obj); +console.log(objTc); +// Output: { +// title: '簡體中文標題', +// description: '這是一個簡體中文描述', +// count: 100, +// active: true, +// tags: ['軟體', '網路', '伺服器'] +// } + +// Convert nested structures +const nested = { + user: { + name: '简体名称', + profile: { + bio: '这是简体中文简介', + skills: ['软件开发', '网络管理'] + } + }, + count: 42 +}; +const nestedTc = traditionalized(nested); +// All string property values will be converted, other types remain unchanged +``` + +### Advanced Usage + +#### Performance Optimization with Caching + +For multiple conversions, use caching mechanism to improve performance: + +```javascript +import stcasc from 'switch-chinese'; + +// First call, generate dictionary +let converter = stcasc(); +const cache = converter.cache; + +// Save cache to persistent storage (e.g., localStorage, file system) +localStorage.setItem('stcasc-cache', JSON.stringify(cache)); + +// Subsequent calls, use cached data +const cachedData = JSON.parse(localStorage.getItem('stcasc-cache')); +converter = stcasc(cachedData); + +// Now you can use it directly without regenerating dictionary +const result = converter.traditionalized('简体中文'); +``` + +#### Custom Conversion Dictionary + +Customize conversion rules according to your needs: + +```javascript +import stcasc from 'switch-chinese'; + +const customDict = { + '身份': '身分', + '转义': '跳脫', + '转换': '轉檔', + '软件': '軟體', + '硬件': '硬體', + '网络': '網路', + '服务器': '伺服器' +}; + +const { traditionalized, simplized } = stcasc({}, customDict); + +console.log(traditionalized('软件转换')); +// Output: 軟體轉檔 (using custom dictionary) +``` + +#### Disable Term Conversion + +By default, the library converts specific terms (e.g., "知识产权" → "智慧財產權"). To disable this feature: + +```javascript +import stcasc from 'switch-chinese'; + +// Set the third parameter to true to disable term conversion +const { traditionalized } = stcasc({}, {}, true); + +console.log(traditionalized('知识产权')); +// Output: 知識産權 (character conversion only, no term conversion) +``` + +#### Output Formats + +The library supports multiple output formats: + +```javascript +import stcasc, { OutputFormat } from 'switch-chinese'; + +const { traditionalized } = stcasc(); + +// Normal format (default) +const normal = traditionalized('简体中文'); +// Output: 簡體中文 + +// Bracket format: shows both original and converted text +const bracket = traditionalized('简体中文', { format: OutputFormat.BRACKET }); +// Output: 簡(简)體(体)中文 + +// Ruby annotation format: for HTML display +const ruby = traditionalized('简体中文', { format: OutputFormat.RUBY }); +// Output: 中文 +``` + +OutputFormat enumeration values: +- `OutputFormat.NORMAL` (0): Output converted result only (default) +- `OutputFormat.BRACKET` (1): Output in "converted(original)" format +- `OutputFormat.RUBY` (2): Output in `` HTML tag format + +### API Reference + +#### stcasc(cache?, custom?, disableTerms?) + +Main function to create a converter instance. + +**Parameters:** + +- `cache` (Object, optional): Cache object to avoid regenerating dictionary +- `custom` (Object, optional): Custom Simplified-Traditional conversion dictionary +- `disableTerms` (Boolean, optional): Whether to disable term conversion, default `false` + +**Returns:** + +An object containing the following methods: + +- `traditionalized(input, options?)`: Convert Simplified Chinese to Traditional Chinese + - `input`: Can be a string, array, or object + - String: Directly converts and returns a new string + - Array: Converts all string elements, other types remain unchanged + - Object: Recursively converts all string property values, other types remain unchanged +- `simplized(input, options?)`: Convert Traditional Chinese to Simplified Chinese + - `input`: Can be a string, array, or object + - Supports the same data types as `traditionalized` +- `detect(text)`: Detect Chinese text type, returns ChineseType enumeration value +- `cache`: Dictionary cache object + +**Options parameter:** + +- `format` (Number, optional): Output format, use `OutputFormat` constants + +#### ChineseType + +Exported constant object representing text detection results: + +```javascript +export const ChineseType = { + SIMPLIFIED: 0, // Simplified Chinese + TRADITIONAL: 1, // Traditional Chinese + UNKNOWN: 2 // Unknown type +}; +``` + +#### OutputFormat + +Exported constant object representing output format options: + +```javascript +export const OutputFormat = { + NORMAL: 0, // Output converted result only + BRACKET: 1, // Output "converted(original)" format + RUBY: 2 // Output HTML tag format +}; +``` + +### Conversion Examples + +#### Intelligent Word Segmentation + +The library supports context-aware intelligent word segmentation, accurately handling one-to-many character mappings: + +```javascript +const { traditionalized } = stcasc(); + +// Intelligent phrase boundary recognition +console.log(traditionalized('香烟袅袅')); +// Output: 香煙裊裊 + +console.log(traditionalized('里长面子')); +// Output: 里長面子 ("里长" is a position title) + +console.log(traditionalized('吃干面')); +// Output: 吃乾麵 ("干面" is a food) + +console.log(traditionalized('把考卷发回来')); +// Output: 把考卷發回來 ("发" is a verb in this context) + +console.log(traditionalized('卷发')); +// Output: 捲髮 ("卷发" is a hairstyle) +``` + +#### Term Conversion + +Built-in conversion for common mainland China and Taiwan terminology: + +```javascript +const { traditionalized } = stcasc(); + +console.log(traditionalized('知识产权')); +// Output: 智慧財產權 + +console.log(traditionalized('计算机软件')); +// Output: 計算機軟體 + +console.log(traditionalized('网络服务器')); +// Output: 網路伺服器 +``` + +### Technical Highlights + +#### High Performance + +- Dictionary tree (Trie) optimization for phrase matching +- Caching mechanism support to avoid repeated initialization +- Pure JavaScript implementation for high execution efficiency + +#### Accurate Conversion + +- Extensive built-in Simplified-Traditional character mappings +- Intelligent recognition for one-to-many character conversions +- Context-based phrase analysis + +#### Easy Integration + +- ES Module standard export +- TypeScript support through constant enumerations +- Zero dependencies, excellent compatibility + +### Browser Support + +Supports all modern browsers and Node.js environments: + +- Chrome +- Firefox +- Safari +- Edge +- Node.js 12+ + +### License + +MIT License + +### Links + +- [GitHub Repository](https://github.com/hoothin/UserScripts/tree/master/Switch%20Traditional%20Chinese%20and%20Simplified%20Chinese/lib) +- [NPM Package](https://www.npmjs.com/package/switch-chinese) +- [Issue Tracker](https://github.com/hoothin/UserScripts/issues) + +### Keywords + +Chinese Converter, Simplified Chinese, Traditional Chinese, Chinese Translation, Character Detection, Text Converter, Language Converter, i18n, Localization, Ruby Annotation, One-to-Many Mapping, Intelligent Word Segmentation, Custom Dictionary, Zero Dependencies, Lightweight + +--- + +## 繁體中文 + +簡繁體中文智能轉換庫 - 支援簡體中文與正體中文雙向轉換,基於詞組的智能分詞處理「一簡多繁」問題 + +[![NPM](https://img.shields.io/npm/v/switch-chinese.svg)](https://www.npmjs.com/package/switch-chinese) [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://www.npmjs.com/package/switch-chinese) + +### 特色 + +- **輕量級**:零依賴,體積小,效能優異 +- **智能轉換**:支援基於詞組的智能分詞和「一簡多繁」精準轉換 +- **多種資料類型**:支援字串、陣列、物件的轉換,自動遞迴處理巢狀結構 +- **自訂詞庫**:允許使用者自訂簡繁轉換詞彙 +- **快取機制**:支援字典快取,避免重複初始化 +- **簡繁檢測**:自動檢測文字是簡體中文、繁體中文還是未知類型 +- **術語轉換**:內建大陸簡體與台灣正體的常用術語轉換 +- **無依賴**:純 JavaScript 實現,無需任何第三方依賴 + +### 安裝 + +使用 npm 安裝: + +```bash +npm install switch-chinese +``` + +使用 yarn 安裝: + +```bash +yarn add switch-chinese +``` + +### 快速開始 + +#### 基礎用法 + +```javascript +import stcasc from 'switch-chinese'; + +const { traditionalized, simplized, detect } = stcasc(); + +// 簡體轉繁體 +const tc = traditionalized('简繁转换 繁简切换 香烟 香烟袅袅'); +console.log(tc); +// 輸出: 簡繁轉換 繁簡切換 香菸 香煙裊裊 + +// 繁體轉簡體 +const sc = simplized('繁體中文'); +console.log(sc); +// 輸出: 繁体中文 +``` + +#### 檢測中文類型 + +```javascript +import stcasc, { ChineseType } from 'switch-chinese'; + +const { detect } = stcasc(); + +const type1 = detect('简体中文'); +if (type1 === ChineseType.SIMPLIFIED) { + console.log('檢測到簡體中文'); +} + +const type2 = detect('繁體中文'); +if (type2 === ChineseType.TRADITIONAL) { + console.log('檢測到繁體中文'); +} + +const type3 = detect('English'); +if (type3 === ChineseType.UNKNOWN) { + console.log('未檢測到中文'); +} +``` + +ChineseType 列舉值: +- `ChineseType.SIMPLIFIED` (0): 簡體中文 +- `ChineseType.TRADITIONAL` (1): 繁體中文 +- `ChineseType.UNKNOWN` (2): 未知類型 + +#### 轉換陣列和物件 + +函式庫支援轉換陣列和物件中的所有字串,非字串值保持原樣: + +```javascript +import stcasc from 'switch-chinese'; + +const { traditionalized, simplized } = stcasc(); + +// 轉換陣列 +const arr = ['简体中文', '软件', '网络', 123, true, null]; +const arrTc = traditionalized(arr); +console.log(arrTc); +// 輸出: ['簡體中文', '軟體', '網路', 123, true, null] + +// 轉換物件 +const obj = { + title: '简体中文标题', + description: '这是一个简体中文描述', + count: 100, + active: true, + tags: ['软件', '网络', '服务器'] +}; +const objTc = traditionalized(obj); +console.log(objTc); +// 輸出: { +// title: '簡體中文標題', +// description: '這是一個簡體中文描述', +// count: 100, +// active: true, +// tags: ['軟體', '網路', '伺服器'] +// } + +// 轉換巢狀結構 +const nested = { + user: { + name: '简体名称', + profile: { + bio: '这是简体中文简介', + skills: ['软件开发', '网络管理'] + } + }, + count: 42 +}; +const nestedTc = traditionalized(nested); +// 所有字串屬性值都會被轉換,數字等其他類型保持不變 +``` + +### 進階用法 + +#### 使用快取最佳化效能 + +在多次呼叫時,建議使用快取機制避免重複生成字典,提升效能: + +```javascript +import stcasc from 'switch-chinese'; + +// 第一次呼叫,生成字典 +let converter = stcasc(); +const cache = converter.cache; + +// 將快取儲存至持久化儲存(如 localStorage、檔案等) +localStorage.setItem('stcasc-cache', JSON.stringify(cache)); + +// 後續呼叫,直接使用快取 +const cachedData = JSON.parse(localStorage.getItem('stcasc-cache')); +converter = stcasc(cachedData); + +// 現在可以直接使用,無需重新生成字典 +const result = converter.traditionalized('简体中文'); +``` + +#### 自訂簡繁轉換詞庫 + +可以根據業務需求自訂簡繁轉換規則: + +```javascript +import stcasc from 'switch-chinese'; + +const customDict = { + '身份': '身分', + '转义': '跳脫', + '转换': '轉檔', + '软件': '軟體', + '硬件': '硬體', + '网络': '網路', + '服务器': '伺服器' +}; + +const { traditionalized, simplized } = stcasc({}, customDict); + +console.log(traditionalized('软件转换')); +// 輸出: 軟體轉檔(使用自訂詞庫) +``` + +#### 停用術語轉換 + +預設情況下,函式庫會轉換一些特定術語(如「知识产权」→「智慧財產權」)。如需停用此功能: + +```javascript +import stcasc from 'switch-chinese'; + +// 第三個參數設定為 true 以停用術語轉換 +const { traditionalized } = stcasc({}, {}, true); + +console.log(traditionalized('知识产权')); +// 輸出: 知識産權(僅做字元轉換,不轉換術語) +``` + +#### 輸出格式選項 + +函式庫支援多種輸出格式: + +```javascript +import stcasc, { OutputFormat } from 'switch-chinese'; + +const { traditionalized } = stcasc(); + +// 普通格式(預設) +const normal = traditionalized('简体中文'); +// 輸出: 簡體中文 + +// 括號格式:同時顯示原文和轉換後的文字 +const bracket = traditionalized('简体中文', { format: OutputFormat.BRACKET }); +// 輸出: 簡(简)體(体)中文 + +// Ruby 注音格式:適用於 HTML 顯示 +const ruby = traditionalized('简体中文', { format: OutputFormat.RUBY }); +// 輸出: 中文 +``` + +OutputFormat 列舉值: +- `OutputFormat.NORMAL` (0): 只輸出轉換後的結果(預設) +- `OutputFormat.BRACKET` (1): 輸出「轉換(原文)」格式 +- `OutputFormat.RUBY` (2): 輸出 `` HTML 標籤格式 + +### API 文件 + +#### stcasc(cache?, custom?, disableTerms?) + +主函式,用於建立轉換器實例。 + +**參數:** + +- `cache` (Object, 可選): 快取物件,用於避免重複生成字典 +- `custom` (Object, 可選): 自訂簡繁轉換詞庫 +- `disableTerms` (Boolean, 可選): 是否停用術語轉換,預設 `false` + +**回傳值:** + +回傳包含以下方法的物件: + +- `traditionalized(input, options?)`: 將簡體中文轉換為繁體中文 + - `input`: 可以是字串、陣列或物件 + - 字串:直接轉換並回傳新字串 + - 陣列:轉換所有字串元素,其他類型保持不變 + - 物件:遞迴轉換所有字串屬性值,其他類型保持不變 +- `simplized(input, options?)`: 將繁體中文轉換為簡體中文 + - `input`: 可以是字串、陣列或物件 + - 支援的資料類型同 `traditionalized` +- `detect(text)`: 檢測文字的中文類型,回傳 ChineseType 列舉值 +- `cache`: 字典快取物件 + +**Options 參數:** + +- `format` (Number, 可選): 輸出格式,使用 `OutputFormat` 常數 + +#### ChineseType + +匯出的常數物件,用於表示中文類型檢測結果: + +```javascript +export const ChineseType = { + SIMPLIFIED: 0, // 簡體中文 + TRADITIONAL: 1, // 繁體中文 + UNKNOWN: 2 // 未知類型 +}; +``` + +#### OutputFormat + +匯出的常數物件,用於表示輸出格式選項: + +```javascript +export const OutputFormat = { + NORMAL: 0, // 只輸出轉換後的結果 + BRACKET: 1, // 輸出「轉換(原文)」格式 + RUBY: 2 // 輸出 HTML 標籤格式 +}; +``` + +### 轉換範例 + +#### 智能詞組轉換 + +本函式庫支援基於上下文的智能詞組轉換,能夠正確處理「一簡多繁」的情況: + +```javascript +const { traditionalized } = stcasc(); + +// 智能識別詞組邊界 +console.log(traditionalized('香烟袅袅')); +// 輸出: 香煙裊裊 + +console.log(traditionalized('里长面子')); +// 輸出: 里長面子(「里長」是職務名稱) + +console.log(traditionalized('吃干面')); +// 輸出: 吃乾麵(「乾麵」是食物) + +console.log(traditionalized('把考卷发回来')); +// 輸出: 把考卷發回來(「發」是動詞) + +console.log(traditionalized('卷发')); +// 輸出: 捲髮(「捲髮」是髮型) +``` + +#### 術語轉換 + +內建常用的大陸簡體與台灣正體術語轉換: + +```javascript +const { traditionalized } = stcasc(); + +console.log(traditionalized('知识产权')); +// 輸出: 智慧財產權 + +console.log(traditionalized('计算机软件')); +// 輸出: 計算機軟體 + +console.log(traditionalized('网络服务器')); +// 輸出: 網路伺服器 +``` + +### 技術特點 + +#### 高效能 + +- 使用字典樹(Trie)最佳化詞組比對 +- 支援快取機制,避免重複初始化 +- 純 JavaScript 實現,執行效率高 + +#### 精準轉換 + +- 內建大量簡繁對照字元 +- 支援「一簡多繁」智能識別 +- 基於詞組的上下文分析 + +#### 易於整合 + +- ES Module 標準匯出 +- TypeScript 類型支援(透過常數列舉) +- 零依賴,相容性佳 + +### 瀏覽器支援 + +支援所有現代瀏覽器及 Node.js 環境: + +- Chrome +- Firefox +- Safari +- Edge +- Node.js 12+ + +### 開源授權 + +MIT License + +### 相關連結 + +- [GitHub 儲存庫](https://github.com/hoothin/UserScripts/tree/master/Switch%20Traditional%20Chinese%20and%20Simplified%20Chinese/lib) +- [NPM 套件位址](https://www.npmjs.com/package/switch-chinese) +- [問題回報](https://github.com/hoothin/UserScripts/issues) + +### 關鍵字 + +簡繁轉換, 繁簡轉換, 簡體中文, 繁體中文, 正體中文, 中文轉換, 一簡多繁, 簡繁切換, 繁簡切換, 中文檢測, 智能分詞, 自訂詞庫, 零依賴, 輕量級 diff --git a/Switch Traditional Chinese and Simplified Chinese/lib/stcasc.d.ts b/Switch Traditional Chinese and Simplified Chinese/lib/stcasc.d.ts new file mode 100644 index 00000000000..350324519b8 --- /dev/null +++ b/Switch Traditional Chinese and Simplified Chinese/lib/stcasc.d.ts @@ -0,0 +1,167 @@ +/** + * Chinese character type enumeration + */ +export declare const ChineseType: { + /** Simplified Chinese */ + readonly SIMPLIFIED: 0; + /** Traditional Chinese */ + readonly TRADITIONAL: 1; + /** Unknown type */ + readonly UNKNOWN: 2; +}; + +/** + * Output format enumeration + */ +export declare const OutputFormat: { + /** Normal output - only the converted result */ + readonly NORMAL: 0; + /** Bracket format - outputs「Simplified(Traditional)」or「Traditional(Simplified)」*/ + readonly BRACKET: 1; + /** Ruby annotation format - outputs SimplifiedTraditional */ + readonly RUBY: 2; +}; + +/** + * Conversion options + */ +export interface ConversionOptions { + /** + * Output format + * @default OutputFormat.NORMAL + */ + format?: 0 | 1 | 2; +} + +/** + * Tree node for combination dictionary + */ +interface CombTreeNode { + end?: string; + [key: string]: CombTreeNode | string | undefined; +} + +/** + * Cache object for storing conversion dictionaries + */ +export interface ConversionCache { + sc2tcCombTree?: Record; + tc2scCombTree?: Record; + stDict?: Record; + tsDict?: Record; +} + +/** + * Custom dictionary mapping + * Key: source text (simplified or traditional) + * Value: target text (can be string or array of strings for multiple mappings) + */ +export type CustomDictionary = Record; + +/** + * Result object returned by stcasc function + */ +export interface StcascConverter { + /** + * Convert traditional Chinese to simplified Chinese + * @param text - String to convert + * @param options - Conversion options + * @returns Converted simplified Chinese string + */ + simplized(text: string, options?: ConversionOptions): string; + + /** + * Convert traditional Chinese to simplified Chinese (array version) + * @param data - Array to convert (converts all strings in the array) + * @param options - Conversion options + * @returns Array with converted strings + */ + simplized(data: T, options?: ConversionOptions): T; + + /** + * Convert traditional Chinese to simplified Chinese (object version) + * @param data - Object to convert (converts all string property values) + * @param options - Conversion options + * @returns Object with converted string values + */ + simplized>(data: T, options?: ConversionOptions): T; + + /** + * Convert simplified Chinese to traditional Chinese + * @param text - String to convert + * @param options - Conversion options + * @returns Converted traditional Chinese string + */ + traditionalized(text: string, options?: ConversionOptions): string; + + /** + * Convert simplified Chinese to traditional Chinese (array version) + * @param data - Array to convert (converts all strings in the array) + * @param options - Conversion options + * @returns Array with converted strings + */ + traditionalized(data: T, options?: ConversionOptions): T; + + /** + * Convert simplified Chinese to traditional Chinese (object version) + * @param data - Object to convert (converts all string property values) + * @param options - Conversion options + * @returns Object with converted string values + */ + traditionalized>(data: T, options?: ConversionOptions): T; + + /** + * Detect Chinese text type + * @param text - Text to detect + * @returns ChineseType value (0=SIMPLIFIED, 1=TRADITIONAL, 2=UNKNOWN) + */ + detect(text: string): 0 | 1 | 2; + + /** + * Cached conversion dictionaries + */ + cache: ConversionCache; +} + +/** + * Initialize Chinese converter with optional cache and custom dictionary + * + * @param cache - Optional cache object to reuse conversion dictionaries + * @param custom - Optional custom dictionary for special term conversions + * @param disableTerms - If true, disables built-in term conversions + * @returns Converter object with conversion methods + * + * @example + * ```typescript + * import stcasc from 'switch-chinese'; + * + * const converter = stcasc(); + * const traditional = converter.traditionalized('简体中文'); + * const simplified = converter.simplized('繁體中文'); + * const type = converter.detect('繁體中文'); + * ``` + * + * @example + * ```typescript + * // With custom dictionary + * const converter = stcasc({}, { + * '自定义词': '自訂詞', + * '程序': ['程式', '程序'] + * }); + * ``` + * + * @example + * ```typescript + * // With output format + * const converter = stcasc(); + * const result = converter.traditionalized('简体', { format: 1 }); + * // Output: 簡體(简体) + * ``` + */ +declare function stcasc( + cache?: ConversionCache, + custom?: CustomDictionary, + disableTerms?: boolean +): StcascConverter; + +export default stcasc; diff --git a/Switch Traditional Chinese and Simplified Chinese/lib/stcasc.lib.js b/Switch Traditional Chinese and Simplified Chinese/lib/stcasc.lib.js new file mode 100644 index 00000000000..2256dc7222a --- /dev/null +++ b/Switch Traditional Chinese and Simplified Chinese/lib/stcasc.lib.js @@ -0,0 +1,988 @@ +'use strict'; +export const ChineseType = { + SIMPLIFIED: 0, + TRADITIONAL: 1, + UNKNOWN: 2 +}; + +export const OutputFormat = { + NORMAL: 0, // 只输出转换后的结果 + BRACKET: 1, // 输出「简(繁)」或「繁(简)」格式 + RUBY: 2 // 输出 格式 +}; + +const scStr = '万与丑专业丛东丝丢两严丧个丰临为为丽举么么义乌乐乔习乡书买乱争于亏云亘亚产产亩亲亵亸亿仅仆从仑仓仪们价众众优伙会伛伞伟传伡伣伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬侭俣俦俨俩俪俫俭借债倾偬偻偾偿傤傥傧储傩儿克兑兖党兰关兴兹养兽冁内冈册冗写军农冢冯冲冲决况冻净凄准凉凌减凑凛几凤处凫凭凯凶击凿刍划刘则刚创删别刬刭制刹刽刾刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勖勚匀匦匮区医华协单卖卜卢卤卧卫却卷厂厅历历厉压厌厍厐厕厘厠厢厣厦厨厩厮县叁参叆叇双发发变叙叠只台叶号叹叽吁后吓吕吗吨听启吴呆呐呒呓呕呖呗员呙呛呜周咏咙咛咝咤咨咸响哑哒哓哔哕哗哙哜哝哟唇唉唛唝唠唡唢唤啧啬啭啮啯啰啴啸喂喷喽喾嗫嗳嘘嘤嘱噜嚣团园囱围囵国图圆圣圹场坏块坚坛坛坛坛坜坝坞坟坠垄垅垆垒垦垩垫垭垯垱垲垴埘埙埚堑堕塆墙墻壊壮声壳壶壸処备复复够头夸夹夺奁奂奋奖奥奬妆妇妈妩妪妫姗姜姹娄娅娆娇娈娱娲娴婳婴婵婶媪媭嫒嫔嫱嬀嬷孙学孪宁宁宝实宠审宪宫宽宽宾寝对寻导寿将尔尘尝尧尴尸尽尽层屃屉届属屡屦屿岁岂岖岗岘岚岛岩岭岳岽岿峃峄峡峣峤峥峦峰崂崃崄崭嵘嵚嵝巅巨巩巯币布帅师帏帐帘帜带帧帮帱帻帼幂干干并并广庄庆庐庑库应庙庞废庼廏廪开异弃弑张弥弪弯弹强归当录彝彟彦彨彻征径徕御忆忏志忧念忾怀态怂怃怄怅怆怜总怼怿恋恒恳恶恶恸恹恺恻恼恽悦悫悬悭悮悯惊惧惨惩惫惬惭惮惯愠愤愦愿慑慭懑懒懔戆戋戏戗战戬户扎扑托扦执扩扪扫扬扰抚抛抟抠抡抢护报抬抻担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捂捝捞损捡换捣据捻掳掴掷掸掺掼揽揾揿搀搁搂搄搅携摄摅摆摇摈摊撄撑撵撷撸撺擜擞攒敌敍敚敛敩数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权杠条来杨杩杰松板极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桠桡桢档桤桥桦桧桨桩桪梁梦梼梾梿检棁棂棱椁椝椟椠椢椤椫椭椮楼榄榅榇榈榉榝槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴殻毁毂毕毙毡毵氇气氢氩氲汇汇汉污汤汹沟没沣沤沥沦沧沨沩沪泄泞注泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涚涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溁溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪潆潇潋潍潙潜潨潴澛澜濑濒灏灭灯灵灶灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烟烦烧烨烩烫烬热焕焖焘煴爱爷牍牦牵牺犊状犷犸犹狈狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珐珑珰珲琎琏琐琼瑶瑷瑸璎瓒瓮瓯産电画畅畴疖疗疟疠疡疬疭疮疯疱疴痈痉痒痖痨痪痫痴痹瘅瘆瘉瘗瘘瘪瘫瘾瘿癞癣癫皋皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑睾瞆瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硵硷碍碛碜碱礼祃祎祢祯祷祸禀禄禅离秃秆种秘积称秸秽秾稆税稣稳穑穞穷窃窍窎窑窜窝窥窦窭竖竞竪笃笋笔笕笺笼笾筑筚筛筜筝筹筼签签筿简箓箦箧箨箩箪箫篑篓篮篯篱簖籁籴类籼粜粝粤粪粮糁糇糍系系紧绝絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络絶绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡群翘翙翚翱耢耧耸耻聂聋职聍联聩聪肃肠肤肮肴肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑膻臜致舆舍舣舰舱舻艰艳艺节芈芗芜芦苁苇苈苋苌苍苎苏苧苹范茎茏茑茔茕茧荆荐荙荚荛荜荝荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒀蒇蒉蒋蒌蒏蓝蓟蓠蓣蓥蓦蔂蔷蔹蔺蔼蕰蕲蕴薮藓蘖虏虑虚虫虬虮虱虽虾虿蚀蚁蚂蚃蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衆衔补表衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯訚詟誉誊说说谣讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞跡践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯軆輼车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辟辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郏郐郑郓郦郧郸酂酝酦酱酽酾酿采释里里鈎鉴鉴銮鋭録錾钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链链铿销锁锂锃锄锅锆锇锈锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶长门闩闪闫闬闭问闯闰闱闲闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陦陧陨险随隐隶隽难雇雏雠雳雾霁霉霡霭靓靔静面靥鞑鞒鞯鞲韦韧韨韩韪韫韬韵頽页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕駡马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓鬶魇魉鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鳤鷀鷄鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹾麦麸麹麽黄黉黡黩黪黾鼋鼌鼍鼹齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟酸'; +const tcStr = '萬與醜專業叢東絲丟兩嚴喪個豐臨為爲麗舉麽麼義烏樂喬習鄉書買亂爭於虧雲亙亞産產畝親褻嚲億僅僕從侖倉儀們價衆眾優夥會傴傘偉傳俥俔傷倀倫傖僞佇體餘傭僉俠侶僥偵側僑儈儕儂儘俁儔儼倆儷倈儉藉債傾傯僂僨償儎儻儐儲儺兒剋兌兗黨蘭關興茲養獸囅內岡冊宂寫軍農塚馮沖衝決況凍淨淒準涼淩減湊凜幾鳳處鳧憑凱兇擊鑿芻劃劉則剛創刪別剗剄製剎劊㓨劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳勗勩勻匭匱區醫華協單賣蔔盧鹵臥衛卻捲廠廳曆歷厲壓厭厙龎廁釐廁廂厴廈廚廄廝縣叄參靉靆雙發髮變敘疊隻臺葉號嘆嘰籲後嚇呂嗎噸聽啟吳獃吶嘸囈嘔嚦唄員咼嗆嗚週詠嚨嚀噝吒諮鹹響啞噠嘵嗶噦嘩噲嚌噥喲脣欸嘜嗊嘮啢嗩喚嘖嗇囀齧嘓囉嘽嘯餵噴嘍嚳囁噯噓嚶囑嚕囂團園囪圍圇國圖圓聖壙場壞塊堅壇罎罈壜壢壩塢墳墜壟壠壚壘墾堊墊埡墶壋塏堖塒壎堝塹墮壪牆牆壞壯聲殼壺壼處備複復夠頭誇夾奪奩奐奮獎奧獎妝婦媽嫵嫗媯姍薑奼婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬃嬡嬪嬙媯嬤孫學孿寧甯寶實寵審憲宮寬寛賓寢對尋導壽將爾塵嘗堯尷屍盡儘層屭屜屆屬屢屨嶼歲豈嶇崗峴嵐島巖嶺嶽崬巋嶨嶧峽嶢嶠崢巒峯嶗崍嶮嶄嶸嶔嶁巔鉅鞏巰幣佈帥師幃帳簾幟帶幀幫幬幘幗冪幹乾並併廣莊慶廬廡庫應廟龐廢廎廄廩開異棄弒張彌弳彎彈強歸當錄彜彠彥彲徹徵徑徠禦憶懺誌憂唸愾懷態慫憮慪悵愴憐總懟懌戀恆懇惡噁慟懨愷惻惱惲悅愨懸慳悞憫驚懼慘懲憊愜慚憚慣慍憤憒願懾憖懣懶懍戇戔戲戧戰戩戶紮撲託扡執擴捫掃揚擾撫拋摶摳掄搶護報擡捵擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏摀挩撈損撿換搗據撚擄摑擲撣摻摜攬搵撳攙擱摟揯攪攜攝攄擺搖擯攤攖撐攆擷擼攛㩵擻攢敵敘敓斂斆數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權槓條來楊榪傑鬆闆極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒椏橈楨檔榿橋樺檜槳樁樳樑夢檮棶槤檢梲櫺稜槨槼櫝槧槶欏樿橢槮樓欖榲櫬櫚櫸樧檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆殼毀轂畢斃氈毿氌氣氫氬氳彙匯漢汙湯洶溝沒灃漚瀝淪滄渢溈滬洩濘註淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧涗濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕濚潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦瀠瀟瀲濰溈潛潀瀦瀂瀾瀨瀕灝滅燈靈竈災燦煬爐燉煒熗點煉熾爍爛烴燭煙菸煩燒燁燴燙燼熱煥燜燾熅愛爺牘犛牽犧犢狀獷獁猶狽獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽琺瓏璫琿璡璉瑣瓊瑤璦璸瓔瓚甕甌產電畫暢疇癤療瘧癘瘍癧瘲瘡瘋皰痾癰痙癢瘂癆瘓癇癡痺癉瘮癒瘞瘻癟癱癮癭癩癬癲臯皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼睪瞶瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確磠鹼礙磧磣堿禮禡禕禰禎禱禍稟祿禪離禿稈種祕積稱稭穢穠穭稅穌穩穡穭窮竊竅窵窯竄窩窺竇窶豎競豎篤筍筆筧箋籠籩築篳篩簹箏籌篔簽籤篠簡籙簀篋籜籮簞簫簣簍籃籛籬籪籟糴類秈糶糲粵糞糧糝餱餈係繫緊絕縶糹糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺紲紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏縧繼綈績緒綾緓續綺緋綽鞝緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨羣翹翽翬翺耮耬聳恥聶聾職聹聯聵聰肅腸膚骯餚腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏羶臢緻輿捨艤艦艙艫艱豔藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇薴蘋範莖蘢蔦塋煢繭荊薦薘莢蕘蓽萴蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蒕蕆蕢蔣蔞醟藍薊蘺蕷鎣驀虆薔蘞藺藹薀蘄蘊藪蘚櫱虜慮虛蟲虯蟣蝨雖蝦蠆蝕蟻螞蠁蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁眾銜補錶襯袞襖裊褘襪襲襏裝襠褌褳襝褲襉褸襤襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶誾讋譽謄說説謡訁計訂訃認譏訐訌討讓訕訖託訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談讅誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗謚謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶贓貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗贊讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒蹟踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀體轀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭闢辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郟鄶鄭鄆酈鄖鄲酇醞醱醬釅釃釀採釋裏裡鉤鑒鑑鑾銳錄鏨釒釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鉅鈍鈔鍾鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鈎鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鉋鈰鉉鉈鉍鈮鈹鐸鉶銬銠鉺鋩錏銪鋮鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鎩鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鍊鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銹銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺鍩錯錨錛錡鍀錁錕錩錫錮鑼錘錐錦鑕鍁錈鍃錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鐨鎇鏌鎮鎛鎘鑷钂鐫鎳鎿鎦鎬鎊鎰鎵鑌鎔鏢鏜鏝鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔钀鑞鑱鑲長門閂閃閆閈閉問闖閏闈閑閒閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隯隉隕險隨隱隸雋難僱雛讎靂霧霽黴霢靄靚靝靜麵靨韃鞽韉韝韋韌韍韓韙韞韜韻頹頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顔顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飈飛饗饜飠飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢罵馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢鬹魘魎魚魛魢魷魨魯魴䰾魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鰺鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鼈鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣䲘鶿雞鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鷽鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鵾鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶖鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺䴉鸇鷹鸌鸏鸛鸘鹺麥麩麴麼黃黌黶黷黲黽黿鼂鼉鼴齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜痠'; +const oc2tc = { + "床": "牀", + "為": "爲", + "產": "産", + '眾': '衆', + '寧': '甯', + '啟': '啓', + '鏽': '銹', + '閱': '閲', + '顏': '顔', + '嘆': '歎', + '線': '缐綫', + '綠': '緑', + '幸': '倖', + '聽': '聼聴' +}; +const sc2tc = { + '巨':[ + '巨', + ['鉅','巨款','巨富','巨细','巨子'] + ], + '折':[ + '折', + ['摺','折叠','折纸','存折','对折','折痕','奏折','折页','折扇'] + ], + '霉':[ + '霉', + ['黴','青霉素','红霉素','霉菌','氯霉素','绿霉素'] + ], + '捆':[ + '捆', + ['綑','捆绑','捆扎'] + ], + '升':[ + '升', + ['昇','升华','提升','高升','歌舞升平'] + ], + '划':[ + '劃', + ['划','划龙舟','划船','划算','划不来'] + ], + '姜':[ + '姜', + ['薑','姜片','姜葱','生姜','姜汁','姜母鸭'] + ], + '御':[ + '禦', + ['御','御制','御用'] + ], + '毁':[ + '毀', + ['燬','烧毁','焚毁','炸毁','销毁'], + ['譭','诋毁','毁谤'] + ], + '胡':[ + '胡', + ['鬍','胡须','胡子','刮胡刀'], + ['衚','胡同'] + ], + '须':[ + '須', + ['鬚','剃须刀','胡须','须发','根须'] + ], + '同':[ + '同', + ['衕','衚衕'] + ], + '叹':[ + '歎', + ['嘆','悲叹','叹息','仰天长叹','叹惋'] + ], + '荡':[ + '蕩', + ['盪','空荡荡','回荡','动荡','荡漾','震荡'] + ], + '凄':[ + '淒', + ['悽','凄厉','凄惨','悲凄','凄苦'] + ], + '栗':[ + '栗', + ['慄','战栗','颤栗','不寒而栗'] + ], + '沈':[ + '沈', + ['瀋','沈阳'] + ], + '苏':[ + '蘇', + ['甦','复苏','苏醒'] + ], + '卤':[ + '滷', + ['鹵','卤钝','卤莽','粗卤','卤地'] + ], + '准':[ + '準', + ['准','批准','准许','不准','准予'] + ], + '杯':[ + '杯', + ['盃','奖杯','世界杯'] + ], + '馈':[ + '饋', + ['餽','馈赠'] + ], + '向':[ + '向', + ['嚮','向往','向导'] + ], + '搜':[ + '搜', + ['蒐','蒐集','蒐羅'] + ], + '哗':[ + '嘩', + ['譁','哗变','喧哗','哗众取宠'] + ], + '够':[ + '夠', + ['搆','够不到'] + ], + '范':[ + '范', + ['範','模范','范本','示范','规范','范围'] + ], + '喂':[ + '喂', + ['餵','喂养','喂饱','饲喂'] + ], + '迹':[ + '跡', + ['蹟','古迹','遗迹','事迹','奇迹','史迹'] + ], + '佩':[ + '佩', + ['珮','玉佩'] + ], + '尸':[ + '屍', + ['尸','尸位素餐'] + ], + '泛':[ + '泛', + ['氾','泛滥'] + ], + '雕':[ + '雕', + ['彫','雕刻','雕像','雕塑','精雕细琢','雕琢','冰雕'] + ], + '核':[ + '核', + ['覈','审核','核实','核准','核对','复核','核查'] + ], + '困':[ + '困', + ['睏','困倦','困意','犯困'] + ], + '欲':[ + '欲', + ['慾','欲望','情欲','私欲','贪欲','色欲'] + ], + '致':[ + '致', + ['緻','精致','细致'] + ], + '梁':[ + '梁', + ['樑','栋梁','桥梁'] + ], + '占':[ + '占', + ['佔','占用','占领','侵占','占为己有','强占','占有','抢占'] + ], + '卜':[ + '卜', + ['蔔','萝卜','胡萝卜'] + ], + '托':[ + '托', + ['託','拜托','托付','嘱托','托词','托辞','推托','委托','托病','信托','托梦','托孤','托故','托管','受托','寄托'] + ], + '刮':[ + '刮', + ['颳','刮风'] + ], + '尽':[ + '盡', + ['儘','尽快','尽早','尽可能','尽显','尽量','尽管'] + ], + '汇':[ + '匯', + ['彙','词汇','字汇','汇集','汇编','辞汇'] + ], + '才':[ + '才', + ['纔','刚才','方才','却才','恰才'] + ], + '丑':[ + '醜', + ['丑','小丑','丑角','乙丑','丁丑','己丑','辛丑','癸丑','副丑'] + ], + '周':[ + '周', + ['週','周报','周期','周会','周日','周刊','周波','周岁','周末','周考','一周','二周','三周','四周','五周','两周','双周刊','名剧周','黄金周','周休','周一','周二','周三','周四','周五','周六'], + ['賙','周济'] + ], + '冲':[ + '沖', + ['衝','冲奖','冲高','冲决','冲浪','冲子','冲力','冲要','冲破','冲口','冲顶','冲床','冲突','冲刺','冲金','冲模','冲撞','冲腾','冲锋','冲量','冲动','冲程','冲压','冲杀','冲激','冲击','俯冲','反冲','折冲','缓冲','脉冲','要冲','冲锋枪','冲孔机','冲劲','冲金点','冲压机','冲击波','反冲力','冲锋','横冲','冲冠','首当其冲'] + ], + '恶':[ + '惡', + ['噁','恶心'] + ], + '发':[ + '發', + ['發','发回'], + ['髮','发网','发际','发箍','发丝','发式','发带','发型','发卡','发妻','发指','发廊','发饰','发乳','发夹','发菜','发屋','发姐','发油','发套','发蜡','发鬓','发髻','发雕','发辫','发胶','发浆','一发','假发','健发','削发','卷发','握发','束发','染发','植发','栉发','毛发','毫发','烫发','理发','白发','短发','秀发','秃发','结发','美发','胎发','脱发','华发','落发','蓄发','护发','金发','银发','头发','驳发','鬓发','须发','发小','剃发令','洗发','发短心长','怒发冲冠','断发文身','被发','鹤发','黄发垂髫','擢发难数','庞眉皓发','披头散发','间不容发'] + ], + '复':[ + '復', + ['複','复诊','复印','复写','复查','复习','复式','复种','复姓','复核','复音','复决','复利','复眼','复句','复合','复果','复述','复胃','复本','复方','复验','复选','复赛','复议','复制','复检','复杂','复叶','复线','复诵','复视','复试','复数','复评','复审','繁复','重复','复元音','复读机','复辅音','复共轭的','合义复词','衍声复词','山重水复'], + ['覆','复電','批复','核复','禀复','答复','被复','赐复','颠复','倾复','函复','反复','回复','复亡','复函','复命','复审','复复','复败','复书','复核','复没','复灭','复舟'] + ], + '鉴':[ + '鑒', + ['鑑','鉴于','鉴识','鉴赏','鉴证','鉴真','鉴谅','鉴别','鉴定','鉴戒','人鉴','借鉴','印鉴','可鉴','品鉴','唐鉴','图鉴','年鉴','殷鉴','洞鉴','王鉴','评鉴','赏鉴','通鉴','风鉴','龟鉴','明通鉴','鉴往知来','鉴古推今','有鉴于此','渊鉴类函','引为鉴戒','之鉴','宝鉴','玉鉴','引以为鉴','手鉴'] + ], + '历':[ + '歷', + ['曆','历书','历象','历元','历法','公历','回历','国历','夏历','年历','弘历','挂历','日历','月历','校历','桌历','殷历','皇历','旧历','藏历','西历','农历','阴历','阳历','黄历','台历','万历帝','藏历年','陀历道','阳历年','七曜历','三统历','乾象历','天体历','太初历','格里历','统天历','行事历','农民历','农家历','戊寅元历'] + ], + '链':[ + '鏈', + ['鍊','链子','拉链','精链','锻链','项链','锁链','铁链'] + ], + '签':[ + '簽', + ['籤','签子','签诗','抽签','掣签','书签','标签','求签','牙签','竹签','贴标签','唐音统签','金瓶掣签','云笈七签'] + ], + '闲':[ + '閒', + ['閑','闲闲','熟闲','高闲','闲居','幽闲','逾闲'] + ], + '赞':[ + '贊', + ['讚','赞赏','赞佩','赞美','赞誉','赞歌','赞叹','赞许','赞扬','赞颂','赞语','按赞','盛赞','礼赞','称赞','夸赞','颂赞','点赞','赞不绝口'] + ], + '钟':[ + '鍾', + ['鐘','钟摆','钟点','钟乳','钟楼','钟头','钟鼎','分钟','丧钟','座钟','挂钟','摆钟','时钟','洪钟','空钟','编钟','诗钟','警钟','电钟','闹钟','点钟','钟点房','钟鼓','钟点工','钟鼎文','大钟寺','石钟乳','光学钟','原子钟','大本钟','大笨钟','宗周钟','平安钟','打卡钟','抖空钟','撞丧钟','救命钟','敲警钟','敲丧钟','潜水钟','生物钟','石英钟','自鸣钟','电子钟','钟鸣','晨钟','黄钟','撞钟'] + ], + '只':[ + '只', + ['隻','几只','一只','二只','两只','三只','四只','五只','六只','七只','八只','九只','十只','百只','千只','万只','形单影只','只言片语','只字不提'], + ['只','只有','只会','只管','只消','只当','只好','只要','只能','只会','只是','只怕','只得','只见','只顾','只许','只因','不只','仅只','只不过','只此一家','只欠东风','只争朝夕'] + ], + '捂':[ + '捂', + ['摀','紧捂'] + ], + '咸':[ + '鹹', + ['咸','咸阳','咸宜','咸丰','咸和','咸池','咸五','彭咸','季咸','阮咸','阿咸','巫咸','碧咸'] + ], + '脏':[ + '髒', + ['臟','脏器','脏腑','五脏','内脏','心脏','肝脏','肺脏','胃脏','胰脏','脺脏','脾脏','肾脏','腑脏','肠脏'] + ], + '岳':[ + '岳', + ['嶽','五岳','中岳','北岳','南岳','西岳','东岳','岳立'] + ], + '云':[ + '雲', + ['云','人云亦云','云云'] + ], + '游':[ + '遊', + ['游','游泳','游水','花游'] + ], + '弥':[ + '彌', + ['瀰','弥漫'] + ], + '松':[ + '鬆', + ['松','惺松','阿松','松树','松针','松果','松鼠','松林','松竹'] + ], + '愈':[ + '愈', + ['癒','不愈','初愈','已愈','康愈','愈合','未愈','治愈','病愈','痊愈','自愈','伤愈','愈疮','渐愈'] + ], + '尝':[ + '嘗', + ['嚐','品尝','浅尝辄止','卧薪尝胆'] + ], + '斗':[ + '斗', + ['鬥','不斗','久斗','互斗','仍斗','共斗','再斗','初斗','力斗','勇斗','博斗','又斗','合斗','吵斗','善斗','大斗','好斗','想斗','打斗','批斗','抓斗','抗斗','拆斗','拼斗','挑斗','接斗','搏斗','敢斗','文斗','斗一','斗上','斗不','斗久','斗了','斗他','斗你','斗倒','斗出','斗到','斗力','斗勇','斗去','斗口','斗命','斗嘴','斗在','斗垮','斗士','斗奇','斗她','斗妍','斗完','斗弄','斗得','斗心','斗忍','斗志','斗快','斗意','斗成','斗我','斗批','斗技','斗招','斗拳','斗掌','斗斗','斗智','斗棋','斗法','斗牛','斗狗','斗狠','斗眼','斗神','斗私','斗草','斗角','斗起','斗趣','斗酒','斗魂','智斗','暗斗','未斗','格斗','械斗','武斗','死斗','比斗','游斗','激斗','狠斗','猛斗','相斗','私斗','群斗','苦斗','虎斗','血斗','要斗','角斗','越斗','跟斗','迎斗','邀斗','酣斗','乱斗','内斗','别斗','剧斗','劲斗','夺斗','奋斗','厮斗','恶斗','战斗','斗来','斗个','斗传','斗剑','斗劲','斗胜','斗场','斗将','斗恶','斗战','斗擞','斗败','斗敌','斗杀','斗殴','斗气','斗争','斗兽','斗毕','斗舰','斗艺','斗艳','斗赢','斗输','斗过','斗鸡','斗饮','斗闹','斗鱼','斗丽','会斗','权斗','殴斗','决斗','争斗','独斗','竞斗','约斗','缠斗','罢斗','观斗','赌斗','较斗','连斗','门斗','双斗','颤斗','凤斗','斗!'] + ], + '系':[ + '系', + ['係','关系','系数'], + ['系','系统','系列','体系','派系','直系'], + ['繫','不系','劾系','心系','所系','拘系','擐系','系上','系乎','系了','系住','系囚','系妥','系心','系念','系手','系牢','系留','系腰','系膜','系起','颈系','连系','联系','维系','系马','系个','系块','系带','系怀','系挂','系于','系条','系绊','系紧','系缚','系绳','系缆','系脚','系辞','系铃','系颈','牵系','梦系','身系','腰系','背系','縻系'] + ], + '舍':[ + '捨', + ['舍','宿舍','寒舍','屋舍','舍下'] + ], + '干':[ + '幹', + ['乾','口干','吃干','吐干','吮干','吸干','吹干','呷干','喉干','喝干','嘴干','太干','干井','干似','干冰','干冷','干化','干咳','干咽','干品','干哥','干嚎','干土','干坤','干妹','干姊','干姐','干姜','干娘','干爹','干爸','干妈','干季','干巴','干布','干干','干式','干弟','干性','干料','干旱','干杯','干果','干枝','干枯','干柴','干梅','干沙','干泥','干洗','干涸','干渴','干焦','干熬','干燥','干爽','干球','干疤','干瘦','干眼','干瞪','干硬','干窘','干笑','干等','干粉','干耗','干肉','干股','干脆','干花','干草','干菜','干薪','干衣','干裂','干透','干酪','干醋','干隆','干面','弄干','很干','抹干','抽干','揩干','擦干','晾干','朝干','未干','杯干','果干','桑干','榨干','水干','流干','海干','滴干','炒干','烘干','烤干','焙干','焦干','煨干','熨干','略干','碗干','粉干','耗干','肉干','舔干','菜干','蒸干','速干','干儿','干哑','干呕','干坛','干孙','干尸','干搁','干晒','干净','干涩','干涧','干湿','干热','干烧','干瘪','干瘾','干发','干粮','干结','干丝','干声','干叶','干号','干货','干阳','干饭','拧干','晒干','极干','泪干','沥干','烧干','烩干','发干','笋干','绞干','阴干','难干','风干','饮干','饼干','鱼干','唇干'], + ['干','干系','天干','干涉','干扰','干戈','相干','干我什','干我事','干我的事','干你什','干你事','干你的事','干他什','干他事','干他的事','干她什','干她事','干她的事'] + ], + '了':[ + '了', + ['瞭','了望','了然','了解','了若指掌','了如指掌'] + ], + '谷':[ + '穀', + ['谷','低谷','山谷','谷峰','谷底'] + ], + '仿':[ + '仿', + ['倣','仿效'], + ['彷','仿佛','仿徉'], + ['徬','仿徨'] + ], + '效':[ + '效', + ['傚','模效','摹效','仿效','儆效','效尤','效法'] + ], + '克':[ + '克', + ['剋','克夫','克扣','克日','克星','克期','克死','克薄','生克','相克','冲克'], + ['刻','克苦'] + ], + '吊':[ + '吊', + ['弔','吊信','吊古','吊唁','吊奠','吊孝','吊客','吊影','吊念','吊慰','吊文','吊民','吊祭','哀吊','唁吊','盆吊','祭吊','陪吊','吊问','吊丧','吊场','吊书','吊词','吊诡','吊贺','吊钱','凭吊'] + ], + '台':[ + '臺', + ['颱','冬台','秋台','防台','台风','强台','轻台'], + ['檯','台凳','台子','台布','台面','吧台','抹台','揩台','球台','窗台','翻台','餐台','台历','台灯','台钟','书台','柜台','赌台','长台'] + ], + '回':[ + '回', + ['迴','北回','南回','回圈','回廊','回旋','回游','回翔','回避','峰回','巡回','迂回','回环','回纹','回绕','回肠','回荡','回銮','回响','回风','梦回','盘回','纡回','萦回','轮回','递回'] + ], + '后':[ + '後', + ['后','仙后','吕后','天后','太后','封后','帝后','废后','影后','后冠','后土','后妃','后稷','后羿','母后','王后','皇后','舞后','西后','艳后','韦后'] + ], + '征':[ + '征', + ['徵','代征','停征','像征','免征','咎征','征了','征人','征信','征候','征兆','征入','征兵','征募','征去','征友','征取','征召','征地','征婚','征引','征得','征收','征文','征求','征片','征用','征稿','征管','征聘','征象','征逐','征集','急征','性征','新征','特征','狂征','病征','稽征','考征','苛征','表征','象征','超征','魏征','带征','广征','强征','征个','征启','征敛','征状','征税','征粮','征纳','征缴','征诏','征询','征调','征财','征费','征赋','征购','征选','应征','横征','减征','滥征','纳征','缓征','联征','详征','诚征','课征','变征','开征','体征'] + ], + '注':[ + '注', + ['註','注解','备注','注脚','批注','注册','注定','校注','尾注','注销','标注','注释'] + ], + '丰':[ + '豐', + ['丰','三丰','丰姿','丰度','丰情','丰神','丰韵'] + ], + '并':[ + '並', + ['併','一并','不并','并入','并力','并合','并吞','并图','并拢','并案','并叠','并砌','并科','并负','并购','并赃','并除','并陇','侵并','兼并','合并','吞并','整并','归并','相并','砌并','被并','裁并','购并','双并'] + ], + '念':[ + '念', + ['唸','光念','念佛','念作','念到','念咒','念好','念完','念得','念念','念成','念法','敢念','念书','念给','念经','念诵','念过','念错','念点','没念'] + ], + '借':[ + '借', + ['藉','借以','借口','借故','慰借','狼借','借机','借词','凭借','蕴借'] + ], + '志':[ + '志', + ['誌','日志','网志','墓志铭','聊斋志异','三国志','杂志'] + ], + '么':[ + '麼', + ['么','老么','么女','么儿','么妹','么子','么弟'] + ], + '布':[ + '布', + ['佈','公布','分布','宣布','密布','布伏','布署','布兵','布告','布局','布施','布景','布置','布防','布雷','故布','散布','遍布','传布','布个','布坛','布导','布岗','布于','布满','布阵','广布','摆布','满布','发布','预布'] + ], + '分':[ + '分', + ['份','分量','身分'] + ], + '里':[ + '裡', + ['里','○里','一里','七里','三里','下里','九里','二里','五里','亚里','佳里','克里','全里','两里','八里','公里','六里','凯里','劈里','加里','北里','十里','千里','南里','卡里','吉里','哈里','哥里','啰里','四里','埔里','多里','少里','尤里','居里','峇里','布里','几里','底里','德里','拉里','故里','数里','斯里','普里','东里','格里','归里','波里','乌里','百里','稀里','罗里','英里','莫里','万里','苏里','里亚','里仁','里夫','里奥','里尼','里布','里拉','里昂','里根','里民','里尔','里科','里程','里约','里纳','里美','里肌','里兰','里路','里里','里长','西里','贝里','路里','道里','乡里','邻里','阿里','马里','0里','0里','1里','2里','3里','4里','5里','6里','7里','8里','9里'] + ], + '面':[ + '面', + ['麵','制面','吃面','拉面','拌面','揉面','杯面','油面','泡面','炒面','煮面','碗面','羹面','肉面','辣面','面店','面杖','面灰','面碗','面筋','面粉','面糊','面茶','面食','食面','寿面','杆面','凉面','汤面','烫面','发面','酱面','面价','面团','面厂','面摊','面汤','面线','面饺','面饼','面馆','面馍','面龟','饨面','卤面','麦面','干面','擀面'] + ], + '烟':[ + '煙', + ['菸','烟斗','吸烟','好烟','戒烟','抽烟','支烟','旱烟','根烟','烟商','烟客','烟枪','烟民','烟灰','烟瘾','烟草','烟酒','烟头','烟鬼','烟龄','禁烟','买烟','香烟'] + ], + '蒙':[ + '蒙', + ['濛','灰蒙','空蒙','蒙蒙','迷蒙','弥蒙','蒙雾'], + ['矇','欺蒙','蒙住','蒙叟','蒙敝','蒙昧','蒙混','蒙瞀','蒙瞢','蒙瞽','蒙蔽','蒙胧','蒙眬','蒙骗'], + ['懞','蒙懂'] + ], + '表':[ + '表', + ['錶','戴表','手表','秒表','腕表','表店','跳表','陀表','怀表','表带','表厂','表壳','表炼','表链','钟表','马表'] + ], + '板':[ + '板', + ['闆','老板'] + ], + '卷':[ + '卷', + ['捲','卷入','卷起','龙卷风','席卷','蛋卷','花卷','袭卷','卷款','卷发','卷走','卷进','卷曲','卷舌','烟卷'] + ], + '酸':[ + '酸', + ['痠','酸软','酸痛','腰酸背痛'] + ], + '仇':[ + '仇', + ['讎','复仇','仇恨','报仇','仇敌'] + ], + '几':[ + '幾', + ['几','窗明几净','窗明几洁','茶几'] + ], + '背':[ + '背', + ['揹','背负','背黑锅','背包'] + ], + '衔':[ + '銜', + ['啣','结草衔环','衔着'] + ], + '构':[ + '構', + ['搆','构陷','构思'] + ] +}; +//繁轉簡 +const tc2sc = { + '著':[ + '着', + ['著','著名','著作','巨著','著稱','顯著','昭著','卓著','所著','著述','編著','著書','名著','原著','遺著','譯著','著譯','著:','著:','土著','論著','專著','日新月著','著有','合著','知著','著錄','著者','較著','頗著','文著','著文','自著','著成','著《','撰著','著撰','拙著','著明','著論','新著','著於','而著','雜著','著足','著花','醫著','聲著'] + ], + '乾':[ + '干', + ['乾','乾隆','乾卦','乾道','乾宅','乾造','乾之卦','乾為','「乾」','乾坤','乾元','乾剛','乾方','乾施','乾首','乾象','乾啟','幹鈞','乾化','乾心','幹居','乾符','乾暉','幹曜','乾風','乾雷','乾州','中乾','連乾','乾沒','桑乾','乾乾','花乾'] + ], + '瞭':[ + '瞭', + ['了','瞭望','瞭然','瞭解','瞭若指掌','瞭如指掌'] + ] +}; +let sc2tcComb = { + '香烟袅袅':'香煙裊裊', + '袅袅香烟':'裊裊香煙', + '补丁':'補靪', + '老挝':'寮國', + '沈阳':'瀋陽', + '战栗':'顫慄', + '豆蔻':'荳蔻', + '累累':'纍纍', + '阿里':'阿里', + '跟斗':'觔斗', + '筋斗':'筋斗', + '折冲':'折衝', + '梁折':'樑折', + '松干':'松幹', + '家伙':'傢伙', + '伙夫':'伙伕', + '游斗':'游鬥', + '回游':'迴游', + '云游':'雲遊', + '云宵':'雲霄', + '考卷发':'考卷發', + '发卷':'髮卷', + "烟卷":"菸卷", + "连卷":"連卷", + '鼠标':'滑鼠', + 'U盘':'隨身碟', + '硬盘':'硬碟', + '磁盘':'磁碟', + '软件':'軟體', + '操作系统':'作業系統', + '文件系统':'檔案系統', + '笔记本':'筆記型電腦', + '台式机':'桌上型電腦', + '网络':'網路', + '打印':'列印', + '复印':'影印', + '充电宝':'行動電源', + '排插':'延長綫', + '程序':'程式', + '光盘':'光碟', + '音频':'音訊', + '屏幕':'熒幕', + '卸载':'解除安裝', + '文件夹':'檔案夾', + '局域网':'區域網路', + '服务器':'伺服器', + '打伞':'撐傘', + '洗面奶':'洗面乳', + '洗发水':'洗髮乳', + '打底裤':'内搭褲', + '电饭煲':'電鍋', + '发卡':'髮夾', + '聊天群':'聊天視窗', + '普通话':'國語', + '简历':'履歷', + '公交车':'公車', + '打车':'叫車', + '出租车':'計程車', + '地铁':'捷運', + '自行车':'脚踏車', + '摩托车':'機車', + '巴士':'客運', + '奔驰':'賓士', + '挺好的':'滿好的', + '牛逼':'厲害', + '左拐':'左轉', + '竖的':'直的', + '让一下':'借過', + '凉水':'冰水', + '打包':'外帶', + '外卖':'外送', + '很火':'很紅', + '宾馆':'飯店', + '旅馆':'賓館', + '包间':'包廂', + '卫生间':'化妝室', + '幼儿园':'幼稚園', + '公安局':'警察局', + '饭店':'餐廳', + '酒店':'飯店', + '高校':'大學', + '写字楼':'辦公大樓', + '换乘站':'轉運站', + '豆腐脑':'豆花', + '菠萝':'鳳梨', + '薯片':'洋芋片', + '土豆':'馬鈴薯', + '花生':'土豆', + '芝士':'起司', + '猕猴桃':'奇異果', + '盒饭':'便當', + '夜宵':'宵夜', + '金枪鱼':'鮪魚', + '三文鱼':'鮭魚', + '番石榴':'芭樂', + '冰激淋':'冰淇淋', + '冰棍':'冰棒', + '快餐':'速食', + '格斗':'挌鬥', + '西红柿':'番茄', + '西兰花':'花椰菜', + '创可贴':'OK綳', + '输液':'打點滴', + '献血':'捐血', + 'B超':'超音波檢查', + '疯牛病':'狂牛病', + '台球':'撞球', + '乒乓球':'桌球', + '自由泳':'自由式', + '蛙泳':'蛙式', + '初中生':'國中生', + '本科生':'大學生', + '程序员':'程式設計師', + '传销':'直銷', + '宇航员':'太空人', + '超声波':'超音波', + '北京时间':'中原標準時間', + '保质期':'保存期限', + '甲肝':'A肝', + '乙肝':'B肝', + '丙肝':'C肝', + '塑料':'塑膠', + '够不到':'搆不到', + '够不着':'搆不着', + '舞娘':'舞孃', + '秋千':'鞦韆', + '拐杖':'枴杖', + '剩余':'賸餘', + '胡同':'衚衕', + '个旧':'箇舊', + '朱砂':'硃砂', + '知识产权':'智慧財產權' +}; +var stDict = {}, tsDict = {}; +var sc2tcCombTree = {}, tc2scCombTree = {}; + +function traditionalizedString(orgStr, format) { + if (!orgStr) return ""; + var str = '', char; + for (var i = 0; i < orgStr.length; i++) { + char = orgStr.charAt(i); + let search = sc2tcCombTree[char], searchIndex = i, hasMatch = false, startIndex = i; + while (search && searchIndex < orgStr.length) { + let downTree = null; + if (searchIndex < orgStr.length - 1) { + downTree = search[orgStr.charAt(searchIndex + 1)]; + } + if (!downTree) { + if (search.end) { + hasMatch = true; + i = searchIndex; + if (format === OutputFormat.NORMAL) { + str += search.end; + } else { + const originalText = orgStr.substring(startIndex, searchIndex + 1); + const convertedText = search.end; + if (format === OutputFormat.BRACKET && originalText !== convertedText) { + str += convertedText + '(' + originalText + ')'; + } else if (format === OutputFormat.RUBY && originalText !== convertedText) { + str += '' + convertedText + '' + originalText + ''; + } else { + str += convertedText; + } + } + } + break; + } + searchIndex++; + search = downTree; + } + if (hasMatch) { + continue; + } + if (char.charCodeAt(0) > 10000) { + var tChar = stDict[char], sc2tcItem = sc2tc[char]; + if (tChar || sc2tcItem) { + var newChar = ""; + if (sc2tcItem) { + if (sc2tcItem.length == 1) { + newChar = sc2tcItem; + } else { + var defaultChar = sc2tcItem[0], char_f = [], char_b = [], r = i; + while (--r >= 0 && char_f.length < 3) { + char_f.push(orgStr.charAt(r)); + } + r = i; + while (++r < orgStr.length && char_b.length < 3) { + char_b.push(orgStr.charAt(r)); + } + for (var j = 1; j < sc2tcItem.length; j++) { + var others = sc2tcItem[j], otherChar = others[0]; + for (var k = 1; k < others.length; k++) { + var curOther = others[k], fadd = curOther.indexOf(char), badd = curOther.length - 1 - fadd, x = 0; + var processChar = char; + while (fadd-- > 0) { + if (!char_f[x]) break; + processChar = char_f[x] + processChar; + x++; + } + x = 0; + while (badd-- > 0) { + if (!char_b[x]) break; + processChar += char_b[x]; + x++; + } + if (processChar.indexOf(curOther) != -1) { + newChar = otherChar; + break; + } + } + if (newChar) break; + } + if (!newChar) newChar = defaultChar; + } + } else { + newChar = tChar; + } + if (format === OutputFormat.BRACKET && char !== newChar) { + str += newChar + '(' + char + ')'; + } else if (format === OutputFormat.RUBY && char !== newChar) { + str += '' + newChar + '' + char + ''; + } else { + str += newChar; + } + } else str += char; + } + else str += char; + } + return str; +} + +function traditionalized(input, options) { + options = options || {}; + const format = options.format !== undefined ? options.format : OutputFormat.NORMAL; + + // Handle null/undefined + if (input == null) return input; + + // Handle string + if (typeof input === 'string') { + return traditionalizedString(input, format); + } + + // Handle array + if (Array.isArray(input)) { + return input.map(item => traditionalized(item, options)); + } + + // Handle object + if (typeof input === 'object') { + const result = {}; + for (const key in input) { + if (input.hasOwnProperty(key)) { + result[key] = traditionalized(input[key], options); + } + } + return result; + } + + // Return other types as-is (number, boolean, etc.) + return input; +} + +function simplizedString(orgStr, format) { + if (!orgStr) return ""; + var str = '', char; + for (var i = 0; i < orgStr.length; i++) { + char = orgStr.charAt(i); + let search = tc2scCombTree[char], searchIndex = i, hasMatch = false, startIndex = i; + while (search && searchIndex < orgStr.length) { + let downTree = null; + if (searchIndex < orgStr.length - 1) { + downTree = search[orgStr.charAt(searchIndex + 1)]; + } + if (!downTree) { + if (search.end) { + hasMatch = true; + i = searchIndex; + if (format === OutputFormat.NORMAL) { + str += search.end; + } else { + const originalText = orgStr.substring(startIndex, searchIndex + 1); + const convertedText = search.end; + if (format === OutputFormat.BRACKET && originalText !== convertedText) { + str += convertedText + '(' + originalText + ')'; + } else if (format === OutputFormat.RUBY && originalText !== convertedText) { + str += '' + convertedText + '' + originalText + ''; + } else { + str += convertedText; + } + } + } + break; + } + searchIndex ++; + search = downTree; + } + if (hasMatch) { + continue; + } + if (char.charCodeAt(0) > 10000) { + var sChar = tsDict[char], tc2scItem = tc2sc[char]; + if (sChar || tc2scItem) { + var newChar = ""; + if (tc2scItem) { + if (tc2scItem.length == 1) { + newChar = tc2scItem; + } else { + var defaultChar = tc2scItem[0], char_f = [], char_b = [], r = i; + while (--r >= 0 && char_f.length < 3) { + char_f.push(orgStr.charAt(r)); + } + r = i; + while (++r < orgStr.length && char_b.length < 3) { + char_b.push(orgStr.charAt(r)); + } + for (var j = 1; j < tc2scItem.length; j++) { + var others = tc2scItem[j], otherChar = others[0]; + for (var k = 1; k < others.length; k++) { + var curOther = others[k], fadd = curOther.indexOf(char), badd = curOther.length - 1 - fadd, x = 0; + var processChar = char; + while (fadd-- > 0) { + if (!char_f[x]) break; + processChar = char_f[x] + processChar; + x++; + } + x = 0; + while (badd-- > 0) { + if (!char_b[x]) break; + processChar += char_b[x]; + x++; + } + if (processChar.indexOf(curOther) != -1) { + newChar = otherChar; + break; + } + } + if (newChar) break; + } + if (!newChar) newChar = defaultChar; + } + } else { + newChar = sChar; + } + if (format === OutputFormat.BRACKET && char !== newChar) { + str += newChar + '(' + char + ')'; + } else if (format === OutputFormat.RUBY && char !== newChar) { + str += '' + newChar + '' + char + ''; + } else { + str += newChar; + } + } else str += char; + } + else str += char; + } + return str; +} + +function simplized(input, options) { + options = options || {}; + const format = options.format !== undefined ? options.format : OutputFormat.NORMAL; + + // Handle null/undefined + if (input == null) return input; + + // Handle string + if (typeof input === 'string') { + return simplizedString(input, format); + } + + // Handle array + if (Array.isArray(input)) { + return input.map(item => simplized(item, options)); + } + + // Handle object + if (typeof input === 'object') { + const result = {}; + for (const key in input) { + if (input.hasOwnProperty(key)) { + result[key] = simplized(input[key], options); + } + } + return result; + } + + // Return other types as-is (number, boolean, etc.) + return input; +} + +function detect(text) { + if (!text) return ChineseType.UNKNOWN; + + for (let i = 0; i < text.length; i++) { + const char = text.charAt(i); + if (char.charCodeAt(0) > 10000) { + const scChar = tsDict[char]; + if (scChar && scChar !== char) { + return ChineseType.TRADITIONAL; + } + } + } + + for (let i = 0; i < text.length; i++) { + const char = text.charAt(i); + if (char.charCodeAt(0) > 10000) { + const tcChar = stDict[char]; + if (tcChar && tcChar !== char) { + return ChineseType.SIMPLIFIED; + } + } + } + + return ChineseType.UNKNOWN; +} + +function stcasc(cache, custom, disableTerms) { + if (!cache) cache = {}; + if (cache.sc2tcCombTree && cache.tc2scCombTree) { + sc2tcCombTree = cache.sc2tcCombTree; + tc2scCombTree = cache.tc2scCombTree; + } else { + if (disableTerms) sc2tcComb = {}; + if (custom && custom.length) { + for (let sc in custom) { + sc2tcComb[sc] = custom[sc]; + } + } + function makeCombTree(key, value) { + let curTree = sc2tcCombTree; + for (let i = 0; i < key.length; i++) { + let curKey = key.charAt(i); + let branch = curTree[curKey]; + let newTree = {}; + if (i == key.length - 1) { + newTree = {"end": value}; + if (branch) { + branch.end = value; + } + } + if (branch) { + curTree = branch; + } else { + curTree[curKey] = newTree; + curTree = newTree; + } + } + curTree = tc2scCombTree; + for (let i = 0; i < value.length; i++) { + let curKey = value.charAt(i); + let branch = curTree[curKey]; + let newTree = {}; + if (i == value.length - 1) { + newTree = {"end": key}; + if (branch) { + branch.end = key; + } + } + if (branch) { + curTree = branch; + } else { + curTree[curKey] = newTree; + curTree = newTree; + } + } + } + for (let key in sc2tcComb) { + let value = sc2tcComb[key]; + if (Array.isArray(value)) { + value.forEach(v => { + makeCombTree(key, v); + }); + } else { + makeCombTree(key, value); + } + } + cache.sc2tcCombTree = sc2tcCombTree; + cache.tc2scCombTree = tc2scCombTree; + } + if (cache.stDict && cache.tsDict) { + stDict = cache.stDict; + tsDict = cache.tsDict; + } else { + for (let i = 0; i < scStr.length; i++) { + let _sc = scStr[i]; + let _tc = tcStr[i]; + if (!stDict[_sc]) stDict[_sc] = _tc; + if (!tsDict[_tc]) tsDict[_tc] = _sc; + } + Object.keys(oc2tc).forEach(key => { + let ocList = oc2tc[key]; + for (let i = 0; i < ocList.length; i++) { + let oc = ocList[i]; + stDict[oc] = key; + tsDict[oc] = tsDict[key] || key; + } + }) + cache.stDict = stDict; + cache.tsDict = tsDict; + } + return {simplized, traditionalized, detect, cache}; +} + +export default stcasc; diff --git a/Switch Traditional Chinese and Simplified Chinese/lib/test.js b/Switch Traditional Chinese and Simplified Chinese/lib/test.js new file mode 100644 index 00000000000..55337889052 --- /dev/null +++ b/Switch Traditional Chinese and Simplified Chinese/lib/test.js @@ -0,0 +1,215 @@ +import stcasc, { ChineseType, OutputFormat } from './stcasc.lib.js'; + +console.log('========== 简繁转换库测试 ==========\n'); + +// 初始化 +const { traditionalized, simplized, detect } = stcasc(); + +// 测试 1: 基础简体转繁体 +console.log('测试 1: 基础简体转繁体'); +const sc1 = '简繁转换 繁简切换 香烟 香烟袅袅 烟雾里 里长面子'; +const tc1 = traditionalized(sc1); +console.log('输入:', sc1); +console.log('输出:', tc1); +console.log(''); + +// 测试 2: 基础繁体转简体 +console.log('测试 2: 基础繁体转简体'); +const tc2 = '繁體中文 簡體中文'; +const sc2 = simplized(tc2); +console.log('输入:', tc2); +console.log('输出:', sc2); +console.log(''); + +// 测试 3: 检测简体中文 +console.log('测试 3: 检测简体中文'); +const text1 = '这是简体中文'; +const type1 = detect(text1); +console.log('文本:', text1); +console.log('类型:', type1 === ChineseType.SIMPLIFIED ? '简体中文' : '未知'); +console.log('枚举值:', type1); +console.log(''); + +// 测试 4: 检测繁体中文 +console.log('测试 4: 检测繁体中文'); +const text2 = '這是繁體中文'; +const type2 = detect(text2); +console.log('文本:', text2); +console.log('类型:', type2 === ChineseType.TRADITIONAL ? '繁体中文' : '未知'); +console.log('枚举值:', type2); +console.log(''); + +// 测试 5: 检测非中文 +console.log('测试 5: 检测非中文'); +const text3 = 'English Text'; +const type3 = detect(text3); +console.log('文本:', text3); +console.log('类型:', type3 === ChineseType.UNKNOWN ? '未知' : '中文'); +console.log('枚举值:', type3); +console.log(''); + +// 测试 6: 输出格式 - BRACKET(括号格式) +console.log('测试 6: 输出格式 - BRACKET(括号格式)'); +const sc3 = '简体中文转换'; +const tc3 = traditionalized(sc3, { format: OutputFormat.BRACKET }); +console.log('输入:', sc3); +console.log('输出:', tc3); +console.log(''); + +// 测试 7: 输出格式 - RUBY(HTML ruby标签格式) +console.log('测试 7: 输出格式 - RUBY(HTML ruby标签格式)'); +const sc4 = '简体中文'; +const tc4 = traditionalized(sc4, { format: OutputFormat.RUBY }); +console.log('输入:', sc4); +console.log('输出:', tc4); +console.log(''); + +// 测试 8: 繁体转简体 - BRACKET格式 +console.log('测试 8: 繁体转简体 - BRACKET格式'); +const tc5 = '繁體中文'; +const sc5 = simplized(tc5, { format: OutputFormat.BRACKET }); +console.log('输入:', tc5); +console.log('输出:', sc5); +console.log(''); + +// 测试 9: 繁体转简体 - RUBY格式 +console.log('测试 9: 繁体转简体 - RUBY格式'); +const tc6 = '繁體中文'; +const sc6 = simplized(tc6, { format: OutputFormat.RUBY }); +console.log('输入:', tc6); +console.log('输出:', sc6); +console.log(''); + +// 测试 10: 复杂文本转换 - 正常格式 +console.log('测试 10: 复杂文本转换 - 正常格式'); +const complex = '吃干面 把考卷发回来 卷发 知识产权'; +const complexTc = traditionalized(complex); +console.log('输入:', complex); +console.log('输出:', complexTc); +console.log(''); + +// 测试 11: 复杂文本转换 - BRACKET格式 +console.log('测试 11: 复杂文本转换 - BRACKET格式'); +const complexBracket = traditionalized(complex, { format: OutputFormat.BRACKET }); +console.log('输入:', complex); +console.log('输出:', complexBracket); +console.log(''); + +// 测试 12: 术语转换 +console.log('测试 12: 术语转换'); +const terms = '软件 硬盘 网络 服务器 鼠标'; +const termsTc = traditionalized(terms); +console.log('输入:', terms); +console.log('输出:', termsTc); +console.log(''); + +// 测试 13: 混合文本 +console.log('测试 13: 混合文本'); +const mixed = 'This is 简体中文 and English'; +const mixedTc = traditionalized(mixed); +console.log('输入:', mixed); +console.log('输出:', mixedTc); +console.log(''); + +// ========== 新增测试:Array/Object 支持 ========== +console.log('========== Array/Object 测试 ==========\n'); + +// 测试 14: 转换数组(简体->繁体) +console.log('测试 14: 转换数组(简体->繁体)'); +const arr1 = ['简体中文', '软件', '硬盘', 123, true, null]; +const arr1Tc = traditionalized(arr1); +console.log('输入:', arr1); +console.log('输出:', arr1Tc); +console.log(''); + +// 测试 15: 转换数组(繁体->简体) +console.log('测试 15: 转换数组(繁体->简体)'); +const arr2 = ['繁體中文', '軟體', '硬碟', 456, false]; +const arr2Sc = simplized(arr2); +console.log('输入:', arr2); +console.log('输出:', arr2Sc); +console.log(''); + +// 测试 16: 转换对象(简体->繁体) +console.log('测试 16: 转换对象(简体->繁体)'); +const obj1 = { + title: '简体中文标题', + description: '这是一个简体中文描述', + count: 100, + active: true, + tags: ['软件', '网络', '服务器'] +}; +const obj1Tc = traditionalized(obj1); +console.log('输入:', JSON.stringify(obj1, null, 2)); +console.log('输出:', JSON.stringify(obj1Tc, null, 2)); +console.log(''); + +// 测试 17: 转换对象(繁体->简体) +console.log('测试 17: 转换对象(繁体->简体)'); +const obj2 = { + title: '繁體中文標題', + description: '這是一個繁體中文描述', + price: 99.99, + items: ['軟體', '硬碟'] +}; +const obj2Sc = simplized(obj2); +console.log('输入:', JSON.stringify(obj2, null, 2)); +console.log('输出:', JSON.stringify(obj2Sc, null, 2)); +console.log(''); + +// 测试 18: 转换嵌套数组 +console.log('测试 18: 转换嵌套数组'); +const nestedArr = [ + '简体中文', + ['软件', '硬盘'], + [['网络', '服务器']] +]; +const nestedArrTc = traditionalized(nestedArr); +console.log('输入:', JSON.stringify(nestedArr)); +console.log('输出:', JSON.stringify(nestedArrTc)); +console.log(''); + +// 测试 19: 转换嵌套对象 +console.log('测试 19: 转换嵌套对象'); +const nestedObj = { + user: { + name: '简体名称', + profile: { + bio: '这是简体中文简介', + skills: ['软件开发', '网络管理'] + } + }, + count: 42 +}; +const nestedObjTc = traditionalized(nestedObj); +console.log('输入:', JSON.stringify(nestedObj, null, 2)); +console.log('输出:', JSON.stringify(nestedObjTc, null, 2)); +console.log(''); + +// 测试 20: 数组转换 - BRACKET 格式 +console.log('测试 20: 数组转换 - BRACKET 格式'); +const arr3 = ['简体', '中文']; +const arr3Bracket = traditionalized(arr3, { format: OutputFormat.BRACKET }); +console.log('输入:', arr3); +console.log('输出:', arr3Bracket); +console.log(''); + +// 测试 21: 对象转换 - RUBY 格式 +console.log('测试 21: 对象转换 - RUBY 格式'); +const obj3 = { + text1: '简体', + text2: '中文' +}; +const obj3Ruby = traditionalized(obj3, { format: OutputFormat.RUBY }); +console.log('输入:', JSON.stringify(obj3, null, 2)); +console.log('输出:', JSON.stringify(obj3Ruby, null, 2)); +console.log(''); + +// 测试 22: 处理 null 和 undefined +console.log('测试 22: 处理 null 和 undefined'); +console.log('null 输入:', traditionalized(null)); +console.log('undefined 输入:', traditionalized(undefined)); +console.log('包含 null 的数组:', traditionalized(['简体', null, '中文'])); +console.log(''); + +console.log('========== 测试完成 =========='); diff --git "a/Switch Traditional Chinese and Simplified Chinese/\347\260\241\347\271\201\350\275\211\346\217\233 by Ch'\303\274 Ts\303\252-t'ien.json" "b/Switch Traditional Chinese and Simplified Chinese/\347\260\241\347\271\201\350\275\211\346\217\233 by Ch'\303\274 Ts\303\252-t'ien.json" new file mode 100644 index 00000000000..2c544d2a232 --- /dev/null +++ "b/Switch Traditional Chinese and Simplified Chinese/\347\260\241\347\271\201\350\275\211\346\217\233 by Ch'\303\274 Ts\303\252-t'ien.json" @@ -0,0 +1,1665 @@ +{ + "*": { + "群": "群", + "香烟袅袅": "香煙裊裊", + "袅袅香烟": "裊裊香煙", + "老挝": "寮國", + "沈阳": "瀋陽", + "战栗": "顫慄", + "豆蔻": "荳蔻", + "累累": "纍纍", + "阿里": "阿里", + "跟斗": "觔斗", + "筋斗": "筋斗", + "折冲": "折衝", + "梁折": "樑折", + "松干": "松幹", + "家伙": "傢伙", + "伙夫": "伙伕", + "游斗": "游鬥", + "回游": "迴游", + "云游": "雲遊", + "云宵": "雲霄", + "考卷发": "考卷發", + "发卷": "髮卷", + "烟卷": "菸卷", + "连卷": "連卷", + "充电宝": "行動電源", + "排插": "延長綫", + "文件夹": "檔案夾", + "打伞": "撐傘", + "洗面奶": "洗面乳", + "洗发水": "洗髮乳", + "打底裤": "内搭褲", + "电饭煲": "電鍋", + "发卡": "髮夾", + "聊天群": "聊天視窗", + "普通话": "國語", + "简历": "履歷", + "公交车": "公車", + "打车": "叫車", + "出租车": "計程車", + "地铁": "捷運", + "自行车": "脚踏車", + "摩托车": "機車", + "巴士": "客運", + "奔驰": "賓士", + "挺好的": "滿好的", + "牛逼": "厲害", + "左拐": "左轉", + "估计": "大概", + "竖的": "直的", + "让一下": "借過", + "凉水": "冰水", + "打包": "外帶", + "外卖": "外送", + "很火": "很紅", + "宾馆": "飯店", + "旅馆": "賓館", + "包间": "包廂", + "卫生间": "化妝室", + "幼儿园": "幼稚園", + "公安局": "警察局", + "饭店": "餐廳", + "酒店": "飯店", + "高校": "大學", + "写字楼": "辦公大樓", + "换乘站": "轉運站", + "豆腐脑": "豆花", + "菠萝": "鳳梨", + "薯片": "洋芋片", + "土豆": "馬鈴薯", + "花生": "土豆", + "芝士": "起司", + "猕猴桃": "奇異果", + "盒饭": "便當", + "夜宵": "宵夜", + "金枪鱼": "鮪魚", + "三文鱼": "鮭魚", + "番石榴": "芭樂", + "冰激淋": "冰淇淋", + "冰棍": "冰棒", + "快餐": "速食", + "格斗": "挌鬥", + "西红柿": "番茄", + "西兰花": "花椰菜", + "创可贴": "OK綳", + "输液": "打點滴", + "献血": "捐血", + "B超": "超音波檢查", + "疯牛病": "狂牛病", + "台球": "撞球", + "乒乓球": "桌球", + "自由泳": "自由式", + "蛙泳": "蛙式", + "初中生": "國中生", + "本科生": "大學生", + "传销": "直銷", + "宇航员": "太空人", + "超声波": "超音波", + "北京时间": "中原標準時間", + "保质期": "保存期限", + "甲肝": "A肝", + "乙肝": "B肝", + "丙肝": "C肝", + "塑料": "塑膠", + "够不到": "搆不到", + "够不着": "搆不着", + "舞娘": "舞孃", + "秋千": "鞦韆", + "拐杖": "枴杖", + "剩余": "賸餘", + "胡同": "衚衕", + "个旧": "箇舊縣", + "朱砂": "硃砂", + "知识产权": "智慧財產權", + "·布尔": "·布爾", + "128 位": "128 位元", + "128位": "128位元", + "32 位": "32 位元", + "32位": "32位元", + "360 搜索": "360 搜索", + "360 综合搜索": "360 綜合搜索", + "360搜索": "360搜索", + "360综合搜索": "360綜合搜索", + "64 位": "64 位元", + "64位": "64位元", + "80 位": "80 位元", + "80位": "80位元", + "A 盘": "本機磁碟 (A)", + "A盘": "本機磁碟(A)", + "B 盘": "本機磁碟 (B)", + "BC 范式": "BC 正規形式", + "BC范式": "BC正規形式", + "B盘": "本機磁碟(B)", + "C 盘": "本機磁碟 (C)", + "C++ 的类": "C++ 的類別", + "C++ 的类型": "C++ 的類型", + "C++ 类": "C++ 類別", + "C++ 类似": "C++ 類似", + "C++ 类型": "C++ 類型", + "C++的类": "C++的類別", + "C++的类型": "C++的類型", + "C++类": "C++類別", + "C++类似": "C++類似", + "C++类型": "C++類型", + "C盘": "本機磁碟(C)", + "D 盘": "本機磁碟 (D)", + "Device Stage": "裝置舞台", + "DK 范式": "DK 規格化", + "DK范式": "DK規格化", + "DVD Maker": "DVD 製作程式", + "D盘": "本機磁碟(D)", + "E 盘": "本機磁碟 (E)", + "Enter 键": "RETURN 鍵", + "Enter键": "RETURN鍵", + "E盘": "本機磁碟(E)", + "F 盘": "本機磁碟 (F)", + "F盘": "本機磁碟(F)", + "G 盘": "本機磁碟 (G)", + "Google 云消息传递": "Google 雲端通訊", + "Google 工具条": "Google 工具列", + "Google 文档": "Google 文件", + "Google 视频": "Google 影片", + "Google云消息传递": "Google雲端通訊", + "Google工具条": "Google工具列", + "Google文档": "Google文件", + "Google视频": "Google影片", + "GSM 移动": "GSM 行動", + "GSM移动": "GSM行動", + "GUID 分区表": "GUID 磁碟分割表", + "GUID分区表": "GUID磁碟分割表", + "G盘": "本機磁碟(G)", + "H 盘": "本機磁碟 (H)", + "H盘": "本機磁碟(H)", + "I 盘": "本機磁碟 (I)", + "Internet 双陆棋": "網際網路西洋骰子棋", + "Internet 跳棋": "網際網路西洋棋", + "Internet 黑桃王": "網際網路西式拱豬", + "IP核": "矽智財", + "I盘": "本機磁碟(I)", + "J 盘": "本機磁碟 (J)", + "Java 的类": "Java 的類別", + "Java 的类型": "Java 的類型", + "Java 类": "Java 類別", + "Java 类似": "Java 類似", + "Java 类型": "Java 類型", + "Java的类": "Java的類別", + "Java的类型": "Java的類型", + "Java类": "Java類別", + "Java类似": "Java類似", + "Java类型": "Java類型", + "J盘": "本機磁碟(J)", + "K 盘": "本機磁碟 (K)", + "K盘": "本機磁碟(K)", + "L 盘": "本機磁碟 (L)", + "L盘": "本機磁碟(L)", + "M 盘": "本機磁碟 (M)", + "M盘": "本機磁碟(M)", + "N 盘": "本機磁碟 (N)", + "N盘": "本機磁碟(N)", + "O 盘": "本機磁碟 (O)", + "O盘": "本機磁碟(O)", + "P 盘": "本機磁碟 (P)", + "PN 结": "PN 接面", + "P-N 结": "P-N 接面", + "PN结": "PN接面", + "P-N结": "P-N接面", + "P盘": "本機磁碟(P)", + "Q 盘": "本機磁碟 (Q)", + "Q盘": "本機磁碟(Q)", + "R 盘": "本機磁碟 (R)", + "R盘": "本機磁碟(R)", + "S 盘": "本機磁碟 (S)", + "Sun 微系统": "昇陽電腦", + "Sun微系统": "昇陽電腦", + "S盘": "本機磁碟(S)", + "T 盘": "本機磁碟 (T)", + "T盘": "本機磁碟(T)", + "USB 数字电视棒": "USB 數位電視棒", + "USB 电视棒": "USB 電視棒", + "USB数字电视棒": "USB數位電視棒", + "USB电视棒": "USB電視棒", + "V 盘": "本機磁碟 (V)", + "V盘": "本機磁碟(V)", + "W 盘": "本機磁碟 (W)", + "Windows 接口": "Windows 介面", + "Windows 控制面板": "Windows 控制台", + "Windows 日记本": "Windows 筆記本", + "Windows 照片查看器": "Windows 相片檢視器", + "Windows接口": "Windows介面", + "Windows控制面板": "Windows控制台", + "Windows日记本": "Windows筆記本", + "Windows照片查看器": "Windows相片檢視器", + "W盘": "本機磁碟(W)", + "X 盘": "本機磁碟 (X)", + "X盘": "本機磁碟(X)", + "Y 盘": "本機磁碟 (Y)", + "Y盘": "本機磁碟(Y)", + "Z 盘": "本機磁碟 (Z)", + "Z盘": "本機磁碟(Z)", + "七号信令系统": "第七號發信系統", + "七段数码管": "七段顯示器", + "万维网": "全球資訊網", + "万维网联盟": "全球資訊網協會", + "三叉搜索树": "三元搜尋樹", + "三叉树": "三元樹", + "三叉链表": "三元連結串列", + "上下文切换": "上下文交換", + "上网本": "小筆電", + "下划线": "底線", + "下拉列表": "下拉式清單", + "下拉菜单": "下拉式選單", + "下溢": "欠位", + "与门": "及閘", + "与非逻辑": "反及邏輯", + "与非门": "反及閘", + "专用集成电路": "特殊應用積體電路", + "世界互联网大会": "世界互聯網大會", + "世界移动通信大会": "世界行動通訊大會", + "丢失": "遺失", + "个人数码助理": "個人數位助理", + "个人网": "個人區域網路", + "个性化": "個人化", + "中端": "中階", + "中级": "中階", + "中间件": "中介軟體", + "丰富互联网应用程序": "多樣化網際網路應用程式", + "串口": "序列埠", + "串行": "序列", + "串行端口": "序列埠", + "串行计算": "序列計算", + "主存": "主記憶體", + "主引导记录": "主開機紀錄", + "主板": "主機板", + "主页": "首頁", + "主题": "佈景主題", + "乐视云计算": "樂視雲計算", + "乔布斯": "賈伯斯", + "九段数码管": "九段顯示器", + "书写器": "小作家", + "二叉": "二元", + "二叉堆": "二元堆積", + "二叉搜索树": "二元搜尋樹", + "二叉树": "二元樹", + "二叉链表": "二元連結串列", + "二极管": "二極體", + "二进制补码": "二補數", + "云存储": "雲端儲存", + "云盘": "雲端硬碟", + "云计算": "雲端運算", + "互信息": "相互資訊", + "互动娱乐": "互動娛樂", + "互动百科": "互動百科", + "互联网": "網際網路", + "互联网信息办公室": "互聯網信息辦公室", + "互联网内容提供商": "線上內容提供者", + "互联网应急中心": "互聯網應急中心", + "互联网服务提供商": "網際網路服務提供者", + "互联网络信息中心": "互聯網絡信息中心", + "五笔字型": "五筆字型", + "亚阈值": "次臨界", + "交互": "互動", + "产品密钥": "產品金鑰", + "人工智能": "人工智慧", + "人工神經": "類神經", + "人机界面": "人機介面", + "人渣文本": "人渣文本", + "人脸识别": "臉部辨識", + "介质": "媒介", + "介质相关接口": "媒體相依介面", + "他支持": "他支持", + "代码": "程式碼", + "代码生成器": "碼產生器", + "代码表": "代碼表", + "代码页": "頁碼", + "令牌": "權杖", + "以太网": "乙太網路", + "任务切换": "工作切換", + "任务栏": "工作列", + "任务管理器": "工作管理員", + "任务视图": "工作檢視", + "企业移动管理": "企業行動管理", + "企图学": "企圖學", + "优化": "最佳化", + "优盘": "隨身碟", + "优酷视频": "優酷視頻", + "会话": "對談", + "会话劫持": "連線劫持", + "会话标识": "交談識別碼", + "传感器": "感測器", + "传输门": "傳輸閘", + "伪代码": "虛擬碼", + "伯克利软件套件": "柏克萊軟體套件", + "位串": "位元串", + "位图": "點陣圖", + "位操作": "位元運算", + "位模式": "位元型樣", + "位段": "位元欄", + "低保真": "低傳真", + "低清": "低畫質", + "低端": "低階", + "低级": "低階", + "低级编程语言": "低階程式語言", + "低级语言": "低階語言", + "例程": "常式", + "依存类型": "依存型別", + "依赖类型": "依值型別", + "便携式": "可攜式", + "便携版": "可攜式版本", + "便笺": "自黏便箋", + "保存": "儲存", + "保护继电器": "保護電驛", + "信号": "訊號", + "信号量": "號誌", + "信息": "資訊", + "信息产业": "資訊工業", + "信息及通信技术": "資訊及通訊科技", + "信息学": "資訊學", + "信息安全": "資訊安全", + "信息技术": "資訊科技", + "信息接触": "資訊參與", + "信息时代": "資訊時代", + "信息管理": "資訊管理", + "信息过载": "資訊超載", + "信道": "頻道", + "修饰符": "修飾詞", + "偏置": "偏壓", + "像素": "畫素", + "元数据": "元資料", + "元编程": "元程式設計", + "兆字节": "百萬位元組", + "光伏": "太陽能光電", + "光刻": "微影", + "光刻胶": "光阻劑", + "光掩模": "光罩", + "光标": "游標", + "光电二极管": "光電二極體", + "光盘": "光碟", + "光盘驱动器": "光碟機", + "光纤分布式数据接口": "光纖分散式資料介面", + "光网络终端": "光纖網路終端", + "入门版": "簡易版", + "全局": "全域", + "全局唯一标识分区表": "GUID 磁碟分割表", + "全屏": "全螢幕", + "全息": "全像", + "全球移动通信系统协会": "全球行動通訊系統協會", + "全角": "全形", + "全面屏手机": "全螢幕手機", + "全高清": "超高畫質", + "八叉树": "八元樹", + "公共陆基移动网": "公用陸上行動網路", + "公文包": "公事包", + "共享": "共享", + "共享文件夹": "共用資料夾", + "共享软件": "共享軟體", + "共模抑制比": "共模拒斥比", + "关系数据库": "關聯式資料庫", + "兼容": "相容", + "内容分发网络": "內容傳遞網路", + "内容可寻址存储器": "可定址內容記憶體", + "内核": "核心", + "内核事务管理器": "核心交易管理員", + "内置": "內建", + "内联": "行內", + "内联网": "內部網路", + "内部网": "內部網路", + "内部网络": "內部網路", + "内链": "內部連結", + "冒泡排序": "泡沫排序", + "写保护": "防寫", + "写字板": "WordPad", + "冯·诺伊曼": "馮·紐曼", + "击穿电压": "崩潰電壓", + "函数": "函式", + "函数式": "函數式", + "函数式编程": "函式語言程式設計", + "函数编程语言": "函式程式語言", + "刀片服务器": "刀鋒伺服器", + "分区": "分割區", + "分卷压缩": "分割壓縮", + "分层树形视图": "多層次樹狀介面", + "分层视图": "多層次樹狀介面", + "分布式": "分散式", + "分析器": "剖析器", + "分立器件": "離散元件", + "分组交换": "封包交換", + "分组密码": "區塊加密法", + "分组码": "區塊碼", + "分辨率": "解析度", + "分配单元": "單位配置", + "创建": "建立", + "刷新": "重新整理", + "刷新缓存": "清除快取", + "刻录": "燒錄", + "刻蚀": "蝕刻", + "前向链接": "正向鏈結", + "前缀": "字首", + "剪切": "剪下", + "剪贴板": "剪貼簿", + "办公室套件": "辦公室套件", + "功率因数": "功率因素", + "功能手机": "功能型手機", + "加载": "載入", + "动态类型": "動態型別", + "动态绑定": "動態繫結", + "助记符": "輔助記憶碼", + "匹配": "符合", + "区块链接": "區塊鏈結", + "区域和语言选项": "地區及語言選項", + "十六段数码管": "十六段顯示器", + "十四段数码管": "十四段顯示器", + "半角": "半形", + "协作": "協同運作", + "协议": "協定", + "单元格": "儲存格", + "单参函数": "一元函式", + "单点登录": "單一登入", + "单片系统": "單晶片系統", + "单相串励电动机": "交流整流子電動機", + "单选按钮": "無線電鈕", + "单选框": "無線電鈕", + "单通道": "單連結", + "博客": "部落格", + "博客来": "博客來", + "占位符": "預留位置", + "即插即用": "隨插即用", + "卷影复制": "磁碟區陰影複製", + "厄利效应": "爾利效應", + "压缩包": "壓縮檔", + "原生": "固有", + "参数列表": "參數列", + "参数表": "參數列", + "参考资料": "參考資料", + "双参函数": "二元函數", + "双通道": "雙連結", + "反向": "逆向", + "反码": "一補數", + "反规范化": "解除規格化", + "反链接": "反鏈結", + "反馈": "回饋", + "发射极": "射極", + "发生器": "產生器", + "发短信": "傳簡訊", + "发行": "釋出", + "发送": "傳送", + "受主": "受體", + "变量": "變數", + "叠加定理": "重疊定理", + "句柄": "控制代碼", + "只写": "唯寫", + "只写存储器": "唯寫記憶體", + "只读": "唯讀", + "只读存储器": "唯讀記憶體", + "可变码率": "變動位元速率", + "可执行": "可執行", + "可执行文件": "可執行檔", + "可扩展": "可延伸", + "可扩展商业报告语言": "可延伸商用報告語言", + "可扩展固件接口": "可延伸韌體介面", + "可扩展置标语言": "可延伸標示語言", + "可控硅": "矽控整流器", + "可移动": "抽取式", + "可移植文档格式": "可攜式文件格式", + "可编程逻辑门阵列": "可程式化邏輯閘陣列", + "可编程逻辑阵列": "可程式化邏輯陣列", + "可编程阵列逻辑": "可程式化陣列邏輯", + "可视化": "視覺化", + "可重构计算": "可重組計算", + "台式机": "桌上型電腦", + "吉字节": "吉位元組", + "吉比特以太网": "十億位元乙太網路", + "同或逻辑": "反互斥或邏輯", + "同或门": "反互斥或閘", + "名字空间": "命名空間", + "后台流量": "背景流量", + "后台运行": "背景執行", + "后缀": "字尾", + "向下兼容": "向下相容", + "向导": "精靈", + "启动引导程序": "啟動載入程式", + "启动栏": "啟動列", + "启动盘": "啟動磁碟", + "启动转换": "啟動切換", + "启辉器": "啟動器", + "呼叫转移": "來電轉駁", + "命令列表": "命令列表", + "命令式编程": "指令式程式設計", + "命令提示符": "命令提示字元", + "命令栏": "命令列", + "命令行": "命令列", + "命令链接": "命令鏈結", + "哈希": "雜湊", + "响应": "回應", + "商业模型": "商業模式", + "器件": "元件", + "四叉树": "四元樹", + "回复": "回覆", + "回复原": "回復原", + "回收站": "資源回收筒", + "回调": "回呼", + "回车符": "回車字元", + "回车键": "確認鍵", + "因特网密钥交换": "網際網路金鑰交換", + "固件": "韌體", + "固定电话": "固網電信", + "固定码率": "固定位元速率", + "固实压缩": "結實壓縮", + "国家互联网应急中心": "國家互聯網應急中心", + "国家测绘地理信息局": "國家測繪地理信息局", + "图像文件": "圖檔", + "图像浏览器": "圖片檢視器", + "图形处理器": "圖形處理器", + "图形学": "圖學", + "图形用户界面": "圖形化使用者介面", + "图形计算器": "繪圖計算機", + "图标": "圖示", + "图灵完全": "圖靈完備", + "图灵完备": "圖靈完備", + "土豆视频": "土豆視頻", + "在线": "線上", + "在线视频": "網路影片", + "地图学": "地圖學", + "地址": "位址", + "地址栏": "網址列", + "地面": "無線", + "地面广播": "無線廣播", + "地面数字电视": "數位無線電視", + "地面电视": "無線電視", + "坏道": "壞軌", + "坐标": "座標", + "城域网": "都會網路", + "基于原型的编程": "原型程式設計", + "基于类": "類別為基", + "基于类似": "基於類似", + "基于类型": "基於類型", + "基于类的编程": "類別為基的程式設計", + "基带": "基頻", + "基类": "基礎類別", + "基类型": "基本類型", + "堆排序": "堆積排序", + "堆栈": "堆疊", + "堆栈帧": "堆疊框", + "增强现实": "擴增實境", + "墨球": "筆跡球", + "壁纸": "桌布", + "声卡": "音效卡", + "声明语句": "宣告", + "处理函数": "處理常式", + "复印": "影印", + "复杂度类": "複雜度類別", + "复杂度类似": "複雜度類似", + "复杂性类": "複雜性類別", + "复选按钮": "核取按鈕", + "复选框": "核取方塊", + "外延": "磊晶", + "外置": "外接", + "外置硬盘": "外接硬碟", + "外链": "外部連結", + "外键": "外來鍵", + "多主体系统": "多代理系統", + "多任务": "多工", + "多宿主": "內送流量備援容錯機制", + "多态": "多型", + "多线程": "多緒", + "多谐振荡器": "複振器", + "多选框": "核取方塊", + "多频道网络": "多頻道聯播網", + "大型机": "大型電腦", + "大数据": "巨量資料", + "大规模集成电路": "大型積體電路", + "太字节": "兆位元組", + "太阳能光伏": "太陽能光電", + "头文件": "標頭檔", + "夹断": "夹止", + "套接层": "通訊層", + "她支持": "她支持", + "子例程": "次常式", + "子类型": "子類型", + "子网": "子網路", + "字体": "字型", + "字段": "欄位", + "字符": "字元", + "字符串": "字串", + "字符号": "字符號", + "字符打印机": "字元列印機", + "字符映射表": "字元對應表", + "字符生成器": "字元產生器", + "字节": "位元組", + "字节跳动": "字節跳動", + "存储": "儲存", + "存储卡": "記憶卡", + "存储器": "記憶體", + "存储程序": "儲存程序", + "守护进程": "守護行程", + "安全中心": "資訊安全中心", + "安全套接层": "安全通訊協定", + "安全帐户管理器": "安全性帳戶管理員", + "安全软件": "安全軟體", + "安装包": "安裝套件", + "完全屏蔽": "完全屏蔽", + "完备码": "完整码", + "宏": "巨集", + "宏内核": "單核心", + "宏块": "大區塊", + "宏病毒": "巨集病毒", + "定位框": "定位域", + "定制": "客製化", + "实例方法": "實體方法", + "实时": "即時", + "审核": "稽核", + "客户端": "用戶端", + "家庭": "住家", + "家庭地址": "住家地址", + "家庭普通版": "家用入門版", + "家庭版": "家用版", + "家庭组": "家用群組", + "家庭高级版": "家用進階版", + "家长控制": "家長監護", + "宽屏": "寬螢幕", + "宽带": "寬頻", + "寄存器": "暫存器", + "密码认证协议": "通行碼鑑別協定", + "密钥": "金鑰", + "对话框": "對話方塊", + "对象": "物件", + "对象连接与嵌入": "物件連結與嵌入", + "寻址": "定址", + "寻址模式": "定址模式", + "导入": "匯入", + "导出": "匯出", + "导航条": "導覽列", + "封装内系统": "封裝體系", + "射极跟随器": "射極隨耦器", + "小组": "群組", + "尧字节": "佑位元組", + "尾注": "章節附註", + "尾部递归": "尾端遞迴", + "局域网": "區域網路", + "层次结构": "階層", + "屏幕": "螢幕", + "屏幕保护程序": "螢幕保護裝置", + "屏幕键盘": "螢幕小鍵盤", + "属性": "內容", + "嵌套": "巢狀", + "工业和信息化": "工業和信息化", + "工作组": "工作群組", + "工具栏": "工具列", + "工程": "專案", + "工艺": "製程", + "工频": "電源頻率", + "差错检测码": "誤差檢測碼", + "已保存的搜索": "儲存的搜尋", + "布尔": "布林", + "布尔逻辑": "布林運算", + "帖子": "貼文", + "带圈": "圍繞", + "带圈字符": "圍繞字元", + "带宽": "頻寬", + "帧": "影格", + "帧同步": "影格同步化", + "帧指针": "影格指標", + "帧率": "影格率", + "帮助": "說明", + "帮助与支持": "說明與支援", + "帮助文档": "說明文件", + "常量": "常數", + "平均码率": "平均位元速率", + "平板电脑": "平板電腦", + "并发": "並行", + "并发计算": "並行計算", + "并行": "並列", + "并行端口": "並列埠", + "并行计算": "平行計算", + "幻灯片": "投影片", + "广告位": "廣告區", + "广域网": "廣域網路", + "应用程序": "應用程式", + "应用程序接口": "應用程式介面", + "开启": "開啟", + "开始菜单": "開始功能表", + "开放手持设备联盟": "開放手機聯盟", + "开放移动联盟": "開放行動聯盟", + "异常处理": "例外處理", + "异或": "互斥或", + "异或逻辑": "互斥或邏輯", + "异或门": "互斥或閘", + "异步": "非同步", + "异质结": "異質接面", + "引导": "啟動", + "引用": "參照", + "弱类型": "弱型別", + "弹出窗口": "彈出式視窗", + "强类型": "強型別", + "归并": "合併", + "当且仅当": "若且唯若", + "当前版本": "目前版本", + "当机器": "當機器", + "录像带": "錄影帶", + "彩信": "多媒體簡訊", + "彩屏": "彩色螢幕", + "影片流": "影片串流", + "影音流": "影音串流", + "循环": "迴圈", + "微博": "微網誌", + "微博客": "微部落格", + "微型博客": "微型部落格", + "微比特": "微比特", + "快捷工具栏": "快捷列", + "快捷方式": "捷徑", + "快捷键": "快速鍵", + "性价比": "CP 值", + "性能": "效能", + "总线": "匯流排", + "恢复": "回復", + "恢复光盘": "還原光碟", + "恢复原": "恢復原", + "恢复记录": "恢復記錄", + "情景模式": "音訊設定檔", + "我支持": "我支持", + "我的文档": "我的文件", + "或门": "或閘", + "或非逻辑": "反或邏輯", + "或非门": "反或閘", + "截": "擷", + "截取": "擷取", + "截图": "擷取", + "截图工具": "剪取工具", + "截屏": "螢幕擷取", + "扇区": "磁區", + "手持地面无线": "手持式數位視訊廣播", + "扎克伯格": "祖克柏", + "扒站": "砍站", + "打印": "列印", + "打印机": "印表機", + "打印预览": "預覽列印", + "托管": "代管", + "托管代码": "受控代碼", + "执行者": "執行者", + "扩展 A 区": "擴充 A 區", + "扩展 B 区": "擴充 B 區", + "扩展 C 区": "擴充 C 區", + "扩展 D 区": "擴充 D 區", + "扩展 E 区": "擴充 E 區", + "扩展 F 区": "擴充 F 區", + "扩展 G 区": "擴充 G 區", + "扩展A区": "擴充A區", + "扩展B区": "擴充B區", + "扩展C区": "擴充C區", + "扩展D区": "擴充D區", + "扩展E区": "擴充E區", + "扩展F区": "擴充F區", + "扩展G区": "擴充G區", + "扩展区": "擴充區", + "扩展名": "副檔名", + "扩展支持": "延伸支援", + "扩展汉字": "擴充漢字", + "扩展现实": "延展實境", + "扩谱": "展譜", + "扩频": "展頻", + "扫描仪": "掃描器", + "扫雷": "踩地雷", + "扬声器": "喇叭", + "批处理": "批次處理", + "批处理文件": "批次檔", + "批处理程序": "批次程式", + "批量": "批次", + "投影仪": "投影機", + "抖音短视频": "抖音短視頻", + "抛出": "丟擲", + "抽样": "取樣", + "拍字节": "拍位元組", + "拒绝服务": "阻斷服務", + "持久性": "永續性", + "指针": "指標", + "按位": "按位元", + "捷威": "桀威", + "接入复用器": "接取多工器", + "接入点": "存取點", + "接近传感器": "鄰近感測器", + "控件": "控制項", + "控制面板": "控制台", + "推导": "推導", + "推送": "推播", + "掩模": "光罩", + "掩码": "遮罩", + "提交": "送出", + "搜狐博客": "搜狐博客", + "搜狐视频": "搜狐視頻", + "搜狗搜索": "搜狗搜索", + "搜索": "搜尋", + "搜索关键字": "搜尋鍵碼", + "搜索框": "搜尋方塊", + "摄像头": "網路攝影機", + "摄像机": "攝錄影機", + "撤销": "復原", + "播客": "Podcast", + "操作中心": "重要訊息中心", + "操作对象": "運算物件", + "操作数": "運算元", + "操作系统": "作業系統", + "支持": "支援", + "支持他": "支持他", + "支持向量": "支持向量", + "支持她": "支持她", + "支持我": "支持我", + "支持者": "支持者", + "收藏夹": "我的最愛", + "放大区": "主動區", + "散列": "雜湊", + "数字": "數位", + "数字信号处理器": "數位訊號處理器", + "数字化": "數位化", + "数字发行": "數位發行", + "数字图像": "數位影像", + "数字地面电视": "數位無線電視", + "数字媒体": "數位媒體", + "数字广播": "數位廣播", + "数字模式": "數位模式", + "数字模拟转换器": "數位類比轉換器", + "数字水印": "數位浮水印", + "数字测图": "數位製圖", + "数字照片": "數位相片", + "数字电视": "數位電視", + "数字相机": "數位相機", + "数字移动": "數位行動", + "数字签名": "數位簽章", + "数字视频": "數位影片", + "数字证书": "數位憑證", + "数字资产": "數位資產", + "数字身份": "數位身分", + "数据": "資料", + "数据中心": "資料中心", + "数据仓库": "資料倉儲", + "数据包": "封包", + "数据包含": "資料包含", + "数据包括": "資料包括", + "数据帧": "資料框", + "数据库": "資料庫", + "数据报文": "資料報", + "数据挖掘": "資料探勘", + "数据捕捞": "資料挖掘", + "数据清洗": "資料淨化", + "数据源": "資料來源", + "数据选择器": "數據多工器", + "数据链接": "資料鏈結", + "数据集市": "資料市集", + "数码视讯": "數碼視訊", + "数码通": "數碼通", + "数组": "陣列", + "文件": "檔案", + "文件主名": "主檔名", + "文件名": "檔名", + "文件名字": "檔案名字", + "文件名字空间": "檔案命名空間", + "文件名称": "檔案名稱", + "文件复制服务": "檔案複寫服務", + "文件扩展名": "副檔名", + "文件描述符": "檔案描述子", + "文件管理器": "檔案管理員", + "文件系统": "檔案系統", + "文件资源管理器": "檔案總管", + "文字体系": "文字體系", + "文字处理": "文書處理", + "文字处理器": "文書處理器", + "文本": "文字", + "文本文件": "文字檔案", + "文本框": "文字方塊", + "文本编辑器": "文字編輯器", + "文档": "文件", + "文档对象模型": "文件物件模型", + "文档文件": "文件檔案", + "斯诺登": "史諾登", + "新浪博客": "新浪博客", + "新浪视频": "新浪視頻", + "方程式": "方程式", + "施主": "施體", + "施乐": "全錄", + "施密特触发器": "施密特觸發器", + "旗舰版": "旗艦版", + "无损": "無失真", + "无损压缩": "無失真壓縮", + "无源滤波器": "被動式濾波器", + "无用信息": "多餘的資料", + "日历": "行事曆", + "日历程序": "行事曆程式", + "日志": "紀錄檔", + "时分": "分時", + "时分复用": "分時多工", + "时分多址": "分時多重進接", + "时钟门控": "時脈閘控", + "时间脉冲信号": "定時器訊號", + "时隙": "時槽", + "易失性": "揮發性", + "映射": "對映", + "显像管": "映像管", + "显卡": "顯示卡", + "显存": "視訊記憶體", + "显示卡": "視訊卡", + "显示器": "監視器", + "显示屏": "顯示器", + "晶体管": "電晶體", + "晶闸管": "閘流體", + "智能": "智慧型", + "智能 ABC": "智能 ABC", + "智能ABC": "智能ABC", + "智能化": "智慧化", + "智能卡": "智慧卡", + "智能型": "智慧型", + "智能手机": "智慧型手機", + "智能手表": "智慧型手錶", + "智能电视": "智慧型電視", + "智能音箱": "智慧型喇叭", + "最优": "最佳", + "最优先": "最優先", + "最优秀": "最優秀", + "最优美": "最優美", + "最优质": "最優質", + "最底层派生类": "最末層衍生類別", + "最终用户": "終端使用者", + "月光博客": "月光博客", + "有损": "失真", + "有损压缩": "失真壓縮", + "有源": "主動", + "服务器": "伺服器", + "服务器消息块": "伺服器訊息區塊", + "服务器阵列": "伺服器陣列", + "服务套餐": "服務專案", + "服务框架": "服務架構", + "服务端": "伺服器端", + "本地": "本機", + "本地化": "在地化", + "机器代码": "機器碼", + "机顶盒": "機上盒", + "杀毒": "防毒", + "权标": "符記", + "权限": "許可權", + "构造函数": "建構函式", + "析构": "解構", + "析构函数": "解構函式", + "枚举": "列舉", + "枚举器": "列舉元", + "枚举成员": "列舉元", + "果冻豆": "雷根糖", + "查找": "尋找", + "查看": "檢視", + "栅极": "閘極", + "标头": "檔頭", + "标清": "標準畫質", + "标签页": "分頁", + "标识符": "識別碼", + "标量": "純量", + "标题栏": "標題列", + "校园网": "校園網路", + "格芯": "格羅方德", + "框图": "方塊圖", + "桌面型": "桌上型", + "桌面版": "電腦版", + "档案室": "檔案室", + "档案馆": "檔案館", + "梦幻桌面": "DreamScene", + "检错码": "偵錯碼", + "检验位": "核對位元", + "检验和": "核對和", + "模块": "模組", + "模式": "範式", + "模式识别": "圖型識別", + "模拟": "類比", + "模拟器": "模擬器", + "模拟广播": "類比廣播", + "模拟数字转换器": "類比數位轉換器", + "模拟现实": "模擬實境", + "模拟电视": "類比電視", + "横屏幕": "橫螢幕", + "正则表达式": "正規表示式", + "正则语言": "正規語言", + "正向": "順向", + "正弦信号": "正弦訊號", + "死机": "當機", + "死锁": "死結", + "残余边带": "殘邊帶", + "比特": "位元", + "比特分": "比特分", + "比特差错": "位元錯誤", + "比特币": "比特幣", + "比特彗星": "比特彗星", + "比特率": "位元速率", + "比特精灵": "比特精靈", + "比特误码率": "位元錯誤率", + "毫比特": "毫比特", + "水印": "浮水印", + "汇编": "組譯", + "汇编语言": "組合語言", + "汉字体系": "漢字體系", + "沃森": "華生", + "沟道": "通道", + "波分复用": "波長分波多工", + "波特": "鮑", + "波特率": "鮑率", + "注入": "資料隱碼", + "注册机": "序號產生器", + "注册表": "登錄檔", + "注册表编辑器": "登錄編輯程式", + "注销": "登出", + "泽字节": "皆位元組", + "活动目录": "Active Directory", + "活锁": "活結", + "派生": "衍生", + "派生类": "衍生類別", + "派生类型": "衍生類型", + "流媒体": "串流媒體", + "流密码": "串流加密法", + "测序": "定序", + "浏览框": "瀏覽域", + "消息": "訊息", + "消息框": "訊息方塊", + "消息认证码": "訊息鑑別碼", + "混合信号": "混訊", + "混合信号集成电路": "混合訊號積體電路", + "混合现实": "混合實境", + "清晰度": "解析度", + "清理缓存": "清除快取", + "渲染": "彩現", + "溃客": "劊客", + "源代码": "原始碼", + "源文件": "原始檔", + "滑块": "滾軸", + "滚动": "捲動", + "滚动更新": "滾動更新", + "滚动栏": "捲軸", + "滚动框": "捲動方塊", + "漏极": "汲極", + "演示稿": "簡報", + "澳门增补字符集": "澳門增補字符集", + "澳门资讯系统字集": "澳門資訊系統字集", + "激光": "雷射", + "激光视盘": "雷射影碟", + "激励表": "激發表", + "激活": "啟用", + "激活函数": "啟用功能", + "火山小视频": "火山小視頻", + "点击": "點選", + "点对点": "對等", + "照片": "相片", + "照片库": "相片圖庫", + "照片查看器": "相片檢視器", + "照相手机": "照相手機", + "父类": "父類別", + "物理内存": "實體記憶體", + "物理地址": "實體位址", + "物理层": "實體層", + "特丽珑": "特麗霓虹", + "状态栏": "狀態列", + "玩家国度": "玩家共和國", + "用户": "使用者", + "用户名": "使用者名稱", + "用户帐户控制": "使用者帳戶控制", + "用户框": "使用者方塊", + "用户界面": "使用者介面", + "用户组": "使用者群組", + "用户页": "使用者頁面", + "电信": "電信", + "电信业": "電信業", + "电信公司": "電信公司", + "电信商": "電信商", + "电信服务": "電信服務", + "电信行业": "電信行業", + "电信运营商": "電信業者", + "电图学": "電圖學", + "电子表格": "電子試算表", + "电子计算机": "電腦", + "电子迁移率": "電子移動率", + "电子邮件": "電子郵件", + "电影片": "電影片", + "电气工程": "電機工程", + "电源保护": "不斷電系統", + "电视频": "電視頻", + "画图": "小畫家", + "疑难解答": "疑難排解", + "登录": "登入", + "白炽灯": "白熾燈", + "百度云计算": "百度雲計算", + "百度搜索": "百度搜索", + "百度相册": "百度相冊", + "百度视频": "百度視頻", + "皮肤": "外觀", + "监控": "監視", + "盖茨": "蓋茲", + "盘符": "磁碟機代號", + "目标代码": "目的碼", + "目标文件": "目的檔案", + "目标用户": "目標使用者", + "目标软件": "目標軟體", + "相册": "相簿", + "矢量": "向量", + "矢量图形": "向量圖形", + "短信": "簡訊", + "短视频": "短影音", + "码分": "分碼", + "码分多址": "分碼多重進接", + "码率": "位元速率", + "硅": "矽", + "硬件": "硬體", + "硬烘干": "硬烤", + "硬盘": "硬碟", + "硬盘阵列": "硬碟陣列", + "硬盘驱动器": "硬碟機", + "硬编码": "寫死", + "磁头划碰": "磁頭損壞", + "磁盘": "磁碟", + "磁盘清理": "磁碟清理", + "磁盘碎片整理": "磁碟重組", + "磁盘碎片整理程序": "磁碟重組工具", + "磁盘阵列": "磁碟陣列", + "磁盘驱动器": "磁碟機", + "磁道": "磁軌", + "示例": "範例", + "社交媒体": "社群媒體", + "社交网站": "社群網站", + "社交网络": "社群網路", + "社会媒体": "社群媒體", + "社区": "社群", + "移动中心": "行動中心", + "移动互联网": "行動網際網路", + "移动产品": "行動產品", + "移动代理": "行動代理", + "移动代码": "行動程式碼", + "移动信息设备配置文件": "行動資訊裝置設定檔", + "移动公司": "行動公司", + "移动内容管理": "行動內容管理", + "移动客户端": "行動用戶端", + "移动平台": "行動平台", + "移动广播": "行動廣播", + "移动应用": "行動應用", + "移动应用管理": "行動應用管理", + "移动性": "行動性", + "移动操作系统": "行動作業系統", + "移动支付": "行動支付", + "移动数据": "行動資料", + "移动浏览器": "行動瀏覽器", + "移动版": "行動版", + "移动版块": "移動版塊", + "移动版面": "移動版面", + "移动电信": "行動電信", + "移动电信运营商": "行動電信業者", + "移动电源": "行動電源", + "移动电视": "行動電視", + "移动电话": "行動電話", + "移动硬盘": "行動硬碟", + "移动端": "行動端", + "移动终端": "行動終端", + "移动网络": "行動網路", + "移动网络运营商": "行動網路業者", + "移动联网设备": "行動網路裝置", + "移动计算机": "行動電腦", + "移动设备": "行動裝置", + "移动设备管理": "行動裝置管理", + "移动软件": "行動軟體", + "移动运营商": "行動業者", + "移动通信": "行動通訊", + "移相键控": "相位移鍵", + "程序": "程式", + "程序员": "程式設計師", + "程序编写员": "程式設計師", + "程序设计": "程式設計", + "空串": "空字串", + "空分复用": "空間多工", + "空分多址": "分空間多重進接", + "空列表": "空串列", + "空当接龙": "新接龍", + "空穴": "電洞", + "窄带": "窄頻", + "窗体": "表單", + "窗口": "視窗", + "窗口管理器": "視窗管理員", + "站点标识按钮": "網站識別鈕", + "竞争冒险": "競爭危害", + "端口转发": "通訊埠轉發", + "笔记本电脑": "筆記型電腦", + "第一范式": "第一規格化", + "第三范式": "第三正規化", + "第二范式": "第二正規化", + "第五范式": "第五規格化", + "第六范式": "第六規格化", + "第四范式": "第四規格化", + "答复": "答覆", + "签名": "簽章", + "算法": "演算法", + "类加载器": "類別載入器", + "类变量": "類別變數", + "类型": "型別", + "类型代码": "類型代碼", + "类型检查": "型別檢查", + "类型系统": "型別系統", + "类声明": "類別宣告", + "类定义": "類別定義", + "类实例": "類別實例", + "类库": "類別館", + "类成员": "類別成員", + "类方法": "類別方法", + "类模板": "類別模板", + "类的实例": "類別的實例", + "类的构造函数": "類別的建構函數", + "类的析构函数": "類別的破壞函數", + "粘贴": "貼上", + "系统盘": "系統磁碟", + "系统资源管理器": "系統資源管理員", + "系统配置": "系統設定", + "系统配置实用程序": "系統設定公用程式", + "索尼移动": "索尼行動", + "索尼移动通信": "索尼行動通訊", + "繁体": "正體", + "纠错码": "錯誤更正碼", + "红心大战": "傷心小棧", + "纸牌": "接龍", + "纹波": "漣波", + "线程": "執行緒", + "组件": "元件", + "组合框": "組合方塊", + "组提示": "群組提示", + "组策略": "群組原則", + "组群": "群組", + "组链接": "塊鏈結", + "终端": "終端機", + "终结器": "終端子", + "绑定": "繫結", + "结合存储": "可定址內容記憶體", + "结型": "接面型", + "结型场效应管": "接面場效電晶體", + "绘文字": "繪文字", + "绝缘栅双极晶体管": "絕緣閘雙極電晶體", + "统一渲染架构": "統一著色器架構", + "继承列表": "衍化列", + "维基共享资源": "維基共享資源", + "维基数据": "維基數據", + "绿色版": "可攜式版本", + "绿色软件": "可攜式軟體", + "缓冲器": "緩衝區", + "缓冲存储器": "快取記憶體", + "缓存": "快取", + "缓存溢出": "緩衝區溢位", + "编程范型": "程式設計範式", + "编程语言": "程式語言", + "编辑栏": "編輯列", + "缩略网址": "縮網址", + "缩进": "縮排", + "网上论坛": "網路論壇", + "网上邻居": "網路上的芳鄰", + "网关": "閘道器", + "网卡": "網路卡", + "网吧": "網咖", + "网易博客": "網易博客", + "网易相册": "網易相冊", + "网易视频": "網易視頻", + "网景导航者": "網景領航員", + "网格线": "格線", + "网民": "網友", + "网民报告": "網民報告", + "网状数据库": "網狀式資料庫", + "网盘": "網路硬碟", + "网络": "網路", + "网络动画": "網路動畫", + "网络安全和信息化": "網絡安全和信息化", + "网络广播电视台": "網絡廣播電視台", + "网络文化": "網路文化", + "网络欺凌": "網路霸凌", + "网络漫画": "網路漫畫", + "网络电视台": "網絡電視台", + "网络硬盘": "網路硬碟", + "网络购物": "網路購物", + "网络运营商": "網路業者", + "网路电视台": "網路電視台", + "置标语言": "標示語言", + "美国在线": "美國線上", + "耗尽": "空乏", + "耗尽层": "空乏層", + "联机": "連線", + "联机交易处理": "線上異動處理", + "联机分析处理": "連線分析處理", + "联系": "連絡", + "联系人": "聯絡人", + "肖特基": "蕭特基", + "脉冲": "脈波", + "脉冲逆变器": "變流器", + "脑机接口": "人機介面", + "脚本": "指令碼", + "脚本小子": "腳本小子", + "脚本语言": "手稿語言", + "脚注": "註腳", + "脱机": "離線", + "脸书": "臉書", + "腾讯云计算": "騰訊雲計算", + "腾讯博客": "騰訊博客", + "腾讯视频": "騰訊視頻", + "自定义": "自訂", + "自底向上": "由下而上", + "自述文件": "讀我檔案", + "艾字节": "艾位元組", + "节能灯": "省電燈泡", + "芯片": "晶片", + "英伟达": "輝達", + "范型": "範式", + "草榴社区": "草榴社區", + "荷码率": "位元速率", + "获取": "取得", + "菊花链接": "菊式鏈結", + "营销": "行銷", + "著作权": "著作權", + "著作权信息": "著作權資訊", + "蓝屏死机": "藍白當機", + "虚函数": "虛擬函式", + "虚拟专用网": "虛擬私人網路", + "虚拟内存": "虛擬記憶體", + "虚拟机": "虛擬機器", + "蜂窝数据": "蜂巢式資料", + "蜂窝网络": "蜂巢式網路", + "蜘蛛纸牌": "連環新接龍", + "补码": "二補數", + "表情包": "哏圖", + "表格": "試算表", + "表达式": "運算式", + "衬底": "基板", + "西瓜视频": "西瓜視頻", + "西部数据": "威騰電子", + "覆盖": "覆寫", + "覆铜板": "銅箔基板", + "规范化": "規格化", + "视频处理器": "影像處理器", + "视频接口": "視訊連接頭", + "视频文件": "視訊檔", + "视频文档": "視訊檔案", + "视频档": "視訊檔", + "视频游戏": "電動遊戲", + "视频轨": "視訊軌", + "视频输入": "視訊輸入", + "视频输出": "視訊輸出", + "解引用": "解除參照", + "解释器": "直譯器", + "解释型语言": "直譯語言", + "触发器": "正反器", + "触屏": "觸控螢幕", + "触摸": "輕觸", + "触摸屏": "觸控式螢幕", + "触摸板": "觸控板", + "计划任务": "工作排程器", + "计算机": "電腦", + "计算机体系结构": "電腦架構", + "计算机科学": "電腦科學", + "讲述人": "朗讀程式", + "论坛": "論壇", + "设备": "裝置", + "设备上下文": "裝置內容", + "设备环境": "裝置環境", + "设备管理器": "裝置管理員", + "设置": "設定", + "访问学者": "訪問學者", + "访问控制表": "存取控制列表", + "访问量": "瀏覽量", + "证书": "憑證", + "评测系统": "解題系統", + "识别": "辨識", + "译码": "解碼", + "试图学": "試圖學", + "语义": "語意", + "语义网": "語意網", + "语句": "語句", + "语法高亮": "語法突顯", + "语言包": "語言套件", + "语音识别": "語音辨識", + "误码率": "誤碼率", + "请勿追踪": "停止追蹤", + "诺顿克隆精灵": "諾頓魅影系統", + "读卡器": "讀卡機", + "调制": "調變", + "调制解调器": "數據機", + "调度": "排程", + "调度器": "排程器", + "调用层接口": "呼叫層級介面", + "调色板": "調色盤", + "调试": "除錯", + "谷歌": "Google", + "谷歌云消息传递": "Google 雲端通訊", + "谷歌工具条": "Google 工具列", + "谷歌文档": "Google 文件", + "谷歌浏览器内嵌框架": "Google Chrome 內嵌瀏覽框", + "谷歌视频": "Google 影片", + "谷翔信息技术": "谷翔信息技術", + "账号": "帳號", + "账户": "帳戶", + "贪心法": "貪婪法", + "贪心算法": "貪婪演算法", + "贴靠": "貼齊", + "资源管理器": "檔案總管", + "资讯台": "資訊台", + "资讯频道": "資訊頻道", + "赋值运算符": "設定運算子", + "超大规模集成电路": "超大型積體電路", + "超文本标记语言": "超文件標示語言", + "超文本置标语言": "超文件標示語言", + "超时": "逾時", + "超极本": "超極致筆電", + "超编程": "超程式設計", + "超高清": "超高畫質", + "身份": "身分", + "转义": "跳脫", + "转换": "轉檔", + "软件": "軟體", + "软件包": "軟體套件", + "软件包管理系统": "軟體套件管理系統", + "软件开发工具包": "軟體開發套件", + "软件过程": "軟體流程", + "软烘干": "軟烤", + "软盘": "軟碟", + "软盘驱动器": "軟碟機", + "轻松访问": "輕鬆存取", + "载流子": "載子", + "边栏": "資訊看板", + "过程化": "程序化", + "过程式": "程序式", + "过程生成": "程序化生成", + "运算符": "運算子", + "运算符号": "運算符號", + "运行": "執行", + "进程控制块": "過程控制段", + "进程组": "行程群組", + "进程间": "行程間", + "进程间通信": "行程間通訊", + "远程": "遠端", + "远程桌面协议": "遠端桌面協定", + "远程过程调用": "遠端程序呼叫", + "连接": "連線", + "连续互通": "接續互通", + "退出应用程序": "結束應用程式", + "退出程序": "結束程式", + "适配器": "配接器", + "逆变器": "變流器", + "选项卡": "索引標籤", + "递归": "遞迴", + "通信": "通訊", + "通信学": "通訊學", + "通信顺序进程": "交談循序程式", + "通用串行总线": "通用序列匯流排", + "通用分组无线服务": "通用封包無線服務", + "通用序列总线": "通用序列匯流排", + "通讯录": "通訊錄", + "通配符": "萬用字元", + "逻辑卷管理": "邏輯捲軸管理", + "逻辑器件": "邏輯裝置", + "逻辑门": "邏輯閘", + "邮件列表": "郵寄清單", + "邮箱": "電子信箱", + "部分": "部份", + "配置": "組態", + "采样定理": "取樣定理", + "重启": "重新啟動", + "重命名": "重新命名", + "重复组": "重複群", + "重定向": "重新導向", + "重定向页": "重新導向頁面", + "重码率": "重碼率", + "重置": "重設", + "重装": "重灌", + "金卤灯": "高強度氣體放電燈", + "金属氧化物半导体": "金氧半導體", + "金属氧化物半导体场效应管": "金屬氧化物半導體場效電晶體", + "钩子": "勾點", + "链接反向": "鏈結反向", + "链接搜索": "鏈結搜尋", + "链接正向": "鏈結正向", + "链表": "連結串列", + "锁存器": "閂鎖", + "锁定": "釘選", + "键盘布局": "鍵盤配置", + "镇流器": "安定器", + "镜像": "映象", + "门户系统": "入口網站", + "门户网站": "入口網站", + "门电路": "閘電路", + "闪存": "快閃記憶體", + "闪存盘": "隨身碟", + "闪迪": "新帝", + "队列": "佇列", + "阵列服务器": "陣列伺服器", + "阵列硬盘": "陣列硬碟", + "阿里云计算": "阿里雲計算", + "阿里巴巴网络": "阿里巴巴網絡", + "附件": "附屬應用程式", + "附加组件": "附加元件", + "随机存储器": "隨機存取記憶體", + "随机存取": "隨機存取", + "随机数": "亂數", + "隐身模式": "無痕模式", + "集成": "整合", + "集成开发环境": "整合式開發環境", + "集成数字增强网络": "整合數位強化網路", + "集成电路": "積體電路", + "集成设备电路": "整合裝置電路", + "集群": "叢集", + "雪崩击穿": "突崩潰", + "静态类型": "靜態型別", + "非门": "反閘", + "面向代理编程": "代理人導向程式設計", + "面向堆栈": "堆疊導向", + "面向对象": "物件導向", + "面向对象编程": "物件導向程式設計", + "面向并发": "平行導向", + "面向文档": "文件導向", + "面向消息": "訊息導向", + "面向消息的中间件": "訊息導向中介層", + "面向类": "類別導向", + "面向语言的程序设计": "語言導向程式設計", + "面向过程": "程序導向", + "音频": "音訊", + "音频文件": "音訊檔", + "音频文档": "音訊檔", + "音频档": "音訊檔", + "音频轨": "音訊軌", + "音频输入": "音訊輸入", + "音频输出": "音訊輸出", + "页眉": "頁首", + "页脚": "頁尾", + "项目页": "計畫頁", + "频分": "分頻", + "频分复用": "分頻多工", + "频分多址": "分頻多重進接", + "风河": "溫瑞爾", + "飞兆半导体": "快捷半導體", + "飞兆半导体公司": "快捷半導體公司", + "飞行模式": "飛航模式", + "首席信息官": "資訊長", + "首席执行官": "執行長", + "首席技术官": "技術長", + "首席运营官": "營運長", + "首选项": "偏好設定", + "香农": "夏農", + "香港增补字符集": "香港增補字符集", + "驱动程序": "驅動程式", + "高亮": "突顯", + "高亮度": "高亮度", + "高亮显示": "突出顯示", + "高保真": "高傳真", + "高清": "高畫質", + "高清多媒体界面": "高畫質多媒體介面", + "高清晰": "高解析", + "高清音质": "高音質", + "高清音频": "高音質音訊", + "高端": "高階", + "高级": "進階", + "高级编程语言": "高階程式語言", + "高级语言": "高階語言", + "高速缓冲存储器": "高速緩衝記憶體", + "鲍尔默": "巴爾默", + "鸭子类型": "鴨子型別", + "黑客": "駭客", + "黑屏": "黑畫面", + "黑盒测试": "黑箱測試", + "默认": "預設", + "鼠标": "滑鼠", + "齐纳二极管": "稽納二極體", + "不可改变": "不可變造", + "不可变性": "不可變造性", + "防串通": "防勾結", + "操作码": "opcode", + "网桥": "橋接器", + "无许可": "非許可制", + "瘦客户端": "精簡型用戶端", + "最新消息": "最新資訊", + "发送邮件": "傳送電郵", + "通过": "透過", + "图灵不完全": "圖靈不完備", + "了解": "瞭解", + "顺序计算": "循序計算", + "U 盘": ["USB 磁碟機", "USB 隨身碟"], + "U盘": ["USB磁碟機", "USB隨身碟"], + "X 窗口系统": ["X Window 系統", "X 視窗系統"], + "X窗口系统": ["X Window系統", "X視窗系統"], + "三维电影": ["3D 電影", "3D電影"], + "三维计算机": ["3D 電腦", "3D電腦"], + "三维计算机图形": ["3D 電腦圖形", "3D電腦圖形"], + "二维码": ["二維條碼", "行動條碼"], + "信噪比": ["訊號雜訊比", "訊雜比"], + "信息论": ["消息理論", "資訊理論"], + "内存泄漏": ["記憶體流失", "記憶體漏失"], + "前向纠错": ["前向錯誤更正", "正向錯誤校正"], + "单片机": ["單晶片", "微控制器"], + "卸载": ["移除", "解除安裝"], + "可编程": ["可程式化", "可規化"], + "噪声": ["杂讯", "雜訊"], + "套接字": ["通訊端", "通訊端點"], + "子网掩码": ["子網路遮罩", "網路遮罩"], + "屏蔽": ["封鎖", "遮蔽"], + "扩展": ["擴充功能", "擴充套件", "擴充"], + "接口": ["介面", "通訊埠", "埠"], + "插件": ["外掛程式", "外掛"], + "数字版权": ["數位版權", "數位著作權"], + "数据执行保护": ["系統記憶體保護", "資料執行防止"], + "文件夹": ["檔案夾", "資料夾"], + "时钟频率": ["時脈速率", "時脈頻率"], + "最终用户许可协议": ["終端使用者授權協定", "終端使用者授權合約"], + "标记语言": ["標示語言", "標記式語言"], + "模板": ["模板", "範本"], + "流水线": ["管線化", "管線"], + "溢出": ["上限溢位", "溢位"], + "滚动条": ["卷軸", "捲軸"], + "端口": ["通訊埠", "埠"], + "缩略图": ["預覽縮圖", "縮圖"], + "网页快照": ["頁庫存檔", "頁面快取檔"], + "菜单": ["清單", "選單"], + "补丁": ["補靪", "修補程式"], + "视频": ["影片", "視訊"], + "计算器": ["小算盤", "計算機"], + "访问": ["存取", "造訪"], + "调用": ["叫用", "呼叫"], + "质量": ["品質", "质素"], + "跳转列表": ["跳躍功能清單", "跳躍清單"], + "进程": ["處理程序", "行程"], + "退出": ["登出", "結束"], + "配置文件": ["組態檔", "設定檔"], + "采样率": ["取樣率", "取樣頻率"], + "重载": ["多載", "過載"], + "链接": ["連結", "鏈結"], + "项目": ["專案", "計畫"], + "高速缓存": ["快取記憶體", "快取"] + } +} \ No newline at end of file diff --git a/T66y tool/T66y tool.user.js b/T66y tool/T66y tool.user.js new file mode 100644 index 00000000000..ccffc060607 --- /dev/null +++ b/T66y tool/T66y tool.user.js @@ -0,0 +1,405 @@ +// ==UserScript== +// @name 草榴小助手 +// @namespace hoothin +// @version 0.7.3 +// @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! +// @author NewType & hoothin +// @match *://*.t66y.com/* +// @run-at document-end +// @grant none +// @license MIT License +// ==/UserScript== + +(function() { + 'use strict'; + + const enable1024sDelay = true; + const defaultReply = "1024 感謝分享"; + var helper = { + addCss: function(css) { + var style = document.createElement('style'); + style.type = 'text/css'; + style.appendChild(document.createTextNode(css)); + document.getElementsByTagName('head')[0].appendChild(style); + }, + addScript: function(js) { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.appendChild(document.createTextNode(js)); + document.body.appendChild(script); + }, + getCss: function(src) { + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = src; + document.getElementsByTagName('head')[0].appendChild(link); + }, + getScript: function(src, onload) { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.onload = onload; + script.src = src; + document.body.appendChild(script); + }, + timeFormat: function(data, format) { // eg:data=new Data() eg:format="yyyy-MM-dd hh:mm:ss"; + var o = { + 'M+': data.getMonth() + 1, + 'd+': data.getDate(), + 'h+': data.getHours(), + 'm+': data.getMinutes(), + 's+': data.getSeconds(), + 'q+': Math.floor((data.getMonth() + 3) / 3), + 'S': data.getMilliseconds() + }; + if (/(y+)/.test(format)) { + format = format.replace(RegExp.$1, (data.getFullYear() + '').substr(4 - RegExp.$1.length)); + } + for (var k in o) { + if (new RegExp('(' + k + ')').test(format)) { + format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)); + } + } + return format; + }, + hash: function(url) { + var hash = url.split('hash='); + return hash[1].substring(3); + }, + inurl: function(str) { + var url = document.location.href; + return url.indexOf(str) >= 0; + } + }; + + /*-------------------------------------------------------------------------------------------------------------------------------------------*/ + var t66y = function() { + if(typeof($) == "undefined")return; + if (helper.inurl('/thread')) { + // 高亮今天发表的帖子 + helper.addCss('.newTag{border-bottom:1px dotted red; color:red !important}.newPost{color:#ff5722; background:#fafff4;}.newPost a[target=_blank]{color:#5656ff;}'); + var today = new Date(); + today = helper.timeFormat(today, 'yyyy-MM-dd'); + $('tr.tr3').each(function() { + var isToday = $(this).children('td').eq(2).find('div.f12').text().split(" ")[0]; + if (isToday === today || isToday == "今天") { + $(this).find('td:first').children().html('NEW').addClass('newTag'); + $(this).addClass('newPost'); + } + }); + } + + /*-------------------------------------------------------------------------------------------------------------------------------------------*/ + + if (helper.inurl('/htm_data/') || helper.inurl('read.php?')) { + // 移除图片viidii跳转 & 图片自动缩放 + var imgList = new Array(0); + var maxWidth = parseInt($("div#main").width() - 200) + 'px'; + $(document).ready(function() { + $('img[ess-data]').each(function() { + $(this).off("click"); + + $(this).attr('onclick', 'window.open(this.src);').css('max-width', maxWidth); + if($(this).attr('src')){ + imgList.push($(this).attr('src')); + } + }); + if (imgList.length > 0) { + ImageView(imgList); + } + }); + + // 移除a标签viidii跳转 + $("a[href*=\'.viidii.\']").each(function() { + var href = $(this).attr('href'); + var newHref = href.replace('http://www.viidii.com/?', '').replace('http://www.viidii.info/?', '').replace(/______/g, '.').replace(/&z/g, ''); + $(this).attr('href', newHref); + }); + $("a[href*=\'.redircdn.\']").each(function() { + var href = $(this).attr('href'); + var newHref = href.replace('https://to.redircdn.com/?', '').replace(/______/g, '.').replace(/&z/g, ''); + $(this).attr('href', newHref); + }); + + $.fn.isInViewport = function() { + var elementTop = $(this).offset().top; + var elementBottom = elementTop + $(this).outerHeight(); + var viewportTop = $(window).scrollTop(); + var viewportBottom = viewportTop + $(window).height(); + return elementBottom > viewportTop && elementTop < viewportBottom; + }; + + + // 种子链接转磁力链 + var torLink = $("a[href*=\'?hash\=\']"); + if( torLink.length > 0 ){ + var tmpNode = '本页共有 ' + torLink.length + ' 个磁力链!'; + torLink.each(function() { + var torrent = $(this).attr('href'); + var hash = helper.hash(torrent); + var magnet = 'magnet:?xt=urn:btih:' + hash; + tmpNode += '

    【 磁力链: ' + magnet + ' 】  【 下载种子 】  【 九秒磁力云播 】

    '; + }); + $('body').append('
    ' + tmpNode + '
    '); + } + helper.addCss('div#main>form[name="FORM"] { position: fixed; bottom: 0; left: 0; background: #f9f9ec; white-space: nowrap; } form[name="FORM"] tbody>tr:last-child { height: 0px; display: block; overflow: hidden; transition: height 0.5s ease; } form[name="FORM"]:hover tbody>tr:last-child,form[name="FORM"]:focus-within tbody>tr:last-child { height: 200px; }'); + var submitBtn = $('form[name="FORM"] .btn[name="Submit"]'); + var textarea = $('form[name="FORM"] [name="atc_content"]'); + if (submitBtn.length && textarea.length) { + var quickReplyStr = '快速回复'; + var quickReply = $( `` ); + quickReply.insertAfter( "form .btn" ); + var replyStr = defaultReply; + + helper.getScript('//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js', e => { + var $tLike = $(".t_like"); + if ($tLike.length) { + var $tLikeClone = $tLike.clone(); + $("#conttpc").prepend($tLikeClone); + + $(window).on("resize scroll", function() { + if ($tLike.isInViewport()) { + if ($tLikeClone.parent().length) $tLikeClone.detach(); + } else { + if ($tLikeClone.parent().length == 0) $("#conttpc").prepend($tLikeClone); + } + }); + } + function getCurrentDate() { + var myDate = new Date(); + return myDate.getFullYear() + "-" + (myDate.getMonth() + 1) + "-" + myDate.getDate(); + } + var currentDate = getCurrentDate(); + if (currentDate == $.cookie('lastSignDate')) { + document.title = "✅" + document.title; + } + var lastReplyTime = $.cookie('lastReplyTime'); + var customReplyStr = $.cookie('customReplyStr'); + var isCheckIn = document.title.indexOf("打卡签到") !== -1; + if (customReplyStr) { + replyStr = customReplyStr; + $.cookie('customReplyStr', replyStr, { expires: 365, path: '/' }); + } + if (isCheckIn) { + var spaceStr = ""; + var spaceLen = Math.floor(Math.random() * 10); + for (var i = 0; i < spaceLen; i++) { + spaceStr += " "; + } + replyStr = "今日签到";// + spaceStr; + } + quickReply.attr('title', replyStr + "(右击修改)"); + var formTitle = $("form td.h>b").text(); + function setCountdown() { + if (!enable1024sDelay) return; + quickReply.attr("disabled", true); + quickReply.css("background", "initial"); + var leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); + quickReply.val(quickReplyStr + ": " + leftTime + "s"); + $("form td.h>b").html(`${formTitle}(${leftTime + "s"})`); + var countTimer = setInterval(() => { + leftTime = parseInt((lastReplyTime - Date.now()) / 1000 + 1025); + if (leftTime <= 0) { + quickReply.val(quickReplyStr); + $("form td.h>b").text(formTitle); + quickReply.removeAttr("disabled"); + quickReply.css("background", ""); + clearInterval(countTimer); + } else { + quickReply.val(quickReplyStr + ": " + leftTime + "s"); + $("form td.h>b").html(`${formTitle}(${leftTime + "s"})`); + } + }, 1000); + } + if (lastReplyTime && Date.now() - parseFloat(lastReplyTime) < 1024000 + 1000) { + setCountdown(); + } + let form = $('form[name="FORM"]'); + function replyFail() { + submitBtn.val("提 交"); + quickReply.val("回复失败"); + $("form td.h").css("background", "rgb(244, 67, 54)"); + setTimeout(() => { + quickReply.val(quickReplyStr); + $("form td.h").css("background", ""); + }, 2000); + } + let rushSuccess = false; + function replySuccess() { + rushSuccess = true; + lastReplyTime = Date.now(); + $.cookie('lastReplyTime', lastReplyTime, { expires: 7, path: '/' }); + if (isCheckIn) { + $.cookie('lastSignDate', currentDate, { expires: 7, path: '/' }); + } + submitBtn.val("提 交"); + quickReply.val("回复成功"); + quickReply.css("background", "yellow"); + $("form td.h").css("background", "yellow"); + setTimeout(() => { + setCountdown(); + $("form td.h").css("background", ""); + }, 2000); + } + function isRushTime() { + var date = new Date(); + var year = date.getFullYear(); + var month = date.getMonth()+1; + var today = date.getDate(); + var hour = date.getHours(); + if (hour < 20) return false; + + var newYear = year; + var newMonth = month++; + if (month > 12) { + newMonth = 1; + newYear++; + } + var newDate = new Date(newYear, newMonth, 1); + var monthLast2Day = (new Date(newDate.getTime() - 2 * 1000 * 60 * 60 * 24)).getDate(); + return (today == monthLast2Day); + } + function submitReply() { + $.ajax({ + type: form.attr('method'), + url: form.attr('action'), + data: form.serialize(), + success: function (res) { + if (res.indexOf("發貼完畢點擊進入主題列表") == -1) { + replyFail(); + alert($(res).find("ol").text() || $(res).find("center").text()); + quickReply.removeAttr("disabled"); + } else { + replySuccess(); + } + }, + fail: function (e) { + replyFail(); + quickReply.removeAttr("disabled"); + } + }); + } + if (isCheckIn && isRushTime()) { + let reachRushMinute = false; + var rushReply = $( `` ); + function requestRush(gap) { + if (rushSuccess) return; + submitReply(); + setInterval(() => { + if (!rushSuccess) { + requestRush(gap); + } + }, gap); + } + function checkRush(timeGap) { + setTimeout(() => { + let date = new Date(); + if (date.getHours() == 0) { + textarea.val("今日签到"); + submitReply(); + let rushTimes = 5; + let rushTimer = setInterval(() => { + if (--rushTimes > 0) { + requestRush(100); + } else { + clearInterval(rushTimer); + rushReply.val("搶簽結束"); + } + }, 5); + } else { + if (reachRushMinute) { + if (date.getSeconds() == 59) { + checkRush(1); + } else if (date.getSeconds() > 57) { + checkRush(5); + } else if (date.getSeconds() > 50) { + checkRush(500); + } else { + checkRush(1000); + } + } else if (date.getHours() == 23 && date.getMinutes() == 59) { + reachRushMinute = true; + checkRush(1000); + } else { + checkRush(5000); + } + } + }, timeGap); + } + rushReply.insertAfter( "form .btn:last-child" ); + rushReply.click(function() { + checkRush(5000); + rushReply.attr("disabled", true); + rushReply.val("搶簽中……"); + rushSuccess = false; + }); + } + document.FORM.onsubmit = function(event) { + if (checkpost(document.FORM)) { + submitReply(); + } + event.preventDefault(); + return false; + }; + quickReply.click(function() { + textarea.val(replyStr); + submitBtn.click(); + quickReply.attr("disabled", true); + }); + quickReply.on('contextmenu', function(e) { + e.stopPropagation(); + e.preventDefault(); + customReplyStr = prompt("输入自定义回复内容", replyStr || defaultReply); + if (customReplyStr) { + replyStr = customReplyStr; + quickReply.attr('title', replyStr + "(右击修改)"); + $.cookie('customReplyStr', customReplyStr, { expires: 365, path: '/' }); + } + }); + }); + } + } + + /*-------------------------------------------------------------------------------------------------------------------------------------------*/ + + // 预处理整页图片 + function ImageView(imgList) { + helper.getCss('//cdn.jsdelivr.net/lightgallery/1.3.7/css/lightgallery.min.css'); + helper.getScript('//cdn.jsdelivr.net/picturefill/2.3.1/picturefill.min.js'); + helper.getScript('//cdn.jsdelivr.net/lightgallery/1.3.7/js/lightgallery.min.js'); + helper.getScript('//cdn.jsdelivr.net/g/lg-fullscreen,lg-thumbnail,lg-autoplay,lg-zoom'); + helper.getScript('//cdn.jsdelivr.net/mousewheel/3.1.13/jquery.mousewheel.min.js'); + + helper.addCss('#viewer{max-width:1280px;margin:auto;display:none}#viewer > ul{margin-bottom:0;padding:0;column-count:5;-moz-column-count:5;-webkit-column-count:5;}#viewer > ul > li{-moz-page-break-inside: avoid; -webkit-column-break-inside: avoid; break-inside: avoid;float:left;margin-bottom:15px;margin-right:15px;width:240px;list-style-type:none}#viewer > ul > li a{border:3px solid #FFF;border-radius:3px;display:block;overflow:hidden;position:relative;float:left}#viewer > ul > li a > img{transition:transform .3s ease 0s;transform:scale3d(1, 1, 1);width:240px}#viewer > ul > li a:hover > img{transform:scale3d(1.1, 1.1, 1.1);opacity:.9}'); + $('div#main').before('
      '); + + var lightGallery = $('#lightgallery'); + $.each(imgList, function(i, n) { + i++; + lightGallery.append('
    • '); + }); + + helper.addCss('.viewer{position:fixed; top:7px; right:7px; cursor:pointer;}'); + helper.addScript('function Viewer(){ $("#lightgallery").lightGallery(); $("html,body").animate({scrollTop:0}, 500); $("div#viewer,div#main,div#footer").fadeToggle(300); }'); + $('body').append(``); + } + + /*-------------------------------------------------------------------------------------------------------------------------------------------*/ + + // 返回顶部 + $('body').append(''); + + /*-------------------------------------------------------------------------------------------------------------------------------------------*/ + + // 游客站内搜索 + $(function() { + helper.addScript('(function(){var cx = "017632740523370213667:kcbl-j-fmok";var gcse = document.createElement("script");gcse.type = "text/javascript";gcse.async = true;gcse.src = "https://cse.google.com/cse.js?cx=" + cx;var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(gcse, s);})();'); + helper.addCss('.gsrch{width:400px;float:right;margin:15px -25px 0 0;}.gsc-control-cse {background-color:#0f7884 !important;border:0 !important;padding:0 !important;}'); + $('.banner').append('
      '); + }); + }; + + /*-------------------------------------------------------------------------------------------------------------------------------------------*/ + + //helper.getScript('//cdn.staticfile.org/jquery/1.12.4/jquery.min.js', t66y); + t66y(); +})(); \ No newline at end of file diff --git a/Valentine's Day/README.md b/Valentine's Day/README.md new file mode 100644 index 00000000000..eb7b0482809 --- /dev/null +++ b/Valentine's Day/README.md @@ -0,0 +1,2 @@ +Not maintained anymore +=== diff --git a/X-Downloader/X-Downloader.user.js b/X-Downloader/X-Downloader.user.js new file mode 100644 index 00000000000..72531dfbd90 --- /dev/null +++ b/X-Downloader/X-Downloader.user.js @@ -0,0 +1,167 @@ +// ==UserScript== +// @name X-Downloader-Script +// @name:zh-CN X-Downloader-Script +// @name:zh-TW X-Downloader-Script +// @name:ja X-Downloader-Script +// @namespace hoothin +// @version 2025-08-18 +// @license MIT +// @description Enhances your Twitter (X) experience by adding a convenient download button to images and videos (GIFs), enabling easy, one-click saving of media. +// @description:zh-CN 优化你的推特 (X) 浏览体验,直接在图片和视频(GIF)上添加一个便捷的下载按钮,一键轻松保存喜欢的媒体内容。 +// @description:zh-TW 優化您的 Twitter (X) 瀏覽體驗,直接在圖片及影片(GIF)上新增一個便捷的下載按鈕,一鍵輕鬆儲存喜愛的媒體內容。 +// @description:ja Twitter (X) の画像や動画(GIF)に便利なダウンロードボタンを追加し、ワンクリックでお気に入りのメディアを簡単に保存できるようにします。 +// @author hoothin +// @match https://x.com/* +// @match https://twitter.com/* +// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== +// @grant none +// @downloadURL https://update.greasyfork.org/scripts/545186/X-Downloader-Script.user.js +// @updateURL https://update.greasyfork.org/scripts/545186/X-Downloader-Script.meta.js +// ==/UserScript== + +(function() { + 'use strict'; + let downloadBtn = document.createElement("a"), touch = false, simpleClick = false; + downloadBtn.target = "_blank"; + downloadBtn.style.cssText = "background: #000000aa; border-radius: 50%; transition: opacity ease 0.3s; position: absolute; top: 0; right: 0px; cursor: pointer; opacity: 0; padding: 5px;"; + downloadBtn.innerHTML = ``; + downloadBtn.addEventListener("mousedown", e => { + let parent = downloadBtn.parentNode; + if (!parent) return; + simpleClick = false; + let img = parent.querySelector('[data-testid="tweetPhoto"]>img,[data-testid="card.layoutLarge.media"] img'); + if (img) { + let newsrc = img.src.replace("_normal.",".").replace("_200x200.",".").replace("_mini.",".").replace("_bigger.",".").replace(/_x\d+\./,"."), imgname; + if (/\.svg$/.test(newsrc)) return; + if (newsrc == img.src) { + newsrc=newsrc.replace(/\?format=/i, ".").replace(/\&name=/i, ":").replace(/\.(?=[^\.\/]*$)/, "?format=").replace( /(:large|:medium|:small|:orig|:thumb|:[\dx]+)/i, ""); + if (newsrc != img.src) { + newsrc = newsrc + "&name=orig"; + } + } + while(parent) { + if (parent.nodeName == "ARTICLE" && parent.dataset && parent.dataset.testid == "tweet") { + break; + } + parent = parent.parentNode; + } + if (parent) { + const time = parent.querySelector('time[datetime]'); + const user = parent.querySelector('[role="link"]>div>div>span>span'); + let formatMatch = img.src.match(/format=(\w+)/), ext = "jpg"; + if (formatMatch) { + ext = formatMatch[1]; + } else { + formatMatch = newsrc.match(/\.(\w+)/); + if (formatMatch) { + ext = formatMatch[1]; + } + } + imgname = `${user.innerText} ${time.innerText.replace(/(.*) · (.*)/, "$2 $1")}.${ext}`; + } + downloadBtn.href = newsrc; + if ((e.button === 0 && !e.ctrlKey) || touch) { + simpleClick = true; + downloadByFetch(newsrc, imgname); + } + } else { + while(parent) { + if (parent.nodeName == "ARTICLE" && parent.dataset && parent.dataset.testid == "tweet") { + break; + } + parent = parent.parentNode; + } + if (parent) { + downloadBtn.removeAttribute('download'); + let link = parent.querySelector('a[role="link"][aria-label][href^="/"]'); + downloadBtn.href = `https://twitter.luopo.org/?url=${encodeURIComponent(link ? link.href : document.location.href)}`; + if (e.altKey || touch) { + window.open(downloadBtn.href, "_blank"); + } + } + } + }); + downloadBtn.addEventListener("click", e => { + if (simpleClick || e.altKey || touch) { + e.preventDefault(); + e.stopPropagation(); + } + }); + downloadBtn.addEventListener("mouseenter", () => { + downloadBtn.style.opacity = 1; + }); + downloadBtn.addEventListener("mouseleave", () => { + setTimeout(() => { + downloadBtn.style.opacity = 0.1; + }, 100); + }); + async function downloadByFetch(imageUrl, filename) { + try { + const response = await fetch(imageUrl); + if (!response.ok) throw new Error('CORS request failed'); + const blob = await response.blob(); + const blobUrl = URL.createObjectURL(blob); + const tempLink = document.createElement('a'); + tempLink.href = blobUrl; + tempLink.setAttribute('download', filename); + document.body.appendChild(tempLink); + tempLink.click(); + document.body.removeChild(tempLink); + URL.revokeObjectURL(blobUrl); + } catch (error) { + console.error('error:', error); + window.open(imageUrl, '_blank'); + } + } + const show = (ele) => { + ele.appendChild(downloadBtn); + setTimeout(() => { + downloadBtn.style.opacity = touch ? 0.8 : 0.6; + }, 0); + }; + const addBtn = e => { + if (e.target.dataset && e.target.dataset.testid == "card.layoutLarge.media") { + show(e.target.parentNode); + } else if (e.target.dataset && e.target.dataset.testid == "tweetPhoto") { + show(e.target.parentNode); + } else if (e.target.dataset && /^video\-player/.test(e.target.dataset.testid)) { + show(e.target.parentNode); + } else if (e.target.parentNode && e.target.parentNode.dataset && e.target.parentNode.dataset.testid == "tweetPhoto") { + show(e.target.parentNode.parentNode); + } + }; + function isElementVisible(el) { + const rect = el.getBoundingClientRect(); + return rect.top < window.innerHeight && rect.top > 0 && rect.bottom >= 0; + } + function findFirstVisibleElement(selector) { + const elements = document.querySelectorAll(selector); + const firstVisibleElement = Array.from(elements).find(el => { + return isElementVisible(el); + }); + return firstVisibleElement; + } + let checkTimer; + const touchCheck = e => { + clearTimeout(checkTimer); + if (e.target == downloadBtn) return; + checkTimer = setTimeout(() => { + if (isElementVisible(downloadBtn)) return; + let target = findFirstVisibleElement("[data-testid='card.layoutLarge.media']"); + if (target) { + return show(target.parentNode); + } + target = findFirstVisibleElement("[data-testid='tweetPhoto']"); + if (target) { + return show(target.parentNode); + } + target = findFirstVisibleElement("[data-testid^='video-player']"); + if (target) { + return show(target.parentNode); + } + }, 100); + }; + document.addEventListener("mouseenter", addBtn, true); + document.addEventListener("touchstart", e => {touch = true; addBtn(e);}, true); + document.addEventListener("touchend", touchCheck, true); +})(); \ No newline at end of file diff --git "a/\350\215\211\346\246\264\345\260\217\345\212\251\346\211\213/T66y tool.user.js" "b/\350\215\211\346\246\264\345\260\217\345\212\251\346\211\213/T66y tool.user.js" deleted file mode 100644 index 3f6c831308d..00000000000 --- "a/\350\215\211\346\246\264\345\260\217\345\212\251\346\211\213/T66y tool.user.js" +++ /dev/null @@ -1,178 +0,0 @@ -// ==UserScript== -// @name 草榴小助手 -// @namespace hoothin -// @version 0.6.1 -// @description 草榴小助手修复,提供“加亮今日帖子”、“移除viidii跳转”、“图片自动缩放”、“种子链接转磁力链”、“预览整页图片”、“游客站内搜索”、“返回顶部”等功能! -// @author NewType & hoothin -// @match *://*.t66y.com/* -// @run-at document-end -// @grant none -// @license MIT License -// ==/UserScript== - -(function() { - 'use strict'; - - var helper = { - addCss: function(css) { - var style = document.createElement('style'); - style.type = 'text/css'; - style.appendChild(document.createTextNode(css)); - document.getElementsByTagName('head')[0].appendChild(style); - }, - addScript: function(js) { - var script = document.createElement('script'); - script.type = 'text/javascript'; - script.appendChild(document.createTextNode(js)); - document.body.appendChild(script); - }, - getCss: function(src) { - var link = document.createElement('link'); - link.rel = 'stylesheet'; - link.href = src; - document.getElementsByTagName('head')[0].appendChild(link); - }, - getScript: function(src, onload) { - var script = document.createElement('script'); - script.type = 'text/javascript'; - script.onload = onload; - script.src = src; - document.body.appendChild(script); - }, - timeFormat: function(data, format) { // eg:data=new Data() eg:format="yyyy-MM-dd hh:mm:ss"; - var o = { - 'M+': data.getMonth() + 1, - 'd+': data.getDate(), - 'h+': data.getHours(), - 'm+': data.getMinutes(), - 's+': data.getSeconds(), - 'q+': Math.floor((data.getMonth() + 3) / 3), - 'S': data.getMilliseconds() - }; - if (/(y+)/.test(format)) { - format = format.replace(RegExp.$1, (data.getFullYear() + '').substr(4 - RegExp.$1.length)); - } - for (var k in o) { - if (new RegExp('(' + k + ')').test(format)) { - format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)); - } - } - return format; - }, - hash: function(url) { - var hash = url.split('hash='); - return hash[1].substring(3); - }, - inurl: function(str) { - var url = document.location.href; - return url.indexOf(str) >= 0; - } - }; - - /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - var t66y = function() { - if(typeof($) == "undefined")return; - if (helper.inurl('/thread')) { - // 高亮今天发表的帖子 - helper.addCss('.newTag{border-bottom:1px dotted red; color:red !important}.newPost{color:#ff5722; background:#fafff4;}.newPost a[target=_blank]{color:#5656ff;}'); - var today = new Date(); - today = helper.timeFormat(today, 'yyyy-MM-dd'); - $('tr.tr3').each(function() { - var isToday = $(this).children('td').eq(2).find('div.f12').text().split(" ")[0]; - if (isToday === today || isToday == "今天") { - $(this).find('td:first').children().html('NEW').addClass('newTag'); - $(this).addClass('newPost'); - } - }); - } - - /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - - if (helper.inurl('/htm_data/')) { - // 移除图片viidii跳转 & 图片自动缩放 - var imgList = new Array(0); - var maxWidth = parseInt($("div#main").width() - 200) + 'px'; - $(document).ready(function() { - $('img[ess-data]').each(function() { - $(this).off("click"); - - $(this).attr('onclick', 'window.open(this.src);').css('max-width', maxWidth); - if($(this).attr('src')){ - imgList.push($(this).attr('src')); - } - }); - if (imgList.length > 0) { - ImageView(imgList); - } - }); - - // 移除a标签viidii跳转 - $("a[href*=\'.viidii.\']").each(function() { - var href = $(this).attr('href'); - var newHref = href.replace('http://www.viidii.com/?', '').replace('http://www.viidii.info/?', '').replace(/______/g, '.').replace(/&z/g, ''); - $(this).attr('href', newHref); - }); - $("a[href*=\'.redircdn.\']").each(function() { - var href = $(this).attr('href'); - var newHref = href.replace('https://to.redircdn.com/?', '').replace(/______/g, '.').replace(/&z/g, ''); - $(this).attr('href', newHref); - }); - - // 种子链接转磁力链 - var torLink = $("a[href*=\'?hash\=\']"); - if( torLink.length > 0 ){ - var tmpNode = '本页共有 ' + torLink.length + ' 个磁力链!'; - torLink.each(function() { - var torrent = $(this).attr('href'); - var hash = helper.hash(torrent); - var magnet = 'magnet:?xt=urn:btih:' + hash; - tmpNode += '

      【 磁力链: ' + magnet + ' 】  【 下载种子 】  【 九秒磁力云播 】

      '; - }); - $('body').append('
      ' + tmpNode + '
      '); - } - } - - /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - - // 预处理整页图片 - function ImageView(imgList) { - helper.getCss('//cdn.jsdelivr.net/lightgallery/1.3.7/css/lightgallery.min.css'); - helper.getScript('//cdn.jsdelivr.net/picturefill/2.3.1/picturefill.min.js'); - helper.getScript('//cdn.jsdelivr.net/lightgallery/1.3.7/js/lightgallery.min.js'); - helper.getScript('//cdn.jsdelivr.net/g/lg-fullscreen,lg-thumbnail,lg-autoplay,lg-zoom'); - helper.getScript('//cdn.jsdelivr.net/mousewheel/3.1.13/jquery.mousewheel.min.js'); - - helper.addCss('#viewer{max-width:1280px;margin:auto;display:none}#viewer > ul{margin-bottom:0;padding:0;column-count:5;-moz-column-count:5;-webkit-column-count:5;}#viewer > ul > li{-moz-page-break-inside: avoid; -webkit-column-break-inside: avoid; break-inside: avoid;float:left;margin-bottom:15px;margin-right:15px;width:240px;list-style-type:none}#viewer > ul > li a{border:3px solid #FFF;border-radius:3px;display:block;overflow:hidden;position:relative;float:left}#viewer > ul > li a > img{transition:transform .3s ease 0s;transform:scale3d(1, 1, 1);width:240px}#viewer > ul > li a:hover > img{transform:scale3d(1.1, 1.1, 1.1);opacity:.9}'); - $('div#main').before('
        '); - - var lightGallery = $('#lightgallery'); - $.each(imgList, function(i, n) { - i++; - lightGallery.append('
      • '); - }); - - helper.addCss('.viewer{position:fixed; top:7px; right:7px; cursor:pointer;}'); - helper.addScript('function Viewer(){ $("#lightgallery").lightGallery(); $("html,body").animate({scrollTop:0}, 500); $("div#viewer,div#main,div#footer").fadeToggle(300); }'); - $('body').append(``); - } - - /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - - // 返回顶部 - $('body').append(''); - - /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - - // 游客站内搜索 - $(function() { - helper.addScript('(function(){var cx = "017632740523370213667:kcbl-j-fmok";var gcse = document.createElement("script");gcse.type = "text/javascript";gcse.async = true;gcse.src = "https://cse.google.com/cse.js?cx=" + cx;var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(gcse, s);})();'); - helper.addCss('.gsrch{width:400px;float:right;margin:15px -25px 0 0;}.gsc-control-cse {background-color:#0f7884 !important;border:0 !important;padding:0 !important;}'); - $('.banner').append('
        '); - }); - }; - - /*-------------------------------------------------------------------------------------------------------------------------------------------*/ - - //helper.getScript('//cdn.staticfile.org/jquery/1.12.4/jquery.min.js', t66y); - t66y(); -})(); \ No newline at end of file