@@ -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