src/cm/media/js/lib/yui/yui3-3.15.0/build/dataschema-array/dataschema-array-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('dataschema-array', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * Provides a DataSchema implementation which can be used to work with data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * stored in arrays.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @module dataschema
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * @submodule dataschema-array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
Provides a DataSchema implementation which can be used to work with data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
stored in arrays.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
See the `apply` method below for usage.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
@class DataSchema.Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
@extends DataSchema.Base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
var LANG = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    SchemaArray = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
        ////////////////////////////////////////////////////////////////////////
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
        //
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
        // DataSchema.Array static methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
        //
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
        Applies a schema to an array of data, returning a normalized object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
        with results in the `results` property. The `meta` property of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
        response object is present for consistency, but is assigned an empty
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
        object.  If the input data is absent or not an array, an `error`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
        property will be added.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
        The input array is expected to contain objects, arrays, or strings.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        If _schema_ is not specified or _schema.resultFields_ is not an array,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        `response.results` will be assigned the input array unchanged.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
        When a _schema_ is specified, the following will occur:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
        If the input array contains strings, they will be copied as-is into the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
        `response.results` array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
        If the input array contains arrays, `response.results` will contain an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
        array of objects with key:value pairs assuming the fields in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        _schema.resultFields_ are ordered in accordance with the data array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
        values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
        If the input array contains objects, the identified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
        _schema.resultFields_ will be used to extract a value from those
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
        objects for the output result.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
        _schema.resultFields_ field identifiers are objects with the following properties:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
          * `key`   : <strong>(required)</strong> The locator name (String)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
          * `parser`: A function or the name of a function on `Y.Parsers` used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
                to convert the input value into a normalized type.  Parser
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
                functions are passed the value as input and are expected to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
                return a value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
        If no value parsing is needed, you can use strings as identifiers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
        instead of objects (see example below).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        @example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
            // Process array of arrays
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
            var schema = { resultFields: [ 'fruit', 'color' ] },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                data = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                    [ 'Banana', 'yellow' ],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
                    [ 'Orange', 'orange' ],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                    [ 'Eggplant', 'purple' ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
                ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
            var response = Y.DataSchema.Array.apply(schema, data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
            // response.results[0] is { fruit: "Banana", color: "yellow" }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
            // Process array of objects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
            data = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                { fruit: 'Banana', color: 'yellow', price: '1.96' },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                { fruit: 'Orange', color: 'orange', price: '2.04' },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                { fruit: 'Eggplant', color: 'purple', price: '4.31' }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
            response = Y.DataSchema.Array.apply(schema, data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
            // response.results[0] is { fruit: "Banana", color: "yellow" }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
            // Use parsers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
            schema.resultFields = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
                    key: 'fruit',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
                    parser: function (val) { return val.toUpperCase(); }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
                {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
                    key: 'price',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
                    parser: 'number' // Uses Y.Parsers.number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
            response = Y.DataSchema.Array.apply(schema, data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            // Note price was converted from a numeric string to a number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
            // response.results[0] looks like { fruit: "BANANA", price: 1.96 }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        @method apply
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
        @param {Object} [schema] Schema to apply.  Supported configuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
            properties are:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
          @param {Array} [schema.resultFields] Field identifiers to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
              locate/assign values in the response records. See above for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
              details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        @param {Array} data Array data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        @return {Object} An Object with properties `results` and `meta`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
        **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
        apply: function(schema, data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
            var data_in = data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
                data_out = {results:[],meta:{}};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
            if(LANG.isArray(data_in)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
                if(schema && LANG.isArray(schema.resultFields)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
                    // Parse results data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
                    data_out = SchemaArray._parseResults.call(this, schema.resultFields, data_in, data_out);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
                else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
                    data_out.results = data_in;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
                    Y.log("Schema resultFields property not found: " + Y.dump(schema), "warn", "dataschema-array");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
                Y.log("Array data could not be schema-parsed: " + Y.dump(data) + " " + Y.dump(data), "error", "dataschema-array");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
                data_out.error = new Error("Array schema parse failure");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
            return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
         * Schema-parsed list of results from full data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
         * @method _parseResults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
         * @param fields {Array} Schema to parse against.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
         * @param array_in {Array} Array to parse.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
         * @param data_out {Object} In-progress parsed data to update.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
         * @return {Object} Parsed data object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
         * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
         * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
        _parseResults: function(fields, array_in, data_out) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
            var results = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
                result, item, type, field, key, value, i, j;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
            for(i=array_in.length-1; i>-1; i--) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                result = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                item = array_in[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
                type = (LANG.isObject(item) && !LANG.isFunction(item)) ? 2 : (LANG.isArray(item)) ? 1 : (LANG.isString(item)) ? 0 : -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
                if(type > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
                    for(j=fields.length-1; j>-1; j--) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
                        field = fields[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
                        key = (!LANG.isUndefined(field.key)) ? field.key : field;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
                        value = (!LANG.isUndefined(item[key])) ? item[key] : item[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
                        result[key] = Y.DataSchema.Base.parse.call(this, value, field);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
                else if(type === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
                    result = item;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
                else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
                    //TODO: null or {}?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
                    result = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
                    Y.log("Unexpected type while parsing array: " + Y.dump(item), "warn", "dataschema-array");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
                results[i] = result;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
            data_out.results = results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
            return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
Y.DataSchema.Array = Y.mix(SchemaArray, Y.DataSchema.Base);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
}, '@VERSION@', {"requires": ["dataschema-base"]});