commit a2bbd6090c14ecf9943f7838eba96d8b409f2737
parent 8e79d6bb41839a988e94b6eae8017eaead91c25b
Author: Igor Sidorov <igor.sidorov@binarycode.ru>
Date:   Wed, 30 May 2018 11:45:19 +0300
Review fixes
Diffstat:
5 files changed, 99 insertions(+), 38 deletions(-)
diff --git a/src/layers.js b/src/layers.js
@@ -25,6 +25,7 @@ export default function getLayers() {
                     layer: L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                         {
                             code: 'O',
+                            isOverlay: false,
                             scaleDependent: true,
                             print: true,
                             jnx: true,
@@ -40,6 +41,7 @@ export default function getLayers() {
                         'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
                         {
                             code: 'E',
+                            isOverlay: false,
                             scaleDependent: false,
                             maxNativeZoom: 18,
                             print: true,
@@ -56,6 +58,7 @@ export default function getLayers() {
                         {
                             scaleDependent: true,
                             code: 'Y',
+                            isOverlay: false,
                             print: true,
                             jnx: true,
                             shortName: 'yandex'
@@ -70,6 +73,7 @@ export default function getLayers() {
                         {
                             scaleDependent: false,
                             code: 'S',
+                            isOverlay: false,
                             print: true,
                             jnx: true,
                             shortName: 'yandex_sat'
@@ -83,6 +87,7 @@ export default function getLayers() {
                     layer: new L.Layer.Google('ROADMAP',
                         {
                             code: 'G',
+                            isOverlay: false,
                             scaleDependent: true,
                             print: true,
                             jnx: true,
@@ -97,6 +102,7 @@ export default function getLayers() {
                     layer: new L.Layer.Google('SATELLITE',
                         {
                             code: 'L',
+                            isOverlay: false,
                             scaleDependent: false,
                             print: true,
                             jnx: true,
@@ -111,6 +117,7 @@ export default function getLayers() {
                     layer: new L.Layer.Google('TERRAIN',
                         {
                             code: 'P',
+                            isOverlay: false,
                             scaleDependent: false,
                             print: true,
                             jnx: true,
@@ -125,10 +132,11 @@ export default function getLayers() {
                     layer: new BingLayer(config.bingKey,
                         {
                             code: 'I',
+                            isOverlay: false,
                             scaleDependent: false,
                             print: true,
                             jnx: true,
-                            shortName: 'bing'
+                            shortName: 'bing_sat'
                         }
                     )
                 },
@@ -140,6 +148,7 @@ export default function getLayers() {
                     layer: L.tileLayer('https://maps.marshruty.ru/ml.ashx?x={x}&y={y}&z={z}&i=1&al=1',
                         {
                             code: 'M',
+                            isOverlay: false,
                             maxNativeZoom: 18,
                             noCors: true,
                             scaleDependent: true,
@@ -157,6 +166,7 @@ export default function getLayers() {
                         'http://144.76.234.108/cgi-bin/tapp/tilecache.py/1.0.0/topomapper_v2/{z}/{x}/{y}.jpg',
                         {
                             code: 'T',
+                            isOverlay: false,
                             scaleDependent: false,
                             maxNativeZoom: 13,
                             noCors: true,
@@ -175,6 +185,7 @@ export default function getLayers() {
                         {
                             code: 'D',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 9,
@@ -192,6 +203,7 @@ export default function getLayers() {
                         {
                             code: 'N',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 12,
@@ -209,6 +221,7 @@ export default function getLayers() {
                         {
                             code: 'A',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 13,
@@ -226,6 +239,7 @@ export default function getLayers() {
                         {
                             code: 'Q',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 13,
@@ -243,6 +257,7 @@ export default function getLayers() {
                         {
                             code: 'J',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 13,
@@ -260,6 +275,7 @@ export default function getLayers() {
                         {
                             code: 'C',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 13,
@@ -277,6 +293,7 @@ export default function getLayers() {
                         {
                             code: 'F',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 14,
@@ -294,6 +311,7 @@ export default function getLayers() {
                         {
                             code: 'B',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 14,
@@ -311,6 +329,7 @@ export default function getLayers() {
                         {
                             code: 'K',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 15,
@@ -328,6 +347,7 @@ export default function getLayers() {
                         {
                             code: 'Z',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 14,
@@ -345,7 +365,7 @@ export default function getLayers() {
                         {
                             code: 'U',
                             isOverlay: true,
-                            isOverlayTransparent: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 15,
@@ -363,7 +383,7 @@ export default function getLayers() {
                         {
                             code: 'R',
                             isOverlay: true,
-                            isOverlayTransparent: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             scaleDependent: false,
                             maxNativeZoom: 17,
@@ -379,8 +399,7 @@ export default function getLayers() {
                     isDefault: true,
                     layer: new L.Layer.SovietTopoGrid({
                         code: 'Ng',
-                        isOverlay: true,
-                        shortName: 'soviet_topo_grid'
+                        isOverlay: true
                     })
                 },
                 {
@@ -389,8 +408,7 @@ export default function getLayers() {
                     isDefault: true,
                     layer: new L.Wikimapia({
                         code: 'W',
-                        isOverlay: true,
-                        shortName: 'wikimapia'
+                        isOverlay: true
                     })
                 },
                 {
@@ -403,7 +421,7 @@ export default function getLayers() {
                             isOverlayTransparent: true,
                             print: true,
                             scaleDependent: true,
-                            shortName: 'westra'
+                            shortName: 'passes'
                         }
                     )
                 },
@@ -432,6 +450,7 @@ export default function getLayers() {
                     layer: L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
                         {
                             code: 'Otm',
+                            isOverlay: false,
                             maxNativeZoom: 17,
                             scaleDependent: true,
                             print: true,
@@ -449,10 +468,11 @@ export default function getLayers() {
                     layer: L.tileLayer('https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=' + config.thunderforestKey,
                         {
                             code: 'Ocm',
+                            isOverlay: false,
                             scaleDependent: true,
                             print: true,
                             jnx: true,
-                            shortName: 'ocm'
+                            shortName: 'opencyclemap'
                         }
                     )
                 },
@@ -463,6 +483,7 @@ export default function getLayers() {
                     layer: L.tileLayer('https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=' + config.thunderforestKey,
                         {
                             code: 'Oso',
+                            isOverlay: false,
                             scaleDependent: true,
                             print: true,
                             jnx: true,
@@ -484,6 +505,7 @@ export default function getLayers() {
                         {
                             code: 'E25m',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             maxNativeZoom: 9,
                             print: true,
@@ -501,6 +523,7 @@ export default function getLayers() {
                         {
                             code: 'NT1',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             maxNativeZoom: 14,
                             print: true,
@@ -518,6 +541,7 @@ export default function getLayers() {
                         {
                             code: 'NT5',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             maxNativeZoom: 15,
                             print: true,
@@ -535,6 +559,7 @@ export default function getLayers() {
                         {
                             code: 'T25',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             maxNativeZoom: 15,
                             print: true,
@@ -553,6 +578,7 @@ export default function getLayers() {
                         {
                             code: 'MN25',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: true,
                             maxNativeZoom: 15,
                             print: true,
@@ -577,6 +603,7 @@ export default function getLayers() {
                         {
                             code: 'Mt',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: false,
                             minZoom: 7,
                             minNativeZoom: 7,
@@ -614,6 +641,7 @@ export default function getLayers() {
                     layer: new GeocachingSu(config.geocachingSuUrl, {
                         code: 'Gc',
                         isOverlay: true,
+                        isOverlayTransparent: true,
                         print: true,
                         jnx: false,
                         shortName: 'geocaching'
@@ -627,6 +655,7 @@ export default function getLayers() {
                         {
                             code: 'Ot',
                             isOverlay: true,
+                            isOverlayTransparent: true,
                             scaleDependent: true,
                             print: true,
                             jnx: false,
@@ -784,6 +813,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://tilesprod.ut.no/tilestache/ut_topo_light/{z}/{x}/{y}.jpg",
                         {
                             code: 'Nu',
+                            isOverlay: false,
                             tms: false,
                             maxNativeZoom: 16,
                             print: true,
@@ -802,6 +832,7 @@ export default function getLayers() {
                         {
                             code: 'Np',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             maxNativeZoom: 16,
                             tms: false,
                             print: true,
@@ -819,6 +850,7 @@ export default function getLayers() {
                         {
                             code: 'Nm',
                             isOverlay: true,
+                            isOverlayTransparent: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -835,6 +867,7 @@ export default function getLayers() {
                         {
                             code: 'Ns',
                             isOverlay: true,
+                            isOverlayTransparent: true,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -852,6 +885,7 @@ export default function getLayers() {
                         {
                             code: 'Nw',
                             isOverlay: true,
+                            isOverlayTransparent: true,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -870,6 +904,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://maptiles1.finncdn.no/tileService/1.0.3/normap/{z}/{x}/{y}.png",
                         {
                             code: 'Nr',
+                            isOverlay: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -890,6 +925,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/base-m/{z}-{x}-{y}",
                         {
                             code: 'Czb',
+                            isOverlay: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -906,6 +942,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/turist-m/{z}-{x}-{y}",
                         {
                             code: 'Czt',
+                            isOverlay: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -922,6 +959,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/turist_aquatic-m/{z}-{x}-{y}",
                         {
                             code: 'Czs',
+                            isOverlay: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -938,6 +976,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/winter-m/{z}-{x}-{y}",
                         {
                             code: 'Czw',
+                            isOverlay: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -954,6 +993,7 @@ export default function getLayers() {
                     layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/zemepis-m/{z}-{x}-{y}",
                         {
                             code: 'Czg',
+                            isOverlay: false,
                             tms: false,
                             print: true,
                             jnx: true,
@@ -978,7 +1018,9 @@ export default function getLayers() {
             const {
                 code,
                 shortName,
-                print
+                print,
+                isOverlay,
+                isOverlayTransparent
             } = options
             if (!code) {
                 throw new Error('Layer without code: ' + layer.title);
@@ -997,13 +1039,16 @@ export default function getLayers() {
             orders[order] = 1;
 
             if (print) {
-              if (!shortName) {
-                  throw new Error('Layer without shortName: ' + layer.title);
-              }
-              if (shortNames.has(shortName)) {
-                  throw new Error(`Duplicate layer shortName "${shortName}"`);
-              }
-              shortNames.add(shortName);
+                if (isOverlay && (isOverlayTransparent === undefined)) {
+                    throw new Error('Overlay layer without isOverlayTransparent: ' + layer.title);
+                }
+                if (!shortName) {
+                    throw new Error('Layer without shortName: ' + layer.title);
+                }
+                if (shortNames.has(shortName)) {
+                    throw new Error(`Duplicate layer shortName "${shortName}"`);
+                }
+                shortNames.add(shortName);
             }
         }
     }
diff --git a/src/lib/leaflet.control.layers.configure/index.js b/src/lib/leaflet.control.layers.configure/index.js
@@ -178,6 +178,7 @@ function enableConfig(control, layers) {
                         url: '',
                         tms: false,
                         maxZoom: 18,
+                        isOverlay: false,
                         scaleDependent: false
                     }
                 );
diff --git a/src/lib/leaflet.control.printPages/control.js b/src/lib/leaflet.control.printPages/control.js
@@ -216,12 +216,15 @@ L.Control.PrintPages = L.Control.extend({
                 decorationLayers.push(new MagneticMeridians());
             }
             decorationLayers.push(new OverlayScale());
+            const scale = this.scale();
+            const width = this.pageWidth();
+            const height = this.pageHeight();
             renderPages({
                     map: this._map,
                     pages,
                     zooms: this.zoomForPrint(),
                     resolution,
-                    scale: this.scale(),
+                    scale,
                     decorationLayers,
                     progressCallback: this.incrementProgress.bind(this)
                 }
@@ -229,6 +232,9 @@ L.Control.PrintPages = L.Control.extend({
                     if (images) {
                         const fileName = this.getFileName({
                             renderedLayers,
+                            scale,
+                            width,
+                            height,
                             extension: 'pdf'
                         });
                         savePagesPdf(images, resolution, fileName);
@@ -259,12 +265,15 @@ L.Control.PrintPages = L.Control.extend({
             this.downloadProgressRange(1000);
             this.downloadProgressDone(undefined);
             this.makingPdf(true);
+            const scale = this.scale();
+            const width = this.pageWidth();
+            const height = this.pageHeight();
             renderPages({
                     map: this._map,
                     pages,
                     zooms: this.zoomForPrint(),
                     resolution: this.resolution(),
-                    scale: this.scale(),
+                    scale,
                     decorationLayers,
                     progressCallback: this.incrementProgress.bind(this)
                 }
@@ -272,6 +281,9 @@ L.Control.PrintPages = L.Control.extend({
                 .then(({images, renderedLayers}) => {
                     const fileName = this.getFileName({
                         renderedLayers,
+                        scale,
+                        width,
+                        height,
                         extension: 'jpg'
                     });
                     savePageJpg(images[0], fileName);
@@ -473,46 +485,48 @@ L.Control.PrintPages = L.Control.extend({
             return true;
         },
 
-        getFileName: function({renderedLayers, extension}) {
+        getFileName: function({renderedLayers, scale, width, height, extension}) {
             let fileName = '';
 
-            const baseLayers = [];
-            const overlayLayers = [];
+            let baseLayer;
+            let overlayLayer;
             const transparentOverlayLayers = [];
 
             renderedLayers.forEach(layer => {
                 const {
                     options: {
                         isOverlay,
-                        isOverlayTransparent
+                        isOverlayTransparent,
+                        shortName
                     }
                 } = layer;
 
+                if (!shortName) {
+                    return;
+                }
+
                 if (isOverlay) {
                     if (isOverlayTransparent) {
-                        transparentOverlayLayers.unshift(layer);
+                        transparentOverlayLayers.push(layer);
                     } else {
-                        overlayLayers.unshift(layer);
+                        overlayLayer = layer;
                     }
                 } else {
-                    baseLayers.unshift(layer);
+                    baseLayer = layer;
                 }
             });
 
             const appendLayerShortName = (layer) => {
                 fileName += `${layer.options.shortName}_`;
             }
-            if (overlayLayers.length > 0) {
-                appendLayerShortName(overlayLayers[0]);
-            } else if (baseLayers.length > 0) {
-                appendLayerShortName(baseLayers[0]);
+            if (overlayLayer) {
+                appendLayerShortName(overlayLayer);
+            } else if (baseLayer) {
+                appendLayerShortName(baseLayer);
             }
             transparentOverlayLayers.forEach(appendLayerShortName);
 
-            fileName += `${this.scale()}m`;
-
-            const width  = this.pageWidth();
-            const height = this.pageHeight();
+            fileName += `${scale}m`;
 
             const currentPageSize = this.pageSizes.find((pageSize) => {
                 return (width === pageSize.width) && (height === pageSize.height);
diff --git a/src/lib/leaflet.control.printPages/map-render.js b/src/lib/leaflet.control.printPages/map-render.js
@@ -302,8 +302,9 @@ async function renderPages({map, pages, zooms, resolution, scale, progressCallba
             }
             progressCallback(tileInfo.progressInc, progressRange);
             composer.putTile(tileInfo);
-            if (tileInfo.image) {
-                renderedLayers.add(tileInfo.layer);
+            const {image, draw, layer} = tileInfo;
+            if ((image || draw) && !layer._layerDummy) {
+                renderedLayers.add(layer);
             }
         }
         const dataUrl = composer.getDataUrl();
@@ -316,7 +317,7 @@ async function renderPages({map, pages, zooms, resolution, scale, progressCallba
             }
         );
     }
-    return { images: pageImagesInfo, renderedLayers };
+    return {images: pageImagesInfo, renderedLayers};
 }
 
 
diff --git a/src/lib/leaflet.layer.rasterize/WestraPasses.js b/src/lib/leaflet.layer.rasterize/WestraPasses.js
@@ -20,7 +20,7 @@ WestraPassesMarkers.include({
     },
 
     cloneForPrint: function (options) {
-        options = L.Util.extend({}, options);
+        options = L.Util.extend({}, this.options, options);
         return new WestraPassesMarkers(this._baseUrl, options);
     },