From ef8761460bbd0dc77c646a01a665f088b94c20dc 2014-01-07 22:42:36
From: Brian E. Granger <ellisonbg@gmail.com>
Date: 2014-01-07 22:42:36
Subject: [PATCH] Carefully manage rendered state in merge cell.

---

diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js
index 944805c..e29ba6b 100644
--- a/IPython/html/static/notebook/js/notebook.js
+++ b/IPython/html/static/notebook/js/notebook.js
@@ -1073,6 +1073,7 @@ var IPython = (function (IPython) {
     Notebook.prototype.merge_cell_above = function () {
         var index = this.get_selected_index();
         var cell = this.get_cell(index);
+        var render = cell.rendered;
         if (!cell.is_mergeable()) {
             return;
         }
@@ -1086,9 +1087,13 @@ var IPython = (function (IPython) {
             if (cell instanceof IPython.CodeCell) {
                 cell.set_text(upper_text+'\n'+text);
             } else if (cell instanceof IPython.MarkdownCell) {
-                cell.unrender();
+                cell.unrender(); // Must unrender before we set_text.
                 cell.set_text(upper_text+'\n\n'+text);
-                cell.render();
+                if (render) {
+                    // The rendered state of the final cell should match
+                    // that of the original selected cell;
+                    cell.render();
+                }
             };
             this.delete_cell(index-1);
             this.select(this.find_cell_index(cell));
@@ -1103,6 +1108,7 @@ var IPython = (function (IPython) {
     Notebook.prototype.merge_cell_below = function () {
         var index = this.get_selected_index();
         var cell = this.get_cell(index);
+        var render = cell.rendered;
         if (!cell.is_mergeable()) {
             return;
         }
@@ -1116,9 +1122,13 @@ var IPython = (function (IPython) {
             if (cell instanceof IPython.CodeCell) {
                 cell.set_text(text+'\n'+lower_text);
             } else if (cell instanceof IPython.MarkdownCell) {
-                cell.unrender();
+                cell.unrender(); // Must unrender before we set_text.
                 cell.set_text(text+'\n\n'+lower_text);
-                cell.render();
+                if (render) {
+                    // The rendered state of the final cell should match
+                    // that of the original selected cell;
+                    cell.render();
+                }
             };
             this.delete_cell(index+1);
             this.select(this.find_cell_index(cell));