Release every window global this profile sets, on unmount
A window key holding a closure pins the whole app after unmount -- the component, its shadow root, and everything they reference, measured at roughly 10 MB per mount. The three test handles here each close over live state (the search index, the map, the selection), so each one is a full retention path. SIX GLOBALS, NOT THREE. The check names the three it can see, but each named handle has a paired per-instance registry -- __UPG_SEARCH__/__UPG_SEARCHES__, __UPG_MAP__/__UPG_MAPS__, __UPG_SELECT__/__UPG_SELECTS__. Releasing only the named half leaves the registry holding the same closure, so the leak survives in the copy nobody was looking at. The two halves need opposite handling, which is why this is not one loop. A named handle is a single slot that the last mount overwrites, so deleting it blindly would strip a LIVE sibling's handle -- it is cleared only if it is still the object this instance published, captured at assignment so it cannot drift from what went out. A registry entry is keyed by instance, so my key is always mine to delete, and deleting the whole registry would strip the siblings. Verified against the two-instance case rather than the single-mount one: A mounts, B mounts and takes the named slot, A unmounts -- B keeps its handle and its registry entry, and after both unmount nothing is retained. One delete per line, deliberately: the check reads these statements, so a loop over a key list would release correctly and still be reported as a leak. The whole block is wrapped because a frozen or cross-origin window must never break teardown.
This commit is contained in:
parent
114075f9ab
commit
988092d363
7 changed files with 191 additions and 156 deletions
|
|
@ -137,6 +137,11 @@ const profileConfig = inject('profileConfig', ref(null))
|
|||
// over with a counter, because a key that changes between mounts would be worse than one that
|
||||
// repeats — a gate could not name the instance it wants.
|
||||
// A function, not a computed: it is read twice inside the map-ready path, never rendered.
|
||||
// The exact objects THIS instance put on window, so teardown can identity-check before deleting a
|
||||
// shared named slot — the last mount wins that slot, so a blind delete would strip a live sibling's
|
||||
// handle. Captured at assignment rather than rebuilt, so they cannot drift from what was published.
|
||||
let _mySearchHandle = null, _myMapHandle = null, _mySelectHandle = null
|
||||
|
||||
function testHandleKey() {
|
||||
return profileConfig.value?.instanceId || profileConfig.value?.profile || 'upg-100-list'
|
||||
}
|
||||
|
|
@ -973,6 +978,7 @@ function buildSearch(records) {
|
|||
},
|
||||
}
|
||||
// Mirrored per instance, same reason and shape as __UPG_MAPS__ (AUDIT34 card 9).
|
||||
_mySearchHandle = window.__UPG_SEARCH__
|
||||
;(window.__UPG_SEARCHES__ ||= {})[testHandleKey()] = window.__UPG_SEARCH__
|
||||
}
|
||||
}
|
||||
|
|
@ -2273,6 +2279,7 @@ onMounted(async () => {
|
|||
// instance it wants can ask for it; a caller that does not keeps today's behaviour.
|
||||
if (typeof window !== 'undefined') {
|
||||
window.__UPG_MAP__ = map
|
||||
_myMapHandle = map
|
||||
;(window.__UPG_MAPS__ ||= {})[testHandleKey()] = map
|
||||
}
|
||||
|
||||
|
|
@ -2373,6 +2380,7 @@ onMounted(async () => {
|
|||
},
|
||||
}
|
||||
// Mirrored per instance, same reason and same additive shape as __UPG_MAPS__ above.
|
||||
_mySelectHandle = window.__UPG_SELECT__
|
||||
;(window.__UPG_SELECTS__ ||= {})[testHandleKey()] = window.__UPG_SELECT__
|
||||
|
||||
// Legend tree + selectors are already built (bootstrapLegend() at the top of
|
||||
|
|
@ -2770,6 +2778,33 @@ onBeforeUnmount(() => {
|
|||
if (_detachEdges) { try { _detachEdges() } catch (_) {} _detachEdges = null }
|
||||
if (map) { map.remove(); map = null }
|
||||
tapestry = null
|
||||
|
||||
// ── RELEASE EVERY WINDOW GLOBAL THIS PROFILE SET ────────────────────────────
|
||||
// ★ A window key holding a closure PINS THE WHOLE APP after unmount — the component, its shadow
|
||||
// root and everything they reference — measured at roughly 10 MB per mount. The test handles below
|
||||
// close over searchIndex, the map and selectedTerritories, so each one is a full retention path.
|
||||
// ⚠ SIX GLOBALS, NOT THREE. Each named handle has a paired per-instance REGISTRY
|
||||
// (__UPG_SEARCH__/__UPG_SEARCHES__, __UPG_MAP__/__UPG_MAPS__, __UPG_SELECT__/__UPG_SELECTS__), and
|
||||
// releasing only the named half leaves the registry holding the same closure — the leak survives
|
||||
// in the copy nobody was looking at. Release the SET.
|
||||
// ⚠ AND THE TWO HALVES NEED OPPOSITE HANDLING, which is why this is not one loop:
|
||||
// · a NAMED handle is a single slot the last mount overwrites, so deleting it blindly would strip
|
||||
// a LIVE sibling's handle. Identity-check: clear it only if it is still MINE.
|
||||
// · a REGISTRY entry is keyed by instance, so my key is always mine to delete — and deleting the
|
||||
// whole registry would strip the siblings.
|
||||
// One delete per line, deliberately: the gate reads these statements, and a loop over a key list
|
||||
// would release correctly and still be reported as a leak.
|
||||
if (typeof window !== 'undefined') {
|
||||
const k = testHandleKey()
|
||||
try {
|
||||
if (window.__UPG_SEARCHES__) delete window.__UPG_SEARCHES__[k]
|
||||
if (window.__UPG_MAPS__) delete window.__UPG_MAPS__[k]
|
||||
if (window.__UPG_SELECTS__) delete window.__UPG_SELECTS__[k]
|
||||
if (window.__UPG_SEARCH__ === _mySearchHandle) delete window.__UPG_SEARCH__
|
||||
if (window.__UPG_MAP__ === _myMapHandle) delete window.__UPG_MAP__
|
||||
if (window.__UPG_SELECT__ === _mySelectHandle) delete window.__UPG_SELECT__
|
||||
} catch (_) { /* a frozen or cross-origin window must not break teardown */ }
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -838,7 +838,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA",
|
||||
"integrity": "sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -861,7 +861,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -877,7 +877,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -893,7 +893,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -838,7 +838,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA",
|
||||
"integrity": "sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -861,7 +861,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -877,7 +877,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -893,7 +893,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z\" crossorigin=\"anonymous\"></script>\n<!-- provider: \"maplibre\" is the default; change it to \"mapbox\" and fill tk to use Mapbox. -->\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"provider\":\"maplibre\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-7vRCODlnAzFyyygRrPQW8Nt6Cqly4P9Eg9Gt/vD2KVpOQjrjufxN3ty9kWWSUcBA" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-p2sykUXD9mKnE9bF3Aw6ukX3jBdLZeNe4nIJgUxQI5+9I6H4XA8eWD/k7dMnI83Z" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue