slice = Array.prototype.slice,
parserDefaults = {
magic: {
+ PAGENAME: mw.config.get( 'wgPageName' ),
+ PAGENAMEE: mw.util.wikiUrlencode( mw.config.get( 'wgPageName' ) ),
SITENAME: mw.config.get( 'wgSiteName' )
},
// Whitelist for allowed HTML elements in wikitext.
function getFailableParserFn( options ) {
return function ( args ) {
var fallback,
+ // eslint-disable-next-line new-cap
parser = new mw.jqueryMsg.parser( options ),
key = args[ 0 ],
argsArray = $.isArray( args[ 1 ] ) ? args[ 1 ] : slice.call( args, 1 );
}
return function () {
+ var failableResult;
if ( !failableParserFn ) {
failableParserFn = getFailableParserFn( options );
}
- var failableResult = failableParserFn( arguments );
+ failableResult = failableParserFn( arguments );
if ( format === 'text' || format === 'escaped' ) {
return failableResult.text();
} else {
var failableParserFn;
return function () {
+ var $target;
if ( !failableParserFn ) {
failableParserFn = getFailableParserFn( options );
}
- var $target = this.empty();
+ $target = this.empty();
appendWithoutParsing( $target, failableParserFn( arguments ) );
return $target;
};
this.settings.onlyCurlyBraceTransform = ( this.settings.format === 'text' || this.settings.format === 'escaped' );
this.astCache = {};
+ // eslint-disable-next-line new-cap
this.emitter = new mw.jqueryMsg.htmlEmitter( this.settings.language, this.settings.magic );
};
/**
* Fetch the message string associated with a key, return parsed structure. Memoized.
- * Note that we pass '[' + key + ']' back for a missing message here.
+ * Note that we pass '⧼' + key + '⧽' back for a missing message here.
*
* @param {string} key
- * @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
+ * @return {string|Array} string of '⧼key⧽' if message missing, simple string if possible, array of arrays if needs parsing
*/
getAst: function ( key ) {
var wikiText;
if ( !this.astCache.hasOwnProperty( key ) ) {
wikiText = this.settings.messages.get( key );
if ( typeof wikiText !== 'string' ) {
- wikiText = '\\[' + key + '\\]';
+ wikiText = '⧼' + key + '⧽';
}
this.astCache[ key ] = this.wikiTextToAst( wikiText );
}
* htmlEmitter - object which primarily exists to emit HTML from parser ASTs
*/
mw.jqueryMsg.htmlEmitter = function ( language, magic ) {
- this.language = language;
var jmsg = this;
+ this.language = language;
$.each( magic, function ( key, val ) {
jmsg[ key.toLowerCase() ] = function () {
return val;
} else {
$el = $( '<a>' );
if ( typeof arg === 'function' ) {
- $el.attr( 'href', '#' )
- .click( function ( e ) {
- e.preventDefault();
+ $el.attr( {
+ role: 'button',
+ tabindex: 0
} )
- .click( arg );
+ .on( 'click keypress', function ( e ) {
+ if (
+ e.type === 'click' ||
+ e.type === 'keypress' && e.which === 13
+ ) {
+ arg.call( this, e );
+ }
+ } );
} else {
$el.attr( 'href', textify( arg ) );
}
* @return {number|string} Formatted number
*/
formatnum: function ( nodes ) {
- var isInteger = ( nodes[ 1 ] && nodes[ 1 ] === 'R' ) ? true : false,
+ var isInteger = !!nodes[ 1 ] && nodes[ 1 ] === 'R',
number = nodes[ 0 ];
return this.language.convertNumber( number, isInteger );
return function () {
return reusableParent.msg( this.key, this.parameters ).contents().detach();
};
- } )();
+ }() );
}( mediaWiki, jQuery ) );