aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xjs/controllers/document-controller.js40
-rwxr-xr-xjs/controllers/styles-controller.js7
-rwxr-xr-xjs/document/html-document.js222
-rwxr-xr-xjs/io/ui/cloudpopup.reel/cloudpopup.js4
-rw-r--r--manifest.json5
5 files changed, 146 insertions, 132 deletions
diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js
index e279d5c5..3cd2c254 100755
--- a/js/controllers/document-controller.js
+++ b/js/controllers/document-controller.js
@@ -66,35 +66,37 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
66 66
67 67
68 68
69
70
71
72
73 ////////////////////////////////////////////////////////////////////
74 //
69 handleWebRequest: { 75 handleWebRequest: {
70 value: function (request) { 76 value: function (request) {
71 if (request.url.indexOf('js/document/templates/montage-html') !== -1) { 77 if (this._hackRootFlag && request.url.indexOf('js/document/templates/montage-html') !== -1) {
72 78 //TODO: Optimize creating string
73 //console.log(request); 79 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split('/')[request.url.split('/').length-1]};
74
75 //TODO: Figure out why active document is not available here
76
77 if (this._hackRootFlag) {
78
79 //console.log(request.url.split('/')[request.url.split('/').length-1]);
80 //console.log(this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController._activeDocument.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split('/')[request.url.split('/').length-1]);
81
82 return {redirectUrl: this.application.ninja.coreIoApi.rootUrl+this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]+request.url.split('/')[request.url.split('/').length-1]};
83 }
84 } 80 }
85 } 81 }
86 }, 82 },
87 83 ////////////////////////////////////////////////////////////////////
88 84 //
89 handleAppLoaded: { 85 handleAppLoaded: {
90 value: function() { 86 value: function() {
91 // 87 //Adding an intercept to resources loaded to ensure user assets load from cloud simulator
92
93 chrome.webRequest.onBeforeRequest.addListener(this.handleWebRequest.bind(this), {urls: ["<all_urls>"]}, ["blocking"]); 88 chrome.webRequest.onBeforeRequest.addListener(this.handleWebRequest.bind(this), {urls: ["<all_urls>"]}, ["blocking"]);
94
95 } 89 }
96 }, 90 },
97 91 ////////////////////////////////////////////////////////////////////
92
93
94
95
96
97
98
99
98 handleExecuteFileOpen: { 100 handleExecuteFileOpen: {
99 value: function(event) { 101 value: function(event) {
100 var pickerSettings = event._event.settings || {}; 102 var pickerSettings = event._event.settings || {};
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js
index 44ca50e1..885d710f 100755
--- a/js/controllers/styles-controller.js
+++ b/js/controllers/styles-controller.js
@@ -571,6 +571,10 @@ var stylesController = exports.StylesController = Montage.create(Component, {
571 rules = [], 571 rules = [],
572 win = element.ownerDocument.defaultView, 572 win = element.ownerDocument.defaultView,
573 self = this; 573 self = this;
574
575 if(!win) {
576 return null;
577 }
574 578
575 if(!omitPseudos) { 579 if(!omitPseudos) {
576 pseudos.concat(['link', 'visited', 'active', 'hover', 'focus', 'first-letter', 580 pseudos.concat(['link', 'visited', 'active', 'hover', 'focus', 'first-letter',
@@ -674,8 +678,9 @@ var stylesController = exports.StylesController = Montage.create(Component, {
674 } 678 }
675 679
676 var matchingElements, i; 680 var matchingElements, i;
681
677 for(i = 0; i < specArr.length; i++) { 682 for(i = 0; i < specArr.length; i++) {
678 matchingElements = win.document.querySelectorAll(specArr[i].selector); 683 matchingElements = element.ownerDocument.querySelectorAll(specArr[i].selector);
679 if(nj.toArray(matchingElements).indexOf(element) !== -1) { 684 if(nj.toArray(matchingElements).indexOf(element) !== -1) {
680 return specArr[i]; 685 return specArr[i];
681 } 686 }
diff --git a/js/document/html-document.js b/js/document/html-document.js
index 77cc711d..28818774 100755
--- a/js/document/html-document.js
+++ b/js/document/html-document.js
@@ -358,22 +358,40 @@ exports.HTMLDocument = Montage.create(TextDocument, {
358 358
359 359
360 360
361 361
362
363
364 /*
365 DOM Mutation Events:
366
367 DOMActivate, DOMFocusIn, DOMFocusOut, DOMAttrModified,
368 DOMCharacterDataModified, DOMNodeInserted, DOMNodeInsertedIntoDocument,
369 DOMNodeRemoved, DOMNodeRemovedFromDocument, DOMSubtreeModified, DOMContentLoaded
370
371 */
372
373
374
375 /*
376//TODO: Remove and clean up event listener (DOMSubtreeModified)
377 _hackCount: {
378 value: 0
379 },
380*/
381
382
362 //////////////////////////////////////////////////////////////////// 383 ////////////////////////////////////////////////////////////////////
363 // 384 //
364 handleEvent: { 385 handleEvent: {
365 value: function(event){ 386 value: function(event){
366 //TODO: Remove
367 window.hackPreview = this.livePreview.bind(this);
368
369 this.application.ninja.documentController._hackRootFlag = true;
370 //console.log(this._userDocument.root, this);
371 //TODO: Clean up, using for prototyping save 387 //TODO: Clean up, using for prototyping save
372 this._templateDocument = {}; 388 this._templateDocument = {};
373 this._templateDocument.head = this.iframe.contentWindow.document.getElementById("userHead");; 389 this._templateDocument.head = this.iframe.contentWindow.document.getElementById("userHead");
374 this._templateDocument.body = this.iframe.contentWindow.document.getElementById("UserContent");; 390 this._templateDocument.body = this.documentRoot = this.iframe.contentWindow.document.getElementById("UserContent");
391 //TODO: Remove, also for prototyping
392 this.application.ninja.documentController._hackRootFlag = true;
375 // 393 //
376 this.documentRoot = this.iframe.contentWindow.document.getElementById("UserContent"); 394 //this.documentRoot = this.iframe.contentWindow.document.getElementById("UserContent");
377 this.stageBG = this.iframe.contentWindow.document.getElementById("stageBG"); 395 this.stageBG = this.iframe.contentWindow.document.getElementById("stageBG");
378 this.stageBG.onclick = null; 396 this.stageBG.onclick = null;
379 this._document = this.iframe.contentWindow.document; 397 this._document = this.iframe.contentWindow.document;
@@ -381,82 +399,93 @@ exports.HTMLDocument = Montage.create(TextDocument, {
381 // 399 //
382 if(!this.documentRoot.Ninja) this.documentRoot.Ninja = {}; 400 if(!this.documentRoot.Ninja) this.documentRoot.Ninja = {};
383 // 401 //
402 this._templateDocument.head.innerHTML = this._userDocument.content.head;
403 this._templateDocument.body.innerHTML = this._userDocument.content.body;
404
405
406
407
408 /* this.iframe.contentWindow.document.addEventListener('DOMSubtreeModified', function (e) { */ //TODO: Remove events upon loading once
384 409
385 this.documentRoot.innerHTML = this._userDocument.content.body; 410 //TODO: When written, the best way to initialize the document is to listen for the DOM tree being modified
386 this.iframe.contentWindow.document.getElementById("userHead").innerHTML = this._userDocument.content.head; 411 setTimeout(function () {
387 412
388
389 //TODO: Look at code below and clean up
390 413
391 414
415 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
416 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
417 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
418 if(this._document.styleSheets.length > 1) {
419 this._styles = this._document.styleSheets[this._document.styleSheets.length - 1];
420 this._stylesheets = this._document.styleSheets; // Entire stlyesheets array
421
422 //TODO Finish this implementation once we start caching Core Elements
423 // Assign a model to the UserContent and add the ViewPort reference to it.
424 NJUtils.makeElementModel(this.documentRoot, "Stage", "stage");
425 //this.documentRoot.elementModel.viewPort = this.iframe.contentWindow.document.getElementById("Viewport");
426 NJUtils.makeElementModel(this.stageBG, "Stage", "stage");
427 NJUtils.makeElementModel(this.iframe.contentWindow.document.getElementById("Viewport"), "Stage", "stage");
428
429 for(i = 0; i < this._stylesheets.length; i++) {
430 if(this._stylesheets[i].ownerNode.id === this._stageStyleSheetId) {
431 this.documentRoot.elementModel.defaultRule = this._stylesheets[i];
432 break;
433 }
434 }
435
436 //Temporary create properties for each rule we need to save the index of the rule
437 var len = this.documentRoot.elementModel.defaultRule.cssRules.length;
438 for(var j = 0; j < len; j++) {
439 //console.log(this.documentRoot.elementModel.defaultRule.cssRules[j].selectorText);
440 if(this.documentRoot.elementModel.defaultRule.cssRules[j].selectorText === "*") {
441
442 this.documentRoot.elementModel.transitionStopRule = this.documentRoot.elementModel.defaultRule.cssRules[j];
443
444 } else if(this.documentRoot.elementModel.defaultRule.cssRules[j].selectorText === "body") {
445
446 this.documentRoot.elementModel.body = this.documentRoot.elementModel.defaultRule.cssRules[j];
447
448 } else if(this.documentRoot.elementModel.defaultRule.cssRules[j].selectorText === "#Viewport") {
449
450 this.documentRoot.elementModel.viewPort = this.documentRoot.elementModel.defaultRule.cssRules[j];
451
452 } else if(this.documentRoot.elementModel.defaultRule.cssRules[j].selectorText === ".stageDimension") {
453
454 this.documentRoot.elementModel.stageDimension = this.documentRoot.elementModel.defaultRule.cssRules[j];
455