monacoCreator.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. * This JS file is for Monaco management
  3. */
  4. class MonacoCreator {
  5. constructor() {
  6. this.jsEditor = null;
  7. this.monacoMode = "javascript";
  8. this.blockEditorChange = false;
  9. this.loadMonaco();
  10. }
  11. // ACCESSORS
  12. get JsEditor() {
  13. return this.jsEditor;
  14. };
  15. get MonacoMode() {
  16. return this.monacoMode;
  17. };
  18. set MonacoMode(mode) {
  19. if(this.monacoMode != "javascript"
  20. && this.monacoMode != "typescript")
  21. console.warn("Error while defining Monaco Mode");
  22. this.monacoMode = mode;
  23. };
  24. get BlockEditorChange() {
  25. return this.blockEditorChange;
  26. };
  27. set BlockEditorChange(value) {
  28. this.blockEditorChange = value;
  29. };
  30. // FUNCTIONS
  31. /**
  32. * Load the Monaco Node module.
  33. */
  34. loadMonaco = function () {
  35. var xhr = new XMLHttpRequest();
  36. xhr.open('GET', "babylon.d.txt", true);
  37. xhr.onreadystatechange = function () {
  38. if (xhr.readyState === 4) {
  39. if (xhr.status === 200) {
  40. require.config({ paths: { 'vs': 'node_modules/monaco-editor/min/vs' } });
  41. require(['vs/editor/editor.main'], function () {
  42. if (this.monacoMode === "javascript") {
  43. monaco.languages.typescript.javascriptDefaults.addExtraLib(xhr.responseText, 'babylon.d.ts');
  44. } else {
  45. monaco.languages.typescript.typescriptDefaults.addExtraLib(xhr.responseText, 'babylon.d.ts');
  46. }
  47. run();
  48. });
  49. }
  50. }
  51. };
  52. xhr.send(null);
  53. };
  54. /**
  55. * Function to (re)create the editor
  56. */
  57. createMonacoEditor = function() {
  58. var oldCode = "";
  59. if(this.jsEditor) {
  60. oldCode = this.jsEditor.getValue();
  61. this.jsEditor.dispose();
  62. }
  63. var editorOptions = {
  64. value: "",
  65. language: this.monacoMode,
  66. lineNumbers: true,
  67. tabSize: "auto",
  68. insertSpaces: "auto",
  69. roundedSelection: true,
  70. automaticLayout: true,
  71. scrollBeyondLastLine: false,
  72. readOnly: false,
  73. theme: settingsPG.vsTheme,
  74. contextmenu: false,
  75. folding: true,
  76. showFoldingControls: "always",
  77. renderIndentGuides: true,
  78. minimap: {
  79. enabled: true
  80. }
  81. };
  82. editorOptions.minimap.enabled = document.getElementById("minimapToggle1280").classList.contains('checked');
  83. this.jsEditor = monaco.editor.create(document.getElementById('jsEditor'), editorOptions);
  84. this.jsEditor.setValue(oldCode);
  85. this.jsEditor.onKeyUp(function () {
  86. utils.markDirty();
  87. });
  88. };
  89. };