MediaWiki:Common.js

From Wikimedia Canada
Jump to navigation Jump to search

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.
/**
 * Diverses fonctions manipulant les classes
 * Utilise des expressions régulières et un cache pour de meilleures perfs
 * isClass et whichClass depuis http://fr.wikibooks.org/w/index.php?title=MediaWiki:Common.js&oldid=140211
 * hasClass, addClass, removeClass et eregReplace depuis http://drupal.org.in/doc/misc/drupal.js.source.html
 * surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions
 */
 var wgPageName = mw.config.get( 'wgPageName');
function isClass(element, classe) {
    return hasClass(element, classe);
}
 
function whichClass(element, classes) {
    var s=" "+element.className+" ";
    for(var i=0;i<classes.length;i++)
        if (s.indexOf(" "+classes[i]+" ")>=0) return i;
    return -1;
}
 
function hasClass(node, className) {
    var haystack = node.className;
    if(!haystack) return false;
    if (className === haystack) {
        return true;
    }
    return (" " + haystack + " ").indexOf(" " + className + " ") > -1;
}
 
function addClass(node, className) {
    if (hasClass(node, className)) {
        return false;
    }
    var cache = node.className;
    if (cache) {
        node.className = cache + ' ' + className;
    } else {
        node.className = className;
    }
    return true;
}
 
function removeClass(node, className) {
  if (!hasClass(node, className)) {
    return false;
  }
  node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className);
  return true;
}
 
function eregReplace(search, replace, subject) {
    return subject.replace(new RegExp(search,'g'), replace);
}
 
/* Turning the regular pages into talk pages */
function TransformeEnDiscussion() {
  if(  (wgPageName.search('Wikimedia_Canada:Discussions_in_English') != -1)
    || (wgPageName.search('Wikimedia_Canada:Discussions_en_français') != -1)
    || document.getElementById('transformeEnPageDeDiscussion')) {
    removeClass(document.body, 'ns-subject');
    addClass(document.body, 'ns-talk');
  }
}
$(TransformeEnDiscussion);

// Update from https://tools.wmflabs.org/intuition/wpAvailableLanguages.js.php - Last update: Fri, 06 Mar 2015 22:58:41 +0000
window.wpAvailableLanguages={"en":"English","fr":"Français"};

/**
 * AnonymousI18N
 *
 * Internationalisation for anonymous users.
 *
 * @author [[User:Krinkle]]
 * @stats [[File:Krinkle_AnonymousI18N.js]]
 */
mw.loader.using( 'mediawiki.user', function () {
 if ( mw.user.isAnon() ) {
  mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:AnonymousI18N.js&action=raw&ctype=text/javascript' );
 }
});

/**
 * Réécriture des titres
 *
 * Fonction utilisée par [[Modèle:Titre incorrect]]
 *
 * La fonction cherche un bandeau de la forme
 * <div id="RealTitleBanner">
 *   <span id="RealTitle">titre</span>
 * </div>
 *
 * Un élément comportant id="DisableRealTitle" désactive la fonction
 */
function rewritePageTitle( $ ) {
	var $realTitle, titleText, $h1,
		$realTitleBanner = $( '#RealTitleBanner' );
	if ( $realTitleBanner.length && !$( '#DisableRealTitle' ).length ) {
		$realTitle = $( '#RealTitle' );
		$h1 = $( 'h1:first' );
		if ( $realTitle.length && $h1.length ) {
			titleText = $realTitle.html();
			if ( titleText === '' ) {
				$h1.hide();
			} else {
				$h1.html( titleText );
			}
			$realTitleBanner.hide();
			$( '<p>' ).css( 'font-size', '80%' )
				.html( 'Titre à utiliser pour créer un lien interne : <b>' + mw.config.get('wgPageName').replace( /_/g, ' ' ) + '</b>' )
				.insertAfter( $h1 );
		}
	}
}
$( rewritePageTitle );

/**
 * OngletPurge
 *
 * Onglet permettant de réaliser une purge du cache
 *
 * @source https://www.mediawiki.org/wiki/Snippets/Purge_action
 * @see https://www.mediawiki.org/wiki/API:Purge
 *
 * {{Projet:JavaScript/Script|OngletPurge}}
 */

if ( mw.config.get( 'wgNamespaceNumber' ) >= 0 ) {

	mw.loader.using( ['mediawiki.util', 'mediawiki.api'], function () {
		$( function ( $ ) {

			if ( $( '#ca-purge' ).length ) return;
			var node = mw.util.addPortletLink(
				'p-cactions',
				mw.util.getUrl( null, { action: 'purge' } ),
				['monobook', 'modern'].indexOf( mw.config.get( 'skin' ) ) > -1 ? 'purge' : 'Purge',
				'ca-purge',
				'Purge',
				'*'
			);
			$( node ).click( function ( e ) {
				new mw.Api()
					.post( { 
						action: 'purge',
						titles: mw.config.get( 'wgPageName' ),
						forcelinkupdate: 1
					} )
					.done( function () {
						location.reload();
					} )
					.fail( function () {
						mw.notify( 'Échec de la purge', { type: 'error' } );
					} );
				e.preventDefault();
			} );

		} );
	} );
}