all repos — onyx @ 696d3bc270e74bf0ebda97c40474441b6fda3093

minimal map annotation and location data sharing tool

src/80-share.ts (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
interface StringMap {
  [key: string]: string;
}

function getOverlayFromQuery(): [Circle | Marker | null, string | null] {
  let urlParams: StringMap = {};
  let match,
        pl = /\+/g,
        search = /([^&=]+)=?([^&]*)/g,
        decode = function (s: string) {
            return decodeURIComponent(s.replace(pl, " "));
        },
        query = window.location.search.substring(1);

    while (match = search.exec(query)) {
      urlParams[decode(match[1])] = decode(match[2]);
    }
    
  if (urlParams["lat"] && urlParams["lng"]) {
    urlParams["name"] = urlParams["name"] || `${urlParams["lat"]},${urlParams["lng"]}`;
    urlParams["desc"] = urlParams["desc"] || "";
    urlParams["tile"] = urlParams["tile"] || "street";
    if (urlParams["rad"]) {
      return [new Circle(
        urlParams["name"],
        urlParams["desc"],
        {lat: Number(urlParams["lat"]), lng: Number(urlParams["lng"])},
        {radius: Number(urlParams["rad"])}), urlParams["tile"]];
    } else {
      return [new Marker(
        urlParams["name"],
        urlParams["desc"],
        {lat: Number(urlParams["lat"]), lng: Number(urlParams["lng"])},
        {}), urlParams["tile"]];
    }
  }
  return [null, null];
}