@geekity/cms 0.35.0 → 0.37.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/admin/components/blocks.njk +250 -0
- package/admin/components/card.njk +4 -2
- package/admin/components/job-status.njk +15 -10
- package/admin/components/upload.njk +26 -0
- package/admin/pages/comments/all.njk +1 -1
- package/admin/pages/dashboard/home.njk +33 -32
- package/admin/pages/documents/editor.njk +34 -19
- package/admin/pages/federation/followers.njk +3 -2
- package/admin/pages/media/file.njk +5 -4
- package/admin/pages/media/library.njk +7 -3
- package/admin/pages/plugins/screen.njk +5 -35
- package/admin/pages/settings/general.njk +4 -1
- package/admin/pages/tools/export.njk +54 -51
- package/admin/pages/tools/maintenance.njk +2 -1
- package/admin/pages/users/edit.njk +3 -0
- package/admin/src/admin.css +1 -0
- package/admin/static/admin.css +374 -0
- package/admin/static/job-status.js +158 -0
- package/admin/static/upload-drop.js +225 -0
- package/dist/admin/blocks.d.ts +133 -0
- package/dist/admin/blocks.d.ts.map +1 -0
- package/dist/admin/blocks.js +454 -0
- package/dist/admin/blocks.js.map +1 -0
- package/dist/admin/core-widgets.d.ts +3 -0
- package/dist/admin/core-widgets.d.ts.map +1 -0
- package/dist/admin/core-widgets.js +17 -0
- package/dist/admin/core-widgets.js.map +1 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +0 -2
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/engagement.d.ts +16 -0
- package/dist/admin/engagement.d.ts.map +1 -0
- package/dist/admin/engagement.js +38 -0
- package/dist/admin/engagement.js.map +1 -0
- package/dist/admin/federation.d.ts +2 -0
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +2 -1
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/formatting.d.ts +1 -0
- package/dist/admin/formatting.d.ts.map +1 -1
- package/dist/admin/formatting.js +18 -0
- package/dist/admin/formatting.js.map +1 -1
- package/dist/admin/index.d.ts +2 -2
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +2 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/job-status.d.ts +1 -0
- package/dist/admin/job-status.d.ts.map +1 -1
- package/dist/admin/job-status.js +1 -0
- package/dist/admin/job-status.js.map +1 -1
- package/dist/admin/media.d.ts +6 -9
- package/dist/admin/media.d.ts.map +1 -1
- package/dist/admin/media.js +85 -27
- package/dist/admin/media.js.map +1 -1
- package/dist/admin/posts-by-path.d.ts +11 -0
- package/dist/admin/posts-by-path.d.ts.map +1 -0
- package/dist/admin/posts-by-path.js +59 -0
- package/dist/admin/posts-by-path.js.map +1 -0
- package/dist/admin/routes.d.ts +0 -2
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +24 -12
- package/dist/admin/routes.js.map +1 -1
- 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/admin/tools.js +1 -1
- package/dist/admin/tools.js.map +1 -1
- package/dist/admin/uploads.d.ts +2 -1
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +5 -2
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/widget-fediverse.d.ts +3 -0
- package/dist/admin/widget-fediverse.d.ts.map +1 -0
- package/dist/admin/widget-fediverse.js +49 -0
- package/dist/admin/widget-fediverse.js.map +1 -0
- package/dist/admin/widget-followers.d.ts +3 -0
- package/dist/admin/widget-followers.d.ts.map +1 -0
- package/dist/admin/widget-followers.js +37 -0
- package/dist/admin/widget-followers.js.map +1 -0
- package/dist/admin/widget-health.d.ts +3 -0
- package/dist/admin/widget-health.d.ts.map +1 -0
- package/dist/admin/widget-health.js +103 -0
- package/dist/admin/widget-health.js.map +1 -0
- package/dist/admin/widget-interactions.d.ts +4 -0
- package/dist/admin/widget-interactions.d.ts.map +1 -0
- package/dist/admin/widget-interactions.js +99 -0
- package/dist/admin/widget-interactions.js.map +1 -0
- package/dist/admin/widget-posting.d.ts +3 -0
- package/dist/admin/widget-posting.d.ts.map +1 -0
- package/dist/admin/widget-posting.js +111 -0
- package/dist/admin/widget-posting.js.map +1 -0
- package/dist/admin/widget-scheduled.d.ts +4 -0
- package/dist/admin/widget-scheduled.d.ts.map +1 -0
- package/dist/admin/widget-scheduled.js +30 -0
- package/dist/admin/widget-scheduled.js.map +1 -0
- package/dist/admin/widget-top-posts.d.ts +4 -0
- package/dist/admin/widget-top-posts.d.ts.map +1 -0
- package/dist/admin/widget-top-posts.js +55 -0
- package/dist/admin/widget-top-posts.js.map +1 -0
- package/dist/admin/widgets.d.ts +35 -0
- package/dist/admin/widgets.d.ts.map +1 -0
- package/dist/admin/widgets.js +103 -0
- package/dist/admin/widgets.js.map +1 -0
- package/dist/cms/app.d.ts.map +1 -1
- package/dist/cms/app.js +2 -1
- package/dist/cms/app.js.map +1 -1
- package/dist/cms/boot.d.ts.map +1 -1
- package/dist/cms/boot.js +3 -2
- package/dist/cms/boot.js.map +1 -1
- package/dist/cms/services.d.ts.map +1 -1
- package/dist/cms/services.js +19 -0
- package/dist/cms/services.js.map +1 -1
- package/dist/content/alt-text.d.ts +1 -0
- package/dist/content/alt-text.d.ts.map +1 -1
- package/dist/content/alt-text.js +26 -1
- package/dist/content/alt-text.js.map +1 -1
- package/dist/content/sqlite/catalog.d.ts.map +1 -1
- package/dist/content/sqlite/catalog.js +15 -2
- package/dist/content/sqlite/catalog.js.map +1 -1
- package/dist/content/store.d.ts +10 -0
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js.map +1 -1
- package/dist/content/write.d.ts.map +1 -1
- package/dist/content/write.js +3 -1
- package/dist/content/write.js.map +1 -1
- package/dist/federation/backfill.d.ts +1 -1
- package/dist/federation/backfill.d.ts.map +1 -1
- package/dist/federation/backfill.js +5 -1
- package/dist/federation/backfill.js.map +1 -1
- package/dist/federation/follower-history.d.ts +16 -0
- package/dist/federation/follower-history.d.ts.map +1 -0
- package/dist/federation/follower-history.js +61 -0
- package/dist/federation/follower-history.js.map +1 -0
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +2 -1
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/records.d.ts +1 -0
- package/dist/federation/records.d.ts.map +1 -1
- package/dist/federation/records.js +24 -6
- package/dist/federation/records.js.map +1 -1
- package/dist/files/data-files.d.ts +1 -0
- package/dist/files/data-files.d.ts.map +1 -1
- package/dist/files/data-files.js +6 -0
- package/dist/files/data-files.js.map +1 -1
- package/dist/jobs/queue.d.ts.map +1 -1
- package/dist/jobs/queue.js +5 -0
- package/dist/jobs/queue.js.map +1 -1
- package/dist/jobs/types.d.ts +7 -0
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/types.js.map +1 -1
- package/dist/media/library.d.ts +9 -0
- package/dist/media/library.d.ts.map +1 -1
- package/dist/media/library.js +25 -1
- package/dist/media/library.js.map +1 -1
- package/dist/plugin.d.ts +275 -21
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +9 -8
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/fetch.d.ts +0 -5
- package/dist/plugins/fetch.d.ts.map +1 -1
- package/dist/plugins/fetch.js +31 -7
- package/dist/plugins/fetch.js.map +1 -1
- package/dist/plugins/host-api.d.ts +3 -0
- package/dist/plugins/host-api.d.ts.map +1 -0
- package/dist/plugins/host-api.js +8 -0
- package/dist/plugins/host-api.js.map +1 -0
- package/dist/plugins/install.d.ts.map +1 -1
- package/dist/plugins/install.js +4 -2
- package/dist/plugins/install.js.map +1 -1
- package/dist/plugins/page-tags.d.ts +8 -0
- package/dist/plugins/page-tags.d.ts.map +1 -0
- package/dist/plugins/page-tags.js +73 -0
- package/dist/plugins/page-tags.js.map +1 -0
- package/dist/plugins/registry.d.ts +4 -1
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +50 -9
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/site.js +1 -1
- package/dist/plugins/site.js.map +1 -1
- package/dist/store/admin-store.d.ts +2 -2
- package/dist/store/admin-store.d.ts.map +1 -1
- package/dist/store/admin-store.js.map +1 -1
- package/dist/store/comments.d.ts +7 -0
- package/dist/store/comments.d.ts.map +1 -1
- package/dist/store/comments.js +21 -0
- package/dist/store/comments.js.map +1 -1
- package/dist/store/deliveries.d.ts +1 -0
- package/dist/store/deliveries.d.ts.map +1 -1
- package/dist/store/deliveries.js +6 -0
- package/dist/store/deliveries.js.map +1 -1
- package/dist/store/inbox.d.ts +16 -0
- package/dist/store/inbox.d.ts.map +1 -1
- package/dist/store/inbox.js +62 -0
- package/dist/store/inbox.js.map +1 -1
- package/dist/store/queue-database.d.ts +6 -0
- package/dist/store/queue-database.d.ts.map +1 -1
- package/dist/store/queue-database.js +16 -1
- package/dist/store/queue-database.js.map +1 -1
- package/dist/store/webmentions.d.ts +1 -0
- package/dist/store/webmentions.d.ts.map +1 -1
- package/dist/store/webmentions.js +6 -0
- package/dist/store/webmentions.js.map +1 -1
- package/dist/web/env.d.ts +3 -0
- package/dist/web/env.d.ts.map +1 -1
- package/dist/web/feed-item.d.ts +4 -3
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +8 -2
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/listing-pages.d.ts.map +1 -1
- package/dist/web/listing-pages.js +7 -2
- package/dist/web/listing-pages.js.map +1 -1
- package/dist/web/page-tags.d.ts +4 -0
- package/dist/web/page-tags.d.ts.map +1 -0
- package/dist/web/page-tags.js +39 -0
- package/dist/web/page-tags.js.map +1 -0
- package/dist/web/render.d.ts +2 -0
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +14 -0
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +2 -1
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +3 -1
- package/dist/web/routes.js.map +1 -1
- package/package.json +6 -1
- package/themes/default/layouts/base.njk +6 -4
- package/dist/comments/routes.d.ts +0 -65
- package/dist/comments/routes.d.ts.map +0 -1
- package/dist/comments/routes.js +0 -235
- package/dist/comments/routes.js.map +0 -1
- package/dist/content/media.d.ts +0 -85
- package/dist/content/media.d.ts.map +0 -1
- package/dist/content/media.js +0 -237
- package/dist/content/media.js.map +0 -1
- package/dist/content/read-form.d.ts +0 -31
- package/dist/content/read-form.d.ts.map +0 -1
- package/dist/content/read-form.js +0 -157
- package/dist/content/read-form.js.map +0 -1
- package/dist/content/read.d.ts +0 -29
- package/dist/content/read.d.ts.map +0 -1
- package/dist/content/read.js +0 -82
- package/dist/content/read.js.map +0 -1
- package/dist/export/export-archives.d.ts +0 -29
- package/dist/export/export-archives.d.ts.map +0 -1
- package/dist/export/export-archives.js +0 -88
- package/dist/export/export-archives.js.map +0 -1
- package/dist/federation/mount.d.ts +0 -53
- package/dist/federation/mount.d.ts.map +0 -1
- package/dist/federation/mount.js +0 -344
- package/dist/federation/mount.js.map +0 -1
- package/dist/mail/credentials.d.ts +0 -62
- package/dist/mail/credentials.d.ts.map +0 -1
- package/dist/mail/credentials.js +0 -86
- package/dist/mail/credentials.js.map +0 -1
- package/dist/site/setting-rows.d.ts +0 -45
- package/dist/site/setting-rows.d.ts.map +0 -1
- package/dist/site/setting-rows.js +0 -361
- package/dist/site/setting-rows.js.map +0 -1
- package/dist/site/settings-form.d.ts +0 -30
- package/dist/site/settings-form.d.ts.map +0 -1
- package/dist/site/settings-form.js +0 -54
- package/dist/site/settings-form.js.map +0 -1
- package/dist/site/site-json.d.ts +0 -38
- package/dist/site/site-json.d.ts.map +0 -1
- package/dist/site/site-json.js +0 -69
- package/dist/site/site-json.js.map +0 -1
- package/dist/webmention/routes.d.ts +0 -37
- package/dist/webmention/routes.d.ts.map +0 -1
- package/dist/webmention/routes.js +0 -75
- package/dist/webmention/routes.js.map +0 -1
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
Everything works with JavaScript switched off: the upload form opens from a
|
|
6
6
|
<details>, the filters are a GET form, and a tile is a link. media.js opens
|
|
7
7
|
a tile's details in a dialog instead and steps through them with the arrow
|
|
8
|
-
keys. #}
|
|
8
|
+
keys, and upload-drop.js takes files dropped anywhere on the page. #}
|
|
9
9
|
{% extends "layouts/shell.njk" %}
|
|
10
10
|
{% from "components/alert.njk" import alert %}
|
|
11
11
|
{% from "components/badge.njk" import badge %}
|
|
12
12
|
{% from "components/button.njk" import button, buttonLink %}
|
|
13
13
|
{% from "components/pagination.njk" import pagination %}
|
|
14
14
|
{% from "components/tabs.njk" import tabs %}
|
|
15
|
+
{% from "components/upload.njk" import uploadControl %}
|
|
15
16
|
|
|
16
17
|
{% block title %}{{ heading }}{% endblock %}
|
|
17
18
|
|
|
@@ -34,12 +35,13 @@
|
|
|
34
35
|
<div class="mt-2">{{ button('Upload', type='submit', color='primary') }}</div>
|
|
35
36
|
</form>
|
|
36
37
|
</details>
|
|
38
|
+
{{ uploadControl('library', 'main', uploadsUrl) }}
|
|
37
39
|
</div>
|
|
38
40
|
|
|
39
41
|
{% if sweepNotice %}
|
|
40
|
-
<section id="strip-metadata-notice" class="mb-6 max-w-4xl" aria-label="Location and camera metadata">
|
|
42
|
+
<section id="strip-metadata-notice" class="mb-6 max-w-4xl" aria-label="Location and camera metadata"{% if sweepNotice.sweep %} data-job-status="{{ sweepNotice.sweep.name }}" data-job-state="{{ sweepNotice.sweep.state }}" data-job-label="{{ sweepNotice.sweep.label }}"{% if sweepNotice.sweep.active %} data-job-refresh="{{ sweepNotice.panelUrl }}" data-job-redraw="{{ listUrl }}"{% endif %}{% endif %}>
|
|
41
43
|
{% call alert(color='info', style='soft', direction='responsive', polite=true) %}
|
|
42
|
-
<span>
|
|
44
|
+
<span data-job-message>
|
|
43
45
|
{% if sweepNotice.sweep and sweepNotice.sweep.active %}
|
|
44
46
|
The sweep that strips location and camera metadata from older uploads is {{ sweepNotice.sweep.label | lower }}.
|
|
45
47
|
{% else %}
|
|
@@ -129,5 +131,7 @@
|
|
|
129
131
|
{% endif %}
|
|
130
132
|
|
|
131
133
|
<script defer src="{{ assetPrefix }}copy.js"></script>
|
|
134
|
+
<script defer src="{{ assetPrefix }}upload-drop.js"></script>
|
|
132
135
|
<script defer src="{{ assetPrefix }}media.js"></script>
|
|
136
|
+
<script defer src="{{ assetPrefix }}job-status.js"></script>
|
|
133
137
|
{% endblock %}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
{# /admin/plugins/<package name>: a plugin's own screen (decision-33). The
|
|
2
|
-
plugin hands over cards of
|
|
3
|
-
them, so a plugin writes no markup and everything it says is
|
|
2
|
+
plugin hands over cards of blocks as data (components/blocks.njk) and this
|
|
3
|
+
draws them, so a plugin writes no markup and everything it says is
|
|
4
|
+
escaped. #}
|
|
4
5
|
{% extends "layouts/shell.njk" %}
|
|
5
6
|
{% import "components/fields.njk" as field %}
|
|
6
7
|
{% from "components/setting-fields.njk" import settingFields %}
|
|
7
8
|
{% from "components/button.njk" import button %}
|
|
8
9
|
{% from "components/card.njk" import card, cardActions %}
|
|
9
|
-
{% from "components/
|
|
10
|
-
|
|
11
|
-
{% macro text(parts) -%}
|
|
12
|
-
{%- for part in parts -%}
|
|
13
|
-
{%- if part.code is defined -%}<code>{{ part.code }}</code>{%- else -%}{{ part }}{%- endif -%}
|
|
14
|
-
{%- endfor -%}
|
|
15
|
-
{%- endmacro %}
|
|
10
|
+
{% from "components/blocks.njk" import block %}
|
|
16
11
|
|
|
17
12
|
{% block title %}{{ title }}{% endblock %}
|
|
18
13
|
|
|
@@ -56,32 +51,7 @@
|
|
|
56
51
|
|
|
57
52
|
{% for entry in cards %}
|
|
58
53
|
{% call card(title=entry.title) %}
|
|
59
|
-
{% for
|
|
60
|
-
{% if block.table %}
|
|
61
|
-
{% call table(block.table.caption, inCard=true) %}
|
|
62
|
-
<thead>
|
|
63
|
-
<tr>
|
|
64
|
-
{% for column in block.table.columns %}<th scope="col">{{ column }}</th>{% endfor %}
|
|
65
|
-
</tr>
|
|
66
|
-
</thead>
|
|
67
|
-
<tbody>
|
|
68
|
-
{% for row in block.table.rows %}
|
|
69
|
-
<tr>
|
|
70
|
-
{% for cell in row %}
|
|
71
|
-
{% if cell.time is defined %}
|
|
72
|
-
<td class="whitespace-nowrap">{% if cell.time %}{{ cell.time | date('readable') }}{% else %}Never{% endif %}</td>
|
|
73
|
-
{% else %}
|
|
74
|
-
<td>{{ text([cell]) }}</td>
|
|
75
|
-
{% endif %}
|
|
76
|
-
{% endfor %}
|
|
77
|
-
</tr>
|
|
78
|
-
{% endfor %}
|
|
79
|
-
</tbody>
|
|
80
|
-
{% endcall %}
|
|
81
|
-
{% else %}
|
|
82
|
-
<p class="text-sm">{{ text(block.paragraph) }}</p>
|
|
83
|
-
{% endif %}
|
|
84
|
-
{% endfor %}
|
|
54
|
+
{% for data in entry.blocks %}{{ block(data) }}{% endfor %}
|
|
85
55
|
{% endcall %}
|
|
86
56
|
{% endfor %}
|
|
87
57
|
</div>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
{% from "components/badge.njk" import status %}
|
|
5
5
|
{% from "components/button.njk" import button %}
|
|
6
6
|
{% from "components/card.njk" import card, cardActions %}
|
|
7
|
+
{% from "components/upload.njk" import uploadControl %}
|
|
7
8
|
|
|
8
9
|
{% block settingsProblems %}
|
|
9
10
|
{{ field.problem('settings-title', problems.title) }}
|
|
@@ -49,9 +50,11 @@
|
|
|
49
50
|
{{ field.text('settings-locale', fields.locale, 'Locale', form.locale,
|
|
50
51
|
error=problems.locale, hintHtml=localeHint) }}
|
|
51
52
|
|
|
52
|
-
{% set iconHint %}A square image at least 512 pixels wide
|
|
53
|
+
{% set iconHint %}A square image at least 512 pixels wide in the media library: a path such as <code>/uploads/2026/10/icon.png</code>. It is the favicon, the home screen icon, <code>/favicon.ico</code> and the web app manifest's icon. Anything not square is cropped to its middle.{% endset %}
|
|
53
54
|
{{ field.text('settings-icon', fields.icon, 'Site icon', form.icon,
|
|
54
55
|
error=problems.icon, hintHtml=iconHint) }}
|
|
56
|
+
{{ uploadControl('field', 'settings-icon', uploadsUrl, images=true) }}
|
|
57
|
+
<script defer src="{{ assetPrefix }}upload-drop.js"></script>
|
|
55
58
|
|
|
56
59
|
<div class="flex items-center gap-4">
|
|
57
60
|
{% if iconPreview %}
|
|
@@ -29,61 +29,64 @@
|
|
|
29
29
|
site, wait until none are, and look again here.
|
|
30
30
|
</p>
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
{%
|
|
38
|
-
|
|
39
|
-
{{ result.files }} {% if result.files == 1 %}file{% else %}files{% endif %},
|
|
40
|
-
{{ result.size }} before compression, {% if result.credentials %}with{% else %}without{% endif %} credentials.
|
|
41
|
-
</p>
|
|
42
|
-
{% if result.credentialsLeftOut.length %}
|
|
43
|
-
<p>Credentials left out: {{ result.credentialsLeftOut | join(', ') }}.</p>
|
|
44
|
-
{% endif %}
|
|
45
|
-
{% if result.undeclared.length %}
|
|
46
|
-
<p>Left out because no declaration says what they are:</p>
|
|
47
|
-
<ul class="list-disc pl-6">
|
|
48
|
-
{% for file in result.undeclared %}<li><code class="break-all">{{ file }}</code></li>{% endfor %}
|
|
49
|
-
</ul>
|
|
50
|
-
{% endif %}
|
|
51
|
-
{% if result.notCarried.length %}
|
|
52
|
-
<p>Left out because an export holds only regular files:</p>
|
|
53
|
-
<ul class="list-disc pl-6">
|
|
54
|
-
{% for entry in result.notCarried %}<li><code class="break-all">{{ entry.path }}</code>, {{ entry.why }}</li>{% endfor %}
|
|
55
|
-
</ul>
|
|
56
|
-
{% endif %}
|
|
57
|
-
{% if archive %}
|
|
32
|
+
<div class="flex flex-col gap-6" data-job-region>
|
|
33
|
+
{% if job %}
|
|
34
|
+
<section id="export-status" aria-labelledby="export-status-heading">
|
|
35
|
+
{% call card() %}
|
|
36
|
+
<h2 id="export-status-heading" class="card-title">Latest export</h2>
|
|
37
|
+
{% call jobStatus(job, exportUrl, verb='Exported', unit='files') %}
|
|
38
|
+
{% if result %}
|
|
58
39
|
<p>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
or when the next export finishes.
|
|
40
|
+
{{ result.files }} {% if result.files == 1 %}file{% else %}files{% endif %},
|
|
41
|
+
{{ result.size }} before compression, {% if result.credentials %}with{% else %}without{% endif %} credentials.
|
|
62
42
|
</p>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
43
|
+
{% if result.credentialsLeftOut.length %}
|
|
44
|
+
<p>Credentials left out: {{ result.credentialsLeftOut | join(', ') }}.</p>
|
|
45
|
+
{% endif %}
|
|
46
|
+
{% if result.undeclared.length %}
|
|
47
|
+
<p>Left out because no declaration says what they are:</p>
|
|
48
|
+
<ul class="list-disc pl-6">
|
|
49
|
+
{% for file in result.undeclared %}<li><code class="break-all">{{ file }}</code></li>{% endfor %}
|
|
50
|
+
</ul>
|
|
51
|
+
{% endif %}
|
|
52
|
+
{% if result.notCarried.length %}
|
|
53
|
+
<p>Left out because an export holds only regular files:</p>
|
|
54
|
+
<ul class="list-disc pl-6">
|
|
55
|
+
{% for entry in result.notCarried %}<li><code class="break-all">{{ entry.path }}</code>, {{ entry.why }}</li>{% endfor %}
|
|
56
|
+
</ul>
|
|
57
|
+
{% endif %}
|
|
58
|
+
{% if archive %}
|
|
59
|
+
<p>
|
|
60
|
+
<code class="break-all">{{ archive.name }}</code> is deleted at
|
|
61
|
+
<time datetime="{{ archive.expiresAt }}">{{ archive.expiresAt | date('datetime') }}</time>,
|
|
62
|
+
or when the next export finishes.
|
|
63
|
+
</p>
|
|
64
|
+
<div>{{ buttonLink('Download ' + archive.size, downloadUrl, color='primary') }}</div>
|
|
65
|
+
{% else %}
|
|
66
|
+
<p>The archive was deleted 24 hours after it was written, or a later export replaced it. Export again to download one.</p>
|
|
67
|
+
{% endif %}
|
|
66
68
|
{% endif %}
|
|
67
|
-
{%
|
|
69
|
+
{% endcall %}
|
|
68
70
|
{% endcall %}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
{% endif %}
|
|
71
|
+
</section>
|
|
72
|
+
{% endif %}
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
74
|
+
{% if not job or not job.active %}
|
|
75
|
+
{% call card(title='Export the site') %}
|
|
76
|
+
<form method="post" action="{{ exportUrl }}">
|
|
77
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
78
|
+
{{ field.checkbox('export-with-credentials', fields.withCredentials,
|
|
79
|
+
'Include credentials', checked=withCredentials,
|
|
80
|
+
hint='API keys and logins for other services, such as an email provider. Left out, they are typed in again after an import.') }}
|
|
81
|
+
{{ field.password('export-password', fields.password, 'Your password',
|
|
82
|
+
error=problem, autocomplete='current-password', required=true) }}
|
|
83
|
+
{% call cardActions() %}
|
|
84
|
+
{{ button('Export', type='submit', color='primary') }}
|
|
85
|
+
{% endcall %}
|
|
86
|
+
</form>
|
|
87
|
+
{% endcall %}
|
|
88
|
+
{% endif %}
|
|
89
|
+
</div>
|
|
88
90
|
</div>
|
|
91
|
+
<script defer src="{{ assetPrefix }}job-status.js"></script>
|
|
89
92
|
{% endblock %}
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
same switch, and a running site notices either within a second.
|
|
50
50
|
</p>
|
|
51
51
|
|
|
52
|
-
<section id="strip-metadata" aria-labelledby="strip-metadata-heading">
|
|
52
|
+
<section id="strip-metadata" aria-labelledby="strip-metadata-heading" data-job-region>
|
|
53
53
|
{% call card() %}
|
|
54
54
|
<h2 id="strip-metadata-heading" class="card-title">Location and camera metadata</h2>
|
|
55
55
|
<p class="max-w-prose">
|
|
@@ -96,4 +96,5 @@
|
|
|
96
96
|
{% endcall %}
|
|
97
97
|
</section>
|
|
98
98
|
</div>
|
|
99
|
+
<script defer src="{{ assetPrefix }}job-status.js"></script>
|
|
99
100
|
{% endblock %}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
{% from "components/badge.njk" import badge, status %}
|
|
16
16
|
{% from "components/button.njk" import button %}
|
|
17
17
|
{% from "components/card.njk" import card, cardActions %}
|
|
18
|
+
{% from "components/upload.njk" import uploadControl %}
|
|
18
19
|
|
|
19
20
|
{% block title %}Edit {{ account.username }}{% endblock %}
|
|
20
21
|
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
{% set avatarHint %}A path such as <code>/uploads/2026/09/me.jpg</code>, or a full URL.{% endset %}
|
|
98
99
|
{{ field.text('profile-avatar', fields.avatar, 'Avatar', account.profile.avatar,
|
|
99
100
|
hintHtml=avatarHint) }}
|
|
101
|
+
{{ uploadControl('field', 'profile-avatar', uploadsUrl, images=true) }}
|
|
100
102
|
|
|
101
103
|
{{ field.text('profile-job-title', fields.jobTitle, 'Job title', account.profile.jobTitle,
|
|
102
104
|
hint='What they do, printed beside the name on the archive.') }}
|
|
@@ -280,4 +282,5 @@
|
|
|
280
282
|
{% endif %}
|
|
281
283
|
{% endcall %}
|
|
282
284
|
</div>
|
|
285
|
+
<script defer src="{{ assetPrefix }}upload-drop.js"></script>
|
|
283
286
|
{% endblock %}
|