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
function detectHash() {
var hash = location.hash,
matchedElement, parentSection;
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-', '' ) );
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 ) );
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.
if ( parentSection.length ) {
mw.storage.session.remove( 'mwpreferences-prevTab' );
// Switch to proper tab and scroll to selected item.