From 972f688dbefea9f1e6d93bc87b227ae2c3901610 Mon Sep 17 00:00:00 2001 From: BernatPForgeFlow Date: Mon, 13 Nov 2023 10:09:12 +0100 Subject: [PATCH] [IMP] web_widget_mpld3_chart: Move js to owl --- web_widget_mpld3_chart/__manifest__.py | 3 +- .../models/abstract_mpld3_parser.py | 2 +- .../src/js/web_widget_mpld3_chart.esm.js | 49 ++++++++++--------- .../static/src/xml/web_widget_mpld3_chart.xml | 7 +++ 4 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 web_widget_mpld3_chart/static/src/xml/web_widget_mpld3_chart.xml diff --git a/web_widget_mpld3_chart/__manifest__.py b/web_widget_mpld3_chart/__manifest__.py index a80dbdf4e..76f0af0ba 100644 --- a/web_widget_mpld3_chart/__manifest__.py +++ b/web_widget_mpld3_chart/__manifest__.py @@ -17,7 +17,8 @@ "license": "LGPL-3", "assets": { "web.assets_backend": [ - "web_widget_mpld3_chart/static/src/js/web_widget_mpld3_chart.esm.js", + "web_widget_mpld3_chart/static/src/js/*.js", + "web_widget_mpld3_chart/static/src/xml/*.xml", ], }, } diff --git a/web_widget_mpld3_chart/models/abstract_mpld3_parser.py b/web_widget_mpld3_chart/models/abstract_mpld3_parser.py index 2235bc762..a14b4cd62 100644 --- a/web_widget_mpld3_chart/models/abstract_mpld3_parser.py +++ b/web_widget_mpld3_chart/models/abstract_mpld3_parser.py @@ -27,7 +27,7 @@ class AbstractMpld3Parser(models.AbstractModel): soup = BeautifulSoup(html_string, "lxml") json_data = { "style": soup.style.decode(), - "div": soup.div.get("id"), + "div": str(soup.div), "script": soup.script.decode_contents(), } return json.dumps(json_data) diff --git a/web_widget_mpld3_chart/static/src/js/web_widget_mpld3_chart.esm.js b/web_widget_mpld3_chart/static/src/js/web_widget_mpld3_chart.esm.js index a0f482b3e..f87e042ea 100644 --- a/web_widget_mpld3_chart/static/src/js/web_widget_mpld3_chart.esm.js +++ b/web_widget_mpld3_chart/static/src/js/web_widget_mpld3_chart.esm.js @@ -1,31 +1,32 @@ /** @odoo-module **/ -import basicFields from "web.basic_fields"; -import fieldRegistry from "web.field_registry"; - -const Mpld3ChartWidget = basicFields.FieldChar.extend({ - jsLibs: [ - "/web_widget_mpld3_chart/static/src/lib/d3/d3.v5.js", - "/web_widget_mpld3_chart/static/src/lib/mpld3/mpld3.v0.5.9.js", - ], - _renderReadonly: function () { +import {CharField} from "@web/views/fields/char/char_field"; +import {loadBundle} from "@web/core/assets"; +import {registry} from "@web/core/registry"; +const {onWillStart, markup} = owl; +class Mpld3ChartWidget extends CharField { + setup() { + super.setup(); + onWillStart(() => + loadBundle({ + jsLibs: [ + "/web_widget_mpld3_chart/static/src/lib/d3/d3.v5.js", + "/web_widget_mpld3_chart/static/src/lib/mpld3/mpld3.v0.5.9.js", + ], + }) + ); + } + get json_value() { try { - const val = JSON.parse(this.value); - const new_div = document.createElement("div"); - new_div.setAttribute("id", val.div); - this.$el.html(new_div); - this.$el.ready(function () { - const script = document.createElement("script"); - script.setAttribute("type", "text/javascript"); - if ("textContent" in script) script.textContent = val.script; - else script.text = val.script; - $("head").append(script); - }); + var value = JSON.parse(this.props.value); + value.div = markup(value.div.trim()); + return value; } catch (error) { - return this._super(...arguments); + return {}; } - }, -}); + } +} +Mpld3ChartWidget.template = "web_widget_mpld3_chart.Mpld3ChartField"; +registry.category("fields").add("mpld3_chart", Mpld3ChartWidget); -fieldRegistry.add("mpld3_chart", Mpld3ChartWidget); export default Mpld3ChartWidget; diff --git a/web_widget_mpld3_chart/static/src/xml/web_widget_mpld3_chart.xml b/web_widget_mpld3_chart/static/src/xml/web_widget_mpld3_chart.xml new file mode 100644 index 000000000..32ae24352 --- /dev/null +++ b/web_widget_mpld3_chart/static/src/xml/web_widget_mpld3_chart.xml @@ -0,0 +1,7 @@ + + + + +