您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Change gelbooru.com main theme to dark theme, similar to konachan style. Also added buttons to hide submenu and red message in header.
当前为
// ==UserScript== // @name Gelbooru KonaStyle // @namespace http://Aestellar.homepage/ // @version 0.13 // @description Change gelbooru.com main theme to dark theme, similar to konachan style. Also added buttons to hide submenu and red message in header. // @author Aestellar // @include *://gelbooru.com/* // @resource gelbooruCss1 https://userstyles.org/styles/111063/gelbooru-konastyle-test.css // @grant GM_getResourceText // @grant GM_addStyle // @run-at document-start // ==/UserScript== (function(){ var win = window; var ls = localStorage; if(!win){ console.log(win + "Failed to load window object"); return; } if(win.self != win.top){ return; } var css = GM_getResourceText ("gelbooruCss1"); addStyle(css); document.addEventListener("DOMContentLoaded",updateUI, false); function loadPrereq(){ var hrefVar = win.location.href; if(/(htt[ps]:\/\/gelbooru\.com[\/]*)$/.test(hrefVar)){ document.body.className = 'main-page'; } var t = document.createElement('d'); //Font awesome support Don't work with @resource t.innerHTML = '<link rel="stylesheet" type="text/css" media="screen" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css" />'; t = t.children[0]; document.head.appendChild(t); } function submit(e){ var textElt = _$('#stags')||_$('#tags'); text = textElt.value; console.log(text); text = applySearchFilters(text); textElt.value = text; } function applySearchFilters(text) { if (ls.getItem('onlyNewSearch')==='true') { if (!!getLastImageId()) { var newId = ' id:>' + getLastImageId() + ' '; if (text.indexOf(newId)===-1) { text+=newId; }; }; }; return text; } function replaceSubmit(){ var form = _$('.sidebar3 form'); form.onsubmit = submit; } function updateUI(){ loadPrereq(); checkLastVisit(); replaceSubmit(); updateNav(); } function updateNav() { var navBar = _$('.flat-list'); var subNav = _$('.submenu'); var navBtn = document.createElement("li"); var advNav = document.createElement("li"); navBar.insertBefore(advNav, navBar.firstChild); navBar.insertBefore(navBtn, navBar.firstChild); var sett = {name:'navCollapse', glyphOff:'fa fa-minus-square-o', glyphOn:'fa fa-plus-square-o', callbackOff:makeToggleFunc(['.submenu', '.noticeError'], show), callbackOn:makeToggleFunc(['.submenu', '.noticeError'], hide)}; var sett2 = {name:'advNavCollapse', glyphOff:'fa fa-search-minus', glyphOn:'fa fa-search-plus', callbackOff:makeToggleFunc(['#usernavbar'], show), callbackOn:makeToggleFunc(['#usernavbar'], hide)}; makeUserNavBar(); var collapseBtn = makeToggleButton(navBtn,sett); makeToggleButton(advNav,sett2); function makeToggleFunc(sel,action){ var activeFoo = function(){ for (var i = sel.length - 1; i >= 0; i--) { action(_$(sel[i])); }; } return activeFoo; } } function makeUserNavBar(){ var userBar = document.createElement('ul'); userBar.className = 'flat-list'; userBar.setAttribute('id', 'usernavbar'); var navBar = _$('.submenu'); var navParent = navBar.parentNode; navParent.insertBefore(userBar,navBar.nextSibling); makeFitImageBtn(userBar); makeAdvSearchPane(userBar); } function makeFitImageBtn(userBar){ var fitBtn = document.createElement("li"); userBar.appendChild(fitBtn); var imageFit = makeToggleButton(fitBtn, {name:'fitImage', glyphOff:'fa fa-compress', glyphOn:'fa fa-expand', callbackOff:fit, callbackOn:fit}); var img = _$('#image'); function fit(){ var img = _$('#image'); if (img === undefined) { return; } img.removeAttribute('width'); img.removeAttribute('height'); if ((localStorage.getItem('fitImage')==='true')) { img.style.maxWidth = '100%'; } else{ img.style.maxWidth = ''; } //console.log(window.Note); } if(!!img){ img.addEventListener('load', fit, false); } } function makeAdvSearchPane(userBar) { var advSearch = document.createElement('div'); advSearch.innerHTML = '<div id = "adv-search">\ <span>Advanced Search: </span>\ <span id = "only-new" style = "padding-right:3px;">Only new image </span>\ </div>'; advSearch = advSearch.firstChild; userBar.appendChild(advSearch); var onlyNew = document.getElementById('only-new'); makeToggleButton(onlyNew, {name:'onlyNewSearch', glyphOff:'fa fa-square-o', glyphOn:'fa fa-check-square-o', callbackOff:null, callbackOn:null}); return advSearch; } function makeToggleButton(elem, settings){ var btn = new ButtonToggle(settings); btn.bindElement(elem); btn.load(); elem.addEventListener('click', btn.handlerClick, false); return btn; } function ButtonToggle(settings) { var self = this; var modGliph = 'fa-lg'; this.name = settings.name; this.active = false; this.bindedElt = null; this.glyphElt = document.createElement('i'); this.bindElement = function (elem) { self.bindedElt = elem; if (self.bindedElt.length > 0) { elem.insertChildBefore(self.glyphElt, elem.FirstChild); } else { elem.appendChild(self.glyphElt); } }; this.glyphOn = settings.glyphOn + ' ' + modGliph; this.glyphOff = settings.glyphOff + ' ' + modGliph; this.callbackOn = settings.callbackOn; this.callbackOff = settings.callbackOff; this.save = function () { localStorage.setItem(self.name, self.active); }; this.load = function () { var t = localStorage.getItem(self.name); if (t === 'true') { self.setActive(true); } else { self.setActive(false); } }; this.handlerClick = function (e) { if (self.active) { self.setActive(false); } else { self.setActive(true); } }; this.setActive = function (val) { val = !!val; self.active = val; self.save(val); if (val) { if (!!self.bindedElt) { self.bindedElt.classList.add('active'); self.glyphElt.className = self.glyphOn; } if (!!self.callbackOn) { self.callbackOn(self); } } else { if (!!self.bindedElt) { self.bindedElt.classList.remove('active'); self.glyphElt.className = self.glyphOff; } if (!!self.callbackOff) { self.callbackOff(self); } } }; } // LastVisit functions function checkLastVisit(){ var timer = 7200000; var lastVisit = parseInt(ls.getItem('lastVisit')); var prevVisit = parseInt(ls.getItem('preLastVisit')); var currentVisit = new Date().valueOf(); if ((!lastVisit)||(!prevVisit)) { updateLastVisit(); } if ((lastVisit + timer) < currentVisit) { updateLastVisit(); } } function updateLastVisit(){ var posts = 'http://gelbooru.com/index.php?page=post&s=list&tags=all'; handleXHRDoc(posts, function(doc){ var lastIdElt = doc.getElementsByClassName('thumb')[0]; var lastID = lastIdElt.getAttribute('id'); lastID = lastID.replace('s', ''); if (!!ls.getItem('lastVisit')) { ls.setItem('preLastVisit',ls.getItem('lastVisit')); } else{ ls.setItem('preLastVisit',new Date().valueOf()); } if (ls.getItem('lastImageId')) { ls.setItem('preImageId',ls.getItem('lastImageId')); } else{ ls.setItem('preImageId',lastID); } localStorage.setItem('lastVisit',new Date().valueOf()); localStorage.setItem('lastImageId', lastID); }); } function getLastVisit(){ var t = localStorage.getItem('preLastVisit'); return parseInt(t); } function getLastImageId(){ var t = localStorage.getItem('preImageId'); return parseInt(t); } })(); function handleXHRDoc(reqString, callback){ var doc = document.implementation.createHTMLDocument("example"); var xmlhttp = new XMLHttpRequest(); xmlhttp.open('GET', reqString, true); xmlhttp.send(null); xmlhttp.onreadystatechange = handle; function handle(){ if (xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { doc.documentElement.innerHTML = xmlhttp.responseText; console.log(doc); callback(doc); } else{ console.log('Error xhr of ' + reqString); } } } } //from http://stackoverflow.com/questions/2246901/how-can-i-use-jquery-in-greasemonkey-scripts-in-google-chrome function load(a, b, c) { var d; d = document.createElement("script"), d.setAttribute("src", a), b !== null && d.addEventListener("load", b), c !== null && d.addEventListener("error", c), document.body.appendChild(d); return d; } function execute(a) { var b, c; typeof a == "function" ? b = "(" + a + ")();" : b = a, c = document.createElement("script"), c.textContent = b, document.body.appendChild(c); return c; } function loadAndExecute(a, b) { return load(a, function () { return execute(b); }); } // function _$(selector){ return document.querySelectorAll(selector)[0]; } function hide(elt){ elt.style.display = 'none'; } function show(elt){ elt.style.display = ''; } function hasClass(elem, name) { if (!!elem) { if (!!elem.classList) { if (elem.classList.contains(name)) { return true; } } } return false; } function addStyle(css){ if (typeof GM_addStyle != "undefined") { GM_addStyle(css); } else if (typeof PRO_addStyle != "undefined") { PRO_addStyle(css); } else if (typeof addStyle != "undefined") { addStyle(css); } else { var node = document.createElement("style"); node.type = "text/css"; node.appendChild(document.createTextNode(css)); var heads = document.getElementsByTagName("head"); if (heads.length > 0) { heads[0].appendChild(node); } else { // no head yet, stick it whereever document.documentElement.appendChild(node); } } }