src/cm/media/js/lib/yui/yui_3.10.3/build/pjax-base/pjax-base-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('pjax-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
`Y.Router` extension that provides the core plumbing for enhanced navigation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
implemented using the pjax technique (HTML5 pushState + Ajax).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@module pjax
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@submodule pjax-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
var win = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    // The CSS class name used to filter link clicks from only the links which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    // the pjax enhanced navigation should be used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    CLASS_PJAX = Y.ClassNameManager.getClassName('pjax'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
    Fired when navigating to a URL via Pjax.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
    When the `navigate()` method is called or a pjax link is clicked, this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    will be fired if the browser supports HTML5 history _and_ the router has a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    route handler for the specified URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    This is a useful event to listen to for adding a visual loading indicator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    while the route handlers are busy handling the URL change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    @event navigate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    @param {String} url The URL that the router will dispatch to its route
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
      handlers in order to fulfill the enhanced navigation "request".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    @param {Boolean} [force=false] Whether the enhanced navigation should occur
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
      even in browsers without HTML5 history.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    @param {String} [hash] The hash-fragment (including "#") of the `url`. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
      will be present when the `url` differs from the current URL only by its
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
      hash and `navigateOnHash` has been set to `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    @param {Event} [originEvent] The event that caused the navigation. Usually
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
      this would be a click event from a "pjax" anchor element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    @param {Boolean} [replace] Whether or not the current history entry will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
      replaced, or a new entry will be created. Will default to `true` if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
      specified `url` is the same as the current URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    EVT_NAVIGATE = 'navigate';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
`Y.Router` extension that provides the core plumbing for enhanced navigation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
implemented using the pjax technique (HTML5 `pushState` + Ajax).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
This makes it easy to enhance the navigation between the URLs of an application
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
in HTML5 history capable browsers by delegating to the router to fulfill the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
"request" and seamlessly falling-back to using standard full-page reloads in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
older, less-capable browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
The `PjaxBase` class isn't useful on its own, but can be mixed into a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
`Router`-based class to add Pjax functionality to that Router. For a pre-made
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
standalone Pjax router, see the `Pjax` class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    var MyRouter = Y.Base.create('myRouter', Y.Router, [Y.PjaxBase], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
        // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
@class PjaxBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
@extensionfor Router
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
function PjaxBase() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
PjaxBase.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    // -- Protected Properties -------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    Holds the delegated pjax-link click handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    @property _pjaxEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    @type EventHandle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    Regex used to break up a URL string around the URL's path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    Subpattern captures:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
      1. Origin, everything before the URL's path-part.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
      2. The URL's path-part.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
      3. Suffix, everything after the URL's path-part.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    @property _regexURL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    _regexURL: /^((?:[^\/#?:]+:\/\/|\/\/)[^\/]*)?([^?#]*)(\?[^#]*)?(#.*)?$/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    // -- Lifecycle Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
        this.publish(EVT_NAVIGATE, {defaultFn: this._defNavigateFn});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        // Pjax is all about progressively enhancing the navigation between
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
        // "pages", so by default we only want to handle and route link clicks
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        // in HTML5 `pushState`-compatible browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
        if (this.get('html5')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
            this._pjaxBindUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    destructor: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
        if (this._pjaxEvents) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
            this._pjaxEvents.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    Navigates to the specified URL if there is a route handler that matches. In
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    browsers capable of using HTML5 history, the navigation will be enhanced by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    firing the `navigate` event and having the router handle the "request".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    Non-HTML5 browsers will navigate to the new URL via manipulation of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    `window.location`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    When there is a route handler for the specified URL and it is being
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
    navigated to, this method will return `true`, otherwise it will return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    **Note:** The specified URL _must_ be of the same origin as the current URL,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    otherwise an error will be logged and navigation will not occur. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    intended as both a security constraint and a purposely imposed limitation as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    it does not make sense to tell the router to navigate to a URL on a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    different scheme, host, or port.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    @method navigate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    @param {String} url The URL to navigate to. This must be of the same origin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
      as the current URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    @param {Object} [options] Additional options to configure the navigation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
      These are mixed into the `navigate` event facade.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        @param {Boolean} [options.replace] Whether or not the current history
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
          entry will be replaced, or a new entry will be created. Will default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
          to `true` if the specified `url` is the same as the current URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
        @param {Boolean} [options.force=false] Whether the enhanced navigation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
          should occur even in browsers without HTML5 history.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    @return {Boolean} `true` if the URL was navigated to, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    navigate: function (url, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        // The `_navigate()` method expects fully-resolved URLs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        url = this._resolveURL(url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        if (this._navigate(url, options)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
        if (!this._hasSameOrigin(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
            Y.error('Security error: The new URL must be of the same origin as the current URL.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
        return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
    Utility method to test whether a specified link/anchor node's `href` is of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    the same origin as the page's current location.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
    This normalize browser inconsistencies with how the `port` is reported for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
    anchor elements (IE reports a value for the default port, e.g. "80").
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
    @method _isLinkSameOrigin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
    @param {Node} link The anchor element to test whether its `href` is of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
        same origin as the page's current location.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    @return {Boolean} Whether or not the link's `href` is of the same origin as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
        the page's current location.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    @since 3.6.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    _isLinkSameOrigin: function (link) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
        var location = Y.getLocation(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
            protocol = location.protocol,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
            hostname = location.hostname,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            port     = parseInt(location.port, 10) || null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
            linkPort;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        // Link must have the same `protocol` and `hostname` as the page's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
        // currrent location.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
        if (link.get('protocol') !== protocol ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
                link.get('hostname') !== hostname) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
        linkPort = parseInt(link.get('port'), 10) || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        // Normalize ports. In most cases browsers use an empty string when the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        // port is the default port, but IE does weird things with anchor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
        // elements, so to be sure, this will re-assign the default ports before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        // they are compared.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
        if (protocol === 'http:') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            port     || (port     = 80);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            linkPort || (linkPort = 80);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
        } else if (protocol === 'https:') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
            port     || (port     = 443);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
            linkPort || (linkPort = 443);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
        // Finally, to be from the same origin, the link's `port` must match the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
        // page's current `port`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
        return linkPort === port;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    Underlying implementation for `navigate()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    @method _navigate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
    @param {String} url The fully-resolved URL that the router should dispatch
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
      to its route handlers to fulfill the enhanced navigation "request", or use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
      to update `window.location` in non-HTML5 history capable browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
    @param {Object} [options] Additional options to configure the navigation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
      These are mixed into the `navigate` event facade.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        @param {Boolean} [options.replace] Whether or not the current history
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
          entry will be replaced, or a new entry will be created. Will default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
          to `true` if the specified `url` is the same as the current URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
        @param {Boolean} [options.force=false] Whether the enhanced navigation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
          should occur even in browsers without HTML5 history.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    @return {Boolean} `true` if the URL was navigated to, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
    _navigate: function (url, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
        url = this._upgradeURL(url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
        // Navigation can only be enhanced if there is a route-handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
        if (!this.hasRoute(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
        // Make a copy of `options` before modifying it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
        options = Y.merge(options, {url: url});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
        var currentURL = this._getURL(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
            hash, hashlessURL;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        // Captures the `url`'s hash and returns a URL without that hash.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        hashlessURL = url.replace(/(#.*)$/, function (u, h, i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
            hash = h;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
            return u.substring(i);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
        if (hash && hashlessURL === currentURL.replace(/#.*$/, '')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            // When the specified `url` and current URL only differ by the hash,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            // the browser should handle this in-page navigation normally.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
            if (!this.get('navigateOnHash')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
            options.hash = hash;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        // When navigating to the same URL as the current URL, behave like a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
        // browser and replace the history entry instead of creating a new one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
        'replace' in options || (options.replace = url === currentURL);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        // The `navigate` event will only fire and therefore enhance the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
        // navigation to the new URL in HTML5 history enabled browsers or when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        // forced. Otherwise it will fallback to assigning or replacing the URL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        // on `window.location`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        if (this.get('html5') || options.force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
            this.fire(EVT_NAVIGATE, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        } else if (win) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
            if (options.replace) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
                win.location.replace(url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
                win.location = url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
    Binds the delegation of link-click events that match the `linkSelector` to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
    the `_onLinkClick()` handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
    By default this method will only be called if the browser is capable of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
    using HTML5 history.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    @method _pjaxBindUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    _pjaxBindUI: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
        // Only bind link if we haven't already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
        if (!this._pjaxEvents) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
            this._pjaxEvents = Y.one('body').delegate('click',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
                this._onLinkClick, this.get('linkSelector'), this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    // -- Protected Event Handlers ---------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    Default handler for the `navigate` event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    Adds a new history entry or replaces the current entry for the specified URL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    and will scroll the page to the top if configured to do so.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
    @method _defNavigateFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
    _defNavigateFn: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        this[e.replace ? 'replace' : 'save'](e.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
        if (win && this.get('scrollToTop')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
            // Scroll to the top of the page. The timeout ensures that the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
            // scroll happens after navigation begins, so that the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
            // scroll position will be restored if the user clicks the back
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
            // button.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
            setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
                win.scroll(0, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
            }, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
    Handler for delegated link-click events which match the `linkSelector`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    This will attempt to enhance the navigation to the link element's `href` by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
    passing the URL to the `_navigate()` method. When the navigation is being
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
    enhanced, the default action is prevented.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    If the user clicks a link with the middle/right mouse buttons, or is holding
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
    down the Ctrl or Command keys, this method's behavior is not applied and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    allows the native behavior to occur. Similarly, if the router is not capable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
    or handling the URL because no route-handlers match, the link click will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
    behave natively.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
    @method _onLinkClick
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
    _onLinkClick: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
        var link, url, navigated;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
        // Allow the native behavior on middle/right-click, or when Ctrl or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
        // Command are pressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
        if (e.button !== 1 || e.ctrlKey || e.metaKey) { return; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
        link = e.currentTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        // Only allow anchor elements because we need access to its `protocol`,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
        // `host`, and `href` attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
        if (link.get('tagName').toUpperCase() !== 'A') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
            Y.log('pjax link-click navigation requires an anchor element.', 'warn', 'PjaxBase');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
        // Same origin check to prevent trying to navigate to URLs from other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
        // sites or things like mailto links.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
        if (!this._isLinkSameOrigin(link)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
        // All browsers fully resolve an anchor's `href` property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
        url = link.get('href');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
        // Try and navigate to the URL via the router, and prevent the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
        // link-click action if we do.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        if (url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
            navigated = this._navigate(url, {originEvent: e});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
            if (navigated) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
                e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
PjaxBase.ATTRS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
    CSS selector string used to filter link click events so that only the links
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
    which match it will have the enhanced navigation behavior of Pjax applied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    When a link is clicked and that link matches this selector, Pjax will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
    attempt to dispatch to any route handlers matching the link's `href` URL. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
    HTML5 history is not supported or if no route handlers match, the link click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    will be handled by the browser just like any old link.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
    @attribute linkSelector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
    @type String|Function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
    @default "a.yui3-pjax"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    @initOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
    linkSelector: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
        value    : 'a.' + CLASS_PJAX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
        writeOnce: 'initOnly'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
    Whether navigating to a hash-fragment identifier on the current page should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
    be enhanced and cause the `navigate` event to fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
    By default Pjax allows the browser to perform its default action when a user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
    is navigating within a page by clicking in-page links
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    (e.g. `<a href="#top">Top of page</a>`) and does not attempt to interfere or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
    enhance in-page navigation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    @attribute navigateOnHash
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
    @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    navigateOnHash: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
        value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    Whether the page should be scrolled to the top after navigating to a URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
    When the user clicks the browser's back button, the previous scroll position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    will be maintained.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
    @attribute scrollToTop
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
    @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
    @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
    scrollToTop: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
        value: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
Y.PjaxBase = PjaxBase;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
}, '3.10.3', {"requires": ["classnamemanager", "node-event-delegate", "router"]});