settingsPG.js 6.3 KB

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