diff --git a/modules/ve/ce/ve.ce.ContentBranchNode.js b/modules/ve/ce/ve.ce.ContentBranchNode.js
index 80ba809c92..1b3666b317 100644
--- a/modules/ve/ce/ve.ce.ContentBranchNode.js
+++ b/modules/ve/ce/ve.ce.ContentBranchNode.js
@@ -78,9 +78,18 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
annotationStack = new ve.dm.AnnotationSet( store ),
annotatedHtml = [],
$wrapper = $( '
' ),
- $current = $wrapper;
+ $current = $wrapper,
+ buffer = '';
+
+ function flushBuffer() {
+ if ( buffer !== '' ) {
+ $current.append( buffer );
+ buffer = '';
+ }
+ }
function openAnnotation( annotation ) {
+ flushBuffer();
// Create a new DOM node and descend into it
$ann = ve.ce.annotationFactory.create( annotation.getType(), annotation ).$;
$current.append( $ann );
@@ -88,6 +97,7 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
}
function closeAnnotation() {
+ flushBuffer();
// Traverse up
$current = $current.parent();
}
@@ -111,10 +121,15 @@ ve.ce.ContentBranchNode.prototype.getRenderedContents = function () {
openAnnotation, closeAnnotation
);
- // Output the actual HTML
- $current.append( itemHtml );
+ // Handle the actual HTML
+ if ( typeof itemHtml === 'string' ) {
+ buffer += itemHtml;
+ } else {
+ flushBuffer();
+ $current.append( itemHtml );
+ }
}
-
+ flushBuffer();
return $wrapper.contents();
};