@geekity/cms 0.3.0 → 0.5.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 +2217 -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/{layouts/document-editor.njk → pages/documents/editor.njk} +75 -59
- 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/federation/settings.njk +77 -0
- package/admin/pages/media/library.njk +160 -0
- package/admin/pages/messages/all.njk +110 -0
- package/admin/pages/navigation/menus.njk +129 -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/general.njk +29 -0
- package/admin/pages/settings/permalinks.njk +50 -0
- package/admin/pages/settings/reading.njk +64 -0
- package/admin/pages/tools/content-index.njk +89 -0
- package/admin/pages/users/edit.njk +239 -0
- package/admin/pages/users/list.njk +51 -0
- package/admin/pages/users/new.njk +41 -0
- package/admin/static/admin.css +558 -3
- package/admin/static/copy.js +52 -0
- package/admin/static/editor.js +16 -16
- package/admin/static/slug.js +61 -0
- package/dist/access-log.d.ts +44 -0
- package/dist/access-log.d.ts.map +1 -0
- package/dist/access-log.js +71 -0
- package/dist/access-log.js.map +1 -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 +117 -10
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +328 -41
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +161 -50
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +235 -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 +143 -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/navigation.d.ts +155 -0
- package/dist/admin/navigation.d.ts.map +1 -0
- package/dist/admin/navigation.js +292 -0
- package/dist/admin/navigation.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 +164 -105
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/session.d.ts +17 -3
- package/dist/admin/session.d.ts.map +1 -1
- package/dist/admin/session.js +19 -5
- package/dist/admin/session.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 +48 -0
- package/dist/admin/settings-federation.d.ts.map +1 -0
- package/dist/admin/settings-federation.js +123 -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 +119 -0
- package/dist/admin/settings-page.d.ts.map +1 -0
- package/dist/admin/settings-page.js +132 -0
- package/dist/admin/settings-page.js.map +1 -0
- package/dist/admin/settings-pages.d.ts +30 -0
- package/dist/admin/settings-pages.d.ts.map +1 -0
- package/dist/admin/settings-pages.js +43 -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 +34 -0
- package/dist/admin/settings-reading.d.ts.map +1 -0
- package/dist/admin/settings-reading.js +49 -0
- package/dist/admin/settings-reading.js.map +1 -0
- package/dist/admin/settings.d.ts +339 -96
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +600 -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 +46 -14
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +46 -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/tools.d.ts +111 -0
- package/dist/admin/tools.d.ts.map +1 -0
- package/dist/admin/tools.js +182 -0
- package/dist/admin/tools.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 +429 -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 +123 -0
- package/dist/comments/form.d.ts.map +1 -0
- package/dist/comments/form.js +79 -0
- package/dist/comments/form.js.map +1 -0
- package/dist/comments/index.d.ts +16 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +10 -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 +60 -0
- package/dist/comments/routes.d.ts.map +1 -0
- package/dist/comments/routes.js +212 -0
- package/dist/comments/routes.js.map +1 -0
- package/dist/comments/submission.d.ts +297 -0
- package/dist/comments/submission.d.ts.map +1 -0
- package/dist/comments/submission.js +280 -0
- package/dist/comments/submission.js.map +1 -0
- package/dist/comments/viewer.d.ts +21 -0
- package/dist/comments/viewer.d.ts.map +1 -0
- package/dist/comments/viewer.js +45 -0
- package/dist/comments/viewer.js.map +1 -0
- package/dist/config.d.ts +225 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +121 -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 +220 -7
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +392 -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 +70 -5
- 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 +46 -10
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +300 -28
- 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 +344 -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 +195 -0
- package/dist/web/navigation.d.ts.map +1 -0
- package/dist/web/navigation.js +300 -0
- package/dist/web/navigation.js.map +1 -0
- package/dist/web/negotiate.d.ts +31 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +31 -11
- 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 +203 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +341 -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 +854 -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 +226 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +314 -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 +8 -0
- package/templates/site/content/pages/about.md +7 -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 +1216 -50
- package/themes/default/layouts/404.njk +2 -3
- package/themes/default/layouts/author.njk +36 -0
- package/themes/default/layouts/base.njk +161 -31
- package/themes/default/layouts/category.njk +27 -0
- package/themes/default/layouts/front-page.njk +56 -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 +71 -0
- package/themes/default/partials/comment-form.njk +137 -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/menu.njk +32 -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 +22 -0
- package/themes/default/partials/tags.njk +26 -5
- package/themes/default/static/highlight.js +4 -0
- package/themes/default/static/style.css +1142 -194
- package/themes/default/theme.json +9 -0
- 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,203 @@
|
|
|
1
|
+
{# /admin/settings/email: how the site sends mail, and where a message written
|
|
2
|
+
to it goes. #}
|
|
3
|
+
{% extends "layouts/settings-page.njk" %}
|
|
4
|
+
{% import "components/fields.njk" as field %}
|
|
5
|
+
|
|
6
|
+
{% block settingsFields %}
|
|
7
|
+
{% set providerHint %}
|
|
8
|
+
The key or password each one needs is a credential and is saved below,
|
|
9
|
+
in <code>data/mail.json</code> rather than in <code>site.json</code>.
|
|
10
|
+
{% endset %}
|
|
11
|
+
{% call field.select('settings-mail-provider', fields.mailProvider, 'Provider',
|
|
12
|
+
error=problems.mailProvider, hint=providerHint) %}
|
|
13
|
+
{% for provider in mailProviders %}
|
|
14
|
+
<option value="{{ provider }}"{% if form.mailProvider == provider %} selected{% endif %}>
|
|
15
|
+
{% if provider == 'none' %}None — this site sends no email{% elif provider == 'brevo' %}Brevo (transactional API){% else %}SMTP{% endif %}
|
|
16
|
+
</option>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
{% endcall %}
|
|
19
|
+
|
|
20
|
+
{{ field.text('settings-mail-from-name', fields.mailFromName, 'From name', form.mailFromName,
|
|
21
|
+
hint='The name on the From line. Empty uses the site title.') }}
|
|
22
|
+
|
|
23
|
+
{% set fromAddressHint %}
|
|
24
|
+
Providers only send from an address they have verified, so this should be
|
|
25
|
+
one you own. Empty falls back to <code>no-reply@</code> at the site's host.
|
|
26
|
+
{% endset %}
|
|
27
|
+
{{ field.text('settings-mail-from-address', fields.mailFromAddress, 'From address',
|
|
28
|
+
form.mailFromAddress, error=problems.mailFromAddress, hint=fromAddressHint,
|
|
29
|
+
inputmode='email') }}
|
|
30
|
+
|
|
31
|
+
{{ field.text('settings-mail-reply-to', fields.mailReplyTo, 'Reply-to', form.mailReplyTo,
|
|
32
|
+
error=problems.mailReplyTo, inputmode='email',
|
|
33
|
+
hint='Where a reply goes. Empty replies to the From address.') }}
|
|
34
|
+
|
|
35
|
+
{% set contactHint %}
|
|
36
|
+
Where a message from a page’s contact form is sent, with reply-to set to whoever
|
|
37
|
+
wrote it. Empty writes to the first admin with an email address. It is read when a
|
|
38
|
+
message arrives and never appears on the public site.
|
|
39
|
+
{% endset %}
|
|
40
|
+
{{ field.text('settings-contact-email', fields.contactEmail, 'Contact address',
|
|
41
|
+
form.contactEmail, error=problems.contactEmail, hint=contactHint, inputmode='email') }}
|
|
42
|
+
{% endblock %}
|
|
43
|
+
|
|
44
|
+
{% block settingsPanels %}
|
|
45
|
+
{# The mail credential is its own pair of forms for the reason the Akismet
|
|
46
|
+
key is: an API key and an SMTP password belong in data/mail.json, not in
|
|
47
|
+
the public site.json, and a mistyped one must not lose an edit to the
|
|
48
|
+
From line. #}
|
|
49
|
+
<section class="admin-settings admin-mail-panel">
|
|
50
|
+
<h2>Mail credentials</h2>
|
|
51
|
+
|
|
52
|
+
<p class="admin-mail-state admin-mail-{{ mailProvider }}">
|
|
53
|
+
{% if mailConfigured %}
|
|
54
|
+
<strong>Configured</strong> — sending through {{ mailProvider }}.
|
|
55
|
+
{% elif mailProvider == 'none' %}
|
|
56
|
+
<strong>Not sending</strong> — no provider is chosen.
|
|
57
|
+
{% else %}
|
|
58
|
+
<strong>Not configured</strong> — {{ mailProvider }} is chosen but has no credential.
|
|
59
|
+
{% endif %}
|
|
60
|
+
</p>
|
|
61
|
+
<p class="admin-hint">{{ mailHint }}</p>
|
|
62
|
+
|
|
63
|
+
{# One provider's boxes, never both. A site sending through Brevo has no
|
|
64
|
+
use for an SMTP port and a site sending through SMTP has none for an API
|
|
65
|
+
key, and seven boxes where one is wanted is how a screen teaches people
|
|
66
|
+
to stop reading it.
|
|
67
|
+
|
|
68
|
+
The provider branched on is the saved one, from `site.json`, not
|
|
69
|
+
whatever the select above happens to be showing: that select belongs to
|
|
70
|
+
the settings form and nothing it shows is true until Save settings is
|
|
71
|
+
pressed. Saying so is the paragraph below — without it, somebody who
|
|
72
|
+
picks SMTP, looks straight down for a Host box and finds an API key
|
|
73
|
+
would reasonably call this broken. Doing it the other way round would
|
|
74
|
+
take JavaScript, and no other admin screen needs any. #}
|
|
75
|
+
{% if mailProvider == 'none' %}
|
|
76
|
+
<p class="admin-hint">
|
|
77
|
+
No provider is <em>saved</em>, so there is no credential to give and no
|
|
78
|
+
box here to give it in. Choose one under <strong>Provider</strong> above
|
|
79
|
+
and press <strong>Save settings</strong> — picking it in the select
|
|
80
|
+
alone changes nothing — and the boxes it needs appear here.
|
|
81
|
+
</p>
|
|
82
|
+
{% else %}
|
|
83
|
+
<p class="admin-hint">
|
|
84
|
+
These are the boxes
|
|
85
|
+
<strong>{% if mailProvider == 'brevo' %}Brevo{% else %}SMTP{% endif %}</strong>
|
|
86
|
+
needs, and they follow the provider this site has <em>saved</em> — not
|
|
87
|
+
the one the select above is showing. Change <strong>Provider</strong> and
|
|
88
|
+
press <strong>Save settings</strong> first, and the boxes here change with it.
|
|
89
|
+
</p>
|
|
90
|
+
|
|
91
|
+
<form method="post" action="{{ mailUrl }}">
|
|
92
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
93
|
+
|
|
94
|
+
{% if mailProvider == 'brevo' %}
|
|
95
|
+
<h3>Brevo</h3>
|
|
96
|
+
{% if mailBrevoPresent %}
|
|
97
|
+
<p class="admin-hint">A key is stored, ending {{ mailBrevoKeyHint }}.</p>
|
|
98
|
+
{% set brevoPlaceholder = 'Leave blank to keep the stored key' %}
|
|
99
|
+
{% else %}
|
|
100
|
+
{% set brevoPlaceholder = 'Paste your key' %}
|
|
101
|
+
{% endif %}
|
|
102
|
+
{{ field.password('settings-mail-brevo-key', mailFields.brevoApiKey, 'API key',
|
|
103
|
+
autocomplete='off', spellcheck='false', placeholder=brevoPlaceholder) }}
|
|
104
|
+
{% else %}
|
|
105
|
+
<h3>SMTP</h3>
|
|
106
|
+
{{ field.text('settings-mail-smtp-host', mailFields.smtpHost, 'Host', mailSmtp.host,
|
|
107
|
+
autocomplete='off') }}
|
|
108
|
+
|
|
109
|
+
{{ field.text('settings-mail-smtp-port', mailFields.smtpPort, 'Port',
|
|
110
|
+
mailSmtp.port if mailSmtp else 587, inputmode='numeric') }}
|
|
111
|
+
|
|
112
|
+
{# Its own box with the sentence beside it, like every other switch in
|
|
113
|
+
the admin. It used to be a label wrapped round the tick in a class the
|
|
114
|
+
stylesheet has never heard of, so it was the one switch here that
|
|
115
|
+
rendered unstyled. #}
|
|
116
|
+
{{ field.checkbox('settings-mail-smtp-secure', mailFields.smtpSecure,
|
|
117
|
+
'TLS from the first byte (port 465)', checked=mailSmtp.secure,
|
|
118
|
+
hint='Leave this off for port 587, which upgrades with STARTTLS.') }}
|
|
119
|
+
|
|
120
|
+
{{ field.text('settings-mail-smtp-user', mailFields.smtpUser, 'Username', mailSmtp.user,
|
|
121
|
+
autocomplete='off') }}
|
|
122
|
+
|
|
123
|
+
{% if mailSmtp.hasPassword %}
|
|
124
|
+
{% set smtpPlaceholder = 'Leave blank to keep the stored password' %}
|
|
125
|
+
{% else %}
|
|
126
|
+
{% set smtpPlaceholder = 'The SMTP password' %}
|
|
127
|
+
{% endif %}
|
|
128
|
+
{{ field.password('settings-mail-smtp-password', mailFields.smtpPassword, 'Password',
|
|
129
|
+
autocomplete='off', spellcheck='false', placeholder=smtpPlaceholder) }}
|
|
130
|
+
{% endif %}
|
|
131
|
+
|
|
132
|
+
<p class="admin-settings-buttons">
|
|
133
|
+
<button type="submit">Save credentials</button>
|
|
134
|
+
</p>
|
|
135
|
+
</form>
|
|
136
|
+
{% endif %}
|
|
137
|
+
|
|
138
|
+
{# A credential kept for a provider that is not the chosen one. Its boxes
|
|
139
|
+
are gone but the secret is still on disk, and this panel is the only
|
|
140
|
+
place in the admin that says so, so it is reported in words instead.
|
|
141
|
+
Hiding a stored API key would be the screen lying about what the site
|
|
142
|
+
holds. #}
|
|
143
|
+
{% set brevoStoredElsewhere = mailBrevoPresent and mailProvider != 'brevo' %}
|
|
144
|
+
{% set smtpStoredElsewhere = mailSmtpPresent and mailProvider != 'smtp' %}
|
|
145
|
+
{% if brevoStoredElsewhere or smtpStoredElsewhere %}
|
|
146
|
+
<h3>Also stored</h3>
|
|
147
|
+
|
|
148
|
+
{% if brevoStoredElsewhere %}
|
|
149
|
+
<p class="admin-field-static">
|
|
150
|
+
A <strong>Brevo</strong> API key, ending {{ mailBrevoKeyHint }}.
|
|
151
|
+
</p>
|
|
152
|
+
{% endif %}
|
|
153
|
+
{% if smtpStoredElsewhere %}
|
|
154
|
+
<p class="admin-field-static">
|
|
155
|
+
An <strong>SMTP</strong> server:
|
|
156
|
+
{% if mailSmtp.user %}{{ mailSmtp.user }} at {% endif %}{{ mailSmtp.host }}
|
|
157
|
+
port {{ mailSmtp.port }}{% if mailSmtp.hasPassword %}, with a password{% endif %}.
|
|
158
|
+
</p>
|
|
159
|
+
{% endif %}
|
|
160
|
+
|
|
161
|
+
<p class="admin-hint">
|
|
162
|
+
Kept in <code>data/mail.json</code> and used by nothing while
|
|
163
|
+
{% if mailProvider == 'none' %}no provider is chosen{% else %}{% if mailProvider == 'brevo' %}Brevo{% else %}SMTP{% endif %} is the chosen provider{% endif %}.
|
|
164
|
+
Choose that provider above to edit it, or press
|
|
165
|
+
<strong>Remove credentials</strong> to forget every credential this site
|
|
166
|
+
holds, this one included.
|
|
167
|
+
</p>
|
|
168
|
+
{% endif %}
|
|
169
|
+
|
|
170
|
+
{% if mailBrevoPresent or mailSmtpPresent %}
|
|
171
|
+
<form method="post" action="{{ mailUrl }}">
|
|
172
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
173
|
+
<input type="hidden" name="{{ mailFields.action }}" value="{{ mailRemove }}" />
|
|
174
|
+
<p class="admin-settings-buttons">
|
|
175
|
+
<button type="submit">Remove credentials</button>
|
|
176
|
+
</p>
|
|
177
|
+
</form>
|
|
178
|
+
{% endif %}
|
|
179
|
+
|
|
180
|
+
{# Only where there is something to send with, the way the notice switches
|
|
181
|
+
on a user's page are drawn only where there is both a provider and an
|
|
182
|
+
address (TASK-97). A Send test email button on a site with no credential
|
|
183
|
+
can do one thing, which is say it did nothing. #}
|
|
184
|
+
{% if mailConfigured %}
|
|
185
|
+
<form method="post" action="{{ mailTestUrl }}">
|
|
186
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
187
|
+
{{ field.text('settings-mail-test-to', mailTestFields.to, 'Send a test message to', '',
|
|
188
|
+
inputmode='email', placeholder='you@example.com') }}
|
|
189
|
+
<p class="admin-settings-buttons">
|
|
190
|
+
<button type="submit">Send test email</button>
|
|
191
|
+
</p>
|
|
192
|
+
</form>
|
|
193
|
+
{% endif %}
|
|
194
|
+
|
|
195
|
+
<p class="admin-hint">
|
|
196
|
+
Neither the API key nor the SMTP password is ever printed back into this
|
|
197
|
+
page. Both are kept in <code>data/mail.json</code> at mode
|
|
198
|
+
<code>0600</code>, beside the password hashes and the actor's private
|
|
199
|
+
keys, and never in <code>site.json</code>, which is public and in git.
|
|
200
|
+
Leaving a secret blank keeps the one already stored.
|
|
201
|
+
</p>
|
|
202
|
+
</section>
|
|
203
|
+
{% endblock %}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{# /admin/settings: what the site is called, where it lives, and its picture. #}
|
|
2
|
+
{% extends "layouts/settings-page.njk" %}
|
|
3
|
+
{% import "components/fields.njk" as field %}
|
|
4
|
+
|
|
5
|
+
{% block settingsFields %}
|
|
6
|
+
{{ field.text('settings-title', fields.title, 'Title', form.title,
|
|
7
|
+
error=problems.title, required=true, autofocus=true) }}
|
|
8
|
+
|
|
9
|
+
{{ field.text('settings-tagline', fields.tagline, 'Tagline', form.tagline,
|
|
10
|
+
hint='One line, shown under the title and used as the feed subtitle.') }}
|
|
11
|
+
|
|
12
|
+
{{ field.text('settings-author', fields.author, 'Author', form.author,
|
|
13
|
+
hint='The name on the feeds.') }}
|
|
14
|
+
|
|
15
|
+
{% set baseUrlHint %}In effect: <code>{{ baseUrlInEffect }}</code>. {{ baseUrlNote }}{% endset %}
|
|
16
|
+
{{ field.text('settings-base-url', fields.baseUrl, 'Base URL', form.baseUrl,
|
|
17
|
+
error=problems.baseUrl, hint=baseUrlHint, inputmode='url',
|
|
18
|
+
readonly=baseUrlOverridden, disabled=baseUrlOverridden) }}
|
|
19
|
+
|
|
20
|
+
{% set timezoneHint %}An IANA name, such as <code>Europe/London</code> or <code>UTC</code>.{% endset %}
|
|
21
|
+
{{ field.text('settings-timezone', fields.timezone, 'Time zone', form.timezone,
|
|
22
|
+
error=problems.timezone, hint=timezoneHint, required=true) }}
|
|
23
|
+
|
|
24
|
+
{% set languageHint %}A BCP 47 tag, such as <code>en</code> or <code>en-GB</code>. It is the page's <code>lang</code> and the feeds' language.{% endset %}
|
|
25
|
+
{{ field.text('settings-language', fields.language, 'Language', form.language,
|
|
26
|
+
error=problems.language, hint=languageHint, required=true) }}
|
|
27
|
+
{% endblock %}
|
|
28
|
+
|
|
29
|
+
{% block settingsPanels %}{% endblock %}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{# /admin/settings/permalinks: the URLs the archives live at, and the ones they
|
|
2
|
+
used to. #}
|
|
3
|
+
{% extends "layouts/settings-page.njk" %}
|
|
4
|
+
{% import "components/fields.njk" as field %}
|
|
5
|
+
|
|
6
|
+
{% block settingsFields %}
|
|
7
|
+
{% set tagBaseHint %}The tag archives live at <code>/{{ form.tagBase }}/{tag}/</code>. One path segment, no slashes.{% endset %}
|
|
8
|
+
{{ field.text('settings-tag-base', fields.tagBase, 'Tag base', form.tagBase,
|
|
9
|
+
error=problems.tagBase, hint=tagBaseHint, required=true, autofocus=true) }}
|
|
10
|
+
|
|
11
|
+
{% set categoryBaseHint %}The category archives live at <code>/{{ form.categoryBase }}/{name}/</code>.{% endset %}
|
|
12
|
+
{{ field.text('settings-category-base', fields.categoryBase, 'Category base', form.categoryBase,
|
|
13
|
+
error=problems.categoryBase, hint=categoryBaseHint, required=true) }}
|
|
14
|
+
{% endblock %}
|
|
15
|
+
|
|
16
|
+
{% block settingsPanels %}
|
|
17
|
+
{# The recorded renames are a record of what happened rather than a
|
|
18
|
+
preference: the taxonomy screens write them as a term is renamed or merged,
|
|
19
|
+
and this page is where the URLs they are about are decided. #}
|
|
20
|
+
<section class="admin-settings admin-redirects-panel">
|
|
21
|
+
<h2>Archive redirects</h2>
|
|
22
|
+
|
|
23
|
+
{% if taxonomyRedirects.length %}
|
|
24
|
+
<table class="admin-list">
|
|
25
|
+
<thead>
|
|
26
|
+
<tr><th scope="col">Taxonomy</th><th scope="col">Was</th><th scope="col">Is now</th></tr>
|
|
27
|
+
</thead>
|
|
28
|
+
<tbody>
|
|
29
|
+
{% for redirect in taxonomyRedirects %}
|
|
30
|
+
<tr>
|
|
31
|
+
<td>{{ redirect.label }}</td>
|
|
32
|
+
<td><code>{{ redirect.from }}</code></td>
|
|
33
|
+
<td><code>{{ redirect.to }}</code></td>
|
|
34
|
+
</tr>
|
|
35
|
+
{% endfor %}
|
|
36
|
+
</tbody>
|
|
37
|
+
</table>
|
|
38
|
+
<p class="admin-hint">
|
|
39
|
+
Every one of these answers with a permanent redirect to the archive the
|
|
40
|
+
term lives at now, so a link somebody published still arrives.
|
|
41
|
+
</p>
|
|
42
|
+
{% else %}
|
|
43
|
+
<p class="admin-hint">
|
|
44
|
+
Nothing has moved yet. Renaming or merging a term on the Tags or
|
|
45
|
+
Categories screen records the archive URL it used to have here, and the
|
|
46
|
+
site answers that URL with a permanent redirect from then on.
|
|
47
|
+
</p>
|
|
48
|
+
{% endif %}
|
|
49
|
+
</section>
|
|
50
|
+
{% endblock %}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{# /admin/settings/reading: what a visitor is shown, and who is told when it
|
|
2
|
+
changes. The site menu was here until TASK-108; it is on /admin/navigation,
|
|
3
|
+
with every other menu the site holds. #}
|
|
4
|
+
{% extends "layouts/settings-page.njk" %}
|
|
5
|
+
{% import "components/fields.njk" as field %}
|
|
6
|
+
|
|
7
|
+
{% block settingsFields %}
|
|
8
|
+
{# WordPress's "Your homepage displays": the empty option is Your latest
|
|
9
|
+
posts, so the choice and the page it needs are one control rather than a
|
|
10
|
+
radio and a select that can disagree with each other. #}
|
|
11
|
+
{% set homepageGone %}
|
|
12
|
+
{% if homepageMissing %}
|
|
13
|
+
<p class="admin-field-error">
|
|
14
|
+
The homepage was <code>{{ form.homepage }}</code>, which is no longer published,
|
|
15
|
+
so the site is showing its latest posts. Publish that page again to have it back,
|
|
16
|
+
or pick another.
|
|
17
|
+
</p>
|
|
18
|
+
{% endif %}
|
|
19
|
+
{% endset %}
|
|
20
|
+
{% set homepageHint %}
|
|
21
|
+
Your latest posts is the archive at <code>/</code>. A page instead is served
|
|
22
|
+
there, and its own URL redirects to <code>/</code> so there is one front page.
|
|
23
|
+
{% endset %}
|
|
24
|
+
{% call field.select('settings-homepage', fields.homepage, 'Your homepage displays',
|
|
25
|
+
error=problems.homepage, errorHtml=homepageGone, hint=homepageHint, autofocus=true) %}
|
|
26
|
+
<option value="">Your latest posts</option>
|
|
27
|
+
{% for page in pageChoices %}
|
|
28
|
+
<option value="{{ page.slug }}"{% if page.slug == form.homepage %} selected{% endif %}>{{ page.title }}</option>
|
|
29
|
+
{% endfor %}
|
|
30
|
+
{% endcall %}
|
|
31
|
+
|
|
32
|
+
{% set postsPageGone %}
|
|
33
|
+
{% if postsPageMissing %}
|
|
34
|
+
<p class="admin-field-error">
|
|
35
|
+
The posts page was <code>{{ form.postsPage }}</code>, which is no longer published,
|
|
36
|
+
so the listing has no page of its own.
|
|
37
|
+
</p>
|
|
38
|
+
{% endif %}
|
|
39
|
+
{% endset %}
|
|
40
|
+
{% set postsPageHint %}
|
|
41
|
+
Where the posts go once the homepage is a page: this page's URL carries the
|
|
42
|
+
listing, with its own title and words above it. It needs a homepage first.
|
|
43
|
+
The feeds stay at <code>/feed/</code> either way.
|
|
44
|
+
{% endset %}
|
|
45
|
+
{% call field.select('settings-posts-page', fields.postsPage, 'Posts page',
|
|
46
|
+
error=problems.postsPage, errorHtml=postsPageGone, hint=postsPageHint) %}
|
|
47
|
+
<option value="">— None —</option>
|
|
48
|
+
{% for page in pageChoices %}
|
|
49
|
+
<option value="{{ page.slug }}"{% if page.slug == form.postsPage %} selected{% endif %}>{{ page.title }}</option>
|
|
50
|
+
{% endfor %}
|
|
51
|
+
{% endcall %}
|
|
52
|
+
|
|
53
|
+
{{ field.text('settings-posts-per-page', fields.postsPerPage, 'Posts per page', form.postsPerPage,
|
|
54
|
+
error=problems.postsPerPage, inputmode='numeric', required=true,
|
|
55
|
+
hint='How many posts a listing page holds, on the home page and on every archive.') }}
|
|
56
|
+
|
|
57
|
+
{% set notifyHint %}
|
|
58
|
+
An rssCloud and WebSub server, told whenever a feed changes so subscribers
|
|
59
|
+
hear at once instead of waiting for their next poll. Every feed advertises
|
|
60
|
+
it. Leave it empty for none.
|
|
61
|
+
{% endset %}
|
|
62
|
+
{{ field.text('settings-notify-server', fields.notifyServer, 'Notify server', form.notifyServer,
|
|
63
|
+
error=problems.notifyServer, hint=notifyHint, inputmode='url') }}
|
|
64
|
+
{% endblock %}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{# /admin/tools: what the derived index holds, and the button that reads every
|
|
2
|
+
file back into it without stopping the site (TASK-95).
|
|
3
|
+
|
|
4
|
+
The counts are the point of the screen as much as the button is: an index
|
|
5
|
+
that disagrees with the files is not something the site complains about, so
|
|
6
|
+
the only way to notice is to be shown what it holds. #}
|
|
7
|
+
{% extends "layouts/shell.njk" %}
|
|
8
|
+
|
|
9
|
+
{% block title %}{{ heading }}{% endblock %}
|
|
10
|
+
|
|
11
|
+
{% block content %}
|
|
12
|
+
<h1>{{ heading }}</h1>
|
|
13
|
+
|
|
14
|
+
<p>
|
|
15
|
+
Everything in <code>data/geekity.db</code> is a reading of the files under
|
|
16
|
+
<code>{{ contentDir }}</code>, so it can always be read again. Rebuild it after
|
|
17
|
+
editing content outside the admin — over ssh, or with a
|
|
18
|
+
<code>git pull</code> while the site was down — or when what is listed here
|
|
19
|
+
disagrees with what is on disk.
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
<table class="admin-list">
|
|
23
|
+
<thead>
|
|
24
|
+
<tr>
|
|
25
|
+
<th scope="col">What the index holds</th>
|
|
26
|
+
<th scope="col">Count</th>
|
|
27
|
+
</tr>
|
|
28
|
+
</thead>
|
|
29
|
+
<tbody>
|
|
30
|
+
<tr>
|
|
31
|
+
<th scope="row">Documents</th>
|
|
32
|
+
<td>{{ indexed.documents }}</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<tr>
|
|
35
|
+
<th scope="row">Followers</th>
|
|
36
|
+
<td>{{ indexed.followers }}</td>
|
|
37
|
+
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<th scope="row">Inbox activities</th>
|
|
40
|
+
<td>{{ indexed.activities }}</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<th scope="row">Comments</th>
|
|
44
|
+
<td>{{ indexed.comments }}</td>
|
|
45
|
+
</tr>
|
|
46
|
+
</tbody>
|
|
47
|
+
</table>
|
|
48
|
+
|
|
49
|
+
{% if confirm %}
|
|
50
|
+
{# Offered rather than done, the way a merge is on the taxonomy screens.
|
|
51
|
+
The window in the middle is the whole reason: for as long as the scan
|
|
52
|
+
runs the site answers 404 for documents whose files are perfectly fine,
|
|
53
|
+
and that is not a thing to discover afterwards. #}
|
|
54
|
+
<form class="admin-settings" method="post" action="{{ rebuildUrl }}">
|
|
55
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
56
|
+
<input type="hidden" name="{{ fields.confirm }}" value="1" />
|
|
57
|
+
|
|
58
|
+
<h2>Rebuild the index now?</h2>
|
|
59
|
+
|
|
60
|
+
<p>
|
|
61
|
+
The index is emptied and every file read again. Until the scan finishes, this
|
|
62
|
+
site answers <strong>404</strong> for its posts and pages — under a second
|
|
63
|
+
on a small site, longer on a large one — and it is serving the whole time.
|
|
64
|
+
Nothing is deleted and nothing is sent: you stay signed in, the delivery log and
|
|
65
|
+
the relays are kept, and no follower, feed or linked page is told about a post
|
|
66
|
+
the scan re-indexes.
|
|
67
|
+
</p>
|
|
68
|
+
|
|
69
|
+
<p class="admin-settings-buttons">
|
|
70
|
+
<button type="submit">Rebuild it</button>
|
|
71
|
+
<a href="{{ toolsUrl }}">Cancel</a>
|
|
72
|
+
</p>
|
|
73
|
+
</form>
|
|
74
|
+
{% else %}
|
|
75
|
+
<form class="admin-settings" method="post" action="{{ rebuildUrl }}">
|
|
76
|
+
<input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
|
|
77
|
+
<p class="admin-settings-buttons">
|
|
78
|
+
<button type="submit">Rebuild the index</button>
|
|
79
|
+
</p>
|
|
80
|
+
</form>
|
|
81
|
+
{% endif %}
|
|
82
|
+
|
|
83
|
+
<p class="admin-hint">
|
|
84
|
+
This runs on the site as it is: nothing is deleted, no connection is swapped and
|
|
85
|
+
nobody is signed out. <code>geekity rebuild</code> at the command line is the other
|
|
86
|
+
door, and it is for the one case this screen cannot be: a database this version
|
|
87
|
+
refuses to open, where there is no site running to press a button in.
|
|
88
|
+
</p>
|
|
89
|
+
{% endblock %}
|