domma-cms 0.92.1 → 0.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +5 -3
- package/admin/css/admin.css +1 -1
- package/admin/js/app.js +2 -2
- package/admin/js/lib/action-editor-arrange.js +1 -1
- package/admin/js/lib/api-tokens-arrange.js +2 -2
- package/admin/js/lib/block-editor-arrange.js +1 -1
- package/admin/js/lib/blocks-arrange.js +1 -1
- package/admin/js/lib/collection-entries-arrange.js +1 -1
- package/admin/js/lib/components-arrange.js +1 -1
- package/admin/js/lib/dashboard-arrange.js +1 -1
- package/admin/js/lib/dates.js +1 -0
- package/admin/js/lib/forms-arrange.js +1 -1
- package/admin/js/lib/media-arrange.js +1 -1
- package/admin/js/lib/notifications-arrange.js +1 -1
- package/admin/js/lib/pages-arrange.js +1 -1
- package/admin/js/lib/related.js +1 -1
- package/admin/js/lib/timeline-builder.js +2 -2
- package/admin/js/templates/action-editor.html +6 -5
- package/admin/js/templates/actions-list.html +1 -1
- package/admin/js/templates/contacts.html +1 -1
- package/admin/js/templates/docs/api-actions.html +86 -60
- package/admin/js/templates/docs/api-authentication.html +159 -123
- package/admin/js/templates/docs/api-builder.html +197 -0
- package/admin/js/templates/docs/api-collections.html +199 -259
- package/admin/js/templates/docs/api-external.html +225 -0
- package/admin/js/templates/docs/api-forms.html +268 -0
- package/admin/js/templates/docs/api-layouts.html +70 -45
- package/admin/js/templates/docs/api-media.html +57 -80
- package/admin/js/templates/docs/api-navigation.html +66 -22
- package/admin/js/templates/docs/api-pages.html +109 -129
- package/admin/js/templates/docs/api-plugins.html +123 -61
- package/admin/js/templates/docs/api-scaffold.html +185 -0
- package/admin/js/templates/docs/api-settings.html +72 -64
- package/admin/js/templates/docs/api-users.html +74 -107
- package/admin/js/templates/docs/api-views.html +68 -54
- package/admin/js/templates/docs/components-howto.html +20 -17
- package/admin/js/templates/docs/components-reference.html +13 -16
- package/admin/js/templates/docs/components-rules.html +7 -6
- package/admin/js/templates/docs/components-walkthrough.html +19 -19
- package/admin/js/templates/docs/tutorial-crud.html +71 -40
- package/admin/js/templates/docs/tutorial-forms.html +51 -35
- package/admin/js/templates/docs/tutorial-plugin.html +132 -56
- package/admin/js/templates/docs/usage-actions.html +61 -15
- package/admin/js/templates/docs/usage-collections.html +108 -0
- package/admin/js/templates/docs/usage-cta-shortcode.html +14 -3
- package/admin/js/templates/docs/usage-dconfig.html +0 -3
- package/admin/js/templates/docs/usage-editions.html +213 -0
- package/admin/js/templates/docs/usage-media.html +22 -6
- package/admin/js/templates/docs/usage-navigation.html +74 -18
- package/admin/js/templates/docs/usage-pages.html +60 -20
- package/admin/js/templates/docs/usage-plugins.html +89 -17
- package/admin/js/templates/docs/usage-shortcodes.html +123 -70
- package/admin/js/templates/docs/usage-site-settings.html +50 -18
- package/admin/js/templates/docs/usage-tools.html +73 -0
- package/admin/js/templates/docs/usage-users-roles.html +99 -20
- package/admin/js/templates/docs/usage-views.html +36 -19
- package/admin/js/templates/documentation.html +153 -32
- package/admin/js/templates/page-editor.html +0 -5
- package/admin/js/templates/plugin-guide.html +15 -0
- package/admin/js/templates/plugin-guides.html +21 -0
- package/admin/js/templates/pro-docs.html +53 -234
- package/admin/js/templates/tutorials.html +5 -4
- package/admin/js/views/actions-list.js +3 -3
- package/admin/js/views/analytics.js +5 -5
- package/admin/js/views/api-endpoint-editor.js +2 -2
- package/admin/js/views/block-editor.js +4 -4
- package/admin/js/views/blocks.js +4 -4
- package/admin/js/views/collection-editor.js +4 -4
- package/admin/js/views/collection-entries.js +7 -7
- package/admin/js/views/component-editor.js +2 -2
- package/admin/js/views/contacts.js +22 -20
- package/admin/js/views/context-menu-editor.js +5 -5
- package/admin/js/views/doc-pages.js +1 -1
- package/admin/js/views/form-editor.js +4 -4
- package/admin/js/views/form-submissions.js +2 -2
- package/admin/js/views/index.js +1 -1
- package/admin/js/views/media.js +3 -3
- package/admin/js/views/menu-editor.js +13 -13
- package/admin/js/views/menu-locations.js +2 -2
- package/admin/js/views/my-profile.js +1 -1
- package/admin/js/views/page-editor.js +8 -8
- package/admin/js/views/plugin-guides.js +5 -0
- package/admin/js/views/project-detail.js +2 -2
- package/admin/js/views/project-settings.js +1 -1
- package/admin/js/views/role-editor.js +4 -4
- package/admin/js/views/search.js +2 -2
- package/admin/js/views/seo.js +17 -17
- package/admin/js/views/settings.js +3 -3
- package/admin/js/views/theme.js +3 -3
- package/admin/js/views/user-editor.js +1 -1
- package/admin/js/views/users.js +2 -2
- package/admin/js/views/view-editor.js +1 -1
- package/bin/cli.js +13 -13
- package/bin/lib/node-version.js +29 -0
- package/package.json +1 -1
- package/plugins/_lib/admin/mail/compose-window.js +3 -2
- package/plugins/_lib/admin/mail/reader-view.js +7 -6
- package/plugins/_lib/admin/mail/scheduling.js +4 -2
- package/plugins/_lib/admin/mail/templates.js +4 -4
- package/plugins/_lib/admin/ui/dates.js +85 -0
- package/plugins/blog/CLAUDE.md +31 -22
- package/plugins/blog/admin/views/blog.js +3 -2
- package/plugins/blog/admin/views/comments.js +2 -1
- package/plugins/blog/admin/views/post-editor.js +4 -4
- package/plugins/blog/blocks/blog-card-row.html +1 -1
- package/plugins/blog/blocks/blog-card.html +2 -2
- package/plugins/blog/blocks/blog-post-classic.html +2 -2
- package/plugins/blog/blocks/blog-post-essay.html +2 -2
- package/plugins/blog/blocks/blog-post-feature.html +2 -2
- package/plugins/blog/blocks/blog-post-minimal.html +2 -2
- package/plugins/blog/blocks/blog-post-sidebar.html +2 -2
- package/plugins/blog/blocks/blog-post-split.html +2 -2
- package/plugins/blog/docs/guide.md +205 -0
- package/plugins/blog/lib/layouts.js +3 -3
- package/plugins/blog/lib/page.js +2 -1
- package/plugins/blog/plugin.js +3 -3
- package/plugins/blog/plugin.json +4 -4
- package/plugins/blog/tests/layouts.test.js +6 -0
- package/plugins/feedback/CLAUDE.md +22 -3
- package/plugins/feedback/admin/lib/kit.js +6 -7
- package/plugins/feedback/admin/views/feedback.js +79 -10
- package/plugins/feedback/admin/views/send.js +28 -6
- package/plugins/feedback/docs/guide.md +95 -0
- package/plugins/feedback/lib/receiver.js +9 -2
- package/plugins/feedback/lib/sender.js +3 -2
- package/plugins/feedback/plugin.js +54 -6
- package/plugins/feedback/plugin.json +4 -4
- package/plugins/feedback/tests/api.test.js +74 -2
- package/plugins/free-tier.lock.json +49 -44
- package/plugins/mail-reader/CLAUDE.md +33 -18
- package/plugins/mail-reader/docs/guide.md +147 -0
- package/plugins/mail-reader/plugin.json +1 -1
- package/plugins/security/CLAUDE.md +4 -1
- package/plugins/security/admin/views/security.js +5 -5
- package/plugins/security/docs/guide.md +170 -0
- package/plugins/security/plugin.js +2 -1
- package/plugins/security/plugin.json +2 -1
- package/plugins/shopping-cart/CLAUDE.md +7 -1
- package/plugins/shopping-cart/admin/lib/kit.js +5 -2
- package/plugins/shopping-cart/admin/views/orders.js +4 -4
- package/plugins/shopping-cart/admin/views/overview.js +2 -2
- package/plugins/shopping-cart/docs/guide.md +191 -0
- package/plugins/shopping-cart/lib/render.js +2 -1
- package/plugins/shopping-cart/plugin.json +3 -3
- package/public/js/collection-browser.js +2 -2
- package/public/js/site.js +1 -1
- package/scripts/gen-instance-secret.js +3 -1
- package/scripts/setup.js +3 -1
- package/server/middleware/auth.js +2 -1
- package/server/routes/api/actions.js +47 -27
- package/server/routes/api/blocks.js +2 -1
- package/server/routes/api/collections.js +16 -52
- package/server/routes/api/contacts.js +66 -3
- package/server/routes/api/documentation.js +42 -0
- package/server/routes/api/notifications.js +3 -2
- package/server/routes/api/users.js +10 -6
- package/server/server.js +16 -1
- package/server/services/actions.js +110 -34
- package/server/services/adapterRegistry.js +169 -16
- package/server/services/adapters/FileAdapter.js +25 -0
- package/server/services/adapters/MongoAdapter.js +23 -0
- package/server/services/collections.js +104 -1
- package/server/services/connectionManager.js +12 -0
- package/server/services/dates.js +81 -0
- package/server/services/docs.js +13 -2
- package/server/services/markdown.js +75 -26
- package/server/services/notification-sources.js +6 -5
- package/server/services/passwordReset.js +2 -1
- package/server/services/permissionRegistry.js +3 -2
- package/server/services/pluginGuides.js +255 -0
- package/server/services/pluginInstaller.js +54 -13
- package/server/services/plugins.js +29 -1
- package/server/services/presetCollections.js +31 -5
- package/server/services/renderer.js +2 -2
- package/server/services/sidebarBadges.js +3 -1
- package/server/services/tools.js +4 -2
- package/server/templates/page.html +2 -2
|
@@ -101,7 +101,6 @@
|
|
|
101
101
|
<pre><code>[box]
|
|
102
102
|
Any content - text, a button, a [grid] or a [card].
|
|
103
103
|
[/box]
|
|
104
|
-
|
|
105
104
|
[box shadow="md" rounded="lg" padding="spacious"]
|
|
106
105
|
Lifted off the page, with rounder corners.
|
|
107
106
|
[/box]</code></pre>
|
|
@@ -675,24 +674,79 @@ Body content in **Markdown** is supported.
|
|
|
675
674
|
<tr>
|
|
676
675
|
<td><code>[hero variant="dark" size="sm"]...[/hero]</code></td>
|
|
677
676
|
<td>Full-width hero section; supports <code>twinkle</code>, <code>blobs</code>,
|
|
678
|
-
<code>image</code>, <code>overlay</code></td>
|
|
677
|
+
<code>image</code>, <code>overlay</code>, <code>color</code>, <code>min-height</code></td>
|
|
678
|
+
</tr>
|
|
679
|
+
<tr>
|
|
680
|
+
<td><code>[banner type="warning" title="..." icon="..." dismissible]...[/banner]</code></td>
|
|
681
|
+
<td>An alert strip: <code>info</code>, <code>success</code>, <code>warning</code>,
|
|
682
|
+
<code>danger</code> or <code>neutral</code></td>
|
|
683
|
+
</tr>
|
|
684
|
+
<tr>
|
|
685
|
+
<td><code>[listgroup variant="flush"][item]...[/item][/listgroup]</code></td>
|
|
686
|
+
<td>A list group; <code>variant</code> flush, numbered or horizontal</td>
|
|
679
687
|
</tr>
|
|
680
688
|
<tr>
|
|
681
689
|
<td><code>[table striped="true"]...[/table]</code></td>
|
|
682
690
|
<td>Wraps a GFM Markdown table with Domma table CSS classes</td>
|
|
683
691
|
</tr>
|
|
692
|
+
<tr>
|
|
693
|
+
<td><code>[text size="xl" bold color="primary"]...[/text]</code></td>
|
|
694
|
+
<td>Styled inline text</td>
|
|
695
|
+
</tr>
|
|
696
|
+
<tr>
|
|
697
|
+
<td><code>[button href="/contact" variant="primary"]...[/button]</code></td>
|
|
698
|
+
<td>A link styled as a button</td>
|
|
699
|
+
</tr>
|
|
700
|
+
<tr>
|
|
701
|
+
<td><code>[link href="/about" icon="arrow-right"]...[/link]</code></td>
|
|
702
|
+
<td>A link with an icon or target</td>
|
|
703
|
+
</tr>
|
|
704
|
+
<tr>
|
|
705
|
+
<td><code>[center]...[/center]</code></td>
|
|
706
|
+
<td>Centres its content</td>
|
|
707
|
+
</tr>
|
|
708
|
+
<tr>
|
|
709
|
+
<td><code>[embed url="https://youtu.be/..." /]</code></td>
|
|
710
|
+
<td>YouTube, Vimeo, an uploaded video, or a page from a host allowed in
|
|
711
|
+
<code>config/embeds.json</code></td>
|
|
712
|
+
</tr>
|
|
684
713
|
<tr>
|
|
685
714
|
<td><code>[form name="slug" /]</code></td>
|
|
686
|
-
<td>Embeds a
|
|
715
|
+
<td>Embeds a form from <strong>Data > Forms</strong></td>
|
|
716
|
+
</tr>
|
|
717
|
+
<tr>
|
|
718
|
+
<td><code>[menu slug="legal" /]</code></td>
|
|
719
|
+
<td>Places a menu, or <code>location="..."</code> whatever a slot holds</td>
|
|
720
|
+
</tr>
|
|
721
|
+
<tr>
|
|
722
|
+
<td><code>[block template="post-card" title="..." /]</code></td>
|
|
723
|
+
<td>Renders one block template from <strong>Data > Blocks</strong> with the values given.
|
|
724
|
+
A block can also be written as its own tag, <code>[post-card title="..." /]</code></td>
|
|
725
|
+
</tr>
|
|
726
|
+
<tr>
|
|
727
|
+
<td><code>[component name="counter" /]</code></td>
|
|
728
|
+
<td>Mounts a component from <strong>Data > Components</strong> (same as
|
|
729
|
+
<code><dm-counter></code>)</td>
|
|
730
|
+
</tr>
|
|
731
|
+
<tr>
|
|
732
|
+
<td><code>[demo src="elements/accordion" /]</code></td>
|
|
733
|
+
<td>Embeds a demo page from this site in a frame</td>
|
|
734
|
+
</tr>
|
|
735
|
+
<tr>
|
|
736
|
+
<td><code>[collection slug="..." /]</code></td>
|
|
737
|
+
<td>Shows a collection's entries - see below</td>
|
|
687
738
|
</tr>
|
|
688
739
|
<tr>
|
|
689
|
-
<td><code>[
|
|
690
|
-
<td>
|
|
740
|
+
<td><code>[view slug="..." /]</code></td>
|
|
741
|
+
<td>Shows a saved View's results - see <a href="#/docs/usage/views">Views</a></td>
|
|
691
742
|
</tr>
|
|
692
743
|
</tbody>
|
|
693
744
|
</table>
|
|
694
745
|
|
|
695
|
-
<
|
|
746
|
+
<h3>Collections on a page</h3>
|
|
747
|
+
<pre class="code-block"><code>[collection slug="team" display="cards" columns="3" title-field="name" /]
|
|
748
|
+
[collection slug="jobs" display="cards" searchable filterable="location,type" sortable page-size="9" where_status="open" /]
|
|
749
|
+
[collection slug="applications" scope="mine" display="cards" title-field="jobTitle" paginate transitions /]</code></pre>
|
|
696
750
|
<table class="table table-sm">
|
|
697
751
|
<thead>
|
|
698
752
|
<tr>
|
|
@@ -705,75 +759,78 @@ Body content in **Markdown** is supported.
|
|
|
705
759
|
<tr>
|
|
706
760
|
<td><code>slug</code></td>
|
|
707
761
|
<td>collection slug</td>
|
|
708
|
-
<td>Required. Which collection to
|
|
762
|
+
<td>Required. Which collection to show.</td>
|
|
709
763
|
</tr>
|
|
710
764
|
<tr>
|
|
711
765
|
<td><code>display</code></td>
|
|
712
766
|
<td><code>table</code> · <code>cards</code> · <code>list</code> ·
|
|
713
|
-
<code>accordion</code> · <code>
|
|
714
|
-
|
|
767
|
+
<code>accordion</code> · <code>timeline</code> · <code>carousel</code>
|
|
768
|
+
· <code>listgroup</code> · <code>block</code></td>
|
|
769
|
+
<td>How each entry is shown. Default <code>table</code>.</td>
|
|
715
770
|
</tr>
|
|
716
771
|
<tr>
|
|
717
772
|
<td><code>block</code></td>
|
|
718
773
|
<td>block template name</td>
|
|
719
|
-
<td>Required
|
|
720
|
-
<code
|
|
721
|
-
<code>{{field}}</code> placeholders get substituted per entry.
|
|
722
|
-
</td>
|
|
774
|
+
<td>Required with <code>display="block"</code>; also works with carousel and listgroup.
|
|
775
|
+
The template's <code>{{field}}</code> placeholders are filled per entry.</td>
|
|
723
776
|
</tr>
|
|
724
777
|
<tr>
|
|
725
|
-
<td><code>
|
|
726
|
-
<td
|
|
727
|
-
|
|
728
|
-
<td>Grid column count when <code>display="block"</code>.</td>
|
|
778
|
+
<td><code>fields</code>, <code>title-field</code>, <code>columns</code></td>
|
|
779
|
+
<td>field names, 2-4</td>
|
|
780
|
+
<td>Which fields show, which one is the title, and card columns.</td>
|
|
729
781
|
</tr>
|
|
730
782
|
<tr>
|
|
731
|
-
<td><code>
|
|
732
|
-
<td
|
|
733
|
-
<td>
|
|
734
|
-
<code>where="tab=developers"</code> or
|
|
735
|
-
<code>where="tier=free,featured=true"</code>. No OR, no comparison operators -
|
|
736
|
-
use a saved View for anything more complex.
|
|
737
|
-
</td>
|
|
783
|
+
<td><code>sort</code>, <code>order</code>, <code>limit</code></td>
|
|
784
|
+
<td>field, <code>asc</code>/<code>desc</code>, number</td>
|
|
785
|
+
<td>Default newest first (<code>createdAt</code>, <code>desc</code>), no limit.</td>
|
|
738
786
|
</tr>
|
|
739
787
|
<tr>
|
|
740
|
-
<td><code>
|
|
741
|
-
<td>
|
|
742
|
-
<td>
|
|
788
|
+
<td><code>where_<field></code></td>
|
|
789
|
+
<td>value</td>
|
|
790
|
+
<td>Filter: <code>where_location="London"</code>, or add an operator -
|
|
791
|
+
<code>_ne</code>, <code>_gt</code>, <code>_gte</code>, <code>_lt</code>, <code>_lte</code>,
|
|
792
|
+
<code>_in</code>, <code>_nin</code>, <code>_contains</code>, <code>_starts</code>,
|
|
793
|
+
<code>_ends</code>, <code>_exists</code>. Filters combine with AND. The older
|
|
794
|
+
<code>where="field=value"</code> still works.</td>
|
|
743
795
|
</tr>
|
|
744
796
|
<tr>
|
|
745
|
-
<td><code>
|
|
746
|
-
<td><code>
|
|
747
|
-
<td>
|
|
797
|
+
<td><code>scope</code></td>
|
|
798
|
+
<td><code>mine</code></td>
|
|
799
|
+
<td>Only the signed-in visitor's own entries; anonymous visitors are asked to sign in.</td>
|
|
748
800
|
</tr>
|
|
749
801
|
<tr>
|
|
750
|
-
<td><code>
|
|
751
|
-
|
|
752
|
-
<td>
|
|
802
|
+
<td><code>searchable</code>, <code>sortable</code>, <code>filterable</code>,
|
|
803
|
+
<code>paginate</code></td>
|
|
804
|
+
<td>flags; <code>filterable="a,b"</code></td>
|
|
805
|
+
<td>Any of these turns the block into the interactive <strong>Collection Browser</strong>:
|
|
806
|
+
search box, sort, a filter rail built from the fields, and pages
|
|
807
|
+
(<code>page-size</code>, default 12). <code>exportable</code> adds a CSV button.</td>
|
|
753
808
|
</tr>
|
|
754
809
|
<tr>
|
|
755
|
-
<td><code>
|
|
756
|
-
<td>
|
|
757
|
-
<td>
|
|
758
|
-
|
|
810
|
+
<td><code>transitions</code></td>
|
|
811
|
+
<td>flag</td>
|
|
812
|
+
<td>On an interactive block, each row gets buttons for the workflow actions that apply to
|
|
813
|
+
it now. Works with <code>scope="mine"</code>. See
|
|
814
|
+
<a href="#/docs/usage/actions">Actions</a>.</td>
|
|
759
815
|
</tr>
|
|
760
816
|
<tr>
|
|
761
|
-
<td><code>
|
|
762
|
-
<td>
|
|
763
|
-
<td>
|
|
817
|
+
<td><code>cta</code></td>
|
|
818
|
+
<td>action slug</td>
|
|
819
|
+
<td>A button per entry that runs a CMS Action. See
|
|
820
|
+
<a href="#/docs/usage/cta-shortcode">CTA Shortcode</a>.</td>
|
|
764
821
|
</tr>
|
|
765
822
|
<tr>
|
|
766
823
|
<td><code>empty</code></td>
|
|
767
|
-
<td>
|
|
768
|
-
<td>
|
|
769
|
-
</tr>
|
|
770
|
-
<tr>
|
|
771
|
-
<td><code>cta</code></td>
|
|
772
|
-
<td>action slug</td>
|
|
773
|
-
<td>Attach a CMS Action button to each rendered entry. See CTA attributes below.</td>
|
|
824
|
+
<td>text</td>
|
|
825
|
+
<td>Shown when nothing matches.</td>
|
|
774
826
|
</tr>
|
|
775
827
|
</tbody>
|
|
776
828
|
</table>
|
|
829
|
+
<p>Timelines take <code>date-field</code>, <code>status-field</code>, <code>body-field</code>;
|
|
830
|
+
carousels take <code>image-field</code> and <code>body-field</code>. Visitors can right-click
|
|
831
|
+
any collection display to filter, sort, group, copy, print or export it (export follows the
|
|
832
|
+
collection's export setting), and the state is kept in the address so it can be shared.
|
|
833
|
+
Dates in collection displays read dd/mm/yyyy.</p>
|
|
777
834
|
|
|
778
835
|
<h3>Form follow-up</h3>
|
|
779
836
|
<p>Two optional settings control what happens after a submission is stored:</p>
|
|
@@ -803,7 +860,7 @@ Body content in **Markdown** is supported.
|
|
|
803
860
|
<tr>
|
|
804
861
|
<td><code>actionSlug</code></td>
|
|
805
862
|
<td>Actions tab → CMS Action</td>
|
|
806
|
-
<td>Slug of a CMS Action to execute after the entry is stored.
|
|
863
|
+
<td>Slug of a CMS Action to execute after the entry is stored. Actions need MongoDB (Pro).
|
|
807
864
|
Non-fatal on failure.
|
|
808
865
|
</td>
|
|
809
866
|
</tr>
|
|
@@ -832,29 +889,25 @@ Body content in **Markdown** is supported.
|
|
|
832
889
|
</tbody>
|
|
833
890
|
</table>
|
|
834
891
|
|
|
835
|
-
<h3>
|
|
836
|
-
<
|
|
837
|
-
<
|
|
838
|
-
<
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
</
|
|
842
|
-
</
|
|
843
|
-
<
|
|
844
|
-
<
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
<td>Action-trigger button. Requires the visitor to be logged in.</td>
|
|
851
|
-
</tr>
|
|
852
|
-
</tbody>
|
|
853
|
-
</table>
|
|
892
|
+
<h3>Effects</h3>
|
|
893
|
+
<p>Effects wrap content or run on the whole page: <code>[reveal]</code>, <code>[breathe]</code>,
|
|
894
|
+
<code>[pulse]</code>, <code>[shake]</code>, <code>[scribe]</code>, <code>[scramble]</code>,
|
|
895
|
+
<code>[counter]</code>, <code>[ripple]</code>, <code>[twinkle]</code>,
|
|
896
|
+
<code>[ticker-tape]</code>, <code>[butterflies]</code>, <code>[strobe]</code>,
|
|
897
|
+
<code>[animate]</code>, <code>[ambient]</code>, <code>[firework]</code>,
|
|
898
|
+
<code>[fireworks]</code> and <code>[celebrate]</code> (with shorthands such as
|
|
899
|
+
<code>[christmas /]</code>). Many can also be added to a card, box, hero, banner, column or
|
|
900
|
+
button as attributes: <code>[card reveal reveal-animation="zoom"]</code>. Settings are at
|
|
901
|
+
<strong>System > Effects</strong>.</p>
|
|
902
|
+
|
|
903
|
+
<h3>Actions on pages</h3>
|
|
904
|
+
<p><code>[cta action="..." entry="..."]Label[/cta]</code> places a button that runs a CMS Action
|
|
905
|
+
for a signed-in visitor. Actions need a MongoDB connection (Pro); collections, views and
|
|
906
|
+
everything else on this page work without one.</p>
|
|
854
907
|
|
|
855
|
-
<p>
|
|
856
|
-
|
|
857
|
-
|
|
908
|
+
<p>The page editor's Editor Reference lists every shortcode with its attributes, and its Insert
|
|
909
|
+
menu adds them for you. Plugins can add shortcodes of their own - see
|
|
910
|
+
<a href="#/docs/plugins">Plugin guides</a>.</p>
|
|
858
911
|
|
|
859
912
|
</div>
|
|
860
913
|
</div>
|
|
@@ -7,45 +7,77 @@
|
|
|
7
7
|
<div class="col-12">
|
|
8
8
|
<div class="docs-body">
|
|
9
9
|
|
|
10
|
-
<p>Site Settings are
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
<p>Site Settings are at <strong>System > Site Settings</strong> and are stored in
|
|
11
|
+
<code>config/site.json</code>. Themes and fonts have their own screen, <strong>Content >
|
|
12
|
+
Theme</strong>.</p>
|
|
13
13
|
|
|
14
14
|
<table class="table table-sm">
|
|
15
15
|
<thead>
|
|
16
16
|
<tr>
|
|
17
|
-
<th>
|
|
18
|
-
<th>
|
|
17
|
+
<th>Tab</th>
|
|
18
|
+
<th>What it holds</th>
|
|
19
19
|
</tr>
|
|
20
20
|
</thead>
|
|
21
21
|
<tbody>
|
|
22
22
|
<tr>
|
|
23
|
-
<td
|
|
24
|
-
<td>Site title
|
|
23
|
+
<td>General</td>
|
|
24
|
+
<td>Site title and tagline; <strong>Site URL</strong> (the site's real address, used for
|
|
25
|
+
password reset links, canonical links and the sitemap - set it); <strong>Admin
|
|
26
|
+
home</strong> (the screen the admin opens on); the default spacer size.</td>
|
|
25
27
|
</tr>
|
|
26
28
|
<tr>
|
|
27
|
-
<td
|
|
28
|
-
<td>
|
|
29
|
+
<td>SEO</td>
|
|
30
|
+
<td>Default page title, title separator and default description. The full SEO Tool is
|
|
31
|
+
<strong>SEO</strong> in the sidebar.</td>
|
|
29
32
|
</tr>
|
|
30
33
|
<tr>
|
|
31
|
-
<td
|
|
32
|
-
<td>
|
|
34
|
+
<td>Footer</td>
|
|
35
|
+
<td>Copyright text, social links, and whether visitors get a "Reduce motion" switch.
|
|
36
|
+
Footer links are menus - see <a href="#/docs/usage/navigation">Navigation</a>.</td>
|
|
33
37
|
</tr>
|
|
34
38
|
<tr>
|
|
35
|
-
<td
|
|
36
|
-
<td>
|
|
39
|
+
<td>Email</td>
|
|
40
|
+
<td>The SMTP server the site sends mail through (form notifications, password resets,
|
|
41
|
+
action emails). Without it, "Forgot your password?" cannot send a link.</td>
|
|
37
42
|
</tr>
|
|
38
43
|
<tr>
|
|
39
|
-
<td
|
|
40
|
-
<td>
|
|
44
|
+
<td>Back to top, Cookie consent, Breadcrumbs</td>
|
|
45
|
+
<td>Switch each on or off and set its wording and position.</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td>Custom CSS</td>
|
|
49
|
+
<td><code>content/custom.css</code>, applied to every public page after the theme.</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<td>Cache</td>
|
|
53
|
+
<td>The public page cache: switch it on or off, clear it, and see what it holds. Saving a page clears what it affects automatically.</td>
|
|
41
54
|
</tr>
|
|
42
55
|
</tbody>
|
|
43
56
|
</table>
|
|
44
57
|
|
|
58
|
+
<h3>Theme</h3>
|
|
59
|
+
<p><strong>Content > Theme</strong> (stored in <code>config/theme.json</code>) sets the public
|
|
60
|
+
theme, the admin theme, fonts, the visitor theme switcher, automatic day and night themes (at
|
|
61
|
+
the clock times you choose) and per-element overrides. A page can override the theme in its
|
|
62
|
+
Page Details.</p>
|
|
63
|
+
|
|
64
|
+
<h3>Dates and times</h3>
|
|
65
|
+
<p>The admin shows dates as dd/mm/yyyy and times on a 24-hour clock (dd/mm/yyyy HH:mm), whatever
|
|
66
|
+
the browser's language. Recent items may read "3 days ago" or "tomorrow at 09:00". Stored
|
|
67
|
+
values, API responses, date pickers, feeds and CSV exports keep their own formats. In a block
|
|
68
|
+
template, <code>{{field:FORMAT}}</code> formats a date field on the public site.</p>
|
|
69
|
+
|
|
45
70
|
<h3>Server configuration</h3>
|
|
46
|
-
<p>Low-level settings
|
|
47
|
-
|
|
48
|
-
|
|
71
|
+
<p>Low-level settings live in <code>config/server.json</code> and need a server restart to take
|
|
72
|
+
effect. They are not editable from the admin:</p>
|
|
73
|
+
<ul>
|
|
74
|
+
<li><code>port</code>, <code>host</code>, <code>cors</code></li>
|
|
75
|
+
<li><code>uploads.maxFileSize</code> - the largest upload, in bytes (10 MB by default)</li>
|
|
76
|
+
<li><code>restartOnPluginToggle</code> - restart automatically when a plugin is switched on
|
|
77
|
+
or off (on by default)</li>
|
|
78
|
+
<li><code>requireSignedPlugins</code> - refuse unsigned plugin files</li>
|
|
79
|
+
</ul>
|
|
80
|
+
<p>Sign-in token lifetimes and password reset link expiry are in <code>config/auth.json</code>.</p>
|
|
49
81
|
|
|
50
82
|
</div>
|
|
51
83
|
</div>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<div class="view-header">
|
|
2
|
+
<h1><span data-icon="book"></span> Built-in Tools</h1>
|
|
3
|
+
<a href="#/documentation" class="btn btn-ghost btn-sm"><span data-icon="arrow-left"></span> All usage topics</a>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div class="row">
|
|
7
|
+
<div class="col-12">
|
|
8
|
+
<div class="docs-body">
|
|
9
|
+
|
|
10
|
+
<p>Contacts, Notes, Todo, Analytics and SEO are part of the CMS. They sit in the sidebar's Tools folder
|
|
11
|
+
and are on unless you switch them off at the top of the Marketplace (<strong>System >
|
|
12
|
+
Plugins</strong>). Switching a Tool off hides it and stops its screens and API; nothing is
|
|
13
|
+
deleted. Who may use each is a permission under <strong>System > Roles</strong> (Tools
|
|
14
|
+
group): only the level-0 role has them all to begin with, and Admin has SEO.</p>
|
|
15
|
+
|
|
16
|
+
<h3>Contacts</h3>
|
|
17
|
+
<p>An address book for each user. <strong>Your contacts are private</strong>: nobody else sees
|
|
18
|
+
them, admins included. Star favourites, search as you type, and right-click a contact to edit,
|
|
19
|
+
email, call, copy, file it in a group, duplicate or delete it.</p>
|
|
20
|
+
<p><strong>Groups are shared.</strong> Everyone who uses Contacts has the same list of groups, and
|
|
21
|
+
anyone can file their own contacts in any group. Because renaming or deleting a group changes
|
|
22
|
+
it for everyone, only the person who created it, or someone holding <strong>Contacts >
|
|
23
|
+
Manage groups</strong> (<code>contacts.manageGroups</code>), may do it. The level-0 role holds
|
|
24
|
+
it and Admin is given it once. Groups made before 0.93.0 have no recorded creator, so only
|
|
25
|
+
holders of the permission can change them. In Manage groups, Rename and Delete are greyed out
|
|
26
|
+
where you may not, with a note saying why.</p>
|
|
27
|
+
|
|
28
|
+
<h3>Notes</h3>
|
|
29
|
+
<p>Private notes for each user, with categories and search.</p>
|
|
30
|
+
|
|
31
|
+
<h3>Todo</h3>
|
|
32
|
+
<p>To-do lists with priorities and due dates. Each morning, anyone with overdue tasks gets one
|
|
33
|
+
notification listing them, and one for what is due today. Switch that off under
|
|
34
|
+
Notifications > Sources ("To-dos overdue or due today").</p>
|
|
35
|
+
|
|
36
|
+
<h3>Where Notes, Todo and Contacts are stored</h3>
|
|
37
|
+
<p>On files, unless the site has a working MongoDB connection (Pro): Notes and Todo then use
|
|
38
|
+
MongoDB, as their collections declare; Contacts stay on files. A site is never switched to
|
|
39
|
+
an empty store - while the files still hold notes or to-dos they stay on files, and the
|
|
40
|
+
server log says so. To settle it, use the collection's <strong>Storage</strong> move, which
|
|
41
|
+
keeps every id (see <a href="#/docs/usage/collections">Collections & Forms</a>).</p>
|
|
42
|
+
|
|
43
|
+
<h3>Analytics</h3>
|
|
44
|
+
<p>Page views and visitors, counted on your own server - no third-party script. Admin pages, the
|
|
45
|
+
API and browsers that ask not to be tracked are never counted. Analytics Pro, in the
|
|
46
|
+
Marketplace, adds deeper reports.</p>
|
|
47
|
+
|
|
48
|
+
<h3>SEO</h3>
|
|
49
|
+
<p>How the site looks to search engines: an audit of every page with a score, each page's search
|
|
50
|
+
result and share card as they will look, titles and descriptions used twice, redirects (added
|
|
51
|
+
for you when a page is renamed), the sitemap and robots.txt, and who runs the site. SEO Pro
|
|
52
|
+
adds a not-found log, a link monitor and SEO history.</p>
|
|
53
|
+
|
|
54
|
+
<h3>Notifications</h3>
|
|
55
|
+
<p>The bell in the admin, and <strong>System > Notifications</strong>. Opening the screen marks
|
|
56
|
+
everything read. Its settings choose which <strong>sources</strong> notify which roles, and
|
|
57
|
+
whether your browser shows desktop notifications. A notice with no audience goes to admins
|
|
58
|
+
and above.</p>
|
|
59
|
+
|
|
60
|
+
<h3>Site search</h3>
|
|
61
|
+
<p><strong>System > Search</strong> sets up the search box visitors open from the navbar (or
|
|
62
|
+
with Ctrl+K). It searches pages only. Results follow the visitor's roles: a page they may not
|
|
63
|
+
open never appears, nor do drafts, <code>noindex</code> pages or pages in a disabled
|
|
64
|
+
project.</p>
|
|
65
|
+
|
|
66
|
+
<h3>Plugins</h3>
|
|
67
|
+
<p>Tools from the Marketplace (Calendar, Blog, Feedback, Mail Reader and others) join the same
|
|
68
|
+
folder when switched on. See <a href="#/docs/plugins">Plugin guides</a> for each one you have
|
|
69
|
+
installed, and <a href="#/docs/usage/plugins">Plugins</a> for installing and switching.</p>
|
|
70
|
+
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
<div class="docs-body">
|
|
9
9
|
|
|
10
10
|
<p>Users are stored as individual JSON files in <code>content/users/</code>. Passwords are hashed with
|
|
11
|
-
bcrypt and never returned by the API. Manage
|
|
11
|
+
bcrypt and never returned by the API. Manage accounts at <strong>System > Users</strong> and
|
|
12
|
+
roles at <strong>System > Roles</strong>.</p>
|
|
12
13
|
|
|
13
14
|
<h3>Roles</h3>
|
|
14
|
-
<p>Roles are data, stored in the <code>roles</code> preset collection
|
|
15
|
-
|
|
16
|
-
deleted:</p>
|
|
15
|
+
<p>Roles are data, stored in the <code>roles</code> preset collection. Every site starts with three
|
|
16
|
+
base roles, which cannot be deleted:</p>
|
|
17
17
|
<table class="table table-sm">
|
|
18
18
|
<thead>
|
|
19
19
|
<tr>
|
|
@@ -26,13 +26,15 @@
|
|
|
26
26
|
<tr>
|
|
27
27
|
<td><strong>Super Admin</strong> (<code>super-admin</code>)</td>
|
|
28
28
|
<td>0</td>
|
|
29
|
-
<td>Everything, including
|
|
29
|
+
<td>Everything. The level-0 role holds every permission, including the ones plugins and
|
|
30
|
+
built-in Tools add, whatever its permission list says.</td>
|
|
30
31
|
</tr>
|
|
31
32
|
<tr>
|
|
32
33
|
<td><strong>Admin</strong> (<code>admin</code>)</td>
|
|
33
34
|
<td>1</td>
|
|
34
35
|
<td>Content, structure, collections, views, actions, users, settings, theme, plugins,
|
|
35
|
-
API tokens and endpoints, notifications
|
|
36
|
+
API tokens and endpoints, notifications, SEO, and renaming or deleting any contact
|
|
37
|
+
group. Plugins usually grant their own permissions to Admin when first switched on.</td>
|
|
36
38
|
</tr>
|
|
37
39
|
<tr>
|
|
38
40
|
<td><strong>User</strong> (<code>user</code>)</td>
|
|
@@ -41,23 +43,100 @@
|
|
|
41
43
|
</tr>
|
|
42
44
|
</tbody>
|
|
43
45
|
</table>
|
|
44
|
-
<p>
|
|
45
|
-
|
|
46
|
-
actions (view, create, edit, delete). A user has one primary role plus optional additional
|
|
47
|
-
roles; a permission check passes if any of their roles grants it. You can only manage users
|
|
48
|
-
whose role is less senior than your own.</p>
|
|
46
|
+
<p>The built-in Tools (Contacts, Notes, Todo, Analytics) are not given to Admin or User by
|
|
47
|
+
default - tick them for the roles that should have them.</p>
|
|
49
48
|
|
|
50
|
-
<h3>
|
|
51
|
-
<p>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
<h3>Your own roles</h3>
|
|
50
|
+
<p>Add roles with <strong>New role</strong> on the Roles screen. Each role has a
|
|
51
|
+
<strong>level</strong> (lower is more senior) and a set of permissions, ticked in a matrix of
|
|
52
|
+
resources and actions (View, Create, Edit, Delete, and extras such as Contacts > Manage
|
|
53
|
+
groups). Permissions are grouped: Content, Structure, Data, Configuration, Tools, then Plugins.</p>
|
|
54
|
+
<ul>
|
|
55
|
+
<li><strong>Additional roles.</strong> A user has one primary role and can hold more. A
|
|
56
|
+
permission check passes if any role they hold grants it.</li>
|
|
57
|
+
<li><strong>Grants only add.</strong> A plugin that grants its permission to a role does it
|
|
58
|
+
once. If you untick it afterwards it stays unticked.</li>
|
|
59
|
+
<li><strong>Plugin roles.</strong> Some plugins bring roles of their own (the Blog's Blog Author
|
|
60
|
+
and Blog Editor, for example). They appear on the Roles screen
|
|
61
|
+
like any other and you can edit them; the plugin never overwrites your changes.
|
|
62
|
+
Switching the plugin off keeps its roles; uninstalling it removes them and moves their users to <code>user</code>.</li>
|
|
63
|
+
</ul>
|
|
64
|
+
|
|
65
|
+
<h3>Confining a role to some screens</h3>
|
|
66
|
+
<p>A role can be confined to a list of admin screens, with one of them as its home - useful for
|
|
67
|
+
people who sign themselves up on the public site. A confined user sees only those screens
|
|
68
|
+
in the sidebar, and the server refuses their calls to any plugin API whose screens they
|
|
69
|
+
cannot open. A user is confined only when every role they hold is confined: one unconfined
|
|
70
|
+
role lifts it. The level-0 role is never confined.</p>
|
|
71
|
+
|
|
72
|
+
<h3>Who can see what: the role ladder</h3>
|
|
73
|
+
<p>Pages, menu items, views and actions name the roles they are for. Two forms exist, and the
|
|
74
|
+
page and menu editors offer both for every role:</p>
|
|
75
|
+
<table class="table table-sm">
|
|
76
|
+
<thead>
|
|
77
|
+
<tr>
|
|
78
|
+
<th>You choose</th>
|
|
79
|
+
<th>Stored as</th>
|
|
80
|
+
<th>Who gets in</th>
|
|
81
|
+
</tr>
|
|
82
|
+
</thead>
|
|
83
|
+
<tbody>
|
|
84
|
+
<tr>
|
|
85
|
+
<td>Candidate and above</td>
|
|
86
|
+
<td><code>candidate</code></td>
|
|
87
|
+
<td>Holders of that role and everyone on the same or a more senior level.</td>
|
|
88
|
+
</tr>
|
|
89
|
+
<tr>
|
|
90
|
+
<td>Candidate only</td>
|
|
91
|
+
<td><code>=candidate</code></td>
|
|
92
|
+
<td>Holders of that role only (primary or additional), plus the level-0 role. An ordinary
|
|
93
|
+
admin does not pass - give them the role as an additional role if they need it.</td>
|
|
94
|
+
</tr>
|
|
95
|
+
<tr>
|
|
96
|
+
<td>Several roles</td>
|
|
97
|
+
<td><code>[candidate, employer]</code></td>
|
|
98
|
+
<td>Anyone who passes any one of them. Exact and ladder forms mix.</td>
|
|
99
|
+
</tr>
|
|
100
|
+
<tr>
|
|
101
|
+
<td>Private</td>
|
|
102
|
+
<td><code>private</code></td>
|
|
103
|
+
<td>The level-0 role only.</td>
|
|
104
|
+
</tr>
|
|
105
|
+
</tbody>
|
|
106
|
+
</table>
|
|
107
|
+
<p>A role name the site does not have (a role since deleted, or a typo) admits only the level-0
|
|
108
|
+
role - never everyone. The collection and action editors flag such a role so you can fix it. A
|
|
109
|
+
page a visitor may not see answers 403; a draft answers 404.</p>
|
|
110
|
+
|
|
111
|
+
<h3>Managing users</h3>
|
|
112
|
+
<p>You can only create, edit, delete or reset the password of a user whose role is less senior
|
|
113
|
+
than yours (a higher level number) - an admin cannot manage another admin. You cannot give
|
|
114
|
+
anyone a role more senior than your own.</p>
|
|
115
|
+
<p>Right-click a user (or use the row menu) to <strong>Send password reset email</strong>,
|
|
116
|
+
<strong>Copy a reset link</strong> (for a site without email) or <strong>Withdraw the reset
|
|
117
|
+
link</strong>. The account holder is emailed whenever their password changes.</p>
|
|
118
|
+
|
|
119
|
+
<h3>Passwords and sign-in</h3>
|
|
120
|
+
<p>The core rule is at least 8 characters. The free Security plugin, when switched on, adds stricter
|
|
121
|
+
password rules, sign-in lockout and a log of every sign-in; Security Pro adds two-factor
|
|
122
|
+
sign-in and a list of every signed-in session.
|
|
123
|
+
"Forgot your password?" works only when the site can send email (Site Settings > Email);
|
|
124
|
+
without it the sign-in screen tells the person to ask an administrator.</p>
|
|
125
|
+
<p>The admin panel uses JWT Bearer tokens, refreshed automatically. By default an access token
|
|
126
|
+
lasts 15 minutes and a refresh token 7 days (<code>config/auth.json</code>). Each sign-in is a
|
|
127
|
+
session kept on disk, so signing out holds even across a restart; changing a password signs
|
|
128
|
+
out that account's other sessions.</p>
|
|
55
129
|
|
|
56
130
|
<h3>Views & Actions</h3>
|
|
57
|
-
<p>
|
|
58
|
-
permissions. Super Admin and Admin hold both by default; the User role holds neither.
|
|
59
|
-
|
|
60
|
-
|
|
131
|
+
<p>Building Views and Actions is controlled by the <code>views</code> and <code>actions</code>
|
|
132
|
+
permissions. Super Admin and Admin hold both by default; the User role holds neither. Who may
|
|
133
|
+
read a view or run an action is set on the view or action itself (its Access tab), using the
|
|
134
|
+
role ladder above - any listed role is enough. Views work on every storage adapter; Actions
|
|
135
|
+
need a MongoDB connection.</p>
|
|
136
|
+
|
|
137
|
+
<p>See also: <a href="#/docs/usage/editions">Editions & Licences</a> for what the free and
|
|
138
|
+
Pro editions include, and <a href="#/docs/plugins">Plugin guides</a> for the roles and
|
|
139
|
+
permissions each installed plugin adds.</p>
|
|
61
140
|
|
|
62
141
|
</div>
|
|
63
142
|
</div>
|