Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
// model that works with Yahoo Search API
2
dojo.declare("dojox.grid.data.yahooSearch", dojox.grid.data.dynamic,
3
	function(inFields, inData) {
4
		this.rowsPerPage = 20;
5
		this.fieldNames = [];
6
		for (var i=0, f; (f=inFields[i]); i++)
7
			this.fieldNames.push(f.name);
8
	}, {
9
	clearData: function() {
10
		turbo.widgets.TurboGrid.data.dynamic.prototype.clearData.apply(this, arguments);
11
	},
12
	// server send / receive
13
	encodeParam: function(inName, inValue) {
14
		return turbo.printf('&%s=%s', inName, inValue);
15
	},
16
	getParams: function(inParams) {
17
		var url = this.url;
18
		url += '?appid=turboajax';
19
		inParams = inParams || {};
20
		inParams.output = 'json';
21
		inParams.results = this.rowsPerPage;
22
		inParams.query = turbo.$('searchInput').value.replace(/ /g, '+');
23
		for (var i in inParams)
24
			if (inParams[i] != undefined)
25
				url += this.encodeParam(i, inParams[i]);
26
		return url;
27
	},
28
	send: function(inAsync, inParams, inOnReceive, inOnError) {
29
		var p = this.getParams(inParams);
30
		dojo.io.bind({
31
			url: "support/proxy.php",
32
			method: "post",
33
			content: {url: p },
34
			contentType: "application/x-www-form-urlencoded; charset=utf-8",
35
			mimetype: 'text/json',
36
			sync: !inAsync,
37
			load: turbo.bindArgs(this, "receive", inOnReceive, inOnError),
38
			error: turbo.bindArgs(this, "error", inOnError)
39
		});
40
		this.onSend(inParams);
41
	},
42
	receive: function(inOnReceive, inOnError, inEvt, inData) {
43
		try {
44
			inData = inData.ResultSet;
45
			inOnReceive(inData);
46
			this.onReceive(inData);
47
		} catch(e) {
48
			if (inOnError)
49
				inOnError(inData);
50
		}
51
	},
52
	error: function(inOnError, inTyp, inErr) {
53
		var m = 'io error: ' + inErr.message;
54
		alert(m);
55
		if (inOnError)
56
			inOnError(m);
57
	},
58
	fetchRowCount: function(inCallback) {
59
		this.send(true, inCallback );
60
	},
61
	// request data
62
	requestRows: function(inRowIndex, inCount)	{
63
		inRowIndex = (inRowIndex == undefined ? 0 : inRowIndex);
64
		var params = {
65
			start: inRowIndex + 1
66
		}
67
		this.send(true, params, turbo.bindArgs(this, this.processRows));
68
	},
69
	// server callbacks
70
	processRows: function(inData) {
71
		for (var i=0, l=inData.totalResultsReturned, s=inData.firstResultPosition; i<l; i++) {
72
			this.setRow(inData.Result[i], s - 1 + i);
73
		}
74
		// yahoo says 1000 is max results to return
75
		var c = Math.min(1000, inData.totalResultsAvailable);
76
		if (this.count != c) {
77
			this.setRowCount(c);
78
			this.allChange();
79
			this.onInitializeData(inData);
80
		}
81
	},
82
	getDatum: function(inRowIndex, inColIndex) {
83
		var row = this.getRow(inRowIndex);
84
		var field = this.fields.get(inColIndex);
85
		return (inColIndex == undefined ? row : (row ? row[field.name] : field.na));
86
	},
87
	// events
88
	onInitializeData: turbo.nop,
89
	onSend: turbo.nop,
90
	onReceive: turbo.nop
91
});
92
 
93
// report
94
modelChange = function() {
95
	var n = turbo.$('rowCount');
96
	if (n)
97
		n.innerHTML = turbo.printf('about %s row(s)', model.count);
98
}
99
 
100
 
101
// some data formatters
102
formatLink = function(inData, inRowIndex) {
103
	if (!inData[0] || !inData[1])
104
		return '&nbsp;';
105
	return turbo.supplant('<a target="_blank" href="{href}">{text}</a>', {href: inData[0], text: inData[1] });
106
};
107
 
108
formatImage = function(inData, inRowIndex) {
109
	if (!inData[0] || !inData[1])
110
		return '&nbsp;';
111
	var o = {
112
		href: inData[0],
113
		src: inData[1].Url,
114
		width: inData[1].Width,
115
		height: inData[1].Height
116
	}
117
	return turbo.supplant('<a href="{href}" target="_blank"><img border=0 src="{src}" width="{width}" height="{height}"></a>', o);
118
};
119
 
120
formatDate = function(inDatum, inRowIndex) {
121
	if (inDatum == '')
122
		return '&nbsp;';
123
	var d = new Date(inDatum * 1000);
124
	return turbo.printf('%s/%s/%s', d.getMonth(), d.getDate(), d.getFullYear());
125
};
126
 
127
formatDimensions = function(inData, inRowIndex) {
128
	if (!inData[0] || !inData[1])
129
		return '&nbsp;';
130
	return inData[0] + ' x ' + inData[1];
131
}