-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtweets.js
107 lines (87 loc) · 2.93 KB
/
tweets.js
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
if (Meteor.isClient) {
if (Session.get("search") === undefined ) {
Session.set("search", "meteorjs");
}
Template.heading.events({
// 'keypress input' : function (e, t) {
// // template data, if any, is available in 'this'
// if ( e.keyCode === 3000) {
// Session.set("search", e.currentTarget.value);
// e.currentTarget.value = "";
// }
// },
'click #submit' : function (e) {
// template data, if any, is available in 'this'
e.preventDefault();
var term = $('#iField').val();
// console.log(term);
Session.set("search", term);
Session.set("tweets", undefined);
Meteor.call("getTweets", term, function (err, tweets) {
Session.set("tweets", tweets);
var d = new Date();
Session.set("latestRefresh", "" + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
});
$('#iField').val("");
}
});
Template.main.greeting = function () {
return "Welcome to tweets.";
};
Template.main.tweets = function () {
return Session.get("tweets");
};
Template.main.latestRefresh = function () {
return Session.get("latestRefresh");
};
Template.main.search = function () {
return Session.get("search");
};
Meteor.setInterval(function(){
var search = Session.get("search");
Meteor.call("getTweets", search, function (err, tweets) {
Session.set("tweets", tweets);
var d = new Date();
Session.set("latestRefresh", "" + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
});
}, 2000);
}
if (Meteor.isServer) {
String.prototype.greyLink = function(url, u) {
return "<a class='userTw' target='_blank' href='"+url+"'>"+u+"</a>";
}
String.prototype.blankLink = function(url) {
return "<a target='_blank' href='"+url+"'>"+url+"</a>";
}
function parseLinks (tweet) {
return tweet.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function (tweet) {
return tweet.blankLink(tweet);
});
};
function parseUsername(tweet) {
return tweet.replace(/[@]+[A-Za-z0-9-_]+/g, function(u) {
var username = u.replace("@","")
// u.link("https://twitter.com/"+username);
return u.greyLink("https://twitter.com/"+username, u);
});
};
function linkUser(user) {
var username = "@" + user;
return user.greyLink("https://twitter.com/"+user, username);
};
Meteor.methods({
getTweets: function (searchTerm) {
var response = Meteor.http.call("GET", "http://search.twitter.com/search.json", { params: { q: searchTerm} });
return response.data.results.map(function (tweet) {
// console.log(tweet.text);
// console.log(parseLinks(tweet.text));
return {
user: tweet.from_user_name,
userlink: linkUser(tweet.from_user),
text: parseUsername(parseLinks(tweet.text)),
stamp: tweet.created_at,
};
});
}
});
}