aboutsummaryrefslogtreecommitdiffstats
path: root/Resources/search.js
blob: 54038da9251cdad3512f409190597edd685726fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Create a reference to the current window
var win = Titanium.UI.currentWindow;

// Create an object to contain some useful functions
// Namespacing can be useful for keeping code organised in Ti applications
// In simple applications such as this, it's not exactly necessary
var TSearch = {
	s: function(query) {
		var request = Titanium.Network.createHTTPClient();
		request.open('GET', 'http://search.twitter.com/search.json?q=' + query);
		
		request.onload = function() {
			var results = (eval('(' + this.responseText + ')')).results;
			
			// No result case?
			
			// Open a database to store our result set (Ti uses asynchronous
			// requests, so this is what I came up with to separate view 
			// and data code)
			var db = Titanium.Database.open('twitsearch');
			db.execute('CREATE TABLE IF NOT EXISTS "search_results" (tweet TEXT, user STRING, avatar STRING)');
			db.execute('DELETE FROM "search_results"');
			
			for (var i = 0; i < results.length; i++) {
				db.execute('INSERT INTO "search_results" (tweet, user, avatar) VALUES (?, ?, ?)', results[i].text, results[i].from_user, results[i].profile_image_url);
			}
			
			db.close();
		};
		
		request.send();
	}
};


// Create a search input bar
var search_input = Titanium.UI.createSearchBar({
	hintText: 'Enter a search query', // let user know what to type
	height: 43,
	top: 0
});

var result_table = Titanium.UI.createTableView({
	top: 43
});
var row_data = []; // an array to store our result rows in
                   // (this gets fed into the result_table)


search_input.addEventListener('return', function(e) {
	TSearch.s(e.value);
	
	// Clear existing row_data
	row_data = [];
	
	var db = Titanium.Database.open('twitsearch');
	//db.execute('CREATE TABLE IF NOT EXISTS "search_results" (tweet TEXT, user STRING, avatar STRING)');
	var results = db.execute('SELECT * FROM "search_results"');
	
	while (results.isValidRow()) {
		// Construct a TableView to display our results
		
		var tweet  = results.fieldByName('tweet');
		var user   = results.fieldByName('user');
		var avatar = results.fieldByName('avatar');
		
		var row = Titanium.UI.createTableViewRow({
			height: 'auto',
			selectedBackgroundColor: 'transparent'
		});
		// tweet_view will contain our tweet elements for a customised TableRow
		var tweet_view = Titanium.UI.createView({
			height: 'auto',
			top: 5,
			right: 5,
			bottom: 5,
			left: 5
		});
		var avatar_image = Titanium.UI.createImageView({
			image: avatar,
			top: 0,
			left: 0,
			height: 45,
			width: 45
		});
		var user_label = Titanium.UI.createLabel({
			text: user,
			height: 'auto',
			font: {fontFamily: 'Helvetica Neue', fontSize: 16, fontWeight: 'bold'},
			top: -5,
			left: 50
		});
		var tweet_label = Titanium.UI.createLabel({
			text: tweet,
			height: 'auto',
			font: {fontSize: 14},
			top: 15,
			left: 50
		});
		
		
		// Combine our UI elements
		tweet_view.add(avatar_image);
		tweet_view.add(user_label);
		tweet_view.add(tweet_label);
		row.add(tweet_view);
		
		// Add our row to the row_data array
		row_data.push(row);
		
		results.next();
	}
	
	results.close();
	db.close();
	
	// Blur search field to hide on-screen keyboard
	search_input.blur();
	
	// Add our new rows to the result TableView
	result_table.setData(row_data);
});


win.add(search_input);
win.add(result_table);