aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorJose Antonio Marquez2012-02-07 14:50:48 -0800
committerJose Antonio Marquez2012-02-07 14:50:48 -0800
commit516e04ab45ca1dbad9c2847a9a213919d6e812f5 (patch)
tree67e8ee7340c2ececfe98335fbaf47181bfa7ee16 /js
parent111509d5cbbd54b11afbc49f7c78d0c0548bb617 (diff)
downloadninja-516e04ab45ca1dbad9c2847a9a213919d6e812f5.tar.gz
Adding library synced events
Added an event that will be dispatched when Ninja loads and the local chrome Ninja library is fully synced with all required libs.
Diffstat (limited to 'js')
-rwxr-xr-xjs/io/system/coreioapi.js20
-rw-r--r--js/io/system/ninjalibrary.js69
2 files changed, 78 insertions, 11 deletions
diff --git a/js/io/system/coreioapi.js b/js/io/system/coreioapi.js
index 9836f33f..005eabf2 100755
--- a/js/io/system/coreioapi.js
+++ b/js/io/system/coreioapi.js
@@ -58,9 +58,9 @@ exports.CoreIoApi = Montage.create(Component, {
58 handleReady: { 58 handleReady: {
59 enumerable: false, 59 enumerable: false,
60 value: function (e) { 60 value: function (e) {
61 // 61 //Removing events
62 this.chromeFileSystem.removeEventListener('ready', this, false); 62 this.chromeFileSystem.removeEventListener('ready', this, false);
63 // 63 //Listening for library to be copied event (builds list)
64 this.chromeFileSystem.addEventListener('library', this, false); 64 this.chromeFileSystem.addEventListener('library', this, false);
65 } 65 }
66 }, 66 },
@@ -71,10 +71,24 @@ exports.CoreIoApi = Montage.create(Component, {
71 value: function (e) { 71 value: function (e) {
72 //Removing events 72 //Removing events
73 this.chromeFileSystem.removeEventListener('library', this, false); 73 this.chromeFileSystem.removeEventListener('library', this, false);
74 // 74 //Listening for synced library event
75 this.ninjaLibrary.addEventListener('sync', this, false);
76 //Sending library to be synced to chrome
75 this.ninjaLibrary.synchronize(e._event.ninjaChromeLibrary, this.chromeFileSystem); 77 this.ninjaLibrary.synchronize(e._event.ninjaChromeLibrary, this.chromeFileSystem);
78
76 } 79 }
77 }, 80 },
81 ////////////////////////////////////////////////////////////////////
82 //
83 handleSync: {
84 enumerable: false,
85 value: function (e) {
86 //Removing events
87 console.log('Ninja Local Library: Ready');
88 this.ninjaLibrary.removeEventListener('sync', this, false);
89 //TODO: Add sync loading screen logic
90 }
91 },
78 //////////////////////////////////////////////////////////////////// 92 ////////////////////////////////////////////////////////////////////
79 // 93 //
80 _chromeNinjaLibrary: { 94 _chromeNinjaLibrary: {
diff --git a/js/io/system/ninjalibrary.js b/js/io/system/ninjalibrary.js
index 658ce589..fa2e7d1f 100644
--- a/js/io/system/ninjalibrary.js
+++ b/js/io/system/ninjalibrary.js
@@ -34,6 +34,18 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
34 this._chromeApi = value; 34 this._chromeApi = value;
35 } 35 }
36 }, 36 },
37 ////////////////////////////////////////////////////////////////////
38 //
39 _libsToSync: {
40 enumerable: false,
41 value: 0
42 },
43 ////////////////////////////////////////////////////////////////////
44 //
45 _syncedLibs: {
46 enumerable: false,
47 value: 0
48 },
37 //////////////////////////////////////////////////////////////////// 49 ////////////////////////////////////////////////////////////////////
38 // 50 //
39 synchronize: { 51 synchronize: {
@@ -42,7 +54,7 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
42 // 54 //
43 this.chromeApi = chrome; 55 this.chromeApi = chrome;
44 // 56 //
45 var i, l, libs, libjson, xhr = new XMLHttpRequest(), tocopylibs = []; 57 var i, l, libs, libjson, xhr = new XMLHttpRequest(), tocopylibs = [], copied;
46 //Getting known json list of libraries to copy to chrome 58 //Getting known json list of libraries to copy to chrome
47 xhr.open("GET", '/ninja-internal/js/io/system/ninjalibrary.json', false); 59 xhr.open("GET", '/ninja-internal/js/io/system/ninjalibrary.json', false);
48 xhr.send(); 60 xhr.send();
@@ -52,10 +64,27 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
52 libs = JSON.parse(xhr.response); 64 libs = JSON.parse(xhr.response);
53 // 65 //
54 if (chromeLibs.length > 0) { 66 if (chromeLibs.length > 0) {
55 //TODO: Remove 67 //
56 for (i=0; chromeLibs[i]; i++) { 68 for (i=0; chromeLibs[i]; i++) {
57 this.chromeApi.directoryDelete(chromeLibs[i]); 69 copied = false;
70 for (var j in libs.libraries) {
71 if (String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase() === chromeLibs[i]) {
72 copied = true;
73 }
74 }
75 //
76 if (!copied) {
77 if (libs.libraries[j].file) {
78 tocopylibs.push({name: String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase(), path: libs.libraries[j].path, file: libs.libraries[j].file});
79 } else {
80 tocopylibs.push({name: String(libs.libraries[j].name+libs.libraries[j].version).toLowerCase(), path: libs.libraries[j].path});
81 }
82 } else {
83 //TODO: Remove, currently manually removing copied libraries
84 this.chromeApi.directoryDelete(chromeLibs[i]);
85 }
58 } 86 }
87
59 } else { 88 } else {
60 //No library is present, must copy all 89 //No library is present, must copy all
61 for (var j in libs.libraries) { 90 for (var j in libs.libraries) {
@@ -70,6 +99,8 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
70 } 99 }
71 } 100 }
72 // 101 //
102 this._libsToSync = tocopylibs.length;
103 //
73 if (tocopylibs.length > 0) { 104 if (tocopylibs.length > 0) {
74 for (i=0; tocopylibs[i]; i++) { 105 for (i=0; tocopylibs[i]; i++) {
75 //Checking for library to be single file 106 //Checking for library to be single file
@@ -83,7 +114,7 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
83 //Checking for status 114 //Checking for status
84 if (xhr.readyState === 4) { //TODO: add check for mime type 115 if (xhr.readyState === 4) { //TODO: add check for mime type
85 //Creating new file from loaded content 116 //Creating new file from loaded content
86 this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response); 117 this.chromeApi.fileNew('/'+tocopylibs[i].name+'/'+tocopylibs[i].file, xhr.response, function (status) {if(status) this.libraryCopied()}.bind(this));
87 } else { 118 } else {
88 //Error creating single file library 119 //Error creating single file library
89 } 120 }
@@ -104,8 +135,8 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
104 libjson.dirsCreated = 0; 135 libjson.dirsCreated = 0;
105 libjson.filesToCreate = libjson.files.length; 136 libjson.filesToCreate = libjson.files.length;
106 libjson.filesCreated = 0; 137 libjson.filesCreated = 0;
107 libjson.api = this.chromeApi;
108 libjson.local = tocopylibs[i].name; 138 libjson.local = tocopylibs[i].name;
139 libjson.main = this;
109 this.createDirectory(tocopylibs[i].name, libjson.directories[l], function (status) { 140 this.createDirectory(tocopylibs[i].name, libjson.directories[l], function (status) {
110 //Checking for success on directories created 141 //Checking for success on directories created
111 if (status) { 142 if (status) {
@@ -120,12 +151,12 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
120 xhr.send(); 151 xhr.send();
121 //Checking for status 152 //Checking for status
122 if (xhr.readyState === 4) { 153 if (xhr.readyState === 4) {
123 this.api.fileNew(this.local+'/'+this.files[i], xhr.response, function (status) { 154 this.main.chromeApi.fileNew(this.local+'/'+this.files[i], xhr.response, function (status) {
124 if (status) { 155 if (status) {
125 this.filesCreated++; 156 this.filesCreated++;
126 } 157 }
127 if (this.filesCreated === this.filesToCreate) { 158 if (this.filesCreated === this.filesToCreate) {
128 //TODO: Add logic for task completed 159 this.main.libraryCopied();
129 } 160 }
130 }.bind(this)); 161 }.bind(this));
131 } 162 }
@@ -139,7 +170,8 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
139 } 170 }
140 } 171 }
141 } else { 172 } else {
142 //No libraries to copy 173 //Dispatching ready event since nothing to copy
174 this._dispatchEvent();
143 } 175 }
144 } else { 176 } else {
145 //Error 177 //Error
@@ -172,6 +204,27 @@ exports.NinjaLibrary = Montage.create(Object.prototype, {
172 } 204 }
173 } 205 }
174 } 206 }
207 },
208 ////////////////////////////////////////////////////////////////////
209 //
210 libraryCopied: {
211 enumerable: true,
212 value: function() {
213 this._syncedLibs++;
214 if (this._syncedLibs === this._libsToSync) {
215 this._dispatchEvent();
216 }
217 }
218 },
219 ////////////////////////////////////////////////////////////////////
220 //
221 _dispatchEvent: {
222 enumerable: true,
223 value: function () {
224 var syncEvent = document.createEvent("CustomEvent");
225 syncEvent.initEvent('sync', true, true);
226 this.dispatchEvent(syncEvent);
227 }
175 } 228 }
176 //////////////////////////////////////////////////////////////////// 229 ////////////////////////////////////////////////////////////////////
177 //////////////////////////////////////////////////////////////////// 230 ////////////////////////////////////////////////////////////////////