- // ==UserScript==
- // @name IMG.TG Discuz 论坛图片上传插件
- // @namespace https://img.tg
- // @author Cee
- // @version 1.13
- // @license GPLv3
- // @description Discuz 论坛快捷上传图片到 img.tg 并自动返回 BBCode 到文本框中。
- // @grant none
- // @include *://www.hostloc.com/*
- // @include *://hostloc.com/*
- // @include *://keylol.com/*
- // @include *://www.right.com.cn/*
- // @include *://koolshare.cn/*
- // @include *://www.52pojie.cn/*
- // @include *://bbs.kafan.cn/*
- // @include *://loc.pages.dev/*
- // @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));
-
-
- /**
- * Discuz image upload to imgtg.com
- *
- * Author: https://cee.im
- *
- */
-
- nw.c([
- /loc\.pages\.dev\/thread/,
- /loc\.pages\.dev\/forum\.php\?mod=post/,
- /loc\.pages\.dev\/forum\.php\?mod=viewthread/,
-
- /hostloc\.com\/thread/,
- /hostloc\.com\/forum\.php\?mod=post/,
- /hostloc\.com\/forum\.php\?mod=viewthread/,
-
- /keylol\.com\/thread/,
- /keylol\.com\/forum\.php\?mod=post/,
- /keylol\.com\/forum\.php\?mod=viewthread/,
-
- /right\.com\.cn\/thread/,
- /right\.com\.cn\/forum\.php\?mod=post/,
- /right\.com\.cn\/forum\.php\?mod=viewthread/,
-
- /koolshare\.cn\/thread/,
- /koolshare\.cn\/forum\.php\?mod=post/,
- /koolshare\.cn\/forum\.php\?mod=viewthread/,
-
- /52pojie\.cn\/thread/,
- /52pojie\.cn\/forum\.php\?mod=post/,
- /52pojie\.cn\/forum\.php\?mod=viewthread/,
-
- /bbs\.kafan\.cn\/thread/,
- /bbs\.kafan\.cn\/forum\.php\?mod=post/,
- /bbs\.kafan\.cn\/forum\.php\?mod=viewthread/,
- ] , function(){
-
- nw.addScriptLink({
- 'src' : 'https://img.tg/sdk/pup.discuz.js',
- });
- });
-
- //==================================
- nw.init();