424 lines
6.9 KiB
JavaScript
424 lines
6.9 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
|
see: http://dojotoolkit.org/license for details
|
|
*/
|
|
|
|
|
|
if(!dojo._hasResource["dojo._base.declare"]){
|
|
dojo._hasResource["dojo._base.declare"]=true;
|
|
dojo.provide("dojo._base.declare");
|
|
dojo.require("dojo._base.lang");
|
|
dojo.require("dojo._base.array");
|
|
(function(){
|
|
var d=dojo,_1=d._mixin,op=Object.prototype,_2=op.toString,_3=new Function,_4=0,_5="constructor";
|
|
function _6(_7){
|
|
throw new Error("declare: "+_7);
|
|
};
|
|
function _8(_9){
|
|
var _a=[],_b=[{cls:0,refs:[]}],_c={},_d=1,l=_9.length,i=0,j,_e,_f,top,_10,rec,_11,_12;
|
|
for(;i<l;++i){
|
|
_f=_9[i];
|
|
if(!_f){
|
|
_6("mixin #"+i+" is unknown. Did you use dojo.require to pull it in?");
|
|
}else{
|
|
if(_2.call(_f)!="[object Function]"){
|
|
_6("mixin #"+i+" is not a callable constructor.");
|
|
}
|
|
}
|
|
_e=_f._meta?_f._meta.bases:[_f];
|
|
top=0;
|
|
for(j=_e.length-1;j>=0;--j){
|
|
_10=_e[j].prototype;
|
|
if(!_10.hasOwnProperty("declaredClass")){
|
|
_10.declaredClass="uniqName_"+(_4++);
|
|
}
|
|
_11=_10.declaredClass;
|
|
if(!_c.hasOwnProperty(_11)){
|
|
_c[_11]={count:0,refs:[],cls:_e[j]};
|
|
++_d;
|
|
}
|
|
rec=_c[_11];
|
|
if(top&&top!==rec){
|
|
rec.refs.push(top);
|
|
++top.count;
|
|
}
|
|
top=rec;
|
|
}
|
|
++top.count;
|
|
_b[0].refs.push(top);
|
|
}
|
|
while(_b.length){
|
|
top=_b.pop();
|
|
_a.push(top.cls);
|
|
--_d;
|
|
while(_12=top.refs,_12.length==1){
|
|
top=_12[0];
|
|
if(!top||--top.count){
|
|
top=0;
|
|
break;
|
|
}
|
|
_a.push(top.cls);
|
|
--_d;
|
|
}
|
|
if(top){
|
|
for(i=0,l=_12.length;i<l;++i){
|
|
top=_12[i];
|
|
if(!--top.count){
|
|
_b.push(top);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(_d){
|
|
_6("can't build consistent linearization");
|
|
}
|
|
_f=_9[0];
|
|
_a[0]=_f?_f._meta&&_f===_a[_a.length-_f._meta.bases.length]?_f._meta.bases.length:1:0;
|
|
return _a;
|
|
};
|
|
function _13(_14,a,f){
|
|
var _15,_16,_17,_18,_19,_1a,_1b,opf,pos,_1c=this._inherited=this._inherited||{};
|
|
if(typeof _14=="string"){
|
|
_15=_14;
|
|
_14=a;
|
|
a=f;
|
|
}
|
|
f=0;
|
|
_18=_14.callee;
|
|
_15=_15||_18.nom;
|
|
if(!_15){
|
|
_6("can't deduce a name to call inherited()");
|
|
}
|
|
_19=this.constructor._meta;
|
|
_17=_19.bases;
|
|
pos=_1c.p;
|
|
if(_15!=_5){
|
|
if(_1c.c!==_18){
|
|
pos=0;
|
|
_1a=_17[0];
|
|
_19=_1a._meta;
|
|
if(_19.hidden[_15]!==_18){
|
|
_16=_19.chains;
|
|
if(_16&&typeof _16[_15]=="string"){
|
|
_6("calling chained method with inherited: "+_15);
|
|
}
|
|
do{
|
|
_19=_1a._meta;
|
|
_1b=_1a.prototype;
|
|
if(_19&&(_1b[_15]===_18&&_1b.hasOwnProperty(_15)||_19.hidden[_15]===_18)){
|
|
break;
|
|
}
|
|
}while(_1a=_17[++pos]);
|
|
pos=_1a?pos:-1;
|
|
}
|
|
}
|
|
_1a=_17[++pos];
|
|
if(_1a){
|
|
_1b=_1a.prototype;
|
|
if(_1a._meta&&_1b.hasOwnProperty(_15)){
|
|
f=_1b[_15];
|
|
}else{
|
|
opf=op[_15];
|
|
do{
|
|
_1b=_1a.prototype;
|
|
f=_1b[_15];
|
|
if(f&&(_1a._meta?_1b.hasOwnProperty(_15):f!==opf)){
|
|
break;
|
|
}
|
|
}while(_1a=_17[++pos]);
|
|
}
|
|
}
|
|
f=_1a&&f||op[_15];
|
|
}else{
|
|
if(_1c.c!==_18){
|
|
pos=0;
|
|
_19=_17[0]._meta;
|
|
if(_19&&_19.ctor!==_18){
|
|
_16=_19.chains;
|
|
if(!_16||_16.constructor!=="manual"){
|
|
_6("calling chained constructor with inherited");
|
|
}
|
|
while(_1a=_17[++pos]){
|
|
_19=_1a._meta;
|
|
if(_19&&_19.ctor===_18){
|
|
break;
|
|
}
|
|
}
|
|
pos=_1a?pos:-1;
|
|
}
|
|
}
|
|
while(_1a=_17[++pos]){
|
|
_19=_1a._meta;
|
|
f=_19?_19.ctor:_1a;
|
|
if(f){
|
|
break;
|
|
}
|
|
}
|
|
f=_1a&&f;
|
|
}
|
|
_1c.c=f;
|
|
_1c.p=pos;
|
|
if(f){
|
|
return a===true?f:f.apply(this,a||_14);
|
|
}
|
|
};
|
|
function _1d(_1e,_1f){
|
|
if(typeof _1e=="string"){
|
|
return this.inherited(_1e,_1f,true);
|
|
}
|
|
return this.inherited(_1e,true);
|
|
};
|
|
function _20(cls){
|
|
var _21=this.constructor._meta.bases;
|
|
for(var i=0,l=_21.length;i<l;++i){
|
|
if(_21[i]===cls){
|
|
return true;
|
|
}
|
|
}
|
|
return this instanceof cls;
|
|
};
|
|
function _22(_23,_24){
|
|
var _25,i=0,l=d._extraNames.length;
|
|
for(_25 in _24){
|
|
if(_25!=_5&&_24.hasOwnProperty(_25)){
|
|
_23[_25]=_24[_25];
|
|
}
|
|
}
|
|
for(;i<l;++i){
|
|
_25=d._extraNames[i];
|
|
if(_25!=_5&&_24.hasOwnProperty(_25)){
|
|
_23[_25]=_24[_25];
|
|
}
|
|
}
|
|
};
|
|
function _26(_27,_28){
|
|
var _29,t,i=0,l=d._extraNames.length;
|
|
for(_29 in _28){
|
|
t=_28[_29];
|
|
if((t!==op[_29]||!(_29 in op))&&_29!=_5){
|
|
if(_2.call(t)=="[object Function]"){
|
|
t.nom=_29;
|
|
}
|
|
_27[_29]=t;
|
|
}
|
|
}
|
|
for(;i<l;++i){
|
|
_29=d._extraNames[i];
|
|
t=_28[_29];
|
|
if((t!==op[_29]||!(_29 in op))&&_29!=_5){
|
|
if(_2.call(t)=="[object Function]"){
|
|
t.nom=_29;
|
|
}
|
|
_27[_29]=t;
|
|
}
|
|
}
|
|
return _27;
|
|
};
|
|
function _2a(_2b){
|
|
_26(this.prototype,_2b);
|
|
return this;
|
|
};
|
|
function _2c(_2d,_2e){
|
|
return function(){
|
|
var a=arguments,_2f=a,a0=a[0],f,i,m,l=_2d.length,_30;
|
|
if(!(this instanceof a.callee)){
|
|
return _31(a);
|
|
}
|
|
if(_2e&&(a0&&a0.preamble||this.preamble)){
|
|
_30=new Array(_2d.length);
|
|
_30[0]=a;
|
|
for(i=0;;){
|
|
a0=a[0];
|
|
if(a0){
|
|
f=a0.preamble;
|
|
if(f){
|
|
a=f.apply(this,a)||a;
|
|
}
|
|
}
|
|
f=_2d[i].prototype;
|
|
f=f.hasOwnProperty("preamble")&&f.preamble;
|
|
if(f){
|
|
a=f.apply(this,a)||a;
|
|
}
|
|
if(++i==l){
|
|
break;
|
|
}
|
|
_30[i]=a;
|
|
}
|
|
}
|
|
for(i=l-1;i>=0;--i){
|
|
f=_2d[i];
|
|
m=f._meta;
|
|
f=m?m.ctor:f;
|
|
if(f){
|
|
f.apply(this,_30?_30[i]:a);
|
|
}
|
|
}
|
|
f=this.postscript;
|
|
if(f){
|
|
f.apply(this,_2f);
|
|
}
|
|
};
|
|
};
|
|
function _32(_33,_34){
|
|
return function(){
|
|
var a=arguments,t=a,a0=a[0],f;
|
|
if(!(this instanceof a.callee)){
|
|
return _31(a);
|
|
}
|
|
if(_34){
|
|
if(a0){
|
|
f=a0.preamble;
|
|
if(f){
|
|
t=f.apply(this,t)||t;
|
|
}
|
|
}
|
|
f=this.preamble;
|
|
if(f){
|
|
f.apply(this,t);
|
|
}
|
|
}
|
|
if(_33){
|
|
_33.apply(this,a);
|
|
}
|
|
f=this.postscript;
|
|
if(f){
|
|
f.apply(this,a);
|
|
}
|
|
};
|
|
};
|
|
function _35(_36){
|
|
return function(){
|
|
var a=arguments,i=0,f,m;
|
|
if(!(this instanceof a.callee)){
|
|
return _31(a);
|
|
}
|
|
for(;f=_36[i];++i){
|
|
m=f._meta;
|
|
f=m?m.ctor:f;
|
|
if(f){
|
|
f.apply(this,a);
|
|
break;
|
|
}
|
|
}
|
|
f=this.postscript;
|
|
if(f){
|
|
f.apply(this,a);
|
|
}
|
|
};
|
|
};
|
|
function _37(_38,_39,_3a){
|
|
return function(){
|
|
var b,m,f,i=0,_3b=1;
|
|
if(_3a){
|
|
i=_39.length-1;
|
|
_3b=-1;
|
|
}
|
|
for(;b=_39[i];i+=_3b){
|
|
m=b._meta;
|
|
f=(m?m.hidden:b.prototype)[_38];
|
|
if(f){
|
|
f.apply(this,arguments);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
function _3c(_3d){
|
|
_3.prototype=_3d.prototype;
|
|
var t=new _3;
|
|
_3.prototype=null;
|
|
return t;
|
|
};
|
|
function _31(_3e){
|
|
var _3f=_3e.callee,t=_3c(_3f);
|
|
_3f.apply(t,_3e);
|
|
return t;
|
|
};
|
|
d.declare=function(_40,_41,_42){
|
|
if(typeof _40!="string"){
|
|
_42=_41;
|
|
_41=_40;
|
|
_40="";
|
|
}
|
|
_42=_42||{};
|
|
var _43,i,t,_44,_45,_46,_47,_48=1,_49=_41;
|
|
if(_2.call(_41)=="[object Array]"){
|
|
_46=_8(_41);
|
|
t=_46[0];
|
|
_48=_46.length-t;
|
|
_41=_46[_48];
|
|
}else{
|
|
_46=[0];
|
|
if(_41){
|
|
if(_2.call(_41)=="[object Function]"){
|
|
t=_41._meta;
|
|
_46=_46.concat(t?t.bases:_41);
|
|
}else{
|
|
_6("base class is not a callable constructor.");
|
|
}
|
|
}else{
|
|
if(_41!==null){
|
|
_6("unknown base class. Did you use dojo.require to pull it in?");
|
|
}
|
|
}
|
|
}
|
|
if(_41){
|
|
for(i=_48-1;;--i){
|
|
_43=_3c(_41);
|
|
if(!i){
|
|
break;
|
|
}
|
|
t=_46[i];
|
|
(t._meta?_22:_1)(_43,t.prototype);
|
|
_44=new Function;
|
|
_44.superclass=_41;
|
|
_44.prototype=_43;
|
|
_41=_43.constructor=_44;
|
|
}
|
|
}else{
|
|
_43={};
|
|
}
|
|
_26(_43,_42);
|
|
t=_42.constructor;
|
|
if(t!==op.constructor){
|
|
t.nom=_5;
|
|
_43.constructor=t;
|
|
}
|
|
for(i=_48-1;i;--i){
|
|
t=_46[i]._meta;
|
|
if(t&&t.chains){
|
|
_47=_1(_47||{},t.chains);
|
|
}
|
|
}
|
|
if(_43["-chains-"]){
|
|
_47=_1(_47||{},_43["-chains-"]);
|
|
}
|
|
t=!_47||!_47.hasOwnProperty(_5);
|
|
_46[0]=_44=(_47&&_47.constructor==="manual")?_35(_46):(_46.length==1?_32(_42.constructor,t):_2c(_46,t));
|
|
_44._meta={bases:_46,hidden:_42,chains:_47,parents:_49,ctor:_42.constructor};
|
|
_44.superclass=_41&&_41.prototype;
|
|
_44.extend=_2a;
|
|
_44.prototype=_43;
|
|
_43.constructor=_44;
|
|
_43.getInherited=_1d;
|
|
_43.inherited=_13;
|
|
_43.isInstanceOf=_20;
|
|
if(_40){
|
|
_43.declaredClass=_40;
|
|
d.setObject(_40,_44);
|
|
}
|
|
if(_47){
|
|
for(_45 in _47){
|
|
if(_43[_45]&&typeof _47[_45]=="string"&&_45!=_5){
|
|
t=_43[_45]=_37(_45,_46,_47[_45]==="after");
|
|
t.nom=_45;
|
|
}
|
|
}
|
|
}
|
|
return _44;
|
|
};
|
|
d.safeMixin=_26;
|
|
})();
|
|
}
|