Enqueue mw.util.init in document-ready even handler earlier
authorKrinkle <krinkle@users.mediawiki.org>
Thu, 2 Feb 2012 00:47:53 +0000 (00:47 +0000)
committerKrinkle <krinkle@users.mediawiki.org>
Thu, 2 Feb 2012 00:47:53 +0000 (00:47 +0000)
* Previously $(document).ready(mw.util.init) was in module 'mediawiki.page.ready' (position: bottom). I've now moved this to 'mediawiki.page.startup' so that it'll be enqueued sooner.
* This making it more likely that if someone also enqueues in document-ready that mw.util.init ran before than and thus mw.util.$content populated
* Fixes bug 33711

* All this is still depends on the order in which the event handler queue is executed, which is risky. Bug 30713 will bring the solid "watertight" solution

resources/Resources.php
resources/mediawiki.page/mediawiki.page.ready.js
resources/mediawiki.page/mediawiki.page.startup.js

index 42dfb41..1cdd275 100644 (file)
@@ -726,6 +726,7 @@ return array(
                'scripts' => 'resources/mediawiki.page/mediawiki.page.startup.js',
                'dependencies' => array(
                        'jquery.client',
+                       'mediawiki.util',
                ),
                'position' => 'top',
        ),
index 783db3e..370c3a1 100644 (file)
@@ -1,8 +1,5 @@
 jQuery( document ).ready( function( $ ) {
 
-       /* Initialize utilities (messageBoxNew, profile, tooltip access keys, TOC etc.) */
-       mw.util.init();
-
        /* Emulate placeholder if not supported by browser */
        if ( !( 'placeholder' in document.createElement( 'input' ) ) ) {
                $( 'input[placeholder]' ).placeholder();
index d7b9a55..a5541ef 100644 (file)
@@ -1,4 +1,4 @@
-( function( $ ) {
+( function ( $ ) {
 
        mw.page = {};
 
@@ -8,4 +8,11 @@
                .addClass('client-js' )
                .removeClass( 'client-nojs' );
 
+       // Initialize utilities as soon as the document is ready (mw.util.$content,
+       // messageBoxNew, profile, tooltip access keys, Table of contents toggle, ..).
+       // Enqueued into domready from here instead of mediawiki.page.ready to ensure that it gets enqueued
+       // before other modules hook into document ready, so that mw.util.$content (defined by mw.util.init),
+       // is defined for them.
+       $( mw.util.init );
+
 } )( jQuery );