diff options
author | Thais Siqueira <thais.siqueira@gmail.com> | 2016-04-11 08:54:03 -0300 |
---|---|---|
committer | Thais Siqueira <thais.siqueira@gmail.com> | 2016-04-11 08:54:03 -0300 |
commit | 3f9c038772f7fd4987e053c9188e260f5f55f07b (patch) | |
tree | b89b0f505ae91c076d9f7bf03ea9dd50e597c948 /web-ui | |
parent | 1bdad5bcf1742b279ba0a2840aec526e4f6175a7 (diff) | |
parent | f41cea02299dc41dcc1f934d57430b564cf708ef (diff) |
Merge branch 'dev/622-hide-reply-container'
Diffstat (limited to 'web-ui')
-rw-r--r-- | web-ui/app/js/mail_view/ui/mail_view.js | 54 | ||||
-rw-r--r-- | web-ui/app/js/mixins/with_mail_sandbox.js | 80 | ||||
-rw-r--r-- | web-ui/app/js/sandbox.js | 2 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/mail_view.spec.js | 6 | ||||
-rw-r--r-- | web-ui/test/spec/mixins/with_mail_sandbox.spec.js | 38 |
5 files changed, 124 insertions, 56 deletions
diff --git a/web-ui/app/js/mail_view/ui/mail_view.js b/web-ui/app/js/mail_view/ui/mail_view.js index 6f21b96c..6f57236e 100644 --- a/web-ui/app/js/mail_view/ui/mail_view.js +++ b/web-ui/app/js/mail_view/ui/mail_view.js @@ -23,14 +23,15 @@ define( 'helpers/view_helper', 'mixins/with_hide_and_show', 'mixins/with_mail_tagging', + 'mixins/with_mail_sandbox', 'page/events', 'views/i18n' ], - function (defineComponent, templates, mailActions, viewHelpers, withHideAndShow, withMailTagging, events, i18n) { + function (defineComponent, templates, mailActions, viewHelpers, withHideAndShow, withMailTagging, withMailSandbox, events, i18n) { 'use strict'; - return defineComponent(mailView, mailActions, withHideAndShow, withMailTagging); + return defineComponent(mailView, mailActions, withHideAndShow, withMailTagging, withMailSandbox); function mailView() { this.defaultAttrs({ @@ -71,54 +72,7 @@ define( attachments: attachments })); - var $iframe = $("#read-sandbox"); - var iframe = $iframe[0]; - - var content = viewHelpers.formatMailBody(data.mail); - - iframe.onload = function() { - // use iframe-resizer to dynamically adapt iframe size to its content - var config = { - resizedCallback: scaleToFit, - checkOrigin: false - }; - $iframe.iFrameResize(config); - - // transform scale iframe to fit container width - // necessary if iframe is wider than container - function scaleToFit() { - var parentWidth = $iframe.parent().width(); - var w = $iframe.width(); - var scale = 'none'; - - // only scale html mails - var mail = data.mail; - if (mail && mail.htmlBody && (w > parentWidth)) { - scale = parentWidth / w; - scale = 'scale(' + scale + ',' + scale + ')'; - } - - $iframe.css({ - '-webkit-transform-origin': '0 0', - '-moz-transform-origin': '0 0', - '-ms-transform-origin': '0 0', - 'transform-origin': '0 0', - '-webkit-transform': scale, - '-moz-transform': scale, - '-ms-transform': scale, - 'transform': scale - }); - } - - iframe.contentWindow.postMessage({ - html: content - }, '*'); - }; - - - - this.trigger(document, events.search.highlightResults, {where: '.mail-read-view__header'}); - this.trigger(document, events.ui.replyBox.showReplyContainer); + this.showMailOnSandbox(this.attr.mail); this.attachTagCompletion(this.attr.mail); diff --git a/web-ui/app/js/mixins/with_mail_sandbox.js b/web-ui/app/js/mixins/with_mail_sandbox.js new file mode 100644 index 00000000..1a51840d --- /dev/null +++ b/web-ui/app/js/mixins/with_mail_sandbox.js @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ +define( + ['helpers/view_helper', 'page/events'], + function(viewHelpers, events) { + 'use strict'; + + function withMailSandbox() { + this.showMailOnSandbox = function(mail) { + var that = this; + var $iframe = $("#read-sandbox"); + var iframe = $iframe[0]; + var content = viewHelpers.formatMailBody(mail); + + window.addEventListener('message', function(e) { + if (e.origin === 'null' && e.source === iframe.contentWindow) { + that.trigger(document, events.ui.replyBox.showReplyContainer); + that.trigger(document, events.search.highlightResults, {where: '.mail-read-view__header'}); + } + }); + + iframe.onload = function() { + if ($iframe.iFrameResize) { + // use iframe-resizer to dynamically adapt iframe size to its content + var config = { + resizedCallback: scaleToFit, + checkOrigin: false + }; + $iframe.iFrameResize(config); + } + + iframe.contentWindow.postMessage({ + html: content + }, '*'); + + // transform scale iframe to fit container width + // necessary if iframe is wider than container + function scaleToFit() { + var parentWidth = $iframe.parent().width(); + var w = $iframe.width(); + var scale = 'none'; + + // only scale html mails + if (mail && mail.htmlBody && (w > parentWidth)) { + scale = parentWidth / w; + scale = 'scale(' + scale + ',' + scale + ')'; + } + + $iframe.css({ + '-webkit-transform-origin': '0 0', + '-moz-transform-origin': '0 0', + '-ms-transform-origin': '0 0', + 'transform-origin': '0 0', + '-webkit-transform': scale, + '-moz-transform': scale, + '-ms-transform': scale, + 'transform': scale + }); + } + }; + }; + } + + return withMailSandbox; + } +); diff --git a/web-ui/app/js/sandbox.js b/web-ui/app/js/sandbox.js index f9e708d6..33b16ea4 100644 --- a/web-ui/app/js/sandbox.js +++ b/web-ui/app/js/sandbox.js @@ -4,6 +4,8 @@ window.onmessage = function (e) { if (e.data.html) { document.body.innerHTML = e.data.html; + var mainWindow = e.source; + mainWindow.postMessage('data ok', e.origin); } }; })(); diff --git a/web-ui/test/spec/mail_view/ui/mail_view.spec.js b/web-ui/test/spec/mail_view/ui/mail_view.spec.js index 850687be..f44d71ee 100644 --- a/web-ui/test/spec/mail_view/ui/mail_view.spec.js +++ b/web-ui/test/spec/mail_view/ui/mail_view.spec.js @@ -35,12 +35,6 @@ describeComponent('mail_view/ui/mail_view', function () { expect(openNoMessageSelectedEvent).toHaveBeenTriggeredOn(document); }); - it('should open reply container', function () { - var showContainerEvent = spyOnEvent(document, Pixelated.events.ui.replyBox.showReplyContainer); - this.component.displayMail({}, testData); - expect(showContainerEvent).toHaveBeenTriggeredOn(document); - }); - it('removes the tag from the mail when the tag label is clicked', function() { var updateSpy = spyOnEvent(document, Pixelated.events.mail.tags.update); diff --git a/web-ui/test/spec/mixins/with_mail_sandbox.spec.js b/web-ui/test/spec/mixins/with_mail_sandbox.spec.js new file mode 100644 index 00000000..daa8cc39 --- /dev/null +++ b/web-ui/test/spec/mixins/with_mail_sandbox.spec.js @@ -0,0 +1,38 @@ +describeMixin('mixins/with_mail_sandbox', function() { + 'use strict'; + + beforeEach(function() { + this.setupComponent('<iframe id="read-sandbox" sandbox="allow-popups allow-scripts" src scrolling="no"></iframe>'); + var iframe = document.querySelector('iframe'); + var template = ['', + '<!DOCTYPE html>', + '<html>', + '<head>', + '<meta charset="utf-8">', + '<script>(function () {', + '\'use strict\'', + ';window.onmessage = function (e) {', + 'if (e.data.html) {', + 'var mainWindow = e.source;', + 'mainWindow.postMessage(\'data ok\', e.origin);', + '}', + '};', + '})();', + '</script>', + '</head>', + '<body>', + '</body>', + '</html>'].join(''); + iframe.src = URL.createObjectURL(new Blob([template], {type: "text/html"})); + }); + + it('should open reply container', function (done) { + var showContainerEvent = spyOnEvent(document, Pixelated.events.ui.replyBox.showReplyContainer); + this.component.showMailOnSandbox(Pixelated.testData().parsedMail.html); + setTimeout(function() { + expect(showContainerEvent).toHaveBeenTriggeredOn(document); + done(); + }, 200); + }); + +}); |