// ==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();