From cc1055a450c0a13caefdcfc1784acbd5c897e69d Mon Sep 17 00:00:00 2001
From: AlexandreSajus <asajus47@gmail.com>
Date: Wed, 8 Dec 2021 19:58:01 +0100
Subject: [PATCH] :beetle: adds html output support

---
 opencodeblocks/blocks/codeblock.py | 8 ++++++--
 opencodeblocks/graphics/kernel.py  | 4 ++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/opencodeblocks/blocks/codeblock.py b/opencodeblocks/blocks/codeblock.py
index ae8c9fc1..27395cea 100644
--- a/opencodeblocks/blocks/codeblock.py
+++ b/opencodeblocks/blocks/codeblock.py
@@ -82,14 +82,16 @@ def init_run_button(self):
         """Initialize the run button"""
         run_button = QPushButton(">", self.root)
         run_button.move(int(self.edge_size), int(self.edge_size / 2))
-        run_button.setFixedSize(int(3 * self.edge_size), int(3 * self.edge_size))
+        run_button.setFixedSize(int(3 * self.edge_size),
+                                int(3 * self.edge_size))
         run_button.clicked.connect(self.run_left)
         return run_button
 
     def init_run_all_button(self):
         """Initialize the run all button"""
         run_all_button = QPushButton(">>", self.root)
-        run_all_button.setFixedSize(int(3 * self.edge_size), int(3 * self.edge_size))
+        run_all_button.setFixedSize(
+            int(3 * self.edge_size), int(3 * self.edge_size))
         run_all_button.clicked.connect(self.run_right)
         run_all_button.raise_()
 
@@ -228,6 +230,8 @@ def stdout(self, value: str):
         if hasattr(self, "output_panel"):
             if value.startswith("<img>"):
                 display_text = self.b64_to_html(value[5:])
+            elif value.startswith("<div>"):
+                display_text = value
             else:
                 display_text = self.str_to_html(value)
             self.output_panel.setText(display_text)
diff --git a/opencodeblocks/graphics/kernel.py b/opencodeblocks/graphics/kernel.py
index 7563d9fa..75202c49 100644
--- a/opencodeblocks/graphics/kernel.py
+++ b/opencodeblocks/graphics/kernel.py
@@ -34,6 +34,10 @@ def message_to_output(self, message: dict) -> Tuple[str, str]:
                 message_type = 'image'
                 # output an image (from plt.plot or plt.imshow)
                 out = message['data']['image/png']
+            elif 'text/html' in message['data']:
+                message_type = 'text'
+                # output some html text (like a pandas dataframe)
+                out = message['data']['text/html']
             else:
                 message_type = 'text'
                 # output data as str (for example if code="a=10\na")