Fix **, start of control methods and registration

This commit is contained in:
Deon George 2020-07-06 22:55:58 +10:00
parent 6139db24d3
commit 83f3788b68
2 changed files with 56 additions and 14 deletions

View File

@ -42,7 +42,7 @@ var ERR_ROUTE ='\1n\1h\1WMISTAKE? \1GTRY AGAIN OR TELL US ON *08';
var ERR_METHOD_NOT_EXIST ='\1n\1h\1WMISTAKE? \1GTRY AGAIN OR TELL US ON *08';
var ACCESS_DENIED ='\1n\1h\1RACCESS DENIED. \1RMISTAKE? TRY AGAIN OR TELL US *08';
var NO_HISTORY_FRAMES =['98b'];
var NO_HISTORY_FRAMES =['980a','98b','981a'];
var SYSTEM_FRAMES =['AWgBUkEBR04BQlMBWUkBbgE3AWt0ZXgBbg=='];
@ -84,7 +84,7 @@ function Frame() {
log(LOG_DEBUG,'- FRAME User: ['+JSON.stringify(user)+']');
// Dont show the page number on system login page
if (user.number || this.type != FRAME_TYPE_LOGIN) {
if (user.number || (this.type != FRAME_TYPE_LOGIN && NO_HISTORY_FRAMES.indexOf(this.page) == -1)) {
header = '\1n'+owner+' '.repeat(FRAME_HEADER-console.strlen(owner))+'\1n '+
'\1W\1H'+this.page+' '.repeat(FRAME_PAGENUM-this.page.length)+' '+
'\1G\1H'+' '.repeat(FRAME_COST-this.cost.toString().length)+this.cost+FRAME_COSTUNIT+
@ -353,6 +353,7 @@ Frame.prototype.parse = function(text) {
ftype: fieldtype,
flength: fieldlen,
fchar: fieldchar,
fname: field,
r: r,
c: c,
attribute: {i:i,f:f,b:b},

65
main.js
View File

@ -23,7 +23,7 @@ while(bbs.online) {
var mode = false; // Initial mode
// If the user is already on, our start page is 98b
var next_page = { frame: 98,index: user.number ? 'b' : 'a' }; // Start Frame
var next_page = user.number ? { frame: 98,index: 'b' } : { frame: 980,index: 'a' }; // Start Frame
var action = ACTION_GOTO; // Initial action
var inkey_timeout = 10000; // Timeout waiting for input @todo required? check if idle timeout occurs
@ -31,6 +31,9 @@ while(bbs.online) {
var fn = null; // Current Field Number for an Input Frame
var history = []; // Page history
var cf = null; // Current Input Field
var cc = null; // Current Control Method
var control = []; // Methods that need to process input
ansi.send('ext_mode','clear','cursor');
@ -48,6 +51,14 @@ while(bbs.online) {
system.node_list[bbs.node_num-1].action=0xff; // to ensure our node status is updated correctly
if (mode != MODE_BL && control.length) {
cc = control[control.length-1];
log(LOG_DEBUG,'CONTROL START: ['+read+'] ('+cc+')');
read = cc.handle(read);
log(LOG_DEBUG,'CONTROL END: ['+read+']');
}
log(LOG_DEBUG,'MODE START: ['+read+']');
switch (mode) {
case false:
@ -69,8 +80,15 @@ while(bbs.online) {
case '7':
case '8':
case '9':
if (fo.key[read]) {
next_page = { frame: fo.key[read] };
log(LOG_DEBUG,'- false: Key ['+read+'] Route ['+fo.key[read]+']');
if (fo.key[read] !== null) {
// If are requesting a home page
if (fo.key[read] === 0) {
next_page = { frame: user.number ? 1 : 98,index: 'a' };
} else {
next_page = { frame: fo.key[read] };
}
action = ACTION_GOTO;
log(LOG_DEBUG,'- false: Key ['+read+'] ['+pageStr(next_page)+']');
@ -162,7 +180,19 @@ while(bbs.online) {
cmd = '';
cursorOff();
// @todo If we are editing a field...
if (cf) {
// If there is a control for this field,
if (cc)
cc.prefield();
mode = MODE_FIELD;
console.gotoxy(cf.c,cf.r);
console.write(KEY_ESC+'['+cf.attribute.i+';'+cf.attribute.f+';'+cf.attribute.b+'m');
console.write(cf.fchar.repeat(cf.fvalue.length));
console.gotoxy(cf.c,cf.r);
ansi.send('ext_mode','set','cursor');
cf.fvalue = '';
}
}
if (read == '#' || read == '\r') {
@ -175,7 +205,7 @@ while(bbs.online) {
action = ACTION_BACKUP;
} else if (cmd == '0') {
next_page = { frame: 1 }; // @todo specify home page in config
next_page = { frame: user.number ? 1 : 98,index: 'a' }; // @todo specify home page in config
action = ACTION_GOTO;
// Edit frame
@ -208,14 +238,13 @@ while(bbs.online) {
case '\r':
log(LOG_DEBUG,'- MODE_FIELD:FRAME_TYPE_LOGIN: ['+read+'] A');
// If we are the main login screen, see if it is a new user
//if ($this->fo->isCUG(0)) {
if (fo.frame_fields[fn].ftype == 't' && fo.frame_fields[fn].fvalue == 'NEW') {
action = ACTION_GOTO;
next_page = { frame: 981,index: 'a' }; // @todo This should be in the INI.
// @todo Need to make sure this is only actioned on user login
if (cf.ftype == 't' && cf.fvalue.toUpperCase() == 'NEW') {
action = ACTION_GOTO;
next_page = { frame: 981,index: 'a' }; // @todo This should be in the INI.
break;
}
//}
break;
}
break;
}
@ -238,6 +267,10 @@ while(bbs.online) {
log(LOG_DEBUG,'fn:'+fn+', cf'+JSON.stringify(cf));
if (cf) {
// If there is a control for this field,
if (cc)
cc.prefield();
mode = MODE_FIELD;
console.gotoxy(cf.c,cf.r);
console.write(KEY_ESC+'['+cf.attribute.i+';'+cf.attribute.f+';'+cf.attribute.b+'m');
@ -654,6 +687,14 @@ while(bbs.online) {
mode = false;
}
// If this is the register page
// @todo this needs to be configurable
if (fo.page == '981a') {
log(LOG_DEBUG,'Adding REGISTER to control stack');
require('ansitex/load/register.js','CONTROL_REGISTER');
control.push(new register());
}
break;
// Standard Frame