summaryrefslogtreecommitdiff
path: root/extensions/Cite/modules/ext.cite.js
blob: fbec1f3284763d9fe089b9cbea6fb7bf5d86c00e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
 * Main JavaScript for the Cite extension. The main purpose of this file
 * is to add accessibility attributes to the citation links as that can
 * hardly be done server side (bug 38141).
 *
 * @author Marius Hoch <hoo@online.de>
 */
( function ( mw, $ ) {
	'use strict';

	mw.hook( 'wikipage.content' ).add( function ( $content ) {
		var accessibilityLabelOne = mw.msg( 'cite_references_link_accessibility_label' ),
			accessibilityLabelMany = mw.msg( 'cite_references_link_many_accessibility_label' );

		$content.find( '.mw-cite-backlink' ).each( function () {
			var $links = $( this ).find( 'a' ),
				label;

			if ( $links.length > 1 ) {
				// This citation is used multiple times. Let's only set the accessibility label on the first link, the
				// following ones should then be self-explaining. This is needed to make sure this isn't getting
				// too wordy.
				label = accessibilityLabelMany;
			} else {
				label = accessibilityLabelOne;
			}

			// We can't use aria-label over here as that's not supported consistently across all screen reader / browser
			// combinations. We have to use visually hidden spans for the accessibility labels instead.
			$links.eq( 0 ).prepend(
				$( '<span>' )
					.addClass( 'cite-accessibility-label' )
					// Also make sure we have at least one space between the accessibility label and the visual one
					.text( label + ' ' )
			);
		} );
	} );
} )( mediaWiki, jQuery );