src/cm/media/js/lib/yui/yui_3.10.3/build/jsonp-url/jsonp-url.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
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('jsonp-url', 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
var JSONPRequest = Y.JSONPRequest,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    getByPath    = Y.Object.getValue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    noop         = function () {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
 * Adds support for parsing complex callback identifiers from the jsonp url.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
 * This includes callback=foo[1]bar.baz["goo"] as well as referencing methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
 * in the YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
 * @module jsonp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
 * @submodule jsonp-url
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
 * @for JSONPRequest
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
Y.mix(JSONPRequest.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
     * RegExp used by the default URL formatter to insert the generated callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
     * name into the JSONP url.  Looks for a query param callback=.  If a value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
     * is assigned, it will be clobbered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
     * @property _pattern
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
     * @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
     * @default /\bcallback=.*?(?=&|$)/i
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    _pattern: /\bcallback=(.*?)(?=&|$)/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
     * Template used by the default URL formatter to add the callback function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
     * name to the url.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
     * @property _template
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
     * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
     * @default "callback={callback}"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    _template: "callback={callback}",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
     * <p>Parses the url for a callback named explicitly in the string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
     * Override this if the target JSONP service uses a different query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
     * parameter or url format.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
     * <p>If the callback is declared inline, the corresponding function will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
     * be returned.  Otherwise null.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
     * @method _defaultCallback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
     * @param url {String} the url to search in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
     * @return {Function} the callback function if found, or null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    _defaultCallback: function (url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
        var match = url.match(this._pattern),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
            keys  = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
            locator, path, callback;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        if (match) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
            // Strip the ["string keys"] and [1] array indexes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
            locator = match[1]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
                .replace(/\[(['"])(.*?)\1\]/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
                    function (x, $1, $2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
                        keys[i] = $2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
                        return '.@' + (i++);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
                    })
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
                .replace(/\[(\d+)\]/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
                    function (x, $1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
                        keys[i] = parseInt($1, 10) | 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
                        return '.@' + (i++);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
                    })
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
                .replace(/^\./, ''); // remove leading dot
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
            // Validate against problematic characters.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
            if (!/[^\w\.\$@]/.test(locator)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
                path = locator.split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
                for (i = path.length - 1; i >= 0; --i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
                    if (path[i].charAt(0) === '@') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
                        path[i] = keys[parseInt(path[i].substr(1), 10)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
                // First look for a global function, then the Y, then try the Y
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
                // again from the second token (to support "callback=Y.handler")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
                callback = getByPath(Y.config.win, path) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
                           getByPath(Y, path) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
                           getByPath(Y, path.slice(1));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
        return callback || noop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
     * URL formatter that looks for callback= in the url and appends it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
     * if not present.  The supplied proxy name will be assigned to the query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
     * param.  Override this method by passing a function as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
     * &quot;format&quot; property in the config object to the constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
     * @method _format
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
     * @param url { String } the original url
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
     * @param proxy {String} the function name that will be used as a proxy to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
     *      the configured callback methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
     * @return {String} fully qualified JSONP url
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    _format: function (url, proxy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
        var callback = this._template.replace(/\{callback\}/, proxy),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
            lastChar;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
        if (this._pattern.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
            return url.replace(this._pattern, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
            lastChar = url.slice(-1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
            if (lastChar !== '&' && lastChar !== '?') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
                url += (url.indexOf('?') > -1) ? '&' : '?';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            return url + callback;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
}, '3.10.3', {"requires": ["jsonp"]});