settingsPG.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /**
  2. * This JS file is for settings :
  3. * - Theme
  4. * - Script language
  5. * - Font size
  6. */
  7. /**
  8. * TO DO :
  9. * - Set the font in the localStorage
  10. */
  11. class SettingsPG {
  12. constructor(monacoCreator) {
  13. this.monacoCreator = monacoCreator;
  14. // The elements that will color with languages
  15. this.elementForscriptLanguage = [
  16. '#exampleList #exampleBanner',
  17. '.navbar',
  18. '.navbar .category',
  19. '.navbar .select .toDisplay',
  20. '.navbar .select .toDisplay .subSelect .toDisplaySub',
  21. '#fpsLabel',
  22. '.save-form',
  23. '#switchWrapper'
  24. ];
  25. // The elements that will color with theme
  26. this.elementToTheme = [
  27. '.wrapper #jsEditor',
  28. '.wrapper .gutter'
  29. ];
  30. // Editor font size
  31. this.fontSize = 14;
  32. // Editor theme
  33. this.vsTheme = localStorage.getItem("bjs-playground-theme") || 'light';
  34. // Editor language
  35. this.scriptLanguage = localStorage.getItem("bjs-playground-scriptLanguage") || 'JS';
  36. this.defaultScene = "scripts/basic scene.js";
  37. if(this.scriptLanguage == "JS") {
  38. this.defaultScene = "scripts/basic scene.js";
  39. monacoCreator.monacoMode = "javascript";
  40. }
  41. else if(this.scriptLanguage == "TS") {
  42. this.defaultScene = "scripts/basic scene.txt";
  43. monacoCreator.monacoMode = "typescript";
  44. }
  45. }
  46. get ScriptLanguage() {
  47. return this.scriptLanguage;
  48. };
  49. set ScriptLanguage(value) {
  50. localStorage.setItem("bjs-playground-scriptLanguage", value);
  51. this.scriptLanguage = value;
  52. };
  53. get DefaultScene() {
  54. return this.defaultScene;
  55. };
  56. /**
  57. * Change font size
  58. */
  59. setFontSize(size) {
  60. this.fontSize = size;
  61. this.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. /**
  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. utils.setToMultipleID("toJSbutton", "removeClass", "floatLeft");
  88. }
  89. else if (this.scriptLanguage == "TS") {
  90. 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. utils.setToMultipleID("darkTheme", "removeClass", "selected");
  101. utils.setToMultipleID("lightTheme", "removeClass", "selected");
  102. if (theme == 'dark') {
  103. this.vsTheme = 'vs-dark';
  104. utils.setToMultipleID("darkTheme", "addClass", "selected");
  105. }
  106. else {
  107. this.vsTheme = 'vs';
  108. utils.setToMultipleID("lightTheme", "addClass", "selected");
  109. }
  110. this.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(monacoCreator) {
  125. this.setTheme(this.vsTheme, monacoCreator);
  126. };
  127. };