summaryrefslogtreecommitdiffstats
path: root/vnfmarket/src/main/webapp/vnfmarket/node_modules/karma/lib/init/state_machine.js
diff options
context:
space:
mode:
Diffstat (limited to 'vnfmarket/src/main/webapp/vnfmarket/node_modules/karma/lib/init/state_machine.js')
-rw-r--r--vnfmarket/src/main/webapp/vnfmarket/node_modules/karma/lib/init/state_machine.js141
1 files changed, 141 insertions, 0 deletions
diff --git a/vnfmarket/src/main/webapp/vnfmarket/node_modules/karma/lib/init/state_machine.js b/vnfmarket/src/main/webapp/vnfmarket/node_modules/karma/lib/init/state_machine.js
new file mode 100644
index 00000000..3761a65d
--- /dev/null
+++ b/vnfmarket/src/main/webapp/vnfmarket/node_modules/karma/lib/init/state_machine.js
@@ -0,0 +1,141 @@
+var util = require('util')
+var EventEmitter = require('events').EventEmitter
+
+var StateMachine = function (rli, colors) {
+ var questions
+ var currentQuestion
+ var answers
+ var currentOptions
+ var currentOptionsPointer
+ var currentQuestionId
+ var done
+
+ EventEmitter.call(this)
+
+ var showPrompt = function () {
+ rli.write(colors.ANSWER)
+ rli.prompt()
+ }
+
+ this.onKeypress = function (key) {
+ if (!currentOptions || !key) {
+ return
+ }
+
+ if (key.name === 'tab' || key.name === 'right' || key.name === 'down') {
+ this.suggestNextOption()
+ } else if (key.name === 'left' || key.name === 'up') {
+ currentOptionsPointer = currentOptionsPointer + currentOptions.length - 2
+ this.suggestNextOption()
+ }
+
+ if (!key.ctrl && !key.meta && key.name !== 'enter' && key.name !== 'return') {
+ key.name = 'escape'
+ }
+ }
+
+ this.suggestNextOption = function () {
+ if (!currentOptions) {
+ return
+ }
+
+ currentOptionsPointer = (currentOptionsPointer + 1) % currentOptions.length
+ rli._deleteLineLeft()
+ rli._deleteLineRight()
+ rli.write(currentOptions[currentOptionsPointer])
+ }
+
+ this.kill = function () {
+ currentOptions = null
+ currentQuestionId = null
+ rli.write('\n' + colors.RESET + '\n')
+ rli.close()
+ }
+
+ this.onLine = function (line) {
+ if (currentQuestionId) {
+ rli.write(colors.RESET)
+ line = line.trim().replace(colors.ANSWER, '').replace(colors.RESET, '')
+
+ if (currentOptions) {
+ currentOptionsPointer = currentOptions.indexOf(line)
+ if (currentOptionsPointer === -1) {
+ return
+ }
+ }
+
+ if (line === '') {
+ line = null
+ }
+
+ if (currentQuestion.boolean) {
+ line = (line === 'yes' || line === 'true' || line === 'on')
+ }
+
+ if (line !== null && currentQuestion.validate) {
+ currentQuestion.validate(line)
+ }
+
+ if (currentQuestion.multiple) {
+ answers[currentQuestionId] = answers[currentQuestionId] || []
+ if (line !== null) {
+ answers[currentQuestionId].push(line)
+ showPrompt()
+
+ if (currentOptions) {
+ currentOptions.splice(currentOptionsPointer, 1)
+ currentOptionsPointer = -1
+ }
+ } else {
+ this.nextQuestion()
+ }
+ } else {
+ answers[currentQuestionId] = line
+ this.nextQuestion()
+ }
+ }
+ }
+
+ this.nextQuestion = function () {
+ currentQuestion = questions.shift()
+
+ while (currentQuestion && currentQuestion.condition && !currentQuestion.condition(answers)) {
+ currentQuestion = questions.shift()
+ }
+
+ this.emit('next_question', currentQuestion)
+
+ if (currentQuestion) {
+ currentQuestionId = null
+
+ rli.write('\n' + colors.question(currentQuestion.question) + '\n')
+ rli.write(currentQuestion.hint + '\n')
+ showPrompt()
+
+ currentOptions = currentQuestion.options || null
+ currentOptionsPointer = -1
+ currentQuestionId = currentQuestion.id
+
+ this.suggestNextOption()
+ } else {
+ currentQuestionId = null
+ currentOptions = null
+
+ // end
+ this.kill()
+ done(answers)
+ }
+ }
+
+ this.process = function (_questions, _done) {
+ questions = _questions
+ answers = {}
+ done = _done
+
+ this.nextQuestion()
+ }
+}
+
+util.inherits(StateMachine, EventEmitter)
+
+module.exports = StateMachine