diff --git a/src/components/views/messages/TextualBody.js b/src/components/views/messages/TextualBody.js index 84a21c0da3..a6b32baea2 100644 --- a/src/components/views/messages/TextualBody.js +++ b/src/components/views/messages/TextualBody.js @@ -94,8 +94,11 @@ export default class TextualBody extends React.Component { const blocks = ReactDOM.findDOMNode(this).getElementsByTagName("pre"); if (blocks.length > 0) { for (let i = 0; i < blocks.length; i++) { - this._handleCodeBlockExpansion(blocks[i]); - this._addCodeCopyButton(blocks[i]); + // Wrap a div around
so that the copy button can be correctly positioned
+ // when the overflows and is scrolled horizontally.
+ const div = this._wrapInDiv(blocks[i]);
+ this._handleCodeBlockExpansion(div);
+ this._addCodeCopyButton(div);
}
// Do this asynchronously: parsing code takes time and we don't
// need to block the DOM update on it.
@@ -125,17 +128,19 @@ export default class TextualBody extends React.Component {
button.onmouseleave = close;
};
- // Wrap a div around so that the copy button can be correctly positioned
- // when the overflows and is scrolled horizontally.
+ codeBlock.appendChild(button);
+ }
+
+ _wrapInDiv(codeBlock) {
const div = document.createElement("div");
div.className = "mx_EventTile_pre_container";
// Insert containing div in place of block
codeBlock.parentNode.replaceChild(div, codeBlock);
-
// Append block and copy button to container
div.appendChild(codeBlock);
- div.appendChild(button);
+
+ return div;
}
_handleCodeBlockExpansion(codeBlock) {