Mercurial > hg > extraction-interface
comparison 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 |
comparison
equal
deleted
inserted
replaced
53:f9594c240826 | 54:f9e7119339b2 |
---|---|
120 newbutton.appendTo(newdiv); | 120 newbutton.appendTo(newdiv); |
121 | 121 |
122 tagObject.append(newdiv); | 122 tagObject.append(newdiv); |
123 } | 123 } |
124 | 124 |
125 function removeEmptyNodes( node ) { | |
126 if (node.hasChildNodes()) { | |
127 var children = node.childNodes; | |
128 for (var i = 0; i < children.length; i++) { | |
129 if (children[i].textContent == "" && children[i].innerHTML == "" && children[i].nodeName != "BR") { | |
130 //console.log("removing child: "+children[i].nodeName+", its parent: "+node.nodeName); | |
131 node.removeChild(children[i]); | |
132 } else { | |
133 //console.log("recursive to "+children[i].nodeName+"("+children[i].textContent+")") | |
134 removeEmptyNodes(children[i]); // recursive | |
135 } | |
136 | |
137 }; | |
138 } else { | |
139 //console.log(node.nodeName+" ("+node.textContent+") has no childNodes."); | |
140 } | |
141 | |
142 } | |
125 | 143 |
126 | 144 |
127 function removeTagTitle( range, container ) { | 145 function removeTagTitle( range, container ) { |
128 saveUndoText(); | 146 saveUndoText(); |
129 range.deleteContents(); | 147 range.deleteContents(); |
166 | 184 |
167 $('.tagItemDivClass').remove(); | 185 $('.tagItemDivClass').remove(); |
168 } | 186 } |
169 | 187 |
170 function addTagTitle( range, container ) { | 188 function addTagTitle( range, container ) { |
171 saveUndoText(); | 189 // TODO: bug: here generate self-closing tag when the end of text with tag on it |
190 | |
191 saveUndoText(); | |
192 | |
193 var el = document.getElementById("editable-area"); | |
194 | |
172 lastAddTag = $('#TitletagType').val(); | 195 lastAddTag = $('#TitletagType').val(); |
173 var tag = "<"+$('#TitletagType').val()+">〈"+$('#TitletagName').val()+"〉</"+$('#TitletagType').val()+">"; | 196 var tag = "<"+$('#TitletagType').val()+">〈"+$('#TitletagName').val()+"〉</"+$('#TitletagType').val()+">"; |
174 range.deleteContents(); | 197 |
198 range.deleteContents(); // may causes self-closing tag | |
199 | |
175 var stringtemp = container.innerHTML; | 200 var stringtemp = container.innerHTML; |
176 | 201 |
177 var regexText=/<br>/g; | 202 var regexText=/<br>/g; |
178 var replaceText="<br>"+tag; | 203 var replaceText="<br>"+tag; |
179 stringtemp = stringtemp.replace(regexText, replaceText); | 204 stringtemp = stringtemp.replace(regexText, replaceText); |
180 | 205 |
181 var newdiv = document.createElement("aaaa"); | 206 var newdiv = document.createElement("aaaa"); |
182 newdiv.innerHTML = tag+stringtemp; | 207 newdiv.innerHTML = tag+stringtemp; |
208 | |
183 range.insertNode(newdiv); | 209 range.insertNode(newdiv); |
184 | 210 |
185 var el = document.getElementById("editable-area"); | |
186 | |
187 | 211 |
188 var regexText=/<aaaa>/gi; | 212 var regexText=/<aaaa>/gi; |
189 var replaceText=''; | 213 var replaceText=''; |
190 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | 214 el.innerHTML = el.innerHTML.replace(regexText, replaceText); |
191 | 215 |
192 var regexText=/<\/aaaa>/gi; | 216 var regexText=/<\/aaaa>/gi; |
193 var replaceText=''; | 217 var replaceText=''; |
194 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | 218 el.innerHTML = el.innerHTML.replace(regexText, replaceText); |
195 | 219 |
196 $('.tagItemDivClass').remove(); | 220 $('.tagItemDivClass').remove(); |
221 | |
222 removeEmptyNodes(el); // removing self-closing tags | |
223 | |
197 } | 224 } |
198 | 225 |
199 function cleanUpTextArea() { | 226 function cleanUpTextArea() { |
200 var el = document.getElementById("editable-area"); | 227 var el = document.getElementById("editable-area"); |
201 | 228 |
321 } | 348 } |
322 | 349 |
323 | 350 |
324 //Tagging Items | 351 //Tagging Items |
325 function getSelected() { | 352 function getSelected() { |
326 if(window.getSelection) { | 353 if(window.getSelection) { // all browsers, except IE before version 9 |
327 return window.getSelection(); | 354 return window.getSelection(); |
328 } else if (document.getSelection) { | 355 } else if (document.getSelection) { |
329 return document.getSelection(); | 356 return document.getSelection(); |
330 } else { | 357 } else { // IE |
331 var selection = document.selection && document.selection.createRange(); | 358 var selection = document.selection && document.selection.createRange(); |
332 if(selection.text) { | 359 if(selection.text) { |
333 return selection.text; | 360 return selection.text; |
334 } | 361 } |
362 | |
335 return false; | 363 return false; |
336 } | 364 } |
337 return false; | 365 return false; |
338 } | 366 } |
339 | 367 |