MediaWiki:Common.js

From Industrial-Craft-Wiki
Jump to: navigation, search
/* Any JavaScript here will be loaded for all users on every page load. */
$( function() {
     var pops = function( elems ) {
         for (var i=0; i<elems.length; i++) {
             if ( !(' '+elems[i].className+' ').match( / pops / ) ) continue;
             var anchs = elems[i].getElementsByTagName('a');
             for (var j=0; j<anchs.length; j++) anchs[j].target = '_blank';
         }
     };
     var bc = document.getElementById('bodyContent');
     var tags = ['span', 'div', 'table', 'td', 'th'];
     for (var i=0; i<tags.length; i++) pops( bc.getElementsByTagName( tags[i] ) );
 } );


function ModifySidebar(action, section, name, link) {
    try {
        switch (section) {
          case "languages":
            var target = "p-lang";
            break;
          case "toolbox":
            var target = "p-tb";
            break;
          case "navigation":
            var target = "p-navigation";
            break;
          default:
            var target = "p-" + section;
            break;
        }
 
        if (action == "add") {
            var node = document.getElementById(target)
                               .getElementsByTagName('div')[0]
                               .getElementsByTagName('ul')[0];
 
            var aNode = document.createElement('a');
            var liNode = document.createElement('li');
 
            aNode.appendChild(document.createTextNode(name));
            aNode.setAttribute('href', link);
            liNode.appendChild(aNode);
            liNode.className='plainlinks';
            node.appendChild(liNode);
        }
 
        if (action == "remove") {
            var list = document.getElementById(target)
                               .getElementsByTagName('div')[0]
                               .getElementsByTagName('ul')[0];
 
            var listelements = list.getElementsByTagName('li');
 
            for (var i = 0; i < listelements.length; i++) {
                if (listelements[i].getElementsByTagName('a')[0].innerHTML == name ||
                    listelements[i].getElementsByTagName('a')[0].href == link) {
 
                    list.removeChild(listelements[i]);
                }
            }
        }
 
    } catch(e) {
      // lets just ignore what's happened
      return;
    }
}

$ ( function(){
	$( 'table.collapsible' ).each(function(i, tab){
        var head = $(tab).find( 'tr th' ).first();
		if (!head.length) return;
		head.css('cursor', 'pointer');
		var toggle = function(e){
			head.closest('tr').parent().children(':not(:first)').toggle();
		};
		head.click(toggle);
		if ($(tab).hasClass('collapsed')){
			toggle();
		}
    });
} );
 
function CustomizeModificationsOfSidebar() {
    //adds [[Special:CategoryTree]] to toolbox
    ModifySidebar("add", "tutorials", "First Steps", "http://wiki.industrial-craft.net/index.php?title=Tutorial:First_Steps");
    ModifySidebar("add", "tutorials", "Wiring", "http://wiki.industrial-craft.net/index.php?title=Tutorial:Wiring");
    ModifySidebar("add", "tutorials", "Nuclear Power", "http://wiki.industrial-craft.net/index.php?title=Tutorial:Nuclear_Power");
    //ModifySidebar("add", "tutorials", "Pirate's Guide to Industrial Craft", "http://wiki.industrial-craft.net/index.php?title=Tutorial:Pirate's Guide to Industrial Craft");
    ModifySidebar("add", "navigation", "Download", "http://wiki.industrial-craft.net/index.php?title=Download");
    ModifySidebar("add", "navigation", "Version History", "http://wiki.industrial-craft.net/index.php?title=Updates");
    ModifySidebar("add", "navigation", "Recipes & Resources", "http://wiki.industrial-craft.net/index.php?title=Recipes_and_Resources");
    ModifySidebar("add", "navigation", "Forum", "http://forum.industrial-craft.net/");
    ModifySidebar("add", "navigation", "Blog", "http://industrial-craft.net/");
    ModifySidebar("add", "navigation", "April Fool 2012", "http://wiki.industrial-craft.net/index.php?title=April_Fools_Joke_2012");
    //ModifySidebar("add", "navigation", "Mine4Dead", "http://wiki.industrial-craft.net/index.php?title=Mine4Dead:Main_Page");
    //ModifySidebar("add", "navigation", "MedievalCraft", "http://wiki.industrial-craft.net/index.php?title=MedievalCraft-Mod:Main_Page");
    ModifySidebar("add", "navigation", "AntiGriefer-Community", "http://wiki.industrial-craft.net/index.php?title=AntiGriefer-Community");
    ModifySidebar("add", "navigation", "Banners", "http://wiki.industrial-craft.net/index.php?title=Banner");
    ModifySidebar("add", "navigation", "Achievements", "http://wiki.industrial-craft.net/index.php?title=Achievements");
    ModifySidebar("remove", "toolbox", "Permanent Link", "http://wiki.industrial-craft.net/index.php/Main_Page&oldid=829");
}
$(CustomizeModificationsOfSidebar);

$(document).ready(function() {
    $('.animated-grids').each(function() {
        $(this).children().first().addClass('active');
    });
 
    setInterval(function() {
        $('.animated-grids').each(function() {
            var $current = $(this).children('.active');
 
            var $next = $current.nextAll(':not(.skip):first');
            if (!$next.length) {
                $next = $(this).children(':not(.skip):first');
            }
            $current.removeClass('active');
            $next.addClass('active');
        });
    }, 2000);
    
    
    $('.animated-text').each(function() {
        $(this).children().first().addClass('active');
    });
 
    setInterval(function() {
        $('.animated-text').each(function() {
            var $current = $(this).children('.active');
 
            var $next = $current.nextAll(':not(.skip):first');
            if (!$next.length) {
                $next = $(this).children(':not(.skip):first');
            }
            $current.removeClass('active');
            $next.addClass('active');
        });
    }, 5000);
});

/******************************************
 * Tooltip Generator                      *
 *****************************************/
$(function() { 
	var selector = '.tooltip, .a1';
	$('#tooltip-display').remove();
    var mc_tooltip = function() {
		// Check to see if we've already created the div
		if (!$('#tooltip-display').length) {
			$('body').append($('<div id="tooltip-display">')
				.hide());
		}
		return $('#tooltip-display');
	};
	$("body").on('mouseenter', selector, function(e) {
	        var $me = $(this);
	        // Make sure this isn't a link to upload a new file
	        if ($me.find('.new').length > 0) {
	        	// This isn't one we want to show a tooltip for
	        	return;
	        }
 
	        // Try to get the title
	        var title = $me.data('tooltip');
 
	        // See if we can find a title elsewhere
	        // Check this element or its child
	        if (title === undefined) {
	            title = $me.attr('title') || $me.children(':first').attr('title') || $me.find('img:first').attr('alt');
 
	            // Check if we found anything
	            if (title) {
	                // Save it for later
	                $me.data('tooltip', title);
	            }
	            else {
	                // Didn't find anything, no sense continuing
	                return;
	            }
	        }
 
	        // Remove any title elements to avoid the default tooltip
	        $me.add('*', $me).filter('[title]').removeAttr('title');
	        
	        //Old methods of turning \ into <br/>
			/*title = title.replace('Grid',"").replace('.png',"").replace("\\","<br/><span style=\"color: #AAAAAA;text-shadow: #2A2A2A 2px 2px 0px;display: block;margin-top: 0.25em;\">").trim() + "</span>";
			title = title.replace("\\","<br/><span style=\"color: #AAAAAA;text-shadow: #2A2A2A 2px 2px 0px;display: block;margin-top: 0.25em;\">").trim() + "</span>";*/
			var stitle = title.split("\\");
			title = stitle[0];
			if (stitle.length > 1) {
				title += "<br/>";
				for (var i = 1; i < stitle.length; i++) {
					title += "<span style=\"color: #AAAAAA;text-shadow: #2A2A2A 2px 2px 0px;display: block;margin-top: 0.25em;\">" + stitle[i].trim() + "</span>";
				}
			}
			
	        // Add the text to the tooltip
	        mc_tooltip().html(title.replace(/_/g, " "));
 
	        // Need to update the position to the cursor position
	        $me.trigger('mousemove', e);
	    })
		.on('mousemove', selector, function (e) {
	        // Check if the element exists already, create it if it doesn't
	        if (!$('#tooltip-display').length) {
	            $(this).trigger('mouseenter');
	            return;
	        }
 
	        // Get dimensions for bounds checking
	        var top = e.pageY - 30,
	            height = mc_tooltip().outerHeight(true),
	            left = e.pageX + 15,
	            width = mc_tooltip().outerWidth(true);
 
	        // Get window dimensions
	        var $w = $(window),
	            win_width = $w.width(),
	            win_height = $w.height();
 

			// If going off the right of the screen, go to the left of the cursor
			if ( left + width > win_width ) {
				left -= width + 36;
			}
 
			// If now going off to the left of the screen, resort to going above the cursor
			if ( left < 0 ) {
				left = 0;
				top -= height - 22;
				// Go below the cursor if too high
				if ( top < 0 ) {
					top += height + 47;
				}
				
			// Don't go off the top of the screen
			} else if ( top < 0 ) {
				top = 0;
			}/*
			// Don't go off the bottom of the screen
			} else if ( top + height > win_height ) {
				top = win_height - height;
			}*/
 
	        // Apply the position
	        mc_tooltip().css({
	            top: top,
	            left: left
	        }).show();
	    })
		.on('mouseleave', selector, function (e) {
	        mc_tooltip().hide();
	    });
});

/******************************************
 * Infobox Collapser                      *
 *****************************************/
$( ".infoboxBlockImage img" ).each( function() {
    var width = parseInt( $( this ).attr( "width" ), 10);
    if ( width > 240 ) {
        $( this ).attr( "height", "" );
        $( this ).attr( "width", "240" );
    }
});
 
$( ".infobox:not(.infoboxNoCollapse) td" ).each( function() {
    if (( $( this ).html().match( /{{{[^}]+}}}/ ) || $( this ).html() === "\n") && !$( this ).parent( "tr" ).hasClass( "infoboxSubsectionBreak")) {
        $( this ).parent( "tr" ).hide();
    }
});

// TODO: Make less dodgy
$( ".infobox:not(.infoboxNoCollapse) tr.infoboxSectionHeader" ).each( function() //.infobox:not(.infoboxNoCollapse) .infoboxSubsectionBreak, 
{
    var flag = true,
    next = $( this ).next();
    //console.log("\nNew Section\n");
    var line = false;
    var draw_line = null;
    while ( next && next !== undefined && next.html() !== undefined && !next.hasClass( "infoboxSectionHeader") ) // && !next.hasClass( "infoboxSubsectionBreak" ) &&
    {
		if (next.hasClass( "infoboxSubsectionBreak" )) {
			//console.log("Next Line Break:");
			//console.log(next);
			line = false;
			draw_line = next;
        }
        if ( next.css( "display" ) != "none" && !next.hasClass( "infoboxSubsectionBreak" ) ) {
        	//console.log("So this is making it shown");
        	//console.log(next);
        	//console.log(next.html());
            flag = false;
            line = true;
        }
        next = next.next();
    }
    if ( flag ) {
    	//console.log("Nothing made this section show");
        $( this ).hide();
    }
    if ( !line && draw_line !== null ) {
    	try{draw_line.style.display = "none";}catch(TypeError){} //I think it has issues with the first object
    }
});

if(wgPageName === "User:Chocohead/Sandpit") {
	importScript("User:Chocohead/Lift.js");
}