// Caching is somewhat problematic, because we do need different message functions for different maps, so
// we'd have to cache the parser as a member of this.map, which sounds a bit ugly.
// Do not use mw.jqueryMsg unless required
- if ( this.format === 'plain' || !/\{\{|[\[<>]/.test( this.map.get( this.key ) ) ) {
+ if ( this.format === 'plain' || !/\{\{|[\[<>&]/.test( this.map.get( this.key ) ) ) {
// Fall back to mw.msg's simple parser
return oldParser.apply( this );
}
} );
// HTML in wikitext
- QUnit.test( 'HTML', 26, function ( assert ) {
+ QUnit.test( 'HTML', 32, function ( assert ) {
mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
assertBothModes( assert, [ 'jquerymsg-italics-msg' ], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
'Foo<tag/>bar',
'Self-closing tags don\'t cause a parse error'
);
+
+ mw.messages.set( 'jquerymsg-entities1', 'A&B' );
+ mw.messages.set( 'jquerymsg-entities2', 'A>B' );
+ mw.messages.set( 'jquerymsg-entities3', 'A→B' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-entities1' ),
+ 'A&B',
+ 'Lone "&" is escaped in text'
+ );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-entities2' ),
+ 'A&gt;B',
+ '">" entity is double-escaped in text' // (WHY?)
+ );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-entities3' ),
+ 'A&rarr;B',
+ '"→" entity is double-escaped in text'
+ );
+
+ mw.messages.set( 'jquerymsg-entities-attr1', '<i title="A&B"></i>' );
+ mw.messages.set( 'jquerymsg-entities-attr2', '<i title="A>B"></i>' );
+ mw.messages.set( 'jquerymsg-entities-attr3', '<i title="A→B"></i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-entities-attr1' ),
+ '<i title="A&B"></i>',
+ 'Lone "&" is escaped in attribute'
+ );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-entities-attr2' ),
+ '<i title="A>B"></i>',
+ '">" entity is not double-escaped in attribute' // (WHY?)
+ );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-entities-attr3' ),
+ '<i title="A&rarr;B"></i>',
+ '"→" entity is double-escaped in attribute'
+ );
} );
QUnit.test( 'Behavior in case of invalid wikitext', 3, function ( assert ) {