百度搜索结果过滤

兼容AC双列baidu脚本,搜索结果增加屏蔽按钮,有可视化列表查看编辑保存,支持通配符* ?

目前为 2023-01-06 提交的版本。查看 最新版本

// ==UserScript==
// @name         百度搜索结果过滤
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  兼容AC双列baidu脚本,搜索结果增加屏蔽按钮,有可视化列表查看编辑保存,支持通配符* ?
// @author       You
// @license      MIT
// @match        https://*.baidu.com/*
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/layer.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// ==/UserScript==

(function() {
    'use strict';
    const baiduHelper={};

    var $ = $ || window.$,
        removing = false,
        blacklist;

    $(document.body).append(`<link href="https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/theme/default/layer.min.css" rel="stylesheet">`);

    function globToRegex (glob) {
        var specialChars = "\\^$*+?.()|{}[]";
        var regexChars = ["^"];
        for (var i = 0; i < glob.length; ++i) {
            var c = glob.charAt(i);
            switch (c) {
                case '?':
                    regexChars.push(".");
                    break;
                case '*':
                    regexChars.push(".*");
                    break;
                default:
                    if (specialChars.indexOf(c) >= 0) {
                        regexChars.push("\\");
                    }
                    regexChars.push(c);
            }
        }
        regexChars.push("$");
        return new RegExp(regexChars.join(""));
    }

    baiduHelper.init = function(){
      blacklist = GM_getValue("blacklist");
      if(blacklist==undefined)
      {
        blacklist = [];
      }

      $('.s_tab_inner').append('<a id="showBlackList" href="javascript:;" class="s-tab-item">屏蔽列表</a>');
      $('#showBlackList').on('click', function () {
          let listvalue='';
          for (let x = 0; x < blacklist.length; x++) {
              listvalue += blacklist[x];
              if(x<blacklist.length - 1)
              {
                  listvalue += "\n";
              }
          }

          layer.prompt({
              title: '域名屏蔽列表,一行一个,支持 * ? 通配符!自动过滤空行',
              formType: 2,
              area: ['500px', '350px'],
              value:listvalue,
              yes: function (index, layero) {
                  let pass = $(document.getElementsByClassName('layui-layer-input')[0]).val();
                  if(pass.length > 0){
                      blacklist = pass.split('\n');
                  }
                  else{
                      blacklist = [];
                  }
                  blacklist = blacklist.filter(function (s) { return s && s.trim(); });
                  GM_setValue("blacklist",blacklist);
                  layer.close(index);
                }
          });
      });

      $('body').on('click', '.removeItemButton', function () {
          let domain = $(this).attr('data-domain');
          layer.confirm('是否将『'+domain+'』加入到屏蔽列表?', {
              btn: ['是','否']
          }, function(index){
              blacklist.push(domain);
              GM_setValue("blacklist",blacklist);
              baiduHelper.removeItem();
              layer.close(index)
          });
      });

      var beforeScrollTop = document.documentElement.scrollTop
        window.addEventListener("scroll", function (e) {
            var afterScrollTop = document.documentElement.scrollTop,
                delta = afterScrollTop - beforeScrollTop;
            if (delta === 0) return false;
            if (delta > 0) {
               var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
               let scrollDelta = 666;
               if (document.documentElement.scrollHeight <= document.documentElement.clientHeight + scrollTop + scrollDelta) {
                   if(!removing)
                   {
                       removing=true;
                       setTimeout(function() {
                           baiduHelper.removeItem();
                           baiduHelper.addButton();
                           removing=false;
                       }, 2000);
                   }
               }
            }
            beforeScrollTop = afterScrollTop;
        }, false);
    }

    baiduHelper.cleanAd = function(){
		$('#content_right').remove();
        $('#rs_new').remove();
        $('#foot').remove();
	};

    baiduHelper.removeItem = function(){
		$('#content_left').find('.new-pmd').each(function(){
            let mu = $(this).attr('mu');
            if(mu!==undefined)
            {
                let domain = mu.split('/');
                if(domain[2])
                {
                    for (let x = 0; x < blacklist.length; x++) {
                        if(globToRegex(blacklist[x]).test(domain[2]))
                        {
                            console.log("匹配成功 "+domain[2])
                            $(this).remove()
                            break;
                        }
                    }
                }
            }

        });
	};

    baiduHelper.addButton = function(){
       $('#content_left').find('.new-pmd').each(function(){
           let mu = $(this).attr('mu');
           if($(this).hasClass('result-op'))
           {
               if($(this).find('.removeItemButton').length==0)
               {
                   let ss = $(this).find("div[class^='wenda-abstract-source_'] .c-row");
                   if(mu!==undefined)
                   {
                       let domain = mu.split('/');
                       if(domain[2])
                       {
                           ss.append('<a style="margin-left: 8px" class="removeItemButton" data-domain="'+domain[2]+'"><span class="c-color-gray" aria-hidden="true">✌屏蔽它✌</span></a>')
                       }
                   }
               }
           }
           else
           {
               $(this).find('.c-gap-top-small .c-row').each(function(){
                   if($(this).find('.removeItemButton').length==0)
                   {
                       if(mu!==undefined)
                       {
                           let domain = mu.split('/');
                           if(domain[2])
                           {
                               $(this).append('<a style="margin-left: 8px" class="removeItemButton" data-domain="'+domain[2]+'"><span class="c-color-gray" aria-hidden="true">✌屏蔽它✌</span></a>')
                           }
                       }
                   }
               });
           }
        });
	};

    baiduHelper.cleanAd();
    baiduHelper.init();
    baiduHelper.removeItem();
    baiduHelper.addButton();
})();