New file |
0,0 → 1,131 |
// 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<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: turbo.nop, |
onSend: turbo.nop, |
onReceive: turbo.nop |
}); |
|
// report |
modelChange = function() { |
var n = turbo.$('rowCount'); |
if (n) |
n.innerHTML = turbo.printf('about %s row(s)', model.count); |
} |
|
|
// some data formatters |
formatLink = 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]; |
} |