User:Amire80/allMessages.js

From Meta, a Wikimedia project coordination wiki

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.
( function () {
	'use strict';

	var $allMessagesTable, keys, label, $hideDifferents, labelKey, i18n,
		$directTranslateLink, targetIcon;

	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Allmessages' ) {
		return;
	}
	
	mw.log( 'Processing Allmessages' );

	$allMessagesTable = $( '#mw-allmessagestable' );
	$hideDifferents = $( '<a>' );
	targetIcon = '🎯';
	
	labelKey = 'hide-differents-hide-differents-label';
	i18n = {
		"en": {
			"hide-differents-hide-differents-label": "Hide differents"
		},
		"he": {
			"hide-differents-hide-differents-label": "הסתרת שונות"
		},
		"ru": {
			"hide-differents-hide-differents-label": "Спрятать разные"
		}
	};

	keys = i18n[ $( 'html' ).prop( 'lang' ) ];
	if ( !keys ) {
		keys = i18n.en;
	}
	
	label = keys[ labelKey ];

	$hideDifferents
		.prop( 'href', '#' )
		.text( label )
		.on( 'click', function () {
			var $defaults, $actuals;

			$defaults = $( 'td.am_default' );
			$actuals = $( 'td.am_actual' );
			
			$defaults.each( function ( i, defaultElement ) {
				var $default, $actual;
			
				$default = $( defaultElement );
				$actual = $( $actuals.get( i ) );
			
				if ( $default.text() !== $actual.text() ) {
					$actual.parent().remove();
					$default.parent().remove();
				}
			} );
		} );

	$allMessagesTable.after( $hideDifferents );
	
	$allMessagesTable.find( 'tbody' ).each( function ( i, tbody ) {
		var $td = $( tbody ).find( 'tr' ).first().find( 'td' ).first(),
			$links = $td.find( 'a' );
		
		$directTranslateLink = $( '<a>' )
			.text( targetIcon )
			.prop( {
				'href': 'https://translatewiki.net/wiki/MediaWiki:' +
					$links.first().text() +
					'/' + mw.config.get( 'wgContentLanguage' )
			} );
		
		$links.last().after( $directTranslateLink );
	} );
} )();