src/cm/media/js/lib/yui/yui_3.10.3/build/autocomplete-sources/autocomplete-sources-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
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('autocomplete-sources', 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
Mixes support for JSONP and YQL result sources into AutoCompleteBase.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
@module autocomplete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@submodule autocomplete-sources
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
var ACBase = Y.AutoCompleteBase,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    Lang   = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    _SOURCE_SUCCESS = '_sourceSuccess',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    MAX_RESULTS         = 'maxResults',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    REQUEST_TEMPLATE    = 'requestTemplate',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    RESULT_LIST_LOCATOR = 'resultListLocator';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
// Add prototype properties and methods to AutoCompleteBase.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
Y.mix(ACBase.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    Regular expression used to determine whether a String source is a YQL query.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    @property _YQL_SOURCE_REGEX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    _YQL_SOURCE_REGEX: /^(?:select|set|use)\s+/i,
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
    Runs before AutoCompleteBase's `_createObjectSource()` method and augments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    it to support additional object-based source types.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    @method _beforeCreateObjectSource
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    @param {String} source
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    _beforeCreateObjectSource: function (source) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
        // If the object is a <select> node, use the options as the result
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        // source.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
        if (source instanceof Y.Node &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
                source.get('nodeName').toLowerCase() === 'select') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
            return this._createSelectSource(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
        // If the object is a JSONPRequest instance, try to use it as a JSONP
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        // source.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
        if (Y.JSONPRequest && source instanceof Y.JSONPRequest) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
            return this._createJSONPSource(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
        // Fall back to a basic object source.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
        return this._createObjectSource(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    Creates a DataSource-like object that uses `Y.io` as a source. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    `source` attribute for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    @method _createIOSource
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    @param {String} source URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    @return {Object} DataSource-like object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    _createIOSource: function (source) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
        var ioSource = {type: 'io'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
            that     = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
            ioRequest, lastRequest, loading;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
        // Private internal _sendRequest method that will be assigned to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
        // ioSource.sendRequest once io-base and json-parse are available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
        function _sendRequest(request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
            var cacheKey = request.request;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
            // Return immediately on a cached response.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
            if (that._cache && cacheKey in that._cache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
                that[_SOURCE_SUCCESS](that._cache[cacheKey], request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
            // Cancel any outstanding requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
            if (ioRequest && ioRequest.isInProgress()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
                ioRequest.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
            ioRequest = Y.io(that._getXHRUrl(source, request), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
                on: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
                    success: function (tid, response) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
                        var data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
                        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
                            data = Y.JSON.parse(response.responseText);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
                        } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
                            Y.error('JSON parse error', ex);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
                        if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
                            that._cache && (that._cache[cacheKey] = data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
                            that[_SOURCE_SUCCESS](data, request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
                }
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
        ioSource.sendRequest = function (request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
            // Keep track of the most recent request in case there are multiple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
            // requests while we're waiting for the IO module to load. Only the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
            // most recent request will be sent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
            lastRequest = request;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
            if (loading) { return; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
            loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
            // Lazy-load the io-base and json-parse modules if necessary,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
            // then overwrite the sendRequest method to bypass this check in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
            // the future.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
            Y.use('io-base', 'json-parse', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                ioSource.sendRequest = _sendRequest;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
                _sendRequest(lastRequest);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
        return ioSource;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    Creates a DataSource-like object that uses the specified JSONPRequest
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    instance as a source. See the `source` attribute for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    @method _createJSONPSource
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    @param {JSONPRequest|String} source URL string or JSONPRequest instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
    @return {Object} DataSource-like object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
    _createJSONPSource: function (source) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
        var jsonpSource = {type: 'jsonp'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            that        = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
            lastRequest, loading;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        function _sendRequest(request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
            var cacheKey = request.request,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
                query    = request.query;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            if (that._cache && cacheKey in that._cache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
                that[_SOURCE_SUCCESS](that._cache[cacheKey], request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
            // Hack alert: JSONPRequest currently doesn't support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
            // per-request callbacks, so we're reaching into the protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            // _config object to make it happen.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
            //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            // This limitation is mentioned in the following JSONP
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
            // enhancement ticket:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            // http://yuilibrary.com/projects/yui3/ticket/2529371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            source._config.on.success = function (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
                that._cache && (that._cache[cacheKey] = data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
                that[_SOURCE_SUCCESS](data, request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
            source.send(query);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
        jsonpSource.sendRequest = function (request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
            // Keep track of the most recent request in case there are multiple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
            // requests while we're waiting for the JSONP module to load. Only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
            // the most recent request will be sent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
            lastRequest = request;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
            if (loading) { return; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
            loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            // Lazy-load the JSONP module if necessary, then overwrite the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
            // sendRequest method to bypass this check in the future.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
            Y.use('jsonp', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
                // Turn the source into a JSONPRequest instance if it isn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
                // one already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
                if (!(source instanceof Y.JSONPRequest)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
                    source = new Y.JSONPRequest(source, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
                        format: Y.bind(that._jsonpFormatter, that)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
                jsonpSource.sendRequest = _sendRequest;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
                _sendRequest(lastRequest);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        return jsonpSource;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    Creates a DataSource-like object that uses the specified `<select>` node as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    a source.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    @method _createSelectSource
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
    @param {Node} source YUI Node instance wrapping a `<select>` node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
    @return {Object} DataSource-like object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
    _createSelectSource: function (source) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
        var that = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
            type: 'select',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
            sendRequest: function (request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                var options = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                source.get('options').each(function (option) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
                    options.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
                        html    : option.get('innerHTML'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
                        index   : option.get('index'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                        node    : option,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
                        selected: option.get('selected'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
                        text    : option.get('text'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
                        value   : option.get('value')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
                that[_SOURCE_SUCCESS](options, request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    Creates a DataSource-like object that calls the specified  URL or executes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    the specified YQL query for results. If the string starts with "select ",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    "use ", or "set " (case-insensitive), it's assumed to be a YQL query;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    otherwise, it's assumed to be a URL (which may be absolute or relative).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    URLs containing a "{callback}" placeholder are assumed to be JSONP URLs; all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    others will use XHR. See the `source` attribute for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    @method _createStringSource
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    @param {String} source URL or YQL query.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    @return {Object} DataSource-like object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    _createStringSource: function (source) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
        if (this._YQL_SOURCE_REGEX.test(source)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            // Looks like a YQL query.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            return this._createYQLSource(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        } else if (source.indexOf('{callback}') !== -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
            // Contains a {callback} param and isn't a YQL query, so it must be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
            // JSONP.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
            return this._createJSONPSource(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
            // Not a YQL query or JSONP, so we'll assume it's an XHR URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
            return this._createIOSource(source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
    Creates a DataSource-like object that uses the specified YQL query string to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    create a YQL-based source. See the `source` attribute for details. If no
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
    `resultListLocator` is defined, this method will set a best-guess locator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    that might work for many typical YQL queries.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
    @method _createYQLSource
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    @param {String} source YQL query.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
    @return {Object} DataSource-like object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
    _createYQLSource: function (source) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
        var that      = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
            yqlSource = {type: 'yql'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
            lastRequest, loading, yqlRequest;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
        if (!that.get(RESULT_LIST_LOCATOR)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
            that.set(RESULT_LIST_LOCATOR, that._defaultYQLLocator);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
        function _sendRequest(request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
            var query      = request.query,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
                env        = that.get('yqlEnv'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
                maxResults = that.get(MAX_RESULTS),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
                callback, opts, yqlQuery;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
            yqlQuery = Lang.sub(source, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
                maxResults: maxResults > 0 ? maxResults : 1000,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
                request   : request.request,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
                query     : query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
            if (that._cache && yqlQuery in that._cache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
                that[_SOURCE_SUCCESS](that._cache[yqlQuery], request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
            callback = function (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
                that._cache && (that._cache[yqlQuery] = data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
                that[_SOURCE_SUCCESS](data, request);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
            opts = {proto: that.get('yqlProtocol')};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
            // Only create a new YQLRequest instance if this is the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
            // first request. For subsequent requests, we'll reuse the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
            // original instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
            if (yqlRequest) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
                yqlRequest._callback   = callback;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
                yqlRequest._opts       = opts;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
                yqlRequest._params.q   = yqlQuery;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
                if (env) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
                    yqlRequest._params.env = env;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
                yqlRequest = new Y.YQLRequest(yqlQuery, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
                    on: {success: callback},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
                    allowCache: false // temp workaround until JSONP has per-URL callback proxies
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
                }, env ? {env: env} : null, opts);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            yqlRequest.send();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
        yqlSource.sendRequest = function (request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
            // Keep track of the most recent request in case there are multiple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
            // requests while we're waiting for the YQL module to load. Only the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
            // most recent request will be sent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
            lastRequest = request;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
            if (!loading) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
                // Lazy-load the YQL module if necessary, then overwrite the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
                // sendRequest method to bypass this check in the future.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
                loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
                Y.use('yql', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
                    yqlSource.sendRequest = _sendRequest;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
                    _sendRequest(lastRequest);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
        return yqlSource;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    Default resultListLocator used when a string-based YQL source is set and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
    implementer hasn't already specified one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
    @method _defaultYQLLocator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
    @param {Object} response YQL response object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
    @return {Array}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
    _defaultYQLLocator: function (response) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
        var results = response && response.query && response.query.results,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
            values;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
        if (results && Lang.isObject(results)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
            // If there's only a single value on YQL's results object, that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
            // value almost certainly contains the array of results we want. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
            // there are 0 or 2+ values, then the values themselves are most
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
            // likely the results we want.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
            values  = Y.Object.values(results) || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
            results = values.length === 1 ? values[0] : values;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
            if (!Lang.isArray(results)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
                results = [results];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
            results = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    Returns a formatted XHR URL based on the specified base _url_, _query_, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
    the current _requestTemplate_ if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
    @method _getXHRUrl
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    @param {String} url Base URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
    @param {Object} request Request object containing `query` and `request`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
      properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    @return {String} Formatted URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
    _getXHRUrl: function (url, request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
        var maxResults = this.get(MAX_RESULTS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
        if (request.query !== request.request) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
            // Append the request template to the URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
            url += request.request;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        return Lang.sub(url, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
            maxResults: maxResults > 0 ? maxResults : 1000,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
            query     : encodeURIComponent(request.query)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    URL formatter passed to `JSONPRequest` instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    @method _jsonpFormatter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    @param {String} url
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    @param {String} proxy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
    @param {String} query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    @return {String} Formatted URL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    _jsonpFormatter: function (url, proxy, query) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
        var maxResults      = this.get(MAX_RESULTS),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
            requestTemplate = this.get(REQUEST_TEMPLATE);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
        if (requestTemplate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
            url += requestTemplate(query);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
        return Lang.sub(url, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
            callback  : proxy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
            maxResults: maxResults > 0 ? maxResults : 1000,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
            query     : encodeURIComponent(query)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
// Add attributes to AutoCompleteBase.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
Y.mix(ACBase.ATTRS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
    YQL environment file URL to load when the `source` is set to a YQL query.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
    Set this to `null` to use the default Open Data Tables environment file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    (http://datatables.org/alltables.env).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
    @attribute yqlEnv
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
    @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
    yqlEnv: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
        value: null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
    URL protocol to use when the `source` is set to a YQL query.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
    @attribute yqlProtocol
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
    @default 'http'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
    @for AutoCompleteBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
    yqlProtocol: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        value: 'http'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
// Tell AutoCompleteBase about the new source types it can now support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
Y.mix(ACBase.SOURCE_TYPES, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
    io    : '_createIOSource',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
    jsonp : '_createJSONPSource',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
    object: '_beforeCreateObjectSource', // Run our version before the base version.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
    select: '_createSelectSource',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
    string: '_createStringSource',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
    yql   : '_createYQLSource'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
}, '3.10.3', {"optional": ["io-base", "json-parse", "jsonp", "yql"], "requires": ["autocomplete-base"]});