mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 17:23:02 +00:00
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
import _ from 'lodash';
|
|
import { t } from '../../util/locale';
|
|
import { services } from '../../services';
|
|
|
|
|
|
export function uiPanelLocation(context) {
|
|
var currLocation = '';
|
|
var OSM_PRECISION = 7;
|
|
|
|
|
|
function wrap(x, min, max) {
|
|
var d = max - min;
|
|
return ((x - min) % d + d) % d + min;
|
|
}
|
|
|
|
|
|
function clamp(x, min, max) {
|
|
return Math.max(min, Math.min(x, max));
|
|
}
|
|
|
|
|
|
function redraw(selection) {
|
|
selection.html('');
|
|
|
|
var list = selection
|
|
.append('ul');
|
|
|
|
// Mouse coordinates
|
|
var coord = context.map().mouseCoordinates();
|
|
if (coord.some(isNaN)) {
|
|
coord = context.map().center();
|
|
}
|
|
|
|
var coordStr =
|
|
clamp(coord[1], -90, 90).toFixed(OSM_PRECISION) + ', ' +
|
|
wrap(coord[0], -180, 180).toFixed(OSM_PRECISION);
|
|
|
|
list
|
|
.append('li')
|
|
.text(coordStr);
|
|
|
|
// Location Info
|
|
selection
|
|
.append('div')
|
|
.attr('class', 'location-info')
|
|
.text(currLocation || ' ');
|
|
|
|
debouncedGetLocation(selection, coord);
|
|
}
|
|
|
|
|
|
var debouncedGetLocation = _.debounce(getLocation, 250);
|
|
function getLocation(selection, coord) {
|
|
if (!services.geocoder) {
|
|
currLocation = t('info_panels.location.unknown_location');
|
|
selection.selectAll('.location-info')
|
|
.text(currLocation);
|
|
} else {
|
|
services.geocoder.reverse(coord, function(err, result) {
|
|
currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
|
|
selection.selectAll('.location-info')
|
|
.text(currLocation);
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
var panel = function(selection) {
|
|
selection.call(redraw);
|
|
|
|
context.surface()
|
|
.on('mousemove.info-location', function() {
|
|
selection.call(redraw);
|
|
});
|
|
};
|
|
|
|
panel.off = function() {
|
|
context.surface()
|
|
.on('mousemove.info-location', null);
|
|
};
|
|
|
|
panel.id = 'location';
|
|
panel.title = t('info_panels.location.title');
|
|
panel.key = t('info_panels.location.key');
|
|
|
|
|
|
return panel;
|
|
}
|