= past = [x] display situation where there is no 'draft' [x] add buttons to create, activate, and destroy drafts [x] implement button to add translation [x] make ctrl/$ctrl more consistent [n] token insert - subject [x] always use monaco for subject [x] make toolbar more consistent [x] token insert - monaco [x] full screen edit [x] more button/toolbar cleanup [x] preview ui (skeleton) [x] fork-off: APIv4 metadata for array inputs (#2665) [x] (big chunk outside this list) [x] move traits under 'Traits/' [x] example loading [x] - scanner [x] - api [x] update FluentGetterSetter for use in AbstractAction [x] Reflective::validate() method [x] - delegate to validateExtra() [x] - check @required [x] - check types (maybe) [x] test class for msgwf [x] - test trait; new class [x] - extract data file [x] - move test [~] - rework equivalence assertions [~] - add rendering assertions for stock template [x] wfmsgexample api test = near = [ ] MR for devdocs msgtpl [x] render api [ ] render ui-api (hookup) = mid = [ ] rough token list via api [ ] metadata for available tokens [ ] real token list via api = far = [ ] contributionId / tokenprocessor PR [ ] switch User Templates to angular editor [ ] - add "Message Source" [ ] - add "PDF Layout" [ ] bootstrap token picker - or fix btn-group/select2 interaction = wishlist = [ ] better syntax highlighting and autocomplete for smarty [ ] diff button [ ] indicate unsaved changes