Files
iD/modules/presets/field.js

58 lines
2.2 KiB
JavaScript

import { localizer, t } from '../core/localizer';
import { utilSafeClassName } from '../util/util';
//
// `presetField` decorates a given `field` Object
// with some extra methods for searching and matching geometry
//
export function presetField(fieldID, field, allFields) {
allFields = allFields || {};
let _this = Object.assign({}, field); // shallow copy
_this.id = fieldID;
// for use in classes, element ids, css selectors
_this.safeid = utilSafeClassName(fieldID);
_this.matchGeometry = (geom) => !_this.geometry || _this.geometry.indexOf(geom) !== -1;
_this.matchAllGeometry = (geometries) => {
return !_this.geometry || geometries.every(geom => _this.geometry.indexOf(geom) !== -1);
};
_this.t = (scope, options) => t(`_tagging.presets.fields.${fieldID}.${scope}`, options);
_this.t.html = (scope, options) => t.html(`_tagging.presets.fields.${fieldID}.${scope}`, options);
_this.t.append = (scope, options) => t.append(`_tagging.presets.fields.${fieldID}.${scope}`, options);
_this.hasTextForStringId = (scope) => localizer.hasTextForStringId(`_tagging.presets.fields.${fieldID}.${scope}`);
_this.resolveReference = which => {
const referenceRegex = /^\{(.*)\}$/;
const match = (field[which] || '').match(referenceRegex);
if (match) {
const field = allFields[match[1]];
if (field) {
return field;
}
console.error(`Unable to resolve referenced field: ${match[1]}`); // eslint-disable-line no-console
}
return _this;
};
_this.title = () => _this.overrideLabel || _this.resolveReference('label').t('label', { 'default': fieldID });
_this.label = () => _this.overrideLabel ?
selection => selection.text(_this.overrideLabel) :
_this.resolveReference('label').t.append('label', { 'default': fieldID });
_this.placeholder = () => _this.resolveReference('placeholder').t('placeholder', { 'default': '' });
_this.originalTerms = (_this.terms || []).join();
_this.terms = () => _this.resolveReference('label').t('terms', { 'default': _this.originalTerms })
.toLowerCase().trim().split(/\s*,+\s*/);
_this.increment = _this.type === 'number' ? (_this.increment || 1) : undefined;
return _this;
}