tileserver-gl-light 4.4.2 → 4.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,10 +5,10 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>{{name}} - TileServer GL</title>
7
7
  {{#is_vector}}
8
- <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl.css" />
9
- <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl-inspect.css" />
10
- <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl.js"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-compat.js"><\/script>'); }</script>
11
- <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl-inspect.min.js"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-inspect-compat.min.js"><\/script>'); }</script>
8
+ <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl.css{{&key_query}}" />
9
+ <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl-inspect.css{{&key_query}}" />
10
+ <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl.js{{&key_query}}"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-compat.js{{&key_query}}"><\/script>'); }</script>
11
+ <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl-inspect.min.js{{&key_query}}"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-inspect-compat.min.js{{&key_query}}"><\/script>'); }</script>
12
12
  <style>
13
13
  body {background:#fff;color:#333;font-family:Arial, sans-serif;}
14
14
  #map {position:absolute;top:0;left:0;right:250px;bottom:0;}
@@ -18,13 +18,25 @@
18
18
  </style>
19
19
  {{/is_vector}}
20
20
  {{^is_vector}}
21
- <link rel="stylesheet" type="text/css" href="{{public_url}}leaflet.css" />
22
- <script src="{{public_url}}leaflet.js"></script>
23
- <script src="{{public_url}}leaflet-hash.js"></script>
24
- <script src="{{public_url}}L.TileLayer.NoGap.js"></script>
21
+ <link rel="stylesheet" type="text/css" href="{{public_url}}leaflet.css{{&key_query}}" />
22
+ <script src="{{public_url}}leaflet.js{{&key_query}}"></script>
23
+ <script src="{{public_url}}leaflet-hash.js{{&key_query}}"></script>
24
+ <script src="{{public_url}}L.TileLayer.NoGap.js{{&key_query}}"></script>
25
25
  <style>
26
26
  body { margin:0; padding:0; }
27
27
  #map { position:absolute; top:0; bottom:0; width:100%; }
28
+ .leaflet-control-layers-toggle {
29
+ background-image: url({{public_url}}images/layers.png{{&key_query}});
30
+ width: 36px;
31
+ height: 36px;
32
+ }
33
+ .leaflet-retina .leaflet-control-layers-toggle {
34
+ background-image: url({{public_url}}images/layers-2x.png{{&key_query}});
35
+ background-size: 26px 26px;
36
+ }
37
+ .leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
38
+ background-image: url({{public_url}}images/marker-icon.png{{&key_query}});
39
+ }
28
40
  </style>
29
41
  {{/is_vector}}
30
42
  </head>
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>TileServer GL - Server for vector and raster maps with GL styles</title>
7
- <link rel="stylesheet" type="text/css" href="{{public_url}}index.css" />
7
+ <link rel="stylesheet" type="text/css" href="{{public_url}}index.css{{&key_query}}" />
8
8
  <script>
9
9
  function toggle_xyz(id) {
10
10
  var el = document.getElementById(id);
@@ -17,7 +17,7 @@
17
17
  </head>
18
18
  <body>
19
19
  <section>
20
- <h1 class="title {{#if is_light}}light{{/if}}"><img src="{{public_url}}images/logo.png" alt="TileServer GL" /></h1>
20
+ <h1 class="title {{#if is_light}}light{{/if}}"><img src="{{public_url}}images/logo.png{{&key_query}}" alt="TileServer GL" /></h1>
21
21
  <h2 class="subtitle">Vector {{#if is_light}}<s>and raster</s>{{else}}and raster{{/if}} maps with GL styles</h2>
22
22
  {{#if styles}}
23
23
  <h2 class="box-header">Styles</h2>
@@ -27,7 +27,7 @@
27
27
  {{#if thumbnail}}
28
28
  <img src="{{public_url}}styles/{{@key}}/{{thumbnail}}{{&../key_query}}" alt="{{name}} preview" />
29
29
  {{else}}
30
- <img src="{{public_url}}images/placeholder.png" alt="{{name}} preview" />
30
+ <img src="{{public_url}}images/placeholder.png{{&key_query}}" alt="{{name}} preview" />
31
31
  {{/if}}
32
32
  <div class="details">
33
33
  <h3>{{name}}</h3>
@@ -74,7 +74,7 @@
74
74
  {{#if thumbnail}}
75
75
  <img src="{{public_url}}data/{{@key}}/{{thumbnail}}{{&../key_query}}" alt="{{name}} preview" />
76
76
  {{else}}
77
- <img src="{{public_url}}images/placeholder.png" alt="{{name}} preview" />
77
+ <img src="{{public_url}}images/placeholder.png{{&key_query}}" alt="{{name}} preview" />
78
78
  {{/if}}
79
79
  <div class="details">
80
80
  <h3>{{name}}</h3>
@@ -104,7 +104,7 @@
104
104
  {{/if}}
105
105
  </section>
106
106
  <footer>
107
- <a href="https://www.maptiler.com/" target="_blank"><img src="{{public_url}}images/maptiler-logo.svg" /></a>
107
+ <a href="https://www.maptiler.com/" target="_blank"><img src="{{public_url}}images/maptiler-logo.svg{{&key_query}}" /></a>
108
108
  <p>
109
109
  <a href="https://github.com/maptiler/tileserver-gl" target="_blank">Powered by TileServer GL ({{server_version}})</a> – <a href="https://www.maptiler.com/" target="_blank">an open-source project from MapTiler.</a>
110
110
  </p>
@@ -4,17 +4,29 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>{{name}} - TileServer GL</title>
7
- <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl.css" />
8
- <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl-inspect.css" />
9
- <link rel="stylesheet" type="text/css" href="{{public_url}}leaflet.css" />
10
- <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl.js"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-compat.js"><\/script>'); }</script>
11
- <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl-inspect.min.js"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-inspect-compat.min.js"><\/script>'); }</script>
12
- <script src="{{public_url}}leaflet.js"></script>
13
- <script src="{{public_url}}leaflet-hash.js"></script>
14
- <script src="{{public_url}}L.TileLayer.NoGap.js"></script>
7
+ <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl.css{{&key_query}}" />
8
+ <link rel="stylesheet" type="text/css" href="{{public_url}}maplibre-gl-inspect.css{{&key_query}}" />
9
+ <link rel="stylesheet" type="text/css" href="{{public_url}}leaflet.css{{&key_query}}" />
10
+ <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl.js{{&key_query}}"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-compat.js{{&key_query}}"><\/script>'); }</script>
11
+ <script>if (typeof Symbol !== 'undefined') { document.write('<script src="{{public_url}}maplibre-gl-inspect.min.js{{&key_query}}"><\/script>'); } else { document.write('<script src="{{public_url}}maplibre-gl-inspect-compat.min.js{{&key_query}}"><\/script>'); }</script>
12
+ <script src="{{public_url}}leaflet.js{{&key_query}}"></script>
13
+ <script src="{{public_url}}leaflet-hash.js{{&key_query}}"></script>
14
+ <script src="{{public_url}}L.TileLayer.NoGap.js{{&key_query}}"></script>
15
15
  <style>
16
16
  body { margin:0; padding:0; }
17
17
  #map { position:absolute; top:0; bottom:0; width:100%; }
18
+ .leaflet-control-layers-toggle {
19
+ background-image: url({{public_url}}images/layers.png{{&key_query}});
20
+ width: 36px;
21
+ height: 36px;
22
+ }
23
+ .leaflet-retina .leaflet-control-layers-toggle {
24
+ background-image: url({{public_url}}images/layers-2x.png{{&key_query}});
25
+ background-size: 26px 26px;
26
+ }
27
+ .leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
28
+ background-image: url({{public_url}}images/marker-icon.png{{&key_query}});
29
+ }
18
30
  </style>
19
31
  </head>
20
32
  <body>
package/src/utils.js CHANGED
@@ -6,19 +6,35 @@ import fs from 'node:fs';
6
6
  import clone from 'clone';
7
7
  import glyphCompose from '@mapbox/glyph-pbf-composite';
8
8
 
9
- export const getPublicUrl = (publicUrl, req) =>
10
- publicUrl || `${req.protocol}://${req.headers.host}/`;
9
+ /**
10
+ * Generate new URL object
11
+ * @params {object} req - Express request
12
+ * @returns {URL} object
13
+ **/
14
+ const getUrlObject = (req) => {
15
+ const urlObject = new URL(`${req.protocol}://${req.headers.host}/`);
16
+ // support overriding hostname by sending X-Forwarded-Host http header
17
+ urlObject.hostname = req.hostname;
18
+ return urlObject;
19
+ };
20
+
21
+ export const getPublicUrl = (publicUrl, req) => {
22
+ if (publicUrl) {
23
+ return publicUrl;
24
+ }
25
+ return getUrlObject(req).toString();
26
+ };
11
27
 
12
28
  export const getTileUrls = (req, domains, path, format, publicUrl, aliases) => {
29
+ const urlObject = getUrlObject(req);
13
30
  if (domains) {
14
31
  if (domains.constructor === String && domains.length > 0) {
15
32
  domains = domains.split(',');
16
33
  }
17
- const host = req.headers.host;
18
- const hostParts = host.split('.');
34
+ const hostParts = urlObject.host.split('.');
19
35
  const relativeSubdomainsUsable =
20
36
  hostParts.length > 1 &&
21
- !/^([0-9]{1,3}\.){3}[0-9]{1,3}(\:[0-9]+)?$/.test(host);
37
+ !/^([0-9]{1,3}\.){3}[0-9]{1,3}(\:[0-9]+)?$/.test(urlObject.host);
22
38
  const newDomains = [];
23
39
  for (const domain of domains) {
24
40
  if (domain.indexOf('*') !== -1) {
@@ -34,7 +50,7 @@ export const getTileUrls = (req, domains, path, format, publicUrl, aliases) => {
34
50
  domains = newDomains;
35
51
  }
36
52
  if (!domains || domains.length == 0) {
37
- domains = [req.headers.host];
53
+ domains = [urlObject.host];
38
54
  }
39
55
 
40
56
  const queryParams = [];