Skip to content

Instantly share code, notes, and snippets.

@os0x
Forked from hitode909/favlevel.user.js
Created July 6, 2009 11:06
Show Gist options
  • Save os0x/141379 to your computer and use it in GitHub Desktop.
Save os0x/141379 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name favlevel
// @namespace http://www.hatena.ne.jp/hitode909/
// @description show favotter level
// @include http://twitter.com/*
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==
(function(){
var getLoginUser = function() {
var url = $("div.user_icon > a.url");
if (url.length > 0) {
url = url[0].href.split('/');
url = url[url.length - 1];
login_user = url;
GM_setValue("login_user", login_user);
} else {
login_user = GM_getValue("login_user");
}
};
var getUsers = function() {
users = eval(GM_getValue("users"));
if (typeof(users) == 'undefined') {
users = {};
}
var now = new Date().getTime();
for (var i in users) if (users.hasOwnProperty(i)) {
if (typeof(users[i]) == 'undefined' || users[i].due < now) {
delete(users[i]);
}
}
};
var saveUsers = function() {
GM_setValue("users", uneval(users));
};
var getFav = function(name) {
if (typeof(users[name]) == 'undefined') {
users[name] = {level: null, try: 0, due: new Date().getTime() + 3600*1000};
GM_xmlhttpRequest(
{
method: "GET",
url: favotterUrlFor(name),
onload: function(response) {
try {
var title = $($('div.description',$(response.responseText))[0]).text();
var level = title.match(/\((\d+)\)/)[1];
var user = response.finalUrl.match(/user=(.*?)$/)[1];
users[user].level = parseInt(level);
saveUsers();
} catch(e) {
//console.log(e);
}
}
});
}
users[name].try++;
return users[name];
};
var favotterUrlFor = function(name) {
return 'http://favotter.matope.com/user.php?user='+name;
};
var appendFavLevel = function(target) {
var target_name;
if (location.href == 'http://twitter.com/') {
target_name = $($('a.screen-name',target)[0]).text();
} else {
target_name = $($('h2.clearfix')[0]).text();
}
target_name = target_name.replace(/\s/g, '');
var fav = getFav(target_name);
if (fav.level != null) {
fav.try = 0;
var anchor = document.createElement('a');
anchor.setAttribute('href', favotterUrlFor(target_name));
anchor.appendChild(document.createTextNode(fav.level + 'favs'));
$($('span.entry-meta',target)[0]).append(anchor);
// 自分のレベルが分かってるとき関係を出す
if (login_user && users[login_user].level) {
var param = {"line-height": 1};
size = Math.sqrt(fav.level / users[login_user].level);
if (size > 5) {
param.color = "#FF0000";
} else if (size > 3) {
param.color = "#660099";
} else if (size > 2) {
param.color = "#009900";
} else if (size < 0.6) {
param.color = "#999999";
} else if (size < 0.9) {
param.color = "#4C4C4C";
}
if (size > 7) {
size = 7;
}
if (size < 0.7) {
size = 0.7;
}
param["font-size"] = size+"em";
$("span.entry-content, a.screen-name", target).css(param);
}
} else if (fav.try < 20) {
setTimeout( function(){appendFavLevel(target);}, 1000);
} else {
users[target_name].level = 0;
saveUsers();
appendFavLevel(target);
}
};
getUsers();
getLoginUser();
if (login_user) {
getFav(login_user);
}
var append = function(doc) {
console.log('append');
console.log(doc);
$('li.status', doc).each(function(){appendFavLevel(this);});
};
append(document);
// twitter.AutoPager と連携できるように修正
var add_filter = function(){
window.AutoPagerize.addFilter(
function(docs){
for (var i = 0,l = docs.length;i < l;i++) {
appendFavLevel(docs[i]);
}
}
);
}
if (window.AutoPagerize) add_filter();
else window.addEventListener('GM_AutoPagerizeLoaded',add_filter,false);
}(jQuery));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment