Skip to content

Instantly share code, notes, and snippets.

@tsupo
Created May 7, 2009 18:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tsupo/108241 to your computer and use it in GitHub Desktop.
Save tsupo/108241 to your computer and use it in GitHub Desktop.
favorize for Twitter users
// ==UserScript==
// @name Favorize
// @namespace http://tyoro.orz.ne.jp/
// @description 色んな所にFavoritesの☆ボタンをつける。
// @include http://twitter.1x1.jp/*
// @include http://kichiku.oq.la/*
// @include http://twwatcher.blog20.fc2.com/*
// @include http://sho-ten.twitlife.jp/*
// @include http://search.twitter.com/*
// @include http://pcod.no-ip.org/yats/*
// @include http://buzztter.com/ja/k/*
// @include http://www.twitority.com/*
// @include http://backtweets.com/*
// @include http://twiple.jp/status/*
// @include http://www.twingly.com/*
// @include http://twitter.memol.us/*
// @include http://meyou.jp/*
// @include http://b.hatena.ne.jp/entry/twitter.com/*
// @include http://twilog.org/*
// @include http://twittell.net/search/*
// ==/UserScript==
// author: tyoro ( http://tyoro.orz.ne.jp/exe/ )
(function(){
var domain_str = document.location.href.replace( /^http:\/\/([^\/]*).*/ig , "$1" );
var entry_x_path;
var id_x_path;
var id_reg;
var IE='\v'=='v'; /* {@@} */
switch(domain_str){
/* case 'favotter.matope.com':
entry_x_path = '//div[@class="hentry"]';
id_x_path = 'self::div//a[@class="taggedlink"]';
id_reg = /.*?id=(.*)/;
break;*/
case 'twitter.1x1.jp':
entry_x_path = '//table[@class="list"]/tbody/tr/td[5]';
id_x_path = 'self::td/a';
id_reg = /.*\/(.*)/;
break;
case 'kichiku.oq.la':
entry_x_path = '//div[@class="recentEntry"]';
id_x_path = 'self::div/span[@class="usertext"]/a';
id_reg = /.*\/(.*)/;
break;
case 'twwatcher.blog20.fc2.com':
entry_x_path = '//div[@class="main"]/table/tbody/tr/td[3]';
id_x_path = 'self::td/a';
id_reg = /.*\/(.*)/;
break;
case 'sho-ten.twitlife.jp':
entry_x_path = '//div[@class="date"]';
id_x_path = 'self::div/a';
id_reg = /.*\/(.*)/;
break;
case 'search.twitter.com':
entry_x_path = '//div[@class="info"]';
id_x_path = 'a[@class="lit"]';
id_reg = /.*\/(.*)/;
break;
case 'pcod.no-ip.org':
// entry_x_path = '//tr[@class="xfolkentry"]';
// id_x_path = 'td/a[@class="taggedlink"]';
entry_x_path = '//li[@class="hentry"]'; /* @@ */
id_x_path = 'div[@class="meta"]/span[@class="date"]/a'; /* @@ */
id_reg = /.*\/(.*)/;
break;
case 'buzztter.com':
entry_x_path = '//div[@class="status xfolkentry"]';
id_x_path = 'a[@class="taggedlink"]';
id_reg = /.*\/(.*)/;
break;
case 'www.twitority.com': /* @@ */
entry_x_path = '//div[@class="tweet"]/p[@class="info"]'; /* @@ */
id_x_path = 'a[2]'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'backtweets.com': /* @@ */
entry_x_path = '//div[@class="timeline"]/p'; /* @@ */
id_x_path = 'small/a'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'twiple.jp': /* @@ */
entry_x_path = '//div[@class="item twitter"]'; /* @@ */
id_x_path = 'div[@class="content"]/span[@class="date"]/a'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'www.twingly.com': /* @@ */
entry_x_path = '//div[@class="info"]/p[@class="links"]'; /* @@ */
id_x_path = 'a[2][contains(@href,"http://twitter.com/")]'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'twitter.memol.us': /* @@ */
entry_x_path = '//div[@class="tweet"]/div[@class="info"]'; /* @@ */
id_x_path = 'a[3]'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'meyou.jp': /* @@ */
entry_x_path = '//p[@class="pt10"]/span[@class="time"]'; /* @@ */
id_x_path = 'a'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'b.hatena.ne.jp': /* @@ */
entry_x_path = '//h2[@class="entrytitle"]'; /* @@ */
id_x_path = 'a'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'twilog.org': /* @@ */
entry_x_path = '//div[@class="tl-tweet"]/p[@class="tl-posted"]';/* @@ */
id_x_path = 'a'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
case 'twittell.net': /* @@ */
entry_x_path = '//div[@class="voice"]/div/p'; /* @@ */
id_x_path = 'a'; /* @@ */
id_reg = /.*\/(.*)/; /* @@ */
break; /* @@ */
}
//var path_to_api = 'http://twitter.com/favourings/create/';
var path_to_api = 'http://twitter.com/favorites/create/'; /* @@ */
var formap = function(arr,callback,_index) {
var _arr = [];
for(var i = _index || 0, len = arr.length; i < len; i++) {
_arr.push(callback(arr[i],i));
}
return _arr;
};
var index = 0;
function mainloop(){
var updates = $x(entry_x_path);
if(!!updates) {
try {
formap(updates,addFavoritesButton,index);
index = updates.length;
} catch(e) {
// alert("error"+e);
}
}
}
function addFavoritesButton(e) {
var content = $x(id_x_path,e);
if(content == null )
return;
var id = content[0].href.replace(id_reg,"$1");
var starImg = document.createElement('img');
starImg.src = 'http://assets2.twitter.com/images/icon_star_empty.gif';
starImg.alt = 'Icon_star_empty';
starImg.border = 0;
starImg.id = 'status_star_'+id;
var starLink = document.createElement('a');
if (IE) /* {@@} */
starLink.attachEvent("on" + "click", function(){ addFavoritesStar(id); }); /* {@@} */
else /* {@@} */
starLink.addEventListener('click', function(){ addFavoritesStar(id); } , false);
starLink.setAttribute('style','cursor:pointer;');
starLink.appendChild(starImg);
e.appendChild(starLink);
return;
}
addFilter(mainloop);
mainloop();
function addFilter(filter, i) {
i = i || 4;
if (window.AutoPagerize && window.AutoPagerize.addFilter) {
window.AutoPagerize.addFilter(filter);
}
else if (i > 1) {
setTimeout(arguments.callee, 1000, filter, i - 1);
}
}
// cho45 - http://lowreal.net/
function $x(exp, context) {
if (!context) context = document;
var resolver;
var _exp;
if (!IE) {
resolver = function (prefix) {
var o = document.createNSResolver(context)(prefix);
return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
}
_exp = document.createExpression(exp, resolver);
}
var result = !IE ? _exp.evaluate(context, XPathResult.ANY_TYPE, null)
: document.evaluate(exp, context, null, XPathResult.ANY_TYPE, null);
switch (result.resultType) {
case XPathResult.STRING_TYPE : return result.stringValue;
case XPathResult.NUMBER_TYPE : return result.numberValue;
case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
result = !IE ? _exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
: document.evaluate(exp, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var ret = [];
for (var i = 0, len = result.snapshotLength; i < len ; i++) {
ret.push(result.snapshotItem(i));
}
return len != 0 ? ret : null;
}
}
return null;
}
function addFavoritesStar(id) {
var img = document.getElementById('status_star_'+id); /* @@ */
var api = path_to_api + id + '.xml';
var callback = function(res){
if(res.status == 200 ){
img.src='http://twitter.com/images/icon_star_full.gif'; /* @@ */
}else{
img.src='http://twitter.com/images/icon_star_empty.gif'; /* @@ */
}
img.height = 16; /* @@ */
img.width = 16; /* @@ */
};
GM_xmlhttpRequest({
method: 'POST',
url: api,
onload: callback
});
img.src='http://twitter.com/images/icon_throbber.gif'; /* @@ */
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment