1
0

monarch.js 2.3 KB

1
  1. "use strict";function clearInnerText(e){e.innerHTML=""}function getInnerText(e){var t=e.innerText;return t||(t=e.textContent),t}function escapeToHTML(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function appendInnerText(e,t){t=escapeToHTML(t),e.innerHTML+=t}function setInnerText(e,t){clearInnerText(e),appendInnerText(e,t)}function getTextFromId(e){var t=document.getElementById(e);return null==t?null:getInnerText(t)}var outputPane=document.getElementById("monarchConsole"),isDirty=!1;function createLangModel(languageId,text){monaco.languages.register({id:languageId});var langModel=monaco.editor.createModel(text,"javascript"),update=function(){var def=null;try{def=eval("(function(){ "+langModel.getValue()+"; })()")}catch(e){return void setInnerText(outputPane,e+"\n")}monaco.languages.setMonarchTokensProvider(languageId,def),setInnerText(outputPane,"up-to-date\n")};return langModel.onDidChangeContent((function(){isDirty=!0,update()})),update(),langModel}function readSamples(e){for(var t={},n=0;n<e.options.length;n++){var a=e.options[n].value;if(a&&!e.options[n].disabled){var o="monarch-language-"+a,l=getTextFromId(a+"-sample");t[a]={languageId:o,langModel:createLangModel(o,getTextFromId(a)),langViewState:null,sampleModel:monaco.editor.createModel(l,o),sampleViewState:null}}}return t}window.onbeforeunload=function(e){if(isDirty)return"If you leave this page any unsaved work will be lost."},require(["vs/editor/editor.main"],(function(){var e=document.getElementById("sampleselect"),t=document.getElementById("langPane"),n=document.getElementById("editor"),a=window.innerHeight;if(a){var o=.76*a;t.style.height=o+"px",n.style.height=o-112+"px"}var l=readSamples(e),r=null,i=monaco.editor.create(t,{model:null,scrollBeyondLastLine:!1}),d=monaco.editor.create(n,{model:null,scrollBeyondLastLine:!1}),u=document.getElementById("themeselect"),c="vs";function s(){var t;(t=e.options[e.selectedIndex].value)&&r!==t&&l[t]&&(r&&(l[r].langViewState=i.saveViewState(),l[r].sampleViewState=d.saveViewState()),r=t,i.setModel(l[r].langModel),l[r].langViewState&&i.restoreViewState(l[r].langViewState),d.setModel(l[r].sampleModel),l[r].sampleViewState&&d.restoreViewState(l[r].sampleViewState))}u.onchange=function(){c=u.options[u.selectedIndex].value,monaco.editor.setTheme(c)},window.onresize=function(){i.layout(),d.layout()},e.onchange=s,s()}));