DMM・FANZAの通販商品一覧からアウトレット、限定版、および BOD/DOD を除去
נכון ליום
/* jshint esversion: 6 */
// ==UserScript==
// @name filterSuperfluousOnDMM
// @namespace https://greasyfork.org/ja/users/289387-unagionunagi
// @version 0.7
// @description DMM・FANZAの通販商品一覧からアウトレット、限定版、および BOD/DOD を除去
// @author unagiOnUnagi
// @include /^https?://\w+\.dmm\.co(m|\.jp)/mono/(\w+/)?-/(list|search)/.*/
// @grant none
// @license GPL-2.0-or-later
// ==/UserScript==
function addStylesheet() {
// カスタムスタイルシート .superfluous {display: none !important} を追加
let styleEl = document.createElement('style');
styleEl.setAttribute('id', 'unagionunagi-filtersuperfluousondmm-css');
document.head.appendChild(styleEl);
let styleSheet = styleEl.sheet;
styleSheet.insertRule('.superfluous {display: none !important}');
}
function toggleFilter(ev) {
// チェックボックスの状態を見て表示・非表示を切り換え
let rule = document.getElementById("unagionunagi-filtersuperfluousondmm-css").sheet.rules[0];
let value = ev.target.checked ? "none" : "inline";
rule.style.display = value;
}
function filterSuperflouous(lineup, itemElm, getTitle) {
// アウトレット、限定版、BOD/DOD を非表示に
// カスタムスタイルシートの追加
addStylesheet();
// 対象文字列正規表現
const pattern = [/^【(特選)?アウトレット】/,
/^【(DMM|FANZA|数量)限定】/,
/([BD]OD)$/,
/アウトレット(BD)?】$/]
let nof = 0;
let items = document.evaluate(itemElm, lineup, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
let itemsLength = items.snapshotLength;
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 += 1;
// console.log(title);
}
}
let nod = document.querySelector('.number .current').textContent.trim();
if (nod == nof) {
// ページ内全作品がフィルターされていたらその旨表示
lineup.insertAdjacentHTML('afterbegin',
'<b>ページ内の全作品がフィルターされています。(filterSuperfluousOnDMM)</b>');
}
// フィルター稼働中インジケーター
let lastSpan = document.querySelectorAll('.d-area .list-capt .list-boxseparate div.list-unit');
if (lastSpan.length) {
lastSpan = lastSpan[lastSpan.length -1];
let indicator = `<span id="unagionunagi-filtersuperfluousondmm" ` +
` title="アウトレット、限定版、BOD/DOD を非表示にします (このページに ${nof} 個)" ` +
` style="margin-left: 10px">` +
`<input type="checkbox" id="unagionunagi-filtersuperfluousondmm-cb" ` +
` name="unagionunagi-filtersuperfluousondmm-cb" checked/>` +
`<label for="unagionunagi-filtersuperfluousondmm-cb">フィルター</label></span>`;
lastSpan.insertAdjacentHTML('afterend', indicator);
let filterCb = document.getElementById('unagionunagi-filtersuperfluousondmm-cb');
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());
}
})();