Blame | Last modification | View Log | RSS feed
// model that works with Yahoo Search APIdojo.declare("dojox.grid.data.yahooSearch", dojox.grid.data.dynamic,function(inFields, inData) {this.rowsPerPage = 20;this.fieldNames = [];for (var i=0, f; (f=inFields[i]); i++)this.fieldNames.push(f.name);}, {clearData: function() {turbo.widgets.TurboGrid.data.dynamic.prototype.clearData.apply(this, arguments);},// server send / receiveencodeParam: function(inName, inValue) {return turbo.printf('&%s=%s', inName, inValue);},getParams: function(inParams) {var url = this.url;url += '?appid=turboajax';inParams = inParams || {};inParams.output = 'json';inParams.results = this.rowsPerPage;inParams.query = turbo.$('searchInput').value.replace(/ /g, '+');for (var i in inParams)if (inParams[i] != undefined)url += this.encodeParam(i, inParams[i]);return url;},send: function(inAsync, inParams, inOnReceive, inOnError) {var p = this.getParams(inParams);dojo.io.bind({url: "support/proxy.php",method: "post",content: {url: p },contentType: "application/x-www-form-urlencoded; charset=utf-8",mimetype: 'text/json',sync: !inAsync,load: turbo.bindArgs(this, "receive", inOnReceive, inOnError),error: turbo.bindArgs(this, "error", inOnError)});this.onSend(inParams);},receive: function(inOnReceive, inOnError, inEvt, inData) {try {inData = inData.ResultSet;inOnReceive(inData);this.onReceive(inData);} catch(e) {if (inOnError)inOnError(inData);}},error: function(inOnError, inTyp, inErr) {var m = 'io error: ' + inErr.message;alert(m);if (inOnError)inOnError(m);},fetchRowCount: function(inCallback) {this.send(true, inCallback );},// request datarequestRows: function(inRowIndex, inCount) {inRowIndex = (inRowIndex == undefined ? 0 : inRowIndex);var params = {start: inRowIndex + 1}this.send(true, params, turbo.bindArgs(this, this.processRows));},// server callbacksprocessRows: 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 returnvar 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));},// eventsonInitializeData: turbo.nop,onSend: turbo.nop,onReceive: turbo.nop});// reportmodelChange = function() {var n = turbo.$('rowCount');if (n)n.innerHTML = turbo.printf('about %s row(s)', model.count);}// some data formattersformatLink = function(inData, inRowIndex) {if (!inData[0] || !inData[1])return ' ';return turbo.supplant('<a target="_blank" href="{href}">{text}</a>', {href: inData[0], text: inData[1] });};formatImage = function(inData, inRowIndex) {if (!inData[0] || !inData[1])return ' ';var o = {href: inData[0],src: inData[1].Url,width: inData[1].Width,height: inData[1].Height}return turbo.supplant('<a href="{href}" target="_blank"><img border=0 src="{src}" width="{width}" height="{height}"></a>', o);};formatDate = function(inDatum, inRowIndex) {if (inDatum == '')return ' ';var d = new Date(inDatum * 1000);return turbo.printf('%s/%s/%s', d.getMonth(), d.getDate(), d.getFullYear());};formatDimensions = function(inData, inRowIndex) {if (!inData[0] || !inData[1])return ' ';return inData[0] + ' x ' + inData[1];}