[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kupu-checkins
Subject:    [kupu-checkins] r39182 - in kupu/trunk/kupu: common tests
From:       duncan () codespeak ! net
Date:       2007-02-18 19:14:52
Message-ID: 20070218191452.82D001021B () code0 ! codespeak ! net
[Download RAW message or body]

Author: duncan
Date: Sun Feb 18 20:14:51 2007
New Revision: 39182

Modified:
   kupu/trunk/kupu/common/kupucontentfilters.js
   kupu/trunk/kupu/tests/test_xhtml.js
Log:
Strip trailing <br> from paragraphs. Enclose top-level no-style text inside <p>

Modified: kupu/trunk/kupu/common/kupucontentfilters.js
==============================================================================
--- kupu/trunk/kupu/common/kupucontentfilters.js	(original)
+++ kupu/trunk/kupu/common/kupucontentfilters.js	Sun Feb 18 20:14:51 2007
@@ -541,6 +541,26 @@
         };
     }(this, editor);
 
+    // Node filtering. May modify html node or xhtml parentNode.
+    // Return true to continue processing html node, false to skip it.
+    this.nodefilters = new function(editor) {
+        // Strip <br> at end of paragraph.
+        // Top level <br>: enclose preceding text (if any) in <p> and
+        // drop the <br>
+        this['br'] = function(node, parentNode) {
+            if (parentNode.tagName=='body') {
+                var p = parentNode.ownerDocument.createElement('p');
+                if (parentNode.lastChild && parentNode.lastChild.nodeType==3) {
+                    p.appendChild(parentNode.lastChild);
+                }
+                parentNode.appendChild(p);
+                return false;
+            }
+            if (!node.nextSibling) return false;
+            return true;
+        };
+    }
+
     // Exclude unwanted tags.
     this.excludeTags(['center']);
 
@@ -599,6 +619,12 @@
         var nodename = this._getTagName(htmlnode);
         var nostructure = !this.filterstructure;
 
+        var filter = this.nodefilters[nodename];
+        if (filter) {
+            if (!filter(htmlnode, xhtmlparent)) {
+                return;
+            }
+        }
         // TODO: This permits valid tags anywhere. it should use the state
         // table in xhtmlvalid to only permit tags where the XHTML DTD
         // says they are valid.

Modified: kupu/trunk/kupu/tests/test_xhtml.js
==============================================================================
--- kupu/trunk/kupu/tests/test_xhtml.js	(original)
+++ kupu/trunk/kupu/tests/test_xhtml.js	Sun Feb 18 20:14:51 2007
@@ -117,7 +117,29 @@
     this.testConvertToSarissa = function() {
         var data = '<p class="blue">This is a test</p>';
         this.conversionTest(data, data);
-    }
+    };
+    
+    this.testRemoveTrailingBr = function() {
+        var data = '<p class="blue">This is a test<br></p>';
+        var expected = '<p class="blue">This is a test</p>';
+        this.conversionTest(data, expected);
+    };
+    this.testRemoveTrailingBr2 = function() {
+        var data = '<p class="blue">This is a test<br>with more text<br></p>';
+        var expected = '<p class="blue">This is a test<br/>with more text</p>';
+        this.conversionTest(data, expected);
+    };
+    this.testFixTopLevelBr = function() {
+        var data = '<p>alpha</p>beta<br><p>gamma</p>';
+        var expected = '<p>alpha</p><p>beta</p><p>gamma</p>';
+        this.conversionTest(data, expected);
+    };
+    this.testNakedBr = function() {
+        var data = '<p>alpha</p><br><p>gamma</p>';
+        var expected = '<p>alpha</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>';

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic