Merge branch '216-waiting-for-caller' of github.com:NuSkooler/enigma-bbs into 216-waiting-for-caller
15
docs/Gemfile
@@ -8,10 +8,10 @@ source "https://rubygems.org"
|
||||
#
|
||||
# This will help ensure the proper Jekyll version is running.
|
||||
# Happy Jekylling!
|
||||
gem "jekyll", "~> 3.7.0"
|
||||
gem "jekyll", "~> 4.2.1"
|
||||
|
||||
# This is the default theme for new Jekyll sites. You may change this to anything you like.
|
||||
gem "hacker"
|
||||
# gem "hacker"
|
||||
|
||||
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
||||
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
||||
@@ -19,11 +19,12 @@ gem "hacker"
|
||||
|
||||
# If you have any plugins, put them here!
|
||||
group :jekyll_plugins do
|
||||
gem "jekyll-feed", "~> 0.6"
|
||||
gem 'jekyll-seo-tag'
|
||||
gem 'jekyll-theme-hacker'
|
||||
gem 'jekyll-sitemap'
|
||||
gem 'jemoji'
|
||||
gem 'jekyll-seo-tag', '~> 2.7.1'
|
||||
gem 'jekyll-theme-hacker', '~>0.2.0'
|
||||
gem 'jekyll-sitemap', '~>1.4.0'
|
||||
gem 'jemoji', '~>0.12.0'
|
||||
gem 'jekyll-relative-links', '~>0.6.1'
|
||||
gem 'jekyll-minifier'
|
||||
end
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
|
||||
@@ -1,101 +1,116 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.9)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
activesupport (7.0.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.0.5)
|
||||
em-websocket (0.5.1)
|
||||
concurrent-ruby (1.1.9)
|
||||
cssminify2 (2.0.1)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.5)
|
||||
ffi (1.9.24)
|
||||
http_parser.rb (~> 0)
|
||||
eventmachine (1.2.7)
|
||||
execjs (2.8.1)
|
||||
ffi (1.15.5)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.0)
|
||||
hacker (0.0.1)
|
||||
html-pipeline (2.7.1)
|
||||
gemoji (3.0.1)
|
||||
html-pipeline (2.14.0)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.8.5)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.1)
|
||||
nokogiri (>= 1.4)
|
||||
htmlcompressor (0.4.0)
|
||||
http_parser.rb (0.8.0)
|
||||
i18n (1.9.1)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.7.4)
|
||||
jekyll (4.2.1)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
i18n (~> 1.0)
|
||||
jekyll-sass-converter (~> 2.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 1.14)
|
||||
kramdown (~> 2.3)
|
||||
kramdown-parser-gfm (~> 1.0)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
mercenary (~> 0.4.0)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
rouge (~> 3.0)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-feed (0.9.2)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sass-converter (1.5.1)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.4.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.1.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-hacker (0.1.0)
|
||||
jekyll (~> 3.5)
|
||||
terminal-table (~> 2.0)
|
||||
jekyll-minifier (0.1.10)
|
||||
cssminify2 (~> 2.0)
|
||||
htmlcompressor (~> 0.4)
|
||||
jekyll (>= 3.5)
|
||||
json-minify (~> 0.0.3)
|
||||
uglifier (~> 4.1)
|
||||
jekyll-relative-links (0.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-sass-converter (2.1.0)
|
||||
sassc (> 2.0.1, < 3.0)
|
||||
jekyll-seo-tag (2.7.1)
|
||||
jekyll (>= 3.8, < 5.0)
|
||||
jekyll-sitemap (1.4.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-theme-hacker (0.2.0)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-watch (2.0.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.8.1)
|
||||
activesupport (~> 4.0, >= 4.2.9)
|
||||
jemoji (0.12.0)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0)
|
||||
kramdown (1.16.2)
|
||||
liquid (4.0.0)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.4.0)
|
||||
minitest (5.11.1)
|
||||
nokogiri (1.10.8)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
pathutil (0.16.1)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
json (2.6.1)
|
||||
json-minify (0.0.3)
|
||||
json (> 0)
|
||||
kramdown (2.3.1)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.7.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.4.0)
|
||||
minitest (5.15.0)
|
||||
nokogiri (1.13.1-x86_64-linux)
|
||||
racc (~> 1.4)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.1)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 1.9.24, < 2)
|
||||
rouge (3.1.0)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.5.5)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.4)
|
||||
thread_safe (~> 0.1)
|
||||
public_suffix (4.0.6)
|
||||
racc (1.6.0)
|
||||
rb-fsevent (0.11.0)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.5)
|
||||
rouge (3.28.0)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
ffi (~> 1.9)
|
||||
terminal-table (2.0.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
tzinfo (2.0.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
uglifier (4.2.0)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
unicode-display_width (1.8.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
hacker
|
||||
jekyll (~> 3.7.0)
|
||||
jekyll-feed (~> 0.6)
|
||||
jekyll-seo-tag
|
||||
jekyll-sitemap
|
||||
jekyll-theme-hacker
|
||||
jemoji
|
||||
jekyll (~> 4.2.1)
|
||||
jekyll-minifier
|
||||
jekyll-relative-links (~> 0.6.1)
|
||||
jekyll-seo-tag (~> 2.7.1)
|
||||
jekyll-sitemap (~> 1.4.0)
|
||||
jekyll-theme-hacker (~> 0.2.0)
|
||||
jemoji (~> 0.12.0)
|
||||
tzinfo-data
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.1
|
||||
2.3.5
|
||||
|
||||
105
docs/_config.yml
@@ -9,13 +9,17 @@ logo: /assets/images/enigma-logo.png
|
||||
markdown: kramdown
|
||||
theme: jekyll-theme-hacker
|
||||
plugins:
|
||||
- jekyll-feed
|
||||
- jekyll-seo-tag
|
||||
- jekyll-relative-links
|
||||
- jekyll-sitemap
|
||||
- jemoji
|
||||
|
||||
baseurl: /enigma-bbs
|
||||
|
||||
relative_links:
|
||||
enabled: true
|
||||
collections: true
|
||||
|
||||
# Exclude from processing.
|
||||
# The following items will not be processed, by default. Create a custom list
|
||||
# to override the default setting.
|
||||
@@ -28,3 +32,102 @@ exclude:
|
||||
- vendor/gems/
|
||||
- vendor/ruby/
|
||||
- .idea
|
||||
|
||||
|
||||
# New documents that are not included below under order will display at the
|
||||
# end of the list. Section names for directories and subdirectories are
|
||||
# setup in _data/sections.yml. Change there in order to update the name of
|
||||
# one of the subdirectories or to add a new one.
|
||||
|
||||
|
||||
collections:
|
||||
docs:
|
||||
output: true
|
||||
permalink: /:path:output_ext
|
||||
order:
|
||||
- installation/installation-methods.md
|
||||
- installation/install-script.md
|
||||
- installation/docker.md
|
||||
- installation/manual.md
|
||||
- installation/hardware/rpi.md
|
||||
- installation/hardware/windows.md
|
||||
- installation/network.md
|
||||
- installation/testing.md
|
||||
- installation/production.md
|
||||
- configuration/creating-config.md
|
||||
- configuration/sysop-setup.md
|
||||
- configuration/config-files.md
|
||||
- configuration/config-hjson.md
|
||||
- configuration/hjson.md
|
||||
- configuration/menu-hjson.md
|
||||
- configuration/directory-structure.md
|
||||
- configuration/external-binaries.md
|
||||
- configuration/archivers.md
|
||||
- configuration/file-transfer-protocols.md
|
||||
- configuration/email.md
|
||||
- configuration/colour-codes.md
|
||||
- configuration/event-scheduler.md
|
||||
- configuration/acs.md
|
||||
- configuration/security.md
|
||||
- misc/user-interrupt.md
|
||||
- filebase/index.md
|
||||
- filebase/first-file-area.md
|
||||
- filebase/acs.md
|
||||
- filebase/uploads.md
|
||||
- filebase/web-access.md
|
||||
- filebase/tic-support.md
|
||||
- filebase/network-mounts-and-symlinks.md
|
||||
- messageareas/configuring-a-message-area.md
|
||||
- messageareas/message-networks.md
|
||||
- messageareas/bso-import-export.md
|
||||
- messageareas/netmail.md
|
||||
- messageareas/qwk.md
|
||||
- messageareas/ftn.md
|
||||
- art/general.md
|
||||
- art/themes.md
|
||||
- art/mci.md
|
||||
- art/views/button_view.md
|
||||
- art/views/edit_text_view.md
|
||||
- art/views/full_menu_view.md
|
||||
- art/views/horizontal_menu_view.md
|
||||
- art/views/mask_edit_text_view.md
|
||||
- art/views/multi_line_edit_text_view.md
|
||||
- art/views/predefined_label_view.md
|
||||
- art/views/spinner_menu_view.md
|
||||
- art/views/text_view.md
|
||||
- art/views/toggle_menu_view.md
|
||||
- art/views/vertical_menu_view.md
|
||||
- servers/loginservers/telnet.md
|
||||
- servers/loginservers/ssh.md
|
||||
- servers/loginservers/websocket.md
|
||||
- servers/contentservers/web-server.md
|
||||
- servers/contentservers/gopher.md
|
||||
- servers/contentservers/nntp.md
|
||||
- modding/local-doors.md
|
||||
- modding/door-servers.md
|
||||
- modding/telnet-bridge.md
|
||||
- modding/existing-mods.md
|
||||
- modding/file-area-list.md
|
||||
- modding/last-callers.md
|
||||
- modding/whos-online.md
|
||||
- modding/user-list.md
|
||||
- modding/msg-conf-list.md
|
||||
- modding/msg-area-list.md
|
||||
- modding/bbs-list.md
|
||||
- modding/rumorz.md
|
||||
- modding/file-transfer-protocol-select.md
|
||||
- modding/onelinerz.md
|
||||
- modding/show-art.md
|
||||
- modding/file-base-download-manager.md
|
||||
- modding/file-base-web-download-manager.md
|
||||
- modding/set-newscan-date.md
|
||||
- modding/node-msg.md
|
||||
- modding/top-x.md
|
||||
- modding/user-2fa-otp-config.md
|
||||
- modding/autosig-edit.md
|
||||
- modding/menu-modules.md
|
||||
- admin/administration.md
|
||||
- admin/oputil.md
|
||||
- admin/updating.md
|
||||
- troubleshooting/monitoring-logs.md
|
||||
|
||||
|
||||
28
docs/_data/sections.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
installation:
|
||||
title: Installation
|
||||
configuration:
|
||||
title: Configuration
|
||||
filebase:
|
||||
title: File Base
|
||||
messageareas:
|
||||
title: Message Areas
|
||||
art:
|
||||
title: Art
|
||||
servers:
|
||||
title: Servers
|
||||
modding:
|
||||
title: Modding
|
||||
admin:
|
||||
title: Administration
|
||||
troubleshooting:
|
||||
title: Troubleshooting
|
||||
misc:
|
||||
title: Miscellaneous
|
||||
views:
|
||||
title: Views
|
||||
hardware:
|
||||
title: OS / Hardware Specific
|
||||
loginservers:
|
||||
title: Login Servers
|
||||
contentservers:
|
||||
title: Content Servers
|
||||
@@ -40,4 +40,4 @@ SQLite database files become less performant over time and waste space. It is re
|
||||
Example:
|
||||
```bash
|
||||
sqlite3 ./db/message.sqlite3 "vacuum;"
|
||||
```
|
||||
```
|
||||
@@ -128,15 +128,17 @@ a Vertical Menu (`%VM`): Old-school BBSers may recognize this as a lightbar menu
|
||||
|
||||
| Code | Name | Description | Notes |
|
||||
|------|----------------------|------------------|-------|
|
||||
| `TL` | Text Label | Displays text | Static content |
|
||||
| `ET` | Edit Text | Collect user input | Single line entry |
|
||||
| `ME` | Masked Edit Text | Collect user input using a *mask* | See **Mask Edits** below |
|
||||
| `MT` | Multi Line Text Edit | Multi line edit control | Used for FSE, display of FILE_ID.DIZ, etc. |
|
||||
| `BT` | Button | A button | ...it's a button |
|
||||
| `VM` | Vertical Menu | A vertical menu | AKA a vertical lightbar; Useful for lists |
|
||||
| `HM` | Horizontal Menu | A horizontal menu | AKA a horizontal lightbar |
|
||||
| `SM` | Spinner Menu | A spinner input control | Select *one* from multiple options |
|
||||
| `TM` | Toggle Menu | A toggle menu | Commonly used for Yes/No style input |
|
||||
| `TL` | Text Label | Displays text | Static content. See [Text View](views/text_view.md) |
|
||||
| `ET` | Edit Text | Collect user input | Single line entry. See [Edit Text](views/edit_text_view.md) |
|
||||
| `ME` | Masked Edit Text | Collect user input using a *mask* | See [Masked Edit](views/mask_edit_text_view.md) and **Mask Edits** below. |
|
||||
| `MT` | Multi Line Text Edit | Multi line edit control | Used for FSE, display of FILE_ID.DIZ, etc. See [Multiline Text Edit](views/multi_line_edit_text_view.md) |
|
||||
| `BT` | Button | A button | ...it's a button. See [Button](views/button_view.md) |
|
||||
| `VM` | Vertical Menu | A vertical menu | AKA a vertical lightbar; Useful for lists. See [Vertical Menu](views/vertical_menu_view.md) |
|
||||
| `HM` | Horizontal Menu | A horizontal menu | AKA a horizontal lightbar. See [Horizontal Menu](views/horizontal_menu_view.md) |
|
||||
| `FM` | Full Menu | A menu that can go both vertical and horizontal. | See [Full Menu](views/full_menu_view.md) |
|
||||
| `SM` | Spinner Menu | A spinner input control | Select *one* from multiple options. See [Spinner Menu](views/spinner_menu_view.md) |
|
||||
| `TM` | Toggle Menu | A toggle menu | Commonly used for Yes/No style input. See [Toggle Menu](views/toggle_menu_view.md)|
|
||||
| `PL` | Predefined Label | Show environment information | See [Predefined Label](views/predefined_label_view.md)|
|
||||
| `KE` | Key Entry | A *single* key input control | Think hotkeys |
|
||||
|
||||
:information_source: Peek at [/core/mci_view_factory.js](https://github.com/NuSkooler/enigma-bbs/blob/master/core/mci_view_factory.js) to see additional information.
|
||||
@@ -245,4 +247,4 @@ Suppose a format object contains the following elements: `userName` and `affils`
|
||||
|
||||

|
||||
|
||||
:bulb: Remember that a Python [string format mini language](https://docs.python.org/3/library/string.html#format-specification-mini-language) style syntax is available for widths, alignment, number prevision, etc. as well. A number can be made to be more human readable for example: `{byteSize:,}` may yield "1,123,456".
|
||||
:bulb: Remember that a Python [string format mini language](https://docs.python.org/3/library/string.html#format-specification-mini-language) style syntax is available for widths, alignment, number prevision, etc. as well. A number can be made to be more human readable for example: `{byteSize:,}` may yield "1,123,456".
|
||||
57
docs/_docs/art/views/button_view.md
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
layout: page
|
||||
title: Button View
|
||||
---
|
||||
## Button View
|
||||
A button view supports displaying a button on a screen.
|
||||
|
||||
## General Information
|
||||
|
||||
:information_source: A button view is defined with a percent (%) and the characters BT, followed by the view number. For example: `%BT1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `text` | Sets the text to display on the button |
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets focus text style. See **Text Styles** in [MCI](../mci.md)|
|
||||
| `width` | Sets the width of a view to display one or more columns horizontally (default 15)|
|
||||
| `focus` | If set to `true`, establishes initial focus |
|
||||
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
|
||||
| `argName` | Sets the argument name for this selection in the form |
|
||||
| `justify` | Sets the justification of each item in the list. Options: left (default), right, center |
|
||||
| `fillChar` | Specifies a character to fill extra space longer than the text length. Defaults to an empty space |
|
||||
| `textOverflow` | If the button text cannot be displayed due to `width`, set overflow characters. See **Text Overflow** below |
|
||||
|
||||
### Text Overflow
|
||||
|
||||
The `textOverflow` option is used to specify what happens when a text string is too long to fit in the `width` defined.
|
||||
|
||||
:information_source: If `textOverflow` is not specified at all, a button can become wider than the `width` if needed to display the text value.
|
||||
|
||||
:information_source: Setting `textOverflow` to an empty string `textOverflow: ""` will cause the item to be truncated if necessary without any characters displayed
|
||||
|
||||
:information_source: Otherwise, setting `textOverflow` to one or more characters will truncate the value if necessary and display those characters at the end. i.e. `textOverflow: ...`
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
BT1: {
|
||||
submit: true
|
||||
justify: center
|
||||
argName: btnSelect
|
||||
width: 17
|
||||
focusTextStyle: upper
|
||||
text: Centered button
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
42
docs/_docs/art/views/edit_text_view.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
layout: page
|
||||
title: Edit Text View
|
||||
---
|
||||
## Edit Text View
|
||||
An edit text view supports editing form values on a screen. This can be for new entry as well as editing existing values defined by the module.
|
||||
|
||||
## General Information
|
||||
|
||||
:information_source: An edit text view is defined with a percent (%) and the characters ET, followed by the view number. For example: `%ET1`. This is generally used on a form in order to allow a user to enter or edit a text value.
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets the focus text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `width` | Sets the width of a view for the text edit (default 15)|
|
||||
| `argName` | Sets the argument name for this value in the form |
|
||||
| `maxLength` | Sets the maximum number of characters that can be entered |
|
||||
| `focus` | Set to true to capture initial focus |
|
||||
| `justify` | Sets the justification of the text entry. Options: left (default), right, center |
|
||||
| `fillChar` | Specifies a character to fill extra space in the text entry with. Defaults to an empty space |
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
ET1: {
|
||||
maxLength: @config:users.usernameMax
|
||||
argName: username
|
||||
focus: true
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
240
docs/_docs/art/views/full_menu_view.md
Normal file
@@ -0,0 +1,240 @@
|
||||
---
|
||||
layout: page
|
||||
title: Full Menu View
|
||||
---
|
||||
## Full Menu View
|
||||
A full menu view supports displaying a list of times on a screen in a very configurable manner. A full menu view supports either a single row or column of values, similar to Horizontal Menu (HM) and Vertical Menu (VM), or in multiple columns.
|
||||
|
||||
## General Information
|
||||
|
||||
Items can be selected on a menu via the cursor keys, Page Up, Page Down, Home, and End, or by selecting them via a `hotKey` - see ***Hot Keys*** below.
|
||||
|
||||
:information_source: A full menu view is defined with a percent (%) and the characters FM, followed by the view number. For example: `%FM1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets focus text style. See **Text Styles** in [MCI](../mci.md)|
|
||||
| `itemSpacing` | Used to separate items vertically in the menu |
|
||||
| `itemHorizSpacing` | Used to separate items horizontally in the menu |
|
||||
| `height` | Sets the height of views to display multiple items vertically (default 1) |
|
||||
| `width` | Sets the width of a view to display one or more columns horizontally (default 15)|
|
||||
| `focus` | If set to `true`, establishes initial focus |
|
||||
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
|
||||
| `hotKeys` | Sets hot keys to activate specific items. See **Hot Keys** below |
|
||||
| `hotKeySubmit` | Set to submit a form on hotkey selection |
|
||||
| `argName` | Sets the argument name for this selection in the form |
|
||||
| `justify` | Sets the justification of each item in the list. Options: left (default), right, center |
|
||||
| `itemFormat` | Sets the format for a list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
| `fillChar` | Specifies a character to fill extra space in the menu with. Defaults to an empty space |
|
||||
| `textOverflow` | If a single column cannot be displayed due to `width`, set overflow characters. See **Text Overflow** below |
|
||||
| `items` | List of items to show in the menu. See **Items** below.
|
||||
| `focusItemFormat` | Sets the format for a focused list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
|
||||
|
||||
### Hot Keys
|
||||
|
||||
A set of `hotKeys` are used to allow the user to press a character on the keyboard to select that item, and optionally submit the form.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hotKeys: { A: 0, B: 1, C: 2, D: 3 }
|
||||
hotKeySubmit: true
|
||||
```
|
||||
This would select and submit the first item if `A` is typed, second if `B`, etc.
|
||||
|
||||
### Items
|
||||
|
||||
A full menu, similar to other menus, take a list of items to display in the menu. For example:
|
||||
|
||||
|
||||
```
|
||||
items: [
|
||||
{
|
||||
text: First Item
|
||||
data: first
|
||||
}
|
||||
{
|
||||
text: Second Item
|
||||
data: second
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
If the list is for display only (there is no form action associated with it) you can omit the data element, and include the items as a simple list:
|
||||
|
||||
```
|
||||
["First item", "Second item", "Third Item"]
|
||||
```
|
||||
|
||||
### Text Overflow
|
||||
|
||||
The `textOverflow` option is used to specify what happens when a text string is too long to fit in the `width` defined. Note, because columns are automatically calculated, this can only occur when the text is too long to fit the `width` using a single column.
|
||||
|
||||
:information_source: If `textOverflow` is not specified at all, a menu can become wider than the `width` if needed to display a single column.
|
||||
|
||||
:information_source: Setting `textOverflow` to an empty string `textOverflow: ""` will cause the item to be truncated if necessary without any characters displayed
|
||||
|
||||
:information_source: Otherwise, setting `textOverflow` to one or more characters will truncate the value if necessary and display those characters at the end. i.e. `textOverflow: ...`
|
||||
|
||||
## Examples
|
||||
|
||||
### A simple vertical menu - similar to VM
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
FM1: {
|
||||
submit: true
|
||||
argName: navSelect
|
||||
width: 1
|
||||
items: [
|
||||
{
|
||||
text: login
|
||||
data: login
|
||||
}
|
||||
{
|
||||
text: apply
|
||||
data: new user
|
||||
}
|
||||
{
|
||||
text: about
|
||||
data: about
|
||||
}
|
||||
{
|
||||
text: log off
|
||||
data: logoff
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
|
||||
### A simple horizontal menu - similar to HM
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
FM2: {
|
||||
focus: true
|
||||
height: 1
|
||||
width: 60 // set as desired
|
||||
submit: true
|
||||
argName: navSelect
|
||||
items: [
|
||||
"prev", "next", "details", "toggle queue", "rate", "help", "quit"
|
||||
]
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
|
||||
### A multi-column navigation menu with hotkeys
|
||||
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
FM1: {
|
||||
focus: true
|
||||
height: 6
|
||||
width: 60
|
||||
submit: true
|
||||
argName: navSelect
|
||||
hotKeys: { M: 0, E: 1, D: 2 ,F: 3,!: 4, A: 5, C: 6, Y: 7, S: 8, R: 9, O: 10, L:11, U:12, W: 13, B:14, G:15, T: 16, Q:17 }
|
||||
hotKeySubmit: true
|
||||
items: [
|
||||
{
|
||||
text: M) message area
|
||||
data: message
|
||||
}
|
||||
{
|
||||
text: E) private email
|
||||
data: email
|
||||
}
|
||||
{
|
||||
text: D) doors
|
||||
data: doors
|
||||
}
|
||||
{
|
||||
text: F) file base
|
||||
data: files
|
||||
}
|
||||
{
|
||||
text: !) global newscan
|
||||
data: newscan
|
||||
}
|
||||
{
|
||||
text: A) achievements
|
||||
data: achievements
|
||||
}
|
||||
{
|
||||
text: C) configuration
|
||||
data: config
|
||||
}
|
||||
{
|
||||
text: Y) user stats
|
||||
data: userstats
|
||||
}
|
||||
{
|
||||
text: S) system stats
|
||||
data: systemstats
|
||||
}
|
||||
{
|
||||
text: R) rumorz
|
||||
data: rumorz
|
||||
}
|
||||
{
|
||||
text: O) onelinerz
|
||||
data: onelinerz
|
||||
}
|
||||
{
|
||||
text: L) last callers
|
||||
data: callers
|
||||
}
|
||||
{
|
||||
text: U) user list
|
||||
data: userlist
|
||||
}
|
||||
{
|
||||
text: W) whos online
|
||||
data: who
|
||||
}
|
||||
{
|
||||
text: B) bbs list
|
||||
data: bbslist
|
||||
}
|
||||
{
|
||||
text: G) node-to-node messages
|
||||
data: nodemessages
|
||||
}
|
||||
{
|
||||
text: T) multi relay chat
|
||||
data: mrc
|
||||
}
|
||||
{
|
||||
text: Q) quit
|
||||
data: quit
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
|
||||
91
docs/_docs/art/views/horizontal_menu_view.md
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
layout: page
|
||||
title: Horizontal Menu View
|
||||
---
|
||||
## Horizontal Menu View
|
||||
A horizontal menu view supports displaying a list of times on a screen horizontally (side to side, in a single row) similar to a lightbox.
|
||||
|
||||
## General Information
|
||||
|
||||
Items can be selected on a menu via the cursor keys, Page Up, Page Down, Home, and End, or by selecting them via a `hotKey` - see ***Hot Keys*** below.
|
||||
|
||||
:information_source: A horizontal menu view is defined with a percent (%) and the characters HM, followed by the view number (if used.) For example: `%HM1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets focus text style. See **Text Styles** in [MCI](../mci.md)|
|
||||
| `itemSpacing` | Used to separate items horizontally in the menu |
|
||||
| `width` | Sets the width of a view to display one or more columns horizontally (default 15)|
|
||||
| `focus` | If set to `true`, establishes initial focus |
|
||||
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
|
||||
| `hotKeys` | Sets hot keys to activate specific items. See **Hot Keys** below |
|
||||
| `hotKeySubmit` | Set to submit a form on hotkey selection |
|
||||
| `argName` | Sets the argument name for this selection in the form |
|
||||
| `justify` | Sets the justification of each item in the list. Options: left (default), right, center |
|
||||
| `itemFormat` | Sets the format for a list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
| `fillChar` | Specifies a character to fill extra space in the menu with. Defaults to an empty space |
|
||||
| `items` | List of items to show in the menu. See **Items** below.
|
||||
| `focusItemFormat` | Sets the format for a focused list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
|
||||
|
||||
### Hot Keys
|
||||
|
||||
A set of `hotKeys` are used to allow the user to press a character on the keyboard to select that item, and optionally submit the form.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hotKeys: { A: 0, B: 1, C: 2, D: 3 }
|
||||
hotKeySubmit: true
|
||||
```
|
||||
This would select and submit the first item if `A` is typed, second if `B`, etc.
|
||||
|
||||
### Items
|
||||
|
||||
A horizontal menu, similar to other menus, take a list of items to display in the menu. For example:
|
||||
|
||||
|
||||
```
|
||||
items: [
|
||||
{
|
||||
text: First Item
|
||||
data: first
|
||||
}
|
||||
{
|
||||
text: Second Item
|
||||
data: second
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
If the list is for display only (there is no form action associated with it) you can omit the data element, and include the items as a simple list:
|
||||
|
||||
```
|
||||
["First item", "Second item", "Third Item"]
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
HM2: {
|
||||
focus: true
|
||||
width: 60 // set as desired
|
||||
submit: true
|
||||
argName: navSelect
|
||||
items: [
|
||||
"prev", "next", "details", "toggle queue", "rate", "help", "quit"
|
||||
]
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
64
docs/_docs/art/views/mask_edit_text_view.md
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
layout: page
|
||||
title: Mask Edit Text View
|
||||
---
|
||||
## Mask Edit Text View
|
||||
A mask edit text view supports editing form values on a screen. This can be for new entry as well as editing existing values. Unlike a edit text view, the mask edit text view uses a mask pattern to specify what format the values should be entered in.
|
||||
|
||||
## General Information
|
||||
|
||||
:information_source: A mask edit text view is defined with a percent (%) and the characters ME, followed by the view number. For example: `%ME1`. This is generally used on a form in order to allow a user to enter or edit a text value.
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets the focus text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `argName` | Sets the argument name for this value in the form |
|
||||
| `maxLength` | Sets the maximum number of characters that can be entered. *Not normally useful, set the mask pattern as needed instead* |
|
||||
| `focus` | Set to true to capture initial focus |
|
||||
| `maskPattern` | Sets the mask pattern. See **Mask Pattern** below |
|
||||
| `fillChar` | Specifies a character to fill extra space in the text entry with. Defaults to an empty space |
|
||||
|
||||
### Mask Pattern
|
||||
|
||||
A `maskPattern` must be set on a mask edit text view (not doing so will cause the view to be focusable, but no text can be input). The `maskPattern` is a set of characters used to define input, as well as optional literal characters that can be entered into the pattern that will always be entered into the input. The following mask characters are supported:
|
||||
|
||||
| Mask Character | Description |
|
||||
|----------------|--------------|
|
||||
| # | Numeric input, one of 0 through 9 |
|
||||
| A | Alphabetic, one of a through z or A through Z |
|
||||
| @ | Alphanumeric, matches one of either Numeric or Alphabetic above |
|
||||
| & | Printable, matches one printable character including spaces |
|
||||
|
||||
Any value other than the entries above is treated like a literal value to be displayed in the patter. Multiple pattern characters are combined for longer inputs. Some examples could include:
|
||||
|
||||
| Pattern | Description |
|
||||
|---------|--------------|
|
||||
| `AA` | Matches up to two alphabetic characters, for example a state name (i.e. "CA") |
|
||||
| `###` | Matches up to three numeric characters, for example an age (i.e. 25) |
|
||||
| `###-###-####` | A pattern matching a phone number with area code |
|
||||
| `##/##/####` | Matches a date of type month/day/year or day/month/year (i.e. 01/01/2000) |
|
||||
| `##-AAA-####` | Matches a date of type day-month-year (i.e. 01-MAR-2010) |
|
||||
| `# foot ## inches`| Matches a height in feet and inches (i.e. 6 foot 2 inches) |
|
||||
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
ME1: {
|
||||
argName: height
|
||||
fillChar: "#"
|
||||
maskPattern: "# ft. ## in."
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
53
docs/_docs/art/views/multi_line_edit_text_view.md
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
layout: page
|
||||
title: Multi Line Edit Text View
|
||||
---
|
||||
## Multi Line Edit Text View
|
||||
A text display / editor designed to edit or display a message.
|
||||
|
||||
## General Information
|
||||
|
||||
:information_source: A multi line edit text view is defined with a percent (%) and the characters MT, followed by the view number. For example: `%MT1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `text` | Sets the text to display - only useful for read-only and preview, otherwise use a specific module |
|
||||
| `width` | Sets the width of a view to display horizontally (default 15) |
|
||||
| `height` | Sets the height of a view to display vertically |
|
||||
| `argName` | Sets the argument name for the form |
|
||||
| `mode` | One of edit, preview, or read-only. See **Mode** below |
|
||||
|
||||
### Mode
|
||||
|
||||
The mode of a multi line edit text view controls how the view behaves. The following modes are allowed:
|
||||
|
||||
| Mode | Description |
|
||||
|-------------|--------------|
|
||||
| edit | edit the contents of the view |
|
||||
| preview | preview the text, including scrolling |
|
||||
| read-only | No scrolling or editing the view |
|
||||
|
||||
:information_source: If `mode` is not set, the default mode is "edit"
|
||||
|
||||
:information_source: With mode preview, scrolling the contents is allowed, but is not with read-only.
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
ML1: {
|
||||
width: 79
|
||||
argName: message
|
||||
mode: edit
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
49
docs/_docs/art/views/predefined_label_view.md
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
layout: page
|
||||
title: Predefined Label View
|
||||
---
|
||||
## Predefined Label View
|
||||
A predefined label view supports displaying a predefined MCI label on a screen.
|
||||
|
||||
## General Information
|
||||
|
||||
:information_source: A predefined label view is defined with a percent (%) and the characters PL, followed by the view number and then the predefined MCI value in parenthesis. For example: `%PL1(VL)` to display the Version Label. *NOTE*: this is an alternate way of placing MCI codes, as the MCI can also be placed on the art page directly with the code. For example `%VL`. The difference between these is that the PL version can have additional formatting options applied to it.
|
||||
|
||||
:information_source: See *Predefined Codes* in [MCI](../mci.md) for the list of available MCI codes.
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `justify` | Sets the justification of the MCI value text. Options: left (default), right, center |
|
||||
| `fillChar` | Specifies a character to fill extra space in the view. Defaults to an empty space |
|
||||
| `width` | Specifies the width that the value should be displayed in (default 3) |
|
||||
| `textOverflow` | If the MCI is wider than width, set overflow characters. See **Text Overflow** below |
|
||||
|
||||
### Text Overflow
|
||||
|
||||
The `textOverflow` option is used to specify what happens when a predefined MCI string is too long to fit in the `width` defined.
|
||||
|
||||
:information_source: If `textOverflow` is not specified at all, a predefined label view can become wider than the `width` if needed to display the MCI value.
|
||||
|
||||
:information_source: Setting `textOverflow` to an empty string `textOverflow: ""` will cause the item to be truncated if necessary without any characters displayed
|
||||
|
||||
:information_source: Otherwise, setting `textOverflow` to one or more characters will truncate the value if necessary and display those characters at the end. i.e. `textOverflow: ...`
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
PL1: {
|
||||
textStyle: upper
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
104
docs/_docs/art/views/spinner_menu_view.md
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
layout: page
|
||||
title: Spinner Menu View
|
||||
---
|
||||
## Spinner Menu View
|
||||
A spinner menu view supports displaying a set of times on a screen as a list, with one item displayed at a time. This is generally used to pick one option from a list. Some examples could include selecting from a list of states, themes, etc.
|
||||
|
||||
## General Information
|
||||
|
||||
Items can be selected on a menu via the cursor keys or by selecting them via a `hotKey` - see ***Hot Keys*** below.
|
||||
|
||||
:information_source: A spinner menu view is defined with a percent (%) and the characters SM, followed by the view number (if used.) For example: `%SM1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets focus text style. See **Text Styles** in [MCI](../mci.md)|
|
||||
| `focus` | If set to `true`, establishes initial focus |
|
||||
| `width` | Sets the width of a view on the display (default 15)|
|
||||
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
|
||||
| `hotKeys` | Sets hot keys to activate specific items. See **Hot Keys** below |
|
||||
| `hotKeySubmit` | Set to submit a form on hotkey selection |
|
||||
| `argName` | Sets the argument name for this selection in the form |
|
||||
| `justify` | Sets the justification of each item in the list. Options: left (default), right, center |
|
||||
| `itemFormat` | Sets the format for a list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
| `fillChar` | Specifies a character to fill extra space in the menu with. Defaults to an empty space |
|
||||
| `items` | List of items to show in the menu. See **Items** below.
|
||||
| `focusItemFormat` | Sets the format for a focused list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
|
||||
|
||||
### Hot Keys
|
||||
|
||||
A set of `hotKeys` are used to allow the user to press a character on the keyboard to select that item, and optionally submit the form.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hotKeys: { A: 0, B: 1, C: 2, D: 3 }
|
||||
hotKeySubmit: true
|
||||
```
|
||||
This would select and submit the first item if `A` is typed, second if `B`, etc.
|
||||
|
||||
### Items
|
||||
|
||||
A spinner menu, similar to other menus, take a list of items to display in the menu. For example:
|
||||
|
||||
|
||||
```
|
||||
items: [
|
||||
{
|
||||
text: First Item
|
||||
data: first
|
||||
}
|
||||
{
|
||||
text: Second Item
|
||||
data: second
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
If the list is for display only (there is no form action associated with it) you can omit the data element, and include the items as a simple list:
|
||||
|
||||
```
|
||||
["First item", "Second item", "Third Item"]
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
SM1: {
|
||||
submit: true
|
||||
argName: themeSelect
|
||||
items: [
|
||||
{
|
||||
text: Light
|
||||
data: light
|
||||
}
|
||||
{
|
||||
text: Dark
|
||||
data: dark
|
||||
}
|
||||
{
|
||||
text: Rainbow
|
||||
data: rainbow
|
||||
}
|
||||
{
|
||||
text: Gruvbox
|
||||
data: gruvbox
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
48
docs/_docs/art/views/text_view.md
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
layout: page
|
||||
title: Text View
|
||||
---
|
||||
## Text View
|
||||
A text label view supports displaying simple text on a screen.
|
||||
|
||||
## General Information
|
||||
|
||||
:information_source: A text label view is defined with a percent (%) and the characters TL, followed by the view number. For example: `%TL1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `text` | Sets the text to display on the label |
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `width` | Sets the width of a view to display horizontally (default 15)|
|
||||
| `justify` | Sets the justification of the text in the view. Options: left (default), right, center |
|
||||
| `fillChar` | Specifies a character to fill extra space in the view with. Defaults to an empty space |
|
||||
| `textOverflow` | Set overflow characters to display in case the text length is less than the width. See **Text Overflow** below |
|
||||
|
||||
### Text Overflow
|
||||
|
||||
The `textOverflow` option is used to specify what happens when a text string is too long to fit in the `width` defined.
|
||||
|
||||
:information_source: If `textOverflow` is not specified at all, a text label can become wider than the `width` if needed to display the text value.
|
||||
|
||||
:information_source: Setting `textOverflow` to an empty string `textOverflow: ""` will cause the item to be truncated if necessary without any characters displayed
|
||||
|
||||
:information_source: Otherwise, setting `textOverflow` to one or more characters will truncate the value if necessary and display those characters at the end. i.e. `textOverflow: ...`
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
TL1: {
|
||||
text: Text label
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
83
docs/_docs/art/views/toggle_menu_view.md
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
layout: page
|
||||
title: Toggle Menu View
|
||||
---
|
||||
## Toggle Menu View
|
||||
A toggle menu view supports displaying a list of options on a screen horizontally (side to side, in a single row) similar to a [Horizontal Menu](horizontal_menu_view.md). It is designed to present one of two choices easily.
|
||||
|
||||
## General Information
|
||||
|
||||
Items can be selected on a menu via the left and right cursor keys, or by selecting them via a `hotKey` - see ***Hot Keys*** below.
|
||||
|
||||
:information_source: A toggle menu view is defined with a percent (%) and the characters TM, followed by the view number (if used.) For example: `%TM1`
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets focus text style. See **Text Styles** in [MCI](../mci.md)|
|
||||
| `focus` | If set to `true`, establishes initial focus |
|
||||
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
|
||||
| `hotKeys` | Sets hot keys to activate specific items. See **Hot Keys** below |
|
||||
| `hotKeySubmit` | Set to submit a form on hotkey selection |
|
||||
| `argName` | Sets the argument name for this selection in the form |
|
||||
| `items` | List of items to show in the menu. Must include exactly two (2) items. See **Items** below. |
|
||||
|
||||
|
||||
### Hot Keys
|
||||
|
||||
A set of `hotKeys` are used to allow the user to press a character on the keyboard to select that item, and optionally submit the form.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hotKeys: { A: 0, B: 1, Q: 1 }
|
||||
hotKeySubmit: true
|
||||
```
|
||||
This would select and submit the first item if `A` is typed, second if `B`, etc.
|
||||
|
||||
### Items
|
||||
|
||||
A toggle menu, similar to other menus, take a list of items to display in the menu. Unlike other menus, however, there must be exactly two items in a toggle menu. For example:
|
||||
|
||||
|
||||
```
|
||||
items: [
|
||||
{
|
||||
text: First Item
|
||||
data: first
|
||||
}
|
||||
{
|
||||
text: Second Item
|
||||
data: second
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
If the list is for display only (there is no form action associated with it) you can omit the data element, and include the items as a simple list:
|
||||
|
||||
```
|
||||
["First item", "Second item"]
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
TM2: {
|
||||
focus: true
|
||||
submit: true
|
||||
argName: navSelect
|
||||
focusTextStyle: upper
|
||||
items: [ "yes", "no" ]
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
106
docs/_docs/art/views/vertical_menu_view.md
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
layout: page
|
||||
title: Vertical Menu View
|
||||
---
|
||||
## Vertical Menu View
|
||||
A vertical menu view supports displaying a list of times on a screen vertically in a single column, similar to a lightbar. This type of control is often useful for lists of items or menu controls.
|
||||
|
||||
## General Information
|
||||
|
||||
Items can be selected on a menu via the cursor keys, Page Up, Page Down, Home, and End, or by selecting them via a `hotKey` - see ***Hot Keys*** below.
|
||||
|
||||
:information_source: A vertical menu view is defined with a percent (%) and the characters VM, followed by the view number (if used.) For example: `%VM1`.
|
||||
|
||||
:information_source: See [MCI](../mci.md) for general information on how to use views and common configuration properties available for them.
|
||||
|
||||
### Properties
|
||||
|
||||
| Property | Description |
|
||||
|-------------|--------------|
|
||||
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** in [MCI](../mci.md) |
|
||||
| `focusTextStyle` | Sets focus text style. See **Text Styles** in [MCI](../mci.md)|
|
||||
| `itemSpacing` | Used to separate items vertically in the menu |
|
||||
| `height` | Sets the height of views to display multiple items vertically (default 1) |
|
||||
| `focus` | If set to `true`, establishes initial focus |
|
||||
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
|
||||
| `hotKeys` | Sets hot keys to activate specific items. See **Hot Keys** below |
|
||||
| `hotKeySubmit` | Set to submit a form on hotkey selection |
|
||||
| `argName` | Sets the argument name for this selection in the form |
|
||||
| `justify` | Sets the justification of each item in the list. Options: left (default), right, center |
|
||||
| `itemFormat` | Sets the format for a list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
| `fillChar` | Specifies a character to fill extra space in the menu with. Defaults to an empty space |
|
||||
| `items` | List of items to show in the menu. See **Items** below.
|
||||
| `focusItemFormat` | Sets the format for a focused list entry. See **Entry Formatting** in [MCI](../mci.md) |
|
||||
|
||||
|
||||
### Hot Keys
|
||||
|
||||
A set of `hotKeys` are used to allow the user to press a character on the keyboard to select that item, and optionally submit the form.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hotKeys: { A: 0, B: 1, C: 2, D: 3 }
|
||||
hotKeySubmit: true
|
||||
```
|
||||
This would select and submit the first item if `A` is typed, second if `B`, etc.
|
||||
|
||||
### Items
|
||||
|
||||
A vertical menu, similar to other menus, take a list of items to display in the menu. For example:
|
||||
|
||||
|
||||
```
|
||||
items: [
|
||||
{
|
||||
text: First Item
|
||||
data: first
|
||||
}
|
||||
{
|
||||
text: Second Item
|
||||
data: second
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
If the list is for display only (there is no form action associated with it) you can omit the data element, and include the items as a simple list:
|
||||
|
||||
```
|
||||
["First item", "Second item", "Third Item"]
|
||||
```
|
||||
|
||||
|
||||
## Example
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>Configuration fragment (expand to view)</summary>
|
||||
<div markdown="1">
|
||||
```
|
||||
VM1: {
|
||||
submit: true
|
||||
argName: navSelect
|
||||
items: [
|
||||
{
|
||||
text: login
|
||||
data: login
|
||||
}
|
||||
{
|
||||
text: apply
|
||||
data: new user
|
||||
}
|
||||
{
|
||||
text: about
|
||||
data: about
|
||||
}
|
||||
{
|
||||
text: log off
|
||||
data: logoff
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
</div>
|
||||
</details>
|
||||
@@ -6,17 +6,17 @@ All paths mentioned here are relative to the ENiGMA½ checkout directory.
|
||||
|
||||
| Directory | Description |
|
||||
|---------------------|-----------------------------------------------------------------------------------------------------------|
|
||||
| `/art/general` | Non-theme art - welcome ANSI, logoff ANSI, etc. See [General Art]({{ site.baseurl }}{% link art/general.md %}).
|
||||
| `/art/themes` | Theme art. Themes should be in their own subdirectory and contain a theme.hjson. See [Themes]({{ site.baseurl }}{% link art/themes.md %}).
|
||||
| `/art/general` | Non-theme art - welcome ANSI, logoff ANSI, etc. See [General Art](../art/general.md).
|
||||
| `/art/themes` | Theme art. Themes should be in their own subdirectory and contain a theme.hjson. See [Themes](../art/themes.md).
|
||||
| `/config` | [config.hjson](config-hjson.md) system configuration.
|
||||
| `/config/menus` | [menu.hjson](menu-hjson.md) storage.
|
||||
| `/config/security` | SSL certificates and public/private keys.
|
||||
| `/db` | All ENiGMA½ databases in SQLite3 format.
|
||||
| `/docs` | These docs ;-)
|
||||
| `/dropfiles` | Dropfiles created for [local doors]({{ site.baseurl }}{% link modding/local-doors.md %})
|
||||
| `/logs` | Logs. See [Monitoring Logs]({{ site.baseurl }}{% link troubleshooting/monitoring-logs.md %})
|
||||
| `/dropfiles` | Dropfiles created for [local doors](../modding/local-doors.md)
|
||||
| `/logs` | Logs. See [Monitoring Logs](../troubleshooting/monitoring-logs.md)
|
||||
| `/misc` | Stuff with no other home; reset password templates, common password lists, other random bits
|
||||
| `/mods` | User mods. See [Modding]({{ site.baseurl }}{% link modding/existing-mods.md %})
|
||||
| `/mods` | User mods. See [Modding](../modding/existing-mods.md)
|
||||
| `/node_modules` | External libraries required by ENiGMA½, installed when you run `npm install`
|
||||
| `/util` | Various tools used in running/debugging ENiGMA½
|
||||
| `/www` | ENiGMA½'s built in webserver root directory
|
||||
| `/www` | ENiGMA½'s built in webserver root directory
|
||||
@@ -3,7 +3,7 @@ layout: page
|
||||
title: Email
|
||||
---
|
||||
## Email Support
|
||||
ENiGMA½ uses email to send password reset information to users. For it to work, you need to provide valid [Nodemailer](https://nodemailer.com/about/) compatible `email` block in your [config.hjson]({{ site.baseurl }}{% link configuration/config-hjson.md %}). Nodemailer supports SMTP in addition to many pre-defined services for ease of use. The `transport` block within `email` must be Nodemailer compatible.
|
||||
ENiGMA½ uses email to send password reset information to users. For it to work, you need to provide valid [Nodemailer](https://nodemailer.com/about/) compatible `email` block in your [config.hjson](config-hjson.md). Nodemailer supports SMTP in addition to many pre-defined services for ease of use. The `transport` block within `email` must be Nodemailer compatible.
|
||||
|
||||
Additional email support will come in the near future.
|
||||
|
||||
@@ -36,6 +36,7 @@ File base *Areas* are configured using the `fileBase.areas` configuration block
|
||||
| `desc` | :-1: | Friendly area description. |
|
||||
| `storageTags` | :+1: | An array of storage tags for physical storage backing of the files in this area. If uploads are enabled for this area, **first** storage tag location is utilized! |
|
||||
| `sort` | :-1: | If present, provides the sort key for ordering. `name` is used otherwise. |
|
||||
| `hashTags` | :-1: | Set to an array of strings or comma separated list to provide _default_ hash tags for this area. |
|
||||
|
||||
Example areas section:
|
||||
|
||||
@@ -45,6 +46,7 @@ areas: {
|
||||
name: Retro PC
|
||||
desc: Oldschool PC/DOS
|
||||
storageTags: [ "retro_pc_dos", "retro_pc_bbs" ]
|
||||
hashTags: ["retro", "pc", "dos" ]
|
||||
}
|
||||
}
|
||||
```
|
||||
72
docs/_docs/installation/docker.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
layout: page
|
||||
title: Docker
|
||||
---
|
||||
**You'll need Docker installed before going any further. How to do so are out of scope of these docs, but you can find full instructions
|
||||
for every operating system on the [Docker website](https://docs.docker.com/engine/install/).**
|
||||
|
||||
## Quick Start
|
||||
prepare a folder where you are going to save your bbs files.
|
||||
- Generate some config for your BBS: \
|
||||
you can perform this step from anywhere - but make sure to consistently run it from the same place to retain your config inside the docker guest
|
||||
```
|
||||
docker run -it -p 8888:8888 \
|
||||
--name "ENiGMABBS" \
|
||||
-v "$(pwd)/config:/enigma-bbs/config" \
|
||||
-v "$(pwd)/db:/enigma-bbs/db" \
|
||||
-v "$(pwd)/logs:/enigma-bbs/logs" \
|
||||
-v "$(pwd)/filebase:/enigma-bbs/filebase" \
|
||||
-v "$(pwd)/art:/enigma-bbs/art" \
|
||||
-v "$(pwd)/mods:/enigma-bbs/mods" \
|
||||
-v "$(pwd)/mail:/mail" \
|
||||
enigmabbs/enigma-bbs:latest
|
||||
```
|
||||
- Run it: \
|
||||
you can use the same command as above, just daemonize and drop interactiveness (we needed it for config but most of the time docker will run in the background)
|
||||
````
|
||||
docker run -d -p 8888:8888 \
|
||||
--name "ENiGMABBS" \
|
||||
-v "$(pwd)/config:/enigma-bbs/config" \
|
||||
-v "$(pwd)/db:/enigma-bbs/db" \
|
||||
-v "$(pwd)/logs:/enigma-bbs/logs" \
|
||||
-v "$(pwd)/filebase:/enigma-bbs/filebase" \
|
||||
-v "$(pwd)/art:/enigma-bbs/art" \
|
||||
-v "$(pwd)/mods:/enigma-bbs/mods" \
|
||||
-v "$(pwd)/mail:/mail" \
|
||||
enigmabbs/enigma-bbs:latest
|
||||
````
|
||||
- Restarting and Making changes\
|
||||
if you make any changes to your host config folder they will persist, and you can just restart ENiGMABBS container to load any changes you've made.
|
||||
|
||||
```docker restart ENiGMABBS```
|
||||
|
||||
:bulb: Configuration will be stored in `$(pwd)/enigma-bbs/config`.
|
||||
|
||||
:bulb: Windows users - you'll need to switch out `$(pwd)/enigma-bbs/config` for a Windows-style path.
|
||||
|
||||
## Volumes
|
||||
|
||||
Containers by their nature are ephermeral. Meaning, stuff you want to keep (config, database, mail) needs
|
||||
to be stored outside of the running container. As such, the following volumes are mountable:
|
||||
|
||||
| Volume | Usage |
|
||||
|:------------------------|:---------------------------------------------------------------------|
|
||||
| /enigma-bbs/art | Art, themes, etc |
|
||||
| /enigma-bbs/config | Config such as config.hjson, menu.hjson, prompt.hjson, SSL certs etc |
|
||||
| /enigma-bbs/db | ENiGMA databases |
|
||||
| /enigma-bbs/filebase | Filebase |
|
||||
| /enigma-bbs/logs | Logs |
|
||||
| /enigma-bbs/mods | ENiGMA mods |
|
||||
| /mail | FTN mail (for use with an external mailer) |
|
||||
|
||||
|
||||
## Building your own image
|
||||
|
||||
Customising the Docker image is easy!
|
||||
|
||||
1. Clone the ENiGMA-BBS source.
|
||||
2. Build the image
|
||||
|
||||
```
|
||||
docker build -f ./docker/Dockerfile .
|
||||
```
|
||||
@@ -6,7 +6,7 @@ For Linux environments it's recommended you run the [install script](install-scr
|
||||
do things manually, read on...
|
||||
|
||||
## Prerequisites
|
||||
* [Node.js](https://nodejs.org/) version **v12.x LTS or higher** (Other versions may work but are not supported).
|
||||
* [Node.js](https://nodejs.org/) version **v14.x LTS or higher**. Versions under v14 are known not to work due to language level changes.
|
||||
* :bulb: It is **highly** recommended to use [Node Version Manager (NVM)](https://github.com/creationix/nvm) to manage your Node.js installation if you're on a Linux/Unix environment.
|
||||
|
||||
* [Python](https://www.python.org/downloads/) for compiling Node.js packages with native extensions via `node-gyp`.
|
||||
@@ -57,7 +57,7 @@ ENiGMA BBS makes use of a few packages for archive and legacy protocol support.
|
||||
:information_source: Additional information in [Archivers](../configuration/archivers.md) and [File Transfer Protocols](../configuration/file-transfer-protocols.md)
|
||||
|
||||
## Config Files
|
||||
You'll need a basic configuration to get started. The main system configuration is handled via `config/config.hjson`. This is an [HJSON](http://hjson.org/) file (compliant JSON is also OK). See [Configuration](../configuration/) for more information.
|
||||
You'll need a basic configuration to get started. The main system configuration is handled via `config/config.hjson`. This is an [HJSON](http://hjson.org/) file (compliant JSON is also OK). See [Configuration](../configuration/hjson.md) for more information.
|
||||
|
||||
Use `oputil.js` to generate your **initial** configuration:
|
||||
|
||||
@@ -13,7 +13,7 @@ _Note that if you've used the [Docker](docker.md) installation method, you've al
|
||||
If everything went OK:
|
||||
|
||||
```bash
|
||||
ENiGMA½ Copyright (c) 2014-2020, Bryan Ashby
|
||||
ENiGMA½ Copyright (c) 2014-2022, Bryan Ashby
|
||||
_____________________ _____ ____________________ __________\_ /
|
||||
\__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp!
|
||||
// __|___// | \// |// | \// | | \// \ /___ /_____
|
||||
@@ -5,6 +5,8 @@ title: Local Doors
|
||||
## Local Doors
|
||||
ENiGMA½ has many ways to add doors to your system. In addition to the [many built in door server modules](door-servers.md), local doors are of course also supported using the ! The `abracadabra` module!
|
||||
|
||||
:information_source: See also [Let’s add a DOS door to Enigma½ BBS](https://medium.com/retro-future/lets-add-a-dos-game-to-enigma-1-2-41f257deaa3c) by Robbie Whiting for a great writeup on adding doors!
|
||||
|
||||
## The abracadabra Module
|
||||
The `abracadabra` module provides a generic and flexible solution for many door types. Through this module you can execute native processes & scripts directly, and perform I/O through standard I/O (stdio) or a temporary TCP server.
|
||||
|
||||
@@ -14,10 +16,11 @@ The `abracadabra` `config` block can contain the following members:
|
||||
| Item | Required | Description |
|
||||
|------|----------|-------------|
|
||||
| `name` | :+1: | Used as a key for tracking number of clients using a particular door. |
|
||||
| `dropFileType` | :+1: | Specifies the type of dropfile to generate (See **Dropfile Types** below). |
|
||||
| `dropFileType` | :-1: | Specifies the type of dropfile to generate (See **Dropfile Types** below). Can be omitted or set to `none`. |
|
||||
| `cmd` | :+1: | Path to executable to launch. |
|
||||
| `args` | :-1: | Array of argument(s) to pass to `cmd`. See **Argument Variables** below for information on variables that can be used here.
|
||||
| `cwd` | :-1: | Sets the Current Working Directory (CWD) for `cmd`. Defaults to the directory of `cmd`. |
|
||||
| `env` | :-1: | Sets the environment. Supplied in the form of an map: `{ SOME_VAR: "value" }`
|
||||
| `nodeMax` | :-1: | Max number of nodes that can access this door at once. Uses `name` as a tracking key. |
|
||||
| `tooManyArt` | :-1: | Art spec to display if too many instances are already in use. |
|
||||
| `io` | :-1: | How to process input/output (I/O). Can be `stdio` or `socket`. When using `stdio`, I/O is handled via standard stdin/stdout. When using `socket` a temporary socket server is spawned that can be connected back to. The server listens on localhost on `{srvPort}` (See **Argument Variables** below for more information). Default value is `stdio`. |
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
layout: page
|
||||
title: Local Doors
|
||||
title: Menu Modules
|
||||
---
|
||||
## Menu Modules
|
||||
Menu entries found within `menu.hjson` are backed by *menu modules*.
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
layout: page
|
||||
title: TopX
|
||||
title: 2FA/OTP Config
|
||||
---
|
||||
## The 2FA/OTP Config Module
|
||||
The `user_2fa_otp_config` module provides opt-in, configuration, and viewing of Two-Factor Authentication via One-Time-Password (2FA/OTP) settings. In order to allow users access to 2FA/OTP, the system must be properly configured. See [Security](../configuration/security.md) for more information.
|
||||
@@ -6,7 +6,7 @@ title: Web Socket / Web Interface Server
|
||||
The WebSocket Login Server provides **secure** (wss://) as well as non-secure (ws://) WebSocket login access. This is often combined with a browser based WebSocket client such as VTX or fTelnet.
|
||||
|
||||
# VTX Web Client
|
||||
ENiGMA supports the VTX websocket client for connecting to your BBS from a web page. Example usage can be found at [Xibalba](https://xibalba.l33t.codes) and [fORCE9](https://bbs.force9.org/vtx/force9.html) amongst others.
|
||||
ENiGMA supports the VTX WebSocket client for connecting to your BBS from a web page. Example usage can be found at [Xibalba](https://xibalba.l33t.codes) and [fORCE9](https://bbs.force9.org/vtx/force9.html) amongst others.
|
||||
|
||||
## Before You Start
|
||||
There are a few things out of scope of this document:
|
||||
@@ -62,7 +62,7 @@ following:
|
||||
3. Download the [VTX_ClientServer](https://github.com/codewar65/VTX_ClientServer/archive/master.zip) to your
|
||||
webserver, and unpack it to a temporary directory.
|
||||
|
||||
4. Download the example [VTX client HTML file](/misc/vtx/vtx.html) and save it to your webserver root.
|
||||
4. Download the example [VTX client HTML file](https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/vtx/vtx.html) and save it to your webserver root.
|
||||
|
||||
5. Create an `assets/vtx` directory within your webserver root, so you have a structure like the following:
|
||||
|
||||
70
docs/_includes/nav.html
Normal file
@@ -0,0 +1,70 @@
|
||||
<ul>
|
||||
{% for doc in site.docs %}
|
||||
{% assign pathparts = doc.path | split: '/' %}
|
||||
{% assign dir = pathparts[1] %}
|
||||
|
||||
{% if pathparts.size > 3 %}
|
||||
{% assign subdir = pathparts[2] %}
|
||||
{% unless site.data.sections[subdir] %}
|
||||
{% assign subsection = subdir %}
|
||||
{% else %}
|
||||
{% assign subsection = site.data.sections[subdir].title %}
|
||||
{% endunless %}
|
||||
{% else %}
|
||||
{% assign subdir = "NONE" %}
|
||||
{% endif %}
|
||||
|
||||
{% assign section = site.data.sections[dir].title %}
|
||||
{% unless section %}
|
||||
{% assign section = dir %}
|
||||
{% endunless %}
|
||||
|
||||
{% if doc.previous %}
|
||||
{% assign prevpathparts = doc.previous.path | split: '/' %}
|
||||
{% assign prevdir = prevpathparts[1] %}
|
||||
|
||||
{% if prevpathparts.size > 3 %}
|
||||
{% assign prevsubdir = prevpathparts[2] %}
|
||||
{% else %}
|
||||
{% assign prevsubdir = "NONE" %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% assign prevdir = "NONE" %}
|
||||
{% assign prevsubdir = "NONE" %}
|
||||
{% endif %}
|
||||
|
||||
{% if subdir != prevsubdir and prevsubdir != "NONE" %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if dir != prevdir %}
|
||||
{% if prevdir != "NONE" %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<li>{{section}}</li>
|
||||
<ul>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if subdir != "NONE" and subdir != prevsubdir %}
|
||||
<li>{{subsection}}</li>
|
||||
<ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if doc.url != page.url %}
|
||||
<li><a href="{{site.baseurl}}{{doc.url}}">{{doc.title}}</a></li>
|
||||
{% else %}
|
||||
<li class="active-nav">{{doc.title}}</li>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
{% unless doc.next %}
|
||||
</ul>
|
||||
{% if prevsubdir != "NONE" %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endunless %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
@@ -1,98 +0,0 @@
|
||||
- Installation
|
||||
- [Installation Methods]({{ site.baseurl }}{% link installation/installation-methods.md %})
|
||||
- [Install script]({{ site.baseurl }}{% link installation/install-script.md %})
|
||||
- [Docker]({{ site.baseurl }}{% link installation/docker.md %})
|
||||
- [Manual installation]({{ site.baseurl }}{% link installation/manual.md %})
|
||||
- [OS / Hardware Specific]({{ site.baseurl }}{% link installation/os-hardware.md %})
|
||||
- [Raspberry Pi]({{ site.baseurl }}{% link installation/rpi.md %})
|
||||
- [Windows]({{ site.baseurl }}{% link installation/windows.md %})
|
||||
- [Your Network Setup]({{ site.baseurl }}{% link installation/network.md %})
|
||||
- [Testing Your Installation]({{ site.baseurl }}{% link installation/testing.md %})
|
||||
- [Production Installation]({{ site.baseurl }}{% link installation/production.md %})
|
||||
|
||||
- Configuration
|
||||
- [Creating Config Files]({{ site.baseurl }}{% link configuration/creating-config.md %})
|
||||
- [SysOp Setup]({{ site.baseurl }}{% link configuration/sysop-setup.md %})
|
||||
- [Configuration Files]({{ site.baseurl }}{% link configuration/config-files.md %})
|
||||
- [System Configuration]({{ site.baseurl }}{% link configuration/config-hjson.md %})
|
||||
- [HJSON Config Files]({{ site.baseurl }}{% link configuration/hjson.md %})
|
||||
- [Menus]({{ site.baseurl }}{% link configuration/menu-hjson.md %})
|
||||
- [Directory Structure]({{ site.baseurl }}{% link configuration/directory-structure.md %})
|
||||
- [External Binaries]({{ site.baseurl }}{% link configuration/external-binaries.md %})
|
||||
- [Archivers]({{ site.baseurl }}{% link configuration/archivers.md %})
|
||||
- [File Transfer Protocols]({{ site.baseurl }}{% link configuration/file-transfer-protocols.md %})
|
||||
- [Email]({{ site.baseurl }}{% link configuration/email.md %})
|
||||
- [Colour Codes]({{ site.baseurl }}{% link configuration/colour-codes.md %})
|
||||
- [Access Condition System (ACS)]({{ site.baseurl }}{% link configuration/acs.md %})
|
||||
- [Event Scheduler]({{ site.baseurl }}{% link configuration/event-scheduler.md %})
|
||||
- [Security]({{ site.baseurl }}{% link configuration/security.md %})
|
||||
|
||||
- File Base
|
||||
- [About]({{ site.baseurl }}{% link filebase/index.md %})
|
||||
- [Configuring a File Area]({{ site.baseurl }}{% link filebase/first-file-area.md %})
|
||||
- [ACS model]({{ site.baseurl }}{% link filebase/acs.md %})
|
||||
- [Uploads]({{ site.baseurl }}{% link filebase/uploads.md %})
|
||||
- [Web Access]({{ site.baseurl }}{% link filebase/web-access.md %})
|
||||
- [TIC Support]({{ site.baseurl }}{% link filebase/tic-support.md %}) (Importing from FTN networks)
|
||||
- Tips and tricks
|
||||
- [Network mounts and symlinks]({{ site.baseurl }}{% link filebase/network-mounts-and-symlinks.md %})
|
||||
|
||||
- Message Areas
|
||||
- [Configuring a Message Area]({{ site.baseurl }}{% link messageareas/configuring-a-message-area.md %})
|
||||
- [Message networks]({{ site.baseurl }}{% link messageareas/message-networks.md %})
|
||||
- [BSO Import & Export]({{ site.baseurl }}{% link messageareas/bso-import-export.md %})
|
||||
- [Netmail]({{ site.baseurl }}{% link messageareas/netmail.md %})
|
||||
- [QWK]({{ site.baseurl }}{% link messageareas/qwk.md %})
|
||||
- [FTN]({{ site.baseurl }}{% link messageareas/ftn.md %})
|
||||
|
||||
- Art
|
||||
- [General]({{ site.baseurl }}{% link art/general.md %})
|
||||
- [Themes]({{ site.baseurl }}{% link art/themes.md %})
|
||||
- [MCI Codes]({{ site.baseurl }}{% link art/mci.md %})
|
||||
|
||||
- Servers
|
||||
- Login Servers
|
||||
- [Telnet]({{ site.baseurl }}{% link servers/telnet.md %})
|
||||
- [SSH]({{ site.baseurl }}{% link servers/ssh.md %})
|
||||
- [WebSocket]({{ site.baseurl }}{% link servers/websocket.md %})
|
||||
- Build your own
|
||||
- Content Servers
|
||||
- [Web]({{ site.baseurl }}{% link servers/web-server.md %})
|
||||
- [Gopher]({{ site.baseurl }}{% link servers/gopher.md %})
|
||||
- [NNTP]({{ site.baseurl }}{% link servers/nntp.md %})
|
||||
|
||||
- Modding
|
||||
- [Local Doors]({{ site.baseurl }}{% link modding/local-doors.md %})
|
||||
- [Door Servers]({{ site.baseurl }}{% link modding/door-servers.md %})
|
||||
- DoorParty
|
||||
- BBSLink
|
||||
- Combatnet
|
||||
- Exodus
|
||||
- [Telnet Bridge]({{ site.baseurl }}{% link modding/telnet-bridge.md %})
|
||||
- [Existing Mods]({{ site.baseurl }}{% link modding/existing-mods.md %})
|
||||
- [File Area List]({{ site.baseurl }}{% link modding/file-area-list.md %})
|
||||
- [Last Callers]({{ site.baseurl }}{% link modding/last-callers.md %})
|
||||
- [Who's Online]({{ site.baseurl }}{% link modding/whos-online.md %})
|
||||
- [User List]({{ site.baseurl }}{% link modding/user-list.md %})
|
||||
- [Message Conference List]({{ site.baseurl }}{% link modding/msg-conf-list.md %})
|
||||
- [Message Area List]({{ site.baseurl }}{% link modding/msg-area-list.md %})
|
||||
- [BBS List]({{ site.baseurl }}{% link modding/bbs-list.md %})
|
||||
- [Rumorz]({{ site.baseurl }}{% link modding/rumorz.md %})
|
||||
- [File Transfer Protocol Select]({{ site.baseurl }}{% link modding/file-transfer-protocol-select.md %})
|
||||
- [Onelinerz]({{ site.baseurl }}{% link modding/onelinerz.md %})
|
||||
- [Show Art]({{ site.baseurl }}{% link modding/show-art.md %})
|
||||
- [Download Manager]({{ site.baseurl }}{% link modding/file-base-download-manager.md %})
|
||||
- [Web Download Manager]({{ site.baseurl }}{% link modding/file-base-web-download-manager.md %})
|
||||
- [Set Newscan Date]({{ site.baseurl }}{% link modding/set-newscan-date.md %})
|
||||
- [Node to Node Messaging]({{ site.baseurl }}{% link modding/node-msg.md %})
|
||||
- [Top X]({{ site.baseurl }}{% link modding/top-x.md %})
|
||||
- [2FA/OTP Config]({{ site.baseurl }}{% link modding/user-2fa-otp-config.md %})
|
||||
- [Auto Signature Editor]({{ site.baseurl }}{% link modding/autosig-edit.md %})
|
||||
|
||||
- Administration
|
||||
- [Administration]({{ site.baseurl }}{% link admin/administration.md %})
|
||||
- [oputil]({{ site.baseurl }}{% link admin/oputil.md %})
|
||||
- [Updating]({{ site.baseurl }}{% link admin/updating.md %})
|
||||
|
||||
- Troubleshooting
|
||||
- [Monitoring Logs]({{ site.baseurl }}{% link troubleshooting/monitoring-logs.md %})
|
||||
@@ -4,26 +4,55 @@
|
||||
<meta charset='utf-8'>
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ '/assets/images/favicon-16x16.png' | relative_url }}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ '/assets/images/favicon-32x32.png' | relative_url }}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ '/assets/images/favicon-32x32.png' | relative_url }}">
|
||||
<link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">
|
||||
{% seo %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a href="https://github.com/NuSkooler/enigma-bbs"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png"></a>
|
||||
{% if page.include-banner %}
|
||||
<a href="https://github.com/NuSkooler/enigma-bbs/"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png"></a>
|
||||
{% endif %}
|
||||
<div id="container">
|
||||
<div class="sidebar" id="sidebar">
|
||||
<hr class="mobile-divide" />
|
||||
<div class="container">
|
||||
<a href="{{ site.baseurl }}"><img src="{{ '/assets/images/enigma-logo.png' | relative_url }}" class="logo" /></a>
|
||||
<a href="{% link index.md %}"><img src="{{ '/assets/images/enigma-logo.png' | relative_url }}" class="logo" alt="Enigma logo" /></a>
|
||||
</div>
|
||||
{% capture nav_include %}{% include nav.md %}{% endcapture %}
|
||||
{% capture nav_include %}{% include nav.html %}{% endcapture %}
|
||||
{{ nav_include | markdownify }}
|
||||
</div>
|
||||
<div class="main_area">
|
||||
<div class="container">
|
||||
<div class="main_area">
|
||||
<div class="container">
|
||||
<section id="main_content">
|
||||
<div class="PageNavigation">
|
||||
{% if page.previous %}
|
||||
<a class="btn" style="float:left;margin-right: 20px;" href="{{page.previous.url | relative_url }}">« {{page.previous.title}}</a>
|
||||
{% endif %}
|
||||
<a href="#sidebar" class="btn menu_button">MENU</a>
|
||||
{% if page.next %}
|
||||
<a class="btn" style="float: right;margin-left: 20px" href="{{page.next.url | relative_url }}">{{page.next.title}} »</a>
|
||||
{% endif %}
|
||||
<br clear="both" />
|
||||
</div>
|
||||
|
||||
{{ content }}
|
||||
|
||||
<div class="PageNavigation">
|
||||
{% if page.previous %}
|
||||
<a class="btn" style="float:left;margin-right: 20px;" href="{{page.previous.url | relative_url }}">« {{page.previous.title}}</a>
|
||||
{% endif %}
|
||||
{% if page.next %}
|
||||
<a class="btn" style="float: right;margin-left: 20px" href="{{page.next.url | relative_url }}">{{page.next.title}} »</a>
|
||||
{% endif %}
|
||||
<br clear="both" />
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if site.google_analytics %}
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -2,3 +2,45 @@
|
||||
---
|
||||
|
||||
@import 'jekyll-theme-hacker';
|
||||
|
||||
.active-nav {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
.mobile-divide {
|
||||
border-top: 1px dashed #b5e853;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
order: 2;
|
||||
float: none;
|
||||
width: 100%;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.main_area {
|
||||
padding-left: 0px !important;
|
||||
}
|
||||
|
||||
#container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
display:flex;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.menu_button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mobile-divide {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
BIN
docs/assets/images/button_view_example1.gif
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
docs/assets/images/edit_text_view_example1.gif
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
docs/assets/images/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 885 B |
BIN
docs/assets/images/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
docs/assets/images/full_menu_view_example1.gif
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
docs/assets/images/full_menu_view_example2.gif
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
docs/assets/images/full_menu_view_example3.gif
Normal file
|
After Width: | Height: | Size: 27 KiB |