@geekity/cms 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +2091 -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/pages/documents/editor.njk +196 -0
  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/media/library.njk +160 -0
  19. package/admin/pages/messages/all.njk +110 -0
  20. package/admin/{layouts → pages}/placeholder.njk +5 -1
  21. package/admin/pages/settings/discussion.njk +99 -0
  22. package/admin/pages/settings/email.njk +203 -0
  23. package/admin/pages/settings/federation.njk +75 -0
  24. package/admin/pages/settings/general.njk +29 -0
  25. package/admin/pages/settings/permalinks.njk +50 -0
  26. package/admin/pages/settings/reading.njk +72 -0
  27. package/admin/pages/users/edit.njk +239 -0
  28. package/admin/pages/users/list.njk +48 -0
  29. package/admin/pages/users/new.njk +41 -0
  30. package/admin/static/admin.css +498 -3
  31. package/admin/static/copy.js +52 -0
  32. package/admin/static/editor.js +16 -16
  33. package/admin/static/slug.js +61 -0
  34. package/dist/admin/accounts.d.ts +413 -0
  35. package/dist/admin/accounts.d.ts.map +1 -0
  36. package/dist/admin/accounts.js +680 -0
  37. package/dist/admin/accounts.js.map +1 -0
  38. package/dist/admin/appearance.d.ts +80 -0
  39. package/dist/admin/appearance.d.ts.map +1 -0
  40. package/dist/admin/appearance.js +136 -0
  41. package/dist/admin/appearance.js.map +1 -0
  42. package/dist/admin/comments.d.ts +90 -0
  43. package/dist/admin/comments.d.ts.map +1 -0
  44. package/dist/admin/comments.js +244 -0
  45. package/dist/admin/comments.js.map +1 -0
  46. package/dist/admin/credentials.d.ts +26 -2
  47. package/dist/admin/credentials.d.ts.map +1 -1
  48. package/dist/admin/credentials.js +35 -2
  49. package/dist/admin/credentials.js.map +1 -1
  50. package/dist/admin/documents.d.ts +127 -10
  51. package/dist/admin/documents.d.ts.map +1 -1
  52. package/dist/admin/documents.js +360 -41
  53. package/dist/admin/documents.js.map +1 -1
  54. package/dist/admin/federation.d.ts +151 -50
  55. package/dist/admin/federation.d.ts.map +1 -1
  56. package/dist/admin/federation.js +225 -93
  57. package/dist/admin/federation.js.map +1 -1
  58. package/dist/admin/formatting.d.ts +20 -0
  59. package/dist/admin/formatting.d.ts.map +1 -0
  60. package/dist/admin/formatting.js +72 -0
  61. package/dist/admin/formatting.js.map +1 -0
  62. package/dist/admin/headers.d.ts +65 -0
  63. package/dist/admin/headers.d.ts.map +1 -0
  64. package/dist/admin/headers.js +104 -0
  65. package/dist/admin/headers.js.map +1 -0
  66. package/dist/admin/index.d.ts +38 -12
  67. package/dist/admin/index.d.ts.map +1 -1
  68. package/dist/admin/index.js +25 -7
  69. package/dist/admin/index.js.map +1 -1
  70. package/dist/admin/media.d.ts +168 -0
  71. package/dist/admin/media.d.ts.map +1 -0
  72. package/dist/admin/media.js +295 -0
  73. package/dist/admin/media.js.map +1 -0
  74. package/dist/admin/menu.d.ts +79 -0
  75. package/dist/admin/menu.d.ts.map +1 -0
  76. package/dist/admin/menu.js +126 -0
  77. package/dist/admin/menu.js.map +1 -0
  78. package/dist/admin/messages.d.ts +80 -0
  79. package/dist/admin/messages.d.ts.map +1 -0
  80. package/dist/admin/messages.js +152 -0
  81. package/dist/admin/messages.js.map +1 -0
  82. package/dist/admin/preview.d.ts.map +1 -1
  83. package/dist/admin/preview.js +31 -7
  84. package/dist/admin/preview.js.map +1 -1
  85. package/dist/admin/recovery.d.ts +92 -0
  86. package/dist/admin/recovery.d.ts.map +1 -0
  87. package/dist/admin/recovery.js +229 -0
  88. package/dist/admin/recovery.js.map +1 -0
  89. package/dist/admin/routes.d.ts +0 -20
  90. package/dist/admin/routes.d.ts.map +1 -1
  91. package/dist/admin/routes.js +155 -105
  92. package/dist/admin/routes.js.map +1 -1
  93. package/dist/admin/settings-discussion.d.ts +37 -0
  94. package/dist/admin/settings-discussion.d.ts.map +1 -0
  95. package/dist/admin/settings-discussion.js +117 -0
  96. package/dist/admin/settings-discussion.js.map +1 -0
  97. package/dist/admin/settings-email.d.ts +54 -0
  98. package/dist/admin/settings-email.d.ts.map +1 -0
  99. package/dist/admin/settings-email.js +189 -0
  100. package/dist/admin/settings-email.js.map +1 -0
  101. package/dist/admin/settings-federation.d.ts +39 -0
  102. package/dist/admin/settings-federation.d.ts.map +1 -0
  103. package/dist/admin/settings-federation.js +103 -0
  104. package/dist/admin/settings-federation.js.map +1 -0
  105. package/dist/admin/settings-general.d.ts +12 -0
  106. package/dist/admin/settings-general.d.ts.map +1 -0
  107. package/dist/admin/settings-general.js +48 -0
  108. package/dist/admin/settings-general.js.map +1 -0
  109. package/dist/admin/settings-page.d.ts +102 -0
  110. package/dist/admin/settings-page.d.ts.map +1 -0
  111. package/dist/admin/settings-page.js +126 -0
  112. package/dist/admin/settings-page.js.map +1 -0
  113. package/dist/admin/settings-pages.d.ts +19 -0
  114. package/dist/admin/settings-pages.d.ts.map +1 -0
  115. package/dist/admin/settings-pages.js +33 -0
  116. package/dist/admin/settings-pages.js.map +1 -0
  117. package/dist/admin/settings-permalinks.d.ts +16 -0
  118. package/dist/admin/settings-permalinks.d.ts.map +1 -0
  119. package/dist/admin/settings-permalinks.js +32 -0
  120. package/dist/admin/settings-permalinks.js.map +1 -0
  121. package/dist/admin/settings-reading.d.ts +33 -0
  122. package/dist/admin/settings-reading.d.ts.map +1 -0
  123. package/dist/admin/settings-reading.js +48 -0
  124. package/dist/admin/settings-reading.js.map +1 -0
  125. package/dist/admin/settings.d.ts +325 -96
  126. package/dist/admin/settings.d.ts.map +1 -1
  127. package/dist/admin/settings.js +650 -308
  128. package/dist/admin/settings.js.map +1 -1
  129. package/dist/admin/store.d.ts +606 -152
  130. package/dist/admin/store.d.ts.map +1 -1
  131. package/dist/admin/store.js +863 -268
  132. package/dist/admin/store.js.map +1 -1
  133. package/dist/admin/taxonomy.d.ts +114 -0
  134. package/dist/admin/taxonomy.d.ts.map +1 -0
  135. package/dist/admin/taxonomy.js +289 -0
  136. package/dist/admin/taxonomy.js.map +1 -0
  137. package/dist/admin/templates.d.ts +44 -14
  138. package/dist/admin/templates.d.ts.map +1 -1
  139. package/dist/admin/templates.js +44 -14
  140. package/dist/admin/templates.js.map +1 -1
  141. package/dist/admin/throttle.d.ts +84 -0
  142. package/dist/admin/throttle.d.ts.map +1 -0
  143. package/dist/admin/throttle.js +143 -0
  144. package/dist/admin/throttle.js.map +1 -0
  145. package/dist/admin/uploads.d.ts +28 -2
  146. package/dist/admin/uploads.d.ts.map +1 -1
  147. package/dist/admin/uploads.js +43 -4
  148. package/dist/admin/uploads.js.map +1 -1
  149. package/dist/admin/users.d.ts +100 -13
  150. package/dist/admin/users.d.ts.map +1 -1
  151. package/dist/admin/users.js +412 -39
  152. package/dist/admin/users.js.map +1 -1
  153. package/dist/cache.d.ts +141 -0
  154. package/dist/cache.d.ts.map +1 -0
  155. package/dist/cache.js +207 -0
  156. package/dist/cache.js.map +1 -0
  157. package/dist/cli.d.ts +14 -2
  158. package/dist/cli.d.ts.map +1 -1
  159. package/dist/cli.js +424 -21
  160. package/dist/cli.js.map +1 -1
  161. package/dist/comments/akismet.d.ts +130 -0
  162. package/dist/comments/akismet.d.ts.map +1 -0
  163. package/dist/comments/akismet.js +274 -0
  164. package/dist/comments/akismet.js.map +1 -0
  165. package/dist/comments/conversation.d.ts +29 -0
  166. package/dist/comments/conversation.d.ts.map +1 -0
  167. package/dist/comments/conversation.js +60 -0
  168. package/dist/comments/conversation.js.map +1 -0
  169. package/dist/comments/form.d.ts +75 -0
  170. package/dist/comments/form.d.ts.map +1 -0
  171. package/dist/comments/form.js +64 -0
  172. package/dist/comments/form.js.map +1 -0
  173. package/dist/comments/index.d.ts +15 -0
  174. package/dist/comments/index.d.ts.map +1 -0
  175. package/dist/comments/index.js +9 -0
  176. package/dist/comments/index.js.map +1 -0
  177. package/dist/comments/markdown.d.ts +8 -0
  178. package/dist/comments/markdown.d.ts.map +1 -0
  179. package/dist/comments/markdown.js +85 -0
  180. package/dist/comments/markdown.js.map +1 -0
  181. package/dist/comments/moderate.d.ts +71 -0
  182. package/dist/comments/moderate.d.ts.map +1 -0
  183. package/dist/comments/moderate.js +88 -0
  184. package/dist/comments/moderate.js.map +1 -0
  185. package/dist/comments/policy.d.ts +57 -0
  186. package/dist/comments/policy.d.ts.map +1 -0
  187. package/dist/comments/policy.js +80 -0
  188. package/dist/comments/policy.js.map +1 -0
  189. package/dist/comments/records.d.ts +266 -0
  190. package/dist/comments/records.d.ts.map +1 -0
  191. package/dist/comments/records.js +487 -0
  192. package/dist/comments/records.js.map +1 -0
  193. package/dist/comments/routes.d.ts +58 -0
  194. package/dist/comments/routes.d.ts.map +1 -0
  195. package/dist/comments/routes.js +177 -0
  196. package/dist/comments/routes.js.map +1 -0
  197. package/dist/comments/submission.d.ts +263 -0
  198. package/dist/comments/submission.d.ts.map +1 -0
  199. package/dist/comments/submission.js +241 -0
  200. package/dist/comments/submission.js.map +1 -0
  201. package/dist/config.d.ts +190 -5
  202. package/dist/config.d.ts.map +1 -1
  203. package/dist/config.js +118 -6
  204. package/dist/config.js.map +1 -1
  205. package/dist/contact/delivery.d.ts +60 -0
  206. package/dist/contact/delivery.d.ts.map +1 -0
  207. package/dist/contact/delivery.js +87 -0
  208. package/dist/contact/delivery.js.map +1 -0
  209. package/dist/contact/form.d.ts +130 -0
  210. package/dist/contact/form.d.ts.map +1 -0
  211. package/dist/contact/form.js +163 -0
  212. package/dist/contact/form.js.map +1 -0
  213. package/dist/contact/index.d.ts +17 -0
  214. package/dist/contact/index.d.ts.map +1 -0
  215. package/dist/contact/index.js +13 -0
  216. package/dist/contact/index.js.map +1 -0
  217. package/dist/contact/records.d.ts +124 -0
  218. package/dist/contact/records.d.ts.map +1 -0
  219. package/dist/contact/records.js +218 -0
  220. package/dist/contact/records.js.map +1 -0
  221. package/dist/contact/routes.d.ts +17 -0
  222. package/dist/contact/routes.d.ts.map +1 -0
  223. package/dist/contact/routes.js +127 -0
  224. package/dist/contact/routes.js.map +1 -0
  225. package/dist/contact/submission.d.ts +103 -0
  226. package/dist/contact/submission.d.ts.map +1 -0
  227. package/dist/contact/submission.js +166 -0
  228. package/dist/contact/submission.js.map +1 -0
  229. package/dist/content/document.d.ts +7 -2
  230. package/dist/content/document.d.ts.map +1 -1
  231. package/dist/content/document.js +1 -0
  232. package/dist/content/document.js.map +1 -1
  233. package/dist/content/index.d.ts +7 -2
  234. package/dist/content/index.d.ts.map +1 -1
  235. package/dist/content/index.js +4 -1
  236. package/dist/content/index.js.map +1 -1
  237. package/dist/content/markdown.d.ts.map +1 -1
  238. package/dist/content/markdown.js +24 -2
  239. package/dist/content/markdown.js.map +1 -1
  240. package/dist/content/parser.d.ts.map +1 -1
  241. package/dist/content/parser.js +11 -4
  242. package/dist/content/parser.js.map +1 -1
  243. package/dist/content/save.d.ts +5 -0
  244. package/dist/content/save.d.ts.map +1 -1
  245. package/dist/content/save.js +44 -1
  246. package/dist/content/save.js.map +1 -1
  247. package/dist/content/schedule.d.ts +125 -0
  248. package/dist/content/schedule.d.ts.map +1 -0
  249. package/dist/content/schedule.js +207 -0
  250. package/dist/content/schedule.js.map +1 -0
  251. package/dist/content/search.d.ts +64 -0
  252. package/dist/content/search.d.ts.map +1 -0
  253. package/dist/content/search.js +136 -0
  254. package/dist/content/search.js.map +1 -0
  255. package/dist/content/store.d.ts +202 -7
  256. package/dist/content/store.d.ts.map +1 -1
  257. package/dist/content/store.js +374 -67
  258. package/dist/content/store.js.map +1 -1
  259. package/dist/content/sync.d.ts +7 -1
  260. package/dist/content/sync.d.ts.map +1 -1
  261. package/dist/content/sync.js +18 -10
  262. package/dist/content/sync.js.map +1 -1
  263. package/dist/content/time.d.ts +56 -0
  264. package/dist/content/time.d.ts.map +1 -0
  265. package/dist/content/time.js +141 -0
  266. package/dist/content/time.js.map +1 -0
  267. package/dist/content/writer.d.ts.map +1 -1
  268. package/dist/content/writer.js +3 -0
  269. package/dist/content/writer.js.map +1 -1
  270. package/dist/env.d.ts +58 -4
  271. package/dist/env.d.ts.map +1 -1
  272. package/dist/federation/actor.d.ts +95 -41
  273. package/dist/federation/actor.d.ts.map +1 -1
  274. package/dist/federation/actor.js +180 -53
  275. package/dist/federation/actor.js.map +1 -1
  276. package/dist/federation/article.d.ts +44 -17
  277. package/dist/federation/article.d.ts.map +1 -1
  278. package/dist/federation/article.js +98 -46
  279. package/dist/federation/article.js.map +1 -1
  280. package/dist/federation/delivery.d.ts +63 -15
  281. package/dist/federation/delivery.d.ts.map +1 -1
  282. package/dist/federation/delivery.js +154 -80
  283. package/dist/federation/delivery.js.map +1 -1
  284. package/dist/federation/federation.d.ts +22 -17
  285. package/dist/federation/federation.d.ts.map +1 -1
  286. package/dist/federation/federation.js +98 -77
  287. package/dist/federation/federation.js.map +1 -1
  288. package/dist/federation/followers.d.ts +3 -2
  289. package/dist/federation/followers.d.ts.map +1 -1
  290. package/dist/federation/followers.js +6 -5
  291. package/dist/federation/followers.js.map +1 -1
  292. package/dist/federation/import-wordpress.d.ts +128 -0
  293. package/dist/federation/import-wordpress.d.ts.map +1 -0
  294. package/dist/federation/import-wordpress.js +426 -0
  295. package/dist/federation/import-wordpress.js.map +1 -0
  296. package/dist/federation/inbox.d.ts +36 -13
  297. package/dist/federation/inbox.d.ts.map +1 -1
  298. package/dist/federation/inbox.js +120 -49
  299. package/dist/federation/inbox.js.map +1 -1
  300. package/dist/federation/index.d.ts +22 -10
  301. package/dist/federation/index.d.ts.map +1 -1
  302. package/dist/federation/index.js +13 -8
  303. package/dist/federation/index.js.map +1 -1
  304. package/dist/federation/keys.d.ts +98 -20
  305. package/dist/federation/keys.d.ts.map +1 -1
  306. package/dist/federation/keys.js +269 -39
  307. package/dist/federation/keys.js.map +1 -1
  308. package/dist/federation/mount.d.ts +42 -10
  309. package/dist/federation/mount.d.ts.map +1 -1
  310. package/dist/federation/mount.js +266 -26
  311. package/dist/federation/mount.js.map +1 -1
  312. package/dist/federation/paths.d.ts +23 -35
  313. package/dist/federation/paths.d.ts.map +1 -1
  314. package/dist/federation/paths.js +26 -39
  315. package/dist/federation/paths.js.map +1 -1
  316. package/dist/federation/records.d.ts +223 -0
  317. package/dist/federation/records.d.ts.map +1 -0
  318. package/dist/federation/records.js +506 -0
  319. package/dist/federation/records.js.map +1 -0
  320. package/dist/federation/relays.d.ts +114 -0
  321. package/dist/federation/relays.d.ts.map +1 -0
  322. package/dist/federation/relays.js +290 -0
  323. package/dist/federation/relays.js.map +1 -0
  324. package/dist/federation/replies.d.ts +80 -0
  325. package/dist/federation/replies.d.ts.map +1 -0
  326. package/dist/federation/replies.js +166 -0
  327. package/dist/federation/replies.js.map +1 -0
  328. package/dist/federation/wordpress.d.ts +131 -0
  329. package/dist/federation/wordpress.d.ts.map +1 -0
  330. package/dist/federation/wordpress.js +341 -0
  331. package/dist/federation/wordpress.js.map +1 -0
  332. package/dist/files/atomic.d.ts +103 -0
  333. package/dist/files/atomic.d.ts.map +1 -0
  334. package/dist/files/atomic.js +150 -0
  335. package/dist/files/atomic.js.map +1 -0
  336. package/dist/files/index.d.ts +3 -0
  337. package/dist/files/index.d.ts.map +1 -0
  338. package/dist/files/index.js +2 -0
  339. package/dist/files/index.js.map +1 -0
  340. package/dist/forms/protection.d.ts +85 -0
  341. package/dist/forms/protection.d.ts.map +1 -0
  342. package/dist/forms/protection.js +116 -0
  343. package/dist/forms/protection.js.map +1 -0
  344. package/dist/images/icons.d.ts +59 -0
  345. package/dist/images/icons.d.ts.map +1 -0
  346. package/dist/images/icons.js +131 -0
  347. package/dist/images/icons.js.map +1 -0
  348. package/dist/images/index.d.ts +7 -0
  349. package/dist/images/index.d.ts.map +1 -0
  350. package/dist/images/index.js +4 -0
  351. package/dist/images/index.js.map +1 -0
  352. package/dist/images/markup.d.ts +47 -0
  353. package/dist/images/markup.d.ts.map +1 -0
  354. package/dist/images/markup.js +175 -0
  355. package/dist/images/markup.js.map +1 -0
  356. package/dist/images/paths.d.ts +34 -0
  357. package/dist/images/paths.d.ts.map +1 -0
  358. package/dist/images/paths.js +41 -0
  359. package/dist/images/paths.js.map +1 -0
  360. package/dist/images/variants.d.ts +104 -0
  361. package/dist/images/variants.d.ts.map +1 -0
  362. package/dist/images/variants.js +320 -0
  363. package/dist/images/variants.js.map +1 -0
  364. package/dist/index.d.ts +123 -19
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +327 -25
  367. package/dist/index.js.map +1 -1
  368. package/dist/init.d.ts +18 -0
  369. package/dist/init.d.ts.map +1 -1
  370. package/dist/init.js +34 -3
  371. package/dist/init.js.map +1 -1
  372. package/dist/mail/brevo.d.ts +35 -0
  373. package/dist/mail/brevo.d.ts.map +1 -0
  374. package/dist/mail/brevo.js +85 -0
  375. package/dist/mail/brevo.js.map +1 -0
  376. package/dist/mail/credentials.d.ts +62 -0
  377. package/dist/mail/credentials.d.ts.map +1 -0
  378. package/dist/mail/credentials.js +86 -0
  379. package/dist/mail/credentials.js.map +1 -0
  380. package/dist/mail/index.d.ts +15 -0
  381. package/dist/mail/index.d.ts.map +1 -0
  382. package/dist/mail/index.js +8 -0
  383. package/dist/mail/index.js.map +1 -0
  384. package/dist/mail/memory.d.ts +35 -0
  385. package/dist/mail/memory.d.ts.map +1 -0
  386. package/dist/mail/memory.js +29 -0
  387. package/dist/mail/memory.js.map +1 -0
  388. package/dist/mail/provider.d.ts +80 -0
  389. package/dist/mail/provider.d.ts.map +1 -0
  390. package/dist/mail/provider.js +23 -0
  391. package/dist/mail/provider.js.map +1 -0
  392. package/dist/mail/service.d.ts +156 -0
  393. package/dist/mail/service.d.ts.map +1 -0
  394. package/dist/mail/service.js +265 -0
  395. package/dist/mail/service.js.map +1 -0
  396. package/dist/mail/smtp.d.ts +39 -0
  397. package/dist/mail/smtp.d.ts.map +1 -0
  398. package/dist/mail/smtp.js +58 -0
  399. package/dist/mail/smtp.js.map +1 -0
  400. package/dist/mail/templates.d.ts +91 -0
  401. package/dist/mail/templates.d.ts.map +1 -0
  402. package/dist/mail/templates.js +69 -0
  403. package/dist/mail/templates.js.map +1 -0
  404. package/dist/notifications/comments.d.ts +66 -0
  405. package/dist/notifications/comments.d.ts.map +1 -0
  406. package/dist/notifications/comments.js +151 -0
  407. package/dist/notifications/comments.js.map +1 -0
  408. package/dist/notifications/digest.d.ts +135 -0
  409. package/dist/notifications/digest.d.ts.map +1 -0
  410. package/dist/notifications/digest.js +287 -0
  411. package/dist/notifications/digest.js.map +1 -0
  412. package/dist/notifications/index.d.ts +13 -0
  413. package/dist/notifications/index.d.ts.map +1 -0
  414. package/dist/notifications/index.js +8 -0
  415. package/dist/notifications/index.js.map +1 -0
  416. package/dist/notifications/links.d.ts +60 -0
  417. package/dist/notifications/links.d.ts.map +1 -0
  418. package/dist/notifications/links.js +63 -0
  419. package/dist/notifications/links.js.map +1 -0
  420. package/dist/notifications/optouts.d.ts +48 -0
  421. package/dist/notifications/optouts.d.ts.map +1 -0
  422. package/dist/notifications/optouts.js +93 -0
  423. package/dist/notifications/optouts.js.map +1 -0
  424. package/dist/notifications/preferences.d.ts +158 -0
  425. package/dist/notifications/preferences.d.ts.map +1 -0
  426. package/dist/notifications/preferences.js +195 -0
  427. package/dist/notifications/preferences.js.map +1 -0
  428. package/dist/notifications/routes.d.ts +28 -0
  429. package/dist/notifications/routes.d.ts.map +1 -0
  430. package/dist/notifications/routes.js +184 -0
  431. package/dist/notifications/routes.js.map +1 -0
  432. package/dist/notifications/tokens.d.ts +60 -0
  433. package/dist/notifications/tokens.d.ts.map +1 -0
  434. package/dist/notifications/tokens.js +125 -0
  435. package/dist/notifications/tokens.js.map +1 -0
  436. package/dist/notify.d.ts +84 -0
  437. package/dist/notify.d.ts.map +1 -0
  438. package/dist/notify.js +149 -0
  439. package/dist/notify.js.map +1 -0
  440. package/dist/web/archive.d.ts +49 -0
  441. package/dist/web/archive.d.ts.map +1 -0
  442. package/dist/web/archive.js +59 -0
  443. package/dist/web/archive.js.map +1 -0
  444. package/dist/web/assets.d.ts +6 -5
  445. package/dist/web/assets.d.ts.map +1 -1
  446. package/dist/web/assets.js +5 -7
  447. package/dist/web/assets.js.map +1 -1
  448. package/dist/web/authors.d.ts +143 -0
  449. package/dist/web/authors.d.ts.map +1 -0
  450. package/dist/web/authors.js +178 -0
  451. package/dist/web/authors.js.map +1 -0
  452. package/dist/web/comments.d.ts +60 -0
  453. package/dist/web/comments.d.ts.map +1 -0
  454. package/dist/web/comments.js +207 -0
  455. package/dist/web/comments.js.map +1 -0
  456. package/dist/web/context.d.ts +162 -28
  457. package/dist/web/context.d.ts.map +1 -1
  458. package/dist/web/context.js +123 -26
  459. package/dist/web/context.js.map +1 -1
  460. package/dist/web/conversation.d.ts +209 -0
  461. package/dist/web/conversation.d.ts.map +1 -0
  462. package/dist/web/conversation.js +557 -0
  463. package/dist/web/conversation.js.map +1 -0
  464. package/dist/web/documents.d.ts +36 -6
  465. package/dist/web/documents.d.ts.map +1 -1
  466. package/dist/web/documents.js +52 -10
  467. package/dist/web/documents.js.map +1 -1
  468. package/dist/web/feed-atom.d.ts +22 -0
  469. package/dist/web/feed-atom.d.ts.map +1 -0
  470. package/dist/web/feed-atom.js +83 -0
  471. package/dist/web/feed-atom.js.map +1 -0
  472. package/dist/web/feed-item.d.ts +145 -0
  473. package/dist/web/feed-item.d.ts.map +1 -0
  474. package/dist/web/feed-item.js +120 -0
  475. package/dist/web/feed-item.js.map +1 -0
  476. package/dist/web/feed-json.d.ts +79 -0
  477. package/dist/web/feed-json.d.ts.map +1 -0
  478. package/dist/web/feed-json.js +53 -0
  479. package/dist/web/feed-json.js.map +1 -0
  480. package/dist/web/feed-rss.d.ts +26 -0
  481. package/dist/web/feed-rss.d.ts.map +1 -0
  482. package/dist/web/feed-rss.js +203 -0
  483. package/dist/web/feed-rss.js.map +1 -0
  484. package/dist/web/feed-source.d.ts +244 -0
  485. package/dist/web/feed-source.d.ts.map +1 -0
  486. package/dist/web/feed-source.js +201 -0
  487. package/dist/web/feed-source.js.map +1 -0
  488. package/dist/web/feed-xml.d.ts +63 -0
  489. package/dist/web/feed-xml.d.ts.map +1 -0
  490. package/dist/web/feed-xml.js +116 -0
  491. package/dist/web/feed-xml.js.map +1 -0
  492. package/dist/web/feeds.d.ts +31 -96
  493. package/dist/web/feeds.d.ts.map +1 -1
  494. package/dist/web/feeds.js +94 -198
  495. package/dist/web/feeds.js.map +1 -1
  496. package/dist/web/health.d.ts +31 -0
  497. package/dist/web/health.d.ts.map +1 -0
  498. package/dist/web/health.js +44 -0
  499. package/dist/web/health.js.map +1 -0
  500. package/dist/web/index.d.ts +30 -10
  501. package/dist/web/index.d.ts.map +1 -1
  502. package/dist/web/index.js +18 -7
  503. package/dist/web/index.js.map +1 -1
  504. package/dist/web/navigation.d.ts +73 -0
  505. package/dist/web/navigation.d.ts.map +1 -0
  506. package/dist/web/navigation.js +110 -0
  507. package/dist/web/navigation.js.map +1 -0
  508. package/dist/web/negotiate.d.ts +9 -0
  509. package/dist/web/negotiate.d.ts.map +1 -1
  510. package/dist/web/negotiate.js +6 -1
  511. package/dist/web/negotiate.js.map +1 -1
  512. package/dist/web/recent.d.ts +43 -0
  513. package/dist/web/recent.d.ts.map +1 -0
  514. package/dist/web/recent.js +37 -0
  515. package/dist/web/recent.js.map +1 -0
  516. package/dist/web/render.d.ts +197 -9
  517. package/dist/web/render.d.ts.map +1 -1
  518. package/dist/web/render.js +334 -17
  519. package/dist/web/render.js.map +1 -1
  520. package/dist/web/routes.d.ts +25 -8
  521. package/dist/web/routes.d.ts.map +1 -1
  522. package/dist/web/routes.js +845 -93
  523. package/dist/web/routes.js.map +1 -1
  524. package/dist/web/sanitize.d.ts +19 -0
  525. package/dist/web/sanitize.d.ts.map +1 -0
  526. package/dist/web/sanitize.js +272 -0
  527. package/dist/web/sanitize.js.map +1 -0
  528. package/dist/web/search.d.ts +79 -0
  529. package/dist/web/search.d.ts.map +1 -0
  530. package/dist/web/search.js +94 -0
  531. package/dist/web/search.js.map +1 -0
  532. package/dist/web/sitemap.d.ts +120 -0
  533. package/dist/web/sitemap.d.ts.map +1 -0
  534. package/dist/web/sitemap.js +199 -0
  535. package/dist/web/sitemap.js.map +1 -0
  536. package/dist/web/taxonomy.d.ts +152 -0
  537. package/dist/web/taxonomy.d.ts.map +1 -0
  538. package/dist/web/taxonomy.js +237 -0
  539. package/dist/web/taxonomy.js.map +1 -0
  540. package/dist/web/templates.d.ts +54 -16
  541. package/dist/web/templates.d.ts.map +1 -1
  542. package/dist/web/templates.js +109 -28
  543. package/dist/web/templates.js.map +1 -1
  544. package/dist/web/themes.d.ts +205 -0
  545. package/dist/web/themes.d.ts.map +1 -0
  546. package/dist/web/themes.js +277 -0
  547. package/dist/web/themes.js.map +1 -0
  548. package/dist/webmention/discovery.d.ts +51 -0
  549. package/dist/webmention/discovery.d.ts.map +1 -0
  550. package/dist/webmention/discovery.js +176 -0
  551. package/dist/webmention/discovery.js.map +1 -0
  552. package/dist/webmention/html.d.ts +71 -0
  553. package/dist/webmention/html.d.ts.map +1 -0
  554. package/dist/webmention/html.js +285 -0
  555. package/dist/webmention/html.js.map +1 -0
  556. package/dist/webmention/index.d.ts +12 -0
  557. package/dist/webmention/index.d.ts.map +1 -0
  558. package/dist/webmention/index.js +8 -0
  559. package/dist/webmention/index.js.map +1 -0
  560. package/dist/webmention/links.d.ts +18 -0
  561. package/dist/webmention/links.d.ts.map +1 -0
  562. package/dist/webmention/links.js +64 -0
  563. package/dist/webmention/links.js.map +1 -0
  564. package/dist/webmention/microformats.d.ts +93 -0
  565. package/dist/webmention/microformats.d.ts.map +1 -0
  566. package/dist/webmention/microformats.js +376 -0
  567. package/dist/webmention/microformats.js.map +1 -0
  568. package/dist/webmention/receive.d.ts +141 -0
  569. package/dist/webmention/receive.d.ts.map +1 -0
  570. package/dist/webmention/receive.js +264 -0
  571. package/dist/webmention/receive.js.map +1 -0
  572. package/dist/webmention/routes.d.ts +37 -0
  573. package/dist/webmention/routes.d.ts.map +1 -0
  574. package/dist/webmention/routes.js +75 -0
  575. package/dist/webmention/routes.js.map +1 -0
  576. package/dist/webmention/service.d.ts +94 -0
  577. package/dist/webmention/service.d.ts.map +1 -0
  578. package/dist/webmention/service.js +207 -0
  579. package/dist/webmention/service.js.map +1 -0
  580. package/package.json +11 -6
  581. package/templates/site/content/_data/site.json +1 -0
  582. package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
  583. package/templates/site/geekity.config.ts +11 -1
  584. package/templates/site/tsconfig.json +1 -1
  585. package/themes/default/README.md +1096 -50
  586. package/themes/default/layouts/404.njk +2 -3
  587. package/themes/default/layouts/author.njk +37 -0
  588. package/themes/default/layouts/base.njk +172 -31
  589. package/themes/default/layouts/category.njk +27 -0
  590. package/themes/default/layouts/front-page.njk +57 -0
  591. package/themes/default/layouts/home.njk +17 -1
  592. package/themes/default/layouts/page.njk +57 -5
  593. package/themes/default/layouts/post.njk +78 -19
  594. package/themes/default/layouts/search.njk +57 -0
  595. package/themes/default/layouts/tag.njk +3 -6
  596. package/themes/default/mail/comment-digest.html.njk +37 -0
  597. package/themes/default/mail/comment-digest.subject.njk +3 -0
  598. package/themes/default/mail/comment-digest.txt.njk +40 -0
  599. package/themes/default/mail/comment-pending.html.njk +27 -0
  600. package/themes/default/mail/comment-pending.subject.njk +2 -0
  601. package/themes/default/mail/comment-pending.txt.njk +24 -0
  602. package/themes/default/mail/comment-reply.html.njk +21 -0
  603. package/themes/default/mail/comment-reply.subject.njk +2 -0
  604. package/themes/default/mail/comment-reply.txt.njk +22 -0
  605. package/themes/default/mail/contact-message.html.njk +24 -0
  606. package/themes/default/mail/contact-message.subject.njk +5 -0
  607. package/themes/default/mail/contact-message.txt.njk +20 -0
  608. package/themes/default/mail/password-changed.html.njk +18 -0
  609. package/themes/default/mail/password-changed.subject.njk +2 -0
  610. package/themes/default/mail/password-changed.txt.njk +17 -0
  611. package/themes/default/mail/password-reset.html.njk +22 -0
  612. package/themes/default/mail/password-reset.subject.njk +2 -0
  613. package/themes/default/mail/password-reset.txt.njk +18 -0
  614. package/themes/default/mail/test.html.njk +14 -0
  615. package/themes/default/mail/test.subject.njk +2 -0
  616. package/themes/default/mail/test.txt.njk +12 -0
  617. package/themes/default/partials/archive.njk +27 -0
  618. package/themes/default/partials/bio.njk +77 -0
  619. package/themes/default/partials/comment-form.njk +109 -0
  620. package/themes/default/partials/contact-form.njk +88 -0
  621. package/themes/default/partials/conversation.njk +139 -0
  622. package/themes/default/partials/feeds.njk +26 -0
  623. package/themes/default/partials/jsonld.njk +120 -0
  624. package/themes/default/partials/pagination.njk +12 -6
  625. package/themes/default/partials/post-list.njk +51 -18
  626. package/themes/default/partials/search-form.njk +17 -0
  627. package/themes/default/partials/tags.njk +26 -5
  628. package/themes/default/static/highlight.js +4 -0
  629. package/themes/default/static/style.css +1119 -194
  630. package/themes/default/theme.json +5 -0
  631. package/admin/layouts/document-editor.njk +0 -167
  632. package/admin/layouts/federation.njk +0 -145
  633. package/admin/layouts/login.njk +0 -23
  634. package/admin/layouts/settings.njk +0 -116
  635. package/admin/layouts/setup.njk +0 -27
  636. package/admin/layouts/users.njk +0 -91
  637. /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Default",
3
+ "kind": "site",
4
+ "description": "The theme that ships with Geekity: plain Nunjucks and plain CSS, and the layer every other theme is laid over."
5
+ }
@@ -1,167 +0,0 @@
1
- {# The editor behind /admin/posts/{slug} and /admin/pages/{slug}, and behind
2
- .../new. One template for both kinds: `kind` decides whether there is a date
3
- and a tag field, and the handler decides which buttons the form carries. #}
4
- {% extends "layouts/shell.njk" %}
5
-
6
- {% block title %}{{ heading }}{% endblock %}
7
-
8
- {% block content %}
9
- <h1>{{ heading }}</h1>
10
-
11
- {% if error %}
12
- <p class="admin-error">{{ error }}</p>
13
- {% endif %}
14
-
15
- {% if trashed %}
16
- <p class="admin-note">This {{ kind.singular }} is in the trash. The public site is not serving it.</p>
17
- {% endif %}
18
-
19
- <form class="admin-editor" method="post" action="{{ saveUrl }}">
20
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
21
- {# The hash of the file this form was filled in from. A save whose hash no
22
- longer matches what is on disk is refused rather than overwriting
23
- somebody else's edit (doc-1). #}
24
- <input type="hidden" name="hash" value="{{ form.hash }}" />
25
- {# Which layout the preview renders through. The save handler ignores it. #}
26
- <input type="hidden" name="type" value="{{ kind.type }}" />
27
-
28
- <div class="admin-editor-main">
29
- <label for="editor-title">Title</label>
30
- <input id="editor-title" name="title" type="text" value="{{ form.title }}" required autofocus />
31
-
32
- <label for="editor-body">Body</label>
33
- <textarea id="editor-body" name="body" rows="24">{{ form.body }}</textarea>
34
-
35
- {# Everything the editor's own script needs, on the element it hangs off.
36
- With JavaScript off this is one button that posts the form to the
37
- preview in a new tab, which is a preview. With it on, editor.js takes
38
- the button over, puts CodeMirror on the textarea above and adds the
39
- tabs and the upload control beside it. #}
40
- <div
41
- class="admin-editor-tools"
42
- id="editor-enhance"
43
- data-preview-url="{{ previewUrl }}"
44
- data-upload-url="{{ uploadUrl }}"
45
- data-kind="{{ kind.type }}"
46
- >
47
- <button
48
- type="submit"
49
- id="editor-preview-fallback"
50
- class="admin-button-quiet"
51
- formaction="{{ previewUrl }}"
52
- formtarget="_blank"
53
- formnovalidate
54
- >Preview</button>
55
- </div>
56
- </div>
57
-
58
- <div class="admin-editor-side">
59
- <label for="editor-slug">Slug</label>
60
- <input id="editor-slug" name="slug" type="text" value="{{ form.slug }}" />
61
-
62
- <label for="editor-permalink">Permalink</label>
63
- <input id="editor-permalink" name="permalink" type="text" value="{{ form.permalink }}" />
64
- <p class="admin-hint">Leave it empty to let the {{ kind.singular }} take the URL its slug implies.</p>
65
-
66
- {% if kind.dated %}
67
- <label for="editor-date">Date</label>
68
- <input id="editor-date" name="date" type="text" value="{{ form.date }}" />
69
- {% endif %}
70
-
71
- {% if kind.tagged %}
72
- <label for="editor-tags">Tags</label>
73
- <input id="editor-tags" name="tags" type="text" value="{{ form.tags }}" />
74
- <p class="admin-hint">Separated by commas.</p>
75
- {% endif %}
76
-
77
- <label for="editor-description">Description</label>
78
- <input id="editor-description" name="description" type="text" value="{{ form.description }}" />
79
-
80
- <p class="admin-check">
81
- <input id="editor-draft" name="draft" type="checkbox" value="1"{% if form.draft %} checked{% endif %} />
82
- <label for="editor-draft">Draft</label>
83
- </p>
84
-
85
- {% if kind.excludable %}
86
- {# doc-2's eleventyExcludeFromCollections: still published and still at
87
- its URL, but out of every collection a template lists from. #}
88
- <p class="admin-check">
89
- <input id="editor-exclude" name="exclude" type="checkbox" value="1"{% if form.exclude %} checked{% endif %} />
90
- <label for="editor-exclude">Hide from collections</label>
91
- </p>
92
- <p class="admin-hint">Keeps the {{ kind.singular }} out of listings that gather content, without unpublishing it.</p>
93
- {% endif %}
94
-
95
- <p class="admin-editor-buttons">
96
- {% for button in actions %}
97
- <button type="submit" name="action" value="{{ button.value }}">{{ button.label }}</button>
98
- {% endfor %}
99
- {% if viewUrl %}
100
- <a class="admin-button admin-button-quiet" href="{{ viewUrl }}">View</a>
101
- {% endif %}
102
- </p>
103
- </div>
104
- </form>
105
-
106
- {# CodeMirror, the preview tab and the upload control. A module script is
107
- deferred by definition, so it runs after the form is in the document.
108
- Nothing above depends on it: with the bundle missing or JavaScript off the
109
- textarea and the Preview button are the whole editor. #}
110
- <script type="module" src="{{ assetPrefix }}editor.js"></script>
111
-
112
- <script>
113
- /* The one bit of progressive enhancement doc-5 asks for: the slug follows
114
- the title until somebody types a slug of their own, and the permalink
115
- follows the slug on the same terms. Without this the form still works —
116
- an empty slug is derived from the title on the server. */
117
- (function () {
118
- var title = document.getElementById('editor-title');
119
- var slug = document.getElementById('editor-slug');
120
- var permalink = document.getElementById('editor-permalink');
121
- if (!title || !slug) return;
122
-
123
- var date = document.getElementById('editor-date');
124
- var slugFollows = slug.value === '';
125
- var permalinkFollows = !permalink || permalink.value === '';
126
-
127
- function slugify(value) {
128
- return value
129
- .normalize('NFKD')
130
- .toLowerCase()
131
- .replace(/[\u0300-\u036f]/g, '')
132
- .replace(/[^a-z0-9]+/g, '-')
133
- .replace(/^-+|-+$/g, '');
134
- }
135
-
136
- /* The same shape defaultPermalink() writes on the server: a post lives
137
- under the year and month of its date, a page at the top level. */
138
- function syncPermalink() {
139
- if (!permalink || !permalinkFollows) return;
140
- if (slug.value === '') {
141
- permalink.value = '';
142
- return;
143
- }
144
- var month = date ? /^(\d{4})-(\d{2})/.exec(date.value) : null;
145
- var prefix = month ? '/' + month[1] + '/' + month[2] + '/' : '/';
146
- permalink.value = prefix + slug.value + '/';
147
- }
148
-
149
- slug.addEventListener('input', function () {
150
- slugFollows = false;
151
- syncPermalink();
152
- });
153
-
154
- if (permalink) {
155
- permalink.addEventListener('input', function () {
156
- permalinkFollows = false;
157
- });
158
- }
159
-
160
- title.addEventListener('input', function () {
161
- if (!slugFollows) return;
162
- slug.value = slugify(title.value);
163
- syncPermalink();
164
- });
165
- })();
166
- </script>
167
- {% endblock %}
@@ -1,145 +0,0 @@
1
- {# /admin/federation: who the site is to the fediverse, who follows it, what
2
- arrived in the inbox, and how what went out landed. #}
3
- {% extends "layouts/shell.njk" %}
4
-
5
- {% block title %}Federation{% endblock %}
6
-
7
- {% block content %}
8
- <h1>Federation</h1>
9
-
10
- <section class="admin-panel admin-actor">
11
- <h2>This site’s actor</h2>
12
- <div class="admin-actor-identity">
13
- {% if actor.avatarUrl %}
14
- <img class="admin-avatar admin-avatar-large" src="{{ actor.avatarUrl }}" alt="" width="96" height="96" />
15
- {% else %}
16
- <span class="admin-avatar admin-avatar-large admin-avatar-blank" aria-hidden="true"></span>
17
- {% endif %}
18
- <p class="admin-actor-handle">{{ actor.handle }}</p>
19
- </div>
20
- <dl class="admin-actor-fields">
21
- <div>
22
- <dt>Name</dt>
23
- <dd>{{ actor.name }}</dd>
24
- </div>
25
- <div>
26
- <dt>Summary</dt>
27
- <dd>{% if actor.summary %}{{ actor.summary }}{% else %}<span class="admin-empty">None set.</span>{% endif %}</dd>
28
- </div>
29
- <div>
30
- <dt>Type</dt>
31
- <dd>{{ actor.type }}</dd>
32
- </div>
33
- <div>
34
- <dt>Actor</dt>
35
- <dd><a href="{{ actor.actorId }}">{{ actor.actorId }}</a></dd>
36
- </div>
37
- <div>
38
- <dt>Profile</dt>
39
- <dd><a href="{{ actor.url }}">{{ actor.url }}</a></dd>
40
- </div>
41
- <div>
42
- <dt>Followers</dt>
43
- <dd>{{ actor.followers }}</dd>
44
- </div>
45
- </dl>
46
- </section>
47
-
48
- <section class="admin-panel">
49
- <h2>Followers</h2>
50
- {% if followers.length %}
51
- <table class="admin-list">
52
- <thead>
53
- <tr>
54
- <th scope="col">Follower</th>
55
- <th scope="col">Handle</th>
56
- <th scope="col">Followed</th>
57
- </tr>
58
- </thead>
59
- <tbody>
60
- {% for follower in followers %}
61
- <tr>
62
- <td class="admin-follower">
63
- {% if follower.iconUrl %}
64
- <img class="admin-avatar" src="{{ follower.iconUrl }}" alt="" width="32" height="32" loading="lazy" />
65
- {% else %}
66
- <span class="admin-avatar admin-avatar-blank" aria-hidden="true"></span>
67
- {% endif %}
68
- <a href="{{ follower.url }}">{{ follower.name }}</a>
69
- </td>
70
- <td>{{ follower.handle }}</td>
71
- <td>{{ follower.followedAt | date('html') }}</td>
72
- </tr>
73
- {% endfor %}
74
- </tbody>
75
- </table>
76
- {% else %}
77
- <p class="admin-empty">Nobody follows the site yet.</p>
78
- {% endif %}
79
- </section>
80
-
81
- <section class="admin-panel">
82
- <h2>Recent activity</h2>
83
- {% if inbox.length %}
84
- <ul class="admin-inbox">
85
- {% for entry in inbox %}
86
- <li>
87
- <span class="admin-inbox-actor"><a href="{{ entry.actorId }}">{{ entry.actorLabel }}</a></span>
88
- {% if entry.remoteUrl %}
89
- <a href="{{ entry.remoteUrl }}">{{ entry.action }}</a>
90
- {% else %}
91
- {{ entry.action }}
92
- {% endif %}
93
- {% if entry.post %}
94
- <a href="{{ entry.post.editUrl }}">{{ entry.post.title }}</a>
95
- {% else %}
96
- <span class="admin-empty">something of ours</span>
97
- {% endif %}
98
- <span class="admin-inbox-when">{{ entry.receivedAt | date('html') }}</span>
99
- </li>
100
- {% endfor %}
101
- </ul>
102
- {% else %}
103
- <p class="admin-empty">Nothing has arrived yet: no likes, boosts or replies.</p>
104
- {% endif %}
105
- </section>
106
-
107
- <section class="admin-panel">
108
- <h2>Delivery</h2>
109
- {% if posts.length %}
110
- <table class="admin-list">
111
- <thead>
112
- <tr>
113
- <th scope="col">Post</th>
114
- <th scope="col">Latest activity</th>
115
- <th scope="col">Sent</th>
116
- <th scope="col">Queued</th>
117
- <th scope="col">Failed</th>
118
- <th scope="col">Actions</th>
119
- </tr>
120
- </thead>
121
- <tbody>
122
- {% for row in posts %}
123
- <tr>
124
- <td><a href="{{ row.post.editUrl }}">{{ row.post.title }}</a></td>
125
- <td>{{ row.activityType }} <span class="admin-inbox-when">{{ row.createdAt | date('html') }}</span></td>
126
- <td>{{ row.counts.sent }}</td>
127
- <td>{{ row.counts.queued }}</td>
128
- <td>{% if row.counts.failed %}<span class="admin-status admin-status-failed">{{ row.counts.failed }}</span>{% else %}0{% endif %}</td>
129
- <td class="admin-actions">
130
- <form method="post" action="{{ redeliverUrl }}">
131
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
132
- <input type="hidden" name="{{ fields.activityId }}" value="{{ row.activityId }}" />
133
- <button type="submit">Redeliver</button>
134
- </form>
135
- </td>
136
- </tr>
137
- {% endfor %}
138
- </tbody>
139
- </table>
140
- <p class="admin-hint">Redelivering sends that activity to every follower the site has now.</p>
141
- {% else %}
142
- <p class="admin-empty">Nothing has been delivered yet.</p>
143
- {% endif %}
144
- </section>
145
- {% endblock %}
@@ -1,23 +0,0 @@
1
- {% extends "layouts/base.njk" %}
2
-
3
- {% block title %}Log in{% endblock %}
4
-
5
- {% block content %}
6
- <h1>Log in</h1>
7
-
8
- {% if error %}
9
- <p class="error">{{ error }}</p>
10
- {% endif %}
11
-
12
- <form method="post" action="{{ loginUrl }}">
13
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
14
-
15
- <label for="username">Username</label>
16
- <input id="username" name="username" type="text" autocomplete="username" value="{{ username }}" required autofocus />
17
-
18
- <label for="password">Password</label>
19
- <input id="password" name="password" type="password" autocomplete="current-password" required />
20
-
21
- <button type="submit">Log in</button>
22
- </form>
23
- {% endblock %}
@@ -1,116 +0,0 @@
1
- {# /admin/settings: the values doc-5 lists, stored in SQLite and mirrored to
2
- content/_data/site.json on every save. #}
3
- {% extends "layouts/shell.njk" %}
4
-
5
- {% block title %}Settings{% endblock %}
6
-
7
- {% block content %}
8
- <h1>Settings</h1>
9
-
10
- {% if problems.title or problems.tagline or problems.baseUrl or problems.timezone or problems.postsPerPage or problems.author or problems.actorHandle or problems.actorType %}
11
- <p class="admin-error">Nothing was saved. Fix the fields marked below and try again.</p>
12
- {% endif %}
13
-
14
- <form class="admin-settings" method="post" action="{{ settingsUrl }}">
15
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
16
-
17
- <h2>Site</h2>
18
-
19
- <label for="settings-title">Title</label>
20
- <input id="settings-title" name="{{ fields.title }}" type="text" value="{{ form.title }}" required autofocus />
21
- {% if problems.title %}<p class="admin-field-error">{{ problems.title }}</p>{% endif %}
22
-
23
- <label for="settings-tagline">Tagline</label>
24
- <input id="settings-tagline" name="{{ fields.tagline }}" type="text" value="{{ form.tagline }}" />
25
- <p class="admin-hint">One line, shown under the title and used as the feed subtitle.</p>
26
-
27
- <label for="settings-author">Author</label>
28
- <input id="settings-author" name="{{ fields.author }}" type="text" value="{{ form.author }}" />
29
- <p class="admin-hint">The name on the feeds.</p>
30
-
31
- <label for="settings-base-url">Base URL</label>
32
- <input
33
- id="settings-base-url"
34
- name="{{ fields.baseUrl }}"
35
- type="text"
36
- value="{{ form.baseUrl }}"
37
- inputmode="url"
38
- {% if baseUrlOverridden %}readonly disabled{% endif %}
39
- />
40
- {% if problems.baseUrl %}<p class="admin-field-error">{{ problems.baseUrl }}</p>{% endif %}
41
- <p class="admin-hint">
42
- In effect: <code>{{ baseUrlInEffect }}</code>. {{ baseUrlNote }}
43
- </p>
44
-
45
- <label for="settings-timezone">Time zone</label>
46
- <input id="settings-timezone" name="{{ fields.timezone }}" type="text" value="{{ form.timezone }}" required />
47
- {% if problems.timezone %}<p class="admin-field-error">{{ problems.timezone }}</p>{% endif %}
48
- <p class="admin-hint">An IANA name, such as <code>Europe/London</code> or <code>UTC</code>.</p>
49
-
50
- <label for="settings-posts-per-page">Posts per page</label>
51
- <input id="settings-posts-per-page" name="{{ fields.postsPerPage }}" type="text" inputmode="numeric" value="{{ form.postsPerPage }}" required />
52
- {% if problems.postsPerPage %}<p class="admin-field-error">{{ problems.postsPerPage }}</p>{% endif %}
53
-
54
- <h2>Federation</h2>
55
-
56
- <label for="settings-actor-handle">Actor handle</label>
57
- <input id="settings-actor-handle" name="{{ fields.actorHandle }}" type="text" value="{{ form.actorHandle }}" required />
58
- {% if problems.actorHandle %}<p class="admin-field-error">{{ problems.actorHandle }}</p>{% endif %}
59
- <p class="admin-hint">The local part of the site's handle: <code>@{{ form.actorHandle }}@…</code>.</p>
60
-
61
- <label for="settings-actor-type">Actor type</label>
62
- <select id="settings-actor-type" name="{{ fields.actorType }}">
63
- {% for type in actorTypes %}
64
- <option value="{{ type }}"{% if type == form.actorType %} selected{% endif %}>{{ type }}</option>
65
- {% endfor %}
66
- </select>
67
- {% if problems.actorType %}<p class="admin-field-error">{{ problems.actorType }}</p>{% endif %}
68
- <p class="admin-hint">Some clients hide <code>Service</code> actors from timelines; <code>Person</code> is the safer default.</p>
69
-
70
- <p class="admin-settings-buttons">
71
- <button type="submit">Save settings</button>
72
- </p>
73
- </form>
74
-
75
- {# The avatar is its own pair of forms: a file cannot travel in the
76
- urlencoded body the settings form posts, and a rejected image must not
77
- take an edit to the title down with it. #}
78
- <section class="admin-settings admin-avatar-panel">
79
- <h2>Avatar</h2>
80
-
81
- <div class="admin-avatar-current">
82
- {% if avatar %}
83
- <img class="admin-avatar admin-avatar-large" src="{{ avatar }}" alt="The site's avatar" width="96" height="96" />
84
- {% else %}
85
- <span class="admin-avatar admin-avatar-large admin-avatar-blank" aria-hidden="true"></span>
86
- {% endif %}
87
-
88
- <div class="admin-avatar-forms">
89
- <form method="post" action="{{ avatarUrl }}" enctype="multipart/form-data">
90
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
91
- <label for="settings-avatar">Image</label>
92
- <input id="settings-avatar" name="{{ avatarFields.file }}" type="file" accept="image/png,image/jpeg,image/webp,image/gif" required />
93
- <p class="admin-settings-buttons">
94
- <button type="submit">Upload avatar</button>
95
- </p>
96
- </form>
97
-
98
- {% if avatar %}
99
- <form method="post" action="{{ avatarUrl }}">
100
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
101
- <input type="hidden" name="{{ avatarFields.action }}" value="{{ avatarRemove }}" />
102
- <p class="admin-settings-buttons">
103
- <button type="submit">Remove avatar</button>
104
- </p>
105
- </form>
106
- {% endif %}
107
- </div>
108
- </div>
109
-
110
- <p class="admin-hint">
111
- A PNG, JPEG, WebP or GIF, stored with the site's other uploads. It is the
112
- picture on the site's fediverse profile, and saving or removing it tells
113
- the followers.
114
- </p>
115
- </section>
116
- {% endblock %}
@@ -1,27 +0,0 @@
1
- {% extends "layouts/base.njk" %}
2
-
3
- {% block title %}Set up{% endblock %}
4
-
5
- {% block content %}
6
- <h1>Create the first admin</h1>
7
- <p>Nobody can sign in to this site yet. Pick a username and a password.</p>
8
-
9
- {% if error %}
10
- <p class="error">{{ error }}</p>
11
- {% endif %}
12
-
13
- <form method="post" action="{{ setupUrl }}">
14
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
15
-
16
- <label for="username">Username</label>
17
- <input id="username" name="username" type="text" autocomplete="username" value="{{ username }}" required autofocus />
18
-
19
- <label for="password">Password</label>
20
- <input id="password" name="password" type="password" autocomplete="new-password" required />
21
-
22
- <label for="password_confirmation">Repeat the password</label>
23
- <input id="password_confirmation" name="password_confirmation" type="password" autocomplete="new-password" required />
24
-
25
- <button type="submit">Create admin</button>
26
- </form>
27
- {% endblock %}
@@ -1,91 +0,0 @@
1
- {# /admin/users: who can sign in, how to add one, and how to change your own
2
- password. One role, so a row has no fields to edit. #}
3
- {% extends "layouts/shell.njk" %}
4
-
5
- {% block title %}Users{% endblock %}
6
-
7
- {% block content %}
8
- <h1>Users</h1>
9
-
10
- <table class="admin-list">
11
- <thead>
12
- <tr>
13
- <th scope="col">Username</th>
14
- <th scope="col">Created</th>
15
- <th scope="col">Actions</th>
16
- </tr>
17
- </thead>
18
- <tbody>
19
- {% for entry in users %}
20
- <tr>
21
- <td>{{ entry.username }}{% if entry.you %} <span class="admin-status">(you)</span>{% endif %}</td>
22
- <td>{{ entry.createdAt | date('html') }}</td>
23
- <td class="admin-actions">
24
- {% if entry.deletable %}
25
- <form method="post" action="{{ deleteUserUrl }}">
26
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
27
- <input type="hidden" name="{{ fields.userId }}" value="{{ entry.id }}" />
28
- <button type="submit">Delete</button>
29
- </form>
30
- {% endif %}
31
- </td>
32
- </tr>
33
- {% endfor %}
34
- </tbody>
35
- </table>
36
-
37
- <form class="admin-settings" method="post" action="{{ usersUrl }}">
38
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
39
-
40
- <h2>Add a user</h2>
41
-
42
- {% if addProblems.username or addProblems.password %}
43
- <p class="admin-error">Nobody was added. Fix the fields marked below and try again.</p>
44
- {% endif %}
45
-
46
- <label for="add-username">Username</label>
47
- <input id="add-username" name="{{ fields.username }}" type="text" value="{{ addForm.username }}" required />
48
- {% if addProblems.username %}<p class="admin-field-error">{{ addProblems.username }}</p>{% endif %}
49
-
50
- <label for="add-password">Password</label>
51
- <input id="add-password" name="{{ fields.password }}" type="password" autocomplete="new-password" />
52
- {% if addProblems.password %}<p class="admin-field-error">{{ addProblems.password }}</p>{% endif %}
53
-
54
- <p class="admin-check">
55
- <input id="add-generate" name="{{ fields.generate }}" type="checkbox" value="1"{% if addForm.generate %} checked{% endif %} />
56
- <label for="add-generate">Generate one instead, and show it to me once</label>
57
- </p>
58
- <p class="admin-hint">A generated password is shown on the next page and nowhere else. Copy it before you leave.</p>
59
-
60
- <p class="admin-settings-buttons">
61
- <button type="submit">Add user</button>
62
- </p>
63
- </form>
64
-
65
- <form class="admin-settings" method="post" action="{{ changePasswordUrl }}">
66
- <input type="hidden" name="csrf_token" value="{{ csrfToken }}" />
67
-
68
- <h2>Change your password</h2>
69
-
70
- {% if passwordProblems.currentPassword or passwordProblems.newPassword %}
71
- <p class="admin-error">Your password was not changed. Fix the fields marked below and try again.</p>
72
- {% endif %}
73
-
74
- <label for="current-password">Current password</label>
75
- <input id="current-password" name="{{ fields.currentPassword }}" type="password" autocomplete="current-password" required />
76
- {% if passwordProblems.currentPassword %}<p class="admin-field-error">{{ passwordProblems.currentPassword }}</p>{% endif %}
77
-
78
- <label for="new-password">New password</label>
79
- <input id="new-password" name="{{ fields.newPassword }}" type="password" autocomplete="new-password" required />
80
- {% if passwordProblems.newPassword %}<p class="admin-field-error">{{ passwordProblems.newPassword }}</p>{% endif %}
81
-
82
- <label for="new-password-confirmation">New password again</label>
83
- <input id="new-password-confirmation" name="{{ fields.newPasswordConfirmation }}" type="password" autocomplete="new-password" required />
84
-
85
- <p class="admin-hint">Every other browser signed in as you is signed out. This one stays.</p>
86
-
87
- <p class="admin-settings-buttons">
88
- <button type="submit">Change password</button>
89
- </p>
90
- </form>
91
- {% endblock %}