Greasy Fork

Greasy Fork is available in English.

Discuz 论坛图床插件

用于改善HostLoc、隔壁网、ROSABC等DZ论坛上传图片需要放大镜的问题

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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