diff --git a/doc/MANUAL.md b/doc/MANUAL.md
index a7e9a2c..e1ab175 100644
--- a/doc/MANUAL.md
+++ b/doc/MANUAL.md
@@ -4,7 +4,8 @@ This is the manual for version %%VERSION%%.
## Table of Contents
-1. [Terminology](#terminology)
+1. [Introduction](#introduction)
+ - [Terminology](#terminology)
1. [Invocations](#invocations)
- [Shell foreground](#invocations_foreground)
- [Daemon](#invocations_daemon)
@@ -37,7 +38,18 @@ This is the manual for version %%VERSION%%.
- [Custom CSS](#cust_css)
1. [Security](#security)
-## Terminology
+## Introduction
+
+Scriptform is a stand-alone webserver that automatically generates forms from
+JSON to serve as frontends to scripts.
+
+ScriptForm takes a JSON file which contains form definitions. It then
+constructs web forms from this JSON and serves these to users over HTTP. The
+user can select a form and fill it out. When the user submits the form, it is
+validated and the associated script is called. Data entered in the form is
+passed to the script through the environment.
+
+### Terminology
Scriptform uses various terminology to distinguish between different components
of the application.
@@ -72,6 +84,11 @@ Sriptform can be run directly from the shell in the foreground with the `-f`
$ /usr/bin/scriptform -p8000 -f ./formdef.json
+You can specify the `-r` option to automatically reload the JSON file upon each
+request:
+
+ $ /usr/bin/scriptform -p8000 -r -f ./formdef.json
+
### Daemon
If you do not specify the `-f` option, Scriptform will go into the background:
@@ -109,6 +126,12 @@ Finally, start it:
### Behind Apache
+Scriptform does not support HTTPS / SSL, so for production environments you
+might want to run it behind an Apache server that has SSL enabled. To do so,
+you start Scriptform as a daemon and then forward requests to it from Apache:
+
+ $ sudo /etc/init.d/scriptform start
+
Enable Apache modules mod_proxy and mod_proxy_http:
$ sudo a2enmod proxy
@@ -248,16 +271,19 @@ For example, here's a form config file that contains two forms:
"name": "username",
"title": "Username",
"type": "string"
+ "required": true
},
{
"name": "password1",
"title": "Password",
- "type": "password"
+ "type": "password",
+ "required": true
},
{
"name": "password2",
"title": "Password (Repear)",
- "type": "password"
+ "type": "password",
+ "required": true
}
]
}
@@ -268,6 +294,10 @@ Many more examples can be found in the `examples` directory in the source code.
## Field types
+Scriptform supports multiple field types. Field types determine what users may
+enter in the field, how they are validated and how they are passed to callback
+scripts.
+
### String
The `string` field type presents the user with a single line input field.
@@ -278,6 +308,21 @@ The `string` field type supports the following additional options:
- **`maxlen`**: The maximum allowed length for the field.
- **`size`**: The size (in characters) of the input field.
+For example:
+
+ ...
+ "fields": [
+ {
+ "name": "my_string",
+ "title": "My string",
+ "type": "string",
+ "minlen": 12,
+ "maxlen": 30,
+ "size": 30
+ }
+ ]
+ ...
+
### Integer
The `integer` field type presents the user with an input box in which they may
@@ -289,6 +334,20 @@ The `integer` field type supports the following additional options:
- **`min`**: The minimum allowed value for the field.
- **`max`**: The maximum allowed value for the field.
+For example:
+
+ ...
+ "fields": [
+ {
+ "name": "uid",
+ "title": "UID",
+ "type": "integer",
+ "min": 1000,
+ "max": 2000
+ }
+ ]
+ ...
+
### Float
The `float` field type presents the user with an input box in which they enter
@@ -299,9 +358,24 @@ The `float` field type supports the following additional options:
- **`min`**: The minimum allowed value for the field.
- **`max`**: The maximum allowed value for the field.
+For example:
+
+ ...
+ "fields": [
+ {
+ "name": "ammount",
+ "title": "Ammount",
+ "type": "float",
+ "min": 10.0,
+ "max": 2000.0
+ }
+ ]
+ ...
+
Please note that some real numbers cannot be represented exactly by a computer
-and validation may thus be approximate. E.g. 0.499999999999999 will pass the
-test for a maximum value of 0.5.
+and validation may thus be approximate. E.g. 0.500000000001 might pass the
+test for a maximum value of 0.5. Whether it does depends on the value given,
+the platform, your browser, and many other factors.
### Date
@@ -317,6 +391,20 @@ The `date` field type supports the following additional options:
- **`min`**: The minimum allowed date (format: a string YYYY-MM-DD)
- **`max`**: The maximum allowed date (format: a string YYYY-MM-DD)
+For Example:
+
+ ...
+ "fields": [
+ {
+ "name": "birthdate",
+ "title": "Birthdate",
+ "type": "date",
+ "min": "1900-01-01",
+ "max": "2015-01-01",
+ }
+ ]
+ ...
+
### Radio
### Checkbox
@@ -329,6 +417,23 @@ Otherwise, '`off`' is passed. Unlike HTML forms, which send no value to the
server if the checkbox was not checked, Scriptform always sends either 'on' or
'off'.
+The `checkbox` field type supports the following additional options:
+
+- **`checked`**: Whether the checkbox should be checked by default (boolean)
+
+For Example:
+
+ ...
+ "fields": [
+ {
+ "name": "receive_newsletter",
+ "title": "Do you want to receive our newsletter?",
+ "type": "checkbox",
+ "checked": true
+ }
+ ]
+ ...
+
### Select
### Text