From 29650ba7c99e6defa5d4994d65e76c26eba3bd72 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sun, 17 Dec 2023 04:13:39 +0300 Subject: [PATCH] better id generation... Signed-off-by: Alex A. Naanou --- experiments/outline-editor/editor.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/experiments/outline-editor/editor.js b/experiments/outline-editor/editor.js index 80bb4df..1eccc2b 100755 --- a/experiments/outline-editor/editor.js +++ b/experiments/outline-editor/editor.js @@ -614,6 +614,24 @@ var toc = { depth++ } parent = parent.parentElement } return depth } + // XXX revise... + var seen = new Set() + var makeID = function(text){ + var id = encodeURI( + text + .trim() + .replace(/[#?$%:;.,]/g, '') + .replace(/\s+/g, '-')) + if(seen.has(id) + || document.getElementById(id)){ + var i = 1 + var candidate = id +'-'+ i + while(seen.has(candidate) + || document.getElementById(candidate)){ + candidate = id +'-'+ i++ } + id = id +'-'+ i } + seen.add(id) + return id } var makeTOC = function(root=outline){ var index = 0 var lst = document.createElement('ul') @@ -639,7 +657,8 @@ var toc = { var elem = document.createElement('li') var id = block.id == '' ? // XXX do a better default... - '__'+ index++ + //'__'+ index++ + makeID(e.innerText) : block.id block.id = id elem.innerHTML = `${e.innerHTML.trim()}`