12345678 |
- /*
- 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.OpenSearchStore"]){dojo._hasResource["dojox.data.OpenSearchStore"]=true;dojo.provide("dojox.data.OpenSearchStore");dojo.require("dojo.data.util.simpleFetch");dojo.require("dojox.xml.DomParser");dojo.require("dojox.xml.parser");dojo.experimental("dojox.data.OpenSearchStore");dojo.declare("dojox.data.OpenSearchStore",null,{constructor:function(_1){if(_1){this.label=_1.label;this.url=_1.url;this.itemPath=_1.itemPath;if("urlPreventCache" in _1){this.urlPreventCache=_1.urlPreventCache?true:false;}}var _2=dojo.xhrGet({url:this.url,handleAs:"xml",sync:true,preventCache:this.urlPreventCache});_2.addCallback(this,"_processOsdd");_2.addErrback(function(){throw new Error("Unable to load OpenSearch Description document from ".args.url);});},url:"",itemPath:"",_storeRef:"_S",urlElement:null,iframeElement:null,urlPreventCache:true,ATOM_CONTENT_TYPE:3,ATOM_CONTENT_TYPE_STRING:"atom",RSS_CONTENT_TYPE:2,RSS_CONTENT_TYPE_STRING:"rss",XML_CONTENT_TYPE:1,XML_CONTENT_TYPE_STRING:"xml",_assertIsItem:function(_3){if(!this.isItem(_3)){throw new Error("dojox.data.OpenSearchStore: a function was passed an item argument that was not an item");}},_assertIsAttribute:function(_4){if(typeof _4!=="string"){throw new Error("dojox.data.OpenSearchStore: a function was passed an attribute argument that was not an attribute name string");}},getFeatures:function(){return {"dojo.data.api.Read":true};},getValue:function(_5,_6,_7){var _8=this.getValues(_5,_6);if(_8){return _8[0];}return _7;},getAttributes:function(_9){return ["content"];},hasAttribute:function(_a,_b){if(this.getValue(_a,_b)){return true;}return false;},isItemLoaded:function(_c){return this.isItem(_c);},loadItem:function(_d){},getLabel:function(_e){return undefined;},getLabelAttributes:function(_f){return null;},containsValue:function(_10,_11,_12){var _13=this.getValues(_10,_11);for(var i=0;i<_13.length;i++){if(_13[i]===_12){return true;}}return false;},getValues:function(_14,_15){this._assertIsItem(_14);this._assertIsAttribute(_15);var _16=this.processItem(_14,_15);if(_16){return [_16];}return undefined;},isItem:function(_17){if(_17&&_17[this._storeRef]===this){return true;}return false;},close:function(_18){},process:function(_19){return this["_processOSD"+this.contentType](_19);},processItem:function(_1a,_1b){return this["_processItem"+this.contentType](_1a.node,_1b);},_createSearchUrl:function(_1c){var _1d=this.urlElement.attributes.getNamedItem("template").nodeValue;var _1e=this.urlElement.attributes;var _1f=_1d.indexOf("{searchTerms}");_1d=_1d.substring(0,_1f)+_1c.query.searchTerms+_1d.substring(_1f+13);dojo.forEach([{"name":"count","test":_1c.count,"def":"10"},{"name":"startIndex","test":_1c.start,"def":this.urlElement.attributes.getNamedItem("indexOffset")?this.urlElement.attributes.getNamedItem("indexOffset").nodeValue:0},{"name":"startPage","test":_1c.startPage,"def":this.urlElement.attributes.getNamedItem("pageOffset")?this.urlElement.attributes.getNamedItem("pageOffset").nodeValue:0},{"name":"language","test":_1c.language,"def":"*"},{"name":"inputEncoding","test":_1c.inputEncoding,"def":"UTF-8"},{"name":"outputEncoding","test":_1c.outputEncoding,"def":"UTF-8"}],function(_20){_1d=_1d.replace("{"+_20.name+"}",_20.test||_20.def);_1d=_1d.replace("{"+_20.name+"?}",_20.test||_20.def);});return _1d;},_fetchItems:function(_21,_22,_23){if(!_21.query){_21.query={};}var _24=this;var url=this._createSearchUrl(_21);var _25={url:url,preventCache:this.urlPreventCache};var xhr=dojo.xhrGet(_25);xhr.addErrback(function(_26){_23(_26,_21);});xhr.addCallback(function(_27){var _28=[];if(_27){_28=_24.process(_27);for(var i=0;i<_28.length;i++){_28[i]={node:_28[i]};_28[i][_24._storeRef]=_24;}}_22(_28,_21);});},_processOSDxml:function(_29){var div=dojo.doc.createElement("div");div.innerHTML=_29;return dojo.query(this.itemPath,div);},_processItemxml:function(_2a,_2b){if(_2b==="content"){return _2a.innerHTML;}return undefined;},_processOSDatom:function(_2c){return this._processOSDfeed(_2c,"entry");},_processItematom:function(_2d,_2e){return this._processItemfeed(_2d,_2e,"content");},_processOSDrss:function(_2f){return this._processOSDfeed(_2f,"item");},_processItemrss:function(_30,_31){return this._processItemfeed(_30,_31,"description");},_processOSDfeed:function(_32,_33){_32=dojox.xml.parser.parse(_32);var _34=[];var _35=_32.getElementsByTagName(_33);for(var i=0;i<_35.length;i++){_34.push(_35.item(i));}return _34;},_processItemfeed:function(_36,_37,_38){if(_37==="content"){var _39=_36.getElementsByTagName(_38).item(0);return this._getNodeXml(_39,true);}return undefined;},_getNodeXml:function(_3a,_3b){var i;switch(_3a.nodeType){case 1:var xml=[];if(!_3b){xml.push("<"+_3a.tagName);var _3c;for(i=0;i<_3a.attributes.length;i++){_3c=_3a.attributes.item(i);xml.push(" "+_3c.nodeName+"=\""+_3c.nodeValue+"\"");}xml.push(">");}for(i=0;i<_3a.childNodes.length;i++){xml.push(this._getNodeXml(_3a.childNodes.item(i)));}if(!_3b){xml.push("</"+_3a.tagName+">\n");}return xml.join("");case 3:case 4:return _3a.nodeValue;}return undefined;},_processOsdd:function(doc){var _3d=doc.getElementsByTagName("Url");var _3e=[];var _3f;var i;for(i=0;i<_3d.length;i++){_3f=_3d[i].attributes.getNamedItem("type").nodeValue;switch(_3f){case "application/rss+xml":_3e[i]=this.RSS_CONTENT_TYPE;break;case "application/atom+xml":_3e[i]=this.ATOM_CONTENT_TYPE;break;default:_3e[i]=this.XML_CONTENT_TYPE;break;}}var _40=0;var _41=_3e[0];for(i=1;i<_3d.length;i++){if(_3e[i]>_41){_40=i;_41=_3e[i];}}var _42=_3d[_40].nodeName.toLowerCase();if(_42=="url"){var _43=_3d[_40].attributes;this.urlElement=_3d[_40];switch(_3e[_40]){case this.ATOM_CONTENT_TYPE:this.contentType=this.ATOM_CONTENT_TYPE_STRING;break;case this.RSS_CONTENT_TYPE:this.contentType=this.RSS_CONTENT_TYPE_STRING;break;case this.XML_CONTENT_TYPE:this.contentType=this.XML_CONTENT_TYPE_STRING;break;}}}});dojo.extend(dojox.data.OpenSearchStore,dojo.data.util.simpleFetch);}
|