domma-cms 0.9.0 → 0.9.5
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/admin/js/templates/block-editor.html +163 -163
- package/admin/js/templates/form-editor.html +245 -245
- package/admin/js/views/action-editor.js +1 -1
- package/admin/js/views/block-editor.js +8 -8
- package/admin/js/views/collection-editor.js +4 -4
- package/admin/js/views/collections.js +1 -1
- package/admin/js/views/form-editor.js +7 -7
- package/admin/js/views/forms.js +1 -1
- package/admin/js/views/navigation.js +14 -14
- package/admin/js/views/page-editor.js +35 -35
- package/admin/js/views/pages.js +5 -5
- package/admin/js/views/plugins.js +19 -10
- package/admin/js/views/view-editor.js +1 -1
- package/config/plugins.json +35 -0
- package/package.json +1 -1
- package/plugins/docs/data/documents/57e003f0-68f2-47dc-9c36-ed4b10ed3deb.json +4 -4
- package/plugins/docs/data/folders.json +3 -3
- package/plugins/docs/data/versions/57e003f0-68f2-47dc-9c36-ed4b10ed3deb/1.json +5 -0
- package/plugins/garage/admin/templates/garage.html +30 -0
- package/plugins/garage/admin/views/garage.js +62 -1
- package/plugins/garage/plugin.json +1 -1
- package/plugins/notes/admin/templates/notes.html +2 -11
- package/plugins/notes/admin/views/notes.js +107 -129
- package/plugins/notes/collections/user-notes/schema.json +2 -1
- package/plugins/notes/plugin.json +1 -1
- package/plugins/site-search/admin/templates/site-search.html +174 -46
- package/plugins/site-search/admin/views/site-search.js +72 -1
- package/plugins/site-search/config.js +6 -1
- package/plugins/site-search/plugin.json +1 -1
- package/plugins/site-search/public/inject-head.html +1 -1
- package/plugins/site-search/public/search.css +1 -1
- package/plugins/site-search/public/search.js +1 -1
- package/plugins/todo/admin/templates/todo.html +2 -8
- package/plugins/todo/admin/views/todo.js +122 -106
- package/plugins/todo/collections/todos/schema.json +2 -1
- package/plugins/todo/plugin.json +1 -1
- package/server/routes/api/media.js +127 -118
- package/server/routes/api/plugins.js +15 -4
- package/server/server.js +288 -285
- package/server/services/blocks.js +6 -3
- package/server/services/collections.js +17 -10
- package/server/services/plugins.js +77 -67
- package/server/services/renderer.js +3 -3
- package/plugins/docs/data/documents/452f49b7-9c93-4a67-874d-27f882891ad2.json +0 -11
|
@@ -1,163 +1,163 @@
|
|
|
1
|
-
<div class="view-header">
|
|
2
|
-
<h1><span data-icon="box"></span> <span id="block-editor-title">New Block</span></h1>
|
|
3
|
-
<div style="display:flex;gap:.5rem;">
|
|
4
|
-
<a href="#/blocks" class="btn btn-ghost btn-sm">
|
|
5
|
-
<span data-icon="arrow-left"></span> All Blocks
|
|
6
|
-
</a>
|
|
7
|
-
<button id="save-block-btn" class="btn btn-primary">
|
|
8
|
-
<span data-icon="save"></span> Save Block
|
|
9
|
-
</button>
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
|
|
13
|
-
<!-- Block Name -->
|
|
14
|
-
<div class="card card-collapsible mb-3">
|
|
15
|
-
<div class="card-header">
|
|
16
|
-
<h2>Block Name</h2>
|
|
17
|
-
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="card-body" style="max-width:420px;">
|
|
20
|
-
<label class="form-label">Name <span style="color:var(--dm-danger,#f87171);">*</span></label>
|
|
21
|
-
<input id="block-name" type="text" class="form-input" placeholder="e.g. feedback-card">
|
|
22
|
-
<small class="text-muted">Lowercase letters, digits, and hyphens only. Cannot be changed after creation.</small>
|
|
23
|
-
<div class="mt-3">
|
|
24
|
-
<label class="form-check-label" title="Included in fresh installs via the seed script">
|
|
25
|
-
<input id="block-bundled" type="checkbox" class="form-check"> Bundled
|
|
26
|
-
</label>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<!-- HTML Editor + Preview -->
|
|
32
|
-
<div class="card card-collapsible editor-card mb-3">
|
|
33
|
-
<div class="card-header">
|
|
34
|
-
<h2>Template HTML</h2>
|
|
35
|
-
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
36
|
-
</div>
|
|
37
|
-
<div class="card-body p-0">
|
|
38
|
-
|
|
39
|
-
<!-- Toolbar -->
|
|
40
|
-
<div id="block-editor-toolbar" class="editor-toolbar">
|
|
41
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="undo" title="Undo (Ctrl+Z)">
|
|
42
|
-
<span data-icon="corner-up-left"></span>
|
|
43
|
-
</button>
|
|
44
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="redo" title="Redo (Ctrl+Y)">
|
|
45
|
-
<span data-icon="corner-up-right"></span>
|
|
46
|
-
</button>
|
|
47
|
-
<span class="editor-toolbar-sep"></span>
|
|
48
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="cut" title="Cut (Ctrl+X)">
|
|
49
|
-
<span data-icon="scissors"></span>
|
|
50
|
-
</button>
|
|
51
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="copy" title="Copy (Ctrl+C)">
|
|
52
|
-
<span data-icon="copy"></span>
|
|
53
|
-
</button>
|
|
54
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="paste" title="Paste (Ctrl+V)">
|
|
55
|
-
<span data-icon="clipboard"></span>
|
|
56
|
-
</button>
|
|
57
|
-
<span class="editor-toolbar-sep"></span>
|
|
58
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="select-all" title="Select All (Ctrl+A)">
|
|
59
|
-
<span data-icon="maximize-2"></span>
|
|
60
|
-
</button>
|
|
61
|
-
<button type="button" class="btn btn-ghost btn-sm" data-action="format" title="Format HTML">
|
|
62
|
-
<span data-icon="code"></span> Format
|
|
63
|
-
</button>
|
|
64
|
-
|
|
65
|
-
<!-- View mode toggles (right side) -->
|
|
66
|
-
<div class="editor-toolbar-right">
|
|
67
|
-
<span id="block-cursor-pos"
|
|
68
|
-
style="font-size:.75rem;color:var(--dm-text-muted,#888);margin-right:.5rem;">Ln 1, Col 1</span>
|
|
69
|
-
<span class="editor-toolbar-sep"></span>
|
|
70
|
-
<button type="button" class="editor-view-btn active" data-mode="write" title="Edit only">
|
|
71
|
-
<span data-icon="edit-2"></span>
|
|
72
|
-
</button>
|
|
73
|
-
<button type="button" class="editor-view-btn" data-mode="split" title="Split view">
|
|
74
|
-
<span data-icon="columns"></span>
|
|
75
|
-
</button>
|
|
76
|
-
<button type="button" class="editor-view-btn" data-mode="preview" title="Preview only">
|
|
77
|
-
<span data-icon="eye"></span>
|
|
78
|
-
</button>
|
|
79
|
-
</div>
|
|
80
|
-
</div>
|
|
81
|
-
|
|
82
|
-
<!-- Editor body — split pane -->
|
|
83
|
-
<div id="block-editor-body" class="editor-body editor-mode-write" style="min-height:460px;">
|
|
84
|
-
|
|
85
|
-
<!-- Write pane -->
|
|
86
|
-
<div class="editor-pane editor-pane--write" style="flex-direction:row;overflow:hidden;">
|
|
87
|
-
<div id="block-line-numbers" class="editor-line-numbers">1</div>
|
|
88
|
-
<textarea id="block-content" class="editor-textarea"
|
|
89
|
-
spellcheck="false"
|
|
90
|
-
placeholder="<div class="card mb-3"> <div class="card-body"> <h3>{{title}}</h3> <p>{{message}}</p> </div> </div>"></textarea>
|
|
91
|
-
</div>
|
|
92
|
-
|
|
93
|
-
<div class="editor-divider"></div>
|
|
94
|
-
|
|
95
|
-
<!-- Preview pane -->
|
|
96
|
-
<div class="editor-pane editor-pane--preview" style="flex-direction:column;overflow:hidden;">
|
|
97
|
-
<!-- Sample data inputs — auto-populated by JS -->
|
|
98
|
-
<div id="block-sample-data" style="
|
|
99
|
-
border-bottom:1px solid var(--dm-border,rgba(255,255,255,.08));
|
|
100
|
-
padding:.6rem .75rem;
|
|
101
|
-
background:var(--dm-surface-subtle,rgba(0,0,0,.1));
|
|
102
|
-
flex-shrink:0;">
|
|
103
|
-
<p class="text-muted" style="font-size:.8rem;margin:0;">
|
|
104
|
-
Write some template HTML to populate sample data fields.
|
|
105
|
-
</p>
|
|
106
|
-
</div>
|
|
107
|
-
<!-- Rendered output -->
|
|
108
|
-
<div id="block-preview-output" style="flex:1;overflow-y:auto;padding:1rem;"></div>
|
|
109
|
-
</div>
|
|
110
|
-
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
|
|
115
|
-
<!-- Placeholder Reference -->
|
|
116
|
-
<div class="card card-collapsible mb-3 card-collapsed">
|
|
117
|
-
<div class="card-header">
|
|
118
|
-
<h2>Placeholder Reference</h2>
|
|
119
|
-
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
120
|
-
</div>
|
|
121
|
-
<div class="card-body" style="font-size:.85rem;line-height:1.8;">
|
|
122
|
-
<p>Use <code class="dm-code-inline">{{fieldName}}</code> to insert entry field values. Values are HTML-escaped
|
|
123
|
-
automatically to prevent XSS.</p>
|
|
124
|
-
<table class="table" style="max-width:520px;margin:.75rem 0;">
|
|
125
|
-
<thead>
|
|
126
|
-
<tr>
|
|
127
|
-
<th style="width:180px;">Placeholder</th>
|
|
128
|
-
<th>Value</th>
|
|
129
|
-
</tr>
|
|
130
|
-
</thead>
|
|
131
|
-
<tbody>
|
|
132
|
-
<tr>
|
|
133
|
-
<td><code class="dm-code-inline">{{fieldName}}</code></td>
|
|
134
|
-
<td>Any entry field — e.g. <code class="dm-code-inline">{{title}}</code>, <code class="dm-code-inline">{{rating}}</code>,
|
|
135
|
-
<code class="dm-code-inline">{{message}}</code></td>
|
|
136
|
-
</tr>
|
|
137
|
-
<tr>
|
|
138
|
-
<td><code class="dm-code-inline">{{_id}}</code></td>
|
|
139
|
-
<td>Entry UUID</td>
|
|
140
|
-
</tr>
|
|
141
|
-
<tr>
|
|
142
|
-
<td><code class="dm-code-inline">{{_createdAt}}</code></td>
|
|
143
|
-
<td>Creation timestamp (ISO 8601)</td>
|
|
144
|
-
</tr>
|
|
145
|
-
<tr>
|
|
146
|
-
<td><code class="dm-code-inline">{{_updatedAt}}</code></td>
|
|
147
|
-
<td>Last-updated timestamp (ISO 8601)</td>
|
|
148
|
-
</tr>
|
|
149
|
-
</tbody>
|
|
150
|
-
</table>
|
|
151
|
-
<p><strong>Use in a shortcode:</strong></p>
|
|
152
|
-
<pre class="dm-code-block">[collection slug="feedback" display="block" block="feedback-card" /]
|
|
153
|
-
[view slug="my-view" display="block" block="feedback-card" /]</pre>
|
|
154
|
-
<p style="margin-top:.75rem;"><strong>Example block template:</strong></p>
|
|
155
|
-
<pre class="dm-code-block"><div class="card mb-3">
|
|
156
|
-
<div class="card-body">
|
|
157
|
-
<h3>{{name}}</h3>
|
|
158
|
-
<p>{{message}}</p>
|
|
159
|
-
<small>Rating: {{rating}} &mdash; {{_createdAt}}</small>
|
|
160
|
-
</div>
|
|
161
|
-
</div></pre>
|
|
162
|
-
</div>
|
|
163
|
-
</div>
|
|
1
|
+
<div class="view-header">
|
|
2
|
+
<h1><span data-icon="box"></span> <span id="block-editor-title">New Block</span></h1>
|
|
3
|
+
<div style="display:flex;gap:.5rem;">
|
|
4
|
+
<a href="#/blocks" class="btn btn-ghost btn-sm">
|
|
5
|
+
<span data-icon="arrow-left"></span> All Blocks
|
|
6
|
+
</a>
|
|
7
|
+
<button id="save-block-btn" class="btn btn-primary">
|
|
8
|
+
<span data-icon="save"></span> Save Block
|
|
9
|
+
</button>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<!-- Block Name -->
|
|
14
|
+
<div class="card card-collapsible mb-3">
|
|
15
|
+
<div class="card-header">
|
|
16
|
+
<h2>Block Name</h2>
|
|
17
|
+
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="card-body" style="max-width:420px;">
|
|
20
|
+
<label class="form-label">Name <span style="color:var(--dm-danger,#f87171);">*</span></label>
|
|
21
|
+
<input id="block-name" type="text" class="form-input" placeholder="e.g. feedback-card">
|
|
22
|
+
<small class="text-muted">Lowercase letters, digits, and hyphens only. Cannot be changed after creation.</small>
|
|
23
|
+
<div class="mt-3">
|
|
24
|
+
<label class="form-check-label" title="Included in fresh installs via the seed script">
|
|
25
|
+
<input id="block-bundled" type="checkbox" class="form-check"> Bundled
|
|
26
|
+
</label>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<!-- HTML Editor + Preview -->
|
|
32
|
+
<div class="card card-collapsible editor-card mb-3">
|
|
33
|
+
<div class="card-header">
|
|
34
|
+
<h2>Template HTML</h2>
|
|
35
|
+
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="card-body p-0">
|
|
38
|
+
|
|
39
|
+
<!-- Toolbar -->
|
|
40
|
+
<div id="block-editor-toolbar" class="editor-toolbar">
|
|
41
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="undo" title="Undo (Ctrl+Z)">
|
|
42
|
+
<span data-icon="corner-up-left"></span>
|
|
43
|
+
</button>
|
|
44
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="redo" title="Redo (Ctrl+Y)">
|
|
45
|
+
<span data-icon="corner-up-right"></span>
|
|
46
|
+
</button>
|
|
47
|
+
<span class="editor-toolbar-sep"></span>
|
|
48
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="cut" title="Cut (Ctrl+X)">
|
|
49
|
+
<span data-icon="scissors"></span>
|
|
50
|
+
</button>
|
|
51
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="copy" title="Copy (Ctrl+C)">
|
|
52
|
+
<span data-icon="copy"></span>
|
|
53
|
+
</button>
|
|
54
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="paste" title="Paste (Ctrl+V)">
|
|
55
|
+
<span data-icon="clipboard"></span>
|
|
56
|
+
</button>
|
|
57
|
+
<span class="editor-toolbar-sep"></span>
|
|
58
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="select-all" title="Select All (Ctrl+A)">
|
|
59
|
+
<span data-icon="maximize-2"></span>
|
|
60
|
+
</button>
|
|
61
|
+
<button type="button" class="btn btn-ghost btn-sm" data-action="format" title="Format HTML">
|
|
62
|
+
<span data-icon="code"></span> Format
|
|
63
|
+
</button>
|
|
64
|
+
|
|
65
|
+
<!-- View mode toggles (right side) -->
|
|
66
|
+
<div class="editor-toolbar-right">
|
|
67
|
+
<span id="block-cursor-pos"
|
|
68
|
+
style="font-size:.75rem;color:var(--dm-text-muted,#888);margin-right:.5rem;">Ln 1, Col 1</span>
|
|
69
|
+
<span class="editor-toolbar-sep"></span>
|
|
70
|
+
<button type="button" class="editor-view-btn active" data-mode="write" title="Edit only">
|
|
71
|
+
<span data-icon="edit-2"></span>
|
|
72
|
+
</button>
|
|
73
|
+
<button type="button" class="editor-view-btn" data-mode="split" title="Split view">
|
|
74
|
+
<span data-icon="columns"></span>
|
|
75
|
+
</button>
|
|
76
|
+
<button type="button" class="editor-view-btn" data-mode="preview" title="Preview only">
|
|
77
|
+
<span data-icon="eye"></span>
|
|
78
|
+
</button>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<!-- Editor body — split pane -->
|
|
83
|
+
<div id="block-editor-body" class="editor-body editor-mode-write" style="min-height:460px;">
|
|
84
|
+
|
|
85
|
+
<!-- Write pane -->
|
|
86
|
+
<div class="editor-pane editor-pane--write" style="flex-direction:row;overflow:hidden;">
|
|
87
|
+
<div id="block-line-numbers" class="editor-line-numbers">1</div>
|
|
88
|
+
<textarea id="block-content" class="editor-textarea"
|
|
89
|
+
spellcheck="false"
|
|
90
|
+
placeholder="<div class="card mb-3"> <div class="card-body"> <h3>{{title}}</h3> <p>{{message}}</p> </div> </div>"></textarea>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="editor-divider"></div>
|
|
94
|
+
|
|
95
|
+
<!-- Preview pane -->
|
|
96
|
+
<div class="editor-pane editor-pane--preview" style="flex-direction:column;overflow:hidden;">
|
|
97
|
+
<!-- Sample data inputs — auto-populated by JS -->
|
|
98
|
+
<div id="block-sample-data" style="
|
|
99
|
+
border-bottom:1px solid var(--dm-border,rgba(255,255,255,.08));
|
|
100
|
+
padding:.6rem .75rem;
|
|
101
|
+
background:var(--dm-surface-subtle,rgba(0,0,0,.1));
|
|
102
|
+
flex-shrink:0;">
|
|
103
|
+
<p class="text-muted" style="font-size:.8rem;margin:0;">
|
|
104
|
+
Write some template HTML to populate sample data fields.
|
|
105
|
+
</p>
|
|
106
|
+
</div>
|
|
107
|
+
<!-- Rendered output -->
|
|
108
|
+
<div id="block-preview-output" style="flex:1;overflow-y:auto;padding:1rem;"></div>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<!-- Placeholder Reference -->
|
|
116
|
+
<div class="card card-collapsible mb-3 card-collapsed">
|
|
117
|
+
<div class="card-header">
|
|
118
|
+
<h2>Placeholder Reference</h2>
|
|
119
|
+
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
120
|
+
</div>
|
|
121
|
+
<div class="card-body" style="font-size:.85rem;line-height:1.8;">
|
|
122
|
+
<p>Use <code class="dm-code-inline">{{fieldName}}</code> to insert entry field values. Values are HTML-escaped
|
|
123
|
+
automatically to prevent XSS.</p>
|
|
124
|
+
<table class="table" style="max-width:520px;margin:.75rem 0;">
|
|
125
|
+
<thead>
|
|
126
|
+
<tr>
|
|
127
|
+
<th style="width:180px;">Placeholder</th>
|
|
128
|
+
<th>Value</th>
|
|
129
|
+
</tr>
|
|
130
|
+
</thead>
|
|
131
|
+
<tbody>
|
|
132
|
+
<tr>
|
|
133
|
+
<td><code class="dm-code-inline">{{fieldName}}</code></td>
|
|
134
|
+
<td>Any entry field — e.g. <code class="dm-code-inline">{{title}}</code>, <code class="dm-code-inline">{{rating}}</code>,
|
|
135
|
+
<code class="dm-code-inline">{{message}}</code></td>
|
|
136
|
+
</tr>
|
|
137
|
+
<tr>
|
|
138
|
+
<td><code class="dm-code-inline">{{_id}}</code></td>
|
|
139
|
+
<td>Entry UUID</td>
|
|
140
|
+
</tr>
|
|
141
|
+
<tr>
|
|
142
|
+
<td><code class="dm-code-inline">{{_createdAt}}</code></td>
|
|
143
|
+
<td>Creation timestamp (ISO 8601)</td>
|
|
144
|
+
</tr>
|
|
145
|
+
<tr>
|
|
146
|
+
<td><code class="dm-code-inline">{{_updatedAt}}</code></td>
|
|
147
|
+
<td>Last-updated timestamp (ISO 8601)</td>
|
|
148
|
+
</tr>
|
|
149
|
+
</tbody>
|
|
150
|
+
</table>
|
|
151
|
+
<p><strong>Use in a shortcode:</strong></p>
|
|
152
|
+
<pre class="dm-code-block">[collection slug="feedback" display="block" block="feedback-card" /]
|
|
153
|
+
[view slug="my-view" display="block" block="feedback-card" /]</pre>
|
|
154
|
+
<p style="margin-top:.75rem;"><strong>Example block template:</strong></p>
|
|
155
|
+
<pre class="dm-code-block"><div class="card mb-3">
|
|
156
|
+
<div class="card-body">
|
|
157
|
+
<h3>{{name}}</h3>
|
|
158
|
+
<p>{{message}}</p>
|
|
159
|
+
<small>Rating: {{rating}} &mdash; {{_createdAt}}</small>
|
|
160
|
+
</div>
|
|
161
|
+
</div></pre>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|