v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Difference between revisions of "User:Latias1290/menucustom.js"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
(testing)
Line 1: Line 1:
// I am testing with a cheap ripoff of lethosormenu, please dont edit(its not like you can anyway)
+
;jQuery(function(){
 
+
MW=mediaWiki;LEInit=(function($){
// trying to figure out its code without a documentation is pretty hard tho
+
console.log($.fn.jquery);
 
 
// there are notes scattered all over the source, feel free to read them
 
 
 
// bug: page resizes upon clicking the "latimenu" button
 
 
 
 
 
MW=mediaWiki;
 
LEInit=(function($){
 
 
var _le = {OPTS:{}};
 
var _le = {OPTS:{}};
 
/* _le is the same as window.LE. _le is used here to export stuff to outside code.
 
*
 
*
 
*
 
*
 
*/
 
 
 
_le.DEFAULT_OPTS={
 
_le.DEFAULT_OPTS={
 
menu:{
 
menu:{
Line 24: Line 8:
 
}
 
}
 
};
 
};
_le.OPTS_MD={//metadata. unused, but might use in the future.
+
_le.OPTS_MD={
 
menu:{
 
menu:{
 
desc:'Menu settings',
 
desc:'Menu settings',
Line 35: Line 19:
 
}
 
}
 
};
 
};
+
function update_opts(){
function update_opts(){ // probably update options
+
if(!'LE_USER_OPTS' in window)window.LE_USER_OPTS={}
if(!'LE_USER_OPTS' in window)window.LE_USER_OPTS={} // I am wondering what "window" means in this script like Ive never wondered before but I assume its good because it doesnt break
 
 
_le.OPTS=$.extend(_le.DEFAULT_OPTS,window.LE_USER_OPTS);
 
_le.OPTS=$.extend(_le.DEFAULT_OPTS,window.LE_USER_OPTS);
 
}
 
}
 
 
update_opts();
 
update_opts();
+
O=function(){return _le.OPTS};
 
T={
 
T={
 
func:function(o){return !!(o&&o.call);},
 
func:function(o){return !!(o&&o.call);},
Line 63: Line 45:
 
return s;
 
return s;
 
},
 
},
};assignProps("T",T);
+
};A("T",T);
+
function A(a,b){
+
if(!b){
/* Assigns properties to '_le'. Polymorphic(not like I know what that means anyway).
+
if (typeof a != 'object') return;
* assignProps(String a, mixed b): Assigns b to _le[a]
+
for(i in a){
* assignProps(Object a): Performs assignProps(key, value) for each {key:value} pair in 'a'
+
if(i in {}) continue;
*
+
_le[i] = a[i]
* The following lines are equivalent:
 
* assignProps('a', 1); assignProps('b', 2);
 
* assignProps({a:1, b:2});
 
* assignProps('a', 1)('b', 2);
 
*/
 
function assignProps(a,b){//renamed to something less cryptic
 
 
if(b!==undefined){
 
// 'b' is not defined, so assign all key-value pairs in 'a' (an object) to _le
 
if (typeof a != 'object') return; // if 'a' isn't an object, it doesn't have keys, so looping won't work. This only happens with things like assignProps('foo')
 
for(i in a){ // Loop through keys of 'a' - 'i' is the key
 
if(i in {}) continue; // if i is a property of an empty object, skip it. This should never happen unless you add properties to the Object constructor.
 
_le[i] = a[i] // Assign property 'i' of 'a' to the same property of '_le'. In this loop, effectively assigns all properties of 'a' to '_le'.
 
 
}
 
}
 
}
 
}
else _le[a]=b; // b _is_ defined, so set _le[a] to 'b'
+
else _le[a]=b;
return assignProps; // returns A so it can be called again, if necessary
+
return A;
 
}
 
}
+
A('update_opts',update_opts);
assignProps('update_opts',update_opts);
 
 
function init(){
 
function init(){
if(window.console&&window.console.log) console.log("Loaded LatiMenu 0.1");
+
if(window.console&&window.console.log) console.log("Loaded LethosorMenu");
if(window.console&&window.console.log) console.log("A cheap ripoff of LethosorMenu");
+
link = $("<a>").attr({href:'#le-menu-show'}).text("LethosorMenu").attr({title:'Shift-Alt-L'});
link = $("<a>").attr({href:'#le-menu-show'}).text("LatiMenu").attr({title:'Alt-L'});
 
 
menuitem = $("<li>").append(link);
 
menuitem = $("<li>").append(link);
 
$("div#p-personal ul").append(menuitem);
 
$("div#p-personal ul").append(menuitem);
 
}
 
}
function user_latias(e){T.PD(e);window.location.href="http://dwarffortresswiki.org/index.php/User:Latias1290";}
+
function user_lethosor(e){T.PD(e);window.location.href="http://dwarffortresswiki.org/index.php/User:Lethosor";}
$(document).delegate('[href=#le-latias]','click',user_latias);
+
$(document).delegate('[href=#le-lethosor]','click',user_lethosor);
 
 
 
MS=(function(){
 
MS=(function(){
Line 109: Line 76:
 
.attr({href:'#le-menu-hide'});  
 
.attr({href:'#le-menu-hide'});  
 
MS.content=$("<div>").addClass("le-cf").css({padding:'1em'}).appendTo(MS.$);
 
MS.content=$("<div>").addClass("le-cf").css({padding:'1em'}).appendTo(MS.$);
MS.header=$("<h3>").css({'text-align':'center'}).html('<a href="#le-latias" target="_blank"><span style="color:#093">L</span><span style="color:#084">a</span>'+'<span style="color:#075">t</span><span style="color:#066">i</span></a><span style="color:#c40">Menu</span>')
+
MS.header=$("<h3>").css({'text-align':'center'}).html('<a href="#le-lethosor" target="_blank"><span style="color:#093">L</span><span style="color:#084">e</span>'+
 +
'<span style="color:#075">t</span><span style="color:#066">h</span><span style="color:#057">o</span>'+
 +
'<span style="color:#048">s</span><span style="color:#039">o</span><span style="color:#02a">r</span></a><span style="color:#c40">Menu</span>')
 
.appendTo(MS.content);
 
.appendTo(MS.content);
 
MS.cfs={main:MS.content};//content frames
 
MS.cfs={main:MS.content};//content frames
Line 116: Line 85:
 
.attr({title:'Esc'}).prependTo(MS.$);
 
.attr({title:'Esc'}).prependTo(MS.$);
 
 
MS.show=function(evt){ // show the menu
+
MS.show=function(evt){
 
T.PD(evt);
 
T.PD(evt);
if(_le.OPTS.menu.show_overlay) MS.$O.stop().fadeIn(500);
+
if(O().menu.show_overlay) MS.$O.stop().fadeIn(500);
 
MS.$.stop().fadeIn(350);
 
MS.$.stop().fadeIn(350);
 
$('body').css({overflow:'hidden'});
 
$('body').css({overflow:'hidden'});
 
MS.active=true;
 
MS.active=true;
 
};
 
};
MS.hide=function(evt){ // hide the menu/close it
+
MS.hide=function(evt){
 
T.PD(evt);
 
T.PD(evt);
 
MS.$O.stop().fadeOut(400);
 
MS.$O.stop().fadeOut(400);
Line 133: Line 102:
 
$(document).on('click','[href=#le-menu-hide]',MS.hide);
 
$(document).on('click','[href=#le-menu-hide]',MS.hide);
 
 
MS.csize=function(w,h){ // set the size, no need to dismantle it as its clear what it does
+
MS.csize=function(w,h){
 
if(w+''=='')return;
 
if(w+''=='')return;
 
var w,h,l,t;
 
var w,h,l,t;
Line 145: Line 114:
 
if(!MS.cfs[n])MS.cfs[n]=$('<div class="le-cf">').appendTo(MS.$);
 
if(!MS.cfs[n])MS.cfs[n]=$('<div class="le-cf">').appendTo(MS.$);
 
return MS.cfs[n].show();
 
return MS.cfs[n].show();
}; // switch to another menu
+
};
MS.reset=function(){ // reset the screen
+
MS.reset=function(){
 
MS.show();MS.cf('main');MS.csize(80,80);
 
MS.show();MS.cf('main');MS.csize(80,80);
 
};
 
};
Line 162: Line 131:
 
var _=MS;return function(){return _;};
 
var _=MS;return function(){return _;};
 
})();
 
})();
assignProps('menuScreen',MS);
+
A('menuScreen',MS);
 
 
 
PM=(function(){ //Plugins manager
 
PM=(function(){ //Plugins manager
Line 178: Line 147:
 
MS().addLink(ml.name,ml.func);
 
MS().addLink(ml.name,ml.func);
 
}
 
}
PM.getPlugins = function() {
+
return function(){return PM};
return PM.plugs;
+
})();A('PM',PM);
}
 
return function(){return PM}; // returns the plugin list, aka the PM variable(not the PM() function)
 
})();assignProps('PM',PM);
 
 
 
 
keyf=function(e){
 
keyf=function(e){
Line 200: Line 166:
 
local=(function(){
 
local=(function(){
 
__t=this;return function(k){return k?__t[k]:__t;}
 
__t=this;return function(k){return k?__t[k]:__t;}
})();assignProps('local',local);
+
})();A('local',local);
 
 
 
init();
 
init();
 +
 +
function test(PM){return {main:function(){alert("This is a test plugin:\n"+PM)},title:"Test plugin v0.0.1", init:function(){PM.addMenuLink("Test")}}}
 +
PM().register("Test", test);
 +
//PM().addMenuLink("Test");
 
 
 
function link_opts(PM){
 
function link_opts(PM){
Line 286: Line 256:
 
}
 
}
 
PM().register("Links",link_opts);
 
PM().register("Links",link_opts);
 
 
function plist(PM) {
 
var p = {};
 
 
p.main = function() {
 
MS().csize(40,30);
 
MS().cf("pluginlist");
 
p.f = MS().cfs[MS().cf()];
 
p.f.html("").append($("<p>").text("Works4"));
 
p.ql = $("<a>").attr("href", "#").text("Back").on("click", function(e){T.PD(e);p.quit();}).appendTo(p.f);
 
};
 
 
p.quit = function() {
 
MS().reset();
 
};
 
 
p.init = function(PM) {
 
PM.addMenuLink("Plugin List");
 
};
 
 
p.title = "Plugin List";
 
return p;
 
}
 
PM().register("PluginList", plist);
 
 
 
 
function tt_disable(PM){ //stack overflow 1027762
 
function tt_disable(PM){ //stack overflow 1027762
Line 345: Line 290:
 
MS().cf('tt_disable');
 
MS().cf('tt_disable');
 
t.f=MS().cfs[MS().cf()];
 
t.f=MS().cfs[MS().cf()];
t.f.html('').append($("<p>").text("Works3"));
+
t.f.html('').append($("<p>").text("LethosorMenu: JavaScript plugin manager"));
 
t.ql=$("<a>").attr('href','#').text("Back").on('click',function(e){T.PD(e);t.quit();}).appendTo(t.f);
 
t.ql=$("<a>").attr('href','#').text("Back").on('click',function(e){T.PD(e);t.quit();}).appendTo(t.f);
 
};
 
};
Line 353: Line 298:
 
return t;
 
return t;
 
}
 
}
PM().register("TTDisable",tt_disable);
+
PM().register("TTDisable",tt_disable)
 
function test(PM){
 
return {
 
main:function(){
 
alert("This is a test plugin:\n"+PM)
 
},
 
title:"Test plugin v0.0.1",
 
init:function(){
 
PM.addMenuLink("Test")
 
}
 
}
 
}
 
PM().register("Test", test);
 
 
 
function anMenu(PM) {
 
var m = {};
 
 
m.main = function() {
 
MS().csize(40,30);
 
MS().cf("anmenu");
 
m.f = MS().cfs[MS().cf()];
 
m.f.html("").append($("<p>").text("Works2"));
 
m.ql = $("<a>").attr("href", "#").text("Back").on("click", function(e){T.PD(e);m.quit();}).appendTo(m.f);
 
};
 
 
m.quit = function() {
 
MS().reset();
 
};
 
 
m.init = function(PM) {
 
PM.addMenuLink("AnMenu");
 
};
 
 
m.title = "AnMenu";
 
return m;
 
}
 
PM().register("AnMenu", anMenu);
 
 
 
 
function about(PM){
 
function about(PM){
Line 399: Line 306:
 
MS().cf('about');
 
MS().cf('about');
 
t.f=MS().cfs[MS().cf()];
 
t.f=MS().cfs[MS().cf()];
t.f.html('').append($("<p>").text("LatiasMenu: cheap ripoff of LethosorMenu remodelled for personal use"));
+
t.f.html('').append($("<p>").text("LethosorMenu: JavaScript plugin manager"));
 
t.ql=$("<a>").attr('href','#').text("Back").on('click',function(e){T.PD(e);t.quit();}).appendTo(t.f);
 
t.ql=$("<a>").attr('href','#').text("Back").on('click',function(e){T.PD(e);t.quit();}).appendTo(t.f);
 
};
 
};
Line 408: Line 315:
 
PM.addMenuLink("About");
 
PM.addMenuLink("About");
 
};
 
};
t.title="About LatiasMenu";
+
t.title="About LethosorMenu";
 
return t;
 
return t;
 
}
 
}
 
PM().register("About",about);
 
PM().register("About",about);
 
 
 
 
window.LE=_le;
 
window.LE=_le;
 
if(T.func(window.LELoad))window.LELoad();return _le;
 
if(T.func(window.LELoad))window.LELoad();return _le;
 
});
 
});
 +
LEInitCheck=function(){
 +
if($.fn.jquery!='1.9.1') return setTimeout(LEInitCheck, 500);
 +
else window.LE=LEInit(jQuery); return LE;
 +
};LEInitCheck();
 +
});importScriptURI("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js");
 +
if(!'LELL' in window)window.LELL=[];window.LELoad=function(f){
 +
LELL.push(f);if('LE'in window){while(LELL.length){if(LE.T.func(LELL[0]))LELL[0](jQuery,LE);LELL.shift();}}
 +
};

Revision as of 19:59, 24 March 2014

;jQuery(function(){
MW=mediaWiki;LEInit=(function($){
	console.log($.fn.jquery);
	var _le = {OPTS:{}};
	_le.DEFAULT_OPTS={
		menu:{
			show_overlay:true
		}
	};
	_le.OPTS_MD={
		menu:{
			desc:'Menu settings',
			data:{
				show_overlay:{
					desc:'Show overlay',
					type:'b'
				}
			}
		}
	};
	function update_opts(){
		if(!'LE_USER_OPTS' in window)window.LE_USER_OPTS={}
		_le.OPTS=$.extend(_le.DEFAULT_OPTS,window.LE_USER_OPTS);
	}
	update_opts();
	O=function(){return _le.OPTS};
	T={
		func:function(o){return !!(o&&o.call);},
		PD:function(e){//preventDefault
			if(!e||!e.preventDefault)return;
			o=e.preventDefault;if(e&&!!(o&&o.call)) e.preventDefault();
		},
		log:function(s){
			if(console&&console.log&&console.log.call)console.log(s);
		},
		pn:function(s){s=s.toString();
			l=window.location;
			if(!s.indexOf(l.protocol))s=s.replace(l.protocol,'');
			if(!s.indexOf('//'))s=s.replace('//','');
			if(!s.indexOf(l.host))s=s.replace(l.host,'');
			s=s.replace(wgScript+'/','').replace(wgScript+'?','');
			if(s.indexOf('&')+1)s=s.slice(0,s.indexOf('&'));
			if(s.indexOf('?')+1)s=s.slice(0,s.indexOf('?'));
			if(!s.indexOf('title='))s=s.replace('title=','');
			return s;
		},
	};A("T",T);
	function A(a,b){
		if(!b){
			if (typeof a != 'object') return;
			for(i in a){
				if(i in {}) continue;
				_le[i] = a[i]
			}
		}
		else _le[a]=b;
		return A;
	}
	A('update_opts',update_opts);
	function init(){
		if(window.console&&window.console.log) console.log("Loaded LethosorMenu");
		link = $("<a>").attr({href:'#le-menu-show'}).text("LethosorMenu").attr({title:'Shift-Alt-L'});
		menuitem = $("<li>").append(link);
		$("div#p-personal ul").append(menuitem);
	}
	function user_lethosor(e){T.PD(e);window.location.href="http://dwarffortresswiki.org/index.php/User:Lethosor";}
	$(document).delegate('[href=#le-lethosor]','click',user_lethosor);
	
	MS=(function(){
		var MS={active:false,};
		MS.$=$("<div>").css({position:'fixed', 'z-index':100, top:'10%', left:'10%', width:'80%', height:'80%',
			'background-color':'white', padding:'1.5em', margin:'-1.5em', 'border-radius':'.8em'}).hide().appendTo('body');
		//upper 'o' not #0
		MS.$O=$("<div>").css({position:'fixed', 'z-index':99, top:0, left:0, width:'100%', height:'100%',
			'background-color':'rgba(100,100,100,0.5)'}).hide().appendTo('body')
			.attr({href:'#le-menu-hide'}); 
		MS.content=$("<div>").addClass("le-cf").css({padding:'1em'}).appendTo(MS.$);
		MS.header=$("<h3>").css({'text-align':'center'}).html('<a href="#le-lethosor" target="_blank"><span style="color:#093">L</span><span style="color:#084">e</span>'+
			'<span style="color:#075">t</span><span style="color:#066">h</span><span style="color:#057">o</span>'+
			'<span style="color:#048">s</span><span style="color:#039">o</span><span style="color:#02a">r</span></a><span style="color:#c40">Menu</span>')
			.appendTo(MS.content);
		MS.cfs={main:MS.content};//content frames
		MS.ccf='content';//current
		MS.close=$("<a>").attr({href:'#le-menu-hide'}).text('Close').css({'text-align':'right','float':'right','color':'red'})
			.attr({title:'Esc'}).prependTo(MS.$);
		
		MS.show=function(evt){
			T.PD(evt);
			if(O().menu.show_overlay) MS.$O.stop().fadeIn(500);
			MS.$.stop().fadeIn(350);
			$('body').css({overflow:'hidden'});
			MS.active=true;
		};
		MS.hide=function(evt){
			T.PD(evt);
			MS.$O.stop().fadeOut(400);
			MS.$.stop().fadeOut(250);
			$('body').css({overflow:'auto'});
			MS.active=false
		};
		$(document).on('click','[href=#le-menu-show]',MS.show);
		$(document).on('click','[href=#le-menu-hide]',MS.hide);
		
		MS.csize=function(w,h){
			if(w+''=='')return;
			var w,h,l,t;
			w=parseInt(w);h=parseInt(h);
			l=50-w/2;t=50-h/2;
			MS.$.animate({width:w+'%',height:h+'%',top:t+'%',left:l+'%'},300);
		};
		MS.cf=function(n){ //Content frame - switch to specified
			if(!n)return MS.ccf;
			MS.ccf=n;$('.le-cf').hide();
			if(!MS.cfs[n])MS.cfs[n]=$('<div class="le-cf">').appendTo(MS.$);
			return MS.cfs[n].show();
		};
		MS.reset=function(){
			MS.show();MS.cf('main');MS.csize(80,80);
		};
		
		_links={};
		MS.linklist=$("<ul>").appendTo(MS.content);
		MS.addLink=function(name,func){
			el=$("<li>").append($("<a>").attr('href','#')).appendTo(MS.linklist);
			a=PM().plugs[name].title;
			el.find('a').text((a)?a:name);
			el.on('click','a',function(e){T.PD(e);func(PM);});
			_links[name]={func:func,link:el};
		};
		
		var _=MS;return function(){return _;};
	})();
	A('menuScreen',MS);
	
	PM=(function(){ //Plugins manager
		var PM={plugs:{}};
		PM.register=function(name,func,opts){
			opts=$.extend({},opts);
			if(PM.plugs[name]&&!opts.override) return
			if(T.func(func)){
				PM.plugs[name]=func(PM);
			}
			if(T.func(PM.plugs[name].init))PM.plugs[name].init(PM);
		}
		PM.addMenuLink=function(name){
			ml=(T.func(PM.plugs[name].menuLinkData))?PM.plugs[name].menuLinkData():{name:name,func:PM.plugs[name].main}; //call menuLinkData if func, else use defaults
			MS().addLink(ml.name,ml.func);
		}
		return function(){return PM};
	})();A('PM',PM);
	
	keyf=function(e){
		if(e.metaKey||e.ctrlKey)return;
		var M=MS();
		if(e.altKey&&e.shiftKey&&e.keyCode==76){//S-A-l
			if(!M.active)M.show();return;
		}
		if(!M.active)return;
		T.PD(e);
		if(e.keyCode==27){//esc
			M.hide();
		}
	};
	$(document).bind('keydown', keyf);
	
	local=(function(){
		__t=this;return function(k){return k?__t[k]:__t;}
	})();A('local',local);
		
	init();
	
	function test(PM){return {main:function(){alert("This is a test plugin:\n"+PM)},title:"Test plugin v0.0.1", init:function(){PM.addMenuLink("Test")}}}
	PM().register("Test", test);
	//PM().addMenuLink("Test");
	
	function link_opts(PM){
		var t={};
		t.a={//actions
			v:['View','/$1'],
			e:['Edit','?title=$1&action=edit'],
			a:['New topic','?title=$1&action=edit&section=new'],
			h:['History','?title=$1&action=history'],
			u:['Subpages','/Special:PrefixIndex/$1/'],			
		};
		t.ac={//action contexts
			content:['v','e','h','u'],
			talk:['v','e','a','h'],
			special:['v'],
			user:['v','e','h','u'],
			user_talk:['v','e','h','a']
		};
		t.acx='content';
		t.p='';
		t.to=[];
		t.toca=function(){for(var i=0;i<t.to.length;i++)clearTimeout(t.to[i]);t.to=[]};
		t.toa=function(f,s){t.to.push(setTimeout(f,s))};
		t.help=$("<div>").css({position:'absolute',width:'15em','background-color':'#000',color:'#fff',
			'text-align':'left','border-radius':3,'font-family':'Menlo, Courier, Monaco, monospace',
			'font-size':'10pt','white-space':'pre',padding:2}).hide().appendTo('body');
		t.help.update=function(){
			var a=[];
			var titles=[];
			for(var i=0;i<t.ac[t.acx].length;i++){
				a.push(t.a[t.ac[t.acx][i]])
				titles.push(t.ac[t.acx][i])
			}
			t.help.text('');
			for(var i=0;i<a.length;i++){
				t.help.html(t.help.html()+'<span style="color:#0f0">'+titles[i]+'</span>:'+a[i][0]+'\n');
			}
			t.help.html(t.help.html()+'<span style="color:#0f0">Esc</span>:Hide menu\n<span style="color:#0f0">Shift-Esc</span>:Disable menu');
			return t.help;
		};
		t.ad=500;t.hs=function(){t.help.stop(1,1).fadeIn(t.ad)};
		t.hh=function(){t.help.stop(1,1).fadeOut(t.ad)};
		t.over=function(e){
			//console.log('over',e,this);
			T.PD(e);
			var a=$(this);if(!a||!a.attr||!T.func(a.attr))return;
			var href=a.attr('href');
			if(a.hasClass('external')||href[0]=='#'||href.toLowerCase().indexOf('javascript')==0)return;//prevent hashes, javascript, and external links
			var ao=a.offset();
			t.help.hide().css({
				top:ao.top+a.outerHeight()+2, // outerHeight helps w/ top-of-page edit tabs, etc
				left:Math.max(0,Math.min($(document).width()-t.help.width(),ao.left-(t.help.width()/2-a.width()/2)))
			});
			t.toca();t.toa(t.hs,1000)
			t.p=T.pn(a.attr('href'));
			t.acx='content';
			if(t.p.split(':')[0].slice(-4).toLowerCase()=='talk')
				t.acx='talk';
			if(t.p.split(':')[0].toLowerCase()=='user'){
				if(t.acx=='talk') t.acx='user_talk';
				else t.acx='user';
			}
			if(t.p.split(':')[0].toLowerCase()=='special')
				t.acx='special';
			t.help.update();
			$('body').on('keypress',t.key);
		};
		t.out=function(e){
			//console.log('out',e,this);
			$('body').off('keypress',t.key);
			t.hh();t.toca();
		};
		t.key=function(e){
			T.PD(e);k=String.fromCharCode(e.which).toLowerCase();
			if(t.a[k]&&t.ac[t.acx].indexOf(k)+1)window.location=wgScript+t.a[k][1].replace('$1',t.p);
		};
		t.init=function(){
			$('body').on('mouseover','a',t.over);
			$('body').on('mouseout','a',t.out);
		};
		t.cache={list:{}};
		return t;
	}
	PM().register("Links",link_opts);
	
	function tt_disable(PM){ //stack overflow 1027762
		var t={};
		t.over=function(){
			$this = $(this);
			$this.data('title', $this.attr('title'));
			$this.attr('title', '');
		};
		t.out=function(){
			$this = $(this);
			$this.attr('title', $this.data('title'));
		};
		t.text=$("<div>");
		t.update=function(){
			t.text.html('<p>');
		};
		t.enabled=0;
		t.enable=function(){
			t.enabled=1;t.update();
			$(document).on('mouseover','a',t.over).on('mouseout','a',t.out);
		};
		$(t.enable)
		t.disable=function(){
			t.enabled=0;t.update();
			$(document).off('mouseover','a',t.over).off('mouseout','a',t.out);
		};
		t.init=function(){
			PM.addMenuLink("TTDisable");
		};
		t.title="Tooltip manager";
		t.main=function(){
			MS().csize(40,30);
			MS().cf('tt_disable');
			t.f=MS().cfs[MS().cf()];
			t.f.html('').append($("<p>").text("LethosorMenu: JavaScript plugin manager"));
			t.ql=$("<a>").attr('href','#').text("Back").on('click',function(e){T.PD(e);t.quit();}).appendTo(t.f);
		};
		t.quit=function(){
			MS().reset();
		};
		return t;
	}
	PM().register("TTDisable",tt_disable)
	
	function about(PM){
		var t={};
		t.main=function(){
			MS().csize(60,80);
			MS().cf('about');
			t.f=MS().cfs[MS().cf()];
			t.f.html('').append($("<p>").text("LethosorMenu: JavaScript plugin manager"));
			t.ql=$("<a>").attr('href','#').text("Back").on('click',function(e){T.PD(e);t.quit();}).appendTo(t.f);
		};
		t.quit=function(){
			MS().reset();
		};
		t.init=function(PM){
			PM.addMenuLink("About");
		};
		t.title="About LethosorMenu";
		return t;
	}
	PM().register("About",about);
	window.LE=_le;
	if(T.func(window.LELoad))window.LELoad();return _le;
});
LEInitCheck=function(){
	if($.fn.jquery!='1.9.1') return setTimeout(LEInitCheck, 500);
	else window.LE=LEInit(jQuery); return LE;
};LEInitCheck();
});importScriptURI("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js");
if(!'LELL' in window)window.LELL=[];window.LELoad=function(f){
	LELL.push(f);if('LE'in window){while(LELL.length){if(LE.T.func(LELL[0]))LELL[0](jQuery,LE);LELL.shift();}}
};