// ==UserScript==
// @name Magi搜索-白
// @namespace http://tampermonkey.net/
// @version 1.1
// @description Magi搜索修改为白色主色调
// @author Shillber
// @include *://magi.com/*
// @grant none
// ==/UserScript==
/*Magi搜索进化 */
(function () {
/* 执行判断 */
const key = encodeURIComponent('修改谷花泰的插件:纯净苍穹');
if (window[key]) {
return;
};
window[key] = true;
class FuckAD {
constructor(configs) {
this._configs = configs;
/*
* config里的配置解释
* {
* 正则匹配的域名数组
* sites: ['zhihu.com'],
*
* 移除的节点数组
* remove: ['#id'],
*
* display隐藏的节点数组
* displayNone: ['#id'],
*
* visibility隐藏的节点数组
* visibilityHidden: ['#id'],
*
* 额外的css
* style: `
* body {
* background-color: #000;
* }
* `,
*
* 额外的函数执行
* others() {
* console.log('others: 哈哈');
* }
* }
*
*/
/* 初始化 */
this.init();
};
/*
* 初始化
*/
init() {
const that = this;
/* 所有要移除的节点 */
let remove = [];
/* 总体style */
let style = '';
/* 要执行的其它函数集 */
let others = [];
/* 统计 */
this._configs.forEach(config => {
const canLoad = that.siteInList(config.sites);
if (canLoad) {
remove = remove.concat(config.remove);
style += (config.style || '');
style += (that.letSelectorsDisplayNone(config.displayNone));
style += (that.letSelectorsVisibilityHidden(config.visibilityHidden));
config.others && (others = others.concat(config.others));
};
});
/* 添加style */
this.addStyle(style);
that.removeNodesBySelectors(remove);
/* 执行others内所有函数 */
try {
others.forEach(func => {
func();
});
} catch (err) {
console.error('via: others function run error', err);
};
/* 监听dom,确保节点移除 */
if (remove && remove.length > 0) {
this.observe({
targetNode: document.documentElement,
config: {
attributes: false
},
callback(mutations, observer) {
that.removeNodesBySelectors(remove);
}
})
}
};
/*
* 监听dom节点加载函数
*/
observe({ targetNode, config = {}, callback = () => { } }) {
if (!targetNode) {
return;
};
config = Object.assign({
attributes: true,
childList: true,
subtree: true
}, config);
const observer = new MutationObserver(callback);
observer.observe(targetNode, config);
};
/*
* 添加style
*/
addStyle(style = '') {
const styleElm = document.createElement('style');
styleElm.innerHTML = style;
document.head.appendChild(styleElm);
};
/*
* 选择节点,返回节点数组
*/
selectNodes(selector) {
if (!selector) {
return [];
};
const nodes = document.querySelectorAll(selector);
return nodes;
};
/*
* 判断网站是否在名单内
*/
siteInList(sites) {
const hostname = window.location.hostname;
const result = sites.some(site => {
if (hostname.match(site)) {
return true;
}
return false;
});
return result;
};
/*
* 移除多个节点
*/
removeNodes(nodes = []) {
Array.from(nodes, node => {
node.parentNode.removeChild(node);
});
};
/*
* 根据selector数组移除多个节点
*/
removeNodesBySelectors(selectors = []) {
let nodeArr = [];
selectors.forEach(selector => {
const nodes = this.selectNodes(selector);
if (nodes && nodes.length > 0) {
nodeArr = nodeArr.concat(Array.from(nodes));
};
});
this.removeNodes(nodeArr);
};
/*
* 根据css选择器生成style
*/
generateStyleBySelectors(selectors = [], customStyle = `{}`) {
if (!selectors || selectors.length === 0) {
return '';
};
let style = '';
selectors.forEach(selector => {
if (selector) {
style += `
${selectors} ${customStyle}
`;
};
});
return style;
};
/*
* 让数组里的选择器全部 display: none
*/
letSelectorsDisplayNone(selectors = []) {
return this.generateStyleBySelectors(selectors, `{
display: none!important;
}`);
};
/*
* 让数组里的选择器全部 visibility: hidden
*/
letSelectorsVisibilityHidden(selectors = []) {
return this.generateStyleBySelectors(selectors, `{
visibility: hidden!important;
}`);
};
};
new FuckAD([
{
sites: ['magi.com'],
style: `
/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
body {
color: #000;
background-color: #FFF
}
body:before {
position: fixed;
content: "";
opacity: 0;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
background: linear-gradient(#FFF, #FFF);
background-repeat: no-repeat;
background-size: 100% 100vh;
transition: opacity .2s
}
body[data-layout="result"]>#curtain {
background-color: #1C1C20
}
div.tips {
font-size: .875rem;
color: #000;
padding: .5rem .5rem;
margin-bottom: .75rem;
overflow-wrap: break-word;
word-wrap: break-word;
-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto
}
div.tips>em {
font-style: normal;
color: #FFD862
}
div.tips#censored {
font-size: .8125rem;
color: #8E8E92;
padding-bottom: 0
}
#header {
position: relative;
height: 100%;
width: 100%;
background-color:#FFF;
box-shadow: 0 0 10px 0 #EEE;
}
#search-bar {
position: relative;
z-index: 2;
display: flex;
align-items: stretch;
height: 2.5rem;
background-color: #FFF;
border-radius: .2rem;
box-shadow: 0 0 .2rem 0 rgba(10, 10, 15, 0.2)
}
#search-input {
flex: 1 1;
color: #0A0A0F;
width: 0;
border: none;
outline: 0;
border-radius: 0;
background: transparent;
line-height: normal;
padding: 0 .5rem
}
#search-submit {
flex: 0 0 2.55rem;
cursor: pointer;
border: none;
outline: 0;
border-radius: 0 .2rem .2rem 0;
background-color: #F5F5F5;
background-size: auto 1.3rem
}
#intro>a {
text-decoration: none;
font-size: .875rem;
color: #000;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#showcase>span {
display: inline-block;
margin: .75rem 0;
padding-left: .5rem;
font-size: .875rem;
font-style: italic;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: #626266;
background-repeat: no-repeat;
background-size: 200px;
-webkit-background-clip: text;
background-clip: text;
background-image: linear-gradient(-40deg, transparent 0%, transparent 40%, #000 50%, transparent 60%, transparent 100%);
animation: home-slidein 1.1s ease, home-shine 2s ease 0s infinite
}
#showcase>ul>li>a {
display: block;
padding: .5rem .5rem;
border-radius: .2rem;
text-decoration: none;
background-color: #FAFAFA;
position: relative;
z-index: 2
}
#showcase>ul>li>a h5 {
color: #000;
font-size: .875rem;
font-weight: normal;
margin: 0;
padding: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#showcase>ul>li>a:visited h5 {
color: #FF0000
}
#showcase>ul>li>a cite {
color: #90E6A6;
display: block;
font-size: .75rem;
font-style: normal;
font-weight: normal;
margin-top: .25rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#showcase>ul>li>div>span {
color: #000;
flex: 0 2 auto;
font-size: .75rem;
font-style: italic;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#showcase>ul>li>div>a {
flex: 0 1 auto;
display: inline-block;
font-size: .8125rem;
margin-left: .5rem;
color: #000;
background-color: rgba(20, 162, 245, 0.3);
border-bottom-color: #FAFAFA;
text-decoration: none;
border-radius: .2rem;
padding: .5rem .5rem;
padding-bottom: .4375rem;
border-bottom-style: solid;
border-bottom-width: .125rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#footer {
font-size: .75rem;
color: #000;
text-align: center
}
#footer div:last-child {
cursor: default;
color: #626266;
transform: scale(.833);
margin-bottom: .75rem
}
#search-suggestions {
position: relative;
z-index: 1;
padding-top: .2rem;
margin-top: -0.2rem;
color: #0A0A0F;
background-color: #FFF;
box-shadow: 0 1px 1px 1px #EEE;
border-bottom-left-radius: .2rem;
border-bottom-right-radius: .2rem;
overflow: hidden;
display: none
}
#search-suggestions li[data-active=true] {
color: #000;
background-color: #FAFAFA
}
.gauge>path {
fill: none;
stroke: #000;
stroke-width: 2;
stroke-linecap: round;
animation: progress 1s ease-out forwards
}
.gauge>path[data-color="green"] {
stroke: #40AE36
}
.gauge>path[data-color="yellow"] {
stroke: #F5980C
}
.gauge>path[data-color="red"] {
stroke: #F5473E
}
.gauge>text {
fill: #000;
font-size: inherit;
text-anchor: middle
}
.card {
color: #000;
background-color: #FAFAFA;
padding: .5rem .5rem;
margin-bottom: .75rem;
border-radius: .2rem;
overflow-wrap: break-word;
word-wrap: break-word;
-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto
}
.card[data-type="warn"] {
font-size: .9375rem;
color: #0A0A0F;
background-color: #FFD862;
text-align: center
}
.card[data-type="next"] {
cursor: pointer;
font-size: .9375rem;
color: #000;
background-color: #FAFAFA;
text-align: center
}
.card[data-type="web"] {
color: #000
}
@media screen and (min-width:760px) {
.card[data-type="web"] {
/* background-color: transparent */
background-color: #FAFAFA
}
}
.card[data-type="web"] a:visited h3 {
color: #FF0000
}
.card[data-type="web"] h3 {
display: block;
font-size: 1rem;
font-style: normal;
font-weight: normal;
line-height: 1.5em;
color: #000;
margin: 0
}
.card[data-type="web"] cite {
display: block;
color: #90E6A6;
font-style: normal;
font-weight: normal;
line-height: 1.5em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.card[data-type="web"] p time {
color: #8E8E92;
word-spacing: -0.15rem
}
.card[data-type="web"] p em {
font-style: normal;
color: #FF557D
}
.card[data-type="web"] dl dt {
display: inline;
color: #8E8E92
}
.card[data-type="web"] ul li a {
display: block;
color: #000;
background-color: #F0F0F0;
padding: .5rem .5rem;
border-radius: .2rem;
text-align: center;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.card[data-type="web"] ul li a:visited {
color: #FF0000
}
.card[data-type="fact"] {
padding: 0;
color: #000;
background-color: #FAFAFA
}
.card[data-type="fact"][data-subtype="entity"]>header span {
color: #8E8E92
}
.card[data-type="fact"][data-subtype="set"]>header span {
color: #8E8E92
}
.card[data-type="fact"][data-subtype="value"]>header span {
color: #FF557D
}
.card[data-type="fact"][data-subtype="assertion"]>header span {
color: #8E8E92
}
.card[data-type="fact"]>header>div h2 {
color: #000;
font-size: 1.125rem;
font-weight: normal;
padding: 0;
margin: .5rem 0 0 0
}
.card[data-type="fact"]>header a {
flex: 0 0 auto;
color: #626266;
font-size: .75rem;
margin-left: .5rem;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
}
.card[data-type="fact"]>div>section {
margin-bottom: .5rem;
border-top: .0625rem solid #FAFAFA
}
.card[data-type="fact"]>div>section>header h4 {
flex: 0 0 auto;
color: #000;
font-size: .75rem;
margin: 0 .5rem 0 0
}
.card[data-type="fact"]>div>section>header span {
flex: 0 1 auto;
font-size: .75rem;
transform-origin: left;
transform: scale(.833);
color: #626266;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.card[data-type="fact"]>div>section[data-scope="property"]>div>div {
display: inline-flex;
flex-flow: row nowrap;
align-items: center;
border-radius: .2rem;
background-color: #F0F0F0;
padding: .5rem .5rem
}
.card[data-type="fact"]>div>section[data-scope="property"]>div>div>a {
text-decoration: none;
padding: .5rem 0;
transition: color .2s;
color: #000
}
.card[data-type="fact"]>div>section[data-scope="property"]>div>div>a:hover {
color: #000
}
.card[data-type="suggest"] ul li a {
display: block;
font-size: .875rem;
color: #000;
background-color: #FAFAFA;
padding: .5rem .5rem;
border-radius: .2rem;
text-align: left;
text-decoration: none;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.card[data-type="suggest"] ul li a:visited {
color: #FF0000
}
.fact>dl[data-color="green"]:after {
background-color: #40AE36
}
.fact>dl[data-color="green"] dd {
border-color: #40AE36;
background-color: rgba(64, 174, 54, 0.3)
}
.fact>dl[data-color="yellow"]:after {
background-color: #F5980C
}
.fact>dl[data-color="yellow"] dd {
border-color: #F5980C;
background-color: rgba(245, 152, 12, 0.3)
}
.fact>dl[data-color="red"]:after {
background-color: #F5473E
}
.fact>dl[data-color="red"] dd {
border-color: #F5473E;
background-color: rgba(245, 71, 62, 0.3)
}
section[data-scope=description] .fact[data-render=cell]:before {
content: "“";
color: #626266
}
section[data-scope=description] .fact[data-render=cell]:after {
content: "”";
color: #626266
}
.fact[data-render=tuple]>dl {
cursor: default;
background-color: #F0F0F0
}
.fact[data-render=tuple]>dl>dd:before {
display: block;
color: #8E8E92;
content: attr(data-field);
font-size: .75rem;
text-transform: uppercase;
transform-origin: top left;
transform: scale(.667);
white-space: nowrap;
line-height: 1;
padding-bottom: .1665rem
}
.fact[data-render=tuple]>dl:after {
content: attr(data-confidence);
border-radius: .2rem;
flex: 0 0 2rem;
line-height: 2rem;
margin: .5rem .5rem;
width: 2rem;
height: 2rem;
font-size: .875rem;
color: #000;
text-align: center;
cursor: help;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
}
.fact>div {
color: #8E8E92;
background-color: #F0F0F0;
font-size: .75rem;
padding: 0 .5rem;
overflow: hidden
}
.fact>div>span {
display: block;
padding-top: .5rem;
border-top: .0625rem solid #F0F0F0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.fact>div ul>li {
padding: 0 .5rem;
border-left: .125rem solid #626266
}
.fact>div ul>li:hover {
border-left: .125rem solid #000
}
.fact>div ol>li>a h5 {
font-size: .875rem;
font-weight: normal;
margin: 0;
color: #000;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.fact>div ol>li>a:visited h5 {
color: #FF0000
}
.fact>div ol>li>a div cite {
flex: 0 1 auto;
padding-right: .25rem;
font-size: .75rem;
font-style: normal;
color: #8E8E92;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
.fact>div ol>li>a div time {
flex: 0 0 auto;
color: #8E8E92;
font-size: .75rem;
font-style: normal;
word-spacing: -0.15rem
}
.fact>div>div {
display: flex;
flex-flow: row nowrap;
align-items: center;
margin-top: .5rem;
border-top: .0625rem solid #F0F0F0;
padding: .5rem 0
}
.fact>div>div>a {
flex: 0 1 auto;
display: inline-block;
font-size: .8125rem;
margin-left: .5rem;
color: #000;
background-color: rgba(20, 162, 245, 0.3);
border-bottom-color: #14A2F5;
text-decoration: none;
border-radius: .2rem;
padding: .5rem .5rem;
padding-bottom: .4375rem;
border-bottom-style: solid;
border-bottom-width: .125rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#bibliography {
margin-left: 4rem;
color: #000
}
#bibliography h4 {
font-size: .8125rem;
font-weight: normal;
color: #8E8E92;
margin: .5rem 0 0 .5rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#bibliography ol li {
display: flex;
margin-top: .75rem;
border-radius: .2rem;
background: linear-gradient(90deg, #FAFAFA, rgba(44, 44, 48, 0));
transition: background .2s
}
#bibliography ol li a h5 {
font-size: .8125rem;
font-weight: normal;
color: #000;
margin: 0;
transition: color .2s;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#bibliography ol li a div cite {
flex: 0 1 auto;
font-style: normal;
color: #8E8E92;
padding-right: .25rem;
transition: color .2s;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
}
#bibliography ol li a div time {
flex: 0 0 auto;
color: #8E8E92;
word-spacing: -0.15rem
}
#bibliography ol li:hover {
background: #FAFAFA;
box-shadow: 0 0 0 2px #FAFAFA
}
#bibliography ol li:hover h5 {
color: #000
}
#bibliography ol li:hover cite {
color: #8E8E92
}
`
},
]);
})();