2017-05-26 10:05:04 +01:00
|
|
|
//places.js
|
|
|
|
|
|
|
|
import addMap from './mapbox-utils';
|
|
|
|
import getIcon from './edit-place-icon';
|
|
|
|
|
|
|
|
let div = document.querySelector('.map');
|
|
|
|
let map = addMap(div);
|
2017-05-26 12:51:05 +01:00
|
|
|
let isDragging;
|
|
|
|
let isCursorOverPoint;
|
|
|
|
let canvas = map.getCanvasContainer();
|
2017-05-26 10:05:04 +01:00
|
|
|
|
|
|
|
let selectElem = document.querySelector('select[name="icon"]');
|
|
|
|
selectElem.addEventListener('click', function () {
|
|
|
|
let newIcon = getIcon();
|
2017-05-26 12:51:05 +01:00
|
|
|
let source = map.getSource('points');
|
2017-05-26 10:05:04 +01:00
|
|
|
if (source._data.features[0].properties.icon != newIcon) {
|
|
|
|
source._data.features[0].properties.icon = newIcon;
|
|
|
|
map.getSource('points').setData(source._data);
|
|
|
|
}
|
|
|
|
});
|
2017-05-26 12:51:05 +01:00
|
|
|
|
|
|
|
function updateFormCoords(coords) {
|
|
|
|
let latInput = document.querySelector('#latitude');
|
|
|
|
let lonInput = document.querySelector('#longitude');
|
|
|
|
latInput.value = coords.lat.toPrecision(6);
|
|
|
|
lonInput.value = coords.lng.toPrecision(6);
|
|
|
|
}
|
|
|
|
|
|
|
|
function mouseDown() {
|
|
|
|
if (!isCursorOverPoint) return;
|
|
|
|
|
|
|
|
isDragging = true;
|
|
|
|
|
|
|
|
// Set a cursor indicator
|
|
|
|
canvas.style.cursor = 'grab';
|
|
|
|
|
|
|
|
// Mouse events
|
|
|
|
map.on('mousemove', onMove);
|
|
|
|
map.once('mouseup', onUp);
|
|
|
|
}
|
|
|
|
|
|
|
|
function onMove(e) {
|
|
|
|
if (!isDragging) return;
|
|
|
|
let coords = e.lngLat;
|
|
|
|
let source = map.getSource('points');
|
|
|
|
|
|
|
|
// Set a UI indicator for dragging.
|
|
|
|
canvas.style.cursor = 'grabbing';
|
|
|
|
|
|
|
|
// Update the Point feature in `geojson` coordinates
|
|
|
|
// and call setData to the source layer `point` on it.
|
|
|
|
source._data.features[0].geometry.coordinates = [coords.lng, coords.lat];
|
|
|
|
map.getSource('points').setData(source._data);
|
|
|
|
}
|
|
|
|
|
|
|
|
function onUp(e) {
|
|
|
|
if (!isDragging) return;
|
|
|
|
let coords = e.lngLat;
|
|
|
|
|
|
|
|
// Print the coordinates of where the point had
|
|
|
|
// finished being dragged to on the map.
|
|
|
|
updateFormCoords(coords);
|
|
|
|
canvas.style.cursor = '';
|
|
|
|
isDragging = false;
|
|
|
|
|
|
|
|
// Unbind mouse events
|
|
|
|
map.off('mousemove', onMove);
|
|
|
|
}
|
|
|
|
|
|
|
|
// When the cursor enters a feature in the point layer, prepare for dragging.
|
|
|
|
map.on('mouseenter', 'points', function() {
|
|
|
|
canvas.style.cursor = 'move';
|
|
|
|
isCursorOverPoint = true;
|
|
|
|
map.dragPan.disable();
|
|
|
|
});
|
|
|
|
|
|
|
|
map.on('mouseleave', 'points', function() {
|
|
|
|
canvas.style.cursor = '';
|
|
|
|
isCursorOverPoint = false;
|
|
|
|
map.dragPan.enable();
|
|
|
|
});
|
|
|
|
|
|
|
|
map.on('mousedown', mouseDown);
|