sunrize 1.9.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,7 +13,11 @@ Sunrize is based on [X_ITE](https://create3000.github.io/x_ite/) and is a basic
13
13
  * [Website](https://create3000.github.io/sunrize/)
14
14
  * [Documentation](https://create3000.github.io/sunrize/documentation/)
15
15
 
16
- ## Usage
16
+ ## Installer Packages
17
+
18
+ The latest builds of Sunrize are available as installer packages on the [Sunrize Releases](https://github.com/create3000/sunrize/releases) page on GitHub. From there, you can download precompiled binaries, but currently only for Windows.
19
+
20
+ ## Run from Console
17
21
 
18
22
  First you need to install both Node.js and npm on your system. To accomplish this, you can use a [Node installer](https://nodejs.org/en/download/) (Windows), or use [Homebrew](https://brew.sh) to install node (macos), or use your Linux package manager.
19
23
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sunrize",
3
3
  "productName": "Sunrize X3D Editor",
4
- "version": "1.9.1",
4
+ "version": "1.10.2",
5
5
  "description": "A Multi-Platform X3D Editor",
6
6
  "main": "src/main.js",
7
7
  "bin": {
@@ -20,16 +20,15 @@
20
20
  "premake": "npm i -D electron",
21
21
  "make": "electron-forge make",
22
22
  "postmake": "npm i -P electron",
23
- "pregithub": "npm i -D electron",
24
- "github": "electron-forge publish",
25
- "postgithub": "npm i -P electron",
23
+ "publish-to-github": "node build/publish-to-github.js",
26
24
  "predocs": "rm -f -r docs/_site/",
27
25
  "docs": "cd docs && bundle exec jekyll serve --ssl-key ssl/server.key --ssl-cert ssl/server.crt --incremental --host=`ipconfig getifaddr en0`",
28
26
  "predocs-install": "cd docs && ln -s -f ../../ssl ./",
29
27
  "docs-install": "cd docs && gem install bundler && bundle install",
30
28
  "docs-update": "cd docs && bundle update",
31
29
  "merge-development": "sh build/merge-development.sh",
32
- "make-x_ite-for-sunrize": "sh build/make-x_ite-for-sunrize.sh"
30
+ "make-x_ite-for-sunrize": "sh build/make-x_ite-for-sunrize.sh",
31
+ "loading-gif": "node build/loading-gif.js"
33
32
  },
34
33
  "repository": {
35
34
  "type": "git",
@@ -91,7 +90,7 @@
91
90
  "dependencies": {
92
91
  "capitalize": "^2.0.4",
93
92
  "console": "^0.7.2",
94
- "electron": "^38.0.0",
93
+ "electron": "^38.1.2",
95
94
  "electron-prompt": "^1.7.0",
96
95
  "electron-squirrel-startup": "^1.0.1",
97
96
  "electron-tabs": "^1.0.4",
@@ -103,14 +102,14 @@
103
102
  "material-symbols": "^0.35.0",
104
103
  "md5": "^2.3.0",
105
104
  "mime-types": "^3.0.1",
106
- "monaco-editor": "^0.50.0",
105
+ "monaco-editor": "^0.53.0",
107
106
  "node-localstorage": "^3.0.5",
108
107
  "qtip2": "^3.0.3",
109
108
  "spectrum-colorpicker2": "^2.0.10",
110
109
  "string-similarity": "^4.0.4",
111
110
  "tweakpane": "^3.1.10",
112
111
  "update-electron-app": "^3.1.1",
113
- "x_ite": "^12.0.7",
112
+ "x_ite": "^12.0.8",
114
113
  "x3d-traverse": "^1.0.13"
115
114
  }
116
115
  }
@@ -7,6 +7,7 @@ const
7
7
  path = require ("path"),
8
8
  fs = require ("fs"),
9
9
  util = require ("util"),
10
+ Registry = require ("./Registry"),
10
11
  Template = require ("./Template"),
11
12
  LocalStorage = require ("node-localstorage") .LocalStorage,
12
13
  DataStorage = require ("../Application/DataStorage"),
@@ -33,7 +34,9 @@ module .exports = class Application
33
34
  }
34
35
 
35
36
  if (process .platform === "win32")
36
- require ("update-electron-app") .updateElectronApp ();
37
+ require ("update-electron-app") .updateElectronApp ({ updateInterval: "1 hour" });
38
+
39
+ Registry .addWindowsFileTypes ();
37
40
 
38
41
  electron .app .commandLine .appendSwitch ("--enable-features", "OverlayScrollbar,ConversionMeasurement,AttributionReportingCrossAppWeb");
39
42
 
@@ -75,7 +78,7 @@ module .exports = class Application
75
78
 
76
79
  Template .create (path .join (__dirname, "../assets/html/application-template.html"));
77
80
  Template .create (path .join (__dirname, "../assets/html/window-template.html"));
78
- Template .create (path .join (__dirname, "../assets/themes/default-template.css"));
81
+ Template .create (path .join (__dirname, "../assets/themes/media-template.css"));
79
82
  Template .create (path .join (__dirname, "../assets/themes/prompt-template.css"));
80
83
 
81
84
  this .setup ();
@@ -384,9 +387,14 @@ module .exports = class Application
384
387
  },
385
388
  { type: "separator" },
386
389
  {
387
- label: _("Close"),
390
+ label: _("Close Tab"),
388
391
  accelerator: "CmdOrCtrl+W",
389
- click: () => this .mainWindow .webContents .send ("close"),
392
+ click: () => this .mainWindow .webContents .send ("close-tab"),
393
+ },
394
+ {
395
+ label: _("Close All Tabs"),
396
+ accelerator: "Option+CmdOrCtrl+W",
397
+ click: () => this .mainWindow .webContents .send ("close-all-tabs"),
390
398
  },
391
399
  ... process .platform === "darwin" ?
392
400
  [ ]
@@ -424,22 +432,49 @@ module .exports = class Application
424
432
  { type: "separator" },
425
433
  { role: "selectAll" },
426
434
  ],
435
+ ]
436
+ }
437
+ : this .menuOptions .monacoEditor ?
438
+ {
439
+ role: "editMenu",
440
+ submenu: [
441
+ {
442
+ label: _("Undo"),
443
+ accelerator: "CmdOrCtrl+Z",
444
+ click: () => this .mainWindow .webContents .send ("script-editor", "triggerEvent", "keyboard", "undo", null),
445
+ },
446
+ {
447
+ label: _("Redo"),
448
+ accelerator: "CmdOrCtrl+Shift+Z",
449
+ click: () => this .mainWindow .webContents .send ("script-editor", "triggerEvent", "keyboard", "redo", null),
450
+ },
451
+ { type: "separator" },
452
+ {
453
+ role: "cut",
454
+ click: () => this .mainWindow .webContents .send ("script-editor", "cutOrCopy", "cut"),
455
+ },
456
+ {
457
+ role: "copy",
458
+ click: () => this .mainWindow .webContents .send ("script-editor", "cutOrCopy", "copy"),
459
+ },
460
+ {
461
+ role: "paste",
462
+ click: () => this .mainWindow .webContents .send ("script-editor", "paste"),
463
+ },
427
464
  { type: "separator" },
428
465
  {
429
466
  label: _("Toggle Line Comment"),
430
467
  accelerator: process .platform === "darwin" ? "CmdOrCtrl+Shift+7" : "CmdOrCtrl+#",
431
- enabled: this .menuOptions .monacoEditor,
432
468
  click: () => this .mainWindow .webContents .send ("script-editor", "runAction", "editor.action.commentLine"),
433
469
  },
434
470
  {
435
471
  label: _("Toggle Block Comment"),
436
472
  accelerator: "Alt+Shift+A",
437
- enabled: this .menuOptions .monacoEditor,
438
473
  click: () => this .mainWindow .webContents .send ("script-editor", "runAction", "editor.action.blockComment"),
439
474
  },
440
475
  ]
441
476
  }
442
- :
477
+ : // Outline Editor, Browser
443
478
  {
444
479
  role: "editMenu",
445
480
  submenu: [
@@ -456,15 +491,9 @@ module .exports = class Application
456
491
  click: () => this .mainWindow .webContents .send ("redo"),
457
492
  },
458
493
  { type: "separator" },
459
- {
460
- role: "cut",
461
- },
462
- {
463
- role: "copy",
464
- },
465
- {
466
- role: "paste",
467
- },
494
+ { role: "cut" },
495
+ { role: "copy" },
496
+ { role: "paste" },
468
497
  {
469
498
  label: _("Delete"),
470
499
  accelerator: "CmdOrCtrl+Backspace",
@@ -932,7 +961,7 @@ module .exports = class Application
932
961
  {
933
962
  if (menuItem .submenu)
934
963
  this .addMenuItemHandlers (id, menuItem .submenu);
935
- else
964
+ else if (menuItem .args)
936
965
  menuItem .click = () => this .mainWindow .webContents .send (id, ... menuItem .args);
937
966
  }
938
967
 
@@ -92,7 +92,7 @@ module .exports = class Dashboard extends Interface
92
92
 
93
93
  this .showPanelsButton = $("<span></span>")
94
94
  .addClass (["material-symbols-outlined"])
95
- .attr ("title", _("Toggle visibility of Panel."))
95
+ .attr ("title", _("Show Node Panel."))
96
96
  .text ("edit_note")
97
97
  .appendTo (this .toolbar)
98
98
  .on ("click", () => this .togglePanel (!this .config .file .panel));
@@ -272,9 +272,37 @@ module .exports = class Document extends Interface
272
272
  {
273
273
  this .activeElement = document .activeElement ? $(document .activeElement) : null;
274
274
 
275
+ if (this .activeElement ?.is ("input, textarea"))
276
+ {
277
+ this .activeElement
278
+ .off ("contextmenu.Document")
279
+ .on ("contextmenu.Document", () => this .showContextMenu ());
280
+ }
281
+
275
282
  electron .ipcRenderer .send ("update-menu", this .updateEditMenu ({ }));
276
283
  }
277
284
 
285
+ async showContextMenu ()
286
+ {
287
+ await $.sleep ();
288
+
289
+ if (this .activeElementIsMonacoEditor ())
290
+ return;
291
+
292
+ const menu = [
293
+ { role: "undo", accelerator: "CmdOrCtrl+Z" },
294
+ { role: "redo", accelerator: "Shift+CmdOrCtrl+Z" },
295
+ { type: "separator" },
296
+ { role: "cut", accelerator: "CmdOrCtrl+X" },
297
+ { role: "copy", accelerator: "CmdOrCtrl+C" },
298
+ { role: "paste", accelerator: "CmdOrCtrl+P" },
299
+ { type: "separator" },
300
+ { role: "selectAll", accelerator: "CmdOrCtrl+A" },
301
+ ];
302
+
303
+ electron .ipcRenderer .send ("context-menu", "default-context-menu", menu);
304
+ }
305
+
278
306
  updateEditMenu (menu)
279
307
  {
280
308
  return Object .assign (menu,
@@ -314,6 +342,9 @@ module .exports = class Document extends Interface
314
342
  if (!this .activeElement .closest (".monaco-editor") .length)
315
343
  return false;
316
344
 
345
+ if (this .activeElement .closest (".ibwrapper") .length)
346
+ return false;
347
+
317
348
  return true;
318
349
  }
319
350
 
@@ -586,6 +617,9 @@ Viewpoint {
586
617
  if (this .activeElementIsInputOrOutput ())
587
618
  return;
588
619
 
620
+ if (this .activeElementIsMonacoEditor ())
621
+ return;
622
+
589
623
  this .sidebar .outlineEditor .cutNodes ();
590
624
  return false;
591
625
  }
@@ -595,6 +629,9 @@ Viewpoint {
595
629
  if (this .activeElementIsInputOrOutput ())
596
630
  return;
597
631
 
632
+ if (this .activeElementIsMonacoEditor ())
633
+ return;
634
+
598
635
  this .sidebar .outlineEditor .copyNodes (true);
599
636
  return false;
600
637
  }
@@ -604,6 +641,9 @@ Viewpoint {
604
641
  if (this .activeElementIsInputOrOutput ())
605
642
  return;
606
643
 
644
+ if (this .activeElementIsMonacoEditor ())
645
+ return;
646
+
607
647
  this .sidebar .outlineEditor .pasteNodes ();
608
648
  return false;
609
649
  }
@@ -0,0 +1,43 @@
1
+ const
2
+ electron = require ("electron"),
3
+ path = require ("path"),
4
+ fs = require ("fs"),
5
+ child_process = require ("child_process");
6
+
7
+ module .exports = class Registry
8
+ {
9
+ static addWindowsFileTypes ()
10
+ {
11
+ if (process .platform !== "win32")
12
+ return;
13
+
14
+ if (!electron .app .isPackaged)
15
+ return;
16
+
17
+ const
18
+ exe = electron .app .getPath ("exe"),
19
+ reg = fs .readFileSync (path .join (__dirname, "../assets/X3D.reg"), { encoding: "utf-8" }),
20
+ tmp = path .join (__dirname, "../assets/X3D-tmp.reg");
21
+
22
+ const out = reg .replaceAll ("SUNRIZE_EXE", exe .replaceAll ("\\", "\\\\"));
23
+
24
+ fs .writeFileSync (tmp, out);
25
+
26
+ const ls = child_process .spawn ("reg", ["import", tmp]);
27
+
28
+ ls .stdout .on ('data', (data) =>
29
+ {
30
+ // console .log (`stdout: ${data}`);
31
+ });
32
+
33
+ ls .stderr .on ('data', (data) =>
34
+ {
35
+ // console .error (`stderr: ${data}`);
36
+ });
37
+
38
+ ls .on ("close", (code) =>
39
+ {
40
+ fs .unlinkSync (tmp);
41
+ });
42
+ }
43
+ }
@@ -54,7 +54,8 @@ module .exports = new class Tabs
54
54
  electron .ipcRenderer .on ("save-file", (event) => this .saveFile ());
55
55
  electron .ipcRenderer .on ("save-file-as", (event, filePath) => this .saveFileAs (filePath));
56
56
  electron .ipcRenderer .on ("save-all-files", (event) => this .saveAllFiles ());
57
- electron .ipcRenderer .on ("close", (event) => this .tabs .getActiveTab () ?.close (true));
57
+ electron .ipcRenderer .on ("close-tab", (event) => this .tabs .getActiveTab () ?.close (true));
58
+ electron .ipcRenderer .on ("close-all-tabs", (event) => this .closeAllTabs ());
58
59
  electron .ipcRenderer .on ("quit", (event) => this .quit ());
59
60
 
60
61
  electron .ipcRenderer .on ("toggle-developer-tools", (event) => this .tabs .getActiveTab () .webview .openDevTools ());
@@ -336,6 +337,12 @@ module .exports = new class Tabs
336
337
  tab .webview .send ("save-file");
337
338
  }
338
339
 
340
+ closeAllTabs ()
341
+ {
342
+ for (const tab of this .tabs .getTabs ())
343
+ tab .close (true);
344
+ }
345
+
339
346
  close ()
340
347
  {
341
348
  this .saveTabs ();
@@ -22,8 +22,8 @@ class Template
22
22
 
23
23
  const file = fs .readFileSync (template)
24
24
  .toString ()
25
- .replace (/(url\()(.*?)(\))/sg, Template .resolve .bind (null, template))
26
- .replace (/(href=")(.*?)(")/sg, Template .resolve .bind (null, template));
25
+ .replace (/(url\()(.*?)(\))/sg, (... args) => this .resolve (template, ... args))
26
+ .replace (/(href=")(.*?)(")/sg, (... args) => this .resolve (template, ... args));
27
27
 
28
28
  fs .writeFileSync (filename, file);
29
29
  fs .utimesSync (dirname, stats .atime, stats .mtime);
@@ -12,9 +12,19 @@ require ("../Bits/Validate");
12
12
 
13
13
  $.fn.renameNodeInput = function (node)
14
14
  {
15
+ this .data ("node") ?.name_changed .removeFieldCallback (this);
16
+ this .data ("node", node);
17
+
18
+ node ?.name_changed .addFieldCallback (this, () => this .val (node .getName ()));
19
+
20
+ if (node)
21
+ this .removeAttr ("disabled");
22
+ else
23
+ this .attr ("disabled", "");
24
+
15
25
  this
16
26
  .val (node ? node .getName () : "")
17
- .siblings () .addBack () .off ("keydown.renameNodeInput")
27
+ .siblings () .addBack () .off ("keydown.renameNodeInput");
18
28
 
19
29
  this .validate (Editor .Id, () =>
20
30
  {
@@ -107,4 +117,3 @@ $.fn.renameNodeInput = function (node)
107
117
 
108
118
  return this;
109
119
  };
110
-
@@ -151,6 +151,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
151
151
  { type: "separator" },
152
152
  {
153
153
  label: _("Paste"),
154
+ accelerator: "CmdOrCtrl+V",
154
155
  visible: field .getType () === X3D .X3DConstants .SFNode || field .getType () === X3D .X3DConstants .MFNode,
155
156
  args: ["pasteNodes", element .attr ("id"), executionContext .getId (), node .getId (), field .getId ()],
156
157
  },
@@ -223,18 +224,22 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
223
224
  { type: "separator" },
224
225
  {
225
226
  label: _("Cut"),
227
+ accelerator: "CmdOrCtrl+X",
226
228
  args: ["cutNodes"],
227
229
  },
228
230
  {
229
231
  label: _("Copy"),
232
+ accelerator: "CmdOrCtrl+C",
230
233
  args: ["copyNodes"],
231
234
  },
232
235
  {
233
236
  label: _("Paste"),
237
+ accelerator: "CmdOrCtrl+V",
234
238
  args: ["pasteNodes", element .attr ("id"), executionContext .getId (), node .getId ()],
235
239
  },
236
240
  {
237
241
  label: _("Delete"),
242
+ accelerator: "CmdOrCtrl+Backspace",
238
243
  args: ["deleteNodes"],
239
244
  },
240
245
  {
@@ -537,14 +542,17 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
537
542
  var menu = [
538
543
  {
539
544
  label: _("Cut"),
545
+ accelerator: "CmdOrCtrl+X",
540
546
  args: ["cutNodes"],
541
547
  },
542
548
  {
543
549
  label: _("Copy"),
550
+ accelerator: "CmdOrCtrl+C",
544
551
  args: ["copyNodes"],
545
552
  },
546
553
  {
547
554
  label: _("Delete"),
555
+ accelerator: "CmdOrCtrl+Backspace",
548
556
  args: ["deleteNodes"],
549
557
  },
550
558
  ];
@@ -670,6 +678,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
670
678
  },
671
679
  {
672
680
  label: _("Paste"),
681
+ accelerator: "CmdOrCtrl+V",
673
682
  args: ["pasteNodes", element .attr ("id"), executionContext .getId ()],
674
683
  },
675
684
  ];
@@ -5,10 +5,6 @@ const
5
5
  X3D = require ("../X3D"),
6
6
  OutlineView = require ("./OutlineView");
7
7
 
8
- const
9
- routeColor = "#000000",
10
- routeSelectedColor = "rgb(255, 69, 58)";
11
-
12
8
  module .exports = class OutlineRouteGraph extends OutlineView
13
9
  {
14
10
  constructor (element)
@@ -18,6 +14,16 @@ module .exports = class OutlineRouteGraph extends OutlineView
18
14
  this .selectedRoutes = new Set ();
19
15
  }
20
16
 
17
+ colorScheme (shouldUseDarkColors)
18
+ {
19
+ super .colorScheme (shouldUseDarkColors);
20
+
21
+ this .routeColor = window .getComputedStyle ($("body") [0]) .getPropertyValue ("--system-gray1");
22
+ this .routeSelectedColor = window .getComputedStyle ($("body") [0]) .getPropertyValue ("--system-red");
23
+
24
+ this .requestUpdateRouteGraph ();
25
+ }
26
+
21
27
  selectRoutes (type, event)
22
28
  {
23
29
  // Select routes.
@@ -143,6 +149,8 @@ module .exports = class OutlineRouteGraph extends OutlineView
143
149
  parent = canvas .parent (),
144
150
  context = canvas .get (0) .getContext ("2d");
145
151
 
152
+ const { routeColor, routeSelectedColor } = this;
153
+
146
154
  canvas .height (Math .ceil (parent .height ()));
147
155
 
148
156
  canvas .prop ("width", canvas .width ());
@@ -221,6 +229,8 @@ module .exports = class OutlineRouteGraph extends OutlineView
221
229
  parent = canvas .parent (),
222
230
  context = canvas .get (0) .getContext ("2d");
223
231
 
232
+ const { routeColor, routeSelectedColor } = this;
233
+
224
234
  canvas .height (Math .ceil (parent .height ()));
225
235
 
226
236
  canvas .prop ("width", canvas .width ());
@@ -275,6 +285,8 @@ module .exports = class OutlineRouteGraph extends OutlineView
275
285
 
276
286
  updateRouteCurves (canvases, fields)
277
287
  {
288
+ const { routeColor, routeSelectedColor } = this;
289
+
278
290
  // Scale canvases
279
291
 
280
292
  for (let i = 0, length = canvases .length - 1; i < length; ++ i)
@@ -1716,7 +1716,7 @@ module .exports = class OutlineView extends Interface
1716
1716
  .addClass ("input-selector") .appendTo (map);
1717
1717
 
1718
1718
  const inputRoutesSelector = $("<area></area>")
1719
- .attr ("title", _("Select routes."))
1719
+ .attr ("title", _("Select route(s)."))
1720
1720
  .attr ("shape", "rect")
1721
1721
  .attr ("coords", "20,0,28,7")
1722
1722
  .addClass ("input-routes-selector") .appendTo (map);
@@ -1736,7 +1736,7 @@ module .exports = class OutlineView extends Interface
1736
1736
  .addClass ("output-selector") .appendTo (map);
1737
1737
 
1738
1738
  const outputRoutesSelector = $("<area></area>")
1739
- .attr ("title", _("Select routes."))
1739
+ .attr ("title", _("Select route(s)."))
1740
1740
  .attr ("shape", "rect")
1741
1741
  .attr ("coords", "20,5,28,12")
1742
1742
  .addClass ("output-routes-selector")
@@ -1765,7 +1765,7 @@ module .exports = class OutlineView extends Interface
1765
1765
  .appendTo (map);
1766
1766
 
1767
1767
  const inputRoutesSelector = $("<area></area>")
1768
- .attr ("title", _("Select routes."))
1768
+ .attr ("title", _("Select route(s)."))
1769
1769
  .attr ("shape", "rect")
1770
1770
  .attr ("coords", "34,0,42,7")
1771
1771
  .addClass ("input-routes-selector")
@@ -1775,7 +1775,7 @@ module .exports = class OutlineView extends Interface
1775
1775
  inputRoutesSelector .attr ("href", "#");
1776
1776
 
1777
1777
  const outputRoutesSelector = $("<area></area>")
1778
- .attr ("title", _("Select routes."))
1778
+ .attr ("title", _("Select route(s)."))
1779
1779
  .attr ("shape", "rect")
1780
1780
  .addClass ("output-routes-selector")
1781
1781
  .appendTo (map);
@@ -2359,7 +2359,7 @@ module .exports = class OutlineView extends Interface
2359
2359
 
2360
2360
  $("<div></div>")
2361
2361
  .addClass (type + "-value-container")
2362
- .append ($("<input></input>") .attr ("type", "text"))
2362
+ .append ($("<input></input>") .attr ("type", "text") .attr ("lang", "en"))
2363
2363
  .appendTo (li);
2364
2364
 
2365
2365
  // Make jsTree.
@@ -2467,7 +2467,7 @@ module .exports = class OutlineView extends Interface
2467
2467
 
2468
2468
  $("<div></div>")
2469
2469
  .addClass (type + "-value-container")
2470
- .append ($("<textarea></textarea>"))
2470
+ .append ($("<textarea></textarea>") .attr ("lang", "en"))
2471
2471
  .appendTo (li)
2472
2472
 
2473
2473
  // Make jsTree.
@@ -3827,7 +3827,7 @@ module .exports = class OutlineView extends Interface
3827
3827
 
3828
3828
  selectRoutes (type, event)
3829
3829
  {
3830
- // Select routes.
3830
+ // Select route(s).
3831
3831
  }
3832
3832
 
3833
3833
  selectSingleRoute (type, event)
@@ -120,7 +120,7 @@ module .exports = new class Panel extends Interface
120
120
 
121
121
  this .container .css ({
122
122
  "overflow": "visible",
123
- "max-height": "auto",
123
+ "max-height": "unset",
124
124
  });
125
125
 
126
126
  // Create folders.
@@ -227,9 +227,9 @@ module .exports = new class SceneProperties extends Dialog
227
227
 
228
228
  this .executionContext .getWorldInfos () .addInterest ("updateWorldInfo", this);
229
229
 
230
- const window = require ("../Application/Window");
230
+ const app = require ("../Application/Window");
231
231
 
232
- this .profileAndComponents .inputs .checkbox .prop ("checked", window .config .file .inferProfileAndComponents);
232
+ this .profileAndComponents .inputs .checkbox .prop ("checked", app .config .file .inferProfileAndComponents);
233
233
 
234
234
  this .toggleInferProfileAndComponents ();
235
235
  this .updateProfile ();
@@ -251,9 +251,9 @@ module .exports = new class SceneProperties extends Dialog
251
251
 
252
252
  toggleInferProfileAndComponents ()
253
253
  {
254
- const window = require ("../Application/Window");
254
+ const app = require ("../Application/Window");
255
255
 
256
- window .config .file .inferProfileAndComponents = this .profileAndComponents .inputs .checkbox .prop ("checked");
256
+ app .config .file .inferProfileAndComponents = this .profileAndComponents .inputs .checkbox .prop ("checked");
257
257
 
258
258
  if (this .profileAndComponents .inputs .checkbox .prop ("checked"))
259
259
  this .profileAndComponents .checkboxRow .addClass ("disabled");