src/cm/media/js/lib/yui/yui3-3.15.0/build/autocomplete-base/autocomplete-base-debug.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('autocomplete-base', 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 automatic input completion or suggestions for text input fields and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
textareas.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
@module autocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
@main autocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
@since 3.3.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
`Y.Base` extension that provides core autocomplete logic (but no UI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
implementation) for a text input field or textarea. Must be mixed into a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
`Y.Base`-derived class to be useful.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
@module autocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
@submodule autocomplete-base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
Extension that provides core autocomplete logic (but no UI implementation) for a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
text input field or textarea.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
The `AutoCompleteBase` class provides events and attributes that abstract away
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
core autocomplete logic and configuration, but does not provide a widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
implementation or suggestion UI. For a prepackaged autocomplete widget, see
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
`AutoCompleteList`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
This extension cannot be instantiated directly, since it doesn't provide an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
actual implementation. It's intended to be mixed into a `Y.Base`-based class or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
`Y.Widget`-based example:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    YUI().use('autocomplete-base', 'widget', function (Y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
        var MyAC = Y.Base.create('myAC', Y.Widget, [Y.AutoCompleteBase], {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
            // Custom prototype methods and properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        }, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
            // Custom static methods and properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
        // Custom implementation code.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
`Y.Base`-based example:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
    YUI().use('autocomplete-base', function (Y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
        var MyAC = Y.Base.create('myAC', Y.Base, [Y.AutoCompleteBase], {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
            initializer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
                this._bindUIACBase();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
                this._syncUIACBase();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
            // Custom prototype methods and properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
        }, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
            // Custom static methods and properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
        // Custom implementation code.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
@class AutoCompleteBase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
var Escape  = Y.Escape,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    Lang    = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    YArray  = Y.Array,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
    YObject = Y.Object,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
    isFunction = Lang.isFunction,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
    isString   = Lang.isString,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
    trim       = Lang.trim,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
    INVALID_VALUE = Y.Attribute.INVALID_VALUE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
    _FUNCTION_VALIDATOR = '_functionValidator',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
    _SOURCE_SUCCESS     = '_sourceSuccess',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    ALLOW_BROWSER_AC    = 'allowBrowserAutocomplete',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    INPUT_NODE          = 'inputNode',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
    QUERY               = 'query',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    QUERY_DELIMITER     = 'queryDelimiter',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    REQUEST_TEMPLATE    = 'requestTemplate',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    RESULTS             = 'results',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
    RESULT_LIST_LOCATOR = 'resultListLocator',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
    VALUE               = 'value',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
    VALUE_CHANGE        = 'valueChange',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    EVT_CLEAR   = 'clear',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    EVT_QUERY   = QUERY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    EVT_RESULTS = RESULTS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
function AutoCompleteBase() {}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
AutoCompleteBase.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
    // -- Lifecycle Methods ----------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
    initializer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        // AOP bindings.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
        Y.before(this._bindUIACBase, this, 'bindUI');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
        Y.before(this._syncUIACBase, this, 'syncUI');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
        // -- Public Events ----------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        Fires after the query has been completely cleared or no longer meets the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
        minimum query length requirement.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
        @event clear
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
        @param {String} prevVal Value of the query before it was cleared.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        @param {String} src Source of the event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
        @preventable _defClearFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        this.publish(EVT_CLEAR, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
            defaultFn: this._defClearFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        Fires when the contents of the input field have changed and the input
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
        value meets the criteria necessary to generate an autocomplete query.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
        @event query
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
        @param {String} inputValue Full contents of the text input field or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
            textarea that generated the query.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
        @param {String} query AutoComplete query. This is the string that will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
            be used to request completion results. It may or may not be the same
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
            as `inputValue`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
        @param {String} src Source of the event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
        @preventable _defQueryFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
        **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
        this.publish(EVT_QUERY, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
            defaultFn: this._defQueryFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
        Fires after query results are received from the source. If no source has
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
        been set, this event will not fire.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
        @event results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
        @param {Array|Object} data Raw, unfiltered result data (if available).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
        @param {String} query Query that generated these results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
        @param {Object[]} results Array of filtered, formatted, and highlighted
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
            results. Each item in the array is an object with the following
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
            properties:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
            @param {Node|HTMLElement|String} results.display Formatted result
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
                HTML suitable for display to the user. If no custom formatter is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
                set, this will be an HTML-escaped version of the string in the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
                `text` property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
            @param {String} [results.highlighted] Highlighted (but not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
                formatted) result text. This property will only be set if a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
                highlighter is in use.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
            @param {Any} results.raw Raw, unformatted result in whatever form it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
                was provided by the source.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
            @param {String} results.text Plain text version of the result,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
                suitable for being inserted into the value of a text input field
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
                or textarea when the result is selected by a user. This value is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                not HTML-escaped and should not be inserted into the page using
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                `innerHTML` or `Node#setContent()`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
        @preventable _defResultsFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
        **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
        this.publish(EVT_RESULTS, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
            defaultFn: this._defResultsFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
    destructor: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
        this._acBaseEvents && this._acBaseEvents.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
        delete this._acBaseEvents;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
        delete this._cache;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
        delete this._inputNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
        delete this._rawSource;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
    // -- Public Prototype Methods ---------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
    Clears the result cache.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
    @method clearCache
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    clearCache: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
        this._cache && (this._cache = {});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
    Sends a request to the configured source. If no source is configured, this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
    method won't do anything.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
    Usually there's no reason to call this method manually; it will be called
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
    automatically when user input causes a `query` event to be fired. The only
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
    time you'll need to call this method manually is if you want to force a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
    request to be sent when no user input has occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
    @method sendRequest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
    @param {String} [query] Query to send. If specified, the `query` attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
        will be set to this query. If not specified, the current value of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
        `query` attribute will be used.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
    @param {Function} [requestTemplate] Request template function. If not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
        specified, the current value of the `requestTemplate` attribute will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
        used.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
    @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
    sendRequest: function (query, requestTemplate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
        var request,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
            source = this.get('source');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
        if (query || query === '') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
            this._set(QUERY, query);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
            query = this.get(QUERY) || '';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
        if (source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
            if (!requestTemplate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
                requestTemplate = this.get(REQUEST_TEMPLATE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
            request = requestTemplate ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
                requestTemplate.call(this, query) : query;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
            Y.log('sendRequest: ' + request, 'info', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
            source.sendRequest({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
                query  : query,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
                request: request,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
                callback: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
                    success: Y.bind(this._onResponse, this, query)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
    // -- Protected Lifecycle Methods ------------------------------------------
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
    Attaches event listeners and behaviors.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
    @method _bindUIACBase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    _bindUIACBase: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
        var inputNode  = this.get(INPUT_NODE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
            tokenInput = inputNode && inputNode.tokenInput;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
        // If the inputNode has a node-tokeninput plugin attached, bind to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        // plugin's inputNode instead.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
        if (tokenInput) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
            inputNode = tokenInput.get(INPUT_NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            this._set('tokenInput', tokenInput);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
        if (!inputNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
            Y.error('No inputNode specified.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
        this._inputNode = inputNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
        this._acBaseEvents = new Y.EventHandle([
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
            // This is the valueChange event on the inputNode, provided by the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
            // event-valuechange module, not our own valueChange.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
            inputNode.on(VALUE_CHANGE, this._onInputValueChange, this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
            inputNode.on('blur', this._onInputBlur, this),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
            this.after(ALLOW_BROWSER_AC + 'Change', this._syncBrowserAutocomplete),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
            this.after('sourceTypeChange', this._afterSourceTypeChange),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
            this.after(VALUE_CHANGE, this._afterValueChange)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
        ]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
    Synchronizes the UI state of the `inputNode`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
    @method _syncUIACBase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
    _syncUIACBase: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
        this._syncBrowserAutocomplete();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
        this.set(VALUE, this.get(INPUT_NODE).get(VALUE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
    // -- Protected Prototype Methods ------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
    Creates a DataSource-like object that simply returns the specified array as
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
    a response. See the `source` attribute for more details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
    @method _createArraySource
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
    @param {Array} source
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
    @return {Object} DataSource-like object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
    _createArraySource: function (source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
        var that = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
            type: 'array',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
            sendRequest: function (request) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
                that[_SOURCE_SUCCESS](source.concat(), request);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
    Creates a DataSource-like object that passes the query to a custom-defined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
    function, which is expected to call the provided callback with an array of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
    results. See the `source` attribute for more details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
    @method _createFunctionSource
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
    @param {Function} source Function that accepts a query and a callback as
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
      parameters, and calls the callback with an array of results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
    @return {Object} DataSource-like object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
    _createFunctionSource: function (source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
        var that = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
            type: 'function',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
            sendRequest: function (request) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
                var value;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
                function afterResults(results) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
                    that[_SOURCE_SUCCESS](results || [], request);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
                // Allow both synchronous and asynchronous functions. If we get
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
                // a truthy return value, assume the function is synchronous.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
                if ((value = source(request.query, afterResults))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
                    afterResults(value);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
    Creates a DataSource-like object that looks up queries as properties on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
    specified object, and returns the found value (if any) as a response. See
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
    the `source` attribute for more details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
    @method _createObjectSource
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
    @param {Object} source
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
    @return {Object} DataSource-like object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
    _createObjectSource: function (source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
        var that = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
            type: 'object',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
            sendRequest: function (request) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
                var query = request.query;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
                that[_SOURCE_SUCCESS](
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
                    YObject.owns(source, query) ? source[query] : [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
                    request
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
                );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
    Returns `true` if _value_ is either a function or `null`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
    @method _functionValidator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
    @param {Function|null} value Value to validate.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
    _functionValidator: function (value) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
        return value === null || isFunction(value);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
    Faster and safer alternative to `Y.Object.getValue()`. Doesn't bother
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
    casting the path to an array (since we already know it's an array) and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
    doesn't throw an error if a value in the middle of the object hierarchy is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
    neither `undefined` nor an object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
    @method _getObjectValue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
    @param {Object} obj
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
    @param {Array} path
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
    @return {Any} Located value, or `undefined` if the value was
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
        not found at the specified path.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
    _getObjectValue: function (obj, path) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
        if (!obj) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
        for (var i = 0, len = path.length; obj && i < len; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
            obj = obj[path[i]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
        return obj;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
    Parses result responses, performs filtering and highlighting, and fires the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
    `results` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
    @method _parseResponse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
    @param {String} query Query that generated these results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
    @param {Object} response Response containing results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
    @param {Object} data Raw response data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
    _parseResponse: function (query, response, data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
        var facade = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
                data   : data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
                query  : query,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
                results: []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
            listLocator = this.get(RESULT_LIST_LOCATOR),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
            results     = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
            unfiltered  = response && response.results,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
            filters,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
            formatted,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
            formatter,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
            highlighted,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
            highlighter,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
            i,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
            len,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
            maxResults,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
            result,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
            text,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
            textLocator;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
        if (unfiltered && listLocator) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
            unfiltered = listLocator.call(this, unfiltered);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
        if (unfiltered && unfiltered.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
            filters     = this.get('resultFilters');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
            textLocator = this.get('resultTextLocator');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
            // Create a lightweight result object for each result to make them
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
            // easier to work with. The various properties on the object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
            // represent different formats of the result, and will be populated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
            // as we go.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
            for (i = 0, len = unfiltered.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
                result = unfiltered[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
                text = textLocator ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
                        textLocator.call(this, result) :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
                        result.toString();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
                results.push({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
                    display: Escape.html(text),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
                    raw    : result,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
                    text   : text
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
            // Run the results through all configured result filters. Each
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
            // filter returns an array of (potentially fewer) result objects,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
            // which is then passed to the next filter, and so on.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
            for (i = 0, len = filters.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
                results = filters[i].call(this, query, results.concat());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
                if (!results) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
                    Y.log("Filter didn't return anything.", 'warn', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
                    return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
                if (!results.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
                    break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
            if (results.length) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
                formatter   = this.get('resultFormatter');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
                highlighter = this.get('resultHighlighter');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
                maxResults  = this.get('maxResults');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
                // If maxResults is set and greater than 0, limit the number of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
                // results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
                if (maxResults && maxResults > 0 &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
                        results.length > maxResults) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
                    results.length = maxResults;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
                // Run the results through the configured highlighter (if any).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
                // The highlighter returns an array of highlighted strings (not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
                // an array of result objects), and these strings are then added
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
                // to each result object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
                if (highlighter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
                    highlighted = highlighter.call(this, query,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
                            results.concat());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
                    if (!highlighted) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
                        Y.log("Highlighter didn't return anything.", 'warn', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
                        return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
                    for (i = 0, len = highlighted.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
                        result = results[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
                        result.highlighted = highlighted[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
                        result.display     = result.highlighted;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
                // Run the results through the configured formatter (if any) to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
                // produce the final formatted results. The formatter returns an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
                // array of strings or Node instances (not an array of result
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
                // objects), and these strings/Nodes are then added to each
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
                // result object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
                if (formatter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
                    formatted = formatter.call(this, query, results.concat());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
                    if (!formatted) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
                        Y.log("Formatter didn't return anything.", 'warn', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
                        return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
                    for (i = 0, len = formatted.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
                        results[i].display = formatted[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
        facade.results = results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
        this.fire(EVT_RESULTS, facade);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
    Returns the query portion of the specified input value, or `null` if there
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
    is no suitable query within the input value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
    If a query delimiter is defined, the query will be the last delimited part
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
    of of the string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
    @method _parseValue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
    @param {String} value Input value from which to extract the query.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
    @return {String|null} query
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
    _parseValue: function (value) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
        var delim = this.get(QUERY_DELIMITER);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
        if (delim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
            value = value.split(delim);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
            value = value[value.length - 1];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
        return Lang.trimLeft(value);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
    Setter for the `enableCache` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
    @method _setEnableCache
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
    @param {Boolean} value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
    _setEnableCache: function (value) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
        // When `this._cache` is an object, result sources will store cached
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
        // results in it. When it's falsy, they won't. This way result sources
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
        // don't need to get the value of the `enableCache` attribute on every
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
        // request, which would be sloooow.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
        this._cache = value ? {} : null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
        Y.log('Cache ' + (value ? 'enabled' : 'disabled'), 'debug', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
    Setter for locator attributes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
    @method _setLocator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
    @param {Function|String|null} locator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
    @return {Function|null}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
    _setLocator: function (locator) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
        if (this[_FUNCTION_VALIDATOR](locator)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
            return locator;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
        var that = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
        locator = locator.toString().split('.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
        return function (result) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
            return result && that._getObjectValue(result, locator);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
    Setter for the `requestTemplate` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
    @method _setRequestTemplate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
    @param {Function|String|null} template
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
    @return {Function|null}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
    _setRequestTemplate: function (template) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
        if (this[_FUNCTION_VALIDATOR](template)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
            return template;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
        template = template.toString();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
        return function (query) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
            return Lang.sub(template, {query: encodeURIComponent(query)});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
    Setter for the `resultFilters` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
    @method _setResultFilters
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
    @param {Array|Function|String|null} filters `null`, a filter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
        function, an array of filter functions, or a string or array of strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
        representing the names of methods on `Y.AutoCompleteFilters`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
    @return {Function[]} Array of filter functions (empty if <i>filters</i> is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
        `null`).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
    _setResultFilters: function (filters) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
        var acFilters, getFilterFunction;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
        if (filters === null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
            return [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
        acFilters = Y.AutoCompleteFilters;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
        getFilterFunction = function (filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
            if (isFunction(filter)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
                return filter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
            if (isString(filter) && acFilters &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
                    isFunction(acFilters[filter])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
                return acFilters[filter];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
        if (Lang.isArray(filters)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
            filters = YArray.map(filters, getFilterFunction);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
            return YArray.every(filters, function (f) { return !!f; }) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
                    filters : INVALID_VALUE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
            filters = getFilterFunction(filters);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
            return filters ? [filters] : INVALID_VALUE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
    Setter for the `resultHighlighter` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
    @method _setResultHighlighter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
    @param {Function|String|null} highlighter `null`, a highlighter function, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
        a string representing the name of a method on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
        `Y.AutoCompleteHighlighters`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
    @return {Function|null}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
    _setResultHighlighter: function (highlighter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
        var acHighlighters;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
        if (this[_FUNCTION_VALIDATOR](highlighter)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
            return highlighter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
        acHighlighters = Y.AutoCompleteHighlighters;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
        if (isString(highlighter) && acHighlighters &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
                isFunction(acHighlighters[highlighter])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
            return acHighlighters[highlighter];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
        return INVALID_VALUE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
    Setter for the `source` attribute. Returns a DataSource or a DataSource-like
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
    object depending on the type of _source_ and/or the value of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
    `sourceType` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
    @method _setSource
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
    @param {Any} source AutoComplete source. See the `source` attribute for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
        details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
    @return {DataSource|Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
    _setSource: function (source) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
        var sourceType = this.get('sourceType') || Lang.type(source),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
            sourceSetter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
        if ((source && isFunction(source.sendRequest))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
                || source === null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
                || sourceType === 'datasource') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
            // Quacks like a DataSource instance (or null). Make it so!
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
            this._rawSource = source;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
            return source;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
        // See if there's a registered setter for this source type.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
        if ((sourceSetter = AutoCompleteBase.SOURCE_TYPES[sourceType])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
            this._rawSource = source;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
            return Lang.isString(sourceSetter) ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
                    this[sourceSetter](source) : sourceSetter(source);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
        Y.error("Unsupported source type '" + sourceType + "'. Maybe autocomplete-sources isn't loaded?");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
        return INVALID_VALUE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
    Shared success callback for non-DataSource sources.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
    @method _sourceSuccess
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
    @param {Any} data Response data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
    @param {Object} request Request object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
    _sourceSuccess: function (data, request) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
        request.callback.success({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
            data: data,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
            response: {results: data}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
    Synchronizes the UI state of the `allowBrowserAutocomplete` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
    @method _syncBrowserAutocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
    _syncBrowserAutocomplete: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        var inputNode = this.get(INPUT_NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
        if (inputNode.get('nodeName').toLowerCase() === 'input') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
            inputNode.setAttribute('autocomplete',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
                    this.get(ALLOW_BROWSER_AC) ? 'on' : 'off');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
    Updates the query portion of the `value` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
    If a query delimiter is defined, the last delimited portion of the input
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
    value will be replaced with the specified _value_.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
    @method _updateValue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
    @param {String} newVal New value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
    _updateValue: function (newVal) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
        var delim = this.get(QUERY_DELIMITER),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
            insertDelim,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
            len,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
            prevVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
        newVal = Lang.trimLeft(newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
        if (delim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
            insertDelim = trim(delim); // so we don't double up on spaces
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
            prevVal     = YArray.map(trim(this.get(VALUE)).split(delim), trim);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
            len         = prevVal.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
            if (len > 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
                prevVal[len - 1] = newVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
                newVal = prevVal.join(insertDelim + ' ');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
            newVal = newVal + insertDelim + ' ';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
        this.set(VALUE, newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
    // -- Protected Event Handlers ---------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
    Updates the current `source` based on the new `sourceType` to ensure that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
    the two attributes don't get out of sync when they're changed separately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
    @method _afterSourceTypeChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
    _afterSourceTypeChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
        if (this._rawSource) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
            this.set('source', this._rawSource);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
    Handles change events for the `value` attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
    @method _afterValueChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
    _afterValueChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
        var newVal   = e.newVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
            self     = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
            uiChange = e.src === AutoCompleteBase.UI_SRC,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
            delay, fire, minQueryLength, query;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
        // Update the UI if the value was changed programmatically.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
        if (!uiChange) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
            self._inputNode.set(VALUE, newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
        Y.log('valueChange: new: "' + newVal + '"; old: "' + e.prevVal + '"', 'info', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
        minQueryLength = self.get('minQueryLength');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
        query          = self._parseValue(newVal) || '';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
        if (minQueryLength >= 0 && query.length >= minQueryLength) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
            // Only query on changes that originate from the UI.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
            if (uiChange) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
                delay = self.get('queryDelay');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
                fire = function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
                    self.fire(EVT_QUERY, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
                        inputValue: newVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
                        query     : query,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
                        src       : e.src
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
                if (delay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
                    clearTimeout(self._delay);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
                    self._delay = setTimeout(fire, delay);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
                    fire();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
                // For programmatic value changes, just update the query
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
                // attribute without sending a query.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
                self._set(QUERY, query);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
            clearTimeout(self._delay);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
            self.fire(EVT_CLEAR, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
                prevVal: e.prevVal ? self._parseValue(e.prevVal) : null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
                src    : e.src
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
    Handles `blur` events on the input node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
    @method _onInputBlur
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
    _onInputBlur: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
        var delim = this.get(QUERY_DELIMITER),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
            delimPos,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
            newVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
            value;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
        // If a query delimiter is set and the input's value contains one or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
        // more trailing delimiters, strip them.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
        if (delim && !this.get('allowTrailingDelimiter')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
            delim = Lang.trimRight(delim);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
            value = newVal = this._inputNode.get(VALUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
            if (delim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
                while ((newVal = Lang.trimRight(newVal)) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
                        (delimPos = newVal.length - delim.length) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
                        newVal.lastIndexOf(delim) === delimPos) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
                    newVal = newVal.substring(0, delimPos);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
                // Delimiter is one or more space characters, so just trim the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
                // value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
                newVal = Lang.trimRight(newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
            if (newVal !== value) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
                this.set(VALUE, newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
    Handles `valueChange` events on the input node and fires a `query` event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
    when the input value meets the configured criteria.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
    @method _onInputValueChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
    _onInputValueChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
        var newVal = e.newVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
        // Don't query if the internal value is the same as the new value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
        // reported by valueChange.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
        if (newVal !== this.get(VALUE)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
            this.set(VALUE, newVal, {src: AutoCompleteBase.UI_SRC});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
    Handles source responses and fires the `results` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
    @method _onResponse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
    _onResponse: function (query, e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
        // Ignore stale responses that aren't for the current query.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
        if (query === (this.get(QUERY) || '')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
            this._parseResponse(query || '', e.response, e.data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
    // -- Protected Default Event Handlers -------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
    Default `clear` event handler. Sets the `results` attribute to an empty
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
    array and `query` to null.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
    @method _defClearFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
    _defClearFn: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
        this._set(QUERY, null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
        this._set(RESULTS, []);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
    Default `query` event handler. Sets the `query` attribute and sends a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
    request to the source if one is configured.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
    @method _defQueryFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
    _defQueryFn: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
        Y.log('query: "' + e.query + '"; inputValue: "' + e.inputValue + '"', 'info', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
        this.sendRequest(e.query); // sendRequest will set the 'query' attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
    Default `results` event handler. Sets the `results` attribute to the latest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
    results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
    @method _defResultsFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
    @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
    @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
    _defResultsFn: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
        Y.log('results: ' + Y.dump(e.results), 'info', 'autocomplete-base');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
        this._set(RESULTS, e[RESULTS]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
AutoCompleteBase.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
    Whether or not to enable the browser's built-in autocomplete functionality
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
    for input fields.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
    @attribute allowBrowserAutocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
    @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
    @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
    allowBrowserAutocomplete: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
        value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
    When a `queryDelimiter` is set, trailing delimiters will automatically be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
    stripped from the input value by default when the input node loses focus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
    Set this to `true` to allow trailing delimiters.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
    @attribute allowTrailingDelimiter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
    @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
    @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
    allowTrailingDelimiter: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
        value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
    Whether or not to enable in-memory caching in result sources that support
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
    it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
    @attribute enableCache
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
    @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
    @default true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
    @since 3.5.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
    enableCache: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
        lazyAdd: false, // we need the setter to run on init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
        setter: '_setEnableCache',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
        value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
    Node to monitor for changes, which will generate `query` events when
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
    appropriate. May be either an `<input>` or a `<textarea>`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
    @attribute inputNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
    @type Node|HTMLElement|String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
    @initOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
    inputNode: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
        setter: Y.one,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
        writeOnce: 'initOnly'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
    Maximum number of results to return. A value of `0` or less will allow an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
    unlimited number of results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
    @attribute maxResults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
    @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
    @default 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
    maxResults: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
        value: 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
    Minimum number of characters that must be entered before a `query` event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
    will be fired. A value of `0` allows empty queries; a negative value will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
    effectively disable all `query` events.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
    @attribute minQueryLength
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
    @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
    @default 1
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
    minQueryLength: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
        value: 1
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
    Current query, or `null` if there is no current query.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
    The query might not be the same as the current value of the input node, both
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
    for timing reasons (due to `queryDelay`) and because when one or more
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
    `queryDelimiter` separators are in use, only the last portion of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
    delimited input string will be used as the query value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
    @attribute query
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
    @type String|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
    @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
    @readonly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
    query: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
        readOnly: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
    Number of milliseconds to delay after input before triggering a `query`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
    event. If new input occurs before this delay is over, the previous input
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
    event will be ignored and a new delay will begin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
    This can be useful both to throttle queries to a remote data source and to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
    avoid distracting the user by showing them less relevant results before
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
    they've paused their typing.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
    @attribute queryDelay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
    @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
    @default 100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
    queryDelay: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
        value: 100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
    Query delimiter string. When a delimiter is configured, the input value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
    will be split on the delimiter, and only the last portion will be used in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
    autocomplete queries and updated when the `query` attribute is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
    modified.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
    @attribute queryDelimiter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
    @type String|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
    @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
    queryDelimiter: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
    Source request template. This can be a function that accepts a query as a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
    parameter and returns a request string, or it can be a string containing the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
    placeholder "{query}", which will be replaced with the actual URI-encoded
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
    query. In either case, the resulting string will be appended to the request
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
    URL when the `source` attribute is set to a remote DataSource, JSONP URL, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
    XHR URL (it will not be appended to YQL URLs).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
    While `requestTemplate` may be set to either a function or a string, it will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
    always be returned as a function that accepts a query argument and returns a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
    string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
    @attribute requestTemplate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
    @type Function|String|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
    @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
    requestTemplate: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
        setter: '_setRequestTemplate',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
    Array of local result filter functions. If provided, each filter will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
    called with two arguments when results are received: the query and an array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
    of result objects. See the documentation for the `results` event for a list
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
    of the properties available on each result object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
    Each filter is expected to return a filtered or modified version of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
    results array, which will then be passed on to subsequent filters, then the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
    `resultHighlighter` function (if set), then the `resultFormatter` function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
    (if set), and finally to subscribers to the `results` event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
    If no `source` is set, result filters will not be called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
    Prepackaged result filters provided by the autocomplete-filters and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
    autocomplete-filters-accentfold modules can be used by specifying the filter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
    name as a string, such as `'phraseMatch'` (assuming the necessary filters
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
    module is loaded).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
    @attribute resultFilters
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
    @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
    @default []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
    resultFilters: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
        setter: '_setResultFilters',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
        value: []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
    Function which will be used to format results. If provided, this function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
    will be called with two arguments after results have been received and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
    filtered: the query and an array of result objects. The formatter is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
    expected to return an array of HTML strings or Node instances containing the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
    desired HTML for each result.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
    See the documentation for the `results` event for a list of the properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
    available on each result object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
    If no `source` is set, the formatter will not be called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
    @attribute resultFormatter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
    @type Function|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
    resultFormatter: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
        validator: _FUNCTION_VALIDATOR,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
    Function which will be used to highlight results. If provided, this function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
    will be called with two arguments after results have been received and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
    filtered: the query and an array of filtered result objects. The highlighter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
    is expected to return an array of highlighted result text in the form of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
    HTML strings.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
    See the documentation for the `results` event for a list of the properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
    available on each result object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
    If no `source` is set, the highlighter will not be called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
    @attribute resultHighlighter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
    @type Function|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
    resultHighlighter: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
        setter: '_setResultHighlighter',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
    Locator that should be used to extract an array of results from a non-array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
    response.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
    By default, no locator is applied, and all responses are assumed to be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
    arrays by default. If all responses are already arrays, you don't need to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
    define a locator.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
    The locator may be either a function (which will receive the raw response as
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
    an argument and must return an array) or a string representing an object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
    path, such as "foo.bar.baz" (which would return the value of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
    `result.foo.bar.baz` if the response is an object).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
    While `resultListLocator` may be set to either a function or a string, it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
    will always be returned as a function that accepts a response argument and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
    returns an array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
    @attribute resultListLocator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
    @type Function|String|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
    resultListLocator: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
        setter: '_setLocator',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
    Current results, or an empty array if there are no results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
    @attribute results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
    @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
    @default []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
    @readonly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
    results: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
        readOnly: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
        value: []
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
    Locator that should be used to extract a plain text string from a non-string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
    result item. The resulting text value will typically be the value that ends
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
    up being inserted into an input field or textarea when the user of an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
    autocomplete implementation selects a result.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
    By default, no locator is applied, and all results are assumed to be plain
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
    text strings. If all results are already plain text strings, you don't need
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
    to define a locator.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
    The locator may be either a function (which will receive the raw result as
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
    an argument and must return a string) or a string representing an object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
    path, such as "foo.bar.baz" (which would return the value of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
    `result.foo.bar.baz` if the result is an object).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
    While `resultTextLocator` may be set to either a function or a string, it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
    will always be returned as a function that accepts a result argument and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
    returns a string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
    @attribute resultTextLocator
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
    @type Function|String|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
    resultTextLocator: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
        setter: '_setLocator',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
    Source for autocomplete results. The following source types are supported:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
    <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
      <dt>Array</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
        The full array will be provided to any configured filters for each
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
        query. This is an easy way to create a fully client-side autocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
        implementation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
        Example: `['first result', 'second result', 'etc']`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
      <dt>DataSource</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
        A `DataSource` instance or other object that provides a DataSource-like
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
        `sendRequest` method. See the `DataSource` documentation for details.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
      <dt>Function</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
        A function source will be called with the current query and a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
        callback function as parameters, and should either return an array of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
        results (for synchronous operation) or return nothing and pass an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
        array of results to the provided callback (for asynchronous
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
        operation).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
        Example (synchronous):
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
        <pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
        function (query) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
            return ['foo', 'bar'];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
        </pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
        Example (async):
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
        <pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
        function (query, callback) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
            callback(['foo', 'bar']);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
        </pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
      <dt>Object</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
        An object will be treated as a query hashmap. If a property on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
        object matches the current query, the value of that property will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
        used as the response.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
        The response is assumed to be an array of results by default. If the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1318
        response is not an array, provide a `resultListLocator` to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1319
        process the response and return an array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1320
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1321
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
        Example: `{foo: ['foo result 1', 'foo result 2'], bar: ['bar result']}`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
    </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
    If the optional `autocomplete-sources` module is loaded, then
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
    the following additional source types will be supported as well:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1330
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1331
    <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1332
      <dt>&lt;select&gt; Node</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1333
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1334
        You may provide a YUI Node instance wrapping a &lt;select&gt;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1335
        element, and the options in the list will be used as results. You
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1336
        will also need to specify a `resultTextLocator` of 'text'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1337
        or 'value', depending on what you want to use as the text of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1338
        result.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1339
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1340
        Each result will be an object with the following properties:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1341
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
        <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
          <dt>html (String)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
          <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
            <p>HTML content of the &lt;option&gt; element.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
          </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
          <dt>index (Number)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
          <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
            <p>Index of the &lt;option&gt; element in the list.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
          </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
          <dt>node (Y.Node)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
          <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
            <p>Node instance referring to the original &lt;option&gt; element.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
          </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
          <dt>selected (Boolean)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
          <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
            <p>Whether or not this item is currently selected in the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
            &lt;select&gt; list.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
          </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
          <dt>text (String)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
          <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
            <p>Text content of the &lt;option&gt; element.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
          </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
          <dt>value (String)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
          <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1371
            <p>Value of the &lt;option&gt; element.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1372
          </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1373
        </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1374
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1375
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1376
      <dt>String (JSONP URL)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1377
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
        If a URL with a `{callback}` placeholder is provided, it will be used to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
        make a JSONP request. The `{query}` placeholder will be replaced with
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
        the current query, and the `{callback}` placeholder will be replaced
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
        with an internally-generated JSONP callback name. Both placeholders must
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
        appear in the URL, or the request will fail. An optional `{maxResults}`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
        placeholder may also be provided, and will be replaced with the value of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
        the maxResults attribute (or 1000 if the maxResults attribute is 0 or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
        less).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1387
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1388
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1389
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1390
        The response is assumed to be an array of results by default. If the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1391
        response is not an array, provide a `resultListLocator` to process the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1392
        response and return an array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1393
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1394
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1395
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1396
        <strong>The `jsonp` module must be loaded in order for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1397
        JSONP URL sources to work.</strong> If the `jsonp` module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1398
        is not already loaded, it will be loaded on demand if possible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1399
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1401
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1402
        Example: `'http://example.com/search?q={query}&callback={callback}'`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1403
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1404
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1405
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1406
      <dt>String (XHR URL)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1407
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1408
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1409
        If a URL without a `{callback}` placeholder is provided, it will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1410
        to make a same-origin XHR request. The `{query}` placeholder will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1411
        replaced with the current query. An optional `{maxResults}` placeholder
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1412
        may also be provided, and will be replaced with the value of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1413
        maxResults attribute (or 1000 if the maxResults attribute is 0 or less).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1414
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1415
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1416
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1417
        The response is assumed to be a JSON array of results by default. If the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1418
        response is a JSON object and not an array, provide a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1419
        `resultListLocator` to process the response and return an array. If the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1420
        response is in some form other than JSON, you will need to use a custom
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1421
        DataSource instance as the source.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1422
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1423
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1424
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1425
        <strong>The `io-base` and `json-parse` modules
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1426
        must be loaded in order for XHR URL sources to work.</strong> If
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1427
        these modules are not already loaded, they will be loaded on demand
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1428
        if possible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1429
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1430
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1431
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1432
        Example: `'http://example.com/search?q={query}'`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1433
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1434
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1435
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1436
      <dt>String (YQL query)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1437
      <dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1438
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1439
        If a YQL query is provided, it will be used to make a YQL request. The
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1440
        `{query}` placeholder will be replaced with the current autocomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1441
        query. This placeholder must appear in the YQL query, or the request
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1442
        will fail. An optional `{maxResults}` placeholder may also be provided,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1443
        and will be replaced with the value of the maxResults attribute (or 1000
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1444
        if the maxResults attribute is 0 or less).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1445
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1446
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1447
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1448
        <strong>The `yql` module must be loaded in order for YQL
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1449
        sources to work.</strong> If the `yql` module is not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1450
        already loaded, it will be loaded on demand if possible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1451
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1453
        <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1454
        Example: `'select * from search.suggest where query="{query}"'`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1455
        </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1456
      </dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1457
    </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1458
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1459
    As an alternative to providing a source, you could simply listen for `query`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1460
    events and handle them any way you see fit. Providing a source is optional,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1461
    but will usually be simpler.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1462
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1463
    @attribute source
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1464
    @type Array|DataSource|Function|Node|Object|String|null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1465
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1466
    source: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1467
        setter: '_setSource',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1468
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1469
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1470
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1471
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1472
    May be used to force a specific source type, overriding the automatic source
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1473
    type detection. It should almost never be necessary to do this, but as they
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1474
    taught us in the Boy Scouts, one should always be prepared, so it's here if
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1475
    you need it. Be warned that if you set this attribute and something breaks,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1476
    it's your own fault.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1477
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1478
    Supported `sourceType` values are: 'array', 'datasource', 'function', and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1479
    'object'.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1480
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1481
    If the `autocomplete-sources` module is loaded, the following additional
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1482
    source types are supported: 'io', 'jsonp', 'select', 'string', 'yql'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1483
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1484
    @attribute sourceType
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1485
    @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1486
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1487
    sourceType: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1488
        value: null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1489
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1490
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1491
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1492
    If the `inputNode` specified at instantiation time has a `node-tokeninput`
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1493
    plugin attached to it, this attribute will be a reference to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1494
    `Y.Plugin.TokenInput` instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1495
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1496
    @attribute tokenInput
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1497
    @type Plugin.TokenInput
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1498
    @readonly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1499
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1500
    tokenInput: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1501
        readOnly: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1502
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1503
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1504
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1505
    Current value of the input node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1506
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1507
    @attribute value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1508
    @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1509
    @default ''
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1510
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1511
    value: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1512
        // Why duplicate this._inputNode.get('value')? Because we need a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1513
        // reliable way to track the source of value changes. We want to perform
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1514
        // completion when the user changes the value, but not when we change
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1515
        // the value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1516
        value: ''
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1517
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1518
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1519
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1520
// This tells Y.Base.create() to copy these static properties to any class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1521
// AutoCompleteBase is mixed into.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1522
AutoCompleteBase._buildCfg = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1523
    aggregates: ['SOURCE_TYPES'],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1524
    statics   : ['UI_SRC']
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1525
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1526
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1527
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1528
Mapping of built-in source types to their setter functions. DataSource instances
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1529
and DataSource-like objects are handled natively, so are not mapped here.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1530
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1531
@property SOURCE_TYPES
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1532
@type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1533
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1534
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1535
AutoCompleteBase.SOURCE_TYPES = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1536
    array     : '_createArraySource',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1537
    'function': '_createFunctionSource',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1538
    object    : '_createObjectSource'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1539
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1541
AutoCompleteBase.UI_SRC = (Y.Widget && Y.Widget.UI_SRC) || 'ui';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1543
Y.AutoCompleteBase = AutoCompleteBase;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1544
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1545
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1546
}, '@VERSION@', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1547
    "optional": [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1548
        "autocomplete-sources"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1549
    ],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1550
    "requires": [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1551
        "array-extras",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1552
        "base-build",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1553
        "escape",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1554
        "event-valuechange",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1555
        "node-base"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1556
    ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1557
});