import { t } from '../../util/locale'; export { url as text, url as number, url as tel, url as email }; export function url(field, context) { var dispatch = d3.dispatch('change'), input, entity; function i(selection) { var fieldId = 'preset-input-' + field.id; input = selection.selectAll('input') .data([0]); input.enter().append('input') .attr('type', field.type) .attr('id', fieldId) .attr('placeholder', field.placeholder() || t('inspector.unknown')); input .on('input', change(true)) .on('blur', change()) .on('change', change()); if (field.type === 'tel') { var center = entity.extent(context.graph()).center(); iD.services.nominatim.init(); iD.services.nominatim.countryCode(center, function (err, countryCode) { if (err || !iD.data.phoneFormats[countryCode]) return; selection.selectAll('#' + fieldId) .attr('placeholder', iD.data.phoneFormats[countryCode]); }); } else if (field.type === 'number') { input.attr('type', 'text'); var spinControl = selection.selectAll('.spin-control') .data([0]); var enter = spinControl.enter().append('div') .attr('class', 'spin-control'); enter.append('button') .datum(1) .attr('class', 'increment') .attr('tabindex', -1); enter.append('button') .datum(-1) .attr('class', 'decrement') .attr('tabindex', -1); spinControl.selectAll('button') .on('click', function(d) { d3.event.preventDefault(); var num = parseInt(input.node().value || 0, 10); if (!isNaN(num)) input.node().value = num + d; change()(); }); } } function change(onInput) { return function() { var t = {}; t[field.key] = input.value() || undefined; dispatch.change(t, onInput); }; } i.entity = function(_) { if (!arguments.length) return entity; entity = _; return i; }; i.tags = function(tags) { input.value(tags[field.key] || ''); }; i.focus = function() { var node = input.node(); if (node) node.focus(); }; return d3.rebind(i, dispatch, 'on'); }