Coleman Watts [Sat, 28 Dec 2019 01:23:30 +0000 (20:23 -0500)]
Fix #10 add prefix to new afforms to prevent name conflicts
Coleman Watts [Sun, 22 Dec 2019 01:10:49 +0000 (20:10 -0500)]
Remove unnecessary registerField process
Coleman Watts [Sat, 21 Dec 2019 00:51:51 +0000 (19:51 -0500)]
GUI - set default permission for new forms
Coleman Watts [Fri, 20 Dec 2019 12:18:45 +0000 (07:18 -0500)]
Update docs to reflect less metadata in default afform scope
Tim Otten [Fri, 20 Dec 2019 07:53:13 +0000 (23:53 -0800)]
AfformScanner - Just use the long cache
The long cache didn't exist when this class was first created, but it seems
better suited. #knockonwood
Tim Otten [Fri, 20 Dec 2019 07:41:10 +0000 (23:41 -0800)]
AfformScanner - Simplify cache. Fix CLI/web sync bug.
Example bug:
1. Find a packaged (non-overriden) form - e.g. `mockPage`
2. Run `cv api4 Afform.update +w name=mockPage +v permissions='*always allow*'
3. Run `curl http://localhost/civicrm/mock-page`
4. Observe: the page-load fails even though the permissions say it should work
The call to `Afform.update` should trigger a cache-clear, but it only fixes
on the CLI... because the CLI and web have different runtime IDs.
The runtime-id was included preventively in anticipation that oddball
multisite arrangements might need to store these things separately. But I
think it's overdone, because the runtime-ID factors in things like
`SCRIPT_FILENAME` which has no bearing on the whether to use the same cache.
Let's KISS and *if* there's any kind of multisite issue, then we can revisit.
Coleman Watts [Fri, 20 Dec 2019 02:24:08 +0000 (21:24 -0500)]
Toward #6 - use API instead of scanner to retrieve afforms
Coleman Watts [Thu, 19 Dec 2019 13:28:58 +0000 (08:28 -0500)]
GUI - dropdown select for permissions field
Tim Otten [Thu, 19 Dec 2019 06:47:10 +0000 (22:47 -0800)]
(NFC) Expand docblock for afform_civicrm_permission_check()
Tim Otten [Thu, 19 Dec 2019 04:23:41 +0000 (20:23 -0800)]
afform_{html,gui} - Allow editing the `permission` via web UI
Tim Otten [Thu, 19 Dec 2019 04:23:14 +0000 (20:23 -0800)]
afform_{html,gui} - Require "administer CiviCRM" to open editor
Tim Otten [Thu, 19 Dec 2019 04:12:54 +0000 (20:12 -0800)]
(REF) AfformSaveTrait - Extract helper $isChanged
I was originally expecting to need to flush the menu whenever the
`permission` changed. That's not necessary now (because the true permission
check is deferred until it's needed), but the cleanup may still be helpful
in the future (e.g. if we enable nav-menu integration or change the way
permissions are implemented).
Tim Otten [Thu, 19 Dec 2019 05:43:05 +0000 (21:43 -0800)]
Afform.{prefill,submit} - APIs should respect `permission`
Tim Otten [Thu, 19 Dec 2019 05:42:24 +0000 (21:42 -0800)]
AfformUsageTest - Add a basic test case of prefill/submit APIs
Tim Otten [Thu, 19 Dec 2019 04:11:52 +0000 (20:11 -0800)]
Enforce customizable `permission` for server routes. Add E2E test for server-routes.
Tim Otten [Thu, 19 Dec 2019 04:56:49 +0000 (20:56 -0800)]
Afform.get - Fix warning/test-failure when trying to load non-existent record
Tim Otten [Thu, 19 Dec 2019 03:03:53 +0000 (19:03 -0800)]
afform_mock - The extra dep should be a real module
Using a real Angular module means that the page can be opened in an E2E test.
Tim Otten [Thu, 19 Dec 2019 01:59:46 +0000 (17:59 -0800)]
Store 'permission' property for each form
Tim Otten [Thu, 12 Dec 2019 23:58:29 +0000 (15:58 -0800)]
info.xml - Bump minimum version. Needs revised hook_civicrm_angularModules.
Tim Otten [Thu, 12 Dec 2019 23:48:42 +0000 (15:48 -0800)]
Generate partials via callback
Technically, it's two changes:
1. Changing `snippets` to `partialsCallback` to reduce the amount of upfront IO/memory.
2. Changing the mocked-up filename to start with `~/theAngModule/`. So modules implemented in
afform look more look other modules. Makes it work with `cv ang:html:list` and `cv ang:html:show`.
Coleman Watts [Thu, 12 Dec 2019 13:14:03 +0000 (08:14 -0500)]
Rename modelListCtrl => afform
Coleman Watts [Wed, 11 Dec 2019 03:22:03 +0000 (22:22 -0500)]
Fix afform partial name
ng-include was failing with ~afform* but works with ~/afform*
Coleman Watts [Wed, 11 Dec 2019 03:01:16 +0000 (22:01 -0500)]
Use dynamic snippet for afform module layout.
Coleman Watts [Wed, 11 Dec 2019 14:44:23 +0000 (09:44 -0500)]
Remove redundant afformStandalone file
Coleman Watts [Wed, 11 Dec 2019 14:38:50 +0000 (09:38 -0500)]
Merge afField module into af module
Coleman Watts [Wed, 11 Dec 2019 14:05:21 +0000 (09:05 -0500)]
GUI - Add option to hide field labels
Tim Otten [Tue, 10 Dec 2019 21:07:35 +0000 (13:07 -0800)]
afform_gui - Tweak nav label
Coleman Watts [Tue, 10 Dec 2019 20:10:49 +0000 (15:10 -0500)]
Fix ngRepeat syntax error
Tim Otten [Tue, 10 Dec 2019 06:21:04 +0000 (22:21 -0800)]
afform_gui, afform_html - Refresh after reverting
Tim Otten [Tue, 10 Dec 2019 06:12:01 +0000 (22:12 -0800)]
afform_gui, afform_html - Adjust "Revert" button based on actual status
Tim Otten [Tue, 10 Dec 2019 06:05:10 +0000 (22:05 -0800)]
Afform.get - Return computed fields, `has_local` and `has_packaged`
Tim Otten [Tue, 10 Dec 2019 05:01:32 +0000 (21:01 -0800)]
afform_gui - Add nav item under "Administer => Customize Data and Screens"
Tim Otten [Tue, 10 Dec 2019 04:58:33 +0000 (20:58 -0800)]
afform_gui - Add skeletal upgrader
Coleman Watts [Mon, 9 Dec 2019 15:49:02 +0000 (10:49 -0500)]
Stricter directives with better docs
Coleman Watts [Mon, 9 Dec 2019 13:13:30 +0000 (08:13 -0500)]
GUI - Rename af-block => af-container
Free up the term af-block to refer to something more specific than a container.
Coleman Watts [Sat, 7 Dec 2019 20:29:17 +0000 (15:29 -0500)]
Prettier json
Coleman Watts [Tue, 3 Dec 2019 18:04:13 +0000 (13:04 -0500)]
Fix handling of non-breaking spaces
See https://stackoverflow.com/questions/
59215211/why-does-domdocument-mess-up-unicode-nonbreaking-spaces
Coleman Watts [Sat, 30 Nov 2019 15:52:33 +0000 (10:52 -0500)]
In shallow mode, only convert markup to array that the GUI editor understands.
Any markup not using a tag/class/attribute understood by the GUI editor
will have its contents preserved "as-is" in a "#markup" string.
Tim Otten [Thu, 28 Nov 2019 02:08:44 +0000 (18:08 -0800)]
Add api/v4/formatExamples/stylized.php
Coleman Watts [Wed, 27 Nov 2019 14:42:22 +0000 (09:42 -0500)]
Format whitespace in aff.html files
Adds api options for use in GUI editor to autoformat html whitespace.
Results in much nicer looking markup!
Tim Otten [Thu, 28 Nov 2019 01:45:19 +0000 (17:45 -0800)]
AfformTest - Add coverage for weirdly named file.
Also: Clarify that the API input is a formName and not strictly a
directiveName.
Coleman Watts [Tue, 26 Nov 2019 18:33:53 +0000 (13:33 -0500)]
Api improvements and test fix
Improve efficiency by not fetching layout if not needed in api.get
Fix test failure by correctly merging existing metadata during update
Coleman Watts [Tue, 26 Nov 2019 17:27:46 +0000 (12:27 -0500)]
Remove client_route for now; might be yagni
Coleman Watts [Tue, 26 Nov 2019 14:39:23 +0000 (09:39 -0500)]
Use canonical name in api.afform.get
Names were being munged in the api which led to a mismatch between
filenames and afform names.
Coleman Watts [Tue, 26 Nov 2019 14:13:49 +0000 (09:13 -0500)]
GUI: Correctly handle naming a newly created form
Coleman Watts [Mon, 25 Nov 2019 14:56:25 +0000 (09:56 -0500)]
GUI: Add new block to the top
Creates new items at top of block, underneath the fieldset legend if present
Coleman Watts [Mon, 25 Nov 2019 00:52:40 +0000 (19:52 -0500)]
GUI: Add wysiwyg markup block
Coleman Watts [Fri, 22 Nov 2019 17:49:17 +0000 (12:49 -0500)]
Display improvements
Coleman Watts [Thu, 21 Nov 2019 22:11:37 +0000 (17:11 -0500)]
GUI: Improve adding/removing entities in correct order
Coleman Watts [Tue, 19 Nov 2019 21:22:02 +0000 (16:22 -0500)]
GUI: use strict
Coleman Watts [Tue, 19 Nov 2019 21:05:12 +0000 (16:05 -0500)]
GUI: Fix entity values selector
Coleman Watts [Tue, 19 Nov 2019 14:50:09 +0000 (09:50 -0500)]
GUI: Better widget for editing input type select
Coleman Watts [Tue, 19 Nov 2019 13:42:51 +0000 (08:42 -0500)]
GUI Add controls for text color, block border & block background color
Coleman Watts [Mon, 18 Nov 2019 13:22:37 +0000 (08:22 -0500)]
GUI: Cleanup menus
Coleman Watts [Sun, 17 Nov 2019 15:19:12 +0000 (10:19 -0500)]
GUI Validate drag-n-drop actions
Prevent fields from being moved outside their entity fieldset(s)
Prevent fieldsets from being dragged into other fieldsets
Coleman Watts [Sun, 17 Nov 2019 15:17:48 +0000 (10:17 -0500)]
GUI Fix number field style
Coleman Watts [Thu, 14 Nov 2019 19:07:37 +0000 (14:07 -0500)]
Edit option lists
Coleman Watts [Tue, 12 Nov 2019 21:58:55 +0000 (16:58 -0500)]
GUI: Config fields
Coleman Watts [Wed, 13 Nov 2019 15:28:00 +0000 (10:28 -0500)]
Perform deep merge on fieldDefn.input_attrs
Coleman Watts [Tue, 12 Nov 2019 12:30:54 +0000 (07:30 -0500)]
Core: Set breadcrumb as well as title
Coleman Watts [Tue, 12 Nov 2019 03:20:12 +0000 (22:20 -0500)]
GUI: Entity config
Coleman Watts [Sat, 9 Nov 2019 14:07:14 +0000 (09:07 -0500)]
GUI: Entity tab style improvements
Coleman Watts [Fri, 8 Nov 2019 18:04:21 +0000 (13:04 -0500)]
GUI: Add/remove block buttons
Coleman Watts [Fri, 8 Nov 2019 15:03:28 +0000 (10:03 -0500)]
GUI: Refactor entity panel to directive & add field search
Coleman Watts [Thu, 7 Nov 2019 16:41:08 +0000 (11:41 -0500)]
GUI configure form buttons
Coleman Watts [Thu, 7 Nov 2019 00:07:20 +0000 (19:07 -0500)]
Don't write field defn unless changed
Coleman Watts [Wed, 6 Nov 2019 13:31:11 +0000 (08:31 -0500)]
GUI: Bare bones field style
Coleman Watts [Wed, 6 Nov 2019 13:29:09 +0000 (08:29 -0500)]
GUI: Add block button
Coleman Watts [Wed, 6 Nov 2019 12:25:35 +0000 (07:25 -0500)]
Improve admin bar style
Coleman Watts [Wed, 6 Nov 2019 02:35:02 +0000 (21:35 -0500)]
Save button for gui + api
Coleman Watts [Mon, 4 Nov 2019 21:47:44 +0000 (16:47 -0500)]
Clarify docblock
Coleman Watts [Mon, 4 Nov 2019 14:40:20 +0000 (09:40 -0500)]
Configure layout style of blocks
Coleman Watts [Mon, 4 Nov 2019 13:02:23 +0000 (08:02 -0500)]
Dynamic option lists for select elements
This should respond better to changes in the model.
Coleman Watts [Sun, 3 Nov 2019 00:14:47 +0000 (20:14 -0400)]
Add forms, add/remove entities
Coleman Watts [Sat, 2 Nov 2019 00:57:27 +0000 (20:57 -0400)]
Fixes #4 - html encode injected properties and enable test
Coleman Watts [Fri, 1 Nov 2019 19:15:59 +0000 (15:15 -0400)]
Fields drag n drop
Coleman Watts [Thu, 31 Oct 2019 00:08:47 +0000 (20:08 -0400)]
WIP canvas
Coleman Watts [Wed, 30 Oct 2019 22:18:31 +0000 (18:18 -0400)]
Remove convertTextNodes
The api now returns them as an array so we don't need to worry about this on the client side.
Coleman Watts [Tue, 29 Oct 2019 21:30:23 +0000 (17:30 -0400)]
WIP fields
Coleman Watts [Mon, 28 Oct 2019 01:52:14 +0000 (21:52 -0400)]
Config forms - values section
Coleman Watts [Fri, 25 Oct 2019 16:01:48 +0000 (12:01 -0400)]
Horizontal tabs
Coleman Watts [Fri, 25 Oct 2019 14:32:24 +0000 (10:32 -0400)]
Add some metadata
Coleman Watts [Thu, 24 Oct 2019 17:05:19 +0000 (13:05 -0400)]
WIP beginning work on GUI
Tim Otten [Fri, 1 Nov 2019 20:27:46 +0000 (13:27 -0700)]
(REF) AHQ::makeRoot() - Extract helper from FormDataModel
Tim Otten [Fri, 1 Nov 2019 20:14:33 +0000 (13:14 -0700)]
FilterTest - Add basic unit test for the 'defn="..."` injection
Tim Otten [Fri, 1 Nov 2019 19:45:15 +0000 (12:45 -0700)]
(REF) _afform_html_filter() - Extract method for unit-testing
Tim Otten [Fri, 1 Nov 2019 19:41:35 +0000 (12:41 -0700)]
(NFC) Small cleanup
Tim Otten [Fri, 1 Nov 2019 19:40:56 +0000 (12:40 -0700)]
(REF) AfformScanner::getLayout() - Extract new method
Coleman Watts [Fri, 1 Nov 2019 13:57:25 +0000 (09:57 -0400)]
Fix parser to work with nested fields
Fields should be allowed to be inside other tags as long as they're
contained in an af-fieldset.
Tim Otten [Fri, 1 Nov 2019 05:20:26 +0000 (22:20 -0700)]
Add bin/test-all.sh
Tim Otten [Fri, 1 Nov 2019 04:53:44 +0000 (21:53 -0700)]
Fix warnings for `#text` format
Tim Otten [Fri, 1 Nov 2019 04:53:24 +0000 (21:53 -0700)]
af-fieldset - More updates for switching E=>A
Coleman Watts [Thu, 31 Oct 2019 00:33:26 +0000 (20:33 -0400)]
Restrict af-fieldset directive to A not E
The af-fieldset directive was ambiguiously set to restrict: "AE"
but only "E" was supported. I want to pick one and stick with it, and
I prefer "A" because the fieldset is also a container, so div or fieldset
seem like the appropriate tag names.
Coleman Watts [Wed, 30 Oct 2019 20:53:19 +0000 (16:53 -0400)]
ArrayHtml - Change text node format from string to array
Everything in the arrayHtml is associative exept text nodes were just strings.
That made it difficult to loop through the whole thing in javascript, so
this updates the format to be consistent with everything else.
Tim Otten [Tue, 29 Oct 2019 23:11:10 +0000 (16:11 -0700)]
ArrayHtml - Treat `<af-entity/>` and `<af-field/>` as self-closing tags
Tim Otten [Tue, 29 Oct 2019 23:07:12 +0000 (16:07 -0700)]
ArrayHtml - Encode self-closing HTML tags (`<img />`, `<br />`) normally
Tim Otten [Tue, 29 Oct 2019 22:31:06 +0000 (15:31 -0700)]
ArrayHtml - Support comments
Before
------
HTML comments appear in the array as NULL values
After
-----
HTML comments appear in the array as `['#comment' => '...']`
Technical Notes
---------------
* Considered using `['#tag' => 'comment', '#children' => '...'], but this is ambiguous when you
have a node/tag named '<comment>'
* Considered using `['#tag' => 'comment', '#children' => '...'], but it's needlessly difficult to
extract the comment text from under `'#children'`.
Coleman Watts [Mon, 28 Oct 2019 17:38:22 +0000 (13:38 -0400)]
Fix forms autofill with new dataModel
The formDataModel is now an object rather than an array.
This also changes the array key to match what's used in testAfform.aff.html:
url-autofill instead of af-url-autofill
Tim Otten [Sat, 26 Oct 2019 00:14:30 +0000 (17:14 -0700)]
(BC Break) Change shallow+deep formats to begin with an array of elements
Before: In the shallow+deep representations of `layout`, the root array
has a `#tag` and `#children`.
After: The root array is just list a list of children.
Comment: This is a more accufrate representation of how HTML partials are
often written.
Tim Otten [Sat, 26 Oct 2019 01:51:07 +0000 (18:51 -0700)]
FormDataModel::parseFields() - Rename param for clarity
This function uses a recursive algorithm to scan subtrees. Each call to the
algorithm is a particular HTML element.