@geekity/cms 0.3.0 → 0.4.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 +2091 -214
- package/admin/components/fields.njk +165 -0
- package/admin/layouts/base.njk +1 -1
- package/admin/layouts/settings-page.njk +26 -0
- package/admin/layouts/shell.njk +17 -3
- package/admin/pages/account/forgot.njk +47 -0
- package/admin/pages/account/login.njk +26 -0
- package/admin/pages/account/reset.njk +38 -0
- package/admin/pages/account/setup.njk +28 -0
- package/admin/pages/appearance/themes.njk +69 -0
- package/admin/pages/comments/all.njk +133 -0
- package/admin/{layouts/dashboard.njk → pages/dashboard/home.njk} +8 -15
- package/admin/{layouts/document-conflict.njk → pages/documents/conflict.njk} +1 -0
- package/admin/pages/documents/editor.njk +196 -0
- package/admin/{layouts/document-list.njk → pages/documents/list.njk} +19 -2
- package/admin/pages/documents/taxonomy.njk +95 -0
- package/admin/pages/federation/followers.njk +238 -0
- package/admin/pages/media/library.njk +160 -0
- package/admin/pages/messages/all.njk +110 -0
- package/admin/{layouts → pages}/placeholder.njk +5 -1
- package/admin/pages/settings/discussion.njk +99 -0
- package/admin/pages/settings/email.njk +203 -0
- package/admin/pages/settings/federation.njk +75 -0
- package/admin/pages/settings/general.njk +29 -0
- package/admin/pages/settings/permalinks.njk +50 -0
- package/admin/pages/settings/reading.njk +72 -0
- package/admin/pages/users/edit.njk +239 -0
- package/admin/pages/users/list.njk +48 -0
- package/admin/pages/users/new.njk +41 -0
- package/admin/static/admin.css +498 -3
- package/admin/static/copy.js +52 -0
- package/admin/static/editor.js +16 -16
- package/admin/static/slug.js +61 -0
- package/dist/admin/accounts.d.ts +413 -0
- package/dist/admin/accounts.d.ts.map +1 -0
- package/dist/admin/accounts.js +680 -0
- package/dist/admin/accounts.js.map +1 -0
- package/dist/admin/appearance.d.ts +80 -0
- package/dist/admin/appearance.d.ts.map +1 -0
- package/dist/admin/appearance.js +136 -0
- package/dist/admin/appearance.js.map +1 -0
- package/dist/admin/comments.d.ts +90 -0
- package/dist/admin/comments.d.ts.map +1 -0
- package/dist/admin/comments.js +244 -0
- package/dist/admin/comments.js.map +1 -0
- package/dist/admin/credentials.d.ts +26 -2
- package/dist/admin/credentials.d.ts.map +1 -1
- package/dist/admin/credentials.js +35 -2
- package/dist/admin/credentials.js.map +1 -1
- package/dist/admin/documents.d.ts +127 -10
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +360 -41
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +151 -50
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +225 -93
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/formatting.d.ts +20 -0
- package/dist/admin/formatting.d.ts.map +1 -0
- package/dist/admin/formatting.js +72 -0
- package/dist/admin/formatting.js.map +1 -0
- package/dist/admin/headers.d.ts +65 -0
- package/dist/admin/headers.d.ts.map +1 -0
- package/dist/admin/headers.js +104 -0
- package/dist/admin/headers.js.map +1 -0
- package/dist/admin/index.d.ts +38 -12
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +25 -7
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/media.d.ts +168 -0
- package/dist/admin/media.d.ts.map +1 -0
- package/dist/admin/media.js +295 -0
- package/dist/admin/media.js.map +1 -0
- package/dist/admin/menu.d.ts +79 -0
- package/dist/admin/menu.d.ts.map +1 -0
- package/dist/admin/menu.js +126 -0
- package/dist/admin/menu.js.map +1 -0
- package/dist/admin/messages.d.ts +80 -0
- package/dist/admin/messages.d.ts.map +1 -0
- package/dist/admin/messages.js +152 -0
- package/dist/admin/messages.js.map +1 -0
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +31 -7
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/recovery.d.ts +92 -0
- package/dist/admin/recovery.d.ts.map +1 -0
- package/dist/admin/recovery.js +229 -0
- package/dist/admin/recovery.js.map +1 -0
- package/dist/admin/routes.d.ts +0 -20
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +155 -105
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-discussion.d.ts +37 -0
- package/dist/admin/settings-discussion.d.ts.map +1 -0
- package/dist/admin/settings-discussion.js +117 -0
- package/dist/admin/settings-discussion.js.map +1 -0
- package/dist/admin/settings-email.d.ts +54 -0
- package/dist/admin/settings-email.d.ts.map +1 -0
- package/dist/admin/settings-email.js +189 -0
- package/dist/admin/settings-email.js.map +1 -0
- package/dist/admin/settings-federation.d.ts +39 -0
- package/dist/admin/settings-federation.d.ts.map +1 -0
- package/dist/admin/settings-federation.js +103 -0
- package/dist/admin/settings-federation.js.map +1 -0
- package/dist/admin/settings-general.d.ts +12 -0
- package/dist/admin/settings-general.d.ts.map +1 -0
- package/dist/admin/settings-general.js +48 -0
- package/dist/admin/settings-general.js.map +1 -0
- package/dist/admin/settings-page.d.ts +102 -0
- package/dist/admin/settings-page.d.ts.map +1 -0
- package/dist/admin/settings-page.js +126 -0
- package/dist/admin/settings-page.js.map +1 -0
- package/dist/admin/settings-pages.d.ts +19 -0
- package/dist/admin/settings-pages.d.ts.map +1 -0
- package/dist/admin/settings-pages.js +33 -0
- package/dist/admin/settings-pages.js.map +1 -0
- package/dist/admin/settings-permalinks.d.ts +16 -0
- package/dist/admin/settings-permalinks.d.ts.map +1 -0
- package/dist/admin/settings-permalinks.js +32 -0
- package/dist/admin/settings-permalinks.js.map +1 -0
- package/dist/admin/settings-reading.d.ts +33 -0
- package/dist/admin/settings-reading.d.ts.map +1 -0
- package/dist/admin/settings-reading.js +48 -0
- package/dist/admin/settings-reading.js.map +1 -0
- package/dist/admin/settings.d.ts +325 -96
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +650 -308
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/store.d.ts +606 -152
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +863 -268
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/taxonomy.d.ts +114 -0
- package/dist/admin/taxonomy.d.ts.map +1 -0
- package/dist/admin/taxonomy.js +289 -0
- package/dist/admin/taxonomy.js.map +1 -0
- package/dist/admin/templates.d.ts +44 -14
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +44 -14
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/throttle.d.ts +84 -0
- package/dist/admin/throttle.d.ts.map +1 -0
- package/dist/admin/throttle.js +143 -0
- package/dist/admin/throttle.js.map +1 -0
- package/dist/admin/uploads.d.ts +28 -2
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +43 -4
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/users.d.ts +100 -13
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +412 -39
- package/dist/admin/users.js.map +1 -1
- package/dist/cache.d.ts +141 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +207 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +14 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +424 -21
- package/dist/cli.js.map +1 -1
- package/dist/comments/akismet.d.ts +130 -0
- package/dist/comments/akismet.d.ts.map +1 -0
- package/dist/comments/akismet.js +274 -0
- package/dist/comments/akismet.js.map +1 -0
- package/dist/comments/conversation.d.ts +29 -0
- package/dist/comments/conversation.d.ts.map +1 -0
- package/dist/comments/conversation.js +60 -0
- package/dist/comments/conversation.js.map +1 -0
- package/dist/comments/form.d.ts +75 -0
- package/dist/comments/form.d.ts.map +1 -0
- package/dist/comments/form.js +64 -0
- package/dist/comments/form.js.map +1 -0
- package/dist/comments/index.d.ts +15 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +9 -0
- package/dist/comments/index.js.map +1 -0
- package/dist/comments/markdown.d.ts +8 -0
- package/dist/comments/markdown.d.ts.map +1 -0
- package/dist/comments/markdown.js +85 -0
- package/dist/comments/markdown.js.map +1 -0
- package/dist/comments/moderate.d.ts +71 -0
- package/dist/comments/moderate.d.ts.map +1 -0
- package/dist/comments/moderate.js +88 -0
- package/dist/comments/moderate.js.map +1 -0
- package/dist/comments/policy.d.ts +57 -0
- package/dist/comments/policy.d.ts.map +1 -0
- package/dist/comments/policy.js +80 -0
- package/dist/comments/policy.js.map +1 -0
- package/dist/comments/records.d.ts +266 -0
- package/dist/comments/records.d.ts.map +1 -0
- package/dist/comments/records.js +487 -0
- package/dist/comments/records.js.map +1 -0
- package/dist/comments/routes.d.ts +58 -0
- package/dist/comments/routes.d.ts.map +1 -0
- package/dist/comments/routes.js +177 -0
- package/dist/comments/routes.js.map +1 -0
- package/dist/comments/submission.d.ts +263 -0
- package/dist/comments/submission.d.ts.map +1 -0
- package/dist/comments/submission.js +241 -0
- package/dist/comments/submission.js.map +1 -0
- package/dist/config.d.ts +190 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +118 -6
- package/dist/config.js.map +1 -1
- package/dist/contact/delivery.d.ts +60 -0
- package/dist/contact/delivery.d.ts.map +1 -0
- package/dist/contact/delivery.js +87 -0
- package/dist/contact/delivery.js.map +1 -0
- package/dist/contact/form.d.ts +130 -0
- package/dist/contact/form.d.ts.map +1 -0
- package/dist/contact/form.js +163 -0
- package/dist/contact/form.js.map +1 -0
- package/dist/contact/index.d.ts +17 -0
- package/dist/contact/index.d.ts.map +1 -0
- package/dist/contact/index.js +13 -0
- package/dist/contact/index.js.map +1 -0
- package/dist/contact/records.d.ts +124 -0
- package/dist/contact/records.d.ts.map +1 -0
- package/dist/contact/records.js +218 -0
- package/dist/contact/records.js.map +1 -0
- package/dist/contact/routes.d.ts +17 -0
- package/dist/contact/routes.d.ts.map +1 -0
- package/dist/contact/routes.js +127 -0
- package/dist/contact/routes.js.map +1 -0
- package/dist/contact/submission.d.ts +103 -0
- package/dist/contact/submission.d.ts.map +1 -0
- package/dist/contact/submission.js +166 -0
- package/dist/contact/submission.js.map +1 -0
- package/dist/content/document.d.ts +7 -2
- package/dist/content/document.d.ts.map +1 -1
- package/dist/content/document.js +1 -0
- package/dist/content/document.js.map +1 -1
- package/dist/content/index.d.ts +7 -2
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +4 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +24 -2
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +11 -4
- package/dist/content/parser.js.map +1 -1
- package/dist/content/save.d.ts +5 -0
- package/dist/content/save.d.ts.map +1 -1
- package/dist/content/save.js +44 -1
- package/dist/content/save.js.map +1 -1
- package/dist/content/schedule.d.ts +125 -0
- package/dist/content/schedule.d.ts.map +1 -0
- package/dist/content/schedule.js +207 -0
- package/dist/content/schedule.js.map +1 -0
- package/dist/content/search.d.ts +64 -0
- package/dist/content/search.d.ts.map +1 -0
- package/dist/content/search.js +136 -0
- package/dist/content/search.js.map +1 -0
- package/dist/content/store.d.ts +202 -7
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +374 -67
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +7 -1
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +18 -10
- package/dist/content/sync.js.map +1 -1
- package/dist/content/time.d.ts +56 -0
- package/dist/content/time.d.ts.map +1 -0
- package/dist/content/time.js +141 -0
- package/dist/content/time.js.map +1 -0
- package/dist/content/writer.d.ts.map +1 -1
- package/dist/content/writer.js +3 -0
- package/dist/content/writer.js.map +1 -1
- package/dist/env.d.ts +58 -4
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/actor.d.ts +95 -41
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +180 -53
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +44 -17
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +98 -46
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/delivery.d.ts +63 -15
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +154 -80
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +22 -17
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +98 -77
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/followers.d.ts +3 -2
- package/dist/federation/followers.d.ts.map +1 -1
- package/dist/federation/followers.js +6 -5
- package/dist/federation/followers.js.map +1 -1
- package/dist/federation/import-wordpress.d.ts +128 -0
- package/dist/federation/import-wordpress.d.ts.map +1 -0
- package/dist/federation/import-wordpress.js +426 -0
- package/dist/federation/import-wordpress.js.map +1 -0
- package/dist/federation/inbox.d.ts +36 -13
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +120 -49
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +22 -10
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +13 -8
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/keys.d.ts +98 -20
- package/dist/federation/keys.d.ts.map +1 -1
- package/dist/federation/keys.js +269 -39
- package/dist/federation/keys.js.map +1 -1
- package/dist/federation/mount.d.ts +42 -10
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +266 -26
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +23 -35
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +26 -39
- package/dist/federation/paths.js.map +1 -1
- package/dist/federation/records.d.ts +223 -0
- package/dist/federation/records.d.ts.map +1 -0
- package/dist/federation/records.js +506 -0
- package/dist/federation/records.js.map +1 -0
- package/dist/federation/relays.d.ts +114 -0
- package/dist/federation/relays.d.ts.map +1 -0
- package/dist/federation/relays.js +290 -0
- package/dist/federation/relays.js.map +1 -0
- package/dist/federation/replies.d.ts +80 -0
- package/dist/federation/replies.d.ts.map +1 -0
- package/dist/federation/replies.js +166 -0
- package/dist/federation/replies.js.map +1 -0
- package/dist/federation/wordpress.d.ts +131 -0
- package/dist/federation/wordpress.d.ts.map +1 -0
- package/dist/federation/wordpress.js +341 -0
- package/dist/federation/wordpress.js.map +1 -0
- package/dist/files/atomic.d.ts +103 -0
- package/dist/files/atomic.d.ts.map +1 -0
- package/dist/files/atomic.js +150 -0
- package/dist/files/atomic.js.map +1 -0
- package/dist/files/index.d.ts +3 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +2 -0
- package/dist/files/index.js.map +1 -0
- package/dist/forms/protection.d.ts +85 -0
- package/dist/forms/protection.d.ts.map +1 -0
- package/dist/forms/protection.js +116 -0
- package/dist/forms/protection.js.map +1 -0
- package/dist/images/icons.d.ts +59 -0
- package/dist/images/icons.d.ts.map +1 -0
- package/dist/images/icons.js +131 -0
- package/dist/images/icons.js.map +1 -0
- package/dist/images/index.d.ts +7 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +4 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/markup.d.ts +47 -0
- package/dist/images/markup.d.ts.map +1 -0
- package/dist/images/markup.js +175 -0
- package/dist/images/markup.js.map +1 -0
- package/dist/images/paths.d.ts +34 -0
- package/dist/images/paths.d.ts.map +1 -0
- package/dist/images/paths.js +41 -0
- package/dist/images/paths.js.map +1 -0
- package/dist/images/variants.d.ts +104 -0
- package/dist/images/variants.d.ts.map +1 -0
- package/dist/images/variants.js +320 -0
- package/dist/images/variants.js.map +1 -0
- package/dist/index.d.ts +123 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +327 -25
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +34 -3
- package/dist/init.js.map +1 -1
- package/dist/mail/brevo.d.ts +35 -0
- package/dist/mail/brevo.d.ts.map +1 -0
- package/dist/mail/brevo.js +85 -0
- package/dist/mail/brevo.js.map +1 -0
- package/dist/mail/credentials.d.ts +62 -0
- package/dist/mail/credentials.d.ts.map +1 -0
- package/dist/mail/credentials.js +86 -0
- package/dist/mail/credentials.js.map +1 -0
- package/dist/mail/index.d.ts +15 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +8 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/memory.d.ts +35 -0
- package/dist/mail/memory.d.ts.map +1 -0
- package/dist/mail/memory.js +29 -0
- package/dist/mail/memory.js.map +1 -0
- package/dist/mail/provider.d.ts +80 -0
- package/dist/mail/provider.d.ts.map +1 -0
- package/dist/mail/provider.js +23 -0
- package/dist/mail/provider.js.map +1 -0
- package/dist/mail/service.d.ts +156 -0
- package/dist/mail/service.d.ts.map +1 -0
- package/dist/mail/service.js +265 -0
- package/dist/mail/service.js.map +1 -0
- package/dist/mail/smtp.d.ts +39 -0
- package/dist/mail/smtp.d.ts.map +1 -0
- package/dist/mail/smtp.js +58 -0
- package/dist/mail/smtp.js.map +1 -0
- package/dist/mail/templates.d.ts +91 -0
- package/dist/mail/templates.d.ts.map +1 -0
- package/dist/mail/templates.js +69 -0
- package/dist/mail/templates.js.map +1 -0
- package/dist/notifications/comments.d.ts +66 -0
- package/dist/notifications/comments.d.ts.map +1 -0
- package/dist/notifications/comments.js +151 -0
- package/dist/notifications/comments.js.map +1 -0
- package/dist/notifications/digest.d.ts +135 -0
- package/dist/notifications/digest.d.ts.map +1 -0
- package/dist/notifications/digest.js +287 -0
- package/dist/notifications/digest.js.map +1 -0
- package/dist/notifications/index.d.ts +13 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +8 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/links.d.ts +60 -0
- package/dist/notifications/links.d.ts.map +1 -0
- package/dist/notifications/links.js +63 -0
- package/dist/notifications/links.js.map +1 -0
- package/dist/notifications/optouts.d.ts +48 -0
- package/dist/notifications/optouts.d.ts.map +1 -0
- package/dist/notifications/optouts.js +93 -0
- package/dist/notifications/optouts.js.map +1 -0
- package/dist/notifications/preferences.d.ts +158 -0
- package/dist/notifications/preferences.d.ts.map +1 -0
- package/dist/notifications/preferences.js +195 -0
- package/dist/notifications/preferences.js.map +1 -0
- package/dist/notifications/routes.d.ts +28 -0
- package/dist/notifications/routes.d.ts.map +1 -0
- package/dist/notifications/routes.js +184 -0
- package/dist/notifications/routes.js.map +1 -0
- package/dist/notifications/tokens.d.ts +60 -0
- package/dist/notifications/tokens.d.ts.map +1 -0
- package/dist/notifications/tokens.js +125 -0
- package/dist/notifications/tokens.js.map +1 -0
- package/dist/notify.d.ts +84 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +149 -0
- package/dist/notify.js.map +1 -0
- package/dist/web/archive.d.ts +49 -0
- package/dist/web/archive.d.ts.map +1 -0
- package/dist/web/archive.js +59 -0
- package/dist/web/archive.js.map +1 -0
- package/dist/web/assets.d.ts +6 -5
- package/dist/web/assets.d.ts.map +1 -1
- package/dist/web/assets.js +5 -7
- package/dist/web/assets.js.map +1 -1
- package/dist/web/authors.d.ts +143 -0
- package/dist/web/authors.d.ts.map +1 -0
- package/dist/web/authors.js +178 -0
- package/dist/web/authors.js.map +1 -0
- package/dist/web/comments.d.ts +60 -0
- package/dist/web/comments.d.ts.map +1 -0
- package/dist/web/comments.js +207 -0
- package/dist/web/comments.js.map +1 -0
- package/dist/web/context.d.ts +162 -28
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +123 -26
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +209 -0
- package/dist/web/conversation.d.ts.map +1 -0
- package/dist/web/conversation.js +557 -0
- package/dist/web/conversation.js.map +1 -0
- package/dist/web/documents.d.ts +36 -6
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +52 -10
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-atom.d.ts +22 -0
- package/dist/web/feed-atom.d.ts.map +1 -0
- package/dist/web/feed-atom.js +83 -0
- package/dist/web/feed-atom.js.map +1 -0
- package/dist/web/feed-item.d.ts +145 -0
- package/dist/web/feed-item.d.ts.map +1 -0
- package/dist/web/feed-item.js +120 -0
- package/dist/web/feed-item.js.map +1 -0
- package/dist/web/feed-json.d.ts +79 -0
- package/dist/web/feed-json.d.ts.map +1 -0
- package/dist/web/feed-json.js +53 -0
- package/dist/web/feed-json.js.map +1 -0
- package/dist/web/feed-rss.d.ts +26 -0
- package/dist/web/feed-rss.d.ts.map +1 -0
- package/dist/web/feed-rss.js +203 -0
- package/dist/web/feed-rss.js.map +1 -0
- package/dist/web/feed-source.d.ts +244 -0
- package/dist/web/feed-source.d.ts.map +1 -0
- package/dist/web/feed-source.js +201 -0
- package/dist/web/feed-source.js.map +1 -0
- package/dist/web/feed-xml.d.ts +63 -0
- package/dist/web/feed-xml.d.ts.map +1 -0
- package/dist/web/feed-xml.js +116 -0
- package/dist/web/feed-xml.js.map +1 -0
- package/dist/web/feeds.d.ts +31 -96
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +94 -198
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/health.d.ts +31 -0
- package/dist/web/health.d.ts.map +1 -0
- package/dist/web/health.js +44 -0
- package/dist/web/health.js.map +1 -0
- package/dist/web/index.d.ts +30 -10
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +18 -7
- package/dist/web/index.js.map +1 -1
- package/dist/web/navigation.d.ts +73 -0
- package/dist/web/navigation.d.ts.map +1 -0
- package/dist/web/navigation.js +110 -0
- package/dist/web/navigation.js.map +1 -0
- package/dist/web/negotiate.d.ts +9 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +6 -1
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/recent.d.ts +43 -0
- package/dist/web/recent.d.ts.map +1 -0
- package/dist/web/recent.js +37 -0
- package/dist/web/recent.js.map +1 -0
- package/dist/web/render.d.ts +197 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +334 -17
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +25 -8
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +845 -93
- package/dist/web/routes.js.map +1 -1
- package/dist/web/sanitize.d.ts +19 -0
- package/dist/web/sanitize.d.ts.map +1 -0
- package/dist/web/sanitize.js +272 -0
- package/dist/web/sanitize.js.map +1 -0
- package/dist/web/search.d.ts +79 -0
- package/dist/web/search.d.ts.map +1 -0
- package/dist/web/search.js +94 -0
- package/dist/web/search.js.map +1 -0
- package/dist/web/sitemap.d.ts +120 -0
- package/dist/web/sitemap.d.ts.map +1 -0
- package/dist/web/sitemap.js +199 -0
- package/dist/web/sitemap.js.map +1 -0
- package/dist/web/taxonomy.d.ts +152 -0
- package/dist/web/taxonomy.d.ts.map +1 -0
- package/dist/web/taxonomy.js +237 -0
- package/dist/web/taxonomy.js.map +1 -0
- package/dist/web/templates.d.ts +54 -16
- package/dist/web/templates.d.ts.map +1 -1
- package/dist/web/templates.js +109 -28
- package/dist/web/templates.js.map +1 -1
- package/dist/web/themes.d.ts +205 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +277 -0
- package/dist/web/themes.js.map +1 -0
- package/dist/webmention/discovery.d.ts +51 -0
- package/dist/webmention/discovery.d.ts.map +1 -0
- package/dist/webmention/discovery.js +176 -0
- package/dist/webmention/discovery.js.map +1 -0
- package/dist/webmention/html.d.ts +71 -0
- package/dist/webmention/html.d.ts.map +1 -0
- package/dist/webmention/html.js +285 -0
- package/dist/webmention/html.js.map +1 -0
- package/dist/webmention/index.d.ts +12 -0
- package/dist/webmention/index.d.ts.map +1 -0
- package/dist/webmention/index.js +8 -0
- package/dist/webmention/index.js.map +1 -0
- package/dist/webmention/links.d.ts +18 -0
- package/dist/webmention/links.d.ts.map +1 -0
- package/dist/webmention/links.js +64 -0
- package/dist/webmention/links.js.map +1 -0
- package/dist/webmention/microformats.d.ts +93 -0
- package/dist/webmention/microformats.d.ts.map +1 -0
- package/dist/webmention/microformats.js +376 -0
- package/dist/webmention/microformats.js.map +1 -0
- package/dist/webmention/receive.d.ts +141 -0
- package/dist/webmention/receive.d.ts.map +1 -0
- package/dist/webmention/receive.js +264 -0
- package/dist/webmention/receive.js.map +1 -0
- package/dist/webmention/routes.d.ts +37 -0
- package/dist/webmention/routes.d.ts.map +1 -0
- package/dist/webmention/routes.js +75 -0
- package/dist/webmention/routes.js.map +1 -0
- package/dist/webmention/service.d.ts +94 -0
- package/dist/webmention/service.d.ts.map +1 -0
- package/dist/webmention/service.js +207 -0
- package/dist/webmention/service.js.map +1 -0
- package/package.json +11 -6
- package/templates/site/content/_data/site.json +1 -0
- package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
- package/templates/site/geekity.config.ts +11 -1
- package/templates/site/tsconfig.json +1 -1
- package/themes/default/README.md +1096 -50
- package/themes/default/layouts/404.njk +2 -3
- package/themes/default/layouts/author.njk +37 -0
- package/themes/default/layouts/base.njk +172 -31
- package/themes/default/layouts/category.njk +27 -0
- package/themes/default/layouts/front-page.njk +57 -0
- package/themes/default/layouts/home.njk +17 -1
- package/themes/default/layouts/page.njk +57 -5
- package/themes/default/layouts/post.njk +78 -19
- package/themes/default/layouts/search.njk +57 -0
- package/themes/default/layouts/tag.njk +3 -6
- package/themes/default/mail/comment-digest.html.njk +37 -0
- package/themes/default/mail/comment-digest.subject.njk +3 -0
- package/themes/default/mail/comment-digest.txt.njk +40 -0
- package/themes/default/mail/comment-pending.html.njk +27 -0
- package/themes/default/mail/comment-pending.subject.njk +2 -0
- package/themes/default/mail/comment-pending.txt.njk +24 -0
- package/themes/default/mail/comment-reply.html.njk +21 -0
- package/themes/default/mail/comment-reply.subject.njk +2 -0
- package/themes/default/mail/comment-reply.txt.njk +22 -0
- package/themes/default/mail/contact-message.html.njk +24 -0
- package/themes/default/mail/contact-message.subject.njk +5 -0
- package/themes/default/mail/contact-message.txt.njk +20 -0
- package/themes/default/mail/password-changed.html.njk +18 -0
- package/themes/default/mail/password-changed.subject.njk +2 -0
- package/themes/default/mail/password-changed.txt.njk +17 -0
- package/themes/default/mail/password-reset.html.njk +22 -0
- package/themes/default/mail/password-reset.subject.njk +2 -0
- package/themes/default/mail/password-reset.txt.njk +18 -0
- package/themes/default/mail/test.html.njk +14 -0
- package/themes/default/mail/test.subject.njk +2 -0
- package/themes/default/mail/test.txt.njk +12 -0
- package/themes/default/partials/archive.njk +27 -0
- package/themes/default/partials/bio.njk +77 -0
- package/themes/default/partials/comment-form.njk +109 -0
- package/themes/default/partials/contact-form.njk +88 -0
- package/themes/default/partials/conversation.njk +139 -0
- package/themes/default/partials/feeds.njk +26 -0
- package/themes/default/partials/jsonld.njk +120 -0
- package/themes/default/partials/pagination.njk +12 -6
- package/themes/default/partials/post-list.njk +51 -18
- package/themes/default/partials/search-form.njk +17 -0
- package/themes/default/partials/tags.njk +26 -5
- package/themes/default/static/highlight.js +4 -0
- package/themes/default/static/style.css +1119 -194
- package/themes/default/theme.json +5 -0
- package/admin/layouts/document-editor.njk +0 -167
- package/admin/layouts/federation.njk +0 -145
- package/admin/layouts/login.njk +0 -23
- package/admin/layouts/settings.njk +0 -116
- package/admin/layouts/setup.njk +0 -27
- package/admin/layouts/users.njk +0 -91
- /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
{# The editor behind /admin/posts/{slug} and /admin/pages/{slug}, and behind
|
|
2
|
+
.../new. One template for both kinds: `kind` decides whether there is a date
|
|
3
|
+
and the taxonomy fields, and the handler decides which buttons the form
|
|
4
|
+
carries. #}
|
|
5
|
+
{% extends "layouts/shell.njk" %}
|
|
6
|
+
|
|
7
|
+
{% block title %}{{ heading }}{% endblock %}
|
|
8
|
+
|
|
9
|
+
{% block content %}
|
|
10
|
+
<h1>{{ heading }}</h1>
|
|
11
|
+
|
|
12
|
+
{% if error %}
|
|
13
|
+
<p class="admin-error">{{ error }}</p>
|
|
14
|
+
{% endif %}
|
|
15
|
+
|
|
16
|
+
{% if trashed %}
|
|
17
|
+
<p class="admin-note">This {{ kind.singular }} is in the trash. The public site is not serving it.</p>
|
|
18
|
+
{% endif %}
|
|
19
|
+
|
|
20
|
+
{% if scheduledFor %}
|
|
21
|
+
<p class="admin-note">Scheduled for {{ scheduledFor }}. The public site starts serving it then, and the followers are told then.</p>
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
<form class="admin-editor" method="post" action="{{ saveUrl }}">
|
|
25
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
26
|
+
{# The hash of the file this form was filled in from. A save whose hash no
|
|
27
|
+
longer matches what is on disk is refused rather than overwriting
|
|
28
|
+
somebody else's edit (doc-1). #}
|
|
29
|
+
<input type="hidden" name="hash" value="{{ form.hash }}" />
|
|
30
|
+
{# Which layout the preview renders through. The save handler ignores it. #}
|
|
31
|
+
<input type="hidden" name="type" value="{{ kind.type }}" />
|
|
32
|
+
|
|
33
|
+
<div class="admin-editor-main">
|
|
34
|
+
<label for="editor-title">Title</label>
|
|
35
|
+
<input id="editor-title" name="title" type="text" value="{{ form.title }}" required autofocus />
|
|
36
|
+
|
|
37
|
+
<label for="editor-body">Body</label>
|
|
38
|
+
<textarea id="editor-body" name="body" rows="24">{{ form.body }}</textarea>
|
|
39
|
+
|
|
40
|
+
{# Everything the editor's own script needs, on the element it hangs off.
|
|
41
|
+
With JavaScript off this is one button that posts the form to the
|
|
42
|
+
preview in a new tab, which is a preview. With it on, editor.js takes
|
|
43
|
+
the button over, puts CodeMirror on the textarea above and adds the
|
|
44
|
+
tabs and the upload control beside it. #}
|
|
45
|
+
<div
|
|
46
|
+
class="admin-editor-tools"
|
|
47
|
+
id="editor-enhance"
|
|
48
|
+
data-preview-url="{{ previewUrl }}"
|
|
49
|
+
data-upload-url="{{ uploadUrl }}"
|
|
50
|
+
data-kind="{{ kind.type }}"
|
|
51
|
+
>
|
|
52
|
+
<button
|
|
53
|
+
type="submit"
|
|
54
|
+
id="editor-preview-fallback"
|
|
55
|
+
class="admin-button-quiet"
|
|
56
|
+
formaction="{{ previewUrl }}"
|
|
57
|
+
formtarget="_blank"
|
|
58
|
+
formnovalidate
|
|
59
|
+
>Preview</button>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div class="admin-editor-side">
|
|
64
|
+
<label for="editor-slug">Slug</label>
|
|
65
|
+
<input id="editor-slug" name="slug" type="text" value="{{ form.slug }}" />
|
|
66
|
+
|
|
67
|
+
<label for="editor-permalink">Permalink</label>
|
|
68
|
+
<input id="editor-permalink" name="permalink" type="text" value="{{ form.permalink }}" />
|
|
69
|
+
<p class="admin-hint">Leave it empty to let the {{ kind.singular }} take the URL its slug implies.</p>
|
|
70
|
+
|
|
71
|
+
{% if kind.dated %}
|
|
72
|
+
<label for="editor-date">Date</label>
|
|
73
|
+
<input id="editor-date" name="date" type="text" value="{{ form.date }}" />
|
|
74
|
+
{# The file holds a UTC instant; this field is that instant as the
|
|
75
|
+
site's own clock reads it, so the zone has to be on the screen. #}
|
|
76
|
+
<p class="admin-hint">Wall-clock time in {{ dateZone }}. Stored as UTC.</p>
|
|
77
|
+
{% endif %}
|
|
78
|
+
|
|
79
|
+
{% if kind.tagged %}
|
|
80
|
+
<label for="editor-tags">Tags</label>
|
|
81
|
+
<input id="editor-tags" name="tags" type="text" value="{{ form.tags }}" />
|
|
82
|
+
<p class="admin-hint">Separated by commas.</p>
|
|
83
|
+
{% endif %}
|
|
84
|
+
|
|
85
|
+
{% if kind.categorised %}
|
|
86
|
+
<label for="editor-categories">Categories</label>
|
|
87
|
+
<input id="editor-categories" name="categories" type="text" value="{{ form.categories }}" />
|
|
88
|
+
<p class="admin-hint">Separated by commas.</p>
|
|
89
|
+
{% endif %}
|
|
90
|
+
|
|
91
|
+
<label for="editor-description">Description</label>
|
|
92
|
+
<input id="editor-description" name="description" type="text" value="{{ form.description }}" />
|
|
93
|
+
|
|
94
|
+
{# Who the front matter says wrote this (TASK-67). A select of the site's
|
|
95
|
+
users rather than a free box, because after decision-14 the value is a
|
|
96
|
+
person rather than a string: it decides whose archive the post is on
|
|
97
|
+
and, once the actors land, whose followers hear about it. A file that
|
|
98
|
+
still names somebody who has no account keeps an option of its own, so
|
|
99
|
+
opening the editor cannot silently reattribute it. #}
|
|
100
|
+
<label for="editor-author">Author</label>
|
|
101
|
+
<select id="editor-author" name="author">
|
|
102
|
+
{% for choice in authors %}
|
|
103
|
+
<option value="{{ choice.value }}"{% if choice.chosen %} selected{% endif %}>{{ choice.label }}</option>
|
|
104
|
+
{% endfor %}
|
|
105
|
+
</select>
|
|
106
|
+
|
|
107
|
+
<p class="admin-check">
|
|
108
|
+
<input id="editor-draft" name="draft" type="checkbox" value="1"{% if form.draft %} checked{% endif %} />
|
|
109
|
+
<label for="editor-draft">Draft</label>
|
|
110
|
+
</p>
|
|
111
|
+
|
|
112
|
+
{# What this document says about comments, if anything. Three answers
|
|
113
|
+
rather than two: the site's own rules, always open, always closed. #}
|
|
114
|
+
<label for="editor-comments">Comments</label>
|
|
115
|
+
<select id="editor-comments" name="comments">
|
|
116
|
+
<option value="{{ commentSettings.site }}"{% if form.comments == commentSettings.site %} selected{% endif %}>Follow the site settings</option>
|
|
117
|
+
<option value="{{ commentSettings.open }}"{% if form.comments == commentSettings.open %} selected{% endif %}>Open</option>
|
|
118
|
+
<option value="{{ commentSettings.closed }}"{% if form.comments == commentSettings.closed %} selected{% endif %}>Closed</option>
|
|
119
|
+
</select>
|
|
120
|
+
<p class="admin-hint">
|
|
121
|
+
Writes <code>comments: true</code> or <code>comments: false</code> into the front matter,
|
|
122
|
+
which beats the site's switch and its closing window in both directions. Fediverse replies
|
|
123
|
+
are shown either way.
|
|
124
|
+
</p>
|
|
125
|
+
|
|
126
|
+
{% if kind.excludable %}
|
|
127
|
+
{# doc-2's eleventyExcludeFromCollections: still published and still at
|
|
128
|
+
its URL, but out of every collection a template lists from. #}
|
|
129
|
+
<p class="admin-check">
|
|
130
|
+
<input id="editor-exclude" name="exclude" type="checkbox" value="1"{% if form.exclude %} checked{% endif %} />
|
|
131
|
+
<label for="editor-exclude">Hide from collections</label>
|
|
132
|
+
</p>
|
|
133
|
+
<p class="admin-hint">Keeps the {{ kind.singular }} out of listings that gather content, without unpublishing it.</p>
|
|
134
|
+
{% endif %}
|
|
135
|
+
|
|
136
|
+
{% if kind.navigable %}
|
|
137
|
+
{# The page puts itself in the site menu, after the items the settings
|
|
138
|
+
screen names. #}
|
|
139
|
+
<p class="admin-check">
|
|
140
|
+
<input id="editor-navigation" name="navigation" type="checkbox" value="1"{% if form.navigation %} checked{% endif %} />
|
|
141
|
+
<label for="editor-navigation">Show in navigation</label>
|
|
142
|
+
</p>
|
|
143
|
+
|
|
144
|
+
<label for="editor-navigation-order">Menu order</label>
|
|
145
|
+
<input id="editor-navigation-order" name="navigation_order" type="text" inputmode="numeric" value="{{ form.navigationOrder }}" />
|
|
146
|
+
<p class="admin-hint">Puts this {{ kind.singular }} in the site header, after the items on the settings screen. A lower order comes first; leave it empty and it sorts by title after the ordered ones.</p>
|
|
147
|
+
{% endif %}
|
|
148
|
+
|
|
149
|
+
{% if kind.contactable %}
|
|
150
|
+
{# The page offers a contact form under its content (TASK-56). Where a
|
|
151
|
+
message goes is the contact address on the Settings screen; it is
|
|
152
|
+
never on this page or in its HTML. #}
|
|
153
|
+
<p class="admin-check">
|
|
154
|
+
<input id="editor-contact" name="contact" type="checkbox" value="1"{% if form.contact %} checked{% endif %} />
|
|
155
|
+
<label for="editor-contact">Contact form</label>
|
|
156
|
+
</p>
|
|
157
|
+
<p class="admin-hint">
|
|
158
|
+
Writes <code>contact: true</code> into the front matter and puts a name, email, subject
|
|
159
|
+
and message form under this {{ kind.singular }}. Messages arrive on the Messages screen
|
|
160
|
+
and are emailed to the contact address on Settings.
|
|
161
|
+
</p>
|
|
162
|
+
{% endif %}
|
|
163
|
+
|
|
164
|
+
<p class="admin-editor-buttons">
|
|
165
|
+
{% for button in actions %}
|
|
166
|
+
<button type="submit" name="action" value="{{ button.value }}">{{ button.label }}</button>
|
|
167
|
+
{% endfor %}
|
|
168
|
+
{% if viewUrl %}
|
|
169
|
+
<a class="admin-button admin-button-quiet" href="{{ viewUrl }}">View</a>
|
|
170
|
+
{% endif %}
|
|
171
|
+
</p>
|
|
172
|
+
</div>
|
|
173
|
+
</form>
|
|
174
|
+
|
|
175
|
+
{# CodeMirror, the preview tab and the upload control. A module script is
|
|
176
|
+
deferred by definition, so it runs after the form is in the document.
|
|
177
|
+
Nothing above depends on it: with the bundle missing or JavaScript off the
|
|
178
|
+
textarea and the Preview button are the whole editor.
|
|
179
|
+
|
|
180
|
+
The nonce is not what lets it run — `script-src 'self'` already does, and
|
|
181
|
+
the admin has no inline script at all. It is here so the bundle can read
|
|
182
|
+
it back off this element and hand it to CodeMirror, whose themes are
|
|
183
|
+
injected as <style> elements at runtime and would otherwise be refused by
|
|
184
|
+
`style-src`. Reading it through the element's `.nonce` property rather
|
|
185
|
+
than a data attribute keeps it out of reach of a CSS selector. #}
|
|
186
|
+
<script
|
|
187
|
+
type="module"
|
|
188
|
+
id="editor-script"
|
|
189
|
+
src="{{ assetPrefix }}editor.js"
|
|
190
|
+
nonce="{{ cspNonce }}"
|
|
191
|
+
></script>
|
|
192
|
+
|
|
193
|
+
{# The slug and permalink auto-fill, in a file of its own so the policy never
|
|
194
|
+
has to allow an inline script. #}
|
|
195
|
+
<script defer src="{{ assetPrefix }}slug.js"></script>
|
|
196
|
+
{% endblock %}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
{# The listing behind /admin/posts and /admin/pages. One template for both:
|
|
2
|
-
`kind` says which, and whether the table has a date column and
|
|
2
|
+
`kind` says which, and whether the table has a date column and taxonomy
|
|
3
|
+
ones.
|
|
4
|
+
|
|
5
|
+
There is no `pages/posts/` or `pages/categories/` for the same reason.
|
|
6
|
+
Posts, Pages, Categories and Tags are four menu entries over three
|
|
7
|
+
templates — this listing, the editor beside it and the taxonomy screen —
|
|
8
|
+
because a post and a page differ by a `kind`, not by a screen. A folder per
|
|
9
|
+
menu entry would mean either a second copy of each template or a re-export
|
|
10
|
+
that exists only to make the directory look like the menu, so the folder is
|
|
11
|
+
named after what the screens are about instead. #}
|
|
3
12
|
{% extends "layouts/shell.njk" %}
|
|
4
13
|
|
|
5
14
|
{% block title %}{{ kind.plural }}{% endblock %}
|
|
@@ -24,6 +33,9 @@
|
|
|
24
33
|
{% if kind.tagged %}
|
|
25
34
|
<th scope="col">Tags</th>
|
|
26
35
|
{% endif %}
|
|
36
|
+
{% if kind.categorised %}
|
|
37
|
+
<th scope="col">Categories</th>
|
|
38
|
+
{% endif %}
|
|
27
39
|
{% if kind.dated %}
|
|
28
40
|
<th scope="col">Date</th>
|
|
29
41
|
{% else %}
|
|
@@ -36,11 +48,14 @@
|
|
|
36
48
|
<tbody>
|
|
37
49
|
{% for document in documents %}
|
|
38
50
|
<tr>
|
|
39
|
-
<td><a href="{{ document.editUrl }}">{{ document.title }}</a
|
|
51
|
+
<td><a href="{{ document.editUrl }}">{{ document.title }}</a>{% if document.role %} — <span class="admin-page-role">{{ document.role }}</span>{% endif %}</td>
|
|
40
52
|
<td>{{ document.author }}</td>
|
|
41
53
|
{% if kind.tagged %}
|
|
42
54
|
<td>{{ document.tags }}</td>
|
|
43
55
|
{% endif %}
|
|
56
|
+
{% if kind.categorised %}
|
|
57
|
+
<td>{{ document.categories }}</td>
|
|
58
|
+
{% endif %}
|
|
44
59
|
{% if kind.dated %}
|
|
45
60
|
<td>{{ document.date | date('html') }}</td>
|
|
46
61
|
{% else %}
|
|
@@ -51,6 +66,8 @@
|
|
|
51
66
|
<span class="admin-status admin-status-trashed">Trash</span>
|
|
52
67
|
{% elif document.draft %}
|
|
53
68
|
<span class="admin-status admin-status-draft">Draft</span>
|
|
69
|
+
{% elif document.scheduled %}
|
|
70
|
+
<span class="admin-status admin-status-scheduled">Scheduled</span>
|
|
54
71
|
{% else %}
|
|
55
72
|
<span class="admin-status">Published</span>
|
|
56
73
|
{% endif %}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{# /admin/tags and /admin/categories: every term in use, what carries it, and
|
|
2
|
+
the three things that can be done to it — rename, merge and delete. One
|
|
3
|
+
template for both taxonomies; `kind` says which. #}
|
|
4
|
+
{% extends "layouts/shell.njk" %}
|
|
5
|
+
|
|
6
|
+
{% block title %}{{ heading }}{% endblock %}
|
|
7
|
+
|
|
8
|
+
{% block content %}
|
|
9
|
+
<h1>{{ heading }}</h1>
|
|
10
|
+
|
|
11
|
+
{# Above the table rather than under the field it came from: a refusal may be
|
|
12
|
+
about a term the table no longer has a row for. #}
|
|
13
|
+
{% if problems.to %}
|
|
14
|
+
<p class="admin-error">{{ problems.to }}</p>
|
|
15
|
+
{% endif %}
|
|
16
|
+
|
|
17
|
+
{% if confirm %}
|
|
18
|
+
<form class="admin-settings" method="post" action="{{ renameUrl }}">
|
|
19
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
20
|
+
<input type="hidden" name="{{ fields.term }}" value="{{ confirm.term }}" />
|
|
21
|
+
<input type="hidden" name="{{ fields.to }}" value="{{ confirm.to }}" />
|
|
22
|
+
<input type="hidden" name="{{ fields.confirm }}" value="1" />
|
|
23
|
+
|
|
24
|
+
<h2>Merge “{{ confirm.term }}” into “{{ confirm.to }}”?</h2>
|
|
25
|
+
|
|
26
|
+
<p>
|
|
27
|
+
There is already a {{ label }} called “{{ confirm.to }}”, on
|
|
28
|
+
{{ confirm.targetFiles }} {% if confirm.targetFiles == 1 %}file{% else %}files{% endif %}.
|
|
29
|
+
Renaming “{{ confirm.term }}” merges the
|
|
30
|
+
{{ confirm.files }} {% if confirm.files == 1 %}file{% else %}files{% endif %} carrying it
|
|
31
|
+
into that one. A file that already carries both keeps it once.
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<p class="admin-settings-buttons">
|
|
35
|
+
<button type="submit">Merge them</button>
|
|
36
|
+
<a href="{{ listUrl }}">Cancel</a>
|
|
37
|
+
</p>
|
|
38
|
+
</form>
|
|
39
|
+
{% endif %}
|
|
40
|
+
|
|
41
|
+
{% if terms.length == 0 %}
|
|
42
|
+
<p>Nothing carries a {{ label }} yet.</p>
|
|
43
|
+
{% else %}
|
|
44
|
+
<table class="admin-list">
|
|
45
|
+
<thead>
|
|
46
|
+
<tr>
|
|
47
|
+
<th scope="col">{{ kind.singular | capitalize }}</th>
|
|
48
|
+
<th scope="col">Posts</th>
|
|
49
|
+
<th scope="col">Files</th>
|
|
50
|
+
<th scope="col">Rename</th>
|
|
51
|
+
<th scope="col">Actions</th>
|
|
52
|
+
</tr>
|
|
53
|
+
</thead>
|
|
54
|
+
<tbody>
|
|
55
|
+
{% for entry in terms %}
|
|
56
|
+
<tr>
|
|
57
|
+
<td><a href="{{ entry.archiveUrl }}">{{ entry.term }}</a></td>
|
|
58
|
+
<td>{{ entry.published }}</td>
|
|
59
|
+
<td>{{ entry.total }}</td>
|
|
60
|
+
<td>
|
|
61
|
+
<form class="admin-inline" method="post" action="{{ renameUrl }}">
|
|
62
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
63
|
+
<input type="hidden" name="{{ fields.term }}" value="{{ entry.term }}" />
|
|
64
|
+
<label class="admin-visually-hidden" for="rename-{{ loop.index }}">
|
|
65
|
+
Rename {{ entry.term }} to
|
|
66
|
+
</label>
|
|
67
|
+
<input
|
|
68
|
+
id="rename-{{ loop.index }}"
|
|
69
|
+
name="{{ fields.to }}"
|
|
70
|
+
type="text"
|
|
71
|
+
value="{% if form.term == entry.term %}{{ form.to }}{% endif %}"
|
|
72
|
+
required
|
|
73
|
+
/>
|
|
74
|
+
<button type="submit">Rename</button>
|
|
75
|
+
</form>
|
|
76
|
+
</td>
|
|
77
|
+
<td class="admin-actions">
|
|
78
|
+
<form method="post" action="{{ deleteUrl }}">
|
|
79
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
80
|
+
<input type="hidden" name="{{ fields.term }}" value="{{ entry.term }}" />
|
|
81
|
+
<button type="submit">Delete</button>
|
|
82
|
+
</form>
|
|
83
|
+
</td>
|
|
84
|
+
</tr>
|
|
85
|
+
{% endfor %}
|
|
86
|
+
</tbody>
|
|
87
|
+
</table>
|
|
88
|
+
|
|
89
|
+
<p class="admin-hint">
|
|
90
|
+
Renaming, merging and deleting rewrite the front matter of every file carrying the
|
|
91
|
+
{{ label }} — drafts, scheduled posts and the trash included — and tell the feeds and the
|
|
92
|
+
fediverse about each published post that changed. The Files column is how many that is.
|
|
93
|
+
</p>
|
|
94
|
+
{% endif %}
|
|
95
|
+
{% endblock %}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
{# /admin/federation: who this site's people are to the fediverse, who follows
|
|
2
|
+
each of them, what arrived in the inbox, and how what went out landed. #}
|
|
3
|
+
{% extends "layouts/shell.njk" %}
|
|
4
|
+
|
|
5
|
+
{% block title %}Federation{% endblock %}
|
|
6
|
+
|
|
7
|
+
{% block content %}
|
|
8
|
+
<h1>Federation</h1>
|
|
9
|
+
|
|
10
|
+
{% if actors.length %}
|
|
11
|
+
{% for actor in actors %}
|
|
12
|
+
<section class="admin-panel admin-actor">
|
|
13
|
+
<h2>{{ actor.handle }}</h2>
|
|
14
|
+
<div class="admin-actor-identity">
|
|
15
|
+
{% if actor.avatarUrl %}
|
|
16
|
+
<img class="admin-avatar admin-avatar-large" src="{{ actor.avatarUrl }}" alt="" width="96" height="96" />
|
|
17
|
+
{% else %}
|
|
18
|
+
<span class="admin-avatar admin-avatar-large admin-avatar-blank" aria-hidden="true"></span>
|
|
19
|
+
{% endif %}
|
|
20
|
+
<p class="admin-actor-handle">{{ actor.name }}</p>
|
|
21
|
+
</div>
|
|
22
|
+
<dl class="admin-actor-fields">
|
|
23
|
+
<div>
|
|
24
|
+
<dt>Summary</dt>
|
|
25
|
+
<dd>{% if actor.summary %}{{ actor.summary }}{% else %}<span class="admin-empty">None set.</span>{% endif %}</dd>
|
|
26
|
+
</div>
|
|
27
|
+
<div>
|
|
28
|
+
<dt>Actor</dt>
|
|
29
|
+
<dd><a href="{{ actor.actorId }}">{{ actor.actorId }}</a></dd>
|
|
30
|
+
</div>
|
|
31
|
+
<div>
|
|
32
|
+
<dt>Profile</dt>
|
|
33
|
+
<dd><a href="{{ actor.url }}">{{ actor.url }}</a></dd>
|
|
34
|
+
</div>
|
|
35
|
+
<div>
|
|
36
|
+
<dt>Followers</dt>
|
|
37
|
+
<dd>{{ actor.followerCount }}</dd>
|
|
38
|
+
</div>
|
|
39
|
+
</dl>
|
|
40
|
+
|
|
41
|
+
{% if actor.followers.length %}
|
|
42
|
+
<table class="admin-list">
|
|
43
|
+
<thead>
|
|
44
|
+
<tr>
|
|
45
|
+
<th scope="col">Follower</th>
|
|
46
|
+
<th scope="col">Handle</th>
|
|
47
|
+
<th scope="col">Followed</th>
|
|
48
|
+
</tr>
|
|
49
|
+
</thead>
|
|
50
|
+
<tbody>
|
|
51
|
+
{% for follower in actor.followers %}
|
|
52
|
+
<tr>
|
|
53
|
+
<td class="admin-follower">
|
|
54
|
+
{% if follower.iconUrl %}
|
|
55
|
+
<img class="admin-avatar" src="{{ follower.iconUrl }}" alt="" width="32" height="32" loading="lazy" />
|
|
56
|
+
{% else %}
|
|
57
|
+
<span class="admin-avatar admin-avatar-blank" aria-hidden="true"></span>
|
|
58
|
+
{% endif %}
|
|
59
|
+
<a href="{{ follower.url }}">{{ follower.name }}</a>
|
|
60
|
+
</td>
|
|
61
|
+
<td>{{ follower.handle }}</td>
|
|
62
|
+
<td>{{ follower.followedAt | date('html') }}</td>
|
|
63
|
+
</tr>
|
|
64
|
+
{% endfor %}
|
|
65
|
+
</tbody>
|
|
66
|
+
</table>
|
|
67
|
+
{% else %}
|
|
68
|
+
<p class="admin-empty">Nobody follows {{ actor.name }} yet.</p>
|
|
69
|
+
{% endif %}
|
|
70
|
+
</section>
|
|
71
|
+
{% endfor %}
|
|
72
|
+
{% else %}
|
|
73
|
+
<section class="admin-panel admin-actor">
|
|
74
|
+
<h2>Actors</h2>
|
|
75
|
+
<p class="admin-empty">The site has no users, so it has no actors.</p>
|
|
76
|
+
</section>
|
|
77
|
+
{% endif %}
|
|
78
|
+
|
|
79
|
+
<section class="admin-panel">
|
|
80
|
+
<h2>Relays</h2>
|
|
81
|
+
{% if relays.length %}
|
|
82
|
+
<table class="admin-list">
|
|
83
|
+
<thead>
|
|
84
|
+
<tr>
|
|
85
|
+
<th scope="col">Relay</th>
|
|
86
|
+
<th scope="col">State</th>
|
|
87
|
+
<th scope="col">Since</th>
|
|
88
|
+
<th scope="col">Last delivery</th>
|
|
89
|
+
<th scope="col">Actions</th>
|
|
90
|
+
</tr>
|
|
91
|
+
</thead>
|
|
92
|
+
<tbody>
|
|
93
|
+
{% for relay in relays %}
|
|
94
|
+
<tr>
|
|
95
|
+
<td>
|
|
96
|
+
{% if relay.actorId %}
|
|
97
|
+
<a href="{{ relay.actorId }}">{{ relay.inboxId }}</a>
|
|
98
|
+
{% else %}
|
|
99
|
+
{{ relay.inboxId }}
|
|
100
|
+
{% endif %}
|
|
101
|
+
{% if relay.reason %}
|
|
102
|
+
<p class="admin-hint">{{ relay.reason }}</p>
|
|
103
|
+
{% endif %}
|
|
104
|
+
</td>
|
|
105
|
+
<td>
|
|
106
|
+
{% if relay.state == 'rejected' %}
|
|
107
|
+
<span class="admin-status admin-status-failed">{{ relay.stateLabel }}</span>
|
|
108
|
+
{% else %}
|
|
109
|
+
{{ relay.stateLabel }}
|
|
110
|
+
{% endif %}
|
|
111
|
+
</td>
|
|
112
|
+
<td>{{ relay.updatedAt | date('html') }}</td>
|
|
113
|
+
<td>
|
|
114
|
+
{% if relay.lastDelivery %}
|
|
115
|
+
{{ relay.lastDelivery.activityType }} {{ relay.lastDelivery.status }}
|
|
116
|
+
<span class="admin-inbox-when">{{ relay.lastDelivery.attemptedAt | date('html') }}</span>
|
|
117
|
+
{% if relay.lastDelivery.error %}
|
|
118
|
+
<p class="admin-hint">{{ relay.lastDelivery.error }}</p>
|
|
119
|
+
{% endif %}
|
|
120
|
+
{% else %}
|
|
121
|
+
<span class="admin-empty">Nothing yet.</span>
|
|
122
|
+
{% endif %}
|
|
123
|
+
</td>
|
|
124
|
+
<td class="admin-actions">
|
|
125
|
+
{% if relay.retriable %}
|
|
126
|
+
<form method="post" action="{{ relayRetryUrl }}">
|
|
127
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
128
|
+
<input type="hidden" name="{{ fields.relay }}" value="{{ relay.inboxId }}" />
|
|
129
|
+
<button type="submit">Retry</button>
|
|
130
|
+
</form>
|
|
131
|
+
{% endif %}
|
|
132
|
+
</td>
|
|
133
|
+
</tr>
|
|
134
|
+
{% endfor %}
|
|
135
|
+
</tbody>
|
|
136
|
+
</table>
|
|
137
|
+
<p class="admin-hint">
|
|
138
|
+
A relay boosts every public post it is sent on to instances nobody here
|
|
139
|
+
follows. The list lives on the Settings screen; Retry sends the follow
|
|
140
|
+
again to one that is still waiting.
|
|
141
|
+
</p>
|
|
142
|
+
{% else %}
|
|
143
|
+
<p class="admin-empty">The site subscribes to no relay. Add one on the Settings screen.</p>
|
|
144
|
+
{% endif %}
|
|
145
|
+
</section>
|
|
146
|
+
|
|
147
|
+
<section class="admin-panel">
|
|
148
|
+
<h2>Recent activity</h2>
|
|
149
|
+
{% if inbox.length %}
|
|
150
|
+
<ul class="admin-inbox">
|
|
151
|
+
{% for entry in inbox %}
|
|
152
|
+
<li>
|
|
153
|
+
<span class="admin-inbox-actor"><a href="{{ entry.actorId }}">{{ entry.actorLabel }}</a></span>
|
|
154
|
+
{% if entry.remoteUrl %}
|
|
155
|
+
<a href="{{ entry.remoteUrl }}">{{ entry.action }}</a>
|
|
156
|
+
{% else %}
|
|
157
|
+
{{ entry.action }}
|
|
158
|
+
{% endif %}
|
|
159
|
+
{% if entry.post %}
|
|
160
|
+
<a href="{{ entry.post.editUrl }}">{{ entry.post.title }}</a>
|
|
161
|
+
{% else %}
|
|
162
|
+
<span class="admin-empty">something of ours</span>
|
|
163
|
+
{% endif %}
|
|
164
|
+
<span class="admin-inbox-when">{{ entry.receivedAt | date('html') }}</span>
|
|
165
|
+
</li>
|
|
166
|
+
{% endfor %}
|
|
167
|
+
</ul>
|
|
168
|
+
{% else %}
|
|
169
|
+
<p class="admin-empty">Nothing has arrived yet: no likes, boosts or replies.</p>
|
|
170
|
+
{% endif %}
|
|
171
|
+
</section>
|
|
172
|
+
|
|
173
|
+
<section class="admin-panel">
|
|
174
|
+
<h2>Delivery</h2>
|
|
175
|
+
{% if posts.length %}
|
|
176
|
+
<table class="admin-list">
|
|
177
|
+
<thead>
|
|
178
|
+
<tr>
|
|
179
|
+
<th scope="col">Post</th>
|
|
180
|
+
<th scope="col">Announced by</th>
|
|
181
|
+
<th scope="col">Last activity</th>
|
|
182
|
+
<th scope="col">Sent</th>
|
|
183
|
+
<th scope="col">Queued</th>
|
|
184
|
+
<th scope="col">Failed</th>
|
|
185
|
+
<th scope="col">Webmentions</th>
|
|
186
|
+
<th scope="col">Actions</th>
|
|
187
|
+
</tr>
|
|
188
|
+
</thead>
|
|
189
|
+
<tbody>
|
|
190
|
+
{% for row in posts %}
|
|
191
|
+
<tr>
|
|
192
|
+
<td>
|
|
193
|
+
<a href="{{ row.post.editUrl }}">{{ row.post.title }}</a>
|
|
194
|
+
{% if row.trashed %}<p class="admin-hint">In the trash.</p>{% endif %}
|
|
195
|
+
</td>
|
|
196
|
+
<td>{% if row.author %}@{{ row.author }}{% else %}<span class="admin-empty">—</span>{% endif %}</td>
|
|
197
|
+
{% if row.lastActivity %}
|
|
198
|
+
<td>{{ row.lastActivity.activityType }} <span class="admin-inbox-when">{{ row.lastActivity.attemptedAt | date('html') }}</span></td>
|
|
199
|
+
<td>{{ row.lastActivity.counts.sent }}</td>
|
|
200
|
+
<td>{{ row.lastActivity.counts.queued }}</td>
|
|
201
|
+
<td>{% if row.lastActivity.counts.failed %}<span class="admin-status admin-status-failed">{{ row.lastActivity.counts.failed }}</span>{% else %}0{% endif %}</td>
|
|
202
|
+
{% else %}
|
|
203
|
+
<td><span class="admin-empty">Nothing recorded.</span></td>
|
|
204
|
+
<td>—</td>
|
|
205
|
+
<td>—</td>
|
|
206
|
+
<td>—</td>
|
|
207
|
+
{% endif %}
|
|
208
|
+
<td>
|
|
209
|
+
{% if row.webmentions.sent or row.webmentions["none"] or row.webmentions.failed %}
|
|
210
|
+
{{ row.webmentions.sent }} told{% if row.webmentions["none"] %}, {{ row.webmentions["none"] }} take none{% endif %}{% if row.webmentions.failed %}, <span class="admin-status admin-status-failed">{{ row.webmentions.failed }} failed</span>{% endif %}
|
|
211
|
+
{% else %}
|
|
212
|
+
<span class="admin-empty">—</span>
|
|
213
|
+
{% endif %}
|
|
214
|
+
</td>
|
|
215
|
+
<td class="admin-actions">
|
|
216
|
+
<form method="post" action="{{ resendUrl }}">
|
|
217
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
218
|
+
<input type="hidden" name="{{ fields.slug }}" value="{{ row.slug }}" />
|
|
219
|
+
<button type="submit">Resend</button>
|
|
220
|
+
</form>
|
|
221
|
+
</td>
|
|
222
|
+
</tr>
|
|
223
|
+
{% endfor %}
|
|
224
|
+
</tbody>
|
|
225
|
+
</table>
|
|
226
|
+
<p class="admin-hint">
|
|
227
|
+
Resending builds the post again from its file and sends it to every one
|
|
228
|
+
of its author's followers and every accepted relay the site has now, and tells every
|
|
229
|
+
page the post links to at the same time: an update for a
|
|
230
|
+
published post, a withdrawal for one in the trash. The outcomes are a
|
|
231
|
+
cache, so a database deleted since leaves the posts listed with nothing
|
|
232
|
+
recorded against them.
|
|
233
|
+
</p>
|
|
234
|
+
{% else %}
|
|
235
|
+
<p class="admin-empty">No post has been announced to the fediverse yet.</p>
|
|
236
|
+
{% endif %}
|
|
237
|
+
</section>
|
|
238
|
+
{% endblock %}
|