common.js
来自「Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是」· JavaScript 代码 · 共 561 行 · 第 1/2 页
JS
561 行
};
dojo.event.MethodInvocation = function (join_point, obj, args) {
this.jp_ = join_point;
this.object = obj;
this.args = [];
for (var x = 0; x < args.length; x++) {
this.args[x] = args[x];
}
this.around_index = -1;
};
dojo.event.MethodInvocation.prototype.proceed = function () {
this.around_index++;
if (this.around_index >= this.jp_.around.length) {
return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
} else {
var ti = this.jp_.around[this.around_index];
var mobj = ti[0] || dj_global;
var meth = ti[1];
return mobj[meth].call(mobj, this);
}
};
dojo.event.MethodJoinPoint = function (obj, funcName) {
this.object = obj || dj_global;
this.methodname = funcName;
this.methodfunc = this.object[funcName];
this.squelch = false;
};
dojo.event.MethodJoinPoint.getForMethod = function (obj, funcName) {
if (!obj) {
obj = dj_global;
}
var ofn = obj[funcName];
if (!ofn) {
ofn = obj[funcName] = function () {
};
if (!obj[funcName]) {
dojo.raise("Cannot set do-nothing method on that object " + funcName);
}
} else {
if ((typeof ofn != "function") && (!dojo.lang.isFunction(ofn)) && (!dojo.lang.isAlien(ofn))) {
return null;
}
}
var jpname = funcName + "$joinpoint";
var jpfuncname = funcName + "$joinpoint$method";
var joinpoint = obj[jpname];
if (!joinpoint) {
var isNode = false;
if (dojo.event["browser"]) {
if ((obj["attachEvent"]) || (obj["nodeType"]) || (obj["addEventListener"])) {
isNode = true;
dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, funcName]);
}
}
var origArity = ofn.length;
obj[jpfuncname] = ofn;
joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
if (!isNode) {
obj[funcName] = function () {
return joinpoint.run.apply(joinpoint, arguments);
};
} else {
obj[funcName] = function () {
var args = [];
if (!arguments.length) {
var evt = null;
try {
if (obj.ownerDocument) {
evt = obj.ownerDocument.parentWindow.event;
} else {
if (obj.documentElement) {
evt = obj.documentElement.ownerDocument.parentWindow.event;
} else {
if (obj.event) {
evt = obj.event;
} else {
evt = window.event;
}
}
}
}
catch (e) {
evt = window.event;
}
if (evt) {
args.push(dojo.event.browser.fixEvent(evt, this));
}
} else {
for (var x = 0; x < arguments.length; x++) {
if ((x == 0) && (dojo.event.browser.isEvent(arguments[x]))) {
args.push(dojo.event.browser.fixEvent(arguments[x], this));
} else {
args.push(arguments[x]);
}
}
}
return joinpoint.run.apply(joinpoint, args);
};
}
obj[funcName].__preJoinArity = origArity;
}
return joinpoint;
};
dojo.lang.extend(dojo.event.MethodJoinPoint, {squelch:false, unintercept:function () {
this.object[this.methodname] = this.methodfunc;
this.before = [];
this.after = [];
this.around = [];
}, disconnect:dojo.lang.forward("unintercept"), run:function () {
var obj = this.object || dj_global;
var args = arguments;
var aargs = [];
for (var x = 0; x < args.length; x++) {
aargs[x] = args[x];
}
var unrollAdvice = function (marr) {
if (!marr) {
dojo.debug("Null argument to unrollAdvice()");
return;
}
var callObj = marr[0] || dj_global;
var callFunc = marr[1];
if (!callObj[callFunc]) {
dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
}
var aroundObj = marr[2] || dj_global;
var aroundFunc = marr[3];
var msg = marr[6];
var maxCount = marr[7];
if (maxCount > -1) {
if (maxCount == 0) {
return;
}
marr[7]--;
}
var undef;
var to = {args:[], jp_:this, object:obj, proceed:function () {
return callObj[callFunc].apply(callObj, to.args);
}};
to.args = aargs;
var delay = parseInt(marr[4]);
var hasDelay = ((!isNaN(delay)) && (marr[4] !== null) && (typeof marr[4] != "undefined"));
if (marr[5]) {
var rate = parseInt(marr[5]);
var cur = new Date();
var timerSet = false;
if ((marr["last"]) && ((cur - marr.last) <= rate)) {
if (dojo.event._canTimeout) {
if (marr["delayTimer"]) {
clearTimeout(marr.delayTimer);
}
var tod = parseInt(rate * 2);
var mcpy = dojo.lang.shallowCopy(marr);
marr.delayTimer = setTimeout(function () {
mcpy[5] = 0;
unrollAdvice(mcpy);
}, tod);
}
return;
} else {
marr.last = cur;
}
}
if (aroundFunc) {
aroundObj[aroundFunc].call(aroundObj, to);
} else {
if ((hasDelay) && ((dojo.render.html) || (dojo.render.svg))) {
dj_global["setTimeout"](function () {
if (msg) {
callObj[callFunc].call(callObj, to);
} else {
callObj[callFunc].apply(callObj, args);
}
}, delay);
} else {
if (msg) {
callObj[callFunc].call(callObj, to);
} else {
callObj[callFunc].apply(callObj, args);
}
}
}
};
var unRollSquelch = function () {
if (this.squelch) {
try {
return unrollAdvice.apply(this, arguments);
}
catch (e) {
dojo.debug(e);
}
} else {
return unrollAdvice.apply(this, arguments);
}
};
if ((this["before"]) && (this.before.length > 0)) {
dojo.lang.forEach(this.before.concat(new Array()), unRollSquelch);
}
var result;
try {
if ((this["around"]) && (this.around.length > 0)) {
var mi = new dojo.event.MethodInvocation(this, obj, args);
result = mi.proceed();
} else {
if (this.methodfunc) {
result = this.object[this.methodname].apply(this.object, args);
}
}
}
catch (e) {
if (!this.squelch) {
dojo.debug(e, "when calling", this.methodname, "on", this.object, "with arguments", args);
dojo.raise(e);
}
}
if ((this["after"]) && (this.after.length > 0)) {
dojo.lang.forEach(this.after.concat(new Array()), unRollSquelch);
}
return (this.methodfunc) ? result : null;
}, getArr:function (kind) {
var type = "after";
if ((typeof kind == "string") && (kind.indexOf("before") != -1)) {
type = "before";
} else {
if (kind == "around") {
type = "around";
}
}
if (!this[type]) {
this[type] = [];
}
return this[type];
}, kwAddAdvice:function (args) {
this.addAdvice(args["adviceObj"], args["adviceFunc"], args["aroundObj"], args["aroundFunc"], args["adviceType"], args["precedence"], args["once"], args["delay"], args["rate"], args["adviceMsg"], args["maxCalls"]);
}, addAdvice:function (thisAdviceObj, thisAdvice, thisAroundObj, thisAround, adviceType, precedence, once, delay, rate, asMessage, maxCalls) {
var arr = this.getArr(adviceType);
if (!arr) {
dojo.raise("bad this: " + this);
}
var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage, maxCalls];
if (once) {
if (this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr) >= 0) {
return;
}
}
if (precedence == "first") {
arr.unshift(ao);
} else {
arr.push(ao);
}
}, hasAdvice:function (thisAdviceObj, thisAdvice, adviceType, arr) {
if (!arr) {
arr = this.getArr(adviceType);
}
var ind = -1;
for (var x = 0; x < arr.length; x++) {
var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
if ((arr[x][0] == thisAdviceObj) && (a1o == aao)) {
ind = x;
}
}
return ind;
}, removeAdvice:function (thisAdviceObj, thisAdvice, adviceType, once) {
var arr = this.getArr(adviceType);
var ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
if (ind == -1) {
return false;
}
while (ind != -1) {
arr.splice(ind, 1);
if (once) {
break;
}
ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
}
return true;
}});
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?