Update from source acf67c59b
This commit is contained in:
parent
61ee4e5752
commit
501e2699ce
78 changed files with 1068 additions and 612 deletions
|
|
@ -24,7 +24,6 @@ import (
|
|||
"os/exec"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
|
@ -215,7 +214,7 @@ func (w *deviceWatcher) run() {
|
|||
for {
|
||||
cmd := exec.Command("pactl", "subscribe")
|
||||
cmd.Env = audioEnv()
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGKILL}
|
||||
cmd.SysProcAttr = childAttr()
|
||||
out, err := cmd.StdoutPipe()
|
||||
if err == nil && cmd.Start() == nil {
|
||||
sc := bufio.NewScanner(out)
|
||||
|
|
@ -255,7 +254,7 @@ func (e *engine) micTest(device string) event {
|
|||
return event{"ok": false, "verdict": "No recorder found (need parec, pw-record or arecord)."}
|
||||
}
|
||||
cmd.Env = audioEnv()
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGKILL}
|
||||
cmd.SysProcAttr = childAttr()
|
||||
var errBuf strings.Builder
|
||||
cmd.Stderr = &errBuf
|
||||
out, err := cmd.StdoutPipe()
|
||||
|
|
|
|||
|
|
@ -29,11 +29,13 @@ import (
|
|||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
|
@ -61,6 +63,21 @@ func envOr(k, d string) string {
|
|||
return d
|
||||
}
|
||||
|
||||
// defaultNemoBin: where setup puts NVIDIA's NeMo-Speech.cpp 0.1.0 CPU release for THIS platform — the
|
||||
// release folders are named nemo-speech-0.1.0-<linux|macos|windows>-<x86_64|aarch64>-cpu.
|
||||
func defaultNemoBin(base string) string {
|
||||
osName := map[string]string{"darwin": "macos"}[runtime.GOOS]
|
||||
if osName == "" {
|
||||
osName = runtime.GOOS
|
||||
}
|
||||
arch := map[string]string{"amd64": "x86_64", "arm64": "aarch64"}[runtime.GOARCH]
|
||||
exe := "nemo-speech"
|
||||
if runtime.GOOS == "windows" {
|
||||
exe += ".exe"
|
||||
}
|
||||
return filepath.Join(base, "bin", "nemo-speech-0.1.0-"+osName+"-"+arch+"-cpu", "bin", exe)
|
||||
}
|
||||
|
||||
func loadConfig() config {
|
||||
home, _ := os.UserHomeDir()
|
||||
// RUDDER_HOME is where setup-runtime.sh installed the runtime and model (a server keeps it on a volume).
|
||||
|
|
@ -68,7 +85,7 @@ func loadConfig() config {
|
|||
return config{
|
||||
Port: envOr("RUDDER_PORT", "5193"),
|
||||
NemoPort: envOr("RUDDER_NEMO_PORT", "5194"),
|
||||
NemoBin: envOr("RUDDER_NEMO_BIN", filepath.Join(base, "bin", "nemo-speech-0.1.0-linux-x86_64-cpu", "bin", "nemo-speech")),
|
||||
NemoBin: envOr("RUDDER_NEMO_BIN", defaultNemoBin(base)),
|
||||
Model: envOr("RUDDER_MODEL", filepath.Join(base, "models", "nemotron-3.5-asr-streaming-0.6b.q8_0.gguf")),
|
||||
Language: envOr("RUDDER_LANG", "en-US"),
|
||||
EndpointMs: 800,
|
||||
|
|
@ -207,7 +224,7 @@ func (e *engine) startNemo() {
|
|||
cmd := exec.Command(e.cfg.NemoBin, "serve",
|
||||
"--host", "127.0.0.1", "--port", e.cfg.NemoPort,
|
||||
"--asr-model", e.cfg.Model, "--device", "cpu", "--no-ui", "--api-key", e.nemoKey)
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGKILL} // dies with us
|
||||
cmd.SysProcAttr = childAttr() // dies with us
|
||||
out, _ := cmd.StdoutPipe()
|
||||
cmd.Stderr = cmd.Stdout
|
||||
if err := cmd.Start(); err != nil {
|
||||
|
|
@ -669,7 +686,7 @@ func spawnRecorder(device string, logs *ring) (*recorderProc, error) {
|
|||
}
|
||||
cmd := exec.Command(c[0], c[1:]...)
|
||||
cmd.Env = audioEnv()
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGKILL}
|
||||
cmd.SysProcAttr = childAttr()
|
||||
errBuf := &bytes.Buffer{}
|
||||
cmd.Stderr = errBuf
|
||||
out, err := cmd.StdoutPipe()
|
||||
|
|
@ -813,7 +830,17 @@ func main() {
|
|||
// /api/rudder/stream (RUDDER_AUDIO=browser): a WebSocket of binary 16 kHz mono s16le PCM frames from the
|
||||
// page's microphone. Opening it starts a session, closing it stops one; the text comes back on /events.
|
||||
// The upgrader's default origin check (Origin must match Host) keeps other sites out.
|
||||
upgrader := websocket.Upgrader{ReadBufferSize: 8192}
|
||||
// Origin: the page's own host (the dev server proxy), a desktop app's webview (tauri://localhost, or
|
||||
// http://tauri.localhost on Windows — the same origins guard() answers CORS for), or RUDDER_ALLOW_ORIGIN.
|
||||
// Anything else is another site and is refused.
|
||||
upgrader := websocket.Upgrader{ReadBufferSize: 8192, CheckOrigin: func(r *http.Request) bool {
|
||||
o := r.Header.Get("Origin")
|
||||
if o == "" || o == "tauri://localhost" || o == "http://tauri.localhost" || (os.Getenv("RUDDER_ALLOW_ORIGIN") != "" && o == os.Getenv("RUDDER_ALLOW_ORIGIN")) {
|
||||
return true
|
||||
}
|
||||
u, err := url.Parse(o)
|
||||
return err == nil && strings.EqualFold(u.Host, r.Host)
|
||||
}}
|
||||
mux.HandleFunc("/api/rudder/stream", func(w http.ResponseWriter, r *http.Request) {
|
||||
if !browserAudio() {
|
||||
writeJSON(w, 409, event{"error": "this engine records a local microphone (RUDDER_AUDIO is not browser)"})
|
||||
|
|
|
|||
12
backend/rudder-engine/procattr_linux.go
Normal file
12
backend/rudder-engine/procattr_linux.go
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
//go:build linux
|
||||
|
||||
package main
|
||||
|
||||
import "syscall"
|
||||
|
||||
// childAttr: a child process (the speech server, a recorder) is killed with the engine, so a crash
|
||||
// never leaves a speech server holding a gigabyte of memory. Linux only: Pdeathsig does not exist on
|
||||
// macOS or Windows (see procattr_other.go).
|
||||
func childAttr() *syscall.SysProcAttr {
|
||||
return &syscall.SysProcAttr{Pdeathsig: syscall.SIGKILL}
|
||||
}
|
||||
12
backend/rudder-engine/procattr_other.go
Normal file
12
backend/rudder-engine/procattr_other.go
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
//go:build !linux
|
||||
|
||||
package main
|
||||
|
||||
import "syscall"
|
||||
|
||||
// childAttr: macOS and Windows have no parent-death signal. In the desktop app the Tauri shell owns the
|
||||
// engine's lifetime and the engine kills its children on a normal exit (shutdown); a crashed engine can
|
||||
// leave its speech server running until the app is next closed.
|
||||
func childAttr() *syscall.SysProcAttr {
|
||||
return nil
|
||||
}
|
||||
164
documentation/HOWTO-build-the-desktop-app.md
Normal file
164
documentation/HOWTO-build-the-desktop-app.md
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
# HOWTO: build the Rudder desktop app (macOS / Windows)
|
||||
|
||||
Rudder (`plugin-designs/rudder-voice`) is voice-to-text that runs on your own computer: a web UI plus a
|
||||
local engine (`backend/rudder-engine`, Go) that drives NVIDIA's NeMo-Speech.cpp speech server. The
|
||||
desktop app is a Tauri window around the built web tree, with the engine started as a **sidecar**.
|
||||
|
||||
This page is written for an agent following it cold. **Read "What is proven" first**: most of the
|
||||
desktop path has never been run by anyone, and the steps say so where that is the case.
|
||||
|
||||
## What is proven, and what is not
|
||||
|
||||
| Piece | State |
|
||||
|---|---|
|
||||
| The web tree (`bun run build` → `public/dx-maps/`) | Proven. Every landing builds it. |
|
||||
| The generic Tauri shell (`deployment/src-tauri/`) | Exists. It opens the Research Gallery, builds only a Linux `.deb`, and has never been packaged on macOS or Windows. |
|
||||
| The engine on Linux (`bun run dev`, laptop mic) | Proven. |
|
||||
| The engine taking the **webview's** microphone (`RUDDER_AUDIO=browser`) | Proven on Linux: audio streamed over `/api/rudder/stream` came back as the full test sentence. |
|
||||
| The engine **compiling** for macOS (arm64, x86_64) and Windows (x86_64) | Proven by cross-compiling. It has **never been run** on either. |
|
||||
| The engine accepting a WebSocket from the Tauri webview (`tauri://localhost`, `http://tauri.localhost`) | Proven against a running engine; another site's origin is refused. |
|
||||
| NeMo-Speech.cpp runtime for macOS / Windows | Published by NVIDIA (release v0.1.0: `macos-aarch64-cpu`, `macos-aarch64-metal`, `macos-x86_64-cpu`, `windows-x86_64-cpu` / `-cuda` / `-vulkan`). **Never run here.** |
|
||||
| Rudder as a sidecar, first-run model download, installer | **Not built.** Steps 5–8 below are the work to do. |
|
||||
|
||||
## 1. Prerequisites
|
||||
|
||||
Both platforms:
|
||||
|
||||
- **Bun** (the repo's package manager and script runner): https://bun.sh
|
||||
- **Go 1.22 or newer** (the engine).
|
||||
- **Rust** (stable) via https://rustup.rs, then the Tauri CLI, which the repo already pins as a dev
|
||||
dependency (`@tauri-apps/cli` 2.x, run through `bun run tauri:build`).
|
||||
- About 2 GB of free disk space (the speech model is 742 MB) and 2 GB of free RAM while it runs.
|
||||
|
||||
macOS:
|
||||
|
||||
- Xcode Command Line Tools: `xcode-select --install`.
|
||||
|
||||
Windows:
|
||||
|
||||
- Microsoft C++ Build Tools ("Desktop development with C++").
|
||||
- WebView2 runtime (preinstalled on Windows 11).
|
||||
|
||||
Tauri's own prerequisite list is the reference if anything above is out of date:
|
||||
https://v2.tauri.app/start/prerequisites/
|
||||
|
||||
## 2. Get the repo and its packages
|
||||
|
||||
```bash
|
||||
git clone <your team's repo URL> dx-maps
|
||||
cd dx-maps
|
||||
bun install
|
||||
```
|
||||
|
||||
## 3. Build the web tree
|
||||
|
||||
```bash
|
||||
bun run build
|
||||
```
|
||||
|
||||
This writes `public/dx-maps/`, the tree every deployment serves, including
|
||||
`public/dx-maps/rudder-voice/`. The Tauri config points at that folder (`frontendDist`); it does **not**
|
||||
build it for you (`beforeBuildCommand` is deliberately empty; see `deployment/src-tauri/README.md`).
|
||||
**Build first, then package.**
|
||||
|
||||
## 4. Build the engine for this machine
|
||||
|
||||
Tauri expects a sidecar binary named with the target triple:
|
||||
|
||||
```bash
|
||||
# macOS, Apple Silicon
|
||||
cd backend/rudder-engine && go build -o ../../deployment/src-tauri/binaries/rudder-engine-aarch64-apple-darwin . && cd ../..
|
||||
# macOS, Intel
|
||||
cd backend/rudder-engine && go build -o ../../deployment/src-tauri/binaries/rudder-engine-x86_64-apple-darwin . && cd ../..
|
||||
# Windows (PowerShell)
|
||||
cd backend/rudder-engine; go build -o ..\..\deployment\src-tauri\binaries\rudder-engine-x86_64-pc-windows-msvc.exe .; cd ..\..
|
||||
```
|
||||
|
||||
`rustc -Vv` prints the exact triple (`host:` line) if unsure.
|
||||
|
||||
## 5. Make the Tauri shell start the engine (NOT BUILT: this is the work)
|
||||
|
||||
1. **Declare the sidecar** in `deployment/src-tauri/tauri.conf.json`:
|
||||
`"bundle": { "externalBin": ["binaries/rudder-engine"], "targets": ["dmg"] }` on macOS, or
|
||||
`["nsis"]` (or `["msi"]`) on Windows. Keep the file schema-pure: **no `//` comment keys**, Tauri
|
||||
rejects unknown fields. Run `bun run check:tauri` after editing it.
|
||||
2. **Add the shell plugin** (`tauri-plugin-shell`) to `deployment/src-tauri/Cargo.toml` and register it
|
||||
in `src/main.rs`, then spawn the sidecar at startup with these environment variables:
|
||||
- `RUDDER_AUDIO=browser`: the engine takes the **webview's** microphone. Its own recorders
|
||||
(`parec` / `pw-record` / `arecord`) exist only on Linux, so on macOS and Windows this is required.
|
||||
- `RUDDER_HOME=<the app's data directory>` (Tauri's `app_data_dir()`): where the runtime and model live.
|
||||
- `RUDDER_PORT=5193` (the default) or a free port you pass on to the page (step 6).
|
||||
Kill the sidecar when the window closes. On macOS and Windows the engine cannot ask the OS to kill
|
||||
its own speech server if the engine crashes (Linux-only feature), so the shell should own that.
|
||||
3. `src/main.rs` currently has no logic by design ("a window around the web tree"). Rudder is the first
|
||||
desktop plugin with a backend, so this is the first logic it gains; keep it to starting and
|
||||
stopping the sidecar.
|
||||
|
||||
## 6. Open Rudder, and tell it where the engine is (NOT BUILT)
|
||||
|
||||
The window opens `doxa-maps-spa/doxa-maps-spa/index.html` today. For a Rudder app, open Rudder's own
|
||||
page, `rudder-voice/rudder-voice/index.html`, and give the element the engine's **absolute** address:
|
||||
|
||||
```
|
||||
profile-config = {"apiBase": "http://127.0.0.1:5193/api/rudder"}
|
||||
```
|
||||
|
||||
A relative `/api/rudder` would resolve against `tauri://localhost` and reach nothing. How the page
|
||||
receives that config (a small wrapper page, a query parameter, or the shell injecting it) is not
|
||||
decided and not built; pick the smallest option and say which in your report. The engine already
|
||||
answers CORS for the Tauri origins and accepts their WebSocket.
|
||||
|
||||
## 7. The speech runtime and model on first run (NOT BUILT)
|
||||
|
||||
`backend/rudder-engine/setup-runtime.sh` is the reference: it pins the runtime (NeMo-Speech.cpp
|
||||
**0.1.0**) and the model (`nemotron-3.5-asr-streaming-0.6b.q8_0.gguf`, Hugging Face revision
|
||||
`ea30d66debe3`, ~742 MB) by SHA-256, and refuses a mismatch. It is **bash and Linux x86_64 only**, so on
|
||||
macOS and Windows the app must do the same on first run:
|
||||
|
||||
- Download the runtime for this platform from
|
||||
`https://github.com/NVIDIA/NeMo-Speech.cpp/releases/tag/v0.1.0`. Each asset has a published
|
||||
`.sha256` next to it; check it. On Apple Silicon, the **`macos-aarch64-metal`** build uses the GPU
|
||||
and should transcribe far faster than the CPU builds (unmeasured). On a server, the CPU build ran
|
||||
slower than real time.
|
||||
- Download the model from the URL and SHA-256 in `setup-runtime.sh`. Verify before use.
|
||||
- Put them under `RUDDER_HOME`: `bin/nemo-speech-0.1.0-<os>-<arch>-cpu/bin/nemo-speech[.exe]` and
|
||||
`models/<model file>`. The engine derives that runtime path for its own platform
|
||||
(`<os>` = `macos` / `windows`, `<arch>` = `aarch64` / `x86_64`). **Unverified:** the layout inside the
|
||||
macOS and Windows archives. If it differs, or you use the Metal build, set `RUDDER_NEMO_BIN` to the
|
||||
real path of the `nemo-speech` binary.
|
||||
- Show progress: the first start downloads ~750 MB and warms the model (~20 s on a laptop CPU).
|
||||
|
||||
## 8. Package
|
||||
|
||||
```bash
|
||||
bun run tauri:build
|
||||
```
|
||||
|
||||
Run it from the repo root. If the CLI cannot find the config, run `cargo tauri build` inside
|
||||
`deployment/src-tauri/` (untested either way on macOS/Windows).
|
||||
|
||||
The installer lands under `deployment/src-tauri/target/release/bundle/`: `dmg/` on macOS, `nsis/` or
|
||||
`msi/` on Windows.
|
||||
|
||||
- **macOS:** the webview needs `NSMicrophoneUsageDescription` in the app's `Info.plist` (Tauri: an
|
||||
`Info.plist` file next to `tauri.conf.json`), or the microphone request is refused silently. An
|
||||
unsigned app opens with right-click → Open the first time. Signing and notarising are only needed
|
||||
to give it to others.
|
||||
- **Windows:** WebView2 asks for microphone permission on first use.
|
||||
|
||||
## 9. Check it works
|
||||
|
||||
1. Launch the app. Rudder's status reads "Loading speech model…" and then **Ready**.
|
||||
2. Press **Record**, speak, and watch the words stream into the box. Press **Stop**: the last words
|
||||
still arrive.
|
||||
3. `http://127.0.0.1:5193/api/rudder/status` in a browser on the same machine shows
|
||||
`"engine":"ready"` and `"audio":"browser"`.
|
||||
|
||||
## Known gaps (untested; report what you find)
|
||||
|
||||
- Nothing in steps 5–8 has been run on macOS or Windows.
|
||||
- The macOS/Windows runtime archive layout, and whether the engine's derived path matches it.
|
||||
- The first-run download, including resuming an interrupted 742 MB download.
|
||||
- Mapbox basemaps in the Research Gallery need the token host to allow the Tauri origin
|
||||
(`deployment/src-tauri/README.md`). Rudder itself needs no token.
|
||||
- If the engine crashes, its speech server may keep running (and holding ~1 GB) until the app quits.
|
||||
|
|
@ -247,6 +247,19 @@ const r = await page.evaluate(() => {
|
|||
prayBoxes: document.querySelectorAll('.pray-box').length,
|
||||
funnelTip: document.querySelectorAll('.funnel-tip').length,
|
||||
lifeShaded: document.querySelectorAll('.lc-grid .lc-reached').length,
|
||||
// ★ THE SHADED CELLS' VERTICAL SPREAD, as a fraction of the grid's own height. A COUNT cannot tell a
|
||||
// scatter from a bar — 32 shaded is 32 shaded whether they are spread through a life or stacked in
|
||||
// row 1 — so this measures the SHAPE, which is the thing the page is actually claiming.
|
||||
lifeSpread: (() => {
|
||||
const grid = document.querySelector('.sheet-christian .lc-grid')
|
||||
if (!grid) return null
|
||||
const on = [...grid.querySelectorAll('.lc-reached')]
|
||||
if (on.length < 2) return null
|
||||
const gb = grid.getBoundingClientRect()
|
||||
if (!(gb.height > 0)) return null
|
||||
const tops = on.map((el) => el.getBoundingClientRect().top)
|
||||
return (Math.max(...tops) - Math.min(...tops)) / gb.height
|
||||
})(),
|
||||
funnelEq: document.querySelectorAll('.funnel-eq').length,
|
||||
funnelSteps: document.querySelectorAll('.funnel-mine').length,
|
||||
// ★ MEASURED SO THE GATE CAN REPORT WHAT IT ASSERTED. rega: "the gate prints no funnel line, even
|
||||
|
|
@ -672,6 +685,18 @@ if (r.lifeSheets) {
|
|||
+ `but rendered ${perGrid} — the grid changed size, so the page no longer shows a human life`)
|
||||
}
|
||||
}
|
||||
// ⚠ AND THE SHADE MUST BE SCATTERED, NOT STACKED — the assertion that would have caught what three gates
|
||||
// and a passing suite did not. rega's contact sheet (2026-09-28) showed page 3 reading as ONE SOLID BAR:
|
||||
// 32 contiguous cells fill most of row 1 of 52, so the page said "a big green block" where the agent's
|
||||
// intent is "32 boxes lost in 5,200". Every assertion passed, because they all measured the COUNT.
|
||||
// Half the grid height is a deliberately loose floor: a genuine scatter of even a few cells spans most of
|
||||
// the page (measured: 32 cells over 26 rows, 95% of the height), and a bar spans ~1%. Anything in between
|
||||
// is worth a human look.
|
||||
if (r.christianSheets && r.lifeSpread !== null && r.lifeSpread !== undefined && r.lifeSpread < 0.5) {
|
||||
fails.push(`the christian-share page's shaded cells span only ${(r.lifeSpread * 100).toFixed(0)}% of the `
|
||||
+ 'grid height — they are stacked, not scattered, so the page reads as a bar rather than as rare marks '
|
||||
+ 'in a whole life. Shade by a deterministic scatter, not a contiguous run.')
|
||||
}
|
||||
// ★ THE SHADED SHARE MUST BE NON-ZERO AND NOT EVERYTHING. 0 shaded means the percentage never
|
||||
// reached the page (a null christian-share file renders the page with an empty grid, which reads as
|
||||
// "nobody is reached" — a false claim rather than missing data); 5,200 means the maths inverted.
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ try {
|
|||
}
|
||||
}
|
||||
for (const b of byBundle.keys()) if (!seen.has(b)) fail(`bundle ${b} is missing from the rail`)
|
||||
// A row is NAMED, never shown as a bare id (the agent: Gospel x Internet read just "board").
|
||||
for (const r of ctx.rows) if (r.label === r.profile || r.label === r.bundle) fail(`${r.key} shows a bare id ("${r.label}") — give its <profile>.meta.json a "label"`)
|
||||
const canon = secs.flatMap((s) => s.nodes.filter((n) => n.canonical))
|
||||
for (const r of ctx.rows) { const c = canon.filter((n) => n.target === r.key).length; if (c !== 1) fail(`${r.key} has ${c} canonical nodes (want 1)`) }
|
||||
const nProd = [...stageOf.values()].filter((v) => v === 'production').length
|
||||
|
|
|
|||
|
|
@ -259,6 +259,24 @@ export function autoSpaDevPlugin(token = '') {
|
|||
const rewritten = leafRewrite(rawPath, treeName)
|
||||
const path = rewritten || rawPath
|
||||
if (rewritten) req.url = rewritten + (req.url || '').slice(rawPath.length)
|
||||
// THE SCRIPT EMBED, TOO (repo, 2026-09-28): the copyable snippet `./<b>/<b>.js` 404'd on the dev
|
||||
// server for every production map while the iframe snippet worked through leafRewrite. The bundle
|
||||
// IIFE only exists BUILT, so it is served from public/<tree>/ — bare or tree-prefixed, like the
|
||||
// leaf. Not built yet: a plain 404 that says so, never Vite's HTML fallback.
|
||||
const iife = /^\/(?:([^/]+)\/)?([a-z0-9][a-z0-9-]*)\/([a-z0-9][a-z0-9-]*)\.js$/.exec(rawPath)
|
||||
if (iife && iife[2] === iife[3] && (!iife[1] || iife[1] === treeName)) {
|
||||
const file = resolve(REPO_ROOT, 'public', treeName, iife[2], iife[2] + '.js')
|
||||
if (existsSync(file)) {
|
||||
res.setHeader('Content-Type', 'text/javascript; charset=utf-8')
|
||||
res.setHeader('Cache-Control', 'no-cache')
|
||||
return res.end(readFileSync(file))
|
||||
}
|
||||
if (existsSync(resolve(REPO_ROOT, 'plugin-designs', iife[2]))) {
|
||||
res.statusCode = 404
|
||||
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
|
||||
return res.end(`${iife[2]}.js is only produced by a build: run \`bun run build\` (or BUNDLE=${iife[2]} bun x vite build), then reload.`)
|
||||
}
|
||||
}
|
||||
// /assets/* — see resolveDevAsset. A miss is a REAL 404, never Vite's HTML
|
||||
// fallback: HTML-for-JSON made three maps die silently at JSON.parse before
|
||||
// they ever created a map, with no console error and no error card.
|
||||
|
|
|
|||
|
|
@ -17,18 +17,21 @@ export function readProfileMeta(dir, profileName) {
|
|||
try {
|
||||
const meta = JSON.parse(readFileSync(join(dir, `${profileName}.meta.json`), 'utf8'))
|
||||
const corner = meta?.widget?.corner
|
||||
// The plugin's own display name (label, or title / displayName): what the Plugin Studio rail calls it.
|
||||
const name = [meta?.label, meta?.title, meta?.displayName].find((v) => typeof v === 'string' && v.trim())
|
||||
return {
|
||||
stage: meta?.stage === 'production' ? 'production' : 'experimental',
|
||||
heavy: meta?.heavy === true,
|
||||
widget: CORNERS.includes(corner) ? { corner } : null,
|
||||
label: name ? name.trim() : '',
|
||||
}
|
||||
} catch { return { stage: 'experimental', heavy: false, widget: null } }
|
||||
} catch { return { stage: 'experimental', heavy: false, widget: null, label: '' } }
|
||||
}
|
||||
|
||||
/** The optional manifest keys for one profile (stage always; heavy / widget only when set). */
|
||||
export function profileMetaFields(dir, profileName) {
|
||||
const m = readProfileMeta(dir, profileName)
|
||||
return { stage: m.stage, ...(m.heavy ? { heavy: true } : {}), ...(m.widget ? { widget: m.widget } : {}) }
|
||||
return { stage: m.stage, ...(m.label ? { label: m.label } : {}), ...(m.heavy ? { heavy: true } : {}), ...(m.widget ? { widget: m.widget } : {}) }
|
||||
}
|
||||
|
||||
/** A bundle is production if ANY of its profiles says so. */
|
||||
|
|
|
|||
|
|
@ -85,6 +85,25 @@ const LEAK_STRICT = [
|
|||
[/\bpersecution\b/, 'operational-context vocabulary (allowed only inside data CSVs)'],
|
||||
[/\.forgejo\/workflows/, 'CI workflow path — process, never ships in a public tree'],
|
||||
]
|
||||
// ★ THE PRAYER, WORD FOR WORD (the agent decision 2026-09-28): "Persecution happens globally, so the prayer is
|
||||
// for the globe, and the packets carry the same prayer for all packets." The operational-vocabulary rule
|
||||
// skips EXACTLY that prayer: the text at packet-strings.json <locale>.points[0].text (the packets' prayer
|
||||
// point 1, which UPG-100's Two-Cross packet shows too), read from its source in every locale, removed from
|
||||
// a scanned file before the rule looks at it. Scoped by file and key, never by the word: the same word
|
||||
// anywhere else still counts.
|
||||
const PRAYER_ALLOWED = (() => {
|
||||
try {
|
||||
const src = JSON.parse(readFileSync(join(ROOT, 'library/scripts/posters/packet-strings.json'), 'utf8'))
|
||||
const out = []
|
||||
for (const [lc, v] of Object.entries(src)) {
|
||||
const text = !lc.startsWith('_') && v?.points?.[0]?.text
|
||||
if (typeof text === 'string' && text) out.push(text, JSON.stringify(text).slice(1, -1)) // raw, and as a JS/JSON string literal
|
||||
}
|
||||
return out
|
||||
} catch { return [] }
|
||||
})()
|
||||
const withoutPrayer = (t) => PRAYER_ALLOWED.reduce((acc, s) => acc.split(s).join(''), t)
|
||||
|
||||
// ★ WIDENED 2026-09-21. This held ONE pattern (the Mapbox JWT), on the reasoning that public/
|
||||
// is a tree we GENERATE, so the only realistic leak is the token the build itself writes.
|
||||
// THAT REASONING WAS WRONG: 855 files under public/ are TRACKED, 95 of them text — boundaries,
|
||||
|
|
@ -131,7 +150,8 @@ for (const f of files) {
|
|||
if (!isText || f.size > 40 * 1024 * 1024) continue
|
||||
const t = readFileSync(f.abs, 'utf8')
|
||||
for (const [re, why] of LEAK) if (re.test(t)) hit(findings, 'leaks', f.rel, why)
|
||||
for (const [re, why] of LEAK_STRICT) if (re.test(t) && !/\.csv$/.test(f.rel)) hit(STRICT ? findings : warnings, 'leaks', f.rel, why)
|
||||
const tNoPrayer = PRAYER_ALLOWED.length && /persecution/.test(t) ? withoutPrayer(t) : t
|
||||
for (const [re, why] of LEAK_STRICT) if (re.test(re.source.includes('persecution') ? tNoPrayer : t) && !/\.csv$/.test(f.rel)) hit(STRICT ? findings : warnings, 'leaks', f.rel, why)
|
||||
// ★ P2 (2026-09-24): a credential is a DOCUMENT, not a string. Every JWT-shaped value gets
|
||||
// its payload DECODED and its claims reviewed: 'it is a public token' is not sufficient —
|
||||
// the pk. accepted by the 2026-09-21 ruling turned out to carry a `u` claim naming a real,
|
||||
|
|
|
|||
|
|
@ -397,6 +397,10 @@ export function useMapInstance({
|
|||
const autoProvider = !provider && !explicitMapProvider(_pcForProvider)
|
||||
provider = provider || resolveMapProvider(_pcForProvider, { token: accessToken })
|
||||
let isMaplibre = provider === 'maplibre'
|
||||
// Start the engine download during setup, not when initializeMap runs after mount: rega's waterfall had
|
||||
// the engine requested only after the component tree had rendered. initializeMap awaits the same script
|
||||
// (ensureEngineScript is idempotent) and reports a failure there; it is swallowed here.
|
||||
if (typeof document !== 'undefined') ensureEngineScript(provider).catch(() => {})
|
||||
|
||||
// THE READER'S LANGUAGE, for the basemap's place names (maps/localize-labels.js). ProfileLoader
|
||||
// provides it as a ref ('lang'); an element without ProfileLoader falls back to its profile-config
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ function isMaplibreMap(map) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Point the basemap's place-name labels at `lang` ('en' = the style's own labels).
|
||||
* Point the basemap's place-name labels at `lang` (every language, English included).
|
||||
* Call after style.load, and again whenever the reader's language changes.
|
||||
* @returns {number} how many label layers were localized (0 on Mapbox, which localizes internally)
|
||||
*/
|
||||
|
|
@ -58,9 +58,10 @@ export function localizeBasemapLabels(map, lang) {
|
|||
if (!OSM_NAME_FIELD.test(json)) continue // a plugin's own label: leave it
|
||||
saved.set(layer.id, current)
|
||||
} else if (!saved.has(layer.id)) continue
|
||||
const next = code === 'en'
|
||||
? saved.get(layer.id)
|
||||
: ['coalesce', ['get', 'name:' + code], ['get', 'name:latin'], ['get', 'name']]
|
||||
// English too, not the style's own bilingual labels ("Россия" under "Russia"): those drew every
|
||||
// native script at world view, so an English page fetched 13 extra glyph ranges (~600 KB, rega:
|
||||
// Prayer Progress 18 requests / 777 KB in en against 5 / 185 KB in ar). One language per label.
|
||||
const next = ['coalesce', ['get', 'name:' + code], ['get', 'name:latin'], ['get', 'name']]
|
||||
map.setLayoutProperty(layer.id, 'text-field', next)
|
||||
n++
|
||||
}
|
||||
|
|
|
|||
|
|
@ -518,14 +518,49 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null })
|
|||
// ★ 5,200 IS NOT ROUNDED OR CHOSEN FOR LAYOUT: 100 years x 52 weeks, the agent's own numbers
|
||||
// ("a 100 year life in weeks"). Everything else here is derived from it, so the two pages cannot
|
||||
// drift apart into two grids that merely look alike.
|
||||
function lifeGrid({ shaded = 0, shadeClass = 'lc-on' } = {}) {
|
||||
function lifeGrid({ shaded = 0, shadeClass = 'lc-on', seed = '' } = {}) {
|
||||
const YEARS = 100, WEEKS = 52, TOTAL = YEARS * WEEKS;
|
||||
const n = Math.max(0, Math.min(TOTAL, Math.round(Number(shaded) || 0)));
|
||||
// Row-major, so the shaded run reads as a contiguous block from the top — a scattered
|
||||
// shading of the same COUNT would be honest arithmetic and an unreadable picture.
|
||||
|
||||
// ⚠ SCATTERED, NOT STACKED — and the comment that used to sit here said the opposite. It read:
|
||||
// "Row-major, so the shaded run reads as a contiguous block from the top — a scattered shading of the
|
||||
// same COUNT would be honest arithmetic and an unreadable picture." That was reasoning about a picture
|
||||
// I had never looked at, and it was exactly backwards.
|
||||
// ★ WHAT THE RENDER ACTUALLY SHOWED (rega's contact sheet, 2026-09-28): 32 contiguous cells fill most
|
||||
// of row 1 of 52, so the page reads as ONE SOLID GREEN BAR across the header — the ordinary chart the
|
||||
// whole life-grid idea exists to avoid. The agent's intent is "32 boxes lost in 5,200"; rarity is the
|
||||
// message, and a bar cannot say it. Scattering makes the eye hunt for them, which IS the point.
|
||||
// ⚠ AND NO GATE COULD SEE IT. check-packet-render asserts the shaded COUNT is strictly between 0 and
|
||||
// 5,200 — true of a scatter and equally true of a bar. A count cannot distinguish a distribution.
|
||||
//
|
||||
// DETERMINISTIC, NEVER Math.random(): the same packet must print identically every time, or two copies
|
||||
// of one zone disagree and neither is reproducible. A 32-bit FNV-1a hash of the seed (the zone id) feeds
|
||||
// a mulberry32 PRNG, so the pattern is stable per zone and DIFFERENT between zones — which also avoids
|
||||
// every packet in a print run carrying the same constellation.
|
||||
let h = 2166136261;
|
||||
for (let i = 0; i < String(seed).length; i++) {
|
||||
h ^= String(seed).charCodeAt(i); h = Math.imul(h, 16777619);
|
||||
}
|
||||
const rand = () => {
|
||||
h |= 0; h = (h + 0x6D2B79F5) | 0;
|
||||
let t = Math.imul(h ^ (h >>> 15), 1 | h);
|
||||
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
|
||||
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
||||
};
|
||||
// Partial Fisher-Yates over the index space: pick n distinct cells without materialising a shuffle of
|
||||
// all 5,200. Sparse by construction, so a large n degrades gracefully rather than clumping.
|
||||
const picked = new Set();
|
||||
const idx = [];
|
||||
for (let i = 0; i < TOTAL; i++) idx.push(i);
|
||||
for (let k = 0; k < n; k++) {
|
||||
const j = k + Math.floor(rand() * (TOTAL - k));
|
||||
const t = idx[k]; idx[k] = idx[j]; idx[j] = t;
|
||||
picked.add(idx[k]);
|
||||
}
|
||||
|
||||
const cells = [];
|
||||
for (let i = 0; i < TOTAL; i++) {
|
||||
cells.push(`<i class="lc-c${i < n ? ' ' + shadeClass : ''}"></i>`);
|
||||
cells.push(`<i class="lc-c${picked.has(i) ? ' ' + shadeClass : ''}"></i>`);
|
||||
}
|
||||
return { TOTAL, YEARS, WEEKS, shadedCount: n, html: `<div class="lc-grid">${cells.join('')}</div>` };
|
||||
}
|
||||
|
|
@ -560,7 +595,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null })
|
|||
function christianPage(zone, christian) {
|
||||
if (!christian || !Number.isFinite(Number(christian.pctEvangelical))) return '';
|
||||
const pct = Number(christian.pctEvangelical);
|
||||
const g = lifeGrid({ shaded: (pct / 100) * 5200, shadeClass: 'lc-reached' });
|
||||
const g = lifeGrid({ shaded: (pct / 100) * 5200, shadeClass: 'lc-reached', seed: zone.id || zone.zoneKey || 'upg-100' });
|
||||
const lostPct = 100 - pct;
|
||||
// ⚠ TWO DECIMALS ON BOTH SIDES, not rounded above 10. The reached share is 0.61% and rounding the
|
||||
// other side to "99%" loses the asymmetry that is the whole point: 99.39 and 0.61 sum to 100, while
|
||||
|
|
|
|||
|
|
@ -1637,12 +1637,43 @@ function pinBaseAlpha() {
|
|||
}
|
||||
// matchExpr: an expression to dim by, null to clear dimming, undefined to re-apply what is current
|
||||
// (which is what the slider's watcher needs — it changes the scale, not the selection).
|
||||
// ★ THE UNDIMMED VALUE IS DATA-DRIVEN TOO, AND THAT IS THE WHOLE POINT (the agent bug: "the research map
|
||||
// isn't connecting with the legend"; rega's CPU profile, 2026-09-28). A legend click on a big affinity
|
||||
// row appeared to do nothing for ~2 s. It was not the echo guard, not the legend's DOM (34 rows before,
|
||||
// 34 after) and not expression evaluation (the JS filter scan over 2,106 features against a 700-id list
|
||||
// measures 14 ms). It was ONE task of 3.2-3.5 s whose self time was getShaderParameter + getProgram-
|
||||
// Parameter: the GPU compiling a NEW SHADER VARIANT, because this was the first moment circle-opacity
|
||||
// stopped being a constant and became a per-feature expression. The second click was cheap — the
|
||||
// program was cached — which is exactly the signature of a one-time compile.
|
||||
//
|
||||
// So the fix is not to make the expression smaller; it is to stop the FIRST SELECTION being the moment
|
||||
// the variant is needed. With no selection the value is now ['case', ['has','uniqueId'], a, a] — both
|
||||
// branches identical, so not one pixel changes, but circle-opacity is data-driven from the first paint
|
||||
// and the program compiles during boot alongside every other one. A selection then only re-uploads
|
||||
// attribute values, which is the cheap path.
|
||||
//
|
||||
// The trade, stated: boot compiles one more program (tens of ms on a real GPU; rega measured seconds
|
||||
// only because that box rasterises on the CPU via SwiftShader). Paying it at load beats freezing the
|
||||
// map mid-gesture, and the variant was going to be compiled on first interaction anyway.
|
||||
function applyPinOpacity(m, matchExpr) {
|
||||
if (matchExpr !== undefined) _pinMatchExpr = matchExpr || null
|
||||
if (!m || !m.getLayer?.('language-family-pins')) return
|
||||
const a = pinBaseAlpha()
|
||||
const value = _pinMatchExpr ? ['case', _pinMatchExpr, a, 0] : a
|
||||
// ['has','uniqueId'] reads a feature property, which is what makes it data-driven; both outcomes are
|
||||
// `a`, so a pin without the property renders exactly as before.
|
||||
const value = _pinMatchExpr ? ['case', _pinMatchExpr, a, 0] : ['case', ['has', 'uniqueId'], a, a]
|
||||
// ★ ONE WRITE PER DISTINCT VALUE. rega counted circle-opacity rewritten 4-8 times for a single click
|
||||
// (+1.52, +1.57, +1.94, +5.17 s): the selection handler, the glow sync and the slider watcher all end
|
||||
// up here, and each write re-uploads the per-feature attribute. Every writer already routes through
|
||||
// this function, so the collapse belongs here and nowhere else. Compared as text because the value is
|
||||
// an expression tree; at a few hundred ids that is microseconds against a re-upload.
|
||||
try {
|
||||
// Asked of the MAP, not of a remembered key. A remembered one would go stale the moment the layer
|
||||
// is torn down and re-added (setStyle wipes custom layers — this file has done that before) and the
|
||||
// skip would then hold a dim that is no longer painted. Reading the live value cannot be stale, and
|
||||
// if an engine normalises the expression differently the compare simply misses and we write, which
|
||||
// is the old behaviour rather than a wrong one.
|
||||
if (JSON.stringify(m.getPaintProperty('language-family-pins', 'circle-opacity')) === JSON.stringify(value)) return
|
||||
m.setPaintProperty('language-family-pins', 'circle-opacity', value)
|
||||
m.setPaintProperty('language-family-pins', 'circle-stroke-opacity', value)
|
||||
if (m.getLayer('language-family-pins-shadow')) {
|
||||
|
|
@ -2599,6 +2630,15 @@ async function onMapReady(normalizedPeopleGroups) {
|
|||
if (activeTab.value?.id === 'doxa-regions' && map.value?.getLayer('language-family-pins')) {
|
||||
map.value.setPaintProperty('language-family-pins', 'circle-color', '#4b5563')
|
||||
}
|
||||
// ★ INSTALL THE DATA-DRIVEN OPACITY NOW, WHICH IS WHAT ACTUALLY PRE-WARMS THE SHADER. The layer is
|
||||
// added with a CONSTANT "circle-opacity": 1 (see addLanguageFamilyLayer), and applyPinOpacity is
|
||||
// otherwise first reached from a legend click — so without this line the expression shape below is
|
||||
// only ever the CLEARED state and the first selection is still the moment the variant is compiled,
|
||||
// which is the 3.2-3.5s freeze rega profiled. Found by reading the built bundle rather than the
|
||||
// source: the addLayer constant is right there in the shipped JS.
|
||||
// matchExpr is left UNDEFINED on purpose — "re-apply what is current" — so a selection already
|
||||
// restored from a share-link hash is preserved instead of being cleared at boot.
|
||||
applyPinOpacity(map.value)
|
||||
// Start prayer glow if landing on the prayer tab
|
||||
if (activeTab.value?.id === 'prayer') mapLayers.startPrayerGlow()
|
||||
// Hand the same dataset to clustering so MST/network can rebuild on toggle
|
||||
|
|
|
|||
|
|
@ -150,9 +150,9 @@ useShadowStyles(
|
|||
'.gig-tr.sel{background:#e3ece2}' +
|
||||
'.gig-tr.open{box-shadow:inset 3px 0 0 #3b463d}' +
|
||||
'.gig-sticky{position:sticky;inset-inline-start:0;z-index:1;background:inherit;font-weight:600}' +
|
||||
'.gig-chk{width:34px;justify-content:center}' +
|
||||
'.gig-chk{width:40px;justify-content:center}' + // 24 px of content inside the 8 px side padding: room for the hit area
|
||||
'.gig-chk input{width:15px;height:15px;margin:0;cursor:pointer;accent-color:#3b463d}' +
|
||||
'.gig-hit{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;cursor:pointer}' +
|
||||
'.gig-hit{display:inline-flex;flex:none;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;cursor:pointer}' +
|
||||
'.gig-dot{width:10px;height:10px;border-radius:50%;box-sizing:border-box;border:1.5px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.2);flex:none;margin-inline-end:6px}' +
|
||||
'.gig-sw{width:10px;height:10px;border-radius:2px;flex:none;margin-inline-end:6px;opacity:.85}' +
|
||||
'.gig-td a{color:#4f6b52}' +
|
||||
|
|
|
|||
|
|
@ -411,11 +411,22 @@ for (const [path, mod] of Object.entries(import.meta.glob('../../library/i18n/lo
|
|||
if (m) STUDIO_STRINGS[m[1]] = mod
|
||||
}
|
||||
|
||||
// DISPLAY NAMES — what a row is CALLED, keyed by "<bundle>/<profile>". Display only: the row key, the
|
||||
// URL hash, the stored last-tab and the <tag> under the name are all unchanged, so links and memory
|
||||
// keep working. The agent's name for the cap-5 shell is "Research Gallery" (its meta.json label);
|
||||
// the manifest does not publish meta labels, so the studio carries the one it needs here.
|
||||
const DISPLAY_NAME = { 'doxa-maps-spa/doxa-maps-spa': 'Research Gallery' }
|
||||
// DISPLAY NAMES — what a row is CALLED. Display only: the row key, the URL hash, the stored last-tab and
|
||||
// the <tag> under the name are unchanged, so links and memory keep working. AUTO-DETECTED (the agent:
|
||||
// never hardcode): the plugin's own <profile>.meta.json label, carried by the manifest; failing that, a
|
||||
// readable name made from its ids ("Gospel Internet · Board"), never a bare profile id (a row once read
|
||||
// just "board"). DISPLAY_NAME is an OVERRIDE only, and empty unless a label must differ from the meta.
|
||||
const DISPLAY_NAME = {}
|
||||
const humanize = (id) => String(id).split(/[-_]+/).filter(Boolean).map(w => w[0].toUpperCase() + w.slice(1)).join(' ')
|
||||
function rowLabel(bundle, p) {
|
||||
const key = bundle + '/' + p.profile
|
||||
if (DISPLAY_NAME[key]) return DISPLAY_NAME[key]
|
||||
// A meta label often ends in an aside for the reader of the JSON ("Research Gallery (vertical-tab app
|
||||
// shell: …)"); the rail shows the name before it.
|
||||
const own = typeof p.label === 'string' ? p.label.replace(/\s*\([^()]*\)\s*$/, '').trim() : ''
|
||||
if (own) return own
|
||||
return p.profile === bundle ? humanize(bundle) : humanize(bundle) + ' · ' + humanize(p.profile)
|
||||
}
|
||||
|
||||
// Load a bundle exactly once per URL; resolves after its define() has run.
|
||||
//
|
||||
|
|
@ -988,7 +999,7 @@ export default defineComponent({
|
|||
bundle: b.bundle,
|
||||
// production | experimental, from the bundle's .meta.json via the manifest (never a list here)
|
||||
stage: b.stage === 'production' ? 'production' : 'experimental',
|
||||
label: DISPLAY_NAME[b.bundle + '/' + p.profile] || p.profile,
|
||||
label: rowLabel(b.bundle, p),
|
||||
// The REAL profile id, handed to the element in profile-config. Never the label: a display
|
||||
// name would mount <doxa-maps-spa> with profile "Research Gallery", which it does not have.
|
||||
profile: p.profile,
|
||||
|
|
|
|||
|
|
@ -127,10 +127,33 @@ const regionLabel = (key) => {
|
|||
const k = slug && REGION_KEY[slug]
|
||||
return (k && tStatic(k)) || key
|
||||
}
|
||||
// ★ THE CODE COMES FROM THE ROW, NOT FROM THE NAME (rega, ?lang=ar after the first fix: "People's
|
||||
// Republic of China" and "Lao People's Democratic Republic" were still English). The API labels some
|
||||
// countries with their FORMAL name, which countries.json does not carry — it says "China" and "Laos" —
|
||||
// so reversing the English name missed exactly the countries whose names are longest. Every row already
|
||||
// carries both halves: the label the chart aggregates on, and the alpha-3 in country_code.value, which
|
||||
// is the accessor the choropleth already joins on. Reading the pair out of the data is exact and needs
|
||||
// no alias table.
|
||||
// Deliberately NOT a looser text match: "Democratic Republic of the Congo" and "Republic of the Congo"
|
||||
// are two countries, so stripping formal prefixes is how one would silently become the other — the
|
||||
// failure countryName.js's own header warns about.
|
||||
const COUNTRY_ISO_BY_LABEL = computed(() => {
|
||||
const m = new Map()
|
||||
const acc = FACET_ACC.country_code
|
||||
const geo = cfg.facets?.country_code?.geoIso
|
||||
if (!acc || !geo) return m
|
||||
for (const r of (dash?.rows?.value || [])) {
|
||||
const label = acc(r), iso = geo(r)
|
||||
if (label && iso && !m.has(label)) m.set(label, String(iso).toUpperCase())
|
||||
}
|
||||
return m
|
||||
})
|
||||
const countryLabel = (key) => {
|
||||
const lc = getRuntimeLocale()
|
||||
if (!lc || lc === 'en') return key
|
||||
const iso3 = iso3ForEnglishName(key)
|
||||
// The row pair first, the English-name table second: the table still answers for a label whose rows
|
||||
// are currently filtered out, and a synthetic key ("Other") resolves to neither and renders as itself.
|
||||
const iso3 = COUNTRY_ISO_BY_LABEL.value.get(key) || iso3ForEnglishName(key)
|
||||
return iso3 ? countryName(iso3, lc) : key
|
||||
}
|
||||
const legendLabel = (facet, key) => {
|
||||
|
|
|
|||
|
|
@ -131,6 +131,25 @@ const mapProvider = computed(() => {
|
|||
// loaded with — a second inline `cfg.provider === …` test is how the two drift apart.
|
||||
const isMaplibreProvider = computed(() => mapProvider.value === 'maplibre')
|
||||
|
||||
// The country boundaries (384 KB) are fetched as soon as the panel exists, not from the style-load
|
||||
// handler: there the download waited for the whole basemap style and so ran after it, not beside it
|
||||
// (rega's waterfall: requested at 10.4 s of a 12.5 s load). The handler awaits this same promise.
|
||||
let boundariesPromise = null
|
||||
function countryBoundaries() {
|
||||
if (!boundariesPromise) {
|
||||
boundariesPromise = fetch(`${resolveAssetsBase(profileConfig.value)}/boundaries/world-adm0-web.geojson`)
|
||||
.then((r) => r.json())
|
||||
.then((gj) => {
|
||||
for (const f of gj.features || []) {
|
||||
if (f.properties && f.properties.iso3) f.properties.iso_3166_1_alpha_3 = f.properties.iso3
|
||||
}
|
||||
return gj
|
||||
})
|
||||
boundariesPromise.catch(() => { boundariesPromise = null }) // a failed download is retried next time
|
||||
}
|
||||
return boundariesPromise
|
||||
}
|
||||
|
||||
const { map, isMapReady, initializeMap, destroy } = useMapInstance({
|
||||
containerRef: mapContainer, accessToken: unref(mapboxToken) || (mapboxToken && mapboxToken.value) || '',
|
||||
// ★ ZOOMED OUT BY DEFAULT, WITH REAL ZOOM-OUT RANGE (the agent 2026-09-23: "I don't want the map
|
||||
|
|
@ -841,12 +860,8 @@ function addLayers() {
|
|||
// keep this layer underneath the pins (layer order is insertion order). An awaited fetch
|
||||
// here would put the choropleth on TOP of every bubble.
|
||||
m.addSource('rd-countries', { type: 'geojson', data: { type: 'FeatureCollection', features: [] } })
|
||||
fetch(`${resolveAssetsBase(profileConfig.value)}/boundaries/world-adm0-web.geojson`)
|
||||
.then((r) => r.json())
|
||||
countryBoundaries()
|
||||
.then((gj) => {
|
||||
for (const f of gj.features || []) {
|
||||
if (f.properties && f.properties.iso3) f.properties.iso_3166_1_alpha_3 = f.properties.iso3
|
||||
}
|
||||
const src = map.value && map.value.getSource('rd-countries')
|
||||
if (src) src.setData(gj)
|
||||
})
|
||||
|
|
@ -1215,6 +1230,7 @@ function syncScrollZoomToHost(m) {
|
|||
}
|
||||
|
||||
onMounted(async () => {
|
||||
if (isMaplibreProvider.value) countryBoundaries().catch(() => {})
|
||||
await initializeMap()
|
||||
const m = map.value; if (!m) return
|
||||
if (m.isStyleLoaded()) addLayers(); else m.on('load', addLayers)
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <all-people-groups> custom element. -->
|
||||
<script src="../all-people-groups.js" integrity="sha384-rulN2I2Zknh0wX7BSlbKVtEb7+7FeIkGQEBdODV+xJROYJhMShYMQFt2q4CSdKe0" crossorigin="anonymous"></script>
|
||||
<script src="../all-people-groups.js" integrity="sha384-Hyu82pGG4OWWb5qm5gfp3dDF4vqvXnlZQ8/d86okNGi0nV5GNhyIApwby/FrkZ1g" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js" integrity="sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9" crossorigin="anonymous"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <cities-internet-map> custom element. -->
|
||||
<script src="../cities-internet.js" integrity="sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9" crossorigin="anonymous"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,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" integrity="sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9" crossorigin="anonymous"></script>
|
||||
<script src="../cities-internet.js" integrity="sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js" integrity="sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,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" integrity="sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <country-posters-map> custom element. -->
|
||||
<script src="../country-posters.js" integrity="sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+" crossorigin="anonymous"></script>
|
||||
<script src="../country-posters.js" integrity="sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
|
||||
<script src="../../dashboard-plus-grid.js" integrity="sha384-+CKECgEuJ5pKzR11N0RMEEAEvBKz+F1S3xbVub8k0RAF+tSEV8fW6W2CVCTdJ1lZ" crossorigin="anonymous"></script>
|
||||
<script src="../../dashboard-plus-grid.js" integrity="sha384-KKQCv8v895tYjwayG6saIYk3ymn3wmk6X3TEwv+sQ5pU9BDkErSFF7JEuUTdsZCF" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <dashboard-plus-grid> custom element. -->
|
||||
<script src="../dashboard-plus-grid.js" integrity="sha384-+CKECgEuJ5pKzR11N0RMEEAEvBKz+F1S3xbVub8k0RAF+tSEV8fW6W2CVCTdJ1lZ" crossorigin="anonymous"></script>
|
||||
<script src="../dashboard-plus-grid.js" integrity="sha384-KKQCv8v895tYjwayG6saIYk3ymn3wmk6X3TEwv+sQ5pU9BDkErSFF7JEuUTdsZCF" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,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" integrity="sha384-fqvqn/UaQLfib5r8Bs5plcIouQckolyhgYzV/nXeoS7ltC99oH/T5ZuFye/+ZJSt" crossorigin="anonymous"></script>
|
||||
<script src="../demo-map.js" integrity="sha384-okPjbmNdBwckUKJibLgUkoTjZ2+rwOQNGxWZO+hv8HXCPMWWOZyAawTHo6EOqBk3" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -33,7 +33,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" integrity="sha384-fqvqn/UaQLfib5r8Bs5plcIouQckolyhgYzV/nXeoS7ltC99oH/T5ZuFye/+ZJSt" crossorigin="anonymous"></script>
|
||||
<script src="../../demo-map.js" integrity="sha384-okPjbmNdBwckUKJibLgUkoTjZ2+rwOQNGxWZO+hv8HXCPMWWOZyAawTHo6EOqBk3" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"bundle": "all-people-groups",
|
||||
"scriptUrl": "./all-people-groups/all-people-groups.js",
|
||||
"output": "dx-maps/all-people-groups/all-people-groups.js",
|
||||
"integrity": "sha384-rulN2I2Zknh0wX7BSlbKVtEb7+7FeIkGQEBdODV+xJROYJhMShYMQFt2q4CSdKe0",
|
||||
"integrity": "sha384-Hyu82pGG4OWWb5qm5gfp3dDF4vqvXnlZQ8/d86okNGi0nV5GNhyIApwby/FrkZ1g",
|
||||
"elements": [
|
||||
"all-people-groups"
|
||||
],
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
"scriptUrl": "./all-people-groups/all-people-groups.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-rulN2I2Zknh0wX7BSlbKVtEb7+7FeIkGQEBdODV+xJROYJhMShYMQFt2q4CSdKe0\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-Hyu82pGG4OWWb5qm5gfp3dDF4vqvXnlZQ8/d86okNGi0nV5GNhyIApwby/FrkZ1g\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
|
||||
},
|
||||
"bundle": "all-people-groups"
|
||||
}
|
||||
|
|
@ -55,6 +55,7 @@
|
|||
{
|
||||
"profile": "big-picture",
|
||||
"stage": "experimental",
|
||||
"label": "Big Picture (research header ↔ real people-groups grid via props/events)",
|
||||
"file": "big-picture.vue",
|
||||
"description": "The Cat-4 composite that PAIRS the two real capability elements of the",
|
||||
"element": "bp-big-picture",
|
||||
|
|
@ -108,7 +109,7 @@
|
|||
"bundle": "cities-internet",
|
||||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"output": "dx-maps/cities-internet/cities-internet.js",
|
||||
"integrity": "sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9",
|
||||
"integrity": "sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv",
|
||||
"elements": [
|
||||
"cities-internet-map"
|
||||
],
|
||||
|
|
@ -126,12 +127,13 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "connectivity-map",
|
||||
"stage": "production",
|
||||
"label": "Cities with Internet — connectivity map",
|
||||
"file": "connectivity-map.vue",
|
||||
"description": "Every country shaded by measured internet penetration, with its named carriers and dominant",
|
||||
"element": "cities-internet-map",
|
||||
|
|
@ -141,7 +143,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -156,7 +158,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -165,7 +167,7 @@
|
|||
"bundle": "country-posters",
|
||||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"output": "dx-maps/country-posters/country-posters.js",
|
||||
"integrity": "sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+",
|
||||
"integrity": "sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4",
|
||||
"elements": [
|
||||
"country-posters-map"
|
||||
],
|
||||
|
|
@ -187,7 +189,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -202,12 +204,13 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "country-posters-mfe",
|
||||
"stage": "experimental",
|
||||
"label": "Country Posters — Wall + Map",
|
||||
"file": "country-posters-mfe.vue",
|
||||
"description": "Country Posters as ONE two-tab element — the countries map and the printable",
|
||||
"element": "country-posters-mfe",
|
||||
|
|
@ -217,7 +220,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -226,7 +229,7 @@
|
|||
"bundle": "dashboard-plus-grid",
|
||||
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"output": "dx-maps/dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"integrity": "sha384-+CKECgEuJ5pKzR11N0RMEEAEvBKz+F1S3xbVub8k0RAF+tSEV8fW6W2CVCTdJ1lZ",
|
||||
"integrity": "sha384-KKQCv8v895tYjwayG6saIYk3ymn3wmk6X3TEwv+sQ5pU9BDkErSFF7JEuUTdsZCF",
|
||||
"elements": [
|
||||
"dashboard-plus-grid"
|
||||
],
|
||||
|
|
@ -239,6 +242,7 @@
|
|||
{
|
||||
"profile": "dashboard-plus-grid",
|
||||
"stage": "production",
|
||||
"label": "Dashboard + Grid (baked into one element, stacked to scroll)",
|
||||
"file": "dashboard-plus-grid.vue",
|
||||
"description": "Both children are IMPORTED DIRECTLY (compiled into this ONE bundle — no runtime bundle",
|
||||
"element": "dashboard-plus-grid",
|
||||
|
|
@ -248,7 +252,7 @@
|
|||
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-+CKECgEuJ5pKzR11N0RMEEAEvBKz+F1S3xbVub8k0RAF+tSEV8fW6W2CVCTdJ1lZ\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-KKQCv8v895tYjwayG6saIYk3ymn3wmk6X3TEwv+sQ5pU9BDkErSFF7JEuUTdsZCF\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -272,7 +276,7 @@
|
|||
"bundle": "demo-map",
|
||||
"scriptUrl": "./demo-map/demo-map.js",
|
||||
"output": "dx-maps/demo-map/demo-map.js",
|
||||
"integrity": "sha384-fqvqn/UaQLfib5r8Bs5plcIouQckolyhgYzV/nXeoS7ltC99oH/T5ZuFye/+ZJSt",
|
||||
"integrity": "sha384-okPjbmNdBwckUKJibLgUkoTjZ2+rwOQNGxWZO+hv8HXCPMWWOZyAawTHo6EOqBk3",
|
||||
"elements": [
|
||||
"demo-map"
|
||||
],
|
||||
|
|
@ -290,7 +294,7 @@
|
|||
"scriptUrl": "./demo-map/demo-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-fqvqn/UaQLfib5r8Bs5plcIouQckolyhgYzV/nXeoS7ltC99oH/T5ZuFye/+ZJSt\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-okPjbmNdBwckUKJibLgUkoTjZ2+rwOQNGxWZO+hv8HXCPMWWOZyAawTHo6EOqBk3\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -335,6 +339,7 @@
|
|||
{
|
||||
"profile": "doxa-maps-spa",
|
||||
"stage": "experimental",
|
||||
"label": "Research Gallery (vertical-tab app shell: the seven production maps)",
|
||||
"file": "doxa-maps-spa.vue",
|
||||
"description": "The DX-maps app itself: one element whose vertical-tab rail nests every other",
|
||||
"element": "doxa-maps-spa",
|
||||
|
|
@ -371,7 +376,7 @@
|
|||
"bundle": "doxa-research-map",
|
||||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"output": "dx-maps/doxa-research-map/doxa-research-map.js",
|
||||
"integrity": "sha384-r6XtfVHAKnNx8l2Ee4o7OfeC+E3QZIxx8nfKe7ShKPf6rlsZM3T/b1fgzvfjvjZH",
|
||||
"integrity": "sha384-B6gF69v23HjaSAYYpOT3XNCu60fKgswgggVrBhT43TB0CGJkOSzYYTTkKDq96+Ch",
|
||||
"elements": [
|
||||
"doxa-research-map"
|
||||
],
|
||||
|
|
@ -380,6 +385,7 @@
|
|||
{
|
||||
"profile": "research-map",
|
||||
"stage": "experimental",
|
||||
"label": "Research Map",
|
||||
"file": "research-map.vue",
|
||||
"description": "The researcher's workbench: every piece a missiologist, demographer or",
|
||||
"element": "doxa-research-map",
|
||||
|
|
@ -389,7 +395,7 @@
|
|||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-r6XtfVHAKnNx8l2Ee4o7OfeC+E3QZIxx8nfKe7ShKPf6rlsZM3T/b1fgzvfjvjZH\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-B6gF69v23HjaSAYYpOT3XNCu60fKgswgggVrBhT43TB0CGJkOSzYYTTkKDq96+Ch\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -415,7 +421,7 @@
|
|||
"bundle": "doxa-simple-map",
|
||||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"output": "dx-maps/doxa-simple-map/doxa-simple-map.js",
|
||||
"integrity": "sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW",
|
||||
"integrity": "sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8",
|
||||
"elements": [
|
||||
"doxa-map",
|
||||
"doxa-simple-map"
|
||||
|
|
@ -434,7 +440,7 @@
|
|||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -604,7 +610,7 @@
|
|||
"bundle": "gospel-internet",
|
||||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"output": "dx-maps/gospel-internet/gospel-internet.js",
|
||||
"integrity": "sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i",
|
||||
"integrity": "sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl",
|
||||
"elements": [
|
||||
"gospel-internet-board"
|
||||
],
|
||||
|
|
@ -613,6 +619,7 @@
|
|||
{
|
||||
"profile": "board",
|
||||
"stage": "experimental",
|
||||
"label": "Gospel x Internet — the board",
|
||||
"heavy": true,
|
||||
"file": "board.vue",
|
||||
"description": "For every remaining people group: what gospel resources exist in a language they use, and how much of their country (or Indian state) is online to receive them.",
|
||||
|
|
@ -623,7 +630,7 @@
|
|||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-internet/board/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -773,6 +780,7 @@
|
|||
{
|
||||
"profile": "gospel-dashboard",
|
||||
"stage": "production",
|
||||
"label": "Gospel Dashboard (map + tables baked into one element, stacked to scroll)",
|
||||
"file": "gospel-dashboard.vue",
|
||||
"description": "The gospel map and its tables as one scrolling element: 12,379 people-group pins with the real Scripture, film and Bible-story links for each group's own language, above every resource with its URL and the 1,613 groups where nothing was found, exportable as CSV.",
|
||||
"element": "gospel-resources-map",
|
||||
|
|
@ -803,6 +811,7 @@
|
|||
{
|
||||
"profile": "resources-map",
|
||||
"stage": "experimental",
|
||||
"label": "Gospel Resources — resources map",
|
||||
"file": "resources-map.vue",
|
||||
"description": "12,379 people-group pins over a country choropleth: tap a pin for the Scripture, audio, film, Bible-story and training links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the groups where nothing was found.",
|
||||
"element": "gospel-resources-map",
|
||||
|
|
@ -821,7 +830,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds",
|
||||
"integrity": "sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -843,7 +852,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -858,12 +867,13 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "upg-100-mfe",
|
||||
"stage": "production",
|
||||
"label": "UPG-100 — Map + Prayer Lists",
|
||||
"file": "upg-100-mfe.vue",
|
||||
"description": "The standalone, shareable and embeddable composite of the my-upg-100-list family — it nests the map",
|
||||
"element": "my-upg-100-list-map",
|
||||
|
|
@ -873,7 +883,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -891,6 +901,7 @@
|
|||
{
|
||||
"profile": "people-groups-grid",
|
||||
"stage": "experimental",
|
||||
"label": "People Groups Grid (Cat-2 prop-table: search + 4 dropdowns + faceted counts; show-search/show-filters + groups-filtered)",
|
||||
"file": "people-groups-grid.vue",
|
||||
"description": "The people-groups grid as an owned custom element: card list, search and four",
|
||||
"element": "people-groups-grid",
|
||||
|
|
@ -945,7 +956,7 @@
|
|||
"bundle": "plugin-studio",
|
||||
"scriptUrl": "./plugin-studio/plugin-studio.js",
|
||||
"output": "dx-maps/plugin-studio/plugin-studio.js",
|
||||
"integrity": "sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8",
|
||||
"integrity": "sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80",
|
||||
"elements": [
|
||||
"plugin-studio"
|
||||
],
|
||||
|
|
@ -966,6 +977,7 @@
|
|||
{
|
||||
"profile": "plugin-studio",
|
||||
"stage": "experimental",
|
||||
"label": "Plugin Studio (cap-5 developer studio: every element by capability 5 -> 1)",
|
||||
"file": "plugin-studio.vue",
|
||||
"description": "The developer's viewing surface: a sidebar that is the composability ladder",
|
||||
"element": "plugin-studio",
|
||||
|
|
@ -975,7 +987,7 @@
|
|||
"scriptUrl": "./plugin-studio/plugin-studio.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8\" crossorigin=\"anonymous\"></script>\n<plugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></plugin-studio>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80\" crossorigin=\"anonymous\"></script>\n<plugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></plugin-studio>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -1002,7 +1014,7 @@
|
|||
"bundle": "pplr-data-maps",
|
||||
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
|
||||
"output": "dx-maps/pplr-data-maps/pplr-data-maps.js",
|
||||
"integrity": "sha384-p3Skl/DEIsDt/B6QNbW2E5UiI0HCVORMx8ZT5meVLl15FZ97/ZqZeWQETj4dch3+",
|
||||
"integrity": "sha384-rubpRmSBkm6v202d1whkPHrDHqpD+3+OKsqAYaaYcFHxjH4McsdsZUypXrcHgUVz",
|
||||
"elements": [
|
||||
"pplr-data-maps"
|
||||
],
|
||||
|
|
@ -1011,6 +1023,7 @@
|
|||
{
|
||||
"profile": "pplr-data-maps",
|
||||
"stage": "experimental",
|
||||
"label": "PPLR Data Maps",
|
||||
"file": "pplr-data-maps.vue",
|
||||
"description": "Ten views that let a researcher check the PPLR people-group data by eye",
|
||||
"element": "pplr-data-maps",
|
||||
|
|
@ -1020,7 +1033,7 @@
|
|||
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./pplr-data-maps/pplr-data-maps/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-p3Skl/DEIsDt/B6QNbW2E5UiI0HCVORMx8ZT5meVLl15FZ97/ZqZeWQETj4dch3+\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-rubpRmSBkm6v202d1whkPHrDHqpD+3+OKsqAYaaYcFHxjH4McsdsZUypXrcHgUVz\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
|
||||
},
|
||||
"bundle": "pplr-data-maps"
|
||||
}
|
||||
|
|
@ -1030,7 +1043,7 @@
|
|||
"bundle": "prayer-walk-planner",
|
||||
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
|
||||
"output": "dx-maps/prayer-walk-planner/prayer-walk-planner.js",
|
||||
"integrity": "sha384-UCDvNpaBu3n0rFRVD9qVKT+s+x4unDc+UO8ggE2MqAop2SwrrSD+4KKv+FcM2Nfs",
|
||||
"integrity": "sha384-T/NWde52/TY+ljyOu26UBMz9HPVwDymkMlBInRm3XFg8liVBWWfeul1vAPNUUq6K",
|
||||
"elements": [
|
||||
"prayer-walk-planner"
|
||||
],
|
||||
|
|
@ -1048,7 +1061,7 @@
|
|||
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./prayer-walk-planner/prayer-walk-planner/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-UCDvNpaBu3n0rFRVD9qVKT+s+x4unDc+UO8ggE2MqAop2SwrrSD+4KKv+FcM2Nfs\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-T/NWde52/TY+ljyOu26UBMz9HPVwDymkMlBInRm3XFg8liVBWWfeul1vAPNUUq6K\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -1057,7 +1070,7 @@
|
|||
"bundle": "regions-dashboard",
|
||||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
|
||||
"integrity": "sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0",
|
||||
"integrity": "sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy",
|
||||
"elements": [
|
||||
"regions-dashboard"
|
||||
],
|
||||
|
|
@ -1070,6 +1083,7 @@
|
|||
{
|
||||
"profile": "region-dashboards",
|
||||
"stage": "experimental",
|
||||
"label": "Regions — region + country dashboard",
|
||||
"file": "region-dashboards.vue",
|
||||
"description": "The dashboard half of the 2-tab Regions element: given a region (or a",
|
||||
"element": "regions-dashboard",
|
||||
|
|
@ -1079,12 +1093,13 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "regions-list",
|
||||
"stage": "experimental",
|
||||
"label": "Regions — the list page",
|
||||
"file": "regions-list.vue",
|
||||
"description": "A refactor of DX-life's /regions index page (app/pages/regions/index.vue) into",
|
||||
"element": "regions-dashboard",
|
||||
|
|
@ -1094,12 +1109,13 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "regions-mfe",
|
||||
"stage": "production",
|
||||
"label": "Regions — List + Dashboards",
|
||||
"file": "regions-mfe.vue",
|
||||
"description": "The composite: ONE element carrying the SELECT VIEW switcher",
|
||||
"element": "regions-dashboard",
|
||||
|
|
@ -1109,7 +1125,7 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -1118,7 +1134,7 @@
|
|||
"bundle": "research-dashboard",
|
||||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"output": "dx-maps/research-dashboard/research-dashboard.js",
|
||||
"integrity": "sha384-lCPbIXqgOa+ild8uqL5d03PLoYBDtZca5QLvSlSzeJT4TTonWf2U0dev7N53kvwY",
|
||||
"integrity": "sha384-KDXJbKFaAbMwrZNlONidwpxb4AXWHVIHKN+ASJpHjgDTH5Uhfzv5EOXhxVBAzTi0",
|
||||
"elements": [
|
||||
"research-dashboard-map"
|
||||
],
|
||||
|
|
@ -1127,6 +1143,7 @@
|
|||
{
|
||||
"profile": "research-dashboard",
|
||||
"stage": "experimental",
|
||||
"label": "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",
|
||||
|
|
@ -1136,7 +1153,7 @@
|
|||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-lCPbIXqgOa+ild8uqL5d03PLoYBDtZca5QLvSlSzeJT4TTonWf2U0dev7N53kvwY\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-KDXJbKFaAbMwrZNlONidwpxb4AXWHVIHKN+ASJpHjgDTH5Uhfzv5EOXhxVBAzTi0\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
|
||||
},
|
||||
"bundle": "research-dashboard"
|
||||
}
|
||||
|
|
@ -1159,6 +1176,7 @@
|
|||
{
|
||||
"profile": "research-map-plus-grid",
|
||||
"stage": "production",
|
||||
"label": "Research Map + Grid (mobile composite, stacked to scroll)",
|
||||
"file": "research-map-plus-grid.vue",
|
||||
"description": "The monolithic 7-tab research map (cap-3) on top, the People Groups grid beneath,",
|
||||
"element": "research-map-plus-grid",
|
||||
|
|
@ -1201,6 +1219,7 @@
|
|||
{
|
||||
"profile": "rudder-voice",
|
||||
"stage": "experimental",
|
||||
"label": "Rudder — voice to text (desktop)",
|
||||
"widget": {
|
||||
"corner": "bottom-right"
|
||||
},
|
||||
|
|
@ -1235,6 +1254,7 @@
|
|||
{
|
||||
"profile": "stack-demo",
|
||||
"stage": "experimental",
|
||||
"label": "Stack Demo (two elements stacked to scroll — StackLayout)",
|
||||
"file": "stack-demo.vue",
|
||||
"description": "Groups TWO independent elements TOP-TO-BOTTOM so you can embed the pair on a page and",
|
||||
"element": "stack-demo",
|
||||
|
|
@ -1268,7 +1288,7 @@
|
|||
"bundle": "upg-neighbor",
|
||||
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
|
||||
"output": "dx-maps/upg-neighbor/upg-neighbor.js",
|
||||
"integrity": "sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc",
|
||||
"integrity": "sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC",
|
||||
"elements": [
|
||||
"upg-neighbor"
|
||||
],
|
||||
|
|
@ -1277,6 +1297,7 @@
|
|||
{
|
||||
"profile": "upg-neighbor",
|
||||
"stage": "experimental",
|
||||
"label": "My UPG Neighbors",
|
||||
"file": "upg-neighbor.vue",
|
||||
"description": "Near-neighbor mobilization on Winter's E-scale: who to mobilize, in what language, where",
|
||||
"element": "upg-neighbor",
|
||||
|
|
@ -1286,7 +1307,7 @@
|
|||
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -1377,6 +1398,7 @@
|
|||
{
|
||||
"profile": "wall-of-people-groups",
|
||||
"stage": "experimental",
|
||||
"label": "Wall of People Groups",
|
||||
"file": "wall-of-people-groups.vue",
|
||||
"description": "Every Doxa people group as a card on one zoomable prayer wall",
|
||||
"element": "wall-of-people-groups",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,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" integrity="sha384-r6XtfVHAKnNx8l2Ee4o7OfeC+E3QZIxx8nfKe7ShKPf6rlsZM3T/b1fgzvfjvjZH" crossorigin="anonymous"></script>
|
||||
<script src="../doxa-research-map.js" integrity="sha384-B6gF69v23HjaSAYYpOT3XNCu60fKgswgggVrBhT43TB0CGJkOSzYYTTkKDq96+Ch" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -33,7 +33,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" integrity="sha384-r6XtfVHAKnNx8l2Ee4o7OfeC+E3QZIxx8nfKe7ShKPf6rlsZM3T/b1fgzvfjvjZH" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-research-map.js" integrity="sha384-B6gF69v23HjaSAYYpOT3XNCu60fKgswgggVrBhT43TB0CGJkOSzYYTTkKDq96+Ch" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,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" integrity="sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../doxa-simple-map.js" integrity="sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW" crossorigin="anonymous"></script>
|
||||
<script src="../doxa-simple-map.js" integrity="sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <doxa-map> custom element. -->
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW" crossorigin="anonymous"></script>
|
||||
<script src="../../doxa-simple-map.js" integrity="sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-internet-board> custom element. -->
|
||||
<script src="../../gospel-internet.js" integrity="sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i" crossorigin="anonymous"></script>
|
||||
<script src="../../gospel-internet.js" integrity="sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -19,6 +19,6 @@
|
|||
</head>
|
||||
<body>
|
||||
<plugin-studio tree-base="."></plugin-studio>
|
||||
<script src="./plugin-studio/plugin-studio.js" integrity="sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8" crossorigin="anonymous"></script>
|
||||
<script src="./plugin-studio/plugin-studio.js" integrity="sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"bundle": "all-people-groups",
|
||||
"scriptUrl": "./all-people-groups/all-people-groups.js",
|
||||
"output": "dx-maps/all-people-groups/all-people-groups.js",
|
||||
"integrity": "sha384-rulN2I2Zknh0wX7BSlbKVtEb7+7FeIkGQEBdODV+xJROYJhMShYMQFt2q4CSdKe0",
|
||||
"integrity": "sha384-Hyu82pGG4OWWb5qm5gfp3dDF4vqvXnlZQ8/d86okNGi0nV5GNhyIApwby/FrkZ1g",
|
||||
"elements": [
|
||||
"all-people-groups"
|
||||
],
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
"scriptUrl": "./all-people-groups/all-people-groups.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./all-people-groups/all-people-groups/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-rulN2I2Zknh0wX7BSlbKVtEb7+7FeIkGQEBdODV+xJROYJhMShYMQFt2q4CSdKe0\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./all-people-groups/all-people-groups.js\" integrity=\"sha384-Hyu82pGG4OWWb5qm5gfp3dDF4vqvXnlZQ8/d86okNGi0nV5GNhyIApwby/FrkZ1g\" crossorigin=\"anonymous\"></script>\n<all-people-groups profile-config='{\"profile\":\"all-people-groups\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></all-people-groups>"
|
||||
},
|
||||
"bundle": "all-people-groups"
|
||||
}
|
||||
|
|
@ -55,6 +55,7 @@
|
|||
{
|
||||
"profile": "big-picture",
|
||||
"stage": "experimental",
|
||||
"label": "Big Picture (research header ↔ real people-groups grid via props/events)",
|
||||
"file": "big-picture.vue",
|
||||
"description": "The Cat-4 composite that PAIRS the two real capability elements of the",
|
||||
"element": "bp-big-picture",
|
||||
|
|
@ -108,7 +109,7 @@
|
|||
"bundle": "cities-internet",
|
||||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"output": "dx-maps/cities-internet/cities-internet.js",
|
||||
"integrity": "sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9",
|
||||
"integrity": "sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv",
|
||||
"elements": [
|
||||
"cities-internet-map"
|
||||
],
|
||||
|
|
@ -126,12 +127,13 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "connectivity-map",
|
||||
"stage": "production",
|
||||
"label": "Cities with Internet — connectivity map",
|
||||
"file": "connectivity-map.vue",
|
||||
"description": "Every country shaded by measured internet penetration, with its named carriers and dominant",
|
||||
"element": "cities-internet-map",
|
||||
|
|
@ -141,7 +143,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/connectivity-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"connectivity-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -156,7 +158,7 @@
|
|||
"scriptUrl": "./cities-internet/cities-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./cities-internet/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-V4AZaATfvzuYWDXNEriVaHwZrAb7tV8MLFaLTwi+u+mgFvU0/ET5UW+yZLov3bD9\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./cities-internet/cities-internet.js\" integrity=\"sha384-xF3apO1XPKnZJfNBNxWRVjaJOG5uhEqm5SqMXid8fF8/481LpPDs+gUjrMwgWAwv\" crossorigin=\"anonymous\"></script>\n<cities-internet-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></cities-internet-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -165,7 +167,7 @@
|
|||
"bundle": "country-posters",
|
||||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"output": "dx-maps/country-posters/country-posters.js",
|
||||
"integrity": "sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+",
|
||||
"integrity": "sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4",
|
||||
"elements": [
|
||||
"country-posters-map"
|
||||
],
|
||||
|
|
@ -187,7 +189,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/countries-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"countries-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -202,12 +204,13 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "country-posters-mfe",
|
||||
"stage": "experimental",
|
||||
"label": "Country Posters — Wall + Map",
|
||||
"file": "country-posters-mfe.vue",
|
||||
"description": "Country Posters as ONE two-tab element — the countries map and the printable",
|
||||
"element": "country-posters-mfe",
|
||||
|
|
@ -217,7 +220,7 @@
|
|||
"scriptUrl": "./country-posters/country-posters.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./country-posters/country-posters-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-JfaqlOly5w+73pYBc42u+ney1XZzNm+McZoabWsSzJtrP0mJRINP9Cx0YS6F7qM+\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./country-posters/country-posters.js\" integrity=\"sha384-rEKY48xZ75Hf09EduTtEELEIdpGoEFDujcRk3Lwx9/E3P2W/f0iZDRY0JHg2xSM4\" crossorigin=\"anonymous\"></script>\n<country-posters-map profile-config='{\"profile\":\"country-posters-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></country-posters-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -226,7 +229,7 @@
|
|||
"bundle": "dashboard-plus-grid",
|
||||
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"output": "dx-maps/dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"integrity": "sha384-+CKECgEuJ5pKzR11N0RMEEAEvBKz+F1S3xbVub8k0RAF+tSEV8fW6W2CVCTdJ1lZ",
|
||||
"integrity": "sha384-KKQCv8v895tYjwayG6saIYk3ymn3wmk6X3TEwv+sQ5pU9BDkErSFF7JEuUTdsZCF",
|
||||
"elements": [
|
||||
"dashboard-plus-grid"
|
||||
],
|
||||
|
|
@ -239,6 +242,7 @@
|
|||
{
|
||||
"profile": "dashboard-plus-grid",
|
||||
"stage": "production",
|
||||
"label": "Dashboard + Grid (baked into one element, stacked to scroll)",
|
||||
"file": "dashboard-plus-grid.vue",
|
||||
"description": "Both children are IMPORTED DIRECTLY (compiled into this ONE bundle — no runtime bundle",
|
||||
"element": "dashboard-plus-grid",
|
||||
|
|
@ -248,7 +252,7 @@
|
|||
"scriptUrl": "./dashboard-plus-grid/dashboard-plus-grid.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./dashboard-plus-grid/dashboard-plus-grid/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-+CKECgEuJ5pKzR11N0RMEEAEvBKz+F1S3xbVub8k0RAF+tSEV8fW6W2CVCTdJ1lZ\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./dashboard-plus-grid/dashboard-plus-grid.js\" integrity=\"sha384-KKQCv8v895tYjwayG6saIYk3ymn3wmk6X3TEwv+sQ5pU9BDkErSFF7JEuUTdsZCF\" crossorigin=\"anonymous\"></script>\n<dashboard-plus-grid profile-config='{\"profile\":\"dashboard-plus-grid\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></dashboard-plus-grid>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -272,7 +276,7 @@
|
|||
"bundle": "demo-map",
|
||||
"scriptUrl": "./demo-map/demo-map.js",
|
||||
"output": "dx-maps/demo-map/demo-map.js",
|
||||
"integrity": "sha384-fqvqn/UaQLfib5r8Bs5plcIouQckolyhgYzV/nXeoS7ltC99oH/T5ZuFye/+ZJSt",
|
||||
"integrity": "sha384-okPjbmNdBwckUKJibLgUkoTjZ2+rwOQNGxWZO+hv8HXCPMWWOZyAawTHo6EOqBk3",
|
||||
"elements": [
|
||||
"demo-map"
|
||||
],
|
||||
|
|
@ -290,7 +294,7 @@
|
|||
"scriptUrl": "./demo-map/demo-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./demo-map/demo-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-fqvqn/UaQLfib5r8Bs5plcIouQckolyhgYzV/nXeoS7ltC99oH/T5ZuFye/+ZJSt\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./demo-map/demo-map.js\" integrity=\"sha384-okPjbmNdBwckUKJibLgUkoTjZ2+rwOQNGxWZO+hv8HXCPMWWOZyAawTHo6EOqBk3\" crossorigin=\"anonymous\"></script>\n<demo-map profile-config='{\"profile\":\"demo-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></demo-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -335,6 +339,7 @@
|
|||
{
|
||||
"profile": "doxa-maps-spa",
|
||||
"stage": "experimental",
|
||||
"label": "Research Gallery (vertical-tab app shell: the seven production maps)",
|
||||
"file": "doxa-maps-spa.vue",
|
||||
"description": "The DX-maps app itself: one element whose vertical-tab rail nests every other",
|
||||
"element": "doxa-maps-spa",
|
||||
|
|
@ -371,7 +376,7 @@
|
|||
"bundle": "doxa-research-map",
|
||||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"output": "dx-maps/doxa-research-map/doxa-research-map.js",
|
||||
"integrity": "sha384-r6XtfVHAKnNx8l2Ee4o7OfeC+E3QZIxx8nfKe7ShKPf6rlsZM3T/b1fgzvfjvjZH",
|
||||
"integrity": "sha384-B6gF69v23HjaSAYYpOT3XNCu60fKgswgggVrBhT43TB0CGJkOSzYYTTkKDq96+Ch",
|
||||
"elements": [
|
||||
"doxa-research-map"
|
||||
],
|
||||
|
|
@ -380,6 +385,7 @@
|
|||
{
|
||||
"profile": "research-map",
|
||||
"stage": "experimental",
|
||||
"label": "Research Map",
|
||||
"file": "research-map.vue",
|
||||
"description": "The researcher's workbench: every piece a missiologist, demographer or",
|
||||
"element": "doxa-research-map",
|
||||
|
|
@ -389,7 +395,7 @@
|
|||
"scriptUrl": "./doxa-research-map/doxa-research-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-research-map/research-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-r6XtfVHAKnNx8l2Ee4o7OfeC+E3QZIxx8nfKe7ShKPf6rlsZM3T/b1fgzvfjvjZH\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-research-map/doxa-research-map.js\" integrity=\"sha384-B6gF69v23HjaSAYYpOT3XNCu60fKgswgggVrBhT43TB0CGJkOSzYYTTkKDq96+Ch\" crossorigin=\"anonymous\"></script>\n<doxa-research-map profile-config='{\"profile\":\"research-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-research-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -415,7 +421,7 @@
|
|||
"bundle": "doxa-simple-map",
|
||||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"output": "dx-maps/doxa-simple-map/doxa-simple-map.js",
|
||||
"integrity": "sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW",
|
||||
"integrity": "sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8",
|
||||
"elements": [
|
||||
"doxa-map",
|
||||
"doxa-simple-map"
|
||||
|
|
@ -434,7 +440,7 @@
|
|||
"scriptUrl": "./doxa-simple-map/doxa-simple-map.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./doxa-simple-map/doxa-simple-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-d7XChL9kU5af4g0Wc/t4wlgwhLGXrcAq1JGPWznSALICvY2Bdv8r2gekxkDK1XRW\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./doxa-simple-map/doxa-simple-map.js\" integrity=\"sha384-CkbrFX71L8DOqo4LtACDbHX9vw7e/ZSR+TczWh0BTqm8Nm60QzR1O7Zr87tkxcG8\" crossorigin=\"anonymous\"></script>\n<doxa-map profile-config='{\"profile\":\"doxa-simple-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></doxa-map>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -604,7 +610,7 @@
|
|||
"bundle": "gospel-internet",
|
||||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"output": "dx-maps/gospel-internet/gospel-internet.js",
|
||||
"integrity": "sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i",
|
||||
"integrity": "sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl",
|
||||
"elements": [
|
||||
"gospel-internet-board"
|
||||
],
|
||||
|
|
@ -613,6 +619,7 @@
|
|||
{
|
||||
"profile": "board",
|
||||
"stage": "experimental",
|
||||
"label": "Gospel x Internet — the board",
|
||||
"heavy": true,
|
||||
"file": "board.vue",
|
||||
"description": "For every remaining people group: what gospel resources exist in a language they use, and how much of their country (or Indian state) is online to receive them.",
|
||||
|
|
@ -623,7 +630,7 @@
|
|||
"scriptUrl": "./gospel-internet/gospel-internet.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-internet/board/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-oGueXgVn05BKMDaSbY61Gdl/coGTTPu/uMM/BWcYMWCi5Vyr+6N3dk59AKpuDw7i\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-internet/gospel-internet.js\" integrity=\"sha384-r2/iEI33cY/Yx5AxDqaNaXmiqubSasJOXAf6UsW8gS4tD7zmuVLcrcS3522hichl\" crossorigin=\"anonymous\"></script>\n<gospel-internet-board profile-config='{\"profile\":\"board\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-internet-board>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -773,6 +780,7 @@
|
|||
{
|
||||
"profile": "gospel-dashboard",
|
||||
"stage": "production",
|
||||
"label": "Gospel Dashboard (map + tables baked into one element, stacked to scroll)",
|
||||
"file": "gospel-dashboard.vue",
|
||||
"description": "The gospel map and its tables as one scrolling element: 12,379 people-group pins with the real Scripture, film and Bible-story links for each group's own language, above every resource with its URL and the 1,613 groups where nothing was found, exportable as CSV.",
|
||||
"element": "gospel-resources-map",
|
||||
|
|
@ -803,6 +811,7 @@
|
|||
{
|
||||
"profile": "resources-map",
|
||||
"stage": "experimental",
|
||||
"label": "Gospel Resources — resources map",
|
||||
"file": "resources-map.vue",
|
||||
"description": "12,379 people-group pins over a country choropleth: tap a pin for the Scripture, audio, film, Bible-story and training links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the groups where nothing was found.",
|
||||
"element": "gospel-resources-map",
|
||||
|
|
@ -821,7 +830,7 @@
|
|||
"bundle": "my-upg-100-list",
|
||||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"output": "dx-maps/my-upg-100-list/my-upg-100-list.js",
|
||||
"integrity": "sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds",
|
||||
"integrity": "sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4",
|
||||
"elements": [
|
||||
"my-upg-100-list-map"
|
||||
],
|
||||
|
|
@ -843,7 +852,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/poster-wall/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"poster-wall\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -858,12 +867,13 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "upg-100-mfe",
|
||||
"stage": "production",
|
||||
"label": "UPG-100 — Map + Prayer Lists",
|
||||
"file": "upg-100-mfe.vue",
|
||||
"description": "The standalone, shareable and embeddable composite of the my-upg-100-list family — it nests the map",
|
||||
"element": "my-upg-100-list-map",
|
||||
|
|
@ -873,7 +883,7 @@
|
|||
"scriptUrl": "./my-upg-100-list/my-upg-100-list.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./my-upg-100-list/upg-100-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./my-upg-100-list/my-upg-100-list.js\" integrity=\"sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4\" crossorigin=\"anonymous\"></script>\n<my-upg-100-list-map profile-config='{\"profile\":\"upg-100-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></my-upg-100-list-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -891,6 +901,7 @@
|
|||
{
|
||||
"profile": "people-groups-grid",
|
||||
"stage": "experimental",
|
||||
"label": "People Groups Grid (Cat-2 prop-table: search + 4 dropdowns + faceted counts; show-search/show-filters + groups-filtered)",
|
||||
"file": "people-groups-grid.vue",
|
||||
"description": "The people-groups grid as an owned custom element: card list, search and four",
|
||||
"element": "people-groups-grid",
|
||||
|
|
@ -945,7 +956,7 @@
|
|||
"bundle": "plugin-studio",
|
||||
"scriptUrl": "./plugin-studio/plugin-studio.js",
|
||||
"output": "dx-maps/plugin-studio/plugin-studio.js",
|
||||
"integrity": "sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8",
|
||||
"integrity": "sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80",
|
||||
"elements": [
|
||||
"plugin-studio"
|
||||
],
|
||||
|
|
@ -966,6 +977,7 @@
|
|||
{
|
||||
"profile": "plugin-studio",
|
||||
"stage": "experimental",
|
||||
"label": "Plugin Studio (cap-5 developer studio: every element by capability 5 -> 1)",
|
||||
"file": "plugin-studio.vue",
|
||||
"description": "The developer's viewing surface: a sidebar that is the composability ladder",
|
||||
"element": "plugin-studio",
|
||||
|
|
@ -975,7 +987,7 @@
|
|||
"scriptUrl": "./plugin-studio/plugin-studio.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8\" crossorigin=\"anonymous\"></script>\n<plugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></plugin-studio>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80\" crossorigin=\"anonymous\"></script>\n<plugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></plugin-studio>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -1002,7 +1014,7 @@
|
|||
"bundle": "pplr-data-maps",
|
||||
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
|
||||
"output": "dx-maps/pplr-data-maps/pplr-data-maps.js",
|
||||
"integrity": "sha384-p3Skl/DEIsDt/B6QNbW2E5UiI0HCVORMx8ZT5meVLl15FZ97/ZqZeWQETj4dch3+",
|
||||
"integrity": "sha384-rubpRmSBkm6v202d1whkPHrDHqpD+3+OKsqAYaaYcFHxjH4McsdsZUypXrcHgUVz",
|
||||
"elements": [
|
||||
"pplr-data-maps"
|
||||
],
|
||||
|
|
@ -1011,6 +1023,7 @@
|
|||
{
|
||||
"profile": "pplr-data-maps",
|
||||
"stage": "experimental",
|
||||
"label": "PPLR Data Maps",
|
||||
"file": "pplr-data-maps.vue",
|
||||
"description": "Ten views that let a researcher check the PPLR people-group data by eye",
|
||||
"element": "pplr-data-maps",
|
||||
|
|
@ -1020,7 +1033,7 @@
|
|||
"scriptUrl": "./pplr-data-maps/pplr-data-maps.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./pplr-data-maps/pplr-data-maps/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-p3Skl/DEIsDt/B6QNbW2E5UiI0HCVORMx8ZT5meVLl15FZ97/ZqZeWQETj4dch3+\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./pplr-data-maps/pplr-data-maps.js\" integrity=\"sha384-rubpRmSBkm6v202d1whkPHrDHqpD+3+OKsqAYaaYcFHxjH4McsdsZUypXrcHgUVz\" crossorigin=\"anonymous\"></script>\n<pplr-data-maps profile-config='{\"profile\":\"pplr-data-maps\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></pplr-data-maps>"
|
||||
},
|
||||
"bundle": "pplr-data-maps"
|
||||
}
|
||||
|
|
@ -1030,7 +1043,7 @@
|
|||
"bundle": "prayer-walk-planner",
|
||||
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
|
||||
"output": "dx-maps/prayer-walk-planner/prayer-walk-planner.js",
|
||||
"integrity": "sha384-UCDvNpaBu3n0rFRVD9qVKT+s+x4unDc+UO8ggE2MqAop2SwrrSD+4KKv+FcM2Nfs",
|
||||
"integrity": "sha384-T/NWde52/TY+ljyOu26UBMz9HPVwDymkMlBInRm3XFg8liVBWWfeul1vAPNUUq6K",
|
||||
"elements": [
|
||||
"prayer-walk-planner"
|
||||
],
|
||||
|
|
@ -1048,7 +1061,7 @@
|
|||
"scriptUrl": "./prayer-walk-planner/prayer-walk-planner.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./prayer-walk-planner/prayer-walk-planner/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-UCDvNpaBu3n0rFRVD9qVKT+s+x4unDc+UO8ggE2MqAop2SwrrSD+4KKv+FcM2Nfs\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./prayer-walk-planner/prayer-walk-planner.js\" integrity=\"sha384-T/NWde52/TY+ljyOu26UBMz9HPVwDymkMlBInRm3XFg8liVBWWfeul1vAPNUUq6K\" crossorigin=\"anonymous\"></script>\n<prayer-walk-planner profile-config='{\"profile\":\"prayer-walk-planner\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></prayer-walk-planner>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -1057,7 +1070,7 @@
|
|||
"bundle": "regions-dashboard",
|
||||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"output": "dx-maps/regions-dashboard/regions-dashboard.js",
|
||||
"integrity": "sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0",
|
||||
"integrity": "sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy",
|
||||
"elements": [
|
||||
"regions-dashboard"
|
||||
],
|
||||
|
|
@ -1070,6 +1083,7 @@
|
|||
{
|
||||
"profile": "region-dashboards",
|
||||
"stage": "experimental",
|
||||
"label": "Regions — region + country dashboard",
|
||||
"file": "region-dashboards.vue",
|
||||
"description": "The dashboard half of the 2-tab Regions element: given a region (or a",
|
||||
"element": "regions-dashboard",
|
||||
|
|
@ -1079,12 +1093,13 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/region-dashboards/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"region-dashboards\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "regions-list",
|
||||
"stage": "experimental",
|
||||
"label": "Regions — the list page",
|
||||
"file": "regions-list.vue",
|
||||
"description": "A refactor of DX-life's /regions index page (app/pages/regions/index.vue) into",
|
||||
"element": "regions-dashboard",
|
||||
|
|
@ -1094,12 +1109,13 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/regions-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "regions-mfe",
|
||||
"stage": "production",
|
||||
"label": "Regions — List + Dashboards",
|
||||
"file": "regions-mfe.vue",
|
||||
"description": "The composite: ONE element carrying the SELECT VIEW switcher",
|
||||
"element": "regions-dashboard",
|
||||
|
|
@ -1109,7 +1125,7 @@
|
|||
"scriptUrl": "./regions-dashboard/regions-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./regions-dashboard/regions-mfe/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./regions-dashboard/regions-dashboard.js\" integrity=\"sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy\" crossorigin=\"anonymous\"></script>\n<regions-dashboard profile-config='{\"profile\":\"regions-mfe\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></regions-dashboard>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -1118,7 +1134,7 @@
|
|||
"bundle": "research-dashboard",
|
||||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"output": "dx-maps/research-dashboard/research-dashboard.js",
|
||||
"integrity": "sha384-lCPbIXqgOa+ild8uqL5d03PLoYBDtZca5QLvSlSzeJT4TTonWf2U0dev7N53kvwY",
|
||||
"integrity": "sha384-KDXJbKFaAbMwrZNlONidwpxb4AXWHVIHKN+ASJpHjgDTH5Uhfzv5EOXhxVBAzTi0",
|
||||
"elements": [
|
||||
"research-dashboard-map"
|
||||
],
|
||||
|
|
@ -1127,6 +1143,7 @@
|
|||
{
|
||||
"profile": "research-dashboard",
|
||||
"stage": "experimental",
|
||||
"label": "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",
|
||||
|
|
@ -1136,7 +1153,7 @@
|
|||
"scriptUrl": "./research-dashboard/research-dashboard.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./research-dashboard/research-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-lCPbIXqgOa+ild8uqL5d03PLoYBDtZca5QLvSlSzeJT4TTonWf2U0dev7N53kvwY\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./research-dashboard/research-dashboard.js\" integrity=\"sha384-KDXJbKFaAbMwrZNlONidwpxb4AXWHVIHKN+ASJpHjgDTH5Uhfzv5EOXhxVBAzTi0\" crossorigin=\"anonymous\"></script>\n<research-dashboard-map profile-config='{\"profile\":\"research-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></research-dashboard-map>"
|
||||
},
|
||||
"bundle": "research-dashboard"
|
||||
}
|
||||
|
|
@ -1159,6 +1176,7 @@
|
|||
{
|
||||
"profile": "research-map-plus-grid",
|
||||
"stage": "production",
|
||||
"label": "Research Map + Grid (mobile composite, stacked to scroll)",
|
||||
"file": "research-map-plus-grid.vue",
|
||||
"description": "The monolithic 7-tab research map (cap-3) on top, the People Groups grid beneath,",
|
||||
"element": "research-map-plus-grid",
|
||||
|
|
@ -1201,6 +1219,7 @@
|
|||
{
|
||||
"profile": "rudder-voice",
|
||||
"stage": "experimental",
|
||||
"label": "Rudder — voice to text (desktop)",
|
||||
"widget": {
|
||||
"corner": "bottom-right"
|
||||
},
|
||||
|
|
@ -1235,6 +1254,7 @@
|
|||
{
|
||||
"profile": "stack-demo",
|
||||
"stage": "experimental",
|
||||
"label": "Stack Demo (two elements stacked to scroll — StackLayout)",
|
||||
"file": "stack-demo.vue",
|
||||
"description": "Groups TWO independent elements TOP-TO-BOTTOM so you can embed the pair on a page and",
|
||||
"element": "stack-demo",
|
||||
|
|
@ -1268,7 +1288,7 @@
|
|||
"bundle": "upg-neighbor",
|
||||
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
|
||||
"output": "dx-maps/upg-neighbor/upg-neighbor.js",
|
||||
"integrity": "sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc",
|
||||
"integrity": "sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC",
|
||||
"elements": [
|
||||
"upg-neighbor"
|
||||
],
|
||||
|
|
@ -1277,6 +1297,7 @@
|
|||
{
|
||||
"profile": "upg-neighbor",
|
||||
"stage": "experimental",
|
||||
"label": "My UPG Neighbors",
|
||||
"file": "upg-neighbor.vue",
|
||||
"description": "Near-neighbor mobilization on Winter's E-scale: who to mobilize, in what language, where",
|
||||
"element": "upg-neighbor",
|
||||
|
|
@ -1286,7 +1307,7 @@
|
|||
"scriptUrl": "./upg-neighbor/upg-neighbor.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./upg-neighbor/upg-neighbor/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./upg-neighbor/upg-neighbor.js\" integrity=\"sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC\" crossorigin=\"anonymous\"></script>\n<upg-neighbor profile-config='{\"profile\":\"upg-neighbor\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></upg-neighbor>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
@ -1377,6 +1398,7 @@
|
|||
{
|
||||
"profile": "wall-of-people-groups",
|
||||
"stage": "experimental",
|
||||
"label": "Wall of People Groups",
|
||||
"file": "wall-of-people-groups.vue",
|
||||
"description": "Every Doxa people group as a card on one zoomable prayer wall",
|
||||
"element": "wall-of-people-groups",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <my-upg-100-list-map> custom element. -->
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-ED6e1MyEoG/x/3yQYi7Rbf7hNW9weyv7Hv8CJ0vwZ60lAMfsfEIlo8TRgoshmQds" crossorigin="anonymous"></script>
|
||||
<script src="../my-upg-100-list.js" integrity="sha384-C0U354itQsRbzjkVCXMyE8Me4wKbmPqauyckaB+auXRdll+L1HMxbSJ8B9SRY/O4" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <plugin-studio> custom element. -->
|
||||
<script src="../plugin-studio.js" integrity="sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8" crossorigin="anonymous"></script>
|
||||
<script src="../plugin-studio.js" integrity="sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <plugin-studio> custom element. -->
|
||||
<script src="../../plugin-studio.js" integrity="sha384-1KspSeIUO3xQaKKd+sTg2ezt/+gB/ua2U1g8flIGH+C64uOnzXw2yFLoqLXy8vl8" crossorigin="anonymous"></script>
|
||||
<script src="../../plugin-studio.js" integrity="sha384-dVe39HIJ0Dw20gfFjUlrOgtMMyN4J99FMOdxnyfoJtdxK3rCy8tjr+RxY5ruTs80" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <pplr-data-maps> custom element. -->
|
||||
<script src="../pplr-data-maps.js" integrity="sha384-p3Skl/DEIsDt/B6QNbW2E5UiI0HCVORMx8ZT5meVLl15FZ97/ZqZeWQETj4dch3+" crossorigin="anonymous"></script>
|
||||
<script src="../pplr-data-maps.js" integrity="sha384-rubpRmSBkm6v202d1whkPHrDHqpD+3+OKsqAYaaYcFHxjH4McsdsZUypXrcHgUVz" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <prayer-walk-planner> custom element. -->
|
||||
<script src="../prayer-walk-planner.js" integrity="sha384-UCDvNpaBu3n0rFRVD9qVKT+s+x4unDc+UO8ggE2MqAop2SwrrSD+4KKv+FcM2Nfs" crossorigin="anonymous"></script>
|
||||
<script src="../prayer-walk-planner.js" integrity="sha384-T/NWde52/TY+ljyOu26UBMz9HPVwDymkMlBInRm3XFg8liVBWWfeul1vAPNUUq6K" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <regions-dashboard> custom element. -->
|
||||
<script src="../regions-dashboard.js" integrity="sha384-RzaQXGS9scN0JgUpCh0F/qmYqkpgDJeKsJNIzokXb4AZmecuJvBUC2wYDa5D9Eg0" crossorigin="anonymous"></script>
|
||||
<script src="../regions-dashboard.js" integrity="sha384-C8sYbeAQnDL/S+hHhGHXNtzSjOZXjx9S6usln36EJJ0S9i9kGWS1M+0EDLyRzTcy" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,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" integrity="sha384-lCPbIXqgOa+ild8uqL5d03PLoYBDtZca5QLvSlSzeJT4TTonWf2U0dev7N53kvwY" crossorigin="anonymous"></script>
|
||||
<script src="../research-dashboard.js" integrity="sha384-KDXJbKFaAbMwrZNlONidwpxb4AXWHVIHKN+ASJpHjgDTH5Uhfzv5EOXhxVBAzTi0" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc" crossorigin="anonymous"></script>
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc" crossorigin="anonymous"></script>
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
|
||||
<script src="../upg-neighbor.js" integrity="sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc" crossorigin="anonymous"></script>
|
||||
<script src="../upg-neighbor.js" integrity="sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc" crossorigin="anonymous"></script>
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc" crossorigin="anonymous"></script>
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <upg-neighbor> custom element. -->
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-v/CxAUUGTqhuqCO8BGFGuvbKBxnWb5ZWf4XD56dq5SlsG/f2SinCmjGkjsAPIHKc" crossorigin="anonymous"></script>
|
||||
<script src="../../upg-neighbor.js" integrity="sha384-3rvydQZI/y8vGGArQua/O3VWTpBVIbkLcXMK2SQttHKpDOJfJY8epyKY0rJJseJC" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
Loading…
Reference in a new issue