User:GreenHelmet/monobook.js

From Homestar Runner Wiki

Jump to: navigation, search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Mozilla / Firefox: hold down Shift while clicking Reload, or press Ctrl-Shift-R (Cmd-Shift-R on Apple Mac)
  • Safari: press Cmd-Option-E
  • IE: hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Konqueror: simply click the Reload button, or press F5
  • Opera users may need to completely clear their cache in Tools→Preferences.
function $(id) { return document.getElementById(id); }

function getElementsByClassName(cls) {
    var rc = new Array();
    var elms = document.getElementsByTagName("*");
    for(var i = 0; i < elms.length; i++) {
        if(elms[i].className.indexOf(" ") >= 0) {
            var classes = elms[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == cls)
                    rc.push(elms[i]);
            }
        }
        else if(elms[i].className == cls)
            rc.push(elms[i]);
    }
    return rc;
}

function add_event(el, type, handler) {
  if (typeof el.attachEvent != 'undefined') {
    el.attachEvent("on"+type, handler);
  } else if (typeof el.addEventListener != 'undefined') {
    el.addEventListener(type, handler, false);
  }
}

function add_hider_wrapper(el, ident, label) {

	if (ident == 'ghcontent') {
		el.innerHTML = '<a id="'+ident+'hiderlink">Hide '+ label +'</a>' +
		    '<div id="'+ident+'hider">' + el.innerHTML + '</div>';
		add_event(el, 'click', eval('toggle_'+ident+'_display'));
		$(ident + 'hider').style.display = 'block';
		$(ident + 'hiderlink').style.cursor = 'pointer';
	} else {
		el.innerHTML = '<a id="'+ident+'hiderlink">Show '+ label +'</a>' +
		    '<div id="'+ident+'hider">' + el.innerHTML + '</div>';
		add_event(el, 'click', eval('toggle_'+ident+'_display'));
		$(ident + 'hider').style.display = 'none';
		$(ident + 'hiderlink').style.cursor = 'pointer';
	}
}

function toggle_display(ident, label) {
	el = $(ident + 'hider');
	el_a = $(ident + 'hiderlink');
	if (el_a.innerHTML == 'Show '+label) {
		el.style.display = 'block';	
		el_a.innerHTML = 'Hide ' + label;
	} else {
		el.style.display = 'none';	
		el_a.innerHTML = 'Show ' + label;
	}
}

/* Recent Changes filter options form, toggle visibility */
function toggle_rcopt_display() { toggle_display('rcopt', 'Search Options'); }
function add_rcopt_hider() {
	var rcopts = getElementsByClassName('rcoptions');
	rcopt = rcopts[0];
	add_hider_wrapper(rcopt, 'rcopt', 'Search Options');
}

/* Site Notice */
function toggle_sitenotice_display() { toggle_display('sitenotice', 'Notice'); }
function add_sitenotice_hider() { add_hider_wrapper($('siteNotice'), 'sitenotice', 'Notice'); }

/* The links to my User page, tala, prefs, etc. */
function toggle_personal_display() { toggle_display('personal', 'Personal'); }
function add_personal_hider() { add_hider_wrapper($('p-personal'), 'personal', 'Personal'); }

/* Page actions (edit, talk, history, etc) */
function toggle_cactions_display() { toggle_display('cactions', 'Page Actions'); }
function add_cactions_hider() { add_hider_wrapper($('p-cactions'), 'cactions', 'Page Actions'); }

/* The all important search box */
function toggle_search_display() { toggle_display('search', 'Search'); }
function add_search_hider() { add_hider_wrapper($('p-search'), 'search', 'Search'); }

/* Main Page, The Stick, S:RC, etc. */
function toggle_nav_display() { toggle_display('nav', 'Nav'); }
function add_navigation_hider() { add_hider_wrapper($('p-navigation'), 'nav', 'Nav'); }

/* Toolbox */
function toggle_toolbox_display() { toggle_display('toolbox', 'Tools'); }
function add_toolbox_hider() { add_hider_wrapper($('p-tb'), 'toolbox', 'Tools'); }

/* External links */
function toggle_xlinks_display() { toggle_display('xlinks', 'Ext Links'); }
function add_xlinks_hider() { add_hider_wrapper($('p-externallinks'), 'xlinks', 'Ext Links'); }

/* Content */
function toggle_ghcontent_display() { toggle_display('ghcontent', 'Content'); }
function add_ghcontent_hider() { add_hider_wrapper($('content'), 'ghcontent', 'Content'); }

function init_greenhelmet() {

	/* Kill switch */
	if (window.location.search.indexOf('gh-override') > 0) 
		return;

	/* I hate to do user agent detection, but every other way I 
	   tried failed... so, just look for "mobile" in the UA and 
	   then do this stuff if it's there.
	   Also load if "gh-force-mobile" is put in the query string, 
	   for testing things in a desktop browser */
	if (navigator.userAgent.indexOf('Mobile') > 0 ||
	    window.location.search.indexOf('gh-force-mobile') > 0) {
		if(document.createStyleSheet) {
			document.createStyleSheet('http://www.hrwiki.org/index.php?title=User:GreenHelmet/handheld.css&action=raw&ctype=text/css');
		} else {
			var new_css = document.createElement('link');
			new_css.rel = 'stylesheet';
			new_css.href = 'http://www.hrwiki.org/index.php?title=User:GreenHelmet/handheld.css&action=raw&ctype=text/css';
			document.getElementsByTagName("head")[0].appendChild(new_css);
		}

		add_rcopt_hider();
		add_sitenotice_hider();
		add_personal_hider();
		add_cactions_hider();
		add_search_hider();
		add_navigation_hider();
		add_toolbox_hider();
		add_xlinks_hider();
		add_ghcontent_hider();
	}
}

add_event(window, 'load', init_greenhelmet);