Tumblr Sidebr (Firefox)

By Caleb Leung Last update Jun 10, 2011 — Installed 72,185 times.

There are 5 previous versions of this script.

// ==UserScript==
// @name           Tumblr Sidebr
// @namespace      http://sidebr.tumblr.com/
// @description    Restores your default tumblelog's sidebar to the dashboard. 
// @version        2.0
// @include        http://*.tumblr.com/dashboard*
// @include        http://*.tumblr.com/tagged*
// ==/UserScript==

/*

(C) 2011 Caleb Leung
Use this freely under the GNU GPL, http://www.gnu.org/licenses/gpl.html

History
-------

2011-06-09 - Code overhaul. No longer depends on jQuery.
2011-06-09 - Added tumblelogNum to manually set which tumblelog's sidebar will be displayed
2011-06-08 - Cleaned up code. Created a stand-alone subdomain for sidebr. Added some help links including an FAQ.
2011-06-08 - Added a 'blank' sidebar while waiting for data to load into. (Thanks atesh for the idea ;) Using @require for Firefox to cache jQuery and the usual method to load for Chrome. Personally not a fan of embedding jQuery into the userscript.
2011-06-08 - Changed the way jQuery is loaded (using http://erikvold.com/blog/index.cfm/2010/6/14/using-jquery-with-a-user-script); Using this method (http://3a2d29.com/greasemonky-to-safari-5-replacing-gmxmlhttpre) for loading in the tumblelog in hopes that it'll work with Safari (and hopefully Opera too!). Tested and works fine with FX and Chrome.
2011-06-08 - Added an @include for /tagged; honestly don't know what pages were/should show the sidebar
2011-06-08 - Updated so jQuery will play nicer with pre-existing js libraries
2011-06-08 - The ID I was using didn't exist if you didn't have multiple tumblelogs
2011-06-08 - Created (jQuery code from http://joanpiedra.com/jquery/greasemonkey/)

*/
var tumblelogNum = 1;

function nextSibling(node) {
	do {
		node = node.nextSibling;
	} while (node && node.nodeType != 1) ;
	return node
}

function findTumblelog(tumblr, num)
{
	tumblr = tumblr.firstChild;
	do {
		tumblr = nextSibling(tumblr);
		if (num - 1 == 1) tumblr = tumblr.firstChild;
		num--;	
		
	} while (num >= 1);
	return tumblr;
}

function main() {

	var getTumblelog = document.getElementById("user_channels");
	
	if (tumblelogNum > 1) getTumblelog = findTumblelog(getTumblelog, tumblelogNum);
	else getTumblelog = nextSibling(getTumblelog.firstChild.firstChild);
	
	addy = getTumblelog;

	var container = document.createElement('ul');
	container.setAttribute('class', 'right_column_section');
	container.setAttribute('id', 'sidebr');
	container.innerHTML = '<li class="selected"> <a href="' + addy + '" class="posts"> <div class="hide_overflow">Posts</div> <span class="count"></span> </a> </li> <!-- Followers --> <li class=""> <a href="' + addy + '/followers" class="followers"> <div class="hide_overflow">Followers</div> <span class="count"></span> </a> </li> <!-- Messages --> <li class=""> <a href="' + addy + '/messages" class="messages"> <div class="hide_overflow">Messages</div> <span class="count"></span> </a> </li> <!-- Drafts --> <li class=""> <a href="' + addy + '/drafts" class="drafts"> <div class="hide_overflow">Drafts</div> </a> </li> <!-- Queue --> <li class=""> <a href="' + addy + '/queue" class="queue"> <div class="hide_overflow">Queue</div> <span class="count"></span> </a> </li>';
	
	rc = document.getElementById("right_column");
	rc.insertBefore(container, nextSibling(nextSibling(nextSibling(rc.firstChild))));
	
	var httpRequest = new XMLHttpRequest();
	 
		httpRequest.open('GET',addy,true);
		httpRequest.setRequestHeader("Method", "GET " + addy + " HTTP/1.1");
		httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		httpRequest.send(null);

	 httpRequest.onreadystatechange = function() {
		if(httpRequest.readyState == 4){
			var defaultTumb = httpRequest.responseText;
			var tumbPost = defaultTumb.search("\<!-- Posts --\>");
			var tumbMassEd = defaultTumb.search("\<!-- Launch Mass Post editor --\>");
			defaultTumb = defaultTumb.substring(tumbPost,tumbMassEd);
			document.getElementById("sidebr").innerHTML = defaultTumb;
		}
	}		
}
main();