用于改善HostLoc、隔壁网、ROSABC等DZ论坛上传图片需要放大镜的问题
// ==UserScript== // @name Discuz 论坛图床插件 // @license GPL 3.0 // @namespace https://www.zhiqiang.name // @icon https://www.zhiqiang.name/favicon.ico // @author Blood.Cold // @version 2.0.0 // @description 用于改善HostLoc、隔壁网、ROSABC等DZ论坛上传图片需要放大镜的问题 // @grant none // @include http://www.hostloc.com/* // @include https://hostloc.com/* // @include https://www.hostloc.com/* // @include https://bbs.hkrscoc.com/* // @include http://www.gebi1.com/* // @include http://www.rosabc.com/* // @include http://bbs.nas66.com/* // @include http://www.u-share.cn/* // @connect * // @run-at document-start // ==/UserScript== (function(root){ var nw = root.nw = {}; var stack = []; var ArrayProto = Array.prototype, ObjProto = Object.prototype; var hasOwnProperty = ObjProto.hasOwnProperty; var page = { addStyle : function(css){ var el = document.createElement("style"); el.innerHTML = css; document.getElementsByTagName('head')[0].appendChild(el); }, addScript : function(script , pos){ var el = document.createElement("script"); el.textContent = script; if(typeof pos == 'object'){ pos.appendChild(el); } else if(pos == 'head'){ document.getElementsByTagName('head')[0].appendChild(el); }else{ document.getElementsByTagName('body')[0].appendChild(el); } }, addScriptLink : function( data , pos){ var el = document.createElement("script"); for(var i in data){ el.setAttribute(i , data[i]); } if(typeof pos == 'object'){ pos.appendChild(el); } else if(pos == 'head'){ document.getElementsByTagName('head')[0].appendChild(el); }else{ document.getElementsByTagName('body')[0].appendChild(el); } }, addHtml : function(dom){ var el = document.createElement("dom"); el.innerHTML = dom; document.getElementsByTagName('body')[0].appendChild(el); } }; function $(e){ return document.querySelector(e); } function $$(e){ return document.querySelectorAll(e); } function noop(){ } function has(obj, key) { return obj != null && hasOwnProperty.call(obj, key); } function key(obj){ var k = []; for(var i in obj){ if(has(obj , i)) k.push(i); } return k; } function isString(v){ return typeof v === 'string'; } function is(v , b){ return ObjProto.toString.call(v) === "[object "+b+"]"; } function isArray(v){ return is(v , 'Array'); } function isRegExp(v){ return is(v , 'RegExp'); } function isObject(v){ return is(v , 'Object'); } function isFunction(v){ return is(v , 'Function'); } function create(expr , handler){ if(expr && handler){ stack.push({rule:expr , post:handler}); } else{ stack.push(expr); } } function replace(str,obj , format){ return str.replace(RegExp('(?:' + key(obj).join('|').replace(/([\:\'\)\(\{\}])/g,'\\$1') + ')','g') , function(match){ return format ? format(obj[match]) : obj[match]; }); } function toArray(a){ return Array.prototype.slice.call(a); } function formatLink(newurl , m){ return newurl.replace(/\$(\d+)/g , function($0,$1){ return m[$1]; }); } function hit(obj){ var ret = []; for(var i in stack){ var rule = stack[i].rule; if( isRegExp(rule) ){ var m = obj.url.match(rule); // console.log(stack[i].post,m) if( m ){ if(isString(stack[i].post)){ ret.push({ redirect : formatLink(stack[i].post , toArray(m)) }); }else{ ret.push({ pre : stack[i].pre || noop, post : stack[i].post || noop, args : toArray(m) }); } } } else if(isObject(rule)){ var flag = true; var m = null, ret_t = {}; for(var key in rule){ m = obj[key].match(rule[key]); if(!m){ flag = false; break; }else{ if(m.length>1){ ret_t[key] = toArray(m); } } } if(flag){ ret.push({ pre : stack[i].pre || noop, post : stack[i].post || noop, args : ret_t }); } } else if(isFunction(rule)){ if( rule() ){ ret.push({ pre : stack[i].pre || noop, post : stack[i].post || noop, args : {} }); } } else if(isArray(rule)){ var flag = false; for (var j = rule.length - 1; j >= 0; j--) { if(obj.url.match(rule[j])){ flag = true; break; } } if(flag){ ret.push({ pre : stack[i].pre || noop, post : stack[i].post || noop, args : {} }); } } } return ret; } function init(){ var loc = window.location; var obj = { url : loc.href, scheme: loc.protocol.slice(0, -1), host: loc.hostname, port: loc.port, path: loc.pathname, search: loc.search, hash: loc.hash }; var handlers = hit(obj); if(handlers.length){ handlers.forEach(function(handler){ if(handler.redirect){ open(handler.redirect); } else if(handler.pre) handler.pre(handler.args); }); } document.addEventListener('DOMContentLoaded' , function(){ if(handlers.length){ handlers.forEach(function(handler){ if(handler.post) { console.log(handler.post) handler.post(handler.args); } }); } }) } function monitor(tag , expr , callback){ var d = tag.split(':'); var evts = { 'removed':'DOMNodeRemoved', 'inserted':'DOMNodeInserted', 'modified':'DOMSubtreeModified' }; tag = d[0]; var evt = evts[d[1] || 'modified']; var watch = d[2] === undefined ? false : true; if(isFunction(expr)) { callback = expr; expr = null ; } var matchSpan = function(target , t){ var k = document.createElement('div'); k.appendChild(target.cloneNode(false)); var ret = k.querySelector(t); k = null; return ret; } //return new promise(function(resolve, reject){ var handler = function(event){ var target = event.target; if(matchSpan(target , tag)){ if(expr){ var m = target.textContent.match(expr); if(m){ if(callback) callback(m); if(!watch) document.removeEventListener(evt , handler); } }else{ if(callback) callback(target); if(!watch) document.removeEventListener(evt , handler); } } }; document.addEventListener(evt , handler); //}); } function open(url){ open_direct(url); } function open_direct(url){ var link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a'); link.href = url; link.click(); } nw.c = create; nw.m = monitor; nw.o = open; nw.$ = $; nw.$$ = $$; nw.r = replace; nw.init = init; nw.noop = noop; nw.addStyle = page.addStyle; nw.addScript = page.addScript; nw.addScriptLink = page.addScriptLink; }(this)); /** * hostloc.com * * fix image upload */ nw.c([ /hostloc\.com\/thread/, /hostloc\.com\/forum\.php\?mod=post/, /hostloc\.com\/forum\.php\?mod=viewthread/, /bbs\.hkrscoc\.com\/thread/, /bbs\.hkrscoc\.com\/forum\.php\?mod=post/, /bbs\.hkrscoc\.com\/forum\.php\?mod=viewthread/, /gebi1\.com\/thread/, /gebi1\.com\/forum\.php\?mod=post/, /gebi1\.com\/forum\.php\?mod=viewthread/, /www\.rosabc\.com\/thread/, /www\.rosabc\.com\/forum\.php\?mod=post/, /www\.rosabc\.com\/forum\.php\?mod=viewthread/, /bbs\.nas66\.com\/thread/, /bbs\.nas66\.com\/forum\.php\?mod=post/, /bbs\.nas66\.com\/forum\.php\?mod=viewthread/, /www\.u-share\.cn\/thread/, /www\.u-share\.cn\/forum\.php\?mod=post/, /www\.u-share\.cn\/forum\.php\?mod=viewthread/, ] , function(){ nw.addScriptLink({ 'src' : 'https://www.z-9.net/sdk/pup.js', 'id' : 'chevereto-pup-src', 'data-url':'https://www.z-9.net/upload', 'data-auto-insert':'bbcode-embed' }); nw.addStyle('a.chevereto-pup-button--discuz,body .b1r a.chevereto-pup-button--discuz{background: none !important;color: #8e44ad !important;border:none !important;}'); }); //================================== nw.init();