aboutsummaryrefslogtreecommitdiff
path: root/js/document
diff options
context:
space:
mode:
authorValerio Virgillito2012-05-08 17:36:57 -0700
committerValerio Virgillito2012-05-08 17:36:57 -0700
commitf8c467bd268e10d4f07136ca932c6eaffc94bc12 (patch)
tree16c9785629451a461f855cba4b4e36f28e639a8c /js/document
parentb425025001c0ef0ea0ea8439d60a133c3fac61b0 (diff)
parentef1daccfad5381badd53b9d045c2687f9b0e090d (diff)
downloadninja-f8c467bd268e10d4f07136ca932c6eaffc94bc12.tar.gz
Merge pull request #204 from joseeight/Document
I/O: Adding Save Functionality
Diffstat (limited to 'js/document')
-rwxr-xr-xjs/document/models/base.js102
-rwxr-xr-xjs/document/templates/montage-web/index.html17
-rwxr-xr-xjs/document/views/design.js7
3 files changed, 105 insertions, 21 deletions
diff --git a/js/document/models/base.js b/js/document/models/base.js
index 5667fb24..2bbbe501 100755
--- a/js/document/models/base.js
+++ b/js/document/models/base.js
@@ -76,39 +76,104 @@ exports.BaseDocumentModel = Montage.create(Component, {
76 //TODO: Add API to allow other browser support 76 //TODO: Add API to allow other browser support
77 browserPreview: { 77 browserPreview: {
78 value: function (browser) { 78 value: function (browser) {
79 79 //Generating URL for document
80 //TODO: Add file save before previewing 80 var url = this.application.ninja.coreIoApi.rootUrl + this.file.uri.split(this.application.ninja.coreIoApi.cloudData.root)[1];
81 81 //TODO: Add logic to prompt user to save (all) before preview
82 //Currently only supporting current browser (Chrome, obviously) 82 this.saveAll(function (result) {
83 switch (browser) { 83 //Currently only supporting current browser (Chrome, obviously)
84 case 'chrome': 84 switch (this.browser) {
85 window.open(this.application.ninja.coreIoApi.rootUrl + this.file.uri.split(this.application.ninja.coreIoApi.cloudData.root)[1]); 85 case 'chrome':
86 break; 86 window.open(this.url);
87 default: 87 break;
88 window.open(this.application.ninja.coreIoApi.rootUrl + this.file.uri.split(this.application.ninja.coreIoApi.cloudData.root)[1]); 88 default:
89 break; 89 window.open(this.url);
90 } 90 break;
91 }
92 }.bind({browser: browser, url: url}));
91 } 93 }
92 }, 94 },
93 //////////////////////////////////////////////////////////////////// 95 ////////////////////////////////////////////////////////////////////
94 // 96 //
97 getStyleSheets: {
98 value: function () {
99 //
100 var styles = [];
101 //
102 for (var k in this.views.design.iframe.contentWindow.document.styleSheets) {
103 if (this.views.design.iframe.contentWindow.document.styleSheets[k].ownerNode && this.views.design.iframe.contentWindow.document.styleSheets[k].ownerNode.getAttribute) {
104 if (this.views.design.iframe.contentWindow.document.styleSheets[k].ownerNode.getAttribute('data-ninja-template') === null) {
105 styles.push(this.views.design.iframe.contentWindow.document.styleSheets[k]);
106 }
107 }
108 }
109 //
110 return styles;
111 }
112 },
113 ////////////////////////////////////////////////////////////////////
114 //
95 save: { 115 save: {
96 value: function () { 116 value: function (callback) {
97 // 117 //
118 if (this.currentView === this.views.design) {
119 //
120 this.application.ninja.ioMediator.fileSave({
121 mode: 'html',
122 file: this.file,
123 webgl: this.webGlHelper.glData,
124 styles: this.getStyleSheets(),
125 document: this.views.design.iframe.contentWindow.document,
126 head: this.views.design.iframe.contentWindow.document.head,
127 body: this.views.design.iframe.contentWindow.document.body
128 }, callback.bind(this));
129 } else {
130 //TODO: Add logic to save code view data
131 }
132 //
133 if (this.needsSave) {
134 //Save
135 } else {
136 //Ignore command
137 }
98 } 138 }
99 }, 139 },
100 //////////////////////////////////////////////////////////////////// 140 ////////////////////////////////////////////////////////////////////
101 // 141 //
102 saveAs: { 142 saveAll: {
103 value: function () { 143 value: function (callback) {
144 //
145 if (this.currentView === this.views.design) {
146 //
147 this.application.ninja.ioMediator.fileSave({
148 mode: 'html',
149 file: this.file,
150 webgl: this.webGlHelper.glData,
151 css: this.getStyleSheets(),
152 document: this.views.design.iframe.contentWindow.document,
153 head: this.views.design.iframe.contentWindow.document.head,
154 body: this.views.design.iframe.contentWindow.document.body
155 }, callback.bind(this));
156 } else {
157 //TODO: Add logic to save code view data
158 }
104 // 159 //
160 if (this.needsSave) {
161 //Save
162 } else {
163 //Ignore command
164 }
105 } 165 }
106 }, 166 },
107 //////////////////////////////////////////////////////////////////// 167 ////////////////////////////////////////////////////////////////////
108 // 168 //
109 saveAll: { 169 saveAs: {
110 value: function () { 170 value: function () {
111 // 171 //
172 if (this.needsSave) {
173 //Save current file on memory
174 } else {
175 //Copy file from disk
176 }
112 } 177 }
113 }, 178 },
114 //////////////////////////////////////////////////////////////////// 179 ////////////////////////////////////////////////////////////////////
@@ -116,6 +181,11 @@ exports.BaseDocumentModel = Montage.create(Component, {
116 close: { 181 close: {
117 value: function () { 182 value: function () {
118 // 183 //
184 if (this.needsSave) {
185 //Prompt user to save of lose data
186 } else {
187 //Close file
188 }
119 } 189 }
120 } 190 }
121 //////////////////////////////////////////////////////////////////// 191 ////////////////////////////////////////////////////////////////////
diff --git a/js/document/templates/montage-web/index.html b/js/document/templates/montage-web/index.html
index 6bd5ce7a..e02d8d8e 100755
--- a/js/document/templates/montage-web/index.html
+++ b/js/document/templates/montage-web/index.html
@@ -5,13 +5,20 @@
5 (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. 5 (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
6 </copyright> --> 6 </copyright> -->
7 7
8
9<!--
10 NOTE(s):
11 All elements in the head of the document to be exclude from I/O
12 must set the 'data-ninja-template'
13 data-ninja-template="true"
14-->
8<html> 15<html>
9 16
10 <head> 17 <head>
11 18
12 <title>Ninja Prototype</title> 19 <title data-ninja-template="true">Ninja Prototype</title>
13 20
14 <style type="text/css" id="nj-stage-stylesheet"> 21 <style type="text/css" id="nj-stage-stylesheet" data-ninja-template="true">
15 * { 22 * {
16 -webkit-transition-duration: 0s !important; 23 -webkit-transition-duration: 0s !important;
17 -webkit-animation-duration: 0s !important; 24 -webkit-animation-duration: 0s !important;
@@ -49,15 +56,15 @@
49 } 56 }
50 </style> 57 </style>
51 58
52 <script type="text/javascript" data-package="." src="../../../../node_modules/montage/montage.js"></script> 59 <script type="text/javascript" data-package="." src="../../../../node_modules/montage/montage.js" data-ninja-template="true"></script>
53 60
54 <script type="text/javascript"> 61 <script type="text/javascript" data-ninja-template="true">
55 function getElement(x,y) { 62 function getElement(x,y) {
56 return document.elementFromPoint(x,y); 63 return document.elementFromPoint(x,y);
57 } 64 }
58 </script> 65 </script>
59 66
60 <script type="text/montage-serialization"> 67 <script type="text/montage-serialization" data-ninja-template="true">
61 { 68 {
62 "owner": { 69 "owner": {
63 "prototype": "main" 70 "prototype": "main"
diff --git a/js/document/views/design.js b/js/document/views/design.js
index df6e9b53..9ad088cb 100755
--- a/js/document/views/design.js
+++ b/js/document/views/design.js
@@ -100,6 +100,13 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, {
100 this._observer.body.observe(this.document.body, {childList: true}); 100 this._observer.body.observe(this.document.body, {childList: true});
101 //Inserting <body> HTML and parsing URLs via mediator method 101 //Inserting <body> HTML and parsing URLs via mediator method
102 this.document.body.innerHTML += '<ninjaloadinghack></ninjaloadinghack>'+(this.content.body.replace(/\b(href|src)\s*=\s*"([^"]*)"/g, this.application.ninja.ioMediator.getNinjaPropUrlRedirect.bind(this.application.ninja.ioMediator))).replace(/url\(([^"]*)(.+?)\1\)/g, this.application.ninja.ioMediator.getNinjaPropUrlRedirect.bind(this.application.ninja.ioMediator)); 102 this.document.body.innerHTML += '<ninjaloadinghack></ninjaloadinghack>'+(this.content.body.replace(/\b(href|src)\s*=\s*"([^"]*)"/g, this.application.ninja.ioMediator.getNinjaPropUrlRedirect.bind(this.application.ninja.ioMediator))).replace(/url\(([^"]*)(.+?)\1\)/g, this.application.ninja.ioMediator.getNinjaPropUrlRedirect.bind(this.application.ninja.ioMediator));
103 //Copying attributes to maintain same properties as the <body>
104 for (var n in this.content.document.body.attributes) {
105 if (this.content.document.body.attributes[n].value) {
106 this.document.body.setAttribute(this.content.document.body.attributes[n].name, this.content.document.body.attributes[n].value);
107 }
108 }
109 //TODO: Add attribute copying for <HEAD> and <HTML>
103 } 110 }
104 }, 111 },
105 //////////////////////////////////////////////////////////////////// 112 ////////////////////////////////////////////////////////////////////