mediawiki.special.preferences: Allow linking to subsections
[lhc/web/wiklou.git] / resources / src / mediawiki.special / mediawiki.special.preferences.js
index 84a9a96..b86f218 100644 (file)
@@ -11,7 +11,6 @@
                        return this.id.replace( /^mw-prefsection/g, 'preftab' );
                };
 
-               $( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
                $preftoc = $( '#preftoc' );
                $preferences = $( '#preferences' );
 
@@ -21,8 +20,8 @@
                                'aria-labelledby': labelFunc
                        } );
                $fieldsets.not( '#mw-prefsection-personal' )
-                               .hide()
-                               .attr( 'aria-hidden', 'true' );
+                       .hide()
+                       .attr( 'aria-hidden', 'true' );
 
                // T115692: The following is kept for backwards compatibility with older skins
                $preferences.addClass( 'jsprefs' );
@@ -72,8 +71,7 @@
                                $tab.attr( {
                                        tabIndex: 0,
                                        'aria-selected': 'true'
-                               } )
-                               .focus()
+                               } ).focus()
                                        .parent().addClass( 'selected' );
 
                                $preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
                function detectHash() {
                        var hash = location.hash,
                                matchedElement, parentSection;
-                       if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
+                       if ( hash.match( /^#mw-prefsection-[\w]+$/ ) ) {
                                mw.storage.session.remove( 'mwpreferences-prevTab' );
                                switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
-                       } else if ( hash.match( /^#mw-[\w\-]+/ ) ) {
+                       } else if ( hash.match( /^#mw-[\w-]+$/ ) ) {
                                matchedElement = document.getElementById( hash.slice( 1 ) );
-                               parentSection = $( matchedElement ).closest( '.prefsection' );
+                               parentSection = $( matchedElement ).parent().closest( '[id^="mw-prefsection-"]' );
                                if ( parentSection.length ) {
                                        mw.storage.session.remove( 'mwpreferences-prevTab' );
                                        // Switch to proper tab and scroll to selected item.
                ) {
                        $( window ).on( 'hashchange', function () {
                                var hash = location.hash;
-                               if ( hash.match( /^#mw-[\w\-]+/ ) ) {
+                               if ( hash.match( /^#mw-[\w-]+/ ) ) {
                                        detectHash();
                                } else if ( hash === '' ) {
                                        switchPrefTab( 'personal', 'noHash' );
                                }
                        } )
-                       // Run the function immediately to select the proper tab on startup.
-                       .trigger( 'hashchange' );
+                               // Run the function immediately to select the proper tab on startup.
+                               .trigger( 'hashchange' );
                // In older browsers we'll bind a click handler as fallback.
                // We must not have onhashchange *and* the click handlers, otherwise
                // the click handler calls switchPrefTab() which sets the hash value,