blob: 2da8bd602f587a22cdee3f033e91c686723e6fe0 [file] [log] [blame]
/*
Copyright (c) 2004-2009, 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["dojox.data.OpmlStore"]){
dojo._hasResource["dojox.data.OpmlStore"]=true;
dojo.provide("dojox.data.OpmlStore");
dojo.require("dojo.data.util.filter");
dojo.require("dojo.data.util.simpleFetch");
dojo.declare("dojox.data.OpmlStore",null,{constructor:function(_1){
this._xmlData=null;
this._arrayOfTopLevelItems=[];
this._arrayOfAllItems=[];
this._metadataNodes=null;
this._loadFinished=false;
this.url=_1.url;
this._opmlData=_1.data;
if(_1.label){
this.label=_1.label;
}
this._loadInProgress=false;
this._queuedFetches=[];
this._identityMap={};
this._identCount=0;
this._idProp="_I";
},label:"text",url:"",_assertIsItem:function(_2){
if(!this.isItem(_2)){
throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
}
},_assertIsAttribute:function(_3){
if(!dojo.isString(_3)){
throw new Error("dojox.data.OpmlStore: a function was passed an attribute argument that was not an attribute object nor an attribute name string");
}
},_removeChildNodesThatAreNotElementNodes:function(_4,_5){
var _6=_4.childNodes;
if(_6.length===0){
return;
}
var _7=[];
var i,_9;
for(i=0;i<_6.length;++i){
_9=_6[i];
if(_9.nodeType!=1){
_7.push(_9);
}
}
for(i=0;i<_7.length;++i){
_9=_7[i];
_4.removeChild(_9);
}
if(_5){
for(i=0;i<_6.length;++i){
_9=_6[i];
this._removeChildNodesThatAreNotElementNodes(_9,_5);
}
}
},_processRawXmlTree:function(_a){
this._loadFinished=true;
this._xmlData=_a;
var _b=_a.getElementsByTagName("head");
var _c=_b[0];
if(_c){
this._removeChildNodesThatAreNotElementNodes(_c);
this._metadataNodes=_c.childNodes;
}
var _d=_a.getElementsByTagName("body");
var _e=_d[0];
if(_e){
this._removeChildNodesThatAreNotElementNodes(_e,true);
var _f=_d[0].childNodes;
for(var i=0;i<_f.length;++i){
var _11=_f[i];
if(_11.tagName=="outline"){
this._identityMap[this._identCount]=_11;
this._identCount++;
this._arrayOfTopLevelItems.push(_11);
this._arrayOfAllItems.push(_11);
this._checkChildNodes(_11);
}
}
}
},_checkChildNodes:function(_12){
if(_12.firstChild){
for(var i=0;i<_12.childNodes.length;i++){
var _14=_12.childNodes[i];
if(_14.tagName=="outline"){
this._identityMap[this._identCount]=_14;
this._identCount++;
this._arrayOfAllItems.push(_14);
this._checkChildNodes(_14);
}
}
}
},_getItemsArray:function(_15){
if(_15&&_15.deep){
return this._arrayOfAllItems;
}
return this._arrayOfTopLevelItems;
},getValue:function(_16,_17,_18){
this._assertIsItem(_16);
this._assertIsAttribute(_17);
if(_17=="children"){
return (_16.firstChild||_18);
}else{
var _19=_16.getAttribute(_17);
return (_19!==undefined)?_19:_18;
}
},getValues:function(_1a,_1b){
this._assertIsItem(_1a);
this._assertIsAttribute(_1b);
var _1c=[];
if(_1b=="children"){
for(var i=0;i<_1a.childNodes.length;++i){
_1c.push(_1a.childNodes[i]);
}
}else{
if(_1a.getAttribute(_1b)!==null){
_1c.push(_1a.getAttribute(_1b));
}
}
return _1c;
},getAttributes:function(_1e){
this._assertIsItem(_1e);
var _1f=[];
var _20=_1e;
var _21=_20.attributes;
for(var i=0;i<_21.length;++i){
var _23=_21.item(i);
_1f.push(_23.nodeName);
}
if(_20.childNodes.length>0){
_1f.push("children");
}
return _1f;
},hasAttribute:function(_24,_25){
return (this.getValues(_24,_25).length>0);
},containsValue:function(_26,_27,_28){
var _29=undefined;
if(typeof _28==="string"){
_29=dojo.data.util.filter.patternToRegExp(_28,false);
}
return this._containsValue(_26,_27,_28,_29);
},_containsValue:function(_2a,_2b,_2c,_2d){
var _2e=this.getValues(_2a,_2b);
for(var i=0;i<_2e.length;++i){
var _30=_2e[i];
if(typeof _30==="string"&&_2d){
return (_30.match(_2d)!==null);
}else{
if(_2c===_30){
return true;
}
}
}
return false;
},isItem:function(_31){
return (_31&&_31.nodeType==1&&_31.tagName=="outline"&&_31.ownerDocument===this._xmlData);
},isItemLoaded:function(_32){
return this.isItem(_32);
},loadItem:function(_33){
},getLabel:function(_34){
if(this.isItem(_34)){
return this.getValue(_34,this.label);
}
return undefined;
},getLabelAttributes:function(_35){
return [this.label];
},_fetchItems:function(_36,_37,_38){
var _39=this;
var _3a=function(_3b,_3c){
var _3d=null;
if(_3b.query){
_3d=[];
var _3e=_3b.queryOptions?_3b.queryOptions.ignoreCase:false;
var _3f={};
for(var key in _3b.query){
var _41=_3b.query[key];
if(typeof _41==="string"){
_3f[key]=dojo.data.util.filter.patternToRegExp(_41,_3e);
}
}
for(var i=0;i<_3c.length;++i){
var _43=true;
var _44=_3c[i];
for(var key in _3b.query){
var _41=_3b.query[key];
if(!_39._containsValue(_44,key,_41,_3f[key])){
_43=false;
}
}
if(_43){
_3d.push(_44);
}
}
}else{
if(_3c.length>0){
_3d=_3c.slice(0,_3c.length);
}
}
_37(_3d,_3b);
};
if(this._loadFinished){
_3a(_36,this._getItemsArray(_36.queryOptions));
}else{
if(this._loadInProgress){
this._queuedFetches.push({args:_36,filter:_3a});
}else{
if(this.url!==""){
this._loadInProgress=true;
var _45={url:_39.url,handleAs:"xml"};
var _46=dojo.xhrGet(_45);
_46.addCallback(function(_47){
_39._processRawXmlTree(_47);
_3a(_36,_39._getItemsArray(_36.queryOptions));
_39._handleQueuedFetches();
});
_46.addErrback(function(_48){
throw _48;
});
}else{
if(this._opmlData){
this._processRawXmlTree(this._opmlData);
this._opmlData=null;
_3a(_36,this._getItemsArray(_36.queryOptions));
}else{
throw new Error("dojox.data.OpmlStore: No OPML source data was provided as either URL or XML data input.");
}
}
}
}
},getFeatures:function(){
var _49={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
return _49;
},getIdentity:function(_4a){
if(this.isItem(_4a)){
for(var i in this._identityMap){
if(this._identityMap[i]===_4a){
return i;
}
}
}
return null;
},fetchItemByIdentity:function(_4c){
if(!this._loadFinished){
var _4d=this;
if(this.url!==""){
if(this._loadInProgress){
this._queuedFetches.push({args:_4c});
}else{
this._loadInProgress=true;
var _4e={url:_4d.url,handleAs:"xml"};
var _4f=dojo.xhrGet(_4e);
_4f.addCallback(function(_50){
var _51=_4c.scope?_4c.scope:dojo.global;
try{
_4d._processRawXmlTree(_50);
var _52=_4d._identityMap[_4c.identity];
if(!_4d.isItem(_52)){
_52=null;
}
if(_4c.onItem){
_4c.onItem.call(_51,_52);
}
_4d._handleQueuedFetches();
}
catch(error){
if(_4c.onError){
_4c.onError.call(_51,error);
}
}
});
_4f.addErrback(function(_53){
this._loadInProgress=false;
if(_4c.onError){
var _54=_4c.scope?_4c.scope:dojo.global;
_4c.onError.call(_54,_53);
}
});
}
}else{
if(this._opmlData){
this._processRawXmlTree(this._opmlData);
this._opmlData=null;
var _55=this._identityMap[_4c.identity];
if(!_4d.isItem(_55)){
_55=null;
}
if(_4c.onItem){
var _56=_4c.scope?_4c.scope:dojo.global;
_4c.onItem.call(_56,_55);
}
}
}
}else{
var _55=this._identityMap[_4c.identity];
if(!this.isItem(_55)){
_55=null;
}
if(_4c.onItem){
var _56=_4c.scope?_4c.scope:dojo.global;
_4c.onItem.call(_56,_55);
}
}
},getIdentityAttributes:function(_57){
return null;
},_handleQueuedFetches:function(){
if(this._queuedFetches.length>0){
for(var i=0;i<this._queuedFetches.length;i++){
var _59=this._queuedFetches[i];
var _5a=_59.args;
var _5b=_59.filter;
if(_5b){
_5b(_5a,this._getItemsArray(_5a.queryOptions));
}else{
this.fetchItemByIdentity(_5a);
}
}
this._queuedFetches=[];
}
},close:function(_5c){
}});
dojo.extend(dojox.data.OpmlStore,dojo.data.util.simpleFetch);
}