diff options
Diffstat (limited to 'js/document/views/design.js')
-rwxr-xr-x | js/document/views/design.js | 659 |
1 files changed, 340 insertions, 319 deletions
diff --git a/js/document/views/design.js b/js/document/views/design.js index 44ed2c65..c7f57e58 100755 --- a/js/document/views/design.js +++ b/js/document/views/design.js | |||
@@ -30,50 +30,50 @@ POSSIBILITY OF SUCH DAMAGE. | |||
30 | 30 | ||
31 | //////////////////////////////////////////////////////////////////////// | 31 | //////////////////////////////////////////////////////////////////////// |
32 | // | 32 | // |
33 | var Montage = require("montage/core/core").Montage, | 33 | var Montage = require("montage/core/core").Montage, |
34 | BaseDocumentView = require("js/document/views/base").BaseDocumentView, | 34 | BaseDocumentView = require("js/document/views/base").BaseDocumentView, |
35 | ElementModel = require("js/models/element-model"); | 35 | ElementModel = require("js/models/element-model"); |
36 | //////////////////////////////////////////////////////////////////////// | 36 | //////////////////////////////////////////////////////////////////////// |
37 | // | 37 | // |
38 | exports.DesignDocumentView = Montage.create(BaseDocumentView, { | 38 | exports.DesignDocumentView = Montage.create(BaseDocumentView, { |
39 | //////////////////////////////////////////////////////////////////// | 39 | //////////////////////////////////////////////////////////////////// |
40 | // | 40 | // |
41 | hasTemplate: { | 41 | hasTemplate: { |
42 | value: false | 42 | value: false |
43 | }, | 43 | }, |
44 | //////////////////////////////////////////////////////////////////// | 44 | //////////////////////////////////////////////////////////////////// |
45 | // | 45 | // |
46 | _callback: { | 46 | _callback: { |
47 | value: null | 47 | value: null |
48 | }, | 48 | }, |
49 | //////////////////////////////////////////////////////////////////// | 49 | //////////////////////////////////////////////////////////////////// |
50 | // | 50 | // |
51 | _viewCallback: { | 51 | _viewCallback: { |
52 | value: null | 52 | value: null |
53 | }, | 53 | }, |
54 | //////////////////////////////////////////////////////////////////// | 54 | //////////////////////////////////////////////////////////////////// |
55 | // | 55 | // |
56 | _template: { | 56 | _template: { |
57 | value: null | 57 | value: null |
58 | }, | 58 | }, |
59 | //////////////////////////////////////////////////////////////////// | 59 | //////////////////////////////////////////////////////////////////// |
60 | // | 60 | // |
61 | _bodyFragment: { | 61 | _bodyFragment: { |
62 | value: null | 62 | value: null |
63 | }, | 63 | }, |
64 | //////////////////////////////////////////////////////////////////// | 64 | //////////////////////////////////////////////////////////////////// |
65 | // | 65 | // |
66 | _headFragment: { | 66 | _headFragment: { |
67 | value: null | 67 | value: null |
68 | }, | 68 | }, |
69 | //////////////////////////////////////////////////////////////////// | 69 | //////////////////////////////////////////////////////////////////// |
70 | // | 70 | // |
71 | _observer: { | 71 | _observer: { |
72 | value: {head: null, body: null} | 72 | value: {head: null, body: null} |
73 | }, | 73 | }, |
74 | //////////////////////////////////////////////////////////////////// | 74 | //////////////////////////////////////////////////////////////////// |
75 | // | 75 | // |
76 | content: { | 76 | content: { |
77 | value: null | 77 | value: null |
78 | }, | 78 | }, |
79 | //////////////////////////////////////////////////////////////////// | 79 | //////////////////////////////////////////////////////////////////// |
@@ -92,29 +92,29 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, { | |||
92 | value: null | 92 | value: null |
93 | }, | 93 | }, |
94 | //////////////////////////////////////////////////////////////////// | 94 | //////////////////////////////////////////////////////////////////// |
95 | // | 95 | // |
96 | baseHref: { | 96 | baseHref: { |
97 | get: function() {return this._baseHref;}, | 97 | get: function() {return this._baseHref;}, |
98 | set: function(value) {this._baseHref = value;} | 98 | set: function(value) {this._baseHref = value;} |
99 | }, | 99 | }, |
100 | //////////////////////////////////////////////////////////////////// | 100 | //////////////////////////////////////////////////////////////////// |
101 | // | 101 | // |
102 | _document: { | 102 | _document: { |
103 | value: null | 103 | value: null |
104 | }, | 104 | }, |
105 | //////////////////////////////////////////////////////////////////// | 105 | //////////////////////////////////////////////////////////////////// |
106 | // | 106 | // |
107 | document: { | 107 | document: { |
108 | get: function() {return this._document;}, | 108 | get: function() {return this._document;}, |
109 | set: function(value) {this._document = value;} | 109 | set: function(value) {this._document = value;} |
110 | }, | 110 | }, |
111 | //////////////////////////////////////////////////////////////////// | 111 | //////////////////////////////////////////////////////////////////// |
112 | // | 112 | // |
113 | _documentRoot: { | 113 | _documentRoot: { |
114 | value: null | 114 | value: null |
115 | }, | 115 | }, |
116 | //////////////////////////////////////////////////////////////////// | 116 | //////////////////////////////////////////////////////////////////// |
117 | // | 117 | // |
118 | documentRoot: { | 118 | documentRoot: { |
119 | get: function() {return this._documentRoot;}, | 119 | get: function() {return this._documentRoot;}, |
120 | set: function(value) {this._documentRoot = value;} | 120 | set: function(value) {this._documentRoot = value;} |
@@ -140,12 +140,12 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, { | |||
140 | }, | 140 | }, |
141 | //////////////////////////////////////////////////////////////////// | 141 | //////////////////////////////////////////////////////////////////// |
142 | // | 142 | // |
143 | initialize: { | 143 | initialize: { |
144 | value: function (parent) { | 144 | value: function (parent) { |
145 | //Creating iFrame for view | 145 | //Creating iFrame for view |
146 | this.iframe = document.createElement("iframe"); | 146 | this.iframe = document.createElement("iframe"); |
147 | //Setting default styles | 147 | //Setting default styles |
148 | this.iframe.style.border = "none"; | 148 | this.iframe.style.border = "none"; |
149 | this.iframe.style.background = "#FFF"; | 149 | this.iframe.style.background = "#FFF"; |
150 | this.iframe.style.height = "100%"; | 150 | this.iframe.style.height = "100%"; |
151 | this.iframe.style.width = "100%"; | 151 | this.iframe.style.width = "100%"; |
@@ -154,190 +154,190 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, { | |||
154 | } | 154 | } |
155 | }, | 155 | }, |
156 | //////////////////////////////////////////////////////////////////// | 156 | //////////////////////////////////////////////////////////////////// |
157 | // | 157 | // |
158 | render: { | 158 | render: { |
159 | value: function (callback, template, viewCallback) { | 159 | value: function (callback, template, viewCallback) { |
160 | //TODO: Remove, this is a temp patch for webRequest API gate | 160 | //TODO: Remove, this is a temp patch for webRequest API gate |
161 | this.application.ninja.documentController.redirectRequests = false; | 161 | this.application.ninja.documentController.redirectRequests = false; |
162 | //Storing callback for dispatch ready | 162 | //Storing callback for dispatch ready |
163 | this._callback = callback; | 163 | this._callback = callback; |
164 | this._template = template; | 164 | this._template = template; |
165 | this._viewCallback = viewCallback; | 165 | this._viewCallback = viewCallback; |
166 | //Adding listener to know when template is loaded to then load user content | 166 | //Adding listener to know when template is loaded to then load user content |
167 | this.iframe.addEventListener("load", this.onTemplateLoad.bind(this), false); | 167 | this.iframe.addEventListener("load", this.onTemplateLoad.bind(this), false); |
168 | //TODO: Add source parameter and root (optional) | 168 | //TODO: Add source parameter and root (optional) |
169 | if (template && template.type === 'banner' && template.size) { | 169 | if (template && template.type === 'banner' && template.size) { |
170 | this.iframe.src = "js/document/templates/banner/index.html"; | 170 | this.iframe.src = "js/document/templates/banner/index.html"; |
171 | } else { | 171 | } else { |
172 | this.iframe.src = "js/document/templates/html/index.html"; | 172 | this.iframe.src = "js/document/templates/html/index.html"; |
173 | } | 173 | } |
174 | } | 174 | } |
175 | }, | 175 | }, |
176 | //////////////////////////////////////////////////////////////////// | 176 | //////////////////////////////////////////////////////////////////// |
177 | // | 177 | // |
178 | onTemplateLoad: { | 178 | onTemplateLoad: { |
179 | value: function (e) { | 179 | value: function (e) { |
180 | //TODO: Remove, this is a temp patch for webRequest API gate | 180 | //TODO: Remove, this is a temp patch for webRequest API gate |
181 | this.application.ninja.documentController.redirectRequests = true; | 181 | this.application.ninja.documentController.redirectRequests = true; |
182 | //TODO: Add support to constructing URL with a base HREF | 182 | //TODO: Add support to constructing URL with a base HREF |
183 | var basetag = this.content.document.getElementsByTagName('base'); | 183 | var basetag = this.content.document.getElementsByTagName('base'); |
184 | //Removing event | 184 | //Removing event |
185 | this.iframe.removeEventListener("load", this.onTemplateLoad.bind(this), false); | 185 | this.iframe.removeEventListener("load", this.onTemplateLoad.bind(this), false); |
186 | //TODO: Improve usage of this reference | 186 | //TODO: Improve usage of this reference |
187 | this.document = this.iframe.contentWindow.document; | 187 | this.document = this.iframe.contentWindow.document; |
188 | //Looping through template styles and marking them with ninja data attribute for I/O clean up | 188 | //Looping through template styles and marking them with ninja data attribute for I/O clean up |
189 | for (var k in this.document.styleSheets) { | 189 | for (var k in this.document.styleSheets) { |
190 | if (this.document.styleSheets[k].ownerNode && this.document.styleSheets[k].ownerNode.setAttribute) { | 190 | if (this.document.styleSheets[k].ownerNode && this.document.styleSheets[k].ownerNode.setAttribute) { |
191 | this.document.styleSheets[k].ownerNode.setAttribute('data-ninja-template', 'true'); | 191 | this.document.styleSheets[k].ownerNode.setAttribute('data-ninja-template', 'true'); |
192 | } | 192 | } |
193 | } | 193 | } |
194 | //Checking for a base URL | 194 | //Checking for a base URL |
195 | if (basetag.length) { | 195 | if (basetag.length) { |
196 | if (basetag[basetag.length-1].getAttribute && basetag[basetag.length-1].getAttribute('href')) { | 196 | if (basetag[basetag.length-1].getAttribute && basetag[basetag.length-1].getAttribute('href')) { |
197 | //Setting base HREF in model | 197 | //Setting base HREF in model |
198 | this.baseHref = basetag[basetag.length-1].getAttribute('href'); | 198 | this.baseHref = basetag[basetag.length-1].getAttribute('href'); |
199 | } | 199 | } |
200 | } | 200 | } |
201 | //Checking to content to be template | 201 | //Checking to content to be template |
202 | if (this._template) { | 202 | if (this._template) { |
203 | if (this._template.type === 'banner') { | 203 | if (this._template.type === 'banner') { |
204 | //Loading contents into a fragment | 204 | //Loading contents into a fragment |
205 | this._bodyFragment = this.document.createElement('body'); | 205 | this._bodyFragment = this.document.createElement('body'); |
206 | //Listening for content to be ready | 206 | //Listening for content to be ready |
207 | this._observer.body = new WebKitMutationObserver(this.insertBannerContent.bind(this)); | 207 | this._observer.body = new WebKitMutationObserver(this.insertBannerContent.bind(this)); |
208 |