Difference between revisions of "MediaWiki:Common.js"

From Yugipedia
Jump to: navigation, search
(Remove page format checks. Small fix.)
Line 228: Line 228:
 
*/
 
*/
 
$('.thumbinner').each(function(){
 
$('.thumbinner').each(function(){
var attr = $(this).find('img').attr('alt');
+
  var attr = $(this).find('img').attr('alt');
 
+
if (typeof attr !== typeof undefined && attr !== false) {
+
  if (typeof attr !== typeof undefined && attr !== false) {
var caption = $(this).find('.thumbcaption').text();
+
    var caption = $(this).find('.thumbcaption');
$(this).find('img').attr('alt', caption);
+
    caption.attr('aria-hidden', 'true');
}
+
    $(this).find('img').attr('alt', caption.text());
 +
  }
 
});
 
});
 
/** End. */
 
/** End. */

Revision as of 17:41, 6 October 2018

/*global mw, $, console, enableOldForumEdit */
/*jshint browser:true, curly:false, eqnull:true, strict:false */
mw.loader.using(['mediawiki.util', 'jquery.client'], function () {
/* Begin of mw.loader.using callback */


/**
 * update this (replace the timestamp with 5 tildes) whenever this page is edited
 * this simplifies checking if new code has cleared server caches
 */
var LAST_LOG = '22:37, 26 September 2018 (UTC)';
console.log('MediaWiki:Common.js last updated:', LAST_LOG);

/**
 * Customize wikitext highlither colors.
 */
 window.syntaxHighlighterSiteConfig = {
	wikilinkColor: "#DFEFFF",
	externalLinkColor: "#DFEFFF",
	listOrIndentColor: "#FFDAD0",
	tableColor: "#E8BDF0",
	templateColor: "#EAE4D7",
	parameterColor: "#BAFFBF",
	tagColor: "#FFDAD0",
	entityColor: "#B5C3B5"
};

/**
 * Cleanup excessive space in hlist elements
 */
var items = document.querySelectorAll('.hlist li, .hlist dt, .hlist dd');
for (var i = items.length - 1; i >= 0; i--) {
	items[i].innerHTML = items[i].innerHTML.trim();
}

/**
 * Remove empty rows from {{Infobox}} transclusions
 */
$('.infobox tr').each(function () {
	if (
		!$.trim($(this).text()) &&
		!$(this).find('img').length &&
		!$(this).find('hr').length
	) {
		$(this).remove();
	}
});

/**
 * Show card details on hover
 * TODO: decide tooltips implementation.
 */
$('.card-link').on('mouseenter', function() {
	if (! document.getElementById('main-card-table')) {
		$(this).find('.card-link-hover-data').load(
			this.getElementsByTagName('a')[0].href + ' #main-card-table', function() {
				$(this).find('.chronology').remove();
			}
		);
	}
});
$('.card-link').on('mouseleave', function() {
	$('.card-link-hover-data').html('');
});


/**
 * The following code is currently maintained by [[User:Becasita]].
 * Contact [[User talk:Becasita]] if the need arises.
 */
( function( window, $, mw ) {

	/**
	 * Fix Special:Ask table headers when wikilinked.
	 * Address to «.JS-changed» to find what elements were changed/created.
	 */
	$( function _specialAskLabelsLinks() {
		if ( mw.config.get( 'wgPageName' ).split( /\s*\/\s*/ )[ 0 ] === 'Special:Ask' ) {
			$( '.smwtable' ).find( 'th' ).each( function( i, el ) {
				$( el ).html( function() {
					return $( this ).text().replace( /\[\[(.*?)]]/g, $( '<a>', {
						class: 'JS-changed',
						href: 'wiki/$1',
						text: '$1'
					} ).prop( 'outerHTML' ) );
				} );
			} );
		}
	} );
	/** End. */

	/**
	 * Fix tabbers labels achors.
	 */
	$(function _fixTabAnchors() {
		// Wait for the tabbers to load:
		mw.loader.using( 'ext.tabber' ).then( function() {

			mw.log( 'DEBUG: Tabbers loaded!' );
			$( '.tabbernav' ).each( function( i, el ) {

				const $el = $( el );
				const $parent = $el.parent();

				// Gets the tab content, given a tab label:
				const getTab = function( $li ) {
					return $parent.find( '.tabbertab' ).filter( function() {
						return this.title.trim() === $li.find( 'a' ).attr( 'title' ).trim();
					});
				};

				// Remove the default click event:
				$el.off( 'click' );

				// Create new click event
				$el.children().click( function( e ) {
					e.preventDefault();

					// Current tab:
					const $currentLabel = $el.find( '.tabberactive' );
					const $currentContent = getTab( $currentLabel );

					// New tab:
					const $newLabel = $( this );
					const $newContent = getTab( $newLabel );

					// Switch tabs:
					$currentLabel.removeClass( 'tabberactive' );
					$newLabel.addClass( 'tabberactive' );
					$currentContent.hide();
					$newContent.show();
				} );

			} );

		} );
	} );
	/** End. */

	/**
	 * Create a ToC for card galleries (using [[Module:Card gallery]]).
	 */
	$( function _addTocToCardGalleries() {
		function generateToC( $content ) {
			mw.log( 'Firing generateToC on: ', $content );

			var $toc = $content.find( '.card-gallery__toc' ).find( 'ul' );
			$content.find( '.mw-headline' ).each( function( index, element ) {
				var $section = $( element );
				$toc.append( function() {
					var sectionText = $( this ).parent().parent().find( 'h2' ).text();
					return $( '<li>', {
						class: 'card-gallery__toc__entry',
						html: $( sectionText === $section.text() ? '<strong>' : '<a>', {
							href: '#' + $section.attr( 'id' ),
							text: $section.text()
						} )
					} );
				} );
			} );
		}

		mw.hook( 'wikipage.content' ).add( generateToC );
	} );
	/** End. */

 	/**
 	 * Links for image uploads on galleries.
 	 */ 
	$(function _linkEmptyGalleries() {
		// Function to link the empty galleries to the upload page:
		function linkEmptyGalleries( $content ) {
			mw.log( 'Firing linkEmptyGalleries on: ', $content );

			$content.find( '.thumb' ).each( function() {
				var $this = $( this );
				if ( !$this.children().length ) {
					// Is an empty gallery box.
					var text = $this.text();
					$this.text( '' );
					$this.append(
						$( '<a>', {
							class: 'noFile',
							href: '/index.php?title=Special:Upload&wpDestFile=' + text,
							text: text
						} )
					);
				}
			} );
		}

		mw.hook( 'wikipage.content' ).add( linkEmptyGalleries );
	} );
	/** End. */
	
	/**
	 * Styles for the edit textbox after wikitext highlight kicks in.
	 */
	mw.hook( 'wikipage.editform' ).add( function( $editform ) {
		var times = 0;
		var interval = window.setInterval(function() {
			if ( mw.loader.getState( 'ext.gadget.DotsSyntaxHighlighter' ) === 'ready' ) {
				mw.log( '[DotsSyntaxHighlighter styles] - modifing' );
				$editform.find( '#wpTextbox0, #wpTextbox1' )
					.css( {
						'border': 'unset',
						'line-height': '1.5em',
						'height': 'unset',
					} )
				;
				window.clearInterval( interval );
				mw.log( '[DotsSyntaxHighlighter styles] - clearing: Managed to style it.' );
				return;
			}

			if ( times > 10 ) {
				window.clearInterval( interval );
				mw.log( '[DotsSyntaxHighlighter styles] - clearing: Exceeding 10 times.' );
				return;
			}
			
			times++;
		}, 250 );
	} );
	
	/**
	 * Automatically add alt attributes to thumbnail images using the image's caption.
	 */
	$('.thumbinner').each(function(){
	   var attr = $(this).find('img').attr('alt');
	
	   if (typeof attr !== typeof undefined && attr !== false) {
	     var caption = $(this).find('.thumbcaption');
	     caption.attr('aria-hidden', 'true');
	     $(this).find('img').attr('alt', caption.text());
	   }
	});
	/** End. */

} )( window, window.jQuery, window.mediaWiki );

/* End of mw.loader.using callback; DO NOT ADD CODE BELOW THIS LINE */
});