You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2005/12/27 10:59:52 UTC
svn commit: r359197 - in /incubator/tobago/trunk:
tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/api/
tobago-example/tobago-example-demo/src/main/webapp/overview/
tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/r...
Author: weber
Date: Tue Dec 27 01:59:30 2005
New Revision: 359197
URL: http://svn.apache.org/viewcvs?rev=359197&view=rev
Log:
make tree, treelistbox and date ajaxable
Modified:
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/treeControl.jsp
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DateRenderer.java
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tree.js
Modified: incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java?rev=359197&r1=359196&r2=359197&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java (original)
+++ incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/ajax/api/AjaxUtils.java Tue Dec 27 01:59:30 2005
@@ -2,10 +2,10 @@
import org.apache.myfaces.tobago.component.ComponentUtil;
-import javax.faces.context.FacesContext;
+import javax.faces.application.ViewHandler;
import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
import javax.faces.render.Renderer;
-import javax.faces.application.ViewHandler;
import java.io.IOException;
import java.util.Iterator;
@@ -21,6 +21,19 @@
public static void processAjax(FacesContext facesContext, UIComponent component) throws IOException {
+
+ component.processValidators(facesContext);
+
+ if (! facesContext.getRenderResponse()) {
+ component.processUpdates(facesContext);
+ }
+
+ // invokeApplication here ??
+
+ renderAjax(facesContext, component);
+ }
+
+ private static void renderAjax(FacesContext facesContext, UIComponent component) throws IOException {
final Iterator facetsAndChildren = component.getFacetsAndChildren();
while (facetsAndChildren.hasNext()) {
UIComponent child = (UIComponent) facetsAndChildren.next();
@@ -28,13 +41,12 @@
((AjaxComponent)child).processAjax(facesContext);
}
else {
- processAjax(facesContext, child);
+ renderAjax(facesContext, child);
}
if (facesContext.getResponseComplete()) {
return;
}
}
-
}
public static void checkParamValidity(FacesContext facesContext, UIComponent uiComponent, Class compClass)
Modified: incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/treeControl.jsp
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/treeControl.jsp?rev=359197&r1=359196&r2=359197&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/treeControl.jsp (original)
+++ incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/treeControl.jsp Tue Dec 27 01:59:30 2005
@@ -30,12 +30,12 @@
<%-- column --%>
<tc:box label="#{overviewBundle.tree_sampleTitle}" >
+ <tc:tabGroup state="#{overviewController.treeTabsState}" serverside="true">
+ <tc:tab label="#{overviewBundle.treeLabel}">
<f:facet name="layout">
<tc:gridLayout columns="2*;1*" />
</f:facet>
- <tc:tabGroup state="#{overviewController.treeTabsState}" serverside="true">
- <tc:tab label="#{overviewBundle.treeLabel}">
<tc:tree value="#{demo.tree}" state="#{demo.treeState}" id="tree"
idReference="userObject.id"
nameReference="userObject.name"
@@ -48,53 +48,66 @@
>
<f:actionListener type="org.apache.myfaces.tobago.example.demo.actionlistener.TreeEditor" />
</tc:tree>
+
+ <tc:panel>
+ <f:facet name="layout">
+ <tc:gridLayout rows="fixed;fixed;fixed;fixed;1*;fixed;fixed;fixed" />
+ </f:facet>
+
+ <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowIcons}"
+ value="#{demo.showIcons}"
+ disabled="#{overviewController.treeTabsState != 0}"/>
+ <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowJunctions}"
+ value="#{demo.showJunctions}"
+ disabled="#{overviewController.treeTabsState != 0}"/>
+ <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowRootJunction}"
+ value="#{demo.showRootJunction}"
+ disabled="#{overviewController.treeTabsState != 0}"/>
+ <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowRoot}"
+ value="#{demo.showRoot}"
+ disabled="#{overviewController.treeTabsState != 0}"/>
+ <tc:cell />
+ <tc:selectOneChoice value="#{overviewController.treeSelectMode}">
+ <f:selectItems value="#{overviewController.treeSelectModeItems}" />
+ </tc:selectOneChoice>
+
+ <tc:selectBooleanCheckbox label="#{overviewBundle.treeMutable}"
+ value="#{demo.mutable}"
+ disabled="#{overviewController.treeTabsState != 0}"/>
+ <tc:button action="redisplay" label="#{overviewBundle.submit}" />
+ </tc:panel>
+
</tc:tab>
<tc:tab label="#{overviewBundle.treeListboxLabel}">
+ <f:facet name="layout">
+ <tc:gridLayout columns="2*;1*" />
+ </f:facet>
+
<tc:treeListbox value="#{demo.tree}" state="#{demo.treeState}" id="treeListbox"
idReference="userObject.id"
nameReference="userObject.name"
selectable="#{overviewController.treeListboxSelectMode}"
>
</tc:treeListbox>
+
+ <tc:panel>
+ <f:facet name="layout">
+ <tc:gridLayout rows="1*;fixed;20px;fixed" />
+ </f:facet>
+
+ <tc:cell />
+
+ <tc:selectOneChoice value="#{overviewController.treeListboxSelectMode}">
+ <f:selectItems value="#{overviewController.treeListboxSelectModeItems}" />
+ </tc:selectOneChoice>
+
+ <tc:cell />
+
+ <tc:button action="redisplay" label="#{overviewBundle.submit}" />
+ </tc:panel>
</tc:tab>
</tc:tabGroup>
-
- <%-- column --%>
- <tc:panel>
- <f:facet name="layout">
- <tc:gridLayout rows="20px;fixed;fixed;fixed;fixed;1*;fixed;fixed;fixed;fixed" />
- </f:facet>
-
- <tc:cell />
-
- <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowIcons}"
- value="#{demo.showIcons}"
- disabled="#{overviewController.treeTabsState != 0}"/>
- <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowJunctions}"
- value="#{demo.showJunctions}"
- disabled="#{overviewController.treeTabsState != 0}"/>
- <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowRootJunction}"
- value="#{demo.showRootJunction}"
- disabled="#{overviewController.treeTabsState != 0}"/>
- <tc:selectBooleanCheckbox label="#{overviewBundle.treeShowRoot}"
- value="#{demo.showRoot}"
- disabled="#{overviewController.treeTabsState != 0}"/>
- <tc:cell />
- <tc:selectOneChoice value="#{overviewController.treeSelectMode}"
- rendered="#{overviewController.treeTabsState == 0}">
- <f:selectItems value="#{overviewController.treeSelectModeItems}" />
- </tc:selectOneChoice>
- <tc:selectOneChoice value="#{overviewController.treeListboxSelectMode}"
- rendered="#{overviewController.treeTabsState == 1}">
- <f:selectItems value="#{overviewController.treeListboxSelectModeItems}" />
- </tc:selectOneChoice>
-
- <tc:selectBooleanCheckbox label="#{overviewBundle.treeMutable}"
- value="#{demo.mutable}"
- disabled="#{overviewController.treeTabsState != 0}"/>
- <tc:button action="redisplay" label="#{overviewBundle.submit}" />
- </tc:panel>
</tc:box>
Modified: incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DateRenderer.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DateRenderer.java?rev=359197&r1=359196&r2=359197&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DateRenderer.java (original)
+++ incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DateRenderer.java Tue Dec 27 01:59:30 2005
@@ -27,6 +27,7 @@
import org.apache.myfaces.tobago.config.ThemeConfig;
import org.apache.myfaces.tobago.event.DatePickerController;
import org.apache.myfaces.tobago.renderkit.RenderUtil;
+import org.apache.myfaces.tobago.renderkit.html.HtmlRendererUtil;
import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
import javax.faces.component.UICommand;
@@ -52,12 +53,20 @@
protected void renderMain(FacesContext facesContext, UIInput input, TobagoResponseWriter writer) throws IOException {
+ final String[] scripts = {
+ "script/date.js",
+ "script/dateConverter.js",
+ "script/calendar.js"};
final List<String> scriptFiles
= ComponentUtil.findPage(input).getScriptFiles();
- scriptFiles.add("script/date.js");
- scriptFiles.add("script/dateConverter.js");
- scriptFiles.add("script/calendar.js");
+ for (String script : scripts) {
+ scriptFiles.add(script);
+ }
+
+ if (AJAX_ENABLED) {
+ HtmlRendererUtil.writeScriptLoader(facesContext, scripts, null);
+ }
String classes = ComponentUtil.getStringAttribute(input, ATTR_STYLE_CLASS);
classes = classes.replaceAll("tobago-date-", "tobago-in-");
Modified: incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java?rev=359197&r1=359196&r2=359197&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java (original)
+++ incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java Tue Dec 27 01:59:30 2005
@@ -21,12 +21,13 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import static org.apache.myfaces.tobago.TobagoConstants.AJAX_ENABLED;
+import static org.apache.myfaces.tobago.TobagoConstants.ATTR_STYLE;
import org.apache.myfaces.tobago.component.ComponentUtil;
import org.apache.myfaces.tobago.component.UIPage;
import org.apache.myfaces.tobago.component.UITreeListbox;
import org.apache.myfaces.tobago.component.UITreeNode;
import org.apache.myfaces.tobago.context.ResourceManagerUtil;
-import org.apache.myfaces.tobago.renderkit.RenderUtil;
import org.apache.myfaces.tobago.renderkit.html.HtmlRendererUtil;
import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
@@ -38,7 +39,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Set;
-import static org.apache.myfaces.tobago.TobagoConstants.*;
public class TreeListboxRenderer extends TreeRenderer{
@@ -100,35 +100,48 @@
writer.writeAttribute("value", value, null);
writer.endElement("input");
- page.getScriptFiles().add("script/tree.js");
+ String script = createJavascript(facesContext, clientId, root);
- HtmlRendererUtil.startJavascript(writer);
+ final String[] scripts = {"script/tree.js"};
+ ComponentUtil.findPage(tree).getScriptFiles().add(scripts[0]);
- writer.writeText("{\n", null);
+ if (! AJAX_ENABLED) {
+ HtmlRendererUtil.startJavascript(writer);
+ writer.writeText(script, null);
+ HtmlRendererUtil.endJavascript(writer);
+ } else {
+ HtmlRendererUtil.writeScriptLoader(facesContext, scripts,
+ new String[] {script.replaceAll("\n", " ")});
+ }
- writer.writeText(" var treeResourcesHelp = new Object();\n", null);
- writer.writeText(" treeResourcesHelp.getImage = function (name) {\n", null);
- writer.writeText(" return \"", null);
- writer.writeText(ResourceManagerUtil.getImageWithPath(facesContext, "image/blank.gif"), null);
- writer.writeText("\";\n", null);
- writer.writeText(" }\n", null);
+ }
+ private String createJavascript(FacesContext facesContext, String clientId,
+ UITreeNode root) throws IOException {
- RenderUtil.encode(facesContext, root);
+ StringBuffer sb = new StringBuffer();
+ sb.append("{\n");
- writer.writeText(" var hidden = document.getElementById('", null);
- writer.writeText(clientId, null);
- writer.writeText("'); \n", null);
- writer.writeText(" hidden.rootNode = ", null);
+ sb.append(" var treeResourcesHelp = new Object();\n");
+ sb.append(" treeResourcesHelp.getImage = function (name) {\n");
+ sb.append(" return \"");
+ sb.append(ResourceManagerUtil.getImageWithPath(facesContext, "image/blank.gif"));
+ sb.append("\";\n");
+ sb.append(" };;\n");
+
+ sb.append(getNodesAsJavascript(facesContext, root));
+
+ sb.append(" var hidden = document.getElementById('");
+ sb.append(clientId);
+ sb.append("'); \n");
+ sb.append(" hidden.rootNode = ");
String rootNode = createJavascriptVariable(root.getClientId(facesContext));
- writer.writeText(rootNode, null);
- writer.writeText(";\n", null);
-
- writer.writeText("}\n", null);
-
- HtmlRendererUtil.endJavascript(writer);
+ sb.append(rootNode);
+ sb.append(";\n");
+ sb.append("}\n");
+ return sb.toString();
}
// public void encodeChildrenTobago(
Modified: incubator/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/viewcvs/incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java?rev=359197&r1=359196&r2=359197&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java (original)
+++ incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java Tue Dec 27 01:59:30 2005
@@ -21,6 +21,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import static org.apache.myfaces.tobago.TobagoConstants.*;
import org.apache.myfaces.tobago.component.ComponentUtil;
import org.apache.myfaces.tobago.component.UITree;
import org.apache.myfaces.tobago.component.UITreeNode;
@@ -35,7 +36,7 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import java.io.IOException;
-import static org.apache.myfaces.tobago.TobagoConstants.*;
+import java.io.StringWriter;
public class TreeRenderer extends RendererBase {
@@ -43,6 +44,24 @@
private static final Log LOG = LogFactory.getLog(TreeRenderer.class);
+ // tree resources (TREE_IMAGES)
+ private static final String[] TREE_IMAGES = {
+ "openfoldericon.gif",
+ "foldericon.gif",
+ "unchecked.gif",
+ "checked.gif",
+ "new.gif",
+ "T.gif",
+ "L.gif",
+ "I.gif",
+ "Lminus.gif",
+ "Tminus.gif",
+ "Rminus.gif",
+ "Lplus.gif",
+ "Tplus.gif",
+ "Rplus.gif",
+ };
+
// ///////////////////////////////////////////// attribute
// ///////////////////////////////////////////// constructor
@@ -151,53 +170,74 @@
writer.endElement("table");
// writer.endElement("div");
- ComponentUtil.findPage(tree).getScriptFiles().add("script/tree.js");
- HtmlRendererUtil.startJavascript(writer);
- writer.writeText("{", null);
+ String script = createJavascript(facesContext, clientId, root);
- // tree resources (images)
- String[] images = {
- "openfoldericon.gif", "foldericon.gif", "unchecked.gif", "checked.gif",
- "new.gif", "T.gif", "L.gif", "I.gif",
- "Lminus.gif", "Tminus.gif", "Rminus.gif",
- "Lplus.gif", "Tplus.gif", "Rplus.gif",
- };
- writer.writeText("var treeResourcesHelp = new Object();\n", null);
- for (int i = 0; i < images.length; i++) {
- writer.writeText("treeResourcesHelp.", null);
- writer.writeText(images[i].replace('.', '_'), null);
- writer.writeText(" = \"", null);
- writer.writeText(ResourceManagerUtil.getImageWithPath(facesContext, "image/" + images[i]), null);
- writer.writeText("\";\n", null);
- }
- writer.writeText("treeResourcesHelp.getImage = function (name) {\n", null);
- writer.writeText(" var result = this[name.replace('.', '_')];\n", null);
- writer.writeText(" if (result) {\n", null);
- writer.writeText(" return result;\n", null);
- writer.writeText(" } else {\n", null);
- writer.writeText(" return \"", null);
- writer.writeText(ResourceManagerUtil.getImageWithPath(facesContext, "image/blank.gif"), null);
- writer.writeText("\";\n", null);
- writer.writeText(" }\n", null);
- writer.writeText("}\n", null);
+ final String[] scripts = {"script/tree.js"};
+ ComponentUtil.findPage(tree).getScriptFiles().add(scripts[0]);
- RenderUtil.encode(facesContext, root);
+ if (! AJAX_ENABLED) {
+ HtmlRendererUtil.startJavascript(writer);
+ writer.writeText(script, null);
+ HtmlRendererUtil.endJavascript(writer);
+ } else {
+ HtmlRendererUtil.writeScriptLoader(facesContext, scripts,
+ new String[] {script.replaceAll("\n", " ")});
+ }
+
+ writer.endElement("div");
+ }
- writer.writeText(" var treeDiv = document.getElementById('", null);
- writer.writeText(clientId, null);
- writer.writeText("-cont');\n", null);
- writer.writeText("treeDiv.innerHTML = ", null);
+ private String createJavascript(FacesContext facesContext, String clientId,
+ UITreeNode root)
+ throws IOException {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("{");
+
+ sb.append("var treeResourcesHelp = new Object();\n");
+ for (int i = 0; i < TREE_IMAGES.length; i++) {
+ sb.append("treeResourcesHelp.");
+ sb.append(TREE_IMAGES[i].replace('.', '_'));
+ sb.append(" = \"");
+ sb.append(ResourceManagerUtil.getImageWithPath(facesContext, "image/" + TREE_IMAGES[i]));
+ sb.append("\";\n");
+ }
+ sb.append("treeResourcesHelp.getImage = function (name) {\n");
+ sb.append(" var result = this[name.replace('.', '_')];\n");
+ sb.append(" if (result) {\n");
+ sb.append(" return result;\n");
+ sb.append(" } else {\n");
+ sb.append(" return \"");
+ sb.append(ResourceManagerUtil.getImageWithPath(facesContext, "image/blank.gif"));
+ sb.append("\";\n");
+ sb.append(" }\n");
+ sb.append("};\n");
+
+ sb.append(getNodesAsJavascript(facesContext, root));
+
+ sb.append(" var treeDiv = document.getElementById('");
+ sb.append(clientId);
+ sb.append("-cont');\n");
+ sb.append("treeDiv.innerHTML = ");
String rootNode = createJavascriptVariable(root.getClientId(facesContext));
- writer.writeText(rootNode, null);
- writer.writeText(".toString(0, true);\n", null);
+ sb.append(rootNode);
+ sb.append(".toString(0, true);\n");
- writer.writeText(rootNode, null);
- writer.writeText(".initSelection();\n", null);
- writer.writeText("}", null);
- HtmlRendererUtil.endJavascript(writer);
+ sb.append(rootNode);
+ sb.append(".initSelection();\n");
- writer.endElement("div");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ protected String getNodesAsJavascript(FacesContext facesContext, UITreeNode root) throws IOException {
+ TobagoResponseWriter writer = (TobagoResponseWriter) facesContext.getResponseWriter();
+ StringWriter stringWriter = new StringWriter();
+ facesContext.setResponseWriter(writer.cloneWithWriter(stringWriter));
+ RenderUtil.encode(facesContext, root);
+ facesContext.setResponseWriter(writer);
+ return stringWriter.toString();
}
// ///////////////////////////////////////////// bean getter + setter
Modified: incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tree.js
URL: http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tree.js?rev=359197&r1=359196&r2=359197&view=diff
==============================================================================
--- incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tree.js (original)
+++ incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tree.js Tue Dec 27 01:59:30 2005
@@ -424,7 +424,9 @@
this.initSelection = function() {
if (this.selected) {
var selectState = document.getElementById(treeHiddenId + '-selectState');
- selectState.value = selectState.value + nodeStateId(this) + ";" ;
+ if (selectState) {
+ selectState.value = selectState.value + nodeStateId(this) + ";";
+ }
}
};