Browse Source

add image caption for those images which are adjacent with <br>

Le Tan 8 years ago
parent
commit
78d57415c4
1 changed files with 64 additions and 2 deletions
  1. 64 2
      src/resources/markdown_template.js

+ 64 - 2
src/resources/markdown_template.js

@@ -212,7 +212,62 @@ var renderMermaid = function(className) {
 var isImageBlock = function(img) {
     var pn = img.parentNode;
     return (pn.children.length == 1) && (pn.innerText == '');
-}
+};
+
+var isImageWithBr = function(img) {
+    var sibling = img.nextSibling;
+    while (sibling) {
+        if (sibling.nodeType == 8) {
+            // Comment node.
+            // Just continue.
+            sibling = sibling.nextSibling;
+            continue;
+        } else if (sibling.nodeType == 1) {
+            if (sibling.tagName == 'BR') {
+                break;
+            }
+        }
+
+        return false;
+    }
+
+    sibling = img.previousSibling;
+    while (sibling) {
+        if (sibling.nodeType == 8) {
+            // Comment node.
+            sibling = sibling.previousSibling;
+            continue;
+        } else if (sibling.nodeType == 1) {
+            // Element node.
+            if (sibling.tagName == 'BR') {
+                break;
+            }
+        } else if (sibling.nodeType == 3) {
+            // Text node.
+            if (sibling.nodeValue == '\n') {
+                var tmp = sibling.previousSibling;
+                if (tmp && tmp.tagName == 'BR') {
+                    break;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    return true;
+};
+
+var getImageType = function(img) {
+    var type = -1;
+    if (isImageBlock(img)) {
+        type = 0;
+    } else if (isImageWithBr(img)) {
+        type = 1;
+    }
+
+    return type;
+};
 
 // Center the image block and insert the alt text as caption.
 var insertImageCaption = function() {
@@ -224,8 +279,15 @@ var insertImageCaption = function() {
     for (var i = 0; i < imgs.length; ++i) {
         var img = imgs[i];
 
-        if (!isImageBlock(img)) {
+        var type = getImageType(img);
+
+        if (type == -1) {
             continue;
+        } else if (type == 1) {
+            // Insert a div as the parent of the img.
+            var imgPack = document.createElement('div');
+            img.insertAdjacentElement('afterend', imgPack);
+            imgPack.appendChild(img);
         }
 
         // Make the parent img-package.