Zhihu Original Filter

知乎原创过滤器

// ==UserScript==
// @name         Zhihu Original Filter
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  知乎原创过滤器
// @author       xi2008wang
// @match        https://www.zhihu.com/follow
// @require      https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
// @run-at       document-end
// @grant        none
// ==/UserScript==

var $ = $ || window.$;
var original_set = ['回答了', '发表了', '添加了', '专栏更新了'];
var zhihu_filter_sw = false;

function waitForKeyElements(
  selectorTxt,
  /* Required: The jQuery selector string that
                      specifies the desired element(s).
                  */
  actionFunction,
  /* Required: The code to run when elements are
                         found. It is passed a jNode to the matched
                         element.
                     */
  bWaitOnce,
  /* Optional: If false, will continue to scan for
                    new elements even after the first match is
                    found.
                */
  iframeSelector
  /* Optional: If set, identifies the iframe to
                        search.
                    */
) {
  var targetNodes, btargetsFound;

  if (typeof iframeSelector == "undefined") {
    targetNodes = $(selectorTxt);
  } else {
    targetNodes = $(iframeSelector).contents().find(selectorTxt);
  }

  if (targetNodes && targetNodes.length > 0) {
    btargetsFound = true;
    /*--- Found target node(s).  Go through each and act if they
        are new.
    */
    targetNodes.each(function() {
      var jThis = $(this);
      var alreadyFound = jThis.data('alreadyFound') || false;

      if (!alreadyFound) {
        //--- Call the payload function.
        var cancelFound = actionFunction(jThis);
        if (cancelFound) {
          btargetsFound = false;
        } else {
          jThis.data('alreadyFound', true);
        }
      }
    });
  } else {
    btargetsFound = false;
  }

  //--- Get the timer-control variable for this selector.
  var controlObj = waitForKeyElements.controlObj || {};
  var controlKey = selectorTxt.replace(/[^\w]/g, "_");
  var timeControl = controlObj[controlKey];

  //--- Now set or clear the timer as appropriate.
  if (btargetsFound && bWaitOnce && timeControl) {
    //--- The only condition where we need to clear the timer.
    clearInterval(timeControl);
    delete controlObj[controlKey]
  } else {
    //--- Set a timer, if needed.
    if (!timeControl) {
      timeControl = setInterval(function() {
          waitForKeyElements(selectorTxt,
            actionFunction,
            bWaitOnce,
            iframeSelector
          );
        },
        300
      );
      controlObj[controlKey] = timeControl;
    }
  }
  waitForKeyElements.controlObj = controlObj;
}

function zhihu_filter_all(feeds) {
  feeds.each(function() {
    var feed = $(this);
    zhihu_filter(feed);
  });
}

function zhihu_filter(feed) {
  var feed_data = feed.find('.FeedSource-firstline').text();
  var found = false;
  $.each(original_set, function(idx, original) {
    // 遍历找出原创feed
    if (feed_data.indexOf(original) >= 0) {
      found = true;
      return;
    }
  });

  // 隐藏不关心feed
  if (zhihu_filter_sw && !found) {
    feed.parent().hide();
  } else {
    feed.parent().show();
  }

  // 广告feed也隐藏
  $('.TopstoryItem--advertCard').hide();
}

function append_switch() {
  var b = $('<button id="zhihu_filter_sw" style="position: fixed;top: 60px;right: 20px;">全部</button>');
  b.prependTo('body');

  $('#zhihu_filter_sw').click(function() {
    if ($(this).text() == "全部") {
      // 单击时全部过滤
      $(this).text("原创");
      zhihu_filter_sw = true;
      zhihu_filter_all($('.Feed'));
    } else {
      $(this).text("全部");
      zhihu_filter_sw = false;
      zhihu_filter_all($('.Feed'));
    }
  });
}

(function() {
  'use strict';

  // 附加过滤切换按钮
  append_switch();

  // 开始实时过滤
  waitForKeyElements(
    ".Feed", zhihu_filter
  );

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址