src/cm/media/js/lib/yui/yui_3.10.3/build/querystring-parse/querystring-parse-debug.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('querystring-parse', 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
 * The QueryString module adds support for serializing JavaScript objects into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
 * query strings and parsing JavaScript objects from query strings format.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
 * The QueryString namespace is added to your YUI instance including static methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
 * `Y.QueryString.parse(..)` and `Y.QueryString.stringify(..)`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
 * The `querystring` module is a alias for `querystring-parse` and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
 * `querystring-stringify`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
 * As their names suggest, `querystring-parse` adds support for parsing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
 * Query String data (`Y.QueryString.parse`) and `querystring-stringify` for serializing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
 * JavaScript data into Query Strings (`Y.QueryString.stringify`).  You may choose to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
 * include either of the submodules individually if you don't need the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
 * complementary functionality, or include the rollup for both.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
 * @module querystring
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
 * @main querystring
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
 * Provides Y.QueryString.parse method to accept Query Strings and return native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
 * JavaScript objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
 * @module querystring
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
 * @submodule querystring-parse
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
 * The QueryString module adds support for serializing JavaScript objects into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
 * query strings and parsing JavaScript objects from query strings format.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
 * @class QueryString
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
var QueryString = Y.namespace("QueryString"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
// Parse a key=val string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
// These can get pretty hairy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
// example flow:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
// parse(foo[bar][][bla]=baz)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
// return parse(foo[bar][][bla],"baz")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
// return parse(foo[bar][], {bla : "baz"})
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
// return parse(foo[bar], [{bla:"baz"}])
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
// return parse(foo, {bar:[{bla:"baz"}]})
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
// return {foo:{bar:[{bla:"baz"}]}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
pieceParser = function (eq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    return function parsePiece (key, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
        var sliced, numVal, head, tail, ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
        if (arguments.length !== 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
            // key=val, called from the map/reduce
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
            key = key.split(eq);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
            return parsePiece(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
                QueryString.unescape(key.shift()),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
                QueryString.unescape(key.join(eq))
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
        key = key.replace(/^\s+|\s+$/g, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
        if (Y.Lang.isString(val)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
            val = val.replace(/^\s+|\s+$/g, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
            // convert numerals to numbers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
            if (!isNaN(val)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
                numVal = +val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
                if (val === numVal.toString(10)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
                    val = numVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
                }
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
        sliced = /(.*)\[([^\]]*)\]$/.exec(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        if (!sliced) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
            ret = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
            if (key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
                ret[key] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
            return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        // ["foo[][bar][][baz]", "foo[][bar][]", "baz"]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        tail = sliced[2];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        head = sliced[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
        // array: key[]=val
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        if (!tail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
            return parsePiece(head, [val]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        // obj: key[subkey]=val
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        ret = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        ret[tail] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
        return parsePiece(head, ret);
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
// the reducer function that merges each query piece together into one set of params
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
mergeParams = function(params, addition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    return (
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        // if it's uncontested, then just return the addition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        (!params) ? addition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
        // if the existing value is an array, then concat it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        : (Y.Lang.isArray(params)) ? params.concat(addition)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
        // if the existing value is not an array, and either are not objects, arrayify it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        : (!Y.Lang.isObject(params) || !Y.Lang.isObject(addition)) ? [params].concat(addition)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
        // else merge them as objects, which is a little more complex
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
        : mergeObjects(params, addition)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
// Merge two *objects* together. If this is called, we've already ruled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
// out the simple cases, and need to do the for-in business.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
mergeObjects = function(params, addition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    for (var i in addition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        if (i && addition.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
            params[i] = mergeParams(params[i], addition[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    return params;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
};
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
 * Accept Query Strings and return native JavaScript objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
 * @method parse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
 * @param qs {String} Querystring to be parsed into an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
 * @param sep {String} (optional) Character that should join param k=v pairs together. Default: "&"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
 * @param eq  {String} (optional) Character that should join keys to their values. Default: "="
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
 * @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
QueryString.parse = function (qs, sep, eq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    // wouldn't Y.Array(qs.split()).map(pieceParser(eq)).reduce(mergeParams) be prettier?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    return Y.Array.reduce(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
        Y.Array.map(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
            qs.split(sep || "&"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
            pieceParser(eq || "=")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        ),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
        mergeParams
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
 * Provides Y.QueryString.unescape method to be able to override default decoding
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
 * method.  This is important in cases where non-standard delimiters are used, if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
 * the delimiters would not normally be handled properly by the builtin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
 * (en|de)codeURIComponent functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
 * Default: replace "+" with " ", and then decodeURIComponent behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
 * @method unescape
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
 * @param s {String} String to be decoded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
 * @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
 **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
QueryString.unescape = function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    return decodeURIComponent(s.replace(/\+/g, ' '));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
}, '3.10.3', {"requires": ["yui-base", "array-extras"]});