[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