// model that works with Yahoo Search API dojo.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 / receive encodeParam: 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 data requestRows: function(inRowIndex, inCount) { inRowIndex = (inRowIndex == undefined ? 0 : inRowIndex); var params = { start: inRowIndex + 1 } this.send(true, params, turbo.bindArgs(this, this.processRows)); }, // server callbacks processRows: function(inData) { for (var i=0, l=inData.totalResultsReturned, s=inData.firstResultPosition; i{text}', {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('', 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]; }