Changeset 63

User picture

Author: frojo56

(2009/02/17 14:41) Almost 3 years ago

Rework of regex that determines current page.
Retweet working on individual tweet page.

Affected files

Updated twitter_fantastico.user.js Download diff

6263
16
//TODO: @reply helper (this will be hard. api only gets 100 users at a time, no way to filter through entire friend collection)
16
//TODO: @reply helper (this will be hard. api only gets 100 users at a time, no way to filter through entire friend collection)
17
//TODO: Threaded conversations
17
//TODO: Threaded conversations
18
//TODO: Format time
18
//TODO: Format time
19
//TODO: Make embedded retweet/reply work on non-home pages (single tweet pages, or on profile pages)
20
//TODo: Get username from profile link if not on home page?
19
21
20
//ADDED: Endless tweets using JSON
22
//ADDED: Endless tweets using JSON
21
//ADDED: Modify retweet (embedded retweet)
23
//ADDED: Modify retweet (embedded retweet)
...
...
40
var j=jQuery.noConflict();
42
var j=jQuery.noConflict();
41
var last_read_tweet_id;
43
var last_read_tweet_id;
42
var tweets_on_page;
44
var tweets_on_page;
43
var current_username = j.trim(j("p#me_name").html());
45
var current_username = (j.trim(j("p#me_name").html())).length != 0 ? j.trim(j("p#me_name").html()) : j("#navigation #profile_link").attr("href").replace(/https?:\/\/(?:www\.)?twitter\.com\/([\w\d]+)$/,"$1");
44
var debug=true;
46
var debug=true;
45
var onTwitterHomePage = false;
47
var onTwitterHomePage = false;
46
var onTwitterFriendFeed = false;
48
var onTwitterFriendFeed = false;
...
...
161
						pageNumber--;
163
						pageNumber--;
162
						return;
164
						return;
163
					}
165
					}
164
					log('Successfully loaded ' + newTweets.length + ' tweets.' )
166
					log('Successfully loaded ' + newTweets.length + ' tweets.' );
165
					tweets_on_page = newTweets;
167
					tweets_on_page = newTweets;
166
					loaded_tweets[pageNumber-1] = data;
168
					loaded_tweets[pageNumber-1] = data;
167
					//modify_tweets(tweets_on_page,appendTweets);
169
					//modify_tweets(tweets_on_page,appendTweets);
...
...
172
	}
174
	}
173
	else if(!onTwitterHomePage && onTwitterIndividualTweet)
175
	else if(!onTwitterHomePage && onTwitterIndividualTweet)
174
	{
176
	{
175
		log("On indidivual page");
177
		statusid = reUrlSplitUp[3];
178
		log("On indidivual page("+statusid+")");
176
		log("Page Number: " + pageNumber);
179
		log("Page Number: " + pageNumber);
177
		statusid = reUrlSplitUp[4];
178
		j.ajax({
180
		j.ajax({
179
			url:"http://twitter.com/statuses/show/"+statusid+".json",
181
			url:"http://twitter.com/statuses/show/"+statusid+".json",
180
			type:"GET",
182
			type:"GET",
181
			data:{id:statusid},
183
			data:{id:statusid},
182
			dataType:"json",
184
			dataType:"json",
185
			async:false,
183
			success:function(data){
186
			success:function(data){
184
				tweets_on_page=data;
187
				//add to array, don't just apply single tweet
185
				loaded_tweets[pageNumber-1] = data;
188
				loaded_tweets[pageNumber-1] = new Array();
186
				//modify_tweets(tweets_on_page);
189
				loaded_tweets[pageNumber-1].push(data);
190
				//loaded_tweets[pageNumber-1] = data;
191
				log("Loaded "+loaded_tweets[pageNumber-1].length+" tweet(s)");
187
				loading=false;
192
				loading=false;
188
			}
193
			}
189
		});
194
		});
...
...
191
}
196
}
192
function modify_tweets(tweets,appendTweets)
197
function modify_tweets(tweets,appendTweets)
193
{
198
{
194
	if(tweets.length == null)
199
	log("Modifying " + tweets.length + " tweet(s)");
200
	if(tweets != null)
195
	{
201
	{
196
		//single tweet?
202
		for(i=0;i<tweets.length;i++)
197
		jq_tweet = j("#permalink");
198
		modify_reply_button(jq_tweet,tweets);
199
		add_retweet_button(jq_tweet,tweets);
200
		modify_delete_button(jq_tweet,tweets);
201
	}
202
	else
203
	{
204
		log("Modifying " + tweets.length + " tweet(s)");
205
		if(tweets != null)
206
		{
203
		{
207
			for(i=0;i<tweets.length;i++)
204
			jq_tweet = j("#timeline #status_"+tweets[i].id);
205
			if(jq_tweet.length == 0)
206
				jq_tweet = j("#permalink");
207
			if(appendTweets)
208
			{
208
			{
209
				jq_tweet = j("#timeline #status_"+tweets[i].id);
209
				new_jq_tweet = convert_json_tweet_to_html_tweet(tweets[i]);//.appendTo("#timeline");
210
				if(appendTweets)
210
				add_retweet_button(new_jq_tweet,tweets[i]);
211
				modify_reply_button(new_jq_tweet,tweets[i]);
212
				if(tweets[i].user.screen_name == current_username)
211
				{
213
				{
212
					new_jq_tweet = convert_json_tweet_to_html_tweet(tweets[i]);//.appendTo("#timeline");
214
					new_jq_tweet.find("span.actions div").append("<a class='delete' title='delete this update' href='#delete'></a>");
213
					add_retweet_button(new_jq_tweet,tweets[i]);
215
					modify_delete_button(new_jq_tweet,tweets[i]);
214
					modify_reply_button(new_jq_tweet,tweets[i]);
216
				}
215
					if(tweets[i].user.screen_name == current_username)
217
				find_reply_to_me_in_tweet_and_set_to_me_class(new_jq_tweet);
216
					{
218
				if(j("#timeline").length>0)
217
						new_jq_tweet.find("span.actions div").append("<a class='delete' title='delete this update' href='#delete'></a>");
218
						modify_delete_button(new_jq_tweet,tweets[i]);
219
					}
220
					find_reply_to_me_in_tweet_and_set_to_me_class(new_jq_tweet);
221
					new_jq_tweet.appendTo("#timeline");
219
					new_jq_tweet.appendTo("#timeline");
222
				}
223
				else
220
				else
224
				{
221
					new_jq_tweet.appendTo("#wrapper");
225
					oldEntryContent = j("#timeline #status_"+tweets[i].id+" .status-body .entry-content").html();
226
					newEntryContent = link_up_status_text(oldEntryContent,false,false,true);
227
					j("#timeline #status_"+tweets[i].id+" .status-body .entry-content").html(newEntryContent);
228
					modify_reply_button(jq_tweet,tweets[i]);
229
					add_retweet_button(jq_tweet,tweets[i]);
230
					modify_delete_button(jq_tweet,tweets[i]);
231
					find_reply_to_me_in_tweet_and_set_to_me_class(jq_tweet);
232
				}
233
				
234
			}
222
			}
223
			else
224
			{
225
				//oldEntryContent = j("#timeline #status_"+tweets[i].id+" .status-body .entry-content").html();
226
				oldEntryContent = jq_tweet.find(".status-body .entry-content").html();
227
				newEntryContent = link_up_status_text(oldEntryContent,false,false,true);
228
				//j("#timeline #status_"+tweets[i].id+" .status-body .entry-content").html(newEntryContent);
229
				jq_tweet.find(".status-body .entry-content").html(newEntryContent);
230
				modify_reply_button(jq_tweet,tweets[i]);
231
				add_retweet_button(jq_tweet,tweets[i]);
232
				modify_delete_button(jq_tweet,tweets[i]);
233
				find_reply_to_me_in_tweet_and_set_to_me_class(jq_tweet);
234
			}
235
			
235
		}
236
		}
236
	}
237
	}
237
	
238
	log("Done modifying tweets.");
238
	log("Done modifying tweets.");
239
}
239
}
240
240
...
...
261
}
261
}
262
function show_embedded_retweet(json_tweet)
262
function show_embedded_retweet(json_tweet)
263
{
263
{
264
	if(j("li#status_"+json_tweet.id+" span.status-body div.embedded-retweet").length==0)
264
	if(j("li#status_"+json_tweet.id).length>0)
265
		jq_tweet = j("li#status_"+json_tweet.id);
266
	else
267
		jq_tweet = j("#permalink");
268
	
269
	if( jq_tweet.find(".status-body .embedded-retweet").length==0)
265
	{
270
	{
266
		jq_embedded_retweet = j("<div id='retweet_"+json_tweet.id+ "' class='embedded-retweet'><span
class='counter'>140</span><br/><textarea  class='retweet-text'></textarea><br/><a class='retweet-submit' href='#'>Retweet
this</a><a class='retweet-cancel' href='#'>Cancel</a></div>");
271
		jq_embedded_retweet = j("<div id='retweet_"+json_tweet.id+ "' class='embedded-retweet'><span
class='counter'>140</span><br/><textarea  class='retweet-text'></textarea><br/><a class='retweet-submit' href='#'>Retweet
this</a><a class='retweet-cancel' href='#'>Cancel</a></div>");
267
		jq_embedded_retweet.appendTo("li#status_"+json_tweet.id+" span.status-body").effect('scale',{from:{height:0},percent:100,direction:'vertical',scale:'box'},300);
272
273
		jq_embedded_retweet.appendTo(jq_tweet.find(".status-body")).effect('scale',{from:{height:0},percent:100,direction:'vertical',scale:'box'},300);
268
		jq_textarea = jq_embedded_retweet.find("textarea.retweet-text");
274
		jq_textarea = jq_embedded_retweet.find("textarea.retweet-text");
269
		//jq_textarea.focus(function(){
275
		//jq_textarea.focus(function(){
270
		//	counter_span = j(this).parent().find("span.counter");
276
		//	counter_span = j(this).parent().find("span.counter");
271
		//	counter_span.html(140-parseInt(j(this).val().length));
277
		//	counter_span.html(140-parseInt(j(this).val().length));
272
		//});
278
		//});
273
		//jq_textarea.focus();
274
		counter_span = jq_textarea.parent().find("span.counter");
279
		counter_span = jq_textarea.parent().find("span.counter");
275
		counter_span.html(140-parseInt(jq_textarea.val().length));
280
		counter_span.html(140-parseInt(jq_textarea.val().length));
276
		
281
		
...
...
292
				data:{status:jq_ta.val(),in_reply_to_status_id:jtweet.id},
297
				data:{status:jq_ta.val(),in_reply_to_status_id:jtweet.id},
293
				success:function(data){
298
				success:function(data){
294
					jq_ta.parent().remove();
299
					jq_ta.parent().remove();
295
					convert_json_tweet_to_html_tweet(data).prependTo("ol#timeline").show("highlight",{},1000);
300
					convert_json_tweet_to_html_tweet(data).prependTo("#timeline").show("highlight",{},1000);
296
				}
301
				}
297
			});
302
			});
298
			return false;
303
			return false;
...
...
458
}
463
}
459
function determine_what_page_user_is_on()
464
function determine_what_page_user_is_on()
460
{
465
{
461
	reUrlSplitUp=/^https?:\/\/(?:www\.)?twitter\.com(\/([\w\d]+)(\/status\/(\d+))?(?:.*page=(\d+))?)(?:#.*)?$/.exec(location.href);
466
	//reUrlSplitUp=/^https?:\/\/(?:www\.)?twitter\.com(\/([\w\d]+)(\/status\/(\d+))?(?:.*page=(\d+))?)(?:#.*)?$/.exec(location.href);
462
	//log("reUrlSplitUp: "+reUrlSplitUp);
467
	reUrlSplitUp=/https?:\/\/(?:www\.)?twitter.com\/([\w\d]+)(?:\/(statuses)\/(\d+))?(?:\?page=(\d+))?/.exec(location.href);
463
	
468
	// 1: directory right after twitter.com (ie: home or carl_furrow, etc)
464
	//reUrlSplitUp[1] = everything after "http://twitter.com", will be null if on twitter home page
469
	// 2: the word "statuses" if in the url (what did I want to use this for?)
465
	//reUrlSplitUp[2] = main subdirectory. ie "home" or "username"
470
	// 3: the status id
466
	//reUrlSplitUp[3] = ie /status/123456
471
	// 4: Page number
467
	//reUrlSplitUp[4] = statusid, if available
472
		
468
	//reUrlSplitUp[5] = Page Number, if available
469
	
470
	if(reUrlSplitUp == null)
473
	if(reUrlSplitUp == null)
471
		onTwitterHomePage=true;
474
		onTwitterHomePage=true;
472
	else
475
	else
473
	{
476
	{
474
		//log("reUrlSplitUp[1]: "+reUrlSplitUp[1]+" reUrlSplitUp[2]: "+reUrlSplitUp[2]+" reUrlSplitUp[3]: "+reUrlSplitUp[3]+" reUrlSplitUp[4]: "+reUrlSplitUp[4]);
477
		log("reUrlSplitUp[1]: "+reUrlSplitUp[1]+" reUrlSplitUp[2]: "+reUrlSplitUp[2]+" reUrlSplitUp[3]: "+reUrlSplitUp[3]+"
reUrlSplitUp[4]: "+reUrlSplitUp[4]);
475
		if(reUrlSplitUp[2] != null && reUrlSplitUp[2] == "home")
478
		if(reUrlSplitUp[1] != null && reUrlSplitUp[1] == "home")
476
			onTwitterFriendFeed=true;
479
			onTwitterFriendFeed=true;
477
		else if(reUrlSplitUp[2] != null && reUrlSplitUp[2] != "home")
480
		else if(reUrlSplitUp[1] != null && reUrlSplitUp[1] != "home")
478
		{
481
		{
479
			if(reUrlSplitUp[4] !=  null)
482
			if(reUrlSplitUp[3] !=  null)
480
				onTwitterIndividualTweet=true;
483
				onTwitterIndividualTweet=true;
481
			else
484
			else
482
				onTwitterUsersProfile=true;
485
				onTwitterUsersProfile=true;
483
		}
486
		}
484
		if(reUrlSplitUp[5] != null && reUrlSplitUp[5].length > 0)
487
		if(reUrlSplitUp[4] != null && reUrlSplitUp[4].length > 0)
485
			pageNumber = reUrlSplitUp[5];
488
			pageNumber = reUrlSplitUp[4];
486
	}	
489
	}	
487
	//log("onTwitterHomePage: "+onTwitterHomePage+" onTwitterFriendFeed: "+onTwitterFriendFeed+" onTwitterIndividualTweets:"+onTwitterIndividualTweet);
490
	log("onTwitterHomePage: "+onTwitterHomePage+" onTwitterFriendFeed: "+onTwitterFriendFeed+"
onTwitterIndividualTweets:"+onTwitterIndividualTweet);
488
}
491
}
489
function add_counter_to_textareas()
492
function add_counter_to_textareas()
490
{
493
{
...
...
562
	{\
565
	{\
563
		min-height:60px;\
566
		min-height:60px;\
564
	}\
567
	}\
565
	.to_me\
568
	.to_me, .to_me .entry-content\
566
	{\
569
	{\
567
		background-color:#FFCC77;\
570
		background-color:#FFCC77;\
571
		background: #FFCC77 none repeat scroll 0 0 !important;\
568
	}\
572
	}\
569
	.mine\
573
	.mine\
570
	{\
574
	{\
...
...
577
		position:relative;\
581
		position:relative;\
578
		right:20px;\
582
		right:20px;\
579
		color: #000;\
583
		color: #000;\
584
	}\
585
	li.to_me .meta, li.to_me .meta a, li.mine .meta, li.mine .meta a\
586
	{\
587
		color:#666;\
588
	}\
589
	a.retweet-link\
590
	{\
591
		text-indent:0px !important;\
580
	}";
592
	}";
581
}
593
}
582
function log(msg)
594
function log(msg)