User:Pbarnes/myskin.js

/** * jQuery cookie plugin * Copyright (c) 2006 Klaus Hartl (stilbuero.de) * Dual licensed under the MIT and GPL licenses: */

jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value=;options.expires=-1}var expires=;if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date;date.setTime(date.getTime+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString}var path=options.path?'; path='+options.path:;var domain=options.domain?'; domain='+options.domain:;var secure=options.secure?'; secure':;document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join()}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};

/*** * Auto-complete: http://en.wikipedia.org/wiki/User:Zocky/AutoComplete.js * Link to stylesheet removed and integrated into myskin.css */

String.prototype.parseJSON=function{try{return!(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(this.replace(/"(\\.|[^"\\])*"/g,)))&&eval('('+this+')')}catch(e){return false}};function ac$query(cb,what){if(ac$query.arguments.length>1&&ac$x){var i=2;var url="/w/query.php?format=json&what="+what;while(i<ac$query.arguments.length){url=url+"&"+ac$query.arguments[i]+"="+ac$query.arguments[i+1];i+=2}ac$x.onreadystatechange=function{if(ac$x.readyState==4)return ac$x.status==200?cb(ac$x.responseText.parseJSON):cb(false)};ac$x.open("GET",url,true);ac$x.setRequestHeader('Accept','text/*');ac$x.send(null)}else return false}function ac$$e(id){return document.getElementById(id)}function ac$$c(name,id){var el=document.createElement(name);el.id=id;return el};function ac$$ia(node,newnode){return node.parentNode.insertBefore(newnode,node.nextSibling)}function ac$$uc(s){return s.substring(0,1).toUpperCase+s.substring(1)};function ac$inputKeyDown(e){if(e.which==40&&ac$b.style.visibility=="visible"){ac$b.focus}else{try{clearTimeout(ac$t)}catch(e){};ac$t=setTimeout("ac$timeOut",500)}}function ac$boxKeyPress(e){if(e.which==13){ac$s.value=ac$b.options[ac$b.selectedIndex].value;ac$b.style.visibility="hidden";ac$b.selectedIndex=-1;ac$s.focus}else if(e.which==27){ac$b.style.visibility="hidden";ac$b.selectedIndex=-1;ac$s.focus}else if(e.which){ac$s.value+=String.fromCharCode(e.which);ac$s.focus;ac$b.selectedIndex=-1;ac$s.selectionStart=ac$s.selectionEnd=ac$s.value.length;try{clearTimeout(ac$t)}catch(e){};ac$t=setTimeout("ac$timeOut",500)}}function ac$boxClick(e){ac$s.value=ac$b.options[ac$b.selectedIndex].value;ac$b.style.visibility="hidden";ac$b.selectedIndex=-1;ac$s.focus}function ac$blur(e){if(e.target==ac$b){if(ac$b.style.visibility=="hidden")ac$b.blur}else if(e.target!=ac$s&&e.target!=document&&e.target!=window){ac$b.style.visibility="hidden";ac$b.selectedIndex=-1}}function ac$timeOut{if(ac$s.value.length>0){try{ac$x.abort}catch(e){};cb=function(obj){ac$b.innerHTML=;for(var i in obj.meta.namespaces){try{var ns=obj.meta.namespaces[i]['*'];ac$n[ns]=i;if(ac$s.value.toUpperCase==ns.substring(0,ac$s.value.length).toUpperCase){ac$b.innerHTML+=''+ns+': '}}catch(e){}}for(var i in obj.pages){if(ac$s.value.toUpperCase==obj.pages[i].title.substring(0,ac$s.value.length).toUpperCase)ac$b.innerHTML+=(obj.pages[i].redirect!=""?' ':'')+obj.pages[i].title+' '}ac$b.options.length||(ac$b.innerHTML='(no pages found) ');ac$b.style.visibility="visible"};var ns=ac$s.value.match(/^.*?(?=:)/);if(ns in ac$n){var apns=ac$n[ns];var apfrom=ac$s.value.replace(/^.*?:/,'')}else{var apns=0;var apfrom=ac$s.value}ac$query(cb,"allpages|namespaces","apfrom",ac$$uc(apfrom.replace(/ /g,'_')),"aplimit","50","apnamespace",apns)}else{ac$b.style.visibility="hidden"}}var ac$s;var ac$b;var ac$t;var ac$n=[];var ac$x=window.XMLHttpRequest?new XMLHttpRequest:window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):false;function ac$init{ac$s=ac$$e("searchInput");if(ac$s){ac$b=ac$$c('select','autocompletebox');ac$b.size=8;ac$b.style.visibility="hidden";ac$$ia(ac$s,ac$b);ac$s.setAttribute('autocomplete','off');ac$s.addEventListener('keydown',ac$inputKeyDown,true);ac$b.addEventListener('keypress',ac$boxKeyPress,true);ac$b.addEventListener('click',ac$boxClick,true);document.addEventListener('focus',ac$blur,true)}}addOnloadHook(ac$init);

/*** * Own code starts here */

$(document).ready(function{ /*** * Reorganize the content */

$("#column-one").prependTo("body"); // Switch the columns

$("body").prepend("Wikipedia, the free encyclopedia "); // Add a new header

$("#column-one").prepend(" Wikipedia: "); $("#p-tb").before(" This page: "); // Add explanations for the menu $("#p-interaction h5").replaceWith(" Interaction "); // interaction -> Interaction

$("#column-content").prepend(" "); // Add the sidebar $("#p-personal").prependTo("#sidebar"); // Add the personal menu to the sidebar $("#p-search").prependTo("#sidebar"); // Add the search to the sidebar $("#p-cactions").prependTo("#sidebar"); // Add the view menu to the sidebar $("#column-content").append(" "); // Clear the float of the sidebar

$("#p-personal").after(" Toolbox  "); $("#t-upload").appendTo("#p-tb2 ul"); $("#t-specialpages").appendTo("#p-tb2 ul");

$("#p-logo").remove; // Remove the old logo $("#p-cactions > h5").remove; // Remove the views header $("#p-search > h5").remove; // Remove the search header

/*** * Making the top drop-down menu */

$("#column-one .portlet").hover(	function {		$(this).find(".pBody").fadeIn;	},	function  {		$(this).find(".pBody").fadeOut;	} );

/*** * If two adjacent items in the sidebar are selected, assign new classes for styling */

$("li.selected + li.selected").prev.addClass("selected-first"); $("li.selected + li.selected").addClass("selected-second");

/*** * Favorites */

$("#p-cactions ul").append("Add to favorites"); // Add the link to the views menu $("#p-search").after(" Favorites <ul></ul> "); // Add the portlet to the sidebar /* * A function to make list items and links for favorites */

function makeFavoriteLink(pageTitle, pageLink) { var pageTitle = (pageTitle == null) ? wgTitle : pageTitle; // Default pageTitle is the current page title var pageLink = (pageLink == null) ? wgScript + "?title=" + encodeURIComponent(mw.config.get('wgPageName')) : pageLink; // Default link is the current page link return "<li class=\"favorite\"><a href=\"" + pageLink + "\">" + pageTitle + "</a> <a href=\"#\" class=\"remove-favorite\"><img src=\"http://home.planet.nl/~merri033/delete.png\" alt=\"-\" /></a></li>"; }

/* * A function to remove the favorite from the sidebar and also from the cookie */

function removeFavorite(pageTitle, removeLink) { removeLink.parent.remove; // Remove the link from the sidebar

if($("#p-favorites ul").is(":empty")) { // If there are no more favorites... $("#p-favorites ul").append("<li id=\"no-favorites\">No favorites</li>"); }

var favorites = $.cookie('wikipedia-favorites').split("\n"); // All the cookie lines in a variable var cookie = ''; // Now we add all the lines back to the cookie, except the one we want removed for(var i = 0; i < (favorites.length - 1); i++) { // -1 because we don't want the last line if(favorites[i].split("|")[0] != pageTitle) { cookie += (favorites[i] + "\n"); }	}	$.cookie('wikipedia-favorites', cookie, { expires: 30 }); }

/* * Add favorites that were already in the cookie */

if(!$.cookie('wikipedia-favorites') || $.cookie('wikipedia-favorites') == '') { $("#p-favorites ul").append("<li id=\"no-favorites\">No favorites</li>"); // There is no cookie } else { var favorites = $.cookie('wikipedia-favorites').split("\n"); for(var i = 0; i < (favorites.length - 1); i++) { // -1 because we don't want the last line $("#p-favorites ul").append(makeFavoriteLink(favorites[i].split("|")[0],favorites[i].split("|")[1])); // Make links of the cookie }	$("a.remove-favorite").click(function { // The remove links of the cookie favorites are enabled		removeFavorite($(this).prev.text,$(this));		return false; // So the page doesn't scroll to the top	}); }

/* * A favorite is added... */

$("#ca-favorites a").click(function {	$("#no-favorites").remove; // Remove the 'no favorites' text (if it is there)

var j = 0; if($.cookie('wikipedia-favorites')) { // If there is a cookie... var favorites = $.cookie('wikipedia-favorites').split("\n"); for(var i = 0; i < (favorites.length - 1); i++) { // -1 because we don't want the last line if(favorites[i].split("|")[0] == wgTitle) { j++; // If the page is already in the cookie, and thus a favorite, j becomes greater than 0 }		}	}	if(j == 0) { // If j > 0 then the page was already a favorite $("#p-favorites ul").append(makeFavoriteLink); // Add the page to the list, no arguments for makeFavoriteLink because the defaults are used $.cookie('wikipedia-favorites', (($.cookie('wikipedia-favorites')) ? $.cookie('wikipedia-favorites') : '') + wgTitle + '|' + wgScript + "?title=" + encodeURIComponent(mw.config.get('wgPageName')) + "\n", { expires: 30 }); // Add the link to the cookie $("a.remove-favorite").click(function { // Call this event again because new links were added			removeFavorite($(this).prev.text,$(this));			return false; // So the page doesn't scroll to the top		}); }	return false; });

/*** * Making the sidebar portlets tools collapsible */

$("#sidebar .portlet h5").append(" [<a href=\"#\">-</a><a href=\"#\" style=\"display: none\">+</a>]"); $("#sidebar .portlet h5 a").click(function {	$(this).parent.next.slideToggle;	$(this).siblings.addBack.toggle;	return false; });

});