Hatena Bookmark Users Filter

はてなブックマークの検索結果ページで、ブックマーク数によるフィルタリング選択肢を改変します。

  1. // ==UserScript==
  2. // @name Hatena Bookmark Users Filter
  3. // @description はてなブックマークの検索結果ページで、ブックマーク数によるフィルタリング選択肢を改変します。
  4. // @namespace knoa.jp
  5. // @include https://b.hatena.ne.jp/search/*
  6. // @version 1.0.2
  7. // @grant none
  8. // ==/UserScript==
  9.  
  10. /*
  11. 正常動作を確認しました。
  12. */
  13. (function(){
  14. const COUNTS = [1, 3, 10, 30, 100, 300, 1000];
  15. const DEFAULT = 3;
  16. let current = location.href.includes('&users=') ? parseInt(location.href.match(/&users=([0-9]*)/)[1]) : DEFAULT;
  17. let filterH3s = document.querySelectorAll('.left-container h3');
  18. let countsH3 = Array.from(filterH3s).find(h3 => h3.textContent === 'ブックマーク数');
  19. if(countsH3 === undefined) return console.log('Not found H3.');
  20. let countsUl = countsH3.parentNode.querySelector('ul');
  21. let countsLis = countsUl.querySelectorAll('ul > li');
  22. while(countsUl.children.length > 1) countsUl.removeChild(countsUl.lastElementChild);
  23. COUNTS.forEach(c => {
  24. if(c === 1) return;
  25. let li = countsLis[0].cloneNode(true);
  26. let a = li.querySelector('a');
  27. if(a === null) return console.log('Not found a.');
  28. if(c === current) a.classList.add('is-current');
  29. else a.classList.remove('is-current');
  30. a.href = a.href.replace(/(&users)=1\b/, '$1=' + c);
  31. a.textContent = c + ' users';
  32. countsUl.appendChild(li);
  33. });
  34. })();