tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Howard Lewis Ship <hls...@gmail.com>
Subject Re: svn commit: r1142070 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/ main/java/org/apache/tapestry5/corelib/components/ main/java/org/apache/tapestry5/tree/ main/resources/org/apache/tapestry5/ test/groovy/org/ap
Date Mon, 04 Jul 2011 21:31:37 GMT
In general, I've been attempting to not attach new properties to
existing DOM objects.  However, I've already bent that rule one (the
t5pubsub properties, to indicate if there are publishers to cleanup
for an element).

In any case, adding a t5treenodeid property toa DOM element would
likely not cause the world to come crumbling down.   Maybe its
different as we transition to a loosey-goosey HTML5 world, but I've
made a lot of effort over the years to have Tapestry render out
property HTML and XHTML, which is why I typically render out a unique
client id, with companion JS to take it from there. Maybe its time to
experiment with directly rendering extra DOM attributes for these
kinds of purposes, which would make the HTML markup a bit easier to
follow, and make both markup and JavaScript more concise.


On Mon, Jul 4, 2011 at 1:37 PM, Josh Canfield <joshcanfield@gmail.com> wrote:
> Yes, pub sub is definitely on my to-do list. I want the tree to publish
> click, expand and collapse events and listen for refresh events. I think
> this will require adding the node ID to the client elements. Is there a
> reason not to do that?
>
> I'm also contemplating a generic way to send parameterized links to the
> client. With something like T5.eventLink(link, context) to mirror a server
> side API. Context would be hash of name/values to replace in the event link.
>
> The point would be to allow things like the tree to have one event link that
> serviced all the nodes configured once removing the need to send the event
> links down with every node.
> On Jul 4, 2011 10:27 AM, "Howard Lewis Ship" <hlship@gmail.com> wrote:
>> I suspect leveraging the new pubsub infrastructure will help. I'm
>> going to be looking at refactoring a good number of the mega
>> components that way.
>>
>> On Sun, Jul 3, 2011 at 1:00 PM, Josh Canfield <joshcanfield@gmail.com>
> wrote:
>>> Ok, thanks.
>>>
>>> A previously said it was 1000 items, but it's really 10 times as many
>>> elements. Makes the memory issue less significant, I'm still going to see
> if
>>> can get it to come down.
>>> On Jul 3, 2011 12:35 PM, "Igor Drobiazko" <igor.drobiazko@gmail.com>
> wrote:
>>>> I'm planning to refactor Tree.java by moving selected nodes from
>>>> TreeExpansionModel into TreeSelectionModel. No changes in tree.js are
>>>> expected. Please go ahead.
>>>>
>>>> On Sun, Jul 3, 2011 at 6:55 PM, Josh Canfield <joshcanfield@gmail.com
>>>>wrote:
>>>>
>>>>> Igor or Howard (or anyone else) are you actively working on the tree
>>>>> component? I'd like to refactor the javascript a bit but I don't want
>>>>> to make a merge for you difficult.
>>>>>
>>>>> Currently all of the javascript closures are being copied for every
>>>>> node. In the TreeDemo integration test expanding the Numbers node,
>>>>> which has 1000 elements , Chrome is reporting ~11.5MB added to the
>>>>> total memory usage of the page. 4.78MB of that is in closures. (I
>>>>> haven't tried profiling Firefox)
>>>>>
>>>>> I'm working on a project that will likely have a large number of
>>>>> nodes, probably not all under one branch, but since the Tree component
>>>>> is caching the objects opening and closing the branches is going to
>>>>> make the total number of nodes pile up quickly. I'd like to try and
>>>>> get it down to only increasing the memory usage by html elements and
>>>>> the equivalent of the spec objects.
>>>>>
>>>>>
>>>>> Josh
>>>>>
>>>>>
>>>>> On Fri, Jul 1, 2011 at 5:32 PM, Igor Drobiazko <
> igor.drobiazko@gmail.com>
>>>>> wrote:
>>>>> > You think we should add TreeSelectionModel?
>>>>> >
>>>>> > On Sat, Jul 2, 2011 at 2:02 AM, Howard Lewis Ship <hlship@gmail.com>
>>>>> wrote:
>>>>> >
>>>>> >> I'm not sure that we want the TreeExpansionModel to also be
the
> Tree's
>>>>> >> selection model; I think of those as separate and possibly
> orthogonal.
>>>>> >>
>>>>> >> On Fri, Jul 1, 2011 at 1:24 PM, <drobiazko@apache.org>
wrote:
>>>>> >> > Author: drobiazko
>>>>> >> > Date: Fri Jul 1 20:24:03 2011
>>>>> >> > New Revision: 1142070
>>>>> >> >
>>>>> >> > URL: http://svn.apache.org/viewvc?rev=1142070&view=rev
>>>>> >> > Log:
>>>>> >> > TAP5-1562: Made tree leafs selectable
>>>>> >> >
>>>>> >> > Modified:
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/DefaultTreeExpansionModel.java
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/TreeExpansionModel.java
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.css
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.js
>>>>> >> >
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/TreeTests.groovy
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventConstants.java
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -209,4 +209,20 @@ public class EventConstants
>>>>> >> > */
>>>>> >> > public static final String PREALLOCATE_FORM_CONTROL_NAMES
=
>>>>> >> "preallocateFormControlNames";
>>>>> >> >
>>>>> >> > + /**
>>>>> >> > + * Event triggered by the {@link
>>>>> >> org.apache.tapestry5.corelib.components.Tree}
>>>>> >> > + * component when a leaf node is selected.
>>>>> >> > + *
>>>>> >> > + * @since 5.3.1
>>>>> >> > + */
>>>>> >> > + public static final String NODE_SELECTED = "nodeSelected";
>>>>> >> > +
>>>>> >> > + /**
>>>>> >> > + * Event triggered by the {@link
>>>>> >> org.apache.tapestry5.corelib.components.Tree}
>>>>> >> > + * component when a leaf node is unselected.
>>>>> >> > + *
>>>>> >> > + * @since 5.3.1
>>>>> >> > + */
>>>>> >> > + public static final String NODE_UNSELECTED = "nodeUnselected";
>>>>> >> > +
>>>>> >> > }
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Tree.java
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -14,21 +14,17 @@
>>>>> >> >
>>>>> >> > package org.apache.tapestry5.corelib.components;
>>>>> >> >
>>>>> >> > +import java.util.Arrays;
>>>>> >> > import java.util.List;
>>>>> >> >
>>>>> >> > -import org.apache.tapestry5.BindingConstants;
>>>>> >> > -import org.apache.tapestry5.Block;
>>>>> >> > -import org.apache.tapestry5.ComponentResources;
>>>>> >> > -import org.apache.tapestry5.Link;
>>>>> >> > -import org.apache.tapestry5.MarkupWriter;
>>>>> >> > -import org.apache.tapestry5.annotations.Environmental;
>>>>> >> > -import org.apache.tapestry5.annotations.Parameter;
>>>>> >> > -import org.apache.tapestry5.annotations.Persist;
>>>>> >> > -import org.apache.tapestry5.annotations.Property;
>>>>> >> > +import org.apache.tapestry5.*;
>>>>> >> > +import org.apache.tapestry5.annotations.*;
>>>>> >> > +import org.apache.tapestry5.corelib.internal.InternalFormSupport;
>>>>> >> > import org.apache.tapestry5.dom.Element;
>>>>> >> > import org.apache.tapestry5.func.F;
>>>>> >> > import org.apache.tapestry5.func.Flow;
>>>>> >> > import org.apache.tapestry5.func.Worker;
>>>>> >> > +import org.apache.tapestry5.internal.util.CaptureResultCallback;
>>>>> >> > import org.apache.tapestry5.ioc.annotations.Inject;
>>>>> >> > import org.apache.tapestry5.json.JSONObject;
>>>>> >> > import org.apache.tapestry5.runtime.RenderCommand;
>>>>> >> > @@ -49,6 +45,7 @@ import org.apache.tapestry5.tree.TreeNod
>>>>> >> > */
>>>>> >> > @SuppressWarnings(
>>>>> >> > { "rawtypes", "unchecked", "unused" })
>>>>> >> > +@Events({EventConstants.NODE_SELECTED,
>>>>> EventConstants.NODE_UNSELECTED})
>>>>> >> > public class Tree
>>>>> >> > {
>>>>> >> > /**
>>>>> >> > @@ -162,30 +159,34 @@ public class Tree
>>>>> >> > boolean hasChildren = !node.isLeaf() &&
>>>>> >> node.getHasChildren();
>>>>> >> > boolean expanded = hasChildren &&
>>>>> >> expansionModel.isExpanded(node);
>>>>> >> >
>>>>> >> > - if (hasChildren)
>>>>> >> > - {
>>>>> >> > - String clientId =
>>>>> jss.allocateClientId(resources);
>>>>> >> > + String clientId = jss.allocateClientId(resources);
>>>>> >> >
>>>>> >> > - e.attribute("id", clientId);
>>>>> >> > + JSONObject spec = new JSONObject("clientId",
>>>>> clientId);
>>>>> >> >
>>>>> >> > + e.attribute("id", clientId);
>>>>> >> > +
>>>>> >> > + if (hasChildren)
>>>>> >> > + {
>>>>> >> > Link expandChildren =
>>>>> >> resources.createEventLink("expandChildren", node.getId());
>>>>> >> > Link markExpanded =
>>>>> >> resources.createEventLink("markExpanded", node.getId());
>>>>> >> > Link markCollapsed =
>>>>> >> resources.createEventLink("markCollapsed", node.getId());
>>>>> >> >
>>>>> >> > - JSONObject spec = new JSONObject("clientId",
>>>>> >> clientId,
>>>>> >> > -
>>>>> >> > - "expandChildrenURL", expandChildren.toString(),
>>>>> >> > -
>>>>> >> > - "markExpandedURL", markExpanded.toString(),
>>>>> >> > -
>>>>> >> > - "markCollapsedURL", markCollapsed.toString());
>>>>> >> > + spec.put("expandChildrenURL",
>>>>> >> expandChildren.toString())
>>>>> >> > + .put( "markExpandedURL",
>>>>> >> markExpanded.toString())
>>>>> >> > + .put("markCollapsedURL",
>>>>> >> markCollapsed.toString());
>>>>> >> >
>>>>> >> > if (expanded)
>>>>> >> > spec.put("expanded", true);
>>>>> >> > + }
>>>>> >> > + else
>>>>> >> > + {
>>>>> >> > + Link toggleLeaf =
>>>>> >> resources.createEventLink("toggleLeaf", node.getId());
>>>>> >> >
>>>>> >> > - jss.addInitializerCall("treeNode", spec);
>>>>> >> > + spec.put("toggleLeafURL", toggleLeaf.toString());
>>>>> >> > }
>>>>> >> >
>>>>> >> > + jss.addInitializerCall("treeNode", spec);
>>>>> >> > +
>>>>> >> > writer.end(); // span.tx-tree-icon
>>>>> >> >
>>>>> >> > // From here on in, we're pushing things onto the
>>>>> queue.
>>>>> >> Remember that
>>>>> >> > @@ -263,6 +264,37 @@ public class Tree
>>>>> >> > return new JSONObject();
>>>>> >> > }
>>>>> >> >
>>>>> >> > + Object onToggleLeaf(String nodeId)
>>>>> >> > + {
>>>>> >> > + TreeNode node = model.getById(nodeId);
>>>>> >> > +
>>>>> >> > + String event;
>>>>> >> > +
>>>>> >> > + if(expansionModel.isSelected(node))
>>>>> >> > + {
>>>>> >> > + expansionModel.unselect(node);
>>>>> >> > +
>>>>> >> > + event = EventConstants.NODE_UNSELECTED;
>>>>> >> > + }
>>>>> >> > + else
>>>>> >> > + {
>>>>> >> > + expansionModel.select(node);
>>>>> >> > +
>>>>> >> > + event = EventConstants.NODE_SELECTED;
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + CaptureResultCallback<Object> callback =
>>>>> >> CaptureResultCallback.create();
>>>>> >> > +
>>>>> >> > + resources.triggerEvent(event, new Object [] { nodeId
},
>>>>> >> callback);
>>>>> >> > +
>>>>> >> > + final Object result = callback.getResult();
>>>>> >> > +
>>>>> >> > + if(result != null)
>>>>> >> > + return result;
>>>>> >> > +
>>>>> >> > + return new JSONObject();
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > public TreeExpansionModel getDefaultTreeExpansionModel()
>>>>> >> > {
>>>>> >> > if (defaultTreeExpansionModel == null)
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/DefaultTreeExpansionModel.java
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/DefaultTreeExpansionModel.java?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/DefaultTreeExpansionModel.java
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/DefaultTreeExpansionModel.java
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -30,34 +30,73 @@ public class DefaultTreeExpansionModel<T
>>>>> >> > {
>>>>> >> > private final Set<String> expandedIds =
>>>>> CollectionFactory.newSet();
>>>>> >> >
>>>>> >> > + private final Set<String> selectedIds =
>>>>> CollectionFactory.newSet();
>>>>> >> > +
>>>>> >> > public boolean isExpanded(TreeNode<T> node)
>>>>> >> > {
>>>>> >> > - assert node != null;
>>>>> >> > -
>>>>> >> > - return expandedIds.contains(node.getId());
>>>>> >> > + return contains(expandedIds, node);
>>>>> >> > }
>>>>> >> >
>>>>> >> > public void markExpanded(TreeNode<T> node)
>>>>> >> > {
>>>>> >> > + add(expandedIds, node);
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + public void markCollapsed(TreeNode<T> node)
>>>>> >> > + {
>>>>> >> > + remove(expandedIds, node);
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + public boolean isSelected(TreeNode<T> node)
>>>>> >> > + {
>>>>> >> > + return contains(selectedIds, node);
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + public void select(TreeNode<T> node)
>>>>> >> > + {
>>>>> >> > + add(selectedIds, node);
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + public void unselect(TreeNode<T> node)
>>>>> >> > + {
>>>>> >> > + remove(selectedIds, node);
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + public void clear()
>>>>> >> > + {
>>>>> >> > + clearSet(expandedIds);
>>>>> >> > +
>>>>> >> > + clearSet(selectedIds);
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + private void add(Set<String> ids, TreeNode<T>
node)
>>>>> >> > + {
>>>>> >> > assert node != null;
>>>>> >> >
>>>>> >> > - if (expandedIds.add(node.getId()))
>>>>> >> > + if (ids.add(node.getId()))
>>>>> >> > markDirty();
>>>>> >> > }
>>>>> >> >
>>>>> >> > - public void markCollapsed(TreeNode<T> node)
>>>>> >> > + private void remove(Set<String> ids, TreeNode<T>
node)
>>>>> >> > {
>>>>> >> > assert node != null;
>>>>> >> >
>>>>> >> > - if (expandedIds.remove(node.getId()))
>>>>> >> > + if (ids.remove(node.getId()))
>>>>> >> > markDirty();
>>>>> >> > }
>>>>> >> >
>>>>> >> > - public void clear()
>>>>> >> > + private boolean contains(Set<String> ids, TreeNode<T>
node)
>>>>> >> > + {
>>>>> >> > + assert node != null;
>>>>> >> > +
>>>>> >> > + return ids.contains(node.getId());
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + private void clearSet(Set<String> set)
>>>>> >> > {
>>>>> >> > - if (!expandedIds.isEmpty())
>>>>> >> > + if (!set.isEmpty())
>>>>> >> > {
>>>>> >> > - expandedIds.clear();
>>>>> >> > + set.clear();
>>>>> >> > markDirty();
>>>>> >> > }
>>>>> >> > }
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/TreeExpansionModel.java
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/TreeExpansionModel.java?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/TreeExpansionModel.java
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/tree/TreeExpansionModel.java
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -42,6 +42,12 @@ public interface TreeExpansionModel<T>
>>>>> >> > /** Marks the node as collapsed (not expanded). */
>>>>> >> > void markCollapsed(TreeNode<T> node);
>>>>> >> >
>>>>> >> > + boolean isSelected(TreeNode<T> node);
>>>>> >> > +
>>>>> >> > + void select(TreeNode<T> node);
>>>>> >> > +
>>>>> >> > + void unselect(TreeNode<T> node);
>>>>> >> > +
>>>>> >> > /** Marks all nodes as collapsed. */
>>>>> >> > void clear();
>>>>> >> > }
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.css
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.css?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.css
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.css
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -51,6 +51,10 @@ SPAN.t-tree-icon.t-leaf-node {
>>>>> >> > background-position: -32px -16px;
>>>>> >> > }
>>>>> >> >
>>>>> >> > +SPAN.t-tree-label.t-selected-leaf-node-label {
>>>>> >> > + font-weight: bold;
>>>>> >> > +}
>>>>> >> > +
>>>>> >> > SPAN.t-tree-icon.t-empty-node {
>>>>> >> > cursor: default;
>>>>> >> > background-position: -32px 0px !important;
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.js
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.js?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.js
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tree.js
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -63,6 +63,8 @@ T5.extendInitializer(function() {
>>>>> >> > function initializer(spec) {
>>>>> >> > var loaded = spec.expanded;
>>>>> >> > var expanded = spec.expanded;
>>>>> >> > + var selected = false;
>>>>> >> > +
>>>>> >> > if (expanded) {
>>>>> >> >
>>>>> $(spec.clientId).addClassName("t-tree-expanded")
>>>>> >> > }
>>>>> >> > @@ -95,16 +97,41 @@ T5.extendInitializer(function() {
>>>>> >> >
>>>>> >> > }
>>>>> >> >
>>>>> >> > + function toggleLeafHandler(reply) {
>>>>> >> > + var response = reply.responseJSON;
>>>>> >> > +
>>>>> >> > + $(spec.clientId).update("");
>>>>> >> > +
>>>>> >> > + Tapestry.loadScriptsInReply(response, function() {
>>>>> >> > + loading = false;
>>>>> >> > + loaded = true;
>>>>> >> > + expanded = true;
>>>>> >> > + selected = !selected;
>>>>> >> > + });
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > function doLoad() {
>>>>> >> > if (loading)
>>>>> >> > return;
>>>>> >> >
>>>>> >> > loading = true;
>>>>> >> >
>>>>> >> > - $(spec.clientId).addClassName("t-empty-node");
>>>>> >> > + if(spec.expandChildrenURL)
>>>>> >> > + {
>>>>> >> > +
>>>>> >> $(spec.clientId).addClassName("t-empty-node");
>>>>> >> > + }
>>>>> >> > + else
>>>>> >> > + {
>>>>> >> > +
>>>>> >>
>>>>>
>>>
> $(spec.clientId).next("span.t-tree-label").addClassName("t-selected-leaf-node-label");
>>>>> >> > + }
>>>>> >> > $(spec.clientId).update("<span
>>>>> >> class='t-ajax-wait'/>");
>>>>> >> >
>>>>> >> > - Tapestry.ajaxRequest(spec.expandChildrenURL,
>>>>> >> successHandler);
>>>>> >> > + var requestURL = spec.expandChildrenURL?
>>>>> >> spec.expandChildrenURL:spec.toggleLeafURL;
>>>>> >> > +
>>>>> >> > + var handler = spec.expandChildrenURL? successHandler:
>>>>> >> toggleLeafHandler;
>>>>> >> > +
>>>>> >> > + Tapestry.ajaxRequest(requestURL, handler);
>>>>> >> > +
>>>>> >> > }
>>>>> >> >
>>>>> >> > $(spec.clientId).observe("click", function(event) {
>>>>> >> > @@ -117,6 +144,25 @@ T5.extendInitializer(function() {
>>>>> >> > return;
>>>>> >> > }
>>>>> >> >
>>>>> >> > + if(spec.toggleLeafURL)
>>>>> >> > + {
>>>>> >> > + var label =
>>>>> $(spec.clientId).next("span.t-tree-label");
>>>>> >> > +
>>>>> >> > + if(selected)
>>>>> >> > + {
>>>>> >> > +
>>>>> label.removeClassName("t-selected-leaf-node-label");
>>>>> >> > + }
>>>>> >> > + else
>>>>> >> > + {
>>>>> >> > +
>>>>> label.addClassName("t-selected-leaf-node-label");
>>>>> >> > + }
>>>>> >> > + selected = !selected;
>>>>> >> > +
>>>>> >> > + Tapestry.ajaxRequest(spec.toggleLeafURL, {});
>>>>> >> > +
>>>>> >> > + return;
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > // Children have been loaded, just a matter of
>>>>> >> toggling
>>>>> >> > // between showing or hiding the children.
>>>>> >> >
>>>>> >> >
>>>>> >> > Modified:
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/TreeTests.groovy
>>>>> >> > URL:
>>>>> >>
>>>>>
>>>
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/TreeTests.groovy?rev=1142070&r1=1142069&r2=1142070&view=diff
>>>>> >> >
>>>>> >>
>>>>>
>>>
> ==============================================================================
>>>>> >> > ---
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/TreeTests.groovy
>>>>> >> (original)
>>>>> >> > +++
>>>>> >>
>>>>>
>>>
> tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/TreeTests.groovy
>>>>> >> Fri Jul 1 20:24:03 2011
>>>>> >> > @@ -19,10 +19,6 @@ import org.testng.annotations.Test
>>>>> >> >
>>>>> >> > class TreeTests extends SeleniumTestCase
>>>>> >> > {
>>>>> >> > - /**
>>>>> >> > - * Haven't figured out how to get Selenium to click the
actual
>>>>> >> elements, never mine
>>>>> >> > - * coordinate the wait for the Ajax. So far its just been
manual
>>>>> >> testing.
>>>>> >> > - */
>>>>> >> > @Test
>>>>> >> > void basics() {
>>>>> >> >
>>>>> >> > @@ -32,20 +28,41 @@ class TreeTests extends SeleniumTestCase
>>>>> >> >
>>>>> >> > clickAndWait "link=clear expansions"
>>>>> >> >
>>>>> >> > - if (false) {
>>>>> >> > - click "//span[@class='t-tree-icon'][2]"
>>>>> >> > + //Click on Games
>>>>> >> > + click "//div[@class='t-tree-container
>>>>> >> test-hook']/ul/li[2]/span[@class='t-tree-icon']"
>>>>> >> >
>>>>> >> > - sleep 100
>>>>> >> > + waitForCSSSelectedElementToAppear "span.t-tree-expanded"
>>>>> >> >
>>>>> >> > - click "//span[@class='t-tree-icon'][3]"
>>>>> >> > + assertTextPresent "Board Games"
>>>>> >> >
>>>>> >> > - sleep 100
>>>>> >> > + //Click on Board Games
>>>>> >> > + click "//div[@class='t-tree-container
>>>>> >> test-hook']/ul/li[2]/ul/li/span[@class='t-tree-icon']"
>>>>> >> >
>>>>> >> > - assertTextPresent "Agricola"
>>>>> >> > + //Assert the leafs are displayed
>>>>> >> > + waitForCondition "window.\$\$(\"span.t-leaf-node\").size()
>=
>>>>> >> 5", "45000"
>>>>> >> >
>>>>> >> > - clickAndWait "link=Redraw"
>>>>> >> > + clickAndWait "link=Redraw"
>>>>> >> >
>>>>> >> > - assertTextPresent "Agricola"
>>>>> >> > - }
>>>>> >> > + assertTextPresent "Settlers of Catan", "Agricola"
>>>>> >> > + }
>>>>> >> > +
>>>>> >> > + @Test
>>>>> >> > + void selectLeaf() {
>>>>> >> > +
>>>>> >> > + openBaseURL()
>>>>> >> > +
>>>>> >> > + clickAndWait "link=Tree Component Demo"
>>>>> >> > +
>>>>> >> > + clickAndWait "link=clear expansions"
>>>>> >> > +
>>>>> >> > + click "//span[@class='t-tree-icon']"
>>>>> >> > +
>>>>> >> > + waitForCSSSelectedElementToAppear "span.t-leaf-node"
>>>>> >> > +
>>>>> >> > + assertTextPresent "Oscar", "Gromit", "Max", "Roger",
"Cooper"
>>>>> >> > +
>>>>> >> > + click "//span[@class='t-tree-icon t-leaf-node']"
>>>>> >> > +
>>>>> >> > + waitForCSSSelectedElementToAppear
>>>>> >> "span.t-selected-leaf-node-label"
>>>>> >> > }
>>>>> >> > }
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> --
>>>>> >> Howard M. Lewis Ship
>>>>> >>
>>>>> >> Creator of Apache Tapestry
>>>>> >>
>>>>> >> The source for Tapestry training, mentoring and support. Contact
me
> to
>>>>> >> learn how I can get you up and productive in Tapestry fast!
>>>>> >>
>>>>> >> (971) 678-5210
>>>>> >> http://howardlewisship.com
>>>>> >>
>>>>> >>
> ---------------------------------------------------------------------
>>>>> >> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>>>>> >> For additional commands, e-mail: dev-help@tapestry.apache.org
>>>>> >>
>>>>> >>
>>>>> >
>>>>> >
>>>>> > --
>>>>> > Best regards,
>>>>> >
>>>>> > Igor Drobiazko
>>>>> > http://tapestry5.de
>>>>> >
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>>>>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Best regards,
>>>>
>>>> Igor Drobiazko
>>>> http://tapestry5.de
>>>
>>
>>
>>
>> --
>> Howard M. Lewis Ship
>>
>> Creator of Apache Tapestry
>>
>> The source for Tapestry training, mentoring and support. Contact me to
>> learn how I can get you up and productive in Tapestry fast!
>>
>> (971) 678-5210
>> http://howardlewisship.com
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>
>



-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message