132 lines
3.7 KiB
JavaScript
132 lines
3.7 KiB
JavaScript
|
// 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];
|
||
|
}
|