Author: jmorliaguet
Date: Sat Feb 11 13:05:38 2006
New Revision: 2343

Modified:
   cpsskins/branches/jmo-perspectives/ui/framework/ctal.js
Log:

- misc bug fixes. all tests now pass.



Modified: cpsskins/branches/jmo-perspectives/ui/framework/ctal.js
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/framework/ctal.js     (original)
+++ cpsskins/branches/jmo-perspectives/ui/framework/ctal.js     Sat Feb 11 
13:05:38 2006
@@ -10,6 +10,8 @@
  WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
  FOR A PARTICULAR PURPOSE.
 
+ 2006-02-11: bug fixes - Jean-Marc Orliaguet <[EMAIL PROTECTED]>
+
 */
 
 
@@ -50,6 +52,7 @@
       nodes[0] = value;
     }
   }
+  var node;
   for (;node=nodes.shift();) {
     if (marker) {
       parent.insertBefore(node, marker);
@@ -62,8 +65,10 @@
 ctal.node_replace = function(value, old) {
   var parent = old.parentNode;
   var nextsibling = old.nextSibling;
-  parent.removeChild(old);
-  ctal.node_insertbefore(parent, value, nextsibling);
+  if (parent) {;
+    parent.removeChild(old);
+    ctal.node_insertbefore(parent, value, nextsibling);
+  }
 }
 
 ctal.node_replacechildren = function(value, old) {
@@ -77,7 +82,7 @@
 
 ctal.tal_attributes = function(tmpl, value, data) {
   var attrs = value.split(";");
-  var attr = null;
+  var attr;
   for (;attr=attrs.shift();) {
     var nmx = ctal.get_nameexpr(attr);
     var aname = nmx[0]
@@ -89,27 +94,25 @@
 }
 
 ctal.content_or_replace  = function(tmpl, expr, data, func) {
-  var expr = expr.split(' ').join(' ');
+  var qual, value, newnode;
   var colpos = expr.indexOf(' ')
-  var qual;
   if (colpos > -1) {
     qual = expr.substring(0, colpos);
-    qual = qual.split(' ').join(' ');
   }
   if (colpos > -1 && qual.indexOf(':') == -1) {
-    var value = expr.substring(colpos + 1);
+    value = expr.substring(colpos + 1);
   } else {
     qual = null;
-    var value = expr;
+    value = expr;
   }
+  var evalue = ctal.eval_expr(data, value);
   if (qual == 'dom') {
-    var evalue = ctal.eval_expr(data, value);
-    var newnode = evalue;
+    newnode = evalue;
   } else if (qual == null) {
-    var evalue = ctal.eval_expr(data, value);
-    var newnode = tmpl.ownerDocument.createTextNode(evalue);
+    newnode = tmpl.ownerDocument.createTextNode(evalue);
   } else {
-    throw new ctal.TALESError('TALES Expression qualifier "' + qual + '" is 
unimplemented')
+    throw new ctal.TALESError('TALES Expression qualifier "' + qual + 
+                              '" is not implemented')
   }
   func(newnode, tmpl);
 }
@@ -148,7 +151,8 @@
     }
   }
   var parent = tmpl.parentNode;
-  marker = tmpl.nextSibling;
+  if (!parent) return;
+  var marker = tmpl.nextSibling;
   parent.removeChild(tmpl);
   for (var i=0; i<datas.length; i++) {
     data[nmx[0]] = datas[i];
@@ -162,42 +166,20 @@
 /* general processor */
 
 ctal.process_ctal = function(tmpl, data) {
-  var recurse = true;
   if (tmpl.nodeType == 1) {
-    for (var i=0; i<tmpl.attributes.length; i++) {
-      var attrnode = tmpl.attributes.item(i);
-      var splitname = attrnode.nodeName.split(':');
-      if (splitname.length == 2 && splitname[0] == 'ctal') {
-        // remove the attr right away
-        tmpl.removeAttributeNode(attrnode);
-        // process it
-        var attrname = splitname[1];
-        if (attrname == "repeat") {
-          ctal.tal_repeat(tmpl, attrnode.value, data);
-          recurse = false;
-        } else if (attrname == "condition") {
-          ctal.tal_condition(tmpl, attrnode.value, data);
-        } else if (attrname == "content") {
-          ctal.tal_content(tmpl, attrnode.value, data);
-          recurse = false;
-        } else if (attrname == "replace") {
-          ctal.tal_replace(tmpl, attrnode.value, data);
-          recurse = false;
-        } else if (attrname == "attributes") {
-          ctal.tal_attributes(tmpl, attrnode.value, data);
-        } else if (attrname == "omit-tag") {
-          ctal.tal_omit_tag(tmpl, attrnode.value, data);
-        } else {
-          throw new ctal.TALError('TAL attribute "' + attrname + '" is 
unimplemented')
-        }
+    var parsers = ctal.parsers;
+    for (ctal_attr in parsers) {
+      var attrnode = tmpl.getAttribute(ctal_attr);
+      if (attrnode) {
+        tmpl.removeAttribute(ctal_attr);
+        var parser = parsers[ctal_attr];
+        parser(tmpl, attrnode, data)
       }
     }
   }
-  if (recurse) {
-    //  recursion
-    for (var i=0; i<tmpl.childNodes.length; i++) {
-      ctal.process_ctal(tmpl.childNodes[i], data);
-    }
+  //  recursion
+  for (var i=0; i<tmpl.childNodes.length; i++) {
+    ctal.process_ctal(tmpl.childNodes[i], data);
   }
 }
 
@@ -221,7 +203,8 @@
   } else if (etype == 'javascript') {
     return eval(value)
   } else {
-    throw new ctal.TALESError('TALES Expression type "' + etype + '" is 
unimplemented')
+    throw new ctal.TALESError('TALES Expression type "' + etype + 
+                              '" is not implemented')
   }
 }
 
@@ -240,16 +223,24 @@
 }
 
 ctal.get_nameexpr = function(value) {
-  var splitnx = value.split(/ /);
-  var first = "";
-  // ltrim
-  while (first == "") {
-    first = splitnx.shift();
-  }
-  return [first, splitnx.join(" ")];
+  var splitnx = ctal.trim(value).split(/ /);
+  return [ctal.trim(splitnx[0]), ctal.trim(splitnx.slice(1).join(' '))];
+}
+
+ctal.trim = function(text) {
+  return text.replace(/^\s+|\s+$/g, "");
 }
 
 ctal.isTrue = function(cond) {
   return cond && (cond != "")
 }
 
+ctal.parsers = {
+  "ctal:condition": ctal.tal_condition,
+  "ctal:repeat": ctal.tal_repeat,
+  "ctal:content": ctal.tal_content,
+  "ctal:attributes": ctal.tal_attributes,
+  "ctal:omit-tag": ctal.tal_omit_tag,
+  "ctal:replace": ctal.tal_replace
+  };
+
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to