summaryrefslogtreecommitdiff
path: root/includes/js/dojox/grid/tests/yahooSearch.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/grid/tests/yahooSearch.js')
-rw-r--r--includes/js/dojox/grid/tests/yahooSearch.js137
1 files changed, 137 insertions, 0 deletions
diff --git a/includes/js/dojox/grid/tests/yahooSearch.js b/includes/js/dojox/grid/tests/yahooSearch.js
new file mode 100644
index 0000000..1d57a8e
--- /dev/null
+++ b/includes/js/dojox/grid/tests/yahooSearch.js
@@ -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;
+}