@geekity/cms 0.17.0 → 0.19.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 (297) hide show
  1. package/README.md +163 -50
  2. package/admin/components/public-admin-bar.njk +3 -1
  3. package/admin/pages/documents/editor.njk +286 -158
  4. package/admin/pages/documents/list.njk +2 -0
  5. package/admin/pages/indieauth/consent.njk +4 -0
  6. package/admin/pages/settings/privacy.njk +37 -0
  7. package/admin/pages/users/apps.njk +109 -3
  8. package/admin/static/admin.css +37 -14
  9. package/dist/admin/documents.d.ts +34 -4
  10. package/dist/admin/documents.d.ts.map +1 -1
  11. package/dist/admin/documents.js +161 -23
  12. package/dist/admin/documents.js.map +1 -1
  13. package/dist/admin/editor-layout.d.ts +13 -0
  14. package/dist/admin/editor-layout.d.ts.map +1 -0
  15. package/dist/admin/editor-layout.js +61 -0
  16. package/dist/admin/editor-layout.js.map +1 -0
  17. package/dist/admin/enclosure-field.d.ts +2 -3
  18. package/dist/admin/enclosure-field.d.ts.map +1 -1
  19. package/dist/admin/enclosure-field.js +27 -7
  20. package/dist/admin/enclosure-field.js.map +1 -1
  21. package/dist/admin/index.d.ts +1 -0
  22. package/dist/admin/index.d.ts.map +1 -1
  23. package/dist/admin/index.js +1 -0
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/location-field.d.ts +27 -0
  26. package/dist/admin/location-field.d.ts.map +1 -0
  27. package/dist/admin/location-field.js +98 -0
  28. package/dist/admin/location-field.js.map +1 -0
  29. package/dist/admin/menu.d.ts.map +1 -1
  30. package/dist/admin/menu.js +1 -0
  31. package/dist/admin/menu.js.map +1 -1
  32. package/dist/admin/photo-field.d.ts +2 -3
  33. package/dist/admin/photo-field.d.ts.map +1 -1
  34. package/dist/admin/photo-field.js +4 -2
  35. package/dist/admin/photo-field.js.map +1 -1
  36. package/dist/admin/preview.d.ts.map +1 -1
  37. package/dist/admin/preview.js +18 -5
  38. package/dist/admin/preview.js.map +1 -1
  39. package/dist/admin/read-field.d.ts +22 -0
  40. package/dist/admin/read-field.d.ts.map +1 -0
  41. package/dist/admin/read-field.js +61 -0
  42. package/dist/admin/read-field.js.map +1 -0
  43. package/dist/admin/settings-page.d.ts +3 -3
  44. package/dist/admin/settings-page.js +2 -2
  45. package/dist/admin/settings-pages.d.ts +2 -2
  46. package/dist/admin/settings-pages.d.ts.map +1 -1
  47. package/dist/admin/settings-pages.js +4 -2
  48. package/dist/admin/settings-pages.js.map +1 -1
  49. package/dist/admin/settings-privacy.d.ts +3 -0
  50. package/dist/admin/settings-privacy.d.ts.map +1 -0
  51. package/dist/admin/settings-privacy.js +10 -0
  52. package/dist/admin/settings-privacy.js.map +1 -0
  53. package/dist/admin/settings-reading.js +2 -2
  54. package/dist/admin/settings-reading.js.map +1 -1
  55. package/dist/admin/settings.d.ts +18 -2
  56. package/dist/admin/settings.d.ts.map +1 -1
  57. package/dist/admin/settings.js +27 -0
  58. package/dist/admin/settings.js.map +1 -1
  59. package/dist/admin/templates.d.ts +1 -0
  60. package/dist/admin/templates.d.ts.map +1 -1
  61. package/dist/admin/templates.js +1 -0
  62. package/dist/admin/templates.js.map +1 -1
  63. package/dist/admin/uploads.d.ts.map +1 -1
  64. package/dist/admin/uploads.js +14 -1
  65. package/dist/admin/uploads.js.map +1 -1
  66. package/dist/cli.d.ts +1 -1
  67. package/dist/cli.d.ts.map +1 -1
  68. package/dist/cli.js +34 -0
  69. package/dist/cli.js.map +1 -1
  70. package/dist/comments/routes.js +2 -2
  71. package/dist/comments/routes.js.map +1 -1
  72. package/dist/contact/routes.js +2 -2
  73. package/dist/contact/routes.js.map +1 -1
  74. package/dist/content/kept-properties.d.ts +5 -0
  75. package/dist/content/kept-properties.d.ts.map +1 -0
  76. package/dist/content/kept-properties.js +12 -0
  77. package/dist/content/kept-properties.js.map +1 -0
  78. package/dist/content/location.d.ts +62 -0
  79. package/dist/content/location.d.ts.map +1 -0
  80. package/dist/content/location.js +240 -0
  81. package/dist/content/location.js.map +1 -0
  82. package/dist/content/locations.d.ts +6 -0
  83. package/dist/content/locations.d.ts.map +1 -0
  84. package/dist/content/locations.js +7 -0
  85. package/dist/content/locations.js.map +1 -0
  86. package/dist/content/metadata/gif.d.ts +3 -0
  87. package/dist/content/metadata/gif.d.ts.map +1 -0
  88. package/dist/content/metadata/gif.js +65 -0
  89. package/dist/content/metadata/gif.js.map +1 -0
  90. package/dist/content/metadata/index.d.ts +6 -0
  91. package/dist/content/metadata/index.d.ts.map +1 -0
  92. package/dist/content/metadata/index.js +24 -0
  93. package/dist/content/metadata/index.js.map +1 -0
  94. package/dist/content/metadata/isobmff.d.ts +22 -0
  95. package/dist/content/metadata/isobmff.d.ts.map +1 -0
  96. package/dist/content/metadata/isobmff.js +215 -0
  97. package/dist/content/metadata/isobmff.js.map +1 -0
  98. package/dist/content/metadata/jpeg.d.ts +3 -0
  99. package/dist/content/metadata/jpeg.d.ts.map +1 -0
  100. package/dist/content/metadata/jpeg.js +117 -0
  101. package/dist/content/metadata/jpeg.js.map +1 -0
  102. package/dist/content/metadata/png.d.ts +3 -0
  103. package/dist/content/metadata/png.d.ts.map +1 -0
  104. package/dist/content/metadata/png.js +74 -0
  105. package/dist/content/metadata/png.js.map +1 -0
  106. package/dist/content/metadata/shared.d.ts +17 -0
  107. package/dist/content/metadata/shared.d.ts.map +1 -0
  108. package/dist/content/metadata/shared.js +42 -0
  109. package/dist/content/metadata/shared.js.map +1 -0
  110. package/dist/content/metadata/sweep.d.ts +14 -0
  111. package/dist/content/metadata/sweep.d.ts.map +1 -0
  112. package/dist/content/metadata/sweep.js +54 -0
  113. package/dist/content/metadata/sweep.js.map +1 -0
  114. package/dist/content/metadata/tiff.d.ts +7 -0
  115. package/dist/content/metadata/tiff.d.ts.map +1 -0
  116. package/dist/content/metadata/tiff.js +56 -0
  117. package/dist/content/metadata/tiff.js.map +1 -0
  118. package/dist/content/metadata/webp.d.ts +3 -0
  119. package/dist/content/metadata/webp.d.ts.map +1 -0
  120. package/dist/content/metadata/webp.js +67 -0
  121. package/dist/content/metadata/webp.js.map +1 -0
  122. package/dist/content/permalink-file.d.ts +7 -0
  123. package/dist/content/permalink-file.d.ts.map +1 -0
  124. package/dist/content/permalink-file.js +77 -0
  125. package/dist/content/permalink-file.js.map +1 -0
  126. package/dist/content/post-type.d.ts +4 -2
  127. package/dist/content/post-type.d.ts.map +1 -1
  128. package/dist/content/post-type.js +9 -1
  129. package/dist/content/post-type.js.map +1 -1
  130. package/dist/content/read.d.ts +22 -0
  131. package/dist/content/read.d.ts.map +1 -0
  132. package/dist/content/read.js +67 -0
  133. package/dist/content/read.js.map +1 -0
  134. package/dist/content/store.d.ts +4 -4
  135. package/dist/content/store.d.ts.map +1 -1
  136. package/dist/content/store.js +19 -39
  137. package/dist/content/store.js.map +1 -1
  138. package/dist/content/sync.d.ts.map +1 -1
  139. package/dist/content/sync.js +3 -13
  140. package/dist/content/sync.js.map +1 -1
  141. package/dist/content/visibility.d.ts +11 -0
  142. package/dist/content/visibility.d.ts.map +1 -0
  143. package/dist/content/visibility.js +14 -0
  144. package/dist/content/visibility.js.map +1 -0
  145. package/dist/federation/article.d.ts +4 -3
  146. package/dist/federation/article.d.ts.map +1 -1
  147. package/dist/federation/article.js +66 -20
  148. package/dist/federation/article.js.map +1 -1
  149. package/dist/federation/citations.d.ts +7 -6
  150. package/dist/federation/citations.d.ts.map +1 -1
  151. package/dist/federation/citations.js +44 -28
  152. package/dist/federation/citations.js.map +1 -1
  153. package/dist/federation/delivery.d.ts +3 -1
  154. package/dist/federation/delivery.d.ts.map +1 -1
  155. package/dist/federation/delivery.js +29 -21
  156. package/dist/federation/delivery.js.map +1 -1
  157. package/dist/federation/mount.d.ts.map +1 -1
  158. package/dist/federation/mount.js +3 -1
  159. package/dist/federation/mount.js.map +1 -1
  160. package/dist/index.d.ts +6 -5
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +5 -1
  163. package/dist/index.js.map +1 -1
  164. package/dist/indexnow.js +2 -2
  165. package/dist/indexnow.js.map +1 -1
  166. package/dist/indieauth/activity-log.d.ts +2 -0
  167. package/dist/indieauth/activity-log.d.ts.map +1 -1
  168. package/dist/indieauth/activity-log.js +12 -2
  169. package/dist/indieauth/activity-log.js.map +1 -1
  170. package/dist/indieauth/app-activity.js +5 -1
  171. package/dist/indieauth/app-activity.js.map +1 -1
  172. package/dist/indieauth/bearer.d.ts +10 -6
  173. package/dist/indieauth/bearer.d.ts.map +1 -1
  174. package/dist/indieauth/bearer.js +28 -25
  175. package/dist/indieauth/bearer.js.map +1 -1
  176. package/dist/indieauth/client-id.d.ts +10 -0
  177. package/dist/indieauth/client-id.d.ts.map +1 -0
  178. package/dist/indieauth/client-id.js +30 -0
  179. package/dist/indieauth/client-id.js.map +1 -0
  180. package/dist/indieauth/connected-apps.d.ts +4 -0
  181. package/dist/indieauth/connected-apps.d.ts.map +1 -1
  182. package/dist/indieauth/connected-apps.js +149 -20
  183. package/dist/indieauth/connected-apps.js.map +1 -1
  184. package/dist/indieauth/consent.d.ts.map +1 -1
  185. package/dist/indieauth/consent.js +5 -1
  186. package/dist/indieauth/consent.js.map +1 -1
  187. package/dist/indieauth/grants.d.ts +2 -7
  188. package/dist/indieauth/grants.d.ts.map +1 -1
  189. package/dist/indieauth/grants.js.map +1 -1
  190. package/dist/indieauth/redeem.d.ts.map +1 -1
  191. package/dist/indieauth/redeem.js +10 -5
  192. package/dist/indieauth/redeem.js.map +1 -1
  193. package/dist/indieauth/request.d.ts +8 -4
  194. package/dist/indieauth/request.d.ts.map +1 -1
  195. package/dist/indieauth/request.js +29 -30
  196. package/dist/indieauth/request.js.map +1 -1
  197. package/dist/indieauth/token.js +2 -2
  198. package/dist/indieauth/token.js.map +1 -1
  199. package/dist/indieauth/tokens.d.ts +28 -7
  200. package/dist/indieauth/tokens.d.ts.map +1 -1
  201. package/dist/indieauth/tokens.js +26 -5
  202. package/dist/indieauth/tokens.js.map +1 -1
  203. package/dist/micropub/create.d.ts +26 -0
  204. package/dist/micropub/create.d.ts.map +1 -1
  205. package/dist/micropub/create.js +158 -13
  206. package/dist/micropub/create.js.map +1 -1
  207. package/dist/micropub/endpoint.d.ts +4 -5
  208. package/dist/micropub/endpoint.d.ts.map +1 -1
  209. package/dist/micropub/endpoint.js +83 -25
  210. package/dist/micropub/endpoint.js.map +1 -1
  211. package/dist/micropub/media.d.ts +6 -2
  212. package/dist/micropub/media.d.ts.map +1 -1
  213. package/dist/micropub/media.js +43 -37
  214. package/dist/micropub/media.js.map +1 -1
  215. package/dist/micropub/update.d.ts +13 -3
  216. package/dist/micropub/update.d.ts.map +1 -1
  217. package/dist/micropub/update.js +60 -7
  218. package/dist/micropub/update.js.map +1 -1
  219. package/dist/notify.d.ts.map +1 -1
  220. package/dist/notify.js +2 -5
  221. package/dist/notify.js.map +1 -1
  222. package/dist/web/absolute-urls.d.ts +2 -0
  223. package/dist/web/absolute-urls.d.ts.map +1 -0
  224. package/dist/web/absolute-urls.js +22 -0
  225. package/dist/web/absolute-urls.js.map +1 -0
  226. package/dist/web/admin-bar.d.ts.map +1 -1
  227. package/dist/web/admin-bar.js +25 -0
  228. package/dist/web/admin-bar.js.map +1 -1
  229. package/dist/web/context.d.ts +29 -1
  230. package/dist/web/context.d.ts.map +1 -1
  231. package/dist/web/context.js +33 -0
  232. package/dist/web/context.js.map +1 -1
  233. package/dist/web/conversation.d.ts.map +1 -1
  234. package/dist/web/conversation.js +5 -4
  235. package/dist/web/conversation.js.map +1 -1
  236. package/dist/web/documents.d.ts +34 -10
  237. package/dist/web/documents.d.ts.map +1 -1
  238. package/dist/web/documents.js +41 -15
  239. package/dist/web/documents.js.map +1 -1
  240. package/dist/web/feed-item.d.ts +25 -6
  241. package/dist/web/feed-item.d.ts.map +1 -1
  242. package/dist/web/feed-item.js +31 -7
  243. package/dist/web/feed-item.js.map +1 -1
  244. package/dist/web/feed-json.d.ts +3 -1
  245. package/dist/web/feed-json.d.ts.map +1 -1
  246. package/dist/web/feed-json.js +2 -0
  247. package/dist/web/feed-json.js.map +1 -1
  248. package/dist/web/feed-source.d.ts +6 -0
  249. package/dist/web/feed-source.d.ts.map +1 -1
  250. package/dist/web/feed-source.js.map +1 -1
  251. package/dist/web/feeds.d.ts.map +1 -1
  252. package/dist/web/feeds.js +2 -0
  253. package/dist/web/feeds.js.map +1 -1
  254. package/dist/web/html-attributes.d.ts +3 -0
  255. package/dist/web/html-attributes.d.ts.map +1 -0
  256. package/dist/web/html-attributes.js +15 -0
  257. package/dist/web/html-attributes.js.map +1 -0
  258. package/dist/web/index.d.ts +1 -1
  259. package/dist/web/index.d.ts.map +1 -1
  260. package/dist/web/index.js +1 -1
  261. package/dist/web/index.js.map +1 -1
  262. package/dist/web/negotiate.d.ts +2 -0
  263. package/dist/web/negotiate.d.ts.map +1 -1
  264. package/dist/web/negotiate.js +2 -1
  265. package/dist/web/negotiate.js.map +1 -1
  266. package/dist/web/render.d.ts +13 -4
  267. package/dist/web/render.d.ts.map +1 -1
  268. package/dist/web/render.js +25 -12
  269. package/dist/web/render.js.map +1 -1
  270. package/dist/web/routes.d.ts.map +1 -1
  271. package/dist/web/routes.js +26 -11
  272. package/dist/web/routes.js.map +1 -1
  273. package/dist/webmention/fetch-public.d.ts +3 -1
  274. package/dist/webmention/fetch-public.d.ts.map +1 -1
  275. package/dist/webmention/fetch-public.js +17 -11
  276. package/dist/webmention/fetch-public.js.map +1 -1
  277. package/dist/webmention/reply-context.d.ts +18 -5
  278. package/dist/webmention/reply-context.d.ts.map +1 -1
  279. package/dist/webmention/reply-context.js +118 -19
  280. package/dist/webmention/reply-context.js.map +1 -1
  281. package/dist/webmention/reply-contexts.d.ts +17 -14
  282. package/dist/webmention/reply-contexts.d.ts.map +1 -1
  283. package/dist/webmention/reply-contexts.js +32 -21
  284. package/dist/webmention/reply-contexts.js.map +1 -1
  285. package/dist/webmention/service.d.ts.map +1 -1
  286. package/dist/webmention/service.js +7 -2
  287. package/dist/webmention/service.js.map +1 -1
  288. package/package.json +9 -9
  289. package/themes/default/README.md +45 -7
  290. package/themes/default/layouts/base.njk +2 -0
  291. package/themes/default/layouts/post.njk +12 -7
  292. package/themes/default/partials/citations.njk +12 -3
  293. package/themes/default/partials/cited-page.njk +41 -0
  294. package/themes/default/partials/location.njk +12 -0
  295. package/themes/default/partials/post-list.njk +10 -5
  296. package/themes/default/partials/read.njk +5 -0
  297. package/themes/default/partials/reply-context.njk +2 -9
@@ -1,4 +1,5 @@
1
1
  import { CITATION_PROPERTIES } from '../content/citation.js';
2
+ import { READ_OF_FRONT_MATTER_KEY, READ_STATUS_FRONT_MATTER_KEY } from '../content/read.js';
2
3
  import { renderMarkdown } from '../content/markdown.js';
3
4
  import { defaultPermalink, slugify } from '../content/slug.js';
4
5
  import { calendarDayIn, toUtcInstant } from '../content/time.js';
@@ -6,6 +7,7 @@ import { normalizeBody } from '../content/writer.js';
6
7
  import { authorContext } from '../web/authors.js';
7
8
  import { documentContext } from '../web/context.js';
8
9
  import { findUserById, listUsers } from './accounts.js';
10
+ import { READ_FIELDS, resolveRead, submittedReadOfForm } from './read-field.js';
9
11
  import { TEMPLATES } from '../web/render.js';
10
12
  import { splitTags } from './documents.js';
11
13
  import { readSiteSettings } from './settings.js';
@@ -70,11 +72,13 @@ function previewDocument(c, input) {
70
72
  ...(text(body['in-reply-to']).trim() === ''
71
73
  ? {}
72
74
  : { inReplyTo: text(body['in-reply-to']).trim() }),
73
- // What the post likes, reposts or bookmarks, as the editor would write it.
74
- extra: Object.fromEntries(CITATION_PROPERTIES.flatMap((property) => {
75
- const cited = text(body[property]).trim();
76
- return cited === '' ? [] : [[property, cited]];
77
- })),
75
+ extra: {
76
+ ...Object.fromEntries(CITATION_PROPERTIES.flatMap((property) => {
77
+ const cited = text(body[property]).trim();
78
+ return cited === '' ? [] : [[property, cited]];
79
+ })),
80
+ ...previewRead(body),
81
+ },
78
82
  body: markdown,
79
83
  html: renderMarkdown(markdown),
80
84
  // A preview is not a version of anything, so it has no hash to be
@@ -82,6 +86,15 @@ function previewDocument(c, input) {
82
86
  hash: '',
83
87
  };
84
88
  }
89
+ function previewRead(body) {
90
+ const resolved = resolveRead(text(body[READ_FIELDS.status]).trim(), submittedReadOfForm(body));
91
+ if (!('read' in resolved) || resolved.read === undefined)
92
+ return {};
93
+ return {
94
+ [READ_OF_FRONT_MATTER_KEY]: resolved.read.of,
95
+ [READ_STATUS_FRONT_MATTER_KEY]: resolved.read.status,
96
+ };
97
+ }
85
98
  /** The permalink to show: the one the form carried, or the one the slug implies. */
86
99
  function permalinkFor(input) {
87
100
  if (input.submitted !== '')
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/admin/preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/admin/preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Read, ReadOf } from '../content/read.ts';
2
+ import type { FieldError } from './editor-layout.ts';
3
+ export interface ReadOfForm {
4
+ name: string;
5
+ author: string;
6
+ uid: string;
7
+ url: string;
8
+ }
9
+ export declare const READ_FIELDS: {
10
+ readonly status: 'read-status';
11
+ readonly name: 'read-of-name';
12
+ readonly author: 'read-of-author';
13
+ readonly uid: 'read-of-uid';
14
+ readonly url: 'read-of-url';
15
+ };
16
+ export declare const BLANK_READ_OF_FORM: ReadOfForm;
17
+ export declare function readOfForm(of: ReadOf | undefined): ReadOfForm;
18
+ export declare function submittedReadOfForm(body: Record<string, unknown>): ReadOfForm;
19
+ export declare function resolveRead(status: string, of: ReadOfForm): {
20
+ read: Read | undefined;
21
+ } | FieldError;
22
+ //# sourceMappingURL=read-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-field.d.ts","sourceRoot":"","sources":["../../src/admin/read-field.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,WAAW;aACtB,MAAM,EAAE,aAAa;aACrB,IAAI,EAAE,cAAc;aACpB,MAAM,EAAE,gBAAgB;aACxB,GAAG,EAAE,aAAa;aAClB,GAAG,EAAE,aAAa;CACV,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,UAAuD,CAAC;AAEzF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAO7D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAQ7E;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,UAAU,GACb;IAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,GAAG,UAAU,CAgCzC"}
@@ -0,0 +1,61 @@
1
+ import { isWebUrl } from '../content/enclosure.js';
2
+ import { isReadStatus, READ_STATUSES } from '../content/read.js';
3
+ export const READ_FIELDS = {
4
+ status: 'read-status',
5
+ name: 'read-of-name',
6
+ author: 'read-of-author',
7
+ uid: 'read-of-uid',
8
+ url: 'read-of-url',
9
+ };
10
+ export const BLANK_READ_OF_FORM = { name: '', author: '', uid: '', url: '' };
11
+ export function readOfForm(of) {
12
+ return {
13
+ name: of?.name ?? '',
14
+ author: of?.author ?? '',
15
+ uid: of?.uid ?? '',
16
+ url: of?.url ?? '',
17
+ };
18
+ }
19
+ export function submittedReadOfForm(body) {
20
+ const field = (name) => (typeof body[name] === 'string' ? body[name] : '').trim();
21
+ return {
22
+ name: field(READ_FIELDS.name),
23
+ author: field(READ_FIELDS.author),
24
+ uid: field(READ_FIELDS.uid),
25
+ url: field(READ_FIELDS.url),
26
+ };
27
+ }
28
+ export function resolveRead(status, of) {
29
+ const filled = Object.values(of).some((value) => value !== '');
30
+ if (status === '' && !filled)
31
+ return { read: undefined };
32
+ if (status !== '' && !isReadStatus(status)) {
33
+ return {
34
+ error: `A read status is ${READ_STATUSES.join(', ')}, not ${status}.`,
35
+ field: 'editor-read-status',
36
+ };
37
+ }
38
+ if (of.name === '') {
39
+ return { error: 'A read needs the title of what was read.', field: 'editor-read-of-name' };
40
+ }
41
+ if (!isReadStatus(status)) {
42
+ return {
43
+ error: 'A read needs a read status: want to read, currently reading or finished.',
44
+ field: 'editor-read-status',
45
+ };
46
+ }
47
+ if (of.url !== '' && !isWebUrl(of.url)) {
48
+ return {
49
+ error: 'The address of what was read has to be a web address, like https://example.com/a-book/.',
50
+ field: 'editor-read-of-url',
51
+ };
52
+ }
53
+ const word = (value) => (value === '' ? undefined : value);
54
+ return {
55
+ read: {
56
+ status,
57
+ of: { name: of.name, author: word(of.author), uid: word(of.uid), url: word(of.url) },
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=read-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-field.js","sourceRoot":"","sources":["../../src/admin/read-field.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * What every settings page is made of.
3
3
  *
4
- * The settings used to be one form with twelve headings. They are six pages
5
- * now — General, Reading, Permalinks, Discussion and Email under Settings, and
4
+ * The settings used to be one form with twelve headings. They are seven pages
5
+ * now — General, Reading, Permalinks, Discussion, Email and Privacy under Settings, and
6
6
  * Federation under its own section (TASK-109) — and this is what they have in
7
7
  * common: a description of the page, and the one pair of routes that turns it
8
8
  * into a screen you can read and a form you can save. A page module describes
@@ -38,7 +38,7 @@ export interface SettingsPage {
38
38
  /**
39
39
  * The section it is under, when it is not Settings.
40
40
  *
41
- * Five of the six are Settings' own children. Federation's is a child of
41
+ * Six of the seven are Settings' own children. Federation's is a child of
42
42
  * the Federation section instead (TASK-109): what a settings page is has
43
43
  * nothing to do with where the menu files it, so the page says where it is
44
44
  * and the rest of this module carries on as before.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * What every settings page is made of.
3
3
  *
4
- * The settings used to be one form with twelve headings. They are six pages
5
- * now — General, Reading, Permalinks, Discussion and Email under Settings, and
4
+ * The settings used to be one form with twelve headings. They are seven pages
5
+ * now — General, Reading, Permalinks, Discussion, Email and Privacy under Settings, and
6
6
  * Federation under its own section (TASK-109) — and this is what they have in
7
7
  * common: a description of the page, and the one pair of routes that turns it
8
8
  * into a screen you can read and a form you can save. A page module describes
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * This module is the list. What a page is made of is `settings-page.ts`, what
5
5
  * each page carries is its own module, and what a setting means is
6
- * `settings.ts`; the only thing that has to know all six exists is the mount
6
+ * `settings.ts`; the only thing that has to know all seven exists is the mount
7
7
  * and the menu.
8
8
  *
9
9
  * The order is the order the menu shows them, General first: the Settings
10
10
  * heading lands on its first child, and General is `/admin/settings` itself.
11
11
  *
12
- * Five of the six are Settings' own children. Federation's is a settings page
12
+ * Six of the seven are Settings' own children. Federation's is a settings page
13
13
  * in every other respect — the same fields, the same save, the same refusals —
14
14
  * but the menu files it under the Federation section, beside the followers it
15
15
  * is about (TASK-109), so it is in {@link ALL_SETTINGS_PAGES} and not in
@@ -1 +1 @@
1
- {"version":3,"file":"settings-pages.d.ts","sourceRoot":"","sources":["../../src/admin/settings-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI7E,8EAA8E;AAC9E,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAMjD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,SAAS,YAAY,EAA6C,CAAC;AAEpG,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAExF"}
1
+ {"version":3,"file":"settings-pages.d.ts","sourceRoot":"","sources":["../../src/admin/settings-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAK7E,8EAA8E;AAC9E,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAOjD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,SAAS,YAAY,EAA6C,CAAC;AAEpG,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAExF"}
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * This module is the list. What a page is made of is `settings-page.ts`, what
5
5
  * each page carries is its own module, and what a setting means is
6
- * `settings.ts`; the only thing that has to know all six exists is the mount
6
+ * `settings.ts`; the only thing that has to know all seven exists is the mount
7
7
  * and the menu.
8
8
  *
9
9
  * The order is the order the menu shows them, General first: the Settings
10
10
  * heading lands on its first child, and General is `/admin/settings` itself.
11
11
  *
12
- * Five of the six are Settings' own children. Federation's is a settings page
12
+ * Six of the seven are Settings' own children. Federation's is a settings page
13
13
  * in every other respect — the same fields, the same save, the same refusals —
14
14
  * but the menu files it under the Federation section, beside the followers it
15
15
  * is about (TASK-109), so it is in {@link ALL_SETTINGS_PAGES} and not in
@@ -24,6 +24,7 @@ import { FEDERATION_SETTINGS } from './settings-federation.js';
24
24
  import { GENERAL_SETTINGS } from './settings-general.js';
25
25
  import { mountSettingsPage } from './settings-page.js';
26
26
  import { PERMALINKS_SETTINGS } from './settings-permalinks.js';
27
+ import { PRIVACY_SETTINGS } from './settings-privacy.js';
27
28
  import { READING_SETTINGS } from './settings-reading.js';
28
29
  /** The settings pages the Settings menu lists, in the order it lists them. */
29
30
  export const SETTINGS_PAGES = [
@@ -32,6 +33,7 @@ export const SETTINGS_PAGES = [
32
33
  PERMALINKS_SETTINGS,
33
34
  DISCUSSION_SETTINGS,
34
35
  EMAIL_SETTINGS,
36
+ PRIVACY_SETTINGS,
35
37
  ];
36
38
  /** Every settings page, wherever the menu files it. */
37
39
  export const ALL_SETTINGS_PAGES = [...SETTINGS_PAGES, FEDERATION_SETTINGS];
@@ -1 +1 @@
1
- {"version":3,"file":"settings-pages.js","sourceRoot":"","sources":["../../src/admin/settings-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,gBAAgB;IAChB,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;CACf,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAA4B,CAAC,GAAG,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAEpG,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,OAA6B;IAChF,KAAK,MAAM,IAAI,IAAI,kBAAkB;QAAE,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"settings-pages.js","sourceRoot":"","sources":["../../src/admin/settings-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,gBAAgB;IAChB,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;IACd,gBAAgB;CACjB,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAA4B,CAAC,GAAG,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAEpG,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,OAA6B;IAChF,KAAK,MAAM,IAAI,IAAI,kBAAkB;QAAE,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SettingsPage } from './settings-page.ts';
2
+ export declare const PRIVACY_SETTINGS: SettingsPage;
3
+ //# sourceMappingURL=settings-privacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-privacy.d.ts","sourceRoot":"","sources":["../../src/admin/settings-privacy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,eAAO,MAAM,gBAAgB,EAAE,YAM9B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { settingsPagePath } from './settings-page.js';
2
+ import { ADMIN_TEMPLATES } from './templates.js';
3
+ export const PRIVACY_SETTINGS = {
4
+ child: 'privacy',
5
+ label: 'Privacy',
6
+ path: settingsPagePath('privacy'),
7
+ template: ADMIN_TEMPLATES.settingsPrivacy,
8
+ fields: ['locationSharing'],
9
+ };
10
+ //# sourceMappingURL=settings-privacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-privacy.js","sourceRoot":"","sources":["../../src/admin/settings-privacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;IACjC,QAAQ,EAAE,eAAe,CAAC,eAAe;IACzC,MAAM,EAAE,CAAC,iBAAiB,CAAC;CAC5B,CAAC"}
@@ -8,7 +8,7 @@
8
8
  * menus there are to edit comes from the active theme, which is not something
9
9
  * a page of fields can be.
10
10
  */
11
- import { isPublicDocument } from '../web/documents.js';
11
+ import { isServed } from '../web/documents.js';
12
12
  import { settingsPagePath } from './settings-page.js';
13
13
  import { ADMIN_TEMPLATES } from './templates.js';
14
14
  /** The published pages, by title, as the two picks offer them. */
@@ -16,7 +16,7 @@ export function pageChoices(c) {
16
16
  const now = c.var.store.now();
17
17
  return c.var.store
18
18
  .listAll({ type: 'page', draft: false, trashed: false, scheduled: false })
19
- .filter((document) => isPublicDocument(document, now))
19
+ .filter((document) => isServed(document, now))
20
20
  .map((document) => ({ slug: document.slug, title: document.title }))
21
21
  .sort((a, b) => a.title.localeCompare(b.title));
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings-reading.js","sourceRoot":"","sources":["../../src/admin/settings-reading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAUjD,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,CAAsB;IAChD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAE9B,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK;SACf,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;SACzE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;IACjC,QAAQ,EAAE,eAAe,CAAC,eAAe;IACzC,MAAM,EAAE;QACN,UAAU;QACV,WAAW;QACX,cAAc;QACd,cAAc;QACd,kBAAkB;QAClB,qBAAqB;QACrB,YAAY;QACZ,qBAAqB;QACrB,sBAAsB;QACtB,sBAAsB;QACtB,aAAa;QACb,SAAS;QACT,UAAU;KACX;IAED,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE,CACxC,IAAI,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAEjE,OAAO;YACL,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3C,gBAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC9C,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"settings-reading.js","sourceRoot":"","sources":["../../src/admin/settings-reading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAUjD,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,CAAsB;IAChD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAE9B,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK;SACf,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;SACzE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;SAC7C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;IACjC,QAAQ,EAAE,eAAe,CAAC,eAAe;IACzC,MAAM,EAAE;QACN,UAAU;QACV,WAAW;QACX,cAAc;QACd,cAAc;QACd,kBAAkB;QAClB,qBAAqB;QACrB,YAAY;QACZ,qBAAqB;QACrB,sBAAsB;QACtB,sBAAsB;QACtB,aAAa;QACb,SAAS;QACT,UAAU;KACX;IAED,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE,CACxC,IAAI,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAEjE,OAAO;YACL,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3C,gBAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC9C,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { RetentionPolicy } from '../privacy/policy.ts';
2
2
  import type { ResolvedConfig } from '../config.ts';
3
+ import type { LocationSharing } from '../content/location.ts';
3
4
  import type { MailProviderName } from '../mail/provider.ts';
4
5
  import type { UpdatePeriod } from '../web/feed-source.ts';
5
6
  import type { CreativeCommonsKey } from '../web/license.ts';
@@ -335,6 +336,20 @@ export interface SiteSettings {
335
336
  * recorded, so the list answers every old URL in one hop.
336
337
  */
337
338
  taxonomyRedirects: readonly TaxonomyRedirect[];
339
+ /**
340
+ * What the site publishes of a post's location (TASK-223, decision-29):
341
+ * nothing, the place's words, or the coordinates too. `none` by default,
342
+ * because the location is personal data and the author chooses to share it.
343
+ * Chosen on Settings > Privacy.
344
+ */
345
+ locationSharing: LocationSharing;
346
+ /**
347
+ * The IndieAuth apps the owner lets sign in without PKCE (TASK-225), each a
348
+ * client_id. Empty, the default, means every app needs PKCE, as the
349
+ * IndieAuth spec says. Not a field of the settings form: Users > Connected
350
+ * apps edits it, and a settings save carries it, like the menus.
351
+ */
352
+ clientsWithoutPkce: readonly string[];
338
353
  }
339
354
  /** What a site says about one Content-Signal: yes, no, or nothing. */
340
355
  export type ContentSignalChoice = '' | 'yes' | 'no';
@@ -348,7 +363,7 @@ export declare function robotsPolicyOf(settings: SiteSettings): RobotsPolicy;
348
363
  * archive renames, which the taxonomy screens write, and the menus, which the
349
364
  * Navigation screen writes. See {@link CarriedSettings}.
350
365
  */
351
- export type SettingsField = Exclude<keyof SiteSettings, 'taxonomyRedirects' | 'menus' | 'indexNowKey'>;
366
+ export type SettingsField = Exclude<keyof SiteSettings, 'taxonomyRedirects' | 'menus' | 'indexNowKey' | 'clientsWithoutPkce'>;
352
367
  /**
353
368
  * The settings no settings form carries, as a save takes them from the file.
354
369
  *
@@ -357,7 +372,7 @@ export type SettingsField = Exclude<keyof SiteSettings, 'taxonomyRedirects' | 'm
357
372
  * inside the write rather than off the form — which is what makes a menu
358
373
  * edited while the settings page was open survive the save.
359
374
  */
360
- export type CarriedSettings = Partial<Pick<SiteSettings, 'taxonomyRedirects' | 'menus' | 'indexNowKey'>>;
375
+ export type CarriedSettings = Partial<Pick<SiteSettings, 'taxonomyRedirects' | 'menus' | 'indexNowKey' | 'clientsWithoutPkce'>>;
361
376
  /**
362
377
  * What a site is worth before anybody has said otherwise.
363
378
  *
@@ -411,6 +426,7 @@ export declare const SETTINGS_FIELDS: {
411
426
  readonly securityLanguages: 'security_languages';
412
427
  readonly relays: 'relays';
413
428
  readonly wordpressActivityPub: 'wordpress_activitypub';
429
+ readonly locationSharing: 'location_sharing';
414
430
  };
415
431
  /** A submitted settings form, before it is known to be valid. */
416
432
  export type SettingsForm = Record<SettingsField, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/admin/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/admin/settings.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,9 @@ import path from 'node:path';
3
3
  import { DEFAULT_COMMENTS_CLOSE_AFTER_DAYS } from '../comments/policy.js';
4
4
  import { readFileIfPresentSync, updateFileAtomically, writeFileAtomicallySync, } from '../files/atomic.js';
5
5
  import { parseIconSetting } from '../images/icons.js';
6
+ import { isLocationSharing, LOCATION_SHARING } from '../content/location.js';
6
7
  import { sourceFile } from '../images/paths.js';
8
+ import { clientIdentifier } from '../indieauth/client-id.js';
7
9
  import { MAIL_PROVIDERS } from '../mail/provider.js';
8
10
  import { SITE_DATA_FILE } from '../web/context.js';
9
11
  import { DEFAULT_FEED_CADENCE, isUpdatePeriod, UPDATE_PERIODS } from '../web/feed-source.js';
@@ -122,8 +124,10 @@ export const DEFAULT_SITE_SETTINGS = {
122
124
  securityLanguages: '',
123
125
  relays: [],
124
126
  wordpressActivityPub: false,
127
+ locationSharing: 'none',
125
128
  menus: {},
126
129
  taxonomyRedirects: [],
130
+ clientsWithoutPkce: [],
127
131
  };
128
132
  /** The form field each setting is submitted under. */
129
133
  export const SETTINGS_FIELDS = {
@@ -171,6 +175,7 @@ export const SETTINGS_FIELDS = {
171
175
  securityLanguages: 'security_languages',
172
176
  relays: 'relays',
173
177
  wordpressActivityPub: 'wordpress_activitypub',
178
+ locationSharing: 'location_sharing',
174
179
  };
175
180
  /**
176
181
  * A site's settings, as its `content/_data/site.json` says them right now.
@@ -316,6 +321,9 @@ export function settingsFromSiteJson(file) {
316
321
  ...(typeof file['wordpressActivityPub'] === 'boolean'
317
322
  ? { wordpressActivityPub: file['wordpressActivityPub'] }
318
323
  : {}),
324
+ ...(isLocationSharing(file['locationSharing'])
325
+ ? { locationSharing: file['locationSharing'] }
326
+ : {}),
319
327
  // Every menu the site holds, whether or not the theme in use renders it.
320
328
  // The `navigation` key the one menu used to live under is not read at all:
321
329
  // menus were renamed rather than migrated (TASK-107).
@@ -326,10 +334,17 @@ export function settingsFromSiteJson(file) {
326
334
  ...(Array.isArray(file['taxonomyRedirects'])
327
335
  ? { taxonomyRedirects: taxonomyRedirectsOf(file['taxonomyRedirects']) }
328
336
  : {}),
337
+ ...(Array.isArray(file['clientsWithoutPkce'])
338
+ ? { clientsWithoutPkce: clientsWithoutPkceOf(file['clientsWithoutPkce']) }
339
+ : {}),
329
340
  ...(Number.isInteger(postsPerPage) && postsPerPage > 0 ? { postsPerPage } : {}),
330
341
  ...(typeof file['url'] === 'string' ? { baseUrl: file['url'] } : {}),
331
342
  };
332
343
  }
344
+ function clientsWithoutPkceOf(entries) {
345
+ const valid = entries.filter((entry) => typeof entry === 'string' && clientIdentifier(entry) !== undefined);
346
+ return [...new Set(valid)];
347
+ }
333
348
  /** The two archive bases the settings hold, as the URL builders want them. */
334
349
  export function taxonomyBasesFromSettings(settings) {
335
350
  return { tag: settings.tagBase, category: settings.categoryBase };
@@ -385,6 +400,7 @@ export function siteJsonFor(settings, existing = {}) {
385
400
  securityPolicy: settings.securityPolicy,
386
401
  securityLanguages: settings.securityLanguages,
387
402
  relays: [...settings.relays],
403
+ locationSharing: settings.locationSharing,
388
404
  // Every menu the site holds, written whole. A settings page never has
389
405
  // them off its own form — it reads them out of the file inside the write
390
406
  // and hands them straight back — so the one screen that models them is the
@@ -437,6 +453,11 @@ export function siteJsonFor(settings, existing = {}) {
437
453
  file['indexNowKey'] = settings.indexNowKey;
438
454
  else
439
455
  delete file['indexNowKey'];
456
+ if (settings.clientsWithoutPkce.length > 0) {
457
+ file['clientsWithoutPkce'] = [...settings.clientsWithoutPkce];
458
+ }
459
+ else
460
+ delete file['clientsWithoutPkce'];
440
461
  return file;
441
462
  }
442
463
  /** The absolute path of one site's `content/_data/site.json`. */
@@ -727,6 +748,9 @@ const FIELD_CHECKS = {
727
748
  // A checkbox is either submitted or not, so there is nothing a person could
728
749
  // get wrong about it.
729
750
  wordpressActivityPub: () => undefined,
751
+ locationSharing: (form) => isLocationSharing(form.locationSharing)
752
+ ? undefined
753
+ : `Location sharing is one of ${LOCATION_SHARING.join(', ')}.`,
730
754
  // The two archive bases are checked as a pair, because two of the rules —
731
755
  // that they differ, and that neither takes a path the site already answers
732
756
  // on — are about the pair rather than either one. They are on one page for
@@ -807,6 +831,7 @@ export function settingsFromForm(form, carried = {}) {
807
831
  return {
808
832
  taxonomyRedirects: carried.taxonomyRedirects ?? DEFAULT_SITE_SETTINGS.taxonomyRedirects,
809
833
  menus: carried.menus ?? DEFAULT_SITE_SETTINGS.menus,
834
+ clientsWithoutPkce: carried.clientsWithoutPkce ?? DEFAULT_SITE_SETTINGS.clientsWithoutPkce,
810
835
  title: form.title.trim(),
811
836
  tagline: form.tagline.trim(),
812
837
  baseUrl: normalizeBaseUrl(form.baseUrl) ?? '',
@@ -871,6 +896,7 @@ export function settingsFromForm(form, carried = {}) {
871
896
  securityLanguages: normalizeLanguageList(form.securityLanguages) ?? '',
872
897
  relays: relayList(form.relays),
873
898
  wordpressActivityPub: form.wordpressActivityPub !== '',
899
+ locationSharing: isLocationSharing(form.locationSharing) ? form.locationSharing : 'none',
874
900
  };
875
901
  }
876
902
  function licenseFromForm(form) {
@@ -931,6 +957,7 @@ export function formFromSettings(settings) {
931
957
  securityLanguages: settings.securityLanguages,
932
958
  relays: settings.relays.join('\n'),
933
959
  wordpressActivityPub: settings.wordpressActivityPub ? '1' : '',
960
+ locationSharing: settings.locationSharing,
934
961
  };
935
962
  }
936
963
  /**