HistoryInput.js 1.4 KB

12345678
  1. export default class HistoryInput extends HTMLInputElement{constructor(){super();this._history=[''];this._historyPosition=0;this.addEventListener('keydown',this._onKeyDown.bind(this),false);this.addEventListener('input',this._onInput.bind(this),false);}
  2. static create(){if(!HistoryInput._constructor){HistoryInput._constructor=UI.registerCustomElement('input','history-input',HistoryInput);}
  3. return(HistoryInput._constructor());}
  4. _onInput(event){if(this._history.length===this._historyPosition+1){this._history[this._history.length-1]=this.value;}}
  5. _onKeyDown(event){if(event.keyCode===UI.KeyboardShortcut.Keys.Up.code){this._historyPosition=Math.max(this._historyPosition-1,0);this.value=this._history[this._historyPosition];this.dispatchEvent(new Event('input',{'bubbles':true,'cancelable':true}));event.consume(true);}else if(event.keyCode===UI.KeyboardShortcut.Keys.Down.code){this._historyPosition=Math.min(this._historyPosition+1,this._history.length-1);this.value=this._history[this._historyPosition];this.dispatchEvent(new Event('input',{'bubbles':true,'cancelable':true}));event.consume(true);}else if(event.keyCode===UI.KeyboardShortcut.Keys.Enter.code){this._saveToHistory();}}
  6. _saveToHistory(){if(this._history.length>1&&this._history[this._history.length-2]===this.value){return;}
  7. this._history[this._history.length-1]=this.value;this._historyPosition=this._history.length-1;this._history.push('');}}
  8. self.UI=self.UI||{};UI=UI||{};UI.HistoryInput=HistoryInput;