]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/grid/tests/yahooSearch.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / grid / tests / yahooSearch.js
diff --git a/static/dojo-release-1.1.1/dojox/grid/tests/yahooSearch.js b/static/dojo-release-1.1.1/dojox/grid/tests/yahooSearch.js
new file mode 100644 (file)
index 0000000..1d57a8e
--- /dev/null
@@ -0,0 +1,137 @@
+dojo.require("dojo.io.script")
+dojo.require("dojox.rpc.Service");
+
+// model that works with Yahoo Search API
+dojo.declare("dojox.grid.data.yahooSearch", dojox.grid.data.Dynamic, {
+       constructor: function(inFields, inData, inSearchNode){
+               this.rowsPerPage = 20;
+               this.searchNode = inSearchNode;
+               this.fieldNames = dojo.map(inFields, "return item.name;");
+               this.yahoo = new dojox.rpc.Service(
+                       dojo.moduleUrl("dojox.rpc.SMDLibrary", "yahoo.smd")
+               );
+       },
+       // server send / receive
+       send: function(inAsync, inParams, inOnReceive, inOnError){
+               var d = this.yahoo.imageSearch(
+                       dojo.mixin({ 
+                               results: this.rowsPerPage,
+                               query: this.getQuery()
+                       }, inParams)
+               );
+               d.addCallbacks(
+                       dojo.hitch(this, "receive", inOnReceive, inOnError), 
+                       dojo.hitch(this, "error", inOnError)
+               );
+               this.onSend(inParams);
+               return d;
+       },
+       receive: function(inOnReceive, inOnError, inData){
+               try{
+                       inData = inData.ResultSet;
+                       inOnReceive(inData);
+                       this.onReceive(inData);
+               }catch(e){
+                       if(inOnError){
+                               inOnError(inData);
+                       }
+               }
+       },
+       error: function(inOnError, inErr) {
+               var m = 'io error: ' + inErr.message;
+               alert(m);
+               if (inOnError)
+                       inOnError(m);
+       },
+       encodeParam: function(inName, inValue) {
+               return dojo.string.substitute('&${0}=${1}', [inName, inValue]);
+       },
+       getQuery: function(){
+               return dojo.byId(this.searchNode).value.replace(/ /g, '+');
+       },
+       fetchRowCount: function(inCallback){
+               this.send(true, inCallback);
+       },
+       // request data 
+       requestRows: function(inRowIndex, inCount){
+               inRowIndex = (inRowIndex == undefined ? 0 : inRowIndex);
+               var params = { 
+                       start: inRowIndex + 1
+               }
+               this.send(true, params, dojo.hitch(this, this.processRows));
+       },
+       // server callbacks
+       processRows: function(inData){
+               for(var i=0, l=inData.totalResultsReturned, s=inData.firstResultPosition; i<l; i++){
+                       this.setRow(inData.Result[i], s - 1 + i);
+               }
+               // yahoo says 1000 is max results to return
+               var c = Math.min(1000, inData.totalResultsAvailable);
+               if(this.count != c){
+                       this.setRowCount(c);
+                       this.allChange();
+                       this.onInitializeData(inData);
+               }
+       },
+       getDatum: function(inRowIndex, inColIndex){
+               var row = this.getRow(inRowIndex);
+               var field = this.fields.get(inColIndex);
+               return (inColIndex == undefined ? row : (row ? row[field.name] : field.na));
+       },
+       // events
+       onInitializeData: function(){ },
+       onSend: function(){ },
+       onReceive: function(){ }
+});
+
+// report
+modelChange = function(){
+       var n = dojo.byId('rowCount');
+       if(n){
+               n.innerHTML = dojo.string.substitute('about ${0} row(s)', [model.count]);
+       }
+}
+
+
+// some data formatters
+getCellData = function(inCell, inRowIndex, inField){
+       var m = inCell.grid.model;
+       return m.getDatum(inRowIndex, inField);
+}
+
+formatLink = function(inData, inRowIndex){
+       if(!inData){ return '&nbsp;'; }
+       var text = getCellData(this, inRowIndex, this.extraField);
+       return dojo.string.substitute(
+               '<a target="_blank" href="${href}">${text}</a>', 
+               { href: inData, text: text }
+       );
+};
+
+formatImage = function(inData, inRowIndex){
+       if(!inData){ return '&nbsp;'; }
+       var info = getCellData(this, inRowIndex, this.extraField);
+       var o = {
+               href: inData, 
+               src: info.Url,
+               width: info.Width,
+               height: info.Height
+       }
+       return dojo.string.substitute(
+               '<a href="${href}" target="_blank"><img border=0 src="${src}" width="${width}" height="${height}"></a>', o);
+};
+
+formatDate = function(inDatum, inRowIndex){
+       if(!inDatum){ return '&nbsp;'; }
+       var d = new Date(inDatum * 1000);
+       return dojo.string.substitute(
+               "${0}/${1}/${2}",
+               [ d.getMonth()+1, d.getDate(), d.getFullYear() ]
+       );
+};
+
+formatDimensions = function(inData, inRowIndex){
+       if(!inData){ return '&nbsp;'; }
+       var w = inData, h = getCellData(this, inRowIndex, this.extraField);
+       return w + ' x ' + h;
+}