filterSuperfluousOnDMM

DMM・FANZAの通販商品一覧からアウトレット、限定版、および BOD/DOD を除去

2020-06-10 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

/* jshint esversion: 6 */
// ==UserScript==
// @name         filterSuperfluousOnDMM
// @namespace    https://greasyfork.org/ja/users/289387-unagionunagi
// @version      0.6
// @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 filterSuperflouous(lineup, itemElm, getTitle) {
    // アウトレット、限定版、BOD/DOD を一覧から削除
    let nof = 0;
    let items = document.evaluate(itemElm, lineup, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (let i=0; i < items.snapshotLength; i++ ) {
        let item = items.snapshotItem(i)
        let title = getTitle(item);

        if ( /^【(特選)?アウトレット】/.test(title) ||
            /^【(DMM|FANZA|数量)限定】/.test(title) ||
            /([BD]OD)$/.test(title) ||
            /アウトレット(BD)?】$/.test(title)
            ) {
            lineup.removeChild(item);
            nof += 1;
            // console.log(title);
        }
    }

    if (lineup.childElementCount == (itemElm == 'tr[td]' ? 1 : 0)) {
        // ページ内全作品がフィルターされていたらその旨表示
        lineup.insertAdjacentHTML('afterbegin',
                                  '<b>ページ内の全作品がフィルターされています。(filterSuperfluousOnDMM)</b>');
    }

    // フィルター稼働中インジケーター
    let lastSpan = (document.querySelector('p.headwithelem span span:last-child') ||
                    document.querySelector('p.headwithelem span:last-child'));
    if (lastSpan) {
        lastSpan.innerHTML = lastSpan.innerHTML.trim() + `<span title="アウトレット、限定版、BOD/DOD はフィルターしています (このページに ${nof} 個)">*</span>`
    } 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());
    }

})();