diff js/taggingtext.js @ 54:f9e7119339b2 extractapp

bug fixed: when addTagTitle, removing self-closing tag which causes error in coloring tag
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Mon, 30 Mar 2015 15:34:47 +0200
parents 3e42a63de0ea
children 3395385476d1
line wrap: on
line diff
--- a/js/taggingtext.js	Thu Mar 26 17:25:46 2015 +0100
+++ b/js/taggingtext.js	Mon Mar 30 15:34:47 2015 +0200
@@ -122,6 +122,24 @@
     tagObject.append(newdiv);
 }
 
+function removeEmptyNodes( node ) {
+    if (node.hasChildNodes()) {
+        var children = node.childNodes;
+        for (var i = 0; i < children.length; i++) {
+            if (children[i].textContent == "" && children[i].innerHTML == "" && children[i].nodeName != "BR") {
+                //console.log("removing child: "+children[i].nodeName+", its parent: "+node.nodeName);
+                node.removeChild(children[i]);
+            } else {
+                //console.log("recursive to "+children[i].nodeName+"("+children[i].textContent+")")
+                removeEmptyNodes(children[i]);  // recursive
+            }
+
+        };
+    } else {
+        //console.log(node.nodeName+" ("+node.textContent+") has no childNodes.");
+    }
+
+}
 
 
 function removeTagTitle( range, container ) {
@@ -168,22 +186,28 @@
 }
 
 function addTagTitle( range, container ) {
+    // TODO: bug: here generate self-closing tag when the end of text with tag on it
+
     saveUndoText();
+
+    var el = document.getElementById("editable-area");
+    
     lastAddTag = $('#TitletagType').val();
     var tag = "<"+$('#TitletagType').val()+">〈"+$('#TitletagName').val()+"〉</"+$('#TitletagType').val()+">";
-    range.deleteContents();
+
+    range.deleteContents(); // may causes self-closing tag
+
     var stringtemp = container.innerHTML;
 
     var regexText=/<br>/g;
     var replaceText="<br>"+tag;
     stringtemp = stringtemp.replace(regexText, replaceText);
-    
+  
     var newdiv = document.createElement("aaaa");
     newdiv.innerHTML = tag+stringtemp;
+
     range.insertNode(newdiv);
-    
-    var el = document.getElementById("editable-area");
-    
+   
 
     var regexText=/<aaaa>/gi;
     var replaceText='';
@@ -194,6 +218,9 @@
     el.innerHTML = el.innerHTML.replace(regexText, replaceText);
     
     $('.tagItemDivClass').remove();
+
+    removeEmptyNodes(el);   // removing self-closing tags
+
 }
 
 function cleanUpTextArea() {
@@ -323,15 +350,16 @@
 
 //Tagging Items
 function getSelected() {
-    if(window.getSelection) {
+    if(window.getSelection) {   // all browsers, except IE before version 9
         return window.getSelection();
     } else if (document.getSelection) { 
         return document.getSelection(); 
-    } else {
+    } else {    // IE
         var selection = document.selection && document.selection.createRange();
         if(selection.text) {
             return selection.text;
         }
+
         return false;
     }
     return false;