2014-11-28 23:58:19 +00:00
|
|
|
# Overview
|
|
|
|
|
2016-07-12 23:21:58 +00:00
|
|
|
This bundle contains a general implementation of forms in Open MCT.
|
2014-11-28 23:58:19 +00:00
|
|
|
This allows forms to be expressed using a reasonably concise declarative
|
|
|
|
syntax, and rendered as Angular templates in a consistent fashion.
|
|
|
|
|
|
|
|
# Usage
|
|
|
|
|
|
|
|
To include a form with a declarative definition, use the `mct-form`
|
|
|
|
directive, e.g.:
|
|
|
|
|
|
|
|
<mct-form ng-model="myModel" structure="myStructure" name="myForm">
|
|
|
|
</mct-form>
|
|
|
|
|
2015-01-15 23:43:20 +00:00
|
|
|
Using toolbars is similar:
|
|
|
|
|
|
|
|
<mct-toolbar ng-model="myModel" structure="myStructure" name="myToolbar">
|
|
|
|
</mct-toolbar>
|
|
|
|
|
2014-11-28 23:58:19 +00:00
|
|
|
The attributes utilized by this form are as follows:
|
|
|
|
|
|
|
|
* `ng-model`: The object which should contain the full form input. Individual
|
|
|
|
fields in this model are bound to individual controls; the names used for
|
|
|
|
these fields are provided in the form structure (see below).
|
|
|
|
* `structure`: The structure of the form; e.g. sections, rows, their names,
|
|
|
|
and so forth. The value of this attribute should be an Angular expression.
|
|
|
|
* `name`: The name in the containing scope under which to publish form
|
|
|
|
"meta-state", e.g. `$valid`, `$dirty`, etc. This is as the behavior of
|
|
|
|
`ng-form`. Passed as plain text in the attribute.
|
|
|
|
|
|
|
|
## Form structure
|
|
|
|
|
|
|
|
A form's structure is described as a JavaScript object in the following form:
|
|
|
|
|
|
|
|
{
|
|
|
|
"name": ... title to display for the form, as a string ...,
|
|
|
|
"sections": [
|
|
|
|
{
|
|
|
|
"name": ... title to display for the section ...,
|
|
|
|
"rows": [
|
|
|
|
{
|
|
|
|
"name": ... title to display for this row ...,
|
|
|
|
"control": ... symbolic key for the control ...,
|
|
|
|
"key": ... field name in ng-model ...
|
|
|
|
"pattern": ... optional, reg exp to match against ...
|
|
|
|
"required": ... optional boolean ...
|
|
|
|
"options": [
|
|
|
|
"name": ... name to display (e.g. in a select) ...,
|
|
|
|
"value": ... value to store in the model ...
|
|
|
|
]
|
|
|
|
},
|
|
|
|
... and other rows ...
|
|
|
|
]
|
|
|
|
},
|
|
|
|
... and other sections ...
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
Note that `pattern` may be specified as a string, to simplify storing
|
|
|
|
for structures as JSON when necessary. The string should be given in
|
|
|
|
a form appropriate to pass to a `RegExp` constructor.
|
|
|
|
|
2015-01-15 23:43:20 +00:00
|
|
|
## Toolbar structure
|
|
|
|
|
|
|
|
A toolbar's structure is described similarly to forms, except that there
|
|
|
|
is no notion of rows; instead, there are `items`.
|
|
|
|
|
|
|
|
{
|
|
|
|
"name": ... title to display for the form, as a string ...,
|
|
|
|
"sections": [
|
|
|
|
{
|
|
|
|
"name": ... title to display for the section ...,
|
|
|
|
"items": [
|
|
|
|
{
|
|
|
|
"name": ... title to display for this row ...,
|
|
|
|
"control": ... symbolic key for the control ...,
|
|
|
|
"key": ... field name in ng-model ...
|
|
|
|
"pattern": ... optional, reg exp to match against ...
|
|
|
|
"required": ... optional boolean ...
|
|
|
|
"options": [
|
|
|
|
"name": ... name to display (e.g. in a select) ...,
|
|
|
|
"value": ... value to store in the model ...
|
|
|
|
],
|
|
|
|
"disabled": ... true if control should be disabled ...
|
|
|
|
"size": ... size of the control (for textfields) ...
|
|
|
|
"click": ... function to invoke (for buttons) ...
|
|
|
|
"glyph": ... glyph to display (for buttons) ...
|
|
|
|
"text": ... text withiin control (for buttons) ...
|
|
|
|
},
|
|
|
|
... and other rows ...
|
|
|
|
]
|
|
|
|
},
|
|
|
|
... and other sections ...
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
Note that `pattern` may be specified as a string, to simplify storing
|
|
|
|
for structures as JSON when necessary. The string should be given in
|
|
|
|
a form appropriate to pass to a `RegExp` constructor.
|
|
|
|
|
2014-11-28 23:58:19 +00:00
|
|
|
## Adding controls
|
|
|
|
|
2017-06-23 21:32:21 +00:00
|
|
|
These control types are included in the forms bundle:
|
2014-11-28 23:58:19 +00:00
|
|
|
|
2017-06-23 21:32:21 +00:00
|
|
|
* `textfield`: A text input to enter plain text.
|
|
|
|
* `numberfield`: A text input to enter numbers.
|
2014-11-28 23:58:19 +00:00
|
|
|
* `select`: A drop-down list of options.
|
|
|
|
* `checkbox`: A box which may be checked/unchecked.
|
2015-01-15 23:43:20 +00:00
|
|
|
* `color`: A color picker.
|
|
|
|
* `button`: A button.
|
2014-11-28 23:58:19 +00:00
|
|
|
* `datetime`: An input for UTC date/time entry; gives result as a
|
|
|
|
UNIX timestamp, in milliseconds since start of 1970, UTC.
|
|
|
|
|
|
|
|
New controls may be added as extensions of the `controls` category.
|
|
|
|
Extensions of this category have two properites:
|
|
|
|
|
|
|
|
* `key`: The symbolic name for this control (matched against the
|
|
|
|
`control` field in rows of the form structure).
|
|
|
|
* `templateUrl`: The URL to the control's Angular template, relative
|
|
|
|
to the resources directory of the bundle which exposes the extension.
|
|
|
|
|
|
|
|
Within the template for a control, the following variables will be
|
|
|
|
included in scope:
|
|
|
|
|
|
|
|
* `ngModel`: The model where form input will be stored. Notably we
|
|
|
|
also need to look at `field` (see below) to determine which field
|
|
|
|
in the model should be modified.
|
|
|
|
* `ngRequired`: True if input is required.
|
|
|
|
* `ngPattern`: The pattern to match against (for text entry.)
|
|
|
|
* `options`: The options for this control, as passed from the
|
|
|
|
`options` property of an individual row.
|
|
|
|
* `field`: Name of the field in `ngModel` which will hold the value
|
2017-04-05 21:35:12 +00:00
|
|
|
for this control.
|