src/cm/media/js/lib/yui/yui3-3.15.0/build/dataschema-json/dataschema-json.js
author ymh <ymh.work@gmail.com>
Fri, 14 Mar 2014 13:16:10 +0100
changeset 611 fa66f4bb1563
parent 602 e16a97fb364a
permissions -rw-r--r--
add some more custom config and put every thing in comment in the custom.yaml template
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('dataschema-json', 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 JSON data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
@module dataschema
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
@submodule dataschema-json
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
**/
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
Provides a DataSchema implementation which can be used to work with JSON data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
See the `apply` method for usage.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
@class DataSchema.JSON
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
@extends DataSchema.Base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
var LANG = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    isFunction = LANG.isFunction,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    isObject   = LANG.isObject,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    isArray    = LANG.isArray,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    // TODO: I don't think the calls to Base.* need to be done via Base since
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    // Base is mixed into SchemaJSON.  Investigate for later.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    Base       = Y.DataSchema.Base,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
    SchemaJSON;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
SchemaJSON = {
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
//
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
// DataSchema.JSON static methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
//
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
/////////////////////////////////////////////////////////////////////////////
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
     * Utility function converts JSON locator strings into walkable paths
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
     * @method getPath
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
     * @param locator {String} JSON value locator.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
     * @return {String[]} Walkable path to data value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    getPath: function(locator) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
        var path = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
            keys = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
            i = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
        if (locator) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
            // Strip the ["string keys"] and [1] array indexes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
            // TODO: the first two steps can probably be reduced to one with
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
            // /\[\s*(['"])?(.*?)\1\s*\]/g, but the array indices would be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
            // stored as strings.  This is not likely an issue.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
            locator = locator.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
                replace(/\[\s*(['"])(.*?)\1\s*\]/g,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
                function (x,$1,$2) {keys[i]=$2;return '.@'+(i++);}).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
                replace(/\[(\d+)\]/g,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
                function (x,$1) {keys[i]=parseInt($1,10)|0;return '.@'+(i++);}).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
                replace(/^\./,''); // remove leading dot
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
            // Validate against problematic characters.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
            // commented out because the path isn't sent to eval, so it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
            // should be safe. I'm not sure what makes a locator invalid.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
            //if (!/[^\w\.\$@]/.test(locator)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
            path = locator.split('.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
            for (i=path.length-1; i >= 0; --i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
                if (path[i].charAt(0) === '@') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                    path[i] = keys[parseInt(path[i].substr(1),10)];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
            /*}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
            */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
        return path;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
     * Utility function to walk a path and return the value located there.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
     * @method getLocationValue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
     * @param path {String[]} Locator path.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
     * @param data {String} Data to traverse.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
     * @return {Object} Data value at location.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
    getLocationValue: function (path, data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        var i = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
            len = path.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
        for (;i<len;i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
            if (isObject(data) && (path[i] in data)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                data = data[path[i]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
                data = undefined;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        return data;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    Applies a schema to an array of data located in a JSON structure, returning
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
    a normalized object with results in the `results` property. Additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
    information can be parsed out of the JSON for inclusion in the `meta`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
    property of the response object.  If an error is encountered during
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
    processing, an `error` property will be added.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
    The input _data_ is expected to be an object or array.  If it is a string,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
    it will be passed through `Y.JSON.parse()`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
    If _data_ contains an array of data records to normalize, specify the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
    _schema.resultListLocator_ as a dot separated path string just as you would
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
    reference it in JavaScript.  So if your _data_ object has a record array at
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
    _data.response.results_, use _schema.resultListLocator_ =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
    "response.results". Bracket notation can also be used for array indices or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
    object properties (e.g. "response['results']");  This is called a "path
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
    locator"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
    Field data in the result list is extracted with field identifiers in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
    _schema.resultFields_.  Field identifiers are objects with the following
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
    properties:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
      * `key`   : <strong>(required)</strong> The path locator (String)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
      * `parser`: A function or the name of a function on `Y.Parsers` used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
            to convert the input value into a normalized type.  Parser
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
            functions are passed the value as input and are expected to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
            return a value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    If no value parsing is needed, you can use path locators (strings)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    instead of field identifiers (objects) -- see example below.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
    If no processing of the result list array is needed, _schema.resultFields_
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
    can be omitted; the `response.results` will point directly to the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
    If the result list contains arrays, `response.results` will contain an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
    array of objects with key:value pairs assuming the fields in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
    _schema.resultFields_ are ordered in accordance with the data array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
    values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
    If the result list contains objects, the identified _schema.resultFields_
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
    will be used to extract a value from those objects for the output result.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    To extract additional information from the JSON, include an array of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
    path locators in _schema.metaFields_.  The collected values will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    stored in `response.meta`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
    @example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
        // Process array of arrays
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
        var schema = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
                resultListLocator: 'produce.fruit',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
                resultFields: [ 'name', 'color' ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
            data = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
                produce: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
                    fruit: [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                        [ 'Banana', 'yellow' ],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                        [ 'Orange', 'orange' ],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                        [ 'Eggplant', 'purple' ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
                    ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
        var response = Y.DataSchema.JSON.apply(schema, data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
        // response.results[0] is { name: "Banana", color: "yellow" }
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
        // Process array of objects + some metadata
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
        schema.metaFields = [ 'lastInventory' ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
        data = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
            produce: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
                fruit: [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
                    { name: 'Banana', color: 'yellow', price: '1.96' },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
                    { name: 'Orange', color: 'orange', price: '2.04' },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
                    { name: 'Eggplant', color: 'purple', price: '4.31' }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
                ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
            lastInventory: '2011-07-19'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
        response = Y.DataSchema.JSON.apply(schema, data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
        // response.results[0] is { name: "Banana", color: "yellow" }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
        // response.meta.lastInventory is '2001-07-19'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
        // Use parsers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        schema.resultFields = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
                key: 'name',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
                parser: function (val) { return val.toUpperCase(); }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
            {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
                key: 'price',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
                parser: 'number' // Uses Y.Parsers.number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
        ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
        response = Y.DataSchema.JSON.apply(schema, data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
        // Note price was converted from a numeric string to a number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
        // response.results[0] looks like { fruit: "BANANA", price: 1.96 }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
    @method apply
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
    @param {Object} [schema] Schema to apply.  Supported configuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
        properties are:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
      @param {String} [schema.resultListLocator] Path locator for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
          location of the array of records to flatten into `response.results`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
      @param {Array} [schema.resultFields] Field identifiers to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
          locate/assign values in the response records. See above for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
          details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
      @param {Array} [schema.metaFields] Path locators to extract extra
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
          non-record related information from the data object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
    @param {Object|Array|String} data JSON data or its string serialization.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
    @return {Object} An Object with properties `results` and `meta`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
    @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
    apply: function(schema, data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
        var data_in = data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
            data_out = { results: [], meta: {} };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
        // Convert incoming JSON strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
        if (!isObject(data)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
            try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
                data_in = Y.JSON.parse(data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
            catch(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
                data_out.error = e;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
                return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
        if (isObject(data_in) && schema) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
            // Parse results data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
            data_out = SchemaJSON._parseResults.call(this, schema, data_in, data_out);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
            // Parse meta data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
            if (schema.metaFields !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
                data_out = SchemaJSON._parseMeta(schema.metaFields, data_in, data_out);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
            data_out.error = new Error("JSON schema parse failure");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
        return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
     * Schema-parsed list of results from full data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
     * @method _parseResults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
     * @param schema {Object} Schema to parse against.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
     * @param json_in {Object} JSON to parse.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
     * @param data_out {Object} In-progress parsed data to update.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
     * @return {Object} Parsed data object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
    _parseResults: function(schema, json_in, data_out) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
        var getPath  = SchemaJSON.getPath,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
            getValue = SchemaJSON.getLocationValue,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
            path     = getPath(schema.resultListLocator),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
            results  = path ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
                        (getValue(path, json_in) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
                         // Fall back to treat resultListLocator as a simple key
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
                            json_in[schema.resultListLocator]) :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
                        // Or if no resultListLocator is supplied, use the input
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
                        json_in;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        if (isArray(results)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
            // if no result fields are passed in, then just take
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
            // the results array whole-hog Sometimes you're getting
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
            // an array of strings, or want the whole object, so
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
            // resultFields don't make sense.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
            if (isArray(schema.resultFields)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
                data_out = SchemaJSON._getFieldValues.call(this, schema.resultFields, results, data_out);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
                data_out.results = results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
        } else if (schema.resultListLocator) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
            data_out.results = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
            data_out.error = new Error("JSON results retrieval failure");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
        return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
     * Get field data values out of list of full results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
     * @method _getFieldValues
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
     * @param fields {Array} Fields to find.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
     * @param array_in {Array} Results to parse.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
     * @param data_out {Object} In-progress parsed data to update.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
     * @return {Object} Parsed data object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
    _getFieldValues: function(fields, array_in, data_out) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
        var results = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
            len = fields.length,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
            i, j,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
            field, key, locator, path, parser, val,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
            simplePaths = [], complexPaths = [], fieldParsers = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
            result, record;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
        // First collect hashes of simple paths, complex paths, and parsers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
        for (i=0; i<len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
            field = fields[i]; // A field can be a simple string or a hash
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
            key = field.key || field; // Find the key
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
            locator = field.locator || key; // Find the locator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
            // Validate and store locators for later
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
            path = SchemaJSON.getPath(locator);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
            if (path) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
                if (path.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
                    simplePaths.push({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
                        key : key,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
                        path: path[0]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
                    complexPaths.push({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
                        key    : key,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
                        path   : path,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
                        locator: locator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
            // Validate and store parsers for later
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
            //TODO: use Y.DataSchema.parse?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
            parser = (isFunction(field.parser)) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
                        field.parser :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
                        Y.Parsers[field.parser + ''];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
            if (parser) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
                fieldParsers.push({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
                    key   : key,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
                    parser: parser
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
        // Traverse list of array_in, creating records of simple fields,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
        // complex fields, and applying parsers as necessary
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
        for (i=array_in.length-1; i>=0; --i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
            record = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
            result = array_in[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
            if(result) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
                // Cycle through complexLocators
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
                for (j=complexPaths.length - 1; j>=0; --j) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
                    path = complexPaths[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
                    val = SchemaJSON.getLocationValue(path.path, result);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
                    if (val === undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
                        val = SchemaJSON.getLocationValue([path.locator], result);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
                        // Fail over keys like "foo.bar" from nested parsing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
                        // to single token parsing if a value is found in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
                        // results["foo.bar"]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
                        if (val !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
                            simplePaths.push({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
                                key:  path.key,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
                                path: path.locator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
                            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
                            // Don't try to process the path as complex
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
                            // for further results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
                            complexPaths.splice(i,1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
                            continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
                    record[path.key] = Base.parse.call(this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
                        (SchemaJSON.getLocationValue(path.path, result)), path);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
                // Cycle through simpleLocators
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
                for (j = simplePaths.length - 1; j >= 0; --j) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
                    path = simplePaths[j];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
                    // Bug 1777850: The result might be an array instead of object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
                    record[path.key] = Base.parse.call(this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
                            ((result[path.path] === undefined) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
                            result[j] : result[path.path]), path);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
                // Cycle through fieldParsers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
                for (j=fieldParsers.length-1; j>=0; --j) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
                    key = fieldParsers[j].key;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
                    record[key] = fieldParsers[j].parser.call(this, record[key]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
                    // Safety net
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
                    if (record[key] === undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
                        record[key] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
                results[i] = record;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
        data_out.results = results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
        return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
     * Parses results data according to schema
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
     * @method _parseMeta
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
     * @param metaFields {Object} Metafields definitions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
     * @param json_in {Object} JSON to parse.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
     * @param data_out {Object} In-progress parsed data to update.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
     * @return {Object} Schema-parsed meta data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
    _parseMeta: function(metaFields, json_in, data_out) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
        if (isObject(metaFields)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
            var key, path;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
            for(key in metaFields) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
                if (metaFields.hasOwnProperty(key)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
                    path = SchemaJSON.getPath(metaFields[key]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
                    if (path && json_in) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
                        data_out.meta[key] = SchemaJSON.getLocationValue(path, json_in);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
            data_out.error = new Error("JSON meta data retrieval failure");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
        return data_out;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
// TODO: Y.Object + mix() might be better here
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
Y.DataSchema.JSON = Y.mix(SchemaJSON, Base);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
}, '@VERSION@', {"requires": ["dataschema-base", "json"]});