MediaWiki:Monobook.js: Difference between revisions

From Wikizilla, the kaiju encyclopedia
Jump to navigationJump to search
No edit summary
No edit summary
Line 12: Line 12:
    
    
   var date;
   var date;
   var timerParent = document.getElementById( 'p-personal' );
   var timerParent = document.getElementById( 'p-personal' ).getElementsByTagName( '.pBody' )[0];
   var timerLink  = document.createElement( 'a' );
   var timerLink  = document.createElement( 'a' );
   var timerObj    = document.createElement( 'li' );
   var timerObj    = document.createElement( 'li' );

Revision as of 19:49, 29 June 2016

/* Any JavaScript here will be loaded for users using the MonoBook skin */
/*<nowiki>*/
/** additional monobook scripts **/

/**** function displayTimer.js
 * by Patrick Westerhoff [poke]
 */
addOnloadHook(function ()
{
  if ( typeof( timerDisplay ) !== 'undefined' && timerDisplay === false )
    return;
  
  var date;
  var timerParent = document.getElementById( 'p-personal' ).getElementsByTagName( '.pBody' )[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.style.fontWeight    = 'bold';
  timerObj.style.fontSize      = '100%';
  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 );
  }
});
/*</nowiki>*/


/* MediaWiki:Monobook.js v2.39 <pre> */

/* alternateBG: Agrega un class al body durante los primeros 30 min de cada hora */
(function () {
	var d = new Date();
	if (d.getMinutes() < 30) {
		try {
			document.body.className += ' alternateBG';
		} catch(e) {
			(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(function(){$(document.body).addClass('alternateBG');});
		}
	}
}());
function FondoFooter() {
	$('#globalWrapper').append($('#footer'));
}
(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(FondoFooter);
/* fin alternateBG */

/* MONOBOOK SIDEBAR */
// Para editar los elementos del sidebar, cambiar [[MediaWiki:Monobook.js/Sidebar.js]]
window.wgSidebar = (window.wgSidebar||{});
importScript('MediaWiki:Monobook.js/Sidebar.js');

/*
* MonobookSidebar v1.2: Permite definir submenús para elementos del Sidebar de MonoBook, agregando clases
* especiales al pasar con el puntero por encima para permitir el efecto en todos los navegadores.
*
* Copyright (C) 2010 - 2014 Jesús Martínez Novo ([[User:Ciencia Al Poder]])
*
* This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version
*/
var MonobookSidebar = {
	re_s: / /g,
	re_p: /%/g,
	loadedMenus: [],
	init: function() {
		if (!window.wgSidebar) return;
		for (var menu in wgSidebar) {
			var item = document.getElementById(MonobookSidebar.getId(menu));
			if (!item) continue;
			var menuId = $(item).parents().get(2).id;
			// Check it's a valid portlet item
			if (!menuId || menuId === '') continue;
			// Generate menu hierarchy
			MonobookSidebar.buildSubmenu(item, wgSidebar[menu]);
			// Set events
			MonobookSidebar.setEvents(menuId);
		}
	},
	buildSubmenu: function(el, arr) {
		var ul = document.createElement('ul');
		ul.className = 'sub-menu';
		for (var i = 0; i < arr.length; i++) {
			var li = document.createElement('li');
			if (typeof arr[i] == 'string') {
				li.appendChild(MonobookSidebar.linkFromText(arr[i]));
			} else {
				for (var menukey in arr[i]) {
					li.appendChild(MonobookSidebar.linkFromText(menukey));
					MonobookSidebar.buildSubmenu(li, arr[i][menukey]);
				}
			}
			ul.appendChild(li);
		}
		el.appendChild(ul);
		el.className = 'with-sub-menu';
		var em = document.createElement('em');
		em.appendChild(document.createTextNode('\u203A'));
		el.firstChild.appendChild(em);
	},
	setEvents: function(menuId) {
		for (var i = 0; i < MonobookSidebar.loadedMenus; i++) {
			if (MonobookSidebar.loadedMenus[i] == menuId) return;
		}
		$('#'+menuId).children().eq(1).children().eq(0).bind('mouseover',MonobookSidebar.mouseover).bind('mouseout',MonobookSidebar.mouseout);
		MonobookSidebar.loadedMenus.push(menuId);
	},
	mouseover: function(e) {
		var target = e.target;
		while (target.tagName.toLowerCase() != 'div') {
			if (target.tagName.toLowerCase() == 'a') {
				target = target.parentNode;
			}
			if (target.tagName.toLowerCase() == 'li') {
				$(target).addClass('hover');
			}
			target = target.parentNode;
		}
	},
	mouseout: function(e) {
		var target = e.target;
		while (target.tagName.toLowerCase() != 'div') {
			if (target.tagName.toLowerCase() == 'a') {
				target = target.parentNode;
			}
			if (target.tagName.toLowerCase() == 'li') {
				$(target).removeClass('hover');
			}
			target = target.parentNode;
		}
	},
	linkFromText: function(txt) {
		var article = '', caption = '', sepPos = txt.indexOf('|');
		if (sepPos > 0) {
			article = txt.substr(0, sepPos);
			caption = txt.substr(sepPos+1);
		} else {
			article = caption = txt;
		}
		var a = document.createElement('a');
		if (article.length > 7 && article.substr(0,7) == 'http://') {
			a.setAttribute('href',article);
		} else {
			a.setAttribute('href', mw.util.getUrl(article));
		}
		a.appendChild(document.createTextNode(caption));
		return a;
	},
	getId: function(name) {
		return 'n-' + encodeURIComponent(name.replace(MonobookSidebar.re_s, '-')).replace(MonobookSidebar.re_p, '.');
	}
};

// Mueve cambios recientes a toolbox
function PosicionaElementosToolbox() {
	$('#p-tb').children().eq(1).children().eq(0)
	// Opciones en páginas de usuario
	.prepend($('#t-emailuser'))
	.prepend($('#t-blockip'))
	.prepend($('#t-log'))
	.prepend($('#t-contributions'))
	// 'Enlace permanente' y 'Versión para imprimir'
	.prepend($('#t-permalink'))
	.prepend($('#t-print'))
	// Opciones principales
	.prepend($('#t-specialpages'))
	.prepend($('#t-recentchangeslinked'))
	.prepend($('#t-whatlinkshere'))
	.prepend($('#t-multiupload'))
	.prepend($('#t-upload'))
	.prepend($('#n-randompage'))
	.prepend($('#t-googlesearch'))
	.prepend($('#n-recentchanges'));

	if ($('#t-multiupload').length === 0 && $('#t-upload').length == 1) {
		$('<li id="t-multiupload"><a href="/wiki/Special:MultipleUpload">Upload multiple files</a></li>').insertAfter('#t-upload');
	}

	$('#t-contributions').before('<hr style="margin: 5px; margin-bottom: -1px; background-color: #E2A600;" />');
	$('#t-print').before('<hr style="margin: 5px; margin-bottom: -1px; background-color: #E2A600;" />');
	$('#t-upload').before('<hr style="margin: 5px; margin-bottom: -1px; background-color: #E2A600;" />');
	$('#t-whatlinkshere').before('<hr style="margin: 5px; margin-bottom: -1px; background-color: #E2A600;" />');

	// wikicities
	$('#p-wikicities-nav').children('div').eq(0).children('hr').eq(0).next('ul').eq(0).children('li').eq(0).attr('id','n-activityfeed');
	$('#n-activityfeed').children('a').eq(0).text('Actividad reciente').attr('href','/wiki/Special:RecentChanges');
	$('#p-lang').before($('#p-wikicities-nav'));

}
(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(PosicionaElementosToolbox);

// UserWikiInfo
if ((mw.config.get('wgNamespaceNumber', 0) == -1 && mw.config.get('wgCanonicalSpecialPageName', '') == 'Contributions') || (mw.config.get('wgCanonicalNamespace', '') == 'User' || mw.config.get('wgCanonicalNamespace', '') == 'User_talk')) {
	(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(function() {
		if (!window.disableUserWikiInfo) {
			mw.loader.using(['mediawiki.api'], function() {
				importScript('MediaWiki:Common.js/Clases/UserWikiInfo.js');
			});
		}
	});
}

/* WMU en Monobook */
if (mw.config.get('wgAction', '') == 'edit' || mw.config.get('wgAction', '') == 'submit') {
	/*GLOBAL WMU VARS*/
	window.wmu_back = "back";
	window.wmu_imagebutton = "Add images";
	window.wmu_close = "close";
	window.wmu_no_preview = "Images can't be added from the page in preview mode";
	window.wmu_warn1 = "You should specify the text you want to look for";
	window.wmu_warn2 = "Select the file you want to upload";
	window.wmu_warn3 = "You must specify the name of the file first!";
	window.wmu_bad_extension = "This type of file is not allowed. Allowed extensions may be found in [[Special:Version]].";
	window.wmu_show_message = "show message";
	window.wmu_hide_message = "hide message";
	window.wmu_show_license_message = "show license";
	window.wmu_hide_license_message = "hide license";
	window.wmu_max_thumb = "The maximum size of the thumbnail has been surpassed. It will now return to its original size.";
	importScript('MediaWiki:Common.js/Extra/WikiaWMU.js');
	importStylesheetURI(mw.config.get('wgExtensionsPath')+'/wikia/WikiaMiniUpload/css/WMU.css?'+mw.config.get('wgStyleVersion'));
}
/* fin WMU en Monobook */

// Añade un aviso al salir de una página cuando se está editando
var LeaveEditingWarning = (function() {
	var _MESSAGE = 'Hay cambios sin guardar que se perderán si abandonas esta página.',
	_enabled = false,
	_originalText = null,
	_forceWarn = false,
	_triggerWarn = false,
	_submit = false,
	_timer = null,
	_init = function() {
		if (mw.config.get('wgAction') != 'submit') {
			_originalText = $('#wpTextbox1').val();
		}
	},
	_enable = function() {
		if (_enabled) return;
		_enabled = true;
		if (mw.config.get('wgAction') == 'submit') {
			_forceWarn = true;
		} else {
			$('#wpTextbox1').bind('change', _onInputChange);
			// El "change" solo se activa al salir del textbox. Comprobamos periódicamente
			window.setInterval(_onInputChange, 5000);
		}
		$('#editform').bind('submit', _onFormSubmit);
		$(window).bind('beforeunload.LeaveEditingWarning', _onBeforeUnload);
	},
	_disable = function() {
		if (!_enabled) return;
		_enabled = false;
		_forceWarn = false;
		_triggerWarn = false;
		$('#editform').unbind('submit', _onFormSubmit);
		$('#wpTextbox1').unbind('change', _onInputChange);
		if (_timer) {
			window.clearInterval(_timer);
			_timer = null;
		}
		$(window).unbind('beforeunload.LeaveEditingWarning');
	},
	_onFormSubmit = function(e) {
		_submit = true;
	},
	_onInputChange = function(e) {
		if (_originalText !== null && _originalText !== $('#wpTextbox1').val()) {
			_triggerWarn = true;
		} else {
			_triggerWarn = false;
		}
	},
	_onBeforeUnload = function() {
		if (_timer) {
			window.clearInterval(_timer);
			_timer = null;
		}
		if (!_submit && (_forceWarn || _triggerWarn)) {
			if (window.event) {
				window.event.returnValue = _MESSAGE;
			}
			return _MESSAGE;
		}
	};
	
	if (mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit') {
		(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(_init);
		
		if (!window.LeaveEditingWarning || window.LeaveEditingWarning.enabled !== false) {
			(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(_enable);
		}
	}
	
	return {
		enable: _enable,
		disable: _disable
	};
})();


// Wikia ha cambiado el texto del título de las imágenes. Restaurando...
if (mw.config.get('wgNamespaceNumber') == 6) {
	(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(function() {
		$('#firstHeading').text(mw.config.get('wgPageName').replace(/_/g, ' '));
	});
}
// Añade un 'span' que sirve para añadir una imagen de fondo a la barra de categorías
function ImagenCatlinks() {
	$('#mw-normal-catlinks').before('<span id="catlinks-background-image">&nbsp;</span>');
}
(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(ImagenCatlinks);

(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(function() {
	if (!mw.config.get('wgNoWarnOnLogout', false)) {
		$('#pt-logout').children().eq(0).bind('click', function() {
			return confirm('Si continúas dejarás de estar identificado. Podrás volver a iniciar sesión en cualquier momento. ¿Deseas continuar?');
		});
	}
});


// PARCHE PARA WIKIA: Arreglar las sugerencias de búsqueda
(typeof(window.safeOnLoadHook)=='function'?safeOnLoadHook:$)(function() {
	if (!mw.config.get('wgMWSuggestTemplate') && mw.loader.getVersion('mediawiki.legacy.mwsuggest')) {
		mw.config.set('wgMWSuggestTemplate', mw.util.wikiScript('api') + '?action=opensearch&search={searchTerms}&namespace={namespaces}&suggest');
		mw.config.set('wgSearchNamespaces', [0, 6, 10, 14, 110]);
		importScriptURI(mw.config.get('stylepath') + '/common/mwsuggest.js');
		window.setTimeout(function() {
			if (window.os_MWSuggestInit) {
				window.os_MWSuggestInit();
			}
		}, 1000);
	}
});

/**
 * MonobookSidebar: Sets sidebar submenus for elements of MonoBook, adding special
 * classes to pass the pointer over to allow the effect on all browsers.
 *
 * Date: 15 October 2010
 * Copyright © 2010 Jesús Martínez Novo ([[User:Ciencia Al Poder]])
 *
 * This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version
 */
MonobookSidebar = {
	re_s: / /g,
	re_p: /%/g,
	loadedMenus: [],
	init: function() {
		if ( !window.wgSidebar ) {
			return;
		}
		for ( var menu in wgSidebar ) {
			var item = document.getElementById( MonobookSidebar.getId( menu ) );
			if ( !item ) {
				continue;
			}
			var menuId = jQuery( item ).parents().get( 2 ).id;
			// Check it's a valid portlet item
			if ( !menuId || menuId == '' ) {
				continue;
			}
			// Generate menu hierarchy
			MonobookSidebar.buildSubmenu( item, wgSidebar[menu] );
			// Set events
			MonobookSidebar.setEvents( menuId );
		}
	},
	buildSubmenu: function( el, arr ) {
		var ul = document.createElement( 'ul' );
		ul.className = 'sub-menu';
		for ( var i = 0; i < arr.length; i++ ) {
			var li = document.createElement( 'li' );
			if ( typeof arr[i] == 'string' ) {
				var a = MonobookSidebar.linkFromText( arr[i] );
				li.appendChild( a );
			} else {
				for ( var menukey in arr[i] ) {
					a = MonobookSidebar.linkFromText( menukey );
					li.appendChild( a );
					MonobookSidebar.buildSubmenu( li, arr[i][menukey] );
				}
			}
			ul.appendChild( li );
		}
		el.appendChild( ul );
		el.className = 'with-sub-menu';
		var em = document.createElement( 'em' );
		em.appendChild( document.createTextNode( '\u203A' ) );
		el.firstChild.appendChild( em );
	},
	setEvents: function( menuId ) {
		for ( var i = 0; i < MonobookSidebar.loadedMenus; i++ ) {
			if ( MonobookSidebar.loadedMenus[i] == menuId ) {
				return;
			}
		}
		jQuery( '#' + menuId ).children().eq( 1 ).children().eq( 0 )
			.bind( 'mouseover', MonobookSidebar.mouseover )
			.bind( 'mouseout', MonobookSidebar.mouseout );
		MonobookSidebar.loadedMenus.push( menuId );
	},
	mouseover: function( e ) {
		var target = e.target;
		while ( target.tagName.toLowerCase() != 'div' ) {
			if ( target.tagName.toLowerCase() == 'a' ) {
				target = target.parentNode;
			}
			if ( target.tagName.toLowerCase() == 'li' ) {
				jQuery( target ).addClass( 'hover' );
			}
			target = target.parentNode;
		}
	},
	mouseout: function( e ) {
		var target = e.target;
		while ( target.tagName.toLowerCase() != 'div' ) {
			if ( target.tagName.toLowerCase() == 'a' ) {
				target = target.parentNode;
			}
			if ( target.tagName.toLowerCase() == 'li' ) {
				jQuery( target ).removeClass( 'hover' );
			}
			target = target.parentNode;
		}
	},
	linkFromText: function( txt ) {
		var article = '', caption = '', sepPos = txt.indexOf( '|' );
		if ( sepPos > 0 ) {
			article = txt.substr( 0, sepPos );
			caption = txt.substr( sepPos + 1 );
		} else {
			article = caption = txt;
		}
		article = article.replace( MonobookSidebar.re_s, '_' ); // removed encodeURIComponent(), it was messing things up --Jack Phoenix
		var a = document.createElement( 'a' );
		if ( article.length > 7 && article.substr( 0, 7 ) == 'http://' ) {
			a.setAttribute( 'href', article );
		} else {
			article = article.replace( MonobookSidebar.re_s, '_' ); // removed encodeURIComponent(), it was messing things up --Jack Phoenix
			// Replace encoded colons with normal colons -- added this. --Jack Phoenix
			article = article.replace( '%3A', ':' ); // added code ends here
			a.setAttribute( 'href', wgArticlePath.replace( '$1', article ) );
		}
		a.appendChild( document.createTextNode( caption ) );
		return a;
	},
	getId: function( name ) {
		return 'n-' + encodeURIComponent( name.replace( MonobookSidebar.re_s, '-' ) ).replace( MonobookSidebar.re_p, '.' );
	}
};

/* Calling this code to initialize */
jQuery( MonobookSidebar.init );