UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

64 lines (55 loc) 2.12 kB
// Copyright (c) 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * @constructor * @extends {HTMLInputElement} */ WebInspector.HistoryInput = function() { } /** * @return {!WebInspector.HistoryInput} */ WebInspector.HistoryInput.create = function() { if (!WebInspector.HistoryInput._constructor) WebInspector.HistoryInput._constructor = registerCustomElement("input", "history-input", WebInspector.HistoryInput.prototype); return /** @type {!WebInspector.HistoryInput} */(new WebInspector.HistoryInput._constructor()); } WebInspector.HistoryInput.prototype = { createdCallback: function() { this._history = [""]; this._historyPosition = 0; this.addEventListener("keydown", this._onKeyDown.bind(this), false); }, /** * @param {!Event} event */ _onKeyDown: function(event) { if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Up.code) { this._historyPosition = Math.max(this._historyPosition - 1, 0); this.value = this._history[this._historyPosition]; this.dispatchEvent(createEvent("input", true, true)); event.consume(true); } else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Down.code) { this._historyPosition = Math.min(this._historyPosition + 1, this._history.length - 1); this.value = this._history[this._historyPosition]; this.dispatchEvent(createEvent("input", true, true)); event.consume(true); } else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Enter.code) { this._saveToHistory(); } }, _saveToHistory: function() { if (this._history.length > 1 && this._history[this._history.length - 2] === this.value) return; this._history[this._history.length - 1] = this.value; this._historyPosition = this._history.length - 1; this._history.push(""); }, __proto__: HTMLInputElement.prototype }