var jsEditor; (function () { var multipleSize = [1600, 1475, 1030, 750]; var setToMultipleID = function (id, thingToDo, param) { multipleSize.forEach(function (size) { if (thingToDo == "innerHTML") { document.getElementById(id + size).innerHTML = param } else if (thingToDo == "click") { document.getElementById(id + size).addEventListener("click", param); } else if (thingToDo == "addClass") { document.getElementById(id + size).classList.add(param); } else if (thingToDo == "removeClass") { document.getElementById(id + size).classList.remove(param); } else if (thingToDo == "display") { document.getElementById(id + size).style.display = param; } }); }; var editorOptions = { value: "", language: "javascript", lineNumbers: true, tabSize: "auto", insertSpaces: "auto", roundedSelection: true, automaticLayout: true, scrollBeyondLastLine: false, readOnly: false, theme: "vs", contextmenu: false, folding: true, showFoldingControls: "always", renderIndentGuides: true }; var fontSize = 14; var splitInstance = Split(['#jsEditor', '#canvasZone']); var elementToTheme = [ '.wrapper .gutter', '.wrapper #jsEditor', '.navbar', '.navbar .select .toDisplay .option', '.navbar .select .toDisplayBig', '.navbar .select .toDisplayBig a', '.navbar .select .toDisplayBig ul li', '.navbarBottom', '.navbarBottom .links .link']; var run = function () { var blockEditorChange = false; var markDirty = function () { if (blockEditorChange) { return; } setToMultipleID("currentScript", "innerHTML", "Custom"); setToMultipleID("safemodeToggle", "addClass", "checked"); setToMultipleID("minimapToggle", "addClass", "checked"); setToMultipleID('safemodeToggle', 'innerHTML', 'Safe mode '); } jsEditor.onKeyUp(function (evt) { markDirty(); }); var snippetUrl = "//babylonjs-api2.azurewebsites.net/snippets"; var currentSnippetToken; var currentSnippetTitle = null; var currentSnippetDescription = null; var currentSnippetTags = null; var engine; var fpsLabel = document.getElementById("fpsLabel"); var scripts; var zipCode; BABYLON.Engine.ShadersRepository = "/src/Shaders/"; if (location.href.indexOf("indexstable") !== -1) { setToMultipleID("currentVersion", "innerHTML", "Version: Stable"); } else { setToMultipleID("currentVersion", "innerHTML", "Version: Latest"); } var loadScript = function (scriptURL, title) { var xhr = new XMLHttpRequest(); xhr.open('GET', scriptURL, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { xhr.onreadystatechange = null; blockEditorChange = true; jsEditor.setValue(xhr.responseText); jsEditor.setPosition({ lineNumber: 0, column: 0 }); blockEditorChange = false; compileAndRun(); setToMultipleID("currentScript", "innerHTML", title); currentSnippetToken = null; } } }; xhr.send(null); }; var loadScriptFromIndex = function (index) { if (index === 0) { index = 1; } var script = scripts[index - 1].trim(); loadScript("scripts/" + script + ".js", script); } var onScriptClick = function (evt) { loadScriptFromIndex(evt.target.scriptLinkIndex); }; var loadScriptsList = function () { var xhr = new XMLHttpRequest(); xhr.open('GET', 'scripts/scripts.txt', true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { scripts = xhr.responseText.split("\n"); for (var i = 0; i < multipleSize.length; i++) { var ul = document.getElementById("scriptsList" + multipleSize[i]); var index; for (index = 0; index < scripts.length; index++) { var option = document.createElement("li"); var a = document.createElement("a"); a.href = "#"; a.innerHTML = (index + 1) + " - " + scripts[index]; a.scriptLinkIndex = index + 1; //a.onclick = onScriptClick; option.scriptLinkIndex = index + 1; option.onclick = onScriptClick; option.appendChild(a); ul.appendChild(option); } } if (!location.hash) { // Query string var queryString = window.location.search; if (queryString) { var query = queryString.replace("?", ""); index = parseInt(query); if (!isNaN(index)) { loadScriptFromIndex(index); } else if (query.indexOf("=") === -1) { loadScript("scripts/" + query + ".js", query); } else { loadScript("scripts/basic scene.js", "Basic scene"); } } else { loadScript("scripts/basic scene.js", "Basic scene"); } } // Restore theme var theme = localStorage.getItem("bjs-playground-theme") || 'light'; toggleTheme(theme); // Remove editor if window size is less than 850px var removeEditorForSmallScreen = function () { if (mq.matches) { splitInstance.collapse(0); } else { splitInstance.setSizes([50, 50]); } } var mq = window.matchMedia("(max-width: 850px)"); mq.addListener(removeEditorForSmallScreen); } } }; xhr.send(null); } var createNewScript = function () { // check if checked is on let iCanClear = checkSafeMode("Are you sure you want to create a new playground?"); if (!iCanClear) return; location.hash = ""; currentSnippetToken = null; currentSnippetTitle = null; currentSnippetDescription = null; currentSnippetTags = null; showNoMetadata(); jsEditor.setValue('// You have to create a function called createScene. This function must return a BABYLON.Scene object\r\n// You can reference the following variables: scene, canvas\r\n// You must at least define a camera\r\n// More info here: https://doc.babylonjs.com/generals/The_Playground_Tutorial\r\n\r\nvar createScene = function() {\r\n\tvar scene = new BABYLON.Scene(engine);\r\n\tvar camera = new BABYLON.ArcRotateCamera("Camera", -Math.PI / 2, Math.PI / 2, 12, BABYLON.Vector3.Zero(), scene);\r\n\tcamera.attachControl(canvas, true);\r\n\r\n\r\n\r\n\treturn scene;\r\n};'); jsEditor.setPosition({ lineNumber: 11, column: 0 }); jsEditor.focus(); compileAndRun(); } var clear = function () { // check if checked is on let iCanClear = checkSafeMode("Are you sure you want to clear the playground?"); if (!iCanClear) return; location.hash = ""; currentSnippetToken = null; jsEditor.setValue(''); jsEditor.setPosition({ lineNumber: 0, column: 0 }); jsEditor.focus(); } var checkSafeMode = function (message) { var safeToggle = document.getElementById("safemodeToggle1600"); if (safeToggle.classList.contains('checked')) { let confirm = window.confirm(message); if (!confirm) { return false; } else { document.getElementById("safemodeToggle1600").classList.toggle('checked'); return true; } } else { return true; } } var showError = function (errorMessage, errorEvent) { var errorContent = '
'; if (errorEvent) { var regEx = /\(.+:(\d+):(\d+)\)\n/g; var match = regEx.exec(errorEvent.stack); if (match) { errorContent += "Line "; var lineNumber = match[1]; var columnNumber = match[2]; errorContent += lineNumber + ':' + columnNumber + ' - '; } } errorContent += errorMessage + '
'; document.getElementById("errorZone").style.display = 'block'; document.getElementById("errorZone").innerHTML = errorContent; // Close button error document.getElementById("errorZone").querySelector('.close').addEventListener('click', function () { document.getElementById("errorZone").style.display = 'none'; }); } var showNoMetadata = function () { if (currentSnippetTitle) { document.getElementById("saveFormTitle").value = currentSnippetTitle; document.getElementById("saveFormTitle").readOnly = true; } else { document.getElementById("saveFormTitle").value = ''; document.getElementById("saveFormTitle").readOnly = false; } if (currentSnippetDescription) { document.getElementById("saveFormDescription").value = currentSnippetDescription; document.getElementById("saveFormDescription").readOnly = true; } else { document.getElementById("saveFormDescription").value = ''; document.getElementById("saveFormDescription").readOnly = false; } if (currentSnippetTags) { document.getElementById("saveFormTags").value = currentSnippetTags; document.getElementById("saveFormTags").readOnly = true; } else { document.getElementById("saveFormTags").value = ''; document.getElementById("saveFormTags").readOnly = false; } document.getElementById("saveFormButtons").style.display = "block"; document.getElementById("saveFormButtonOk").style.display = "inline-block"; }; showNoMetadata(); var hideNoMetadata = function () { document.getElementById("saveFormTitle").readOnly = true; document.getElementById("saveFormDescription").readOnly = true; document.getElementById("saveFormTags").readOnly = true; document.getElementById("saveFormButtonOk").style.display = "none"; setToMultipleID("metadataButton", "display", "inline-block"); }; compileAndRun = function () { try { var waitRing = document.getElementById("waitDiv"); if (waitRing) { waitRing.style.display = "none"; } if (!BABYLON.Engine.isSupported()) { showError("Your browser does not support WebGL", null); return; } var showInspector = false; var showDebugLayer = false; var initialTabIndex = 0; showBJSPGMenu(); jsEditor.updateOptions({ readOnly: false }); if (document.getElementsByClassName('insp-wrapper').length > 0) { for (var i = 0; i < engine.scenes.length; i++) { if (engine.scenes[i]._debugLayer) { //TODO: once inspector is updated on netlify, use getActiveTabIndex instead of the following loop //initialTabIndex = engine.scenes[i]._debugLayer._inspector.getActiveTabIndex(); var tabs = engine.scenes[i]._debugLayer._inspector._tabbar._tabs; for (var j = 0; j < tabs.length; j++) { if (tabs[j].isActive()) { initialTabIndex = j; break; } } break; } } showInspector = true; } else if (document.getElementById('DebugLayer')) { showDebugLayer = true; } if (engine) { engine.dispose(); engine = null; } var canvas = document.getElementById("renderCanvas"); document.getElementById("errorZone").style.display = 'none'; document.getElementById("errorZone").innerHTML = ""; document.getElementById("statusBar").innerHTML = "Loading assets...Please wait"; var checkCamera = true; var wrappedEval = false; var createEngineFunction = "createDefaultEngine"; var createSceneFunction; var code = jsEditor.getValue(); var createDefaultEngine = function () { return new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true }); } var scene; if (code.indexOf("createEngine") !== -1) { createEngineFunction = "createEngine"; } if (code.indexOf("delayCreateScene") !== -1) { // createScene createSceneFunction = "delayCreateScene"; checkCamera = false; } else if (code.indexOf("createScene") !== -1) { // createScene createSceneFunction = "createScene"; } else if (code.indexOf("CreateScene") !== -1) { // CreateScene createSceneFunction = "CreateScene"; } else if (code.indexOf("createscene") !== -1) { // createscene createSceneFunction = "createscene"; } if (!createSceneFunction) { // just pasted code. engine = createDefaultEngine(); scene = new BABYLON.Scene(engine); eval("runScript = function(scene, canvas) {" + code + "}"); runScript(scene, canvas); zipCode = "var scene = new BABYLON.Scene(engine);\r\n\r\n" + code; } else { //execute the code eval(code); //create engine eval("engine = " + createEngineFunction + "()"); if (!engine) { showError("createEngine function must return an engine.", null); return; } //create scene eval("scene = " + createSceneFunction + "()"); if (!scene) { showError(createSceneFunction + " function must return a scene.", null); return; } // update the scene code for the zip file zipCode = code + "\r\n\r\nvar scene = " + createSceneFunction + "()"; } engine.runRenderLoop(function () { if (engine.scenes.length === 0) { return; } if (canvas.width !== canvas.clientWidth) { engine.resize(); } var scene = engine.scenes[0]; if (scene.activeCamera || scene.activeCameras.length > 0) { scene.render(); } fpsLabel.style.right = document.body.clientWidth - (jsEditor.domElement.clientWidth + canvas.clientWidth) + "px"; fpsLabel.innerHTML = engine.getFps().toFixed() + " fps"; }); if (engine.scenes.length === 0) { showError("You must at least create a scene.", null); return; } if (checkCamera && engine.scenes[0].activeCamera == null) { showError("You must at least create a camera.", null); return; } engine.scenes[0].executeWhenReady(function () { document.getElementById("statusBar").innerHTML = ""; }); if (scene) { if (showInspector) { scene.debugLayer.show({ initialTab: initialTabIndex }); scene.executeWhenReady(function () { scene.debugLayer._inspector.refresh(); }) } else if (showDebugLayer) { scene.debugLayer.show(); } } } catch (e) { showError(e.message, e); } }; window.addEventListener("resize", function () { if (engine) { engine.resize(); } }); // Load scripts list loadScriptsList(); // Zip var addContentToZip = function (zip, name, url, replace, buffer, then) { if (url.substring(0, 5) == "http:" || url.substring(0, 5) == "blob:" || url.substring(0, 6) == "https:") { then(); return; } var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); if (buffer) { xhr.responseType = "arraybuffer"; } xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { var text; if (!buffer) { if (replace) { var splits = replace.split("\r\n"); for (var index = 0; index < splits.length; index++) { splits[index] = " " + splits[index]; } replace = splits.join("\r\n"); text = xhr.responseText.replace("####INJECT####", replace); } else { text = xhr.responseText; } } zip.file(name, buffer ? xhr.response : text); then(); } } }; xhr.send(null); } var addTexturesToZip = function (zip, index, textures, folder, then) { if (index === textures.length) { then(); return; } if (textures[index].isRenderTarget || textures[index] instanceof BABYLON.DynamicTexture || textures[index].name.indexOf("data:") !== -1) { addTexturesToZip(zip, index + 1, textures, folder, then); return; } if (textures[index].isCube) { if (textures[index]._extensions && textures[index].name.indexOf("dds") === -1) { for (var i = 0; i < 6; i++) { textures.push({ name: textures[index].name + textures[index]._extensions[i] }); } } else { textures.push({ name: textures[index].name }); } addTexturesToZip(zip, index + 1, textures, folder, then); return; } if (folder == null) { folder = zip.folder("textures"); } var url; if (textures[index].video) { url = textures[index].video.currentSrc; } else { // url = textures[index].name; url = textures[index].url ? textures[index].url : textures[index].name; } var name = textures[index].name.replace("textures/", ""); // var name = url.substr(url.lastIndexOf("/") + 1); if (url != null) { addContentToZip(folder, name, url, null, true, function () { addTexturesToZip(zip, index + 1, textures, folder, then); }); } else { addTexturesToZip(zip, index + 1, textures, folder, then); } } var addImportedFilesToZip = function (zip, index, importedFiles, folder, then) { if (index === importedFiles.length) { then(); return; } if (!folder) { folder = zip.folder("scenes"); } var url = importedFiles[index]; var name = url.substr(url.lastIndexOf("/") + 1); addContentToZip(folder, name, url, null, true, function () { addImportedFilesToZip(zip, index + 1, importedFiles, folder, then); }); } var getZip = function () { if (engine.scenes.length === 0) { return; } var zip = new JSZip(); var scene = engine.scenes[0]; var textures = scene.textures; var importedFiles = scene.importedMeshesFiles; document.getElementById("statusBar").innerHTML = "Creating archive...Please wait"; if (zipCode.indexOf("textures/worldHeightMap.jpg") !== -1) { textures.push({ name: "textures/worldHeightMap.jpg" }); } addContentToZip(zip, "index.html", "zipContent/index.html", zipCode, false, function () { addTexturesToZip(zip, 0, textures, null, function () { addImportedFilesToZip(zip, 0, importedFiles, null, function () { var blob = zip.generate({ type: "blob" }); saveAs(blob, "sample.zip"); document.getElementById("statusBar").innerHTML = ""; }); }); }); } // Versions setVersion = function (version) { switch (version) { case "stable": location.href = "indexStable.html" + location.hash; break; default: location.href = "index.html" + location.hash; break; } } // Fonts setFontSize = function (size) { fontSize = size; jsEditor.updateOptions({ fontSize: size }); setToMultipleID("currentFontSize", "innerHTML", "Font: " + size); }; // Fullscreen document.getElementById("renderCanvas").addEventListener("webkitfullscreenchange", function () { if (document.webkitIsFullScreen) goFullPage(); else exitFullPage(); }, false); var goFullPage = function () { var canvasElement = document.getElementById("renderCanvas"); canvasElement.style.position = "absolute"; canvasElement.style.top = 0; canvasElement.style.left = 0; canvasElement.style.zIndex = 100; } var exitFullPage = function () { document.getElementById("renderCanvas").style.position = "relative"; document.getElementById("renderCanvas").style.zIndex = 0; } var goFullscreen = function () { if (engine) { engine.switchFullscreen(true); } } var editorGoFullscreen = function () { var editorDiv = document.getElementById("jsEditor"); if (editorDiv.requestFullscreen) { editorDiv.requestFullscreen(); } else if (editorDiv.mozRequestFullScreen) { editorDiv.mozRequestFullScreen(); } else if (editorDiv.webkitRequestFullscreen) { editorDiv.webkitRequestFullscreen(); } } var toggleEditor = function () { var editorButton = document.getElementById("editorButton1600"); var scene = engine.scenes[0]; // If the editor is present if (editorButton.classList.contains('checked')) { setToMultipleID("editorButton", "removeClass", 'checked'); splitInstance.collapse(0); setToMultipleID("editorButton", "innerHTML", 'Editor '); } else { setToMultipleID("editorButton", "addClass", 'checked'); splitInstance.setSizes([50, 50]); // Reset setToMultipleID("editorButton", "innerHTML", 'Editor '); } engine.resize(); if (scene.debugLayer.isVisible()) { scene.debugLayer.hide(); scene.debugLayer.show(); } } /** * Toggle the dark theme */ var toggleTheme = function (theme) { // Monaco var vsTheme; if (theme == 'dark') { vsTheme = 'vs-dark' } else { vsTheme = 'vs' } var oldCode = jsEditor.getValue(); jsEditor.dispose(); editorOptions.theme = vsTheme; jsEditor = monaco.editor.create(document.getElementById('jsEditor'), editorOptions); jsEditor.setValue(oldCode); setFontSize(fontSize); jsEditor.onKeyUp(function (evt) { markDirty(); }); for (var index = 0; index < elementToTheme.length; index++) { var obj = elementToTheme[index]; var domObjArr = document.querySelectorAll(obj); for (var domObjIndex = 0; domObjIndex < domObjArr.length; domObjIndex++) { var domObj = domObjArr[domObjIndex]; domObj.classList.remove('light'); domObj.classList.remove('dark'); domObj.classList.add(theme); } } localStorage.setItem("bjs-playground-theme", theme); } var toggleDebug = function () { var debugButton = document.getElementById("debugButton1600"); var scene = engine.scenes[0]; if (debugButton.classList.contains('uncheck')) { setToMultipleID("debugButton", "removeClass", 'uncheck'); setToMultipleID("debugButton", "innerHTML", 'Debug layer'); scene.debugLayer.show(); } else { setToMultipleID("debugButton", "addClass", 'uncheck'); setToMultipleID("debugButton", "innerHTML", 'Debug layer'); scene.debugLayer.hide(); } } var toggleMetadata = function () { var scene = engine.scenes[0]; document.getElementById("saveLayer").style.display = "block"; } var formatCode = function () { jsEditor.getAction('editor.action.format').run(); } var toggleMinimap = function () { var minimapToggle = document.getElementById("minimapToggle1600"); if (minimapToggle.classList.contains('checked')) { jsEditor.updateOptions({ minimap: { enabled: false } }); setToMultipleID("minimapToggle", "innerHTML", 'Minimap '); } else { jsEditor.updateOptions({ minimap: { enabled: true } }); setToMultipleID("minimapToggle", "innerHTML", 'Minimap '); } minimapToggle.classList.toggle('checked'); } //Navigation Overwrites var exitPrompt = function (e) { var safeToggle = document.getElementById("safemodeToggle1600"); if (safeToggle.classList.contains('checked')) { e = e || window.event; var message = 'This page is asking you to confirm that you want to leave - data you have entered may not be saved.'; if (e) { e.returnValue = message; } return message; } }; window.onbeforeunload = exitPrompt; // Snippet var save = function () { // Retrieve title if necessary if (document.getElementById("saveLayer")) { currentSnippetTitle = document.getElementById("saveFormTitle").value; currentSnippetDescription = document.getElementById("saveFormDescription").value; currentSnippetTags = document.getElementById("saveFormTags").value; } var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState === 4) { if (xmlHttp.status === 201) { var baseUrl = location.href.replace(location.hash, "").replace(location.search, ""); var snippet = JSON.parse(xmlHttp.responseText); var newUrl = baseUrl + "#" + snippet.id; currentSnippetToken = snippet.id; if (snippet.version && snippet.version !== "0") { newUrl += "#" + snippet.version; } location.href = newUrl; // Hide the complete title & co message hideNoMetadata(); compileAndRun(); } else { showError("Unable to save your code. It may be too long.", null); } } } xmlHttp.open("POST", snippetUrl + (currentSnippetToken ? "/" + currentSnippetToken : ""), true); xmlHttp.setRequestHeader("Content-Type", "application/json"); var dataToSend = { payload: { code: jsEditor.getValue() }, name: currentSnippetTitle, description: currentSnippetDescription, tags: currentSnippetTags }; xmlHttp.send(JSON.stringify(dataToSend)); } var askForSave = function () { if (currentSnippetTitle == null || currentSnippetDescription == null || currentSnippetTags == null) { document.getElementById("saveLayer").style.display = "block"; } else { save(); } }; document.getElementById("saveFormButtonOk").addEventListener("click", function () { document.getElementById("saveLayer").style.display = "none"; save(); }); document.getElementById("saveFormButtonCancel").addEventListener("click", function () { document.getElementById("saveLayer").style.display = "none"; }); document.getElementById("mainTitle").innerHTML = "v" + BABYLON.Engine.Version; var previousHash = ""; var cleanHash = function () { var splits = decodeURIComponent(location.hash.substr(1)).split("#"); if (splits.length > 2) { splits.splice(2, splits.length - 2); } location.hash = splits.join("#"); } var checkHash = function (firstTime) { if (location.hash) { if (previousHash !== location.hash) { cleanHash(); previousHash = location.hash; try { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState === 4) { if (xmlHttp.status === 200) { var snippet = JSON.parse(xmlHttp.responseText)[0]; blockEditorChange = true; jsEditor.setValue(JSON.parse(snippet.jsonPayload).code.toString()); // Check if title / descr / tags are already set if (snippet.name != null && snippet.name != "") { currentSnippetTitle = snippet.name; } else currentSnippetTitle = null; if (snippet.description != null && snippet.description != "") { currentSnippetDescription = snippet.description; } else currentSnippetDescription = null; if (snippet.tags != null && snippet.tags != "") { currentSnippetTags = snippet.tags; } else currentSnippetTags = null; if (currentSnippetTitle != null && currentSnippetTags != null && currentSnippetDescription) { if (document.getElementById("saveLayer")) { document.getElementById("saveFormTitle").value = currentSnippetTitle; document.getElementById("saveFormDescription").value = currentSnippetDescription; document.getElementById("saveFormTags").value = currentSnippetTags; hideNoMetadata(); } } else { showNoMetadata(); } jsEditor.setPosition({ lineNumber: 0, column: 0 }); blockEditorChange = false; compileAndRun(); setToMultipleID("currentScript", "innerHTML", "Custom"); } else if (firstTime) { location.href = location.href.replace(location.hash, ""); if (scripts) { loadScriptFromIndex(0); } } } }; var hash = location.hash.substr(1); currentSnippetToken = hash.split("#")[0]; if (!hash.split("#")[1]) hash += "#0"; xmlHttp.open("GET", snippetUrl + "/" + hash.replace("#", "/")); xmlHttp.send(); } catch (e) { } } } setTimeout(checkHash, 200); } checkHash(true); // ---------- UI // Run setToMultipleID("runButton", "click", compileAndRun); // New setToMultipleID("newButton", "click", createNewScript); // Clear setToMultipleID("clearButton", "click", clear); // Save setToMultipleID("saveButton", "click", askForSave); // Zip setToMultipleID("zipButton", "click", getZip); // Themes setToMultipleID("darkTheme", "click", toggleTheme.bind(this, 'dark')); setToMultipleID("lightTheme", "click", toggleTheme.bind(this, 'light')); // Safe mode setToMultipleID("safemodeToggle", 'click', function () { document.getElementById("safemodeToggle1600").classList.toggle('checked'); if (document.getElementById("safemodeToggle1600").classList.contains('checked')) { setToMultipleID("safemodeToggle", "innerHTML", 'Safe mode '); } else { setToMultipleID("safemodeToggle", "innerHTML", 'Safe mode '); } }); // Editor setToMultipleID("editorButton", "click", toggleEditor); // FullScreen setToMultipleID("fullscreenButton", "click", goFullscreen); // Editor fullScreen setToMultipleID("editorFullscreenButton", "click", editorGoFullscreen); // Format setToMultipleID("formatButton", "click", formatCode); // Format setToMultipleID("minimapToggle", "click", toggleMinimap); // Debug setToMultipleID("debugButton", "click", toggleDebug); // Metadata setToMultipleID("metadataButton", "click", toggleMetadata); // Restore theme var theme = localStorage.getItem("bjs-playground-theme") || 'light'; toggleTheme(theme); } // Monaco var xhr = new XMLHttpRequest(); xhr.open('GET', "babylon.d.txt", true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { require.config({ paths: { 'vs': 'node_modules/monaco-editor/min/vs' } }); require(['vs/editor/editor.main'], function () { monaco.languages.typescript.javascriptDefaults.addExtraLib(xhr.responseText, 'babylon.d.ts'); jsEditor = monaco.editor.create(document.getElementById('jsEditor'), editorOptions); run(); }); } } }; xhr.send(null); })();