From cca9334bd37fa9628f382bf1cca03108116dd68d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 26 Mar 2015 22:58:22 -0600 Subject: [PATCH] * WIP on standard menu and menu.json MCI / form mapping. Much to do... --- core/menu_util.js | 54 +++++++++++++++++++- mods/logoff.js | 2 + mods/menu.json | 12 ++++- mods/standard_menu.js | 114 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 mods/standard_menu.js diff --git a/core/menu_util.js b/core/menu_util.js index 84eb2c62..634fd9e0 100644 --- a/core/menu_util.js +++ b/core/menu_util.js @@ -9,9 +9,12 @@ var conf = require('./config.js'); var fs = require('fs'); var paths = require('path'); var async = require('async'); +var assert = require('assert'); + var stripJsonComments = require('strip-json-comments'); exports.loadMenu = loadMenu; +exports.getFormConfig = getFormConfig; function loadMenu(name, client, cb) { /* @@ -58,4 +61,53 @@ function loadMenu(name, client, cb) { } } ); -} \ No newline at end of file +} + + + +function getFormConfig(menuConfig, mciMap, cb) { + async.filter( + menuConfig.form, + function check(form, callback) { + if(!form.mciReq || form.mciReq.length <= 0) { + callback(false); + return; + } + + var count = form.mciReq.length; + for(var i = 0; i < count; ++i) { + if(!mciMap[form.mciReq[i]]) { + callback(false); + } + } + callback(true); + }, + function filtered(form) { + if(form.length > 0) { + assert(1 === form.length); + cb(form[0]); + } else { + cb(null); + } + } + ); +} + +/* +function getFormConfig(menuConfig, mciMap) { + var count = menuConfig.form ? menuConfig.form.length : 0; + var mciReq; + for(var i = 0; i < count; ++i) { + mciReq = menuConfig.form[i].mciReq; + if(mciReq) { + if(mciReq.length === mciMap.length) { + for(var m = 0; m < mciReq.length; ++m) { + if(!mciMap[mciReq[m]]) { + return null; + } + } + } + } + } +} +*/ \ No newline at end of file diff --git a/mods/logoff.js b/mods/logoff.js index b2b4fa7f..8c4df5b7 100644 --- a/mods/logoff.js +++ b/mods/logoff.js @@ -34,6 +34,8 @@ LogOffModule.prototype.mciReady = function(mciMap) { LogOffModule.prototype.finishedLoading = function() { LogOffModule.super_.prototype.finishedLoading.call(this); + + this.client.term.write(ansi.normal() + '\nATH0\n'); this.client.end(); }; \ No newline at end of file diff --git a/mods/menu.json b/mods/menu.json index 3ebd2245..fe33e05c 100644 --- a/mods/menu.json +++ b/mods/menu.json @@ -4,7 +4,17 @@ */ "matrix" : { "art" : "matrix", - "module" : "matrix" + "form" : [ + { + "mciReq" : [ "VM1" ], + "VM1" : { + "submit" : true, + "focus" : true, + "items" : [ "Login", "Apply", "Log Off" ] + } + } + ] + //"module" : "matrix" }, "login" : { "art" : "login", diff --git a/mods/standard_menu.js b/mods/standard_menu.js new file mode 100644 index 00000000..ac7cad48 --- /dev/null +++ b/mods/standard_menu.js @@ -0,0 +1,114 @@ +/* jslint node: true */ +'use strict'; + +var ansi = require('../core/ansi_term.js'); +var MenuModule = require('../core/menu_module.js').MenuModule; +var ViewController = require('../core/view_controller.js').ViewController; +var menuUtil = require('../core/menu_util.js'); + +exports.getModule = StandardMenuModule; + +exports.moduleInfo = { + name : 'Standard Menu Module', + desc : 'Menu module handling most standard stuff', + author : 'NuSkooler', +}; + +function StandardMenuModule(menuConfig) { + MenuModule.call(this, menuConfig); +} + +require('util').inherits(StandardMenuModule, MenuModule); + + +StandardMenuModule.prototype.enter = function(client) { + StandardMenuModule.super_.prototype.enter.call(this, client); +}; + +StandardMenuModule.prototype.beforeArt = function() { + StandardMenuModule.super_.prototype.beforeArt.call(this); + + this.client.term.write(ansi.resetScreen()); // :TODO: this should be optional +}; + +StandardMenuModule.prototype.mciReady = function(mciMap) { + StandardMenuModule.super_.prototype.mciReady.call(this, mciMap); + + var self = this; + + menuUtil.getFormConfig(self.menuConfig, mciMap, function onFormConfig(formConfig) { + console.log(formConfig); + var vc = self.addViewController(new ViewController(self.client)); + vc.loadFromMCIMap(mciMap); + vc.setViewOrder(); + + vc.getView(1).setItems(['Login', 'New User', 'Goodbye!']); + vc.getView(1).submit = true; + vc.switchFocus(1); + }); + + /* + { + "menuName" : { + "form" : [ + { + "mciReq" : [ "MC1", "MC2", ... ], + "MC1" : { + "text" : "...", + "focus" : true, + "submit" : true, + }, + + } + + + ] + } + }*/ + + /* + if(mciMap.ET1 && mciMap.ET2 && mciMap.BN1 && mciMap.BN2 && mciMap.BN3) { + // + // Form via EditTextViews and ButtonViews + // * ET1 - userName + // * ET2 - password + // * BN1 - Login + // * BN2 - New + // * BN3 - Bye! + // + } else if(mciMap.VM1) { + // + // Menu via VerticalMenuView + // + // * VM1 - menu with the following items: + // 0 - Login + // 1 - New + // 2 - Bye! + // + //var vc = new ViewController(client); + var vc = self.addViewController(new ViewController(self.client)); + + vc.on('submit', function onSubmit(form) { + console.log(form); + + var viewModuleMap = { + '0' : 'login', + '1' : 'new', + '2' : 'logoff', + }; + + if(0 === form.id && 1 === form.submitId) { + console.log(viewModuleMap[form.values[1]]); + self.client.gotoMenuModule(viewModuleMap[form.values[1]]); + } + }); + + vc.loadFromMCIMap(mciMap); + vc.setViewOrder(); + // :TODO: Localize + vc.getView(1).setItems(['Login', 'New User', 'Goodbye!']); + vc.getView(1).submit = true; + vc.switchFocus(1); + } + */ +};