Use a <meta> tag added when enabling OOUI, and a skipFunction that
looks for it, to avoid double-loading the modules: oojs-ui.styles,
oojs-ui.styles.icons, oojs-ui.styles.indicators, oojs-ui.styles.textures.
This saves us loading of around 200K of CSS (20K when gzipped) on pages
that both use OOjs UI PHP server-side and load OOjs UI client-side.
(For example, all MediaWiki special pages using OOUIHTMLForm.)
Interesting caveat: this causes the aforementioned modules to no
longer appear in the output of `mw.loader.inspect()` on such pages.
Bug: T125292
Change-Id: Ia7e2256cd239841e1f78c4a6bf666dd939c0d2c7
'oojs-ui.styles.textures',
'mediawiki.widgets.styles',
) );
'oojs-ui.styles.textures',
'mediawiki.widgets.styles',
) );
+ // Used by 'skipFunction' of the four 'oojs-ui.styles.*' modules. Please don't treat this as a
+ // public API or you'll be severely disappointed when T87871 is fixed and it disappears.
+ $this->addMeta( 'X-OOUI-PHP', '1' );
'es5-shim',
'oojs',
'oojs-ui.styles',
'es5-shim',
'oojs',
'oojs-ui.styles',
- 'oojs-ui.styles.icons',
- 'oojs-ui.styles.indicators',
- 'oojs-ui.styles.textures',
'mediawiki.language',
),
'targets' => array( 'desktop', 'mobile' ),
'mediawiki.language',
),
'targets' => array( 'desktop', 'mobile' ),
'styles' => 'resources/src/oojs-ui-local.css', // HACK, see inside the file
'skinStyles' => $getSkinSpecific( 'core' ),
'targets' => array( 'desktop', 'mobile' ),
'styles' => 'resources/src/oojs-ui-local.css', // HACK, see inside the file
'skinStyles' => $getSkinSpecific( 'core' ),
'targets' => array( 'desktop', 'mobile' ),
+ // ResourceLoaderImageModule doesn't support 'skipFunction', so instead we set this up so that
+ // this module is skipped together with its dependencies. Nothing else depends on these modules.
+ 'dependencies' => array(
+ 'oojs-ui.styles.icons',
+ 'oojs-ui.styles.indicators',
+ 'oojs-ui.styles.textures',
+ ),
+ 'skipFunction' => 'resources/src/oojs-ui-styles-skip.js',
);
// Deprecated old name for the module 'oojs-ui-core.styles'.
);
// Deprecated old name for the module 'oojs-ui-core.styles'.
--- /dev/null
+/*!
+ * Skip function for OOjs UI PHP style modules.
+ *
+ * The `<meta name="X-OOUI-PHP" />` is added to pages by OutputPage::enableOOUI().
+ *
+ * Looking for elements in the DOM might be expensive, but it's probably better than double-loading
+ * 200 KB of CSS with embedded images because of bug T87871.
+ */
+return !!jQuery( 'meta[name="X-OOUI-PHP"]' ).length;