mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-14 17:52:55 +00:00
This is because, like tooltip(), it doesn't always make sense to call it, and it should never get called if the operation is not available.
82 lines
2.5 KiB
JavaScript
82 lines
2.5 KiB
JavaScript
import _ from 'lodash';
|
|
import { t } from '../util/locale';
|
|
import { actionReflect } from '../actions/index';
|
|
import { behaviorOperation } from '../behavior/index';
|
|
import { geoExtent } from '../geo/index';
|
|
|
|
|
|
export function operationReflectShort(selectedIDs, context) {
|
|
return operationReflect(selectedIDs, context, 'short');
|
|
}
|
|
|
|
|
|
export function operationReflectLong(selectedIDs, context) {
|
|
return operationReflect(selectedIDs, context, 'long');
|
|
}
|
|
|
|
|
|
export function operationReflect(selectedIDs, context, axis) {
|
|
axis = axis || 'long';
|
|
var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
|
|
extent = selectedIDs.reduce(function(extent, id) {
|
|
return extent.extend(context.entity(id).extent(context.graph()));
|
|
}, geoExtent());
|
|
|
|
|
|
var operation = function() {
|
|
var action = actionReflect(selectedIDs, context.projection)
|
|
.useLongAxis(Boolean(axis === 'long'));
|
|
context.perform(action, operation.annotation());
|
|
};
|
|
|
|
|
|
operation.available = function() {
|
|
return _.some(selectedIDs, hasArea);
|
|
|
|
function hasArea(id) {
|
|
var entity = context.entity(id);
|
|
return (entity.type === 'way' && entity.isClosed()) ||
|
|
(entity.type ==='relation' && entity.isMultipolygon());
|
|
}
|
|
};
|
|
|
|
|
|
operation.disabled = function() {
|
|
var reason;
|
|
if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
|
|
reason = 'too_large';
|
|
} else if (_.some(selectedIDs, context.hasHiddenConnections)) {
|
|
reason = 'connected_to_hidden';
|
|
} else if (_.some(selectedIDs, incompleteRelation)) {
|
|
reason = 'incomplete_relation';
|
|
}
|
|
return reason;
|
|
|
|
function incompleteRelation(id) {
|
|
var entity = context.entity(id);
|
|
return entity.type === 'relation' && !entity.isComplete(context.graph());
|
|
}
|
|
};
|
|
|
|
|
|
operation.tooltip = function() {
|
|
var disable = operation.disabled();
|
|
return disable ?
|
|
t('operations.reflect.' + disable + '.' + multi) :
|
|
t('operations.reflect.description.' + axis + '.' + multi);
|
|
};
|
|
|
|
|
|
operation.annotation = function() {
|
|
return t('operations.reflect.annotation.' + axis + '.' + multi);
|
|
};
|
|
|
|
|
|
operation.id = 'reflect-' + axis;
|
|
operation.keys = [t('operations.reflect.key.' + axis)];
|
|
operation.title = t('operations.reflect.title.' + axis);
|
|
operation.behavior = behaviorOperation(context).which(operation);
|
|
|
|
return operation;
|
|
}
|