leaflet-labels
Version:
Leaflet multiple data source labels
118 lines (102 loc) • 4.02 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var L = require('leaflet');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var L__namespace = /*#__PURE__*/_interopNamespace(L);
var circleStr = '<div class="wr-circle" ><div>北</div><div>西</div><div>东</div><div>南</div></div>';
var dataModel = ['ecmwf', 'page', 'currently', 'not', 'open', 'please', 'settings'];
function labelFunc() {
return '<div data-model="{}" data-modeldesc="{}" class="wr-rotated" style="transform: rotate({}deg); z-index: {}">' + '<div data-content="{}" style="' + 'background: linear-gradient(to right, {}, {}, rgb(244, 244, 244));' + 'width: {}px;' + 'border-left-color: rgb(244, 244, 244);' + '"></div>' + '</div>';
}
var colorBands = ['rgb(5, 201, 213)-rgb(8, 221, 234)', 'rgb(2, 215, 106)-rgb(4, 228, 112)', 'rgb(4, 108, 210)-rgb(5, 117, 226)', 'rgb(190, 208, 3)-rgb(204, 224, 4)', 'rgb(213, 146, 3)-rgb(229, 157, 4)', 'rgb(151, 4, 214)-rgb(162, 4, 230)', 'rgb(4, 211, 161)-rgb(4, 229, 174)', 'rgb(135, 209, 2)-rgb(147, 228, 3)'];
// Convert data to leaflet Maker
var option = {
width: 58,
iconAnchor: [0, 0]
};
function useMarkerLabels(latLng, labelData) {
var iconAnchor = option.iconAnchor;
var tempLayer;
var marker = L__namespace.marker(latLng, {
icon: L__namespace.divIcon({
iconSize: [20, 20],
iconAnchor: iconAnchor,
className: 'caircleMarker',
html: '<div class="icon-dot"><div class="pulsating-icon"></div></div>'
}),
draggable: false
});
var labels = L__namespace.marker(latLng, {
icon: L__namespace.divIcon({
iconSize: [20, 20],
iconAnchor: iconAnchor,
className: 'poiMarker',
html: unionHtmlEmlement(labelData)
}),
draggable: false
});
function circleDrawer() {
return circleStr;
}
function labelDrawer(labelData, enumIndex) {
if (labelData.dir < 0 || labelData.dir > 360) {
throw new Error('Direction value out of limit');
}
var labelStr = labelFunc().replace('{}', dataModel[enumIndex % 8] + enumIndex).replace('{}', labelData.typeNmae).replace('{}', labelData.dir + '').replace('{}', !!enumIndex ? '0' : '10').replace('{}', labelData.value);
return contentDrawer(labelStr, enumIndex % 8).replace('{}', option.width + '');
}
function contentDrawer(label, index) {
var colorData = colorBands[index].split('-');
return label.replace('{}', colorData[0]).replace('{}', colorData[1]);
}
function alternate() {
var lastID = 0;
tempLayer = setInterval(function () {
var currentID = lastID + 1 >= labelData.length ? 0 : lastID + 1;
var htmlElement1 = '[data-model="' + dataModel[lastID % 8] + lastID + '"]';
var htmlElement2 = '[data-model="' + dataModel[currentID % 8] + currentID + '"]';
document.querySelectorAll(htmlElement1).forEach(function (_) {
_.style.zIndex = '0';
});
document.querySelectorAll(htmlElement2).forEach(function (_) {
_.style.zIndex = '10';
});
lastID = currentID;
}, 1500);
}
function removeAlternate() {
clearInterval(tempLayer);
}
function unionHtmlEmlement(lableData) {
var parentDivFront = '<div class="wind-radar-icon">';
var parentDivBack = '</div>';
var labelArr = [];
lableData.forEach(function (item, index) {
return labelArr.push(labelDrawer(item, index));
});
return parentDivFront + circleDrawer() + labelArr.join('') + parentDivBack;
}
return {
marker: marker,
labels: labels,
alternate: alternate,
removeAlternate: removeAlternate
};
}
exports.useMarkerLabels = useMarkerLabels;