Skip to content

Commit 76112cd

Browse files
author
prima
committed
feat: Added function support to disable / enable the new editor - fixed issue with not scrolling to the bottom - ensured back, redo and retry all trigger updates now in the editor
1 parent 31b262c commit 76112cd

File tree

1 file changed

+129
-86
lines changed

1 file changed

+129
-86
lines changed

klite.embd

Lines changed: 129 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -38037,109 +38037,152 @@ class MarkdownWYSIWYG {
3803738037
}
3803838038
</style>
3803938039
<script>
38040-
let gameEditor = document.createElement("div")
38041-
gameEditor.id = "gameEditor"
38042-
gameEditor.style = ""
38043-
document.getElementById("gamescreen").appendChild(gameEditor)
38040+
const renderGameTextRef = render_gametext, originalBack = btn_back, originalRedo = btn_redo, originalRetry = btn_retry;
3804438041

38045-
let gameText = document.getElementById("gametext")
38042+
let enableNewEditor = () => {
38043+
let gameEditor = document.createElement("div")
38044+
gameEditor.id = "gameEditor"
38045+
gameEditor.style = ""
38046+
document.getElementById("gamescreen").appendChild(gameEditor)
3804638047

38047-
let editor = new MarkdownWYSIWYG('gameEditor', {
38048-
initialValue: "",
38049-
onUpdate: (markdownContent) => {
38050-
gameText.innerHTML = markdownContent
38048+
let gameText = document.getElementById("gametext")
38049+
38050+
let editor = new MarkdownWYSIWYG('gameEditor', {
38051+
initialValue: "",
38052+
onUpdate: (markdownContent) => {
38053+
gameText.innerHTML = markdownContent
38054+
merge_edit_field()
38055+
rawTextEditor.innerHTML = gameText.innerHTML
38056+
}
38057+
});
38058+
38059+
let rawButton = document.createElement("button")
38060+
rawButton.classList.add("md-tab-button")
38061+
rawButton.innerText = "Raw text"
38062+
gameEditor.querySelector(".md-tabs").prepend(rawButton)
38063+
38064+
let rawTextEditor = document.createElement("span")
38065+
rawTextEditor.id = "rawTextEditor"
38066+
rawTextEditor.contentEditable = true
38067+
rawTextEditor.onclick = click_gametext
38068+
rawTextEditor.onblur = () => {
38069+
gameText.innerHTML = editor._htmlToMarkdown(rawTextEditor.innerHTML)
3805138070
merge_edit_field()
38052-
rawTextEditor.innerHTML = gameText.innerHTML
38071+
editor.setValue(editor._htmlToMarkdown(rawTextEditor.innerHTML))
3805338072
}
38054-
});
38073+
let editorContentArea = document.querySelector(".md-editor-content-area")
38074+
editorContentArea.prepend(rawTextEditor)
3805538075

38056-
let rawButton = document.createElement("button")
38057-
rawButton.classList.add("md-tab-button")
38058-
rawButton.innerText = "Raw text"
38059-
gameEditor.querySelector(".md-tabs").prepend(rawButton)
38060-
38061-
let rawTextEditor = document.createElement("span")
38062-
rawTextEditor.id = "rawTextEditor"
38063-
rawTextEditor.contentEditable = true
38064-
rawTextEditor.onclick = click_gametext
38065-
rawTextEditor.onblur = () => {
38066-
gameText.innerHTML = editor._htmlToMarkdown(rawTextEditor.innerHTML)
38067-
merge_edit_field()
38068-
editor.setValue(editor._htmlToMarkdown(rawTextEditor.innerHTML))
38069-
}
38070-
let editorContentArea = document.querySelector(".md-editor-content-area")
38071-
editorContentArea.prepend(rawTextEditor)
38072-
38073-
document.querySelectorAll(".md-tab-button").forEach(elem => elem.addEventListener("mouseup", (elem) => {
38074-
document.querySelectorAll(".md-tab-button").forEach(elem => {
38075-
elem.classList.remove("active")
38076-
})
38077-
document.querySelectorAll("#rawTextEditor, .md-editable-area, .md-markdown-area").forEach(elem => elem.style.display = "none")
38076+
let scrollToBottom = () => {
38077+
setTimeout(() => {
38078+
// Scroll to latest message
38079+
[...document.querySelectorAll("#rawTextEditor, .md-editable-area, .md-markdown-area")].forEach(elem => elem.scrollTo(0, elem.scrollHeight));
38080+
}, 1)
38081+
}
3807838082

38079-
elem.target.classList.add("active")
38083+
document.querySelectorAll(".md-tab-button").forEach(elem => elem.addEventListener("mouseup", (elem) => {
38084+
document.querySelectorAll(".md-tab-button").forEach(elem => {
38085+
elem.classList.remove("active")
38086+
})
38087+
document.querySelectorAll("#rawTextEditor, .md-editable-area, .md-markdown-area").forEach(elem => elem.style.display = "none")
3808038088

38081-
let toolbarElem = document.getElementsByClassName("md-toolbar")[0]
38082-
if (elem.target.innerText === "Raw text")
38083-
{
38084-
rawTextEditor.style.display = "block"
38085-
toolbarElem.style.display = "none"
38086-
}
38087-
else if (elem.target.innerText === "WYSIWYG")
38088-
{
38089-
document.querySelectorAll(".md-editable-area").forEach(elem => elem.style.display = "block")
38090-
toolbarElem.style.display = "flex"
38091-
}
38092-
else if (elem.target.innerText === "Markdown")
38093-
{
38094-
document.querySelectorAll(".md-markdown-area").forEach(elem => elem.style.display = "block")
38095-
toolbarElem.style.display = "flex"
38089+
elem.target.classList.add("active")
38090+
38091+
let toolbarElem = document.getElementsByClassName("md-toolbar")[0]
38092+
if (elem.target.innerText === "Raw text") {
38093+
rawTextEditor.style.display = "block"
38094+
toolbarElem.style.display = "none"
38095+
}
38096+
else if (elem.target.innerText === "WYSIWYG") {
38097+
document.querySelectorAll(".md-editable-area").forEach(elem => elem.style.display = "block")
38098+
toolbarElem.style.display = "flex"
38099+
}
38100+
else if (elem.target.innerText === "Markdown") {
38101+
document.querySelectorAll(".md-markdown-area").forEach(elem => elem.style.display = "block")
38102+
toolbarElem.style.display = "flex"
38103+
}
38104+
scrollToBottom()
38105+
}))
38106+
rawButton.dispatchEvent(new CustomEvent("mouseup", { target: rawButton }))
38107+
38108+
render_gametext = (save, forceScroll) => {
38109+
renderGameTextRef(save, forceScroll)
38110+
removeChoiceContainer()
38111+
let isEditable = gameText.contentEditable === "true"
38112+
if (gameEditor.style.display === "none") {
38113+
rawTextEditor.innerHTML = gameText.innerHTML
38114+
editor.setValue(editor._htmlToMarkdown(rawTextEditor.innerHTML))
38115+
}
38116+
gameEditor.style.display = !!isEditable ? "block" : "none"
38117+
gameText.style.display = !!isEditable ? "none" : "block"
38118+
scrollToBottom()
3809638119
}
38097-
}))
38098-
rawButton.dispatchEvent(new CustomEvent("mouseup", { target: rawButton }))
3809938120

38100-
let renderGameTextRef = render_gametext
38101-
render_gametext = (save, forceScroll) => {
38102-
renderGameTextRef(save, forceScroll)
38103-
let isEditable = gameText.contentEditable === "true"
38104-
if (gameEditor.style.display === "none")
38105-
{
38121+
let overwriteRawContents = () => {
3810638122
rawTextEditor.innerHTML = gameText.innerHTML
3810738123
editor.setValue(editor._htmlToMarkdown(rawTextEditor.innerHTML))
38124+
scrollToBottom()
3810838125
}
38109-
gameEditor.style.display = !!isEditable ? "block" : "none"
38110-
gameText.style.display = !!isEditable ? "none" : "block"
38111-
}
3811238126

38113-
let titleRemapper = (params) => {
38114-
let {id, title} = params
38115-
let elem = document.querySelector(`[data-button-id=${id}]`)
38116-
if (!!elem)
38117-
{
38118-
elem.title = title
38127+
btn_back = () => {
38128+
originalBack()
38129+
overwriteRawContents()
3811938130
}
38131+
38132+
btn_redo = () => {
38133+
originalRedo()
38134+
overwriteRawContents()
38135+
}
38136+
38137+
btn_retry = () => {
38138+
originalRetry()
38139+
overwriteRawContents()
38140+
}
38141+
38142+
let titleRemapper = (params) => {
38143+
let { id, title } = params
38144+
let elem = document.querySelector(`[data-button-id=${id}]`)
38145+
if (!!elem) {
38146+
elem.title = title
38147+
}
38148+
}
38149+
38150+
let titlesToRemapToEN = [
38151+
{ id: 'h1', title: 'Heading 1' },
38152+
{ id: 'h2', title: 'Heading 2' },
38153+
{ id: 'h3', title: 'Heading 3' },
38154+
{ id: 'bold', title: 'Bold' },
38155+
{ id: 'italic', title: 'Italic' },
38156+
{ id: 'strikethrough', title: 'Strikethrough' },
38157+
{ id: 'link', title: 'Link' },
38158+
{ id: 'ul', title: 'Unordered list' },
38159+
{ id: 'ol', title: 'Ordered list' },
38160+
{ id: 'outdent', title: 'Outdent' },
38161+
{ id: 'indent', title: 'Indent' },
38162+
{ id: 'blockquote', title: 'Citation' },
38163+
{ id: 'hr', title: 'Horizontal rule' },
38164+
{ id: 'table', title: 'Insert table' },
38165+
{ id: 'codeblock', title: 'Insert code block' },
38166+
{ id: 'inlinecode', title: 'Insert inline code' }
38167+
]
38168+
38169+
titlesToRemapToEN.forEach(titleRemapper)
38170+
38171+
render_gametext()
3812038172
}
3812138173

38122-
let titlesToRemapToEN = [
38123-
{ id: 'h1', title: 'Heading 1'},
38124-
{ id: 'h2', title: 'Heading 2'},
38125-
{ id: 'h3', title: 'Heading 3'},
38126-
{ id: 'bold', title: 'Bold'},
38127-
{ id: 'italic', title: 'Italic'},
38128-
{ id: 'strikethrough', title: 'Strikethrough'},
38129-
{ id: 'link', title: 'Link'},
38130-
{ id: 'ul', title: 'Unordered list'},
38131-
{ id: 'ol', title: 'Ordered list'},
38132-
{ id: 'outdent', title: 'Outdent'},
38133-
{ id: 'indent', title: 'Indent'},
38134-
{ id: 'blockquote', title: 'Citation'},
38135-
{ id: 'hr', title: 'Horizontal rule'},
38136-
{ id: 'table', title: 'Insert table'},
38137-
{ id: 'codeblock', title: 'Insert code block'},
38138-
{ id: 'inlinecode', title: 'Insert inline code'}
38139-
]
38174+
let disableNewEditor = () => {
38175+
document.getElementById("gameEditor")?.remove()
38176+
document.getElementById("gametext").style.display = "block"
38177+
render_gametext = renderGameTextRef
38178+
btn_back = originalBack
38179+
btn_redo = originalRedo
38180+
btn_retry = originalRetry
38181+
render_gametext()
38182+
}
3814038183

38141-
titlesToRemapToEN.forEach(titleRemapper)
38142-
38184+
enableNewEditor()
38185+
// disableNewEditor()
3814338186
</script>
3814438187
<style>
3814538188
#gameEditor

0 commit comments

Comments
 (0)