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
127
128
129
130
131
132
133
|
// 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);
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'
});
// 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();
// Remove old rows from table
result_table.setData([]);
// Add our new rows to the result TableView
result_table.setData(row_data);
});
var label1 = Titanium.UI.createLabel({
color:'#999',
text:'I am Window 1',
font:{fontSize:20,fontFamily:'Helvetica Neue'},
textAlign:'center',
width:'auto'
});
win.add(label1);
win.add(search_input);
win.add(result_table);
|