blob: 54daad1e1836375e4ca2b68186b965b9167d9560 [file] [log] [blame]
// 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);
this.addEventListener("input", this._onInput.bind(this), false);
},
/**
* @param {!Event} event
*/
_onInput: function(event)
{
if (this._history.length === this._historyPosition + 1)
this._history[this._history.length - 1] = this.value;
},
/**
* @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
}