@geekity/cms 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (660) hide show
  1. package/README.md +2217 -214
  2. package/admin/components/fields.njk +165 -0
  3. package/admin/layouts/base.njk +1 -1
  4. package/admin/layouts/settings-page.njk +26 -0
  5. package/admin/layouts/shell.njk +17 -3
  6. package/admin/pages/account/forgot.njk +47 -0
  7. package/admin/pages/account/login.njk +26 -0
  8. package/admin/pages/account/reset.njk +38 -0
  9. package/admin/pages/account/setup.njk +28 -0
  10. package/admin/pages/appearance/themes.njk +69 -0
  11. package/admin/pages/comments/all.njk +133 -0
  12. package/admin/{layouts/dashboard.njk → pages/dashboard/home.njk} +8 -15
  13. package/admin/{layouts/document-conflict.njk → pages/documents/conflict.njk} +1 -0
  14. package/admin/{layouts/document-editor.njk → pages/documents/editor.njk} +75 -59
  15. package/admin/{layouts/document-list.njk → pages/documents/list.njk} +19 -2
  16. package/admin/pages/documents/taxonomy.njk +95 -0
  17. package/admin/pages/federation/followers.njk +238 -0
  18. package/admin/pages/federation/settings.njk +77 -0
  19. package/admin/pages/media/library.njk +160 -0
  20. package/admin/pages/messages/all.njk +110 -0
  21. package/admin/pages/navigation/menus.njk +129 -0
  22. package/admin/{layouts → pages}/placeholder.njk +5 -1
  23. package/admin/pages/settings/discussion.njk +99 -0
  24. package/admin/pages/settings/email.njk +203 -0
  25. package/admin/pages/settings/general.njk +29 -0
  26. package/admin/pages/settings/permalinks.njk +50 -0
  27. package/admin/pages/settings/reading.njk +64 -0
  28. package/admin/pages/tools/content-index.njk +89 -0
  29. package/admin/pages/users/edit.njk +239 -0
  30. package/admin/pages/users/list.njk +51 -0
  31. package/admin/pages/users/new.njk +41 -0
  32. package/admin/static/admin.css +558 -3
  33. package/admin/static/copy.js +52 -0
  34. package/admin/static/editor.js +16 -16
  35. package/admin/static/slug.js +61 -0
  36. package/dist/access-log.d.ts +44 -0
  37. package/dist/access-log.d.ts.map +1 -0
  38. package/dist/access-log.js +71 -0
  39. package/dist/access-log.js.map +1 -0
  40. package/dist/admin/accounts.d.ts +413 -0
  41. package/dist/admin/accounts.d.ts.map +1 -0
  42. package/dist/admin/accounts.js +680 -0
  43. package/dist/admin/accounts.js.map +1 -0
  44. package/dist/admin/appearance.d.ts +80 -0
  45. package/dist/admin/appearance.d.ts.map +1 -0
  46. package/dist/admin/appearance.js +136 -0
  47. package/dist/admin/appearance.js.map +1 -0
  48. package/dist/admin/comments.d.ts +90 -0
  49. package/dist/admin/comments.d.ts.map +1 -0
  50. package/dist/admin/comments.js +244 -0
  51. package/dist/admin/comments.js.map +1 -0
  52. package/dist/admin/credentials.d.ts +26 -2
  53. package/dist/admin/credentials.d.ts.map +1 -1
  54. package/dist/admin/credentials.js +35 -2
  55. package/dist/admin/credentials.js.map +1 -1
  56. package/dist/admin/documents.d.ts +117 -10
  57. package/dist/admin/documents.d.ts.map +1 -1
  58. package/dist/admin/documents.js +328 -41
  59. package/dist/admin/documents.js.map +1 -1
  60. package/dist/admin/federation.d.ts +161 -50
  61. package/dist/admin/federation.d.ts.map +1 -1
  62. package/dist/admin/federation.js +235 -93
  63. package/dist/admin/federation.js.map +1 -1
  64. package/dist/admin/formatting.d.ts +20 -0
  65. package/dist/admin/formatting.d.ts.map +1 -0
  66. package/dist/admin/formatting.js +72 -0
  67. package/dist/admin/formatting.js.map +1 -0
  68. package/dist/admin/headers.d.ts +65 -0
  69. package/dist/admin/headers.d.ts.map +1 -0
  70. package/dist/admin/headers.js +104 -0
  71. package/dist/admin/headers.js.map +1 -0
  72. package/dist/admin/index.d.ts +38 -12
  73. package/dist/admin/index.d.ts.map +1 -1
  74. package/dist/admin/index.js +25 -7
  75. package/dist/admin/index.js.map +1 -1
  76. package/dist/admin/media.d.ts +168 -0
  77. package/dist/admin/media.d.ts.map +1 -0
  78. package/dist/admin/media.js +295 -0
  79. package/dist/admin/media.js.map +1 -0
  80. package/dist/admin/menu.d.ts +79 -0
  81. package/dist/admin/menu.d.ts.map +1 -0
  82. package/dist/admin/menu.js +143 -0
  83. package/dist/admin/menu.js.map +1 -0
  84. package/dist/admin/messages.d.ts +80 -0
  85. package/dist/admin/messages.d.ts.map +1 -0
  86. package/dist/admin/messages.js +152 -0
  87. package/dist/admin/messages.js.map +1 -0
  88. package/dist/admin/navigation.d.ts +155 -0
  89. package/dist/admin/navigation.d.ts.map +1 -0
  90. package/dist/admin/navigation.js +292 -0
  91. package/dist/admin/navigation.js.map +1 -0
  92. package/dist/admin/preview.d.ts.map +1 -1
  93. package/dist/admin/preview.js +31 -7
  94. package/dist/admin/preview.js.map +1 -1
  95. package/dist/admin/recovery.d.ts +92 -0
  96. package/dist/admin/recovery.d.ts.map +1 -0
  97. package/dist/admin/recovery.js +229 -0
  98. package/dist/admin/recovery.js.map +1 -0
  99. package/dist/admin/routes.d.ts +0 -20
  100. package/dist/admin/routes.d.ts.map +1 -1
  101. package/dist/admin/routes.js +164 -105
  102. package/dist/admin/routes.js.map +1 -1
  103. package/dist/admin/session.d.ts +17 -3
  104. package/dist/admin/session.d.ts.map +1 -1
  105. package/dist/admin/session.js +19 -5
  106. package/dist/admin/session.js.map +1 -1
  107. package/dist/admin/settings-discussion.d.ts +37 -0
  108. package/dist/admin/settings-discussion.d.ts.map +1 -0
  109. package/dist/admin/settings-discussion.js +117 -0
  110. package/dist/admin/settings-discussion.js.map +1 -0
  111. package/dist/admin/settings-email.d.ts +54 -0
  112. package/dist/admin/settings-email.d.ts.map +1 -0
  113. package/dist/admin/settings-email.js +189 -0
  114. package/dist/admin/settings-email.js.map +1 -0
  115. package/dist/admin/settings-federation.d.ts +48 -0
  116. package/dist/admin/settings-federation.d.ts.map +1 -0
  117. package/dist/admin/settings-federation.js +123 -0
  118. package/dist/admin/settings-federation.js.map +1 -0
  119. package/dist/admin/settings-general.d.ts +12 -0
  120. package/dist/admin/settings-general.d.ts.map +1 -0
  121. package/dist/admin/settings-general.js +48 -0
  122. package/dist/admin/settings-general.js.map +1 -0
  123. package/dist/admin/settings-page.d.ts +119 -0
  124. package/dist/admin/settings-page.d.ts.map +1 -0
  125. package/dist/admin/settings-page.js +132 -0
  126. package/dist/admin/settings-page.js.map +1 -0
  127. package/dist/admin/settings-pages.d.ts +30 -0
  128. package/dist/admin/settings-pages.d.ts.map +1 -0
  129. package/dist/admin/settings-pages.js +43 -0
  130. package/dist/admin/settings-pages.js.map +1 -0
  131. package/dist/admin/settings-permalinks.d.ts +16 -0
  132. package/dist/admin/settings-permalinks.d.ts.map +1 -0
  133. package/dist/admin/settings-permalinks.js +32 -0
  134. package/dist/admin/settings-permalinks.js.map +1 -0
  135. package/dist/admin/settings-reading.d.ts +34 -0
  136. package/dist/admin/settings-reading.d.ts.map +1 -0
  137. package/dist/admin/settings-reading.js +49 -0
  138. package/dist/admin/settings-reading.js.map +1 -0
  139. package/dist/admin/settings.d.ts +339 -96
  140. package/dist/admin/settings.d.ts.map +1 -1
  141. package/dist/admin/settings.js +600 -308
  142. package/dist/admin/settings.js.map +1 -1
  143. package/dist/admin/store.d.ts +606 -152
  144. package/dist/admin/store.d.ts.map +1 -1
  145. package/dist/admin/store.js +863 -268
  146. package/dist/admin/store.js.map +1 -1
  147. package/dist/admin/taxonomy.d.ts +114 -0
  148. package/dist/admin/taxonomy.d.ts.map +1 -0
  149. package/dist/admin/taxonomy.js +289 -0
  150. package/dist/admin/taxonomy.js.map +1 -0
  151. package/dist/admin/templates.d.ts +46 -14
  152. package/dist/admin/templates.d.ts.map +1 -1
  153. package/dist/admin/templates.js +46 -14
  154. package/dist/admin/templates.js.map +1 -1
  155. package/dist/admin/throttle.d.ts +84 -0
  156. package/dist/admin/throttle.d.ts.map +1 -0
  157. package/dist/admin/throttle.js +143 -0
  158. package/dist/admin/throttle.js.map +1 -0
  159. package/dist/admin/tools.d.ts +111 -0
  160. package/dist/admin/tools.d.ts.map +1 -0
  161. package/dist/admin/tools.js +182 -0
  162. package/dist/admin/tools.js.map +1 -0
  163. package/dist/admin/uploads.d.ts +28 -2
  164. package/dist/admin/uploads.d.ts.map +1 -1
  165. package/dist/admin/uploads.js +43 -4
  166. package/dist/admin/uploads.js.map +1 -1
  167. package/dist/admin/users.d.ts +100 -13
  168. package/dist/admin/users.d.ts.map +1 -1
  169. package/dist/admin/users.js +412 -39
  170. package/dist/admin/users.js.map +1 -1
  171. package/dist/cache.d.ts +141 -0
  172. package/dist/cache.d.ts.map +1 -0
  173. package/dist/cache.js +207 -0
  174. package/dist/cache.js.map +1 -0
  175. package/dist/cli.d.ts +14 -2
  176. package/dist/cli.d.ts.map +1 -1
  177. package/dist/cli.js +429 -21
  178. package/dist/cli.js.map +1 -1
  179. package/dist/comments/akismet.d.ts +130 -0
  180. package/dist/comments/akismet.d.ts.map +1 -0
  181. package/dist/comments/akismet.js +274 -0
  182. package/dist/comments/akismet.js.map +1 -0
  183. package/dist/comments/conversation.d.ts +29 -0
  184. package/dist/comments/conversation.d.ts.map +1 -0
  185. package/dist/comments/conversation.js +60 -0
  186. package/dist/comments/conversation.js.map +1 -0
  187. package/dist/comments/form.d.ts +123 -0
  188. package/dist/comments/form.d.ts.map +1 -0
  189. package/dist/comments/form.js +79 -0
  190. package/dist/comments/form.js.map +1 -0
  191. package/dist/comments/index.d.ts +16 -0
  192. package/dist/comments/index.d.ts.map +1 -0
  193. package/dist/comments/index.js +10 -0
  194. package/dist/comments/index.js.map +1 -0
  195. package/dist/comments/markdown.d.ts +8 -0
  196. package/dist/comments/markdown.d.ts.map +1 -0
  197. package/dist/comments/markdown.js +85 -0
  198. package/dist/comments/markdown.js.map +1 -0
  199. package/dist/comments/moderate.d.ts +71 -0
  200. package/dist/comments/moderate.d.ts.map +1 -0
  201. package/dist/comments/moderate.js +88 -0
  202. package/dist/comments/moderate.js.map +1 -0
  203. package/dist/comments/policy.d.ts +57 -0
  204. package/dist/comments/policy.d.ts.map +1 -0
  205. package/dist/comments/policy.js +80 -0
  206. package/dist/comments/policy.js.map +1 -0
  207. package/dist/comments/records.d.ts +266 -0
  208. package/dist/comments/records.d.ts.map +1 -0
  209. package/dist/comments/records.js +487 -0
  210. package/dist/comments/records.js.map +1 -0
  211. package/dist/comments/routes.d.ts +60 -0
  212. package/dist/comments/routes.d.ts.map +1 -0
  213. package/dist/comments/routes.js +212 -0
  214. package/dist/comments/routes.js.map +1 -0
  215. package/dist/comments/submission.d.ts +297 -0
  216. package/dist/comments/submission.d.ts.map +1 -0
  217. package/dist/comments/submission.js +280 -0
  218. package/dist/comments/submission.js.map +1 -0
  219. package/dist/comments/viewer.d.ts +21 -0
  220. package/dist/comments/viewer.d.ts.map +1 -0
  221. package/dist/comments/viewer.js +45 -0
  222. package/dist/comments/viewer.js.map +1 -0
  223. package/dist/config.d.ts +225 -5
  224. package/dist/config.d.ts.map +1 -1
  225. package/dist/config.js +121 -6
  226. package/dist/config.js.map +1 -1
  227. package/dist/contact/delivery.d.ts +60 -0
  228. package/dist/contact/delivery.d.ts.map +1 -0
  229. package/dist/contact/delivery.js +87 -0
  230. package/dist/contact/delivery.js.map +1 -0
  231. package/dist/contact/form.d.ts +130 -0
  232. package/dist/contact/form.d.ts.map +1 -0
  233. package/dist/contact/form.js +163 -0
  234. package/dist/contact/form.js.map +1 -0
  235. package/dist/contact/index.d.ts +17 -0
  236. package/dist/contact/index.d.ts.map +1 -0
  237. package/dist/contact/index.js +13 -0
  238. package/dist/contact/index.js.map +1 -0
  239. package/dist/contact/records.d.ts +124 -0
  240. package/dist/contact/records.d.ts.map +1 -0
  241. package/dist/contact/records.js +218 -0
  242. package/dist/contact/records.js.map +1 -0
  243. package/dist/contact/routes.d.ts +17 -0
  244. package/dist/contact/routes.d.ts.map +1 -0
  245. package/dist/contact/routes.js +127 -0
  246. package/dist/contact/routes.js.map +1 -0
  247. package/dist/contact/submission.d.ts +103 -0
  248. package/dist/contact/submission.d.ts.map +1 -0
  249. package/dist/contact/submission.js +166 -0
  250. package/dist/contact/submission.js.map +1 -0
  251. package/dist/content/document.d.ts +7 -2
  252. package/dist/content/document.d.ts.map +1 -1
  253. package/dist/content/document.js +1 -0
  254. package/dist/content/document.js.map +1 -1
  255. package/dist/content/index.d.ts +7 -2
  256. package/dist/content/index.d.ts.map +1 -1
  257. package/dist/content/index.js +4 -1
  258. package/dist/content/index.js.map +1 -1
  259. package/dist/content/markdown.d.ts.map +1 -1
  260. package/dist/content/markdown.js +24 -2
  261. package/dist/content/markdown.js.map +1 -1
  262. package/dist/content/parser.d.ts.map +1 -1
  263. package/dist/content/parser.js +11 -4
  264. package/dist/content/parser.js.map +1 -1
  265. package/dist/content/save.d.ts +5 -0
  266. package/dist/content/save.d.ts.map +1 -1
  267. package/dist/content/save.js +44 -1
  268. package/dist/content/save.js.map +1 -1
  269. package/dist/content/schedule.d.ts +125 -0
  270. package/dist/content/schedule.d.ts.map +1 -0
  271. package/dist/content/schedule.js +207 -0
  272. package/dist/content/schedule.js.map +1 -0
  273. package/dist/content/search.d.ts +64 -0
  274. package/dist/content/search.d.ts.map +1 -0
  275. package/dist/content/search.js +136 -0
  276. package/dist/content/search.js.map +1 -0
  277. package/dist/content/store.d.ts +220 -7
  278. package/dist/content/store.d.ts.map +1 -1
  279. package/dist/content/store.js +392 -67
  280. package/dist/content/store.js.map +1 -1
  281. package/dist/content/sync.d.ts +7 -1
  282. package/dist/content/sync.d.ts.map +1 -1
  283. package/dist/content/sync.js +18 -10
  284. package/dist/content/sync.js.map +1 -1
  285. package/dist/content/time.d.ts +56 -0
  286. package/dist/content/time.d.ts.map +1 -0
  287. package/dist/content/time.js +141 -0
  288. package/dist/content/time.js.map +1 -0
  289. package/dist/content/writer.d.ts.map +1 -1
  290. package/dist/content/writer.js +3 -0
  291. package/dist/content/writer.js.map +1 -1
  292. package/dist/env.d.ts +70 -5
  293. package/dist/env.d.ts.map +1 -1
  294. package/dist/federation/actor.d.ts +95 -41
  295. package/dist/federation/actor.d.ts.map +1 -1
  296. package/dist/federation/actor.js +180 -53
  297. package/dist/federation/actor.js.map +1 -1
  298. package/dist/federation/article.d.ts +44 -17
  299. package/dist/federation/article.d.ts.map +1 -1
  300. package/dist/federation/article.js +98 -46
  301. package/dist/federation/article.js.map +1 -1
  302. package/dist/federation/delivery.d.ts +63 -15
  303. package/dist/federation/delivery.d.ts.map +1 -1
  304. package/dist/federation/delivery.js +154 -80
  305. package/dist/federation/delivery.js.map +1 -1
  306. package/dist/federation/federation.d.ts +22 -17
  307. package/dist/federation/federation.d.ts.map +1 -1
  308. package/dist/federation/federation.js +98 -77
  309. package/dist/federation/federation.js.map +1 -1
  310. package/dist/federation/followers.d.ts +3 -2
  311. package/dist/federation/followers.d.ts.map +1 -1
  312. package/dist/federation/followers.js +6 -5
  313. package/dist/federation/followers.js.map +1 -1
  314. package/dist/federation/import-wordpress.d.ts +128 -0
  315. package/dist/federation/import-wordpress.d.ts.map +1 -0
  316. package/dist/federation/import-wordpress.js +426 -0
  317. package/dist/federation/import-wordpress.js.map +1 -0
  318. package/dist/federation/inbox.d.ts +36 -13
  319. package/dist/federation/inbox.d.ts.map +1 -1
  320. package/dist/federation/inbox.js +120 -49
  321. package/dist/federation/inbox.js.map +1 -1
  322. package/dist/federation/index.d.ts +22 -10
  323. package/dist/federation/index.d.ts.map +1 -1
  324. package/dist/federation/index.js +13 -8
  325. package/dist/federation/index.js.map +1 -1
  326. package/dist/federation/keys.d.ts +98 -20
  327. package/dist/federation/keys.d.ts.map +1 -1
  328. package/dist/federation/keys.js +269 -39
  329. package/dist/federation/keys.js.map +1 -1
  330. package/dist/federation/mount.d.ts +46 -10
  331. package/dist/federation/mount.d.ts.map +1 -1
  332. package/dist/federation/mount.js +300 -28
  333. package/dist/federation/mount.js.map +1 -1
  334. package/dist/federation/paths.d.ts +23 -35
  335. package/dist/federation/paths.d.ts.map +1 -1
  336. package/dist/federation/paths.js +26 -39
  337. package/dist/federation/paths.js.map +1 -1
  338. package/dist/federation/records.d.ts +223 -0
  339. package/dist/federation/records.d.ts.map +1 -0
  340. package/dist/federation/records.js +506 -0
  341. package/dist/federation/records.js.map +1 -0
  342. package/dist/federation/relays.d.ts +114 -0
  343. package/dist/federation/relays.d.ts.map +1 -0
  344. package/dist/federation/relays.js +290 -0
  345. package/dist/federation/relays.js.map +1 -0
  346. package/dist/federation/replies.d.ts +80 -0
  347. package/dist/federation/replies.d.ts.map +1 -0
  348. package/dist/federation/replies.js +166 -0
  349. package/dist/federation/replies.js.map +1 -0
  350. package/dist/federation/wordpress.d.ts +131 -0
  351. package/dist/federation/wordpress.d.ts.map +1 -0
  352. package/dist/federation/wordpress.js +341 -0
  353. package/dist/federation/wordpress.js.map +1 -0
  354. package/dist/files/atomic.d.ts +103 -0
  355. package/dist/files/atomic.d.ts.map +1 -0
  356. package/dist/files/atomic.js +150 -0
  357. package/dist/files/atomic.js.map +1 -0
  358. package/dist/files/index.d.ts +3 -0
  359. package/dist/files/index.d.ts.map +1 -0
  360. package/dist/files/index.js +2 -0
  361. package/dist/files/index.js.map +1 -0
  362. package/dist/forms/protection.d.ts +85 -0
  363. package/dist/forms/protection.d.ts.map +1 -0
  364. package/dist/forms/protection.js +116 -0
  365. package/dist/forms/protection.js.map +1 -0
  366. package/dist/images/icons.d.ts +59 -0
  367. package/dist/images/icons.d.ts.map +1 -0
  368. package/dist/images/icons.js +131 -0
  369. package/dist/images/icons.js.map +1 -0
  370. package/dist/images/index.d.ts +7 -0
  371. package/dist/images/index.d.ts.map +1 -0
  372. package/dist/images/index.js +4 -0
  373. package/dist/images/index.js.map +1 -0
  374. package/dist/images/markup.d.ts +47 -0
  375. package/dist/images/markup.d.ts.map +1 -0
  376. package/dist/images/markup.js +175 -0
  377. package/dist/images/markup.js.map +1 -0
  378. package/dist/images/paths.d.ts +34 -0
  379. package/dist/images/paths.d.ts.map +1 -0
  380. package/dist/images/paths.js +41 -0
  381. package/dist/images/paths.js.map +1 -0
  382. package/dist/images/variants.d.ts +104 -0
  383. package/dist/images/variants.d.ts.map +1 -0
  384. package/dist/images/variants.js +320 -0
  385. package/dist/images/variants.js.map +1 -0
  386. package/dist/index.d.ts +123 -19
  387. package/dist/index.d.ts.map +1 -1
  388. package/dist/index.js +344 -25
  389. package/dist/index.js.map +1 -1
  390. package/dist/init.d.ts +18 -0
  391. package/dist/init.d.ts.map +1 -1
  392. package/dist/init.js +34 -3
  393. package/dist/init.js.map +1 -1
  394. package/dist/mail/brevo.d.ts +35 -0
  395. package/dist/mail/brevo.d.ts.map +1 -0
  396. package/dist/mail/brevo.js +85 -0
  397. package/dist/mail/brevo.js.map +1 -0
  398. package/dist/mail/credentials.d.ts +62 -0
  399. package/dist/mail/credentials.d.ts.map +1 -0
  400. package/dist/mail/credentials.js +86 -0
  401. package/dist/mail/credentials.js.map +1 -0
  402. package/dist/mail/index.d.ts +15 -0
  403. package/dist/mail/index.d.ts.map +1 -0
  404. package/dist/mail/index.js +8 -0
  405. package/dist/mail/index.js.map +1 -0
  406. package/dist/mail/memory.d.ts +35 -0
  407. package/dist/mail/memory.d.ts.map +1 -0
  408. package/dist/mail/memory.js +29 -0
  409. package/dist/mail/memory.js.map +1 -0
  410. package/dist/mail/provider.d.ts +80 -0
  411. package/dist/mail/provider.d.ts.map +1 -0
  412. package/dist/mail/provider.js +23 -0
  413. package/dist/mail/provider.js.map +1 -0
  414. package/dist/mail/service.d.ts +156 -0
  415. package/dist/mail/service.d.ts.map +1 -0
  416. package/dist/mail/service.js +265 -0
  417. package/dist/mail/service.js.map +1 -0
  418. package/dist/mail/smtp.d.ts +39 -0
  419. package/dist/mail/smtp.d.ts.map +1 -0
  420. package/dist/mail/smtp.js +58 -0
  421. package/dist/mail/smtp.js.map +1 -0
  422. package/dist/mail/templates.d.ts +91 -0
  423. package/dist/mail/templates.d.ts.map +1 -0
  424. package/dist/mail/templates.js +69 -0
  425. package/dist/mail/templates.js.map +1 -0
  426. package/dist/notifications/comments.d.ts +66 -0
  427. package/dist/notifications/comments.d.ts.map +1 -0
  428. package/dist/notifications/comments.js +151 -0
  429. package/dist/notifications/comments.js.map +1 -0
  430. package/dist/notifications/digest.d.ts +135 -0
  431. package/dist/notifications/digest.d.ts.map +1 -0
  432. package/dist/notifications/digest.js +287 -0
  433. package/dist/notifications/digest.js.map +1 -0
  434. package/dist/notifications/index.d.ts +13 -0
  435. package/dist/notifications/index.d.ts.map +1 -0
  436. package/dist/notifications/index.js +8 -0
  437. package/dist/notifications/index.js.map +1 -0
  438. package/dist/notifications/links.d.ts +60 -0
  439. package/dist/notifications/links.d.ts.map +1 -0
  440. package/dist/notifications/links.js +63 -0
  441. package/dist/notifications/links.js.map +1 -0
  442. package/dist/notifications/optouts.d.ts +48 -0
  443. package/dist/notifications/optouts.d.ts.map +1 -0
  444. package/dist/notifications/optouts.js +93 -0
  445. package/dist/notifications/optouts.js.map +1 -0
  446. package/dist/notifications/preferences.d.ts +158 -0
  447. package/dist/notifications/preferences.d.ts.map +1 -0
  448. package/dist/notifications/preferences.js +195 -0
  449. package/dist/notifications/preferences.js.map +1 -0
  450. package/dist/notifications/routes.d.ts +28 -0
  451. package/dist/notifications/routes.d.ts.map +1 -0
  452. package/dist/notifications/routes.js +184 -0
  453. package/dist/notifications/routes.js.map +1 -0
  454. package/dist/notifications/tokens.d.ts +60 -0
  455. package/dist/notifications/tokens.d.ts.map +1 -0
  456. package/dist/notifications/tokens.js +125 -0
  457. package/dist/notifications/tokens.js.map +1 -0
  458. package/dist/notify.d.ts +84 -0
  459. package/dist/notify.d.ts.map +1 -0
  460. package/dist/notify.js +149 -0
  461. package/dist/notify.js.map +1 -0
  462. package/dist/web/archive.d.ts +49 -0
  463. package/dist/web/archive.d.ts.map +1 -0
  464. package/dist/web/archive.js +59 -0
  465. package/dist/web/archive.js.map +1 -0
  466. package/dist/web/assets.d.ts +6 -5
  467. package/dist/web/assets.d.ts.map +1 -1
  468. package/dist/web/assets.js +5 -7
  469. package/dist/web/assets.js.map +1 -1
  470. package/dist/web/authors.d.ts +143 -0
  471. package/dist/web/authors.d.ts.map +1 -0
  472. package/dist/web/authors.js +178 -0
  473. package/dist/web/authors.js.map +1 -0
  474. package/dist/web/comments.d.ts +60 -0
  475. package/dist/web/comments.d.ts.map +1 -0
  476. package/dist/web/comments.js +207 -0
  477. package/dist/web/comments.js.map +1 -0
  478. package/dist/web/context.d.ts +162 -28
  479. package/dist/web/context.d.ts.map +1 -1
  480. package/dist/web/context.js +123 -26
  481. package/dist/web/context.js.map +1 -1
  482. package/dist/web/conversation.d.ts +209 -0
  483. package/dist/web/conversation.d.ts.map +1 -0
  484. package/dist/web/conversation.js +557 -0
  485. package/dist/web/conversation.js.map +1 -0
  486. package/dist/web/documents.d.ts +36 -6
  487. package/dist/web/documents.d.ts.map +1 -1
  488. package/dist/web/documents.js +52 -10
  489. package/dist/web/documents.js.map +1 -1
  490. package/dist/web/feed-atom.d.ts +22 -0
  491. package/dist/web/feed-atom.d.ts.map +1 -0
  492. package/dist/web/feed-atom.js +83 -0
  493. package/dist/web/feed-atom.js.map +1 -0
  494. package/dist/web/feed-item.d.ts +145 -0
  495. package/dist/web/feed-item.d.ts.map +1 -0
  496. package/dist/web/feed-item.js +120 -0
  497. package/dist/web/feed-item.js.map +1 -0
  498. package/dist/web/feed-json.d.ts +79 -0
  499. package/dist/web/feed-json.d.ts.map +1 -0
  500. package/dist/web/feed-json.js +53 -0
  501. package/dist/web/feed-json.js.map +1 -0
  502. package/dist/web/feed-rss.d.ts +26 -0
  503. package/dist/web/feed-rss.d.ts.map +1 -0
  504. package/dist/web/feed-rss.js +203 -0
  505. package/dist/web/feed-rss.js.map +1 -0
  506. package/dist/web/feed-source.d.ts +244 -0
  507. package/dist/web/feed-source.d.ts.map +1 -0
  508. package/dist/web/feed-source.js +201 -0
  509. package/dist/web/feed-source.js.map +1 -0
  510. package/dist/web/feed-xml.d.ts +63 -0
  511. package/dist/web/feed-xml.d.ts.map +1 -0
  512. package/dist/web/feed-xml.js +116 -0
  513. package/dist/web/feed-xml.js.map +1 -0
  514. package/dist/web/feeds.d.ts +31 -96
  515. package/dist/web/feeds.d.ts.map +1 -1
  516. package/dist/web/feeds.js +94 -198
  517. package/dist/web/feeds.js.map +1 -1
  518. package/dist/web/health.d.ts +31 -0
  519. package/dist/web/health.d.ts.map +1 -0
  520. package/dist/web/health.js +44 -0
  521. package/dist/web/health.js.map +1 -0
  522. package/dist/web/index.d.ts +30 -10
  523. package/dist/web/index.d.ts.map +1 -1
  524. package/dist/web/index.js +18 -7
  525. package/dist/web/index.js.map +1 -1
  526. package/dist/web/navigation.d.ts +195 -0
  527. package/dist/web/navigation.d.ts.map +1 -0
  528. package/dist/web/navigation.js +300 -0
  529. package/dist/web/navigation.js.map +1 -0
  530. package/dist/web/negotiate.d.ts +31 -0
  531. package/dist/web/negotiate.d.ts.map +1 -1
  532. package/dist/web/negotiate.js +31 -11
  533. package/dist/web/negotiate.js.map +1 -1
  534. package/dist/web/recent.d.ts +43 -0
  535. package/dist/web/recent.d.ts.map +1 -0
  536. package/dist/web/recent.js +37 -0
  537. package/dist/web/recent.js.map +1 -0
  538. package/dist/web/render.d.ts +203 -9
  539. package/dist/web/render.d.ts.map +1 -1
  540. package/dist/web/render.js +341 -17
  541. package/dist/web/render.js.map +1 -1
  542. package/dist/web/routes.d.ts +25 -8
  543. package/dist/web/routes.d.ts.map +1 -1
  544. package/dist/web/routes.js +854 -93
  545. package/dist/web/routes.js.map +1 -1
  546. package/dist/web/sanitize.d.ts +19 -0
  547. package/dist/web/sanitize.d.ts.map +1 -0
  548. package/dist/web/sanitize.js +272 -0
  549. package/dist/web/sanitize.js.map +1 -0
  550. package/dist/web/search.d.ts +79 -0
  551. package/dist/web/search.d.ts.map +1 -0
  552. package/dist/web/search.js +94 -0
  553. package/dist/web/search.js.map +1 -0
  554. package/dist/web/sitemap.d.ts +120 -0
  555. package/dist/web/sitemap.d.ts.map +1 -0
  556. package/dist/web/sitemap.js +199 -0
  557. package/dist/web/sitemap.js.map +1 -0
  558. package/dist/web/taxonomy.d.ts +152 -0
  559. package/dist/web/taxonomy.d.ts.map +1 -0
  560. package/dist/web/taxonomy.js +237 -0
  561. package/dist/web/taxonomy.js.map +1 -0
  562. package/dist/web/templates.d.ts +54 -16
  563. package/dist/web/templates.d.ts.map +1 -1
  564. package/dist/web/templates.js +109 -28
  565. package/dist/web/templates.js.map +1 -1
  566. package/dist/web/themes.d.ts +226 -0
  567. package/dist/web/themes.d.ts.map +1 -0
  568. package/dist/web/themes.js +314 -0
  569. package/dist/web/themes.js.map +1 -0
  570. package/dist/webmention/discovery.d.ts +51 -0
  571. package/dist/webmention/discovery.d.ts.map +1 -0
  572. package/dist/webmention/discovery.js +176 -0
  573. package/dist/webmention/discovery.js.map +1 -0
  574. package/dist/webmention/html.d.ts +71 -0
  575. package/dist/webmention/html.d.ts.map +1 -0
  576. package/dist/webmention/html.js +285 -0
  577. package/dist/webmention/html.js.map +1 -0
  578. package/dist/webmention/index.d.ts +12 -0
  579. package/dist/webmention/index.d.ts.map +1 -0
  580. package/dist/webmention/index.js +8 -0
  581. package/dist/webmention/index.js.map +1 -0
  582. package/dist/webmention/links.d.ts +18 -0
  583. package/dist/webmention/links.d.ts.map +1 -0
  584. package/dist/webmention/links.js +64 -0
  585. package/dist/webmention/links.js.map +1 -0
  586. package/dist/webmention/microformats.d.ts +93 -0
  587. package/dist/webmention/microformats.d.ts.map +1 -0
  588. package/dist/webmention/microformats.js +376 -0
  589. package/dist/webmention/microformats.js.map +1 -0
  590. package/dist/webmention/receive.d.ts +141 -0
  591. package/dist/webmention/receive.d.ts.map +1 -0
  592. package/dist/webmention/receive.js +264 -0
  593. package/dist/webmention/receive.js.map +1 -0
  594. package/dist/webmention/routes.d.ts +37 -0
  595. package/dist/webmention/routes.d.ts.map +1 -0
  596. package/dist/webmention/routes.js +75 -0
  597. package/dist/webmention/routes.js.map +1 -0
  598. package/dist/webmention/service.d.ts +94 -0
  599. package/dist/webmention/service.d.ts.map +1 -0
  600. package/dist/webmention/service.js +207 -0
  601. package/dist/webmention/service.js.map +1 -0
  602. package/package.json +11 -6
  603. package/templates/site/content/_data/site.json +8 -0
  604. package/templates/site/content/pages/about.md +7 -0
  605. package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
  606. package/templates/site/geekity.config.ts +11 -1
  607. package/templates/site/tsconfig.json +1 -1
  608. package/themes/default/README.md +1216 -50
  609. package/themes/default/layouts/404.njk +2 -3
  610. package/themes/default/layouts/author.njk +36 -0
  611. package/themes/default/layouts/base.njk +161 -31
  612. package/themes/default/layouts/category.njk +27 -0
  613. package/themes/default/layouts/front-page.njk +56 -0
  614. package/themes/default/layouts/home.njk +17 -1
  615. package/themes/default/layouts/page.njk +57 -5
  616. package/themes/default/layouts/post.njk +78 -19
  617. package/themes/default/layouts/search.njk +57 -0
  618. package/themes/default/layouts/tag.njk +3 -6
  619. package/themes/default/mail/comment-digest.html.njk +37 -0
  620. package/themes/default/mail/comment-digest.subject.njk +3 -0
  621. package/themes/default/mail/comment-digest.txt.njk +40 -0
  622. package/themes/default/mail/comment-pending.html.njk +27 -0
  623. package/themes/default/mail/comment-pending.subject.njk +2 -0
  624. package/themes/default/mail/comment-pending.txt.njk +24 -0
  625. package/themes/default/mail/comment-reply.html.njk +21 -0
  626. package/themes/default/mail/comment-reply.subject.njk +2 -0
  627. package/themes/default/mail/comment-reply.txt.njk +22 -0
  628. package/themes/default/mail/contact-message.html.njk +24 -0
  629. package/themes/default/mail/contact-message.subject.njk +5 -0
  630. package/themes/default/mail/contact-message.txt.njk +20 -0
  631. package/themes/default/mail/password-changed.html.njk +18 -0
  632. package/themes/default/mail/password-changed.subject.njk +2 -0
  633. package/themes/default/mail/password-changed.txt.njk +17 -0
  634. package/themes/default/mail/password-reset.html.njk +22 -0
  635. package/themes/default/mail/password-reset.subject.njk +2 -0
  636. package/themes/default/mail/password-reset.txt.njk +18 -0
  637. package/themes/default/mail/test.html.njk +14 -0
  638. package/themes/default/mail/test.subject.njk +2 -0
  639. package/themes/default/mail/test.txt.njk +12 -0
  640. package/themes/default/partials/archive.njk +27 -0
  641. package/themes/default/partials/bio.njk +71 -0
  642. package/themes/default/partials/comment-form.njk +137 -0
  643. package/themes/default/partials/contact-form.njk +88 -0
  644. package/themes/default/partials/conversation.njk +139 -0
  645. package/themes/default/partials/feeds.njk +26 -0
  646. package/themes/default/partials/jsonld.njk +120 -0
  647. package/themes/default/partials/menu.njk +32 -0
  648. package/themes/default/partials/pagination.njk +12 -6
  649. package/themes/default/partials/post-list.njk +51 -18
  650. package/themes/default/partials/search-form.njk +22 -0
  651. package/themes/default/partials/tags.njk +26 -5
  652. package/themes/default/static/highlight.js +4 -0
  653. package/themes/default/static/style.css +1142 -194
  654. package/themes/default/theme.json +9 -0
  655. package/admin/layouts/federation.njk +0 -145
  656. package/admin/layouts/login.njk +0 -23
  657. package/admin/layouts/settings.njk +0 -116
  658. package/admin/layouts/setup.njk +0 -27
  659. package/admin/layouts/users.njk +0 -91
  660. /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
@@ -0,0 +1,37 @@
1
+ {# The HTML twin of the digest. Deliberately plain: a single column and almost
2
+ no styling is what survives the widest range of mail readers. #}
3
+ <p>{{ total }} comment{% if total != 1 %}s are{% else %} is{% endif %} waiting for you.</p>
4
+
5
+ {% for item in items %}
6
+ <hr />
7
+ <p>
8
+ {% if item.comment.source == 'webmention' %}A page linked to{% else %}A comment on{% endif %}
9
+ <a href="{{ item.post.url }}">{{ item.post.title }}</a>
10
+ </p>
11
+
12
+ <p>
13
+ <strong>{{ item.comment.author }}</strong>{% if item.comment.website %} &mdash; <a href="{{ item.comment.website }}" rel="nofollow ugc">{{ item.comment.website }}</a>{% endif %}<br />
14
+ {% if item.comment.url %}<a href="{{ item.comment.url }}" rel="nofollow ugc">{{ item.comment.url }}</a><br />{% endif %}
15
+ <span>{{ item.comment.submitted }}</span>
16
+ </p>
17
+
18
+ <blockquote>
19
+ {% if item.comment.html %}{{ item.comment.html | safe }}{% else %}<p>(nothing was said &mdash; it is a {{ item.comment.kind }})</p>{% endif %}
20
+ </blockquote>
21
+
22
+ <p>
23
+ {% for choice in item.actions %}<a href="{{ choice.url }}">{{ choice.label }}</a>{% if not loop.last %} &middot; {% endif %}{% endfor %}
24
+ </p>
25
+ {% endfor %}
26
+
27
+ <hr />
28
+
29
+ {% if more %}<p>And {{ more }} more waiting, which <a href="{{ queueUrl }}">the queue</a> has.</p>{% endif %}
30
+
31
+ <p>
32
+ Each link works once and lasts a week. After that, the queue is at
33
+ <a href="{{ queueUrl }}">{{ queueUrl }}</a>. This is your
34
+ {% if mode == 'daily' %}daily{% else %}hourly{% endif %} digest; change it on the users screen.
35
+ </p>
36
+
37
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,3 @@
1
+ {# The subject of the digest a batched user gets. One line, and it says how
2
+ many, because the count is the thing that decides whether to open it now. #}
3
+ {{ total }} comment{% if total != 1 %}s{% endif %} waiting on {{ site.title }}
@@ -0,0 +1,40 @@
1
+ {# The plain text body of the digest: everything still waiting, each item with
2
+ its own three links. The links are the point of the message, exactly as they
3
+ are in comment-pending — each carries a signed token, works once, and lands
4
+ on a page with a button rather than acting on being opened. #}
5
+ {{ total }} comment{% if total != 1 %}s are{% else %} is{% endif %} waiting for you.
6
+ {% for item in items %}
7
+
8
+ --
9
+ {{ loop.index }}. {% if item.comment.source == 'webmention' %}A page linked to{% else %}A comment on{% endif %} “{{ item.post.title }}”
10
+ {{ item.post.url }}
11
+
12
+ From: {{ item.comment.author }}
13
+ {% if item.comment.website %}
14
+ Site: {{ item.comment.website }}
15
+ {% endif %}
16
+ {% if item.comment.url %}
17
+ Page: {{ item.comment.url }}
18
+ {% endif %}
19
+ When: {{ item.comment.submitted }}
20
+
21
+ {{ item.comment.text | trim if item.comment.text | trim else '(nothing was said — it is a ' + item.comment.kind + ')' }}
22
+
23
+ {% for choice in item.actions %}
24
+ {{ choice.label }}: {{ choice.url }}
25
+ {% endfor %}
26
+ {% endfor %}
27
+
28
+ --
29
+ {% if more %}
30
+ And {{ more }} more waiting, which the queue has:
31
+ {{ queueUrl }}
32
+
33
+ {% endif %}
34
+ Each link works once and lasts a week. After that, the queue is at
35
+ {{ queueUrl }}. This is your {% if mode == 'daily' %}daily{% else %}hourly{% endif %} digest;
36
+ you can change that on the users screen.
37
+
38
+ --
39
+ {{ site.title }}
40
+ {{ baseUrl }}
@@ -0,0 +1,27 @@
1
+ {# The HTML twin of the moderation notice. Deliberately plain: a single column
2
+ and almost no styling is what survives the widest range of mail readers. #}
3
+ <p>
4
+ {% if comment.source == 'webmention' %}A page has linked to{% else %}Somebody has commented on{% endif %}
5
+ <a href="{{ post.url }}">{{ post.title }}</a> and it is waiting for you.
6
+ </p>
7
+
8
+ <p>
9
+ <strong>{{ comment.author }}</strong>{% if comment.website %} &mdash; <a href="{{ comment.website }}" rel="nofollow ugc">{{ comment.website }}</a>{% endif %}<br />
10
+ {% if comment.url %}<a href="{{ comment.url }}" rel="nofollow ugc">{{ comment.url }}</a><br />{% endif %}
11
+ <span>{{ comment.submitted }}</span>
12
+ </p>
13
+
14
+ <blockquote>
15
+ {% if comment.html %}{{ comment.html | safe }}{% else %}<p>(nothing was said &mdash; it is a {{ comment.kind }})</p>{% endif %}
16
+ </blockquote>
17
+
18
+ <p>
19
+ {% for choice in actions %}<a href="{{ choice.url }}">{{ choice.label }}</a>{% if not loop.last %} &middot; {% endif %}{% endfor %}
20
+ </p>
21
+
22
+ <p>
23
+ Each link works once and lasts a week. After that, the queue is at
24
+ <a href="{{ queueUrl }}">{{ queueUrl }}</a>.
25
+ </p>
26
+
27
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,2 @@
1
+ {# The subject of the message a comment waiting for a moderator sends. One line. #}
2
+ {% if comment.source == 'webmention' %}New webmention{% else %}New comment{% endif %} on “{{ post.title }}”
@@ -0,0 +1,24 @@
1
+ {# The plain text body of the moderation notice. The three links are the point
2
+ of the whole message: each carries a signed token, works once, and lands on
3
+ a page with a button rather than acting on being opened, so that a mail
4
+ scanner following links cannot moderate this site. #}
5
+ {% if comment.source == 'webmention' %}A page has linked to{% else %}Somebody has commented on{% endif %} “{{ post.title }}” and it is waiting for you.
6
+
7
+ {{ post.url }}
8
+
9
+ From: {{ comment.author }}{% if comment.website %}
10
+ Site: {{ comment.website }}{% endif %}{% if comment.url %}
11
+ Page: {{ comment.url }}{% endif %}
12
+ When: {{ comment.submitted }}
13
+
14
+ {{ comment.text | trim if comment.text | trim else '(nothing was said — it is a ' + comment.kind + ')' }}
15
+
16
+ --
17
+ {% for choice in actions %}{{ choice.label }}: {{ choice.url }}
18
+ {% endfor %}
19
+ Each link works once and lasts a week. After that, the queue is at
20
+ {{ queueUrl }}.
21
+
22
+ --
23
+ {{ site.title }}
24
+ {{ baseUrl }}
@@ -0,0 +1,21 @@
1
+ {# The HTML twin of the reply notice. Deliberately plain, like the rest. #}
2
+ <p>
3
+ <strong>{{ reply.author }}</strong> has replied to your comment on
4
+ <a href="{{ post.url }}">{{ post.title }}</a>.
5
+ </p>
6
+
7
+ <blockquote>{{ reply.html | safe }}</blockquote>
8
+
9
+ <p><a href="{{ reply.url }}">Read it on the page</a></p>
10
+
11
+ <p>You wrote:</p>
12
+
13
+ <blockquote>{{ comment.html | safe }}</blockquote>
14
+
15
+ <p>
16
+ You asked to hear about replies when you commented.
17
+ <a href="{{ unsubscribeUrl }}">Stop these messages</a> &mdash; your comment stays
18
+ where it is.
19
+ </p>
20
+
21
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,2 @@
1
+ {# The subject of the message a reply to somebody's comment sends. One line. #}
2
+ {{ reply.author }} replied to you on “{{ post.title }}”
@@ -0,0 +1,22 @@
1
+ {# The plain text body of the reply notice. It goes only when the reply has
2
+ been approved, and only to somebody who ticked the box when they commented.
3
+ The unsubscribe link is signed, needs no login, and stops every message of
4
+ this kind to this address. #}
5
+ {{ reply.author }} has replied to your comment on “{{ post.title }}”.
6
+
7
+ {{ reply.url }}
8
+
9
+ {{ reply.text | trim }}
10
+
11
+ You wrote:
12
+
13
+ {{ comment.text | trim }}
14
+
15
+ --
16
+ You asked to hear about replies when you commented. To stop, open
17
+ {{ unsubscribeUrl }}
18
+ and press the button. Your comment stays where it is.
19
+
20
+ --
21
+ {{ site.title }}
22
+ {{ baseUrl }}
@@ -0,0 +1,24 @@
1
+ {# The HTML twin of a contact message. Deliberately plain: a single column and
2
+ almost no styling is what survives the widest range of mail readers. The
3
+ message itself is printed rather than rendered — it is plain text, and
4
+ nothing a stranger typed is turned into markup here. #}
5
+ <p>
6
+ <strong>{{ from.name }}</strong> &lt;<a href="mailto:{{ from.email }}">{{ from.email }}</a>&gt;
7
+ wrote to you from <a href="{{ page.url }}">{{ page.title }}</a>.
8
+ </p>
9
+
10
+ <p>
11
+ <span>{{ message.received }}</span>
12
+ {% if message.subject %}<br /><strong>{{ message.subject }}</strong>{% endif %}
13
+ </p>
14
+
15
+ <blockquote>
16
+ <p style="white-space: pre-wrap;">{{ message.text }}</p>
17
+ </blockquote>
18
+
19
+ <p>
20
+ Reply to this message and it goes straight back to {{ from.email }}.
21
+ Every message is kept at <a href="{{ messagesUrl }}">{{ messagesUrl }}</a>.
22
+ </p>
23
+
24
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,5 @@
1
+ {# The subject of a message from the contact form. One line.
2
+
3
+ The sender's own subject when they gave one, because that is what the person
4
+ reading their mail wants to see in a list; their name when they did not. #}
5
+ {% if message.subject %}{{ message.subject }}{% else %}A message from {{ from.name }}{% endif %}
@@ -0,0 +1,20 @@
1
+ {# The plain text body of a message from the contact form.
2
+
3
+ Reply-to is the sender, so answering this is a Reply in whatever reads it.
4
+ The message is quoted as it was typed: it is plain text and is never
5
+ rendered as anything else. #}
6
+ {{ from.name }} <{{ from.email }}> wrote to you from {{ page.title }}.
7
+
8
+ {{ page.url }}
9
+ When: {{ message.received }}
10
+ {% if message.subject %}Subject: {{ message.subject }}
11
+ {% endif %}
12
+ {{ message.text }}
13
+
14
+ --
15
+ Reply to this message and it goes straight back to {{ from.email }}.
16
+ Every message is kept at {{ messagesUrl }}.
17
+
18
+ --
19
+ {{ site.title }}
20
+ {{ baseUrl }}
@@ -0,0 +1,18 @@
1
+ {# The HTML twin of the confirmation. No link back in, on purpose. #}
2
+ <p>Hello {{ username }},</p>
3
+
4
+ <p>
5
+ The password for <strong>{{ username }}</strong> on {{ site.title }} has just
6
+ been set through a reset link.{% if signedOut %} Every browser that was signed in as {{ username }} was signed out.{% endif %}
7
+ </p>
8
+
9
+ <p>If that was you, there is nothing to do.</p>
10
+
11
+ <p>
12
+ If it was not, somebody has your email and your account. Sign in at
13
+ <a href="{{ baseUrl }}/admin/login">{{ baseUrl }}/admin/login</a> with the new
14
+ password if you have it, and ask whoever runs this site to look at the account
15
+ if you do not.
16
+ </p>
17
+
18
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,2 @@
1
+ {# The subject of the message that goes out once a password has been set. #}
2
+ Your password on {{ site.title }} was changed
@@ -0,0 +1,17 @@
1
+ {# The plain text body of the confirmation. It carries no link and no token:
2
+ it is a notice, and a notice that could let somebody in would be a second
3
+ reset link nobody asked for. #}
4
+ Hello {{ username }},
5
+
6
+ The password for {{ username }} on {{ site.title }} has just been set through a
7
+ reset link.{% if signedOut %} Every browser that was signed in as {{ username }} was signed out.{% endif %}
8
+
9
+ If that was you, there is nothing to do.
10
+
11
+ If it was not, somebody has your email and your account. Sign in at
12
+ {{ baseUrl }}/admin/login with the new password if you have it, and ask whoever
13
+ runs this site to look at the account if you do not.
14
+
15
+ --
16
+ {{ site.title }}
17
+ {{ baseUrl }}
@@ -0,0 +1,22 @@
1
+ {# The HTML twin of the password reset message. Deliberately plain: a single
2
+ column and no styling is what survives the widest range of mail readers. #}
3
+ <p>Hello {{ username }},</p>
4
+
5
+ <p>
6
+ Somebody asked to set a new password for <strong>{{ username }}</strong> on
7
+ {{ site.title }}. If it was you, open this link:
8
+ </p>
9
+
10
+ <p><a href="{{ resetUrl }}">{{ resetUrl }}</a></p>
11
+
12
+ <p>
13
+ It lasts {{ expiresInHours }} hour{% if expiresInHours != 1 %}s{% endif %} and works once. Once you have used it,
14
+ every browser signed in as {{ username }} is signed out.
15
+ </p>
16
+
17
+ <p>
18
+ If it was not you, nothing has happened and you can ignore this message. Your
19
+ password has not changed, and nobody can change it without this link.
20
+ </p>
21
+
22
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,2 @@
1
+ {# The subject of the message a Forgot password request sends. One line. #}
2
+ Set a new password for {{ site.title }}
@@ -0,0 +1,18 @@
1
+ {# The plain text body of the password reset message. The link is the secret:
2
+ it is the whole of what proves the reader owns this address. #}
3
+ Hello {{ username }},
4
+
5
+ Somebody asked to set a new password for {{ username }} on {{ site.title }}.
6
+ If it was you, open this link:
7
+
8
+ {{ resetUrl }}
9
+
10
+ It lasts {{ expiresInHours }} hour{% if expiresInHours != 1 %}s{% endif %} and works once. Once you have used it, every
11
+ browser signed in as {{ username }} is signed out.
12
+
13
+ If it was not you, nothing has happened and you can ignore this message. Your
14
+ password has not changed, and nobody can change it without this link.
15
+
16
+ --
17
+ {{ site.title }}
18
+ {{ baseUrl }}
@@ -0,0 +1,14 @@
1
+ {# The HTML twin of the test message. Deliberately plain: inline styles and a
2
+ single column are what survives the widest range of mail readers, and a
3
+ message this simple has nothing to gain from more. #}
4
+ <p>This is a test message from <strong>{{ site.title }}</strong>.</p>
5
+
6
+ <p>
7
+ If you are reading it, <a href="{{ baseUrl }}">{{ baseUrl }}</a> can send
8
+ email, and the password resets, moderation notices and contact messages that
9
+ go through the same service will arrive as well.
10
+ </p>
11
+
12
+ <p>Nothing was sent to anybody else, and nothing about this message was stored.</p>
13
+
14
+ <p>&mdash; {{ site.title }}</p>
@@ -0,0 +1,2 @@
1
+ {# The subject of the Send test email button on /admin/settings. One line. #}
2
+ Test message from {{ site.title }}
@@ -0,0 +1,12 @@
1
+ {# The plain text body of the test message. Every message has one of these. #}
2
+ This is a test message from {{ site.title }}.
3
+
4
+ If you are reading it, {{ baseUrl }} can send email, and the password resets,
5
+ moderation notices and contact messages that go through the same service will
6
+ arrive as well.
7
+
8
+ Nothing was sent to anybody else, and nothing about this message was stored.
9
+
10
+ --
11
+ {{ site.title }}
12
+ {{ baseUrl }}
@@ -0,0 +1,27 @@
1
+ {#
2
+ Everything the site has published, month by month: the source design's
3
+ essays page (decision-16, TASK-85).
4
+
5
+ `archiveMonths` is on the context only when a page's front matter says
6
+ `archive: true`, so including this is the whole of it. Each month is a
7
+ heading over an `ol.list-none` of links, newest month first and newest post
8
+ first inside it; which month a post belongs to is the CMS's answer rather
9
+ than this file's, because a date is an instant and the month it falls in
10
+ depends on the site's timezone (decision-11).
11
+
12
+ No dates and no excerpts: the page is a way of finding one piece of writing
13
+ among hundreds, and a summary under each of them would make it a listing
14
+ rather than an index.
15
+ #}
16
+ {% if archiveMonths.length %}
17
+ <section class="archive">
18
+ {% for group in archiveMonths %}
19
+ <h2>{{ group.month }}</h2>
20
+ <ol class="list-none">
21
+ {% for entry in group.posts %}
22
+ <li><a href="{{ entry.url | url }}"><span>{{ entry.title }}</span></a></li>
23
+ {% endfor %}
24
+ </ol>
25
+ {% endfor %}
26
+ </section>
27
+ {% endif %}
@@ -0,0 +1,71 @@
1
+ {#
2
+ Who the page in front of the reader is by: the `p-author h-card` the source
3
+ design puts in an entry's footer (decision-16, TASK-83).
4
+
5
+ It replaces `partials/byline.njk`, which printed a name in a meta line. This
6
+ is the whole credit — a round photo, "Written by" linked to their archive
7
+ with `rel="author me"`, what they do, where they are, what they wrote about
8
+ themselves and the links they call their own.
9
+
10
+ The person and only the person (TASK-105). The site menu used to be printed
11
+ here as well, because the design had no header navigation; it is in
12
+ `header.global-header` on every page now, so this card says nothing about
13
+ the site and a reader looking for the way around never has to find the bio
14
+ first.
15
+
16
+ Set `bioAuthor` before including it and nothing renders when that is absent:
17
+
18
+ {% set bioAuthor = author %}
19
+ {% include "partials/bio.njk" %}
20
+
21
+ `bioAuthor` is one of the profile objects the context carries — `author` on a
22
+ post, `siteAuthor` on a page, the archive's person on an author archive — so
23
+ what a reader sees and what `partials/jsonld.njk` says come from one record
24
+ and cannot drift. Every field but `name` is optional: a profile with nothing
25
+ in it prints a name and nothing else, and a name this site has no account for
26
+ is printed unlinked, because the file still said somebody wrote this.
27
+
28
+ `bioLead` is what the line opens with, "Written by" unless a layout says
29
+ otherwise. An author archive sets "Posts by", because the card there heads a
30
+ list of somebody's writing rather than crediting one piece of it.
31
+
32
+ The `p-note` and the `rel="me"` links are printed wherever the card is, which
33
+ is what `bioProfile` used to ask for on an author archive alone. An entry
34
+ left that switch unset because the page footer carried the site's identity
35
+ links; it carries nobody's now, so somebody's links belong under what they
36
+ wrote rather than one page further on.
37
+ #}
38
+ {% if bioAuthor %}
39
+ <div class="bio p-author h-card">
40
+ {%- if bioAuthor.avatar %}
41
+ <div class="bio-avatar">
42
+ <img class="u-photo" src="{{ bioAuthor.avatar | url }}" alt="{{ bioAuthor.name }}" width="50" height="50">
43
+ </div>
44
+ {%- endif %}
45
+
46
+ <div>
47
+ <p>
48
+ {{ bioLead | default("Written by") }}
49
+ {%- if bioAuthor.url %}
50
+ <a class="u-url p-name" rel="author me" href="{{ bioAuthor.url | url }}">{{ bioAuthor.name }}</a>
51
+ {%- else %}
52
+ <strong class="p-name">{{ bioAuthor.name }}</strong>
53
+ {%- endif %}
54
+ {%- if bioAuthor.jobTitle %}, a <span class="p-job-title">{{ bioAuthor.jobTitle }}</span>{% endif %}
55
+ {%- if bioAuthor.location %} from <span class="p-locality">{{ bioAuthor.location }}</span>{% endif %}.
56
+ </p>
57
+
58
+ {%- if bioAuthor.bio %}
59
+ <p class="bio-note p-note">{{ bioAuthor.bio }}</p>
60
+ {%- endif %}
61
+
62
+ {%- if bioAuthor.links.length %}
63
+ <ul class="hlist bio-links">
64
+ {%- for link in bioAuthor.links %}
65
+ <li><a class="u-url" rel="me" href="{{ link.href }}">{{ link.label }}</a></li>
66
+ {%- endfor %}
67
+ </ul>
68
+ {%- endif %}
69
+ </div>
70
+ </div>
71
+ {% endif %}
@@ -0,0 +1,137 @@
1
+ {#
2
+ The form under a post that is still taking comments.
3
+
4
+ `commentForm` is on the context only when the post is open — the site switch,
5
+ the closing window and the post's own `comments:` front matter all agree
6
+ before it gets here — so a layout asks `{% if commentForm %}` and nothing
7
+ else. A site replaces this whole section with a
8
+ `partials/comment-form.njk` of its own in the theme it wears; the shape it is
9
+ handed is documented in the theme README under "The comment form".
10
+
11
+ `comment-respond` and `comment-reply-title` are the source design's names for
12
+ a form under a post and its heading (decision-16), and the stylesheet styles
13
+ every label, field and button through them — so the contact form wears the
14
+ same class rather than repeating the rules.
15
+
16
+ It draws two forms. For a stranger: the name, email and website boxes, the
17
+ honeypot and the loaded-at stamp. For somebody signed in to this site's
18
+ admin — `commentForm.signedInAs` — none of those, because the site already
19
+ knows all three and a session is better evidence than a honeypot, and a
20
+ hidden CSRF token instead, because this form posts under somebody's name.
21
+ A theme that replaces this partial has to draw both.
22
+
23
+ It works with JavaScript switched off, and there is no script on it.
24
+ #}
25
+ <section class="comment-respond" id="respond">
26
+ <h2 class="comment-reply-title">Leave a comment</h2>
27
+
28
+ {% if commentNotice %}
29
+ <p class="comment-notice" role="status">{{ commentNotice }}</p>
30
+ {% endif %}
31
+
32
+ {% if commentForm.error %}
33
+ <p class="comment-error" role="alert">{{ commentForm.error }}</p>
34
+ {% endif %}
35
+
36
+ <form method="post" action="{{ commentForm.action }}">
37
+ <input type="hidden" name="{{ commentForm.fields.post }}" value="{{ commentForm.post }}" />
38
+ {#
39
+ What this comment answers. `commentReplyTo` is the `?reply_to=` on the
40
+ URL, which a Reply link put there and the CMS has already checked names
41
+ an approved comment on this very post; otherwise it is whatever a refused
42
+ submission carried.
43
+ #}
44
+ {% set replyTo = commentReplyTo if commentReplyTo else commentForm.values.inReplyTo %}
45
+ <input type="hidden" name="{{ commentForm.fields.inReplyTo }}" value="{{ replyTo }}" />
46
+
47
+ {% if commentReplyingTo %}
48
+ <p class="comment-replying-to">
49
+ Replying to {{ commentReplyingTo }}.
50
+ <a href="{{ page.url }}#respond">Comment on the post instead</a>
51
+ </p>
52
+ {% endif %}
53
+
54
+ {% if commentForm.signedInAs %}
55
+ {#
56
+ Signed in to this site. The comment is attributed from the account, so
57
+ there is nothing to type and nothing to get wrong; the token is what
58
+ stops a page on another site posting under this name without them
59
+ knowing.
60
+ #}
61
+ <input type="hidden" name="{{ commentForm.fields.csrf }}" value="{{ commentForm.csrfToken }}" />
62
+
63
+ <p class="comment-signed-in">
64
+ Commenting as <a href="{{ commentForm.signedInAs.url }}">{{ commentForm.signedInAs.name }}</a>.
65
+ </p>
66
+ {% else %}
67
+ {#
68
+ When this form was drawn, which is what the minimum submit time is
69
+ measured against. A signed-in form carries none: a session says more
70
+ about whether this is a person than a stopwatch does.
71
+ #}
72
+ <input type="hidden" name="{{ commentForm.fields.loaded }}" value="{{ commentForm.loaded }}" />
73
+
74
+ {#
75
+ The honeypot. Hidden from sight and from assistive technology, out of the
76
+ tab order, and told not to autofill: a person never sees it and never
77
+ fills it in, so anything that does is not a person.
78
+ #}
79
+ <div class="comment-trap" aria-hidden="true">
80
+ <label for="comment-website">Website</label>
81
+ <input id="comment-website" name="{{ commentForm.fields.trap }}" type="text" tabindex="-1" autocomplete="off" value="" />
82
+ </div>
83
+
84
+ <p class="comment-field">
85
+ <label for="comment-name">Name</label>
86
+ <input id="comment-name" name="{{ commentForm.fields.name }}" type="text" value="{{ commentForm.values.name }}" maxlength="{{ commentForm.nameLength }}" autocomplete="name" required />
87
+ {% if commentForm.problems.name %}
88
+ <span class="comment-field-error">{{ commentForm.problems.name }}</span>
89
+ {% endif %}
90
+ </p>
91
+
92
+ <p class="comment-field">
93
+ <label for="comment-email">Email <span class="comment-optional">(optional, never shown)</span></label>
94
+ <input id="comment-email" name="{{ commentForm.fields.email }}" type="email" value="{{ commentForm.values.email }}" autocomplete="email" />
95
+ {% if commentForm.problems.email %}
96
+ <span class="comment-field-error">{{ commentForm.problems.email }}</span>
97
+ {% endif %}
98
+ </p>
99
+
100
+ <p class="comment-field">
101
+ <label for="comment-url">Your site <span class="comment-optional">(optional)</span></label>
102
+ <input id="comment-url" name="{{ commentForm.fields.url }}" type="text" inputmode="url" value="{{ commentForm.values.url }}" autocomplete="url" />
103
+ {% if commentForm.problems.url %}
104
+ <span class="comment-field-error">{{ commentForm.problems.url }}</span>
105
+ {% endif %}
106
+ </p>
107
+ {% endif %}
108
+
109
+ <p class="comment-field">
110
+ <label for="comment-body">Comment</label>
111
+ <textarea id="comment-body" name="{{ commentForm.fields.body }}" rows="6" maxlength="{{ commentForm.bodyLength }}" required>{{ commentForm.values.body }}</textarea>
112
+ {% if commentForm.problems.body %}
113
+ <span class="comment-field-error">{{ commentForm.problems.body }}</span>
114
+ {% endif %}
115
+ <span class="comment-hint">Markdown works. Links are marked <code>nofollow ugc</code>; HTML is not.</span>
116
+ </p>
117
+
118
+ {#
119
+ "Tell me about replies". Only on a site that can actually send mail —
120
+ `notifiable` is false otherwise — because a box that promised a message
121
+ nothing would ever send would be a lie on a form. The address is the one
122
+ typed above — or the account's, for somebody signed in — is never shown
123
+ anywhere, and every message it sends carries a one-click unsubscribe
124
+ link.
125
+ #}
126
+ {% if commentForm.notifiable %}
127
+ <p class="comment-check">
128
+ <input id="comment-notify" name="{{ commentForm.fields.notify }}" type="checkbox" value="1"{% if commentForm.values.notify %} checked{% endif %} />
129
+ <label for="comment-notify">Email me when somebody replies to this</label>
130
+ </p>
131
+ {% endif %}
132
+
133
+ <p class="form-submit">
134
+ <button type="submit">Post comment</button>
135
+ </p>
136
+ </form>
137
+ </section>