User:Jack Phoenix/CSS

ShoutWiki — express yourself and be heard!
Jump to navigation Jump to search

Here are some assorted CSS and JS tips and tricks.

Collapsible portlets[edit | edit source]

A cool hack developed by Splarka. Works only on Monobook skin. To install it to your wiki, add the following to the appropriate pages:

MediaWiki:Common.css[edit | edit source]

/* collapsible portlets by Splarka */
h5.portletCollapsible {
	display: block;
	padding: 0;
	height: auto;
	border: 1px outset grey;
}
.portletCollapsible a {
	padding: 1px 1px .2em 15px;
	display: block;
	text-decoration: none;
	color: black;
}
.portletClosed {
	background: center left url("/skins/common/images/Arr_d.png") no-repeat;
}
.portletOpened {
	background: center left url("/skins/common/images/Arr_u.png") no-repeat;
}

MediaWiki:Common.js[edit | edit source]

// ============================================================
//	Collapsible Portlets (experimental)
// 	By Splarka (http://en.wikipedia.org/wiki/User:Splarka)
// ============================================================
function foldingPortlets() {
	var portlets = getElementsByClassName( document.getElementById( 'column-one' ), 'div', 'portlet' );
	var portskip = ['p-personal', 'p-cactions', 'p-logo', 'p-search', 'p-tb', 'p-messages'];
	var first = true;

	for( var i = 0; i < portlets.length; i++ ) {
		if( portskip.join( ' ' ).indexOf( portlets[i].id ) == -1 ) {
			var pd = portlets[i].getElementsByTagName( 'div' )[0];
			var ph = portlets[i].getElementsByTagName( 'h5' )[0];
			ph.className = 'portletCollapsible';
			pd.setAttribute( 'id', 'pbody-' + i );
			pd.style.display = 'none';

			var link = document.createElement( 'a' );
			var head = getAllText( ph );
			while( ph.firstChild ) {
				ph.removeChild( ph.firstChild );
			}
			link.appendChild( document.createTextNode( head ) );
			link.setAttribute( 'href', 'javascript:showPortlet(\'' + i + '\');' );
			link.setAttribute( 'id', 'plink-' + i );
			link.className = 'portletClosed';
			ph.appendChild( link );

			if( first == true ) {
				first = false; 
				showPortlet( i );
			}
		}
	}
}
if( skin = 'monobook' && !window.portletsNormal ) {
	addOnloadHook( foldingPortlets );
}

function getAllText( thing ) {
	if( thing.nodeType == 3 ) {
		return thing.nodeValue;
	}
	var text = new Array();
	var i = 0;
	while( thing.childNodes[i] ) {
		text[text.length] = getAllText( thing.childNodes[i] );
		i++;
	}
	return text.join( '' );
}

function showPortlet( id ) {
	var pd = document.getElementById( 'pbody-' + id );
	var pl = document.getElementById( 'plink-' + id );

	if( pd.style.display == 'none' ) {
		pd.style.display = 'block';
		pl.className = 'portletOpened';
	} else {
		pd.style.display = 'none';
		pl.className = 'portletClosed';
	}
}

// ==================================================
//	End Collapsible Portlets
// ==================================================

Dynamic topics[edit | edit source]

Yet another useful hack by Splarka. To install it to your wiki, add the following to the appropriate pages:

MediaWiki:Common.css[edit | edit source]

/* dynamic topic headers/styles */
#dynamictopicwrapper {
	padding: 2px;
	margin-top: 12px;
}
#dynamictopicwrapper h2 {
	border: 1px solid #cccccc;
	padding: 2px;
}
#dynamictopicwrapper .dynamictopic {
	border: 1px solid #cccccc;
	padding: 2px;
	margin-bottom: 6px;
}
#dynamictopicwrapper .dtshowlink {
	text-decoration: none;
}
#dynamictopicwrapper .dynamicstatus {
	padding-left: 10px;
	font-size: 75%;
}

MediaWiki:Common.js[edit | edit source]

// ================================================================================
//  START dynamic topics
// ================================================================================
var dsHide = '[hide]';
var dsShow = '[show]';
var dsShowOne = true;
var dsEnnumerate = true;
addOnloadHook( dynamicTopicsInit );
function dynamicTopicsInit() {
	if( !document.getElementById( 'dynamictopicwrapper' ) ) {
		return;
	}
	var dtw = document.getElementById( 'dynamictopicwrapper' );
	var out = document.getElementById( 'out' );
	var h2 = getElementsByClassName( dtw, 'span', 'mw-headline' );
	var dt = getElementsByClassName( dtw, 'div', 'dynamictopic' );
	if( h2.length == dt.length ) {
		for( var i = 0; i < h2.length; i++ ) {
			var txt = h2[i].cloneNode( true );
			removeNodes( h2[i] );
			var a = document.createElement( 'a' );
			a.setAttribute( 'href', 'javascript:dtShow(' + i + ',' + h2.length + ')' );
			a.setAttribute( 'class', 'dtshowlink' );
			a.appendChild( txt );
			var st = document.createElement( 'span' );
			st.setAttribute( 'id', 'ds_' + i );
			st.setAttribute( 'class', 'dynamicstatus' );
			st.appendChild( document.createTextNode( dsShow ) );
			a.appendChild( st );
			if( dsEnnumerate == true ) {
				h2[i].appendChild( document.createTextNode( i + 1 + '. ' ) );
			}
			h2[i].appendChild( a );
			dt[i].style.display = 'none';
			h2[i].id = 'dh_' + i;
			dt[i].id = 'dt_' + i;
		}
	}
}

function dtShow( num, total ) {
	if( document.getElementById( 'dt_' + num ).style.display == '' ) {
		document.getElementById( 'dt_' + num ).style.display = 'none';
		removeNodes( document.getElementById( 'ds_' + num ) );
		document.getElementById( 'ds_' + num ).appendChild( document.createTextNode( dsShow ) );
	} else {
		for( var i = 0; i < total; i++ ) {
			if( i == num ) {
				document.getElementById( 'dt_' + i ).style.display = '';
				removeNodes( document.getElementById( 'ds_' + i ) );
				document.getElementById( 'ds_' + i ).appendChild( document.createTextNode( dsHide ) );
			} else {
				if( dsShowOne == true ) {
					document.getElementById( 'dt_' + i ).style.display = 'none';
					removeNodes( document.getElementById( 'ds_' + i ) );
					document.getElementById( 'ds_' + i ).appendChild( document.createTextNode( dsShow ) );
				}
			}
		}
	}
}

function removeNodes( obj ) {
	while( obj.firstChild ) {
		obj.removeChild( obj.firstChild );
	}
}

// ================================================================================
//  END dynamic topics
// ================================================================================

Wikimania skin[edit | edit source]

Yet another modification to the popular Monobook skin. I didn't create this myself, but instead got it from Wikimania 2008 wiki. It was created by Danny B. for Wikimania wiki.

/* Wikimania colors Monobook remix by Danny B. */
/* Source: http://wikimania2008.wikimedia.org/wiki/MediaWiki:Monobook.css */

#content,
h1,
h2,
#catlinks,
#toc,
.toc,
.mw-warning,
.pBody,
#p-cactions li {
	border-color: #0082c0;
}

h1.firstHeading {
	color: #0082c0;
}

h2 {
	margin-top: .6em;
	padding: .2em .4em;
}

h3 {
	border-bottom: 1px solid #f30000;
	padding: .2em .4em;
}

hr {
	background-color: #0082c0;
	color: #0082c0;
}

fieldset,
#p-cactions li.selected {
	border-color: #f30000;
}

pre,
#footer {
	border-color: #aaa;
}

body {
	background-image: none;
}

.portlet a,
#p-personal li a,
#p-cactions li a,
#footer a {
	color: #333;
}

#bodyContent a {
	color: #006290;
}

#bodyContent a:visited {
	color: #7a4160;
}

#bodyContent a.new:visited {
	color: #7a0000;
}

#bodyContent a.new,
#p-personal a.new,
#p-cactions li.new a {
	color: #f30000;
}

#bodyContent a.extiw {
	color: #36b;
}