Stores Overlay Query
Sample code for Woosmap Map JavaScript API
author(s):
Woosmap
HTML
<!DOCTYPE html>
<html>
<head>
<title>Stores Overlay Query</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta charset="utf-8" />
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map-panel">
<label class="toggle">
<span class="toggle-label">Drive-thru</span>
<input class="toggle-checkbox" type="checkbox" id="toggleQuery" />
<div class="toggle-switch"></div>
</label>
</div>
<wmp-map id="map"></wmp-map>
<script>
((g) => {
let p;
const w = window,
d = document;
const L = "importLibrary",
CB = "__ib__";
const E = "The Woosmap Maps JavaScript API";
const woosmap = w.woosmap || (w.woosmap = {});
const maps = woosmap.map || (woosmap.map = {});
// Seed with the sample's configured libraries: some (e.g. widgets) are
// not importLibrary() names and only load through the script URL.
const libs = new Set(
String(g.libraries || "")
.split(",")
.filter(Boolean),
),
params = new URLSearchParams();
const load = () =>
p ||
(p = new Promise((res, rej) => {
const s = d.createElement("script");
params.set("libraries", [...libs].join(","));
for (const k in g)
if (k !== "libraries" && g[k]) params.set(k, g[k]);
params.set("callback", "woosmap.map." + CB);
s.src = "https://sdk.woosmap.com/map/map.js?" + params;
maps[CB] = res;
s.onerror = () => rej(Error(E + " could not load."));
s.nonce = d.querySelector("script[nonce]")?.nonce || "";
d.head.append(s);
}));
if (maps[L]) {
console.warn(E + " only loads once. Ignoring:", g);
} else {
maps[L] = (name, ...args) =>
libs.add(name) && load().then(() =>...
CSS
/*
* Always set the map height explicitly to define the size of the element
* that contains the map. `display: block` is required for <wmp-map>/<gmp-map>,
* which default to inline like any other custom element outside a flex/grid
* container (no-op for a plain <div>).
*/
#map {
display: block;
width: 100%;
height: 100%;
}
/*
* Optional: Makes the sample page fill the window.
*/
html,
body {
height: 100%;
margin: 0;
padding: 0;
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
}
.toggle {
cursor: pointer;
display: inline-block;
}
.toggle:hover .toggle-switch:before {
background: linear-gradient(to bottom, #fff 0%, #fff 100%);
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
}
.toggle-switch {
display: inline-block;
background: #ccc;
border-radius: 16px;
width: 58px;
height: 32px;
position: relative;
vertical-align: middle;
transition: background 0.25s;
}
.toggle-switch:before {
content: "";
display: block;
background: linear-gradient(to bottom, #fff 0%, #eee 100%);
border-radius: 50%;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25);
width: 24px;
height: 24px;
position: absolute;
top: 4px;
left: 4px;
transition: left 0.25s;
}
.toggle-switch:after {
content: "";
}
.toggle-checkbox:checked + .toggle-switch {
background: #56c080;
}
.toggle-checkbox:checked + .toggle-switch:before {
left: 30px;
}
.toggle-checkbox {
position: absolute;
visibility: hidden;
}
.toggle-label {
margin-left: 5px;
position: relative;
top: 2px;
}
#map-panel {
position: absolute;
top: 0;
left: 0;
background-color: #fff;
border-radius: 3px;
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
margin: 10px;
padding: 5px;
overflow: hidden;
z-index: 1;
}
JavaScript
async function initMap() {
await woosmap.map.importLibrary("maps");
const center = { lat: 51.52, lng: -0.13 };
const style = {
breakPoint: 14,
rules: [],
default: {
color: "#008a2f",
size: 8,
minSize: 1,
icon: {
url: "https://images.woosmap.com/starbucks-marker.svg",
scaledSize: {
height: 40,
width: 34,
},
},
selectedIcon: {
url: "https://images.woosmap.com/starbucks-marker-selected.svg",
scaledSize: {
height: 50,
width: 43,
},
},
},
};
const map = document.getElementById("map").innerMap;
map.moveCamera({
zoom: 8,
center: center,
});
const storesOverlay = new woosmap.map.StoresOverlay(style);
storesOverlay.setMap(map);
const toggle = document.getElementById("toggleQuery");
toggle.onchange = function () {
if (toggle.checked) {
storesOverlay.setQuery('tag:"DT"');
} else {
storesOverlay.setQuery(null);
}
};
}
initMap();