Implement extension registration from an extension.json file
[mediawiki.git] / resources / src / mediawiki.page / mediawiki.page.ready.js
blob36eb9d4f2264c5a85c3410c5d54091af6a1c3f96
1 ( function ( mw, $ ) {
2         var supportsPlaceholder = 'placeholder' in document.createElement( 'input' );
4         // Break out of framesets
5         if ( mw.config.get( 'wgBreakFrames' ) ) {
6                 // Note: In IE < 9 strict comparison to window is non-standard (the standard didn't exist yet)
7                 // it works only comparing to window.self or window.window (http://stackoverflow.com/q/4850978/319266)
8                 if ( window.top !== window.self ) {
9                         // Un-trap us from framesets
10                         window.top.location.href = location.href;
11                 }
12         }
14         mw.hook( 'wikipage.content' ).add( function ( $content ) {
15                 var $sortableTables;
17                 // Run jquery.placeholder polyfill if placeholder is not supported
18                 if ( !supportsPlaceholder ) {
19                         $content.find( 'input[placeholder]' ).placeholder();
20                 }
22                 // Run jquery.makeCollapsible
23                 $content.find( '.mw-collapsible' ).makeCollapsible();
25                 // Lazy load jquery.tablesorter
26                 $sortableTables = $content.find( 'table.sortable' );
27                 if ( $sortableTables.length ) {
28                         mw.loader.using( 'jquery.tablesorter', function () {
29                                 $sortableTables.tablesorter();
30                         } );
31                 }
33                 // Run jquery.checkboxShiftClick
34                 $content.find( 'input[type="checkbox"]:not(.noshiftselect)' ).checkboxShiftClick();
35         } );
37         // Things outside the wikipage content
38         $( function () {
39                 var $nodes;
41                 if ( !supportsPlaceholder ) {
42                         // Exclude content to avoid hitting it twice for the (first) wikipage content
43                         $( 'input[placeholder]' ).not( '#mw-content-text input' ).placeholder();
44                 }
46                 // Add accesskey hints to the tooltips
47                 if ( document.querySelectorAll ) {
48                         // If we're running on a browser where we can do this efficiently,
49                         // just find all elements that have accesskeys. We can't use jQuery's
50                         // polyfill for the selector since looping over all elements on page
51                         // load might be too slow.
52                         $nodes = $( document.querySelectorAll( '[accesskey]' ) );
53                 } else {
54                         // Otherwise go through some elements likely to have accesskeys rather
55                         // than looping over all of them. Unfortunately this will not fully
56                         // work for custom skins with different HTML structures. Input, label
57                         // and button should be rare enough that no optimizations are needed.
58                         $nodes = $( '#column-one a, #mw-head a, #mw-panel a, #p-logo a, input, label, button' );
59                 }
60                 $nodes.updateTooltipAccessKeys();
62         } );
64 }( mediaWiki, jQuery ) );