[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 /*! 2 * JavaScript to update page URL when a redirect is viewed, ensuring that the 3 * page is scrolled to the id when it's a redirect with fragment. 4 * 5 * This is loaded in the top queue, so avoid unnecessary dependencies 6 * like mediawiki.Title or mediawiki.Uri. 7 */ 8 ( function ( mw, $ ) { 9 var profile = $.client.profile(), 10 canonical = mw.config.get( 'wgInternalRedirectTargetUrl' ), 11 fragment = null, 12 shouldChangeFragment, index; 13 14 // Clear internal mw.config entries, so that no one tries to depend on them 15 mw.config.set( 'wgInternalRedirectTargetUrl', null ); 16 17 index = canonical.indexOf( '#' ); 18 if ( index !== -1 ) { 19 fragment = canonical.slice( index ); 20 } 21 22 // Never override the fragment if the user intended to look at a different section 23 shouldChangeFragment = fragment && !location.hash; 24 25 // Replace the whole URL if possible, otherwise just change the fragment 26 if ( canonical && history.replaceState ) { 27 if ( !shouldChangeFragment ) { 28 // If the current page view has a fragment already, don't override it 29 canonical = canonical.replace( /#.*$/, '' ); 30 canonical += location.hash; 31 } 32 33 // This will also cause the browser to scroll to given fragment 34 history.replaceState( /*data=*/ history.state, /*title=*/ document.title, /*url=*/ canonical ); 35 36 // …except for IE 10 and 11. Prod it with a location.hash change. 37 if ( shouldChangeFragment && profile.name === 'msie' && profile.versionNumber >= 10 ) { 38 location.hash = fragment; 39 } 40 41 } else if ( shouldChangeFragment ) { 42 if ( profile.layout === 'webkit' && profile.layoutVersion < 420 ) { 43 // Released Safari w/ WebKit 418.9.1 messes up horribly 44 // Nightlies of 420+ are ok 45 return; 46 } 47 48 location.hash = fragment; 49 } 50 51 if ( shouldChangeFragment && profile.layout === 'gecko' ) { 52 // Mozilla needs to wait until after load, otherwise the window doesn't 53 // scroll. See <https://bugzilla.mozilla.org/show_bug.cgi?id=516293>. 54 // There's no obvious way to detect this programmatically, so we use 55 // version-testing. If Firefox fixes the bug, they'll jump twice, but 56 // better twice than not at all, so make the fix hit future versions as 57 // well. 58 $( function () { 59 if ( location.hash === fragment ) { 60 location.hash = fragment; 61 } 62 } ); 63 } 64 65 }( mediaWiki, jQuery ) );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |