aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcss/ninja.css4
-rwxr-xr-xjs/components/SliderBase.js1
-rwxr-xr-xjs/controllers/elements/element-controller.js15
-rwxr-xr-xjs/controllers/elements/shapes-controller.js5
-rw-r--r--js/controllers/presets-controller.js77
-rwxr-xr-xjs/controllers/selection-controller.js147
-rwxr-xr-xjs/helper-classes/3D/draw-utils.js79
-rwxr-xr-xjs/helper-classes/3D/snap-manager.js17
-rwxr-xr-xjs/lib/drawing/world.js13
-rwxr-xr-xjs/lib/nj-base.js13
-rwxr-xr-xjs/mediators/drag-drop-mediator.js8
-rwxr-xr-xjs/mediators/element-mediator.js218
-rwxr-xr-xjs/mediators/keyboard-mediator.js37
-rwxr-xr-xjs/mediators/mouse-mediator.js4
-rwxr-xr-xjs/ninja.reel/ninja.js73
-rwxr-xr-xjs/panels/CSSPanel/CSSPanelBase.reel/CSSPanelBase.js6
-rwxr-xr-xjs/panels/Components/ComponentsPanelBase.reel/ComponentsPanelBase.js2
-rwxr-xr-xjs/panels/Splitter.js13
-rw-r--r--js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js37
-rw-r--r--js/panels/Timeline/Tween.reel/Tween.js2
-rw-r--r--js/panels/drag-drop-composer.js4
-rw-r--r--js/panels/presets/animations-presets.reel/animations-presets.js4
-rw-r--r--js/panels/presets/default-animation-presets.js4
-rw-r--r--js/panels/presets/style-presets.reel/style-presets.js4
-rw-r--r--js/panels/presets/transitions-presets.reel/transitions-presets.js4
-rwxr-xr-xjs/panels/properties.reel/properties.js16
-rwxr-xr-xjs/panels/properties.reel/sections/three-d-view.reel/three-d-view.js2
-rwxr-xr-xjs/stage/layout.js18
-rwxr-xr-xjs/stage/stage.reel/stage.js5
-rw-r--r--js/tools/BrushTool.js2
-rwxr-xr-xjs/tools/LineTool.js111
-rwxr-xr-xjs/tools/PenTool.js13
-rwxr-xr-xjs/tools/Rotate3DToolBase.js4
-rwxr-xr-xjs/tools/SelectionTool.js34
-rwxr-xr-xjs/tools/ShapeTool.js37
-rwxr-xr-xjs/tools/TagTool.js6
-rwxr-xr-xjs/tools/TextTool.js4
-rwxr-xr-xjs/tools/Translate3DToolBase.js2
-rwxr-xr-xjs/tools/modifier-tool-base.js2
-rwxr-xr-xscss/imports/scss/_MainWindow.scss2
-rwxr-xr-xscss/imports/scss/_PanelUI.scss2
41 files changed, 471 insertions, 580 deletions
diff --git a/css/ninja.css b/css/ninja.css
index 605951e4..650f3b08 100755
--- a/css/ninja.css
+++ b/css/ninja.css
@@ -80,7 +80,7 @@ body { position: absolute; margin: 0px; width: 100%; height: 100%; background-co
80 80
81#topPanelContainer { overflow: hidden; margin-bottom: 2px; height: 32px; } 81#topPanelContainer { overflow: hidden; margin-bottom: 2px; height: 32px; }
82 82
83.timelinePanel { background: transparent; height: 150px; min-height: 46px; max-height: 50%; overflow: auto; } 83.timelinePanel { background: transparent; height: 150px; min-height: 46px; max-height: 50%; overflow: auto; -webkit-transition: all 0.15s linear; }
84 84
85.panelContainer { display: -webkit-box; -webkit-box-orient: vertical; position: relative; } 85.panelContainer { display: -webkit-box; -webkit-box-orient: vertical; position: relative; }
86 86
@@ -604,7 +604,7 @@ button.panel-button { -webkit-appearance: none; font-size: 9px; color: white; ba
604 604
605.pp_strokelabel { border: none; margin: -1px 8px 0px 27px; } 605.pp_strokelabel { border: none; margin: -1px 8px 0px 27px; }
606 606
607.pp_filllabel { border-width: none; margin: -1px 8px 0px 34px; } 607.pp_filllabel { border: none; margin: -1px 8px 0px 34px; }
608 608
609.panels { display: -webkit-box; position: absolute; -webkit-box-orient: vertical; -webkit-box-align: stretch; height: 100%; width: 100%; overflow: hidden; } 609.panels { display: -webkit-box; position: absolute; -webkit-box-orient: vertical; -webkit-box-align: stretch; height: 100%; width: 100%; overflow: hidden; }
610 610
diff --git a/js/components/SliderBase.js b/js/components/SliderBase.js
index 9f007456..8df868a2 100755
--- a/js/components/SliderBase.js
+++ b/js/components/SliderBase.js
@@ -268,7 +268,6 @@ var SliderBase = exports.SliderBase = Montage.create(Component, {
268 268
269 _dispatchActionEvent: { 269 _dispatchActionEvent: {
270 value: function() { 270 value: function() {
271// console.log("dispatching event", this._element.id, this._eventType, this._wasSetByCode);
272 var actionEvent = document.createEvent("CustomEvent"); 271 var actionEvent = document.createEvent("CustomEvent");
273 actionEvent.initEvent(this._eventType, true, true); 272 actionEvent.initEvent(this._eventType, true, true);
274 actionEvent.type = this._eventType; 273 actionEvent.type = this._eventType;
diff --git a/js/controllers/elements/element-controller.js b/js/controllers/elements/element-controller.js
index b35251ad..efb33292 100755
--- a/js/controllers/elements/element-controller.js
+++ b/js/controllers/elements/element-controller.js
@@ -5,22 +5,27 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
5</copyright> */ 5</copyright> */
6 6
7var Montage = require("montage/core/core").Montage, 7var Montage = require("montage/core/core").Montage,
8 NJComponent = require("js/lib/nj-base").NJComponent; 8 Component = require("montage/ui/component").Component;
9 9
10var ElementController = exports.ElementController = Montage.create(NJComponent, { 10exports.ElementController = Montage.create(Component, {
11 11
12 addElement: { 12 addElement: {
13 value: function(el, styles) { 13 value: function(el, styles) {
14 this.application.ninja.currentDocument.documentRoot.appendChild(el); 14 this.application.ninja.currentDocument.documentRoot.appendChild(el);
15 // Nested elements - 15 // Nested elements - TODO make sure the CSS is correct before nesting elements
16 // TODO make sure the CSS is correct before nesting elements
17 // this.application.ninja.currentSelectedContainer.appendChild(el); 16 // this.application.ninja.currentSelectedContainer.appendChild(el);
18 this.application.ninja.stylesController.setElementStyles(el, styles); 17 if(styles) {
18 this.application.ninja.stylesController.setElementStyles(el, styles);
19 }
19 } 20 }
20 }, 21 },
21 22
23 // Remove the element from the DOM and clear the GLWord.
22 removeElement: { 24 removeElement: {
23 value: function(el) { 25 value: function(el) {
26 if(el.elementModel && el.elementModel.shapeModel && el.elementModel.shapeModel.GLWorld) {
27 el.elementModel.shapeModel.GLWorld.clearTree();
28 }
24 el.parentNode.removeChild(el); 29 el.parentNode.removeChild(el);
25 } 30 }
26 }, 31 },
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js
index ef453bea..c9164e3e 100755
--- a/js/controllers/elements/shapes-controller.js
+++ b/js/controllers/elements/shapes-controller.js
@@ -72,8 +72,9 @@ exports.ShapesController = Montage.create(CanvasController, {
72 canvas.setAttribute("data-RDGE-id", njModule.NJUtils.generateRandom()); 72 canvas.setAttribute("data-RDGE-id", njModule.NJUtils.generateRandom());
73 canvas.width = el.width; 73 canvas.width = el.width;
74 canvas.height = el.height; 74 canvas.height = el.height;
75 this.application.ninja.elementMediator.replaceElement(el, canvas); 75 canvas.elementModel = el.elementModel;
76 NJevent("elementDeleted", el); 76 this.application.ninja.currentDocument.documentRoot.replaceChild(canvas, el);
77 NJevent("elementsRemoved", el);
77 el = canvas; 78 el = canvas;
78 this.toggleWebGlMode(el, value); 79 this.toggleWebGlMode(el, value);
79 el.elementModel.shapeModel.GLWorld.render(); 80 el.elementModel.shapeModel.GLWorld.render();
diff --git a/js/controllers/presets-controller.js b/js/controllers/presets-controller.js
index 7152ba93..975f9f7a 100644
--- a/js/controllers/presets-controller.js
+++ b/js/controllers/presets-controller.js
@@ -20,14 +20,39 @@ exports.PresetsController = Montage.create(Component, {
20 20
21 addTransition: { 21 addTransition: {
22 value: function(element) { 22 value: function(element) {
23 var transitionDuration;
24
23 element.classList.add(this.transitionClass); 25 element.classList.add(this.transitionClass);
24 element.addEventListener("webkitTransitionEnd", this, true); 26 element.addEventListener("webkitTransitionEnd", this, true);
27
28
29 //// TODO: replace this hack when webkit supports transitionStart event
30 transitionDuration = this.application.ninja.stylesController.getElementStyle(element, '-webkit-transition-duration', true);
31 element.njTimeout = window.setTimeout(function() {
32 this.captureWebkitTransitionEnd({
33 'target': element
34 });
35 }.bind(this), this._getMilliseconds(transitionDuration) + 100);
36 }
37 },
38
39 _getMilliseconds : {
40 value: function(duration) {
41 if(duration.indexOf('ms') !== -1) {
42 return parseInt(duration);
43 } else {
44 return parseFloat(duration)*1000;
45 }
25 } 46 }
26 }, 47 },
27 48
28 captureWebkitTransitionEnd : { 49 captureWebkitTransitionEnd : {
29 value : function(e) { 50 value : function(e) {
30 var el = e.target; 51 var el = e.target;
52
53 //// TODO: replace this hack when webkit supports transitionStart event (see above)
54 window.clearTimeout(el.njTimeout);
55
31 el.classList.remove(this.transitionClass); 56 el.classList.remove(this.transitionClass);
32 el.removeEventListener("webkitTransitionEnd", this, true); 57 el.removeEventListener("webkitTransitionEnd", this, true);
33 } 58 }
@@ -41,10 +66,29 @@ exports.PresetsController = Montage.create(Component, {
41 66
42 var stylesController = this.application.ninja.stylesController, 67 var stylesController = this.application.ninja.stylesController,
43 selectorBase = presetData.selectorBase, 68 selectorBase = presetData.selectorBase,
44 rules = []; 69 rules = [],
70 animationNames = [];
45 71
46 selectorBase = stylesController.generateClassName(selectorBase); 72 selectorBase = stylesController.generateClassName(selectorBase);
47 73
74 selection.forEach(function(element) {
75 var el = element._element,
76 animationName;
77
78 if(useTransition) {
79 this.addTransition(el);
80 }
81
82 ///// TODO: remove when we find out what to do with competing animations
83 animationName = stylesController.getElementStyle(el, '-webkit-animation-name');