overpassql/fixes/edit_tag.js

46 lines
1.5 KiB
JavaScript

import layers from 'josm/layers'
import { buildChangeCommand } from 'josm/command'
function editTag () {
const layer = layers.activeLayer
if (layer == null) return
const op = Java.type('javax.swing.JOptionPane')
const selection = layer.data.getSelected().toArray()
if (!selection.length) {
op.showMessageDialog(null, 'The selection does not contain any item. Please, select something before.', 'No items selected', op.ERROR_MESSAGE)
return
}
const tags = [...selection.reduce((acc, elem) => { elem.getKeys().keySet().forEach(x => acc.add(x)); return acc }, new Set())].sort()
const tag = op.showInputDialog(null, 'Choose tag to edit', '', op.QUESTION_MESSAGE, null, tags, tags[0])
if (tag === null) return
const search = op.showInputDialog('1. Initial string (or regex) to be replaced')
if (search === null) return
const replacement = op.showInputDialog('2. New string to update the occurrences with')
if (replacement === null) return
const results = []
for (let i = 0; i < selection.length; i++) {
const element = selection[i]
const { [tag]: key } = element.getKeys()
if (key) {
const _key = key.replace(new RegExp(search, 'g'), replacement)
buildChangeCommand(element, { tags: { [tag]: _key.toString() } }).applyTo(layer)
results.push([key, _key])
}
}
// Results panel
const panel = new javax.swing.JPanel()
panel.add(new javax.swing.JScrollPane(new javax.swing.JTable(results, ['From', 'To'])))
op.showMessageDialog(null, panel, 'Results', op.INFORMATION_MESSAGE)
}
editTag()