settingsPG.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /**
  2. * This JS file is for settings :
  3. * - Theme
  4. * - Script language
  5. * - Font size
  6. */
  7. class SettingsPG {
  8. constructor(parent) {
  9. this.parent = parent;
  10. // The elements that will color with languages
  11. this.elementForscriptLanguage = [
  12. '#exampleList #exampleBanner',
  13. '.navbar',
  14. '.navbar .category',
  15. '.navbar .select .toDisplay',
  16. '.navbar .select .toDisplay .subSelect .toDisplaySub',
  17. '#fpsLabel',
  18. '.save-form',
  19. '#switchWrapper'
  20. ];
  21. // The elements that will color with theme
  22. this.elementToTheme = [
  23. '.wrapper #jsEditor',
  24. '.wrapper .gutter'
  25. ];
  26. // Editor font size
  27. this.fontSize = localStorage.getItem("bjs-playground-font") || 14;
  28. // Editor theme
  29. this.vsTheme = localStorage.getItem("bjs-playground-theme") || 'light';
  30. // Editor language
  31. this.scriptLanguage = localStorage.getItem("bjs-playground-scriptLanguage") || 'JS';
  32. this.defaultScene = "scripts/basic scene.js";
  33. if (this.scriptLanguage == "JS") {
  34. this.defaultScene = "scripts/basic scene.js";
  35. this.parent.monacoCreator.monacoMode = "javascript";
  36. }
  37. else if (this.scriptLanguage == "TS") {
  38. this.defaultScene = "scripts/basic scene.txt";
  39. this.parent.monacoCreator.monacoMode = "typescript";
  40. }
  41. }
  42. get ScriptLanguage() {
  43. return this.scriptLanguage;
  44. };
  45. set ScriptLanguage(value) {
  46. localStorage.setItem("bjs-playground-scriptLanguage", value);
  47. this.scriptLanguage = value;
  48. };
  49. get DefaultScene() {
  50. return this.defaultScene;
  51. };
  52. /**
  53. * Change font size
  54. */
  55. setFontSize(size) {
  56. localStorage.setItem("bjs-playground-font", size);
  57. this.fontSize = size;
  58. this.parent.monacoCreator.jsEditor.updateOptions({ fontSize: size });
  59. var array = document.getElementsByClassName("displayFontSize");
  60. for (var i = 0; i < array.length; i++) {
  61. var subArray = array[i].children;
  62. for (var j = 0; j < subArray.length; j++) {
  63. subArray[j].classList.remove("selected");
  64. if (subArray[j].innerText == size)
  65. subArray[j].classList.add("selected");
  66. }
  67. }
  68. };
  69. restoreFont() {
  70. this.setFontSize(this.fontSize);
  71. };
  72. /**
  73. * Toggle Typescript / Javascript language
  74. */
  75. setScriptLanguage() {
  76. for (var index = 0; index < this.elementForscriptLanguage.length; index++) {
  77. var obj = this.elementForscriptLanguage[index];
  78. var domObjArr = document.querySelectorAll(obj);
  79. for (var domObjIndex = 0; domObjIndex < domObjArr.length; domObjIndex++) {
  80. var domObj = domObjArr[domObjIndex];
  81. domObj.classList.remove('languageJS');
  82. domObj.classList.remove('languageTS');
  83. domObj.classList.add("language" + this.scriptLanguage);
  84. }
  85. }
  86. if (this.scriptLanguage == "JS") {
  87. this.parent.utils.setToMultipleID("toJSbutton", "removeClass", "floatLeft");
  88. }
  89. else if (this.scriptLanguage == "TS") {
  90. this.parent.utils.setToMultipleID("toJSbutton", "addClass", "floatLeft");
  91. }
  92. };
  93. /**
  94. * Set the theme (dark / light)
  95. */
  96. setTheme(theme) {
  97. localStorage.setItem("bjs-playground-theme", theme);
  98. // Get the Monaco theme name.
  99. // Change the selected button style
  100. this.parent.utils.setToMultipleID("darkTheme", "removeClass", "selected");
  101. this.parent.utils.setToMultipleID("lightTheme", "removeClass", "selected");
  102. if (theme == 'dark') {
  103. this.vsTheme = 'vs-dark';
  104. this.parent.utils.setToMultipleID("darkTheme", "addClass", "selected");
  105. }
  106. else {
  107. this.vsTheme = 'vs';
  108. this.parent.utils.setToMultipleID("lightTheme", "addClass", "selected");
  109. }
  110. this.parent.monacoCreator.createMonacoEditor();
  111. this.setFontSize(this.fontSize);
  112. // Color the elements to theme
  113. for (var index = 0; index < this.elementToTheme.length; index++) {
  114. var obj = this.elementToTheme[index];
  115. var domObjArr = document.querySelectorAll(obj);
  116. for (var domObjIndex = 0; domObjIndex < domObjArr.length; domObjIndex++) {
  117. var domObj = domObjArr[domObjIndex];
  118. domObj.classList.remove('light');
  119. domObj.classList.remove('dark');
  120. domObj.classList.add(theme);
  121. }
  122. }
  123. };
  124. restoreTheme() {
  125. this.setTheme(this.vsTheme, this.parent.monacoCreator);
  126. };
  127. /**
  128. * Set BJS version on click
  129. */
  130. setBJSversion(evt, code) {
  131. localStorage.setItem("bjs-playground-apiversion", evt.target.value);
  132. localStorage.setItem("bjs-playground-apiversion-tempcode", code);
  133. window.location.reload();
  134. };
  135. /**
  136. * Check if we need to restore a BJS version
  137. */
  138. restoreVersion() {
  139. if (localStorage.getItem("bjs-playground-apiversion") && localStorage.getItem("bjs-playground-apiversion") != null) {
  140. BABYLON = null;
  141. this.parent.menuPG.displayWaitDiv();
  142. var newBJSscript = document.createElement('script');
  143. newBJSscript.src = localStorage.getItem("bjs-playground-apiversion");
  144. newBJSscript.onload = function () {
  145. console.log(BABYLON.Engine.Version);
  146. this.parent.menuPG.displayVersionNumber(BABYLON.Engine.Version);
  147. this.parent.monacoCreator.setCode(localStorage.getItem("bjs-playground-apiversion-tempcode"));
  148. localStorage.removeItem("bjs-playground-apiversion");
  149. localStorage.removeItem("bjs-playground-apiversion-tempcode");
  150. this.parent.main.compileAndRun();
  151. }.bind(this);
  152. document.head.appendChild(newBJSscript);
  153. }
  154. else return false;
  155. };
  156. };