diff options
author | Andrew Dolgov <[email protected]> | 2011-03-04 19:02:28 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2011-03-04 19:02:59 +0300 |
commit | a089699c8915636ba4f158d77dba9b012bc93208 (patch) | |
tree | b2d7d051f1f55d44a6be07d3ee137e5a7ccfcefb /lib/dojo/OpenAjax.js | |
parent | cfad9259a6feacfa8194b1312770ae6db1ecce50 (diff) |
build custom layer of Dojo to speed up loading of tt-rss (refs #293)
Diffstat (limited to 'lib/dojo/OpenAjax.js')
-rw-r--r-- | lib/dojo/OpenAjax.js | 338 |
1 files changed, 192 insertions, 146 deletions
diff --git a/lib/dojo/OpenAjax.js b/lib/dojo/OpenAjax.js index a33e67d52..c777f3ea8 100644 --- a/lib/dojo/OpenAjax.js +++ b/lib/dojo/OpenAjax.js @@ -5,151 +5,197 @@ */ +/******************************************************************************* + * OpenAjax.js + * + * Reference implementation of the OpenAjax Hub, as specified by OpenAjax Alliance. + * Specification is under development at: + * + * http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification + * + * Copyright 2006-2007 OpenAjax Alliance + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless + * required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + ******************************************************************************/ + +// prevent re-definition of the OpenAjax object if(!window["OpenAjax"]){ -OpenAjax=new function(){ -var t=true; -var f=false; -var g=window; -var _1; -var _2="org.openajax.hub."; -var h={}; -this.hub=h; -h.implementer="http://openajax.org"; -h.implVersion="0.6"; -h.specVersion="0.6"; -h.implExtraData={}; -var _1={}; -h.libraries=_1; -h.registerLibrary=function(_3,_4,_5,_6){ -_1[_3]={prefix:_3,namespaceURI:_4,version:_5,extraData:_6}; -this.publish(_2+"registerLibrary",_1[_3]); -}; -h.unregisterLibrary=function(_7){ -this.publish(_2+"unregisterLibrary",_1[_7]); -delete _1[_7]; -}; -h._subscriptions={c:{},s:[]}; -h._cleanup=[]; -h._subIndex=0; -h._pubDepth=0; -h.subscribe=function(_8,_9,_a,_b,_c){ -if(!_a){ -_a=window; -} -var _d=_8+"."+this._subIndex; -var _e={scope:_a,cb:_9,fcb:_c,data:_b,sid:this._subIndex++,hdl:_d}; -var _f=_8.split("."); -this._subscribe(this._subscriptions,_f,0,_e); -return _d; -}; -h.publish=function(_10,_11){ -var _12=_10.split("."); -this._pubDepth++; -this._publish(this._subscriptions,_12,0,_10,_11); -this._pubDepth--; -if((this._cleanup.length>0)&&(this._pubDepth==0)){ -for(var i=0;i<this._cleanup.length;i++){ -this.unsubscribe(this._cleanup[i].hdl); -} -delete (this._cleanup); -this._cleanup=[]; -} -}; -h.unsubscribe=function(sub){ -var _13=sub.split("."); -var sid=_13.pop(); -this._unsubscribe(this._subscriptions,_13,0,sid); -}; -h._subscribe=function(_14,_15,_16,sub){ -var _17=_15[_16]; -if(_16==_15.length){ -_14.s.push(sub); -}else{ -if(typeof _14.c=="undefined"){ -_14.c={}; -} -if(typeof _14.c[_17]=="undefined"){ -_14.c[_17]={c:{},s:[]}; -this._subscribe(_14.c[_17],_15,_16+1,sub); -}else{ -this._subscribe(_14.c[_17],_15,_16+1,sub); -} -} -}; -h._publish=function(_18,_19,_1a,_1b,msg){ -if(typeof _18!="undefined"){ -var _1c; -if(_1a==_19.length){ -_1c=_18; -}else{ -this._publish(_18.c[_19[_1a]],_19,_1a+1,_1b,msg); -this._publish(_18.c["*"],_19,_1a+1,_1b,msg); -_1c=_18.c["**"]; -} -if(typeof _1c!="undefined"){ -var _1d=_1c.s; -var max=_1d.length; -for(var i=0;i<max;i++){ -if(_1d[i].cb){ -var sc=_1d[i].scope; -var cb=_1d[i].cb; -var fcb=_1d[i].fcb; -var d=_1d[i].data; -if(typeof cb=="string"){ -cb=sc[cb]; -} -if(typeof fcb=="string"){ -fcb=sc[fcb]; -} -if((!fcb)||(fcb.call(sc,_1b,msg,d))){ -cb.call(sc,_1b,msg,d); -} -} -} -} -} -}; -h._unsubscribe=function(_1e,_1f,_20,sid){ -if(typeof _1e!="undefined"){ -if(_20<_1f.length){ -var _21=_1e.c[_1f[_20]]; -this._unsubscribe(_21,_1f,_20+1,sid); -if(_21.s.length==0){ -for(var x in _21.c){ -return; -} -delete _1e.c[_1f[_20]]; -} -return; -}else{ -var _22=_1e.s; -var max=_22.length; -for(var i=0;i<max;i++){ -if(sid==_22[i].sid){ -if(this._pubDepth>0){ -_22[i].cb=null; -this._cleanup.push(_22[i]); -}else{ -_22.splice(i,1); -} -return; -} -} -} -} -}; -h.reinit=function(){ -for(var lib in OpenAjax.hub.libraries){ -delete OpenAjax.hub.libraries[lib]; -} -OpenAjax.hub.registerLibrary("OpenAjax","http://openajax.org/hub","0.6",{}); -delete OpenAjax._subscriptions; -OpenAjax._subscriptions={c:{},s:[]}; -delete OpenAjax._cleanup; -OpenAjax._cleanup=[]; -OpenAjax._subIndex=0; -OpenAjax._pubDepth=0; -}; -}; -OpenAjax.hub.registerLibrary("OpenAjax","http://openajax.org/hub","0.6",{}); + OpenAjax = new function(){ + // summary: the OpenAjax hub + // description: see http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification + + var t = true; + var f = false; + var g = window; + var libs; + var ooh = "org.openajax.hub."; + + var h = {}; + this.hub = h; + h.implementer = "http://openajax.org"; + h.implVersion = "0.6"; + h.specVersion = "0.6"; + h.implExtraData = {}; + var libs = {}; + h.libraries = libs; + + h.registerLibrary = function(prefix, nsURL, version, extra){ + libs[prefix] = { + prefix: prefix, + namespaceURI: nsURL, + version: version, + extraData: extra + }; + this.publish(ooh+"registerLibrary", libs[prefix]); + } + h.unregisterLibrary = function(prefix){ + this.publish(ooh+"unregisterLibrary", libs[prefix]); + delete libs[prefix]; + } + + h._subscriptions = { c:{}, s:[] }; + h._cleanup = []; + h._subIndex = 0; + h._pubDepth = 0; + + h.subscribe = function(name, callback, scope, subscriberData, filter){ + if(!scope){ + scope = window; + } + var handle = name + "." + this._subIndex; + var sub = { scope: scope, cb: callback, fcb: filter, data: subscriberData, sid: this._subIndex++, hdl: handle }; + var path = name.split("."); + this._subscribe(this._subscriptions, path, 0, sub); + return handle; + } + + h.publish = function(name, message){ + var path = name.split("."); + this._pubDepth++; + this._publish(this._subscriptions, path, 0, name, message); + this._pubDepth--; + if((this._cleanup.length > 0) && (this._pubDepth == 0)){ + for(var i = 0; i < this._cleanup.length; i++){ + this.unsubscribe(this._cleanup[i].hdl); + } + delete(this._cleanup); + this._cleanup = []; + } + } + + h.unsubscribe = function(sub){ + var path = sub.split("."); + var sid = path.pop(); + this._unsubscribe(this._subscriptions, path, 0, sid); + } + + h._subscribe = function(tree, path, index, sub){ + var token = path[index]; + if(index == path.length){ + tree.s.push(sub); + }else{ + if(typeof tree.c == "undefined"){ + tree.c = {}; + } + if(typeof tree.c[token] == "undefined"){ + tree.c[token] = { c: {}, s: [] }; + this._subscribe(tree.c[token], path, index + 1, sub); + }else{ + this._subscribe( tree.c[token], path, index + 1, sub); + } + } + } + + h._publish = function(tree, path, index, name, msg){ + if(typeof tree != "undefined"){ + var node; + if(index == path.length) { + node = tree; + }else{ + this._publish(tree.c[path[index]], path, index + 1, name, msg); + this._publish(tree.c["*"], path, index + 1, name, msg); + node = tree.c["**"]; + } + if(typeof node != "undefined"){ + var callbacks = node.s; + var max = callbacks.length; + for(var i = 0; i < max; i++){ + if(callbacks[i].cb){ + var sc = callbacks[i].scope; + var cb = callbacks[i].cb; + var fcb = callbacks[i].fcb; + var d = callbacks[i].data; + if(typeof cb == "string"){ + // get a function object + cb = sc[cb]; + } + if(typeof fcb == "string"){ + // get a function object + fcb = sc[fcb]; + } + if((!fcb) || + (fcb.call(sc, name, msg, d))) { + cb.call(sc, name, msg, d); + } + } + } + } + } + } + + h._unsubscribe = function(tree, path, index, sid) { + if(typeof tree != "undefined") { + if(index < path.length) { + var childNode = tree.c[path[index]]; + this._unsubscribe(childNode, path, index + 1, sid); + if(childNode.s.length == 0) { + for(var x in childNode.c) + return; + delete tree.c[path[index]]; + } + return; + } + else { + var callbacks = tree.s; + var max = callbacks.length; + for(var i = 0; i < max; i++) + if(sid == callbacks[i].sid) { + if(this._pubDepth > 0) { + callbacks[i].cb = null; + this._cleanup.push(callbacks[i]); + } + else + callbacks.splice(i, 1); + return; + } + } + } + } + // The following function is provided for automatic testing purposes. + // It is not expected to be deployed in run-time OpenAjax Hub implementations. + h.reinit = function() + { + for (var lib in OpenAjax.hub.libraries) { + delete OpenAjax.hub.libraries[lib]; + } + OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {}); + + delete OpenAjax._subscriptions; + OpenAjax._subscriptions = {c:{},s:[]}; + delete OpenAjax._cleanup; + OpenAjax._cleanup = []; + OpenAjax._subIndex = 0; + OpenAjax._pubDepth = 0; + } + }; + // Register the OpenAjax Hub itself as a library. + OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {}); + } |