Googlifix

Fixes layout of Google if you don't like 2012 and 2013 changes. Brings back left column (sidebar) options, all expanded, black bar, etc.

// ==UserScript==
// @name        Googlifix
// @author      om467
// @namespace   com.googlifix
// @include     http://www.google.tld/search*
// @include     https://www.google.tld/search*
// @include     http://www.google.tld/webhp*
// @include     https://www.google.tld/webhp*
// @include     http://google.tld/search*
// @include     https://google.tld/search*
// @include     http://google.tld/webhp*
// @include     https://google.tld/webhp*
// @include     http://www.google.tld/
// @include     https://www.google.tld/
// @include     http://google.tld/
// @include     https://google.tld/
// @include     http://www.google.tld/#*
// @include     https://www.google.tld/#*
// @include     http://google.tld/#*
// @include     https://google.tld/#*
// @include     http://www.google.tld/?*
// @include     https://www.google.tld/?*
// @include     http://google.tld/?*
// @include     https://google.tld/?*
// @include     https://encrypted.google.com/search*
// @include     https://encrypted.google.com/webhp*
// @include     https://encrypted.google.com/
// @include     https://encrypted.google.com/#*
// @version     29
// @grant       GM_addStyle
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_xmlhttpRequest
// @description Fixes layout of Google if you don't like 2012 and 2013 changes. Brings back left column (sidebar) options, all expanded, black bar, etc.
// ==/UserScript==

(function ()
{
	// Constants
	var MUTATION_OBSERVER = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
	var SCRIPT_VERSION = 29;
	var UPDATE_CHECK_INTERVAL = 172800; // 2 days
	var UPDATE_CHECK_DELAY = 2000;

	// Styles
	GM_addStyle(" \
		/* left sidebar */ \
		#hdtbMenus {overflow:visible !important; display:block !important;} \
		#hdtbMenus > div > div {display:none;} \
		#hdtbMenus > div > ul {display:block !important; margin-top:15px; min-width:150px !important; width:180px; border:0px !important; box-shadow:none !important; left:10px !important; top:50px !important; position:relative !important;} \
		@media screen and (min-width: 1400px){ \
			#hdtbMenus > div > ul {width:250px;} \
		} \
		#sc-block {width:120px !important; white-space:normal !important; height:auto !important;} \
		#sc-block .sc {display:inline-block !important; float:none !important;} \
		.hdtbItm.hdtbSel, \
			#hdtb .hdtbItm a, \
			#hdtb_more_mn a, \
			#cdrlnk {text-overflow:ellipsis !important; overflow:hidden !important; padding-right:4px !important;} \
		\
		/* content */ \
		#main #cnt #center_col, \
			.ab_tnav_wrp, \
			.mw #center_col, \
			.mw #foot {margin-left:197px !important;} \
		@media screen and (min-width: 1400px){ \
			#main #cnt #center_col, \
				.ab_tnav_wrp, \
				.mw #center_col, \
				.mw #foot {margin-left:267px !important;} \
		} \
		.mw #rhscol {overflow:visible !important;} \
		html.com-googlifix #center_col {min-height:550px;} \
		html.com-googlifix.com-googlifix-domain #center_col, html.com-googlifix.com-googlifix-uilanguage #center_col {min-height:800px;} \
		html.com-googlifix.com-googlifix-domain.com-googlifix-uilanguage #center_col {min-height:1000px;} \
		\
		/* top bar with menu */ \
		#hdtb_msb > .hdtb_mitem:first-child, \
			#hdtb_msb > .hdtb_mitem.hdtb_msel:first-child {margin-left:210px !important;} \
		@media screen and (min-width: 1400px){ \
			#hdtb_msb > .hdtb_mitem:first-child, \
				#hdtb_msb > .hdtb_mitem.hdtb_msel:first-child {margin-left:280px !important;} \
		} \
		#hdtb_tls {display:none !important;} \
		#hdtb_more {display:none !important;} \
		#hdtb_more_mn {display:inline-block !important; top:0px; border:0px !important; box-shadow:none !important; background-color:transparent !important; height:54px; overflow:hidden; margin-right:15px; padding:0px; position:relative !important;} \
		#hdtb_more_mn div.hdtb_msb_hmi {display:inline-block;} \
		#hdtb_more_mn div.hdtb_mitem {float:left;} \
		#hdtb_more_mn > div.hdtb_mitem:last-child, \
			#hdtb_more_mn > div.hdtb_mitem:nth-last-child(2) {display:none !important;} \
		@media screen and (min-width: 1400px){ \
			#hdtb_more_mn > div.hdtb_mitem:last-child, \
				#hdtb_more_mn > div.hdtb_mitem:nth-last-child(2) {display:inline-block !important;} \
		} \
		#hdtb_more_mn div.hdtb_mitem > a {height:44px; line-height:44px; padding:0 8px !important; margin:0 8px; display:inline-block;} \
		#hdtb_more_mn div.hdtb_mitem > a.q.qs:hover {background-color:transparent; color:#222 !important;} \
		#hdtb_msb > div.hdtb_mitem, \
			#hdtb_more_mn {vertical-align:middle; height:44px; line-height:44px;} \
		li.hdtbItm input[type='text'] {max-width:60px;} \
		li.hdtbItm input[type='submit'] {max-width:60px;} \
		@media screen and (min-width: 1400px){ \
			li.hdtbItm input[type='text'] {max-width:initial;} \
			li.hdtbItm input[type='submit'] {max-width:initial;} \
		} \
		body.vasq #hdtb_msb > div.hdtb_mitem.hdtb_msel {height:44px;} \
		#hdtb #hdtbSum {height:49px; line-height:44px;} \
		#topabar {border-bottom:1px solid #EBEBEB !important;} \
		#tads {padding-right:0px !important;} \
		\
		/* right profile box */ \
		#rhs_block > div, \
			#rhs_block > li, \
			#rhs_block > ol {margin-left:65px !important;} \
		@media screen and (min-width: 1400px){ \
			#rhs_block > div, \
				#rhs_block > li, \
				#rhs_block > ol {margin-left:145px !important;} \
		} \
		\
		/* people also search */ \
		#botabar {margin-left:280px !important;} \
		\
		/* images search */ \
		#main #cnt {background-color:#fff;} \
		#isr_soa {width:99% !important;} \
		div.prcmg {border-color:transparent;} \
		div#ifbd {background-color:transparent;} \
		\
		/* images search detail */ \
		iframe.irc_ifr {width:100% !important;} \
		#irc_bg {left:213px !important;} \
		@media screen and (min-width: 1400px){ \
			#irc_bg {left:283px !important;} \
		} \
		div.irc_t {width:62% !important; overflow:hidden;} \
		div.irc_b {min-width:auto;} \
		div.irc_cpr {display:none;} \
		\
		/* search bar + logo + black bar */ \
		#gba {height:57px;} \
		#gb > div > #gbq1 {margin-left:80px !important; padding-right:0px;} \
		@media screen and (min-width: 1400px){ \
			#gb > div > #gbq1 {margin-left:150px !important;} \
		} \
		#gb.com-googlifix-blackbar-searchbar {top:30px;} \
		#com-googlifix-blackbar {background-color:#444; padding:0px; height:30px; width:auto;} \
		#com-googlifix-blackbar a { display:inline-block; height:30px; line-height:30px; cursor:pointer; margin:0px; padding:0px 10px; text-decoration:none; color:#fff; font-weight:bold;} \
		#com-googlifix-blackbar a:hover {background-color:#666;} \
		#gbwa {display:none;} \
		\
		/* settings button + account button */ \
		#ab_ctls {z-index:103 !important; padding-bottom:4px !important; padding-right:16px !important; right:0px !important; background-color:transparent !important;} \
		#gbu.gbu-low-res {left:890px !important; right:auto;} \
		\
		/* footer */ \
		#fbarcnt {max-height:40px;} \
		#fbarcnt > div {bottom:auto;} \
		div.fbar {min-width:300px; border-bottom:1px solid #E4E4E4;} \
		\
		/* update box */ \
		#com-googlifix-updatebox {z-index:10000; background-color:#FFFFFF; border:1px solid #C5C5C5; box-shadow:0px 4px 16px rgba(0, 0, 0, 0.2); padding:10px 20px; position:fixed; top:10px; right:100px; color:#dd4b39; font-size:14px; font-weight:bold; } \
	");
	
	// black bar
	var blackbarItems = document.querySelectorAll("#gbwa > :nth-child(2) > ul");
	if (blackbarItems.length > 0 && document.location.host != "encrypted.google.com")
	{
		// search bar
		document.querySelector("#gb").className += " com-googlifix-blackbar-searchbar";
		
		// blackbar wrapper
		var blackbarWrapper = document.createElement("div");
		blackbarWrapper.setAttribute("id", "com-googlifix-blackbar");
		document.querySelector("#mngb").insertBefore(blackbarWrapper, document.querySelector("#gb"));
		
		// service links
		var serviceLinks = document.querySelectorAll("#gbwa > :nth-child(2) li");
		for (var i = 0; i < serviceLinks.length; i++)
		{
			var link = serviceLinks[i];
			
			var blackbarLink = document.createElement("a");
			blackbarLink.innerHTML = link.querySelector("a > :nth-child(2)").innerHTML;
			blackbarLink.setAttribute("href", link.querySelector("a").getAttribute("href"));
			
			blackbarWrapper.appendChild(blackbarLink);
		}
		
		// more link
		var moreLink = document.querySelector("#gbwa > :nth-child(2) > a:nth-of-type(2)");
		moreLink.className = "";
		blackbarWrapper.appendChild(moreLink);
	}
	
	// Images - Results width fix
	if (document.location.search.indexOf("tbm=isch") != -1 || document.location.hash.indexOf("tbm=isch") != -1)
	{
		// content width
		var rgObserver = new MUTATION_OBSERVER(function(mutations)
		{
			// width
			mutations[0].target.style.width = parseInt(getComputedStyle(document.querySelector("#rso"), "").getPropertyValue("width")) + "px";

			// google recalculates everything on window resize, so we help him to know that there was a change by GM
			setTimeout(function()
			{
				var uiEvent = document.createEvent('UIEvents');
				uiEvent.initUIEvent('resize', true, false, window, 0);
				window.dispatchEvent(uiEvent);
			}, 1000);
			
			rgObserver.disconnect();
		});
		rgObserver.observe(document.querySelector("#rg"), { attributes: true, childList: false, attributeFilter: ["style"] });

		// image detail width
		var ircObserver = new MUTATION_OBSERVER(function(mutations)
		{
			for (var i = 0; i < mutations.length; i++)
			{
				if ((mutations[i].target.id || "") == "rcnt")
				{
					var ircc = document.querySelectorAll("div.irc_c");
					var rg = document.querySelector("#rg");
					if (ircc.length == 3 && rg != null)
					{
						var rgWidth = (parseInt(getComputedStyle(rg, null).getPropertyValue("width")) - 12) + "px";
						mutations[i].addedNodes[0].style.maxWidth = rgWidth;
						for (var k = 0; k < ircc.length; k++)
							ircc[k].style.maxWidth = rgWidth;
					}
					return;
				}
			}
		});
		ircObserver.observe(document.querySelector("#main"), { attributes: false, childList: true, subtree: true });
	}
	
	// Adds class to HTML element for compatibility reasons, so that other userscripts know about this userscript
	document.querySelector("html").className += " com-googlifix";
		
	// update check
	function openUpdateDialog()
	{
		var box = document.createElement("div");
		box.id = "com-googlifix-updatebox";
		box.innerHTML = "New version of Googlifix is available. <a href=\"http://userscripts.org/scripts/source/152777.user.js\" onclick=\"this.parentNode.style.display='none'\">Update now</a>.";
		document.querySelector("body").appendChild(box);
	}
	
	setTimeout(function()
	{
		var lastUpdateCheck = GM_getValue('lastCheck', 0);
		var lastCheckVersion = GM_getValue('lastCheckVersion', SCRIPT_VERSION);
		var now = Math.round(new Date().getTime() / 1000);
		
		if (now > (lastUpdateCheck + UPDATE_CHECK_INTERVAL))
		{
			GM_setValue('lastCheck', now);
			GM_xmlhttpRequest({
				method: "GET",
				url: "http://userscripts.org/scripts/source/152777.meta.js",
				onload: function(xhr)
				{
					var siteVersion = parseInt(xhr.responseText.match(/\/\/\s*@version\s*([\d]+).*/)[1]);
					GM_setValue('lastCheckVersion', siteVersion);
					if (siteVersion > SCRIPT_VERSION)
						openUpdateDialog();
				}
			});
		}
		else if (SCRIPT_VERSION < lastCheckVersion)
			openUpdateDialog();
	}, UPDATE_CHECK_DELAY);
})();