// ==UserScript== // @name pixiv_sk // @namespace http://alexam.hateblo.jp/ // @author shikato // @description pixivの検索結果をソートしたりフィルタリングしたり1ページに表示する数を増やしたりできます。 // @version 1.1.0 // @include http://www.pixiv.net/search.php* // @include http://www.pixiv.net/tags.php* // @downloadURL none // ==/UserScript== (function (doc, func) { var head = doc.getElementsByTagName('head')[0]; var jquery = doc.createElement('script'); jquery.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js'); jquery.addEventListener('load', function() { var myScript = doc.createElement('script'); myScript.textContent = 'jQuery.noConflict();(' + func.toString() + ')(jQuery);'; head.appendChild(myScript); }, false); head.appendChild(jquery); })(document, function ($) { /** 設定値 ここから **/ // 1ページに何ページ分の作品を表示するか // ex) 1なら通常通り // 2にすると2ページ分表示 var GETTING_PAGE_COUNT = 3; // 作品のブックマーク数が以下の値未満の場合は表示しない var FAV_FILTER = 3; // リンクを別のタブで開くかどうか true / false var IS_LINK_BLANK = true; /** 設定値 ここまで **/ var LOADING_IMG = 'https://raw.githubusercontent.com/shikato/pixiv_sk/master/loading.gif'; if (GETTING_PAGE_COUNT < 1 || FAV_FILTER < 0) return; var mCurrentGettingPageCount = null; var mCurrentUrl = null; var mCurrentPage = null; var mWorks = []; // mCurrentPageの作品を取得する var getWorks = function (onloadCallback) { var url = mCurrentUrl; if (mCurrentPage === 1) { url += ('&p='+mCurrentPage); } else { url = mCurrentUrl.replace(/p=\d+/, 'p='+mCurrentPage); } mCurrentUrl = url; var req = new XMLHttpRequest(); req.open('GET', mCurrentUrl, true); req.onload = function (event) { onloadCallback(req); req = null; }; req.onerror = function (event) { alert('作品の取得に失敗しました。'); req = null; }; req.send(null); }; // mWorksをフィルタリングしてソートして文字列としてHTMLを返す var filterAndSort = function () { // FAV_FILTER未満の作品をremove mWorks.forEach(function (work, i) { var fav = work.children('ul').children('li:first').children('a').text(); if (fav < FAV_FILTER) { mWorks.splice(i, 1); } else { // blank onの場合 target属性追加 if (!IS_LINK_BLANK) return; work.children('a').attr('target', 'blank'); } }); // ソート mWorks.sort(function (a, b) { var favA = a.children('ul').children('li:first').children('a').text(); var favB = b.children('ul').children('li:first').children('a').text(); if (favA === '') { favA = 0; } else { favA = parseInt(favA); } if (favB === '') { favB = 0; } else { favB = parseInt(favB); } if (favA > favB) { return -1; } if (favA < favB) { return 1; } return 0; }); var results = ''; for (var i = 0; i < mWorks.length; i++) { results += $('