diff --git a/addons/web/static/src/legacy/frontend/rainbowman/rainbow_man.js b/addons/web/static/src/legacy/frontend/rainbowman/rainbow_man.js index 9cd1346b40c..7816a58abad 100644 --- a/addons/web/static/src/legacy/frontend/rainbowman/rainbow_man.js +++ b/addons/web/static/src/legacy/frontend/rainbowman/rainbow_man.js @@ -35,6 +35,7 @@ var RainbowMan = Widget.extend({ fadeout: 'medium', img_url: '/web/static/img/smile.svg', message: _t('Well Done!'), + messageIsHtml: false, }); this.delay = rainbowDelay[this.options.fadeout]; }, @@ -61,7 +62,16 @@ var RainbowMan = Widget.extend({ }, 600); // destroy only after fadeout animation is completed }, this.delay); } - this.$('.o_reward_msg_content').append(this.options.message); + let message = this.options.message; + if (!this.options.messageIsHtml) { + if (message instanceof jQuery) { + message = message.text(); + } else if (message instanceof Element) { + message = message.textContent; + } + message = document.createTextNode(message); + } + this.$('.o_reward_msg_content').append(message); return this._super.apply(this, arguments); } }); diff --git a/addons/web/static/src/legacy/frontend/rainbowman/rainbowman_service.js b/addons/web/static/src/legacy/frontend/rainbowman/rainbowman_service.js index 86f61508d1b..458cc75167f 100644 --- a/addons/web/static/src/legacy/frontend/rainbowman/rainbowman_service.js +++ b/addons/web/static/src/legacy/frontend/rainbowman/rainbowman_service.js @@ -7,7 +7,5 @@ import { bus } from "web.core"; * isn't a parent of the current context. Like in the tour manager in website. */ bus.on("show-effect", this, (payload) => { - new RainbowMan({ message: payload.message, fadeout: payload.fadeout }).appendTo( - document.getElementsByTagName("body")[0] - ); + new RainbowMan(payload).appendTo(document.getElementsByTagName("body")[0]); }); diff --git a/addons/web/static/src/webclient/effects/effect_service.js b/addons/web/static/src/webclient/effects/effect_service.js index 11d2dd1f00f..cf344dd08af 100644 --- a/addons/web/static/src/webclient/effects/effect_service.js +++ b/addons/web/static/src/webclient/effects/effect_service.js @@ -54,6 +54,8 @@ export const effectService = { * Can be a simple a string * Can be a string representation of html (prefer component if you want interactions in the DOM) * Can be a function returning a string (like _t) + * @param {boolean} [params.messageIsHtml] + * The message can be a string representation of html but it needs to be marked as well * @param {"slow"|"medium"|"fast"|"no"} [params.fadeout="medium"] * Delay for rainbowman to disappear * 'fast' will make rainbowman dissapear quickly @@ -72,6 +74,7 @@ export const effectService = { fadeout: params.fadeout, id: ++effectId, message: convertRainBowMessage(params.message) || env._t("Well Done!"), + messageIsHtml: params.messageIsHtml || false, Component: params.Component, props: params.props, }); diff --git a/addons/web/static/src/webclient/effects/rainbow_man.xml b/addons/web/static/src/webclient/effects/rainbow_man.xml index dbc1abf6b82..cf38ce7df0a 100644 --- a/addons/web/static/src/webclient/effects/rainbow_man.xml +++ b/addons/web/static/src/webclient/effects/rainbow_man.xml @@ -35,7 +35,10 @@