From 16ec25753d093ea67dfff74b54371b10be3f5313 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Fri, 3 May 2019 14:42:35 -0400 Subject: [PATCH] Support escaping of tricky characters, support quoted strings keys or values can be quoted or unquoted: - leisure=park - leisure="park" - "leisure"=park - "leisure"="park" --- modules/ui/raw_tag_editor.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/modules/ui/raw_tag_editor.js b/modules/ui/raw_tag_editor.js index 77d9243c8..135369496 100644 --- a/modules/ui/raw_tag_editor.js +++ b/modules/ui/raw_tag_editor.js @@ -299,10 +299,29 @@ export function uiRawTagEditor(context) { } + function stringify(s) { + return JSON.stringify(s).slice(1, -1); // without leading/trailing " + } + + function unstringify(s) { + var leading = ''; + var trailing = ''; + if (s.length < 1 || s.charAt(0) !== '"') { + leading = '"'; + } + if (s.length < 2 || s.charAt(s.length - 1) !== '"' || + (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\') + ) { + trailing = '"'; + } + return JSON.parse(leading + s + trailing); + } + + function rowsToText(rows) { var str = rows .filter(function(row) { return row.key && row.key.trim() !== ''; }) - .map(function(row) { return row.key + '=' + row.value; }) + .map(function(row) { return stringify(row.key) + '=' + stringify(row.value); }) .join('\n'); return _state === 'hover' ? str : str + '\n'; @@ -315,8 +334,8 @@ export function uiRawTagEditor(context) { newText.split('\n').forEach(function(row) { var m = row.match(/^\s*([^=]+)=(.*)$/); if (m !== null) { - var k = m[1].trim(); - var v = m[2].trim(); + var k = unstringify(m[1].trim()); + var v = unstringify(m[2].trim()); newTags[k] = v; } });