@taprootio/site-authoring 0.27.1 → 0.29.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 +11 -12
- package/examples/riverbend-wellness/settings/site-publishing-preferences.json +8 -0
- package/package.json +1 -1
- package/src/changelog.json +37 -0
- package/src/cli.js +3 -3
- package/src/content/components.js +386 -20
- package/src/content/free-form-section-registry.json +37 -1
- package/src/footer-contract.js +59 -0
- package/src/footer-draft-hash.js +14 -1
- package/src/presentation-reference.js +23 -1
- package/src/reference-help.js +13 -6
- package/src/site-checks.js +25 -2
- package/src/social-link-url.js +160 -0
- package/src/social-platforms.json +16 -0
- package/src/typed-page-reference.js +7 -14
- package/src/typed-pages.js +11 -29
- package/src/verbs/pages-push.js +34 -11
- package/src/verbs/places.js +2 -2
- package/src/verbs/pull.js +1 -1
package/README.md
CHANGED
|
@@ -140,7 +140,7 @@ with no credential, no network, and no write: every page source (metadata,
|
|
|
140
140
|
Markdown conversion, media references, content vocabulary, section contexts),
|
|
141
141
|
page paths and templates against the pages the pull recorded, navigation,
|
|
142
142
|
redirects, forms, and the complete theme, appearance, header, brand, and
|
|
143
|
-
footer. Navigation to a generated page (a section
|
|
143
|
+
footer. Navigation to a generated page (a section or folder page) resolves
|
|
144
144
|
against the pages the pull recorded. It reports every problem at once in
|
|
145
145
|
`error.problems`, each with its file, code, and field, instead of one per run.
|
|
146
146
|
Warnings never refuse: `linkWarnings` names a link whose address is only
|
|
@@ -506,12 +506,11 @@ listings only while that person can still be named: a former member's page, or
|
|
|
506
506
|
a member who can no longer create pages, reports none, and a push that names
|
|
507
507
|
someone else on it is refused as a conflict.
|
|
508
508
|
|
|
509
|
-
Pages Taproot generates from the site's content —
|
|
510
|
-
|
|
511
|
-
`
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
things that are yours to author: `customTitle`, `breadcrumbTitle`,
|
|
509
|
+
Pages Taproot generates from the site's content — the published archive, a
|
|
510
|
+
folder — are update-only sources. `pull` writes each as
|
|
511
|
+
`pages/<name>.pm.json` with `"template": "generated"`: `data` holds what the
|
|
512
|
+
page is (`kind`, which you leave as pulled) and the four things
|
|
513
|
+
that are yours to author: `customTitle`, `breadcrumbTitle`,
|
|
515
514
|
`customDescription` and `introductionBody`. An empty string means "use the
|
|
516
515
|
generated default"; the description then falls back to the introduction's first
|
|
517
516
|
paragraph, else the system default. The manifest keeps the title and description
|
|
@@ -525,8 +524,8 @@ move one (`pages.generated_move`) or change its kind or identity
|
|
|
525
524
|
(`pages.generated_identity`, also when the manifest has no record of what the
|
|
526
525
|
file was pulled as: run `pull`); there is no Markdown form
|
|
527
526
|
(`pages.generated_markdown`). A generated page you did not edit never blocks a
|
|
528
|
-
push of the whole workspace, even when Taproot
|
|
529
|
-
|
|
527
|
+
push of the whole workspace, even when Taproot changed it since the pull. If the
|
|
528
|
+
site no longer has the page (its folder is gone, or Taproot retired its kind),
|
|
530
529
|
a whole-workspace push reports the file under `pages.staleGeneratedSources` and
|
|
531
530
|
sends nothing for it, and `pull` says so; delete the file. Naming that path in
|
|
532
531
|
`pages push <page-path>` is refused with `pages.generated_create`. A description over 160 characters is warned about,
|
|
@@ -857,8 +856,8 @@ taproot-site places category clear <placeId>
|
|
|
857
856
|
`list` prints the closed list `set` accepts; a name outside it is refused, and
|
|
858
857
|
capitalization is ignored. The category is the site's alone and applies to every
|
|
859
858
|
review of that place on the site: the place itself and other sites do not
|
|
860
|
-
change. Place-review bylines
|
|
861
|
-
|
|
859
|
+
change. Place-review bylines use it from the site's next deployment, including
|
|
860
|
+
reviews nobody has edited. `clear` removes it.
|
|
862
861
|
Both need the same page-editing permission as `places select`.
|
|
863
862
|
|
|
864
863
|
### Pages generated in 0.18.0
|
|
@@ -892,7 +891,7 @@ once).
|
|
|
892
891
|
page's title, description or author; `pull` keeps the edit until `pages push`
|
|
893
892
|
sends it. Descriptions are warned about over 160 characters and refused over
|
|
894
893
|
1000, here and by Taproot.
|
|
895
|
-
- Generated pages (
|
|
894
|
+
- Generated pages (the published archive, the map, folders) pull as update-only sources
|
|
896
895
|
whose custom title, breadcrumb, description and introduction you can edit.
|
|
897
896
|
- Pages are authorless by default. `authors list`, `authors add` and
|
|
898
897
|
`authors.json` name a member who can create pages or a site author without a
|
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
"pageResourceId": "a0000000-0000-4000-8000-000000000013"
|
|
19
19
|
}
|
|
20
20
|
],
|
|
21
|
+
"socialLinks": [
|
|
22
|
+
{
|
|
23
|
+
"id": "a0000000-0000-4000-8000-000000000048",
|
|
24
|
+
"platform": "instagram",
|
|
25
|
+
"url": "https://instagram.example.test/riverbendwellness",
|
|
26
|
+
"label": "Riverbend on Instagram"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
21
29
|
"light": {
|
|
22
30
|
"backgroundColor": "--esp-color-layer-1",
|
|
23
31
|
"textColor": "--esp-color-text",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taprootio/site-authoring",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"description": "Taproot site authoring CLI: sign in once in the browser, then pull, validate, push, preview, approve, and deploy a site from the terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "ISC",
|
package/src/changelog.json
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"entries": [
|
|
3
|
+
{
|
|
4
|
+
"version": "0.29.0",
|
|
5
|
+
"note": "Pages gain an image-row component for linked pictures at a set height and a product-grid component for priced cards with a button each; feature-grid help states its icon sizes and square crop, and published feature-grid icons now render at the documented sizes.",
|
|
6
|
+
"behavior": [
|
|
7
|
+
"A free-form page may hold an image-row component: one to twelve pictures at one height (small 2.5rem/40px, medium 4rem/64px, large 6rem/96px at a 16px root), each with required alt text, required width and height, and an optional link. Pictures keep their own shape, are never cropped or framed, and one wider than the row shrinks to fit. See help component image-row.",
|
|
8
|
+
"help component feature-grid states the icon box sizes (small 3rem/48px, medium 6rem/96px, large 10rem/160px, xlarge 16rem/256px at a 16px root) and that icons are cropped to a square and framed by the site's image border. Published feature-grid icons now render at those sizes; before this release they filled the item's width with a 2em margin, so re-check existing grids after the runtime update.",
|
|
9
|
+
"A free-form page may hold a product-grid component: one to a hundred equal-height cards for things to buy or book, each with a title, free-text price and note, badge, description, up to eight feature lines, an optional 16:9 image and one button that links to any checkout; columns 2 to 4, standard or compact density, a border width, and a highlighted card drawn in the site's action color. Site checks now read buttonUrl and linkUrl addresses, so a card-grid, cta or product-grid link to a missing page is reported. See help component product-grid.",
|
|
10
|
+
"A free-form page may hold a social-links component: one to twelve links, each a platform from a fixed list (Instagram, Facebook, Yelp, YouTube, TikTok, LinkedIn, X, Threads, Bluesky, Mastodon, Pinterest, or Website for any other site) with an https address and an optional label the link reads to screen readers; icons at small 1.5rem, medium 2rem or large 3rem, aligned start, center or end (the align field), with labels shown or hidden. The address must be absolute https, without credentials, to a domain of unaccented letters, digits and hyphens. See help component social-links.",
|
|
11
|
+
"Footer settings gain socialLinks: up to twelve links with an id, a platform key, an https address and an optional label, published as an icon row between the bottom copy and the utility links. The footer draft hash moves to footer-draft-v4, so every footer draft hash issued before this release is stale once: pull the footer again before pushing it. See help footer.",
|
|
12
|
+
"The help reference version is 48."
|
|
13
|
+
],
|
|
14
|
+
"help": [
|
|
15
|
+
"components",
|
|
16
|
+
"component",
|
|
17
|
+
"footer"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"version": "0.28.0",
|
|
22
|
+
"note": "Taproot no longer generates /places, year and month, or tag pages, so a generated page's data drops those fields. One /published page lists every month, a folder page reaches search only with an introduction or three cards, and a review's location byline opens Google Maps.",
|
|
23
|
+
"behavior": [
|
|
24
|
+
"The /published/<year> and /published/<year>/<month> pages are no longer generated. One /published page carries a year and a month picker filled from JSON files the release writes (published/months.json and published/<year>/<month>.json), and a content byline links to /published?year=YYYY&month=M. Those file paths are refused as redirect sources with redirect.source_generated_file.",
|
|
25
|
+
"A generated page's data drops year and month beside the place fields: pull writes kind and the four authored fields, and a source that still carries year or month is refused by pages push with pages.document_shape as an unsupported field: delete the year and month lines from sources pulled before this release (every generated page pulled earlier carries year: 0 and month: 0).",
|
|
26
|
+
"The /places index, country, region, city and category pages are no longer generated, so a site has no generated page of those kinds to pull. On a published review, article or album with a place on a site with no map page, the location byline opens the place's Google Maps listing in a new tab; the review's category byline is plain text.",
|
|
27
|
+
"A generated page's data holds kind and the four authored fields. pull no longer writes countryCode, regionCode, citySlug or categorySlug, and a source that still carries one is refused by pages push with pages.document_shape as an unsupported field: delete the four lines from sources pulled before this release.",
|
|
28
|
+
"/places is no longer a reserved path, so a page may be authored there.",
|
|
29
|
+
"A workspace that pulled a /places page before this release keeps that file: pages push reports it as the source of a generated page Taproot no longer publishes and sends the rest, whether or not the site has synchronized the page away yet; naming its path is refused with pages.generated_create. Delete the file.",
|
|
30
|
+
"Taproot no longer generates tag pages (/tags and /tags/<slug>): tags stay page metadata with no public page, a workspace that pulled one keeps the file and pages push reports it as the source of a page Taproot no longer publishes, and /tags is no longer a reserved path. A generated page's data holds kind and the four authored fields; tagId leaves the identity, and a source that still carries it is refused by pages push with pages.document_shape as an unsupported field: delete the line from sources pulled before this release.",
|
|
31
|
+
"A folder index is a search destination when it has an introduction or renders at least three cards; otherwise it carries noindex and leaves the sitemap. Write the page's introductionBody in its pulled .pm.json source to make a small folder one.",
|
|
32
|
+
"Taproot generates a /map page for a site with a public post that has a location. It is a new generated kind in pulls, /map and every path under it are reserved, and /map/places.json cannot be a redirect source.",
|
|
33
|
+
"The help reference version is 47."
|
|
34
|
+
],
|
|
35
|
+
"help": [
|
|
36
|
+
"pages",
|
|
37
|
+
"page"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
3
40
|
{
|
|
4
41
|
"version": "0.27.1",
|
|
5
42
|
"note": "The site checks refuse a page or redirect source named like a search-engine key file, which the platform now publishes at the site root.",
|
package/src/cli.js
CHANGED
|
@@ -139,7 +139,7 @@ const VERBS = Object.freeze([
|
|
|
139
139
|
+ "appearance, header, brand, footer, navigation, redirects, and forms are checked with the validators the "
|
|
140
140
|
+ "pushes use, and every problem is reported at once in error.problems (each with its file, code, and field) "
|
|
141
141
|
+ "rather than one per run. A pulled workspace is checked offline against the pages (generated ones included, "
|
|
142
|
-
+ "so navigation to a
|
|
142
|
+
+ "so navigation to a folder index resolves), images, and baselines its manifests recorded at the pull. "
|
|
143
143
|
+ "A link whose address is only http(s):// plus its own text (left by older editor autolinking) is reported in "
|
|
144
144
|
+ "linkWarnings without refusing; pages push reports the same for the pages it sends. "
|
|
145
145
|
+ "The site checks that can run offline are reported in findings (a rule id, severity, file, and the value "
|
|
@@ -287,7 +287,7 @@ const VERBS = Object.freeze([
|
|
|
287
287
|
+ "and pull again. A locally edited '.pm.json' is kept rather than overwritten for the same reason. "
|
|
288
288
|
+ "First revisions adopted without a completed body comparison are counted in pages.revisionsRecordedWithoutBodyComparison "
|
|
289
289
|
+ "and announced on the human channel. New downloads and compared bodies are excluded. "
|
|
290
|
-
+ "A page Taproot generates (
|
|
290
|
+
+ "A page Taproot generates (the published archive, the map or a folder) is pulled as an update-only '.pm.json' "
|
|
291
291
|
+ "(template 'generated'): you edit its custom title, breadcrumb title, custom description and introduction, "
|
|
292
292
|
+ "and the manifest keeps the title and description the site reports. "
|
|
293
293
|
+ "A form a page places is written back by its key, the name 'forms/<key>.json' uses, though the site stores "
|
|
@@ -445,7 +445,7 @@ const VERBS = Object.freeze([
|
|
|
445
445
|
+ "'places category list', which prints the closed list; a name outside it is refused, and capitalization is "
|
|
446
446
|
+ "ignored. Use it when Google's own category for a place is not the one this site wants, such as a park filed "
|
|
447
447
|
+ "under Other. The category is this site's alone and applies to every review of that place here: the place "
|
|
448
|
-
+ "itself and other sites do not change. Place-review bylines
|
|
448
|
+
+ "itself and other sites do not change. Place-review bylines use it from the "
|
|
449
449
|
+ "next deployment, which a changed category alone is enough to start. Undo it with 'places category clear'.",
|
|
450
450
|
},
|
|
451
451
|
{
|