From bdf58adb465b2016d0d288cdcdec592e4151061d Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 28 Sep 2015 10:44:12 +0200 Subject: [PATCH] [FIX] web_editor: send mail to outlook and keep image size Office Outlook doesn't take into account the [style] attribute, and it doesn't manage width/height in percent value. This commit set width/heigth attribute in pixels and also always set the width/height in style attribute (keeping them in the original unit and setting them to auto if not present). --- addons/web_editor/static/src/js/inline.js | 15 +++++++++++++++ addons/web_editor/static/src/js/tour.rte.js | 2 +- addons/web_editor/static/src/js/transcoder.js | 15 ++++++++++----- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/addons/web_editor/static/src/js/inline.js b/addons/web_editor/static/src/js/inline.js index c5fd2cfd924..a843d740a48 100644 --- a/addons/web_editor/static/src/js/inline.js +++ b/addons/web_editor/static/src/js/inline.js @@ -45,6 +45,9 @@ snippet_editor.Class.include({ var $editable = $("#editable_area"); transcoder.img_to_font($editable); transcoder.style_to_class($editable); + + // fix outlook image rendering bug + $editable.find('img[style*="width"], img[style*="height"]').removeAttr('height width'); }); }, clean_for_save: function () { @@ -52,6 +55,15 @@ snippet_editor.Class.include({ var $editable = $("#editable_area"); transcoder.class_to_style($editable); transcoder.font_to_img($editable); + + // fix outlook image rendering bug + _.each(['width', 'height'], function(attribute) { + $editable.find('img[style*="width"], img[style*="height"]').attr(attribute, function(){ + return $(this)[attribute](); + }).css(attribute, function(){ + return $(this).get(0).style[attribute] || 'auto'; + }); + }); }, }); @@ -69,6 +81,9 @@ window.top.odoo[callback+"_updown"] = function (value, fields_values) { transcoder.img_to_font($editable); transcoder.style_to_class($editable); + + // fix outlook image rendering bug + $editable.find('img[style*="width"], img[style*="height"]').removeAttr('height width'); } else { $editable.trigger("content_changed"); } diff --git a/addons/web_editor/static/src/js/tour.rte.js b/addons/web_editor/static/src/js/tour.rte.js index dbf63538ae6..73adcd089f5 100644 --- a/addons/web_editor/static/src/js/tour.rte.js +++ b/addons/web_editor/static/src/js/tour.rte.js @@ -373,7 +373,7 @@ Tour.register({ } }, { - waitFor: '#wrapwrap img:first[style*="border-bottom-left-radius:50%"][style*="border-top-width"][style*="padding-top"]', + waitFor: '#wrapwrap img:first[width][height][style*="-radius"][style*="1px"][style*="padding"]', title: "check the image style", }, { diff --git a/addons/web_editor/static/src/js/transcoder.js b/addons/web_editor/static/src/js/transcoder.js index 3b4e31763de..583dcf9a8d6 100644 --- a/addons/web_editor/static/src/js/transcoder.js +++ b/addons/web_editor/static/src/js/transcoder.js @@ -105,12 +105,14 @@ var font_to_img = function ($editable) { }); }); if (content) { - var size = parseInt(parseFloat($font.css("font-size"))/parseFloat($font.parent().css("font-size")),10); var color = $font.css("color").replace(/\s/g, ''); var src = _.str.sprintf('/web_editor/font_to_img/%s/%s/'+$font.height(), window.encodeURI(content), window.encodeURI(color)); - var style = $font.attr("style"); - style = (style ? style.replace(/\s/g, '').replace(/(^|;)height:[^;]*/, '$1').replace(/(^|;)font-size:[^;]*/, '$1') : "") + "height:"+size+"em;"; - var $img = $("").attr("src", src).attr("data-class", $font.attr("class")).attr("style", style); + var $img = $("").attr("src", src) + .attr("data-class", $font.attr("class")) + .attr("style", $font.attr("style")) + .attr("height", $font.height()) + .css("height", "") + .css("font-size", ""); $font.replaceWith($img); } else { $font.remove(); @@ -121,7 +123,10 @@ var font_to_img = function ($editable) { var img_to_font = function ($editable) { $("img[src*='/web_editor/font_to_img/']", $editable).each(function () { var $img = $(this); - var $font = $("").attr("class", $img.data("class")).attr("style", $img.attr("style")).css("height", ""); + var $font = $("") + .attr("class", $img.data("class")) + .attr("style", $img.attr("style")) + .css("height", ""); $img.replaceWith($font); }); };