[KSS-checkins] r46026 - in kukit/kukit.js/trunk: doc kukit
reebalazs at codespeak.net
reebalazs at codespeak.net
Mon Aug 27 15:38:03 CEST 2007
Author: reebalazs
Date: Mon Aug 27 15:38:02 2007
New Revision: 46026
Modified:
kukit/kukit.js/trunk/doc/HISTORY.txt
kukit/kukit.js/trunk/kukit/commandprocessor.js
kukit/kukit.js/trunk/kukit/dom.js
kukit/kukit.js/trunk/kukit/plugin.js
Log:
Changed kukit payload to encode HTML content of CDATA (fixes base2)
Modified: kukit/kukit.js/trunk/doc/HISTORY.txt
==============================================================================
--- kukit/kukit.js/trunk/doc/HISTORY.txt (original)
+++ kukit/kukit.js/trunk/doc/HISTORY.txt Mon Aug 27 15:38:02 2007
@@ -6,6 +6,13 @@
- ...
+ - Changed kukit payload to encode HTML content of CDATA.
+ This was necessary because us a supposed bug in FF, that
+ prevented us to use base2 (xpath selection did not work
+ on inserted elements, due to namespace issues.)
+ Get rid of forceToDom, make sure all plugins accept html
+ parameters as strings.
+
kukit.js - 1.2 Released 2007-08-17
- Move ;;; markers to first columns.
Modified: kukit/kukit.js/trunk/kukit/commandprocessor.js
==============================================================================
--- kukit/kukit.js/trunk/kukit/commandprocessor.js (original)
+++ kukit/kukit.js/trunk/kukit/commandprocessor.js Mon Aug 27 15:38:02 2007
@@ -79,14 +79,21 @@
var childCount = childNode.childNodes.length;
var result;
if (childCount == 0) {
- // We take this a string (although this could be dom)
result = '';
- } else if (childCount == 1 && childNode.firstChild.nodeType == 3) {
+ } else {
+ // (we do not interpret html inline content any more)
// we have a single text node
+ // OR
+ // we have a single CDATA node (HTML parameter CDATA-style)
+ ;;; var isTextNode = childNode.firstChild.nodeType == 3;
+ ;;; var isCData = childNode.firstChild.nodeType == 4;
+ ;;; if (! (childCount == 1 && (isTextNode || isCData))) {
+ ;;; kukit.E = 'Bad payload, expected a text or a CDATA node';
+ ;;; throw kukit.E;
+ ;;; }
+ // we consider this as html payload
+ // The result is always a string from here.
result = childNode.firstChild.nodeValue;
- } else {
- // dom
- result = childNode;
}
params[data] = result;
} else {
Modified: kukit/kukit.js/trunk/kukit/dom.js
==============================================================================
--- kukit/kukit.js/trunk/kukit/dom.js (original)
+++ kukit/kukit.js/trunk/kukit/dom.js Mon Aug 27 15:38:02 2007
@@ -37,39 +37,16 @@
return toNode;
};
-kukit.dom.insertBefore = function(nodeFrom, parentNode, nodeTo) {
- var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ?
- nodeTo : nodeTo.ownerDocument;
- var nodes = nodeFrom.childNodes;
- var result = new Array();
- if(ownerDoc.importNode && (!kukit.HAVE_IE)) {
- for(var i=0;i < nodes.length;i++) {
- var imported = ownerDoc.importNode(nodes[i], true);
- result[i] = parentNode.insertBefore(imported, nodeTo);
- }
- } else {
- for(var i=0;i < nodes.length;i++) {
- var cloned = nodes[i].cloneNode(true);
- result[i] = parentNode.insertBefore(cloned, nodeTo);
- }
+kukit.dom.insertBefore = function(nodes, parentNode, toNode) {
+ for(var i=0; i<nodes.length; i++) {
+ parentNode.insertBefore(nodes[i], toNode);
}
- return result;
};
kukit.dom.appendChildren = function(nodes, toNode) {
- var ownerDoc = toNode.nodeType == Node.DOCUMENT_NODE ?
- toNode : toNode.ownerDocument;
- var result = new Array();
- if(ownerDoc.importNode && (!kukit.HAVE_IE)) {
- for(var i=0;i < nodes.length;i++) {
- result[i] = toNode.appendChild(ownerDoc.importNode(nodes[i], true));
- }
- }else{
- for(var i=0;i < nodes.length;i++) {
- result[i] = toNode.appendChild(nodes[i].cloneNode(true));
- }
+ for(var i=0; i<nodes.length; i++) {
+ toNode.appendChild(nodes[i]);
}
- return result;
};
kukit.dom.clearChildNodes = function(node) {
@@ -77,63 +54,24 @@
Sarissa.clearChildNodes(node);
};
-kukit.dom.forceToDom = function(param) {
- // This is a dirty helper to avoid rewriting existing stuff.
- // If param is not a dom, it converts to it.
- // This is to assure that all methods that accept a dom can accept a string
- // instead.
- if (typeof(param) == 'string') {
-//
-// now convert to dom
-//
-
-// param
-// <option>test_xmlentity</option><option>tic</option>
-// <option>tac toe</option>
-
-// ***BROKEN*** param
-// <option>test_htmlentity</option><option>tic</option>
-// <option>tac toe</option>
-
-// param
-// <option>test_utf8</option><option>tic</option><option>tacűtoe</option>
-
-// This is a good solution since it does not do magic to
-// our html - BUT html is parsed as xml
-// so we currently preprocess it on the server
-// and remove html named entities from it.
-//
- var rootText = '<html xmlns="http://www.w3.org/1999/xhtml"><div>';
- rootText += param + '</div></html>';
- var doc = (new DOMParser()).parseFromString(rootText, "text/xml");
- var root = doc.getElementsByTagName('div')[0];
-
- // XXX Sarissa bug; html docs would not have a
- // working serialize, and so importNodes would fail on them.
- // XXX Fixed in: Revision 1.23 - Sun Jul 10 18:53:53 2005 UTC
- // use at least 0.9.6.1
-
- param = root;
- }
- // Need to do this or else IE fails miserably.
- // importNode acts strangely.
- // on FF, you can execute it several times but the next condition
- // always evaluated to False.
- // on IE, it is a big problem to execute this for the second time
- // but it needs to be executed once, thus the condition
- if (param.ownerDocument != document) {
- param = document.importNode(param, true);
+
+kukit.dom.parseHTMLNodes = function(txt){
+ var node = document.createElement('div');
+ node.innerHTML = txt;
+ var resultNodes = [];
+ for (var i=0; i<node.childNodes.length; i++) {
+ resultNodes.push(node.childNodes.item(i));
}
- //alert(Sarissa.serialize(param));
- return param;
+ return resultNodes;
};
+
+
/*
* really the query should start from the document root, but
* limited to inNodes subtrees!
*/
-
kukit.dom.cssQuery = function(selector, inNodes) {
// to eliminate possible errors
if (typeof(inNodes) != 'undefined' && inNodes == null) {
Modified: kukit/kukit.js/trunk/kukit/plugin.js
==============================================================================
--- kukit/kukit.js/trunk/kukit/plugin.js (original)
+++ kukit/kukit.js/trunk/kukit/plugin.js Mon Aug 27 15:38:02 2007
@@ -591,15 +591,8 @@
oper.evalBool('withKssSetup');
var node = oper.node;
var insertedNodes;
- if (typeof(oper.parms.html) == 'string') {
- node.innerHTML = oper.parms.html;
- insertedNodes = node.childNodes;
- } else {
- oper.parms.html = kukit.dom.forceToDom(oper.parms.html);
- kukit.dom.clearChildNodes(node);
- insertedNodes = kukit.dom.appendChildren(
- oper.parms.html.childNodes, node);
- }
+ node.innerHTML = oper.parms.html;
+ insertedNodes = node.childNodes;
if (oper.parms.withKssSetup) {
kukit.engine.setupEvents(insertedNodes);
}
@@ -615,8 +608,7 @@
oper.evaluateParameters(['html'], {'withKssSetup':true});
oper.evalBool('withKssSetup');
var node = oper.node;
- oper.parms.html = kukit.dom.forceToDom(oper.parms.html);
- var elements = oper.parms.html.childNodes;
+ var elements = kukit.dom.parseHTMLNodes(oper.parms.html);
var length = elements.length;
if (length > 0) {
var parentNode = node.parentNode;
@@ -689,21 +681,18 @@
;;; oper.componentName = '[insertHTMLAfter] action';
oper.evaluateParameters(['html'], {'withKssSetup':true});
oper.evalBool('withKssSetup');
- oper.parms.html = kukit.dom.forceToDom(oper.parms.html);
- var content = oper.parms.html;
+ var content = kukit.dom.parseHTMLNodes(oper.parms.html);
var parentNode = oper.node.parentNode;
var toNode = kukit.dom.getNextSiblingTag(oper.node);
- var insertedNodes;
if (toNode == null) {
- insertedNodes = kukit.dom.appendChildren(content.childNodes,
- parentNode);
+ kukit.dom.appendChildren(content, parentNode);
} else {
- insertedNodes = kukit.dom.insertBefore(content, parentNode, toNode);
+ kukit.dom.insertBefore(content, parentNode, toNode);
}
-;;; kukit.logDebug(insertedNodes.length + ' nodes inserted.');
+;;; kukit.logDebug(content.length + ' nodes inserted.');
// update the events for the new nodes
if (oper.parms.withKssSetup) {
- kukit.engine.setupEvents(insertedNodes);
+ kukit.engine.setupEvents(content);
}
});
kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAfter',
@@ -713,15 +702,14 @@
;;; oper.componentName = '[insertHTMLBefore] action';
oper.evaluateParameters(['html'], {'withKssSetup':true});
oper.evalBool('withKssSetup');
- oper.parms.html = kukit.dom.forceToDom(oper.parms.html);
- var content = oper.parms.html;
+ var content = kukit.dom.parseHTMLNodes(oper.parms.html);
var toNode = oper.node;
var parentNode = toNode.parentNode;
- var insertedNodes = kukit.dom.insertBefore(content, parentNode, toNode);
-;;; kukit.logDebug(insertedNodes.length + ' nodes inserted.');
+ kukit.dom.insertBefore(content, parentNode, toNode);
+;;; kukit.logDebug(content.length + ' nodes inserted.');
// update the events for the new nodes
if (oper.parms.withKssSetup) {
- kukit.engine.setupEvents(insertedNodes);
+ kukit.engine.setupEvents(content);
}
});
kukit.commandsGlobalRegistry.registerFromAction('insertHTMLBefore',
@@ -731,15 +719,12 @@
;;; oper.componentName = '[insertHTMLAsLastChild] action';
oper.evaluateParameters(['html'], {'withKssSetup':true});
oper.evalBool('withKssSetup');
- oper.parms.html = kukit.dom.forceToDom(oper.parms.html);
- var insertedNodes = kukit.dom.appendChildren(oper.parms.html,
- oper.node);
- insertedNodes = kukit.dom.appendChildren(oper.parms.html.childNodes,
- oper.node);
-;;; kukit.logDebug(insertedNodes.length + ' nodes inserted.');
+ var content = kukit.dom.parseHTMLNodes(oper.parms.html);
+ kukit.dom.appendChildren(content, oper.node);
+;;; kukit.logDebug(content.length + ' nodes inserted.');
// update the events for the new nodes
if (oper.parms.withKssSetup) {
- kukit.engine.setupEvents(insertedNodes);
+ kukit.engine.setupEvents(content);
}
});
kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAsLastChild',
@@ -749,21 +734,18 @@
;;; oper.componentName = '[insertHTMLAsFirstChild] action';
oper.evaluateParameters(['html'], {'withKssSetup':true});
oper.evalBool('withKssSetup');
- oper.parms.html = kukit.dom.forceToDom(oper.parms.html);
- var content = oper.parms.html;
+ var content = kukit.dom.parseHTMLNodes(oper.parms.html);
var parentNode = oper.node;
var toNode = parentNode.firstChild;
- var insertedNodes;
if (toNode == null) {
- insertedNodes = kukit.dom.appendChildren(content.childNodes,
- parentNode);
+ kukit.dom.appendChildren(content, parentNode);
} else {
- insertedNodes = kukit.dom.insertBefore(content, parentNode, toNode);
+ kukit.dom.insertBefore(content, parentNode, toNode);
}
-;;; kukit.logDebug(insertedNodes.length + ' nodes inserted.');
+;;; kukit.logDebug(content.length + ' nodes inserted.');
// update the events for the new nodes
if (oper.parms.withKssSetup) {
- kukit.engine.setupEvents(insertedNodes);
+ kukit.engine.setupEvents(content);
}
});
kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAsFirstChild',
More information about the Kukit-checkins
mailing list