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