/*! * jQuery UI Autocomplete - v1.10.4 * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/autocomplete/ */ define([ 'jquery', 'jquery-ui-modules/menu' ], function ($, undefined) { $.widget("ui.autocomplete", { version: "1.10.4", defaultElement: "", options: { appendTo: null, autoFocus: false, delay: 300, minLength: 1, position: { my: "left top", at: "left bottom", collision: "none" }, source: null, // callbacks change: null, close: null, focus: null, open: null, response: null, search: null, select: null }, requestIndex: 0, pending: 0, _create: function () { // Some browsers only repeat keydown events, not keypress events, // so we use the suppressKeyPress flag to determine if we've already // handled the keydown event. #7269 // Unfortunately the code for & in keypress is the same as the up arrow, // so we use the suppressKeyPressRepeat flag to avoid handling keypress // events when we know the keydown event was used to modify the // search term. #7799 var suppressKeyPress, suppressKeyPressRepeat, suppressInput, nodeName = this.element[0].nodeName.toLowerCase(), isTextarea = nodeName === "textarea", isInput = nodeName === "input"; this.isMultiLine = // Textareas are always multi-line isTextarea ? true : // Inputs are always single-line, even if inside a contentEditable element // IE also treats inputs as contentEditable isInput ? false : // All other element types are determined by whether or not they're contentEditable this.element.prop("isContentEditable"); this.valueMethod = this.element[isTextarea || isInput ? "val" : "text"]; this.isNewMenu = true; this.element .addClass("ui-autocomplete-input") .attr("autocomplete", "off"); this._on(this.element, { keydown: function (event) { if (this.element.prop("readOnly")) { suppressKeyPress = true; suppressInput = true; suppressKeyPressRepeat = true; return; } suppressKeyPress = false; suppressInput = false; suppressKeyPressRepeat = false; var keyCode = $.ui.keyCode; switch (event.keyCode) { case keyCode.PAGE_UP: suppressKeyPress = true; this._move("previousPage", event); break; case keyCode.PAGE_DOWN: suppressKeyPress = true; this._move("nextPage", event); break; case keyCode.UP: suppressKeyPress = true; this._keyEvent("previous", event); break; case keyCode.DOWN: suppressKeyPress = true; this._keyEvent("next", event); break; case keyCode.ENTER: case keyCode.NUMPAD_ENTER: // when menu is open and has focus if (this.menu.active) { // #6055 - Opera still allows the keypress to occur // which causes forms to submit suppressKeyPress = true; event.preventDefault(); this.menu.select(event); } break; case keyCode.TAB: if (this.menu.active) { this.menu.select(event); } break; case keyCode.ESCAPE: if (this.menu.element.is(":visible")) { this._value(this.term); this.close(event); // Different browsers have different default behavior for escape // Single press can mean undo or clear // Double press in IE means clear the whole form event.preventDefault(); } break; default: suppressKeyPressRepeat = true; // search timeout should be triggered before the input value is changed this._searchTimeout(event); break; } }, keypress: function (event) { if (suppressKeyPress) { suppressKeyPress = false; if (!this.isMultiLine || this.menu.element.is(":visible")) { event.preventDefault(); } return; } if (suppressKeyPressRepeat) { return; } // replicate some key handlers to allow them to repeat in Firefox and Opera var keyCode = $.ui.keyCode; switch (event.keyCode) { case keyCode.PAGE_UP: this._move("previousPage", event); break; case keyCode.PAGE_DOWN: this._move("nextPage", event); break; case keyCode.UP: this._keyEvent("previous", event); break; case keyCode.DOWN: this._keyEvent("next", event); break; } }, input: function (event) { if (suppressInput) { suppressInput = false; event.preventDefault(); return; } this._searchTimeout(event); }, focus: function () { this.selectedItem = null; this.previous = this._value(); }, blur: function (event) { if (this.cancelBlur) { delete this.cancelBlur; return; } clearTimeout(this.searching); this.close(event); this._change(event); } }); this._initSource(); this.menu = $("