@geekity/cms 0.12.0 → 0.14.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 +188 -9
- package/admin/pages/account/login.njk +3 -0
- package/admin/pages/documents/editor.njk +20 -0
- package/admin/pages/indieauth/consent.njk +51 -0
- package/admin/pages/indieauth/refused.njk +11 -0
- package/admin/pages/settings/general.njk +12 -2
- package/admin/pages/settings/reading.njk +93 -0
- package/admin/pages/users/apps.njk +74 -0
- package/admin/pages/users/edit.njk +12 -0
- package/admin/static/admin.css +27 -0
- package/dist/admin/accounts.d.ts +3 -0
- package/dist/admin/accounts.d.ts.map +1 -1
- package/dist/admin/accounts.js +5 -0
- package/dist/admin/accounts.js.map +1 -1
- package/dist/admin/documents.d.ts +4 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +45 -5
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.js +2 -2
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/headers.d.ts +9 -2
- package/dist/admin/headers.d.ts.map +1 -1
- package/dist/admin/headers.js +16 -7
- package/dist/admin/headers.js.map +1 -1
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +2 -1
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +48 -5
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/settings-general.d.ts.map +1 -1
- package/dist/admin/settings-general.js +28 -3
- package/dist/admin/settings-general.js.map +1 -1
- package/dist/admin/settings-reading.d.ts.map +1 -1
- package/dist/admin/settings-reading.js +15 -1
- package/dist/admin/settings-reading.js.map +1 -1
- package/dist/admin/settings.d.ts +83 -4
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +166 -4
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/templates.d.ts +3 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +3 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/users.d.ts +8 -0
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +9 -0
- package/dist/admin/users.js.map +1 -1
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/content/pinned.d.ts +26 -0
- package/dist/content/pinned.d.ts.map +1 -0
- package/dist/content/pinned.js +42 -0
- package/dist/content/pinned.js.map +1 -0
- package/dist/content/store.d.ts +7 -0
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +20 -0
- package/dist/content/store.js.map +1 -1
- package/dist/env.d.ts +21 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/actor.d.ts +15 -0
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +94 -3
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +13 -1
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +45 -6
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +36 -4
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +24 -2
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/mount.js +2 -2
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +30 -0
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +36 -0
- package/dist/federation/paths.js.map +1 -1
- package/dist/images/icons.d.ts +44 -25
- package/dist/images/icons.d.ts.map +1 -1
- package/dist/images/icons.js +205 -60
- package/dist/images/icons.js.map +1 -1
- package/dist/images/index.d.ts +2 -2
- package/dist/images/index.d.ts.map +1 -1
- package/dist/images/index.js +1 -1
- package/dist/images/index.js.map +1 -1
- package/dist/images/markup.d.ts +14 -0
- package/dist/images/markup.d.ts.map +1 -1
- package/dist/images/markup.js +16 -11
- package/dist/images/markup.js.map +1 -1
- package/dist/images/variants.d.ts +11 -0
- package/dist/images/variants.d.ts.map +1 -1
- package/dist/images/variants.js +24 -4
- package/dist/images/variants.js.map +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -2
- package/dist/index.js.map +1 -1
- package/dist/indexnow.d.ts +34 -0
- package/dist/indexnow.d.ts.map +1 -0
- package/dist/indexnow.js +141 -0
- package/dist/indexnow.js.map +1 -0
- package/dist/indieauth/bearer.d.ts +39 -0
- package/dist/indieauth/bearer.d.ts.map +1 -0
- package/dist/indieauth/bearer.js +63 -0
- package/dist/indieauth/bearer.js.map +1 -0
- package/dist/indieauth/client.d.ts +61 -0
- package/dist/indieauth/client.d.ts.map +1 -0
- package/dist/indieauth/client.js +139 -0
- package/dist/indieauth/client.js.map +1 -0
- package/dist/indieauth/connected-apps.d.ts +23 -0
- package/dist/indieauth/connected-apps.d.ts.map +1 -0
- package/dist/indieauth/connected-apps.js +73 -0
- package/dist/indieauth/connected-apps.js.map +1 -0
- package/dist/indieauth/consent.d.ts +28 -0
- package/dist/indieauth/consent.d.ts.map +1 -0
- package/dist/indieauth/consent.js +185 -0
- package/dist/indieauth/consent.js.map +1 -0
- package/dist/indieauth/discovery.d.ts +87 -0
- package/dist/indieauth/discovery.d.ts.map +1 -0
- package/dist/indieauth/discovery.js +127 -0
- package/dist/indieauth/discovery.js.map +1 -0
- package/dist/indieauth/grants.d.ts +57 -0
- package/dist/indieauth/grants.d.ts.map +1 -0
- package/dist/indieauth/grants.js +35 -0
- package/dist/indieauth/grants.js.map +1 -0
- package/dist/indieauth/identity.d.ts +36 -0
- package/dist/indieauth/identity.d.ts.map +1 -0
- package/dist/indieauth/identity.js +77 -0
- package/dist/indieauth/identity.js.map +1 -0
- package/dist/indieauth/redeem.d.ts +47 -0
- package/dist/indieauth/redeem.d.ts.map +1 -0
- package/dist/indieauth/redeem.js +69 -0
- package/dist/indieauth/redeem.js.map +1 -0
- package/dist/indieauth/request.d.ts +47 -0
- package/dist/indieauth/request.d.ts.map +1 -0
- package/dist/indieauth/request.js +104 -0
- package/dist/indieauth/request.js.map +1 -0
- package/dist/indieauth/token.d.ts +19 -0
- package/dist/indieauth/token.d.ts.map +1 -0
- package/dist/indieauth/token.js +110 -0
- package/dist/indieauth/token.js.map +1 -0
- package/dist/indieauth/tokens.d.ts +131 -0
- package/dist/indieauth/tokens.d.ts.map +1 -0
- package/dist/indieauth/tokens.js +205 -0
- package/dist/indieauth/tokens.js.map +1 -0
- package/dist/web/admin-bar.d.ts +3 -1
- package/dist/web/admin-bar.d.ts.map +1 -1
- package/dist/web/admin-bar.js +5 -1
- package/dist/web/admin-bar.js.map +1 -1
- package/dist/web/archive.d.ts +1 -1
- package/dist/web/archive.d.ts.map +1 -1
- package/dist/web/archive.js +3 -2
- package/dist/web/archive.js.map +1 -1
- package/dist/web/authors.d.ts +19 -0
- package/dist/web/authors.d.ts.map +1 -1
- package/dist/web/authors.js +25 -0
- package/dist/web/authors.js.map +1 -1
- package/dist/web/context.d.ts +25 -0
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +18 -0
- package/dist/web/context.js.map +1 -1
- package/dist/web/feed-atom.d.ts.map +1 -1
- package/dist/web/feed-atom.js +5 -2
- package/dist/web/feed-atom.js.map +1 -1
- package/dist/web/feed-item.d.ts +24 -6
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +16 -8
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/feed-json.d.ts +6 -2
- package/dist/web/feed-json.d.ts.map +1 -1
- package/dist/web/feed-json.js +6 -2
- package/dist/web/feed-json.js.map +1 -1
- package/dist/web/feed-rss.d.ts.map +1 -1
- package/dist/web/feed-rss.js +17 -4
- package/dist/web/feed-rss.js.map +1 -1
- package/dist/web/feed-source.d.ts +31 -0
- package/dist/web/feed-source.d.ts.map +1 -1
- package/dist/web/feed-source.js +31 -0
- package/dist/web/feed-source.js.map +1 -1
- package/dist/web/feed-xml.d.ts +2 -0
- package/dist/web/feed-xml.d.ts.map +1 -1
- package/dist/web/feed-xml.js +2 -0
- package/dist/web/feed-xml.js.map +1 -1
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +15 -3
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/index.d.ts +4 -2
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +3 -2
- package/dist/web/index.js.map +1 -1
- package/dist/web/indexnow.d.ts +9 -0
- package/dist/web/indexnow.d.ts.map +1 -0
- package/dist/web/indexnow.js +27 -0
- package/dist/web/indexnow.js.map +1 -0
- package/dist/web/llms.d.ts +58 -0
- package/dist/web/llms.d.ts.map +1 -0
- package/dist/web/llms.js +91 -0
- package/dist/web/llms.js.map +1 -0
- package/dist/web/locale.d.ts +41 -0
- package/dist/web/locale.d.ts.map +1 -0
- package/dist/web/locale.js +56 -0
- package/dist/web/locale.js.map +1 -0
- package/dist/web/manifest.d.ts +50 -0
- package/dist/web/manifest.d.ts.map +1 -0
- package/dist/web/manifest.js +56 -0
- package/dist/web/manifest.js.map +1 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +6 -0
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/oembed.d.ts +104 -0
- package/dist/web/oembed.d.ts.map +1 -0
- package/dist/web/oembed.js +290 -0
- package/dist/web/oembed.js.map +1 -0
- package/dist/web/opensearch.d.ts +35 -0
- package/dist/web/opensearch.d.ts.map +1 -0
- package/dist/web/opensearch.js +65 -0
- package/dist/web/opensearch.js.map +1 -0
- package/dist/web/render.d.ts +6 -1
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +40 -10
- package/dist/web/render.js.map +1 -1
- package/dist/web/robots.d.ts +89 -0
- package/dist/web/robots.d.ts.map +1 -0
- package/dist/web/robots.js +259 -0
- package/dist/web/robots.js.map +1 -0
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +179 -8
- package/dist/web/routes.js.map +1 -1
- package/dist/web/share-image.d.ts +51 -0
- package/dist/web/share-image.d.ts.map +1 -0
- package/dist/web/share-image.js +43 -0
- package/dist/web/share-image.js.map +1 -0
- package/dist/web/sitemap.d.ts +0 -26
- package/dist/web/sitemap.d.ts.map +1 -1
- package/dist/web/sitemap.js +0 -44
- package/dist/web/sitemap.js.map +1 -1
- package/dist/web/templates.d.ts +16 -9
- package/dist/web/templates.d.ts.map +1 -1
- package/dist/web/templates.js +88 -55
- package/dist/web/templates.js.map +1 -1
- package/dist/web/themes.d.ts +33 -0
- package/dist/web/themes.d.ts.map +1 -1
- package/dist/web/themes.js +57 -0
- package/dist/web/themes.js.map +1 -1
- package/dist/webmention/discovery.d.ts +4 -2
- package/dist/webmention/discovery.d.ts.map +1 -1
- package/dist/webmention/discovery.js +14 -8
- package/dist/webmention/discovery.js.map +1 -1
- package/dist/webmention/fetch-public.d.ts +2 -0
- package/dist/webmention/fetch-public.d.ts.map +1 -1
- package/dist/webmention/fetch-public.js +1 -1
- package/dist/webmention/fetch-public.js.map +1 -1
- package/package.json +2 -1
- package/templates/site/content/_data/site.json +0 -1
- package/themes/default/README.md +174 -43
- package/themes/default/layouts/base.njk +116 -17
- package/themes/default/layouts/front-page.njk +7 -1
- package/themes/default/layouts/home.njk +11 -0
- package/themes/default/layouts/page.njk +4 -3
- package/themes/default/layouts/post.njk +5 -4
- package/themes/default/layouts/search.njk +4 -5
- package/themes/default/partials/archive.njk +3 -1
- package/themes/default/partials/bio.njk +16 -2
- package/themes/default/partials/breadcrumbs.njk +20 -0
- package/themes/default/partials/conversation.njk +4 -1
- package/themes/default/partials/jsonld.njk +49 -9
- package/themes/default/partials/kicker.njk +6 -4
- package/themes/default/partials/lang.njk +7 -0
- package/themes/default/partials/post-list.njk +5 -3
- package/themes/default/partials/reply-context.njk +4 -2
- package/themes/default/src/style.css +14 -0
- package/themes/default/static/style.css +57 -0
- package/themes/default/theme.json +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/webmention/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE1D;;;;;;;;;GASG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAE3C,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE7C,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAG,uDAAuD,CAAC;AAE7F;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YAC7B,OAAO,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,YAAY,EAAE,qBAAqB,EAAE;YAChF,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEnC,4EAA4E;IAC5E,0EAA0E;IAC1E,gDAAgD;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;IAE9D,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IACzE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,wEAAwE;QACxE,6BAA6B;QAC7B,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/webmention/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ export type PublicFetch = {
|
|
|
22
22
|
readonly url: string;
|
|
23
23
|
/** The response's `Content-Type`. */
|
|
24
24
|
readonly type: string;
|
|
25
|
+
/** The response's `Link` header, or `null` when it sent none. */
|
|
26
|
+
readonly link: string | null;
|
|
25
27
|
readonly body: Uint8Array;
|
|
26
28
|
} | {
|
|
27
29
|
readonly ok: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-public.d.ts","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAetD,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,uDAAuD;AACvD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CA6CtB;AAED,wDAAwD;AACxD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CASrD"}
|
|
1
|
+
{"version":3,"file":"fetch-public.d.ts","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAetD,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,uDAAuD;AACvD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CA6CtB;AAED,wDAAwD;AACxD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CASrD"}
|
|
@@ -48,7 +48,7 @@ export async function fetchPublic(target, options) {
|
|
|
48
48
|
const body = await readWithin(response, options.maxBytes);
|
|
49
49
|
if (body === undefined)
|
|
50
50
|
return refuse(`larger than ${String(options.maxBytes)} bytes`);
|
|
51
|
-
return { ok: true, url: url.href, type, body };
|
|
51
|
+
return { ok: true, url: url.href, type, link: response.headers.get('link'), body };
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
catch (thrown) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-public.js","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,MAAM,aAAa,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-public.js","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geekity/cms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A file-first CMS: Markdown content, a SQLite index, a Hono server that is both the editor and the public site.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"codemirror": "^6.0.2",
|
|
56
56
|
"esbuild": "^0.28.2",
|
|
57
57
|
"highlight.js": "11.12.0",
|
|
58
|
+
"microformats-parser": "^2.0.6",
|
|
58
59
|
"tailwindcss": "^4.3.3",
|
|
59
60
|
"tsx": "^4.23.15",
|
|
60
61
|
"typescript": "^7.0.2"
|
package/themes/default/README.md
CHANGED
|
@@ -83,7 +83,9 @@ overrides the `--color-*` custom properties instead; see [Colours](#colours).
|
|
|
83
83
|
{
|
|
84
84
|
"name": "Default",
|
|
85
85
|
"kind": "site",
|
|
86
|
-
"description": "One line about the theme."
|
|
86
|
+
"description": "One line about the theme.",
|
|
87
|
+
"colorScheme": "light dark",
|
|
88
|
+
"themeColor": { "light": "#faf7f2", "dark": "#171412" }
|
|
87
89
|
}
|
|
88
90
|
```
|
|
89
91
|
|
|
@@ -93,6 +95,14 @@ and `description` is optional. The directory name is the theme's id. A
|
|
|
93
95
|
directory without a readable manifest, or one naming a kind this CMS does not
|
|
94
96
|
have, is not a theme.
|
|
95
97
|
|
|
98
|
+
`colorScheme` and `themeColor` are the colours the head declares before the
|
|
99
|
+
stylesheet loads (see [The head](#the-head)). `colorScheme` is one of `normal`,
|
|
100
|
+
`light`, `dark`, `light dark`, `dark light` or `only light`, preferred scheme
|
|
101
|
+
first. `themeColor` is the colour of the browser around the page, one per
|
|
102
|
+
scheme, as a three- or six-digit hex colour with no alpha. Make it the page's
|
|
103
|
+
own background. A value outside those is ignored, and so is one a theme leaves
|
|
104
|
+
out: each falls back to this theme's, just as a template does.
|
|
105
|
+
|
|
96
106
|
## Overriding a template
|
|
97
107
|
|
|
98
108
|
A site keeps its themes under one directory, `themes/` by default and
|
|
@@ -151,8 +161,8 @@ packaged ones by name:
|
|
|
151
161
|
```
|
|
152
162
|
|
|
153
163
|
`layouts/base.njk` defines the blocks `title`, `speculationRules`,
|
|
154
|
-
`viewTransitions`, `head`, `alternates`, `header`, `
|
|
155
|
-
`scripts`, so most sites never have to copy it.
|
|
164
|
+
`viewTransitions`, `head`, `alternates`, `header`, `breadcrumbs`, `content`,
|
|
165
|
+
`footer` and `scripts`, so most sites never have to copy it.
|
|
156
166
|
|
|
157
167
|
Two layouts are named for the pages the Reading settings pick:
|
|
158
168
|
|
|
@@ -194,7 +204,9 @@ stylesheet tells the two apart. `menus.primary` is printed inside the
|
|
|
194
204
|
tagline, and everywhere else the stylesheet lays the header out as one line so
|
|
195
205
|
it sits beside the link home. See [Navigation](#navigation).
|
|
196
206
|
|
|
197
|
-
**The footer** prints the copyright with the current year and
|
|
207
|
+
**The footer** prints the copyright with the current year and the site
|
|
208
|
+
author's display name, `soloAuthor.name`, or the site title on a site with
|
|
209
|
+
several authors,
|
|
198
210
|
`Published with Geekity`, and then `menus.footer` — the `footer` area this
|
|
199
211
|
theme declares, and the whole of what the footer links. A site that wants its
|
|
200
212
|
feed there types an `RSS | /feed/` line into it, the way the starter site does.
|
|
@@ -206,6 +218,18 @@ and the copyright line stands on its own. The year is
|
|
|
206
218
|
rather than parses — so it is the year at the moment the page is rendered, in
|
|
207
219
|
the site's own timezone.
|
|
208
220
|
|
|
221
|
+
**The breadcrumb** opens `<main>` on a page with a place in the site's
|
|
222
|
+
hierarchy (TASK-150): a post filed under a category, and a category, tag or
|
|
223
|
+
author archive. It is `nav.breadcrumbs` labelled `Breadcrumb`, holding an `ol`
|
|
224
|
+
whose items run Home, then the post's first category and the post, or the
|
|
225
|
+
archive's term or person, then `Page N` past page one. Every crumb but the last
|
|
226
|
+
is a link; the last is the page itself, a `span` with `aria-current="page"`.
|
|
227
|
+
The trail is `breadcrumbs`, a list of `{ name, url }` that `layouts/base.njk`
|
|
228
|
+
sets before anything is printed, and the JSON-LD prints the same list, so the
|
|
229
|
+
two cannot disagree. Every other page has an empty trail and prints nothing. A
|
|
230
|
+
site that wants no visible breadcrumb empties the `breadcrumbs` block, and the
|
|
231
|
+
`BreadcrumbList` stays in the graph.
|
|
232
|
+
|
|
209
233
|
Webrings, badges, a licence notice and anything else that is markup rather than
|
|
210
234
|
a link are deliberately not in the package. They go in a site theme's `footer`
|
|
211
235
|
block:
|
|
@@ -405,7 +429,21 @@ What the bio prints: a round `u-photo` at 50px when they have an avatar,
|
|
|
405
429
|
their archive, then `p-job-title` and `p-locality` when the profile says, then
|
|
406
430
|
their `p-note` and their `rel="me"` links as a `ul.hlist.bio-links` — each
|
|
407
431
|
link's `rel` is on it ready to print, `me` first and then whatever else the
|
|
408
|
-
Links box typed.
|
|
432
|
+
Links box typed. Set `bioRelMe` to `false` to keep the card and drop its
|
|
433
|
+
claims: the name is linked `rel="author"` alone and `me` comes off every
|
|
434
|
+
link.
|
|
435
|
+
|
|
436
|
+
**The homepage** speaks for the site's author only on a site whose Site author
|
|
437
|
+
setting names a user, which `soloAuthor` on the context says. Then both
|
|
438
|
+
`layouts/home.njk` at `/` and `layouts/front-page.njk` end with that person's
|
|
439
|
+
card, with its `rel="me"` claims, and their author archive's link home carries
|
|
440
|
+
`rel="me"` back, so the homepage and the archive name each other. Those two
|
|
441
|
+
layouts also set `bioHome` to the homepage's absolute URL, which puts a
|
|
442
|
+
`data.u-url.u-uid` holding it first in the card, so a parser running the
|
|
443
|
+
[representative h-card algorithm](https://microformats.org/wiki/representative-h-card-parsing)
|
|
444
|
+
on the homepage finds this card as the site's (TASK-193). The archive stays a
|
|
445
|
+
second `u-url`. No other page sets `bioHome`. On a site
|
|
446
|
+
with several authors neither homepage prints a card. Each of
|
|
409
447
|
those is printed only when the profile says it, so a profile holding a name
|
|
410
448
|
alone prints a name alone. A name this site has no account for is printed
|
|
411
449
|
unlinked, because the file still said somebody wrote this.
|
|
@@ -428,7 +466,7 @@ an overridden layout — either includes this partial instead or writes the line
|
|
|
428
466
|
itself. It was four lines of markup, and the object behind it has not changed:
|
|
429
467
|
|
|
430
468
|
```njk
|
|
431
|
-
{% set writer = author or { name: site.
|
|
469
|
+
{% set writer = author or { name: site.title } %}
|
|
432
470
|
<span class="p-author h-card">
|
|
433
471
|
{%- if writer.url %}<a class="u-url" href="{{ writer.url | url }}">{{ writer.name }}</a>
|
|
434
472
|
{%- else %}{{ writer.name }}{% endif %}
|
|
@@ -656,25 +694,78 @@ the entry's `summary` — the line the feeds publish — else `site.tagline`. It
|
|
|
656
694
|
printed once, as `<meta name="description">`, and the Open Graph and Twitter
|
|
657
695
|
descriptions say the same thing.
|
|
658
696
|
|
|
697
|
+
**The colours** come from the theme's `theme.json` (see
|
|
698
|
+
[The manifest](#the-manifest)), on the context as `theme`.
|
|
699
|
+
`<meta name="color-scheme">` comes before the stylesheet, so a reader in dark
|
|
700
|
+
mode gets a dark canvas rather than a white flash while the stylesheet loads.
|
|
701
|
+
`<meta name="theme-color">` is printed twice, once with
|
|
702
|
+
`media="(prefers-color-scheme: light)"` and once for dark.
|
|
703
|
+
|
|
659
704
|
**The card.** `og:title` is the page's title, or the site's on the front page;
|
|
660
705
|
`og:site_name` is always the site's. `og:type` is `article` on a rendered post
|
|
661
706
|
or page and `website` everywhere else, a listing carrying a page's front matter
|
|
662
|
-
included. `og:url` is the canonical URL.
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
707
|
+
included. `og:url` is the canonical URL. An article also carries
|
|
708
|
+
`article:published_time`, `article:modified_time` (the `updated` date, else the
|
|
709
|
+
publish date), `article:author` (the author's profile URL here, else their
|
|
710
|
+
name) and one `article:tag` per tag.
|
|
711
|
+
|
|
712
|
+
**The picture** is the `image` in the entry's front matter, else `site.avatar`,
|
|
713
|
+
on the context as `shareImage`. A site with neither prints no `og:image` and no
|
|
714
|
+
`twitter:image` rather than an empty one. The picture always carries
|
|
715
|
+
`og:image:alt` and `twitter:image:alt`. For the entry's own picture, the alt
|
|
716
|
+
text is its `imageAlt` front matter, else what the media library says about the
|
|
717
|
+
upload, else the entry's title. For the avatar, it is the media library's text,
|
|
718
|
+
else the site's author. `og:image:width` and `og:image:height` are printed when
|
|
719
|
+
the image's variants have been derived, because the size is read from their
|
|
720
|
+
sidecar rather than from the file. `twitter:card` is `summary_large_image` for a
|
|
721
|
+
picture at least 1200 pixels wide and wider than it is tall. Everything else,
|
|
722
|
+
the avatar included, is `summary`, the small picture beside the words.
|
|
723
|
+
|
|
724
|
+
**The icons** come from the site's `icon` setting in `site.json`, else
|
|
725
|
+
`site.avatar`, through the derived images (decision-10). `icon` exists for a
|
|
726
|
+
site whose avatar is a face and whose mark is a logo. The head links `icon` at
|
|
727
|
+
32 and 16 pixels and `apple-touch-icon` at 180, each a square PNG cropped from
|
|
728
|
+
the middle of the picture and encoded the first time a browser asks for it. An
|
|
729
|
+
SVG icon is linked first as itself, with `type="image/svg+xml"` and no
|
|
730
|
+
`sizes`, and the PNGs are rasterised from it. They are on the context as
|
|
731
|
+
`icons`, a list of `{ rel, sizes, type, href }`, which is empty, and the links
|
|
732
|
+
are not printed at all, when the site has neither setting, when it names a
|
|
733
|
+
file no icon can be made of, or when image optimization is off.
|
|
734
|
+
|
|
735
|
+
**The favicon and the manifest** are routes, not templates. `/favicon.ico`
|
|
736
|
+
holds 16, 32 and 48 pixel frames drawn from the same picture, because browsers
|
|
737
|
+
and crawlers ask the root for it whatever the head links; it answers 404 on a
|
|
738
|
+
site with no icon. `/manifest.webmanifest` gives the site's title as `name` and
|
|
739
|
+
`short_name`, `start_url` `/`, `display` `minimal-ui`, the theme's light
|
|
740
|
+
`themeColor` as `theme_color` and `background_color`, and icons at 192 and 512
|
|
741
|
+
pixels plus a maskable 512 whose picture sits inside the middle 80%, padded
|
|
742
|
+
with its own dominant colour. The head links it on every page.
|
|
743
|
+
|
|
744
|
+
**The search description** is a route too. `/opensearch.xml` is an OpenSearch
|
|
745
|
+
1.1 description that names the site by its title (cut to the 16 characters
|
|
746
|
+
`ShortName` allows), describes it by its tagline, else its title, shows
|
|
747
|
+
`/favicon.ico` as its `Image` when the site has an icon, and searches
|
|
748
|
+
`/search/?q={searchTerms}`. Every URL in it is absolute and carries the base
|
|
749
|
+
path. The head links it on every page with `<link rel="search"
|
|
750
|
+
type="application/opensearchdescription+xml">`, outside the `head` block, so a
|
|
751
|
+
browser offers the site as a search engine. A theme that replaces `base.njk`
|
|
752
|
+
copies that line to keep the offer.
|
|
753
|
+
|
|
754
|
+
**The embed card** is a route too. `/_geekity/oembed?url=…` is an oEmbed
|
|
755
|
+
provider: for the URL of a published post or page it answers a `rich` embed
|
|
756
|
+
with the title, the author and their archive, the site as provider, a
|
|
757
|
+
thumbnail when the post's own `image` has a recorded size, and an `html`
|
|
758
|
+
card that is a blockquote of escaped text and links with no script, followed
|
|
759
|
+
by a hidden, sandboxed `<iframe>` of `/_geekity/embed?url=…`. That route is
|
|
760
|
+
the same card as a page of its own, and it is the one response another site may
|
|
761
|
+
frame. WordPress keeps a card from a provider it does not know only when the
|
|
762
|
+
card has an iframe, and it shows the frame once the page inside reports its
|
|
763
|
+
height. A consumer that strips iframes still has the blockquote. `maxwidth`
|
|
764
|
+
and `maxheight` are honoured, `format=xml` gives the same fields as XML, and
|
|
765
|
+
any other URL is a 404. The head of each post and page links it with
|
|
766
|
+
`<link rel="alternate" type="application/json+oembed">` and its `text/xml+oembed`
|
|
767
|
+
twin, outside the `head` block. A theme that replaces `base.njk` copies those
|
|
768
|
+
lines to keep the card.
|
|
678
769
|
|
|
679
770
|
**The structured data** is `partials/jsonld.njk`, one `<script
|
|
680
771
|
type="application/ld+json">` holding one `@graph` per page, and it is the only
|
|
@@ -682,19 +773,33 @@ structured data the theme emits — there is no Microdata anywhere, by
|
|
|
682
773
|
decision-16, because the visible markup already carries microformats2 for the
|
|
683
774
|
IndieWeb. The graph holds:
|
|
684
775
|
|
|
685
|
-
- `WebSite`, always, with the site's title, tagline and URL, and a
|
|
686
|
-
|
|
687
|
-
`/search/?q={search_term_string}`.
|
|
776
|
+
- `WebSite`, always, with the site's title, tagline and URL, and a
|
|
777
|
+
`potentialAction` that is a `SearchAction` on
|
|
778
|
+
`/search/?q={search_term_string}`. On a site whose author is a user, its
|
|
779
|
+
`publisher` and `about` both point at that user's Person, on every page. On
|
|
780
|
+
a site with several authors its `publisher` is the Organization below and it
|
|
781
|
+
has no `about`.
|
|
782
|
+
- `Organization`, on a site with several authors only: the site itself, named
|
|
783
|
+
for its title, at `{baseUrl}/#organization`. It publishes the `WebSite` and
|
|
784
|
+
every entry.
|
|
688
785
|
- `Person`, from `siteAuthor`: their name, archive URL, avatar, bio, job title
|
|
689
786
|
and location, and a `sameAs` of their profile links and their actor id, which
|
|
690
787
|
is what asserts that the schema.org Person and the fediverse actor are one
|
|
691
788
|
identity. Identity comes from a user profile, so a site — or a byline —
|
|
692
|
-
naming nobody with an account here prints no Person, and the `author`
|
|
693
|
-
|
|
789
|
+
naming nobody with an account here prints no Person, and the `author`
|
|
790
|
+
reference goes with it. A site with several authors prints no Person on a
|
|
791
|
+
page about nobody in particular.
|
|
694
792
|
- `ProfilePage` on an author archive, whose `mainEntity` is that Person.
|
|
695
793
|
- `BlogPosting` on a post and `Article` on a page, with the headline, URL,
|
|
696
794
|
`mainEntityOfPage`, `datePublished`, `dateModified`, description, image,
|
|
697
|
-
`author
|
|
795
|
+
`author`, and the site's `publisher`: the site author's Person, or the
|
|
796
|
+
Organization. A post with no title is headed by the words its `<title>`
|
|
797
|
+
names it by, its `label`, cut on a word boundary to at most 110 characters.
|
|
798
|
+
A post with no picture of its own, on a site with no avatar, takes its
|
|
799
|
+
author's photo, else the site's `icon` upload.
|
|
800
|
+
- `BreadcrumbList` wherever the page prints a breadcrumb (see
|
|
801
|
+
[The page shell](#the-page-shell)): one `ListItem` per crumb with its
|
|
802
|
+
`position`, `name` and absolute URL as `item`.
|
|
698
803
|
|
|
699
804
|
A site that wants a different graph — more types, an `Organization` publisher,
|
|
700
805
|
nothing at all — writes its own `partials/jsonld.njk` and that file replaces
|
|
@@ -955,7 +1060,11 @@ Every template gets:
|
|
|
955
1060
|
| `site` | `content/_data/site.json`, if the site has one, over the defaults `title` and `url`. Any key in the file is readable, so `site.tagline`, `site.author` and anything else a site adds are all available. |
|
|
956
1061
|
| `menus` | Every menu the site stores, by name, marked for this page: `menus.primary`, `menus.footer`, and any other name. See [Navigation](#navigation). |
|
|
957
1062
|
| `siteAuthor` | Who the page is by, as a profile. **Absent** when nobody matches. See [Bylines and author archives](#bylines-and-author-archives). |
|
|
958
|
-
| `
|
|
1063
|
+
| `soloAuthor` | The site author's profile, on every page of a site whose Site author setting names a user. **Absent** on a site with several authors. See [The bio](#the-bio). |
|
|
1064
|
+
| `icons` | The site's icons, as `{ rel, sizes, type, href }`. Empty until the site has an icon or an avatar to derive them from. See [The head](#the-head). |
|
|
1065
|
+
| `theme` | The colours the theme declares, as `{ colorScheme, themeColor: { light, dark } }`, each absent when no theme declares it. See [The manifest](#the-manifest). |
|
|
1066
|
+
| `shareImage` | The picture a shared link shows, as `{ url, alt, size: { width, height }, card }`. `size` is absent when it is not known. **Absent** when there is no picture. See [The head](#the-head). |
|
|
1067
|
+
| `llmsTxt` | The path of `/llms.txt`, while the site serves it. **Absent** when the site has turned it off. The default theme links it from the front page only. |
|
|
959
1068
|
|
|
960
1069
|
A document — one post, one page, or one entry of a listing — adds:
|
|
961
1070
|
|
|
@@ -975,6 +1084,7 @@ A document — one post, one page, or one entry of a listing — adds:
|
|
|
975
1084
|
| `page.inputPath` | The source file, relative to the content directory. |
|
|
976
1085
|
| `type` | `post` or `page`. |
|
|
977
1086
|
| `permalink`, `slug`, `draft`, `description` | Straight from the front matter. |
|
|
1087
|
+
| `lang` | The `lang` front matter as a canonical tag, such as `fr-CA`. Absent when it names none or no tag. |
|
|
978
1088
|
| `author` | Who wrote it, as a profile rather than a string. See [Bylines and author archives](#bylines-and-author-archives). |
|
|
979
1089
|
| `activityStreams` | The post's ActivityPub object id, absolute. Only on a rendered published post. |
|
|
980
1090
|
| `previous` | The published post before this one by date, as `{ title, url }`. Absent on the oldest post. |
|
|
@@ -1005,7 +1115,10 @@ archive — adds:
|
|
|
1005
1115
|
How many posts a listing page holds comes from `postsPerPage` in
|
|
1006
1116
|
`content/_data/site.json`, and defaults to 10. How many entries a feed holds
|
|
1007
1117
|
comes from `feedSize` in the same file, and defaults to 20. The `<html lang>`
|
|
1008
|
-
comes from `language`, and defaults to `en`.
|
|
1118
|
+
comes from `language`, and defaults to `en`. A document whose `lang` names
|
|
1119
|
+
another language carries it on its own `<article>`, in an entry, a listing and
|
|
1120
|
+
search results alike, through `partials/lang.njk`, and the dates inside that
|
|
1121
|
+
article are written in it (see the `date` filter). The rssCloud and WebSub server the
|
|
1009
1122
|
feeds advertise comes from `notifyServer`, and is empty for none; the theme
|
|
1010
1123
|
writes nothing for it, because a cloud is advertised in the feed rather than on
|
|
1011
1124
|
the page.
|
|
@@ -1051,14 +1164,12 @@ account. It resolves in this order:
|
|
|
1051
1164
|
|
|
1052
1165
|
- the document's own `author`, on a post or a page that names one;
|
|
1053
1166
|
- the person whose archive it is, on an author archive;
|
|
1054
|
-
- the
|
|
1055
|
-
|
|
1167
|
+
- the site author, `soloAuthor`, everywhere else — the home page, a taxonomy
|
|
1168
|
+
archive, a page that names nobody, the 404.
|
|
1056
1169
|
|
|
1057
|
-
It is **absent** when none of those name anybody this site has
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
behind it has no picture, no bio and nowhere to link, so there is nothing to
|
|
1061
|
-
print and the key is not there. Write `{% if siteAuthor %}` around the bio.
|
|
1170
|
+
It is **absent** when none of those name anybody this site has, which on a
|
|
1171
|
+
site with several authors is every page about nobody in particular. Write
|
|
1172
|
+
`{% if siteAuthor %}` around the bio.
|
|
1062
1173
|
|
|
1063
1174
|
The URL is not only a page. Each user is an ActivityPub actor at that address,
|
|
1064
1175
|
so it is the page a follower lands on when they click through from the
|
|
@@ -1253,6 +1364,15 @@ site that has turned them off advertises nothing. The CMS also sends the same
|
|
|
1253
1364
|
endpoint as a `Link` header on every representation of a document, so a sender
|
|
1254
1365
|
that does not parse HTML still finds it.
|
|
1255
1366
|
|
|
1367
|
+
On the front page it also writes the site's index for language models:
|
|
1368
|
+
|
|
1369
|
+
```html
|
|
1370
|
+
<link rel="describedby" type="text/markdown" href="/llms.txt" />
|
|
1371
|
+
```
|
|
1372
|
+
|
|
1373
|
+
It comes from `llmsTxt` on the context, which is absent once the site turns the
|
|
1374
|
+
file off. The CMS sends the same link as a `Link` header on the front page.
|
|
1375
|
+
|
|
1256
1376
|
`layouts/tag.njk` and `layouts/category.njk` override that block, call `super()`
|
|
1257
1377
|
and add the archive's own three feeds:
|
|
1258
1378
|
|
|
@@ -1599,18 +1719,29 @@ the import above carries `with context`: a macro imported without it cannot see
|
|
|
1599
1719
|
|
|
1600
1720
|
## Filters
|
|
1601
1721
|
|
|
1602
|
-
| Filter
|
|
1603
|
-
|
|
|
1604
|
-
| `date(format, zone)` | Formats a `Date` or a date string. `readable` (the default) gives `
|
|
1605
|
-
| `
|
|
1606
|
-
| `
|
|
1607
|
-
| `
|
|
1722
|
+
| Filter | What it does |
|
|
1723
|
+
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1724
|
+
| `date(format, zone, locale)` | Formats a `Date` or a date string. `long` gives `2 September 2026` on an `en` site and `2 septembre 2026` on an `fr` one; `full`, `medium` and `short` are Intl's other date styles, and `readable` (the default) is `long`. `month` gives `September 2026`, `year` gives `2026`, `html` gives `2026-09-02` for a `<time datetime>`, and `iso` gives the full ISO 8601 instant. Every format but `html` and `iso` is written in the site's locale: the `locale` setting, or the `language` when that is empty. Bare `en` writes the day first, as `en-GB` does; `en-US` gives `September 2, 2026`. A date in a file is a UTC instant; every format but `iso` is rendered in the site's `timezone` setting, and `iso` stays the instant. Pass `zone` — an IANA name — to override the setting for one call. Pass `locale` — a BCP 47 tag — to write the words in another language for one call; it comes after `zone`, so pass `none` for the zone to keep the site's: `{{ date \| date("readable", none, lang) }}`. An empty locale, or one that is no tag, writes in the site's. A value that is not a date renders as the empty string. |
|
|
1725
|
+
| `plural(forms, locale)` | Picks the form for a count by its plural category in the site's locale, through `Intl.PluralRules`: `{{ n \| plural({ one: "# reply", other: "# replies" }) }}`. The keys are the CLDR categories (`zero`, `one`, `two`, `few`, `many`, `other`), a category the forms leave out falls back to `other`, and `#` is the count in the locale's digits. Pass `locale` when the strings are in a language of their own: the default theme's words are English, so it passes `"en"`. |
|
|
1726
|
+
| `url` | Prefixes a root-relative path with the base URL's path, so a site served from a subdirectory links correctly. Eleventy's filter of the same name. |
|
|
1727
|
+
| `absoluteUrl` | The same path as a fully qualified URL against the site's `baseUrl`. |
|
|
1728
|
+
| `asset` | The URL of a file in the theme's `static/` directory, with the base path in front and a hash of the file's bytes on the end: `{{ "style.css" \| asset }}` gives `/theme/style.css?v=3f2a9c01b7d4`. The file is found the way `/theme/` finds it, the chosen theme first. A hashed URL is served with `Cache-Control: public, max-age=31536000, immutable`, and editing the file changes the hash on the next render. A file no theme has gets its plain `/theme/` URL. |
|
|
1608
1729
|
|
|
1609
1730
|
`date` reads one word rather than parsing it: `{{ "now" | date("year") }}` is
|
|
1610
1731
|
the year at the moment the page is rendered, in the site's own timezone. It is
|
|
1611
1732
|
what the footer's copyright line is written with, and it is the one date a page
|
|
1612
1733
|
has that no file carries.
|
|
1613
1734
|
|
|
1735
|
+
The default theme passes the document's `lang` as that locale for every date
|
|
1736
|
+
inside its `<article>`: the Published and Updated lines, the hidden heading of
|
|
1737
|
+
a note, the kicker in a listing or a search result (`kicker.line(…,
|
|
1738
|
+
lang=post.lang)`), and the date of the post a reply answers. So a post that
|
|
1739
|
+
says `lang: fr` on an `en` site reads `Published 2 septembre 2026`, while the
|
|
1740
|
+
navigation, the conversation under it, the archive's month headings and the
|
|
1741
|
+
footer stay in the site's locale. A theme that wants the same passes `lang`
|
|
1742
|
+
on an entry and `post.lang` in a listing; one that passes nothing writes every
|
|
1743
|
+
date in the site's locale, as before.
|
|
1744
|
+
|
|
1614
1745
|
Nunjucks' own filters — `default`, `join`, `urlencode`, `safe` and the rest —
|
|
1615
1746
|
are all available. Autoescaping is on, so rendered Markdown is the one thing
|
|
1616
1747
|
that has to be passed through `safe`.
|