summaryrefslogtreecommitdiff
path: root/addons/web_editor/static/src/js/transcoder.js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2016-01-27 12:24:04 +0100
committerChristophe Simonis <chs@odoo.com>2016-01-27 12:24:04 +0100
commit78d20b552b4374b94aec7097c0e6a48a3dd2d961 (patch)
tree5acd7cbf1cc9e2f277034f44fc0ebebaa3a1a79c /addons/web_editor/static/src/js/transcoder.js
parent740a6eadd379cc3fa26aefb9350f1c95b3e05ebd (diff)
parent7e44ddcda3f21c7e6401173539dc0fe93f9a7dd2 (diff)
[MERGE] forward port of branch saas-8 up to 7e44ddc
Diffstat (limited to 'addons/web_editor/static/src/js/transcoder.js')
-rw-r--r--addons/web_editor/static/src/js/transcoder.js60
1 files changed, 41 insertions, 19 deletions
diff --git a/addons/web_editor/static/src/js/transcoder.js b/addons/web_editor/static/src/js/transcoder.js
index 4fd512f883a..c26ba163d11 100644
--- a/addons/web_editor/static/src/js/transcoder.js
+++ b/addons/web_editor/static/src/js/transcoder.js
@@ -30,9 +30,7 @@ var getMatchedCSSRules = function (a) {
var selectorText = rules[r].selectorText;
if (selectorText &&
rules[r].cssText &&
- selectorText.indexOf(".") !== -1 &&
- selectorText.indexOf(".note-") === -1 &&
-
+ selectorText !== "*" &&
selectorText.indexOf(":hover") === -1 &&
selectorText.indexOf(":before") === -1 &&
selectorText.indexOf(":after") === -1 &&
@@ -61,6 +59,9 @@ var getMatchedCSSRules = function (a) {
var style_obj = {};
for (var k=0, len=style.length; k<len; k++) {
style_obj[style[k]] = style[style[k].replace(/-(.)/g, function (a, b) { return b.toUpperCase(); })];
+ if (new RegExp(style[k] + '\s*:[^:;]+!important' ).test(style.cssText)) {
+ style_obj[style[k]] += ' !important';
+ }
}
rulesCache[r].style = style = style_obj;
}
@@ -83,12 +84,37 @@ var getMatchedCSSRules = function (a) {
var style = {};
_.each(css, function (v,k) {
_.each(v[1], function (v,k) {
- if (!style[k] || style[k].indexOf('important') === -1 || v.indexOf('important') !== -1) {
+ if (v && k.indexOf('-webkit') === -1 && (!style[k] || style[k].indexOf('important') === -1 || v.indexOf('important') !== -1)) {
style[k] = v;
}
});
});
- return cache[a.tagName + "." +a.className] = style;
+
+ _.each(style, function (v,k) {
+ if (v.indexOf('important') !== -1) {
+ style[k] = v.slice(0, v.length-11);
+ }
+ });
+
+ if (style.display === 'block') {
+ delete style.display;
+ }
+ if (style['margin-top']) {
+ style.margin = (style['margin-top'] || 0) + ' ' + (style['margin-right'] || 0) + ' ' + (style['margin-bottom'] || 0) + ' ' + (style['margin-left'] || 0);
+ delete style['margin-top'];
+ delete style['margin-right'];
+ delete style['margin-bottom'];
+ delete style['margin-left'];
+ }
+ if (style['padding-top']) {
+ style.padding = (style['padding-top'] || 0) + ' ' + (style['padding-right'] || 0) + ' ' + (style['padding-bottom'] || 0) + ' ' + (style['padding-left'] || 0);
+ delete style['padding-top'];
+ delete style['padding-right'];
+ delete style['padding-bottom'];
+ delete style['padding-left'];
+ }
+
+ return a.className ? cache[a.tagName + "." +a.className] = style : style;
};
// convert font awsome into image
@@ -138,13 +164,12 @@ var class_to_style = function ($editable) {
if (!rulesCache.length) {
getMatchedCSSRules($editable[0]);
}
- var selector = _.map(rulesCache, function (a) { return a.selector;}).join(",");
- $editable.find(selector).each(function () {
+ $editable.find('*').each(function () {
var $target = $(this);
var css = getMatchedCSSRules(this);
var style = $target.attr("style") || "";
_.each(css, function (v,k) {
- if (style.indexOf(k) === -1) {
+ if (!(new RegExp('(^|;)\s*' + k).test(style))) {
style = k+":"+v+";"+style;
}
});
@@ -154,23 +179,15 @@ var class_to_style = function ($editable) {
// convert style into inline class from mail
var style_to_class = function ($editable) {
getMatchedCSSRules($editable[0]);
- var classes = [];
- $editable.find("[class]").each(function () {
- classes = classes.concat(this.className.split(/\s+/));
- });
- classes = _.compact(classes);
-
- var maybe_selector = _.filter(rulesCache, function (a) { return !!_.find(classes, function (b) { return a.selector.indexOf("."+b) !== -1; } ); });
- var selector = _.map(maybe_selector, function (a) { return a.selector;}).join(",");
var $c = $('<span/>').appendTo("body");
- $editable.find(selector).each(function () {
+ $editable.find('*').each(function () {
var $target = $(this);
var css = getMatchedCSSRules(this);
var style = "";
_.each(css, function (v,k) {
- if (style.indexOf(k) === -1) {
+ if (!(new RegExp('(^|;)\s*' + k).test(style))) {
style = k+":"+v+";"+style;
}
});
@@ -179,7 +196,12 @@ var style_to_class = function ($editable) {
_.each(css, function (v) {
style = style.replace(v, '');
});
- $target.attr("style", style.replace(/;+(\s;)*/g, ';').replace(/^;/g, ''));
+ style = style.replace(/;+(\s;)*/g, ';').replace(/^;/g, '');
+ if (style !== '') {
+ $target.attr("style", style);
+ } else {
+ $target.removeAttr("style");
+ }
});
$c.remove();
};