@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,26 @@
|
|
|
1
|
+
import type { FeedItem } from './feed-item.ts';
|
|
2
|
+
import type { CommentFeedSource, FeedSource } from './feed-source.ts';
|
|
3
|
+
/**
|
|
4
|
+
* RSS 2.0: the post feed, the comments feed, and the channel they share.
|
|
5
|
+
*
|
|
6
|
+
* The items come from {@link FeedItem}s rather than from documents, so what an
|
|
7
|
+
* RSS item says about a post is decided in one place and read here — and says
|
|
8
|
+
* the same as what Atom and JSON Feed say about it, because there is only one
|
|
9
|
+
* id, one term list and one summary on the item to print.
|
|
10
|
+
*/
|
|
11
|
+
/** One feed as an RSS 2.0 document. */
|
|
12
|
+
export declare function rssFeed(source: FeedSource): string;
|
|
13
|
+
/**
|
|
14
|
+
* One item as RSS.
|
|
15
|
+
*
|
|
16
|
+
* The `guid` is the item's id, which decision-12 makes every feed's key for
|
|
17
|
+
* the post: after decision-13 that is the permalink itself, or the stored id a
|
|
18
|
+
* migrated post carries. `isPermaLink` tells a reader which of the two it is
|
|
19
|
+
* looking at — `true` when the id is the permalink, so a reader that resolves
|
|
20
|
+
* a guid finds the post, and `false` when it is a stored name like WordPress's
|
|
21
|
+
* `?p=813`, which is the id that post's subscribers already hold.
|
|
22
|
+
*/
|
|
23
|
+
export declare function rssItem(item: FeedItem): string[];
|
|
24
|
+
/** One comments feed as an RSS 2.0 document. */
|
|
25
|
+
export declare function commentsRssFeed(source: CommentFeedSource): string;
|
|
26
|
+
//# sourceMappingURL=feed-rss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-rss.d.ts","sourceRoot":"","sources":["../../src/web/feed-rss.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ/C,OAAO,KAAK,EAAE,iBAAiB,EAAe,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAanF;;;;;;;GAOG;AAEH,uCAAuC;AACvC,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAmClD;AA8CD;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAsBhD;AA2BD,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAgCjE"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { excerptFromHtml, feedItems } from './feed-item.js';
|
|
2
|
+
import { contentTypeOf, EMPTY_FEED_UPDATED, FEED_GENERATOR, feedLanguage, notifyServerOf, } from './feed-source.js';
|
|
3
|
+
import { cdata, DC_NAMESPACE, element, escapeXml, rfc822, SOURCE_NAMESPACE, WFW_NAMESPACE, } from './feed-xml.js';
|
|
4
|
+
import { absoluteUrl, latestModified } from './negotiate.js';
|
|
5
|
+
import { sanitizeCommentHtml } from './sanitize.js';
|
|
6
|
+
/**
|
|
7
|
+
* RSS 2.0: the post feed, the comments feed, and the channel they share.
|
|
8
|
+
*
|
|
9
|
+
* The items come from {@link FeedItem}s rather than from documents, so what an
|
|
10
|
+
* RSS item says about a post is decided in one place and read here — and says
|
|
11
|
+
* the same as what Atom and JSON Feed say about it, because there is only one
|
|
12
|
+
* id, one term list and one summary on the item to print.
|
|
13
|
+
*/
|
|
14
|
+
/** One feed as an RSS 2.0 document. */
|
|
15
|
+
export function rssFeed(source) {
|
|
16
|
+
const { site, documents, baseUrl } = source;
|
|
17
|
+
const link = absoluteUrl(source.href, baseUrl);
|
|
18
|
+
const built = latestModified(documents) ?? EMPTY_FEED_UPDATED;
|
|
19
|
+
const lines = [
|
|
20
|
+
'<?xml version="1.0" encoding="utf-8"?>',
|
|
21
|
+
'<rss version="2.0"',
|
|
22
|
+
' xmlns:atom="http://www.w3.org/2005/Atom"',
|
|
23
|
+
' xmlns:content="http://purl.org/rss/1.0/modules/content/"',
|
|
24
|
+
` xmlns:dc="${DC_NAMESPACE}"`,
|
|
25
|
+
` xmlns:source="${SOURCE_NAMESPACE}"`,
|
|
26
|
+
` xmlns:wfw="${WFW_NAMESPACE}">`,
|
|
27
|
+
' <channel>',
|
|
28
|
+
element('title', source.title, 2),
|
|
29
|
+
element('link', link, 2),
|
|
30
|
+
// Required by the spec even when the site has no tagline, so it is written
|
|
31
|
+
// empty rather than left out.
|
|
32
|
+
element('description', site.tagline ?? '', 2),
|
|
33
|
+
element('language', feedLanguage(site), 2),
|
|
34
|
+
element('lastBuildDate', rfc822(built), 2),
|
|
35
|
+
element('generator', FEED_GENERATOR, 2),
|
|
36
|
+
` <atom:link rel="self" type="${escapeXml(contentTypeOf('rss'))}" href="${escapeXml(absoluteUrl(source.feedHref, baseUrl))}"/>`,
|
|
37
|
+
...cloudElements(site),
|
|
38
|
+
...channelImage(source, link),
|
|
39
|
+
];
|
|
40
|
+
for (const item of feedItems(documents, source)) {
|
|
41
|
+
lines.push(...rssItem(item));
|
|
42
|
+
}
|
|
43
|
+
lines.push(' </channel>', '</rss>', '');
|
|
44
|
+
return lines.join('\n');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The notify server, said the three ways an RSS channel can say it: the legacy
|
|
48
|
+
* `<cloud>` a 2001 aggregator understands, `<source:cloud>` for one that reads
|
|
49
|
+
* Dave Winer's namespace, and the WebSub `rel="hub"` link.
|
|
50
|
+
*
|
|
51
|
+
* All three name the same server, so a subscriber gets told the moment the
|
|
52
|
+
* feed changes whichever of the protocols it speaks. Nothing at all when the
|
|
53
|
+
* site names no server.
|
|
54
|
+
*/
|
|
55
|
+
function cloudElements(site) {
|
|
56
|
+
const notify = notifyServerOf(site);
|
|
57
|
+
if (notify === undefined)
|
|
58
|
+
return [];
|
|
59
|
+
const { cloud } = notify;
|
|
60
|
+
return [
|
|
61
|
+
` <cloud domain="${escapeXml(cloud.domain)}" port="${String(cloud.port)}"` +
|
|
62
|
+
` path="${escapeXml(cloud.path)}"` +
|
|
63
|
+
` registerProcedure="${escapeXml(cloud.registerProcedure)}"` +
|
|
64
|
+
` protocol="${escapeXml(cloud.protocol)}"/>`,
|
|
65
|
+
element('source:cloud', notify.pleaseNotify, 2),
|
|
66
|
+
` <atom:link rel="hub" href="${escapeXml(notify.hub)}"/>`,
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The channel's `<image>`, from the site's avatar.
|
|
71
|
+
*
|
|
72
|
+
* RSS wants the title and the link to repeat the channel's own, and a reader
|
|
73
|
+
* that shows a feed icon is showing the site's face; the avatar setting is the
|
|
74
|
+
* only picture a site names.
|
|
75
|
+
*/
|
|
76
|
+
function channelImage(source, link) {
|
|
77
|
+
const avatar = source.site.avatar;
|
|
78
|
+
if (avatar === undefined || avatar === '')
|
|
79
|
+
return [];
|
|
80
|
+
return [
|
|
81
|
+
' <image>',
|
|
82
|
+
element('url', absoluteUrl(avatar, source.baseUrl), 3),
|
|
83
|
+
element('title', source.title, 3),
|
|
84
|
+
element('link', link, 3),
|
|
85
|
+
' </image>',
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* One item as RSS.
|
|
90
|
+
*
|
|
91
|
+
* The `guid` is the item's id, which decision-12 makes every feed's key for
|
|
92
|
+
* the post: after decision-13 that is the permalink itself, or the stored id a
|
|
93
|
+
* migrated post carries. `isPermaLink` tells a reader which of the two it is
|
|
94
|
+
* looking at — `true` when the id is the permalink, so a reader that resolves
|
|
95
|
+
* a guid finds the post, and `false` when it is a stored name like WordPress's
|
|
96
|
+
* `?p=813`, which is the id that post's subscribers already hold.
|
|
97
|
+
*/
|
|
98
|
+
export function rssItem(item) {
|
|
99
|
+
return [
|
|
100
|
+
' <item>',
|
|
101
|
+
element('title', item.title, 3),
|
|
102
|
+
element('link', item.link, 3),
|
|
103
|
+
` <guid isPermaLink="${item.id === item.link ? 'true' : 'false'}">` +
|
|
104
|
+
`${escapeXml(item.id)}</guid>`,
|
|
105
|
+
...(item.published === undefined ? [] : [element('pubDate', rfc822(item.published), 3)]),
|
|
106
|
+
...(item.creator === undefined ? [] : [element('dc:creator', item.creator, 3)]),
|
|
107
|
+
// Every term becomes a category. RSS has one `<category>` and no way to say
|
|
108
|
+
// which vocabulary a term came from, which is exactly how WordPress
|
|
109
|
+
// publishes tags and categories too.
|
|
110
|
+
...item.terms.map((term) => ` <category>${escapeXml(term)}</category>`),
|
|
111
|
+
...commentPointers(item),
|
|
112
|
+
element('description', item.summary, 3),
|
|
113
|
+
` <content:encoded>${cdata(item.html)}</content:encoded>`,
|
|
114
|
+
// The source of the item, per the namespace: a reader that understands
|
|
115
|
+
// Markdown should render from this rather than from the HTML above. It is
|
|
116
|
+
// the same text the ActivityStreams `Article` carries as its `source`.
|
|
117
|
+
` <source:markdown>${cdata(item.markdown)}</source:markdown>`,
|
|
118
|
+
' </item>',
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Where one item's comments are, said three ways.
|
|
123
|
+
*
|
|
124
|
+
* `<comments>` is the page a person should read them on and `wfw:commentRss`
|
|
125
|
+
* the feed a reader should poll, which is the pair WordPress publishes and so
|
|
126
|
+
* the pair every reader already understands. `source:comments` is the same
|
|
127
|
+
* feed with the count beside it, so a reader can say "3 comments" without
|
|
128
|
+
* fetching anything.
|
|
129
|
+
*
|
|
130
|
+
* Written only when the item carries them: a feed whose builder did not
|
|
131
|
+
* resolve the counts would otherwise publish "0 comments" about a post with
|
|
132
|
+
* plenty.
|
|
133
|
+
*/
|
|
134
|
+
function commentPointers(item) {
|
|
135
|
+
const comments = item.comments;
|
|
136
|
+
if (comments === undefined)
|
|
137
|
+
return [];
|
|
138
|
+
return [
|
|
139
|
+
element('comments', comments.page, 3),
|
|
140
|
+
element('wfw:commentRss', comments.feed, 3),
|
|
141
|
+
` <source:comments count="${String(comments.count)}" ` +
|
|
142
|
+
`feedUrl="${escapeXml(comments.feed)}"/>`,
|
|
143
|
+
];
|
|
144
|
+
}
|
|
145
|
+
/** One comments feed as an RSS 2.0 document. */
|
|
146
|
+
export function commentsRssFeed(source) {
|
|
147
|
+
const { site, comments, baseUrl } = source;
|
|
148
|
+
const link = absoluteUrl(source.href, baseUrl);
|
|
149
|
+
const built = comments[0]?.published ?? EMPTY_FEED_UPDATED;
|
|
150
|
+
const lines = [
|
|
151
|
+
'<?xml version="1.0" encoding="utf-8"?>',
|
|
152
|
+
'<rss version="2.0"',
|
|
153
|
+
' xmlns:atom="http://www.w3.org/2005/Atom"',
|
|
154
|
+
' xmlns:content="http://purl.org/rss/1.0/modules/content/"',
|
|
155
|
+
` xmlns:dc="${DC_NAMESPACE}"`,
|
|
156
|
+
` xmlns:source="${SOURCE_NAMESPACE}">`,
|
|
157
|
+
' <channel>',
|
|
158
|
+
element('title', source.title, 2),
|
|
159
|
+
element('link', link, 2),
|
|
160
|
+
element('description', site.tagline ?? '', 2),
|
|
161
|
+
element('language', feedLanguage(site), 2),
|
|
162
|
+
element('lastBuildDate', rfc822(built), 2),
|
|
163
|
+
element('generator', FEED_GENERATOR, 2),
|
|
164
|
+
` <atom:link rel="self" type="${escapeXml(contentTypeOf('rss'))}" href="${escapeXml(absoluteUrl(source.feedHref, baseUrl))}"/>`,
|
|
165
|
+
// A comments feed is polled like any other, so it advertises the same
|
|
166
|
+
// server: a subscriber to one is told a reply arrived rather than finding
|
|
167
|
+
// out on its next poll.
|
|
168
|
+
...cloudElements(site),
|
|
169
|
+
];
|
|
170
|
+
for (const comment of comments)
|
|
171
|
+
lines.push(...commentItem(comment));
|
|
172
|
+
lines.push(' </channel>', '</rss>', '');
|
|
173
|
+
return lines.join('\n');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* One comment as an RSS item.
|
|
177
|
+
*
|
|
178
|
+
* A comment is not a {@link FeedItem}: it is one entry of the conversation
|
|
179
|
+
* under a post, with its own id, its own author and no taxonomy at all, and
|
|
180
|
+
* the Conversation module is what derives it. The sanitising happens here, at
|
|
181
|
+
* the last moment before the markup a stranger wrote becomes bytes this site
|
|
182
|
+
* publishes, so there is one place to check rather than one per caller.
|
|
183
|
+
*/
|
|
184
|
+
function commentItem(comment) {
|
|
185
|
+
const html = sanitizeCommentHtml(comment.html);
|
|
186
|
+
const title = comment.post === undefined ? comment.author : `${comment.author} on ${comment.post.title}`;
|
|
187
|
+
return [
|
|
188
|
+
' <item>',
|
|
189
|
+
element('title', title, 3),
|
|
190
|
+
element('link', comment.url, 3),
|
|
191
|
+
// A reply's id is a name rather than an address: some servers publish a
|
|
192
|
+
// note at an id nothing dereferences and a `url` somewhere else entirely.
|
|
193
|
+
` <guid isPermaLink="false">${escapeXml(comment.id)}</guid>`,
|
|
194
|
+
element('pubDate', rfc822(comment.published), 3),
|
|
195
|
+
element('dc:creator', comment.author, 3),
|
|
196
|
+
// A comment never carries a description, so its summary is always an
|
|
197
|
+
// excerpt of what it says.
|
|
198
|
+
element('description', excerptFromHtml(html), 3),
|
|
199
|
+
` <content:encoded>${cdata(html)}</content:encoded>`,
|
|
200
|
+
' </item>',
|
|
201
|
+
];
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=feed-rss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-rss.js","sourceRoot":"","sources":["../../src/web/feed-rss.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import type { Document } from '../content/document.ts';
|
|
2
|
+
import type { SiteData } from './context.ts';
|
|
3
|
+
/**
|
|
4
|
+
* What a feed is, before anything has been written: which formats the site
|
|
5
|
+
* serves, where each one lives, what the site's settings say about it, and
|
|
6
|
+
* what one feed is built from.
|
|
7
|
+
*
|
|
8
|
+
* Everything here is a fact about the feed as a whole — its URL, its language,
|
|
9
|
+
* its notify server, its entries — rather than about any one item or any one
|
|
10
|
+
* format. The serialisers and the response layer both read it, which is why it
|
|
11
|
+
* sits below them and imports neither.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The three syndication formats the public site serves.
|
|
15
|
+
*
|
|
16
|
+
* Feeds are fixed routes rather than representations (doc-3): a feed reader
|
|
17
|
+
* sends whatever `Accept` header its HTTP library happened to default to, so
|
|
18
|
+
* the URL has to say which format it wants.
|
|
19
|
+
*
|
|
20
|
+
* RSS is first because it is what the subscribers of a site moving off
|
|
21
|
+
* WordPress actually hold, and it is what the bare `/feed/` serves.
|
|
22
|
+
*/
|
|
23
|
+
export type FeedFormat = 'rss' | 'atom' | 'json';
|
|
24
|
+
/** Every format, RSS first, in the order a page should advertise them. */
|
|
25
|
+
export declare const FEED_FORMATS: readonly FeedFormat[];
|
|
26
|
+
/** The segment every feed URL hangs off its listing root by: `/feed/…`. */
|
|
27
|
+
export declare const FEED_SEGMENT = "feed";
|
|
28
|
+
/**
|
|
29
|
+
* The segment under `feed/` each format lives at.
|
|
30
|
+
*
|
|
31
|
+
* RSS has none, so the bare `/feed/` is RSS 2.0 — WordPress's layout, and the
|
|
32
|
+
* URL every existing subscriber of a migrated site already polls.
|
|
33
|
+
*/
|
|
34
|
+
export declare const FEED_SEGMENTS: Readonly<Record<FeedFormat, string>>;
|
|
35
|
+
/**
|
|
36
|
+
* Spellings WordPress also answered on, which this site redirects rather than
|
|
37
|
+
* serves. `/feed/rss/` was its alias for the RSS 2.0 feed.
|
|
38
|
+
*/
|
|
39
|
+
export declare const FEED_ALIASES: Readonly<Record<string, FeedFormat>>;
|
|
40
|
+
/**
|
|
41
|
+
* The root the site-wide comments feed hangs off, so `/comments/feed/` is the
|
|
42
|
+
* URL WordPress served it at. It is a listing root like any other as far as
|
|
43
|
+
* {@link feedPathUnder} is concerned; nothing is served at the root itself.
|
|
44
|
+
*/
|
|
45
|
+
export declare const COMMENTS_ROOT = "/comments/";
|
|
46
|
+
/** What a post's comments feed calls itself, before the post's title. */
|
|
47
|
+
export declare const COMMENTS_TITLE_PREFIX = "Comments on: ";
|
|
48
|
+
/** What each format is labelled with on the wire. */
|
|
49
|
+
export declare const FEED_CONTENT_TYPES: Readonly<Record<FeedFormat, string>>;
|
|
50
|
+
/**
|
|
51
|
+
* The URL of one format's feed under a listing root.
|
|
52
|
+
*
|
|
53
|
+
* The root is any listing URL ending in `/` — the site root, a taxonomy
|
|
54
|
+
* archive, and in time a post's permalink for its comments feed — so this is
|
|
55
|
+
* the one place the `/feed/…/` shape is spelled.
|
|
56
|
+
*/
|
|
57
|
+
export declare function feedPathUnder(root: string, format: FeedFormat): string;
|
|
58
|
+
/**
|
|
59
|
+
* The URL of a comments feed: one post's, or — with no permalink — the whole
|
|
60
|
+
* site's.
|
|
61
|
+
*
|
|
62
|
+
* WordPress's URLs, so a site migrated from it keeps both. There is one format,
|
|
63
|
+
* RSS 2.0, because that is what a comments feed is read in.
|
|
64
|
+
*/
|
|
65
|
+
export declare function commentsFeedPath(permalink?: string): string;
|
|
66
|
+
/** A feed URL taken apart: which listing it syndicates, and in what format. */
|
|
67
|
+
export interface FeedPath {
|
|
68
|
+
/** The listing root the feed hangs off, ending in `/`. */
|
|
69
|
+
root: string;
|
|
70
|
+
/** Which format the URL asked for. */
|
|
71
|
+
format: FeedFormat;
|
|
72
|
+
/**
|
|
73
|
+
* Whether this is the canonical spelling of that feed. `/feed/rss/` is not:
|
|
74
|
+
* it is a WordPress alias, and it earns a redirect rather than a body.
|
|
75
|
+
*/
|
|
76
|
+
canonical: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* A path as the feed it names, or `undefined` when it names none.
|
|
80
|
+
*
|
|
81
|
+
* The inverse of {@link feedPathUnder}, and deliberately ignorant of what the
|
|
82
|
+
* root turns out to be: the caller decides whether `/tag/x/` is a listing it
|
|
83
|
+
* serves. Only the slashed form parses; the bare `/feed` is handled by the
|
|
84
|
+
* canonical redirect, like every other missing trailing slash on the site.
|
|
85
|
+
*/
|
|
86
|
+
export declare function splitFeedPath(pathname: string): FeedPath | undefined;
|
|
87
|
+
/** The media type a format is labelled with, without the charset. */
|
|
88
|
+
export declare function contentTypeOf(format: FeedFormat): string;
|
|
89
|
+
/**
|
|
90
|
+
* The notify server a site advertises and pings when it has not said
|
|
91
|
+
* otherwise: the one this CMS's author runs, which speaks both rssCloud and
|
|
92
|
+
* WebSub, so one server covers every real-time subscriber a feed has.
|
|
93
|
+
*/
|
|
94
|
+
export declare const DEFAULT_NOTIFY_SERVER = "https://rpc.rsscloud.io";
|
|
95
|
+
/** The three paths a notify server answers on, under whatever URL it lives at. */
|
|
96
|
+
export declare const NOTIFY_PATHS: {
|
|
97
|
+
/** Where a subscriber registers for rssCloud notifications. */
|
|
98
|
+
readonly pleaseNotify: 'pleaseNotify';
|
|
99
|
+
/** The WebSub hub: where a subscriber subscribes, and a publisher publishes. */
|
|
100
|
+
readonly hub: 'websub';
|
|
101
|
+
/** Where this site says a feed changed. */
|
|
102
|
+
readonly ping: 'ping';
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* The port and protocol the legacy `<cloud>` element carries, whatever scheme
|
|
106
|
+
* the server itself is reached over.
|
|
107
|
+
*
|
|
108
|
+
* rpc.rsscloud.io's quick start prescribes exactly these: the element predates
|
|
109
|
+
* TLS being the default, and a reader that understands it is looking for the
|
|
110
|
+
* shape rather than for a port to dial.
|
|
111
|
+
*/
|
|
112
|
+
export declare const NOTIFY_CLOUD_PORT = 80;
|
|
113
|
+
/** The `protocol` of that same element. */
|
|
114
|
+
export declare const NOTIFY_CLOUD_PROTOCOL = "http-post";
|
|
115
|
+
/** One notify server, as the three vocabularies that talk to it spell it. */
|
|
116
|
+
export interface NotifyServer {
|
|
117
|
+
/** The server's URL, without a trailing slash. What the setting holds. */
|
|
118
|
+
base: string;
|
|
119
|
+
/** Where an rssCloud subscriber registers: `source:cloud`. */
|
|
120
|
+
pleaseNotify: string;
|
|
121
|
+
/** The WebSub hub: `atom:link rel="hub"` and JSON Feed's `hubs`. */
|
|
122
|
+
hub: string;
|
|
123
|
+
/** Where this site announces that a feed changed. */
|
|
124
|
+
ping: string;
|
|
125
|
+
/** The same registration endpoint, taken apart for RSS's `<cloud>`. */
|
|
126
|
+
cloud: {
|
|
127
|
+
/** The server's host name. */
|
|
128
|
+
domain: string;
|
|
129
|
+
/** Always {@link NOTIFY_CLOUD_PORT}. */
|
|
130
|
+
port: number;
|
|
131
|
+
/** The registration path, from the root of that host. */
|
|
132
|
+
path: string;
|
|
133
|
+
/** Empty: the REST endpoint takes no procedure name. */
|
|
134
|
+
registerProcedure: string;
|
|
135
|
+
/** Always {@link NOTIFY_CLOUD_PROTOCOL}. */
|
|
136
|
+
protocol: string;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* One notify server URL as everything derived from it, or `undefined` when
|
|
141
|
+
* there is no server: an empty setting is how a site turns the whole feature
|
|
142
|
+
* off, and a value that is not an absolute http(s) URL is treated the same way
|
|
143
|
+
* rather than published as nonsense.
|
|
144
|
+
*/
|
|
145
|
+
export declare function notifyEndpoints(server: string): NotifyServer | undefined;
|
|
146
|
+
/**
|
|
147
|
+
* The notify server this site's feeds advertise, from `notifyServer` in
|
|
148
|
+
* `content/_data/site.json`.
|
|
149
|
+
*
|
|
150
|
+
* An empty value is a site that turned real-time notification off; a missing
|
|
151
|
+
* key is a site that has never said, and gets {@link DEFAULT_NOTIFY_SERVER}.
|
|
152
|
+
* That is the same rule the settings read the file by, so the server the feeds
|
|
153
|
+
* advertise is always the server the CMS pings.
|
|
154
|
+
*/
|
|
155
|
+
export declare function notifyServerOf(site: SiteData): NotifyServer | undefined;
|
|
156
|
+
/** How many entries a feed carries when the site does not say. */
|
|
157
|
+
export declare const DEFAULT_FEED_SIZE = 20;
|
|
158
|
+
/** What the feeds name themselves as. */
|
|
159
|
+
export declare const FEED_GENERATOR = "Geekity";
|
|
160
|
+
/** Where a reader can go to find out what wrote the feed. */
|
|
161
|
+
export declare const FEED_GENERATOR_URI = "https://www.npmjs.com/package/@geekity/cms";
|
|
162
|
+
/**
|
|
163
|
+
* How many entries a feed carries.
|
|
164
|
+
*
|
|
165
|
+
* `feedSize` in `content/_data/site.json` wins; without it a feed is longer
|
|
166
|
+
* than an archive page, because a reader that polls once a day should not miss
|
|
167
|
+
* a post on a site that publishes several.
|
|
168
|
+
*/
|
|
169
|
+
export declare function feedSize(site: SiteData): number;
|
|
170
|
+
/** The language a feed declares when the site does not name one. */
|
|
171
|
+
export declare const DEFAULT_FEED_LANGUAGE = "en";
|
|
172
|
+
/** The language tag a feed declares: the site's, or {@link DEFAULT_FEED_LANGUAGE}. */
|
|
173
|
+
export declare function feedLanguage(site: SiteData): string;
|
|
174
|
+
/**
|
|
175
|
+
* The instant a feed reports as its own `updated`.
|
|
176
|
+
*
|
|
177
|
+
* An empty feed still has to carry one, and it has to be the same on every
|
|
178
|
+
* request or the ETag would change while nothing did, so it is the epoch
|
|
179
|
+
* rather than the clock.
|
|
180
|
+
*/
|
|
181
|
+
export declare const EMPTY_FEED_UPDATED: Date;
|
|
182
|
+
/** Everything one feed is built from, whichever format it ends up in. */
|
|
183
|
+
export interface FeedSource {
|
|
184
|
+
/** Site-wide data, for the title, subtitle and author. */
|
|
185
|
+
site: SiteData;
|
|
186
|
+
/** The entries, newest first. Already filtered to what the public may see. */
|
|
187
|
+
documents: readonly Document[];
|
|
188
|
+
/** Title of this feed. The site title, or the site title and the tag. */
|
|
189
|
+
title: string;
|
|
190
|
+
/** Path of the HTML page this feed syndicates: `/` or `/tags/{tag}/`. */
|
|
191
|
+
href: string;
|
|
192
|
+
/** Path of the feed itself, for the self link. */
|
|
193
|
+
feedHref: string;
|
|
194
|
+
/** The site's public origin, for absolute ids and links. */
|
|
195
|
+
baseUrl: string;
|
|
196
|
+
/**
|
|
197
|
+
* How many replies each document has, by permalink, for the comment
|
|
198
|
+
* pointers every RSS item carries.
|
|
199
|
+
*
|
|
200
|
+
* Resolved rather than looked up while the feed is written, because the
|
|
201
|
+
* counts are part of the feed's own validator: a post that has been answered
|
|
202
|
+
* since is a changed feed even though no post moved.
|
|
203
|
+
*/
|
|
204
|
+
commentCounts?: ReadonlyMap<string, number> | undefined;
|
|
205
|
+
}
|
|
206
|
+
/** Everything one comments feed is built from. */
|
|
207
|
+
export interface CommentFeedSource {
|
|
208
|
+
/** Site-wide data, for the description and the language. */
|
|
209
|
+
site: SiteData;
|
|
210
|
+
/** The comments, newest first. Their HTML is sanitised here, not before. */
|
|
211
|
+
comments: readonly FeedComment[];
|
|
212
|
+
/** Title of this feed: `Comments on: {post}`, or the site's. */
|
|
213
|
+
title: string;
|
|
214
|
+
/** Path of the HTML page these comments are about. */
|
|
215
|
+
href: string;
|
|
216
|
+
/** Path of the feed itself, for the self link. */
|
|
217
|
+
feedHref: string;
|
|
218
|
+
/** The site's public origin, for absolute links. */
|
|
219
|
+
baseUrl: string;
|
|
220
|
+
}
|
|
221
|
+
/** One comment, as a feed shows it. */
|
|
222
|
+
export interface FeedComment {
|
|
223
|
+
/** The reply's own name in the fediverse: the `guid`. */
|
|
224
|
+
id: string;
|
|
225
|
+
/** Where it can be read. */
|
|
226
|
+
url: string;
|
|
227
|
+
/** Who wrote it. */
|
|
228
|
+
author: string;
|
|
229
|
+
/** When it was published. */
|
|
230
|
+
published: Date;
|
|
231
|
+
/** What it says, as its own server rendered it and before sanitising. */
|
|
232
|
+
html: string;
|
|
233
|
+
/**
|
|
234
|
+
* The post it answers, named on every item of the site-wide feed and on none
|
|
235
|
+
* of a post's own — there, every item answers the same post.
|
|
236
|
+
*/
|
|
237
|
+
post?: {
|
|
238
|
+
title: string;
|
|
239
|
+
permalink: string;
|
|
240
|
+
} | undefined;
|
|
241
|
+
}
|
|
242
|
+
/** Enough of any feed to say where it lives: what a header needs from one. */
|
|
243
|
+
export type FeedIdentity = Pick<FeedSource, 'site' | 'feedHref' | 'baseUrl'>;
|
|
244
|
+
//# sourceMappingURL=feed-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-source.d.ts","sourceRoot":"","sources":["../../src/web/feed-source.ts"],"names":[],"mappings":"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"}
|