Author: bruno
Date: Thu Aug 19 00:28:48 2004
New Revision: 36594

Modified:
   cocoon/trunk/src/blocks/forms/samples/resources/forms-lib.js
   cocoon/trunk/src/blocks/forms/samples/resources/forms-page-styling.xsl
Log:
tabbed layout: added the possibility to have some javascript executed
when a tabbed page gets shown.


Modified: cocoon/trunk/src/blocks/forms/samples/resources/forms-lib.js
==============================================================================
--- cocoon/trunk/src/blocks/forms/samples/resources/forms-lib.js        
(original)
+++ cocoon/trunk/src/blocks/forms/samples/resources/forms-lib.js        Thu Aug 
19 00:28:48 2004
@@ -17,7 +17,7 @@
  * Runtime JavaScript library for Cocoon forms.
  *
  * @author <a href="http://www.apache.org/~sylvain/";>Sylvain Wallez</a>
- * @version CVS $Id: forms-lib.js,v 1.4 2004/05/11 22:50:25 joerg Exp $
+ * @version CVS $Id$
  */
 
 // Handlers that are to be called in the document's "onload" event
@@ -167,6 +167,10 @@
  * @param state (string, optional) name of the input storing the tabgroup state
  */
 function forms_showTab(tabgroup, idx, length, state) {
+    // Change state value
+    if (state.length > 0) {
+        document.forms[0][state].value = idx;
+    }
     for (var i = 0; i < length; i++) {
         // Change tab status (selected/unselected)
         var tab = document.getElementById(tabgroup + "_tab_" + i);
@@ -177,10 +181,13 @@
         var tabitems = document.getElementById(tabgroup + "_items_" + i);
         if (tabitems != null) {
             tabitems.style.display = (i == idx) ? '' : 'none';
+            // execute event handler if any
+            if (i == idx && window.onTabShownHandlers != null) {
+                var onShowHandler = 
window.onTabShownHandlers[tabgroup][tabgroup + "_items_" + i];
+                if (onShowHandler != null) {
+                    eval(onShowHandler);
+                }
+            }
         }
-    }
-    // Change state value
-    if (state.length > 0) {
-        document.forms[0][state].value = idx;
     }
 }

Modified: cocoon/trunk/src/blocks/forms/samples/resources/forms-page-styling.xsl
==============================================================================
--- cocoon/trunk/src/blocks/forms/samples/resources/forms-page-styling.xsl      
(original)
+++ cocoon/trunk/src/blocks/forms/samples/resources/forms-page-styling.xsl      
Thu Aug 19 00:28:48 2004
@@ -93,6 +93,28 @@
         </div>
       </xsl:for-each>
     </div>
+    <!-- The tabbed elements can have an attribute formsOnShow containing some 
javascript to be executed
+         when a tab gets shown. -->
+    <script type="text/javascript">
+      if (window.onTabShownHandlers == undefined)
+        window.onTabShownHandlers = new Object();
+      var currentHandlers = new Object();
+      var initialHandler = null;
+      window.onTabShownHandlers["<xsl:value-of select="$id"/>"] = 
currentHandlers;
+      <xsl:for-each select="fi:items/fi:*">
+        <xsl:variable name="pos" select="position() - 1"/>
+          <xsl:if test="@formsOnShow">
+            currentHandlers["<xsl:value-of select="concat($id, '_items_', 
$pos)"/>"] = "<xsl:value-of select="@formsOnShow"/>";
+            <xsl:if test="$active = $pos">
+               initialHandler = "<xsl:value-of select="@formsOnShow"/>";
+            </xsl:if>
+          </xsl:if>
+      </xsl:for-each>
+      if (initialHandler != null) {
+        eval(initialHandler);
+        initialHandler = null;
+      }
+    </script>
   </xsl:template>
 
   <!--

Reply via email to