3lyfic

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)+'&notes='+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);