@geekity/cms 0.24.0 → 0.26.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/README.md +96 -160
- package/admin/pages/documents/editor.njk +48 -0
- package/admin/pages/federation/settings.njk +1 -59
- package/admin/pages/plugins/installed.njk +113 -0
- package/admin/pages/plugins/screen.njk +129 -0
- package/admin/static/admin.css +144 -4
- package/admin/static/editor-actions.js +202 -0
- package/dist/admin/accounts.d.ts +18 -39
- package/dist/admin/accounts.d.ts.map +1 -1
- package/dist/admin/accounts.js +19 -48
- package/dist/admin/accounts.js.map +1 -1
- package/dist/admin/documents.d.ts +5 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +17 -8
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/editor-actions.d.ts +35 -0
- package/dist/admin/editor-actions.d.ts.map +1 -0
- package/dist/admin/editor-actions.js +187 -0
- package/dist/admin/editor-actions.js.map +1 -0
- package/dist/admin/federation.d.ts +4 -5
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +4 -5
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/menu.d.ts +1 -1
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +10 -3
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/plugins.d.ts +24 -0
- package/dist/admin/plugins.d.ts.map +1 -0
- package/dist/admin/plugins.js +312 -0
- package/dist/admin/plugins.js.map +1 -0
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +5 -1
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-federation.d.ts +0 -25
- package/dist/admin/settings-federation.d.ts.map +1 -1
- package/dist/admin/settings-federation.js +1 -54
- package/dist/admin/settings-federation.js.map +1 -1
- package/dist/admin/settings.d.ts +2 -14
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +1 -21
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/store.d.ts +8 -1
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +7 -3
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/templates.d.ts +2 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +2 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/cli.d.ts +2 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +278 -212
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/content/store.d.ts +6 -0
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +3 -0
- package/dist/content/store.js.map +1 -1
- package/dist/drain.d.ts +28 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +106 -0
- package/dist/drain.js.map +1 -0
- package/dist/env.d.ts +11 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/federation.d.ts +4 -2
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +16 -21
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/inbox.d.ts +23 -3
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +63 -1
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +0 -4
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +0 -2
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/mount.d.ts +6 -12
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +3 -50
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/queue.d.ts +22 -0
- package/dist/federation/queue.d.ts.map +1 -0
- package/dist/federation/queue.js +58 -0
- package/dist/federation/queue.js.map +1 -0
- package/dist/files/atomic.d.ts +13 -0
- package/dist/files/atomic.d.ts.map +1 -1
- package/dist/files/atomic.js +45 -0
- package/dist/files/atomic.js.map +1 -1
- package/dist/index.d.ts +30 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +156 -79
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +524 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +23 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/enabled.d.ts +23 -0
- package/dist/plugins/enabled.d.ts.map +1 -0
- package/dist/plugins/enabled.js +49 -0
- package/dist/plugins/enabled.js.map +1 -0
- package/dist/plugins/federation.d.ts +26 -0
- package/dist/plugins/federation.d.ts.map +1 -0
- package/dist/plugins/federation.js +114 -0
- package/dist/plugins/federation.js.map +1 -0
- package/dist/plugins/fetch.d.ts +15 -0
- package/dist/plugins/fetch.d.ts.map +1 -0
- package/dist/plugins/fetch.js +33 -0
- package/dist/plugins/fetch.js.map +1 -0
- package/dist/plugins/folder.d.ts +50 -0
- package/dist/plugins/folder.d.ts.map +1 -0
- package/dist/plugins/folder.js +171 -0
- package/dist/plugins/folder.js.map +1 -0
- package/dist/plugins/install.d.ts +45 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +275 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/mount.d.ts +17 -0
- package/dist/plugins/mount.d.ts.map +1 -0
- package/dist/plugins/mount.js +44 -0
- package/dist/plugins/mount.js.map +1 -0
- package/dist/plugins/registry.d.ts +110 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +447 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/settings.d.ts +64 -0
- package/dist/plugins/settings.d.ts.map +1 -0
- package/dist/plugins/settings.js +219 -0
- package/dist/plugins/settings.js.map +1 -0
- package/dist/plugins/site.d.ts +17 -0
- package/dist/plugins/site.d.ts.map +1 -0
- package/dist/plugins/site.js +67 -0
- package/dist/plugins/site.js.map +1 -0
- package/dist/supervisor/primary.d.ts +47 -0
- package/dist/supervisor/primary.d.ts.map +1 -0
- package/dist/supervisor/primary.js +208 -0
- package/dist/supervisor/primary.js.map +1 -0
- package/dist/supervisor/protocol.d.ts +37 -0
- package/dist/supervisor/protocol.d.ts.map +1 -0
- package/dist/supervisor/protocol.js +29 -0
- package/dist/supervisor/protocol.js.map +1 -0
- package/dist/supervisor/supervision.d.ts +25 -0
- package/dist/supervisor/supervision.d.ts.map +1 -0
- package/dist/supervisor/supervision.js +7 -0
- package/dist/supervisor/supervision.js.map +1 -0
- package/dist/supervisor/worker.d.ts +29 -0
- package/dist/supervisor/worker.d.ts.map +1 -0
- package/dist/supervisor/worker.js +97 -0
- package/dist/supervisor/worker.js.map +1 -0
- package/dist/web/maintenance.d.ts +2 -2
- package/dist/web/maintenance.js +2 -2
- package/dist/web/negotiate.d.ts +4 -3
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +4 -3
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +33 -14
- package/dist/web/routes.js.map +1 -1
- package/package.json +10 -1
- package/dist/comments/conversation.d.ts +0 -29
- package/dist/comments/conversation.d.ts.map +0 -1
- package/dist/comments/conversation.js +0 -60
- package/dist/comments/conversation.js.map +0 -1
- package/dist/federation/import-wordpress.d.ts +0 -128
- package/dist/federation/import-wordpress.d.ts.map +0 -1
- package/dist/federation/import-wordpress.js +0 -426
- package/dist/federation/import-wordpress.js.map +0 -1
- package/dist/federation/wordpress.d.ts +0 -131
- package/dist/federation/wordpress.d.ts.map +0 -1
- package/dist/federation/wordpress.js +0 -342
- package/dist/federation/wordpress.js.map +0 -1
- package/dist/web/comments.d.ts +0 -60
- package/dist/web/comments.d.ts.map +0 -1
- package/dist/web/comments.js +0 -207
- package/dist/web/comments.js.map +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{# /admin/plugins/<package name>: a plugin's own screen (decision-33). The
|
|
2
|
+
plugin hands over cards of paragraphs and tables as data and this draws
|
|
3
|
+
them, so a plugin writes no markup and everything it says is escaped.
|
|
4
|
+
|
|
5
|
+
A plugin with settings gets a form here too (TASK-283). A label or hint
|
|
6
|
+
from a plugin is escaped before the field macros, which print theirs as
|
|
7
|
+
markup. A secret is never printed: the form says whether it is set and
|
|
8
|
+
where, and names the environment variable that would set it. #}
|
|
9
|
+
{% extends "layouts/shell.njk" %}
|
|
10
|
+
{% import "components/fields.njk" as field %}
|
|
11
|
+
{% from "components/badge.njk" import status %}
|
|
12
|
+
{% from "components/button.njk" import button %}
|
|
13
|
+
{% from "components/card.njk" import card, cardActions %}
|
|
14
|
+
{% from "components/table.njk" import table %}
|
|
15
|
+
|
|
16
|
+
{% macro text(parts) -%}
|
|
17
|
+
{%- for part in parts -%}
|
|
18
|
+
{%- if part.code is defined -%}<code>{{ part.code }}</code>{%- else -%}{{ part }}{%- endif -%}
|
|
19
|
+
{%- endfor -%}
|
|
20
|
+
{%- endmacro %}
|
|
21
|
+
|
|
22
|
+
{% block title %}{{ title }}{% endblock %}
|
|
23
|
+
|
|
24
|
+
{% block content %}
|
|
25
|
+
<h1 class="mb-6 text-2xl font-bold">{{ title }}</h1>
|
|
26
|
+
|
|
27
|
+
{% if problems.length %}
|
|
28
|
+
{% call field.summary('Nothing was saved. Fix the fields marked below.') %}
|
|
29
|
+
{% for setting in problems %}{{ field.problem(setting.id, setting.error) }}{% endfor %}
|
|
30
|
+
{% endcall %}
|
|
31
|
+
{% endif %}
|
|
32
|
+
|
|
33
|
+
<div class="grid max-w-5xl grid-cols-1 gap-6">
|
|
34
|
+
{% if settings.length or actions.length %}
|
|
35
|
+
{% call card(title='Settings' if settings.length else 'Actions') %}
|
|
36
|
+
{% if settings.length %}
|
|
37
|
+
<form method="post" action="{{ postUrl }}">
|
|
38
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
39
|
+
<input type="hidden" name="{{ actionField }}" value="{{ saveAction }}" />
|
|
40
|
+
{% for setting in settings %}
|
|
41
|
+
{% set label = setting.label | escape %}
|
|
42
|
+
{% set error = setting.error or setting.stored %}
|
|
43
|
+
{% if setting.type == 'secret' %}
|
|
44
|
+
{% set hint %}{% if setting.hint %}{{ setting.hint }} {% endif %}{% if setting.source == 'environment' %}Set by the environment variable <code>{{ setting.variable }}</code>. Change it there.{% elif setting.source == 'file' %}Set in <code>{{ secretsFile }}</code>. Leave the box blank to keep it. The environment variable <code>{{ setting.variable }}</code> would win over it.{% else %}Not set. Or set the environment variable <code>{{ setting.variable }}</code>.{% endif %}{% endset %}
|
|
45
|
+
{% if setting.source == 'environment' %}
|
|
46
|
+
<div class="fieldset">
|
|
47
|
+
<p class="fieldset-legend">{{ label }} {{ status('connected', 'Set') }}</p>
|
|
48
|
+
<p class="label block whitespace-normal">{{ hint | safe }}</p>
|
|
49
|
+
</div>
|
|
50
|
+
{% else %}
|
|
51
|
+
{{ field.password(setting.id, setting.name,
|
|
52
|
+
label ~ ' ' ~ (status('connected', 'Set') if setting.source == 'file' else status('missing', 'Not set')),
|
|
53
|
+
hint=hint, error=setting.error, autocomplete='off', spellcheck='false',
|
|
54
|
+
placeholder=('Leave blank to keep it' if setting.source == 'file' else '')) }}
|
|
55
|
+
{% if setting.source == 'file' %}
|
|
56
|
+
{{ field.checkbox(setting.id ~ '-forget', setting.forgetName, 'Forget the stored ' ~ label) }}
|
|
57
|
+
{% endif %}
|
|
58
|
+
{% endif %}
|
|
59
|
+
{% else %}
|
|
60
|
+
{% set hint %}{{ setting.hint }}{% endset %}
|
|
61
|
+
{% if setting.type == 'checkbox' %}
|
|
62
|
+
{{ field.checkbox(setting.id, setting.name, label, checked=setting.checked,
|
|
63
|
+
hint=hint, error=error) }}
|
|
64
|
+
{% elif setting.type == 'select' %}
|
|
65
|
+
{% call field.select(setting.id, setting.name, label, hint=hint, error=error) %}
|
|
66
|
+
{% for option in setting.options %}
|
|
67
|
+
<option value="{{ option.value }}"{% if option.selected %} selected{% endif %}>{{ option.label }}</option>
|
|
68
|
+
{% endfor %}
|
|
69
|
+
{% endcall %}
|
|
70
|
+
{% else %}
|
|
71
|
+
{{ field.text(setting.id, setting.name, label, setting.value, hint=hint, error=error,
|
|
72
|
+
inputmode=('url' if setting.type == 'url' else ''), spellcheck='false') }}
|
|
73
|
+
{% endif %}
|
|
74
|
+
{% endif %}
|
|
75
|
+
{% endfor %}
|
|
76
|
+
<div class="mt-2">{{ button('Save settings', type='submit', color='primary') }}</div>
|
|
77
|
+
</form>
|
|
78
|
+
{% endif %}
|
|
79
|
+
|
|
80
|
+
{% for action in actions %}
|
|
81
|
+
<form method="post" action="{{ postUrl }}">
|
|
82
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
83
|
+
<input type="hidden" name="{{ actionField }}" value="{{ action.id }}" />
|
|
84
|
+
{{ button(action.label, type='submit') }}
|
|
85
|
+
</form>
|
|
86
|
+
{% endfor %}
|
|
87
|
+
|
|
88
|
+
{% if settings.length %}
|
|
89
|
+
<p class="text-sm">
|
|
90
|
+
Settings other than secrets are kept under this plugin's key in
|
|
91
|
+
<code>content/_data/site.json</code>. Secrets are kept in
|
|
92
|
+
<code>{{ secretsFile }}</code> at mode <code>0600</code> and are never shown here.
|
|
93
|
+
</p>
|
|
94
|
+
{% endif %}
|
|
95
|
+
{% endcall %}
|
|
96
|
+
{% endif %}
|
|
97
|
+
|
|
98
|
+
{% for entry in cards %}
|
|
99
|
+
{% call card(title=entry.title) %}
|
|
100
|
+
{% for block in entry.blocks %}
|
|
101
|
+
{% if block.table %}
|
|
102
|
+
{% call table(block.table.caption, inCard=true) %}
|
|
103
|
+
<thead>
|
|
104
|
+
<tr>
|
|
105
|
+
{% for column in block.table.columns %}<th scope="col">{{ column }}</th>{% endfor %}
|
|
106
|
+
</tr>
|
|
107
|
+
</thead>
|
|
108
|
+
<tbody>
|
|
109
|
+
{% for row in block.table.rows %}
|
|
110
|
+
<tr>
|
|
111
|
+
{% for cell in row %}
|
|
112
|
+
{% if cell.time is defined %}
|
|
113
|
+
<td class="whitespace-nowrap">{% if cell.time %}{{ cell.time | date('readable') }}{% else %}Never{% endif %}</td>
|
|
114
|
+
{% else %}
|
|
115
|
+
<td>{{ text([cell]) }}</td>
|
|
116
|
+
{% endif %}
|
|
117
|
+
{% endfor %}
|
|
118
|
+
</tr>
|
|
119
|
+
{% endfor %}
|
|
120
|
+
</tbody>
|
|
121
|
+
{% endcall %}
|
|
122
|
+
{% else %}
|
|
123
|
+
<p class="text-sm">{{ text(block.paragraph) }}</p>
|
|
124
|
+
{% endif %}
|
|
125
|
+
{% endfor %}
|
|
126
|
+
{% endcall %}
|
|
127
|
+
{% endfor %}
|
|
128
|
+
</div>
|
|
129
|
+
{% endblock %}
|
package/admin/static/admin.css
CHANGED
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
--container-md: 28rem;
|
|
45
45
|
--container-2xl: 42rem;
|
|
46
46
|
--container-3xl: 48rem;
|
|
47
|
+
--container-5xl: 64rem;
|
|
47
48
|
--text-xs: .75rem;
|
|
48
49
|
--text-xs--line-height: calc(1 / .75);
|
|
49
50
|
--text-sm: .875rem;
|
|
@@ -1572,11 +1573,122 @@
|
|
|
1572
1573
|
@layer components;
|
|
1573
1574
|
|
|
1574
1575
|
@layer utilities {
|
|
1575
|
-
.\@container {
|
|
1576
|
-
container-type: inline-size;
|
|
1577
|
-
}
|
|
1578
|
-
|
|
1579
1576
|
@layer daisyui.l1.l2.l3 {
|
|
1577
|
+
.range {
|
|
1578
|
+
appearance: none;
|
|
1579
|
+
webkit-appearance: none;
|
|
1580
|
+
--range-thumb: var(--color-base-100);
|
|
1581
|
+
--range-thumb-size: calc(var(--size-selector, .25rem) * 6);
|
|
1582
|
+
--range-progress: currentColor;
|
|
1583
|
+
--range-fill: 1;
|
|
1584
|
+
--range-p: .25rem;
|
|
1585
|
+
--range-bg: currentColor;
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1589
|
+
.range {
|
|
1590
|
+
--range-bg: color-mix(in oklab, currentColor 10%, #0000);
|
|
1591
|
+
}
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
.range {
|
|
1595
|
+
--range-fill-x: calc((var(--range-dir, 1) * -100cqw) - (var(--range-dir, 1) * var(--range-thumb-size) / 2));
|
|
1596
|
+
--range-fill-y: 0;
|
|
1597
|
+
--range-fill-spread: calc(100cqw * var(--range-fill));
|
|
1598
|
+
cursor: pointer;
|
|
1599
|
+
vertical-align: middle;
|
|
1600
|
+
--radius-selector-max: calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));
|
|
1601
|
+
border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
|
|
1602
|
+
width: clamp(3rem, 20rem, 100%);
|
|
1603
|
+
height: var(--range-thumb-size);
|
|
1604
|
+
background-color: #0000;
|
|
1605
|
+
border: none;
|
|
1606
|
+
overflow: hidden;
|
|
1607
|
+
container-type: inline-size;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
[dir="rtl"] .range {
|
|
1611
|
+
--range-dir: -1;
|
|
1612
|
+
}
|
|
1613
|
+
|
|
1614
|
+
.range:focus {
|
|
1615
|
+
outline: none;
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
.range:focus-visible {
|
|
1619
|
+
outline-offset: 2px;
|
|
1620
|
+
outline: 2px solid;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
.range::-webkit-slider-runnable-track {
|
|
1624
|
+
background-color: var(--range-bg);
|
|
1625
|
+
border-radius: var(--radius-selector);
|
|
1626
|
+
width: 100%;
|
|
1627
|
+
height: calc(var(--range-thumb-size) * .5);
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
@media (forced-colors: active) {
|
|
1631
|
+
.range::-webkit-slider-runnable-track {
|
|
1632
|
+
border: 1px solid;
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
.range::-moz-range-track {
|
|
1636
|
+
border: 1px solid;
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
|
|
1640
|
+
.range::-moz-range-track {
|
|
1641
|
+
background-color: var(--range-bg);
|
|
1642
|
+
border-radius: var(--radius-selector);
|
|
1643
|
+
width: 100%;
|
|
1644
|
+
height: calc(var(--range-thumb-size) * .5);
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
.range::-webkit-slider-thumb {
|
|
1648
|
+
box-sizing: border-box;
|
|
1649
|
+
border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
|
|
1650
|
+
background-color: var(--range-thumb);
|
|
1651
|
+
height: var(--range-thumb-size);
|
|
1652
|
+
width: var(--range-thumb-size);
|
|
1653
|
+
border: var(--range-p) solid;
|
|
1654
|
+
appearance: none;
|
|
1655
|
+
webkit-appearance: none;
|
|
1656
|
+
color: var(--range-progress);
|
|
1657
|
+
box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
|
|
1658
|
+
position: relative;
|
|
1659
|
+
inset-block-start: 50%;
|
|
1660
|
+
transform: translateY(-50%);
|
|
1661
|
+
}
|
|
1662
|
+
|
|
1663
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1664
|
+
.range::-webkit-slider-thumb {
|
|
1665
|
+
box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
.range::-moz-range-thumb {
|
|
1670
|
+
box-sizing: border-box;
|
|
1671
|
+
border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
|
|
1672
|
+
height: var(--range-thumb-size);
|
|
1673
|
+
width: var(--range-thumb-size);
|
|
1674
|
+
border: var(--range-p) solid;
|
|
1675
|
+
color: var(--range-progress);
|
|
1676
|
+
box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
|
|
1677
|
+
background-color: currentColor;
|
|
1678
|
+
position: relative;
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1682
|
+
.range::-moz-range-thumb {
|
|
1683
|
+
box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
.range:disabled {
|
|
1688
|
+
cursor: not-allowed;
|
|
1689
|
+
opacity: .3;
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1580
1692
|
:where(.drawer-side) {
|
|
1581
1693
|
overflow: hidden;
|
|
1582
1694
|
}
|
|
@@ -4257,6 +4369,10 @@
|
|
|
4257
4369
|
}
|
|
4258
4370
|
}
|
|
4259
4371
|
|
|
4372
|
+
.\@container {
|
|
4373
|
+
container-type: inline-size;
|
|
4374
|
+
}
|
|
4375
|
+
|
|
4260
4376
|
@layer daisyui.l1.l2 {
|
|
4261
4377
|
.drawer-open > .drawer-side {
|
|
4262
4378
|
overflow-y: auto;
|
|
@@ -6432,6 +6548,10 @@
|
|
|
6432
6548
|
margin-top: calc(var(--spacing) * -1);
|
|
6433
6549
|
}
|
|
6434
6550
|
|
|
6551
|
+
.mt-0\.5 {
|
|
6552
|
+
margin-top: calc(var(--spacing) * .5);
|
|
6553
|
+
}
|
|
6554
|
+
|
|
6435
6555
|
.mt-1 {
|
|
6436
6556
|
margin-top: var(--spacing);
|
|
6437
6557
|
}
|
|
@@ -6583,6 +6703,10 @@
|
|
|
6583
6703
|
max-width: var(--container-3xl);
|
|
6584
6704
|
}
|
|
6585
6705
|
|
|
6706
|
+
.max-w-5xl {
|
|
6707
|
+
max-width: var(--container-5xl);
|
|
6708
|
+
}
|
|
6709
|
+
|
|
6586
6710
|
.max-w-full {
|
|
6587
6711
|
max-width: 100%;
|
|
6588
6712
|
}
|
|
@@ -6812,6 +6936,10 @@
|
|
|
6812
6936
|
padding-top: var(--geekity-admin-bar-height);
|
|
6813
6937
|
}
|
|
6814
6938
|
|
|
6939
|
+
.pt-1 {
|
|
6940
|
+
padding-top: var(--spacing);
|
|
6941
|
+
}
|
|
6942
|
+
|
|
6815
6943
|
.pt-4 {
|
|
6816
6944
|
padding-top: calc(var(--spacing) * 4);
|
|
6817
6945
|
}
|
|
@@ -6884,6 +7012,10 @@
|
|
|
6884
7012
|
white-space: pre-line;
|
|
6885
7013
|
}
|
|
6886
7014
|
|
|
7015
|
+
.whitespace-pre-wrap {
|
|
7016
|
+
white-space: pre-wrap;
|
|
7017
|
+
}
|
|
7018
|
+
|
|
6887
7019
|
.text-base-content, .text-base-content\/70 {
|
|
6888
7020
|
color: var(--color-base-content);
|
|
6889
7021
|
}
|
|
@@ -6976,6 +7108,10 @@
|
|
|
6976
7108
|
outline-color: var(--color-base-content);
|
|
6977
7109
|
}
|
|
6978
7110
|
|
|
7111
|
+
.first\:pt-0:first-child {
|
|
7112
|
+
padding-top: 0;
|
|
7113
|
+
}
|
|
7114
|
+
|
|
6979
7115
|
.read-only\:border-dashed:read-only {
|
|
6980
7116
|
--tw-border-style: dashed;
|
|
6981
7117
|
border-style: dashed;
|
|
@@ -7261,6 +7397,10 @@
|
|
|
7261
7397
|
}
|
|
7262
7398
|
|
|
7263
7399
|
@media (min-width: 80rem) {
|
|
7400
|
+
.xl\:grid-cols-2 {
|
|
7401
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
7402
|
+
}
|
|
7403
|
+
|
|
7264
7404
|
.xl\:grid-cols-\[minmax\(0\,1fr\)_20rem\] {
|
|
7265
7405
|
grid-template-columns: minmax(0, 1fr) 20rem;
|
|
7266
7406
|
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/* The buttons running plugins put beside the editor's title, description and
|
|
2
|
+
tags (decision-33). Each posts the form as it stands to its plugin's
|
|
3
|
+
endpoint, which answers { ok, value }, { ok, choices } or { ok: false,
|
|
4
|
+
message }, and shows the suggestion with Accept and Dismiss. Choices come
|
|
5
|
+
only beside the tags field, each drawn from the page's template row with a
|
|
6
|
+
box to tick, under a heading row wherever its group changes, and Accept
|
|
7
|
+
adds the ticked ones. Accept fills the field and saves nothing; a save is
|
|
8
|
+
still only the form's own buttons.
|
|
9
|
+
|
|
10
|
+
A file rather than an inline script, loaded from the admin's own origin
|
|
11
|
+
like slug.js, so the admin's policy stays `script-src 'self'` and
|
|
12
|
+
`connect-src 'self'`. Plain ES5-shaped browser JavaScript, served as it is
|
|
13
|
+
written. */
|
|
14
|
+
(function () {
|
|
15
|
+
function plainForm(form) {
|
|
16
|
+
var fields = new URLSearchParams();
|
|
17
|
+
new FormData(form).forEach(function (value, name) {
|
|
18
|
+
if (typeof value === 'string') fields.append(name, value);
|
|
19
|
+
});
|
|
20
|
+
return fields;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function tagsOf(value) {
|
|
24
|
+
return value
|
|
25
|
+
.split(',')
|
|
26
|
+
.map(function (tag) {
|
|
27
|
+
return tag.trim();
|
|
28
|
+
})
|
|
29
|
+
.filter(function (tag) {
|
|
30
|
+
return tag !== '';
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* A tags suggestion adds what the field does not already hold; a title or
|
|
35
|
+
description suggestion replaces the field. */
|
|
36
|
+
function accepted(field, value) {
|
|
37
|
+
if (field.id !== 'editor-tags') return value;
|
|
38
|
+
var held = tagsOf(field.value);
|
|
39
|
+
var known = held.map(function (tag) {
|
|
40
|
+
return tag.toLowerCase();
|
|
41
|
+
});
|
|
42
|
+
tagsOf(value).forEach(function (tag) {
|
|
43
|
+
if (known.indexOf(tag.toLowerCase()) === -1) {
|
|
44
|
+
held.push(tag);
|
|
45
|
+
known.push(tag.toLowerCase());
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return held.join(', ');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function enhance(block, field) {
|
|
52
|
+
var url = block.getAttribute('data-editor-action');
|
|
53
|
+
var press = block.querySelector('button');
|
|
54
|
+
var status = block.querySelector('[role="status"]');
|
|
55
|
+
var suggestion = block.querySelector('[role="group"]');
|
|
56
|
+
var text = suggestion && suggestion.querySelector('p');
|
|
57
|
+
var list = suggestion && suggestion.querySelector('[data-editor-choices]');
|
|
58
|
+
var row = block.querySelector('template[data-editor-choice]');
|
|
59
|
+
var heading = block.querySelector('template[data-editor-choice-group]');
|
|
60
|
+
if (!url || !press || !status || !text || !list || !row || !heading) return;
|
|
61
|
+
var buttons = suggestion.querySelectorAll('button');
|
|
62
|
+
var accept = buttons[0];
|
|
63
|
+
var dismiss = buttons[1];
|
|
64
|
+
var pending = null;
|
|
65
|
+
var offered = '';
|
|
66
|
+
|
|
67
|
+
function say(message, failed) {
|
|
68
|
+
status.textContent = message;
|
|
69
|
+
status.classList.toggle('text-error', failed === true);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function close() {
|
|
73
|
+
suggestion.hidden = true;
|
|
74
|
+
offered = '';
|
|
75
|
+
list.replaceChildren();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function drawChoices(choices) {
|
|
79
|
+
var group = '';
|
|
80
|
+
choices.forEach(function (choice) {
|
|
81
|
+
var named = choice.group ? String(choice.group) : '';
|
|
82
|
+
if (named !== group && named !== '') {
|
|
83
|
+
var title = heading.content.firstElementChild.cloneNode(true);
|
|
84
|
+
title.textContent = named;
|
|
85
|
+
list.appendChild(title);
|
|
86
|
+
}
|
|
87
|
+
group = named;
|
|
88
|
+
var item = row.content.firstElementChild.cloneNode(true);
|
|
89
|
+
var badge = item.querySelector('.badge');
|
|
90
|
+
item.querySelector('input').value = String(choice.value);
|
|
91
|
+
item.querySelector('[data-choice-value]').textContent = String(choice.value);
|
|
92
|
+
badge.textContent = choice.badge ? String(choice.badge) : '';
|
|
93
|
+
badge.hidden = !choice.badge;
|
|
94
|
+
item.querySelector('[data-choice-note]').textContent = choice.note
|
|
95
|
+
? String(choice.note)
|
|
96
|
+
: '';
|
|
97
|
+
list.appendChild(item);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function ticked() {
|
|
102
|
+
var values = [];
|
|
103
|
+
list.querySelectorAll('input:checked').forEach(function (box) {
|
|
104
|
+
values.push(box.value);
|
|
105
|
+
});
|
|
106
|
+
return values.join(', ');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
press.hidden = false;
|
|
110
|
+
press.addEventListener('click', function () {
|
|
111
|
+
if (pending) pending.abort();
|
|
112
|
+
var controller = new AbortController();
|
|
113
|
+
pending = controller;
|
|
114
|
+
close();
|
|
115
|
+
press.disabled = true;
|
|
116
|
+
say('Asking for a suggestion…');
|
|
117
|
+
|
|
118
|
+
fetch(url, {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
body: plainForm(field.form),
|
|
121
|
+
credentials: 'same-origin',
|
|
122
|
+
headers: { accept: 'application/json' },
|
|
123
|
+
signal: controller.signal,
|
|
124
|
+
})
|
|
125
|
+
.then(function (response) {
|
|
126
|
+
var type = response.headers.get('content-type') || '';
|
|
127
|
+
if (type.indexOf('application/json') === -1) {
|
|
128
|
+
throw new Error(
|
|
129
|
+
response.status === 403
|
|
130
|
+
? 'The site refused the request because this page is out of date. Copy your changes somewhere safe, then reload the page.'
|
|
131
|
+
: response.redirected
|
|
132
|
+
? 'You are signed out. Sign in again in another tab, then try again.'
|
|
133
|
+
: 'The site answered ' + response.status + ' instead of a suggestion.',
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
return response.json();
|
|
137
|
+
})
|
|
138
|
+
.then(function (answer) {
|
|
139
|
+
if (answer.ok && Array.isArray(answer.choices)) {
|
|
140
|
+
if (answer.choices.length === 0) {
|
|
141
|
+
say('There was nothing to suggest.');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
text.hidden = true;
|
|
145
|
+
drawChoices(answer.choices);
|
|
146
|
+
list.hidden = false;
|
|
147
|
+
suggestion.hidden = false;
|
|
148
|
+
say('');
|
|
149
|
+
list.querySelector('input').focus();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (answer.ok) {
|
|
153
|
+
offered = String(answer.value);
|
|
154
|
+
text.textContent = offered;
|
|
155
|
+
text.hidden = false;
|
|
156
|
+
list.hidden = true;
|
|
157
|
+
suggestion.hidden = false;
|
|
158
|
+
say('');
|
|
159
|
+
accept.focus();
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
say(String(answer.message), true);
|
|
163
|
+
if (answer.withdrawn) press.hidden = true;
|
|
164
|
+
})
|
|
165
|
+
.catch(function (error) {
|
|
166
|
+
if (controller.signal.aborted) return;
|
|
167
|
+
say(
|
|
168
|
+
error instanceof TypeError
|
|
169
|
+
? 'The site could not be reached. Check the connection and try again.'
|
|
170
|
+
: error.message,
|
|
171
|
+
true,
|
|
172
|
+
);
|
|
173
|
+
})
|
|
174
|
+
.then(function () {
|
|
175
|
+
if (pending === controller) pending = null;
|
|
176
|
+
press.disabled = false;
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
accept.addEventListener('click', function () {
|
|
181
|
+
field.value = accepted(field, list.hidden ? offered : ticked());
|
|
182
|
+
field.dispatchEvent(new Event('input', { bubbles: true }));
|
|
183
|
+
close();
|
|
184
|
+
say('');
|
|
185
|
+
field.focus();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
dismiss.addEventListener('click', function () {
|
|
189
|
+
close();
|
|
190
|
+
say('');
|
|
191
|
+
press.focus();
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var groups = document.querySelectorAll('[data-editor-actions]');
|
|
196
|
+
for (var i = 0; i < groups.length; i++) {
|
|
197
|
+
var field = document.getElementById(groups[i].getAttribute('data-editor-actions'));
|
|
198
|
+
if (!field || !field.form) continue;
|
|
199
|
+
var blocks = groups[i].querySelectorAll('[data-editor-action]');
|
|
200
|
+
for (var j = 0; j < blocks.length; j++) enhance(blocks[j], field);
|
|
201
|
+
}
|
|
202
|
+
})();
|
package/dist/admin/accounts.d.ts
CHANGED
|
@@ -93,9 +93,9 @@ export interface User {
|
|
|
93
93
|
* decision-14 calls this identity rather than cache: a follower's server
|
|
94
94
|
* keys the account by it for as long as the follow lasts, and a document
|
|
95
95
|
* served under it with a different `id` reads as a different person, not as
|
|
96
|
-
* a moved one. So a site arriving from
|
|
97
|
-
*
|
|
98
|
-
*
|
|
96
|
+
* a moved one. So a site arriving from another server keeps the
|
|
97
|
+
* `https://example.com/?author=2` its followers already hold, for the life
|
|
98
|
+
* of the user.
|
|
99
99
|
*
|
|
100
100
|
* The CMS never mints one — a user born here is an actor at their author URL
|
|
101
101
|
* and has no second name to keep — and no screen writes one: it arrives with
|
|
@@ -103,21 +103,6 @@ export interface User {
|
|
|
103
103
|
* stored, query string and all, because that is what has to be matched.
|
|
104
104
|
*/
|
|
105
105
|
readonly actorId?: string | undefined;
|
|
106
|
-
/**
|
|
107
|
-
* The number the WordPress ActivityPub plugin gave this person's actor, when
|
|
108
|
-
* they had one (TASK-70).
|
|
109
|
-
*
|
|
110
|
-
* The WordPress user id, which is what the plugin puts in the paths it
|
|
111
|
-
* publishes: `/wp-json/activitypub/1.0/actors/2/inbox` is user 2. Unlike
|
|
112
|
-
* {@link User.actorId} this is cache rather than identity — a follower's
|
|
113
|
-
* server replaces those paths the next time it refetches the actor — so it
|
|
114
|
-
* is only ever read behind the `wordpressActivityPub` site setting, and it
|
|
115
|
-
* is what maps a delivery arriving at one of those paths to a person.
|
|
116
|
-
*
|
|
117
|
-
* The CMS never mints one. It arrives with the import (TASK-71) or is typed
|
|
118
|
-
* into the file by hand, beside the stored actor id the same migration sets.
|
|
119
|
-
*/
|
|
120
|
-
readonly wordpressActorId?: number | undefined;
|
|
121
106
|
/** When the user was created, as an ISO 8601 instant. */
|
|
122
107
|
readonly createdAt: string;
|
|
123
108
|
}
|
|
@@ -353,12 +338,11 @@ export declare function setUserAdminTheme(input: {
|
|
|
353
338
|
theme: AdminTheme | undefined;
|
|
354
339
|
}): Promise<boolean>;
|
|
355
340
|
/**
|
|
356
|
-
* Thrown when the id being
|
|
341
|
+
* Thrown when the id being set already belongs to somebody else.
|
|
357
342
|
*
|
|
358
|
-
* Two accounts answering to one actor id is two people with one identity,
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
* import stops and says whose it is.
|
|
343
|
+
* Two accounts answering to one actor id is two people with one identity,
|
|
344
|
+
* which is not something to pick a winner for, so the write stops and says
|
|
345
|
+
* whose it is.
|
|
362
346
|
*/
|
|
363
347
|
export declare class ConflictingActorIdError extends Error {
|
|
364
348
|
readonly name = "ConflictingActorIdError";
|
|
@@ -367,30 +351,25 @@ export declare class ConflictingActorIdError extends Error {
|
|
|
367
351
|
constructor(username: string, what: string);
|
|
368
352
|
}
|
|
369
353
|
/**
|
|
370
|
-
* Write the
|
|
371
|
-
* carries: the actor id its followers hold, and the number its paths are built
|
|
372
|
-
* from (TASK-69, TASK-70).
|
|
354
|
+
* Write the actor id a user was published under elsewhere (TASK-69).
|
|
373
355
|
*
|
|
374
|
-
* The only writer of
|
|
375
|
-
*
|
|
376
|
-
* something a form should be able to retype.
|
|
377
|
-
*
|
|
356
|
+
* The only writer of the field, and it is not a screen: doc-4 makes a stored
|
|
357
|
+
* actor id identity for the life of the account, and identity is not
|
|
358
|
+
* something a form should be able to retype. A plugin's import command is
|
|
359
|
+
* what calls this.
|
|
378
360
|
*
|
|
379
|
-
*
|
|
380
|
-
*
|
|
381
|
-
*
|
|
382
|
-
*
|
|
383
|
-
* writes nothing, which is what makes the import idempotent.
|
|
361
|
+
* The id has to be unique across the file, and the check is inside the write
|
|
362
|
+
* for the reason {@link createUser}'s duplicate check is: it is a rule about
|
|
363
|
+
* the file rather than about one user. Returns whether anything changed, so a
|
|
364
|
+
* second run with the same id writes nothing.
|
|
384
365
|
*/
|
|
385
|
-
export declare function
|
|
366
|
+
export declare function setUserActorId(input: {
|
|
386
367
|
/** Which site's users file to write. */
|
|
387
368
|
dataDir: string;
|
|
388
369
|
/** Whose record, by login name. */
|
|
389
370
|
username: string;
|
|
390
|
-
/** The id
|
|
371
|
+
/** The id they were published under, query string and all. */
|
|
391
372
|
actorId: string;
|
|
392
|
-
/** The WordPress user id. */
|
|
393
|
-
wordpressActorId: number;
|
|
394
373
|
}): Promise<boolean>;
|
|
395
374
|
/** Thrown when a command names a user this site does not have. */
|
|
396
375
|
export declare class UnknownUserError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/admin/accounts.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,uCAAuC;AACvC,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,gFAAgF;AAChF,eAAO,MAAM,eAAe,MAAQ,CAAC;AAErC,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,mFAAmF;AACnF,MAAM,WAAW,IAAI;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACvE;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC1E;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC3C;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/admin/accounts.ts"],"names":[],"mappings":"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"}
|