PChome search enhancement

Ignore non-buyable items in PChome search page.

  1. // ==UserScript==
  2. // @name PChome search enhancement
  3. // @namespace https://wiki.gslin.org/wiki/PChomeSearchEnhancement
  4. // @version 0.20180912.0
  5. // @description Ignore non-buyable items in PChome search page.
  6. // @author Gea-Suan Lin <darkkiller@gmail.com>
  7. // @license MIT
  8. // @match https://ecshweb.pchome.com.tw/search/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. let sheet = document.createElement('style');
  16. sheet.innerHTML = '.nonbuyable {opacity:0.33;}';
  17. document.getElementsByTagName('head')[0].appendChild(sheet);
  18.  
  19. // Add three buttons inside #FilterBar.
  20. let toolbar = document.createElement('span');
  21. toolbar.innerHTML = '<button id="btn_grey">Grey</button> <button id="btn_hide">Hide</button> <button id="btn_disable">Disable</button>';
  22. let el = document.querySelector('.Cm_N .bar_spinbtn');
  23. if (!el) {
  24. return;
  25. }
  26. el.appendChild(toolbar);
  27.  
  28. document.getElementById('btn_grey').addEventListener('click', function(){
  29. sheet.innerHTML = '.nonbuyable {opacity:0.33;}';
  30. });
  31.  
  32. document.getElementById('btn_hide').addEventListener('click', function(){
  33. sheet.innerHTML = '.nonbuyable {display:none;}';
  34. });
  35.  
  36. document.getElementById('btn_disable').addEventListener('click', function(){
  37. sheet.innerHTML = '';
  38. });
  39.  
  40. let content = document.getElementById('CONTENT');
  41. let selector = '.col3f:has(li.orderNotyet), .col3f:has(li.orderReplenish), .col3f:has(li.soldOut)';
  42.  
  43. let ob = new window.MutationObserver(function(el){
  44. window.jQuery(selector, el.target).addClass('nonbuyable');
  45. });
  46.  
  47. ob.observe(content, {
  48. childList: true,
  49. subtree: true,
  50. });
  51.  
  52. window.jQuery(selector).addClass('nonbuyable');
  53. })();