diff options
author | Jon Newson <jon_newson@ieee.org> | 2016-03-15 18:07:42 +1100 |
---|---|---|
committer | Jon Newson <jon_newson@ieee.org> | 2016-03-15 18:07:42 +1100 |
commit | a455353a811d4cf3a9c327750e9d0fb4c7ee229a (patch) | |
tree | 0c42f4a153df882d49b0448209ab0a1937e13685 /web-ui/app/js/mail_view/ui/mail_view.js | |
parent | 0ffeb6b70df00a54a2509179c32104bc7f883196 (diff) | |
parent | cf32471caf75b817b23339166002987726d3d6d8 (diff) |
Merge branch 'master' of https://github.com/pixelated/pixelated-user-agent
# By Felix Hammerl (13) and Thais Siqueira (3)
# Via Christoph (1) and Thais Siqueira (1)
* 'master' of https://github.com/pixelated/pixelated-user-agent:
Sets SSL certifications to false.
Fixes pep8 errors and update requests to 2.9.1.
Update locust test to run after xsrf token implementation.
Issue #620: Adapt unit tests to CSS changes
Issue #620: Refactor palceholder
Issue #620: Remove former main css file
Issue #620: Spike growl CSS modularization
Issue #617: Highlight search terms by altering mail content
Issue #617: Allow only >=3 alphanumeric characters in search field
Issue #617: Restrict searching to alphanumeric characters
Issue #617: Remove highlighting for sandboxed content
Issue #617: Add sandbox to build scripts
Issue #617: Add sandbox to user-agent
Issue #617: Create sandbox resouces
Issue #617: Add iframe-resizer
Issue #617: Serve content from Sandbox resource
Diffstat (limited to 'web-ui/app/js/mail_view/ui/mail_view.js')
-rw-r--r-- | web-ui/app/js/mail_view/ui/mail_view.js | 57 |
1 files changed, 54 insertions, 3 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 dfc57585..d952fed7 100644 --- a/web-ui/app/js/mail_view/ui/mail_view.js +++ b/web-ui/app/js/mail_view/ui/mail_view.js @@ -71,9 +71,52 @@ define( attachments: attachments })); - this.$node.find('.bodyArea').html(viewHelpers.formatMailBody(data.mail)); + 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: '.bodyArea'}); this.trigger(document, events.search.highlightResults, {where: '.subjectArea'}); this.trigger(document, events.search.highlightResults, {where: '.msg-header .recipients'}); this.trigger(document, events.ui.replyBox.showReplyContainer); @@ -214,9 +257,17 @@ define( this.trigger(events.mail.want, {mail: this.attr.ident, caller: this}); }; + this.highlightMailContent = function (event, data) { + // we can't directly manipulate the iFrame to highlight the content + // so we need to take an indirection where we directly manipulate + // the mail content to accomodate the highlighting + this.trigger(document, events.mail.highlightMailContent, data); + }; + this.after('initialize', function () { - this.on(this, events.mail.here, this.displayMail); this.on(this, events.mail.notFound, this.openNoMessageSelectedPane); + this.on(this, events.mail.here, this.highlightMailContent); + this.on(document, events.mail.display, this.displayMail); this.on(document, events.dispatchers.rightPane.clear, this.teardown); this.on(document, events.mail.tags.updated, this.tagsUpdated); this.on(document, events.mail.deleted, this.mailDeleted); |