MediaWiki:Common.js

From Industrial-Craft-Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* 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");
}