By
Strx
—
Uploaded
Aug 24, 2009
(function($){
jetpack.future.import("clipboard");
function Jp3ly(doc){
var me={
doc:doc, //jetpack Document
apikey:'em5893833', //Provided from 3.ly
cache:[], //Avoid repeated requests
//returns the cached 3ly url or undefined
cached:function(url){
url=url || jetpack.tabs.focused.url;
return me.cache[url];
},
//get/set current url
url:function(url){
if (url!==undefined){
me.$url.text(url||'3lyfic').css('color','#333');
}else{
return me.$url.text();
}
return me;
},
//Validate url returns the cached 3ly url or request it to 3.ly via ajax
get3ly:function(url){
url=url||jetpack.tabs.focused.url;
console.log(url);
var rv='';
if (/^[fh]t/.test(url)){
me.url('working...');
rv=me.cache[url] || $.ajax({method:'GET',async:false,url:'http://3.ly',data:{api:me.apikey,u:url}}).responseText;
if (/^http/.test(rv)){
me.cache[url]=rv;
me.url(rv);
}else{
me.url('not available');
rv='';
}
}
return rv;
},
notify:function(text){
jetpack.notifications.show({title: '3lyfic', body: text, icon: 'http://3.ly/favicon.ico'});
return me;
},
/////////////////
//Init Functions
/////////////////
init:function(){
me.initButtons();
me.$url.click(me.onUrlClick);
jetpack.tabs.onFocus(me.onTabChange);
jetpack.tabs.onReady(me.onTabChange);
me.url('');
return me;
},
initButtons:function(){
var $icons=$('#icons',me.doc);
$.each(me.buttons,function(name,elem){
var icon=elem.icon||'http://'+name+'.com/favicon.ico',
$icon=$('<span class="icon" id="'+name+'"><img width="12" height="12" src="'+icon+'"/></span>');
$icon.appendTo($icons).click(elem.click);
});
},
//Utility Buttons
buttons:{
'3ly':{icon:'http://3.ly/favicon.ico',click:function(){
if (me.get3ly()){
jetpack.tabs.open(me.url()+'-').focus();
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
}},
twitter:{click:function(){
if (me.get3ly()){
var status=me.url()+' '+jetpack.tabs.focused.contentDocument.title+' - #3lyfic';
jetpack.tabs.open('http://twitter.com/home?status='+encodeURIComponent(status)).focus();
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
}},
delicious:{click:function(){
if (me.get3ly()){
var notes='3lyfic shortest URL: '+me.url();
jetpack.tabs.open('http://delicious.com/post?url='+encodeURIComponent(jetpack.tabs.focused.url)+'¬es='+encodeURIComponent(notes)+'&title='+encodeURIComponent(jetpack.tabs.focused.contentDocument.title)).focus();
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
}},
facebook:{click:function(){
if (me.get3ly()){
jetpack.tabs.open('http://www.facebook.com/share.php?u='+encodeURIComponent(me.url())).focus();
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
}},
digg:{click:function(){
if (me.get3ly()){
var title=jetpack.tabs.focused.contentDocument.title+' - 3lyfic digg';
jetpack.tabs.open('http://digg.com/submit?phase=2&url='+encodeURIComponent(jetpack.tabs.focused.url)+'&title='+encodeURIComponent(title)).focus();
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
}},
stumbleupon:{click:function(){
if (me.get3ly()){
jetpack.tabs.open('http://www.stumbleupon.com/submit?url='+encodeURIComponent(jetpack.tabs.focused.url)).focus();
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
}}
},
/////////////////
//DOM Events
/////////////////
onUrlClick:function(e){
if (me.get3ly()){
jetpack.clipboard.set(me.$url.css({color:'green'}).text());
}else{
me.notify('Can\'t create 3.ly url, sorry');
}
},
onTabChange:function(e){
me.url(me.cached() || '3lyfic');
}
};
me.$url=$('#url',me.doc);
me.$main=$('#main',me.doc);
return me;
}
jetpack.statusBar.append({
html: '<html>\
<head>\
<style type="text/css">\
#main {font-size:10px; font-face:verdana;} \
#url {cursor:pointer; margin:auto; width:100%; text-align:center; margin-top:-1px;} \
#icons {width: 100%; text-align: center; margin-top: 0px;} \
.icon {cursor:pointer; margin:0 1px;} \
</style>\
</head><body>\
<div id="main" style="">\
<div id="url">3lyfic</div>\
<div id="icons"><!--\
<span id="3ly" class="icon"><img height="12px" width="12px" title="aaa" src="http://3.ly/favicon.ico"/></span>\
<span id="twitter" class="icon"><img height="12px" width="12px" src="http://twitter.com/favicon.ico"/></span>\
<span id="facebook" class="icon"><img height="12px" width="12px" src="http://facebook.com/favicon.ico"/></span>\
<span id="digg" class="icon"><img height="12px" width="12px" src="http://digg.com/favicon.ico"/></span>\
--></div>\
</div></body></html>',
width:90,
onReady:function(doc){
var jp3ly=Jp3ly(doc).init();
}
});
})(jQuery);