svgmap 2.12.2 → 2.14.0
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.
- package/README.md +60 -58
- package/demo/es6/package-lock.json +1888 -875
- package/demo/es6/package.json +1 -1
- package/demo/html/index.html +1 -0
- package/demo/react/app/package-lock.json +10808 -5764
- package/demo/react/app/package.json +1 -1
- package/dist/svgMap.css +3 -0
- package/dist/svgMap.js +53 -9
- package/dist/svgMap.min.css +1 -1
- package/dist/svgMap.min.js +1 -1
- package/package.json +6 -6
- package/src/js/svgMap.js +53 -9
- package/src/scss/map.scss +4 -0
- package/src/scss/variables.scss +1 -1
package/dist/svgMap.css
CHANGED
|
@@ -71,6 +71,9 @@
|
|
|
71
71
|
border-radius: 2px;
|
|
72
72
|
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
|
|
73
73
|
}
|
|
74
|
+
.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-disabled {
|
|
75
|
+
display: none;
|
|
76
|
+
}
|
|
74
77
|
.svgMap-map-wrapper .svgMap-map-controls-zoom,
|
|
75
78
|
.svgMap-map-wrapper .svgMap-map-controls-move {
|
|
76
79
|
display: flex;
|
package/dist/svgMap.js
CHANGED
|
@@ -12,6 +12,9 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
12
12
|
// The element to render the map in
|
|
13
13
|
targetElementID: '',
|
|
14
14
|
|
|
15
|
+
// Allow user to zoom and pan
|
|
16
|
+
allowInteraction: true,
|
|
17
|
+
|
|
15
18
|
// Minimum and maximum zoom
|
|
16
19
|
minZoom: 1,
|
|
17
20
|
maxZoom: 25,
|
|
@@ -28,6 +31,9 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
28
31
|
// Zoom sensitivity
|
|
29
32
|
zoomScaleSensitivity: 0.2,
|
|
30
33
|
|
|
34
|
+
// Zoom with double-click
|
|
35
|
+
dblClickZoomEnabled: true,
|
|
36
|
+
|
|
31
37
|
// Zoom with mousewheel
|
|
32
38
|
mouseWheelZoomEnabled: true,
|
|
33
39
|
|
|
@@ -45,8 +51,8 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
45
51
|
colorMin: '#FFE5D9',
|
|
46
52
|
colorNoData: '#E2E2E2',
|
|
47
53
|
|
|
48
|
-
//
|
|
49
|
-
|
|
54
|
+
// Ratio type for the color scale, can be 'linear' or 'log' for logarithmic or a custom function (value, min, max) => ratio
|
|
55
|
+
ratioType: 'linear',
|
|
50
56
|
|
|
51
57
|
// The flag type can be 'image' or 'emoji'
|
|
52
58
|
flagType: 'image',
|
|
@@ -114,6 +120,7 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
114
120
|
|
|
115
121
|
// Block scrolling when option is enabled
|
|
116
122
|
if (
|
|
123
|
+
this.options.allowInteraction &&
|
|
117
124
|
this.options.mouseWheelZoomEnabled &&
|
|
118
125
|
this.options.mouseWheelZoomWithKey
|
|
119
126
|
) {
|
|
@@ -424,17 +431,45 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
424
431
|
min,
|
|
425
432
|
parseInt(data.values[countryID][data.applyData], 10)
|
|
426
433
|
);
|
|
427
|
-
|
|
434
|
+
|
|
428
435
|
var color = this.getColor(
|
|
429
436
|
this.toHex(this.options.colorMax),
|
|
430
437
|
this.toHex(this.options.colorMin),
|
|
431
|
-
|
|
438
|
+
this.calculateColorRatio(value, min, max, this.options.ratioType)
|
|
432
439
|
);
|
|
433
440
|
element.setAttribute('fill', color);
|
|
434
441
|
}.bind(this)
|
|
435
442
|
);
|
|
436
443
|
};
|
|
437
444
|
|
|
445
|
+
svgMap.prototype.calculateColorRatio = function (value, min, max, ratioType) {
|
|
446
|
+
var range = max - min;
|
|
447
|
+
var positionInRange = value - min;
|
|
448
|
+
|
|
449
|
+
if (range === 0 || positionInRange === 0) {
|
|
450
|
+
return 0;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
if (ratioType === 'log') {
|
|
454
|
+
var logValue = Math.log(positionInRange + 1);
|
|
455
|
+
var logMin = Math.log(1);
|
|
456
|
+
var logMax = Math.log(range + 1);
|
|
457
|
+
var ratio = Math.max(0, Math.min(1, (logValue - logMin) / (logMax - logMin)));
|
|
458
|
+
return ratio || ratio === 0 ? ratio : 1;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
if (ratioType === 'linear') {
|
|
462
|
+
var ratio = Math.max(0, Math.min(1, positionInRange / range));
|
|
463
|
+
return ratio || ratio === 0 ? ratio : 1;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if (typeof ratioType === 'function') {
|
|
467
|
+
return ratioType(value, min, max);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
return 1;
|
|
471
|
+
}
|
|
472
|
+
|
|
438
473
|
// Emoji flags
|
|
439
474
|
|
|
440
475
|
svgMap.prototype.emojiFlags = {
|
|
@@ -795,8 +830,10 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
795
830
|
this[zoomControlName].type = 'button';
|
|
796
831
|
this[zoomControlName].addEventListener(
|
|
797
832
|
'click',
|
|
798
|
-
function
|
|
799
|
-
this.
|
|
833
|
+
function() {
|
|
834
|
+
if (this.options.allowInteraction) {
|
|
835
|
+
this.zoomMap(item);
|
|
836
|
+
}
|
|
800
837
|
}.bind(this),
|
|
801
838
|
{ passive: true }
|
|
802
839
|
);
|
|
@@ -804,11 +841,16 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
804
841
|
}.bind(this)
|
|
805
842
|
);
|
|
806
843
|
|
|
844
|
+
if (!this.options.allowInteraction) {
|
|
845
|
+
mapControlsWrapper.classList.add('svgMap-disabled');
|
|
846
|
+
mapControlsWrapper.setAttribute('aria-disabled', 'true');
|
|
847
|
+
}
|
|
848
|
+
|
|
807
849
|
// Add accessible names to zoom controls
|
|
808
850
|
this.zoomControlIn.setAttribute('aria-label', 'Zoom in');
|
|
809
851
|
this.zoomControlOut.setAttribute('aria-label', 'Zoom out');
|
|
810
852
|
|
|
811
|
-
if (this.options.showContinentSelector) {
|
|
853
|
+
if (this.options.allowInteraction && this.options.showContinentSelector) {
|
|
812
854
|
// Add continent controls
|
|
813
855
|
var mapContinentControlsWrapper = this.createElement(
|
|
814
856
|
'div',
|
|
@@ -1008,14 +1050,16 @@ function svgMapWrapper(svgPanZoom) {
|
|
|
1008
1050
|
|
|
1009
1051
|
// Init pan zoom
|
|
1010
1052
|
this.mapPanZoom = svgPanZoom(this.mapImage, {
|
|
1011
|
-
zoomEnabled:
|
|
1053
|
+
zoomEnabled: this.options.allowInteraction,
|
|
1054
|
+
panEnabled: this.options.allowInteraction,
|
|
1012
1055
|
fit: true,
|
|
1013
1056
|
center: true,
|
|
1014
1057
|
minZoom: this.options.minZoom,
|
|
1015
1058
|
maxZoom: this.options.maxZoom,
|
|
1016
1059
|
zoomScaleSensitivity: this.options.zoomScaleSensitivity,
|
|
1017
1060
|
controlIconsEnabled: false,
|
|
1018
|
-
|
|
1061
|
+
dblClickZoomEnabled: this.options.allowInteraction ? this.options.dblClickZoomEnabled : false,
|
|
1062
|
+
mouseWheelZoomEnabled: this.options.allowInteraction ? this.options.mouseWheelZoomEnabled : false,
|
|
1019
1063
|
preventMouseEventsDefault: true,
|
|
1020
1064
|
onZoom: function () {
|
|
1021
1065
|
me.setControlStatuses();
|
package/dist/svgMap.min.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! svgMap | https://github.com/StephanWagner/svgMap | MIT License | Copyright Stephan Wagner | https://stephanwagner.me */
|
|
2
|
-
.svgMap-container,.svgMap-wrapper{position:relative}.svgMap-block-zoom-notice{position:absolute;z-index:2;top:100%;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);pointer-events:none;opacity:0;color:#fff;transition:opacity 250ms}.svgMap-block-zoom-notice-active .svgMap-block-zoom-notice{pointer-events:all;top:0;opacity:1}.svgMap-block-zoom-notice>div{position:absolute;top:50%;left:0;right:0;text-align:center;padding:0 32px;transform:translateY(-50%);font-size:28px}@media (max-width:900px){.svgMap-block-zoom-notice>div{font-size:22px}}.svgMap-map-wrapper{position:relative;width:100%;padding-top:50%;overflow:hidden;background:#d9ecff;color:#111}.svgMap-map-wrapper *{box-sizing:border-box}.svgMap-map-wrapper :focus:not(:focus-visible){outline:0}.svgMap-map-wrapper .svgMap-map-image{display:block;position:absolute;top:0;left:0;width:100%;height:100%;margin:0}.svgMap-map-wrapper .svgMap-map-controls-wrapper{position:absolute;bottom:10px;left:10px;z-index:1;display:flex;overflow:hidden;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-map-controls-move,.svgMap-map-wrapper .svgMap-map-controls-zoom{display:flex;margin-right:5px;overflow:hidden;background:#fff}.svgMap-map-wrapper .svgMap-map-controls-move:last-child,.svgMap-map-wrapper .svgMap-map-controls-zoom:last-child{margin-right:0}.svgMap-map-wrapper .svgMap-control-button{background-color:#fff;border:none;border-radius:0;color:#fff;font:inherit;line-height:inherit;margin:0;padding:0;overflow:visible;text-transform:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;width:32px;height:32px;position:relative}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#ccc;transition:background-color 250ms}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{width:11px;height:3px}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::before{background:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::before{background:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button::before{width:11px;height:11px;background:0 0;border:2px solid #ccc;transition:border-color 250ms}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:hover::before{background:0 0;border-color:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:active::before{background:0 0;border-color:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::before{background:#eee}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled{cursor:default}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled::before{border:2px solid #eee;background:0 0}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-in-button::after{width:3px;height:11px}.svgMap-map-wrapper .svgMap-map-continent-controls-wrapper{position:absolute;top:10px;right:10px;z-index:1;display:flex;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-country{stroke:#fff;stroke-width:1;stroke-linejoin:round;vector-effect:non-scaling-stroke;transition:fill 250ms,stroke 250ms}.svgMap-map-wrapper .svgMap-country[data-link]{cursor:pointer}@media (hover:hover){.svgMap-map-wrapper .svgMap-country:hover{stroke:#333;stroke-width:1.5}}.svgMap-map-wrapper .svgMap-country.svgMap-active{stroke:#333;stroke-width:1.5}.svgMap-tooltip{box-shadow:0 0 3px rgba(0,0,0,.2);position:absolute;z-index:2;border-radius:2px;background:#fff;transform:translate(-50%,-100%);border-bottom:1px solid #111;display:none;pointer-events:none;min-width:60px}.svgMap-tooltip.svgMap-tooltip-flipped{transform:translate(-50%,0);border-bottom:0;border-top:1px solid #111}.svgMap-tooltip.svgMap-active{display:block}.svgMap-tooltip .svgMap-tooltip-content-container{position:relative;padding:10px 20px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container{text-align:center;margin:2px 0 5px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container.svgMap-tooltip-flag-container-emoji{font-size:50px;line-height:0;padding:25px 0 15px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container .svgMap-tooltip-flag{display:block;margin:auto;width:auto;height:32px;padding:2px;background:rgba(0,0,0,.15);border-radius:2px}.svgMap-tooltip .svgMap-tooltip-title{white-space:nowrap;font-size:18px;line-height:28px;padding:0 0 8px;text-align:center}.svgMap-tooltip .svgMap-tooltip-content{white-space:nowrap;text-align:center;font-size:14px;color:#777;margin:-5px 0 0}.svgMap-tooltip .svgMap-tooltip-content table{padding:0;border-spacing:0;margin:auto}.svgMap-tooltip .svgMap-tooltip-content table td{padding:2px 0;text-align:left}.svgMap-tooltip .svgMap-tooltip-content table td span{color:#111}.svgMap-tooltip .svgMap-tooltip-content table td:first-child{padding-right:10px;text-align:right}.svgMap-tooltip .svgMap-tooltip-content table td sup{vertical-align:baseline;position:relative;top:-5px}.svgMap-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data{padding:2px 0;color:#777;font-style:italic}.svgMap-tooltip .svgMap-tooltip-pointer{position:absolute;top:100%;left:50%;transform:translateX(-50%);overflow:hidden;height:10px;width:30px}.svgMap-tooltip .svgMap-tooltip-pointer::after{content:"";width:20px;height:20px;background:#fff;border:1px solid #111;position:absolute;bottom:6px;left:50%;transform:translateX(-50%) rotate(45deg)}.svgMap-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer{bottom:auto;top:-10px;transform:translateX(-50%) scaleY(-1)}
|
|
2
|
+
.svgMap-container,.svgMap-wrapper{position:relative}.svgMap-block-zoom-notice{position:absolute;z-index:2;top:100%;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);pointer-events:none;opacity:0;color:#fff;transition:opacity 250ms}.svgMap-block-zoom-notice-active .svgMap-block-zoom-notice{pointer-events:all;top:0;opacity:1}.svgMap-block-zoom-notice>div{position:absolute;top:50%;left:0;right:0;text-align:center;padding:0 32px;transform:translateY(-50%);font-size:28px}@media (max-width:900px){.svgMap-block-zoom-notice>div{font-size:22px}}.svgMap-map-wrapper{position:relative;width:100%;padding-top:50%;overflow:hidden;background:#d9ecff;color:#111}.svgMap-map-wrapper *{box-sizing:border-box}.svgMap-map-wrapper :focus:not(:focus-visible){outline:0}.svgMap-map-wrapper .svgMap-map-image{display:block;position:absolute;top:0;left:0;width:100%;height:100%;margin:0}.svgMap-map-wrapper .svgMap-map-controls-wrapper{position:absolute;bottom:10px;left:10px;z-index:1;display:flex;overflow:hidden;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-disabled{display:none}.svgMap-map-wrapper .svgMap-map-controls-move,.svgMap-map-wrapper .svgMap-map-controls-zoom{display:flex;margin-right:5px;overflow:hidden;background:#fff}.svgMap-map-wrapper .svgMap-map-controls-move:last-child,.svgMap-map-wrapper .svgMap-map-controls-zoom:last-child{margin-right:0}.svgMap-map-wrapper .svgMap-control-button{background-color:#fff;border:none;border-radius:0;color:#fff;font:inherit;line-height:inherit;margin:0;padding:0;overflow:visible;text-transform:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;width:32px;height:32px;position:relative}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#ccc;transition:background-color 250ms}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button::before{width:11px;height:3px}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:hover::before{background:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button:active::before{background:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button::before{width:11px;height:11px;background:0 0;border:2px solid #ccc;transition:border-color 250ms}@media (hover:hover){.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:hover::before{background:0 0;border-color:#000}}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button:active::before{background:0 0;border-color:#000}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::after,.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-disabled::before{background:#eee}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled{cursor:default}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-button.svgMap-zoom-reset-button.svgMap-disabled::before{border:2px solid #eee;background:0 0}.svgMap-map-wrapper .svgMap-control-button.svgMap-zoom-in-button::after{width:3px;height:11px}.svgMap-map-wrapper .svgMap-map-continent-controls-wrapper{position:absolute;top:10px;right:10px;z-index:1;display:flex;border-radius:2px;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.svgMap-map-wrapper .svgMap-country{stroke:#fff;stroke-width:1;stroke-linejoin:round;vector-effect:non-scaling-stroke;transition:fill 250ms,stroke 250ms}.svgMap-map-wrapper .svgMap-country[data-link]{cursor:pointer}@media (hover:hover){.svgMap-map-wrapper .svgMap-country:hover{stroke:#333;stroke-width:1.5}}.svgMap-map-wrapper .svgMap-country.svgMap-active{stroke:#333;stroke-width:1.5}.svgMap-tooltip{box-shadow:0 0 3px rgba(0,0,0,.2);position:absolute;z-index:2;border-radius:2px;background:#fff;transform:translate(-50%,-100%);border-bottom:1px solid #111;display:none;pointer-events:none;min-width:60px}.svgMap-tooltip.svgMap-tooltip-flipped{transform:translate(-50%,0);border-bottom:0;border-top:1px solid #111}.svgMap-tooltip.svgMap-active{display:block}.svgMap-tooltip .svgMap-tooltip-content-container{position:relative;padding:10px 20px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container{text-align:center;margin:2px 0 5px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container.svgMap-tooltip-flag-container-emoji{font-size:50px;line-height:0;padding:25px 0 15px}.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container .svgMap-tooltip-flag{display:block;margin:auto;width:auto;height:32px;padding:2px;background:rgba(0,0,0,.15);border-radius:2px}.svgMap-tooltip .svgMap-tooltip-title{white-space:nowrap;font-size:18px;line-height:28px;padding:0 0 8px;text-align:center}.svgMap-tooltip .svgMap-tooltip-content{white-space:nowrap;text-align:center;font-size:14px;color:#777;margin:-5px 0 0}.svgMap-tooltip .svgMap-tooltip-content table{padding:0;border-spacing:0;margin:auto}.svgMap-tooltip .svgMap-tooltip-content table td{padding:2px 0;text-align:left}.svgMap-tooltip .svgMap-tooltip-content table td span{color:#111}.svgMap-tooltip .svgMap-tooltip-content table td:first-child{padding-right:10px;text-align:right}.svgMap-tooltip .svgMap-tooltip-content table td sup{vertical-align:baseline;position:relative;top:-5px}.svgMap-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data{padding:2px 0;color:#777;font-style:italic}.svgMap-tooltip .svgMap-tooltip-pointer{position:absolute;top:100%;left:50%;transform:translateX(-50%);overflow:hidden;height:10px;width:30px}.svgMap-tooltip .svgMap-tooltip-pointer::after{content:"";width:20px;height:20px;background:#fff;border:1px solid #111;position:absolute;bottom:6px;left:50%;transform:translateX(-50%) rotate(45deg)}.svgMap-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer{bottom:auto;top:-10px;transform:translateX(-50%) scaleY(-1)}
|