From f620c69acc12074128c3f2f50e4a26f9d3c2df1c Mon Sep 17 00:00:00 2001
From: ROSPARS Benoit <benoit.rospars@inria.fr>
Date: Wed, 27 Mar 2019 13:03:30 +0100
Subject: [PATCH] Fix jupyter rendering bug that ended in an infinite loop

---
 .../notebook/cells/output/index.vue           | 29 ++++++++++---------
 .../59079-fix-jupyter-render-loop.yml         |  5 ++++
 2 files changed, 20 insertions(+), 14 deletions(-)
 create mode 100644 changelogs/unreleased/59079-fix-jupyter-render-loop.yml

diff --git a/app/assets/javascripts/notebook/cells/output/index.vue b/app/assets/javascripts/notebook/cells/output/index.vue
index c5ae7e7ee10b0..b59ddd0d57abd 100644
--- a/app/assets/javascripts/notebook/cells/output/index.vue
+++ b/app/assets/javascripts/notebook/cells/output/index.vue
@@ -20,12 +20,20 @@ export default {
       required: true,
     },
   },
-  data() {
-    return {
-      outputType: '',
-    };
-  },
   methods: {
+    outputType(output) {
+      if (output.text) {
+        return 'text/plain';
+      } else if (output.data['image/png']) {
+        return 'image/png';
+      } else if (output.data['text/html']) {
+        return 'text/html';
+      } else if (output.data['image/svg+xml']) {
+        return 'image/svg+xml';
+      }
+
+      return 'text/plain';
+    },
     dataForType(output, type) {
       let data = output.data[type];
 
@@ -39,20 +47,13 @@ export default {
       if (output.text) {
         return CodeOutput;
       } else if (output.data['image/png']) {
-        this.outputType = 'image/png';
-
         return ImageOutput;
       } else if (output.data['text/html']) {
-        this.outputType = 'text/html';
-
         return HtmlOutput;
       } else if (output.data['image/svg+xml']) {
-        this.outputType = 'image/svg+xml';
-
         return HtmlOutput;
       }
 
-      this.outputType = 'text/plain';
       return CodeOutput;
     },
     rawCode(output) {
@@ -60,7 +61,7 @@ export default {
         return output.text.join('');
       }
 
-      return this.dataForType(output, this.outputType);
+      return this.dataForType(output, this.outputType(output));
     },
   },
 };
@@ -73,7 +74,7 @@ export default {
       v-for="(output, index) in outputs"
       :key="index"
       type="output"
-      :output-type="outputType"
+      :output-type="outputType(output)"
       :count="count"
       :index="index"
       :raw-code="rawCode(output)"
diff --git a/changelogs/unreleased/59079-fix-jupyter-render-loop.yml b/changelogs/unreleased/59079-fix-jupyter-render-loop.yml
new file mode 100644
index 0000000000000..29264b33dfa1c
--- /dev/null
+++ b/changelogs/unreleased/59079-fix-jupyter-render-loop.yml
@@ -0,0 +1,5 @@
+---
+title: Fix jupyter rendering bug that ended in an infinite loop
+merge_request: 26656
+author: ROSPARS Benoit
+type: fixed
-- 
GitLab