您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Resultate von Metager in drei visuell intuitiv isolierbare Elemente teilen und mit zusätzlichen Personalisierungs-Möglichkeiten versehen.
// ==UserScript== // @name MetaGer_3.1 // @namespace http://metaget.de/ // @version 1.0 // @description Resultate von Metager in drei visuell intuitiv isolierbare Elemente teilen und mit zusätzlichen Personalisierungs-Möglichkeiten versehen. // @author Mikki // @match https://metager.de/* // @grant GM_getValue // @grant GM_setValue // @grant GM_log // @run-at document-start // ==/UserScript== (function() { 'use strict'; ////////////////////////////////////////////////////////////////////// // CSS // ////////////////////////////////////////////////////////////////////// const cssInject = ` a.title { color: #1900e6 !important; font-family: "Century Gothic", CenturyGothic, AppleGothic, sans-serif; letter-spacing: 0.3px; font-size: 18px !important; font-weight: normal !important; } .link-link > a { color: #a90707 !important; font-size: 14px; letter-spacing: 0.3px; } .description{ color: gray !important; font-size: 12px !important; } .proxy, .number { opacity: 0.4; } .link:hover .proxy{ opacity: 0.8; } .result { margin-bottom: 20px; } .verstecken, .hervorheben { font-size: 14px; display: inline-block; cursor: pointer; margin-left: 5px; opacity: 0.4; } .verstecken:hover, .hervorheben:hover { color: blue; } .link:hover .verstecken, .link:hover .hervorheben{ opacity: 0.8; } .versteckt { opacity: 0.1; } .zeigen { width: 100%; text-align: right; opacity: 0.1; } .zeigen:hover { opacity: 0.5; } .besonders a.title { background-color: yellow; } `; ////////////////////////////////////////////////////////////////////// // HTML // ////////////////////////////////////////////////////////////////////// const hideButton = document.createElement('div'); hideButton.innerHTML = ` <div class="verstecken">verstecken</div> `; const unhideButton = document.createElement('div'); unhideButton.innerHTML = ` <div class="zeigen">domain zeigen</div> `; const highlightButton = document.createElement('div'); highlightButton.innerHTML = ` <div class="hervorheben">markieren</div> `; ////////////////////////////////////////////////////////////////////// // CODE // ////////////////////////////////////////////////////////////////////// const ban = function(d){ banned.add(d); GM_setValue('banned', Array.from(banned) ); GM_log('banning domain: '+d); rows(d).forEach( v=>hide(v) ); } const unban = function(d){ banned.delete(d); GM_setValue('banned', Array.from(banned) ); GM_log('unbanning domain: '+d); rows(d).forEach( v=>unhide(v) ); [...document.querySelectorAll('[data-domain="'+d+'"]')].forEach(v=>v.remove()); } const promote = function(d){ specials.add(d); GM_setValue('specials', Array.from(specials) ); GM_log('promoting domain: '+d); rows(d).forEach( v=>highlight(v) ); } const demote = function(d){ specials.delete(d); GM_setValue('specials', Array.from(specials) ); GM_log('demoting domain: '+d); rows(d).forEach( v=>unhighlight(v) ); } const toggle_promote = function(d){ if( specials.has( d ) ) { demote(d); } else { promote(d); } } const rows = function(d){ return [...document.querySelectorAll('.result')].filter( (v)=>domain_of(v)==d ); } const domain_of = function(x){ return x.querySelector('.link a').href .slice(8) .split('/')[0] .split('.') .slice(-2) .join('.'); } const hide = function(x){ x.classList.add('versteckt'); let h = domain_of(x); let b = unhideButton.firstElementChild.cloneNode(true); b = document.querySelector('.resultContainer').insertBefore( b, x ); b.dataset.domain = h; b.onclick = (e)=>{ unban( h ); } } const unhide = function(x){ x.classList.remove('versteckt'); }; const highlight = function(x){ x.classList.add('besonders'); } const unhighlight = function(x){ x.classList.remove('besonders'); } const banned = new Set( GM_getValue('banned', new Array) ); const specials = new Set( GM_getValue('specials', new Array) ); /** * SETUP CODE.. * > insert css into head * > filter loaded rows */ document.head.appendChild( document.createElement('style') ).innerHTML = cssInject; document.addEventListener( 'DOMContentLoaded', function(){ for( let x of [...document.querySelectorAll('.result')] ) { let h = domain_of(x); let b = x.querySelector('.link') .appendChild( hideButton.firstElementChild.cloneNode(true) ); let c = x.querySelector('.link') .appendChild( highlightButton.firstElementChild.cloneNode(true) ); b.onclick = (e)=>ban( h ); c.onclick = (e)=>toggle_promote( h ); if( banned.has( h ) ) { hide(x); } if( specials.has( h ) ) { highlight(x); } } for( let x of [...document.querySelectorAll('.ad')] ) { x.remove(); } }); })();