Commit graph

4813 commits

Author SHA1 Message Date
Doxa Maps
2b1f55e7cf Merge the pilot (development ceb7168bf, P1 tab addresses) into the UPG100 combined landing 2026-10-03 06:52:42 +00:00
Doxa Maps
6f3a45f44f UPG100: the header Share menu opens beside its button, at the maps' width
The composite's header now declares itself the Share menu's area. The
Share button's fallback looked for its area during render, before
layout, and settled on its own narrow parent, so the menu clamped to
its 200px floor and opened at the far left of the header (at 1440 and
390, en and ar). With the header declared, the menu opens beside the
button at the maps' width, mirrored in right-to-left pages.
2026-10-03 05:47:39 +00:00
Doxa Maps
ceb7168bf3 Merge remote-tracking branch 'origin/development' into regions-plugin/view-address
# Conflicts:
#	package.json
2026-10-03 05:43:09 +00:00
Doxa Maps
f69a10c8e0 UPG100 poster: new header words, mirrored columns, UPG100 spelled as one term
- The Jesus column and the "What is a UPG100 List?" column take their new
  wording (series.json); "informed intercession." prints bold, a **...**
  run in the head-columns band.
- The two prose columns take the full measure, so each sits the same
  distance from its rule and they mirror each other round the centred
  facts column.
- The Poster Design label of the UPG100 zone posters spells UPG100 and
  matches Poster Design's own card title, in all 11 languages.
2026-10-03 05:42:42 +00:00
Doxa Maps
5c03996dbb Merge the Research Gallery staging page's address ownership (shareable pages P1) 2026-10-03 05:42:23 +00:00
Doxa Maps
bb970b441f Library index: list useViewAddress 2026-10-03 05:41:31 +00:00
Doxa Maps
7285fda93d Merge the dev server's address ownership for Plugin Studio and the leaf pages (shareable pages P1) 2026-10-03 05:41:25 +00:00
Doxa Maps
d65747a300 Merge the Posterverse staging page's address ownership (shareable pages P1) 2026-10-03 05:41:25 +00:00
Doxa Maps
8bd66a3131 Merge the pilot (development 789d90eb2) into the set-caption count 2026-10-03 05:40:18 +00:00
Doxa Maps
fba3187cd4 Dev server: Plugin Studio and the leaf pages own the address too
The dev pages passed no urlOwner, so on the dev server a shell read ?tab=
but never wrote it: a clicked tab was lost on reload and a copied link
opened the first tab. The root page, every /__leaf/ page and the Studio
staging page now own the address, as the built leaves do. A framed leaf
(Studio iframes its map rows) stays unowned, so it never adds entries
to the top page's Back stack.
2026-10-03 05:39:23 +00:00
Doxa Maps
34073e7c13 Shareable pages P1: rebuild the reached bundles from the merged source, then the tree and SRI 2026-10-03 05:37:18 +00:00
Doxa Maps
dc32000bfe Research Gallery dev page: it owns its address (urlOwner 'app'), so a tab pick writes ?tab=
The dev server serves plugin-designs/doxa-maps-spa/index.html as-is, with no
profile-config, so the shell read ?tab= there but never wrote it. The page is
ours: it now passes urlOwner 'app'. A partner's page still leaves it out.
2026-10-03 05:36:47 +00:00
Doxa Maps
ce1d3b6a46 Posterverse: the dev staging page owns its address
The staging page the dev server serves sets profile-config urlOwner 'app', so on
the dev server the shell writes the open tab to ?tab=: a reload keeps it and a
copied link opens it. Inside the Plugin Studio, Posterverse is nested and still
writes nothing (the Studio owns the address there).
2026-10-03 05:36:19 +00:00
Doxa Maps
789d90eb2f Merge commit '9c381b619e5596e3cc7c1909c242c4985c59712e' into poster-design-plugin/experimental 2026-10-03 05:33:11 +00:00
Doxa Maps
da14272f96 Merge remote-tracking branch 'origin/development' into regions-plugin/view-address 2026-10-03 05:33:02 +00:00
Doxa Maps
b90fb29960 Rebuild bible-posters and my-upg-100-list for their merged catalogue keys; tree and SRI regenerated
The merged posterDesign blocks brought biblePosters.posterDesign.label and
upgMap.posterDesignTerritory, catalogue areas these two bundles ship, so
their committed bytes were stale against the merged source. Rebuilt only;
no source edit.
2026-10-03 05:27:37 +00:00
Doxa Maps
1118219bd5 Merge Plugin Studio's view address and the generated pages' urlOwner (shareable pages P1) 2026-10-03 05:27:34 +00:00
Doxa Maps
7d7ae092b3 Merge the Posterverse shell's view address (shareable pages P1) 2026-10-03 05:27:33 +00:00
Doxa Maps
dfed65c8af Merge the Research Gallery shell's view address (shareable pages P1) 2026-10-03 05:27:33 +00:00
Doxa Maps
8c674c0447 Posterverse: don't overwrite a link to a tab that arrives with the manifest
The first-paint write is skipped when the address names a tab the shell
doesn't know yet (a row that only resolves once the manifest is in). Writing
tab 0 there would replace the link before applyManifest could honour it;
applyManifest's own first-paint replace writes the honoured tab.
2026-10-03 05:26:59 +00:00
Doxa Maps
4241609572 Plugin Studio: the open tab is in the address, so a reload keeps it and a sent link opens it
Plugin Studio read its tab from #<bundle/profile> or from localStorage, and
never wrote it, so a reload worked for one reader but a sent link did not. It
now writes the view address through useViewAddress: ?tab=<bundle>__<profile>
(a row key's "/" is not a plain id; the double underscore keeps a sent link
meaning one row even if another bundle later adopts the profile's name). A
reader's tab click is a push, the first paint a replace, and Back/Forward
re-open the named tab without writing. route() reads ?tab= first (or a bare
profile name while it names exactly one row), then the old #bundle/profile
(rewritten to ?tab= on first paint, its hash dropped), then the remembered
tab, then the first row. The listener is removed before the hot-update return.

generate-tree bakes urlOwner 'app' into our own leaf pages only (never into an
embed snippet), and a framed leaf drops it at runtime, so a page embedded in a
partner's iframe reads its address but never adds entries to the partner's
Back button.
2026-10-03 05:26:13 +00:00
Doxa Maps
32cba5f8fe Posterverse: on a page it owns, the address's tab beats a baked config tab
When the shell owns the address, a reload or a shared ?tab= now wins over a
profile-config tab, so the first-paint replace can never overwrite a sent link
with the default. Elsewhere the order is unchanged (attribute, config, URL).
2026-10-03 05:25:36 +00:00
Doxa Maps
f0c97577e3 Research Gallery: the tab is in the page address (shareable pages P1)
A reader's pick in the rail writes ?tab= through useViewAddress as a push,
so a reload keeps the tab, a sent link opens it, and Back returns to the
previous tab. Only the address owner writes: urlOwner 'app' writes history,
'host' gets a dxm-address event for its router, and a partner's page is
never written. Programmatic switches (the manifest's re-select, the device
fallback, a host's tab attribute, Back/Forward) write nothing, and there is
no first-paint write. Back/Forward re-open the tab the address names on a
page that owns its address. ?tab= is read through readViewKeys.
2026-10-03 05:25:14 +00:00
Doxa Maps
86f1c1a463 Posterverse: the open tab is in the page address
The shell reads ?tab= through the shared view-address helper and writes the
open tab back through it: a reader's choice is a push, first paint a replace,
and Back / Forward re-apply the tab without writing. Only the address owner
writes (urlOwner 'app' on our own pages, 'host' hands the change to a host's
router, absent on a partner's page = read only), so a reload keeps the tab
and a sent link opens it.
2026-10-03 05:24:16 +00:00
Doxa Maps
00782796a9 useViewAddress: say which writers share commitUrl, and why a push copies the router's state
The header claimed that every write to the address bar goes through commitUrl. Only the view keys and the filters
do. The tree's other history writers are pinned by check:view-address's census. The header also says why a push
copies the previous state: a Vue Router page is a 'host' owner, so its router does its own pushes.

Comment only.
2026-10-03 05:23:18 +00:00
Doxa Maps
30dc9a1457 Shareable pages P1: one address helper, and the filters write through it
library/composables/useViewAddress.js is the page's address for the view a reader is on: ?tab= &pane= &place=, with
a level rule, an id whitelist, and ONE history write (commitUrl). It keeps history.state and sets its `current` to
the new URL, so a link survives the next in-app navigation on a Vue Router host. The OUTERMOST owner writes,
named by profile-config urlOwner:
- 'app' writes history itself;
- 'host' hands its router one dxm-address;
- absent, nothing is written and links are still read.
Nested elements announce dxm-view. Back/Forward is read and never written.

useShareableView's filter write used to call replaceState(null, ...) itself, which wiped the router's state. It
now goes through commitUrl (writeFilterView). A filter write keeps tab/pane/place, and a tab/pane/place write keeps
the filters.

Level 2 is `pane`, not `view`: ?view= is already published by four of our pages.

check:view-address (gates:pre) runs on a simulated browser history. It covers:
- the whitelist and the level rule;
- one push per tab change, with state + current kept;
- no write when unchanged, on a partner page, or by a host owner;
- the filters and the view keys keeping each other through writes, Back and Forward;
- a census of every history writer in library/ and plugin-designs/ (6 today). A new writer fails until it is listed.

The self-test has 14 poisons, each caught. Real-source mutations are caught too: drop current, drop the unchanged
guard, drop the level rule, an uncomposed event, no length cap, an aliased pushState in a plugin.
2026-10-03 05:20:43 +00:00
Doxa Maps
446b0bfc8f UPG100 packet: Full detail page 1 rows follow the explanation
Page 1 of the Full detail list reserved a fixed block for its
explanation and placed the rows below the reserve, so every language
shorter than the tallest left a white gap above the head row (0.36 to
1.30 in). The explanation (at most the old reserve) and the rows now
share one column: the head row sits right under the explanation and
the spare room falls to the page's foot. The page still holds the same
number of rows; the rows stay absolutely placed, only their origin
moves.
2026-10-03 05:15:12 +00:00
Doxa Maps
8b30be2481 Merge commit '1d8f5f1cc' into poster-design-plugin/experimental 2026-10-03 05:10:30 +00:00
Doxa Maps
0a4c9cc600 Merge the pilot (development 1d8f5f1cc) into the set-caption count 2026-10-03 05:09:07 +00:00
Doxa Maps
9c381b619e Rebuild wall-of-people-groups from the merged source (the LORD + the pilot 1d8f5f1cc), and regenerate SRI and the tree 2026-10-03 05:07:52 +00:00
Doxa Maps
2717d0ffe7 Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work 2026-10-03 05:07:07 +00:00
Doxa Maps
ffd85f0590 Wall of People Groups: every verse says "the LORD", from the World English Bible British Edition
Every verse now comes from one translation, the WEB British Edition (public domain), which reads "the LORD"
(the WEB reads "Yahweh"). Every text was re-checked verbatim against it (bible.helloao.org eng_webpb), 31 of
31 matching; the check found three mid-sentence names written with the sentence-start placeholder ("says the
LORD of Armies", "Now the LORD said", "as the LORD had told him") and the British spellings (towards, honour,
offence, amongst, marvellous). The credit line names the one translation.
2026-10-03 05:07:07 +00:00
Doxa Maps
1d8f5f1ccd Merge remote-tracking branch 'origin/development' into regions-plugin/no-country-posters-tab 2026-10-03 04:33:34 +00:00
Doxa Maps
1e53b531b0 Poster Design draws UPG100's zone posters, from a library copy of UPG100's zone code
UPG100's zone-poster code lived only inside its plugin, so Poster Design
(which draws from the library) could list UPG100's posters but never show
them. It is now COPIED, unchanged, into library/packet/upg100Zones/
(zone-sheet-print, zone-sheet, legend-tree, selector-evaluator,
zone-geometry, zones-for-list, clusters.json; only the library import paths
are shorter). UPG100's own files are untouched.

Poster Design adds a UPG100 zone posters family drawn from that copy with a
real zone (middle-east-core) and all the records, as UPG100's own wall
does: the letter, 3 x 3 and 3 x 4 zone posters under UPG100's own design
names (so the drawn card replaces the no-preview plugin card), and the
prayer packet's page 1 (the full letter zone poster). Keys in 11 locales.

check:upg100-zone-copy (in gates:pre) keeps the copy equal to UPG100's
originals beyond the import paths; once UPG100 switches to the library copy
and deletes its originals it becomes a one-path gate. Its self-test proves
a one-character edit, a changed clusters.json, a missing file, a half
switch and a re-definition each fail. check:poster-design-catalogue allows
a template to carry a plugin's design name only when it declares that
plugin (poisoned). Source only: poster-design is rebuilt when the heavy
slot reopens.
2026-10-03 04:26:50 +00:00
Doxa Maps
c6abc67706 Merge the pilot (development 1fa35309a) into wall-of-people-groups-plugin/work
The four Wall sources both sides changed (blessPoster.js, wall.css, wallCanvas.js, check-wall-no-bg-photos.mjs)
merged without conflict: the pilot's side is the comment-only privacy rewording of those files (c1a2f3698); both
sides are kept (no agent names; every branch change present). The generated files (the wall bundle, its leaf page
and the two manifests) were taken from the pilot and rebuilt from the merged source, then fix:sri and the tree.
2026-10-03 04:20:24 +00:00
Doxa Maps
e043402006 Poster Design: production designs first; experimental ones in a collapsed group
Styles now lists the production designs by family, and puts every
experimental design last, in one Experimental (in progress) group that
starts collapsed (a click opens it). Experimental: the side-lane country
sheets (66x66, 36x60, and 60x96, still being designed), the map print (no
preview: it prints the live map), and every other plugin's design (made by
its own plugin, so not drawn here). templates.js marks them experimental;
posterDesign.family.experimental is new in all 11 locales.
2026-10-03 04:19:37 +00:00
Doxa Maps
0777bd6d1c Regions dashboard: two views again, Regions List and Region Dashboards; the Country Posters view and its profile are removed (the list's per-region country posters stay) 2026-10-03 04:17:42 +00:00
Doxa Maps
e380ab8cbb Wall of People Groups: UPG-style section dividers, the cornerstone line as the call to action, and the priestly blessing as the footer
The Bless poster follows the UPG 100 List posters' structure:
- the header and the prayer-themes chart close on dividers that run the page's width (to a quarter of the
  border from the sheet's edge), while the text stays in the content column;
- at the foot: the call to action in a band ruled across the page ("Jesus Christ is the cornerstone, and we
  are living stones. ... bless them in his name, and join the global family in prayer.", moved down from the
  header), then the journey's table, a page-wide rule, and the footer: the whole priestly blessing,
  Numbers 6:24-26 (World English Bible British Edition, public domain, verbatim), in two lines that fill
  the width, with its reference and the credit line.

Measured on the print at 3 x 4, 2 x 3 and 5 x 8 ft, en and ar: the blessing fills 99.2% of the text width
(49 pt at 3 x 4, 74 pt at 5 x 8); the call to action is one line, 97.6% of its band in English; no text
overflows (the only overflow is the dividers' intended reach past the column). Both em constants come from
those measurements. Cards: 3 x 4 0.49 in, 2 x 3 0.35 in, 5 x 8 0.92 in (one verse per row).
2026-10-03 04:13:07 +00:00
Doxa Maps
547760b512 Re-add upg100's posterDesign block to its poster-wall meta, on the pilot's new label
The three upg100-territory-poster designs (2759ff493), unchanged, on top of
the pilot's renamed label. Tree and SRI regenerated.
2026-10-03 00:58:39 +00:00
Doxa Maps
69510aae86 Merge the pilot (development) 1fa35309a into poster-design-plugin/size-labels
Conflicts resolved by taking the pilot's side: upg100's
my-upg-100-list/poster-wall.meta.json (its new label) and the generated
files (regenerated). upg100's posterDesign block is re-added in the next
commit.
2026-10-03 00:58:33 +00:00
Doxa Maps
042d2ec10f UPG100 packet: the set captions count every group of the list
A group with no record in a set figure's data (no near-neighbour data,
for example) was in none of that figure's numbers, so the captions
added up to less than the list: Laos printed 94 of its 95 groups. Each
caption now names the groups without data ("1 without data", in all 11
languages), so its parts add up to the list. check:packet-variants
asserts the sum both ways.
2026-10-03 00:55:43 +00:00
Doxa Maps
81dc4a9a5d Merge the pilot (development 1fa35309a) into the no-India-tab fix 2026-10-03 00:54:30 +00:00
Doxa Maps
1fa35309af Rebuild the sheet generator and packet renderer carriers for the full-width life charts, the shorter page-1 strategy and the self-fitting points page: poster-render re-pinned, the tree and SRI regenerated 2026-10-03 00:25:39 +00:00
Doxa Maps
e3d56d2f15 UPG100 packet: full-width life charts, a shorter page-1 strategy, self-fitting points
- The life calendar and the reached chart share one grid at the page's
  full printable width: each week a 22x11 box, bold year numbers every
  5 years (larger every 10), week numbers 1/13/26/39/52, a clear rule
  every 10 years and light rules at the quarters. The reached chart has
  no week or year numbers; each 10-row block is labelled with its share
  of the list's people, 10% to 100%.
- Page 1: the UPG100 series sets its own one-paragraph Jesus column
  (series.json strategyBody) and prints the explainer's first paragraph
  only (sideBoxMore), so the three columns balance and the map grows.
  The long text is one constant shared by both header layouts; the
  Country and India-state posters print it unchanged.
- The points page takes, per language, the largest size tier that fits
  one sheet, up to the earlier two-sheet sizes. The tier comes from a
  character-count estimate; the render gate fails if the real page is
  ever taller than that estimate.
2026-10-03 00:20:58 +00:00
Doxa Maps
daa757d972 No India tab on the pilot by dev mode alone: the India preview (its tab and its whole-country poster) needs an explicit opt-in too, ?preview=india or localStorage 'dxm-preview', and every built bundle still compiles the whole read away. The gates hold the opt-in and that dev mode alone stays withheld. 2026-10-03 00:20:35 +00:00
Doxa Maps
649038a917 Rebuild the sheet generator and packet renderer carriers for the packet points on one sheet and the reordered page-1 columns: poster-render re-pinned, the tree and SRI regenerated 2026-10-02 23:41:25 +00:00
Doxa Maps
f22dc7db00 UPG100 packet: points on one sheet, page-1 columns reordered
- The twelve prayer points and the themes fit one sheet again, as large
  as the page allows (points 18.5px, themes 19px); measured in all 11
  languages, the tightest keeps 75px under the last point.
- Page 1 header columns read: Jesus' Strategy to Feed the 5000 | the
  facts | What is a UPG100 List? The facts' labels are bold.
- The header columns are measured for a fallback font too, so the right
  column no longer runs to the border when Lato is absent.
- check:packet-render expects one points sheet.
2026-10-02 23:38:26 +00:00
Doxa Maps
789c3b8744 Merge the pilot (development 0dc73cc48, the docs rename) into the packet v2 final landing 2026-10-02 22:55:41 +00:00
Doxa Maps
98764ecae4 Rebuild the sheet generator and packet renderer carriers for the packet v2 final pages: poster-render re-pinned, the tree and SRI regenerated 2026-10-02 22:53:24 +00:00
Doxa Maps
4d4fa4f6d0 Packet print at reading size: the prayer points flow over two sheets at ~9pt, and Full detail's tally heads take two lines over the worksheet's 160px columns
Points: text 22.5px (~9.2pt on letter), headings 25px, the Mark 5 passage 20px, the themes 21px; the themes and
points 1–6 on the first sheet, 7–12 and the credit on the second, each titled with its range. Measured in all 11
languages: the fullest first sheet keeps ~330px. Full detail: tally columns 160px (the worksheet's), heads 15px
in two lines in every language, the first-page block 720px (the tallest, ru, uses 692), 11 rows on the first page.
Gates: the render gate measures BOTH points sheets (pointsOver), counts the points by .pt-h across the document,
expects 2 points sheets; the structure gate reads consecutive points sheets as one entry; profile-table probes the
15px tier between the two budgets wherever they fall.
2026-10-02 22:50:16 +00:00