diff options
Diffstat (limited to 'js/document/models')
-rwxr-xr-x | js/document/models/base.js | 214 | ||||
-rwxr-xr-x | js/document/models/html.js | 66 | ||||
-rwxr-xr-x | js/document/models/text.js | 57 |
3 files changed, 319 insertions, 18 deletions
diff --git a/js/document/models/base.js b/js/document/models/base.js index f237e793..6d9d2e89 100755 --- a/js/document/models/base.js +++ b/js/document/models/base.js | |||
@@ -6,42 +6,234 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
6 | 6 | ||
7 | //////////////////////////////////////////////////////////////////////// | 7 | //////////////////////////////////////////////////////////////////////// |
8 | // | 8 | // |
9 | var Montage = require("montage/core/core").Montage; | 9 | var Montage = require("montage/core/core").Montage, |
10 | Component = require("montage/ui/component").Component; | ||
10 | //////////////////////////////////////////////////////////////////////// | 11 | //////////////////////////////////////////////////////////////////////// |
11 | // | 12 | // |
12 | exports.BaseDocumentModel = Montage.create(Montage, { | 13 | exports.BaseDocumentModel = Montage.create(Component, { |
13 | //////////////////////////////////////////////////////////////////// | 14 | //////////////////////////////////////////////////////////////////// |
14 | // | 15 | // |
15 | hasTemplate: { | 16 | hasTemplate: { |
16 | enumerable: false, | ||
17 | value: false | 17 | value: false |
18 | }, | 18 | }, |
19 | //////////////////////////////////////////////////////////////////// | 19 | //////////////////////////////////////////////////////////////////// |
20 | // | 20 | // |
21 | file: { | 21 | _file: { |
22 | value: null | 22 | value: null |
23 | }, | 23 | }, |
24 | 24 | //////////////////////////////////////////////////////////////////// | |
25 | _name: { | 25 | // |
26 | value: null | 26 | file: { |
27 | get: function() {return this._file;}, | ||
28 | set: function(value) {this._file = value;} | ||
27 | }, | 29 | }, |
28 | 30 | //////////////////////////////////////////////////////////////////// | |
31 | // | ||
29 | _isActive: { | 32 | _isActive: { |
30 | value: null | 33 | value: true |
31 | }, | 34 | }, |
32 | 35 | //////////////////////////////////////////////////////////////////// | |
36 | // | ||
37 | isActive: { | ||
38 | get: function() {return this._isActive;}, | ||
39 | set: function(value) {this._isActive = value;} | ||
40 | }, | ||
41 | //////////////////////////////////////////////////////////////////// | ||
42 | // | ||
33 | _needsSave: { | 43 | _needsSave: { |
34 | value: null | 44 | value: null |
35 | }, | 45 | }, |
36 | //////////////////////////////////////////////////////////////////// | 46 | //////////////////////////////////////////////////////////////////// |
37 | // | 47 | // |
38 | njdata: { | 48 | needsSave: { |
49 | get: function() {return this._needsSave;}, | ||
50 | set: function(value) {this._needsSave = value;} | ||
51 | }, | ||
52 | //////////////////////////////////////////////////////////////////// | ||
53 | // | ||
54 | _currentView: { | ||
55 | value: null | ||
56 | }, | ||
57 | //////////////////////////////////////////////////////////////////// | ||
58 | // | ||
59 | currentView: { | ||
60 | get: function() {return this._currentView;}, | ||
61 | set: function(value) {this._currentView = value;} | ||
62 | }, | ||
63 | //////////////////////////////////////////////////////////////////// | ||
64 | // | ||
65 | fileTemplate: { | ||
66 | value: null | ||
67 | }, | ||
68 | //////////////////////////////////////////////////////////////////// | ||
69 | // | ||
70 | parentContainer: { | ||
39 | value: null | 71 | value: null |
40 | }, | 72 | }, |
41 | //////////////////////////////////////////////////////////////////// | 73 | //////////////////////////////////////////////////////////////////// |
42 | // | 74 | // |
43 | views: { | 75 | views: { |
44 | value: null | 76 | value: null |
77 | }, | ||
78 | //////////////////////////////////////////////////////////////////// | ||
79 | // | ||
80 | switchViewTo: { | ||
81 | value: function (view) { | ||
82 | // | ||
83 | } | ||
84 | }, | ||
85 | //////////////////////////////////////////////////////////////////// | ||
86 | //TODO: Add API to allow other browser support | ||
87 | browserPreview: { | ||
88 | value: function (browser) { | ||
89 | //Generating URL for document | ||
90 | var url = this.application.ninja.coreIoApi.rootUrl + this.file.uri.split(this.application.ninja.coreIoApi.cloudData.root)[1]; | ||
91 | //TODO: Add logic to prompt user to save (all) before preview | ||
92 | this.saveAll(function (result) { | ||
93 | //Currently only supporting current browser (Chrome, obviously) | ||
94 | switch (this.browser) { | ||
95 | case 'chrome': | ||
96 | if (this.template && (this.template.type === 'banner' || this.template.type === 'animation')) { | ||
97 | window.open('/js/document/templates/preview/banner.html?width='+this.template.size.width+'&height='+this.template.size.height+'&url='+this.url); | ||
98 | } else { | ||
99 | window.open(this.url); | ||
100 | } | ||
101 | break; | ||
102 | default: | ||
103 | if (this.template && (this.template.type === 'banner' || this.template.type === 'animation')) { | ||
104 | window.open('/js/document/templates/preview/banner.html?width='+this.template.size.width+'&height='+this.template.size.height+'&url='+this.url); | ||
105 | } else { | ||
106 | window.open(this.url); | ||
107 | } | ||
108 | break; | ||
109 | } | ||
110 | }.bind({browser: browser, url: url, template: this.fileTemplate})); | ||
111 | } | ||
112 | }, | ||
113 | //////////////////////////////////////////////////////////////////// | ||
114 | // | ||
115 | getStyleSheets: { | ||
116 | value: function () { | ||
117 | // | ||
118 | var styles = []; | ||
119 | // | ||
120 | for (var k in this.views.design.iframe.contentWindow.document.styleSheets) { | ||
121 | if (this.views.design.iframe.contentWindow.document.styleSheets[k].ownerNode && this.views.design.iframe.contentWindow.document.styleSheets[k].ownerNode.getAttribute) { | ||
122 | if (this.views.design.iframe.contentWindow.document.styleSheets[k].ownerNode.getAttribute('data-ninja-template') === null) { | ||
123 | styles.push(this.views.design.iframe.contentWindow.document.styleSheets[k]); | ||
124 | } | ||
125 | } | ||
126 | } | ||
127 | // | ||
128 | return styles; | ||
129 | } | ||
130 | }, | ||
131 | //////////////////////////////////////////////////////////////////// | ||
132 | // | ||
133 | save: { | ||
134 | value: function (callback) { | ||
135 | // | ||
136 | if (this.needsSave) { | ||
137 | //Save | ||
138 | } else { | ||
139 | //Ignore command | ||
140 | } | ||
141 | // | ||
142 | if (this.currentView === this.views.design) { | ||
143 | // | ||
144 | this.application.ninja.ioMediator.fileSave({ | ||
145 | mode: 'html', | ||
146 | file: this.file, | ||
147 | webgl: this.webGlHelper.glData, | ||
148 | styles: this.getStyleSheets(), | ||
149 | template: this.fileTemplate, | ||
150 | document: this.views.design.iframe.contentWindow.document, | ||
151 | head: this.views.design.iframe.contentWindow.document.head, | ||
152 | body: this.views.design.iframe.contentWindow.document.body, | ||
153 | mjsTemplateCreator: this.views.design.iframe.contentWindow.mjsTemplateCreator | ||
154 | }, this.handleSaved.bind({callback: callback, model: this})); | ||
155 | } else { | ||
156 | //TODO: Add logic to save code view data | ||
157 | } | ||
158 | } | ||
159 | }, | ||
160 | //////////////////////////////////////////////////////////////////// | ||
161 | // | ||
162 | saveAll: { | ||
163 | value: function (callback) { | ||
164 | // | ||
165 | if (this.needsSave) { | ||
166 | //Save | ||
167 | } else { | ||
168 | //Ignore command | ||
169 | } | ||
170 | // | ||
171 | if (this.currentView === this.views.design) { | ||
172 | // | ||
173 | this.application.ninja.ioMediator.fileSave({ | ||
174 | mode: 'html', | ||
175 | file: this.file, | ||
176 | webgl: this.webGlHelper.glData, | ||
177 | css: this.getStyleSheets(), | ||
178 | template: this.fileTemplate, | ||
179 | document: this.views.design.iframe.contentWindow.document, | ||
180 | head: this.views.design.iframe.contentWindow.document.head, | ||
181 | body: this.views.design.iframe.contentWindow.document.body, | ||
182 | mjsTemplateCreator: this.views.design.iframe.contentWindow.mjsTemplateCreator | ||
183 | }, this.handleSaved.bind({callback: callback, model: this})); | ||
184 | } else { | ||
185 | //TODO: Add logic to save code view data | ||
186 | } | ||
187 | |||
188 | } | ||
189 | }, | ||
190 | //////////////////////////////////////////////////////////////////// | ||
191 | // | ||
192 | saveAs: { | ||
193 | value: function (callback) { | ||
194 | // | ||
195 | if (this.needsSave) { | ||
196 | //Save current file on memory | ||
197 | } else { | ||
198 | //Copy file from disk | ||
199 | } | ||
200 | } | ||
201 | }, | ||
202 | //////////////////////////////////////////////////////////////////// | ||
203 | // | ||
204 | handleSaved: { | ||
205 | value: function (result) { | ||
206 | // | ||
207 | if (result.status === 204) { | ||
208 | this.model.needsSave = false; | ||
209 | } | ||
210 | // | ||
211 | if (this.callback) this.callback(result); | ||
212 | } | ||
213 | }, | ||
214 | //////////////////////////////////////////////////////////////////// | ||
215 | // | ||