diff options
-rwxr-xr-x | js/controllers/document-controller.js | 40 | ||||
-rwxr-xr-x | js/controllers/styles-controller.js | 7 | ||||
-rwxr-xr-x | js/document/html-document.js | 222 | ||||
-rwxr-xr-x | js/io/ui/cloudpopup.reel/cloudpopup.js | 4 | ||||
-rw-r--r-- | manifest.json | 5 |
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 | |||
456 | } else if(this.documentRoot.elementMode |