mediawiki.special.preferences: Allow linking to subsections
authorBartosz Dziewoński <matma.rex@gmail.com>
Fri, 15 Sep 2017 20:35:46 +0000 (22:35 +0200)
committerBartosz Dziewoński <matma.rex@gmail.com>
Sat, 16 Sep 2017 13:23:36 +0000 (15:23 +0200)
The fix for T54469 allowed linking to individual fields, but not to
subsections.

The subsections have an id prefixed with 'mw-prefsection', like the
main sections, so the 'else' case was never triggered and they were
never handled. Fix the 'if' case condition to not match them.

Also, do not rely on the 'prefsection' class, which is (according to
the comment at the top of this file) only "for backwards compatibility
with older skins".

Change-Id: Ie7b4e3afbbe723a4e3b01aac95476b073a7213cd

resources/src/mediawiki.special/mediawiki.special.preferences.js

index 6291f3f..b86f218 100644 (file)
                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.