- // ==UserScript==
- // @name Programer's Web Friend
- // @namespace https://tampermonkey.net/
- // @version 2.3.3
- // @description change Programer's Web style to mobile device friendly ,and more readble
- // @author @Amormaid
- // @run-at document-end
- // @match http://*/*
- // @include http://*
- // @include https://*
- // @exclude http://localhost*
- // @license MIT License
- // @grant none
- // ==/UserScript==
-
-
- main()
-
- function main() {
- // var root = document.body;
- // var hostname = /\d+\.\d+\.\d+\.\d+/.test(window.location.hostname) ? "ip": window.location.hostname;
- var hostname = window.location.hostname;
-
- if (exclude_check(hostname)) {
- return
- }
-
- // console.clear();
-
- try {
- console.time("allen_web_time_count");
-
- // customer change
- let rules = customer_rules()
- let matched_rule = rules.filter( rule_item => rule_item.hostname instanceof Array
- ? rule_item.hostname.includes(hostname)
- : rule_item.hostname === hostname
- )[0]
- matched_rule.action()
- // main_content_adjust(obj.main_ele);
- var main_content = main_ele_searcher();
- ele_remover(main_content);
- // full window
- // document.body.style.cssText = "position:absolute; top:0;right:0; bottom:0;left:0;"
- // document.body.style.width = window.innerWidth
- // document.body.style.height = window.innerHeight
-
- change_style();
- console.timeEnd("allen_web_time_count");
- } catch(err) {
- //console.log(err.name,' ',err.message);
- console.log(err.message);
- }
- }
-
- // white list check
- function exclude_check(hostname_param) {
- // 不执行脚本的网站白名单
- let exclude_list = [
- "www.youtube.com",
- "demo.mycodes.net",
- "kiwivm.64clouds.com",
- "www.instagram.com",
- "www.h-ui.net",
- "www.layui.com",
- "www.kixeye.com",
- "pan.baidu.com",
- "www.rishiqing.com",
- "wx.qq.com",
- "mail.126.com",
- "twitter.com",
- "reactjs.org",
- "codepen.io",
- "free.modao.cc",
- "lanhuapp.com",
- "developers.weixin.qq.com",
- "jira.vankeservice.com",
- "www.tapd.cn",
- "10.0.74.227",
- "modao.cc",
- "element-cn.eleme.io",
- ""
- ]
- return exclude_list.includes(hostname_param)
- }
-
- // 自定义样式调整
- function customer_rules() {
- let rules = [
- {
- rule: "default",
- hostname: "ip",
- regexp: "",
- action: () => {}
- },
- {
- rule: "default",
- hostname: "wc-kx-vip.sjc.kixeye.com",
- regexp: "",
- action: () => {
- $$('#above-game-message', 'remove_one');
- $$('#kxp-footer-bar', 'remove_one');
- $$('#topnavbar_back', 'remove_one');
- }
- },
- {
- rule: "default",
- hostname: ["www.baidu.com", "zhidao.baidu.com"],
- regexp: "",
- action: () => {
- let interval_id = setInterval( () => {
- const right_list_length = 5
- $$("#content_right", 'remove_all');
- var zhidao_body = $$("#body", "return_one");
- var container = $$("#container", "return_one");
- var head = $$("#head", "return_one");
- var pad = $$("#s_tab", "return_one");
- $$("#rs", "remove_all")
- var u = $$("#u", "return_one");
- container.style.cssText = "display:block;width:100%;position:relative;"
- head && (() => {
- head.style.position = 'relative';
- head.style.width = window.innerWidth - 100 + 'px';
- head.style['min-width'] = 0;
- })();
- pad && (() => {
- pad.style.padding = '0 0 0 121px'
- })();
- u && (() => {
- u.style.display = 'none'
- })();
- zhidao_body && (() => {
- zhidao_body.style.left = "50px"
- })();
-
- let origin_length = document.getElementById("content_left").children.length
-
- if (origin_length > 6) {
- // console.log(content_list)
- let right_list = Array.prototype.slice.call($$(".result", "return_all"),-1 - right_list_length, -1)
- let container_r = document.createElement("div")
- container_r.style.cssText += "display:block;position:absolute;top:40px;left:740px;width:600px;"
- // let str = Array.prototype.reduce.call(right_list, (html_str, item ,index , right_list) => (item.innerHTML + html_str), '')
- Array.prototype.forEach.call(right_list, item => {
- item.style.cssText += "padding:10px 0;"
- container_r.appendChild(item)
- })
- let container_r_dom = container.appendChild(container_r)
- let page_indic = $$("#page", "return_one")
- page_indic.style.cssText = "position:absolute;top:0px;left:660px;margin:-60px 0 0 0;z-index:300"
- }
-
- },300)
- }
- },
- {
- rule: "default",
- hostname: ["i.taobao.com", "trade.taobao.com", "rate.taobao.com", "buyertrade.taobao.com"],
- regexp: "",
- action: () => {
- $$(".m-guess-you-like", "remove_one");
- $$(".m-someone-like-you", 'remove_one');
- $$("#p4p_ad", 'remove_one');
- $$(".J_guess-you-like", 'remove_one');
- }
- },
- {
- rule: "default",
- hostname: ["www.cnblogs.com", "blog.csdn.net"],
- regexp: "",
- action: () => {
- var content = $$("#content", "return_one");
- $$("#sidebar", "remove_one");
- $$("#side", 'remove_one');
-
- content && (() => {
- content.style["margin-right"] = "10";
- content.style.width = window.innerWidth - 100 + 'px';
- })();
-
- let article = $$("#article_content", "return_one");
- article && (() => {
- article.style.height = "100%";
- article.style.overflow = "visible";
- })()
- $$(".recommend-item-box", "remove_all");
- $$(".hide-article-box", "remove_one");
- $$("aside", "remove_one");
- let main = $$("main", "return_one")
- if (main) main.style.float = "left";
- setTimeout(() => {
- $$(".adblock", "remove_one");
- },
- 3000)
- $$(".pulllog-box", "remove_one");
- }
- },
- {
- rule: "default",
- hostname: "www.w3school.com.cn",
- regexp: "",
- action: () => {
- $$("#navsecond", 'hide_one');
- }
- },
- {
- rule: "default",
- hostname: "wallstreetcn.com",
- regexp: "",
- action: () => {
- setInterval(() => {
- $$('.news-item__cover', 'remove_all');
- $$('.qn-img', 'remove_all');
- // console.log(new Date() - 0)
- change_style();
- },
- 500);
-
- $$('.left-bar', 'remove_one');
- }
- },
- {
- rule: "default",
- hostname: "www.merriam-webster.com",
- regexp: "",
- action: () => {
- $$(".right-rail", 'hide_one');
- $$("#recirc-bar-footer", 'hide_one');
- $$(".wgt-related-to.jc-card-box.clearfix", 'hide_one');
- }
- },
- {
- rule: "default",
- hostname: "blog.sina.com.cn",
- regexp: "",
- action: () => {
- $$("#column_1", 'hide_one');
- }
- },
- {
- rule: "default",
- hostname: ["blog.jobbole.com", "web.jobbole.com"],
- regexp: "",
- action: () => {
- $$("#sidebar", 'hide_one');
- var grid = $$(".grid-8", 'return_one');
- grid && (() => {
- grid.style.width = "100%"
- })();
- }
- },
- {
- rule: "default",
- hostname: "juejin.im",
- regexp: "",
- action: () => {
- var interval_id = setInterval(() => {
- var a = $$(".show-full", 'return_one');
- var b = $$(".show-full-block", 'return_one');
- $$(".show-full-btn", 'remove_one');
- $$('.columen-view-aside', 'hide_one');
-
- if (a) a.style.height = "auto";
- a && a.setAttribute('style', 'height:auto')
- if (b) {
- clearInterval(interval_id);
- b.setAttribute('style', 'height:auto')
- }
- },
- 100);
- setInterval(change_style, 300)
- }
- },
- {
- rule: "default",
- hostname: "www.cnblogs.com",
- regexp: "",
- action: () => {
- $$("#sideBar", 'hide_one');
- $$("#vid", 'hide_one');
- $$("#left", 'hide_one');
- $$("#right_content", 'hide_one');
- $$("#leftcontent", 'hide_one');
- var a = $$("#centercontent", 'return_one');
- if (a) {
- a.style['padding-left'] = 0;
- }
- }
- },
- {
- rule: "default",
- hostname: "github.com",
- regexp: "",
- action: () => {
- document.body.style.minWidth = '100px';
- var github_pad = document.querySelector('.column.three-fourths.codesearch-results.pr-6');
- if (github_pad) {
- github_pad.style.padding = '10px 0 10px 30px';
- }
- }
- },
- {
- rule: "default",
- hostname: "wiki.jikexueyuan.com",
- regexp: "",
- action: () => {
- $$(".detail-left", 'hide_one');
- var a = $$(".detail-main", 'no_option', 'one');
- a.style['margin-left'] = '0px';
- a.style.width = document.body.clientWidth + 'px';
- }
- },
- {
- rule: "default",
- hostname: "www.cssmoban.com",
- regexp: "",
- action: () => {
- var a = $$(".wide-main.col-media-main.clearfix", 'return_one');
- a.style.width = document.body.clientWidth + 'px';
- }
- },
- {
- rule: "default",
- hostname: "www.kancloud.cn",
- regexp: "",
- action: () => {
- var interval_id = setInterval(() => {
- var a = $$(".sidebar", 'return_one');
- if (a) {
- $$(".workspace", 'return_one').style.left = "180px";
- a.style.width = '180px';
- change_style(a);
- clearInterval(interval_id);
- }
- },
- 100);
- }
- },
- {
- rule: "default",
- hostname: "php.net",
- regexp: "",
- action: () => {
- $$('.layout-menu', 'remove_one');
- if ($$(".sect1", 'return_one')) $$(".sect1", 'return_one').style.width = document.body.clientWidth - 50 + "px";
- if ($$("#usernotes", 'return_one')) $$("#usernotes", 'return_one').style.width = document.body.clientWidth - 50 + "px";
- }
- },
- {
- rule: "default",
- hostname: "www.zhihu.com",
- regexp: "",
- action: () => {
- $$('.Question-sideColumn.Question-sideColumn--sticky', 'remove_one');
- $$('.AdblockBanner-inner', 'remove_one');
- $$('.QuestionHeader-side', 'remove_all');
- $$('.AppHeader-userInfo', 'remove_all');
-
- var browser_width = document.body.clientWidth - 50 + "px";
- $$('.QuestionHeader-content', 'return_one').style.width = browser_width;
-
- setInterval(() => {
- $$('.HitQrcode', 'remove_one');
- },
- 100);
- }
- },
- {
- rule: "default",
- hostname: "www.letscorp.net",
- regexp: "",
- action: () => {
- $$('#commentlist', 'remove_one');
- $$('#sidebar', 'remove_one');
- $$('#header', 'remove_one');
-
- var browser_width = document.body.clientWidth - 50 + "px";
- $$('#container', 'return_one').style.width = browser_width;
- $$('#main', 'return_one').style.height = "auto";
- var p_ele = $$('p', 'return_all');
- Array.prototype.forEach.call(p_ele,
- function(e) {
- e.style["font-size"] = "16px";
- });
- }
- },
- {
- rule: "default",
- hostname: "segmentfault.com",
- regexp: "",
- action: () => {
- $$("#loginBanner", "remove_one");
- }
- },
- {
- rule: "default",
- hostname: "huziketang.mangojuice.top",
- regexp: "",
- action: () => {
- for (var i = 0; i < 10000; i++) {
- clearInterval(i);
- }-
- $$("div", "return_all").forEach(function(ele) {
- if (ele.id && ele.id !== "wrapper" && ele.id !== "uyan_frame" && ele.id !== "donate-mask") {
- ele.parentNode.removeChild(ele);
- }
- });
- }
- },
- {
- rule: "default",
- hostname: "lvv2.com",
- regexp: "",
- action: () => {
- if ($$(".link.show", "return_all")) {
- $$(".link.show", "return_all").forEach(function(ele) {
- if (ele.querySelector('a.title')) {
- // console.log(ele.querySelector('a.title').innerHTML)
- ele.querySelector('a.title').style.fontSize = '16px'
- var title = ele.querySelector('a.title').innerHTML
- var porn_list = ['日', '勾引', '野外', '肏', '抽插', '公厕', '舔', '茎', '肛', '奴', '约炮', '母狗', '调教', '草', '鸡巴', '小受', '口爆', '野战', 'SM', 'sm', '贱货', '被虐', '淫', '内裤', '屁眼', '蕾丝', '姿势', '体位', '色情', '骚', '屌', '淫荡', '射', '艹', '丝袜', '情色', '调情', '做爱', '操', '捆绑', '挑逗', '绿帽', '潮喷', '援交', 'jj', 'JJ', '潮吹', '3p', '3P', '腰', '臀', '肉棒', '啪啪', '圣水']
- var politic_list = ['中共', '土共', '民主', '法治', '天安门', '老兵', '自由', '殴打', '近平', '奴隶', '道德', '强拆', '法律', '监狱', '城管', '土匪', '毛腊肉', '老毛', '专制', '社会主义', '党中央', '统治', '酷刑', '党员', '人民', '民族', 'P2P', '普京', '英雄', '纳税', '维权', '执法', '警察', '独裁', '政府', '郭文贵', '文革', '武装', '共产', '垬', '毛泽东', '政权', '枪', '举报', '恐怖', '宗教', '卖国', '死', '软禁']
- var key_word_list = porn_list.concat(politic_list)
- var porn_detection = key_word_list.some(function(ele) {
- return title.indexOf(ele) > -1
- })
- porn_detection && ele.parentNode.removeChild(ele)
- // ele.parentNode.removeChild(ele);
- }
- });
- }
- }
- },
- {
- rule: "default",
- hostname: "",
- regexp: "",
- action: () => {
-
- }
- },
-
- ]
-
- return rules
- }
-
- //window.frames
- //Array.prototype.slice.call(ele)
-
- //寻找页面的主要内容
- function main_ele_searcher() {
- var ele = document.querySelectorAll("*");
- var arr = [];
- //var arr_index = [];
- var w, h;
-
- var body_width = document.body.clientWidth;
- var body_height = document.body.clientHeight;
-
- if (!body_height) {
- var max_width = 0, max_height = 0;
- document.documentElement.style.height = '100%';
- document.body.style.height = '100%';
-
- for (let i = 0, ele_length = ele.length; i < ele_length; i++) {
- w = ele[i].clientWidth;
- h = ele[i].clientHeight;
- if (w > max_width) { max_width = w; }
- if (h > max_height) { max_height = h; }
- w = null;
- h = null;
- }
- body_width = max_width;
- body_height = max_height;
- }
-
-
- for (let i = 0, ele_length = ele.length; i < ele_length; i++) {
- w = ele[i].clientWidth;
- h = ele[i].clientHeight;
- //console.log(h);
-
- if (w && h && w > body_width / 2 && h > body_height / 5 && w < body_width && h < body_height) {
- arr[w * h] = ele[i];
- //console.log(ele[i]);
- //arr_index.push(w * h);
- }
- w = null;
- h = null;
- }
- var main_ele = arr[arr.length - 1] || document.body;
- return {
- main_ele,
- body_width,
- body_height
- };
- }
-
- //去除侧边栏这样“狭长”的内容
- function ele_remover(obj) {
- var w, h;
- var { main_ele, body_width, body_height } = obj;
- var ele = document.querySelectorAll("*");
- //console.log(main_ele,body_width, body_height )
- for (let i = 0, ele_length = ele.length; i < ele_length; i++) {
- w = ele[i].clientWidth;
- h = ele[i].clientHeight;
- // main_ele.parentNode.children
- if (!ele[i].contains(main_ele) && !main_ele.contains(ele[i]) && (ele[i] !== main_ele) && w * 1.4 < h && w < body_width / 2 && w > body_width / 10) {
- //content_adjust(ele[i]);
- console.log("---------element removed ------------");
- console.log(ele[i]);
- console.log("---------element removed ------------");
-
- ele[i].parentNode.removeChild(ele[i]);
- }
- w = null;
- h = null;
- }
- }
-
- //去除被移除元素的兄弟元素的padding margin
- function content_adjust(ele) {
- var siblings = ele.parentNode.children;
- ele.parentNode.style.position = "relative";
- // console.log(ele);
- for (let i = 0, ele_length = siblings.length; i < ele_length; i++) {
- //console.log(siblings[i]);
- siblings[i].setAttribute('style', 'position:relative;padding:20px;margin:0px;overflow:visible;');
- }
- }
-
-
- //调整主要内容的样式
- function main_content_adjust(main_ele) {
- //var a = [{x,y,top,right,bottom,left,width}]=main_ele.getClientRects();
- main_ele.parentNode.style.position = "relative";
- main_ele.style.cssText = "position:absolute; top:0;right:0; bottom:0;left:0;"
- // main_ele.setAttribute('style','position:relative;padding:20px 20px 20px 40px;margin:auto;clear:both;overflow:visible;');
- var ratio = 0.9 * (window.innerWidth) / main_ele.clientWidth;
- var ele = main_ele.querySelectorAll('*');
- // console.log(ele);
- for (let i = 0, ele_length = ele.length; i < ele_length; i++) {
- ele[i].style.width = ele[i].clientWidth * ratio + "px";
- ele[i].style.overflow = 'visible';
- //console.log(i);
- }
-
- }
-
-
-
- // body 全屏
- function full_body() {
- let root = document.body
- root.style.cssText = "position:absolute; top:0;right:0; bottom:0;left:0;"
-
- }
- //背景调色
- function change_style(DOM_node = document.body) {
- // 执行速度 : for 循环 > forEach > 尾递归 >递归 (迭代)
- let background_base_color = 50;
- let background_offset = 20;
- let font_base_color = 230;
- let font_offset = 20;
- var all = (DOM_node || document).querySelectorAll('*');
- for (let i = 0, ele_length = all.length; i < ele_length; i++) {
- let item = all[i]
- let item_style = item.style
- let tag_exclude_check = !('script,style,img').includes(item.nodeName.toLowerCase())
- if(tag_exclude_check && !item_style.backgroundColor){
- item_style.backgroundColor = random_color(background_base_color,background_offset);
- item_style.color = random_color(font_base_color,font_offset);
- }
- }
- /*
- let background_base_color = 40;
- let background_offset = 20;
- let font_base_color = 200;
- let font_offset = 50;
- let html_str = DOM_node.innerHTML ;
- // 匹配速度 string.indexOf > string.match
- // let html_str = DOM_node.innerHTML.replace(/\&/g,'') ;
- // var all = (new DOMParser()).parseFromString(html_str, "text/xml");
- let html_str_arr = html_str.split(">");
- let new_html_str_arr = html_str_arr.map((item, index) => {
- if(item.indexOf('</') > 0) {return item }
- if(!item.match(/\<div|\<form|\<table|\<dl|\<ol|\<ul|\<pre|\<h|\<a|\<p|\<code|\<em|\<span|\<td|\<th|\<input|\<textarea/i)) {return item }
- let font_color_str = ";color:"+random_color(font_base_color,font_offset);
- if(item.indexOf('background-color') > 0) {
- let reg = /background-color\s*\:\s*[\w\,\(\)\#]+/;
- let str = 'background-color:' + random_color(background_base_color,background_offset) + font_color_str;
- return item.replace(reg, str)
- }
- if(item.indexOf('background') > 0) {
- let reg = /\#[^\s]+|rgb[^\)]+\)/;
- let str = random_color(background_base_color,background_offset);
- return item.replace(reg, str).replace(/(style=(["'])[^'"]+)\2/,"$1" + font_color_str + "$2")
- }
- return `${item} style="background-color:${random_color(background_base_color,background_offset)}${font_color_str}"`;
- })
-
- DOM_node.innerHTML = new_html_str_arr.join(">")
- DOM_node.style.backgroundColor = random_color(background_base_color,background_offset);
- */
- }
-
- function random_color(base_color, offset, ratio=1){
- base_color = (base_color & 255) === (~~base_color) ? ~~base_color : 255;
- offset = ~~offset
- offset = (base_color+offset > 0 && base_color+offset < 256)? offset : 0
- return `rgba(${(base_color + offset*Math.random())&255},${(base_color + offset*Math.random())&255},${(base_color + offset*Math.random())&255},0.8)`;
- }
-
-
- function ele_hide(e) {
- // if (document.body.hasChildNodes(e)) e.style.display = "none";
- document.body.hasChildNodes(e) && e.length !== 0 && e.style.setAttribute('display', "none");
- }
- function ele_hide_all(all) {
- Array.prototype.forEach.call(all, function (e) { e.style.display = "none"; });
- }
- function ele_remove(e) {
- // if (document.body.hasChildNodes(e)) e.parentNode.removeChild(e);
- document.body.hasChildNodes(e) && e.length !== 0 && e.parentNode.removeChild(e);
- }
- function ele_remove_all(all) {
- if (all) {
- all = Array.from(all)
- }
- if (!all.length) {
- return
- }
- Array.prototype.forEach.call(all, function (e) {
- e instanceof Object && e.parentNode.removeChild(e);
- });
- }
-
-
- function $$(selector, operation_code) {
- // operation_code : return_one return_all remove_one remove_all hide_one hide_all
- function get(selector) {
- if((/^#[^.#]+$/).test(selector)) {
- return [document.getElementById(selector.slice(1, selector.length))]
- }
- if((/^\.[^.#]+$/).test(selector)) {
- return document.getElementsByClassName(selector.slice(1, selector.length))
- }
- if((/^[^.#]+$/).test(selector)) {
- return document.getElementsByTagName(selector)
- }
- }
- switch (operation_code) {
- case 'return_one': //return_one
- // return document.querySelector(selector);
- return get(selector)[0];
- case 'return_all':// return_all
- // return document.querySelectorAll(selector);
- return get(selector);
- case 'remove_one': //remove_one
- // ele_remove(document.querySelector(selector));
- ele_remove(get(selector));
- break;
- case 'remove_all': //remove_all
- // ele_remove_all(document.querySelectorAll(selector));
- ele_remove_all(get(selector));
- break;
- case 'hide_one': //hide_one
- // ele_hide(document.querySelector(selector));
- ele_hide(get(selector));
- break;
- case 'hide_all':// hide_all
- // ele_hide_all(document.querySelectorAll(selector));
- ele_hide_all(get(selector));
- break;
-
- default:
- // var result = document.querySelectorAll(selector);
- var result = get(selector);
- return result.length > 1 ? result : result[0];
- }
- }
-
-
- function remove_div_padding_margin(ele) {
- if (ele) {
- ele.setAttribute('style', 'overflow:visible;position:relative;padding:0px;margin:0px;left:0px;');
- }
- if (ele && ele.children.length > 0) {
- Array.prototype.forEach.call(ele.children, (function (e) {
- remove_div_padding_margin(e);
- }));
- }
- }
-
- function content_get() {
- var ajax = new XMLHttpRequest();
- ajax.open('get', '/');
- ajax.send();
- ajax.onreadystatechange = function () {
- if (ajax.readyState == 4 && ajax.status == 200) {
- content_new = ajax.responseText;
- //console.log(content_new);
- content_old = content_old || content_new;
- if (content_new !== content_old) {
- location.reload();
- }
- }
- };
-
- setTimeout(content_get, 1000);
- }