📄 ajs.js
字号:
posObj.x += next.offsetLeft; posObj.y += next.offsetTop; next = next.offsetParent; } } // safari bug if (AJS.isSafari() && elm.style.position == 'absolute' ) { posObj.x -= document.body.offsetLeft; posObj.y -= document.body.offsetTop; } return posObj; }, getWindowSize: function(doc) { doc = doc || document; var win_w, win_h; if (self.innerHeight) { win_w = self.innerWidth; win_h = self.innerHeight; } else if (doc.documentElement && doc.documentElement.clientHeight) { win_w = doc.documentElement.clientWidth; win_h = doc.documentElement.clientHeight; } else if (doc.body) { win_w = doc.body.clientWidth; win_h = doc.body.clientHeight; } return {'w': win_w, 'h': win_h}; }, isOverlapping: function(elm1, elm2) { var pos_elm1 = AJS.absolutePosition(elm1); var pos_elm2 = AJS.absolutePosition(elm2); var top1 = pos_elm1.y; var left1 = pos_elm1.x; var right1 = left1 + elm1.offsetWidth; var bottom1 = top1 + elm1.offsetHeight; var top2 = pos_elm2.y; var left2 = pos_elm2.x; var right2 = left2 + elm2.offsetWidth; var bottom2 = top2 + elm2.offsetHeight; var getSign = function(v) { if(v > 0) return "+"; else if(v < 0) return "-"; else return 0; } if ((getSign(top1 - bottom2) != getSign(bottom1 - top2)) && (getSign(left1 - right2) != getSign(right1 - left2))) return true; return false; },////// Events//// getEventElm: function(e) { if(e && !e.type && !e.keyCode) return e var targ; if (!e) var e = window.event; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode; return targ; }, setEventKey: function(e) { e.key = e.keyCode ? e.keyCode : e.charCode; if(window.event) { e.ctrl = window.event.ctrlKey; e.shift = window.event.shiftKey; } else { e.ctrl = e.ctrlKey; e.shift = e.shiftKey; } switch(e.key) { case 63232: e.key = 38; break; case 63233: e.key = 40; break; case 63235: e.key = 39; break; case 63234: e.key = 37; break; } }, //Shortcut: AJS.AEV addEventListener: function(elm, type, fn, /*optional*/listen_once, cancle_bubble) { var ajs_l_key = 'ajsl_'+type+fn; if(!cancle_bubble) cancle_bubble = false; AJS.listeners = AJS.$A(AJS.listeners); //Fix keyCode if(AJS.isIn(type, ['keypress', 'keydown', 'keyup', 'click'])) { var old_fn_1 = fn; fn = function(e) { AJS.setEventKey(e); return old_fn_1.apply(window, arguments); } } //Hack since these does not work in all browsers var is_special_type = AJS.isIn(type, ['submit', 'load', 'scroll', 'resize']); var elms = AJS.$A(elm); AJS.map(elms, function(elm_i) { if(listen_once) { var old_fn_2 = fn; fn = function(e) { AJS.REV(elm_i, type, fn); return old_fn_2.apply(window, arguments); } } if(is_special_type) { var old_fn = elm_i['on' + type]; var wrap_fn = function() { if(old_fn) { fn(arguments); return old_fn(arguments); } else return fn(arguments); }; elm_i[ajs_l_key] = wrap_fn; elm_i[ajs_l_key+'old'] = old_fn; elm['on' + type] = wrap_fn; } else { elm_i[ajs_l_key] = fn; if (elm_i.attachEvent) elm_i.attachEvent("on" + type, fn); else if(elm_i.addEventListener) elm_i.addEventListener(type, fn, cancle_bubble); AJS.listeners.push([elm_i, type, fn]); } }); }, //Shortcut: AJS.REV removeEventListener: function(elm, type, fn, /*optional*/cancle_bubble) { var ajs_l_key = 'ajsl_'+type+fn; if(!cancle_bubble) cancle_bubble = false; fn = elm[ajs_l_key] || fn; if(elm['on' + type] == fn) { elm['on' + type] = elm[ajs_l_key + 'old']; } if(elm.removeEventListener) { elm.removeEventListener(type, fn, cancle_bubble); if(AJS.isOpera()) elm.removeEventListener(type, fn, !cancle_bubble); } else if(elm.detachEvent) elm.detachEvent("on" + type, fn); }, //Shortcut: AJS.$b bind: function(fn, scope, /*optional*/ extra_args) { fn._cscope = scope; return AJS._getRealScope(fn, extra_args); }, bindMethods: function(self) { for (var k in self) { var func = self[k]; if (typeof(func) == 'function') { self[k] = AJS.$b(func, self); } } }, callLater: function(fn, interval) { var fn_no_send = function() { fn(); }; window.setTimeout(fn_no_send, interval); }, preventDefault: function(e) { if(AJS.isIe()) window.event.returnValue = false; else { e.preventDefault(); } }, _listenOnce: function(elm, type, fn) { var r_fn = function() { AJS.removeEventListener(elm, type, r_fn); fn(arguments); } return r_fn; }, _getRealScope: function(fn, /*optional*/ extra_args) { extra_args = AJS.$A(extra_args); var scope = fn._cscope || window; return function() { var args = AJS.$FA(arguments).concat(extra_args); return fn.apply(scope, args); }; }, _unloadListeners: function() { if(AJS.listeners) AJS.map(AJS.listeners, function(elm, type, fn) { AJS.REV(elm, type, fn) }); AJS.listeners = []; },////// Misc.//// keys: function(obj) { var rval = []; for (var prop in obj) { rval.push(prop); } return rval; }, values: function(obj) { var rval = []; for (var prop in obj) { rval.push(obj[prop]); } return rval; }, urlencode: function(str) { return encodeURIComponent(str.toString()); }, isDefined: function(o) { return (o != "undefined" && o != null) }, isArray: function(obj) { return obj instanceof Array; }, isString: function(obj) { return (typeof obj == 'string'); }, isNumber: function(obj) { return (typeof obj == 'number'); }, isObject: function(obj) { return (typeof obj == 'object'); }, isFunction: function(obj) { return (typeof obj == 'function'); }, isDict: function(o) { var str_repr = String(o); return str_repr.indexOf(" Object") != -1; }, exportToGlobalScope: function() { for(e in AJS) window[e] = AJS[e]; }, log: function(o) { if(window.console) console.log(o); else { var div = AJS.$('ajs_logger'); if(!div) { div = AJS.DIV({id: 'ajs_logger', 'style': 'color: green; position: absolute; left: 0'}); div.style.top = AJS.getScrollTop() + 'px'; AJS.ACN(AJS.getBody(), div); } AJS.setHTML(div, ''+o); } }}AJS.Class = function(members) { var fn = function() { if(arguments[0] != 'no_init') { return this.init.apply(this, arguments); } } fn.prototype = members; AJS.update(fn, AJS.Class.prototype); return fn;}AJS.Class.prototype = { extend: function(members) { var parent = new this('no_init'); for(k in members) { var prev = parent[k]; var cur = members[k]; if (prev && prev != cur && typeof cur == 'function') { cur = this._parentize(cur, prev); } parent[k] = cur; } return new AJS.Class(parent); }, implement: function(members) { AJS.update(this.prototype, members); }, _parentize: function(cur, prev) { return function(){ this.parent = prev; return cur.apply(this, arguments); } }};//End class//ShortcutsAJS.$ = AJS.getElement;AJS.$$ = AJS.getElements;AJS.$f = AJS.getFormElement;AJS.$b = AJS.bind;AJS.$p = AJS.partial;AJS.$FA = AJS.forceArray;AJS.$A = AJS.createArray;AJS.DI = AJS.documentInsert;AJS.ACN = AJS.appendChildNodes;AJS.RCN = AJS.replaceChildNodes;AJS.AEV = AJS.addEventListener;AJS.REV = AJS.removeEventListener;AJS.$bytc = AJS.getElementsByTagAndClassName;AJS.$AP = AJS.absolutePosition;AJSDeferred = function(req) { this.callbacks = []; this.errbacks = []; this.req = req;}AJSDeferred.prototype = { excCallbackSeq: function(req, list) { var data = req.responseText; while (list.length > 0) { var fn = list.pop(); var new_data = fn(data, req); if(new_data) data = new_data; } }, callback: function () { this.excCallbackSeq(this.req, this.callbacks); }, errback: function() { if(this.errbacks.length == 0) alert("Error encountered:\n" + this.req.responseText); this.excCallbackSeq(this.req, this.errbacks); }, addErrback: function(fn) { this.errbacks.unshift(fn); }, addCallback: function(fn) { this.callbacks.unshift(fn); }, abort: function() { this.req.abort(); }, addCallbacks: function(fn1, fn2) { this.addCallback(fn1); this.addErrback(fn2); }, sendReq: function(data) { if(AJS.isObject(data)) { this.req.send(AJS.queryArguments(data)); } else if(AJS.isDefined(data)) this.req.send(data); else { this.req.send(""); } }};//End deferred//Prevent memory-leaksAJS.addEventListener(window, 'unload', AJS._unloadListeners);AJS._createDomShortcuts()}script_loaded = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -