P assembly: the last census lines, stated neutrally
The census on the assembled branches still found eleven comments that attributed a choice to a dated request, quoted it, or spoke in the first person: pplr-data-maps (geocoder, pin card, pin indicator, tree, families, religion, semantic trees), research-dashboard's ramp note, upg-100-list's funnel note, and two dated QA tags each in countries-map and research-map. Comments only; behaviour unchanged.
This commit is contained in:
parent
e7a1c940ef
commit
4de20daed6
11 changed files with 22 additions and 22 deletions
|
|
@ -192,7 +192,7 @@ useShadowStyles(`
|
|||
/* Geocoder column matches the SemanticTreeLegend's .stl-panel — 8px from the START edge (logical, so it
|
||||
moves right under ar with the legend; a physical left:8px kept it left),
|
||||
width:380px — so the search bar and the legend stack as one column at
|
||||
the same x-edge (PPLR alignment, qa: 2026-05-02). */
|
||||
the same x-edge (PPLR alignment). */
|
||||
/* Both engines' container class: MapLibre names it .maplibregl-ctrl-top-left, and with only the Mapbox
|
||||
selector the column got no position or width at all under MapLibre. */
|
||||
.mapboxgl-ctrl-top-left, .maplibregl-ctrl-top-left { top:12px!important;inset-inline-start:8px!important;width:380px!important;max-width:380px!important;z-index:1200!important; }
|
||||
|
|
@ -548,7 +548,7 @@ const geocoderRef = ref(null)
|
|||
// 'collapsed' on first visit). Replaces the iter-3 always-collapse-on-
|
||||
// switch behavior, which the user found jarring — they want returning
|
||||
// to a tab to restore whatever tier (collapsed / open / fullyOpen) they
|
||||
// last had it at. qa: 2026-05-02.
|
||||
// last had it at.
|
||||
const _tabLegendState = new Map()
|
||||
watch(() => activeTabId?.value, async (newTabId, oldTabId) => {
|
||||
if (oldTabId !== undefined && newTabId !== oldTabId) {
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ useShadowStyles(`
|
|||
/ --map-font-sm CSS vars are set by applyContainerScale() below. ── */
|
||||
/* Geocoder column matches the SemanticTreeLegend's .stl-panel — inset-inline-start:8px,
|
||||
width:380px — so the search bar and the legend stack as one column at
|
||||
the same x-edge (PPLR alignment, qa: 2026-05-02). */
|
||||
the same x-edge (PPLR alignment). */
|
||||
/* The search pill is exactly as wide as the legend below it: both follow --map-legend-width. */
|
||||
/* ★ LOGICAL, so the search bar and the legend mirror TOGETHER (studio's legend sweep).
|
||||
This column exists to sit at the same x-edge as SemanticTreeLegend's .stl-panel — that is the
|
||||
|
|
@ -682,7 +682,7 @@ const geocoderRef = ref(null)
|
|||
// 'collapsed' on first visit). Replaces the iter-3 always-collapse-on-
|
||||
// switch behavior, which the user found jarring — they want returning
|
||||
// to a tab to restore whatever tier (collapsed / open / fullyOpen) they
|
||||
// last had it at. qa: 2026-05-02.
|
||||
// last had it at.
|
||||
const _tabLegendState = new Map()
|
||||
watch(() => activeTabId?.value, async (newTabId, oldTabId) => {
|
||||
if (oldTabId !== undefined && newTabId !== oldTabId) {
|
||||
|
|
|
|||
|
|
@ -1705,8 +1705,8 @@ async function packetFunnel() {
|
|||
// allLists(), and summing all 29 gives 2,209 against a total of 2,106, so the deaf lists OVERLAP
|
||||
// the geographic ones. They are a second, cross-cutting partition, which means "in no list" has no
|
||||
// single answer until someone says which partition is meant.
|
||||
// A confident figure I cannot defend is exactly the defect class I have been removing from other
|
||||
// surfaces all day; this one I put here myself. funnelPage already falls back to the
|
||||
// A confident figure that cannot be defended is exactly the defect class removed from other
|
||||
// surfaces; this one was introduced here. funnelPage already falls back to the
|
||||
// provenance-only footnote when unassigned is absent, so the page simply stops claiming it.
|
||||
// Carded as a product question: 27 geographic / 29 counting deaf, and whether "Central Asia + Pakistan"
|
||||
// (55 groups, contiguous, poster-walled as a real region) is a prayer list rather than a residual.
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ function buildLocalGeocoder() {
|
|||
if (out.length >= props.localMax) break
|
||||
}
|
||||
// Sort priority: BROADER scope first (lower depth = bigger bucket), then
|
||||
// prefix matches, then population/count desc. Per user 2026-05-02:
|
||||
// prefix matches, then population/count desc. Found in QA:
|
||||
// searching "Arabic" was selecting the narrow "Arabic" language node
|
||||
// (depth 1) instead of the family "Arab (Arabic)" (depth 0) — only some
|
||||
// Arabic pins showed. Depth-first means picking the top result now
|
||||
|
|
@ -137,7 +137,7 @@ function setup() {
|
|||
// Wrap entire setup in try/catch — a geocoder failure must NEVER bubble
|
||||
// out of onMounted, since Vue's "Unhandled error during execution of
|
||||
// mounted hook" cascades and can prevent sibling components (the map!)
|
||||
// from mounting. Per user 2026-05-02: map went completely blank when
|
||||
// from mounting. Without the guard the map went completely blank when
|
||||
// the geocoder threw on shadow-DOM addTo().
|
||||
try {
|
||||
if (isMaplibre) {
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ const instance = useInstance()
|
|||
const tr = usePplrT() // not `t`: the names table below is already called t
|
||||
const pinData = computed(() => props.pin || instance?.pinDetail.value || null)
|
||||
|
||||
// All 17 locale names for this PG (n_en, n_hi, n_bn, …). Per user 2026-05-02:
|
||||
// the popup-style display couldn't show all 17, so we render them as their own
|
||||
// All 17 locale names for this PG (n_en, n_hi, n_bn, …). The popup-style
|
||||
// display couldn't show all 17, so they render as their own
|
||||
// scrollable section in the sidebar with "—" placeholders for missing locales.
|
||||
// The 17 names no longer ride on every pin (they were two-thirds of the 23 MB points file); they
|
||||
// load from pg-names.json the first time a card opens, keyed by PG code in LOCALES order.
|
||||
|
|
|
|||
|
|
@ -247,9 +247,9 @@ export function bindFuzzyPinClick(map, layerId, handler, { tolerance = 8 } = {})
|
|||
|
||||
/**
|
||||
* Selected-pin indicator: a Mapbox marker with an SVG pin icon hovering over
|
||||
* the clicked point. Mirrors the pattern DOXA's research-mfe uses ("the go
|
||||
* indicator that shows which pin you actually selected" — user feedback
|
||||
* 2026-05-02). Returns a controller object the profile holds onto.
|
||||
* the clicked point. Mirrors the pattern DOXA's research-mfe uses (a go
|
||||
* indicator that shows which pin is actually selected).
|
||||
* Returns a controller object the profile holds onto.
|
||||
*
|
||||
* Usage:
|
||||
* const indicator = makePinIndicator()
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { usePplrT } from '../composables/usePplrT.js'
|
|||
/**
|
||||
* pplr-d3-tree.vue — ROP People-Affinity-Cluster sunburst.
|
||||
*
|
||||
* Per user 2026-05-02: capped at depth-2 (Affinity Bloc + Cluster) instead
|
||||
* Capped at depth-2 (Affinity Bloc + Cluster) instead
|
||||
* of including the 13k+ People Group leaves at depth 3. SVG sunbursts top
|
||||
* out around 1k arcs before scroll-zoom gets unresponsive; depth 2 is ~309
|
||||
* arcs, which keeps wheel-zoom snappy. The PG-level data is still surfaced
|
||||
|
|
|
|||
|
|
@ -81,8 +81,8 @@ const familyColorMap = new Map(FAMILIES.map(f => [f.key, f.color]))
|
|||
function familyColor(fam) { return familyColorMap.get(fam) || familyColorMap.get('Other') }
|
||||
|
||||
// LoadingGlobe stays mounted until pins are added to the map. Flips true after
|
||||
// setupLayers + family aggregation completes. Per user 2026-05-02: don't drop
|
||||
// the loader before pins populate.
|
||||
// setupLayers + family aggregation completes: the loader must not drop
|
||||
// before pins populate.
|
||||
const dataReady = ref(false)
|
||||
function reload() { window.location.reload() }
|
||||
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ onMounted(async () => {
|
|||
pgData.value.features.forEach(f => { const g = f.properties.rg; counts[g] = (counts[g] || 0) + 1 })
|
||||
religionCounts.value = counts
|
||||
const dominant = RELIGION_GROUPS.reduce((a, b) => (counts[a.key] || 0) > (counts[b.key] || 0) ? a : b)
|
||||
// Per user 2026-05-02: drop the "Ready" prefix — it was unclear and chewed up width.
|
||||
// No "Ready" prefix: it was unclear and chewed up width.
|
||||
status.value = t('pplr.status.readyReligion', { pins: pgData.value.features.length.toLocaleString(), religion: groupLabel(dominant), count: (counts[dominant.key]||0).toLocaleString() })
|
||||
// keep the LoadingGlobe up until the pins are actually drawn, not merely added
|
||||
await whenGeojsonDrawn(map.value)
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ onBeforeUnmount(() => resizeObs?.disconnect())
|
|||
</template>
|
||||
|
||||
<style scoped>
|
||||
/* Per user 2026-05-02: all 4 cells must fit in the viewport without scroll.
|
||||
/* All 4 cells must fit in the viewport without scroll.
|
||||
.page is now a flex column that fills the profile; .trees-grid takes the
|
||||
remaining height with two equal rows. Each cell hides overflow so a
|
||||
text-heavy cell (the discovery "?" cell) cannot make its row taller than
|
||||
|
|
@ -329,7 +329,7 @@ onBeforeUnmount(() => resizeObs?.disconnect())
|
|||
border-radius: 8px;
|
||||
padding: 6px 8px;
|
||||
box-shadow: 0 3px 10px rgba(0,0,0,0.22);
|
||||
/* Per user 2026-05-02: cells were hiding field columns. Allow per-cell
|
||||
/* Cells were hiding field columns. Allow per-cell
|
||||
scrolling instead — full content stays visible inside its tile. */
|
||||
overflow: auto;
|
||||
display: flex; flex-direction: column;
|
||||
|
|
|
|||
|
|
@ -473,9 +473,9 @@ function setLiveResize(on) {
|
|||
// WCAG contrast over the composited Positron ground + Machado CVD matrices).
|
||||
//
|
||||
// ── ★ WIDENED 2026-09-23 (card P0, reported) + NAMED RAMP REGISTRY ────────────────────────────
|
||||
// Reported: the 60-149 red is the same red as the heartbeat zone; the red shades need to be more
|
||||
// spaced out so it is more easy to tell the distinction — and i need to have grey scale as a
|
||||
// backdrop from grey to black, just in case i need to swap from red to black scale."
|
||||
// The 60-149 red was the same red as the heartbeat zone, so the red shades are spaced further
|
||||
// apart to tell the bands apart, and a grey-to-black scale is registered as a backdrop so the
|
||||
// ramp can swap from red to black.
|
||||
//
|
||||
// ★ THE RAMP WAS ALREADY MATHEMATICALLY EVEN, AND HE WAS STILL RIGHT — that tension is the
|
||||
// finding, not a contradiction to argue with. Measured in plain sRGB Euclidean distance, the old
|
||||
|
|
|
|||
Loading…
Reference in a new issue