@geekity/cms 0.22.0 → 0.24.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.
Files changed (227) hide show
  1. package/README.md +19 -4
  2. package/admin/pages/documents/editor.njk +18 -0
  3. package/admin/static/editor.js +1 -1
  4. package/dist/admin/comments.js +2 -2
  5. package/dist/admin/comments.js.map +1 -1
  6. package/dist/admin/documents.d.ts +36 -7
  7. package/dist/admin/documents.d.ts.map +1 -1
  8. package/dist/admin/documents.js +140 -29
  9. package/dist/admin/documents.js.map +1 -1
  10. package/dist/admin/editor-layout.d.ts +1 -1
  11. package/dist/admin/editor-layout.d.ts.map +1 -1
  12. package/dist/admin/editor-layout.js +6 -1
  13. package/dist/admin/editor-layout.js.map +1 -1
  14. package/dist/admin/event-field.d.ts +26 -0
  15. package/dist/admin/event-field.d.ts.map +1 -0
  16. package/dist/admin/event-field.js +74 -0
  17. package/dist/admin/event-field.js.map +1 -0
  18. package/dist/admin/federation.js +3 -3
  19. package/dist/admin/federation.js.map +1 -1
  20. package/dist/admin/media.js +2 -2
  21. package/dist/admin/media.js.map +1 -1
  22. package/dist/admin/preview.d.ts.map +1 -1
  23. package/dist/admin/preview.js +16 -1
  24. package/dist/admin/preview.js.map +1 -1
  25. package/dist/admin/store.d.ts +9 -0
  26. package/dist/admin/store.d.ts.map +1 -1
  27. package/dist/admin/store.js +16 -5
  28. package/dist/admin/store.js.map +1 -1
  29. package/dist/avatars/avatars.js +1 -1
  30. package/dist/avatars/avatars.js.map +1 -1
  31. package/dist/comments/policy.d.ts +10 -0
  32. package/dist/comments/policy.d.ts.map +1 -1
  33. package/dist/comments/policy.js +12 -0
  34. package/dist/comments/policy.js.map +1 -1
  35. package/dist/comments/records.d.ts +5 -1
  36. package/dist/comments/records.d.ts.map +1 -1
  37. package/dist/comments/records.js +16 -2
  38. package/dist/comments/records.js.map +1 -1
  39. package/dist/content/event.d.ts +40 -0
  40. package/dist/content/event.d.ts.map +1 -0
  41. package/dist/content/event.js +51 -0
  42. package/dist/content/event.js.map +1 -0
  43. package/dist/content/handles.d.ts +22 -0
  44. package/dist/content/handles.d.ts.map +1 -0
  45. package/dist/content/handles.js +68 -0
  46. package/dist/content/handles.js.map +1 -0
  47. package/dist/content/markdown.d.ts +8 -2
  48. package/dist/content/markdown.d.ts.map +1 -1
  49. package/dist/content/markdown.js +55 -5
  50. package/dist/content/markdown.js.map +1 -1
  51. package/dist/content/parser.d.ts +3 -0
  52. package/dist/content/parser.d.ts.map +1 -1
  53. package/dist/content/parser.js +1 -1
  54. package/dist/content/parser.js.map +1 -1
  55. package/dist/content/post-type.d.ts +12 -8
  56. package/dist/content/post-type.d.ts.map +1 -1
  57. package/dist/content/post-type.js +12 -2
  58. package/dist/content/post-type.js.map +1 -1
  59. package/dist/content/rsvp.d.ts +29 -0
  60. package/dist/content/rsvp.d.ts.map +1 -0
  61. package/dist/content/rsvp.js +49 -0
  62. package/dist/content/rsvp.js.map +1 -0
  63. package/dist/content/save.d.ts +2 -1
  64. package/dist/content/save.d.ts.map +1 -1
  65. package/dist/content/save.js +10 -3
  66. package/dist/content/save.js.map +1 -1
  67. package/dist/content/store.d.ts +11 -4
  68. package/dist/content/store.d.ts.map +1 -1
  69. package/dist/content/store.js +15 -4
  70. package/dist/content/store.js.map +1 -1
  71. package/dist/content/sync.d.ts.map +1 -1
  72. package/dist/content/sync.js +7 -6
  73. package/dist/content/sync.js.map +1 -1
  74. package/dist/env.d.ts +3 -0
  75. package/dist/env.d.ts.map +1 -1
  76. package/dist/federation/article.d.ts +9 -3
  77. package/dist/federation/article.d.ts.map +1 -1
  78. package/dist/federation/article.js +90 -34
  79. package/dist/federation/article.js.map +1 -1
  80. package/dist/federation/cited-post.d.ts +13 -0
  81. package/dist/federation/cited-post.d.ts.map +1 -0
  82. package/dist/federation/cited-post.js +75 -0
  83. package/dist/federation/cited-post.js.map +1 -0
  84. package/dist/federation/delivery.d.ts.map +1 -1
  85. package/dist/federation/delivery.js +31 -2
  86. package/dist/federation/delivery.js.map +1 -1
  87. package/dist/federation/handles.d.ts +28 -0
  88. package/dist/federation/handles.d.ts.map +1 -0
  89. package/dist/federation/handles.js +65 -0
  90. package/dist/federation/handles.js.map +1 -0
  91. package/dist/federation/inbox.d.ts +2 -1
  92. package/dist/federation/inbox.d.ts.map +1 -1
  93. package/dist/federation/inbox.js +11 -3
  94. package/dist/federation/inbox.js.map +1 -1
  95. package/dist/federation/mount.d.ts.map +1 -1
  96. package/dist/federation/mount.js +18 -2
  97. package/dist/federation/mount.js.map +1 -1
  98. package/dist/federation/profiles.d.ts.map +1 -1
  99. package/dist/federation/profiles.js +2 -8
  100. package/dist/federation/profiles.js.map +1 -1
  101. package/dist/federation/site-loaders.d.ts +15 -0
  102. package/dist/federation/site-loaders.d.ts.map +1 -0
  103. package/dist/federation/site-loaders.js +19 -0
  104. package/dist/federation/site-loaders.js.map +1 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +23 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/indieauth/client.js +2 -2
  109. package/dist/indieauth/client.js.map +1 -1
  110. package/dist/micropub/create.d.ts +2 -1
  111. package/dist/micropub/create.d.ts.map +1 -1
  112. package/dist/micropub/create.js +57 -8
  113. package/dist/micropub/create.js.map +1 -1
  114. package/dist/micropub/endpoint.d.ts.map +1 -1
  115. package/dist/micropub/endpoint.js +12 -4
  116. package/dist/micropub/endpoint.js.map +1 -1
  117. package/dist/micropub/update.d.ts +3 -0
  118. package/dist/micropub/update.d.ts.map +1 -1
  119. package/dist/micropub/update.js +29 -4
  120. package/dist/micropub/update.js.map +1 -1
  121. package/dist/web/context.d.ts +32 -4
  122. package/dist/web/context.d.ts.map +1 -1
  123. package/dist/web/context.js +28 -1
  124. package/dist/web/context.js.map +1 -1
  125. package/dist/web/conversation.d.ts +26 -1
  126. package/dist/web/conversation.d.ts.map +1 -1
  127. package/dist/web/conversation.js +67 -10
  128. package/dist/web/conversation.js.map +1 -1
  129. package/dist/web/documents.d.ts +12 -0
  130. package/dist/web/documents.d.ts.map +1 -1
  131. package/dist/web/documents.js +20 -0
  132. package/dist/web/documents.js.map +1 -1
  133. package/dist/web/errors.d.ts.map +1 -1
  134. package/dist/web/errors.js +5 -3
  135. package/dist/web/errors.js.map +1 -1
  136. package/dist/web/feed-item.d.ts.map +1 -1
  137. package/dist/web/feed-item.js +8 -3
  138. package/dist/web/feed-item.js.map +1 -1
  139. package/dist/web/llms.d.ts +8 -0
  140. package/dist/web/llms.d.ts.map +1 -1
  141. package/dist/web/llms.js +25 -7
  142. package/dist/web/llms.js.map +1 -1
  143. package/dist/web/maintenance.d.ts.map +1 -1
  144. package/dist/web/maintenance.js +5 -2
  145. package/dist/web/maintenance.js.map +1 -1
  146. package/dist/web/negotiate.d.ts +4 -2
  147. package/dist/web/negotiate.d.ts.map +1 -1
  148. package/dist/web/negotiate.js +17 -7
  149. package/dist/web/negotiate.js.map +1 -1
  150. package/dist/web/render.d.ts +3 -0
  151. package/dist/web/render.d.ts.map +1 -1
  152. package/dist/web/render.js +39 -6
  153. package/dist/web/render.js.map +1 -1
  154. package/dist/web/routes.d.ts.map +1 -1
  155. package/dist/web/routes.js +67 -25
  156. package/dist/web/routes.js.map +1 -1
  157. package/dist/web/templates.d.ts +4 -1
  158. package/dist/web/templates.d.ts.map +1 -1
  159. package/dist/web/templates.js +11 -0
  160. package/dist/web/templates.js.map +1 -1
  161. package/dist/webmention/cited-picture.d.ts +11 -4
  162. package/dist/webmention/cited-picture.d.ts.map +1 -1
  163. package/dist/webmention/cited-picture.js +22 -13
  164. package/dist/webmention/cited-picture.js.map +1 -1
  165. package/dist/webmention/cited-start.d.ts +10 -0
  166. package/dist/webmention/cited-start.d.ts.map +1 -0
  167. package/dist/webmention/cited-start.js +21 -0
  168. package/dist/webmention/cited-start.js.map +1 -0
  169. package/dist/webmention/fetch-public.d.ts +2 -2
  170. package/dist/webmention/fetch-public.d.ts.map +1 -1
  171. package/dist/webmention/fetch-public.js +1 -1
  172. package/dist/webmention/fetch-public.js.map +1 -1
  173. package/dist/webmention/html.d.ts +2 -0
  174. package/dist/webmention/html.d.ts.map +1 -1
  175. package/dist/webmention/html.js +6 -0
  176. package/dist/webmention/html.js.map +1 -1
  177. package/dist/webmention/index.d.ts +2 -1
  178. package/dist/webmention/index.d.ts.map +1 -1
  179. package/dist/webmention/index.js +1 -0
  180. package/dist/webmention/index.js.map +1 -1
  181. package/dist/webmention/microformats.d.ts +25 -2
  182. package/dist/webmention/microformats.d.ts.map +1 -1
  183. package/dist/webmention/microformats.js +38 -4
  184. package/dist/webmention/microformats.js.map +1 -1
  185. package/dist/webmention/pingback.d.ts +42 -0
  186. package/dist/webmention/pingback.d.ts.map +1 -0
  187. package/dist/webmention/pingback.js +229 -0
  188. package/dist/webmention/pingback.js.map +1 -0
  189. package/dist/webmention/receive.d.ts +20 -2
  190. package/dist/webmention/receive.d.ts.map +1 -1
  191. package/dist/webmention/receive.js +25 -16
  192. package/dist/webmention/receive.js.map +1 -1
  193. package/dist/webmention/reply-context.d.ts +65 -18
  194. package/dist/webmention/reply-context.d.ts.map +1 -1
  195. package/dist/webmention/reply-context.js +403 -99
  196. package/dist/webmention/reply-context.js.map +1 -1
  197. package/dist/webmention/reply-contexts.d.ts +3 -1
  198. package/dist/webmention/reply-contexts.d.ts.map +1 -1
  199. package/dist/webmention/reply-contexts.js +53 -17
  200. package/dist/webmention/reply-contexts.js.map +1 -1
  201. package/dist/webmention/routes.d.ts.map +1 -1
  202. package/dist/webmention/routes.js +2 -0
  203. package/dist/webmention/routes.js.map +1 -1
  204. package/dist/webmention/service.d.ts +11 -0
  205. package/dist/webmention/service.d.ts.map +1 -1
  206. package/dist/webmention/service.js +27 -6
  207. package/dist/webmention/service.js.map +1 -1
  208. package/dist/webmention/syndication.d.ts +6 -0
  209. package/dist/webmention/syndication.d.ts.map +1 -1
  210. package/dist/webmention/syndication.js +12 -0
  211. package/dist/webmention/syndication.js.map +1 -1
  212. package/package.json +7 -7
  213. package/themes/default/README.md +127 -37
  214. package/themes/default/layouts/410.njk +10 -0
  215. package/themes/default/layouts/base.njk +3 -0
  216. package/themes/default/layouts/page.njk +7 -0
  217. package/themes/default/layouts/post.njk +7 -4
  218. package/themes/default/layouts/search.njk +1 -1
  219. package/themes/default/partials/cited-page.njk +7 -0
  220. package/themes/default/partials/conversation.njk +25 -5
  221. package/themes/default/partials/event.njk +27 -0
  222. package/themes/default/partials/jsonld.njk +28 -0
  223. package/themes/default/partials/post-list.njk +5 -2
  224. package/themes/default/partials/reply-context.njk +24 -4
  225. package/themes/default/partials/rsvp.njk +7 -0
  226. package/themes/default/src/style.css +20 -0
  227. package/themes/default/static/style.css +35 -0
package/README.md CHANGED
@@ -1154,10 +1154,10 @@ The open web's version of what ActivityPub does: one page telling another that
1154
1154
  it linked to it. Both directions are on by default and each has a switch on the
1155
1155
  Discussion settings page.
1156
1156
 
1157
- | Setting in `site.json` | What it does |
1158
- | ---------------------- | ------------------------------------------------------------------------ |
1159
- | `webmentionsSend` | Tell the external pages a post links to, when it is published or edited. |
1160
- | `webmentionsReceive` | Advertise the endpoint on every page and accept what is sent to it. |
1157
+ | Setting in `site.json` | What it does |
1158
+ | ---------------------- | -------------------------------------------------------------------------- |
1159
+ | `webmentionsSend` | Tell the external pages a post links to, when it is published or edited. |
1160
+ | `webmentionsReceive` | Advertise the endpoints and accept webmentions and pingbacks sent to them. |
1161
1161
 
1162
1162
  **Sending** runs off the same index changes federation does, so a post saved in
1163
1163
  the editor and one edited on disk are one thing, and a full scan sends nothing.
@@ -1187,6 +1187,21 @@ answers 404 or 410 — takes it away. Closing rules do not apply: a post that
1187
1187
  stopped taking comments still hears about a page that links to it, exactly as it
1188
1188
  still hears a fediverse reply.
1189
1189
 
1190
+ **Pingbacks** are how most WordPress sites say they linked here. The same
1191
+ switch takes them at `/_geekity/pingback`, advertised as an absolute URL in an
1192
+ `X-Pingback` header and a `<link rel="pingback">` on every post and on every
1193
+ page that takes comments. A `pingback.ping(source, target)` XML-RPC call goes
1194
+ through the same check, verification, spam checker and moderation queue as a
1195
+ webmention and is filed as the same comment, so a link pinged and a link
1196
+ mentioned are one entry. Because XML-RPC wants an answer, the source is read
1197
+ before the endpoint replies, and a failure is one of the spec's fault codes:
1198
+ `0x0010` for a source that does not exist, `0x0011` for one that does not link
1199
+ here, `0x0020` for a target that does not exist, `0x0021` for a target that
1200
+ takes no pingbacks, and `0x0030` for a ping sent again, which still rewrites
1201
+ the entry from the source as it now reads. A body over 16 KB, XML that is not
1202
+ well formed, and any document type declaration are refused with `-32700`
1203
+ before anything is resolved. The CMS does not send pingbacks.
1204
+
1190
1205
  ### Syndication targets
1191
1206
 
1192
1207
  Some services copy a post when it links to them and sends them a webmention,
@@ -263,6 +263,16 @@
263
263
  {{ citedCard('in-reply-to') }}
264
264
  <p class="label block whitespace-normal text-xs">The address of the post this one answers. Leave it empty for a post that answers nobody.</p>
265
265
 
266
+ {% call field.select('editor-rsvp', 'rsvp', 'RSVP', error=(error if errorField == 'editor-rsvp' else '')) %}
267
+ <option value=""{% if form.rsvp == "" %} selected{% endif %}>Not an RSVP</option>
268
+ {% for choice in rsvpChoices %}
269
+ <option value="{{ choice.value }}"{% if form.rsvp == choice.value %} selected{% endif %}>{{ choice.label }}</option>
270
+ {% endfor %}
271
+ {% if unrecognizedRsvp %}
272
+ <option value="{{ unrecognizedRsvp }}" selected>{{ unrecognizedRsvp }} (not recognized)</option>
273
+ {% endif %}
274
+ {% endcall %}
275
+
266
276
  {#- The mf2 `like-of`, `repost-of` and `bookmark-of` (TASK-169): each
267
277
  cites a page the way a reply does, and sends it a webmention. -#}
268
278
  {{ field.text('editor-like-of', 'like-of', 'Like of', value=form.likeOf, type='url', error=(error if errorField == 'editor-like-of' else '')) }}
@@ -280,6 +290,14 @@
280
290
  {% endif %}
281
291
  {% endcall %}
282
292
 
293
+ {% call collapse('Event', open.event, fields=true) %}
294
+ {% set eventTimeHint %}Wall-clock time in {{ dateZone }}. Stored as UTC.{% endset %}
295
+ {{ field.text('editor-event-start', eventFields.start, 'Starts', value=form.event.start, placeholder='2026-10-10 09:00', autocomplete='off', error=(error if errorField == 'editor-event-start' else ''), hint=eventTimeHint, hintId='editor-event-time-hint') }}
296
+ {{ field.text('editor-event-end', eventFields.end, 'Ends', value=form.event.end, placeholder='2026-10-10 17:00', autocomplete='off', error=(error if errorField == 'editor-event-end' else ''), hintId='editor-event-time-hint') }}
297
+ {{ field.text('editor-event-location', eventFields.location, 'Where', value=form.event.location, error=(error if errorField == 'editor-event-location' else ''), hint='The place, or the address to join an online event at.', hintId='editor-event-location-hint') }}
298
+ <p class="label block whitespace-normal text-xs">A post with a start is an event, named by its Title and described by its Body. Empty every box to make it a post again.</p>
299
+ {% endcall %}
300
+
283
301
  {% call collapse('Read', open.read, fields=true) %}
284
302
  {% call field.select('editor-read-status', readFields.status, 'Read status', error=(error if errorField == 'editor-read-status' else '')) %}
285
303
  <option value=""{% if form.readStatus == "" %} selected{% endif %}>Not a read post</option>