diff --git a/Browser_IDE/editorMain.js b/Browser_IDE/editorMain.js index e394281..2c48cca 100644 --- a/Browser_IDE/editorMain.js +++ b/Browser_IDE/editorMain.js @@ -7,33 +7,33 @@ class CodeViewer { let self = this; this.filename = filename; - this.basename = filename.slice(filename.lastIndexOf("/")+1); + this.basename = filename.slice(filename.lastIndexOf("/") + 1); let viewArea = document.getElementById("codeEditorContainer"); let tabArea = document.getElementById("codeViewTabs"); - let editorElem = elem("textarea", {type: "text", style:{height:'100%'}}); + let editorElem = elem("textarea", { type: "text", style: { height: '100%' } }); - this.editorContainer = elem("div", {class: "sk-contents sk-tab-hidden", file: filename}, [ + this.editorContainer = elem("div", { class: "sk-contents sk-tab-hidden", file: filename }, [ editorElem ]); - let closeButton = elem("button", { class: "bi bi-x", style:{'margin-right': '-20px'} }); + let closeButton = elem("button", { class: "bi bi-x", style: { 'margin-right': '-20px' } }); - closeButton.addEventListener('click', function(event){ + closeButton.addEventListener('click', function (event) { closeCodeEditor(self); event.stopPropagation(); }) - this.label = elem("div", {class: "sk-tab-label", title: this.filename}, [this.basename]); + this.label = elem("div", { class: "sk-tab-label", title: this.filename }, [this.basename]); this.tab = elem("li", {}, [this.label, closeButton]); - this.tab.addEventListener('click', function(){ + this.tab.addEventListener('click', function () { SwitchToTab(self); event.stopPropagation(); }) - this.tab.addEventListener('dblclick', function(){ + this.tab.addEventListener('dblclick', function () { self.showRenameInput(); event.stopPropagation(); }) @@ -65,12 +65,12 @@ class CodeViewer { }; let keydownListener = (e) => { - if(e.key == "Escape"){ + if (e.key == "Escape") { resetRenameInput(); self.label.innerText = self.basename; } - if(e.key == "Enter"){ + if (e.key == "Enter") { resetRenameInput(); self.renameBasename(self.label.innerText); e.preventDefault(); @@ -89,7 +89,7 @@ class CodeViewer { lineNumbers: true, autoCloseBrackets: true, styleActiveLine: true, - extraKeys: {"Ctrl-Space": "autocomplete"}, + extraKeys: { "Ctrl-Space": "autocomplete" }, hintOptions: { alignWithWord: false, completeSingle: false, @@ -121,12 +121,12 @@ class CodeViewer { async save() { let self = this; try { - await storedProject.access(async function(project){ + await storedProject.access(async function (project) { let source = self.editor.getValue(); if (await project.exists(self.filename) || source != "") await project.writeFile(self.filename, source); }); - } catch(err){ + } catch (err) { let errEv = new Event("filesystemError"); errEv.shortMessage = "Save failed"; errEv.longMessage = "An error occured and " + self.filename + " could not be saved.\n\nReason:\n" + err; @@ -139,10 +139,10 @@ class CodeViewer { let self = this; let newVal = undefined; try { - newVal = await fileAsString(await storedProject.access(function(project){ + newVal = await fileAsString(await storedProject.access(function (project) { return project.readFile(self.filename); })); - } catch(err){ + } catch (err) { let errEv = new Event("filesystemError"); errEv.shortMessage = "Load failed"; errEv.longMessage = "An error occured and " + self.filename + " could not be loaded.\n\nReason:\n" + err; @@ -161,7 +161,7 @@ class CodeViewer { return; } - let newFilename = self.filename.slice(0, self.filename.lastIndexOf("/")+1)+basename; + let newFilename = self.filename.slice(0, self.filename.lastIndexOf("/") + 1) + basename; try { let newExists = await storedProject.access((project) => project.exists(newFilename)); @@ -178,7 +178,7 @@ class CodeViewer { // don't really care if the execution environment fails - should the code be mirrored there in the first place? try { executionEnviroment.rename(self.filename, newFilename); - } catch {}; + } catch { }; } self.filename = newFilename; @@ -186,7 +186,7 @@ class CodeViewer { self.label.innerText = self.basename; } - catch(err) { + catch (err) { let errEv = new Event("filesystemError"); errEv.shortMessage = "Rename failed"; errEv.longMessage = "An error occured and " + self.filename + " could not be renamed to " + newFilename + ".\n\nReason:\n" + err; @@ -210,7 +210,7 @@ class CodeViewer { } function getExtension(filename) { - return filename.slice(filename.lastIndexOf('.')+1); + return filename.slice(filename.lastIndexOf('.') + 1); } async function getFilesByExtension(extensions) { @@ -231,7 +231,7 @@ let editors = []; function getCodeEditor(filename) { - for(let i = 0; i < editors.length; i ++) { + for (let i = 0; i < editors.length; i++) { if (editors[i].filename == filename) return editors[i]; } @@ -239,7 +239,7 @@ function getCodeEditor(filename) { return null; } -function openCodeEditor(filename, setFocus=true, load=true) { +function openCodeEditor(filename, setFocus = true, load = true) { let existing = getCodeEditor(filename); if (existing) { if (setFocus) @@ -277,7 +277,7 @@ async function openCodeEditors(editorLimit = 3) { } let promises = []; - for(let i = 0; i < sourceFiles.length; i ++) { + for (let i = 0; i < sourceFiles.length; i++) { promises.push(openCodeEditor(sourceFiles[i], false)); } await Promise.all(promises); @@ -293,12 +293,11 @@ async function openCodeEditors(editorLimit = 3) { const shownRenameMessageKey = 'sk-online-shown-rename-message'; async function openUntitledCodeEditor() { let number = 0; - let filename = "/code/untitled."+activeLanguage.defaultSourceExtension; + let filename = "/code/untitled." + activeLanguage.defaultSourceExtension; - while(await storedProject.access((project) => project.exists(filename))) - { - number ++; - filename = "/code/untitled (" + number + ")."+activeLanguage.defaultSourceExtension; + while (await storedProject.access((project) => project.exists(filename))) { + number++; + filename = "/code/untitled (" + number + ")." + activeLanguage.defaultSourceExtension; } openCodeEditor(filename, true, false); @@ -336,7 +335,7 @@ async function closeCodeEditor(editor, autosave = true) { } function closeAllCodeEditors() { - for(let i = 0; i < editors.length; i ++) { + for (let i = 0; i < editors.length; i++) { editors[i].close(); } editors = []; @@ -349,7 +348,7 @@ function closeAllCodeEditors() { async function saveAllOpenCode() { let promises = []; - for(let i = 0; i < editors.length; i ++) { + for (let i = 0; i < editors.length; i++) { promises.push( editors[i].save() ); @@ -358,7 +357,7 @@ async function saveAllOpenCode() { await Promise.all(promises); } -function createGutterSplitters(){ +function createGutterSplitters() { var sizes = localStorage.getItem('sk-online-split-sizes') if (sizes) { @@ -392,15 +391,15 @@ function createGutterSplitters(){ // fix position gutters[i].style.position = 'absolute'; - gutters[i].style.left = "-"+(gutterWidth/2).toString()+"px"; + gutters[i].style.left = "-" + (gutterWidth / 2).toString() + "px"; gutters[i].style.height = '100%'; } } // -------------------- Setup Tabs -------------------- let currentEditor = null; -function SwitchToTab(editor){ - for (let i = 0; i < editors.length; i ++) { +function SwitchToTab(editor) { + for (let i = 0; i < editors.length; i++) { if (editors[i] == editor) { editors[i].editorContainer.style.display = 'flex'; editors[i].tab.classList.add('sk-tabs-active'); @@ -413,7 +412,7 @@ function SwitchToTab(editor){ } } - for (let i = 0; i < editors.length; i ++) { + for (let i = 0; i < editors.length; i++) { // Before refreshing the editor, get the scroll position of the editor window let display = currentEditor.editor.display; let scrollTop = display.scroller.scrollTop; @@ -428,29 +427,29 @@ function SwitchToTab(editor){ // currently just reloads the page with the 'language' parameter set // in the future, ideally this will work _without_ reloading the page, // by unloading the existing language scripts then loading the new ones -function switchActiveLanguage(language){ - let page_url = new URL(window.location.href); - page_url.searchParams.set('language', language.replaceAll("+"," ") /* spaces become + in url */); - window.location = page_url; +function switchActiveLanguage(language) { + let page_url = new URL(window.location.href); + page_url.searchParams.set('language', language.replaceAll("+", " ") /* spaces become + in url */); + window.location = page_url; } -function schedulePotentialLanguageSwitch(language){ - LanguageSwitchAfterLoadQueue.Schedule("PotentiallySwitchLanguage", async function(){ +function schedulePotentialLanguageSwitch(language) { + LanguageSwitchAfterLoadQueue.Schedule("PotentiallySwitchLanguage", async function () { if (activeLanguage.name != language) switchActiveLanguage(language); }); } let languageSelectElem = null; -function setupLanguageSelectionBox(){ +function setupLanguageSelectionBox() { // setup language selection box languageSelectElem = document.getElementById("languageSelection"); for (let i = 0; i < SplashKitOnlineLanguageDefinitions.length; i++) { let language = SplashKitOnlineLanguageDefinitions[i]; - languageSelectElem.append(elem("option", {value: language.name}, [language.userVisibleName])); + languageSelectElem.append(elem("option", { value: language.name }, [language.userVisibleName])); } - languageSelectElem.addEventListener('change', function(event) { + languageSelectElem.addEventListener('change', function (event) { // just switch active language // TODO: store chosen language inside project switchActiveLanguage(event.target.value); @@ -464,15 +463,15 @@ let activeLanguage = null; let activeLanguageSetup = null; -function setupActiveLanguage(){ +function setupActiveLanguage() { if (SKO.language in SplashKitOnlineLanguageAliasMap) { activeLanguage = SplashKitOnlineLanguageAliasMap[SKO.language]; } else { activeLanguage = SplashKitOnlineLanguageAliasMap["JavaScript"]; - displayEditorNotification("Unable to switch to language "+SKO.language+", defaulting to JavaScript.", NotificationIcons.ERROR, -1); - displayEditorNotification("Available languages are: