mediawiki.jqueryMsg: Lazy-initialize parsers with getFailableParserFn()
authorBartosz Dziewoński <matma.rex@gmail.com>
Fri, 16 Oct 2015 20:17:41 +0000 (22:17 +0200)
committerKrinkle <krinklemail@gmail.com>
Tue, 27 Oct 2015 04:47:07 +0000 (04:47 +0000)
Because they rely on data set by setParserDefaults(), and that is only
called later (from ResourceLoaderJqueryMsgModule).

Bug: T115708
Change-Id: I085d27b1b00873bc5b22573ef7eb9d17b8e5e1fd

resources/src/mediawiki/mediawiki.jqueryMsg.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js

index 0a24454..2e89f6b 100644 (file)
         * @return {string} return.return Rendered HTML.
         */
        mw.jqueryMsg.getMessageFunction = function ( options ) {
-               var failableParserFn = getFailableParserFn( options ),
-                       format;
+               var failableParserFn, format;
 
                if ( options && options.format !== undefined ) {
                        format = options.format;
                }
 
                return function () {
+                       if ( !failableParserFn ) {
+                               failableParserFn = getFailableParserFn( options );
+                       }
                        var failableResult = failableParserFn( arguments );
                        if ( format === 'text' || format === 'escaped' ) {
                                return failableResult.text();
         * @return {jQuery} return.return
         */
        mw.jqueryMsg.getPlugin = function ( options ) {
-               var failableParserFn = getFailableParserFn( options );
+               var failableParserFn;
 
                return function () {
+                       if ( !failableParserFn ) {
+                               failableParserFn = getFailableParserFn( options );
+                       }
                        var $target = this.empty();
                        appendWithoutParsing( $target, failableParserFn( arguments ) );
                        return $target;
index 4f273bc..24528bb 100644 (file)
                assert.equal( logSpy.callCount, 2, 'mw.log.warn calls' );
        } );
 
+       QUnit.test( 'Integration', 4, function ( assert ) {
+               var expected, logSpy;
+
+               expected = '<b><a title="Bold" href="/wiki/Bold">Bold</a>!</b>';
+               mw.messages.set( 'integration-test', '<b>[[Bold]]!</b>' );
+
+               this.suppressWarnings();
+               logSpy = this.sandbox.spy( mw.log, 'warn' );
+               assert.equal(
+                       window.gM( 'integration-test' ),
+                       expected,
+                       'Global function gM() works correctly'
+               );
+               assert.equal( logSpy.callCount, 1, 'mw.log.warn called' );
+               this.restoreWarnings();
+
+               assert.equal(
+                       mw.message( 'integration-test' ).parse(),
+                       expected,
+                       'mw.message().parse() works correctly'
+               );
+
+               assert.equal(
+                       $( '<span>' ).msg( 'integration-test' ).html(),
+                       expected,
+                       'jQuery plugin $.fn.msg() works correctly'
+               );
+       } );
+
 }( mediaWiki, jQuery ) );