MediaWiki:Common.js: Difference between revisions

Jump to navigation Jump to search
+Headquarter8302 custom CSS
m (+autostart=true)
(+Headquarter8302 custom CSS)
 
(28 intermediate revisions by the same user not shown)
Line 5: Line 5:
  * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
  * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
  * Dual licensed under the MIT and GPL licenses:
  * Dual licensed under the MIT and GPL licenses:
  * http://www.opensource.org/licenses/mit-license.php
  * https://opensource.org/licenses/mit-license.php
  * http://www.gnu.org/licenses/gpl.html
  * https://www.gnu.org/licenses/gpl.html
  */
  */
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};
/**
* jQuery lightBox plugin
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
* and adapted to me for use like a plugin from jQuery.
* @name jquery-lightbox-0.5.js
* @author Leandro Vieira Pinho - http://leandrovieira.com
* @version 0.5
* @date April 11, 2008
* @category jQuery plugin
* @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)
* @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
*/
(function($){$.fn.lightBox=function(settings){settings=jQuery.extend({overlayBgColor:'#000',overlayOpacity:0.8,fixedNavigation:false,imageLoading:'images/lightbox-ico-loading.gif',imageBtnPrev:'images/lightbox-btn-prev.gif',imageBtnNext:'images/lightbox-btn-next.gif',imageBtnClose:'images/lightbox-btn-close.gif',imageBlank:'images/lightbox-blank.gif',containerBorderSize:10,containerResizeSpeed:400,txtImage:'Image',txtOf:'of',keyToClose:'c',keyToPrev:'p',keyToNext:'n',imageArray:[],activeImage:0},settings);var jQueryMatchedObj=this;function _initialize(){_start(this,jQueryMatchedObj);return false;}
function _start(objClicked,jQueryMatchedObj){$('embed, object, select').css({'visibility':'hidden'});_set_interface();settings.imageArray.length=0;settings.activeImage=0;if(jQueryMatchedObj.length==1){settings.imageArray.push(new Array(objClicked.getAttribute('data-url'),objClicked.getAttribute('data-title')));}else{for(var i=0;i<jQueryMatchedObj.length;i++){settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('data-url'),jQueryMatchedObj[i].getAttribute('data-title')));}}
while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('data-url')){settings.activeImage++;}
_set_image_to_view();}
function _set_interface(){$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="'+settings.imageLoading+'"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="'+settings.imageBtnClose+'"></a></div></div></div></div>');var arrPageSizes=___getPageSize();$('#jquery-overlay').css({backgroundColor:settings.overlayBgColor,opacity:settings.overlayOpacity,width:arrPageSizes[0],height:arrPageSizes[1]}).fadeIn();var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]}).show();$('#jquery-overlay,#jquery-lightbox').click(function(){_finish();});$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function(){_finish();return false;});$(window).resize(function(){var arrPageSizes=___getPageSize();$('#jquery-overlay').css({width:arrPageSizes[0],height:arrPageSizes[1]});var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]});});}
function _set_image_to_view(){$('#lightbox-loading').show();if(settings.fixedNavigation){$('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();}else{$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();}
var objImagePreloader=new Image();objImagePreloader.onload=function(){$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);objImagePreloader.onload=function(){};};objImagePreloader.src=settings.imageArray[settings.activeImage][0];};function _resize_container_image_box(intImageWidth,intImageHeight){var intCurrentWidth=$('#lightbox-container-image-box').width();var intCurrentHeight=$('#lightbox-container-image-box').height();var intWidth=(intImageWidth+(settings.containerBorderSize*2));var intHeight=(intImageHeight+(settings.containerBorderSize*2));var intDiffW=intCurrentWidth-intWidth;var intDiffH=intCurrentHeight-intHeight;$('#lightbox-container-image-box').animate({width:intWidth,height:intHeight},settings.containerResizeSpeed,function(){_show_image();});if((intDiffW==0)&&(intDiffH==0)){if($.browser.msie){___pause(250);}else{___pause(100);}}
$('#lightbox-container-image-data-box').css({width:intImageWidth});$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({height:intImageHeight+(settings.containerBorderSize*2)});};function _show_image(){$('#lightbox-loading').hide();$('#lightbox-image').fadeIn(function(){_show_image_data();_set_navigation();});_preload_neighbor_images();};function _show_image_data(){$('#lightbox-container-image-data-box').slideDown('fast');$('#lightbox-image-details-caption').hide();if(settings.imageArray[settings.activeImage][1]){$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();}
if(settings.imageArray.length>1){$('#lightbox-image-details-currentNumber').html(settings.txtImage+' '+(settings.activeImage+1)+' '+settings.txtOf+' '+settings.imageArray.length).show();}}
function _set_navigation(){$('#lightbox-nav').show();$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({'background':'transparent url('+settings.imageBlank+') no-repeat'});if(settings.activeImage!=0){if(settings.fixedNavigation){$('#lightbox-nav-btnPrev').css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnPrev').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}}
if(settings.activeImage!=(settings.imageArray.length-1)){if(settings.fixedNavigation){$('#lightbox-nav-btnNext').css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnNext').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}}
_enable_keyboard_navigation();}
function _enable_keyboard_navigation(){$(document).keydown(function(objEvent){_keyboard_action(objEvent);});}
function _disable_keyboard_navigation(){$(document).unbind();}
function _keyboard_action(objEvent){if(objEvent==null){keycode=event.keyCode;escapeKey=27;}else{keycode=objEvent.keyCode;escapeKey=objEvent.DOM_VK_ESCAPE;}
key=String.fromCharCode(keycode).toLowerCase();if((key==settings.keyToClose)||(key=='x')||(keycode==escapeKey)){_finish();}
if((key==settings.keyToPrev)||(keycode==37)){if(settings.activeImage!=0){settings.activeImage=settings.activeImage-1;_set_image_to_view();_disable_keyboard_navigation();}}
if((key==settings.keyToNext)||(keycode==39)){if(settings.activeImage!=(settings.imageArray.length-1)){settings.activeImage=settings.activeImage+1;_set_image_to_view();_disable_keyboard_navigation();}}}
function _preload_neighbor_images(){if((settings.imageArray.length-1)>settings.activeImage){objNext=new Image();objNext.src=settings.imageArray[settings.activeImage+1][0];}
if(settings.activeImage>0){objPrev=new Image();objPrev.src=settings.imageArray[settings.activeImage-1][0];}}
function _finish(){$('#jquery-lightbox').remove();$('#jquery-overlay').fadeOut(function(){$('#jquery-overlay').remove();});$('embed, object, select').css({'visibility':'visible'});}
function ___getPageSize(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=window.innerWidth+window.scrollMaxX;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;}
var windowWidth,windowHeight;if(self.innerHeight){if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;}else{windowWidth=self.innerWidth;}
windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;}
if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;}
if(xScroll<windowWidth){pageWidth=xScroll;}else{pageWidth=windowWidth;}
arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize;};function ___getPageScroll(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft;}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft;}
arrayPageScroll=new Array(xScroll,yScroll);return arrayPageScroll;};function ___pause(ms){var date=new Date();curDate=null;do{var curDate=new Date();}
while(curDate-date<ms);};return this.unbind('click').click(_initialize);};})(jQuery);


/* End jQuery plugins */
/* End jQuery plugins */


/* JW Player */
/* JW Player */
if
if
/*  End JW Player*/
/*  End JW Player*/
/*BEGIN UTC CLOCK*/
/** additional monobook scripts **/
hookEvent( 'load', displayTimer );
/**** function displayTimer.js
* by Patrick Westerhoff [poke]
*/
function displayTimer ()
{
  if ( typeof( timerDisplay ) !== 'undefined' && timerDisplay === false )
    return;
 
  var date;
  var timerParent = document.getElementById( 'p-personal' ).getElementsByTagName( 'ul' )[0];
  var timerLink  = document.createElement( 'a' );
  var timerObj    = document.createElement( 'li' );
  timerLink.href              = '/wiki/' + wgPageName + '?action=purge';
  timerLink.title              = 'Purge the server cache and update the contents of this page.'
  timerObj.id                  = 'pt-timer';
  timerObj.style.textTransform = 'none';
  timerObj.appendChild( timerLink );
  timerParent.insertBefore( timerObj, timerParent.firstChild );
 
  function actualizeUTC ()
  {
    timerDate          = new Date();
    timerLink.innerHTML = ( timerDate.getUTCHours()  < 10 ? '0' : '' ) + timerDate.getUTCHours()  + ':'
                        + ( timerDate.getUTCMinutes() < 10 ? '0' : '' ) + timerDate.getUTCMinutes() + ':'
                        + ( timerDate.getUTCSeconds() < 10 ? '0' : '' ) + timerDate.getUTCSeconds() + ' (UTC)';
  }
 
  function actualizeCustom ()
  {
    timerDate          = new Date();
    timerDate.setMinutes( timerDate.getMinutes() + timerDate.getTimezoneOffset() + timerTimezone * 60 );
    timerLink.innerHTML = ( timerDate.getHours()  < 10 ? '0' : '' ) + timerDate.getHours()  + ':'
                        + ( timerDate.getMinutes() < 10 ? '0' : '' ) + timerDate.getMinutes() + ':'
                        + ( timerDate.getSeconds() < 10 ? '0' : '' ) + timerDate.getSeconds()
                        + ' (UTC' + ( timerTimezone < 0 ? '' : '+' ) + timerTimezone + ')';
  }
 
  // start
  if ( typeof( timerTimezone ) !== 'number' )
  {
    actualizeUTC();
    setInterval( actualizeUTC, 1000 );
  }
  else
  {
    actualizeCustom();
    setInterval( actualizeCustom, 1000 );
  }
}
/*END UTC CLOCK*/


/* BEGIN SPOILER TOGGLER */
/* BEGIN SPOILER TOGGLER */
Line 149: Line 50:
                 spoilers.thumbNodes = $(".gallerybox, .thumb");
                 spoilers.thumbNodes = $(".gallerybox, .thumb");
spoilers.text = $('<div style="display:inline;"></div>');
spoilers.text = $('<div style="display:inline;"></div>');
spoilers.imgOn = $('<img alt="" style="display:none;"/>').attr('src', 'http://portal.biringa.com/images/2/2b/Wheatley_spoils_you.png');
spoilers.imgOn = $('<img alt="" style="display:none;"/>').attr('src', 'https://i2.theportalwiki.net/img/2/2b/Wheatley_spoils_you.png');
spoilers.imgOff = $('<img alt="" style="display:none;"/>').attr('src', 'http://portal.biringa.com/images/e/ef/Wheatley_spoils_nothing.png');
spoilers.imgOff = $('<img alt="" style="display:none;"/>').attr('src', 'https://i2.theportalwiki.net/img/e/ef/Wheatley_spoils_nothing.png');
var wrapped = $('<li/>').append($('<span/>').append($('<a/>').append(spoilers.imgOn, spoilers.imgOff, spoilers.text)));
var wrapped = $('<li/>').append($('<span/>').append($('<a/>').append(spoilers.imgOn, spoilers.imgOff, spoilers.text)));
wrapped.click(spoilers.toggle);
wrapped.click(spoilers.toggle);
Line 194: Line 95:
}
}
},
},
hd:function() {
setUrl:function() {
var obj = $(this).children('object');
var obj = $(this).children('object');
if(!obj) return;
if(!obj) return;
if($(this).hasClass('hd-on')) {
obj.append($('<param name="allowscriptaccess" value="true"></param>'));
var playerUrl = obj.children('param[name="movie"]').attr('value') + '&hd=1';
obj.append($('<param name="allowfullscreen" value="true"></param>'));
obj.children('param[name="movie"]').attr('value', playerUrl);
var titleParts = wgPageName.split(/\//g);
obj.children('embed').attr('src', playerUrl);
var lang = 'en';
var resultHtml = $(this).html();
if(titleParts.length == 2 && !wgCanonicalSpecialPageName) {
$(this).html('').html(resultHtml);
lang = titleParts[titleParts.length-1];
}
}
var playerUrl = obj.children('param[name="movie"]').attr('value') + '&fs=1&theme=dark&color=white' + ($(this).hasClass('hd-on') ? '&hd=1' : '') + '&cc_load_policy=1&hl=' + lang + '&cc_lang_pref=' + lang;
obj.children('param[name="movie"]').attr('value', playerUrl);
obj.children('embed').attr('src', playerUrl).attr('allowscriptaccess', 'always').attr('allowfullscreen', 'true');
var resultHtml = $(this).html();
$(this).html('').html(resultHtml);
},
},
setWidth:function(youtube, width) {
setWidth:function(youtube, width) {
Line 233: Line 139:
},
},
init:function() {
init:function() {
$('.youtubebox').each(youtubeHelper.hd);
$('.youtubebox').each(youtubeHelper.setUrl);
$(window).resize(youtubeHelper.resize);
$(window).resize(youtubeHelper.resize);
youtubeHelper.onResize();
youtubeHelper.onResize();
Line 335: Line 241:


// End collapsible tables
// End collapsible tables
/*
* Add language-dependent class to <body>
* Adds .lang-something to the body, where "something" is the language of the page.
*/
function langClass() {
  // Supported list of languages (not including the default one):
  var langList = ['ar', 'cs', 'da', 'de', 'es', 'fi', 'fr', 'hu', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', 'sv', 'zh-hans', 'zh-hant'];
  // Assumed language if the page is in none of the languages above:
  var defaultLang = 'en';
  try {
    var body = document.getElementsByTagName('body')[0];
  } catch(e) {
    return;
  }
  var lang = defaultLang;
  for(var i in langList) {
    if(wgPageName.substr(wgPageName.length-1-langList[i].length).toLowerCase() == '/' + langList[i].toLowerCase()) {
      lang = langList[i];
      break;
    }
  }
  if(body.getAttribute('class')) {
    body.setAttribute('class', body.getAttribute('class') + ' lang-' + lang);
  } else {
    body.setAttribute('class', 'lang-' + lang);
  }
}
addOnloadHook(langClass);


// PootTabs by User:WindPower~
// PootTabs by User:WindPower~
Line 489: Line 425:
// End test chamber infobox flicker
// End test chamber infobox flicker


// Collapsible lemons (diffs actually)
// Start OldAperture infobox hover code
$(function() {
oldApertureInfobox = {
$('.diff-name-text').click(function() {
mouseIn: function() {
$(this).parent().children('.diff-contents').toggle();
$(this).children('.old-aperture-active').css('display', 'block');
});
$(this).children('.old-aperture-inactive').css('display', 'none');
});
},
mouseOut: function() {
if(!$(this).hasClass('old-aperture-location-active')) {
$(this).children('.old-aperture-active').css('display', 'none');
$(this).children('.old-aperture-inactive').css('display', 'block');
}
},
init: function() {
$('.old-aperture-location').hover(oldApertureInfobox.mouseIn, oldApertureInfobox.mouseOut);
}
};
$(oldApertureInfobox.init);
// End OldAperture infobox hover code
 
// Fancy diffs
var fancyDiffs = {
toggle: function(element) {
var expanded = element.hasClass('diff-expanded');
var contents = element.parent().children('.diff-contents');
if(expanded) { // Just collapse then
element.removeClass('diff-expanded');
contents.slideUp('fast');
} else if(element.hasClass('diff-data-loaded')) { // Stuff is already loaded, expand
element.addClass('diff-expanded');
contents.slideDown('fast');
} else if(!element.hasClass('diff-data-requested')) { // Stuff is not loaded
element.addClass('diff-data-requested');
var fileName = element.find('span').text().replace(/^\s+|\s+$/g);
$.get('/w/?title=Template:PatchDiff/' + encodeURIComponent(wgPageName.replace(/^Template:PatchDiff\//, '')) + '/' + encodeURIComponent(fileName) + '&action=raw', function(data) {
contents.html(data);
contents.slideDown('fast');
element.removeClass('diff-data-requested').addClass('diff-data-loaded').addClass('diff-expanded');
});
}
},
init: function() {
var diffText = $('.diff-name-text');
if(diffText.length) {
// Preload leetle gif
$('body').append($('<img/>').attr('src', 'https://i2.theportalwiki.net/img/4/43/Patch_diff_loading.gif').css('display', 'none'));
diffText.find('span').each(function() {
$(this).text($(this).find('a').text().replace(/^\s+|\s+$/g));
});
diffText.click(function() {
fancyDiffs.toggle($(this));
return false;
});
}
}
};
$(fancyDiffs.init);


// Lightbox stuff
// Lightbox stuff
var lightboxStuff = {
var lightboxStuff = {
settings: {
settings: {
imageLoading: 'http://portal.biringa.com/images/5/56/Lightbox_loading.gif',
imageLoading: 'https://i2.theportalwiki.net/img/5/56/Lightbox_loading.gif',
imageBtnClose: 'http://portal.biringa.com/images/e/e2/Lightbox_button_close.gif',
imageBtnClose: 'https://i2.theportalwiki.net/img/e/e2/Lightbox_button_close.gif',
imageBtnPrev: 'http://portal.biringa.com/images/c/c8/Lightbox_button_previous.gif',
imageBtnPrev: 'https://i2.theportalwiki.net/img/c/c8/Lightbox_button_previous.gif',
imageBtnNext: 'http://portal.biringa.com/images/9/9e/Lightbox_button_next.gif',
imageBtnNext: 'https://i2.theportalwiki.net/img/9/9e/Lightbox_button_next.gif',
imageBlank: 'http://portal.biringa.com/images/f/f6/Lightbox_blank.gif',
imageBlank: 'https://i2.theportalwiki.net/img/f/f6/Lightbox_blank.gif',
},
},
init: function() {
init: function() {
Line 572: Line 559:
$(audioPlayer.init);
$(audioPlayer.init);


// Google Analytics
// Page-specific JavaScript/CSS
var _gaq = _gaq || [];
var pageScripts = {
_gaq.push(['_setAccount', 'UA-22928841-2']);
pagesJS: [],
_gaq.push(['_trackPageview']);
pagesCSS: ['User:MogDog66', 'Portal_Wiki:Donate', 'User:Headquarter8302'],
_gaq.push(['_trackPageLoadTime']);
suffixJS: '/Page.js',
(function() {
suffixCSS: '/Page.css',
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
init: function() {
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
for(var i in pageScripts.pagesJS) {
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
if(wgPageName == pageScripts.pagesJS[i]) {
})();
$.getScript(wgScript + '?title=' + encodeURIComponent(wgPageName + pageScripts.suffixJS) + '&ctype=text/javascript&action=raw');
}
}
for(var i in pageScripts.pagesCSS) {
if(wgPageName == pageScripts.pagesCSS[i]) {
$('head').append($('<link rel="stylesheet" type="text/css" media="screen" />').attr('href', wgScript + '?title=' + encodeURIComponent(wgPageName + pageScripts.suffixCSS) + '&ctype=text/css&action=raw'));
}
}
}
};
$(pageScripts.init);
 
// 3D model viewer
var viewer3d = {
dragging: null,
draggingFrameX: 0,
draggingFrameY: 0,
viewers: [],
frameThresholdX: 10,
frameThresholdY: 128,
realMod: function(x, y) {
return ((x % y) + y) % y;
},
init: function() {
$('.viewer-3d').each(viewer3d.bind);
$(document).mouseup(viewer3d.release);
$(document).mousemove(viewer3d.move);
},
bind: function() {
var v = $(this);
var num = viewer3d.viewers.length;
var allModels = [];
var modelID = 0;
var viewerSize = 0;
while(true) {
var modelMap = v.find('.viewer-3d-map-' + modelID);
var urlNode = v.find('.viewer-3d-url-' + modelID);
if(!modelMap.length || !urlNode.length) break;
var url = $('<div/>').html(urlNode.text()).text();
var framesS = $('<div/>').html(modelMap.text()).text().replace(/^\s+|\s+$/g).split(/,/g);
var frameMap = [];
var heightMap = [];
var leftCropMap = [];
var totalW = parseInt(framesS[0]);
var maxFrameW = parseInt(framesS[1]);
var totalH = parseInt(framesS[2]);
var verticalSteps = parseInt(framesS[3]);
var midVertical = Math.floor(verticalSteps / 2);
for(var f = 4; f < framesS.length; f += 3) {
frameMap.push(parseInt(framesS[f]));
heightMap.push(parseInt(framesS[f + 1]));
leftCropMap.push(parseInt(framesS[f + 2]));
}
allModels.push({
imageURL: url,
map: frameMap,
cropMap: leftCropMap,
totalWidth: totalW,
totalHeight: totalH,
maxFrameWidth: maxFrameW,
xStep: verticalSteps
});
viewerSize = Math.max(viewerSize, totalH, maxFrameW);
modelID++;
}
if(!modelID) return;
var overlayNode = $('<div class="viewer-3d-overlay"></div>');
var frameN = v.find('.viewer-3d-frame');
v.find('img').detach();
var klasses = v.attr('class').split(/ /g);
var startFrame = 0;
for(var k in klasses) {
if(klasses[k].substr(0, 11) == 'startframe-') {
startFrame = Math.max(0, parseInt(klasses[k].substr(11)));
}
}
var viewer = {
node: v,
frameX: startFrame,
frameY: midVertical,
models: allModels,
currentModel: -1,
frameNode: frameN,
width: viewerSize,
height: viewerSize,
mouseX: 0,
mouseY: 0,
overlay: overlayNode
};
viewer3d.viewers.push(viewer);
v.hover(viewer3d.hover, viewer3d.unhover).mousedown(viewer3d.drag).append(overlayNode).attr('data-id', num).css({
width: viewer.width + 'px',
height: viewer.height + 'px'
});
frameN.mousedown(viewer3d.drag).attr('data-id', num).css('height', viewer.height + 'px');
viewer3d.changeVersion(viewer, 0);
},
getCurrentModel: function(v) {
return v.models[v.currentModel];
},
changeVersion: function(v, version) {
version = Math.max(0, Math.min(v.models.length - 1, version));
if(v.currentModel == version) return;
v.currentModel = version;
v.frameNode.css('background', 'url(' + viewer3d.getCurrentModel(v).imageURL + ') top left no-repeat');
viewer3d.display(v, v.frameX, v.frameY);
},
hover: function(e) {
var v = viewer3d.getViewer(this);
if(viewer3d.dragging != v) {
v.overlay.animate({'opacity': '1'}, 'fast');
}
},
unhover: function(e) {
var v = viewer3d.getViewer(this);
if(viewer3d.dragging != v) {
v.overlay.animate({'opacity': '0.5'}, 'fast');
}
},
drag: function(e) {
var v = viewer3d.getViewer(this);
v.mouseX = e.pageX;
v.mouseY = e.pageY;
viewer3d.dragging = v;
draggingFrameX = v.frameX;
draggingFrameY = v.frameY;
return false;
},
release: function() {
var v = viewer3d.dragging;
viewer3d.dragging = null;
if(v != null) {
v.frameX = viewer3d.draggingFrameX;
v.frameY = viewer3d.draggingFrameY;
v.overlay.animate({'opacity': '0.5'}, 'fast');
}
viewer3d.draggingFrameX = 0;
viewer3d.draggingFrameY = 0;
},
getViewer: function(node) {
return viewer3d.viewers[parseInt($(node).attr('data-id'))];
},
display: function(v, frameX, frameY) {
var model = viewer3d.getCurrentModel(v);
var frameID = viewer3d.realMod(frameX * model.xStep + frameY, model.map.length);
var frameOffset = model.map[frameID];
var frameWidth = 0;
if(frameID == model.map.length - 1) {
frameWidth = model.totalWidth - frameOffset;
} else {
frameWidth = model.map[frameID + 1] - frameOffset;
}
v.frameNode.css({
backgroundPosition: (-frameOffset - frameID) + 'px 0px',
left: Math.round((v.width - model.maxFrameWidth) / 2.0 + model.cropMap[frameID]) + 'px',
top: Math.round((v.height - model.totalHeight) / 2) + 'px',
width: frameWidth + 'px',
height: model.totalHeight + 'px'
});
},
move: function(e) {
if(viewer3d.dragging == null) {
return;
}
var v = viewer3d.dragging;
var model = viewer3d.getCurrentModel(v);
var mouseDeltaX = e.pageX - v.mouseX;
var mouseDeltaY = e.pageY - v.mouseY;
var frameDeltaX = Math.round(mouseDeltaX / viewer3d.frameThresholdX);
var frameDeltaY = -Math.round(mouseDeltaY / viewer3d.frameThresholdY);
viewer3d.draggingFrameX = v.frameX + frameDeltaX;
viewer3d.draggingFrameY = Math.max(0, Math.min(model.xStep - 1, v.frameY + frameDeltaY));
viewer3d.display(v, viewer3d.draggingFrameX, viewer3d.draggingFrameY);
}
};
$(viewer3d.init);
var selector3d = {
bind: function() {
var viewer = viewer3d.getViewer($(this).find('.viewer-3d'));
var keepGoing = true;
var modelVariant = 0;
var selector;
while(keepGoing) {
selector = $(this).find('.selector-' + modelVariant);
if(selector.length) {
selector.attr('data-variant', modelVariant).click(function() {
viewer3d.changeVersion(viewer, parseInt($(this).attr('data-variant')));
return false;
});
}
modelVariant++;
keepGoing = selector.length;
}
},
init: function() {
$('.viewer-3d-multi').each(selector3d.bind);
}
};
$(selector3d.init);
 
var flattrButton = {
init: function() {
$('#mw-panel').append($('<div class="flattr-sidebar"><a class="FlattrButton" style="display:none;" rev="flattr;button:compact;" href="https://theportalwiki.com/wiki/Portal_Wiki:Donate"></a></div>'));
$('head').append($('<script src="https://api.flattr.com/js/0.6/load.js?mode=auto" async="async"></script>'));
}
};
 
// Google Analytics/Flattr; do not track if user is on Tor.
if(location.host.indexOf('.onion') == -1) {
$(flattrButton.init);
 
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-22928841-2']);
_gaq.push(['_trackPageview']);
_gaq.push(['_trackPageLoadTime']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}

Navigation menu