enigma-bbs/mods/menu.hjson

1323 lines
28 KiB
Plaintext

{
/*
ENiGMA½ Menu Configuration
This configuration is in HJSON format. Strict to-spec JSON is also
perfectly valid. The hjson npm can be used to convert to/from JSON.
See http://hjson.org/ for more information and syntax.
*/
/*
:TODO: Fully convert to HJSON
Menu Configuration
Tip: demjson's jsonlint is an excellent tool for linting JSON files
that contains comments:
jsonlint -S menu.json
Some concept/ideas:
"mci" : {
"BT1" : {
...
"draw" : "@script:blah.js/drawButton"
// @method:scriptName[.js]/methodName (foreign .js)
// @art:artName
// @method:/methodName (local to module.js)
// ... pass isFocused/etc. into draw method
NOte that @draw & @art should check theme first.
@draw:myMethod -> theme/draw.js::myMethod(opts)
priority:
@draw:location.js/myMethod -> outside of theme
@draw:myMethod -> checks theme -> local first
-OR- just inside themes for customization...
e.g;
{
"myTheme" {
"views" : {
"VerticalMenuView" : {
"draw" : "@method:location.js/myMethod"
}
}
}
}
}
}
*/
menus: {
connected: {
art: CONNECT
next: matrix
options: {
nextTimeout: 1500
}
}
matrix: {
art: matrix
form: {
0: { // :TODO: Make form "0" the default if missing (e.g. optional)... not sure how with current structure though
VM: {
mci: {
VM1: {
submit: true
focus: true
// :TODO: need a good way to localize these ... Standard Orig->Lookup seems good.
items: [ "Login", "Apply", "Log Off" ]
}
}
submit: {
*: [
{
value: { 1: 0 }
action: @menu:login2
},
{
value: { 1: 1 },
action: @menu:apply
},
{
value: { 1: 2 },
action: @menu:logoff
}
]
}
}
}
}
}
"login" : {
"prompt" : "userLoginCredentials",
"fallback" : "matrix",
"next" : "fullLoginSequenceLoginArt",
"action" : "@systemMethod:login",
// :TODO: support alt submit method for prompts
// if present, standard filters apply. No need for multiple submit ID's
// since a prompt can only utilize one:
/*"submit" : [
{
"value" : { "password" : null },
"action" : "@systemMethod:login"
}
]*/
},
"login2" : {
"art" : "USRCRED",
"fallback" : "matrix",
next: messageArea
//"next" : "fullLoginSequenceLoginArt",
"form" : {
"0" : {
"mci" : {
"ET1" : {
"width" : 20,
"maxLength" : "@config:users.usernameMax",
"argName" : "username",
"focus" : true
},
"ET2" : {
"width" : 20,
"password" : true,
"maxLength" : "@config:users.passwordMax",
"argName" : "password",
"submit" : true
}
},
"submit" : {
"*" : [
{
"value" : { "password" : null },
"action" : "@systemMethod:login"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"action" : "@menu:matrix"
}
]
}
}
},
"logoff" : {
"art" : "LOGOFF",
"next" : "@systemMethod:logoff",
},
"apply" : {
"art" : "APPLY",
"next" : "newUserActive",
"form" : {
"0" : {
"BTBTETETETETETETETETETMETL" : {
"mci" : {
"ET1" : {
"focus" : true,
"argName" : "username",
"maxLength" : "@config:users.usernameMax"
},
"ET2" : {
"argName" : "realName",
"maxLength" : 32
},
"ME3" : {
"argName" : "birthdate",
"maskPattern" : "####/##/##"
},
"ET4" : {
"argName" : "sex",
"maxLength" : 1
},
"ET5" : {
"argName" : "location",
"maxLength" : 32
},
"ET6" : {
"argName" : "affils",
"maxLength" : 32
},
"ET7" : {
"argName" : "email",
"maxLength" : 255
},
"ET8" : {
"argName" : "web",
"maxLength" : 255
},
"ET9" : {
"argName" : "password",
"password" : true,
"maxLength" : "@config:users.passwordMax"
},
"ET10" : {
"argName" : "passwordConfirm",
"password" : true,
"maxLength" : "@config:users.passwordMax"
},
"BT12" : {
"submit" : true,
"text" : "Apply"
},
"BT13" : {
"submit" : [ "escape" ],
"text" : "Cancel"
}
},
"submit" : {
"12" : [ // Apply
{
"value" : 12, // :TODO: better, this should be optional; if not present it's a any match
"action" : "@method:apply/submitApplication",
"extraArgs" : {
"inactive" : "userNeedsActivated",
"error" : "newUserCreateError"
}
}
],
"13" : [ // Cancel
{
"value" : 13,
"action" : "@menu:matrix"
}
]
}
}
}
}
},
"fullLoginSequenceLoginArt" : {
"art" : "LOGIN",
"options" : { "pause" : true },
"next" : "fullLoginSequenceLastCallers"
},
"fullLoginSequenceLastCallers": {
"module" : "last_callers",
"art" : "LASTCALL",
"options" : { "pause" : true },
"config" : {
"dateTimeFormat" : "ddd MMM Do h:mm a"
},
"next" : "fullLoginSequenceSysStats"
},
"fullLoginSequenceSysStats" : {
"art" : "SYSSTAT",
"options" : { "pause" : true },
"next" : "fullLoginSequenceUserStats"
},
"fullLoginSequenceUserStats" : {
"art" : "USRSTAT",
"options" : { "pause" : true },
"next" : "mainMenu"
},
"newUserActive" : {
"art" : "SO-CC1.ANS",
"options" : { "pause" : true },
"next" : "currentUserStats"
},
"currentUserStats" : {
"art" : "userstats",
"options" : { "pause" : true }
//"action" : "@menu:lastCallers"
},
"mainMenu" : {
"art" : "MMENU1",
"desc" : "Main Menu",
"prompt" : "menuCommand",
"submit" : [
{
"value" : { "command" : "G" },
"action" : "@menu:logoff"
},
{
"value" : { "command" : "D" },
"action" : "@menu:doorPimpWars"
},
/*
{
"value" : { "command" : "L" },
"action" : "@menu:doorLORD"
},
*/
{
"value" : { "command" : "L" },
"action" : "@menu:mainMenuLastCallers"
},
{
"value" : { "command" : "U" },
"action" : "@menu:mainMenuUserStats"
},
{
"value" : { "command" : "M" },
"action" : "@menu:messageArea"
},
{
"value" : 1,
"action" : "@menu:mainMenu"
}
]
},
"mainMenuLastCallers" : {
"module" : "last_callers",
"art" : "LASTCALL",
"options" : { "pause" : true },
"config" : {
"dateTimeFormat" : "ddd MMM Do h:mm a"
},
"next" : "mainMenu"
},
"mainMenuUserStats" : {
"art" : "USRSTAT",
"options" : { "pause" : true },
"next" : "mainMenu"
},
///////////////////////////////////////////////////////////////////////
// Message Area Related
///////////////////////////////////////////////////////////////////////
"messageArea" : {
"module" : "msg_area",
"art" : "MSGAREA",
"desc" : "Message Area",
"prompt" : "menuCommand",
"submit" : [
{
"value" : { "command" : "N" },
"action" : "@menu:messageAreaNewPost"//,
//"extraArgs" : { "messageAreaId" : 123 }
},
{
"value" : { "command" : "C" },
"action" : "@menu:messageAreaChangeCurrentArea"
},
{
"value" : { "command" : "L" },
"action" : "@menu:messageAreaMessageList"
},
/*{
"value" : { "command" : "A" },
"action" : "@method:changeArea"
},
*/
{
"value" : { "command" : "Q" },
"action" : "@menu:mainMenu"
},
{
"value" : 1,
"action" : "@menu:messageArea"
}
]
},
"messageAreaChangeCurrentArea" : {
"art" : "msg_area_list.ans",
"module" : "msg_area_list",
"fallback" : "messageArea",
"form" : {
"0" : {
"VM" : {
"mci" : {
"VM1" : {
"widht" : 30,
"height" : 10,
"focus" : true,
"submit" : true,
"argName" : "area"
}
},
"submit" : {
"*" : [
{
"value" : { "area" : null },
"action" : "@method:changeArea"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"action" : "@menu:messageArea"
}
]
}
}
}
},
"messageAreaMessageList" : {
"module" : "msg_list",
"art" : "msg_list",
"fallback" : "messageArea",
"config" : {
"listType" : "public"
},
"form" : {
"0" : {
"VM" : {
"mci" : {
"VM1" : {
"height" : 10,
"focus" : true,
"submit" : true,
"argName" : "message"
}
},
"submit" : {
"*": [
{
"value" : { "message" : null },
"action" : "@method:selectMessage"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"action" : "@menu:messageArea"
}
]
}
}
}
},
messageAreaViewPost: {
module: msg_area_view_fse
// :TODO: remove once default fallback is in place
fallback: messageArea
config: {
art: {
header: MSGVHDR
// :TODO: fix these!!
body: MSGBODY
footerEdit: demo_fse_netmail_footer_edit.ans
footerEditMenu: demo_fse_netmail_footer_edit_menu.ans
footerView: MSGVFTR
help: demo_fse_netmail_help.ans
},
editorMode: view
editorType: area
},
"form" : {
"0" : {
"mci" : {
"TL1" : {
"width" : 27
},
"TL2" : {
"width" : 27
},
"TL3" : {
//"width" : 39,
//"width" : 27,
//"textOverflow" : "..."
},
"TL5" : {
"width" : 27
},
"MA5" : {
"width" : 27,
"textOverflow" : "..."
}
}
},
"1" : {
"mci" : {
"MT1" : {
"width" : 79,
"height" : 12,
"mode" : "preview"
}
},
"submit" : {
"*" : [
{
"value" : "message",
"action" : "@method:editModeEscPressed"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 1
}
]
},
"2" : {
"TLTL" : {
"mci" : {
"TL1" : {
"width" : 5
},
"TL2" : {
"width" : 4
}
}
}
},
"4" : {
"mci" : {
"HM1" : {
// (P)rev/(N)ext/Post/(R)eply/(Q)uit/(?)Help
// (#)Jump/(L)Index (msg list)/Last
"items" : [ "Prev", "Next", "Reply", "Quit", "Help" ]
}
},
"submit" : {
"*" : [
{
"value" : { "1" : 0 },
"action" : "@method:prevMessage"
},
{
"value" : { "1" : 1 },
"action" : "@method:nextMessage"
},
{
"value" : { "1" : 3 },
"action" : "@menu:messageArea"
}
]
},
"actionKeys" : [
/*
{
"keys" : [ "escape" ],
"action" : "@method:editModeEscPressed" // :TODO: fixme
},
*/
{
"keys" : [ "p", "shift + p" ],
"action" : "@method:prevMessage"
},
{
"keys" : [ "n", "shift + n" ],
"action" : "@method:nextMessage"
},
{
"keys" : [ "escape", "q", "shift + q" ],
"action" : "@menu:messageArea"
},
{
"keys" : [ "down arrow", "up arrow", "page up", "page down" ],
"action" : "@method:movementKeyPressed"
}
]
}
}
},
// :TODO: messageAreaSelect (change msg areas -> call @systemMethod -> fallback to menu
"messageAreaNewPost" : {
"status" : "Posting message",
"module" : "msg_area_post_fse",
"fallback" : "messageArea", // :TODO: remove once default fallback is in place
config: {
art: {
header: MSGEHDR
body: MSGBODY
footerEditor: MSGEFTR
footerEditorMenu: MSGEMFT
footerView: demo_fse_netmail_footer_view.ans
help: demo_fse_netmail_help.ans
},
editorMode: edit
editorType: area
},
"form" : {
"0" : {
mci: {
TL1: {
width: 27
argName: from
}
ET2: {
width: 27
argName: to
focus: true
}
"ET3" : {
"width" : 27,
"argName" : "subject",
"maxLength" : 72,
"submit" : true
},
"MA5" : {
"width" : 27,
"textOverflow" : "..."
}
},
"submit" : {
"3" : [
{
"value" : { "subject" : null },
"action" : "@method:headerSubmit"
}
]
}
},
"1" : {
"mci" : {
MT1: {
width: 79
height: 12
argName: message
mode: edit
}
}
submit: {
*: [ { "value": "message", "action": "@method:editModeEscPressed" } ]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 1
}
]
},
"2" : {
"TLTL" : {
"mci" : {
"TL1" : {
"width" : 5
},
"TL2" : {
"width" : 4
}
}
}
},
"3" : {
"HM" : {
"mci" : {
"HM1" : {
// :TODO: Continue, Save, Discard, Clear, Quote, Help
"items" : [ "Save", "Discard", "Quote", "Help" ]
}
},
"submit" : {
"*" : [
{
"value" : { "1" : 0 },
"action" : "@method:editModeMenuSave"
},
{
"value" : { "1" : 1 },
"action" : "@menu:messageArea"
},
{
"value" : { "1" : 2 },
"action" : "@method:fseSubmitProxy"
},
{
"value" : { "1" : 3 },
"action" : "@method:editModeMenuHelp"
}/*,
{
"value" : 1,
"action" : "@method:editModeEscPressed"
}*/
]
},
"actionKeys" : [ // :TODO: Need better name
{
"keys" : [ "escape" ],
"action" : "@method:editModeEscPressed"
}
]
// :TODO: something like the following for overriding keymap
// this should only override specified entries. others will default
/*
"keyMap" : {
"accept" : [ "return" ]
}
*/
}
}
}
},
///////////////////////////////////////////////////////////////////////
// Doors
///////////////////////////////////////////////////////////////////////
"doorPimpWars" : {
"module" : "abracadabra",
"fallback" : "mainMenu",
"config" : {
"name" : "PimpWars",
"dropFileType" : "DORINFO",
"cmd" : "/usr/bin/dosemu",
"args" : [
"-quiet", "-f", "/home/nuskooler/DOS/X/LORD/dosemu.conf", "X:\\PW\\START.BAT {dropfile} {node}"
],
"nodeMax" : 1,
"tooManyArt" : "doortoomany.ans"
}
},
"doorLORD" : {
"module" : "abracadabra",
"fallback" : "mainMenu",
"config" : {
"name" : "LORD",
"dropFileType" : "DOOR",
"cmd" : "/usr/bin/dosemu",
"args" : [
"-quiet", "-f", "/home/nuskooler/DOS/X/LORD/dosemu.conf", "X:\\LORD\\START.BAT {node}"
]
}
},
////////////////////////////////////////////////////////////////////////
// Mods
////////////////////////////////////////////////////////////////////////
idleLogoff: {
art: IDLELOG
next: @systemMethod:logoff
},
////////////////////////////////////////////////////////////////////////
// Mods
////////////////////////////////////////////////////////////////////////
"lastCallers" :{
"module" : "last_callers",
"art" : "LASTCALL.ANS",
"options" : { "pause" : true },
"config" : {
"dateTimeFormat" : "ddd MMM Do H:mm a"
},
"form" : {
"0" : {
"TLTLTLTL" : {
"mci" : {
// :TODO: Bug: Without any keys here, theme customization does not apply!!!!
"TL1" : {
"styleSGR1" : "|00|24"
},
"TL2" : {
"styleSGR1" : "|00|24"
},
"TL3" : {
"styleSGR1" : "|00|24"
},
"TL4" : {
"styleSGR1" : "|00|24"
}
}
}
}
}
},
////////////////////////////////////////////////////////////////////////
// Demo Section
////////////////////////////////////////////////////////////////////////
"demoMain" : {
"art" : "demo_selection_vm.ans",
"form" : {
"0" : {
"VM" : {
"mci" : {
"VM1" : {
"items" : [
"Single Line Text Editing Views",
"Spinner & Toggle Views",
"Mask Edit Views",
"Multi Line Text Editor",
"Vertical Menu Views",
"Horizontal Menu Views",
"Art Display",
"Full Screen Editor"
],
"height" : 10,
"itemSpacing" : 1,
"justify" : "center",
"focusTextStyle" : "small i"
}
},
"submit" : {
"*" : [
{
"value" : { "1" : 0 },
"action" : "@menu:demoEditTextView"
},
{
"value" : { "1" : 1 },
"action" : "@menu:demoSpinAndToggleView"
},
{
"value" : { "1" : 2 },
"action" : "@menu:demoMaskEditView"
},
{
"value" : { "1" : 3 },
"action" : "@menu:demoMultiLineEditTextView"
},
{
"value" : { "1" : 4 },
"action" : "@menu:demoVerticalMenuView"
},
{
"value" : { "1" : 5 },
"action" : "@menu:demoHorizontalMenuView"
},
{
"value" : { "1" : 6 },
"action" : "@menu:demoArtDisplay"
},
{
"value" : { "1" : 7 },
"action" : "@menu:demoFullScreenEditor"
}
]
}
}
}
}
},
"demoEditTextView" : {
"art" : "demo_edit_text_view1.ans",
"form" : {
"0" : {
"BTETETETET" : {
"mci" : {
"ET1" : {
"width" : 20,
"maxLength" : 20
},
"ET2" : {
"width" : 20,
"maxLength" : 40,
"textOverflow" : "..."
},
"ET3" : {
"width" : 20,
"fillChar" : "-",
"styleSGR1" : "|00|36",
"maxLength" : 20
},
"ET4" : {
"width" : 20,
"maxLength" : 20,
"password" : true
},
"BT5" : {
"width" : 8,
"text" : "< Back"
}
},
"submit" : {
"*" : [
{
"value" : 5,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 5
}
]
}
}
}
},
"demoSpinAndToggleView" : {
"art" : "demo_spin_and_toggle.ans",
"form" : {
"0" : {
"BTSMSMTM" : {
"mci" : {
"SM1" : {
"items" : [ "Henry Morgan", "François l'Ollonais", "Roche Braziliano", "Black Bart", "Blackbeard" ]
},
"SM2" : {
"items" : [ "Razor 1911", "DrinkOrDie", "TRSI" ]
},
"TM3" : {
"items" : [ "Yarly", "Nowaii" ],
"styleSGR1" : "|00|30|01",
"hotKeys" : { "Y" : 0, "N" : 1 }
},
"BT8" : {
"text" : "< Back"
}
},
"submit" : {
"*" : [
{
"value" : 8,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 8
}
]
}
}
}
},
"demoMaskEditView" : {
"art" : "demo_mask_edit_text_view1.ans",
"form" : {
"0" : {
"BTMEME" : {
"mci" : {
"ME1" : {
"maskPattern" : "##/##/##",
"styleSGR1" : "|00|30|01",
//"styleSGR2" : "|00|45|01",
"styleSGR3" : "|00|30|35",
"fillChar" : "#"
},
"BT5" : {
"text" : "< Back"
}
},
"submit" : {
"*" : [
{
"value" : 5,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 5
}
]
}
}
}
},
"demoMultiLineEditTextView" : {
"art" : "demo_multi_line_edit_text_view1.ans",
"form" : {
"0" : {
"BTMT" : {
"mci" : {
"MT1" : {
"width" : 70,
"height" : 17,
//"text" : "@art:demo_multi_line_edit_text_view_text.txt",
// "text" : "@systemMethod:textFromFile"
text: "Hints:\n\t* Insert / CTRL-V toggles overtype mode\n\t* CTRL-Y deletes the current line\n\t* Try Page Up / Page Down\n\t* Home goes to the start of line text\n\t* End goes to the end of a line\n\n\nTab handling:\n-------------------------------------------------\n\tA\tB\tC\tD\tE\tF\nA\tB\tC\tD\tE\tF\tG\tH\n\tA\tB\tC\tD\tE\tF\nA\tB\tC\tD\tE\tF\tG\tH\nA0\tBB\t1\tCCC\t2\tDDD\t3EEEE\nW\t\tX\t\tY\t\tZ\n\nAn excerpt from A Clockwork Orange:\n\"What sloochatted then, of course, was that my cellmates woke up and started joining in, tolchocking a bit wild in the near-dark, and the shoom seemed to wake up the whole tier, so that you could slooshy a lot of creeching and banging about with tin mugs on the wall, as though all the plennies in all the cells thought a big break was about to commence, O my brothers.\n",
"focus" : true
},
"BT5" : {
"text" : "< Back"
}
},
"submit" : {
"*" : [
{
"value" : 5,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 5
}
]
}
}
}
},
"demoHorizontalMenuView" : {
"art" : "demo_horizontal_menu_view1.ans",
"form" : {
"0" : {
"BTHMHM" : {
"mci" : {
"HM1" : {
"items" : [ "One", "Two", "Three" ],
"hotKeys" : { "1" : 0, "2" : 1, "3" : 2 }
},
"HM2" : {
"items" : [ "Uno", "Dos", "Tres" ],
"hotKeys" : { "U" : 0, "D" : 1, "T" : 2 }
},
"BT5" : {
"text" : "< Back"
}
},
"submit" : {
"*" : [
{
"value" : 5,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 5
}
]
}
}
}
},
"demoVerticalMenuView" : {
"art" : "demo_vertical_menu_view1.ans",
"form" : {
"0" : {
"BTVM" : {
"mci" : {
"VM1" : {
"items" : [
"|33Oblivion/2",
"|33iNiQUiTY",
"|33ViSiON/X"
],
"focusItems" : [
"|33Oblivion|01/|00|332",
"|01|33i|00|33N|01i|00|33QU|01i|00|33TY",
"|33ViSiON/X"
]
//
// :TODO: how to do the following:
// 1) Supply a view a string for a standard vs focused item
// "items" : [...], "focusItems" : [ ... ] ?
// "draw" : "@method:drawItemX", then items: [...]
},
"BT5" : {
"text" : "< Back"
}
},
"submit" : {
"*" : [
{
"value" : 5,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 5
}
]
}
}
}
},
"demoArtDisplay" : {
"art" : "demo_selection_vm.ans",
"form" : {
"0" : {
"VM" : {
"mci" : {
"VM1" : {
"items" : [
"Defaults - DOS ANSI",
"bw_mindgames.ans - DOS",
"test.ans - DOS",
"Defaults - Amiga",
"Pause at Term Height"
],
// :TODO: justify not working??
"focusTextStyle" : "small i"
}
},
"submit" : {
"*" : [
{
"value" : { "1" : 0 },
"action" : "@menu:demoDefaultsDosAnsi"
},
{
"value" : { "1" : 1 },
"action" : "@menu:demoDefaultsDosAnsi_bw_mindgames"
},
{
"value" : { "1" : 2 },
"action" : "@menu:demoDefaultsDosAnsi_test"
}
]
}
}
}
}
},
"demoDefaultsDosAnsi" : {
"art" : "DM-ENIG2.ANS"
},
"demoDefaultsDosAnsi_bw_mindgames" : {
"art" : "bw_mindgames.ans"
},
"demoDefaultsDosAnsi_test" : {
"art" : "test.ans"
},
"demoFullScreenEditor" : {
"module" : "@systemModule:fse",
"config" : {
"editorType" : "netMail",
"art" : {
"header" : "demo_fse_netmail_header.ans",
"body" : "demo_fse_netmail_body.ans",
"footerEditor" : "demo_fse_netmail_footer_edit.ans",
"footerEditorMenu" : "demo_fse_netmail_footer_edit_menu.ans",
"footerView" : "demo_fse_netmail_footer_view.ans",
"help" : "demo_fse_netmail_help.ans"
}
},
"form" : {
"0" : {
"ETETET" : {
"mci" : {
"ET1" : {
// :TODO: from/to may be set by args
// :TODO: focus may change dep on view vs edit
"width" : 36,
"focus" : true,
"argName" : "to"
},
"ET2" : {
"width" : 36,
"argName" : "from"
},
"ET3" : {
"width" : 65,
"maxLength" : 72,
"submit" : [ "enter" ],
"argName" : "subject"
}
},
"submit" : {
"3" : [
{
"value" : { "subject" : null },
"action" : "@method:headerSubmit"
}
]
}
}
},
"1" : {
"MT" : {
"mci" : {
"MT1" : {
"width" : 79,
"height" : 17,
"text" : "", // :TODO: should not be req.
"argName" : "message"
}
},
"submit" : {
"*" : [
{
"value" : "message",
"action" : "@method:editModeEscPressed"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 1
}
]
}
},
"2" : {
"TLTL" : {
"mci" : {
"TL1" : {
"width" : 5
},
"TL2" : {
"width" : 4
}
}
}
},
"3" : {
"HM" : {
"mci" : {
"HM1" : {
// :TODO: Continue, Save, Discard, Clear, Quote, Help
"items" : [ "Save", "Discard", "Quote", "Help" ]
}
},
"submit" : {
"*" : [
{
"value" : { "1" : 0 },
"action" : "@method:editModeMenuSave"
},
{
"value" : { "1" : 1 },
"action" : "@menu:demoMain"
},
{
"value" : { "1" : 2 },
"action" : "@method:editModeMenuQuote"
},
{
"value" : { "1" : 3 },
"action" : "@method:editModeMenuHelp"
},
{
"value" : 1,
"action" : "@method:editModeEscPressed"
}
]
},
"actionKeys" : [ // :TODO: Need better name
{
"keys" : [ "escape" ],
"action" : "@method:editModeEscPressed"
}
]
// :TODO: something like the following for overriding keymap
// this should only override specified entries. others will default
/*
"keyMap" : {
"accept" : [ "return" ]
}
*/
}
}
}
/*
"form" : {
"0" : {
"ET1ET2MT3" : {
"mci" : {
"ET1" : {
"width" : 20,
"placeholder" : "TODO support this",
"focus" : true
},
"ET2" : {
"width" : 20
},
"MT3" : {
"width" : 79,
"height" : 17,
"text" : "",
"submit" : [ "escape" ]
}
},
"submit" : {
// :TODO: It may be nice to have a way to submit without data - e.g. we just care about the key press.
"3" : [
{
"value" : 3,
"action" : "@method:editorEscPressed"
}
]
}
}
}
}
*/
}
/*
:TODO: conceptual simplified menus -- actions/etc. without forms
{
"myMenu" : {
"art" : "MENUART",
"mci" : { // lack of "form": direct to form:0 {}
"VM1" : {
"items" : [ "Hello", "Goodbye" ],
"action" : "@method:someMethod" // implies { "submit" : true }
},
"submit" : {
// alternate form with filters
}
}
}
}
*/
/*
"demoEditTextView" : {
"art" : "demo_edit_text_view.ans",
"form" : {
"0" : {
"ET1ET2ET3ET5SM4TM6" : {
"mci" : {
"ET1" : { "maxLength" : 1 },
"ET2" : { "maxLength" : 1 },
"ET3" : { "maxLength" : 1 },
"SM4" : {
"items" : [ "One", "Two", "Three", "Four" ]
},
"ET5" : {
"password" : true,
"submit" : [ "escape" ],
"fillChar" : "#"
},
"TM6" : {
"items" : [ "Yes", "No" ],
"hotkeys" : { "Y" : 0, "n" : 1 }
}
}
}
}
}
}
*/
}
}