aboutsummaryrefslogtreecommitdiff
path: root/js/mediators/io-mediator.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/mediators/io-mediator.js')
-rw-r--r--js/mediators/io-mediator.js182
1 files changed, 135 insertions, 47 deletions
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js
index c20ae8f7..8346c75e 100644
--- a/js/mediators/io-mediator.js
+++ b/js/mediators/io-mediator.js
@@ -10,7 +10,7 @@ var Montage = require("montage/core/core").Montage,
10 Component = require("montage/ui/component").Component, 10 Component = require("montage/ui/component").Component,
11 FileIo = require("js/io/system/fileio").FileIo, 11 FileIo = require("js/io/system/fileio").FileIo,
12 ProjectIo = require("js/io/system/projectio").ProjectIo, 12 ProjectIo = require("js/io/system/projectio").ProjectIo,
13 TemplateCreator = require("node_modules/tools/template-creator").TemplateCreator; 13 TemplateCreator = require("node_modules/tools/template/template-creator").TemplateCreator;
14//////////////////////////////////////////////////////////////////////// 14////////////////////////////////////////////////////////////////////////
15// 15//
16exports.IoMediator = Montage.create(Component, { 16exports.IoMediator = Montage.create(Component, {
@@ -53,14 +53,14 @@ exports.IoMediator = Montage.create(Component, {
53 // 53 //
54 fileNew: { 54 fileNew: {
55 enumerable: false, 55 enumerable: false,
56 value: function (file, template, callback) { 56 value: function (file, url, callback, template) {
57 //Loading template from template URL 57 //Loading template from template URL
58 var xhr = new XMLHttpRequest(), result; 58 var xhr = new XMLHttpRequest(), result;
59 xhr.open("GET", template, false); 59 xhr.open("GET", url, false);
60 xhr.send(); 60 xhr.send();
61 if (xhr.readyState === 4) { 61 if (xhr.readyState === 4) {
62 //Making call to create file, checking for return code 62 //Making call to create file, checking for return code
63 switch (this.fio.newFile({ uri: file, contents: xhr.response })) { 63 switch (this.fio.newFile({ uri: file, contents: parseTemplate(xhr.response, template) })) {
64 case 201: 64 case 201:
65 result = { status: 201, success: true, uri: file }; 65 result = { status: 201, success: true, uri: file };
66 break; 66 break;
@@ -74,6 +74,21 @@ exports.IoMediator = Montage.create(Component, {
74 result = { status: 500, success: false, uri: file }; 74 result = { status: 500, success: false, uri: file };
75 break; 75 break;
76 } 76 }
77 //TODO: Improve template data injection
78 function parseTemplate (content, template) {
79 //
80 if (template.name.toLowerCase() === 'banner' || template.name.toLowerCase() === 'animation') {
81 //Getting dimensions of banner
82 var dimensions = template.id.split('x');
83 dimensions = {width: String(dimensions[0])+'px', height: String(dimensions[1])+'px'};
84 //
85 content = content.replace(/Dimensions@@@/gi, "Dimensions@@@"+template.id);
86 content = content.replace(/ninja-banner {}/gi, "ninja-banner {overflow: visible; width: "+dimensions.width+"; height: "+dimensions.height+"}");
87 content = content.replace(/ninja-content-wrapper {}/gi, "ninja-content-wrapper {overflow: hidden; width: "+dimensions.width+"; height: "+dimensions.height+"}");
88 }
89 //
90 return content;
91 }
77 } else { 92 } else {
78 result = { status: 500, success: false, uri: file }; 93 result = { status: 500, success: false, uri: file };
79 } 94 }
@@ -147,21 +162,25 @@ exports.IoMediator = Montage.create(Component, {
147 // 162 //
148 fileSave: { 163 fileSave: {
149 enumerable: false, 164 enumerable: false,
150 value: function (file, callback) { 165 value: function (doc, callback) {
151 // 166 //
152 var contents, save; 167 var contents, save;
153 // 168 //
154 switch (file.mode) { 169 switch (doc.mode) {
155 case 'html': 170 case 'html':
156 //Getting content from function to properly handle saving assets (as in external if flagged) 171 //Getting content from function to properly handle saving assets (as in external if flagged)
157 contents = this.parseNinjaTemplateToHtml(file); 172 if (doc.template && (doc.template.type === 'banner' || doc.template.type === 'animation')) {
173 contents = this.parseNinjaTemplateToHtml(doc, true);
174 } else {
175 contents = this.parseNinjaTemplateToHtml(doc);
176 }
158 break; 177 break;
159 default: 178 default:
160 contents = file.content; 179 contents = doc.content;
161 break; 180 break;
162 } 181 }
163 //Making call to save file 182 //Making call to save file
164 save = this.fio.saveFile({ uri: file.document.uri, contents: contents }); 183 save = this.fio.saveFile({ uri: doc.file.uri, contents: contents });
165 //Checking for callback 184 //Checking for callback
166 if (callback) callback(save); 185 if (callback) callback(save);
167 } 186 }
@@ -192,23 +211,62 @@ exports.IoMediator = Montage.create(Component, {
192 //Setting content to temp 211 //Setting content to temp
193 doc.getElementsByTagName('html')[0].innerHTML = html; 212 doc.getElementsByTagName('html')[0].innerHTML = html;
194 //Creating return object 213 //Creating return object
195 return { head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc }; 214 return {head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc};
196 } 215 }
197 }, 216 },
198 //////////////////////////////////////////////////////////////////// 217 ////////////////////////////////////////////////////////////////////
199 //TODO: Expand to allow more templates, clean up variables 218 //TODO: Expand to allow more templates, clean up variables
200 parseNinjaTemplateToHtml: { 219 parseNinjaTemplateToHtml: {
201 enumerable: false, 220 enumerable: false,
202 value: function (template) { 221 value: function (template, ninjaWrapper) {
203 var regexRootUrl, rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])); 222 var regexRootUrl, rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]));
204 regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi'); 223 regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi');
205 //Injecting head and body into old document 224 //Injecting head and body into old document
206 template.document.content.document.head.innerHTML = template.head.replace(regexRootUrl, ''); 225 template.file.content.document.head.innerHTML = template.head.innerHTML.replace(regexRootUrl, '');
207 template.document.content.document.body.innerHTML = template.body.replace(regexRootUrl, ''); 226 template.file.content.document.body.innerHTML = template.body.innerHTML.replace(regexRootUrl, '');
227 //Copying attributes to maintain same properties as the <body>
228 for (var n in template.body.attributes) {
229 if (template.body.attributes[n].value) {
230 //
231 template.file.content.document.body.setAttribute(template.body.attributes[n].name, template.body.attributes[n].value);
232 }
233 }
234 //TODO: Add attribute copying for <HEAD> and <HTML>
235
236 /*
237//Testing using montage clean up method
238 var mjscode, mjsTemp = TemplateCreator.create();
239
240 //mjscode = mjsTemp.initWithHeadAndBodyElements(template.head, template.body);
241 //mjscode = mjsTemp.initWithDocument(template.file.content.document);
242 mjscode = mjsTemp.initWithDocument(template.document);
243
244 console.log(template.head, mjscode._document.head);
245 template.file.content.document.head.innerHTML = mjscode._document.head.innerHTML.replace(regexRootUrl, '');
246 template.file.content.document.body.innerHTML = mjscode._document.body.innerHTML.replace(regexRootUrl, '');
247*/
248
249
250
251
208 //Getting all CSS (style or link) tags 252 //Getting all CSS (style or link) tags
209 var styletags = template.document.content.document.getElementsByTagName('style'), 253 var styletags = template.file.content.document.getElementsByTagName('style'),
210 linktags = template.document.content.document.getElementsByTagName('link'), 254 linktags = template.file.content.document.getElementsByTagName('link'),
211 toremovetags = []; 255 toremovetags = [],
256 njtemplatetags = template.file.content.document.querySelectorAll('[data-ninja-template]');
257
258 //////////////////////////////////////////////////
259 //TODO: Remove, temp hack, this is to be fixed by Montage
260 var basetags = template.file.content.document.getElementsByTagName('base');
261 for (var g in basetags) {
262 if (basetags[g].getAttribute) toremovetags.push(basetags[g]);
263 }
264 //////////////////////////////////////////////////
265
266 //
267 for (var f in njtemplatetags) {
268 if (njtemplatetags[f].getAttribute) toremovetags.push(njtemplatetags[f]);
269 }
212 //Getting styles tags to be removed from document 270 //Getting styles tags to be removed from document
213 if (styletags.length) { 271 if (styletags.length) {
214 for (var j = 0; j < styletags.length; j++) { 272 for (var j = 0; j < styletags.length; j++) {
@@ -225,15 +283,16 @@ exports.IoMediator = Montage.create(Component, {
225 for (var h = 0; toremovetags[h]; h++) { 283 for (var h = 0; toremovetags[h]; h++) {
226 try { 284 try {
227 //Checking head first 285 //Checking head first
228 template.document.content.document.head.removeChild(toremovetags[h]); 286 template.file.content.document.head.removeChild(toremovetags[h]);
229 } catch (e) { 287 } catch (e) {
230 try { 288
289 }
290 try {
231 //Checking body if not in head 291 //Checking body if not in head
232 template.document.content.document.body.removeChild(toremovetags[h]); 292 template.file.content.document.body.removeChild(toremovetags[h]);
233 } catch (e) { 293 } catch (e) {
234 //Error, not found! 294 //Error, not found!
235 } 295 }
236 }
237 } 296 }
238 //Removing disabled tags from tags that were not originally disabled by user (Ninja enables all) 297 //Removing disabled tags from tags that were not originally disabled by user (Ninja enables all)
239 for (var l in linktags) { 298 for (var l in linktags) {
@@ -251,13 +310,13 @@ exports.IoMediator = Montage.create(Component, {
251 if (template.styles) { 310 if (template.styles) {
252 //Getting all style tags 311 //Getting all style tags
253 var styleCounter = 0, 312 var styleCounter = 0,
254 docStyles = template.document.content.document.getElementsByTagName('style'); 313 docStyles = template.file.content.document.getElementsByTagName('style');
255 //Looping through all style tags 314 //Looping through all style tags
256 for (var i in template.styles) { 315 for (var i in template.styles) {
257 if (template.styles[i].ownerNode) { 316 if (template.styles[i].ownerNode) {
258 if (template.styles[i].ownerNode.getAttribute) { 317 if (template.styles[i].ownerNode.getAttribute) {
259 //Checking for node not to be loaded from file 318 //Checking for node not to be loaded from file
260 if (template.styles[i].ownerNode.getAttribute('data-ninja-uri') === null && !template.styles[i].ownerNode.getAttribute('data-ninja-template')) { 319 if (template.styles[i].ownerNode.getAttribute('data-ninja-uri') === null && !template.styles[i].ownerNode.getAttribute('data-ninja-template') && !template.styles[i].ownerNode.getAttribute('data-ninja-external-url')) {
261 if (docStyles[styleCounter]) { 320 if (docStyles[styleCounter]) {
262 //Inseting data from rules array into tag as string 321 //Inseting data from rules array into tag as string
263 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.styles[i].cssRules); 322 docStyles[styleCounter].innerHTML = this.getCssFromRules(template.styles[i].cssRules);
@@ -271,8 +330,8 @@ exports.IoMediator = Montage.create(Component, {
271 } else if (template.css) {