@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.
- package/README.md +163 -50
- package/admin/components/public-admin-bar.njk +3 -1
- package/admin/pages/documents/editor.njk +286 -158
- package/admin/pages/documents/list.njk +2 -0
- package/admin/pages/indieauth/consent.njk +4 -0
- package/admin/pages/settings/privacy.njk +37 -0
- package/admin/pages/users/apps.njk +109 -3
- package/admin/static/admin.css +37 -14
- package/dist/admin/documents.d.ts +34 -4
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +161 -23
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/editor-layout.d.ts +13 -0
- package/dist/admin/editor-layout.d.ts.map +1 -0
- package/dist/admin/editor-layout.js +61 -0
- package/dist/admin/editor-layout.js.map +1 -0
- package/dist/admin/enclosure-field.d.ts +2 -3
- package/dist/admin/enclosure-field.d.ts.map +1 -1
- package/dist/admin/enclosure-field.js +27 -7
- package/dist/admin/enclosure-field.js.map +1 -1
- package/dist/admin/index.d.ts +1 -0
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/location-field.d.ts +27 -0
- package/dist/admin/location-field.d.ts.map +1 -0
- package/dist/admin/location-field.js +98 -0
- package/dist/admin/location-field.js.map +1 -0
- package/dist/admin/menu.d.ts.map +1 -1
- package/dist/admin/menu.js +1 -0
- package/dist/admin/menu.js.map +1 -1
- package/dist/admin/photo-field.d.ts +2 -3
- package/dist/admin/photo-field.d.ts.map +1 -1
- package/dist/admin/photo-field.js +4 -2
- package/dist/admin/photo-field.js.map +1 -1
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +18 -5
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/read-field.d.ts +22 -0
- package/dist/admin/read-field.d.ts.map +1 -0
- package/dist/admin/read-field.js +61 -0
- package/dist/admin/read-field.js.map +1 -0
- package/dist/admin/settings-page.d.ts +3 -3
- package/dist/admin/settings-page.js +2 -2
- package/dist/admin/settings-pages.d.ts +2 -2
- package/dist/admin/settings-pages.d.ts.map +1 -1
- package/dist/admin/settings-pages.js +4 -2
- package/dist/admin/settings-pages.js.map +1 -1
- package/dist/admin/settings-privacy.d.ts +3 -0
- package/dist/admin/settings-privacy.d.ts.map +1 -0
- package/dist/admin/settings-privacy.js +10 -0
- package/dist/admin/settings-privacy.js.map +1 -0
- package/dist/admin/settings-reading.js +2 -2
- package/dist/admin/settings-reading.js.map +1 -1
- package/dist/admin/settings.d.ts +18 -2
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +27 -0
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/templates.d.ts +1 -0
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +1 -0
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +14 -1
- package/dist/admin/uploads.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +34 -0
- package/dist/cli.js.map +1 -1
- package/dist/comments/routes.js +2 -2
- package/dist/comments/routes.js.map +1 -1
- package/dist/contact/routes.js +2 -2
- package/dist/contact/routes.js.map +1 -1
- package/dist/content/kept-properties.d.ts +5 -0
- package/dist/content/kept-properties.d.ts.map +1 -0
- package/dist/content/kept-properties.js +12 -0
- package/dist/content/kept-properties.js.map +1 -0
- package/dist/content/location.d.ts +62 -0
- package/dist/content/location.d.ts.map +1 -0
- package/dist/content/location.js +240 -0
- package/dist/content/location.js.map +1 -0
- package/dist/content/locations.d.ts +6 -0
- package/dist/content/locations.d.ts.map +1 -0
- package/dist/content/locations.js +7 -0
- package/dist/content/locations.js.map +1 -0
- package/dist/content/metadata/gif.d.ts +3 -0
- package/dist/content/metadata/gif.d.ts.map +1 -0
- package/dist/content/metadata/gif.js +65 -0
- package/dist/content/metadata/gif.js.map +1 -0
- package/dist/content/metadata/index.d.ts +6 -0
- package/dist/content/metadata/index.d.ts.map +1 -0
- package/dist/content/metadata/index.js +24 -0
- package/dist/content/metadata/index.js.map +1 -0
- package/dist/content/metadata/isobmff.d.ts +22 -0
- package/dist/content/metadata/isobmff.d.ts.map +1 -0
- package/dist/content/metadata/isobmff.js +215 -0
- package/dist/content/metadata/isobmff.js.map +1 -0
- package/dist/content/metadata/jpeg.d.ts +3 -0
- package/dist/content/metadata/jpeg.d.ts.map +1 -0
- package/dist/content/metadata/jpeg.js +117 -0
- package/dist/content/metadata/jpeg.js.map +1 -0
- package/dist/content/metadata/png.d.ts +3 -0
- package/dist/content/metadata/png.d.ts.map +1 -0
- package/dist/content/metadata/png.js +74 -0
- package/dist/content/metadata/png.js.map +1 -0
- package/dist/content/metadata/shared.d.ts +17 -0
- package/dist/content/metadata/shared.d.ts.map +1 -0
- package/dist/content/metadata/shared.js +42 -0
- package/dist/content/metadata/shared.js.map +1 -0
- package/dist/content/metadata/sweep.d.ts +14 -0
- package/dist/content/metadata/sweep.d.ts.map +1 -0
- package/dist/content/metadata/sweep.js +54 -0
- package/dist/content/metadata/sweep.js.map +1 -0
- package/dist/content/metadata/tiff.d.ts +7 -0
- package/dist/content/metadata/tiff.d.ts.map +1 -0
- package/dist/content/metadata/tiff.js +56 -0
- package/dist/content/metadata/tiff.js.map +1 -0
- package/dist/content/metadata/webp.d.ts +3 -0
- package/dist/content/metadata/webp.d.ts.map +1 -0
- package/dist/content/metadata/webp.js +67 -0
- package/dist/content/metadata/webp.js.map +1 -0
- package/dist/content/permalink-file.d.ts +7 -0
- package/dist/content/permalink-file.d.ts.map +1 -0
- package/dist/content/permalink-file.js +77 -0
- package/dist/content/permalink-file.js.map +1 -0
- package/dist/content/post-type.d.ts +4 -2
- package/dist/content/post-type.d.ts.map +1 -1
- package/dist/content/post-type.js +9 -1
- package/dist/content/post-type.js.map +1 -1
- package/dist/content/read.d.ts +22 -0
- package/dist/content/read.d.ts.map +1 -0
- package/dist/content/read.js +67 -0
- package/dist/content/read.js.map +1 -0
- package/dist/content/store.d.ts +4 -4
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +19 -39
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +3 -13
- package/dist/content/sync.js.map +1 -1
- package/dist/content/visibility.d.ts +11 -0
- package/dist/content/visibility.d.ts.map +1 -0
- package/dist/content/visibility.js +14 -0
- package/dist/content/visibility.js.map +1 -0
- package/dist/federation/article.d.ts +4 -3
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +66 -20
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/citations.d.ts +7 -6
- package/dist/federation/citations.d.ts.map +1 -1
- package/dist/federation/citations.js +44 -28
- package/dist/federation/citations.js.map +1 -1
- package/dist/federation/delivery.d.ts +3 -1
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +29 -21
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +3 -1
- package/dist/federation/mount.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/indexnow.js +2 -2
- package/dist/indexnow.js.map +1 -1
- package/dist/indieauth/activity-log.d.ts +2 -0
- package/dist/indieauth/activity-log.d.ts.map +1 -1
- package/dist/indieauth/activity-log.js +12 -2
- package/dist/indieauth/activity-log.js.map +1 -1
- package/dist/indieauth/app-activity.js +5 -1
- package/dist/indieauth/app-activity.js.map +1 -1
- package/dist/indieauth/bearer.d.ts +10 -6
- package/dist/indieauth/bearer.d.ts.map +1 -1
- package/dist/indieauth/bearer.js +28 -25
- package/dist/indieauth/bearer.js.map +1 -1
- package/dist/indieauth/client-id.d.ts +10 -0
- package/dist/indieauth/client-id.d.ts.map +1 -0
- package/dist/indieauth/client-id.js +30 -0
- package/dist/indieauth/client-id.js.map +1 -0
- package/dist/indieauth/connected-apps.d.ts +4 -0
- package/dist/indieauth/connected-apps.d.ts.map +1 -1
- package/dist/indieauth/connected-apps.js +149 -20
- package/dist/indieauth/connected-apps.js.map +1 -1
- package/dist/indieauth/consent.d.ts.map +1 -1
- package/dist/indieauth/consent.js +5 -1
- package/dist/indieauth/consent.js.map +1 -1
- package/dist/indieauth/grants.d.ts +2 -7
- package/dist/indieauth/grants.d.ts.map +1 -1
- package/dist/indieauth/grants.js.map +1 -1
- package/dist/indieauth/redeem.d.ts.map +1 -1
- package/dist/indieauth/redeem.js +10 -5
- package/dist/indieauth/redeem.js.map +1 -1
- package/dist/indieauth/request.d.ts +8 -4
- package/dist/indieauth/request.d.ts.map +1 -1
- package/dist/indieauth/request.js +29 -30
- package/dist/indieauth/request.js.map +1 -1
- package/dist/indieauth/token.js +2 -2
- package/dist/indieauth/token.js.map +1 -1
- package/dist/indieauth/tokens.d.ts +28 -7
- package/dist/indieauth/tokens.d.ts.map +1 -1
- package/dist/indieauth/tokens.js +26 -5
- package/dist/indieauth/tokens.js.map +1 -1
- package/dist/micropub/create.d.ts +26 -0
- package/dist/micropub/create.d.ts.map +1 -1
- package/dist/micropub/create.js +158 -13
- package/dist/micropub/create.js.map +1 -1
- package/dist/micropub/endpoint.d.ts +4 -5
- package/dist/micropub/endpoint.d.ts.map +1 -1
- package/dist/micropub/endpoint.js +83 -25
- package/dist/micropub/endpoint.js.map +1 -1
- package/dist/micropub/media.d.ts +6 -2
- package/dist/micropub/media.d.ts.map +1 -1
- package/dist/micropub/media.js +43 -37
- package/dist/micropub/media.js.map +1 -1
- package/dist/micropub/update.d.ts +13 -3
- package/dist/micropub/update.d.ts.map +1 -1
- package/dist/micropub/update.js +60 -7
- package/dist/micropub/update.js.map +1 -1
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +2 -5
- package/dist/notify.js.map +1 -1
- package/dist/web/absolute-urls.d.ts +2 -0
- package/dist/web/absolute-urls.d.ts.map +1 -0
- package/dist/web/absolute-urls.js +22 -0
- package/dist/web/absolute-urls.js.map +1 -0
- package/dist/web/admin-bar.d.ts.map +1 -1
- package/dist/web/admin-bar.js +25 -0
- package/dist/web/admin-bar.js.map +1 -1
- package/dist/web/context.d.ts +29 -1
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +33 -0
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts.map +1 -1
- package/dist/web/conversation.js +5 -4
- package/dist/web/conversation.js.map +1 -1
- package/dist/web/documents.d.ts +34 -10
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +41 -15
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-item.d.ts +25 -6
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +31 -7
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/feed-json.d.ts +3 -1
- package/dist/web/feed-json.d.ts.map +1 -1
- package/dist/web/feed-json.js +2 -0
- package/dist/web/feed-json.js.map +1 -1
- package/dist/web/feed-source.d.ts +6 -0
- package/dist/web/feed-source.d.ts.map +1 -1
- package/dist/web/feed-source.js.map +1 -1
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +2 -0
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/html-attributes.d.ts +3 -0
- package/dist/web/html-attributes.d.ts.map +1 -0
- package/dist/web/html-attributes.js +15 -0
- package/dist/web/html-attributes.js.map +1 -0
- package/dist/web/index.d.ts +1 -1
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +1 -1
- package/dist/web/index.js.map +1 -1
- package/dist/web/negotiate.d.ts +2 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +2 -1
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/render.d.ts +13 -4
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +25 -12
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +26 -11
- package/dist/web/routes.js.map +1 -1
- package/dist/webmention/fetch-public.d.ts +3 -1
- package/dist/webmention/fetch-public.d.ts.map +1 -1
- package/dist/webmention/fetch-public.js +17 -11
- package/dist/webmention/fetch-public.js.map +1 -1
- package/dist/webmention/reply-context.d.ts +18 -5
- package/dist/webmention/reply-context.d.ts.map +1 -1
- package/dist/webmention/reply-context.js +118 -19
- package/dist/webmention/reply-context.js.map +1 -1
- package/dist/webmention/reply-contexts.d.ts +17 -14
- package/dist/webmention/reply-contexts.d.ts.map +1 -1
- package/dist/webmention/reply-contexts.js +32 -21
- package/dist/webmention/reply-contexts.js.map +1 -1
- package/dist/webmention/service.d.ts.map +1 -1
- package/dist/webmention/service.js +7 -2
- package/dist/webmention/service.js.map +1 -1
- package/package.json +9 -9
- package/themes/default/README.md +45 -7
- package/themes/default/layouts/base.njk +2 -0
- package/themes/default/layouts/post.njk +12 -7
- package/themes/default/partials/citations.njk +12 -3
- package/themes/default/partials/cited-page.njk +41 -0
- package/themes/default/partials/location.njk +12 -0
- package/themes/default/partials/post-list.njk +10 -5
- package/themes/default/partials/read.njk +5 -0
- package/themes/default/partials/reply-context.njk +2 -9
package/dist/admin/preview.js
CHANGED
|
@@ -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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
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
|
|
5
|
-
* now — General, Reading, Permalinks, Discussion 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
|
-
*
|
|
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
|
|
5
|
-
* now — General, Reading, Permalinks, Discussion 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
|
|
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
|
-
*
|
|
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;
|
|
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
|
|
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
|
-
*
|
|
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;
|
|
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 @@
|
|
|
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 {
|
|
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) =>
|
|
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,
|
|
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"}
|
package/dist/admin/settings.d.ts
CHANGED
|
@@ -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":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/admin/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/settings.js
CHANGED
|
@@ -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
|
/**
|