svgmap 2.20.1 → 2.21.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 +22 -0
- package/dist/index.cjs +186 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +186 -4
- package/dist/index.js.map +1 -1
- package/dist/svg-map.css +9 -0
- package/dist/svg-map.min.css +1 -1
- package/dist/svg-map.umd.js +186 -4
- package/dist/svg-map.umd.js.map +1 -1
- package/dist/svg-map.umd.min.js +1 -1
- package/dist/svgMap.css +9 -0
- package/dist/svgMap.js +186 -4
- package/dist/svgMap.js.map +1 -1
- package/dist/svgMap.min.css +1 -1
- package/dist/svgMap.min.js +1 -1
- package/package.json +1 -1
- package/src/js/core/svg-map.js +186 -4
- package/src/scss/map.scss +11 -0
package/dist/svg-map.css
CHANGED
|
@@ -204,6 +204,15 @@
|
|
|
204
204
|
cursor: pointer;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
+
.svgMap-pin-group {
|
|
208
|
+
pointer-events: none;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.svgMap-pin {
|
|
212
|
+
vector-effect: non-scaling-stroke;
|
|
213
|
+
transition: r 250ms;
|
|
214
|
+
}
|
|
215
|
+
|
|
207
216
|
.svgMap-tooltip,
|
|
208
217
|
.svgMap-persistent-tooltip {
|
|
209
218
|
box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
|
package/dist/svg-map.min.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.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;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-controls-position-bottomLeft{bottom:10px;left:10px}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-controls-position-bottomRight{bottom:10px;right:10px}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-controls-position-topLeft{top:10px;left:10px}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-controls-position-topRight{top:10px;right:10px}.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:0;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{fill:var(--svg-map-country-fill, #E2E2E2);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],.svgMap-wrapper.svgMap-country-click-callback .svgMap-map-wrapper .svgMap-country{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-persistent-tooltip,.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;pointer-events:none;min-width:60px}.svgMap-persistent-tooltip.svgMap-tooltip-flipped,.svgMap-tooltip.svgMap-tooltip-flipped{transform:translate(-50%,0);border-bottom:0;border-top:1px solid #111}.svgMap-persistent-tooltip .svgMap-tooltip-content-container,.svgMap-tooltip .svgMap-tooltip-content-container{position:relative;padding:10px 20px}.svgMap-persistent-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container,.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container{text-align:center;margin:2px 0 5px}.svgMap-persistent-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container.svgMap-tooltip-flag-container-emoji,.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-persistent-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container .svgMap-tooltip-flag,.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-persistent-tooltip .svgMap-tooltip-title,.svgMap-tooltip .svgMap-tooltip-title{white-space:nowrap;font-size:18px;line-height:28px;padding:0 0 8px;text-align:center}.svgMap-persistent-tooltip .svgMap-tooltip-content,.svgMap-tooltip .svgMap-tooltip-content{white-space:nowrap;text-align:center;font-size:14px;color:#777;margin:-5px 0 0}.svgMap-persistent-tooltip .svgMap-tooltip-content table,.svgMap-tooltip .svgMap-tooltip-content table{padding:0;border-spacing:0;margin:auto}.svgMap-persistent-tooltip .svgMap-tooltip-content table td,.svgMap-tooltip .svgMap-tooltip-content table td{padding:2px 0;text-align:left}.svgMap-persistent-tooltip .svgMap-tooltip-content table td span,.svgMap-tooltip .svgMap-tooltip-content table td span{color:#111}.svgMap-persistent-tooltip .svgMap-tooltip-content table td:first-child,.svgMap-tooltip .svgMap-tooltip-content table td:first-child{padding-right:10px;text-align:right}.svgMap-persistent-tooltip .svgMap-tooltip-content table td sup,.svgMap-tooltip .svgMap-tooltip-content table td sup{vertical-align:baseline;position:relative;top:-5px}.svgMap-persistent-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data,.svgMap-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data{padding:2px 0;color:#777;font-style:italic}.svgMap-persistent-tooltip .svgMap-tooltip-pointer,.svgMap-tooltip .svgMap-tooltip-pointer{position:absolute;top:100%;left:50%;transform:translateX(-50%);overflow:hidden;height:10px;width:30px}.svgMap-persistent-tooltip .svgMap-tooltip-pointer::after,.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-persistent-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer,.svgMap-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer{bottom:auto;top:-10px;transform:translateX(-50%) scaleY(-1)}.svgMap-tooltip{display:none}.svgMap-tooltip.svgMap-active{display:block}.svgMap-persistent-tooltip-wrapper,.svgMap-persistent-tooltips{pointer-events:none}.svgMap-persistent-tooltip-wrapper{overflow:visible}.svgMap-persistent-tooltip{display:block;left:0;top:0;width:max-content}
|
|
1
|
+
.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;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-controls-position-bottomLeft{bottom:10px;left:10px}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-controls-position-bottomRight{bottom:10px;right:10px}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-controls-position-topLeft{top:10px;left:10px}.svgMap-map-wrapper .svgMap-map-controls-wrapper.svgMap-controls-position-topRight{top:10px;right:10px}.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:0;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{fill:var(--svg-map-country-fill, #E2E2E2);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],.svgMap-wrapper.svgMap-country-click-callback .svgMap-map-wrapper .svgMap-country{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-pin-group{pointer-events:none}.svgMap-pin{vector-effect:non-scaling-stroke;transition:r 250ms}.svgMap-persistent-tooltip,.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;pointer-events:none;min-width:60px}.svgMap-persistent-tooltip.svgMap-tooltip-flipped,.svgMap-tooltip.svgMap-tooltip-flipped{transform:translate(-50%,0);border-bottom:0;border-top:1px solid #111}.svgMap-persistent-tooltip .svgMap-tooltip-content-container,.svgMap-tooltip .svgMap-tooltip-content-container{position:relative;padding:10px 20px}.svgMap-persistent-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container,.svgMap-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container{text-align:center;margin:2px 0 5px}.svgMap-persistent-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container.svgMap-tooltip-flag-container-emoji,.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-persistent-tooltip .svgMap-tooltip-content-container .svgMap-tooltip-flag-container .svgMap-tooltip-flag,.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-persistent-tooltip .svgMap-tooltip-title,.svgMap-tooltip .svgMap-tooltip-title{white-space:nowrap;font-size:18px;line-height:28px;padding:0 0 8px;text-align:center}.svgMap-persistent-tooltip .svgMap-tooltip-content,.svgMap-tooltip .svgMap-tooltip-content{white-space:nowrap;text-align:center;font-size:14px;color:#777;margin:-5px 0 0}.svgMap-persistent-tooltip .svgMap-tooltip-content table,.svgMap-tooltip .svgMap-tooltip-content table{padding:0;border-spacing:0;margin:auto}.svgMap-persistent-tooltip .svgMap-tooltip-content table td,.svgMap-tooltip .svgMap-tooltip-content table td{padding:2px 0;text-align:left}.svgMap-persistent-tooltip .svgMap-tooltip-content table td span,.svgMap-tooltip .svgMap-tooltip-content table td span{color:#111}.svgMap-persistent-tooltip .svgMap-tooltip-content table td:first-child,.svgMap-tooltip .svgMap-tooltip-content table td:first-child{padding-right:10px;text-align:right}.svgMap-persistent-tooltip .svgMap-tooltip-content table td sup,.svgMap-tooltip .svgMap-tooltip-content table td sup{vertical-align:baseline;position:relative;top:-5px}.svgMap-persistent-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data,.svgMap-tooltip .svgMap-tooltip-content .svgMap-tooltip-no-data{padding:2px 0;color:#777;font-style:italic}.svgMap-persistent-tooltip .svgMap-tooltip-pointer,.svgMap-tooltip .svgMap-tooltip-pointer{position:absolute;top:100%;left:50%;transform:translateX(-50%);overflow:hidden;height:10px;width:30px}.svgMap-persistent-tooltip .svgMap-tooltip-pointer::after,.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-persistent-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer,.svgMap-tooltip.svgMap-tooltip-flipped .svgMap-tooltip-pointer{bottom:auto;top:-10px;transform:translateX(-50%) scaleY(-1)}.svgMap-tooltip{display:none}.svgMap-tooltip.svgMap-active{display:block}.svgMap-persistent-tooltip-wrapper,.svgMap-persistent-tooltips{pointer-events:none}.svgMap-persistent-tooltip-wrapper{overflow:visible}.svgMap-persistent-tooltip{display:block;left:0;top:0;width:max-content}
|
package/dist/svg-map.umd.js
CHANGED
|
@@ -2379,7 +2379,34 @@
|
|
|
2379
2379
|
showContinentSelector: false,
|
|
2380
2380
|
|
|
2381
2381
|
// Reset zoom on resize
|
|
2382
|
-
resetZoomOnResize: false
|
|
2382
|
+
resetZoomOnResize: false,
|
|
2383
|
+
|
|
2384
|
+
// Static pins: false | string[] | function(countryID, countryValues) => boolean
|
|
2385
|
+
staticPins: false,
|
|
2386
|
+
|
|
2387
|
+
// Default pin fill color
|
|
2388
|
+
pinColor: '#000000',
|
|
2389
|
+
|
|
2390
|
+
// Default pin stroke color and width (circle pins; width is in screen pixels with non-scaling stroke)
|
|
2391
|
+
pinStrokeColor: '#ffffff',
|
|
2392
|
+
pinStrokeWidth: 1.5,
|
|
2393
|
+
|
|
2394
|
+
// Default pin radius in SVG units (viewBox is 2000 × 1001)
|
|
2395
|
+
pinSize: 8,
|
|
2396
|
+
|
|
2397
|
+
// Custom pin element: function(countryID, countryValues) => SVGElement | null
|
|
2398
|
+
onGetPin: null,
|
|
2399
|
+
|
|
2400
|
+
// Image URL to use as a pin instead of the default circle (can also be set per-country via values[id].pinImage)
|
|
2401
|
+
pinImage: null,
|
|
2402
|
+
|
|
2403
|
+
// Width and height of the pin image in SVG units (viewBox is 2000 × 1001)
|
|
2404
|
+
pinImageWidth: 20,
|
|
2405
|
+
pinImageHeight: 20,
|
|
2406
|
+
|
|
2407
|
+
// Offset from computed pin position, in SVG units (added after auto center or pinX/pinY)
|
|
2408
|
+
pinOffsetX: 0,
|
|
2409
|
+
pinOffsetY: 0
|
|
2383
2410
|
};
|
|
2384
2411
|
|
|
2385
2412
|
this.options = Object.assign({}, defaultOptions, options);
|
|
@@ -3253,7 +3280,7 @@
|
|
|
3253
3280
|
}
|
|
3254
3281
|
countryElement.parentNode.insertBefore(
|
|
3255
3282
|
countryElement,
|
|
3256
|
-
this.persistentTooltipGroup || null
|
|
3283
|
+
this.persistentTooltipGroup || this.pinGroup || null
|
|
3257
3284
|
);
|
|
3258
3285
|
if (setActive) {
|
|
3259
3286
|
countryElement.classList.add('svgMap-active');
|
|
@@ -3373,6 +3400,10 @@
|
|
|
3373
3400
|
this.createPersistentTooltips(countryElements);
|
|
3374
3401
|
}
|
|
3375
3402
|
|
|
3403
|
+
if (this.options.staticPins) {
|
|
3404
|
+
this.createStaticPins(countryElements);
|
|
3405
|
+
}
|
|
3406
|
+
|
|
3376
3407
|
let pointerStart = null;
|
|
3377
3408
|
let activeCountry = null;
|
|
3378
3409
|
|
|
@@ -3435,7 +3466,7 @@
|
|
|
3435
3466
|
clearActive();
|
|
3436
3467
|
countryElement.parentNode.insertBefore(
|
|
3437
3468
|
countryElement,
|
|
3438
|
-
this.persistentTooltipGroup || null
|
|
3469
|
+
this.persistentTooltipGroup || this.pinGroup || null
|
|
3439
3470
|
);
|
|
3440
3471
|
countryElement.classList.add('svgMap-active');
|
|
3441
3472
|
this.setTooltipContent(this.getTooltipContent(countryID));
|
|
@@ -3449,7 +3480,7 @@
|
|
|
3449
3480
|
clearActive();
|
|
3450
3481
|
countryElement.parentNode.insertBefore(
|
|
3451
3482
|
countryElement,
|
|
3452
|
-
this.persistentTooltipGroup || null
|
|
3483
|
+
this.persistentTooltipGroup || this.pinGroup || null
|
|
3453
3484
|
);
|
|
3454
3485
|
countryElement.classList.add('svgMap-active');
|
|
3455
3486
|
this.setTooltipContent(this.getTooltipContent(countryID));
|
|
@@ -3637,6 +3668,157 @@
|
|
|
3637
3668
|
);
|
|
3638
3669
|
}
|
|
3639
3670
|
|
|
3671
|
+
// Create static pins on the map
|
|
3672
|
+
|
|
3673
|
+
createStaticPins(countryElements) {
|
|
3674
|
+
if (this.pinGroup) {
|
|
3675
|
+
this.pinGroup.remove();
|
|
3676
|
+
}
|
|
3677
|
+
|
|
3678
|
+
this.pinGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
|
3679
|
+
this.pinGroup.classList.add('svgMap-pin-group');
|
|
3680
|
+
this.mapImage.appendChild(this.pinGroup);
|
|
3681
|
+
|
|
3682
|
+
countryElements.forEach(
|
|
3683
|
+
function (countryElement) {
|
|
3684
|
+
var countryID = countryElement.getAttribute('data-id');
|
|
3685
|
+
if (!this.shouldShowPin(countryID)) {
|
|
3686
|
+
return;
|
|
3687
|
+
}
|
|
3688
|
+
|
|
3689
|
+
var countryValues = this.options.data.values[countryID];
|
|
3690
|
+
var cx, cy;
|
|
3691
|
+
|
|
3692
|
+
if (
|
|
3693
|
+
countryValues &&
|
|
3694
|
+
countryValues.pinX != null &&
|
|
3695
|
+
countryValues.pinY != null
|
|
3696
|
+
) {
|
|
3697
|
+
cx = countryValues.pinX;
|
|
3698
|
+
cy = countryValues.pinY;
|
|
3699
|
+
} else {
|
|
3700
|
+
// Split the path at absolute M commands and use the largest sub-path
|
|
3701
|
+
// to avoid overseas territories (islands, colonies) skewing the center.
|
|
3702
|
+
var d = countryElement.getAttribute('d');
|
|
3703
|
+
var subPaths = d.split(/(?=M)/).filter((s) => s.trim().length > 0);
|
|
3704
|
+
var largestBB = null;
|
|
3705
|
+
var largestArea = -1;
|
|
3706
|
+
|
|
3707
|
+
subPaths.forEach(
|
|
3708
|
+
function (subPath) {
|
|
3709
|
+
var tmp = document.createElementNS(
|
|
3710
|
+
'http://www.w3.org/2000/svg',
|
|
3711
|
+
'path'
|
|
3712
|
+
);
|
|
3713
|
+
tmp.setAttribute('d', subPath);
|
|
3714
|
+
this.mapImage.appendChild(tmp);
|
|
3715
|
+
var bb = tmp.getBBox();
|
|
3716
|
+
var area = bb.width * bb.height;
|
|
3717
|
+
if (area > largestArea) {
|
|
3718
|
+
largestArea = area;
|
|
3719
|
+
largestBB = bb;
|
|
3720
|
+
}
|
|
3721
|
+
this.mapImage.removeChild(tmp);
|
|
3722
|
+
}.bind(this)
|
|
3723
|
+
);
|
|
3724
|
+
|
|
3725
|
+
cx = largestBB.x + largestBB.width / 2;
|
|
3726
|
+
cy = largestBB.y + largestBB.height / 2;
|
|
3727
|
+
}
|
|
3728
|
+
|
|
3729
|
+
var offsetX =
|
|
3730
|
+
countryValues && countryValues.pinOffsetX != null
|
|
3731
|
+
? countryValues.pinOffsetX
|
|
3732
|
+
: this.options.pinOffsetX;
|
|
3733
|
+
var offsetY =
|
|
3734
|
+
countryValues && countryValues.pinOffsetY != null
|
|
3735
|
+
? countryValues.pinOffsetY
|
|
3736
|
+
: this.options.pinOffsetY;
|
|
3737
|
+
cx += offsetX;
|
|
3738
|
+
cy += offsetY;
|
|
3739
|
+
|
|
3740
|
+
var color =
|
|
3741
|
+
(countryValues && countryValues.pinColor) || this.options.pinColor;
|
|
3742
|
+
var size =
|
|
3743
|
+
(countryValues && countryValues.pinSize) || this.options.pinSize;
|
|
3744
|
+
var strokeColor =
|
|
3745
|
+
(countryValues && countryValues.pinStrokeColor) ||
|
|
3746
|
+
this.options.pinStrokeColor;
|
|
3747
|
+
var strokeWidth =
|
|
3748
|
+
(countryValues && countryValues.pinStrokeWidth) ||
|
|
3749
|
+
this.options.pinStrokeWidth;
|
|
3750
|
+
|
|
3751
|
+
if (typeof this.options.onGetPin === 'function') {
|
|
3752
|
+
var custom = this.options.onGetPin(countryID, countryValues);
|
|
3753
|
+
if (custom) {
|
|
3754
|
+
custom.setAttribute(
|
|
3755
|
+
'transform',
|
|
3756
|
+
'translate(' + cx + ',' + cy + ')'
|
|
3757
|
+
);
|
|
3758
|
+
this.pinGroup.appendChild(custom);
|
|
3759
|
+
return;
|
|
3760
|
+
}
|
|
3761
|
+
}
|
|
3762
|
+
|
|
3763
|
+
var pinImage =
|
|
3764
|
+
(countryValues && countryValues.pinImage) || this.options.pinImage;
|
|
3765
|
+
|
|
3766
|
+
if (pinImage) {
|
|
3767
|
+
var pinW =
|
|
3768
|
+
(countryValues && countryValues.pinImageWidth) ||
|
|
3769
|
+
this.options.pinImageWidth;
|
|
3770
|
+
var pinH =
|
|
3771
|
+
(countryValues && countryValues.pinImageHeight) ||
|
|
3772
|
+
this.options.pinImageHeight;
|
|
3773
|
+
var img = document.createElementNS(
|
|
3774
|
+
'http://www.w3.org/2000/svg',
|
|
3775
|
+
'image'
|
|
3776
|
+
);
|
|
3777
|
+
img.setAttribute('href', pinImage);
|
|
3778
|
+
img.setAttribute('x', cx - pinW / 2);
|
|
3779
|
+
img.setAttribute('y', cy - pinH / 2);
|
|
3780
|
+
img.setAttribute('width', pinW);
|
|
3781
|
+
img.setAttribute('height', pinH);
|
|
3782
|
+
img.setAttribute('data-id', countryID);
|
|
3783
|
+
img.classList.add('svgMap-pin');
|
|
3784
|
+
this.pinGroup.appendChild(img);
|
|
3785
|
+
return;
|
|
3786
|
+
}
|
|
3787
|
+
|
|
3788
|
+
var circle = document.createElementNS(
|
|
3789
|
+
'http://www.w3.org/2000/svg',
|
|
3790
|
+
'circle'
|
|
3791
|
+
);
|
|
3792
|
+
circle.setAttribute('cx', cx);
|
|
3793
|
+
circle.setAttribute('cy', cy);
|
|
3794
|
+
circle.setAttribute('r', size);
|
|
3795
|
+
circle.setAttribute('fill', color);
|
|
3796
|
+
if (strokeWidth > 0) {
|
|
3797
|
+
circle.setAttribute('stroke', strokeColor);
|
|
3798
|
+
circle.setAttribute('stroke-width', strokeWidth);
|
|
3799
|
+
circle.setAttribute('vector-effect', 'non-scaling-stroke');
|
|
3800
|
+
}
|
|
3801
|
+
circle.setAttribute('data-id', countryID);
|
|
3802
|
+
circle.classList.add('svgMap-pin');
|
|
3803
|
+
this.pinGroup.appendChild(circle);
|
|
3804
|
+
}.bind(this)
|
|
3805
|
+
);
|
|
3806
|
+
}
|
|
3807
|
+
|
|
3808
|
+
// Check if a static pin should be shown for a country
|
|
3809
|
+
|
|
3810
|
+
shouldShowPin(countryID) {
|
|
3811
|
+
var pins = this.options.staticPins;
|
|
3812
|
+
var countryValues = this.options.data.values[countryID];
|
|
3813
|
+
if (Array.isArray(pins)) {
|
|
3814
|
+
return pins.indexOf(countryID) !== -1;
|
|
3815
|
+
}
|
|
3816
|
+
if (typeof pins === 'function') {
|
|
3817
|
+
return pins(countryID, countryValues);
|
|
3818
|
+
}
|
|
3819
|
+
return false;
|
|
3820
|
+
}
|
|
3821
|
+
|
|
3640
3822
|
// Check if a persistent tooltip should be shown on load
|
|
3641
3823
|
|
|
3642
3824
|
shouldShowTooltipOnLoad(countryID) {
|