* Legacy style migration in progress
- Working bottom up, many legacy items commented out. Stopped at
controls/indicators;
* Further migrations and deprecating
- Legacy indicator styles moved;
* WIP Styles migration
- s-button converted to c-button, WIP;
- Other
* Significant progress on migration, but still very WIP
- Mostly constants and overlay styling;
- Also bubbles and splitter;
- TODO: fix tree in overlay and splitter in imagery!
* Fix Summary Widgets UI WIP
- Remove non-working status 'editing' checks;
* Fix Summary Widgets UI WIP
- Remove non-working status 'editing' checks;
- view-control > c-disclosure-triangle;
* Fix Summary Widgets UI WIP
- Markup changes;
- Migrate CSS to styles-new, remove old;
* Fix Summary Widgets UI WIP
- Rule formatting and layout;
- Refinement to _controls / select {} padding;
* Fix Summary Widgets UI WIP
- Toolbar styles made more portable;
- Palette style migration;
- Very WIP;
* Fix Summary Widgets UI WIP
- Palettes all fixed and functional;
- Conditions layout;
- New c-button--swatched styles;
* Fix Summary Widgets UI WIP
- Clean up code;
* Fix Summary Widgets UI WIP
- Fix button in Test Data area;
* Fix layout in shell left pane due to elements being moved
- Styles fixed and refined;
* Fixed palettes
- Fixed icon palette;
- Significant refinement to general palette styles;
* Significant fixes for Summary Widgets
- Widget editing UI fixed;
- JS cleanups and improvements;
- CSS, JS code cleanup;
* Migrate tree view used in Locator
- Mods to legacy markup;
- Mods to current CSS;
- Removed import of legacy tree CSS in legacy-styles.scss;
* Migrate archetypes
- l-flex-row, l-flex-col, etc. moved to legacy;
- grid-* styles cleaned up and moved, @extends removed;
- WIP on c-object-label, move styles from mct-tree.vue into ObjectLabel
.vue;
- TODO: finish up c-object-label, cleanups in mct-tree.vue;
* Migrate effects and animation mixins
* Object labels, legacy cleanup
- Add and apply .c-object-label for tree node elements;
- Remove legacy class "tree" from markup;
- Tweak color of tree item hover for better contrast in Inspector;
* Fix palettes in Inspector
* Various
- Fix hover color in tree for better mechanics on a variety of bgs;
- Fix object label in Locator tree;
- Remove overlay blocker test color;
* Significant work for Summary Widgets, mctForm, compact form
- Forms in overlay dialogs fixed;
- form, compact-form, other classes migrated into new _forms.scss;
- Fixes for Summary Widgets;
- Theme constants files synced, add form values;
- Removed import of legacy forms/elems SCSS file;
* Migrate various
- Autoflow tabular;
- Datetime;
- Channel selector;
- Form validation;
* Migrate wait spinners, final cleanup
* Remove old src/styles directory
- Remove old Snow and Espresso plugins;
- Remove refs to old Snow and Espresso config'd aliases;
* Update Palette.js
* Update Palette.js
* Removed commented code
* Removed commented code
* Migrate About, startup and splash screen styles
Overview
This bundle contains a general implementation of forms in Open MCT. 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>
Using toolbars is similar:
<mct-toolbar ng-model="myModel" structure="myStructure" name="myToolbar">
</mct-toolbar>
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 ofng-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.
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.
Adding controls
These control types are included in the forms bundle:
textfield: A text input to enter plain text.numberfield: A text input to enter numbers.select: A drop-down list of options.checkbox: A box which may be checked/unchecked.color: A color picker.button: A button.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 thecontrolfield 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 atfield(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 theoptionsproperty of an individual row.field: Name of the field inngModelwhich will hold the value for this control.