aboutsummaryrefslogtreecommitdiff
path: root/js/document/mediators/template.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/document/mediators/template.js')
-rwxr-xr-xjs/document/mediators/template.js643
1 files changed, 322 insertions, 321 deletions
diff --git a/js/document/mediators/template.js b/js/document/mediators/template.js
index 982b410f..4065f471 100755
--- a/js/document/mediators/template.js
+++ b/js/document/mediators/template.js
@@ -1,24 +1,25 @@
1/* <copyright> 1/* <copyright>
2Copyright (c) 2012, Motorola Mobility, Inc 2Copyright (c) 2012, Motorola Mobility LLC.
3All Rights Reserved. 3All Rights Reserved.
4BSD License.
5 4
6Redistribution and use in source and binary forms, with or without 5Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met: 6modification, are permitted provided that the following conditions are met:
8 7
9 - Redistributions of source code must retain the above copyright notice, 8* Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer. 9 this list of conditions and the following disclaimer.
11 - Redistributions in binary form must reproduce the above copyright 10
12 notice, this list of conditions and the following disclaimer in the 11* Redistributions in binary form must reproduce the above copyright notice,
13 documentation and/or other materials provided with the distribution. 12 this list of conditions and the following disclaimer in the documentation
14 - Neither the name of Motorola Mobility nor the names of its contributors 13 and/or other materials provided with the distribution.
15 may be used to endorse or promote products derived from this software 14
16 without specific prior written permission. 15* Neither the name of Motorola Mobility LLC nor the names of its
16 contributors may be used to endorse or promote products derived from this
17 software without specific prior written permission.
17 18
18THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
@@ -30,16 +31,16 @@ POSSIBILITY OF SUCH DAMAGE.
30 31
31//////////////////////////////////////////////////////////////////////// 32////////////////////////////////////////////////////////////////////////
32// 33//
33var Montage = require("montage/core/core").Montage, 34var Montage = require("montage/core/core").Montage,
34 Component = require("montage/ui/component").Component, 35 Component = require("montage/ui/component").Component,
35 TemplateCreator = require("node_modules/tools/template/template-creator").TemplateCreator, 36 TemplateCreator = require("node_modules/tools/template/template-creator").TemplateCreator,
36 ClassUuid = require("js/components/core/class-uuid").ClassUuid; 37 ClassUuid = require("js/components/core/class-uuid").ClassUuid;
37//////////////////////////////////////////////////////////////////////// 38////////////////////////////////////////////////////////////////////////
38// 39//
39exports.TemplateDocumentMediator = Montage.create(Component, { 40exports.TemplateDocumentMediator = Montage.create(Component, {
40 //////////////////////////////////////////////////////////////////// 41 ////////////////////////////////////////////////////////////////////
41 // 42 //
42 hasTemplate: { 43 hasTemplate: {
43 value: false 44 value: false
44 }, 45 },
45 //////////////////////////////////////////////////////////////////// 46 ////////////////////////////////////////////////////////////////////
@@ -53,55 +54,55 @@ exports.TemplateDocumentMediator = Montage.create(Component, {
53 //////////////////////////////////////////////////////////////////// 54 ////////////////////////////////////////////////////////////////////
54 // 55 //
55 getDataDirectory: { 56 getDataDirectory: {
56 value: function (path) { 57 value: function (path) {
57 //TODO: Implement user overwrite 58 //TODO: Implement user overwrite
58 return this._getUserDirectory(path+'data/'); 59 return this._getUserDirectory(path+'data/');
59 } 60 }
60 }, 61 },
61 //////////////////////////////////////////////////////////////////// 62 ////////////////////////////////////////////////////////////////////
62 // 63 //
63 getNinjaDirectory: { 64 getNinjaDirectory: {
64 value: function (path) { 65 value: function (path) {
65 //TODO: Implement user overwrite 66 //TODO: Implement user overwrite
66 return this._getUserDirectory(this.getDataDirectory(path)+'ninja/'); 67 return this._getUserDirectory(this.getDataDirectory(path)+'ninja/');
67 } 68 }
68 }, 69 },
69 //////////////////////////////////////////////////////////////////// 70 ////////////////////////////////////////////////////////////////////
70 // 71 //
71 getCanvasDirectory: { 72 getCanvasDirectory: {
72 value: function (path) { 73 value: function (path) {
73 //TODO: Implement user overwrite 74 //TODO: Implement user overwrite
74 return this._getUserDirectory(this.getNinjaDirectory(path)+'canvas/'); 75 return this._getUserDirectory(this.getNinjaDirectory(path)+'canvas/');
75 } 76 }
76 }, 77 },
77 //////////////////////////////////////////////////////////////////// 78 ////////////////////////////////////////////////////////////////////
78 // 79 //
79 _getUserDirectory: { 80 _getUserDirectory: {
80 value: function (path) { 81 value: function (path) {
81 //Checking for data directory 82 //Checking for data directory
82 var check = this.application.ninja.coreIoApi.fileExists({uri: path}), directory; 83 var check = this.application.ninja.coreIoApi.fileExists({uri: path}), directory;
83 //Creating directory if doesn't exists 84 //Creating directory if doesn't exists
84 switch (check.status) { 85 switch (check.status) {
85 case 204: //Exists 86 case 204: //Exists
86 directory = path; 87 directory = path;
87 break; 88 break;
88 case 404: //Doesn't exists 89 case 404: //Doesn't exists
89 directory = this.application.ninja.coreIoApi.createDirectory({uri: path}); 90 directory = this.application.ninja.coreIoApi.createDirectory({uri: path});
90 //Checking for success 91 //Checking for success
91 if (directory.status === 201) { 92 if (directory.status === 201) {
92 directory = path; 93 directory = path;
93 } else { 94 } else {
94 //Error 95 //Error
95 directory = null; 96 directory = null;
96 } 97 }
97 break; 98 break;
98 default: //Error 99 default: //Error
99 directory = null; 100 directory = null;
100 break; 101 break;
101 } 102 }
102 //Returning the path to the directory on disk (null for any error) 103 //Returning the path to the directory on disk (null for any error)
103 return directory; 104 return directory;
104 } 105 }
105 }, 106 },
106 //////////////////////////////////////////////////////////////////// 107 ////////////////////////////////////////////////////////////////////
107 // 108 //
@@ -109,7 +110,7 @@ exports.TemplateDocumentMediator = Montage.create(Component, {
109 value: function (html) { 110 value: function (html) {
110 //Creating temp object to mimic HTML 111 //Creating temp object to mimic HTML
111 var doc = window.document.implementation.createHTMLDocument(), template, docHtmlTag, 112 var doc = window.document.implementation.createHTMLDocument(), template, docHtmlTag,
112 hackHtml = document.createElement('html'), hackTag; 113 hackHtml = document.createElement('html'), hackTag;
113 //Setting content to temp 114 //Setting content to temp
114 doc.getElementsByTagName('html')[0].innerHTML = html; 115 doc.getElementsByTagName('html')[0].innerHTML = html;
115 //TODO: Improve this, very bad way of copying attributes (in a pinch to get it working) 116 //TODO: Improve this, very bad way of copying attributes (in a pinch to get it working)
@@ -118,13 +119,13 @@ exports.TemplateDocumentMediator = Montage.create(Component, {
118 docHtmlTag = doc.getElementsByTagName('html')[0]; 119 docHtmlTag = doc.getElementsByTagName('html')[0];
119 //Looping through the attributes to copy them 120 //Looping through the attributes to copy them
120 if (hackTag) { 121 if (hackTag) {
121 for (var m in hackTag.attributes) { 122 for (var m in hackTag.attributes) {
122 if (hackTag.attributes[m].value) { 123 if (hackTag.attributes[m].value) {
123 docHtmlTag.setAttribute(hackTag.attributes[m].name.replace(/ninjahtmlhack/gi, 'html'), hackTag.attributes[m].value.replace(/ninjahtmlhack/gi, 'html')); 124 docHtmlTag.setAttribute(hackTag.attributes[m].name.replace(/ninjahtmlhack/gi, 'html'), hackTag.attributes[m].value.replace(/ninjahtmlhack/gi, 'html'));
124 } 125 }
125 } 126 }
126 } 127 }
127 //Garbage collection 128 //Garbage collection
128 hackHtml = hackTag = null; 129 hackHtml = hackTag = null;
129 //Creating return object 130 //Creating return object
130 return {head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc}; 131 return {head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc};
@@ -134,42 +135,42 @@ exports.TemplateDocumentMediator = Montage.create(Component, {
134 //TODO: Expand to allow more templates, clean up variables 135 //TODO: Expand to allow more templates, clean up variables
135 parseNinjaTemplateToHtml: { 136 parseNinjaTemplateToHtml: {
136 value: function (saveExternalData, template, ninjaWrapper, libCopyCallback) { 137 value: function (saveExternalData, template, ninjaWrapper, libCopyCallback) {
137 //TODO: Improve reference for rootUrl 138 //TODO: Improve reference for rootUrl
138 var regexRootUrl, 139 var regexRootUrl,
139 rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])), 140 rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])),
140 mjsCreator = template.mjsTemplateCreator.create(), 141 mjsCreator = template.mjsTemplateCreator.create(),
141 mJsSerialization, 142 mJsSerialization,
142 toremovetags = [], 143 toremovetags = [],
143 presentNodes, 144 presentNodes,
144 montageTemplate; 145 montageTemplate;
145 //Creating instance of template creator 146 //Creating instance of template creator
146 montageTemplate = mjsCreator.initWithDocument(template.document); 147 montageTemplate = mjsCreator.initWithDocument(template.document);
147 //Setting up expression for parsing URLs 148 //Setting up expression for parsing URLs
148 regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi'); 149 regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi');
149 //Injecting head and body into old document 150 //Injecting head and body into old document
150 if (montageTemplate._ownerSerialization.length > 0) { 151 if (montageTemplate._ownerSerialization.length > 0) {
151 template.file.content.document.head.innerHTML = montageTemplate._document.head.innerHTML.replace(regexRootUrl, ''); 152 template.file.content.document.head.innerHTML = montageTemplate._document.head.innerHTML.replace(regexRootUrl, '');
152 template.file.content.document.body.innerHTML = montageTemplate._document.body.innerHTML.replace(regexRootUrl, ''); 153 template.file.content.document.body.innerHTML = montageTemplate._document.body.innerHTML.replace(regexRootUrl, '');
153 // 154 //
154 mJsSerialization = montageTemplate._ownerSerialization; 155 mJsSerialization = montageTemplate._ownerSerialization;
155 } else {