[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/resources/src/mediawiki.action/ -> mediawiki.action.view.redirect.js (source)

   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 ) );


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1