modules/ui/zoom_to_selection.js (56 lines of code) (raw):
import { t, localizer } from '../core/localizer';
import { uiTooltip } from './tooltip';
import { svgIcon } from '../svg/icon';
export function uiZoomToSelection(context) {
function isDisabled() {
var mode = context.mode();
return !mode || !mode.zoomToSelected;
}
var _lastPointerUpType;
function pointerup(d3_event) {
_lastPointerUpType = d3_event.pointerType;
}
function click(d3_event) {
d3_event.preventDefault();
if (isDisabled()) {
if (_lastPointerUpType === 'touch' || _lastPointerUpType === 'pen') {
context.ui().flash
.duration(2000)
.iconName('#iD-icon-framed-dot')
.iconClass('disabled')
.label(t.html('inspector.zoom_to.no_selection'))();
}
} else {
var mode = context.mode();
if (mode && mode.zoomToSelected) {
mode.zoomToSelected();
}
}
_lastPointerUpType = null;
}
return function(selection) {
var tooltipBehavior = uiTooltip()
.placement((localizer.textDirection() === 'rtl') ? 'right' : 'left')
.title(function() {
if (isDisabled()) {
return t.html('inspector.zoom_to.no_selection');
}
return t.html('inspector.zoom_to.title');
})
.keys([t('inspector.zoom_to.key')]);
var button = selection
.append('button')
.on('pointerup', pointerup)
.on('click', click)
.call(svgIcon('#iD-icon-framed-dot', 'light'))
.call(tooltipBehavior);
function setEnabledState() {
button.classed('disabled', isDisabled());
if (!button.select('.tooltip.in').empty()) {
button.call(tooltipBehavior.updateContent);
}
}
context.on('enter.uiZoomToSelection', setEnabledState);
setEnabledState();
};
}