Greasy Fork

自动展开隐藏内容

Auto show the hidden contents.

目前为 2022-01-27 提交的版本。查看 最新版本

// ==UserScript==
// @name         自动展开隐藏内容
// @namespace    Auto show hidden contents.
// @version      1.26
// @description  Auto show the hidden contents.
// @author       Rocy
// @match        *://weibo.com/ttarticle/p/show*
// @match        *://zhidao.baidu.com/question/*
// @match        *://xw.qq.com/amphtml/*
// @match        *://wenku.baidu.com/view/*
// @match        *://3g.163.com/.*?/article/*
// @match        *://m.sohu.com/a/.*/
// @match        *://www.xcc.com/newdetail/*
// @match        *://3g.k.sohu.com/t/*
// @match        *://www.jianshu.com/p/*
// @match        *://xw.qq.com/cmsid/*
// @match        *://jingyan.baidu.com/article/*
// @match        *://www.it1352.com/*
// @match        *://tieba.baidu.com/p/*
// @match        *://www.zhihu.com/question/*
// @match        *://baijiahao.baidu.com/s*
// @match        *://www.jb51.cc/linux/*
// @match        *://mbd.baidu.com/newspage/data/dtlandingwise*
// @match        *://www.k4china.com/*
// @match        *://m.huxiu.com/article/*
// @match        *://k.sina.cn/*
// @grant        none
// @license      GPL-3.0
// ==/UserScript==

(function () {
  "use strict";

  var settings = {
    interval_time: 50,
    interval_max_time: 5000,
  };

  var message_data = {
    box: null,
    message_ele: null,
    timeout: null,
  };

  var prev_handled_count = 0;
  var handled_count = 0;

  var platforms = [
    {
      name: "微博文章",
      include_regex: /^.*:\/\/weibo.com\/ttarticle\/p\/show.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "btn_line W_tc W_f14 W_fb",
        },
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "WB_editor_iframe_new",
        },
      ],
    },
    {
      name: "百度知道",
      include_regex: /^.*:\/\/zhidao.baidu.com\/question\/.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "wgt-best-mask",
        },
        {
          type: "class",
          value: "wgt-answers-mask",
        },
        {
          type: "class",
          value: "w-detail-display-btn",
        },
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "best-text mb-10",
        },
        {
          type: "class",
          value: "answer-text mb-10",
        },
        {
          type: "class",
          value: "w-detail-container w-detail-index",
        },
      ],
      hide_click_item: [
        {
          type: "id",
          value: "show-answer-hide",
        },
        {
          type: "class",
          value: "show-hide-dispute"
        }
      ],
      hide_tap_item: [
        {
          type: "class",
          value: "show-more-replies",
        },
      ],
    },
    {
      name: "腾讯网文章",
      include_regex: /^.*:\/\/xw.qq.com\/amphtml\/.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "ct-unfold folded",
        },
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "article-main fold",
        },
      ],
    },
    {
      name: "百度文库文章",
      include_regex: /^.*:\/\/wenku.baidu.com\/view\/.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "fold-page-content",
        },
        {
          type: "class",
          value: "try-end-fold-page"
        }
      ],
      auto_height_elements_item: [
        {
          type: "id",
          value: "reader-container",
        },
      ],
    },
    {
      name: "网易移动版文章",
      include_regex: /^.*:\/\/3g.163.com\/.*?\/article\/.*/,
      auto_height_elements_item: [
        {
          type: "element",
          value: "article",
        },
      ],
      hide_click_item: [
        {
          type: "class",
          value: "show_article js-show-article",
        },
      ],
    },
    {
      name: "搜狐移动版文章",
      include_regex: /^.*:\/\/m.sohu.com\/a\/.*/,
      hide_click_item: [
        {
          type: "id",
          value: "artLookAll",
        },
      ],
    },
    {
      name: "芯查查资讯文章",
      include_regex: /^.*:\/\/www.xcc.com\/newdetail\/.*/,
      hide_click_item: [
        {
          type: "class",
          value: "el-button el-button--primary",
        },
      ],
    },
    {
      name: "搜狐移动版文章",
      include_regex: /^.*:\/\/3g.k.sohu.com\/t\/.*/,
      hide_click_item: [
        {
          type: "id",
          value: "at-cnt-rest",
        },
      ],
    },
    {
      name: "简书文章",
      include_regex: /^.*:\/\/www.jianshu.com\/p\/.*/,
      hide_click_item: [
        {
          type: "class",
          value: "ant-btn nP21pp",
        },
      ],
    },
    {
      name: "腾讯新闻移动版文章",
      include_regex: /^.*:\/\/xw.qq.com\/cmsid\/.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "collapseWrapper",
        },
      ],
      auto_height_elements_item: [
        {
          type: "id",
          value: "article_body",
        },
      ],
    },
    {
      name: "百度经验内容",
      include_regex: /^.*:\/\/jingyan.baidu.com\/article\/.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "read-whole-mask",
        },
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "exp-content-container fold",
        },
      ],
    },
    {
      name: "IT1352文章",
      include_regex: /^.*:\/\/www.it1352.com\/.*/,
      custom_item: [
        {
          already_run: false,
          callback() {
            var it1352_main = $(".arc-body-main");
            var it1352_main_more = $(".arc-body-main-more");
            if (
              it1352_main &&
              it1352_main_more &&
              it1352_main.length &&
              it1352_main_more.length
            ) {
              $(".arc-body-main").css("height", "auto");
              $(".arc-body-main-more").remove();
              return true;
            } else return false;
          },
        }
      ],
    },
    {
      name: "百度贴吧",
      include_regex: /^.*:\/\/tieba.baidu.com\/p\/.*/,
      delete_elements_item: [
        {
          type: "class",
          value: "tb-backflow-defensive",
        },
        {
          type: "class",
          value: "nav-bar"
        }
      ],
      hide_click_item: [
        {
          type: "class",
          value: "replace_tip",
        },
      ],
      custom_item: [
        {
          already_run: false,
          callback() {
            document.body.style.overflow = 'auto';
            return true;
          },
        }
      ],
    },
    {
      name: "知乎内容",
      include_regex: /.*:\/\/www.zhihu.com\/question\/.*/,
      delete_elements_item:[
        {
          type: "class",
          value: "Modal-enter-done"
        },
        {
          type: "class",
          value: "ModalWrap"
        },
        {
          type: "class",
          value: "SkipModal"
        },
        {
          type: "class",
          value: "OpenInApp"
        },
        {
          type: "class",
          value: "ContentItem-expandButton"
        }
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "RichContent-inner"
        }
      ],
      custom_item: [
        {
          already_run: false,
          callback() {
            if(document.documentElement.style.overflow == 'hidden') {
              document.documentElement.style.setProperty('overflow', 'auto', 'important');
              return true;
            }
            return false;
          },
        },
        {
          already_run: false,
          callback() {
            if(document.body.style.overflow == 'hidden') {
              document.body.style.setProperty('overflow', 'auto', 'important');
              return true;
            }
            return false;
          },
        },
        {
          already_run: false,
          callback() {
            var rich_eles = document.getElementsByClassName('RichContent-inner');
            for (var rich_ele of rich_eles) {
              rich_ele.style.setProperty('-webkit-mask-image', 'none');
            }
            return true;
          }
        }
      ],
    },
    {
      name: "百家号文章",
      include_regex: /^.*:\/\/baijiahao.baidu.com\/s.*/,
      delete_elements_item:[
        {
          type: "class",
          value: "layer-wrap"
        },
        {
          type: "class",
          value: "headDeflectorContainer"
        },
        {
          type: "class",
          value: "oPadding"
        }
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "mainContent",
        },
      ],
      custom_item: [
        {
          already_run: false,
          callback() {
            if (getComputedStyle(document.body).overflow == 'hidden') {
              document.body.style.setProperty('overflow', 'auto', 'important');
              return true;
            }
            return false;
          }
        },
        {
          loop: true,
          callback() {
            var flag = false;
            var app_install_bars_children = document.getElementsByClassName('other')[0].children;
            for (var tmp_ele of app_install_bars_children) {
              if (tmp_ele.style.left == '50%' &&
                  tmp_ele.style.transform == 'translate(-50%, 0%)' &&
                  window.getComputedStyle(tmp_ele).position == 'fixed') {
                tmp_ele.remove();
                flag = true;
              }
            }

            return flag;
          }
        }
      ],
    },
    {
      name: "编程之家",
      include_regex: /^.*:\/\/www.jb51.cc\/linux\/.*/,
      delete_elements_item:[
        {
          type: "id",
          value: "read-more-wrap"
        }
      ],
      auto_height_elements_item: [
        {
          type: "id",
          value: "container",
        },
      ],
    },
    {
      name: "百度个人动态",
      include_regex: /^.*:\/\/mbd.baidu.com\/newspage\/data\/dtlandingwise.*/,
      delete_elements_item:[
        {
          type: "class",
          value: "layer-wrap"
        },
        {
          type: "class",
          value: "height-fold"
        },
        {
          type: "class",
          value: "headDeflectorContainer"
        }
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "dynamic-item",
        },
      ],
      custom_item: [
        {
          already_run: false,
          callback() {
            if (getComputedStyle(document.body).overflow == 'hidden') {
              document.body.style.setProperty('overflow', 'auto', 'important');
              return true;
            }
            return false;
          },
        }
      ],
    },
    {
      name: "科中资源网",
      include_regex: /^.*:\/\/www.k4china.com\/.*/,
      hide_click_item: [
        {
          type: "class",
          value: "readmore",
        }
      ],
    },
    {
      name: "虎嗅文章",
      include_regex: /^.*:\/\/m.huxiu.com\/article\/.*/,
      delete_elements_item:[
        {
          type: "class",
          value: "article-detail-swiper-container"
        },
        {
          type: "class",
          value: "fresh-article-wrap"
        }
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "js-mask-box",
        },
      ],
    },
    {
      name: "新浪文章",
      include_regex: /^.*:\/\/k.sina.cn\/.*/,
      delete_elements_item:[
        {
          type: "id",
          value: "float-btn"
        },
        {
          type: "id",
          value: "artFoldBox"
        }
      ],
      auto_height_elements_item: [
        {
          type: "class",
          value: "s_card z_c1"
        }
      ],
    }
  ];

  InitMessageArea();

  var handler = GetPlatform();
  var run_times = 0;
  var interval = setInterval(() => {
    if (handler.delete_elements_item) {
      for (var delete_item of handler.delete_elements_item) {
        var delete_eles = GetItemElement(delete_item);
        if (delete_eles.length <= 0) {
          continue;
        }

        for (var delete_ele of delete_eles) {
          delete_ele.remove();
          ++handled_count;
        }
      }
    }

    if (handler.auto_height_elements_item) {
      for (var height_item of handler.auto_height_elements_item) {
        var height_eles = GetItemElement(height_item);
        if (height_eles.length <= 0) {
          continue;
        }

        for (var height_ele of height_eles) {
          if (
            height_ele.style.height == "unset" &&
            height_ele.style.minHeight == "unset" &&
            height_ele.style.maxHeight == "unset"
          ) {
            continue;
          }

          height_ele.style.height = "unset";
          height_ele.style.minHeight = "unset";
          height_ele.style.maxHeight = "unset";
          ++handled_count;
        }
      }
    }

    if (handler.hide_click_item) {
      for (var click_item of handler.hide_click_item) {
        var click_eles = GetItemElement(click_item);
        if (click_eles.length > 0) {
          for (var click_ele of click_eles) {
            if (
              click_ele != null &&
              click_ele.getAttribute("opened") != "yes"
            ) {
              click_ele.click();
              click_ele.setAttribute("opened", "yes");
              ++handled_count;
            }
          }
        }
      }
    }

    if (handler.hide_tap_item) {
      for (var tap_item of handler.hide_tap_item) {
        var tap_eles = GetItemElement(tap_item);
        if (tap_eles.length > 0) {
          for (var tap_ele of tap_eles) {
            if (tap_ele != null && tap_ele.getAttribute("opened") != "yes") {
              try {
                $(tap_ele).trigger("tap");
                tap_ele.setAttribute("opened", "yes");
                ++handled_count;
              } catch (ex) {
                console.error(ex);
              }
            }
          }
        }
      }
    }

    if (handler.custom_item && !handler.custom_item.already_run) {
      for (var custom_item of handler.custom_item) {
        var custom_success = false;
        if (!custom_item.already_run || custom_item.loop) {
          custom_success = custom_item.callback();
          if (!custom_item.loop && custom_success) {
            custom_item.already_run = custom_success;
          }
        }

        if (custom_success) {
          ++handled_count;
        }
      }
    }

    if (handled_count && prev_handled_count != handled_count) {
      prev_handled_count = handled_count;
      ShowMessage("已与页面斗智斗勇 " + handled_count + "次");
    }

    if (++run_times >= settings.interval_max_time / settings.interval_time) {
      clearInterval(interval);
    }
  }, settings.interval_time);

  function InitMessageArea() {
    var css = document.createElement("style");
    css.innerHTML =
      ".__auto-show-message-box{position:fixed;top:0;right:0;z-index:999999}.__auto-show-message{position:absolute;top:35px;left:10px;width:250px;height:2.5em;line-height:2.5em;over-flow:hidden;padding:0 .5em;background:#282C34;font-size:14px;color:#fff;border-radius:2px;box-shadow:rgba(0,0,0,.5) 0 0 5px;opacity:0;transition:all .3s}.__auto-show-message.__show{left:-300px;opacity:1}";
    message_data.box = document.createElement("div");
    message_data.box.className = "__auto-show-message-box";
    message_data.message_ele = document.createElement("div");
    message_data.message_ele.className = "__auto-show-message";
    message_data.box.append(message_data.message_ele);
    document.body.append(css);
    document.body.append(message_data.box);
  }

  function ShowMessage(dom) {
    dom = "【自动展开】" + dom;
    message_data.message_ele.innerHTML = dom;
    message_data.message_ele.className = "__auto-show-message __show";
    message_data.timeout && clearTimeout(message_data.timeout);
    message_data.timeout = setTimeout(() => {
      message_data.message_ele.className = "__auto-show-message";
    }, 2000);
    console.log("%c" + dom, "color:#f80");
  }

  function GetPlatform() {
    for (var platform of platforms) {
      if (platform.include_regex.test(location.href)) {
        return platform;
      }
    }
  }

  function GetItemElement(item) {
    if (item.type == "class") {
      return document.getElementsByClassName(item.value);
    } else if (item.type == "id") {
      var id_ele = document.getElementById(item.value);
      return id_ele ? [id_ele] : [];
    } else if (item.type == "element") {
      return document.getElementsByTagName(item.value);
    }

    return [];
  }
})();