diff options
Diffstat (limited to 'js/controllers/styles-controller.js')
-rwxr-xr-x | js/controllers/styles-controller.js | 111 |
1 files changed, 61 insertions, 50 deletions
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index 534f77c7..83722184 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js | |||
@@ -48,41 +48,22 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
48 | ///// bind the document to prop w/ setter. The setter calls to find | 48 | ///// bind the document to prop w/ setter. The setter calls to find |
49 | ///// the stage and default css files. | 49 | ///// the stage and default css files. |
50 | 50 | ||
51 | handleAppLoaded : { | ||
52 | value: function() { | ||
53 | ///// Bind app's activeDocument property to | ||
54 | ///// styles controller's _activeDocument property | ||
55 | |||
56 | // Object.defineBinding(this, "activeDocument", { | ||
57 | // boundObject: this.application.ninja, | ||
58 | // boundObjectPropertyPath: "currentDocument", | ||
59 | // oneway: true | ||
60 | // }); | ||
61 | } | ||
62 | }, | ||
63 | |||
64 | deserializedFromTemplate : { | ||
65 | value: function() { | ||
66 | this.eventManager.addEventListener( "appLoaded", this, false); | ||
67 | }, | ||
68 | enumerable : false | ||
69 | }, | ||
70 | ///// Active document gets automatically set when the | 51 | ///// Active document gets automatically set when the |
71 | ///// document controller changes it | 52 | ///// document controller changes it |
72 | _activeDocument : { | 53 | _currentDocument : { |
73 | value : null, | 54 | value : null, |
74 | enumerable : false | 55 | enumerable : false |
75 | }, | 56 | }, |
76 | 57 | ||
77 | activeDocument : { | 58 | currentDocument : { |
78 | get : function() { | 59 | get : function() { |
79 | return this._activeDocument; | 60 | return this._currentDocument; |
80 | }, | 61 | }, |
81 | set : function(document) { | 62 | set : function(document) { |
82 | ///// If the document is null set default stylesheets to null | 63 | ///// If the document is null set default stylesheets to null |
83 | 64 | ||
84 | if(!document || document.currentView === "code") { | 65 | if(!document || document.currentView === "code") { |
85 | this._activeDocument = null; | 66 | this._currentDocument = null; |
86 | this._stageStylesheet = null; | 67 | this._stageStylesheet = null; |
87 | this.defaultStylesheet = null; | 68 | this.defaultStylesheet = null; |
88 | this.userStyleSheets = []; | 69 | this.userStyleSheets = []; |
@@ -91,7 +72,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
91 | } | 72 | } |
92 | 73 | ||
93 | ///// setting document via binding | 74 | ///// setting document via binding |
94 | this._activeDocument = document; | 75 | this._currentDocument = document; |
95 | 76 | ||
96 | ///// Stage stylesheet should always be found | 77 | ///// Stage stylesheet should always be found |
97 | this._stageStylesheet = this.getSheetFromElement(this.CONST.STAGE_SHEET_ID); | 78 | this._stageStylesheet = this.getSheetFromElement(this.CONST.STAGE_SHEET_ID); |
@@ -103,6 +84,8 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
103 | return sheet !== this._stageStylesheet; | 84 | return sheet !== this._stageStylesheet; |
104 | }, this); | 85 | }, this); |
105 | 86 | ||
87 | this.initializeRootStyles(); | ||
88 | |||
106 | NJevent('styleSheetsReady', this); | 89 | NJevent('styleSheetsReady', this); |
107 | }, | 90 | }, |
108 | enumerable : false | 91 | enumerable : false |
@@ -129,10 +112,10 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
129 | return false; | 112 | return false; |
130 | } | 113 | } |
131 | //check that the document has a design view | 114 | //check that the document has a design view |
132 | else if(this._activeDocument.model && this._activeDocument.model.views && this._activeDocument.model.views.design){ | 115 | else if(this._currentDocument.model && this._currentDocument.model.views && this._currentDocument.model.views.design){ |
133 | ///// Use the last stylesheet in the document as the default | 116 | ///// Use the last stylesheet in the document as the default |
134 | 117 | ||
135 | var sheets = this._activeDocument.model.views.design.document.styleSheets, | 118 | var sheets = this._currentDocument.model.views.design.document.styleSheets, |
136 | lastIndex = sheets.length-1; | 119 | lastIndex = sheets.length-1; |
137 | 120 | ||
138 | ///// If the only sheet is the stage stylesheet, this will be true | 121 | ///// If the only sheet is the stage stylesheet, this will be true |
@@ -148,7 +131,37 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
148 | } | 131 | } |
149 | } | 132 | } |
150 | }, | 133 | }, |
151 | 134 | ||
135 | initializeRootStyles: { | ||
136 | value: function() { | ||
137 | var styles = {}, | ||
138 | needsRule = false, | ||
139 | rule; | ||
140 | |||
141 | if(this.getElementStyle(this.currentDocument.model.documentRoot, "width", false, false) == null) { | ||
142 | styles['width'] = '100%'; | ||
143 | needsRule = true; | ||
144 | } | ||
145 | if(this.getElementStyle(this.currentDocument.model.documentRoot, "height", false, false) == null) { | ||
146 | styles['height'] = '100%'; | ||
147 | needsRule = true; | ||
148 | } | ||
149 | if(this.getElementStyle(this.currentDocument.model.documentRoot, "-webkit-transform", false, false) == null) { | ||
150 | styles['-webkit-transform'] = 'perspective(1400) matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)'; | ||
151 | needsRule = true; | ||
152 | } | ||
153 | if(this.getElementStyle(this.currentDocument.model.documentRoot, "-webkit-transform-style", false, false) == null) { | ||
154 | styles['-webkit-transform-style'] = 'preserve-3d'; | ||
155 | needsRule = true; | ||
156 | } | ||
157 | |||
158 | if(needsRule) { | ||
159 | rule = this.addRule('.ninja-body{}'); | ||
160 | this.setStyles(rule, styles); | ||
161 | this.addClass(this.currentDocument.model.documentRoot, "ninja-body"); | ||
162 | } | ||
163 | } | ||
164 | }, | ||
152 | /* ----------------- Rule methods ----------------- */ | 165 | /* ----------------- Rule methods ----------------- */ |
153 | 166 | ||
154 | ///// Add Rule | 167 | ///// Add Rule |
@@ -538,7 +551,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
538 | return true; | 551 | return true; |
539 | } | 552 | } |
540 | 553 | ||
541 | var doc = document || this._activeDocument; | 554 | var doc = document || this._currentDocument; |
542 | ///// TODO: somehow cache the number of elements affected | 555 | ///// TODO: somehow cache the number of elements affected |
543 | ///// by the rule, because querySelectorAll() is expensive | 556 | ///// by the rule, because querySelectorAll() is expensive |
544 | return !!(doc.querySelectorAll(rule.selectorText).length > 1); | 557 | return !!(doc.querySelectorAll(rule.selectorText).length > 1); |
@@ -887,7 +900,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
887 | 900 | ||
888 | getAnimationRuleWithName : { | 901 | getAnimationRuleWithName : { |
889 | value: function(name, document) { | 902 | value: function(name, document) { |
890 | var doc = document || this._activeDocument.model.views.design.document, | 903 | var doc = document || this._currentDocument.model.views.design.document, |
891 | animRules = this.getDocumentAnimationRules(doc), | 904 | animRules = this.getDocumentAnimationRules(doc), |
892 | rule, i; | 905 | rule, i; |
893 | 906 | ||
@@ -909,7 +922,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
909 | 922 | ||
910 | getDocumentAnimationRules : { | 923 | getDocumentAnimationRules : { |
911 | value: function(document) { | 924 | value: function(document) { |
912 | var sheets = (document) ? document.styleSheets : this._activeDocument.model.views.design.document.styleSheets, | 925 | var sheets = (document) ? document.styleSheets : this._currentDocument.model.views.design.document.styleSheets, |
913 | rules = []; | 926 | rules = []; |
914 | 927 | ||
915 | nj.toArray(sheets).forEach(function(sheet) { | 928 | nj.toArray(sheets).forEach(function(sheet) { |
@@ -1229,9 +1242,10 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
1229 | } | 1242 | } |
1230 | } | 1243 | } |
1231 | if(isNaN(dist)) { | 1244 | if(isNaN(dist)) { |
1232 | dist = null; | 1245 | return "none"; |
1246 | } else { | ||
1247 | return dist; | ||
1233 | } | 1248 | } |
1234 | return dist; | ||
1235 | } | 1249 | } |
1236 | }, | 1250 | }, |
1237 | 1251 | ||
@@ -1272,7 +1286,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
1272 | 1286 | ||
1273 | createStylesheet : { | 1287 | createStylesheet : { |
1274 | value: function(id, document) { | 1288 | value: function(id, document) { |
1275 | var doc = document || this._activeDocument.model.views.design.document, | 1289 | var doc = document || this._currentDocument.model.views.design.document, |
1276 | sheetElement, sheet; | 1290 | sheetElement, sheet; |
1277 | 1291 | ||
1278 | sheetElement = nj.make('style', { | 1292 | sheetElement = nj.make('style', { |
@@ -1329,15 +1343,12 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
1329 | 1343 | ||
1330 | getSheetFromElement : { | 1344 | getSheetFromElement : { |
1331 | value : function(element, context) { | 1345 | value : function(element, context) { |
1332 | var doc = context || this._activeDocument.model.views.design.document, | 1346 | var doc = context || this._currentDocument.model.views.design.document, |
1333 | el = (typeof element === 'string') ? nj.$(element, doc) : element; | 1347 | el = (typeof element === 'string') ? nj.$(element, doc) : element; |
1334 | 1348 | ||
1335 | if(el && el.sheet) { | 1349 | if(el && el.sheet) { |
1336 | return el.sheet; | 1350 | return el.sheet; |
1337 | } | 1351 | } |
1338 | |||
1339 | return; | ||
1340 | |||
1341 | } | 1352 | } |
1342 | }, | 1353 | }, |
1343 | 1354 | ||
@@ -1363,7 +1374,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
1363 | ///// If the sheet doesn't already exist in the list of modified | 1374 | ///// If the sheet doesn't already exist in the list of modified |
1364 | ///// sheets, dispatch dirty event and add the sheet to the list | 1375 | ///// sheets, dispatch dirty event and add the sheet to the list |
1365 | if(sheetSearch.length === 0) { | 1376 | if(sheetSearch.length === 0) { |
1366 | NJevent('styleSheetDirty', eventData); | 1377 | this.currentDocument.model.needsSave = true; |
1367 | this.dirtyStyleSheets.push({ |