Greasy Fork

Greasy Fork is available in English.

pixiv_sk

pixivの検索結果をソートしたりフィルタリングしたり1ページに表示する数を増やしたりできます。

当前为 2017-05-02 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           pixiv_sk
// @namespace      http://alexam.hateblo.jp/
// @author         shikato
// @description    pixivの検索結果をソートしたりフィルタリングしたり1ページに表示する数を増やしたりできます。
// @version        1.1.1
// @include        https://www.pixiv.net/search.php*
// @include        https://www.pixiv.net/tags.php*
// ==/UserScript==

(function (doc, func) {

  var head = doc.getElementsByTagName('head')[0]; 

  var jquery = doc.createElement('script'); 
  jquery.setAttribute('src', 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/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 += $('<div>').append(mWorks[i]).html();                    
    }

    return results;
  }; 


  mCurrentGettingPageCount = 0;
  mCurrentUrl = location.href;
  mCurrentPage = mCurrentUrl.match(/p=(\d+)/); 

  if (mCurrentPage !== null) {
    mCurrentPage = parseInt(mCurrentPage[1]);
  } else {
    mCurrentPage = 1;
  }

  if (GETTING_PAGE_COUNT > 1) {
    // load時のスピナー表示
    $('.column-search-result').children('ul').hide(); 
    $('.column-search-result').prepend(
      '<div id="loading" style="width:50px;margin-left:auto;margin-right:auto;">'
       + '<img src="' + LOADING_IMG + '" /></div>'
    );

    // pixiv_sk用のページネーションリンク表示
    if (mCurrentPage === 1) {
      $('.pager-container').empty().append(
        '<a href="' + mCurrentUrl + '" style="margin-right:15px;">&lt;&lt;</a>'
         + '<a href="' + mCurrentUrl + '&p=' + (mCurrentPage+GETTING_PAGE_COUNT) +'">&gt;</a>'
      ); 
    } else {
      $('.pager-container').empty().append(
        '<a href="'+mCurrentUrl.replace(/&p=\d+/, '') + '" style="margin-right:15px;">&lt;&lt;</a>'
         + '<a href="'+mCurrentUrl.replace(/p=\d+/, 'p=' + (mCurrentPage - GETTING_PAGE_COUNT)) + '" style="margin-right:10px;">&lt;</a>'
         + '<a href="'+mCurrentUrl.replace(/p=\d+/, 'p=' + (mCurrentPage + GETTING_PAGE_COUNT)) + '" style="margin-right:10px;">&gt;</a>'
      ); 
    }

    var onloadCallback = function (req) { 
      $(req.responseText).find('.column-search-result').children('._image-items').children('.image-item').each(function() {
        var thumb = $(this).children('.work').children('._layout-thumbnail').children('._thumbnail');
        thumb.attr('src', thumb.attr('data-src')); 
        mWorks.push($(this));
      }); 

      mCurrentPage++; 
      mCurrentGettingPageCount++; 
      // GETTING_PAGE_COUNTで指定した分だけ作品を取得したらソートして表示
      if (mCurrentGettingPageCount === GETTING_PAGE_COUNT) {
        $('#loading').remove();
        var sortedImages = filterAndSort();
        $('.column-search-result').children('ul').empty().append(sortedImages).show(); 
      } else { 
        getWorks(onloadCallback);
      } 
    };
    
    getWorks(onloadCallback);
  } else {
    // filterAndSortだけ実行して表示
    var sortedImages = filterAndSort(); 
    $('.column-search-result').children('ul').empty().append(sortedImages);
  }

  // 被さって表示されてしまう要素をremove
  $('.popular-introduction').remove();
});