Reviewers: shindig-dev,

Description:
This change will cause all the tags with a ":" in them to get handled as
potential custom tags, removing the requirement that custom tags be
registered prior to template compilation.

If at run time no custom tag is found for a particular tag, a warning is
shown and template rendering is able to proceed.

JIRA issue: https://issues.apache.org/jira/browse/SHINDIG-620

Please review this at http://codereview.appspot.com/5694

Affected files:
  features/opensocial-templates/base.js
  features/opensocial-templates/compiler.js
  features/opensocial-templates/namespaces.js


Index: features/opensocial-templates/base.js
===================================================================
--- features/opensocial-templates/base.js       (revision 697963)
+++ features/opensocial-templates/base.js       (working copy)
@@ -220,7 +220,8 @@
 os.doTag = function(node, ns, tag, data, context) {
   var tagFunction = os.getCustomTag(ns, tag);
   if (!tagFunction) {
-    throw "Custom tag <" + ns + ":" + tag + "> not defined.";
+    os.warn("Custom tag <" + ns + ":" + tag + "> not defined.");
+    return;
   }

   // Process tag's inner content before processing the tag.
Index: features/opensocial-templates/compiler.js
===================================================================
--- features/opensocial-templates/compiler.js   (revision 697963)
+++ features/opensocial-templates/compiler.js   (working copy)
@@ -429,20 +429,19 @@
       output = document.createElement("span");
       output.setAttribute(os.ATT_customtag, node.tagName);

-      var custom;
-      if (custom = os.checkCustom_(node.tagName)) {
-        os.appendJSTAttribute_(output, ATT_eval, "os.doTag(this, \""
-            + custom[0] + "\", \"" + custom[1] + "\", $this, $context)");
-        var context = node.getAttribute("context") || "$this||true";
-        output.setAttribute(ATT_select, context);
+      var custom = node.tagName.split(":");
+      os.appendJSTAttribute_(output, ATT_eval, "os.doTag(this, \""
+          + custom[0] + "\", \"" + custom[1] + "\", $this, $context)");
+      var context = node.getAttribute("context") || "$this||true";
+      output.setAttribute(ATT_select, context);

-        // For os:Render, create a parent node reference.
-        if (node.tagName == "os:render" || node.tagName == "os:Render" ||
- node.tagName == "os:renderAll" || node.tagName == "os:RenderAll") { - os.appendJSTAttribute_(output, ATT_values, os.VAR_parentnode + ":" +
-              os.VAR_node);
-        }
+      // For os:Render, create a parent node reference.
+      if (node.tagName == "os:render" || node.tagName == "os:Render" ||
+ node.tagName == "os:renderAll" || node.tagName == "os:RenderAll") { + os.appendJSTAttribute_(output, ATT_values, os.VAR_parentnode + ":" +
+            os.VAR_node);
       }
+
       os.copyAttributes_(node, output, node.tagName);
     } else {
       output = os.xmlToHtml_(node);
Index: features/opensocial-templates/namespaces.js
===================================================================
--- features/opensocial-templates/namespaces.js (revision 697963)
+++ features/opensocial-templates/namespaces.js (working copy)
@@ -119,25 +119,6 @@
 };

 /**
- * Checks if an XML tag corresponds to a known custom function.
- * If so, the namespace and tag name are returned in an array.
- * @param {string} nodeName Name of XML tag.
- * @return {Array.<string>|null}
- */
-os.checkCustom_ = function(nodeName) {
-  var index;
-  if ((index = nodeName.indexOf(':')) < 0) {
-    return null;
-  }
-  var ns = nodeName.substring(0, index);
-  var tag = nodeName.substring(index + 1);
-  if (os.getCustomTag(ns, tag)) {
-    return [ns, tag];
-  }
-  return null;
-};
-
-/**
  * Define 'os:renderAll' and 'os:Html' tags and the @onAttach attribute
  */
 os.defineBuiltinTags = function() {


Reply via email to