From 33362f5592d0d3daf505aa05d0ad32e773996bed Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 09:20:02 +0000 Subject: [PATCH] Let the gospel map's own text follow the reader's direction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eight CSS declarations in the production profile still named a physical side, so in Arabic they pinned translated text to the left: the legend key's wrapped label, the search-match rows, the people-group buttons in the gap list and in the detail panel, the error line, two chip margins, and the row-count badge beside each table tab. Every one of them now uses the logical property — text-align:start, margin-inline-start — which is identical to today in every left-to-right locale and correct in the two right-to-left ones. Found by auditing the production profile's localization rather than by a rendering failure, which is how this kind of defect stays in: the Arabic page looks translated, because it is, and only the alignment quietly disagrees with it. Nothing in the English-prose islands changed. Those carry dir="ltr" on purpose — the caveats stay English by the standing ruling, and the isolation is what keeps them from disturbing the Arabic text around them. Rebuilt gospel-resources only, then fix:sri; check:sri passes at 64/64 leaves. --- plugin-designs/gospel-resources/data-tables.vue | 2 +- plugin-designs/gospel-resources/resources-map.vue | 14 +++++++------- public/dx-maps/doxa-maps-spa/manifest.json | 12 ++++++------ public/dx-maps/gospel-resources/charts/index.html | 2 +- .../gospel-resources/data-tables/index.html | 2 +- .../gospel-resources/gospel-dashboard/index.html | 2 +- .../dx-maps/gospel-resources/gospel-resources.js | 4 ++-- .../gospel-resources/resources-list/index.html | 2 +- .../gospel-resources/resources-map/index.html | 2 +- public/dx-maps/manifest.json | 12 ++++++------ 10 files changed, 27 insertions(+), 27 deletions(-) diff --git a/plugin-designs/gospel-resources/data-tables.vue b/plugin-designs/gospel-resources/data-tables.vue index 8ea77ec9e..46d3a4b4f 100644 --- a/plugin-designs/gospel-resources/data-tables.vue +++ b/plugin-designs/gospel-resources/data-tables.vue @@ -360,7 +360,7 @@ useShadowStyles( '.is-dark .gt-tab.on{background:#92b195;border-color:#92b195;color:#0f1419}' + '.gt-load{padding:22px;text-align:center;font-size:12.5px;opacity:.6}' + '.gt-err{padding:11px 13px;border-radius:8px;background:rgba(220,38,38,.10);color:#a12020;font-size:12.5px}' + - '.gt-n{font-size:10.5px;opacity:.6;margin-left:5px;font-variant-numeric:tabular-nums}', + '.gt-n{font-size:10.5px;opacity:.6;margin-inline-start:5px;font-variant-numeric:tabular-nums}', 'doxa-gospel-tables', ) diff --git a/plugin-designs/gospel-resources/resources-map.vue b/plugin-designs/gospel-resources/resources-map.vue index 86d7862a5..233fb189c 100644 --- a/plugin-designs/gospel-resources/resources-map.vue +++ b/plugin-designs/gospel-resources/resources-map.vue @@ -1956,7 +1956,7 @@ useShadowStyles( '.gm-key{display:flex;align-items:center;gap:5px;font-size:14px;white-space:nowrap}' + // This one label is a phrase, not a legend word, so it is allowed to wrap rather than // be clipped by the nowrap above. - '.gm-key.wide{white-space:normal;text-align:left;line-height:1.25}' + + '.gm-key.wide{white-space:normal;text-align:start;line-height:1.25}' + '.gm-sw{width:12px;height:12px;border-radius:3px;flex:none}' + '.gm-dot{width:10px;height:10px;border-radius:50%;flex:none;display:inline-block;' + 'border:1.4px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.18);vertical-align:-1px}' + @@ -1971,7 +1971,7 @@ useShadowStyles( '.gm-filtered{margin-top:5px;font-size:13.5px;line-height:1.45;color:#3b463d}' + '.is-dark .gm-filtered{color:#e5e7eb}' + '.gm-kclear{border:1px solid #d1d4cd;background:#fff;color:#3b463d;font:600 10.5px inherit;' + - 'padding:3px 8px;border-radius:6px;cursor:pointer;margin-left:4px;min-height:24px}' + + 'padding:3px 8px;border-radius:6px;cursor:pointer;margin-inline-start:4px;min-height:24px}' + '.gm-pinkey-h{font-size:14px;font-weight:600;margin-bottom:4px}' + '.gm-caveat{margin-top:5px;font-size:13.5px;opacity:.72;line-height:1.4}' + '.gm-dot-hole{border:2.5px solid #7d3b30;box-sizing:border-box}' + @@ -2028,7 +2028,7 @@ useShadowStyles( '.gm-q:focus{outline:2px solid #92b195;outline-offset:1px}' + '.gm-qx{position:absolute;inset-inline-end:4px;top:50%;transform:translateY(-50%);border:0;background:transparent;color:#6d766e;font-size:19px;line-height:1;cursor:pointer;padding:4px 6px;min-height:24px}' + '.gm-qres{margin:-2px 0 7px;border:1px solid #d1d4cd;border-radius:8px;background:#fff;overflow:hidden}' + - '.gm-qrow{display:flex;align-items:baseline;gap:6px;width:100%;text-align:left;border:0;background:transparent;font:inherit;font-size:14px;color:#3b463d;padding:6px 8px;cursor:pointer;min-height:30px;border-bottom:1px solid #eceee9}' + + '.gm-qrow{display:flex;align-items:baseline;gap:6px;width:100%;text-align:start;border:0;background:transparent;font:inherit;font-size:14px;color:#3b463d;padding:6px 8px;cursor:pointer;min-height:30px;border-bottom:1px solid #eceee9}' + '.gm-qrow:last-child{border-bottom:0}' + '.gm-qrow:hover{background:#f3f3f1}' + '.gm-qn{font-weight:700}' + @@ -2081,19 +2081,19 @@ useShadowStyles( // must look identical, so the shell carries the box and .gm-pg-btn/.gm-pg-open carry // the interactive bits. cursor:pointer is NOT on the shell — on a resource row the // gaps between the name and the chips are not clickable, and saying otherwise lies. - '.gm-pg{width:100%;box-sizing:border-box;text-align:left;display:block;padding:8px 9px;' + + '.gm-pg{width:100%;box-sizing:border-box;text-align:start;display:block;padding:8px 9px;' + 'margin-bottom:6px;border-radius:8px;' + 'border:1px solid rgba(0,0,0,.10);background:rgba(0,0,0,.02);color:inherit;font:inherit}' + '.is-dark .gm-pg{border-color:rgba(255,255,255,.10);background:rgba(255,255,255,.03)}' + '.gm-pg-btn{cursor:pointer;text-decoration:none;color:inherit}' + // The drill-in control on a resource row: a bare button that inherits the shell's // look, so the row still reads as one tap-target for the name + language line. - '.gm-pg-open{display:block;width:100%;text-align:left;padding:0;margin:0;border:0;' + + '.gm-pg-open{display:block;width:100%;text-align:start;padding:0;margin:0;border:0;' + 'background:transparent;color:inherit;font:inherit;cursor:pointer}' + '.gm-pg-n{display:block;font-weight:700;font-size:15.5px}' + '.gm-pg-l{display:block;font-size:14px;opacity:.75;margin-top:1px}' + '.gm-code{display:inline-block;font:600 10px ui-monospace,SFMono-Regular,Menlo,monospace;' + - 'padding:1px 5px;border-radius:4px;background:rgba(0,0,0,.09);margin-left:5px;vertical-align:1px}' + + 'padding:1px 5px;border-radius:4px;background:rgba(0,0,0,.09);margin-inline-start:5px;vertical-align:1px}' + '.is-dark .gm-code{background:rgba(255,255,255,.12)}' + '.gm-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}' + // nowrap keeps the short status chips ("Film - link checked") on one line, but a Door43 @@ -3099,7 +3099,7 @@ useShadowStyles(
Loading resources…
-
{{ pgErr }}
+
{{ pgErr }}