modules/ui/tools/stop_draw.js (57 lines of code) (raw):
import { uiToolSimpleButton } from './simple_button';
import { t } from '../../util/locale';
import { modeBrowse } from '../../modes/browse';
export function uiToolStopDraw(context) {
var cancelOrFinish = 'cancel';
var tool = uiToolSimpleButton({
id: 'stop_draw',
label: function() {
if (cancelOrFinish === 'finish') {
return t('toolbar.finish');
}
return t('confirm.cancel');
},
iconName: function() {
if (cancelOrFinish === 'finish') {
return 'iD-icon-apply';
}
return 'iD-icon-close';
},
onClick: function() {
var mode = context.mode();
if (cancelOrFinish === 'finish' && mode.finish) {
mode.finish();
} else {
context.enter(modeBrowse(context));
}
},
tooltipKey: 'Esc',
barButtonClass: 'wide',
userToggleable: false
});
tool.allowed = function() {
var newCancelOrFinish = drawCancelOrFinish();
if (newCancelOrFinish) {
cancelOrFinish = newCancelOrFinish;
}
return newCancelOrFinish;
};
function drawCancelOrFinish() {
var mode = context.mode();
if (mode.id === 'draw-line' || mode.id === 'draw-area') {
var way = context.hasEntity(mode.wayID);
var wayIsDegenerate = way && new Set(way.nodes).size - 1 < (way.isArea() ? 3 : 2);
if (wayIsDegenerate) {
return 'cancel';
}
return 'finish';
} else if (mode.id === 'add-point' || mode.id === 'add-line' || mode.id === 'add-area') {
if (mode.addedEntityIDs().length === 0) {
return 'cancel';
}
return 'finish';
}
return null;
}
return tool;
}