From d53fcfe6631b4faaaec0024375b6b71d1f40c6a4 Mon Sep 17 00:00:00 2001 From: Jan Verbeek Date: Wed, 23 Oct 2019 16:03:08 +0200 Subject: [PATCH] [IMP] Validate mermaid input before saving --- .../static/src/js/web_widget_mermaid.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/web_widget_mermaid/static/src/js/web_widget_mermaid.js b/web_widget_mermaid/static/src/js/web_widget_mermaid.js index f9b9d20b8..447851d51 100644 --- a/web_widget_mermaid/static/src/js/web_widget_mermaid.js +++ b/web_widget_mermaid/static/src/js/web_widget_mermaid.js @@ -82,13 +82,26 @@ odoo.define('web.web_widget_mermaid', function(require) { this.$el.html.bind(this.$el) ); } catch (e) { - this.$el.html($('
').text(e.message));
+                this.$el.html($('
').text(e.message || e.str));
             }
             // Mermaid uses a temporary div for rendering. It doesn't remove
             // it if an error occurs, and perhaps in other cases too, so get
             // rid of it if it's still around. The id is based on the chartId.
             $('#d' + this.chartId).remove();
-        }
+        },
+        _parseValue: function(value) {
+            if (this.errorMessage) {
+                this.errorMessage.remove();
+            }
+            try {
+                mermaid.parse(value);
+            } catch (e) {
+                this.errorMessage = $('
').text(e.message || e.str);
+                this.$el.after(this.errorMessage);
+                throw e;
+            }
+            return value;
+        },
     });
 
     field_registry.add('mermaid', MermaidField);