Commit fea3e3d1c62cbcfa3c5ec06d3af2705e4a26e86a

Authored by Igor Kulikov
1 parent 5efe90e8

UI: Add Providers for Leaflet Map.

... ... @@ -60,6 +60,7 @@
60 60 "js-beautify": "^1.6.4",
61 61 "json-schema-defaults": "^0.2.0",
62 62 "leaflet": "^1.0.3",
  63 + "leaflet-providers": "^1.1.17",
63 64 "material-ui": "^0.16.1",
64 65 "material-ui-number-input": "^5.0.16",
65 66 "md-color-picker": "^0.2.6",
... ...
... ... @@ -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 */
... ...
... ... @@ -15,7 +15,7 @@
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 19
20 20 const maxZoom = 4;
21 21
... ...
... ... @@ -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: '&copy; <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
... ...