enigma-bbs/misc/menu_template.in.hjson

3993 lines
73 KiB
Plaintext
Raw Normal View History

2016-06-27 07:29:17 +00:00
{
/*
./\/\.' ENiGMA½ Menu Configuration -/--/-------- - -- -
_____________________ _____ ____________________ __________\_ /
\__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp!
// __|___// | \// |// | \// | | \// \ /___ /_____
/____ _____| __________ ___|__| ____| \ / _____ \
---- \______\ -- |______\ ------ /______/ ---- |______\ - |______\ /__/ // ___/
/__ _\
<*> ENiGMA½ // HTTPS://GITHUB.COM/NUSKOOLER/ENIGMA-BBS <*> /__/
*-----------------------------------------------------------------------------*
General Information
------------------------------- - -
This configuration is in HJSON (http://hjson.org/) format. Strict to-spec
JSON is also perfectly valid. Use 'hjson' from npm to convert to/from JSON.
See http://hjson.org/ for more information and syntax.
Various editors and IDEs such as Sublime Text 3, Visual Studio Code, and so
on have syntax highlighting for the HJSON format which are highly recommended.
------------------------------- -- - -
Menu Configuration
------------------------------- - -
ENiGMA½ makes no assumptions about specific menu types (main, doors, etc.),
but instead allows full customization of all menus throughout the system.
Some menus such as a main menu are considered "standard" while others are
backed by a specific module. SysOps can tweak various settings about these
modules (look & feel, keyboard interation, and so on) or even fully replace
the module with something else.
This file starts out as an example setup. Look at the examples, change
settings, menu ordering/flow, add/remove menus, implement ACS control,
etc.!
Remember you can *live edit* this file. That is, make a change and save
while you're logged into the system and it will take effect on the next
menu change or screen refresh.
Please see RTFM ...er, uh... see the documentation for more information, and
don't be shy to ask for help:
BBS : Xibalba @ xibalba.l33t.codes
FTN : BBS Discussion on fsxNet
IRC : #enigma-bbs / FreeNode
Email : bryan@l33t.codes
*/
menus: {
//
// Send telnet connections to matrix where users can login, apply, etc.
//
telnetConnected: {
art: CONNECT
next: matrix
config: { nextTimeout: 1500 }
}
//
// SSH connections are pre-authenticated via the SSH server itself.
// Jump directly to the login sequence
//
sshConnected: {
art: CONNECT
next: fullLoginSequenceLoginArt
config: { nextTimeout: 1500 }
}
//
// Another SSH specialization: If the user logs in with a new user
2016-06-27 07:29:17 +00:00
// name (e.g. "new", "apply", ...) they will be directed to the
// application process.
//
sshConnectedNewUser: {
art: CONNECT
2017-02-13 02:42:18 +00:00
next: newUserApplicationPreSsh
config: { nextTimeout: 1500 }
}
// Ye ol' standard matrix
matrix: {
art: matrix
form: {
0: {
VM: {
mci: {
VM1: {
submit: true
focus: true
argName: navSelect
//
// To enable forgot password, you will need to have the web server
// enabled and mail/SMTP configured. Once that is in place, swap out
// the commented lines below as well as in the submit block
//
items: [
{
text: login
data: login
}
{
text: apply
data: apply
}
{
text: forgot pass
data: forgot
}
{
text: log off
data: logoff
}
]
}
}
submit: {
*: [
{
value: { navSelect: "login" }
action: @menu:login
}
{
value: { navSelect: "apply" }
2017-02-13 02:42:18 +00:00
action: @menu:newUserApplicationPre
}
{
value: { navSelect: "forgot" }
action: @menu:forgotPassword
}
{
value: { navSelect: "logoff" }
action: @menu:logoff
}
]
}
}
}
}
}
login: {
art: USERLOG
next: fullLoginSequenceLoginArt
config: {
tooNodeMenu: loginAttemptTooNode
}
form: {
0: {
mci: {
ET1: {
maxLength: @config:users.usernameMax
argName: username
focus: true
}
ET2: {
password: true
maxLength: @config:users.passwordMax
argName: password
submit: true
}
}
submit: {
*: [
{
value: { password: null }
action: @systemMethod:login
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
loginAttemptTooNode: {
art: TOONODE
config: {
cls: true
nextTimeout: 2000
}
}
forgotPassword: {
desc: Forgot password
prompt: forgotPasswordPrompt
submit: [
{
value: { username: null }
action: @systemMethod:sendForgotPasswordEmail
extraArgs: { next: "forgotPasswordSubmitted" }
}
]
}
forgotPasswordSubmitted: {
desc: Forgot password
art: FORGOTPWSENT
config: {
cls: true
pause: true
}
next: @systemMethod:logoff
}
2015-12-23 23:42:38 +00:00
// :TODO: Prompt Yes/No for logoff confirm
fullLogoffSequence: {
desc: Logging Off
prompt: logoffConfirmation
submit: [
{
value: { promptValue: 0 }
action: @menu:fullLogoffSequencePreAd
}
{
value: { promptValue: 1 }
action: @systemMethod:prevMenu
}
]
}
fullLogoffSequencePreAd: {
art: PRELOGAD
desc: Logging Off
next: fullLogoffSequenceRandomBoardAd
config: {
2015-12-23 23:42:38 +00:00
cls: true
nextTimeout: 1500
}
}
fullLogoffSequenceRandomBoardAd: {
art: OTHRBBS
desc: Logging Off
next: logoff
config: {
2015-12-23 23:42:38 +00:00
baudRate: 57600
pause: true
cls: true
}
}
2016-06-27 07:29:17 +00:00
logoff: {
art: LOGOFF
2015-12-23 23:42:38 +00:00
desc: Logging Off
next: @systemMethod:logoff
}
// A quick preamble - defaults to warning about broken terminals
newUserApplicationPre: {
art: NEWUSER1
next: newUserApplication
desc: Applying
config: {
pause: true
cls: true
menuFlags: [ "noHistory" ]
}
}
2015-09-21 02:23:55 +00:00
newUserApplication: {
module: nua
2015-09-21 02:23:55 +00:00
art: NUA
next: [
{
// Initial SysOp does not send feedback to themselves
acs: ID1
next: fullLoginSequenceLoginArt
}
{
// ...everyone else does
next: newUserFeedbackToSysOpPreamble
}
]
2015-09-21 02:23:55 +00:00
form: {
0: {
mci: {
ET1: {
focus: true
argName: username
maxLength: @config:users.usernameMax
validate: @systemMethod:validateUserNameAvail
2015-09-21 02:23:55 +00:00
}
ET2: {
argName: realName
maxLength: @config:users.realNameMax
validate: @systemMethod:validateNonEmpty
2015-09-21 02:23:55 +00:00
}
MET3: {
argName: birthdate
maskPattern: "####/##/##"
validate: @systemMethod:validateBirthdate
2015-09-21 02:23:55 +00:00
}
2015-09-23 03:31:56 +00:00
ME4: {
2015-09-21 02:23:55 +00:00
argName: sex
2015-09-23 03:31:56 +00:00
maskPattern: A
textStyle: upper
validate: @systemMethod:validateNonEmpty
2015-09-21 02:23:55 +00:00
}
ET5: {
argName: location
maxLength: @config:users.locationMax
validate: @systemMethod:validateNonEmpty
2015-09-21 02:23:55 +00:00
}
ET6: {
argName: affils
maxLength: @config:users.affilsMax
2015-09-21 02:23:55 +00:00
}
ET7: {
argName: email
maxLength: @config:users.emailMax
validate: @systemMethod:validateEmailAvail
2015-09-21 02:23:55 +00:00
}
ET8: {
argName: web
maxLength: @config:users.webMax
2015-09-21 02:23:55 +00:00
}
ET9: {
argName: password
password: true
maxLength: @config:users.passwordMax
validate: @systemMethod:validatePasswordSpec
2015-09-21 02:23:55 +00:00
}
ET10: {
argName: passwordConfirm
password: true
maxLength: @config:users.passwordMax
validate: @method:validatePassConfirmMatch
2015-09-21 02:23:55 +00:00
}
2015-09-23 03:31:56 +00:00
TM12: {
argName: submission
items: [ "apply", "cancel" ]
2015-09-21 02:23:55 +00:00
submit: true
}
}
2015-09-23 03:31:56 +00:00
submit: {
*: [
{
value: { "submission" : 0 }
action: @method:submitApplication
2015-09-23 03:31:56 +00:00
extraArgs: {
inactive: userNeedsActivated
error: newUserCreateError
}
}
{
value: { "submission" : 1 }
action: @systemMethod:prevMenu
}
2015-09-23 03:31:56 +00:00
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
2016-06-27 07:29:17 +00:00
}
}
}
// A quick preamble - defaults to warning about broken terminals (SSH version)
newUserApplicationPreSsh: {
art: NEWUSER1
next: newUserApplicationSsh
desc: Applying
config: {
pause: true
cls: true
menuFlags: [ "noHistory" ]
}
}
2015-12-23 23:42:38 +00:00
//
// SSH specialization of NUA
2015-12-23 23:42:38 +00:00
// Canceling this form logs off vs falling back to matrix
//
newUserApplicationSsh: {
module: nua
art: NUA
fallback: logoff
next: newUserFeedbackToSysOpPreamble
form: {
0: {
mci: {
ET1: {
focus: true
argName: username
maxLength: @config:users.usernameMax
validate: @systemMethod:validateUserNameAvail
}
ET2: {
argName: realName
maxLength: @config:users.realNameMax
validate: @systemMethod:validateNonEmpty
}
MET3: {
argName: birthdate
maskPattern: "####/##/##"
validate: @systemMethod:validateBirthdate
}
ME4: {
argName: sex
maskPattern: A
textStyle: upper
validate: @systemMethod:validateNonEmpty
}
ET5: {
argName: location
maxLength: @config:users.locationMax
validate: @systemMethod:validateNonEmpty
}
ET6: {
argName: affils
maxLength: @config:users.affilsMax
}
ET7: {
argName: email
maxLength: @config:users.emailMax
validate: @systemMethod:validateEmailAvail
}
ET8: {
argName: web
maxLength: @config:users.webMax
}
ET9: {
argName: password
password: true
maxLength: @config:users.passwordMax
validate: @systemMethod:validatePasswordSpec
}
ET10: {
argName: passwordConfirm
password: true
maxLength: @config:users.passwordMax
validate: @method:validatePassConfirmMatch
}
TM12: {
argName: submission
items: [ "apply", "cancel" ]
submit: true
}
}
submit: {
*: [
{
value: { "submission" : 0 }
action: @method:submitApplication
extraArgs: {
inactive: userNeedsActivated
error: newUserCreateError
}
}
{
value: { "submission" : 1 }
2017-02-13 02:42:18 +00:00
action: @systemMethod:logoff
}
]
}
actionKeys: [
{
keys: [ "escape" ]
2017-02-13 02:42:18 +00:00
action: @systemMethod:logoff
}
]
2016-06-27 07:29:17 +00:00
}
2015-09-21 02:23:55 +00:00
}
}
newUserFeedbackToSysOpPreamble: {
art: LETTER
config: { pause: true }
next: newUserFeedbackToSysOp
}
newUserFeedbackToSysOp: {
2016-07-25 07:03:07 +00:00
desc: Feedback to SysOp
module: msg_area_post_fse
next: [
2016-06-27 07:29:17 +00:00
{
acs: AS2
next: fullLoginSequenceLoginArt
2016-06-27 07:29:17 +00:00
}
{
next: newUserInactiveDone
}
]
config: {
art: {
header: MSGEHDR
body: MSGBODY
footerEditor: MSGEFTR
footerEditorMenu: MSGEMFT
help: MSGEHLP
},
editorMode: edit
editorType: email
messageAreaTag: private_mail
toUserId: 1 /* always to +op */
}
form: {
0: {
mci: {
TL1: {
2017-08-19 22:55:25 +00:00
argName: from
}
ET2: {
argName: to
focus: true
text: @sysStat:sysop_username
// :TODO: readOnly: true
}
ET3: {
argName: subject
maxLength: 72
submit: true
text: New user feedback
validate: @systemMethod:validateMessageSubject
}
}
submit: {
3: [
{
value: { subject: null }
action: @method:headerSubmit
}
]
}
}
1: {
mci: {
MT1: {
width: 79
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: clear
items: [ "save", "help" ]
}
}
submit: {
*: [
{
value: { 1: 0 }
action: @method:editModeMenuSave
}
{
value: { 1: 1 }
action: @method:editModeMenuHelp
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:editModeEscPressed
}
{
keys: [ "?" ]
action: @method:editModeMenuHelp
}
]
}
}
}
}
newUserInactiveDone: {
desc: Finished with NUA
art: DONE
config: { pause: true }
next: @menu:logoff
}
fullLoginSequenceLoginArt: {
desc: Logging In
art: WELCOME
config: { pause: true }
next: fullLoginSequenceLastCallers
}
fullLoginSequenceLastCallers: {
desc: Last Callers
module: last_callers
art: LASTCALL
config: {
2016-07-25 07:03:07 +00:00
pause: true
font: cp437
}
2016-06-27 07:29:17 +00:00
next: fullLoginSequenceWhosOnline
}
fullLoginSequenceWhosOnline: {
desc: Who's Online
module: whos_online
art: WHOSON
config: { pause: true }
next: fullLoginSequenceOnelinerz
}
fullLoginSequenceOnelinerz: {
desc: Viewing Onelinerz
module: onelinerz
next: [
{
// calls >= 2
acs: NC2
next: fullLoginSequenceNewScanConfirm
}
{
// new users - skip new scan
next: fullLoginSequenceUserStats
}
]
config: {
cls: true
art: {
2018-07-11 01:00:02 +00:00
view: ONELINER
add: ONEADD
}
}
form: {
0: {
mci: {
VM1: {
focus: false
height: 10
}
TM2: {
argName: addOrExit
items: [ "yeah!", "nah" ]
"hotKeys" : { "Y" : 0, "N" : 1, "Q" : 1 }
submit: true
focus: true
}
}
submit: {
*: [
{
value: { addOrExit: 0 }
action: @method:viewAddScreen
}
{
value: { addOrExit: null }
action: @systemMethod:nextMenu
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:nextMenu
}
]
},
1: {
mci: {
ET1: {
focus: true
maxLength: 70
argName: oneliner
}
TL2: {
width: 60
}
TM3: {
argName: addOrCancel
items: [ "add", "cancel" ]
"hotKeys" : { "A" : 0, "C" : 1, "Q" : 1 }
submit: true
}
}
submit: {
*: [
{
value: { addOrCancel: 0 }
action: @method:addEntry
}
{
value: { addOrCancel: 1 }
action: @method:cancelAdd
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:cancelAdd
}
]
}
}
}
fullLoginSequenceNewScanConfirm: {
desc: Logging In
prompt: loginGlobalNewScan
submit: [
{
value: { promptValue: 0 }
action: @menu:fullLoginSequenceNewScan
}
{
value: { promptValue: 1 }
action: @menu:fullLoginSequenceUserStats
}
]
}
fullLoginSequenceNewScan: {
desc: Performing New Scan
module: new_scan
art: NEWSCAN
next: fullLoginSequenceSysStats
config: {
messageListMenu: newScanMessageList
}
}
fullLoginSequenceSysStats: {
desc: System Stats
art: SYSSTAT
config: { pause: true }
next: fullLoginSequenceUserStats
}
fullLoginSequenceUserStats: {
desc: User Stats
art: STATUS
config: { pause: true }
next: mainMenu
}
newScanMessageList: {
2017-08-19 22:55:25 +00:00
desc: New Messages
module: msg_list
art: NEWMSGS
config: {
menuViewPost: messageAreaViewPost
}
form: {
0: {
mci: {
VM1: {
focus: true
submit: true
argName: message
}
2016-09-09 04:04:27 +00:00
TL6: {
// theme me!
}
}
submit: {
*: [
{
value: { message: null }
action: @method:selectMessage
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
2016-08-31 03:32:57 +00:00
{
keys: [ "x", "shift + x" ]
action: @method:fullExit
}
2018-07-08 02:04:51 +00:00
{
keys: [ "m", "shift + m" ]
action: @method:markAllRead
}
]
}
}
}
2017-09-04 02:45:00 +00:00
newScanFileBaseList: {
module: file_area_list
2017-09-04 02:45:00 +00:00
desc: New Files
config: {
art: {
browse: FNEWBRWSE
details: FDETAIL
detailsGeneral: FDETGEN
detailsNfo: FDETNFO
detailsFileList: FDETLST
help: FBHELP
}
}
form: {
0: {
mci: {
MT1: {
mode: preview
ansiView: true
}
HM2: {
focus: true
submit: true
argName: navSelect
items: [
"prev", "next", "details", "toggle queue", "rate", "help", "quit"
]
focusItemIndex: 1
}
}
submit: {
*: [
{
value: { navSelect: 0 }
action: @method:prevFile
}
{
value: { navSelect: 1 }
action: @method:nextFile
}
{
value: { navSelect: 2 }
action: @method:viewDetails
}
{
value: { navSelect: 3 }
action: @method:toggleQueue
}
{
value: { navSelect: 4 }
action: @menu:fileBaseGetRatingForSelectedEntry
}
{
value: { navSelect: 5 }
action: @method:displayHelp
}
{
value: { navSelect: 6 }
action: @systemMethod:prevMenu
}
]
}
actionKeys: [
{
keys: [ "w", "shift + w" ]
action: @method:showWebDownloadLink
}
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
{
keys: [ "t", "shift + t" ]
action: @method:toggleQueue
}
{
keys: [ "v", "shift + v" ]
action: @method:viewDetails
}
{
keys: [ "r", "shift + r" ]
action: @menu:fileBaseGetRatingForSelectedEntry
}
{
keys: [ "?" ]
action: @method:displayHelp
}
]
}
1: {
mci: {
HM1: {
focus: true
submit: true
argName: navSelect
items: [
"general", "nfo/readme", "file listing"
]
}
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @method:detailsQuit
}
]
}
2: {
// details - general
mci: {}
}
3: {
// details - nfo/readme
mci: {
MT1: {
mode: preview
}
}
}
4: {
// details - file listing
mci: {
VM1: {
}
}
}
}
}
///////////////////////////////////////////////////////////////////////
// Main Menu
///////////////////////////////////////////////////////////////////////
mainMenu: {
art: MMENU
desc: Main Menu
prompt: menuCommand
config: {
2016-07-25 07:03:07 +00:00
font: cp437
}
2015-10-18 02:34:39 +00:00
submit: [
{
value: { command: "G" }
2015-12-23 23:42:38 +00:00
action: @menu:fullLogoffSequence
2015-10-18 02:34:39 +00:00
}
{
value: { command: "D" }
action: @menu:doorMenu
}
{
value: { command: "F" }
2017-02-13 02:42:18 +00:00
action: @menu:fileBase
}
{
value: { command: "U" }
action: @menu:mainMenuUserList
}
{
value: { command: "L" }
action: @menu:mainMenuLastCallers
}
2015-11-26 01:03:47 +00:00
{
value: { command: "W" }
action: @menu:mainMenuWhosOnline
}
{
value: { command: "Y" }
action: @menu:mainMenuUserStats
}
{
value: { command: "M" }
action: @menu:messageArea
}
2016-07-25 07:03:07 +00:00
{
value: { command: "E" }
action: @menu:mailMenu
}
2015-10-12 05:26:27 +00:00
{
value: { command: "C" }
action: @menu:mainMenuUserConfig
}
{
value: { command: "S" }
action: @menu:mainMenuSystemStats
}
2016-01-15 05:48:42 +00:00
{
value: { command: "!" }
action: @menu:mainMenuGlobalNewScan
}
{
value: { command: "K" }
action: @menu:mainMenuFeedbackToSysOp
}
{
value: { command: "O" }
action: @menu:mainMenuOnelinerz
}
2016-08-27 04:34:37 +00:00
{
value: { command: "R" }
action: @menu:mainMenuRumorz
}
2016-07-10 05:08:33 +00:00
{
value: { command: "BBS"}
action: @menu:bbsList
}
{
value: 1
action: @menu:mainMenu
}
]
2015-10-18 02:34:39 +00:00
}
mainMenuLastCallers: {
desc: Last Callers
module: last_callers
art: LASTCALL
config: { pause: true }
}
2015-11-26 01:03:47 +00:00
mainMenuWhosOnline: {
desc: Who's Online
module: whos_online
2015-11-26 01:03:47 +00:00
art: WHOSON
config: { pause: true }
2015-11-26 01:03:47 +00:00
}
mainMenuUserStats: {
desc: User Stats
art: STATUS
config: { pause: true }
2015-10-12 05:26:27 +00:00
}
mainMenuSystemStats: {
desc: System Stats
art: SYSSTAT
config: { pause: true }
}
mainMenuUserList: {
desc: User Listing
module: user_list
art: USERLST
form: {
0: {
mci: {
VM1: {
focus: true
submit: true
}
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
2015-10-12 05:26:27 +00:00
mainMenuUserConfig: {
module: user_config
2015-10-12 05:26:27 +00:00
art: CONFSCR
form: {
0: {
mci: {
ET1: {
argName: realName
maxLength: @config:users.realNameMax
validate: @systemMethod:validateNonEmpty
focus: true
}
ME2: {
argName: birthdate
maskPattern: "####/##/##"
}
ME3: {
argName: sex
maskPattern: A
textStyle: upper
validate: @systemMethod:validateNonEmpty
}
ET4: {
argName: location
maxLength: @config:users.locationMax
validate: @systemMethod:validateNonEmpty
}
ET5: {
argName: affils
maxLength: @config:users.affilsMax
}
ET6: {
argName: email
maxLength: @config:users.emailMax
validate: @method:validateEmailAvail
}
ET7: {
argName: web
maxLength: @config:users.webMax
}
ME8: {
maskPattern: "##"
argName: termHeight
validate: @systemMethod:validateNonEmpty
}
SM9: {
argName: theme
}
ET10: {
argName: password
maxLength: @config:users.passwordMax
password: true
validate: @method:validatePassword
}
ET11: {
argName: passwordConfirm
maxLength: @config:users.passwordMax
password: true
validate: @method:validatePassConfirmMatch
}
TM25: {
argName: submission
items: [ "save", "cancel" ]
submit: true
}
}
submit: {
*: [
{
value: { submission: 0 }
action: @method:saveChanges
}
{
value: { submission: 1 }
action: @systemMethod:prevMenu
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
2016-01-15 05:48:42 +00:00
mainMenuGlobalNewScan: {
desc: Performing New Scan
module: new_scan
2016-01-15 05:48:42 +00:00
art: NEWSCAN
config: {
messageListMenu: newScanMessageList
}
}
mainMenuFeedbackToSysOp: {
2016-07-25 07:03:07 +00:00
desc: Feedback to SysOp
module: msg_area_post_fse
2016-01-15 05:48:42 +00:00
config: {
art: {
header: MSGEHDR
body: MSGBODY
footerEditor: MSGEFTR
footerEditorMenu: MSGEMFT
help: MSGEHLP
},
editorMode: edit
editorType: email
messageAreaTag: private_mail
2016-01-15 05:48:42 +00:00
toUserId: 1 /* always to +op */
}
form: {
0: {
mci: {
TL1: {
argName: from
}
ET2: {
argName: to
focus: true
text: @sysStat:sysop_username
2016-01-15 05:48:42 +00:00
// :TODO: readOnly: true
}
ET3: {
argName: subject
maxLength: 72
submit: true
validate: @systemMethod:validateMessageSubject
}
}
submit: {
3: [
{
value: { subject: null }
action: @method:headerSubmit
}
]
}
2016-07-25 16:47:57 +00:00
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
2016-01-15 05:48:42 +00:00
}
1: {
mci: {
MT1: {
width: 79
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: clear
items: [ "save", "discard", "help" ]
}
}
submit: {
*: [
{
value: { 1: 0 }
action: @method:editModeMenuSave
}
{
value: { 1: 1 }
action: @systemMethod:prevMenu
}
{
value: { 1: 2 }
action: @method:editModeMenuHelp
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:editModeEscPressed
}
{
keys: [ "?" ]
action: @method:editModeMenuHelp
}
]
}
}
}
}
mainMenuOnelinerz: {
desc: Viewing Onelinerz
module: onelinerz
config: {
cls: true
art: {
2018-07-11 00:57:52 +00:00
view: ONELINER
add: ONEADD
}
}
form: {
0: {
mci: {
VM1: {
focus: false
height: 10
}
TM2: {
argName: addOrExit
items: [ "yeah!", "nah" ]
"hotKeys" : { "Y" : 0, "N" : 1, "Q" : 1 }
submit: true
focus: true
}
}
submit: {
*: [
{
value: { addOrExit: 0 }
action: @method:viewAddScreen
}
{
value: { addOrExit: null }
action: @systemMethod:nextMenu
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:nextMenu
}
]
},
1: {
mci: {
ET1: {
focus: true
maxLength: 70
argName: oneliner
}
TL2: {
width: 60
}
TM3: {
argName: addOrCancel
items: [ "add", "cancel" ]
"hotKeys" : { "A" : 0, "C" : 1, "Q" : 1 }
submit: true
}
}
submit: {
*: [
{
value: { addOrCancel: 0 }
action: @method:addEntry
}
{
value: { addOrCancel: 1 }
action: @method:cancelAdd
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:cancelAdd
}
]
}
}
}
2016-08-27 04:34:37 +00:00
mainMenuRumorz: {
desc: Rumorz
module: rumorz
2016-08-27 04:34:37 +00:00
config: {
cls: true
2016-08-27 04:34:37 +00:00
art: {
entries: RUMORS
add: RUMORADD
}
}
form: {
0: {
mci: {
VM1: {
focus: false
height: 10
}
TM2: {
argName: addOrExit
items: [ "yeah!", "nah" ]
"hotKeys" : { "Y" : 0, "N" : 1, "Q" : 1 }
submit: true
focus: true
}
}
submit: {
*: [
{
value: { addOrExit: 0 }
action: @method:viewAddScreen
}
{
value: { addOrExit: null }
action: @systemMethod:nextMenu
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:nextMenu
}
]
},
1: {
mci: {
ET1: {
focus: true
maxLength: 70
argName: rumor
}
TL2: {
width: 60
}
TM3: {
argName: addOrCancel
items: [ "add", "cancel" ]
"hotKeys" : { "A" : 0, "C" : 1, "Q" : 1 }
submit: true
}
}
submit: {
*: [
{
value: { addOrCancel: 0 }
action: @method:addEntry
}
{
value: { addOrCancel: 1 }
action: @method:cancelAdd
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:cancelAdd
}
]
}
}
}
2016-07-10 05:08:33 +00:00
bbsList: {
desc: Viewing BBS List
module: bbs_list
2016-07-10 05:08:33 +00:00
config: {
cls: true
2016-07-10 05:08:33 +00:00
art: {
entries: BBSLIST
add: BBSADD
}
}
form: {
0: {
mci: {
VM1: { maxLength: 32 }
TL2: { maxLength: 32 }
TL3: { maxLength: 32 }
TL4: { maxLength: 32 }
TL5: { maxLength: 32 }
TL6: { maxLength: 32 }
TL7: { maxLength: 32 }
TL8: { maxLength: 32 }
TL9: { maxLength: 32 }
}
actionKeys: [
{
keys: [ "a" ]
action: @method:addBBS
}
{
// :TODO: add delete key
keys: [ "d" ]
action: @method:deleteBBS
}
{
keys: [ "q", "escape" ]
action: @systemMethod:prevMenu
2016-07-10 05:08:33 +00:00
}
]
}
1: {
mci: {
ET1: {
argName: name
maxLength: 32
validate: @systemMethod:validateNonEmpty
}
ET2: {
argName: sysop
maxLength: 32
validate: @systemMethod:validateNonEmpty
}
ET3: {
argName: telnet
maxLength: 32
validate: @systemMethod:validateNonEmpty
}
ET4: {
argName: www
maxLength: 32
}
ET5: {
argName: location
maxLength: 32
}
ET6: {
argName: software
maxLength: 32
}
ET7: {
argName: notes
maxLength: 32
}
TM17: {
argName: submission
items: [ "save", "cancel" ]
submit: true
}
}
2016-07-25 16:47:57 +00:00
2016-07-10 05:08:33 +00:00
actionKeys: [
{
keys: [ "escape" ]
action: @method:cancelSubmit
}
2016-07-25 16:47:57 +00:00
]
2016-07-10 05:08:33 +00:00
submit: {
*: [
{
value: { "submission" : 0 }
action: @method:submitBBS
}
{
value: { "submission" : 1 }
action: @method:cancelSubmit
}
]
}
}
}
}
///////////////////////////////////////////////////////////////////////
// Doors Menu
///////////////////////////////////////////////////////////////////////
2015-10-18 02:34:39 +00:00
doorMenu: {
desc: Doors Menu
art: DOORMNU
prompt: menuCommand
submit: [
{
value: { command: "G" }
action: @menu:logoff
}
{
value: { command: "Q" }
action: @systemMethod:prevMenu
2015-10-18 02:34:39 +00:00
}
//
// The system supports many ways of launching doors including
// modules for DoorParty!, BBSLink, etc.
//
// Below are some examples. See the documentation for more info.
//
2015-10-18 02:34:39 +00:00
{
value: { command: "ABRACADABRA" }
action: @menu:doorAbracadabraExample
2015-10-18 02:34:39 +00:00
}
{
value: { command: "TWBBLINK" }
action: @menu:doorTradeWars2002BBSLinkExample
}
{
value: { command: "DP" }
action: @menu:doorPartyExample
}
{
2017-11-02 00:41:20 +00:00
value: { command: "CN" }
action: @menu:doorCombatNetExample
2017-11-02 00:41:20 +00:00
}
{
value: { command: "EXODUS" }
action: @menu:doorExodusCataclysm
}
2015-10-18 02:34:39 +00:00
]
}
//
// Local Door Example via abracadabra module
//
// This example assumes launch_door.sh (which is passed args)
// launches the door.
//
doorAbracadabraExample: {
desc: Abracadabra Example
module: abracadabra
config: {
name: Example Door
dropFileType: DORINFO
cmd: /home/enigma/DOS/scripts/launch_door.sh
2016-06-27 07:29:17 +00:00
args: [
"{node}",
"{dropFile}",
"{srvPort}",
],
nodeMax: 1
tooManyArt: DOORMANY
io: socket
}
}
//
// BBSLink Example (TradeWars 2000)
//
// Register @ https://bbslink.net/
//
doorTradeWars2002BBSLinkExample: {
desc: Playing TW 2002 (BBSLink)
module: bbs_link
config: {
sysCode: XXXXXXXX
authCode: XXXXXXXX
schemeCode: XXXXXXXX
door: tw
}
}
//
// DoorParty! Example
//
// Register @ http://throwbackbbs.com/
//
doorPartyExample: {
desc: Using DoorParty!
module: door_party
config: {
username: XXXXXXXX
password: XXXXXXXX
bbsTag: XX
}
}
//
// CombatNet Example
//
// Register @ http://combatnet.us/
//
doorCombatNetExample: {
2017-11-02 00:41:20 +00:00
desc: Using CombatNet
module: combatnet
2017-11-02 00:41:20 +00:00
config: {
bbsTag: CBNxxx
password: XXXXXXXXX
}
}
//
// Exodus Example (cataclysm)
// Register @ https://oddnetwork.org/exodus/
//
doorExodusCataclysm: {
desc: Cataclysm
module: exodus
config: {
rejectUnauthorized: false
board: XXX
key: XXXXXXXX
door: cataclysm
}
}
///////////////////////////////////////////////////////////////////////
// Message Area Menu
///////////////////////////////////////////////////////////////////////
messageArea: {
art: MSGMNU
desc: Message Area
2016-08-04 02:59:10 +00:00
prompt: messageMenuCommand
submit: [
{
value: { command: "P" }
action: @menu:messageAreaNewPost
}
{
value: { command: "J" }
action: @menu:messageAreaChangeCurrentConference
}
2015-08-18 03:45:11 +00:00
{
value: { command: "C" }
action: @menu:messageAreaChangeCurrentArea
}
2015-08-27 05:04:04 +00:00
{
value: { command: "L" }
action: @menu:messageAreaMessageList
}
{
value: { command: "Q" }
action: @systemMethod:prevMenu
}
{
value: { command: "G" }
2016-07-25 07:03:07 +00:00
action: @menu:fullLogoffSequence
}
{
value: { command: "<" }
action: @systemMethod:prevConf
}
{
value: { command: ">" }
action: @systemMethod:nextConf
}
{
value: { command: "[" }
action: @systemMethod:prevArea
}
{
value: { command: "]" }
action: @systemMethod:nextArea
}
2018-01-15 00:09:23 +00:00
{
value: { command: "D" }
action: @menu:messageAreaSetNewScanDate
}
2018-07-06 00:39:35 +00:00
{
value: { command: "S" }
action: @menu:messageSearch
}
{
value: 1
action: @menu:messageArea
2016-06-27 07:29:17 +00:00
}
]
}
2018-07-06 00:39:35 +00:00
messageSearch: {
desc: Message Search
module: message_base_search
art: MSEARCH
config: {
messageListMenu: messageAreaSearchMessageList
}
form: {
0: {
mci: {
ET1: {
focus: true
argName: searchTerms
}
BT2: {
argName: search
text: search
submit: true
}
SM3: {
argName: confTag
}
SM4: {
argName: areaTag
}
ET5: {
argName: toUserName
maxLength: @config:users.usernameMax
}
ET6: {
argName: fromUserName
maxLength: @config:users.usernameMax
}
BT7: {
argName: advancedSearch
text: advanced search
submit: true
}
}
submit: {
*: [
{
value: { search: null }
action: @method:search
}
{
value: { advancedSearch: null }
action: @method:search
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
messageAreaSearchMessageList: {
desc: Message Search
module: msg_list
art: MSRCHLST
config: {
menuViewPost: messageAreaViewPost
}
form: {
0: {
mci: {
VM1: {
focus: true
submit: true
argName: message
}
TL6: {
// theme me!
}
}
submit: {
*: [
{
value: { message: null }
action: @method:selectMessage
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
messageSearchNoResults: {
desc: Message Search
art: MSRCNORES
config: {
2018-07-06 00:39:35 +00:00
pause: true
}
}
messageAreaChangeCurrentConference: {
art: CCHANGE
module: msg_conf_list
form: {
0: {
mci: {
VM1: {
focus: true
submit: true
argName: conf
}
}
submit: {
*: [
{
value: { conf: null }
action: @method:changeConference
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
2018-01-15 00:09:23 +00:00
messageAreaSetNewScanDate: {
module: set_newscan_date
desc: Message Base
art: SETMNSDATE
config: {
target: message
scanDateFormat: YYYYMMDD
}
form: {
0: {
mci: {
ME1: {
focus: true
submit: true
argName: scanDate
maskPattern: "####/##/##"
}
SM2: {
argName: targetSelection
submit: false
}
}
submit: {
*: [
{
value: { scanDate: null }
action: @method:scanDateSubmit
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
changeMessageConfPreArt: {
module: show_art
config: {
method: messageConf
key: confTag
pause: true
cls: true
menuFlags: [ "popParent", "noHistory" ]
}
}
messageAreaChangeCurrentArea: {
// :TODO: rename this art to ACHANGE
art: CHANGE
module: msg_area_list
form: {
0: {
mci: {
VM1: {
focus: true
submit: true
argName: area
}
}
submit: {
*: [
{
value: { area: null }
action: @method:changeArea
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
changeMessageAreaPreArt: {
module: show_art
config: {
method: messageArea
key: areaTag
pause: true
cls: true
menuFlags: [ "popParent", "noHistory" ]
}
}
messageAreaMessageList: {
module: msg_list
art: MSGLIST
config: {
menuViewPost: messageAreaViewPost
}
form: {
0: {
mci: {
VM1: {
focus: true
submit: true
argName: message
}
}
submit: {
*: [
{
value: { message: null }
action: @method:selectMessage
}
]
2015-08-27 05:04:04 +00:00
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
2015-08-27 05:04:04 +00:00
}
}
}
2015-09-10 03:55:16 +00:00
messageAreaViewPost: {
module: msg_area_view_fse
2015-09-10 03:55:16 +00:00
config: {
art: {
header: MSGVHDR
body: MSGBODY
footerView: MSGVFTR
help: MSGVHLP
},
2015-09-10 03:55:16 +00:00
editorMode: view
editorType: area
2015-10-10 01:27:43 +00:00
}
2015-10-07 03:21:13 +00:00
form: {
0: {
mci: {
// :TODO: ensure this block isn't even req. for theme to apply...
}
2015-10-07 03:21:13 +00:00
}
1: {
mci: {
MT1: {
width: 79
mode: preview
}
2015-10-07 03:21:13 +00:00
}
submit: {
*: [
{
value: message
action: @method:editModeEscPressed
}
]
2015-10-10 01:27:43 +00:00
}
actionKeys: [
{
2015-10-10 01:27:43 +00:00
keys: [ "escape" ]
viewId: 1
}
]
2015-10-10 01:27:43 +00:00
}
2: {
TLTL: {
mci: {
TL1: { width: 5 }
TL2: { width: 4 }
}
}
2015-10-10 01:27:43 +00:00
}
4: {
mci: {
HM1: {
// :TODO: (#)Jump/(L)Index (msg list)/Last
2015-10-10 01:27:43 +00:00
items: [ "prev", "next", "reply", "quit", "help" ]
focusItemIndex: 1
}
2015-10-10 01:27:43 +00:00
}
submit: {
*: [
{
value: { 1: 0 }
action: @method:prevMessage
2016-03-20 03:07:47 +00:00
}
{
value: { 1: 1 }
action: @method:nextMessage
}
2015-09-13 00:18:46 +00:00
{
value: { 1: 2 }
2015-09-13 00:18:46 +00:00
action: @method:replyMessage
extraArgs: {
menu: messageAreaReplyPost
}
}
{
value: { 1: 3 }
action: @systemMethod:prevMenu
}
{
value: { 1: 4 }
action: @method:viewModeMenuHelp
}
]
2015-10-10 01:27:43 +00:00
}
actionKeys: [
{
keys: [ "p", "shift + p" ]
action: @method:prevMessage
}
{
keys: [ "n", "shift + n" ]
action: @method:nextMessage
2016-06-27 07:29:17 +00:00
}
2015-09-14 03:15:55 +00:00
{
keys: [ "r", "shift + r" ]
2015-09-14 03:15:55 +00:00
action: @method:replyMessage
extraArgs: {
menu: messageAreaReplyPost
}
}
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
{
keys: [ "?" ]
action: @method:viewModeMenuHelp
2016-06-27 07:29:17 +00:00
}
{
2015-10-10 01:27:43 +00:00
keys: [ "down arrow", "up arrow", "page up", "page down" ]
action: @method:movementKeyPressed
}
]
}
}
2016-07-25 16:47:57 +00:00
}
2015-09-13 00:18:46 +00:00
messageAreaReplyPost: {
module: msg_area_post_fse
2015-09-13 00:18:46 +00:00
config: {
art: {
header: MSGEHDR
body: MSGBODY
2015-09-13 00:18:46 +00:00
quote: MSGQUOT
footerEditor: MSGEFTR
footerEditorMenu: MSGEMFT
help: MSGEHLP
2015-09-13 00:18:46 +00:00
}
editorMode: edit
editorType: area
}
form: {
0: {
mci: {
// :TODO: use appropriate system properties for max lengths
2015-09-13 00:18:46 +00:00
TL1: {
argName: from
}
ET2: {
argName: to
focus: true
validate: @systemMethod:validateNonEmpty
2015-09-13 00:18:46 +00:00
}
ET3: {
2016-06-27 07:29:17 +00:00
argName: subject
2015-09-13 00:18:46 +00:00
maxLength: 72
submit: true
validate: @systemMethod:validateNonEmpty
2015-09-13 00:18:46 +00:00
}
TL4: {
// :TODO: this is for RE: line (NYI)
2015-10-06 21:22:49 +00:00
//width: 27
//textOverflow: ...
2015-09-13 00:18:46 +00:00
}
}
2015-09-13 01:18:08 +00:00
submit: {
2016-07-25 16:47:57 +00:00
3: [
{
value: { subject: null }
action: @method:headerSubmit
}
]
2015-09-13 01:18:08 +00:00
}
2016-07-25 16:47:57 +00:00
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
2015-09-13 00:18:46 +00:00
}
2015-09-13 01:18:08 +00:00
1: {
mci: {
MT1: {
width: 79
height: 14
argName: message
mode: edit
2015-09-13 01:18:08 +00:00
}
}
submit: {
*: [ { "value": "message", "action": "@method:editModeEscPressed" } ]
}
actionKeys: [
{
keys: [ "escape" ],
viewId: 1
}
]
2015-09-14 03:15:55 +00:00
}
3: {
mci: {
HM1: {
items: [ "save", "discard", "quote", "help" ]
}
}
2017-08-19 22:55:25 +00:00
submit: {
*: [
{
2017-08-19 22:55:25 +00:00
value: { 1: 0 }
action: @method:editModeMenuSave
}
{
2017-08-19 22:55:25 +00:00
value: { 1: 1 }
action: @systemMethod:prevMenu
}
{
2017-08-19 22:55:25 +00:00
value: { 1: 2 },
action: @method:editModeMenuQuote
}
{
2017-08-19 22:55:25 +00:00
value: { 1: 3 }
action: @method:editModeMenuHelp
}
]
}
2017-08-19 22:55:25 +00:00
actionKeys: [
{
keys: [ "escape" ]
action: @method:editModeEscPressed
}
{
keys: [ "s", "shift + s" ]
action: @method:editModeMenuSave
}
{
keys: [ "d", "shift + d" ]
action: @systemMethod:prevMenu
}
{
keys: [ "q", "shift + q" ]
action: @method:editModeMenuQuote
}
{
keys: [ "?" ]
action: @method:editModeMenuHelp
}
]
}
// Quote builder
5: {
mci: {
MT1: {
width: 79
height: 7
}
VM3: {
width: 79
height: 4
argName: quote
2016-06-27 07:29:17 +00:00
}
2015-09-14 03:15:55 +00:00
}
submit: {
*: [
{
value: { quote: null }
action: @method:appendQuoteEntry
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:quoteBuilderEscPressed
}
]
2015-09-14 03:15:55 +00:00
}
2015-09-13 00:18:46 +00:00
}
}
2015-08-18 03:45:11 +00:00
// :TODO: messageAreaSelect (change msg areas -> call @systemMethod -> fallback to menu
messageAreaNewPost: {
2016-07-25 07:03:07 +00:00
desc: Posting message,
module: msg_area_post_fse
2015-09-11 05:09:45 +00:00
config: {
art: {
header: MSGEHDR
body: MSGBODY
2015-09-11 05:09:45 +00:00
footerEditor: MSGEFTR
footerEditorMenu: MSGEMFT
help: MSGEHLP
}
2015-09-11 05:09:45 +00:00
editorMode: edit
editorType: area
}
2015-10-07 03:21:13 +00:00
form: {
0: {
2015-09-11 05:09:45 +00:00
mci: {
TL1: {
2015-10-07 03:21:13 +00:00
argName: from
2015-09-11 05:09:45 +00:00
}
ET2: {
2015-10-07 03:21:13 +00:00
argName: to
focus: true
text: All
validate: @systemMethod:validateNonEmpty
2015-09-11 05:09:45 +00:00
}
2015-10-07 03:21:13 +00:00
ET3: {
argName: subject
maxLength: 72
submit: true
validate: @systemMethod:validateNonEmpty
// :TODO: Validate -> close/cancel if empty
}
2015-10-07 03:21:13 +00:00
}
submit: {
3: [
2015-09-11 05:09:45 +00:00
{
value: { subject: null }
action: @method:headerSubmit
2015-09-11 05:09:45 +00:00
}
]
}
2016-07-25 16:47:57 +00:00
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
2015-10-07 03:21:13 +00:00
}
1: {
"mci" : {
MT1: {
2015-10-07 03:21:13 +00:00
width: 79
argName: message
mode: edit
}
}
submit: {
*: [ { "value": "message", "action": "@method:editModeEscPressed" } ]
}
2015-10-07 03:21:13 +00:00
actionKeys: [
{
keys: [ "escape" ]
viewId: 1
}
]
}
2: {
TLTL: {
mci: {
TL1: { width: 5 }
TL2: { width: 4 }
}
}
}
3: {
HM: {
mci: {
HM1: {
2015-10-07 03:21:13 +00:00
// :TODO: clear
"items" : [ "save", "discard", "help" ]
}
}
submit: {
*: [
{
value: { 1: 0 }
action: @method:editModeMenuSave
}
{
value: { 1: 1 }
action: @systemMethod:prevMenu
2015-10-07 03:21:13 +00:00
}
{
value: { 1: 2 }
action: @method:editModeMenuHelp
2015-09-13 00:18:46 +00:00
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:editModeEscPressed
}
{
keys: [ "?" ]
action: @method:editModeMenuHelp
}
]
// :TODO: something like the following for overriding keymap
// this should only override specified entries. others will default
/*
"keyMap" : {
"accept" : [ "return" ]
}
*/
}
}
}
}
2016-07-25 07:03:07 +00:00
//
// User to User mail aka Email Menu
//
mailMenu: {
art: MAILMNU
desc: Mail Menu
prompt: menuCommand
submit: [
{
value: { command: "C" }
action: @menu:mailMenuCreateMessage
}
{
value: { command: "I" }
action: @menu:mailMenuInbox
}
{
value: { command: "Q" }
action: @systemMethod:prevMenu
}
{
value: { command: "G" }
action: @menu:fullLogoffSequence
}
{
value: 1
action: @menu:mailMenu
}
]
}
mailMenuCreateMessage: {
desc: Mailing Someone
module: msg_area_post_fse
2016-07-25 07:03:07 +00:00
config: {
art: {
header: MSGEHDR
body: MSGBODY
footerEditor: MSGEFTR
footerEditorMenu: MSGEMFT
help: MSGEHLP
},
editorMode: edit
editorType: email
messageAreaTag: private_mail
}
form: {
0: {
mci: {
TL1: {
argName: from
}
ET2: {
argName: to
focus: true
validate: @systemMethod:validateGeneralMailAddressedTo
2016-07-25 07:03:07 +00:00
}
ET3: {
argName: subject
maxLength: 72
submit: true
validate: @systemMethod:validateMessageSubject
}
}
submit: {
3: [
{
value: { subject: null }
action: @method:headerSubmit
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
1: {
mci: {
MT1: {
width: 79
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: clear
items: [ "save", "discard", "help" ]
}
}
submit: {
*: [
{
value: { 1: 0 }
action: @method:editModeMenuSave
}
{
value: { 1: 1 }
action: @systemMethod:prevMenu
}
{
value: { 1: 2 }
action: @method:editModeMenuHelp
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @method:editModeEscPressed
}
{
keys: [ "?" ]
action: @method:editModeMenuHelp
}
]
}
}
}
}
mailMenuInbox: {
module: msg_list
art: PRVMSGLIST
2016-07-25 07:03:07 +00:00
config: {
menuViewPost: messageAreaViewPost
messageAreaTag: private_mail
}
form: {
2018-07-06 00:39:35 +00:00
0: { // main list
2016-07-25 07:03:07 +00:00
mci: {
VM1: {
focus: true
submit: true
argName: message
}
}
submit: {
*: [
{
value: { message: null }
action: @method:selectMessage
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
2018-07-06 00:39:35 +00:00
{
keys: [ "delete", "d", "shift + d" ]
action: @method:deleteSelected
}
2016-07-25 07:03:07 +00:00
]
}
2018-07-06 00:39:35 +00:00
1: { // delete prompt form
submit: {
*: [
{
value: { promptValue: 0 }
action: @method:deleteMessageYes
}
{
value: { promptValue: 1 }
action: @method:deleteMessageNo
}
]
}
}
2016-07-25 07:03:07 +00:00
}
}
////////////////////////////////////////////////////////////////////////
// File Base
////////////////////////////////////////////////////////////////////////
fileBase: {
desc: File Base
art: FMENU
prompt: fileMenuCommand
submit: [
{
2017-09-04 02:45:00 +00:00
value: { menuOption: "L" }
action: @menu:fileBaseListEntries
}
2017-09-04 02:45:00 +00:00
{
value: { menuOption: "B" }
action: @menu:fileBaseBrowseByAreaSelect
}
{
value: { menuOption: "F" }
action: @menu:fileAreaFilterEditor
}
{
value: { menuOption: "Q" }
action: @systemMethod:prevMenu
}
{
value: { menuOption: "G" }
action: @menu:fullLogoffSequence
}
{
value: { menuOption: "D" }
action: @menu:fileBaseDownloadManager
}
{
value: { menuOption: "W" }
action: @menu:fileBaseWebDownloadManager
}
{
value: { menuOption: "U" }
action: @menu:fileBaseUploadFiles
}
{
value: { menuOption: "S" }
action: @menu:fileBaseSearch
}
2018-01-15 00:09:23 +00:00
{
value: { menuOption: "P" }
action: @menu:fileBaseSetNewScanDate
}
2018-07-06 00:39:35 +00:00
{
value: { menuOption: "E" }
action: @menu:fileBaseExportListFilter
}
]
}
2018-07-06 00:39:35 +00:00
fileBaseExportListFilter: {
module: file_base_search
// :TODO: fixme:
art: FSEARCH
config: {
fileBaseListEntriesMenu: fileBaseExportList
}
form: {
0: {
mci: {
ET1: {
focus: true
argName: searchTerms
}
BT2: {
argName: search
text: search
submit: true
}
ET3: {
maxLength: 64
argName: tags
}
SM4: {
maxLength: 64
argName: areaIndex
}
SM5: {
items: [
"upload date",
"uploaded by",
"downloads",
"rating",
"estimated year",
"size",
"filename"
]
argName: sortByIndex
}
SM6: {
items: [
"decending",
"ascending"
]
argName: orderByIndex
}
BT7: {
argName: advancedSearch
text: advanced search
submit: true
}
}
submit: {
*: [
{
value: { search: null }
action: @method:search
}
{
value: { advancedSearch: null }
action: @method:search
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseExportList: {
module: file_base_user_list_export
art: FBLISTEXP
config: {
pause: true
2018-07-06 00:39:35 +00:00
templates: {
entry: file_list_entry.asc
}
}
form: {
0: {
mci: {
TL1: { }
TL2: { }
}
}
}
}
fileBaseExportListNoResults: {
desc: Browsing Files
art: FBNORES
config: {
2018-07-06 00:39:35 +00:00
pause: true
menuFlags: [ "noHistory", "popParent" ]
}
}
2018-01-15 00:09:23 +00:00
fileBaseSetNewScanDate: {
module: set_newscan_date
desc: File Base
art: SETFNSDATE
config: {
target: file
scanDateFormat: YYYYMMDD
}
form: {
0: {
mci: {
ME1: {
focus: true
submit: true
argName: scanDate
maskPattern: "####/##/##"
}
}
submit: {
*: [
{
value: { scanDate: null }
action: @method:scanDateSubmit
}
]
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseListEntries: {
module: file_area_list
desc: Browsing Files
config: {
art: {
browse: FBRWSE
details: FDETAIL
detailsGeneral: FDETGEN
detailsNfo: FDETNFO
detailsFileList: FDETLST
help: FBHELP
}
}
form: {
0: {
mci: {
MT1: {
mode: preview
}
HM2: {
focus: true
submit: true
argName: navSelect
items: [
"prev", "next", "details", "toggle queue", "rate", "change filter", "help", "quit"
]
focusItemIndex: 1
}
}
submit: {
*: [
{
value: { navSelect: 0 }
action: @method:prevFile
}
{
value: { navSelect: 1 }
action: @method:nextFile
}
{
value: { navSelect: 2 }
action: @method:viewDetails
}
{
value: { navSelect: 3 }
action: @method:toggleQueue
}
{
value: { navSelect: 4 }
action: @menu:fileBaseGetRatingForSelectedEntry
}
{
value: { navSelect: 5 }
action: @menu:fileAreaFilterEditor
}
{
value: { navSelect: 6 }
action: @method:displayHelp
}
{
value: { navSelect: 7 }
action: @systemMethod:prevMenu
}
]
}
actionKeys: [
{
keys: [ "w", "shift + w" ]
action: @method:showWebDownloadLink
}
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
{
keys: [ "t", "shift + t" ]
action: @method:toggleQueue
}
{
keys: [ "f", "shift + f" ]
action: @menu:fileAreaFilterEditor
}
{
keys: [ "v", "shift + v" ]
action: @method:viewDetails
}
{
keys: [ "r", "shift + r" ]
action: @menu:fileBaseGetRatingForSelectedEntry
}
{
keys: [ "?" ]
action: @method:displayHelp
}
]
}
1: {
mci: {
HM1: {
focus: true
submit: true
argName: navSelect
items: [
"general", "nfo/readme", "file listing"
]
}
}
actionKeys: [
{
keys: [ "escape", "q", "shift + q" ]
action: @method:detailsQuit
}
]
}
2: {
// details - general
mci: {}
}
3: {
// details - nfo/readme
mci: {
MT1: {
mode: preview
}
}
}
4: {
// details - file listing
mci: {
VM1: {
}
}
}
}
}
2017-09-04 02:45:00 +00:00
fileBaseBrowseByAreaSelect: {
desc: Browsing File Areas
module: file_base_area_select
2017-09-04 02:45:00 +00:00
art: FAREASEL
form: {
0: {
mci: {
VM1: {
focus: true
argName: areaTag
2017-09-04 02:45:00 +00:00
}
}
submit: {
*: [
{
value: { areaTag: null }
2017-09-04 02:45:00 +00:00
action: @method:selectArea
}
]
}
actionKeys: [
{
2018-07-06 00:39:35 +00:00
keys: [ "escape", "q", "shift + q" ]
2017-09-04 02:45:00 +00:00
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseGetRatingForSelectedEntry: {
desc: Rating a File
prompt: fileBaseRateEntryPrompt
config: {
cls: true
}
submit: [
// :TODO: handle esc/q
{
// pass data back to caller
value: { rating: null }
action: @systemMethod:prevMenu
}
]
}
fileBaseListEntriesNoResults: {
desc: Browsing Files
art: FBNORES
config: {
pause: true
menuFlags: [ "noHistory", "popParent" ]
}
}
fileBaseSearch: {
module: file_base_search
desc: Searching Files
art: FSEARCH
form: {
0: {
mci: {
ET1: {
focus: true
argName: searchTerms
}
BT2: {
argName: search
text: search
submit: true
}
ET3: {
maxLength: 64
argName: tags
}
SM4: {
maxLength: 64
argName: areaIndex
}
SM5: {
items: [
"upload date",
"uploaded by",
"downloads",
"rating",
"estimated year",
"size",
"filename",
]
argName: sortByIndex
}
SM6: {
items: [
"decending",
"ascending"
]
argName: orderByIndex
}
BT7: {
argName: advancedSearch
text: advanced search
submit: true
}
}
submit: {
*: [
{
value: { search: null }
action: @method:search
}
{
value: { advancedSearch: null }
action: @method:search
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileAreaFilterEditor: {
desc: File Filter Editor
module: file_area_filter_edit
art: FFILEDT
form: {
0: {
mci: {
ET1: {
argName: searchTerms
}
ET2: {
maxLength: 64
argName: tags
}
SM3: {
maxLength: 64
argName: areaIndex
}
SM4: {
items: [
"upload date",
"uploaded by",
"downloads",
"rating",
"estimated year",
"size",
]
argName: sortByIndex
}
SM5: {
items: [
"decending",
"ascending"
]
argName: orderByIndex
}
ET6: {
maxLength: 64
argName: name
validate: @systemMethod:validateNonEmpty
}
HM7: {
focus: true
items: [
"prev", "next", "make active", "save", "new", "delete"
]
argName: navSelect
focusItemIndex: 1
}
}
submit: {
*: [
{
value: { navSelect: 0 }
action: @method:prevFilter
}
{
value: { navSelect: 1 }
action: @method:nextFilter
}
{
value: { navSelect: 2 }
action: @method:makeFilterActive
}
{
value: { navSelect: 3 }
action: @method:saveFilter
}
{
value: { navSelect: 4 }
action: @method:newFilter
}
{
value: { navSelect: 5 }
action: @method:deleteFilter
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseDownloadManager: {
desc: Download Manager
module: file_base_download_manager
config: {
art: {
queueManager: FDLMGR
/*
NYI
details: FDLDET
*/
}
emptyQueueMenu: fileBaseDownloadManagerEmptyQueue
}
form: {
0: {
mci: {
VM1: {
argName: queueItem
}
HM2: {
focus: true
items: [ "download all", "quit" ]
argName: navSelect
}
}
submit: {
*: [
{
value: { navSelect: 0 }
action: @method:downloadAll
}
{
value: { navSelect: 1 }
action: @systemMethod:prevMenu
}
]
}
actionKeys: [
{
keys: [ "a", "shift + a" ]
action: @method:downloadAll
}
{
keys: [ "delete", "r", "shift + r" ]
action: @method:removeItem
}
{
2017-09-29 03:34:58 +00:00
keys: [ "c", "shift + c" ]
action: @method:clearQueue
}
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseWebDownloadManager: {
desc: Web D/L Manager
module: file_base_web_download_manager
2017-09-29 03:34:58 +00:00
config: {
art: {
queueManager: FWDLMGR
batchList: BATDLINF
}
emptyQueueMenu: fileBaseDownloadManagerEmptyQueue
}
form: {
0: {
mci: {
VM1: {
argName: queueItem
}
HM2: {
focus: true
items: [ "get batch link", "quit", "help" ]
argName: navSelect
}
}
submit: {
*: [
{
value: { navSelect: 0 }
action: @method:getBatchLink
}
{
value: { navSelect: 1 }
action: @systemMethod:prevMenu
}
]
}
actionKeys: [
{
keys: [ "b", "shift + b" ]
action: @method:getBatchLink
}
{
keys: [ "delete", "r", "shift + r" ]
action: @method:removeItem
}
{
keys: [ "c", "shift + c" ]
action: @method:clearQueue
}
{
keys: [ "escape", "q", "shift + q" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseDownloadManagerEmptyQueue: {
desc: Empty Download Queue
art: FEMPTYQ
config: {
pause: true
menuFlags: [ "noHistory", "popParent" ]
}
}
fileTransferProtocolSelection: {
desc: Protocol selection
module: file_transfer_protocol_select
art: FPROSEL
form: {
0: {
mci: {
VM1: {
focus: true
argName: protocol
}
}
submit: {
*: [
{
value: { protocol: null }
action: @method:selectProtocol
}
]
}
actionKeys: [
{
keys: [ "escape" ]
action: @systemMethod:prevMenu
}
]
}
}
}
fileBaseUploadFiles: {
desc: Uploading
module: upload
config: {
art: {
options: ULOPTS
fileDetails: ULDETAIL
processing: ULCHECK
dupes: ULDUPES
}
}
form: {
// options
0: {
mci: {
SM1: {
argName: areaSelect
focus: true
}
TM2: {
argName: uploadType
items: [ "blind", "supply filename" ]
}
ET3: {
argName: fileName
maxLength: 255
validate: @method:validateNonBlindFileName
}
HM4: {
argName: navSelect
items: [ "continue", "cancel" ]
submit: true
}
}
submit: {
*: [
{
value: { navSelect: 0 }
action: @method:optionsNavContinue
}
{
value: { navSelect: 1 }
action: @systemMethod:prevMenu
}
]
}
"actionKeys" : [
{
"keys" : [ "escape" ],
action: @systemMethod:prevMenu
}
]
}
1: {
mci: { }
}
// file details entry
2: {
mci: {
MT1: {
argName: shortDesc
tabSwitchesView: true
focus: true
}
ET2: {
argName: tags
}
ME3: {
argName: estYear
maskPattern: "####"
}
BT4: {
argName: continue
text: continue
submit: true
}
}
submit: {
*: [
{
value: { continue: null }
action: @method:fileDetailsContinue
}
]
}
}
// dupes
3: {
mci: {
VM1: {
/*
Use 'dupeInfoFormat' to custom format:
areaDesc
areaName
areaTag
desc
descLong
fileId
fileName
fileSha256
storageTag
uploadTimestamp
*/
mode: preview
}
}
}
}
}
fileBaseNoUploadAreasAvail: {
desc: File Base
art: ULNOAREA
config: {
pause: true
menuFlags: [ "noHistory", "popParent" ]
}
}
sendFilesToUser: {
desc: Downloading
module: file_transfer
config: {
// defaults - generally use extraArgs
protocol: zmodem8kSexyz
direction: send
}
}
recvFilesFromUser: {
desc: Uploading
module: file_transfer
config: {
// defaults - generally use extraArgs
protocol: zmodem8kSexyz
direction: recv
}
}
////////////////////////////////////////////////////////////////////////
// Required entries
////////////////////////////////////////////////////////////////////////
idleLogoff: {
art: IDLELOG
next: @systemMethod:logoff
}
////////////////////////////////////////////////////////////////////////
// Demo Section
// :TODO: This entire section needs updated!!!
////////////////////////////////////////////////////////////////////////
"demoMain" : {
"art" : "demo_selection_vm.ans",
"form" : {
"0" : {
"VM" : {
"mci" : {
"VM1" : {
"items" : [
2016-06-27 07:29:17 +00:00
"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 },
2015-06-25 22:33:17 +00:00
"action" : "@menu:demoFullScreenEditor"
}
]
2015-04-07 04:29:45 +00:00
}
}
}
}
},
"demoEditTextView" : {
"art" : "demo_edit_text_view1.ans",
"form" : {
"0" : {
"BTETETETET" : {
"mci" : {
"ET1" : {
"width" : 20,
"maxLength" : 20
},
"ET2" : {
"width" : 20,
"maxLength" : 40,
"textOverflow" : "..."
2015-04-29 03:15:36 +00:00
},
"ET3" : {
"width" : 20,
"fillChar" : "-",
"styleSGR1" : "|00|36",
"maxLength" : 20
},
"ET4" : {
"width" : 20,
"maxLength" : 20,
"password" : true
},
"BT5" : {
"width" : 8,
"text" : "< Back"
2015-04-25 20:44:48 +00:00
}
},
"submit" : {
"*" : [
{
"value" : 5,
"action" : "@menu:demoMain"
}
]
},
"actionKeys" : [
{
"keys" : [ "escape" ],
"viewId" : 5
}
]
2015-04-29 03:15:36 +00:00
}
}
}
},
"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"
}
2015-04-29 03:15:36 +00:00
},
"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" : {
2016-06-27 07:29:17 +00:00
"mci" : {
"MT1" : {
"width" : 70,
"height" : 17,
//"text" : "@art:demo_multi_line_edit_text_view_text.txt",
// "text" : "@systemMethod:textFromFile"
2015-09-11 05:09:45 +00:00
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"
},
2015-06-25 22:33:17 +00:00
"demoFullScreenEditor" : {
"module" : "fse",
2015-06-26 04:34:33 +00:00
"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
}
}
}
2015-07-09 04:07:25 +00:00
},
"3" : {
"HM" : {
2015-07-09 04:07:25 +00:00
"mci" : {
"HM1" : {
// :TODO: Continue, Save, Discard, Clear, Quote, Help
"items" : [ "Save", "Discard", "Quote", "Help" ]
2015-07-09 04:07:25 +00:00
}
},
"submit" : {
"*" : [
{
2015-07-09 23:06:09 +00:00
"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"
}
]
}
2015-04-25 20:44:48 +00:00
}
}
2016-06-27 07:29:17 +00:00
}
}
2016-06-27 07:29:17 +00:00
}