Commit fea3e3d1c62cbcfa3c5ec06d3af2705e4a26e86a
1 parent
5efe90e8
UI: Add Providers for Leaflet Map.
Showing
7 changed files
with
64 additions
and
12 deletions
... | ... | @@ -18,7 +18,7 @@ |
18 | 18 | |
19 | 19 | <md-fab-toolbar md-open="vm.toolbarOpened" |
20 | 20 | md-direction="left" |
21 | - ng-class="{'is-fullscreen': vm.forceFullscreen, 'md-whiteframe-z1': vm.forceFullscreen}"> | |
21 | + ng-class="{'is-fullscreen': vm.forceFullscreen, 'md-whiteframe-z1': vm.forceFullscreen && vm.toolbarOpened }"> | |
22 | 22 | <md-fab-trigger class="align-with-text"> |
23 | 23 | <md-button aria-label="menu" class="md-fab md-primary" ng-click="vm.onTriggerClick()"> |
24 | 24 | <md-tooltip ng-show="!vm.toolbarOpened" md-direction="bottom"> | ... | ... |
... | ... | @@ -68,7 +68,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget |
68 | 68 | Object.defineProperty(vm, 'toolbarOpened', { |
69 | 69 | get: function() { |
70 | 70 | return !vm.widgetEditMode && |
71 | - (toolbarAlwaysOpen() || $scope.forceFullscreen || vm.isToolbarOpened || vm.isEdit || vm.showRightLayoutSwitch()); }, | |
71 | + (toolbarAlwaysOpen() || vm.isToolbarOpened || vm.isEdit || vm.showRightLayoutSwitch()); }, | |
72 | 72 | set: function() { } |
73 | 73 | }); |
74 | 74 | |
... | ... | @@ -114,7 +114,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget |
114 | 114 | } |
115 | 115 | |
116 | 116 | vm.showCloseToolbar = function() { |
117 | - return !vm.toolbarAlwaysOpen() && !$scope.forceFullscreen && !vm.isEdit && !vm.showRightLayoutSwitch(); | |
117 | + return !vm.toolbarAlwaysOpen() && !vm.isEdit && !vm.showRightLayoutSwitch(); | |
118 | 118 | } |
119 | 119 | |
120 | 120 | vm.toolbarAlwaysOpen = toolbarAlwaysOpen; | ... | ... |
... | ... | @@ -162,11 +162,13 @@ export default class TbGoogleMap { |
162 | 162 | |
163 | 163 | /* eslint-disable no-undef */ |
164 | 164 | updateMarkerImage(marker, settings, image, maxSize) { |
165 | - var testImage = new Image(); | |
165 | + var testImage = document.createElement('img'); // eslint-disable-line | |
166 | + testImage.style.visibility = 'hidden'; | |
166 | 167 | testImage.onload = function() { |
167 | 168 | var width; |
168 | 169 | var height; |
169 | 170 | var aspect = testImage.width / testImage.height; |
171 | + document.body.removeChild(testImage); //eslint-disable-line | |
170 | 172 | if (aspect > 1) { |
171 | 173 | width = maxSize; |
172 | 174 | height = maxSize / aspect; |
... | ... | @@ -183,6 +185,7 @@ export default class TbGoogleMap { |
183 | 185 | marker.set('labelAnchor', new google.maps.Point(100, height + 20)); |
184 | 186 | } |
185 | 187 | } |
188 | + document.body.appendChild(testImage); //eslint-disable-line | |
186 | 189 | testImage.src = image; |
187 | 190 | } |
188 | 191 | /* eslint-enable no-undef */ | ... | ... |
... | ... | @@ -77,7 +77,7 @@ export default class TbMapWidgetV2 { |
77 | 77 | if (mapProvider === 'google-map') { |
78 | 78 | this.map = new TbGoogleMap($element, initCallback, this.defaultZoomLevel, this.dontFitMapBounds, minZoomLevel, settings.gmApiKey, settings.gmDefaultMapType); |
79 | 79 | } else if (mapProvider === 'openstreet-map') { |
80 | - this.map = new TbOpenStreetMap($element, initCallback, this.defaultZoomLevel, this.dontFitMapBounds, minZoomLevel); | |
80 | + this.map = new TbOpenStreetMap($element, initCallback, this.defaultZoomLevel, this.dontFitMapBounds, minZoomLevel, settings.mapProvider); | |
81 | 81 | } else if (mapProvider === 'image-map') { |
82 | 82 | this.map = new TbImageMap(this.ctx, $element, initCallback, |
83 | 83 | settings.mapImageUrl, |
... | ... | @@ -539,11 +539,51 @@ const openstreetMapSettingsSchema = |
539 | 539 | "title":"Openstreet Map Configuration", |
540 | 540 | "type":"object", |
541 | 541 | "properties":{ |
542 | + "mapProvider":{ | |
543 | + "title":"Map provider", | |
544 | + "type":"string", | |
545 | + "default":"OpenStreetMap.Mapnik" | |
546 | + } | |
542 | 547 | }, |
543 | 548 | "required":[ |
544 | 549 | ] |
545 | 550 | }, |
546 | 551 | "form":[ |
552 | + { | |
553 | + "key":"mapProvider", | |
554 | + "type":"rc-select", | |
555 | + "multiple":false, | |
556 | + "items":[ | |
557 | + { | |
558 | + "value":"OpenStreetMap.Mapnik", | |
559 | + "label":"OpenStreetMap.Mapnik (Default)" | |
560 | + }, | |
561 | + { | |
562 | + "value":"OpenStreetMap.BlackAndWhite", | |
563 | + "label":"OpenStreetMap.BlackAndWhite" | |
564 | + }, | |
565 | + { | |
566 | + "value":"OpenStreetMap.HOT", | |
567 | + "label":"OpenStreetMap.HOT" | |
568 | + }, | |
569 | + { | |
570 | + "value":"Esri.WorldStreetMap", | |
571 | + "label":"Esri.WorldStreetMap" | |
572 | + }, | |
573 | + { | |
574 | + "value":"Esri.WorldTopoMap", | |
575 | + "label":"Esri.WorldTopoMap" | |
576 | + }, | |
577 | + { | |
578 | + "value":"CartoDB.Positron", | |
579 | + "label":"CartoDB.Positron" | |
580 | + }, | |
581 | + { | |
582 | + "value":"CartoDB.DarkMatter", | |
583 | + "label":"CartoDB.DarkMatter" | |
584 | + } | |
585 | + ] | |
586 | + } | |
547 | 587 | ] |
548 | 588 | }; |
549 | 589 | ... | ... |
... | ... | @@ -15,22 +15,27 @@ |
15 | 15 | */ |
16 | 16 | |
17 | 17 | import 'leaflet/dist/leaflet.css'; |
18 | -import L from 'leaflet/dist/leaflet'; | |
18 | +import * as L from 'leaflet'; | |
19 | +import 'leaflet-providers'; | |
19 | 20 | |
20 | 21 | export default class TbOpenStreetMap { |
21 | 22 | |
22 | - constructor($containerElement, initCallback, defaultZoomLevel, dontFitMapBounds, minZoomLevel) { | |
23 | + constructor($containerElement, initCallback, defaultZoomLevel, dontFitMapBounds, minZoomLevel, mapProvider) { | |
23 | 24 | |
24 | 25 | this.defaultZoomLevel = defaultZoomLevel; |
25 | 26 | this.dontFitMapBounds = dontFitMapBounds; |
26 | 27 | this.minZoomLevel = minZoomLevel; |
27 | 28 | this.tooltips = []; |
28 | 29 | |
30 | + if (!mapProvider) { | |
31 | + mapProvider = "OpenStreetMap.Mapnik"; | |
32 | + } | |
33 | + | |
29 | 34 | this.map = L.map($containerElement[0]).setView([0, 0], this.defaultZoomLevel || 8); |
30 | 35 | |
31 | - L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { | |
32 | - attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' | |
33 | - }).addTo(this.map); | |
36 | + var tileLayer = L.tileLayer.provider(mapProvider); | |
37 | + | |
38 | + tileLayer.addTo(this.map); | |
34 | 39 | |
35 | 40 | if (initCallback) { |
36 | 41 | setTimeout(initCallback, 0); //eslint-disable-line |
... | ... | @@ -63,11 +68,13 @@ export default class TbOpenStreetMap { |
63 | 68 | } |
64 | 69 | |
65 | 70 | updateMarkerImage(marker, settings, image, maxSize) { |
66 | - var testImage = new Image(); // eslint-disable-line no-undef | |
71 | + var testImage = document.createElement('img'); // eslint-disable-line | |
72 | + testImage.style.visibility = 'hidden'; | |
67 | 73 | testImage.onload = function() { |
68 | 74 | var width; |
69 | 75 | var height; |
70 | 76 | var aspect = testImage.width / testImage.height; |
77 | + document.body.removeChild(testImage); //eslint-disable-line | |
71 | 78 | if (aspect > 1) { |
72 | 79 | width = maxSize; |
73 | 80 | height = maxSize / aspect; |
... | ... | @@ -89,6 +96,7 @@ export default class TbOpenStreetMap { |
89 | 96 | { className: 'tb-marker-label', permanent: true, direction: 'top', offset: marker.tooltipOffset }); |
90 | 97 | } |
91 | 98 | } |
99 | + document.body.appendChild(testImage); //eslint-disable-line | |
92 | 100 | testImage.src = image; |
93 | 101 | } |
94 | 102 | ... | ... |