settingsPG.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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. } else if (this.scriptLanguage == "TS") {
  40. this.defaultScene = "scripts/basic scene.txt";
  41. this.parent.monacoCreator.monacoMode = "typescript";
  42. }
  43. }
  44. get ScriptLanguage() {
  45. return this.scriptLanguage;
  46. };
  47. set ScriptLanguage(value) {
  48. localStorage.setItem("bjs-playground-scriptLanguage", value);
  49. this.scriptLanguage = value;
  50. };
  51. get DefaultScene() {
  52. return this.defaultScene;
  53. };
  54. /**
  55. * Change font size
  56. */
  57. setFontSize(size) {
  58. localStorage.setItem("bjs-playground-font", size);
  59. this.fontSize = size;
  60. this.parent.monacoCreator.jsEditor.updateOptions({
  61. fontSize: size
  62. });
  63. var array = document.getElementsByClassName("displayFontSize");
  64. for (var i = 0; i < array.length; i++) {
  65. var subArray = array[i].children;
  66. for (var j = 0; j < subArray.length; j++) {
  67. subArray[j].classList.remove("selected");
  68. if (subArray[j].innerText == size)
  69. subArray[j].classList.add("selected");
  70. }
  71. }
  72. };
  73. restoreFont() {
  74. this.setFontSize(this.fontSize);
  75. };
  76. /**
  77. * Toggle Typescript / Javascript language
  78. */
  79. setScriptLanguage() {
  80. for (var index = 0; index < this.elementForscriptLanguage.length; index++) {
  81. var obj = this.elementForscriptLanguage[index];
  82. var domObjArr = document.querySelectorAll(obj);
  83. for (var domObjIndex = 0; domObjIndex < domObjArr.length; domObjIndex++) {
  84. var domObj = domObjArr[domObjIndex];
  85. domObj.classList.remove('languageJS');
  86. domObj.classList.remove('languageTS');
  87. domObj.classList.add("language" + this.scriptLanguage);
  88. }
  89. }
  90. if (this.scriptLanguage == "JS") {
  91. this.parent.utils.setToMultipleID("toJSbutton", "removeClass", "floatLeft");
  92. this.parent.utils.setToMultipleID("toJSbutton", "addClass", "selectedLanguage");
  93. this.parent.utils.setToMultipleID("toJSbutton", "innerHTML", "Javascript");
  94. this.parent.utils.setToMultipleID("toTSbutton", "title", "Switch to TypeScript");
  95. } else if (this.scriptLanguage == "TS") {
  96. this.parent.utils.setToMultipleID("toJSbutton", "addClass", "floatLeft");
  97. this.parent.utils.setToMultipleID("toTSbutton", "addClass", "selectedLanguage");
  98. this.parent.utils.setToMultipleID("toTSbutton", "innerHTML", "Typescript");
  99. this.parent.utils.setToMultipleID("toJSbutton", "title", "Switch to JavaScript");
  100. }
  101. };
  102. /**
  103. * Set the theme (dark / light)
  104. */
  105. setTheme(theme) {
  106. localStorage.setItem("bjs-playground-theme", theme);
  107. // Get the Monaco theme name.
  108. // Change the selected button style
  109. this.parent.utils.setToMultipleID("darkTheme", "removeClass", "selected");
  110. this.parent.utils.setToMultipleID("lightTheme", "removeClass", "selected");
  111. if (theme == 'dark') {
  112. this.vsTheme = 'vs-dark';
  113. this.parent.utils.setToMultipleID("darkTheme", "addClass", "selected");
  114. } else {
  115. this.vsTheme = 'vs';
  116. this.parent.utils.setToMultipleID("lightTheme", "addClass", "selected");
  117. }
  118. this.parent.monacoCreator.createMonacoEditor();
  119. this.setFontSize(this.fontSize);
  120. // Color the elements to theme
  121. for (var index = 0; index < this.elementToTheme.length; index++) {
  122. var obj = this.elementToTheme[index];
  123. var domObjArr = document.querySelectorAll(obj);
  124. for (var domObjIndex = 0; domObjIndex < domObjArr.length; domObjIndex++) {
  125. var domObj = domObjArr[domObjIndex];
  126. domObj.classList.remove('light');
  127. domObj.classList.remove('dark');
  128. domObj.classList.add(theme);
  129. }
  130. }
  131. };
  132. restoreTheme() {
  133. this.setTheme(this.vsTheme, this.parent.monacoCreator);
  134. };
  135. /**
  136. * Set BJS version on click
  137. */
  138. setBJSversion(evt, code) {
  139. localStorage.setItem("bjs-playground-apiversion", evt.target.value);
  140. localStorage.setItem("bjs-playground-apiversion-tempcode", code);
  141. window.location.reload();
  142. };
  143. /**
  144. * Check if we need to restore a BJS version
  145. */
  146. restoreVersion() {
  147. if (this.mustModifyBJSversion()) {
  148. this.parent.menuPG.displayWaitDiv();
  149. window.def = window.define;
  150. window.define = undefined;
  151. var apiVersion = localStorage.getItem("bjs-playground-apiversion");
  152. BABYLON = null;
  153. var position = 0;
  154. for (var i = 0; i < CONFIG_last_versions.length; i++) {
  155. if (CONFIG_last_versions[i][0] == apiVersion) {
  156. position = i;
  157. break;
  158. }
  159. }
  160. var count = CONFIG_last_versions[position][1].length - 1;
  161. var newBJSscript = document.createElement('script');
  162. newBJSscript.src = CONFIG_last_versions[position][1][0];
  163. newBJSscript.onload = function () {
  164. for (var i = 1; i < CONFIG_last_versions[position][1].length; i++) {
  165. var newBJSscript = document.createElement('script');
  166. newBJSscript.src = CONFIG_last_versions[position][1][i];
  167. newBJSscript.onload = function () {
  168. count--;
  169. if (count == 0) {
  170. if (BABYLON.Engine.Version.search('-') != -1) this.parent.menuPG.displayVersionNumber("Latest");
  171. else this.parent.menuPG.displayVersionNumber(BABYLON.Engine.Version);
  172. this.parent.utils.setToMultipleID("mainTitle", "innerHTML", "v" + BABYLON.Engine.Version);
  173. this.parent.monacoCreator.addOnMonacoLoadedCallback(() => {
  174. this.parent.monacoCreator.setCode(localStorage.getItem("bjs-playground-apiversion-tempcode"));
  175. localStorage.removeItem("bjs-playground-apiversion");
  176. localStorage.removeItem("bjs-playground-apiversion-tempcode");
  177. this.parent.main.compileAndRunFromOutside();
  178. });
  179. if (window.def) {
  180. window.define = window.def;
  181. }
  182. }
  183. }.bind(this);
  184. document.head.appendChild(newBJSscript);
  185. }
  186. }.bind(this);
  187. document.head.appendChild(newBJSscript);
  188. } else return false;
  189. };
  190. mustModifyBJSversion() {
  191. if (localStorage.getItem("bjs-playground-apiversion") && localStorage.getItem("bjs-playground-apiversion") != null && localStorage.getItem("bjs-playground-apiversion") != "Latest") return true;
  192. else return false;
  193. };
  194. };