+ function uiFieldRoadheight(field, context) {
+ var dispatch = dispatch$8('change');
+ var primaryUnitInput = select(null);
+ var primaryInput = select(null);
+ var secondaryInput = select(null);
+ var secondaryUnitInput = select(null);
+ var _entityIDs = [];
+
+ var _tags;
+
+ var _isImperial;
+
+ var primaryUnits = [{
+ value: 'm',
+ title: _t('inspector.roadheight.meter')
+ }, {
+ value: 'ft',
+ title: _t('inspector.roadheight.foot')
+ }];
+ var unitCombo = uiCombobox(context, 'roadheight-unit').data(primaryUnits);
+
+ function roadheight(selection) {
+ var wrap = selection.selectAll('.form-field-input-wrap').data([0]);
+ wrap = wrap.enter().append('div').attr('class', 'form-field-input-wrap form-field-input-' + field.type).merge(wrap);
+ primaryInput = wrap.selectAll('input.roadheight-number').data([0]);
+ primaryInput = primaryInput.enter().append('input').attr('type', 'text').attr('class', 'roadheight-number').attr('id', field.domId).call(utilNoAuto).merge(primaryInput);
+ primaryInput.on('change', change).on('blur', change);
+ var loc = combinedEntityExtent().center();
+ _isImperial = roadHeightUnit(loc) === 'ft';
+ primaryUnitInput = wrap.selectAll('input.roadheight-unit').data([0]);
+ primaryUnitInput = primaryUnitInput.enter().append('input').attr('type', 'text').attr('class', 'roadheight-unit').call(unitCombo).merge(primaryUnitInput);
+ primaryUnitInput.on('blur', changeUnits).on('change', changeUnits);
+ secondaryInput = wrap.selectAll('input.roadheight-secondary-number').data([0]);
+ secondaryInput = secondaryInput.enter().append('input').attr('type', 'text').attr('class', 'roadheight-secondary-number').call(utilNoAuto).merge(secondaryInput);
+ secondaryInput.on('change', change).on('blur', change);
+ secondaryUnitInput = wrap.selectAll('input.roadheight-secondary-unit').data([0]);
+ secondaryUnitInput = secondaryUnitInput.enter().append('input').attr('type', 'text').call(utilNoAuto).classed('disabled', true).classed('roadheight-secondary-unit', true).attr('readonly', 'readonly').merge(secondaryUnitInput);
+
+ function changeUnits() {
+ _isImperial = utilGetSetValue(primaryUnitInput) === 'ft';
+ utilGetSetValue(primaryUnitInput, _isImperial ? 'ft' : 'm');
+ setUnitSuggestions();
+ change();
+ }
+ }
+
+ function setUnitSuggestions() {
+ utilGetSetValue(primaryUnitInput, _isImperial ? 'ft' : 'm');
+ }
+
+ function change() {
+ var tag = {};
+ var primaryValue = utilGetSetValue(primaryInput).trim();
+ var secondaryValue = utilGetSetValue(secondaryInput).trim(); // don't override multiple values with blank string
+
+ if (!primaryValue && !secondaryValue && Array.isArray(_tags[field.key])) return;
+
+ if (!primaryValue && !secondaryValue) {
+ tag[field.key] = undefined;
+ } else if (isNaN(primaryValue) || isNaN(secondaryValue) || !_isImperial) {
+ tag[field.key] = context.cleanTagValue(primaryValue);
+ } else {
+ if (primaryValue !== '') {
+ primaryValue = context.cleanTagValue(primaryValue + '\'');
+ }
+
+ if (secondaryValue !== '') {
+ secondaryValue = context.cleanTagValue(secondaryValue + '"');
+ }
+
+ tag[field.key] = primaryValue + secondaryValue;
+ }
+
+ dispatch.call('change', this, tag);
+ }
+
+ roadheight.tags = function (tags) {
+ _tags = tags;
+ var primaryValue = tags[field.key];
+ var secondaryValue;
+ var isMixed = Array.isArray(primaryValue);
+
+ if (!isMixed) {
+ if (primaryValue && (primaryValue.indexOf('\'') >= 0 || primaryValue.indexOf('"') >= 0)) {
+ secondaryValue = primaryValue.match(/(-?[\d.]+)"/);
+
+ if (secondaryValue !== null) {
+ secondaryValue = secondaryValue[1];
+ }
+
+ primaryValue = primaryValue.match(/(-?[\d.]+)'/);
+
+ if (primaryValue !== null) {
+ primaryValue = primaryValue[1];
+ }
+
+ _isImperial = true;
+ } else if (primaryValue) {
+ _isImperial = false;
+ }
+ }
+
+ setUnitSuggestions();
+ utilGetSetValue(primaryInput, typeof primaryValue === 'string' ? primaryValue : '').attr('title', isMixed ? primaryValue.filter(Boolean).join('\n') : null).attr('placeholder', isMixed ? _t('inspector.multiple_values') : _t('inspector.unknown')).classed('mixed', isMixed);
+ utilGetSetValue(secondaryInput, typeof secondaryValue === 'string' ? secondaryValue : '').attr('placeholder', isMixed ? _t('inspector.multiple_values') : _isImperial ? '0' : null).classed('mixed', isMixed).classed('disabled', !_isImperial).attr('readonly', _isImperial ? null : 'readonly');
+ secondaryUnitInput.attr('value', _isImperial ? _t('inspector.roadheight.inch') : null);
+ };
+
+ roadheight.focus = function () {
+ primaryInput.node().focus();
+ };
+
+ roadheight.entityIDs = function (val) {
+ _entityIDs = val;
+ };
+
+ function combinedEntityExtent() {
+ return _entityIDs && _entityIDs.length && utilTotalExtent(_entityIDs, context.graph());
+ }
+
+ return utilRebind(roadheight, dispatch, 'on');
+ }
+