sunrize 1.10.4 → 1.11.1
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/package.json +11 -11
- package/src/Application/Application.js +4 -10
- package/src/Application/Document.js +15 -16
- package/src/Application/Footer.js +3 -5
- package/src/Application/Tabs.js +2 -7
- package/src/Components/Navigation/Collision.js +20 -10
- package/src/Controls/AddPrototypePopover.js +2 -2
- package/src/Controls/AnimationPropertiesPopover.js +109 -0
- package/src/Controls/EditNodePopover.js +1 -1
- package/src/Controls/EditUserDefinedFieldPopover.js +1 -1
- package/src/Controls/Splitter.js +30 -30
- package/src/Editors/AnimationEditor.js +3108 -6
- package/src/Editors/AnimationMemberList.js +662 -0
- package/src/Editors/BrowserFrame.js +5 -3
- package/src/Editors/Console.js +2 -1
- package/src/Editors/NodeList.js +20 -15
- package/src/Editors/OutlineEditor.js +4 -4
- package/src/Editors/OutlineRouteGraph.js +4 -2
- package/src/Editors/OutlineView.js +1 -1
- package/src/Editors/SceneProperties.js +188 -49
- package/src/Editors/ScriptEditor.js +12 -7
- package/src/Undo/Editor.js +9 -10
- package/src/Undo/UndoManager.js +2 -2
- package/src/X3D.js +1 -1
- package/src/assets/themes/default.css +164 -36
- package/src/assets/themes/system-colors.css +85 -77
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sunrize",
|
|
3
3
|
"productName": "Sunrize X3D Editor",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.11.1",
|
|
5
5
|
"description": "A Multi-Platform X3D Editor",
|
|
6
6
|
"main": "src/main.js",
|
|
7
7
|
"bin": {
|
|
@@ -78,19 +78,19 @@
|
|
|
78
78
|
"url": "https://patreon.com/X_ITE"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@electron-forge/cli": "^7.
|
|
82
|
-
"@electron-forge/maker-deb": "^7.
|
|
83
|
-
"@electron-forge/maker-dmg": "^7.
|
|
84
|
-
"@electron-forge/maker-rpm": "^7.
|
|
85
|
-
"@electron-forge/maker-squirrel": "^7.
|
|
86
|
-
"@electron-forge/maker-zip": "^7.
|
|
87
|
-
"@electron-forge/publisher-github": "^7.
|
|
81
|
+
"@electron-forge/cli": "^7.9.0",
|
|
82
|
+
"@electron-forge/maker-deb": "^7.9.0",
|
|
83
|
+
"@electron-forge/maker-dmg": "^7.9.0",
|
|
84
|
+
"@electron-forge/maker-rpm": "^7.9.0",
|
|
85
|
+
"@electron-forge/maker-squirrel": "^7.9.0",
|
|
86
|
+
"@electron-forge/maker-zip": "^7.9.0",
|
|
87
|
+
"@electron-forge/publisher-github": "^7.9.0",
|
|
88
88
|
"shell-tools": "^1.1.9"
|
|
89
89
|
},
|
|
90
90
|
"dependencies": {
|
|
91
91
|
"capitalize": "^2.0.4",
|
|
92
92
|
"console": "^0.7.2",
|
|
93
|
-
"electron": "^38.1
|
|
93
|
+
"electron": "^38.2.1",
|
|
94
94
|
"electron-prompt": "^1.7.0",
|
|
95
95
|
"electron-squirrel-startup": "^1.0.1",
|
|
96
96
|
"electron-tabs": "^1.0.4",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"jquery-ui-dist": "^1.13.3",
|
|
100
100
|
"jstree": "^3.3.17",
|
|
101
101
|
"material-icons": "^1.13.14",
|
|
102
|
-
"material-symbols": "^0.
|
|
102
|
+
"material-symbols": "^0.36.2",
|
|
103
103
|
"md5": "^2.3.0",
|
|
104
104
|
"mime-types": "^3.0.1",
|
|
105
105
|
"monaco-editor": "^0.53.0",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"string-similarity": "^4.0.4",
|
|
110
110
|
"tweakpane": "^3.1.10",
|
|
111
111
|
"update-electron-app": "^3.1.1",
|
|
112
|
-
"x_ite": "^12.
|
|
112
|
+
"x_ite": "^12.1.1",
|
|
113
113
|
"x3d-traverse": "^1.0.13"
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -304,7 +304,7 @@ module .exports = class Application
|
|
|
304
304
|
click: () => this .mainWindow .webContents .send ("save-file"),
|
|
305
305
|
},
|
|
306
306
|
{
|
|
307
|
-
label: _("Save
|
|
307
|
+
label: _("Save as..."),
|
|
308
308
|
accelerator: "Shift+CmdOrCtrl+S",
|
|
309
309
|
click: async () =>
|
|
310
310
|
{
|
|
@@ -319,7 +319,7 @@ module .exports = class Application
|
|
|
319
319
|
},
|
|
320
320
|
},
|
|
321
321
|
{
|
|
322
|
-
label: _("Save
|
|
322
|
+
label: _("Save a Copy..."),
|
|
323
323
|
click: async () =>
|
|
324
324
|
{
|
|
325
325
|
const response = await this .showSaveDialog ({ defaultPath: this .currentFile });
|
|
@@ -353,7 +353,7 @@ module .exports = class Application
|
|
|
353
353
|
... exportPath ?
|
|
354
354
|
[
|
|
355
355
|
{
|
|
356
|
-
label: util .format (_("Export
|
|
356
|
+
label: util .format (_("Export as %s"), path .basename (exportPath)),
|
|
357
357
|
accelerator: "CmdOrCtrl+E",
|
|
358
358
|
click: () => this .mainWindow .webContents .send ("export-as", exportPath),
|
|
359
359
|
}
|
|
@@ -361,7 +361,7 @@ module .exports = class Application
|
|
|
361
361
|
:
|
|
362
362
|
[ ],
|
|
363
363
|
{
|
|
364
|
-
label: _("Export
|
|
364
|
+
label: _("Export as..."),
|
|
365
365
|
accelerator: "Shift+CmdOrCtrl+E",
|
|
366
366
|
click: async () =>
|
|
367
367
|
{
|
|
@@ -928,7 +928,6 @@ module .exports = class Application
|
|
|
928
928
|
window .on ("unmaximize", () => this .onunmaximize ());
|
|
929
929
|
window .on ("enter-full-screen", () => this .onenterfullscreen ());
|
|
930
930
|
window .on ("leave-full-screen", () => this .onleavefullscreen ());
|
|
931
|
-
window .on ("blur", () => this .onblur ());
|
|
932
931
|
window .on ("close", (event) => this .onclose (event));
|
|
933
932
|
|
|
934
933
|
if (this .config .fullscreen)
|
|
@@ -1170,11 +1169,6 @@ module .exports = class Application
|
|
|
1170
1169
|
this .config .maximized = false;
|
|
1171
1170
|
}
|
|
1172
1171
|
|
|
1173
|
-
onblur ()
|
|
1174
|
-
{
|
|
1175
|
-
this .mainWindow .webContents .send ("save-all-files");
|
|
1176
|
-
}
|
|
1177
|
-
|
|
1178
1172
|
onclose (event)
|
|
1179
1173
|
{
|
|
1180
1174
|
if (!this .mainWindow .closing)
|
|
@@ -55,6 +55,7 @@ module .exports = class Document extends Interface
|
|
|
55
55
|
*/
|
|
56
56
|
async initialize ()
|
|
57
57
|
{
|
|
58
|
+
$("html") .attr ("platform", process .platform);
|
|
58
59
|
$("body") .addClass ("modal");
|
|
59
60
|
|
|
60
61
|
// Actions
|
|
@@ -70,7 +71,7 @@ module .exports = class Document extends Interface
|
|
|
70
71
|
// File Menu
|
|
71
72
|
|
|
72
73
|
electron .ipcRenderer .on ("open-files", (event, urls) => this .loadURL (urls [0])); // DEBUG
|
|
73
|
-
electron .ipcRenderer .on ("save-file", (event
|
|
74
|
+
electron .ipcRenderer .on ("save-file", (event) => this .saveFile ());
|
|
74
75
|
electron .ipcRenderer .on ("save-file-as", (event, filePath) => this .saveFileAs (filePath));
|
|
75
76
|
electron .ipcRenderer .on ("save-copy-as", (event, filePath) => this .saveCopyAs (filePath));
|
|
76
77
|
electron .ipcRenderer .on ("auto-save", (event, value) => this .autoSave = value);
|
|
@@ -434,13 +435,10 @@ Viewpoint {
|
|
|
434
435
|
*
|
|
435
436
|
* @param {boolean} force force save
|
|
436
437
|
*/
|
|
437
|
-
saveFile (
|
|
438
|
+
saveFile ()
|
|
438
439
|
{
|
|
439
440
|
this .footer .scriptEditor ?.apply ();
|
|
440
441
|
|
|
441
|
-
if (!UndoManager .shared .saveNeeded && !force)
|
|
442
|
-
return;
|
|
443
|
-
|
|
444
442
|
const scene = this .browser .currentScene;
|
|
445
443
|
|
|
446
444
|
// Infer profile and components.
|
|
@@ -456,14 +454,14 @@ Viewpoint {
|
|
|
456
454
|
|
|
457
455
|
generator .push (`${pkg .productName} V${pkg .version}, ${pkg .homepage}`);
|
|
458
456
|
|
|
459
|
-
if (!scene .getMetaData ("created"))
|
|
460
|
-
scene .setMetaData ("created", new Date () .toUTCString ());
|
|
461
|
-
|
|
462
457
|
if (!scene .getMetaData ("creator") ?.some (value => value .includes (this .fullname)))
|
|
463
458
|
scene .addMetaData ("creator", this .fullname);
|
|
464
459
|
|
|
465
|
-
scene .
|
|
460
|
+
if (!scene .getMetaData ("created"))
|
|
461
|
+
scene .setMetaData ("created", new Date () .toUTCString ());
|
|
462
|
+
|
|
466
463
|
scene .setMetaData ("modified", new Date () .toUTCString ());
|
|
464
|
+
scene .setMetaData ("generator", generator);
|
|
467
465
|
|
|
468
466
|
// Save source code.
|
|
469
467
|
|
|
@@ -515,7 +513,7 @@ Viewpoint {
|
|
|
515
513
|
|
|
516
514
|
Editor .rewriteURLs (scene, scene, oldWorldURL, scene .worldURL);
|
|
517
515
|
|
|
518
|
-
this .saveFile (
|
|
516
|
+
this .saveFile ();
|
|
519
517
|
}
|
|
520
518
|
|
|
521
519
|
/**
|
|
@@ -536,7 +534,7 @@ Viewpoint {
|
|
|
536
534
|
|
|
537
535
|
Editor .rewriteURLs (scene, scene, oldWorldURL, newWorldURL, undoManager);
|
|
538
536
|
|
|
539
|
-
this .saveFile (
|
|
537
|
+
this .saveFile ();
|
|
540
538
|
|
|
541
539
|
undoManager .undo ();
|
|
542
540
|
|
|
@@ -552,19 +550,19 @@ Viewpoint {
|
|
|
552
550
|
{
|
|
553
551
|
this .config .global .autoSave = value;
|
|
554
552
|
|
|
555
|
-
this .
|
|
553
|
+
this .requestAutoSave ();
|
|
556
554
|
}
|
|
557
555
|
|
|
558
556
|
#saveTimeoutId = undefined;
|
|
559
557
|
|
|
560
|
-
|
|
558
|
+
requestAutoSave ()
|
|
561
559
|
{
|
|
562
560
|
if (!this .autoSave)
|
|
563
561
|
return;
|
|
564
562
|
|
|
565
563
|
clearTimeout (this .#saveTimeoutId);
|
|
566
564
|
|
|
567
|
-
this .#saveTimeoutId = setTimeout (() => this .saveFile (
|
|
565
|
+
this .#saveTimeoutId = setTimeout (() => this .saveFile (), 1000);
|
|
568
566
|
}
|
|
569
567
|
|
|
570
568
|
exportAs (filePath)
|
|
@@ -574,7 +572,8 @@ Viewpoint {
|
|
|
574
572
|
|
|
575
573
|
close ()
|
|
576
574
|
{
|
|
577
|
-
|
|
575
|
+
if (UndoManager .shared .saveNeeded)
|
|
576
|
+
this .saveFile ();
|
|
578
577
|
|
|
579
578
|
electron .ipcRenderer .sendToHost ("closed");
|
|
580
579
|
}
|
|
@@ -598,7 +597,7 @@ Viewpoint {
|
|
|
598
597
|
this .updateMenu ();
|
|
599
598
|
|
|
600
599
|
if (UndoManager .shared .saveNeeded)
|
|
601
|
-
this .
|
|
600
|
+
this .requestAutoSave ();
|
|
602
601
|
|
|
603
602
|
electron .ipcRenderer .sendToHost ("saved", !UndoManager .shared .saveNeeded);
|
|
604
603
|
}
|
|
@@ -16,11 +16,9 @@ module .exports = class Footer extends Tabs
|
|
|
16
16
|
|
|
17
17
|
addTabs ()
|
|
18
18
|
{
|
|
19
|
-
this .addTextTab ("console",
|
|
20
|
-
this .addTextTab ("script-editor",
|
|
21
|
-
|
|
22
|
-
if (process .env .SUNRISE_ENVIRONMENT === "DEVELOPMENT")
|
|
23
|
-
this .addTextTab ("animation-editor", _("Animation Editor"))
|
|
19
|
+
this .addTextTab ("console", _("Console"))
|
|
20
|
+
this .addTextTab ("script-editor", _("Script Editor"))
|
|
21
|
+
this .addTextTab ("animation-editor", _("Animation Editor"))
|
|
24
22
|
|
|
25
23
|
this .console = new Console (this .getPanel ("console"))
|
|
26
24
|
}
|
package/src/Application/Tabs.js
CHANGED
|
@@ -51,7 +51,6 @@ module .exports = new class Tabs
|
|
|
51
51
|
|
|
52
52
|
electron .ipcRenderer .on ("open-files", (event, urls) => this .openTabs (urls));
|
|
53
53
|
electron .ipcRenderer .on ("reload" , (event) => this .reloadTab ());
|
|
54
|
-
electron .ipcRenderer .on ("save-file", (event) => this .saveFile ());
|
|
55
54
|
electron .ipcRenderer .on ("save-file-as", (event, filePath) => this .saveFileAs (filePath));
|
|
56
55
|
electron .ipcRenderer .on ("save-all-files", (event) => this .saveAllFiles ());
|
|
57
56
|
electron .ipcRenderer .on ("close-tab", (event) => this .tabs .getActiveTab () ?.close (true));
|
|
@@ -68,7 +67,7 @@ module .exports = new class Tabs
|
|
|
68
67
|
this .forwardToAllTabs ("auto-save");
|
|
69
68
|
this .forwardToActiveTab ("export-as");
|
|
70
69
|
|
|
71
|
-
this .forwardToActiveTab ("
|
|
70
|
+
this .forwardToActiveTab ("save-file");
|
|
72
71
|
this .forwardToActiveTab ("save-copy-as");
|
|
73
72
|
this .forwardToActiveTab ("scene-properties");
|
|
74
73
|
|
|
@@ -110,6 +109,7 @@ module .exports = new class Tabs
|
|
|
110
109
|
this .forwardToActiveTab ("move-selection-center-to-snap-target");
|
|
111
110
|
|
|
112
111
|
this .forwardToActiveTab ("script-editor");
|
|
112
|
+
this .forwardToActiveTab ("animation-members-list");
|
|
113
113
|
this .forwardToActiveTab ("outline-editor");
|
|
114
114
|
|
|
115
115
|
// Restore tabs.
|
|
@@ -315,11 +315,6 @@ module .exports = new class Tabs
|
|
|
315
315
|
this .saveTabs ();
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
saveFile ()
|
|
319
|
-
{
|
|
320
|
-
this .tabs .getActiveTab () .webview .send ("save-file", true);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
318
|
saveFileAs (filePath)
|
|
324
319
|
{
|
|
325
320
|
const
|
|
@@ -11,6 +11,14 @@ function Collision (executionContext)
|
|
|
11
11
|
|
|
12
12
|
Object .assign (Object .setPrototypeOf (Collision .prototype, X3D .Collision .prototype),
|
|
13
13
|
{
|
|
14
|
+
initialize ()
|
|
15
|
+
{
|
|
16
|
+
X3D .Collision .prototype .initialize .call (this);
|
|
17
|
+
|
|
18
|
+
this ._proxy .addInterest ("set_tool_proxy__", this);
|
|
19
|
+
|
|
20
|
+
this .set_tool_proxy__ ();
|
|
21
|
+
},
|
|
14
22
|
getProxyDisplay ()
|
|
15
23
|
{
|
|
16
24
|
return this .proxyDisplay;
|
|
@@ -21,21 +29,23 @@ Object .assign (Object .setPrototypeOf (Collision .prototype, X3D .Collision .pr
|
|
|
21
29
|
|
|
22
30
|
this .set_collisionObjects__ ();
|
|
23
31
|
},
|
|
24
|
-
|
|
32
|
+
set_tool_proxy__ ()
|
|
25
33
|
{
|
|
26
|
-
this .pointingObjects .delete (this .
|
|
27
|
-
this .visibleObjects .delete (this .
|
|
34
|
+
this .pointingObjects .delete (this .toolProxyNode);
|
|
35
|
+
this .visibleObjects .delete (this .toolProxyNode);
|
|
36
|
+
|
|
37
|
+
this .toolProxyNode = X3D .X3DCast (X3D .X3DConstants .X3DChildNode, this ._proxy);
|
|
28
38
|
|
|
29
|
-
|
|
39
|
+
this .set_collisionObjects__ ();
|
|
30
40
|
},
|
|
31
41
|
set_pointingObjects__ ()
|
|
32
42
|
{
|
|
33
|
-
if (this .
|
|
43
|
+
if (this .toolProxyNode)
|
|
34
44
|
{
|
|
35
45
|
if (this .proxyDisplay)
|
|
36
|
-
this .pointingObjects .add (this .
|
|
46
|
+
this .pointingObjects .add (this .toolProxyNode);
|
|
37
47
|
else
|
|
38
|
-
this .pointingObjects .delete (this .
|
|
48
|
+
this .pointingObjects .delete (this .toolProxyNode);
|
|
39
49
|
}
|
|
40
50
|
|
|
41
51
|
X3D .Collision .prototype .set_pointingObjects__ .call (this);
|
|
@@ -51,12 +61,12 @@ Object .assign (Object .setPrototypeOf (Collision .prototype, X3D .Collision .pr
|
|
|
51
61
|
},
|
|
52
62
|
set_visibleObjects__ ()
|
|
53
63
|
{
|
|
54
|
-
if (this .
|
|
64
|
+
if (this .toolProxyNode)
|
|
55
65
|
{
|
|
56
66
|
if (this .proxyDisplay)
|
|
57
|
-
this .visibleObjects .add (this .
|
|
67
|
+
this .visibleObjects .add (this .toolProxyNode);
|
|
58
68
|
else
|
|
59
|
-
this .visibleObjects .delete (this .
|
|
69
|
+
this .visibleObjects .delete (this .toolProxyNode);
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
X3D .Collision .prototype .set_visibleObjects__ .call (this);
|
|
@@ -40,7 +40,7 @@ $.fn.addPrototypePopover = function (executionContext, type)
|
|
|
40
40
|
.appendTo (content);
|
|
41
41
|
|
|
42
42
|
const nameInput = $("<input></input>")
|
|
43
|
-
.attr ("placeholder", _("Enter name"))
|
|
43
|
+
.attr ("placeholder", _("Enter a name"))
|
|
44
44
|
.appendTo (content);
|
|
45
45
|
|
|
46
46
|
// Create tooltip.
|
|
@@ -55,7 +55,7 @@ $.fn.addPrototypePopover = function (executionContext, type)
|
|
|
55
55
|
electron .shell .beep ();
|
|
56
56
|
nameInput .highlight ();
|
|
57
57
|
})
|
|
58
|
-
.on ("keydown
|
|
58
|
+
.on ("keydown", event =>
|
|
59
59
|
{
|
|
60
60
|
if (event .key !== "Enter")
|
|
61
61
|
return;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const
|
|
4
|
+
X3D = require ("../X3D"),
|
|
5
|
+
util = require ("util"),
|
|
6
|
+
$ = require ("jquery"),
|
|
7
|
+
_ = require ("../Application/GetText");
|
|
8
|
+
|
|
9
|
+
require ("./Popover");
|
|
10
|
+
|
|
11
|
+
$.fn.animationPropertiesPopover = function (editor)
|
|
12
|
+
{
|
|
13
|
+
// Create content.
|
|
14
|
+
|
|
15
|
+
const content = $("<div></div>")
|
|
16
|
+
.css ("width", "200px");
|
|
17
|
+
|
|
18
|
+
$("<span></span>")
|
|
19
|
+
.text (_("Frames"))
|
|
20
|
+
.appendTo (content);
|
|
21
|
+
|
|
22
|
+
const durationInput = $("<input></input>")
|
|
23
|
+
.attr ("type", "number")
|
|
24
|
+
.attr ("step", 1)
|
|
25
|
+
.attr ("min", 1)
|
|
26
|
+
.attr ("placeholder", _("Enter duration"))
|
|
27
|
+
.val (editor .getDuration ())
|
|
28
|
+
.on ("change input", updateTime)
|
|
29
|
+
.appendTo (content);
|
|
30
|
+
|
|
31
|
+
$("<span></span>")
|
|
32
|
+
.text (_("Frame Rate (fps)"))
|
|
33
|
+
.appendTo (content);
|
|
34
|
+
|
|
35
|
+
const frameRateInput = $("<input></input>")
|
|
36
|
+
.attr ("type", "number")
|
|
37
|
+
.attr ("step", 1)
|
|
38
|
+
.attr ("min", 1)
|
|
39
|
+
.attr ("max", 60)
|
|
40
|
+
.attr ("placeholder", _("Enter frame rate"))
|
|
41
|
+
.val (editor .getFrameRate ())
|
|
42
|
+
.on ("change input", updateTime)
|
|
43
|
+
.appendTo (content);
|
|
44
|
+
|
|
45
|
+
const scaleInput = $("<input></input>")
|
|
46
|
+
.attr ("type", "checkbox")
|
|
47
|
+
.attr ("id", "keyframe-scale")
|
|
48
|
+
.appendTo (content);
|
|
49
|
+
|
|
50
|
+
if (editor .config .file .scaleKeyframes)
|
|
51
|
+
scaleInput .attr ("checked", "");
|
|
52
|
+
|
|
53
|
+
const scaleLabel = $("<label></label>")
|
|
54
|
+
.attr ("for", "keyframe-scale")
|
|
55
|
+
.text (_("Scale Keyframes"))
|
|
56
|
+
.appendTo (content);
|
|
57
|
+
|
|
58
|
+
const timeText = $("<span></span>")
|
|
59
|
+
.attr ("title", _("Duration (hours:minutes:seconds:frames)."))
|
|
60
|
+
.css ("margin-top", "2px")
|
|
61
|
+
.css ("margin-bottom", "4px")
|
|
62
|
+
.appendTo (content);
|
|
63
|
+
|
|
64
|
+
const applyButton = $("<button></button>")
|
|
65
|
+
.text (_("Apply"))
|
|
66
|
+
.appendTo (content);
|
|
67
|
+
|
|
68
|
+
updateTime ();
|
|
69
|
+
|
|
70
|
+
function updateTime ()
|
|
71
|
+
{
|
|
72
|
+
const duration = parseInt (durationInput .val ())
|
|
73
|
+
const frameRate = parseInt (frameRateInput .val ());
|
|
74
|
+
|
|
75
|
+
timeText .text (util .format (_("Duration: %s"), editor .formatFrames (duration, frameRate)));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Create tooltip.
|
|
79
|
+
|
|
80
|
+
const tooltip = this .popover ({
|
|
81
|
+
position: {
|
|
82
|
+
my: "bottom right",
|
|
83
|
+
at: "top left",
|
|
84
|
+
},
|
|
85
|
+
content: content,
|
|
86
|
+
events: {
|
|
87
|
+
show: (event, api) =>
|
|
88
|
+
{
|
|
89
|
+
content .children () .off () .on ("keydown", (event) =>
|
|
90
|
+
{
|
|
91
|
+
if (event .key !== "Enter")
|
|
92
|
+
return;
|
|
93
|
+
|
|
94
|
+
applyButton .trigger ("click");
|
|
95
|
+
api .toggle (false);
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
applyButton .on ("click", (event) =>
|
|
99
|
+
{
|
|
100
|
+
api .toggle (false);
|
|
101
|
+
editor .resizeAnimation (parseInt (durationInput .val ()), parseInt (frameRateInput .val ()), scaleInput .prop ("checked"));
|
|
102
|
+
})
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return this;
|
|
108
|
+
};
|
|
109
|
+
|
|
@@ -19,7 +19,7 @@ $.fn.editNodePopover = function (node)
|
|
|
19
19
|
.appendTo (content);
|
|
20
20
|
|
|
21
21
|
const nameInput = $("<input></input>")
|
|
22
|
-
.attr ("placeholder", _("Enter name"))
|
|
22
|
+
.attr ("placeholder", _("Enter a name"))
|
|
23
23
|
.appendTo (content);
|
|
24
24
|
|
|
25
25
|
if (node instanceof X3D .X3DProtoDeclaration)
|
|
@@ -97,7 +97,7 @@ $.fn.editUserDefinedFieldPopover = function (executionContext, node, field = -1)
|
|
|
97
97
|
.appendTo (content);
|
|
98
98
|
|
|
99
99
|
const nameInput = $("<input></input>")
|
|
100
|
-
.attr ("placeholder", _("Enter name"))
|
|
100
|
+
.attr ("placeholder", _("Enter a name"))
|
|
101
101
|
.appendTo (content);
|
|
102
102
|
|
|
103
103
|
if (field instanceof X3D .X3DField)
|
package/src/Controls/Splitter.js
CHANGED
|
@@ -3,56 +3,56 @@
|
|
|
3
3
|
const
|
|
4
4
|
$ = require ("jquery"),
|
|
5
5
|
Interface = require ("../Application/Interface"),
|
|
6
|
-
Algorithm = require ("../Bits/Algorithm")
|
|
6
|
+
Algorithm = require ("../Bits/Algorithm");
|
|
7
7
|
|
|
8
8
|
module .exports = class Splitter extends Interface
|
|
9
9
|
{
|
|
10
10
|
constructor (element, orientation)
|
|
11
11
|
{
|
|
12
|
-
super (`Sunrize.Splitter.${element .attr ("id")}.`)
|
|
12
|
+
super (`Sunrize.Splitter.${element .attr ("id")}.`);
|
|
13
13
|
|
|
14
|
-
this .splitter = element
|
|
15
|
-
this .orientation = orientation
|
|
14
|
+
this .splitter = element;
|
|
15
|
+
this .orientation = orientation;
|
|
16
16
|
|
|
17
17
|
switch (this .orientation)
|
|
18
18
|
{
|
|
19
19
|
case "horizontal":
|
|
20
20
|
{
|
|
21
|
-
const top = this .splitter .find ("> .horizontal-splitter-top")
|
|
21
|
+
const top = this .splitter .find ("> .horizontal-splitter-top");
|
|
22
22
|
|
|
23
23
|
top .resizable ({
|
|
24
24
|
minHeight: 0,
|
|
25
25
|
handles: "s",
|
|
26
26
|
resize: () => this .position = this .position,
|
|
27
|
-
})
|
|
27
|
+
});
|
|
28
28
|
|
|
29
|
-
top .find ("> .ui-resizable-s") .append ($("<div></div>"))
|
|
30
|
-
break
|
|
29
|
+
top .find ("> .ui-resizable-s") .append ($("<div></div>"));
|
|
30
|
+
break;
|
|
31
31
|
}
|
|
32
32
|
case "vertical":
|
|
33
33
|
{
|
|
34
|
-
const left = this .splitter .find ("> .vertical-splitter-left")
|
|
34
|
+
const left = this .splitter .find ("> .vertical-splitter-left");
|
|
35
35
|
|
|
36
36
|
left .resizable ({
|
|
37
37
|
minWidth: 0,
|
|
38
38
|
handles: "e",
|
|
39
39
|
resize: () => this .position = this .position,
|
|
40
|
-
})
|
|
40
|
+
});
|
|
41
41
|
|
|
42
|
-
left .find ("> .ui-resizable-e") .append ($("<div></div>"))
|
|
43
|
-
break
|
|
42
|
+
left .find ("> .ui-resizable-e") .append ($("<div></div>"));
|
|
43
|
+
break;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
this .setup ()
|
|
47
|
+
this .setup ();
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
configure ()
|
|
51
51
|
{
|
|
52
52
|
if (this .config .file .position !== undefined)
|
|
53
|
-
this .position = this .config .file .position
|
|
53
|
+
this .position = this .config .file .position;
|
|
54
54
|
else
|
|
55
|
-
this .splitter .trigger ("position")
|
|
55
|
+
this .splitter .trigger ("position");
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
get position ()
|
|
@@ -61,15 +61,15 @@ module .exports = class Splitter extends Interface
|
|
|
61
61
|
{
|
|
62
62
|
case "horizontal":
|
|
63
63
|
{
|
|
64
|
-
const top = this .splitter .find ("> .horizontal-splitter-top")
|
|
64
|
+
const top = this .splitter .find ("> .horizontal-splitter-top");
|
|
65
65
|
|
|
66
|
-
return
|
|
66
|
+
return top .outerHeight () / this .splitter .innerHeight ();
|
|
67
67
|
}
|
|
68
68
|
case "vertical":
|
|
69
69
|
{
|
|
70
|
-
const left = this .splitter .find ("> .vertical-splitter-left")
|
|
70
|
+
const left = this .splitter .find ("> .vertical-splitter-left");
|
|
71
71
|
|
|
72
|
-
return left .outerWidth () / this .splitter .innerWidth ()
|
|
72
|
+
return left .outerWidth () / this .splitter .innerWidth ();
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -79,9 +79,9 @@ module .exports = class Splitter extends Interface
|
|
|
79
79
|
*/
|
|
80
80
|
set position (position)
|
|
81
81
|
{
|
|
82
|
-
position = Algorithm .clamp (position, 0, 1)
|
|
82
|
+
position = Algorithm .clamp (position, 0, 1);
|
|
83
83
|
|
|
84
|
-
this .config .file .position = position
|
|
84
|
+
this .config .file .position = position;
|
|
85
85
|
|
|
86
86
|
switch (this .orientation)
|
|
87
87
|
{
|
|
@@ -89,24 +89,24 @@ module .exports = class Splitter extends Interface
|
|
|
89
89
|
{
|
|
90
90
|
const
|
|
91
91
|
top = this .splitter .find ("> .horizontal-splitter-top"),
|
|
92
|
-
bottom = this .splitter .find ("> .horizontal-splitter-bottom")
|
|
92
|
+
bottom = this .splitter .find ("> .horizontal-splitter-bottom");
|
|
93
93
|
|
|
94
|
-
top .css ("height", (100 * position) + "%")
|
|
95
|
-
bottom .css ("height", (100 * (1 - position)) + "%")
|
|
96
|
-
break
|
|
94
|
+
top .css ("height", (100 * position) + "%");
|
|
95
|
+
bottom .css ("height", (100 * (1 - position)) + "%");
|
|
96
|
+
break;
|
|
97
97
|
}
|
|
98
98
|
case "vertical":
|
|
99
99
|
{
|
|
100
100
|
const
|
|
101
101
|
left = this .splitter .find ("> .vertical-splitter-left"),
|
|
102
|
-
right = this .splitter .find ("> .vertical-splitter-right")
|
|
102
|
+
right = this .splitter .find ("> .vertical-splitter-right");
|
|
103
103
|
|
|
104
|
-
left .css ("width", (100 * position) + "%")
|
|
105
|
-
right .css ("width", (100 * (1 - position)) + "%")
|
|
106
|
-
break
|
|
104
|
+
left .css ("width", (100 * position) + "%");
|
|
105
|
+
right .css ("width", (100 * (1 - position)) + "%");
|
|
106
|
+
break;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
this .splitter .trigger ("position")
|
|
110
|
+
this .splitter .trigger ("position");
|
|
111
111
|
}
|
|
112
112
|
}
|