* Some basic work on connecting modules

This commit is contained in:
Bryan Ashby 2015-03-23 23:12:19 -06:00
parent 810f001901
commit d1b0663b5d
7 changed files with 109 additions and 17 deletions

View File

@ -209,7 +209,7 @@ function clearScreen() {
} }
function resetScreen() { function resetScreen() {
return exports.goHome() + exports.eraseData(2); return exports.goHome() + exports.reset() + exports.eraseData(2);
} }
function normal() { function normal() {

View File

@ -161,11 +161,20 @@ function Client(input, output) {
} while(0 !== dsrResponseRe.lastIndex); } while(0 !== dsrResponseRe.lastIndex);
} }
}); });
self.detachCurrentMenuModule = function() {
if(self.currentMenuModule) {
self.currentMenuModule.leave();
self.currentMenuModule = null;
}
};
} }
require('util').inherits(Client, stream); require('util').inherits(Client, stream);
Client.prototype.end = function () { Client.prototype.end = function () {
this.detachCurrentMenuModule();
return this.output.end.apply(this.output, arguments); return this.output.end.apply(this.output, arguments);
}; };
@ -193,9 +202,7 @@ Client.prototype.gotoMenuModule = function(name, cb) {
// Assign a default missing module handler callback if none was provided // Assign a default missing module handler callback if none was provided
cb = miscUtil.valueWithDefault(cb, self.defaultHandlerMissingMod()); cb = miscUtil.valueWithDefault(cb, self.defaultHandlerMissingMod());
if(self.currentMenuModule) { self.detachCurrentMenuModule();
self.currentMenuModule.leave();
}
menuUtil.loadMenu(name, self, function onMenuModuleLoaded(err, modInst) { menuUtil.loadMenu(name, self, function onMenuModuleLoaded(err, modInst) {
if(err) { if(err) {

View File

@ -17,26 +17,37 @@ function MenuModule(menuConfig) {
this.viewControllers = []; this.viewControllers = [];
this.loadArt = function() { this.initSequence = function() {
async.waterfall( async.waterfall(
[ [
function beforeDisplayArt(callback) {
self.beforeArt();
callback(null);
},
function displayArt(callback) { function displayArt(callback) {
theme.displayThemeArt(self.menuConfig.art, self.client, function onArt(err, mciMap) { theme.displayThemeArt(self.menuConfig.art, self.client, function onArt(err, mciMap) {
callback(err, mciMap); // :TODO: If the art simply is not found, or failed to load... we need to continue
if(err) {
console.log('TODO: log this error properly... maybe handle slightly diff.');
}
callback(null, mciMap);
}); });
}, },
function artDisplayed(mciMap, callback) { function afterArtDisplayed(mciMap, callback) {
if(!mciMap) { if(mciMap) {
callback(null);
} else {
self.mciReady(mciMap); self.mciReady(mciMap);
} }
callback(null);
} }
], ],
function onComplete(err) { function onComplete(err) {
if(err) { if(err) {
// :TODO: Log me!!! ... and what else? // :TODO: Log me!!! ... and what else?
console.log(err);
} }
self.finishedLoading();
} }
); );
}; };
@ -47,12 +58,16 @@ require('util').inherits(MenuModule, PluginModule);
MenuModule.prototype.enter = function(client) { MenuModule.prototype.enter = function(client) {
this.client = client; this.client = client;
assert(typeof client !== 'undefined'); assert(typeof client !== 'undefined');
this.initSequence();
}; };
MenuModule.prototype.leave = function() { MenuModule.prototype.leave = function() {
this.viewControllers.forEach(function onVC(vc) {
vc.detachClientEvents(); var count = this.viewControllers.length;
}); for(var i = 0; i < count; ++i) {
this.viewControllers[i].detachClientEvents();
}
}; };
MenuModule.prototype.addViewController = function(vc) { MenuModule.prototype.addViewController = function(vc) {
@ -60,5 +75,13 @@ MenuModule.prototype.addViewController = function(vc) {
return vc; return vc;
}; };
MenuModule.prototype.mciReady = function(mciMap) { MenuModule.prototype.beforeArt = function() {
};
MenuModule.prototype.mciReady = function(mciMap) {
console.log('mciReady')
};
MenuModule.prototype.finishedLoading = function() {
console.log('finishedLoading')
}; };

View File

@ -126,7 +126,7 @@ function displayThemeArt(name, client, cb) {
} }
art.display( { art : artInfo.data, client : client, iceColors : iceColors }, function onDisplayed(err, mci) { art.display( { art : artInfo.data, client : client, iceColors : iceColors }, function onDisplayed(err, mci) {
cb(err, mci); cb(err, mci, artInfo);
}); });
} }
}); });

39
mods/goodbye.js Normal file
View File

@ -0,0 +1,39 @@
/* jslint node: true */
'use strict';
var MenuModule = require('../core/menu_module.js').MenuModule;
var ansi = require('../core/ansi_term.js');
exports.moduleInfo = {
name : 'Goodbye',
desc : 'Log off / Goodbye Module',
author : 'NuSkooler',
};
exports.getModule = GoodbyeModule;
function GoodbyeModule(menuConfig) {
MenuModule.call(this, menuConfig);
}
require('util').inherits(GoodbyeModule, MenuModule);
GoodbyeModule.prototype.enter = function(client) {
GoodbyeModule.super_.prototype.enter.call(this, client);
};
GoodbyeModule.prototype.beforeArt = function() {
GoodbyeModule.super_.prototype.beforeArt.call(this);
this.client.term.write(ansi.resetScreen());
};
GoodbyeModule.prototype.mciReady = function(mciMap) {
GoodbyeModule.super_.prototype.mciReady.call(this, mciMap);
};
GoodbyeModule.prototype.finishedLoading = function() {
GoodbyeModule.super_.prototype.finishedLoading.call(this);
this.client.end();
};

View File

@ -14,13 +14,15 @@ var ViewController = require('../core/view_controller.js').ViewController;
//var async = require('async'); //var async = require('async');
// :TODO: clean up requires
// :TODO: rename to matrix.js
exports.moduleInfo = { exports.moduleInfo = {
name : 'Matrix', name : 'Matrix',
desc : 'Standardish Matrix', desc : 'Standardish Matrix',
author : 'NuSkooler', author : 'NuSkooler',
}; };
//exports.entryPoint = entryPoint;
exports.getModule = MatrixModule; exports.getModule = MatrixModule;
@ -32,10 +34,12 @@ require('util').inherits(MatrixModule, MenuModule);
MatrixModule.prototype.enter = function(client) { MatrixModule.prototype.enter = function(client) {
MatrixModule.super_.prototype.enter.call(this, client); MatrixModule.super_.prototype.enter.call(this, client);
};
client.term.write(ansi.resetScreen()); MatrixModule.prototype.beforeArt = function() {
MatrixModule.super_.prototype.beforeArt.call(this);
this.loadArt(); this.client.term.write(ansi.resetScreen());
}; };
MatrixModule.prototype.mciReady = function(mciMap) { MatrixModule.prototype.mciReady = function(mciMap) {
@ -66,6 +70,11 @@ MatrixModule.prototype.mciReady = function(mciMap) {
vc.on('submit', function onSubmit(form) { vc.on('submit', function onSubmit(form) {
console.log(form); console.log(form);
if(0 === form.id && 1 === form.viewId) {
// :TODO: fix me. Need to finalize form data. Current is kinda... meh.
self.client.gotoMenuModule('goodbye');
}
}); });
vc.loadFromMCIMap(mciMap); vc.loadFromMCIMap(mciMap);

14
mods/menu.json Normal file
View File

@ -0,0 +1,14 @@
{
"matrix" : {
"art" : "matrix",
"module" : "matrix"
},
"login" : {
"art" : "login",
"module" : "login"
},
"goodbye" : {
"art" : "logoff",
"module" : "goodbye"
}
}