diff --git a/src/webpage/localuser.ts b/src/webpage/localuser.ts index 26861a9..cf18367 100644 --- a/src/webpage/localuser.ts +++ b/src/webpage/localuser.ts @@ -1737,7 +1737,10 @@ class Localuser{ console.log(replacewith); console.log(original); this.typeMd.txt = raw.split(""); - this.typeMd.boxupdate(typebox); + const match=original.match(this.autofillregex); + if(match){ + this.typeMd.boxupdate(typebox,replacewith.length-match[0].length); + } } MDSearchOptions(options:[string,string,void|HTMLElement][],original:string){ const div=document.getElementById("searchOptions"); @@ -1915,6 +1918,7 @@ class Localuser{ this.MDSearchOptions(map,orginal); } search(str:string,pre:boolean){ + console.log(str); if(!pre){ const match=str.match(this.autofillregex); diff --git a/src/webpage/markdown.ts b/src/webpage/markdown.ts index b074f1c..a600432 100644 --- a/src/webpage/markdown.ts +++ b/src/webpage/markdown.ts @@ -713,8 +713,8 @@ txt[j + 1] === undefined) box.onkeyup(new KeyboardEvent("_")); }; } - boxupdate(box: HTMLElement){ - const restore = saveCaretPosition(box); + boxupdate(box: HTMLElement,offset=0){ + const restore = saveCaretPosition(box,offset); box.innerHTML = ""; box.append(this.makeHTML({ keep: true })); if(restore){ @@ -829,7 +829,7 @@ txt[j + 1] === undefined) //solution from https://stackoverflow.com/questions/4576694/saving-and-restoring-caret-position-for-contenteditable-div let text = ""; let formatted=false; -function saveCaretPosition(context: HTMLElement){ +function saveCaretPosition(context: HTMLElement,offset=0){ const selection = window.getSelection() as Selection; if(!selection)return; const range = selection.getRangeAt(0); @@ -902,7 +902,7 @@ function saveCaretPosition(context: HTMLElement){ build+=baseString; } text=build; - const len=build.length; + const len=build.length+offset; return function restore(){ if(!selection)return; const pos = getTextNodeAtPosition(context, len); @@ -933,29 +933,46 @@ function getTextNodeAtPosition(root: Node, index: number):{ position: -1, }; } + let lastElm:Node=root; for(const node of root.childNodes as unknown as Node[]){ + lastElm=node; let len:number if(node instanceof HTMLElement){ len=MarkDown.gatherBoxText(node).length; }else{ len=(node.textContent as string).length } - if(len