[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&#32;toe</option>
-
-// ***BROKEN*** param
-// <option>test_htmlentity</option><option>tic</option>
-// <option>tac&nbsp;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