diff options
-rwxr-xr-x | js/components/layout/document-bar.reel/document-bar.css | 2 | ||||
-rwxr-xr-x | js/components/layout/document-bar.reel/document-bar.js | 4 | ||||
-rwxr-xr-x | js/components/tools-properties/shape-properties.reel/shape-properties.html | 2 | ||||
-rwxr-xr-x | js/components/tools-properties/shape-properties.reel/shape-properties.js | 2 | ||||
-rwxr-xr-x | js/controllers/selection-controller.js | 4 | ||||
-rwxr-xr-x | js/controllers/styles-controller.js | 2 | ||||
-rwxr-xr-x | js/data/pi/pi-data.js | 2 | ||||
-rwxr-xr-x | js/document/document-html.js | 8 | ||||
-rw-r--r-- | js/io/system/chromeapi.js | 19 | ||||
-rwxr-xr-x | js/lib/geom/circle.js | 94 | ||||
-rwxr-xr-x | js/lib/geom/line.js | 13 | ||||
-rwxr-xr-x | js/lib/geom/rectangle.js | 2 | ||||
-rwxr-xr-x | js/panels/Panel.reel/Panel.js | 13 | ||||
-rwxr-xr-x | js/stage/layout.js | 2 | ||||
-rwxr-xr-x | js/tools/LineTool.js | 56 | ||||
-rwxr-xr-x | js/tools/Translate3DToolBase.js | 4 | ||||
-rwxr-xr-x | js/tools/TranslateObject3DTool.js | 19 | ||||
-rw-r--r-- | tests/unit-tests/color-model-test.js | 130 | ||||
-rw-r--r-- | tests/unit-tests/file-io-test.js | 610 | ||||
-rw-r--r-- | tests/unit-tests/styles-controller-test.js | 143 |
20 files changed, 1029 insertions, 102 deletions
diff --git a/js/components/layout/document-bar.reel/document-bar.css b/js/components/layout/document-bar.reel/document-bar.css index 5eba72e8..2c547a22 100755 --- a/js/components/layout/document-bar.reel/document-bar.css +++ b/js/components/layout/document-bar.reel/document-bar.css | |||
@@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE. | |||
33 | background: -webkit-radial-gradient(center, ellipse cover, rgba(100, 100, 100, .9) 40%, rgba(100, 100, 100, .4) 50%, rgba(100, 100, 100, 0) 51%), -webkit-radial-gradient(center, ellipse cover, rgba(100, 100, 100, .9) 40%, rgba(100, 100, 100, .4) 50%, rgba(100, 100, 100, 0) 51%), -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgb(60, 60, 60)), color-stop(70%, rgb(30, 30, 30)), color-stop(100%, rgb(25, 25, 25))), -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgb(10, 10, 10)), color-stop(50%, rgb(20, 20, 20)), color-stop(100%, rgb(10, 10, 10))) !important; | 33 | background: -webkit-radial-gradient(center, ellipse cover, rgba(100, 100, 100, .9) 40%, rgba(100, 100, 100, .4) 50%, rgba(100, 100, 100, 0) 51%), -webkit-radial-gradient(center, ellipse cover, rgba(100, 100, 100, .9) 40%, rgba(100, 100, 100, .4) 50%, rgba(100, 100, 100, 0) 51%), -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgb(60, 60, 60)), color-stop(70%, rgb(30, 30, 30)), color-stop(100%, rgb(25, 25, 25))), -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgb(10, 10, 10)), color-stop(50%, rgb(20, 20, 20)), color-stop(100%, rgb(10, 10, 10))) !important; |
34 | background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat !important; | 34 | background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat !important; |
35 | background-position: 49.5% center, 50.5% center, center center, left top !important; | 35 | background-position: 49.5% center, 50.5% center, center center, left top !important; |
36 | background-size: 5px 5px, 5px 5px, 3% 100%, 100% 100%; | 36 | background-size: 5px 5px, 5px 5px, 3% 100%, 100% 100% !important; |
37 | } | 37 | } |
38 | 38 | ||
39 | .documentBar { | 39 | .documentBar { |
diff --git a/js/components/layout/document-bar.reel/document-bar.js b/js/components/layout/document-bar.reel/document-bar.js index 098e9e68..88c4a24b 100755 --- a/js/components/layout/document-bar.reel/document-bar.js +++ b/js/components/layout/document-bar.reel/document-bar.js | |||
@@ -246,7 +246,7 @@ exports.DocumentBar = Montage.create(Component, { | |||
246 | file: this._currentDocument.model.file, | 246 | file: this._currentDocument.model.file, |
247 | webgl: this._currentDocument.model.webGlHelper.glData, | 247 | webgl: this._currentDocument.model.webGlHelper.glData, |
248 | styles: this._currentDocument.model.getStyleSheets(), | 248 | styles: this._currentDocument.model.getStyleSheets(), |
249 | template: this._currentDocument.fileTemplate, | 249 | template: this._currentDocument.model.fileTemplate, |
250 | document: this._currentDocument.model.views.design.iframe.contentWindow.document, | 250 | document: this._currentDocument.model.views.design.iframe.contentWindow.document, |
251 | head: this._currentDocument.model.views.design.iframe.contentWindow.document.head, | 251 | head: this._currentDocument.model.views.design.iframe.contentWindow.document.head, |
252 | body: this._currentDocument.model.views.design.iframe.contentWindow.document.body, | 252 | body: this._currentDocument.model.views.design.iframe.contentWindow.document.body, |
@@ -256,7 +256,7 @@ exports.DocumentBar = Montage.create(Component, { | |||
256 | doc = this._currentDocument.model.views.code.textArea.value; | 256 | doc = this._currentDocument.model.views.code.textArea.value; |
257 | } | 257 | } |
258 | //Reloading the document from changes made | 258 | //Reloading the document from changes made |
259 | this._currentDocument.reloadView(view, this.fileTemplate, doc); | 259 | this._currentDocument.reloadView(view, doc.template, doc); |
260 | } | 260 | } |
261 | } | 261 | } |
262 | }, | 262 | }, |
diff --git a/js/components/tools-properties/shape-properties.reel/shape-properties.html b/js/components/tools-properties/shape-properties.reel/shape-properties.html index 7503f257..959feec6 100755 --- a/js/components/tools-properties/shape-properties.reel/shape-properties.html +++ b/js/components/tools-properties/shape-properties.reel/shape-properties.html | |||
@@ -66,7 +66,7 @@ POSSIBILITY OF SUCH DAMAGE. | |||
66 | "prototype": "js/components/hottextunit.reel[HotTextUnit]", | 66 | "prototype": "js/components/hottextunit.reel[HotTextUnit]", |
67 | "properties": { | 67 | "properties": { |
68 | "element": {"#": "strokeControl"}, | 68 | "element": {"#": "strokeControl"}, |
69 | "minValue": 1, | 69 | "minValue": 0, |
70 | "maxValue": 100, | 70 | "maxValue": 100, |
71 | "value": 1, | 71 | "value": 1, |
72 | "decimalPlace": 10, | 72 | "decimalPlace": 10, |
diff --git a/js/components/tools-properties/shape-properties.reel/shape-properties.js b/js/components/tools-properties/shape-properties.reel/shape-properties.js index 40ad0dd0..c5b22188 100755 --- a/js/components/tools-properties/shape-properties.reel/shape-properties.js +++ b/js/components/tools-properties/shape-properties.reel/shape-properties.js | |||
@@ -209,12 +209,14 @@ var ShapeProperties = exports.ShapeProperties = Montage.create(ToolProperties, { | |||
209 | this._fillColorCtrlIcon.style["display"] = "none"; | 209 | this._fillColorCtrlIcon.style["display"] = "none"; |
210 | this._fillColorCtrlIcon.visible = false; | 210 | this._fillColorCtrlIcon.visible = false; |
211 | this.endDivider.style["display"] = "none"; | 211 | this.endDivider.style["display"] = "none"; |
212 | this._strokeSize.minValue = 1; | ||
212 | } else { | 213 | } else { |
213 | this._fillColorCtrlContainer.style["display"] = ""; | 214 | this._fillColorCtrlContainer.style["display"] = ""; |
214 | this._fillColorCtrlContainer.visible = true; | 215 | this._fillColorCtrlContainer.visible = true; |
215 | this._fillColorCtrlIcon.style["display"] = ""; | 216 | this._fillColorCtrlIcon.style["display"] = ""; |
216 | this._fillColorCtrlIcon.visible = true; | 217 | this._fillColorCtrlIcon.visible = true; |
217 | this.endDivider.style["display"] = ""; | 218 | this.endDivider.style["display"] = ""; |
219 | this._strokeSize.minValue = 0; | ||
218 | } | 220 | } |
219 | 221 | ||
220 | if (this._useWebGL.checked) { | 222 | if (this._useWebGL.checked) { |
diff --git a/js/controllers/selection-controller.js b/js/controllers/selection-controller.js index 7a26ed3b..4b031d70 100755 --- a/js/controllers/selection-controller.js +++ b/js/controllers/selection-controller.js | |||
@@ -58,13 +58,13 @@ exports.SelectionController = Montage.create(Component, { | |||
58 | return; | 58 | return; |
59 | } | 59 | } |
60 | 60 | ||
61 | if(this._currentDocument && this._currentDocument.currentView === "design") { | 61 | if(this._currentDocument && (this._currentDocument.currentView === "design" || this._currentDocument.model.currentView.identifier !== "code")) { |
62 | this._currentDocument.model._selection = this.application.ninja.selectedElements; | 62 | this._currentDocument.model._selection = this.application.ninja.selectedElements; |
63 | } | 63 | } |
64 | 64 | ||
65 | this._currentDocument = value; | 65 | this._currentDocument = value; |
66 | 66 | ||
67 | if(this._currentDocument && this._currentDocument.currentView === "design") { | 67 | if(this._currentDocument && (this._currentDocument.currentView === "design" || this._currentDocument.model.currentView.identifier !== "code")) { |
68 | this.selectedElements = this._currentDocument.model.selection; | 68 | this.selectedElements = this._currentDocument.model.selection; |
69 | } | 69 | } |
70 | /* | 70 | /* |
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index e95c6614..68d031fb 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js | |||
@@ -87,7 +87,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
87 | set : function(document) { | 87 | set : function(document) { |
88 | ///// If the document is null set default stylesheets to null | 88 | ///// If the document is null set default stylesheets to null |
89 | 89 | ||
90 | if(!document || document.currentView === "code") { | 90 | if(!document || (document.currentView === "code" && document.model.currentView.identifier !== "design-code")) { |
91 | this._currentDocument = null; | 91 | this._currentDocument = null; |
92 | this._stageStylesheet = null; | 92 | this._stageStylesheet = null; |
93 | this.defaultStylesheet = null; | 93 | this.defaultStylesheet = null; |
diff --git a/js/data/pi/pi-data.js b/js/data/pi/pi-data.js index f36f11e6..489938d5 100755 --- a/js/data/pi/pi-data.js +++ b/js/data/pi/pi-data.js | |||
@@ -499,7 +499,7 @@ exports.PiData = Montage.create( Montage, { | |||
499 | prop : "strokeSize", | 499 | prop : "strokeSize", |
500 | label : "Stroke", | 500 | label : "Stroke", |
501 | inputFunction: parseFloat, | 501 | inputFunction: parseFloat, |
502 | min : 0, | 502 | min : 1, |
503 | max : 100, | 503 | max : 100, |
504 | value : 1, | 504 | value : 1, |
505 | unit : "px", | 505 | unit : "px", |
diff --git a/js/document/document-html.js b/js/document/document-html.js index f3163339..d610c69d 100755 --- a/js/document/document-html.js +++ b/js/document/document-html.js | |||
@@ -157,6 +157,14 @@ exports.HtmlDocument = Montage.create(Component, { | |||
157 | this.model.views.design.show(); | 157 | this.model.views.design.show(); |
158 | this.model.views.design.iframe.style.opacity = 0; | 158 | this.model.views.design.iframe.style.opacity = 0; |
159 | this.model.views.design.content = this.application.ninja.ioMediator.tmplt.parseHtmlToNinjaTemplate(doc); | 159 | this.model.views.design.content = this.application.ninja.ioMediator.tmplt.parseHtmlToNinjaTemplate(doc); |
160 | // | ||
161 | if (!template) { | ||
162 | if (this.model.views.design.content.body.indexOf('Ninja-Banner Dimensions@@@') !== -1) { | ||
163 | dimensions = (this.model.views.design.content.body.split('Ninja-Banner Dimensions@@@'))[1].split('-->')[0].split('x'); | ||
164 | dimensions = {width: parseInt(dimensions[0]), height: parseInt(dimensions[1])}; | ||
165 | template = {type: 'banner', size: dimensions}; | ||
166 | } | ||
167 | } | ||
160 | //TODO: Improve reference (probably through binding values) | 168 | //TODO: Improve reference (probably through binding values) |
161 | this.model.views.design._webGlHelper = this.model.webGlHelper; | 169 | this.model.views.design._webGlHelper = this.model.webGlHelper; |
162 | //Rendering design view, using observers to know when template is ready | 170 | //Rendering design view, using observers to know when template is ready |
diff --git a/js/io/system/chromeapi.js b/js/io/system/chromeapi.js index e33406ee..b13dd9de 100644 --- a/js/io/system/chromeapi.js +++ b/js/io/system/chromeapi.js | |||
@@ -96,7 +96,7 @@ exports.ChromeApi = Montage.create(Object.prototype, { | |||
96 | // | 96 | // |
97 | f.createWriter(function(writer) { | 97 | f.createWriter(function(writer) { |
98 | // | 98 | // |
99 | var mime, blob, type = filePath.split('.'); | 99 | var mime, blob, type = filePath.split('.'), version = parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10); |
100 | type = type[type.length-1]; | 100 | type = type[type.length-1]; |
101 | switch (type) { | 101 | switch (type) { |
102 | case 'bmp': | 102 | case 'bmp': |
@@ -136,8 +136,12 @@ exports.ChromeApi = Montage.create(Object.prototype, { | |||
136 | mime = 'text/'+type; | 136 | mime = 'text/'+type; |
137 | break; | 137 | break; |
138 | } | 138 | } |
139 | // | 139 | //TODO: Remove version checking once Chrome version 22 is stable |
140 | blob = new Blob([content], {type: type}); | 140 | if (version > 21) { |
141 | blob = new Blob([new Uint8Array(content)], {type: type}); | ||
142 | } else { | ||
143 | blob = new Blob([content], {type: type}); | ||
144 | } | ||
141 | // | 145 | // |
142 | writer.write(blob); | 146 | writer.write(blob); |
143 | // | 147 | // |
@@ -166,10 +170,15 @@ exports.ChromeApi = Montage.create(Object.prototype, { | |||
166 | // | 170 | // |
167 | this.fileSystem.root.getFile(filePath, {}, function(f) { | 171 | this.fileSystem.root.getFile(filePath, {}, function(f) { |
168 | f.file(function(file) { | 172 |