You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.3 KiB
55 lines
1.3 KiB
'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;
|
|
|