您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
DMM・FANZAの通販商品一覧からアウトレット、限定版、および BOD/DOD を除去
当前为
/* jshint esversion: 6 */ // ==UserScript== // @name filterSuperfluousOnDMM // @namespace https://greasyfork.org/ja/users/289387-unagionunagi // @version 1.0.1 // @description DMM・FANZAの通販商品一覧からアウトレット、限定版、および BOD/DOD を除去 // @author unagiOnUnagi // @include /^https?://\w+\.dmm\.co(m|\.jp)/mono/(\w+/)?-/(list|search)/.*/ // @grant GM_setValue // @grant GM_getValue // @license GPL-2.0-or-later // ==/UserScript== function resolvePropVal(isChecked) { // display プロパティ値を決定 if (isChecked) return 'none'; return document.URL.includes('/view=text/') ? 'table-row' : 'list-item'; } function addStyleSheet() { // カスタムスタイルシートの作成 let styleEl = document.createElement('style'); styleEl.setAttribute('id', 'unagionunagi-filtersuperfluousondmm-css'); document.head.appendChild(styleEl); let styleSheet = styleEl.sheet; // .superfluous {display: none} を追加 let value = resolvePropVal(GM_getValue('checked', true)); styleSheet.insertRule(`.superfluous {display: ${value}}`, 0); return styleEl; } function blinkLabel(styleEl) { // 全作品フィルター時のラベルを点滅 let styleSheet = styleEl.sheet; styleSheet.insertRule( '#unagionunagi-filtersuperfluousondmm-label ' + ' { animation: flash 0.8s linear 3;}', 1); styleSheet.insertRule( '@keyframes flash { '+ ' 0%,100% { opacity: 1; }' + ' 50% { opacity: 0; }' + '}', 2); } function toggleFilter(ev) { // チェックボックスの状態を見て表示・非表示を切り換え let rule = document.getElementById("unagionunagi-filtersuperfluousondmm-css").sheet.rules[0]; let isChecked = ev.target.checked; rule.style.display = resolvePropVal(isChecked); GM_setValue('checked', isChecked); } function filterSuperflouous(lineup, itemElm, getTitle) { // アウトレット、限定版、BOD/DOD を非表示に // カスタムスタイルシートの追加 let styleEl = addStyleSheet(); // 対象文字列正規表現 const pattern = [/【(特選)?アウトレット】/, /【(DMM|FANZA|数量)限定】/, /([BD]OD)$/, /アウトレット(BD)?】$/]; const items = document.evaluate(itemElm, lineup, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); const itemsLength = items.snapshotLength; let nof = 0; for (let i=0; i < itemsLength; i++) { let item = items.snapshotItem(i); let title = getTitle(item); // パターンにマッチしたらクラスを追加 if (pattern.some(re => re.test(title))) { item.classList.add('superfluous'); nof++; } } // ページ内全作品が該当したとき let addLabel = ''; if (nof == itemsLength) { addLabel = '(全作品が該当)'; blinkLabel(styleEl); } // フィルターチェックボックス let lastSpan = document.querySelectorAll( '.d-area .list-capt .list-boxseparate div.list-unit'); if (lastSpan.length) { lastSpan = lastSpan[lastSpan.length - 1]; const indicator = `<span id="unagionunagi-filtersuperfluousondmm" ` + ` title="アウトレット、限定版、BOD/DOD を非表示にします (このページに ${nof} 個)" ` + ` style="margin-left: 10px">` + `<input type="checkbox" id="unagionunagi-filtersuperfluousondmm-cb" ` + ` name="unagionunagi-filtersuperfluousondmm-cb" />` + `<label for="unagionunagi-filtersuperfluousondmm-cb" ` + ` id="unagionunagi-filtersuperfluousondmm-label">フィルター${addLabel}</label></span>`; lastSpan.insertAdjacentHTML('afterend', indicator); let filterCb = document.getElementById('unagionunagi-filtersuperfluousondmm-cb'); filterCb.checked = GM_getValue('checked', true); filterCb.addEventListener('change', toggleFilter); } else { console.log('Breadcrumb list not found'); } } (function() { 'use strict'; let lineup; if ((lineup = document.getElementById('list'))) { // 画像形式表示 filterSuperflouous( lineup, 'li', (item) => item.querySelector('div p.tmb a span img').getAttribute('alt')); } else if ((lineup = document.querySelector('table[summary=商品一覧] tbody'))) { // テキスト形式表示 filterSuperflouous( lineup, 'tr[td]', (item) => item.querySelector('td p.ttl a').text.trim()); } })();