| 'use strict'; | 
|   | 
| const Prompt = require('../types/string'); | 
| const completer = require('../completer'); | 
|   | 
| class Input extends Prompt { | 
|   constructor(options) { | 
|     super(options); | 
|     let history = this.options.history; | 
|     if (history && history.store) { | 
|       let initial = history.values || this.initial; | 
|       this.autosave = !!history.autosave; | 
|       this.store = history.store; | 
|       this.data = this.store.get('values') || { past: [], present: initial }; | 
|       this.initial = this.data.present || this.data.past[this.data.past.length - 1]; | 
|     } | 
|   } | 
|   | 
|   completion(action) { | 
|     if (!this.store) return this.alert(); | 
|     this.data = completer(action, this.data, this.input); | 
|     if (!this.data.present) return this.alert(); | 
|     this.input = this.data.present; | 
|     this.cursor = this.input.length; | 
|     return this.render(); | 
|   } | 
|   | 
|   altUp() { | 
|     return this.completion('prev'); | 
|   } | 
|   | 
|   altDown() { | 
|     return this.completion('next'); | 
|   } | 
|   | 
|   prev() { | 
|     this.save(); | 
|     return super.prev(); | 
|   } | 
|   | 
|   save() { | 
|     if (!this.store) return; | 
|     this.data = completer('save', this.data, this.input); | 
|     this.store.set('values', this.data); | 
|   } | 
|   | 
|   submit() { | 
|     if (this.store && this.autosave === true) { | 
|       this.save(); | 
|     } | 
|     return super.submit(); | 
|   } | 
| } | 
|   | 
| module.exports = Input; |