You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2012/05/22 14:18:30 UTC
svn commit: r1341439 [3/3] - in /myfaces/tobago/trunk: ./
tobago-core/src/main/java-jsf-1.1-todo/
tobago-core/src/main/java-jsf-1.1-todo/org/apache/myfaces/tobago/internal/taglib/component/
tobago-core/src/main/java-jsf-1.2-todo/ tobago-core/src/main/j...
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java?rev=1341439&r1=1341438&r2=1341439&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java Tue May 22 12:18:26 2012
@@ -17,8 +17,8 @@ package org.apache.myfaces.tobago.render
* limitations under the License.
*/
-import org.apache.myfaces.tobago.component.UITreeData;
import org.apache.myfaces.tobago.component.UITreeNode;
+import org.apache.myfaces.tobago.internal.component.AbstractUIData;
import org.apache.myfaces.tobago.internal.component.AbstractUITree;
import org.apache.myfaces.tobago.renderkit.LayoutComponentRendererBase;
import org.apache.myfaces.tobago.renderkit.css.Classes;
@@ -36,7 +36,6 @@ import org.slf4j.LoggerFactory;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import java.io.IOException;
-import java.util.Arrays;
public class TreeRenderer extends LayoutComponentRendererBase {
@@ -44,12 +43,13 @@ public class TreeRenderer extends Layout
@Override
public void decode(FacesContext facesContext, UIComponent component) {
- if (ComponentUtils.isOutputOnly(component)) {
- return;
- }
+ final AbstractUITree tree = (AbstractUITree) component;
+ RenderUtils.decodedStateOfTreeData(facesContext, tree);
+ }
- AbstractUITree tree = (AbstractUITree) component;
- tree.setValid(true);
+ @Override
+ public boolean getRendersChildren() {
+ return true;
}
@Override
@@ -63,7 +63,7 @@ public class TreeRenderer extends Layout
AbstractUITree tree = (AbstractUITree) component;
String clientId = tree.getClientId(facesContext);
- UIComponent root = tree.getRoot();
+ UIComponent root = ComponentUtils.findDescendant(tree, UITreeNode.class);
if (root == null) {
LOG.error("Can't find the tree root. This may occur while updating a tree from Tobago 1.0 to 1.5. "
+ "Please refer the documentation to see how to use tree tags.");
@@ -76,35 +76,44 @@ public class TreeRenderer extends Layout
writer.writeClassAttribute(Classes.create(tree));
Style style = new Style(facesContext, tree);
writer.writeStyleAttribute(style);
+ writer.writeIdAttribute(clientId);
writer.startElement(HtmlElements.INPUT, tree);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.HIDDEN, false);
- writer.writeNameAttribute(clientId);
- writer.writeIdAttribute(clientId);
- writer.writeAttribute(HtmlAttributes.VALUE, ";", false);
+ final String markedId = clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.SUFFIX_MARKED;
+ writer.writeNameAttribute(markedId);
+ writer.writeIdAttribute(markedId);
+ writer.writeClassAttribute(Classes.create(tree, AbstractUITree.SUFFIX_MARKED));
+ writer.writeAttribute(HtmlAttributes.VALUE, "", false);
writer.endElement(HtmlElements.INPUT);
writer.startElement(HtmlElements.INPUT, tree);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.HIDDEN, false);
- writer.writeNameAttribute(clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
- writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
- writer.writeClassAttribute(Classes.create(tree, "marked"));
- writer.writeAttribute(HtmlAttributes.VALUE, "", false);
+ final String expandedId = clientId + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_EXPANDED;
+ writer.writeNameAttribute(expandedId);
+ writer.writeIdAttribute(expandedId);
+ writer.writeClassAttribute(Classes.create(tree, AbstractUIData.SUFFIX_EXPANDED));
+ writer.writeAttribute(HtmlAttributes.VALUE, ",", false);
writer.endElement(HtmlElements.INPUT);
-/*
- if (tree.getSelectableAsEnum().isSupportedByTree()) {
- writer.startElement(HtmlElements.INPUT, tree);
- writer.writeAttribute(HtmlAttributes.TYPE, "hidden", false);
- writer.writeNameAttribute(clientId + AbstractUITree.SELECT_STATE);
- writer.writeIdAttribute(clientId + AbstractUITree.SELECT_STATE);
- writer.writeAttribute(HtmlAttributes.VALUE, ";", false);
- writer.endElement(HtmlElements.INPUT);
+ final int last = tree.hasRows() ? tree.getFirst() + tree.getRows() : Integer.MAX_VALUE;
+ for (int rowIndex = tree.getFirst(); rowIndex < last; rowIndex++) {
+ tree.setRowIndex(rowIndex);
+ if (!tree.isRowAvailable()) {
+ break;
+ }
+
+ for (UIComponent child : tree.getChildren()) {
+ RenderUtils.prepareRendererAll(facesContext, child);
+ RenderUtils.encode(facesContext, child);
+ }
}
-*/
-
- RenderUtils.encode(facesContext, root, Arrays.asList(UITreeNode.class, UITreeData.class));
writer.endElement(HtmlElements.DIV);
}
+
+ @Override
+ public boolean getPrepareRendersChildren() {
+ return true;
+ }
}
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeSelectRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeSelectRenderer.java?rev=1341439&r1=1341438&r2=1341439&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeSelectRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeSelectRenderer.java Tue May 22 12:18:26 2012
@@ -43,6 +43,9 @@ public class TreeSelectRenderer extends
TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
+ writer.startElement(HtmlElements.SPAN, null);
+ writer.writeClassAttribute(Classes.create(select));
+
if (select.isShowCheckbox()) {
writer.startElement(HtmlElements.INPUT, null);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX, false);
@@ -63,6 +66,8 @@ public class TreeSelectRenderer extends
writer.writeText(label);
writer.endElement(HtmlElements.LABEL);
}
+
+ writer.endElement(HtmlElements.SPAN);
}
@Override
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css?rev=1341439&r1=1341438&r2=1341439&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css Tue May 22 12:18:26 2012
@@ -1428,8 +1428,12 @@ div.tobago-richTextEditor-body {
white-space: nowrap;
}
+.tobago-treeNode {
+ width: 100%;
+}
+
.tobago-treeNode img {
- vertical-align: middle;
+ vertical-align: bottom;
border: 0;
}
@@ -1537,6 +1541,11 @@ div.tobago-richTextEditor-body {
background-color: #d8e9fb;
}
+.tobago-treeSelect input {
+ margin-top: 1px;
+ margin-bottom: 2px;
+}
+
/* treeListbox ------------------------------------------------------------------- */
.tobago-treeListbox {
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css?rev=1341439&r1=1341438&r2=1341439&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css Tue May 22 12:18:26 2012
@@ -783,18 +783,6 @@ div.tobago-tabGroup-toolBar {
float: right;
}
-.tobago-treeNode img {
- vertical-align: top;
- border: 0px;
-}
-
-/*
-.tobago-treeNode a {
- font-size: 12px;
- font-family: arial, helvetica, sans-serif;
-}
-
-*/
.tobago-treeNode-disabled a {
color: #888888;
text-decoration: none;
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java?rev=1341439&r1=1341438&r2=1341439&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/RenderUtils.java Tue May 22 12:18:26 2012
@@ -20,8 +20,13 @@ package org.apache.myfaces.tobago.render
import org.apache.myfaces.tobago.component.Attributes;
import org.apache.myfaces.tobago.config.Configurable;
import org.apache.myfaces.tobago.context.ResourceManagerUtils;
+import org.apache.myfaces.tobago.internal.component.AbstractUIData;
+import org.apache.myfaces.tobago.internal.component.AbstractUITree;
import org.apache.myfaces.tobago.internal.util.StringUtils;
import org.apache.myfaces.tobago.layout.Measure;
+import org.apache.myfaces.tobago.model.ExpandedState;
+import org.apache.myfaces.tobago.model.MarkedState;
+import org.apache.myfaces.tobago.model.TreePath;
import org.apache.myfaces.tobago.renderkit.RendererBase;
import org.apache.myfaces.tobago.util.ComponentUtils;
import org.apache.myfaces.tobago.util.DebugUtils;
@@ -41,6 +46,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -356,4 +362,90 @@ public class RenderUtils {
component.isItemDisabled(), component.getItemImage(), component.getMarkup());
}
+
+ public static void decodedStateOfTreeData(FacesContext facesContext, AbstractUIData data) {
+
+ if (!data.isTreeModel()) {
+ return;
+ }
+
+ final boolean isTree = data instanceof AbstractUITree;
+ // marked
+ final Integer markedIndex = isTree ? decodeMarkedIndex(facesContext, data) : null;
+
+ // expanded
+ final List<Integer> expandedIndices = decodeExpandedIndices(facesContext, data);
+
+ final int last = data.isRowsUnlimited() ? Integer.MAX_VALUE : data.getFirst() + data.getRows();
+ for (int rowIndex = data.getFirst(); rowIndex < last; rowIndex++) {
+ data.setRowIndex(rowIndex);
+ if (!data.isRowAvailable()) {
+ break;
+ }
+
+// final Object rowData = data.getRowData();
+ final TreePath path = data.getPath();
+
+ // marked
+ if (isTree) {
+ final MarkedState markedState = ((AbstractUITree) data).getMarkedState();
+ final boolean oldMarked = markedState.isMarked(path);
+ final boolean newMarked = ((Integer) rowIndex).equals(markedIndex);
+ if (newMarked != oldMarked) {
+// new TreeMarkedEvent(node, oldValue, newValue).queue();
+ if (newMarked) {
+ markedState.setMarked(path);
+ } else {
+ markedState.setMarked(null);
+ }
+ }
+ }
+
+ // expanded
+ final ExpandedState expandedState = data.getExpandedState();
+ final boolean oldExpanded = expandedState.isExpanded(path);
+ final boolean newExpanded = expandedIndices.contains(rowIndex);
+ if (newExpanded != oldExpanded) {
+// new TreeExpansionEvent(node, oldValue, newValue).queue();
+ if (newExpanded) {
+ expandedState.expand(path);
+ } else {
+ expandedState.collapse(path);
+ }
+ }
+
+ }
+ data.setRowIndex(-1);
+ }
+
+ private static Integer decodeMarkedIndex(FacesContext facesContext, AbstractUIData data) {
+ String markedString = null;
+ try {
+ markedString = (String) facesContext.getExternalContext().getRequestParameterMap()
+ .get(data.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_MARKED);
+ if (org.apache.commons.lang.StringUtils.isBlank(markedString)) {
+ return null;
+ }
+ return Integer.parseInt(markedString);
+ } catch (Exception e) {
+ // should not happen
+ LOG.warn("Can't parse marked: '" + markedString + "'", e);
+ return null;
+ }
+ }
+
+ private static List<Integer> decodeExpandedIndices(FacesContext facesContext, AbstractUIData data) {
+ List<Integer> expandedIndices;
+ String expandedString = null;
+ try {
+ expandedString = (String) facesContext.getExternalContext().getRequestParameterMap()
+ .get(data.getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_EXPANDED);
+ expandedIndices = StringUtils.parseIntegerList(expandedString);
+ } catch (Exception e) {
+ // should not happen
+ LOG.warn("Can't parse expanded: '" + expandedString + "'", e);
+ return Collections.emptyList();
+ }
+ return expandedIndices;
+ }
}
Propchange: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/jquery-ui/
('svn:mergeinfo' removed)
Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js?rev=1341439&r1=1341438&r2=1341439&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js Tue May 22 12:18:26 2012
@@ -20,9 +20,11 @@ Tobago.Tree = {};
Tobago.Tree.toggleNode = function(element) {
var src;
var node = element.closest(".tobago-treeNode, .tobago-treeMenuNode");
- var expanded = node.find(".tobago-treeMenuNode-expanded, .tobago-treeNode-expanded");
+ var data = node.closest(".tobago-treeMenu, .tobago-tree, .tobago-sheet");
+ var expanded = data.children(".tobago-treeMenu-expanded, .tobago-tree-expanded, .tobago-sheet-expanded");
var toggle = node.find(".tobago-treeMenuNode-toggle, .tobago-treeNode-toggle");
- if ("true" == expanded.attr("value")) {
+ var rowIndex = Tobago.Tree.rowIndex(node);
+ if (Tobago.Tree.isExpanded(node, expanded)) {
Tobago.Tree.hideChildren(node);
toggle.each(function() {
src = jQuery(this).data("tobago-srcclose");
@@ -32,22 +34,26 @@ Tobago.Tree.toggleNode = function(elemen
jQuery(this).attr("src", src);
Tobago.fixPngAlpha(this);
});
- expanded.attr("value", "false");
+ expanded.attr("value", expanded.attr("value").replace(new RegExp("," + rowIndex + ","), ","));
node.filter(".tobago-treeNode").removeClass("tobago-treeNode-markup-expanded");
node.filter(".tobago-treeMenuNode").removeClass("tobago-treeMenuNode-markup-expanded");
} else {
- Tobago.Tree.showChildren(node);
- toggle.each(function() {
- src = jQuery(this).data("tobago-srcopen");
- if (src == null) { // use the close icon if there is no open icon
- src = jQuery(this).data("tobago-srcclose");
- }
- jQuery(this).attr("src", src);
- Tobago.fixPngAlpha(this);
- });
- expanded.attr("value", "true");
- node.filter(".tobago-treeNode").addClass("tobago-treeNode-markup-expanded");
- node.filter(".tobago-treeMenuNode").addClass("tobago-treeMenuNode-markup-expanded");
+ var reload = Tobago.Tree.showChildren(node, expanded);
+ expanded.attr("value", expanded.attr("value") + rowIndex + ",");
+ if (reload) {
+ Tobago.reloadComponent(element, data.attr("id"), null, {});
+ } else {
+ toggle.each(function() {
+ src = jQuery(this).data("tobago-srcopen");
+ if (src == null) { // use the close icon if there is no open icon
+ src = jQuery(this).data("tobago-srcclose");
+ }
+ jQuery(this).attr("src", src);
+ Tobago.fixPngAlpha(this);
+ });
+ node.filter(".tobago-treeNode").addClass("tobago-treeNode-markup-expanded");
+ node.filter(".tobago-treeMenuNode").addClass("tobago-treeMenuNode-markup-expanded");
+ }
}
};
@@ -56,8 +62,16 @@ Tobago.Tree.toggleNode = function(elemen
* @param node A jQuery-Object as a node of the tree.
*/
Tobago.Tree.hideChildren = function (node) {
- var children = node.nextAll("[data-tobago-treeparent='" + node.attr("id") + "']");
- children.hide().each(function () {
+ var treeParentSelector = "[data-tobago-treeparent='" + node.attr("id") + "']";
+ var children;
+ if (node.parent("td").parent("tr").size() == 1) { // tree inside of a sheet
+ children = node.parent("td").parent("tr").nextAll().children().children(treeParentSelector);
+ children.parent().parent().hide();
+ } else { // normal tree
+ children = node.nextAll(treeParentSelector);
+ children.hide();
+ }
+ children.each(function () {
Tobago.Tree.hideChildren(jQuery(this));
});
};
@@ -65,16 +79,32 @@ Tobago.Tree.hideChildren = function (nod
/**
* Show the children of the node recursively, there parents are expanded.
* @param node A jQuery-Object as a node of the tree.
+ * @return is reload needed (to get all nodes from the server)
*/
-Tobago.Tree.showChildren = function (node) {
- var children = node.nextAll("[data-tobago-treeparent='" + node.attr("id") + "']");
- children.show().each(function () {
+Tobago.Tree.showChildren = function (node, expanded) {
+ var treeParentSelector = "[data-tobago-treeparent='" + node.attr("id") + "']";
+ var children;
+ if (node.parent("td").parent("tr").size() == 1) { // tree inside of a sheet
+ children = node.parent("td").parent("tr").nextAll().children().children(treeParentSelector);
+ children.parent().parent().show();
+ } else { // normal tree
+ children = node.nextAll(treeParentSelector);
+ children.show();
+ }
+ if (children.length == 0) {
+ // no children in DOM, reload it from the server
+ return true;
+ }
+ children.each(function () {
var child = jQuery(this);
- var expanded = child.find(".tobago-treeMenuNode-expanded, .tobago-treeNode-expanded");
- if ("true" == expanded.attr("value")) {
- Tobago.Tree.showChildren(child);
+ if (Tobago.Tree.isExpanded(child, expanded)) {
+ var reload = Tobago.Tree.showChildren(child, expanded);
+ if (reload) {
+ return true;
+ }
}
});
+ return false;
};
Tobago.Tree.init = function(elements) {
@@ -122,6 +152,7 @@ Tobago.Tree.init = function(elements) {
Tobago.Utils.selectWidthJQuery(elements, ".tobago-treeNode-markup-folder .tobago-treeNode-toggle").click(function() {
Tobago.Tree.toggleNode(jQuery(this));
+ return false;
});
Tobago.Utils.selectWidthJQuery(elements, ".tobago-treeMenuNode-markup-folder .tobago-treeMenuNode-toggle")
@@ -146,7 +177,7 @@ Tobago.Tree.init = function(elements) {
var node = command.parent(".tobago-treeNode");
var tree = node.closest(".tobago-tree");
var marked = tree.children(".tobago-tree-marked");
- marked.attr("value", node.attr("id"));
+ marked.attr("value", Tobago.Tree.rowIndex(node));
tree.find(".tobago-treeNode").removeClass("tobago-treeNode-markup-marked");
node.addClass("tobago-treeNode-markup-marked");
});
@@ -157,11 +188,39 @@ Tobago.Tree.init = function(elements) {
var node = command.parent(".tobago-treeMenuNode");
var tree = node.closest(".tobago-treeMenu");
var marked = tree.children(".tobago-treeMenu-marked");
- marked.attr("value", node.attr("id"));
+ marked.attr("value", Tobago.Tree.rowIndex(node));
tree.find(".tobago-treeMenuNode").removeClass("tobago-treeMenuNode-markup-marked");
node.addClass("tobago-treeMenuNode-markup-marked");
});
+ // init marked field
+ Tobago.Utils.selectWidthJQuery(elements, ".tobago-treeMenu, .tobago-tree").each(function() {
+ var marked = jQuery(this).children(".tobago-treeMenu-marked, .tobago-tree-marked");
+ var string = "";
+ jQuery(this).find(".tobago-treeMenuNode-markup-marked, .tobago-treeNode-markup-marked").each(function() {
+ string = Tobago.Tree.rowIndex(jQuery(this));
+ });
+ marked.attr("value", string);
+ });
+
+ // init expanded field
+ Tobago.Utils.selectWidthJQuery(elements, ".tobago-treeMenu, .tobago-tree, .tobago-sheet").each(function() {
+ var expanded = jQuery(this).children(".tobago-treeMenu-expanded, .tobago-tree-expanded, .tobago-sheet-expanded");
+ var string = ",";
+ jQuery(this).find(".tobago-treeMenuNode-markup-expanded, .tobago-treeNode-markup-expanded").each(function() {
+ string += Tobago.Tree.rowIndex(jQuery(this)) + ",";
+ });
+ expanded.attr("value", string);
+ });
+};
+
+Tobago.Tree.isExpanded = function(node, expanded) {
+ var rowIndex = Tobago.Tree.rowIndex(node);
+ return expanded.attr("value").indexOf("," + rowIndex + ",") > -1;
+};
+
+Tobago.Tree.rowIndex = function (node) {
+ return node.attr("id").replace(/.+\:(\d+)(\:\w+)+/, '$1');
};
Tobago.registerListener(Tobago.Tree.init, Tobago.Phase.DOCUMENT_READY);