[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