[kupu-checkins] r43492 - in kupu/trunk/kupu: . common plone/kupu_plone_layer tests

duncan at codespeak.net duncan at codespeak.net
Fri May 18 17:12:15 CEST 2007


Author: duncan
Date: Fri May 18 17:12:15 2007
New Revision: 43492

Modified:
   kupu/trunk/kupu/common/kupucontentfilters.js
   kupu/trunk/kupu/common/kupueditor.js
   kupu/trunk/kupu/jslint.opts
   kupu/trunk/kupu/plone/kupu_plone_layer/kupuploneinit.js
   kupu/trunk/kupu/tests/test_xhtml.js
Log:
Cleanup code could miss <br> and <p> tags: removingChild has a side effect of removing a node from a getElementsByTagName result set, so we need to iterate over the <p> and <br> tags in reverse order.
Fix for Plone issue #6056 Extra line breaks added in pre tags (not strictly a kupu bug but we now remove <br> tags from any pre content on saving and therefore avoid triggering the htmlTidy bug).

Modified: kupu/trunk/kupu/common/kupucontentfilters.js
==============================================================================
--- kupu/trunk/kupu/common/kupucontentfilters.js	(original)
+++ kupu/trunk/kupu/common/kupucontentfilters.js	Fri May 18 17:12:15 2007
@@ -598,7 +598,7 @@
                 target.setAttribute(valid[i], val);
             }
         };
-    }
+    };
 
     this._convertToSarissaNode = function(ownerdoc, htmlnode) {
         var root = this._convertNodes(ownerdoc, htmlnode, null, new this.Set(['html']));
@@ -661,7 +661,7 @@
 
     this._cleanupParas = function(ownerdoc, root) {
         var paras = root.getElementsByTagName('p');
-        for (var i = 0; i < paras.length; i++) {
+        for (var i = paras.length-1; i >= 0; i--) {
             this._cleanupPara(ownerdoc, paras[i]);
         }
     };
@@ -670,7 +670,8 @@
      */
     this._cleanupBr = function(ownerdoc, root) {
         var breaks = root.getElementsByTagName('br');
-        for (var i = 0; i < breaks.length; i++) {
+        // Iterate backwards: removeChild removes node from breaks.
+        for (var i = breaks.length-1; i >= 0; i--) {
             var node = breaks[i];
             var parentNode = node.parentNode;
             if (parentNode.tagName=='body') {
@@ -681,7 +682,7 @@
                 }
                 parentNode.insertBefore(p,node);
                 parentNode.removeChild(node);
-            } else if (!node.nextSibling && (/p|div/i.test(parentNode.nodeName) && !(node.previousSibling&&node.previousSibling.nodeName=='br'))) {
+            } else if (!node.nextSibling && (/(p|div)\b/i.test(parentNode.nodeName) && !(node.previousSibling&&node.previousSibling.nodeName=='br'))) {
                 parentNode.removeChild(node);
             }
         }
@@ -748,5 +749,3 @@
         return xhtmlnode;
     };
 }
-
-

Modified: kupu/trunk/kupu/common/kupueditor.js
==============================================================================
--- kupu/trunk/kupu/common/kupueditor.js	(original)
+++ kupu/trunk/kupu/common/kupueditor.js	Fri May 18 17:12:15 2007
@@ -654,7 +654,7 @@
                 return '<'+close+tag+'>';
             });
         };
-        text = text.replace(/<p>(<hr.*?>)<\/p>/,'$1');
+        text = text.replace(/<p>(<hr.*?>)<\/p>/g,'$1');
         bodies[bodies.length-1].innerHTML = text;
     };
 
@@ -769,6 +769,9 @@
             /\s*(<(p|div|h.|ul|ol|dl|menu|dir|pre|blockquote|address|center|table|thead|tbody|tfoot|tr|th|td))\b/ig, '\n$1');
         data = data.replace(
             /\s*(<\/(p|div|h.|ul|ol|dl|menu|dir|pre|blockquote|address|center|table|thead|tbody|tfoot|tr|th|td)>)\s*/ig, '$1\n');
+        data = data.replace(/\<pre\>((?:.|\n)*?)\<\/pre\>/gm, function(s) {
+            return s.replace(/<br\b[^>]*>/gi,'\n');
+            });
         return data.strip();
     };
     this.escapeEntities = function(xml) {

Modified: kupu/trunk/kupu/jslint.opts
==============================================================================
--- kupu/trunk/kupu/jslint.opts	(original)
+++ kupu/trunk/kupu/jslint.opts	Fri May 18 17:12:15 2007
@@ -4,7 +4,7 @@
 --extern ColorchooserTool,ContextFixer,ContextMenu,ContextMenuElement
 --extern DefinitionListTool,DrawerTool,extern,getBaseTagClass,getFromSelector
 --extern IESelection,ImageLibraryDrawer,ImageTool,ImageToolBox,initKupu,kupu
---extern KupuButton,kupuButtonDisable,kupuButtonEnable,KupuDocument,KupuEditor
+--extern KupuButton,kupuButtonDisable,kupuButtonEnable,KupuDocument,KupuEditor,kupuFixImage
 --extern KupuInspector,KupuRemoveElementButton,KupuSpellChecker,KupuStateButton
 --extern KupuUI,KupuZoomTool,LinkDrawer,LinkLibraryDrawer,LinkTool,LinkToolBox
 --extern ListTool,loadDictFromXML,MozillaSelection,newDocumentElement

Modified: kupu/trunk/kupu/plone/kupu_plone_layer/kupuploneinit.js
==============================================================================
--- kupu/trunk/kupu/plone/kupu_plone_layer/kupuploneinit.js	(original)
+++ kupu/trunk/kupu/plone/kupu_plone_layer/kupuploneinit.js	Fri May 18 17:12:15 2007
@@ -285,7 +285,7 @@
     function tabHandler(event) {
         event = event||window.event;
         if (event.keyCode!=9) { return; }
-        if (!/kupu-fulleditor-zoomed/.test(document.body.className)) {
+        if (!(/kupu-fulleditor-zoomed/.test(document.body.className))) {
             var form = textarea.form;
             var els = form.elements;
             var target, targindex;

Modified: kupu/trunk/kupu/tests/test_xhtml.js
==============================================================================
--- kupu/trunk/kupu/tests/test_xhtml.js	(original)
+++ kupu/trunk/kupu/tests/test_xhtml.js	Fri May 18 17:12:15 2007
@@ -147,7 +147,11 @@
         var expected = '<p>alpha</p><p/><p>gamma</p>';
         this.conversionTest(data, expected);
     };
-    
+    this.testMultipleNakedBr = function() {
+        var data = '<p>alpha</p><br><br><br><br><p>gamma</p>';
+        var expected = '<p>alpha</p><p/><p/><p/><p/><p>gamma</p>';
+        this.conversionTest(data, expected);
+    };
     this.testXmlAttrs = function() {
         var data = '<pre xml:space="preserve" xml:lang="fr">This is a test</pre>';
         var expected1 = '<pre xml:lang="fr" xml:space="preserve">This is a test</pre>';


More information about the kupu-checkins mailing list