Prepare repo to the vision: BLUF vision-cast README, library warning, SRI injection, term scrub
- README rewritten as a BLUF-first vision cast for vibe coders (key-terms glossary, origin story, features, requirements, data caveat, developer's note). - library/components/WARNING.md: prototype in your app-profile; only proven, parameterized components graduate into the shared library. - generate-tree.mjs: inject Subresource Integrity (sha384) + crossorigin into the standalone page <script> tags and the copy-paste embed snippets (manifest = registry). - Scrubbed identity-tied phrasing from comments/docs, keeping the technical rationale and the mission content.
This commit is contained in:
parent
73165a0eca
commit
994b8d7dcf
42 changed files with 316 additions and 143 deletions
257
README.md
257
README.md
|
|
@ -1,93 +1,236 @@
|
|||
# doxa-maps
|
||||
# doxa-maps — a JAMstack map bundler for vibe coders
|
||||
|
||||
**A JAMstack bundler for composable, embeddable-first maps — one build outputs every map as a framework-agnostic web component, and composes them into a single-page application.**
|
||||
> **Built by a vibe coder, for vibe coders.** If you use AI to write your code and you dream
|
||||
> of making maps to reach your city — your nation — every people group — for Jesus, this is for you.
|
||||
|
||||
```
|
||||
app-profiles/<map>/ bun run build where they run
|
||||
┌──────────────────┐ ┌──────────────────┐ ┌─────────────────────────┐
|
||||
│ your map screens │ │ one .js per map │ │ ▸ any partner website │
|
||||
│ (.vue) + colors + │──────► │ Vue + CSS inlined │────► │ ▸ a SPA (several maps │
|
||||
│ data wiring │ │ tree-shaken IIFE │ │ in one layout) │
|
||||
└──────────────────┘ │ + an index.html │ │ ▸ Android/iOS app │
|
||||
shared library/ ──────► │ per map page │ │ (Capacitor) │
|
||||
(@map: legend, map, └──────────────────┘ └─────────────────────────┘
|
||||
controls — reused) public/doxa-maps/… one build → three products
|
||||
```
|
||||
---
|
||||
|
||||
| The idea | In one line |
|
||||
|---|---|
|
||||
| **Bundle** | one self-contained `.js` = a custom HTML tag (`<my-map>`) — drop it on any page, no framework, no build step for the host |
|
||||
| **Embeddable by default** | every map also gets a generated standalone page — link it or iframe it (Start.me, Notion, any CMS) |
|
||||
| **Many maps, one bundle** | a bundle holds as many map screens as you want; add a `.vue`, rebuild |
|
||||
| **Lean & fast** | tree-shaken, Vue + CSS inlined → **one request**, faster than loading Vue from a CDN, nothing to 404 |
|
||||
| **JAMstack hot-swap** | data API, token, even the map engine (Mapbox ↔ MapLibre) are runtime settings — change them with **no rebuild** |
|
||||
| **SPA** | compose several maps into one lazy-loaded layout → a full map site from the same build |
|
||||
## Bottom line up front
|
||||
|
||||
> ✨ **Don't write code?** Describe your map to an AI coding agent — start at
|
||||
> **[docs/tutorial.md](./docs/tutorial.md)**.
|
||||
**doxa-maps is one repository that holds *all* your maps and turns them into embeddable apps with a single command.**
|
||||
|
||||
- **One folder for every map.** Not 50 folders scattered across your laptop — one repo, one shared library.
|
||||
- **One command to preview:** `bun run dev` → a live playground showing every map in one place, each with a copy‑paste embed snippet.
|
||||
- **One command to ship:** `bun run build` → every map comes out as a self‑contained file you can drop onto **any** website (your site, a partner church's site, WordPress), compose into a **single‑page app**, or wrap into a **mobile app** — *from the same code.*
|
||||
|
||||
You don't have to write the code yourself. Point your AI agent at the example maps in this repo, describe the map you want in plain English, and it builds a new one that reuses the shared library.
|
||||
|
||||
> ⚠️ **These maps do not come with their data.** They're JAMstack (pure JavaScript), so they fetch their
|
||||
> data — like people groups — from an **API** at runtime. See **[The data caveat](#the-data-caveat)** below.
|
||||
|
||||
---
|
||||
|
||||
## Key terms (don't be afraid of these — you can learn each in one search)
|
||||
|
||||
New to this? Read this table first. You do **not** need to memorize it — just know the words exist and where to learn them.
|
||||
|
||||
| Term | In plain words | Learn more |
|
||||
|---|---|---|
|
||||
| **Vibe coder** | Someone who builds with AI writing most of the code. That's who this is for. | — |
|
||||
| **JAMstack** | A way of building where the front end is just **J**avaScript, **A**PIs, and **M**arkup (HTML/CSS). It runs almost anywhere — including WordPress. | [jamstack.org](https://jamstack.org) |
|
||||
| **Bundler** | A tool that takes all your code and packs it into a few ready‑to‑ship files. This repo *is* a bundler for maps. | [vite.dev/guide](https://vite.dev/guide/) |
|
||||
| **Build step** | The one command (`bun run build`) that turns your code into those shippable files. Your agent can run it for you. | — |
|
||||
| **bun** | A fast, all‑in‑one replacement for `npm` (installs packages, runs scripts). We use it here. | [bun.sh](https://bun.sh) |
|
||||
| **node modules** | The reusable code packages your project depends on. `bun install` downloads them into `node_modules/`. | [bun.sh/docs](https://bun.sh/docs/cli/install) |
|
||||
| **Dev server** | A local preview website (`bun run dev`) that updates live as you edit. Yours runs at `http://localhost:5173`. | — |
|
||||
| **Vue / React** | Popular, well‑supported frameworks for building front ends. This bundler is built on **Vue** + **Vite**. You commit to learning one. | [vuejs.org](https://vuejs.org) |
|
||||
| **Web component** | A custom HTML tag (like `<doxa-map>`) that works on any page, no framework required. Each of your maps becomes one. | [MDN: Web Components](https://developer.mozilla.org/en-US/docs/Web/API/Web_components) |
|
||||
| **iframe** | A safe window that embeds one site inside another. Simple, isolated. | [MDN: iframe](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) |
|
||||
| **Shadow DOM** | Lets your map's JavaScript run *directly* inside the host page (not walled off in an iframe) so it can integrate deeply — while keeping its styles from clashing. | [MDN: Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM) |
|
||||
| **SPA (single‑page application)** | One page that composes several maps together in a layout — a whole map site from one build. | [MDN: SPA](https://developer.mozilla.org/en-US/docs/Glossary/SPA) |
|
||||
| **CDN** | A URL that serves a file (JavaScript/CSS) to be fetched and run in a browser. When you use Mapbox, you're loading its CDN. Your built maps are served the same way. | [MDN: CDN](https://developer.mozilla.org/en-US/docs/Glossary/CDN) |
|
||||
| **Minify** | The build shrinks your code into compact, hard‑to‑read (but still working) form — smaller and harder to copy. | [MDN: Minification](https://developer.mozilla.org/en-US/docs/Glossary/Minification) |
|
||||
| **Capacitor** | Wraps your web app into a real iOS/Android app — **same code, no Swift, no Flutter, no React Native.** | [capacitorjs.com](https://capacitorjs.com) |
|
||||
| **Lazy loading** | Only loads each map when it's actually needed, so a page with many maps stays fast. | [web.dev: lazy loading](https://web.dev/articles/lazy-loading) |
|
||||
|
||||
---
|
||||
|
||||
## Have you ever dreamed of making maps?
|
||||
|
||||
Here's the story. Maybe it's yours too.
|
||||
|
||||
You got into building software right as AI made it possible for anyone to write code. And you had a
|
||||
vision: **make maps** — every map you could imagine — to advance the Kingdom of God, so that every people
|
||||
in every place could hear the gospel of Jesus.
|
||||
|
||||
So you started. And it worked… for one map. AI is *great* at writing a single map — a couple thousand
|
||||
lines of code you can embed on a website.
|
||||
|
||||
But then you wanted a second map. And a fifth. And a fiftieth. And here's the wall you hit:
|
||||
|
||||
- Every new map meant **copying the whole thing** into a new folder — nothing was reusable.
|
||||
- Your maps grew past 2,000… 5,000… lines of tangled "spaghetti code."
|
||||
- You ended up with **50 folders, 50 map projects**, scattered across your machine — half of them lost.
|
||||
- Each one was fragile, glitchy, and impossible to maintain.
|
||||
|
||||
**If that's you: you built maps for Jesus. I salute you.** Those maps have their place. But you were
|
||||
missing one thing — a *framework* that lets all your maps live in one place and share reusable pieces.
|
||||
|
||||
That's what this is.
|
||||
|
||||
---
|
||||
|
||||
## What doxa-maps gives you
|
||||
|
||||
- **One repository for all your maps.** Each map is an *application profile* in `app-profiles/<your-map>/`.
|
||||
- **A shared library of reusable, parameterized components** (`library/` — the map, the legend, the
|
||||
controls, the search bar) so your maps stop duplicating code.
|
||||
- **Room for each map's own custom code** — because real maps always have something unique.
|
||||
- **Rapid prototyping.** Add a `.vue` file, rebuild, and it's live. Build *hundreds* of maps from one library.
|
||||
- **Your agent's happy place.** Everything's in one folder, so your AI agent has all the context it needs to
|
||||
build the next map from the examples already here.
|
||||
|
||||
---
|
||||
|
||||
## The parts that make you do a backflip
|
||||
|
||||
- **One build → many embeddable maps.** `bun run build` turns every map into a self‑contained web component
|
||||
*and* generates a standalone HTML page for each one.
|
||||
- **Embed anywhere.** Drop a map on your own site, a partner church's site, or WordPress — via an **iframe**
|
||||
(safe and isolated) *or* via **shadow DOM** (the map's JavaScript runs directly in the page, for deep
|
||||
integration and power features).
|
||||
- **Compose maps into a single‑page app.** Put several maps into one layout — a whole multi‑map site — and it
|
||||
**lazy‑loads** each map so it stays fast even when there are many.
|
||||
- **Turn it into a mobile app.** The same code runs as an **iOS/Android app** via **Capacitor** — no new
|
||||
language to learn. Design it mobile‑friendly right in your browser (inspect element → switch to a phone
|
||||
aspect ratio), then wrap it.
|
||||
- **Your source stays protected.** The build **minifies** your code — it still runs perfectly, but anyone who
|
||||
grabs it off a partner site gets compact, hard‑to‑read output, not your clean source.
|
||||
- **Update once, everywhere.** Serve the built maps from a **CDN**, and when you rebuild, every partner site
|
||||
that embeds a map picks up the latest version on refresh.
|
||||
|
||||
**One codebase → desktop website · embedded on partner sites · WordPress · mobile app · standalone.**
|
||||
|
||||
---
|
||||
|
||||
## Quickstart
|
||||
|
||||
Bun required ([bun.sh](https://bun.sh); `bun.lock` is committed).
|
||||
You need [**bun**](https://bun.sh) installed (`bun.lock` is committed, so installs are reproducible).
|
||||
|
||||
```bash
|
||||
bun install
|
||||
bun run build # every app-profiles/<bundle>/ → public/doxa-maps/<bundle>/<bundle>.js
|
||||
bun run dev # live playground at http://localhost:5173/ — every map, clickable,
|
||||
# with a copy-paste embed snippet for each
|
||||
bun install # download node_modules (one time)
|
||||
|
||||
bun run dev # the playground: http://localhost:5173
|
||||
# every map, clickable, with a copy-paste embed snippet for each
|
||||
|
||||
bun run build # the build step: every app-profiles/<map>/ becomes
|
||||
# public/doxa-maps/<map>/<map>.js + a standalone index.html per map
|
||||
```
|
||||
|
||||
## Embed a map
|
||||
`bun run build` writes everything into **`public/doxa-maps/`** — that's your output folder. Copy it wherever
|
||||
your site or CDN serves files (for example, a host repo's `public/` directory), and your maps are live.
|
||||
|
||||
### Embed a map
|
||||
|
||||
```html
|
||||
<!-- 1) the map engine (Mapbox shown here) -->
|
||||
<link href="https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css" rel="stylesheet" />
|
||||
<script src="https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js"></script>
|
||||
<script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.min.js"></script>
|
||||
|
||||
<!-- 2) your built map + its custom tag -->
|
||||
<script src="/doxa-maps/my-map/my-map.js"></script>
|
||||
<my-map profile-config='{"profile":"my-map","tk":"pk.eyJ..."}'></my-map>
|
||||
<doxa-map profile-config='{"profile":"my-map","tk":"pk.eyJ..."}'></doxa-map>
|
||||
```
|
||||
|
||||
Or skip the script tag entirely — iframe the map's generated page:
|
||||
`/doxa-maps/<bundle>/<profile>/index.html`. Both snippets are pre-generated per map in
|
||||
Prefer not to run JavaScript on the host page? **iframe the generated page instead:**
|
||||
`/doxa-maps/<map>/<profile>/index.html`. Both snippets are pre‑generated for every map in
|
||||
`public/doxa-maps/manifest.json`.
|
||||
|
||||
---
|
||||
|
||||
## A word before you decide
|
||||
|
||||
This architecture is probably different from what you're used to. **Different doesn't mean worse** — it
|
||||
means it can make your life better and let you build the maps of your dreams.
|
||||
|
||||
So be honest with yourself. If you don't have big dreams about map‑making, this product might not be for
|
||||
you — and that's okay. But if you dream of maps that change the world and carry the gospel to places it has
|
||||
never been, you're going to need **more than a vibe‑coded map**. You'll need a *framework* that supports far
|
||||
more components than a typical one‑off map. And you'll need a *community*.
|
||||
|
||||
You can't form a community around spaghetti‑coded maps. You **can** form one around a shared framework with a
|
||||
reusable library — because then people prototype on the same foundation and build something stronger
|
||||
together, where maps never have to be rewritten from scratch.
|
||||
|
||||
## Requirements — the one small wall (and it's worth it)
|
||||
|
||||
Someone once told me: *don't reinvent the wheel — use Vue and Vite instead of hand‑rolling vanilla
|
||||
JavaScript.* They were right. So here's the honest deal before you start:
|
||||
|
||||
1. **Commit to learning Vue *or* React.** This bundler is built on **Vue + Vite** and supports both patterns.
|
||||
You don't have to master it — but pick one and lean in. (Afraid you can't learn a new architecture? You
|
||||
can. The concepts are one search away — that's what the glossary above is for.)
|
||||
2. **Learn the four basics** (your agent can run all of them):
|
||||
- `bun install` — get the dependencies
|
||||
- `bun run dev` — the dev server (live preview)
|
||||
- `bun run build` — the build step (ship it)
|
||||
- what `node_modules` are (the downloaded dependencies)
|
||||
3. **You do *not* need to write the code.** Give your agent access to the example maps in `app-profiles/` plus
|
||||
the shared `library/`, describe your map in plain English, and it builds a new map that reuses the library
|
||||
instead of duplicating spaghetti.
|
||||
|
||||
That's the wall. It's small, and everything past it is the maps of your dreams.
|
||||
|
||||
---
|
||||
|
||||
## The data caveat
|
||||
|
||||
Read this so nothing surprises you: **the maps ship without their data.** Because they're JAMstack (pure
|
||||
JavaScript), each map fetches its data — like people‑group information — from an **API** at runtime. That's
|
||||
what keeps them embeddable everywhere.
|
||||
|
||||
Your map data has to come from somewhere. Common sources:
|
||||
|
||||
- **[Joshua Project](https://joshuaproject.net)**
|
||||
- **[PeopleGroups.org](https://peoplegroups.org)**
|
||||
- **A project API.** doxa-maps was originally built to serve **DX**, which runs its own people‑group API
|
||||
(`https://pray.doxa.life`) covering the unreached people groups these maps were made to pray over. The data
|
||||
source, the map token, and even the map engine (Mapbox ↔ MapLibre) are **runtime settings** — change them
|
||||
with **no rebuild**.
|
||||
|
||||
---
|
||||
|
||||
## Docs
|
||||
|
||||
| Read this | When |
|
||||
|---|---|
|
||||
| **[why.md](./docs/why.md)** | 2 min — the problem, the "map islands" idea, one diagram |
|
||||
| **[tutorial.md](./docs/tutorial.md)** | build your first map, step by step |
|
||||
| **[how-to.md](./docs/how-to.md)** | task recipes — embed, iframe, SPA, colors, mobile, tokens |
|
||||
| **[reference.md](./docs/reference.md)** | lookup — config fields, build scripts, contracts |
|
||||
| **[architecture/](./docs/architecture/)** | the deep end — full contracts and catalogs, when you want them |
|
||||
| **[docs/why.md](./docs/why.md)** | 2 min — the problem, the idea, one diagram |
|
||||
| **[docs/tutorial.md](./docs/tutorial.md)** | build your first map, step by step (great to hand to your agent) |
|
||||
|
||||
Contributors: **[CONTRIBUTING.md](./CONTRIBUTING.md)**.
|
||||
---
|
||||
|
||||
## The output — real maps from this bundler
|
||||
## A note from the developer
|
||||
|
||||
Every map below is a single self-contained bundle built by one `bun run build`, embeddable on any
|
||||
site with one `<script>` + tag. Colors are data-driven **color strategies** (`@map/colors/`).
|
||||
> **Bottom line: maps should be open source, they should run everywhere, and no movement of God has ever
|
||||
> moved without them.**
|
||||
|
||||
### Research Map — the full example
|
||||
`doxa-research-map` · `<doxa-research-map>` — 7 tabs (prayer, adoption, engagement, regions,
|
||||
languages, religions) with clustering, filters, legends and poster export. This is the reference
|
||||
map that shows everything the library can do.
|
||||
You found some really cool maps on the internet, didn't you? On discipleship sites, maybe — maps that
|
||||
inspired you, that made you want to build your own. But the code wasn't available. Or if it was, it wasn't
|
||||
written to run on WordPress, or on your own site, or across your partner churches' websites. It wasn't
|
||||
simple. It wasn't modular. It didn't work the way you needed it to.
|
||||
|
||||

|
||||
That was me too. That's why I built this framework. I love maps — I'm going to build maps until the day I
|
||||
die — because I want to see the Kingdom of God advance to the places it has never been, and I long to see a
|
||||
global movement of map‑makers multiplying maps everywhere.
|
||||
|
||||
### Prayer Map — the flagship embed
|
||||
`doxa-simple-map` · `<doxa-map>` · prayer instance · color: prayer-progress · **Semantic Tree
|
||||
Legend** — the prayer map built for embedding on partner sites at scale.
|
||||
I want the Great Commission fulfilled in my lifetime, and there is no global movement without map‑making.
|
||||
Look at Scripture: *Jerusalem, Judea, Samaria, and the ends of the earth* — the book of Acts is a map, all
|
||||
the way to Rome. Where do you find a movement of God without maps at its white‑hot center? Nowhere. So why
|
||||
would we lock our maps away and make them closed source? Why should the power to make a map sit in the hands
|
||||
of a few who never release their code?
|
||||
|
||||

|
||||
It shouldn't. **This was built to be open source, to serve movements of God** — so the maps can multiply to
|
||||
every device: WordPress, your own site, an embeddable script on Squarespace, mobile, anywhere an embed can
|
||||
run. If we want to put map‑making into the hands of every disciple, we need a framework that lets the maps
|
||||
*go*, lets them be *reusable*, and lets a community build them *together*.
|
||||
|
||||
> Each also builds its own standalone page (`/doxa-maps/<bundle>/<profile>/index.html`) — link it
|
||||
> or iframe it on a partner site. See **[docs/why.md](./docs/why.md)** for the idea and
|
||||
> **[docs/how-to.md](./docs/how-to.md)** to build your own.
|
||||
If you have a vision to reach the globe but you've been stuck vibe‑coding an entire platform alone — with no
|
||||
open‑source foundation that runs on your site and your partners' sites — that gap isn't your fault, and you
|
||||
don't have to stay there. You can escape it by adopting a framework that has already been where you are.
|
||||
|
||||
Come build the maps of your dreams. Let's reach every people, in every place.
|
||||
|
||||
## License
|
||||
|
||||
The **doxa-maps template** (`library/` + build tooling) is **Apache-2.0** — a permissive base
|
||||
everyone shares. Your maps under `app-profiles/<bundle>/` are **yours**: your colors, API
|
||||
connections, and i18n. Full text: **[LICENSE](./LICENSE)**.
|
||||
**Open source.** We want this in the hands of every map‑maker on earth — because we want the whole earth
|
||||
to hear the gospel of Jesus. Make all the maps of your dreams. Reach your city. Reach every people, in every place.
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ the app is rebuilt.**
|
|||
| File | What it does |
|
||||
|---|---|
|
||||
| `generate.mjs` | THE template. Reads the profile data, writes one HTML poster per zone. |
|
||||
| `shoot.mjs` | Screenshots each poster to PNG (Firefox — never Chromium; ZERO-GOOGLE law). |
|
||||
| `shoot.mjs` | Screenshots each poster to PNG (Firefox — never Chromium; privacy-first policy). |
|
||||
| `poster-regions.mjs` | The region map (India, Africa, …). Shared by both gallery builders. |
|
||||
| `build-gallery.mjs` | `out/index.html` — browsable preview grid, sectioned by region. |
|
||||
| `build-hd-gallery.mjs` | `out/hd.html` — full-resolution review + copy-to-clipboard. |
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ function bundleHtml(b, index, manifest) {
|
|||
* opts.bakedToken opt-in literal token baked from build-config (ladder rung 3)
|
||||
*/
|
||||
function mapPageHtml(opts) {
|
||||
const { title, tag, config, jsSrc, apiBaseUrl, tokenUrlExpr, bakedToken } = opts
|
||||
const { title, tag, config, jsSrc, apiBaseUrl, tokenUrlExpr, bakedToken, integrity } = opts
|
||||
const apiScript = apiBaseUrl
|
||||
? `\n <script>window.MAP_APP_API_URL = ${JSON.stringify(apiBaseUrl)};</script>`
|
||||
: ''
|
||||
|
|
@ -403,7 +403,7 @@ function mapPageHtml(opts) {
|
|||
<div id="status">loading token…</div>
|
||||
${apiScript}
|
||||
<!-- Bundle IIFE — registers the <${esc(tag)}> custom element. -->
|
||||
<script src="${esc(jsSrc)}"></script>
|
||||
<script src="${esc(jsSrc)}"${integrity ? ` integrity="${esc(integrity)}" crossorigin="anonymous"` : ''}></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
@ -512,6 +512,7 @@ function profileHtml(b, profile, tokenUrlExpr, bakedToken) {
|
|||
apiBaseUrl: DEST_CONFIG.apiBaseUrl,
|
||||
tokenUrlExpr,
|
||||
bakedToken,
|
||||
integrity: b.integrity,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -530,6 +531,7 @@ function instanceHtml(b, profile, inst, tokenUrlExpr, bakedToken) {
|
|||
apiBaseUrl: inst.apiBaseUrl || DEST_CONFIG.apiBaseUrl,
|
||||
tokenUrlExpr,
|
||||
bakedToken,
|
||||
integrity: b.integrity,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -597,6 +599,20 @@ function scanBundles() {
|
|||
const bundleElements = extractElements(join(dir, 'index.js'))
|
||||
const tag = bundleElements[0] || entry
|
||||
|
||||
// SUBRESOURCE INTEGRITY (sha384) of the built bundle IIFE. Vite has already
|
||||
// emitted it to DEFAULT_ROOT by the time generate-tree runs, so we can hash it
|
||||
// HERE and thread the value into every <script> tag we generate (standalone
|
||||
// pages + copy-paste embed snippets). A tampered / CDN-swapped bundle then fails
|
||||
// the browser's integrity check and is REFUSED. crossorigin="anonymous" is
|
||||
// required for the check to run on cross-origin (CDN) loads. Missing .js → null
|
||||
// → tags omit integrity (graceful, e.g. `bun run tree` before a build).
|
||||
let integrity = null
|
||||
try {
|
||||
integrity = 'sha384-' + createHash('sha384').update(
|
||||
readFileSync(join(DEFAULT_ROOT, entry, entry + '.js'))
|
||||
).digest('base64')
|
||||
} catch { integrity = null }
|
||||
|
||||
const profiles = vueFiles.map((file) => {
|
||||
const tags = extractHeaderTags(join(dir, file))
|
||||
const { description, file: fileTag, ...rest } = tags
|
||||
|
|
@ -614,7 +630,7 @@ function scanBundles() {
|
|||
`<iframe src="${iframeUrl}" width="100%" height="600" ` +
|
||||
`style="border:none;border-radius:12px;" allowfullscreen></iframe>`
|
||||
const scriptEmbed =
|
||||
`<script src="${scriptUrl}"><\/script>\n` +
|
||||
`<script src="${scriptUrl}"${integrity ? ` integrity="${integrity}" crossorigin="anonymous"` : ''}><\/script>\n` +
|
||||
`<${tag} profile-config='{"profile":"${profileName}","tk":"YOUR_MAPBOX_TOKEN"}'></${tag}>`
|
||||
|
||||
// Preconfigured instances: ONE parameterized profile → N preset render
|
||||
|
|
@ -647,6 +663,7 @@ function scanBundles() {
|
|||
// Absolute-or-root-relative URL to the bundle IIFE (paste-anywhere).
|
||||
scriptUrl: `${EMBED_BASE}/${entry}/${entry}.js`,
|
||||
output: `${TREE_NAME}/${entry}/${entry}.js`,
|
||||
integrity,
|
||||
elements: bundleElements,
|
||||
profiles,
|
||||
})
|
||||
|
|
@ -700,15 +717,8 @@ function writeManifestAndHtml(root, bundles, tokenUrlExpr, bakedToken) {
|
|||
|
||||
function main() {
|
||||
const bundles = scanBundles()
|
||||
// SUBRESOURCE INTEGRITY: hash each built bundle IIFE so the app-shell can load it with
|
||||
// integrity="sha384-…" and REFUSE a tampered/CDN-swapped bundle. Vite has already emitted
|
||||
// the .js into DEFAULT_ROOT by the time this runs (bun run build = vite → generate-tree).
|
||||
for (const b of bundles) {
|
||||
try {
|
||||
const buf = readFileSync(join(DEFAULT_ROOT, b.bundle, b.bundle + '.js'))
|
||||
b.integrity = 'sha384-' + createHash('sha384').update(buf).digest('base64')
|
||||
} catch { b.integrity = null }
|
||||
}
|
||||
// SUBRESOURCE INTEGRITY is computed inside scanBundles() (each bundle record carries
|
||||
// `integrity`), so it is available to the embed snippets AND the generated <script> tags.
|
||||
const tokenUrlExpr = readTokenUrlExpr()
|
||||
const bakedToken = DEST_CONFIG.token // opt-in literal token (ladder rung 3); '' by default
|
||||
|
||||
|
|
|
|||
20
library/components/WARNING.md
Normal file
20
library/components/WARNING.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# ⚠️ Read before you touch these components
|
||||
|
||||
**These are the SHARED, REUSABLE components — every map in `app-profiles/` depends on them.**
|
||||
|
||||
A change here does not affect one map. It ripples to **all** of them. So:
|
||||
|
||||
- **Prototyping or experimenting? Don't edit these.** Put your custom, one-off, not-yet-proven component
|
||||
inside your own map's folder (`app-profiles/<your-map>/`), where it can be as messy as you need and
|
||||
breaks nothing else.
|
||||
- **Only proven, parameterized, reusable components graduate into this library.** If a component has hard-coded
|
||||
values, assumptions about one specific map, or hasn't been used by more than one map yet — it is **not**
|
||||
ready to live here.
|
||||
- **A reusable component takes props, not assumptions.** Before you move something in, make it parameterized:
|
||||
the map, the legend, the controls, the search bar all take configuration — yours should too.
|
||||
- **If you must change a shared component, check every map that uses it.** Run `bun run dev` and click through
|
||||
the maps before you commit. The whole point of this library is that maps *don't* have to be rewritten —
|
||||
don't undo that by breaking the shared pieces.
|
||||
|
||||
Rule of thumb: **custom code in your app-profile, reusable code in the library — and things only move from the
|
||||
first to the second once they've earned it.**
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
*
|
||||
* ═══ WHY HAND-ROLLED SVG AND NOT A CHART LIBRARY ════════════════════════════
|
||||
* SELF-HOSTED ONLY. A chart CDN request from a persecuted user's device leaks their
|
||||
* IP to a third party — that is the zero-Google / self-sovereign rule, and it is a
|
||||
* IP to a third party — that is the privacy-first rule (no third-party calls), and it is a
|
||||
* SAFETY rule, not a preference. The alternative to a CDN is vendoring a library the
|
||||
* way DataTable.vue vendors Tabulator (443KB, injected at runtime); for bars that is
|
||||
* paying a runtime fetch, a shadow-root stylesheet injection and a version to track
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
* SELF-HOSTED, NEVER A CDN. Vendored at public/assets/vendor/tabulator/ (v6.3.1).
|
||||
* A CDN request from a persecuted user's device leaks their IP to a third party —
|
||||
* that is the ZERO-GOOGLE / self-sovereign rule, and it is a safety rule, not a
|
||||
* that is the privacy-first rule (no third-party calls), and it is a safety rule, not a
|
||||
* preference. geo-steward vendors the same way.
|
||||
*
|
||||
* ═══ SHADOW-DOM CAVEAT (measured today, twice) ══════════════════════════════
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ data via an env var once silently rendered stale posters (Nepal, Bangladesh, Bhu
|
|||
HTML per zone PNG @3000² assets/previews/ app shows them
|
||||
```
|
||||
|
||||
- `generate.mjs` is the template; `shoot.mjs` screenshots to PNG (Firefox only — ZERO-GOOGLE law).
|
||||
- `generate.mjs` is the template; `shoot.mjs` screenshots to PNG (Firefox only — privacy-first policy).
|
||||
- A template change is not visible in the app until previews are regenerated **and** the app rebuilt.
|
||||
- Exported PNGs go to a sibling folder (`../../../upg-100-posters/`), never `public/` — Capacitor
|
||||
packages `public/` wholesale.
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@
|
|||
// NO key and NO account, which is the whole point:
|
||||
// * a Mapbox token in a client-side poster generator is a credential to leak;
|
||||
// * a token means an account, and an account is a name — against the
|
||||
// nameless/faceless stance for persecution-sensitive work;
|
||||
// * ZERO-GOOGLE / self-sovereign: no third party gets to log who rendered what.
|
||||
// no-account privacy stance for sensitive-context work;
|
||||
// * privacy-first: no third party gets to log who rendered what.
|
||||
//
|
||||
// ═══ USAGE POLICY IS A HARD CONSTRAINT, NOT A SUGGESTION ════════════════════
|
||||
// OSM's tile servers are donated infrastructure. Their policy requires an
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
// renderer, which is the discipline the poster README already mandates and which
|
||||
// nothing was actually enforcing.
|
||||
//
|
||||
// FIREFOX, never Chromium (ZERO-GOOGLE). No WebGL needed: an SVG poster is DOM.
|
||||
// FIREFOX, never Chromium (privacy-first: no third-party browser telemetry). No WebGL needed: an SVG poster is DOM.
|
||||
//
|
||||
// THE GUARD IS ONLY WORTH ITS GREEN IF IT CAN GO RED. Each check below states the
|
||||
// real defect it would have caught, so a future reader can corrupt an input and
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
// node fetch-connectivity.mjs -> out/connectivity-by-country.json
|
||||
//
|
||||
// SOURCE: World Bank Open Data (api.worldbank.org, v2). Public, no key, no account
|
||||
// — which satisfies the nameless/faceless constraint (no signups).
|
||||
// — which satisfies the no-account privacy constraint (no signups).
|
||||
// IT.NET.USER.ZS individuals using the internet, % of population
|
||||
// IT.CEL.SETS.P2 mobile cellular subscriptions per 100 people
|
||||
// SP.POP.TOTL population
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
// from a source that can be cited per row. This is that step.
|
||||
//
|
||||
// SOURCE: Nominatim (OpenStreetMap), reverse geocoding.
|
||||
// - NO ACCOUNT, no API key — satisfies the nameless/faceless constraint.
|
||||
// - NO ACCOUNT, no API key — satisfies the no-account privacy constraint.
|
||||
// - Licence ODbL 1.0, attribution "© OpenStreetMap contributors" carried per row.
|
||||
// - CHOSEN OVER GeoNames because GeoNames' shared `demo` user is exhausted
|
||||
// ("daily limit of 20000 credits for demo has been exceeded") and a real
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/cities-internet/index.html
generated
2
public/doxa-maps/cities-internet/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"cities-internet","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"cities-internet","scriptUrl":"./cities-internet/cities-internet.js","output":"doxa-maps/cities-internet/cities-internet.js","elements":["cities-internet-map"],"profiles":[{"profile":"connectivity-list","file":"connectivity-list.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-list/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"connectivity-map","file":"connectivity-map.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-map/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/data-tables/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}}],"integrity":"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"cities-internet","scriptUrl":"./cities-internet/cities-internet.js","output":"doxa-maps/cities-internet/cities-internet.js","integrity":"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH","elements":["cities-internet-map"],"profiles":[{"profile":"connectivity-list","file":"connectivity-list.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-list/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"connectivity-map","file":"connectivity-map.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/connectivity-map/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/connectivity-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"cities-internet-map","iframeUrl":"./cities-internet/data-tables/index.html","scriptUrl":"./cities-internet/cities-internet.js","embed":{"iframe":"\u003ciframe src=\"./cities-internet/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/cities-internet-map>"}}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/country-posters/index.html
generated
2
public/doxa-maps/country-posters/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"country-posters","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"country-posters","scriptUrl":"./country-posters/country-posters.js","output":"doxa-maps/country-posters/country-posters.js","elements":["country-posters-map"],"profiles":[{"profile":"countries-map","file":"countries-map.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/countries-map/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}},{"profile":"country-poster-wall","file":"country-poster-wall.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/country-poster-wall/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}}],"integrity":"sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"country-posters","scriptUrl":"./country-posters/country-posters.js","output":"doxa-maps/country-posters/country-posters.js","integrity":"sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw","elements":["country-posters-map"],"profiles":[{"profile":"countries-map","file":"countries-map.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/countries-map/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/countries-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}},{"profile":"country-poster-wall","file":"country-poster-wall.vue","description":"","element":"country-posters-map","iframeUrl":"./country-posters/country-poster-wall/index.html","scriptUrl":"./country-posters/country-posters.js","embed":{"iframe":"\u003ciframe src=\"./country-posters/country-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./country-posters/country-posters.js\" integrity=\"sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw\" crossorigin=\"anonymous\">\u003c/script>\n\u003ccountry-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/country-posters-map>"}}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
2
public/doxa-maps/demo-map/demo-map/index.html
generated
2
public/doxa-maps/demo-map/demo-map/index.html
generated
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <demo-map> custom element. -->
|
||||
<script src="../demo-map.js"></script>
|
||||
<script src="../demo-map.js" integrity="sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/demo-map/index.html
generated
2
public/doxa-maps/demo-map/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"demo-map","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"demo-map","scriptUrl":"./demo-map/demo-map.js","output":"doxa-maps/demo-map/demo-map.js","elements":["demo-map"],"profiles":[{"profile":"demo-map","file":"demo-map.vue","description":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","element":"demo-map","iframeUrl":"./demo-map/demo-map/index.html","scriptUrl":"./demo-map/demo-map.js","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./demo-map/demo-map.js\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/demo-map>"},"bundle":"demo-map"}],"integrity":"sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"demo-map","scriptUrl":"./demo-map/demo-map.js","output":"doxa-maps/demo-map/demo-map.js","integrity":"sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI","elements":["demo-map"],"profiles":[{"profile":"demo-map","file":"demo-map.vue","description":"Simple two-tab demo map. Tab 1 colors pins by religion (shared","element":"demo-map","iframeUrl":"./demo-map/demo-map/index.html","scriptUrl":"./demo-map/demo-map.js","embed":{"iframe":"\u003ciframe src=\"./demo-map/demo-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./demo-map/demo-map.js\" integrity=\"sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdemo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/demo-map>"},"bundle":"demo-map"}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
2
public/doxa-maps/doxa-research-map/index.html
generated
2
public/doxa-maps/doxa-research-map/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"doxa-research-map","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"doxa-research-map","scriptUrl":"./doxa-research-map/doxa-research-map.js","output":"doxa-maps/doxa-research-map/doxa-research-map.js","elements":["doxa-research-map"],"profiles":[{"profile":"research-map","file":"research-map.vue","description":"","element":"doxa-research-map","iframeUrl":"./doxa-research-map/research-map/index.html","scriptUrl":"./doxa-research-map/doxa-research-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-research-map/doxa-research-map.js\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-research-map>"}}],"integrity":"sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"doxa-research-map","scriptUrl":"./doxa-research-map/doxa-research-map.js","output":"doxa-maps/doxa-research-map/doxa-research-map.js","integrity":"sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR","elements":["doxa-research-map"],"profiles":[{"profile":"research-map","file":"research-map.vue","description":"","element":"doxa-research-map","iframeUrl":"./doxa-research-map/research-map/index.html","scriptUrl":"./doxa-research-map/doxa-research-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-research-map/research-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-research-map>"}}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-research-map> custom element. -->
|
||||
<script src="../doxa-research-map.js"></script>
|
||||
<script src="../doxa-research-map.js" integrity="sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../doxa-simple-map.js"></script>
|
||||
<script src="../doxa-simple-map.js" integrity="sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/doxa-simple-map/index.html
generated
2
public/doxa-maps/doxa-simple-map/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"doxa-simple-map","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"doxa-simple-map","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","output":"doxa-maps/doxa-simple-map/doxa-simple-map.js","elements":["doxa-map","doxa-simple-map"],"profiles":[{"profile":"doxa-simple-map","file":"doxa-simple-map.vue","description":"","element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/index.html","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-map>"},"instances":[{"id":"prayer","title":"Prayer Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/prayer/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/prayer/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"engagement","title":"Engagement Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/engagement/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/engagement/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"adoption","title":"Adoption Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/adoption/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/adoption/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}],"integrity":"sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"doxa-simple-map","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","output":"doxa-maps/doxa-simple-map/doxa-simple-map.js","integrity":"sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf","elements":["doxa-map","doxa-simple-map"],"profiles":[{"profile":"doxa-simple-map","file":"doxa-simple-map.vue","description":"","element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/index.html","scriptUrl":"./doxa-simple-map/doxa-simple-map.js","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf\" crossorigin=\"anonymous\">\u003c/script>\n\u003cdoxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/doxa-map>"},"instances":[{"id":"prayer","title":"Prayer Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-prayer","dataSource":"pray-tools","tabs":[{"id":"prayer","colorStrategy":"prayer","legend":"prayer","popup":"prayer"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/prayer/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/prayer/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"engagement","title":"Engagement Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-engagement","dataSource":"pray-tools","tabs":[{"id":"engagement","colorStrategy":"engagement","legend":"engagement","popup":"engagement"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/engagement/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/engagement/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}},{"id":"adoption","title":"Adoption Map","apiBaseUrl":"https://pray.doxa.life","props":{"profile":"doxa-simple-map","instanceId":"embed-adoption","dataSource":"pray-tools","tabs":[{"id":"adoption","colorStrategy":"adoption","legend":"adoption","popup":"adoption"}]},"element":"doxa-map","iframeUrl":"./doxa-simple-map/doxa-simple-map/adoption/index.html","embed":{"iframe":"\u003ciframe src=\"./doxa-simple-map/doxa-simple-map/adoption/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>"}}]}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/gospel-resources/index.html
generated
2
public/doxa-maps/gospel-resources/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"gospel-resources","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"gospel-resources","scriptUrl":"./gospel-resources/gospel-resources.js","output":"doxa-maps/gospel-resources/gospel-resources.js","elements":["gospel-resources-map"],"profiles":[{"profile":"charts","file":"charts.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/charts/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/data-tables/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-list","file":"resources-list.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-list/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-map","file":"resources-map.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-map/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}}],"integrity":"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"gospel-resources","scriptUrl":"./gospel-resources/gospel-resources.js","output":"doxa-maps/gospel-resources/gospel-resources.js","integrity":"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv","elements":["gospel-resources-map"],"profiles":[{"profile":"charts","file":"charts.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/charts/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/charts/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"data-tables","file":"data-tables.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/data-tables/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-list","file":"resources-list.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-list/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}},{"profile":"resources-map","file":"resources-map.vue","description":"","element":"gospel-resources-map","iframeUrl":"./gospel-resources/resources-map/index.html","scriptUrl":"./gospel-resources/gospel-resources.js","embed":{"iframe":"\u003ciframe src=\"./gospel-resources/resources-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\">\u003c/script>\n\u003cgospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/gospel-resources-map>"}}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/index.html
generated
2
public/doxa-maps/index.html
generated
File diff suppressed because one or more lines are too long
70
public/doxa-maps/manifest.json
generated
70
public/doxa-maps/manifest.json
generated
|
|
@ -9,6 +9,7 @@
|
|||
"bundle": "cities-internet",
|
||||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"output": "doxa-maps/cities-internet/cities-internet.js",
|
||||
"integrity": "sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH",
|
||||
"elements": [
|
||||
"cities-internet-map"
|
||||
],
|
||||
|
|
@ -22,7 +23,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./cities-internet/cities-internet.js\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></cities-internet-map>"
|
||||
"script": "<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -34,7 +35,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./cities-internet/cities-internet.js\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></cities-internet-map>"
|
||||
"script": "<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -46,16 +47,16 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./cities-internet/cities-internet.js\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></cities-internet-map>"
|
||||
"script": "<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></cities-internet-map>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-YnTDBEhRnIxoJ9mWpnBVw9MDyvAkqQXZzNB+OMAl3GIxlS1336ABRVzm8gPrd7bH"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "country-posters",
|
||||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"output": "doxa-maps/country-posters/country-posters.js",
|
||||
"integrity": "sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw",
|
||||
"elements": [
|
||||
"country-posters-map"
|
||||
],
|
||||
|
|
@ -69,7 +70,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/countries-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./country-posters/country-posters.js\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></country-posters-map>"
|
||||
"script": "<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -81,16 +82,16 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./country-posters/country-posters.js\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></country-posters-map>"
|
||||
"script": "<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></country-posters-map>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-gIkk5MKMkDoV982KSTlcfbC1I5FdErxb09MsYgt5jdw9JZD2rsMmjvgg3DcIxITw"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "demo-map",
|
||||
"scriptUrl": "./demo-map/demo-map.js",
|
||||
"output": "doxa-maps/demo-map/demo-map.js",
|
||||
"integrity": "sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI",
|
||||
"elements": [
|
||||
"demo-map"
|
||||
],
|
||||
|
|
@ -104,17 +105,17 @@
|
|||
"scriptUrl": "./demo-map/demo-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./demo-map/demo-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./demo-map/demo-map.js\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></demo-map>"
|
||||
"script": "<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></demo-map>"
|
||||
},
|
||||
"bundle": "demo-map"
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-yF/Cx1BKdbEFJU6rmzkEzUkiLe0UpM1XdSO2Pn2p1liyOVurnV+OUxy4wPXdY4rI"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "doxa-research-map",
|
||||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"output": "doxa-maps/doxa-research-map/doxa-research-map.js",
|
||||
"integrity": "sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR",
|
||||
"elements": [
|
||||
"doxa-research-map"
|
||||
],
|
||||
|
|
@ -128,16 +129,16 @@
|
|||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-research-map/research-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./doxa-research-map/doxa-research-map.js\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></doxa-research-map>"
|
||||
"script": "<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></doxa-research-map>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-HQlyfuflA7J+wVY9UpJbQVVjCHzX1dYwkyp9+ovboEzC0Z0G90lfrQvVcAPquHVR"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "doxa-simple-map",
|
||||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"output": "doxa-maps/doxa-simple-map/doxa-simple-map.js",
|
||||
"integrity": "sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf",
|
||||
"elements": [
|
||||
"doxa-map",
|
||||
"doxa-simple-map"
|
||||
|
|
@ -152,7 +153,7 @@
|
|||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-simple-map/doxa-simple-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./doxa-simple-map/doxa-simple-map.js\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></doxa-map>"
|
||||
"script": "<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></doxa-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -226,13 +227,13 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-C2AbEdTMmTgufrz1/Y07B3GAH8gA6D8pb0+CeFOpe2fjxkJO3C7NCZUUyO9UG+xf"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "doxa-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -246,7 +247,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/charts/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -258,7 +259,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -270,7 +271,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -282,16 +283,16 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
"script": "<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></gospel-resources-map>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-A2zqI3MoOIlGI6xaXz73grRQ7rPGC66skpAfc0NoOEmLBN227rsJJlLvqq1Z8fSv"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "doxa-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -305,7 +306,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./my-upg-100-list/my-upg-100-list.js\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></my-upg-100-list-map>"
|
||||
"script": "<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -317,16 +318,16 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./my-upg-100-list/my-upg-100-list.js\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></my-upg-100-list-map>"
|
||||
"script": "<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "research-dashboard",
|
||||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"output": "doxa-maps/research-dashboard/research-dashboard.js",
|
||||
"integrity": "sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74",
|
||||
"elements": [
|
||||
"research-dashboard-map"
|
||||
],
|
||||
|
|
@ -340,17 +341,17 @@
|
|||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./research-dashboard/research-dashboard.js\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></research-dashboard-map>"
|
||||
"script": "<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></research-dashboard-map>"
|
||||
},
|
||||
"bundle": "research-dashboard"
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74"
|
||||
]
|
||||
},
|
||||
{
|
||||
"bundle": "template-bundle",
|
||||
"scriptUrl": "./template-bundle/template-bundle.js",
|
||||
"output": "doxa-maps/template-bundle/template-bundle.js",
|
||||
"integrity": "sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv",
|
||||
"elements": [
|
||||
"template-bundle"
|
||||
],
|
||||
|
|
@ -364,7 +365,7 @@
|
|||
"scriptUrl": "./template-bundle/template-bundle.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./template-bundle/template-map-a/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./template-bundle/template-bundle.js\"></script>\n<template-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></template-bundle>"
|
||||
"script": "<script src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv\" crossorigin=\"anonymous\"></script>\n<template-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></template-bundle>"
|
||||
},
|
||||
"bundle": "template-bundle"
|
||||
},
|
||||
|
|
@ -377,12 +378,11 @@
|
|||
"scriptUrl": "./template-bundle/template-bundle.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./template-bundle/template-map-b/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script src=\"./template-bundle/template-bundle.js\"></script>\n<template-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></template-bundle>"
|
||||
"script": "<script src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv\" crossorigin=\"anonymous\"></script>\n<template-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'></template-bundle>"
|
||||
},
|
||||
"bundle": "template-bundle"
|
||||
}
|
||||
],
|
||||
"integrity": "sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
2
public/doxa-maps/my-upg-100-list/index.html
generated
2
public/doxa-maps/my-upg-100-list/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"my-upg-100-list","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"my-upg-100-list","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","output":"doxa-maps/my-upg-100-list/my-upg-100-list.js","elements":["my-upg-100-list-map"],"profiles":[{"profile":"poster-wall","file":"poster-wall.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/poster-wall/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-list","file":"upg-100-list.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/upg-100-list/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}}],"integrity":"sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"my-upg-100-list","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","output":"doxa-maps/my-upg-100-list/my-upg-100-list.js","integrity":"sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc","elements":["my-upg-100-list-map"],"profiles":[{"profile":"poster-wall","file":"poster-wall.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/poster-wall/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/poster-wall/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}},{"profile":"upg-100-list","file":"upg-100-list.vue","description":"","element":"my-upg-100-list-map","iframeUrl":"./my-upg-100-list/upg-100-list/index.html","scriptUrl":"./my-upg-100-list/my-upg-100-list.js","embed":{"iframe":"\u003ciframe src=\"./my-upg-100-list/upg-100-list/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc\" crossorigin=\"anonymous\">\u003c/script>\n\u003cmy-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/my-upg-100-list-map>"}}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,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"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,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"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-kWha8rZTGtOKwLXR/E2uAaYHHhP18ZgBkkxtfteRdsyfEi6JoKFEBlrXrXUUeILc" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/research-dashboard/index.html
generated
2
public/doxa-maps/research-dashboard/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"research-dashboard","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"research-dashboard","scriptUrl":"./research-dashboard/research-dashboard.js","output":"doxa-maps/research-dashboard/research-dashboard.js","elements":["research-dashboard-map"],"profiles":[{"profile":"research-dashboard","file":"research-dashboard.vue","description":"Coordinated-Multiple-Views research dashboard for 10/40-window UPGs (live pray.doxa.life): docked facet rail + map-as-hero + linked table/charts, brushing-and-linking over one in-memory store.","element":"research-dashboard-map","iframeUrl":"./research-dashboard/research-dashboard/index.html","scriptUrl":"./research-dashboard/research-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./research-dashboard/research-dashboard.js\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/research-dashboard-map>"},"bundle":"research-dashboard"}],"integrity":"sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"research-dashboard","scriptUrl":"./research-dashboard/research-dashboard.js","output":"doxa-maps/research-dashboard/research-dashboard.js","integrity":"sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74","elements":["research-dashboard-map"],"profiles":[{"profile":"research-dashboard","file":"research-dashboard.vue","description":"Coordinated-Multiple-Views research dashboard for 10/40-window UPGs (live pray.doxa.life): docked facet rail + map-as-hero + linked table/charts, brushing-and-linking over one in-memory store.","element":"research-dashboard-map","iframeUrl":"./research-dashboard/research-dashboard/index.html","scriptUrl":"./research-dashboard/research-dashboard.js","embed":{"iframe":"\u003ciframe src=\"./research-dashboard/research-dashboard/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74\" crossorigin=\"anonymous\">\u003c/script>\n\u003cresearch-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/research-dashboard-map>"},"bundle":"research-dashboard"}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <research-dashboard-map> custom element. -->
|
||||
<script src="../research-dashboard.js"></script>
|
||||
<script src="../research-dashboard.js" integrity="sha384-15m04Zhynh2T0LSwVun1vz9xfJkP5x8a2Xb5SekjrNRM44qWChw6iPRHY3pcxW74" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/template-bundle/index.html
generated
2
public/doxa-maps/template-bundle/index.html
generated
|
|
@ -130,7 +130,7 @@ header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut)
|
|||
|
||||
<script>window.FORGE = {"mode":"built","scope":"bundle","manifestUrl":"../manifest.json","bundle":"template-bundle","hrefBase":"../"};
|
||||
/* file:// contract: manifest inlined at build — no fetch needed to render. */
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"template-bundle","scriptUrl":"./template-bundle/template-bundle.js","output":"doxa-maps/template-bundle/template-bundle.js","elements":["template-bundle"],"profiles":[{"profile":"template-map-a","file":"template-map-a.vue","description":"Minimal example profile A — a colored placeholder, no Mapbox or data.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-a/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"},{"profile":"template-map-b","file":"template-map-b.vue","description":"Minimal example profile B — a second profile in the same bundle.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-b/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"}],"integrity":"sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv"}]};</script>
|
||||
window.FORGE.manifest = {"schema":"doxa-maps-manifest@1","generatedFrom":"app-profiles/*/*.vue","embedBase":".","bundleCount":9,"profileCount":17,"bundles":[{"bundle":"template-bundle","scriptUrl":"./template-bundle/template-bundle.js","output":"doxa-maps/template-bundle/template-bundle.js","integrity":"sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv","elements":["template-bundle"],"profiles":[{"profile":"template-map-a","file":"template-map-a.vue","description":"Minimal example profile A — a colored placeholder, no Mapbox or data.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-a/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-a/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-a\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"},{"profile":"template-map-b","file":"template-map-b.vue","description":"Minimal example profile B — a second profile in the same bundle.","element":"template-bundle","iframeUrl":"./template-bundle/template-map-b/index.html","scriptUrl":"./template-bundle/template-bundle.js","embed":{"iframe":"\u003ciframe src=\"./template-bundle/template-map-b/index.html\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen>\u003c/iframe>","script":"\u003cscript src=\"./template-bundle/template-bundle.js\" integrity=\"sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv\" crossorigin=\"anonymous\">\u003c/script>\n\u003ctemplate-bundle profile-config='{\"profile\":\"template-map-b\",\"tk\":\"YOUR_MAPBOX_TOKEN\"}'>\u003c/template-bundle>"},"bundle":"template-bundle"}]}]};</script>
|
||||
<script>/**
|
||||
* staging-forge.js — the ONE-PAGE semantic staging environment (root + bundle pages).
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <template-bundle> custom element. -->
|
||||
<script src="../template-bundle.js"></script>
|
||||
<script src="../template-bundle.js" integrity="sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <template-bundle> custom element. -->
|
||||
<script src="../template-bundle.js"></script>
|
||||
<script src="../template-bundle.js" integrity="sha384-kRrj0E6xZ1Yh9LiQp0jKZbnR2eZxNyUExfyLqYOIDOWZFpb8DfpBHQnz7V9pOcNv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue