From 884d59d616c28f0887e31918f19c393a04734423 Mon Sep 17 00:00:00 2001 From: Manolo Carrasco Date: Fri, 15 Jul 2011 19:51:41 +0000 Subject: [PATCH] Filter selectors before sending them to the closed method. It improves a bit performance --- .../client/plugins/events/EventsListener.java | 48 ++++++++++++------- gwtquery-core/upload_sonatype.sh | 20 ++++++++ pom.xml | 2 +- 3 files changed, 52 insertions(+), 18 deletions(-) create mode 100644 gwtquery-core/upload_sonatype.sh diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java index 486a827d..63e86284 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java @@ -17,6 +17,9 @@ package com.google.gwt.query.client.plugins.events; import static com.google.gwt.query.client.GQuery.$; +import java.util.ArrayList; +import java.util.List; + import com.google.gwt.core.client.Duration; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; @@ -120,8 +123,6 @@ public class EventsListener implements EventListener { return true; } - String[] selectors = bindFunctionBySelector.keys(); - // first element where the event was fired Element eventTarget = getEventTarget(event); // last element where the event was dispatched on @@ -131,31 +132,44 @@ public class EventsListener implements EventListener { return true; } - JsNamedArray> realCurrentTargetBySelector = $(eventTarget).closest( - selectors, liveContextElement); - - // nothing match the selectors + // Compute the live selectors which respond to this event type + List validSelectors = new ArrayList(); + for (String cssSelector : bindFunctionBySelector.keys()) { + JsObjectArray bindFunctions = bindFunctionBySelector.get(cssSelector); + for (int i = 0; bindFunctions != null && i < bindFunctions.length(); i++) { + BindFunction f = bindFunctions.get(i); + if (f.hasEventType(event.getTypeInt())) { + validSelectors.add(cssSelector); + break; + } + } + } + + // Create a structure of elements which matches the selectors + JsNamedArray> realCurrentTargetBySelector = + $(eventTarget).closest(validSelectors.toArray(new String[0]), liveContextElement); + // nothing matches the selectors if (realCurrentTargetBySelector.length() == 0) { return true; } boolean result = true; - GqEvent gqEvent = GqEvent.create(event); - for (String cssSelector : realCurrentTargetBySelector.keys()) { JsObjectArray bindFunctions = bindFunctionBySelector.get(cssSelector); for (int i = 0; bindFunctions != null && i < bindFunctions.length(); i++) { BindFunction f = bindFunctions.get(i); - NodeList n = realCurrentTargetBySelector.get(cssSelector); - for (int j = 0; n != null && j < n.getLength(); j++) { - Element element = n.getItem(j); - gqEvent.setCurrentElementTarget(element); - boolean subResult = f.fire(gqEvent); - result &= subResult; - if (!subResult) { - // Event should not continue to be bubbled, break the second for - break; + if (f.hasEventType(event.getTypeInt())) { + NodeList n = realCurrentTargetBySelector.get(cssSelector); + for (int j = 0; n != null && j < n.getLength(); j++) { + Element element = n.getItem(i); + gqEvent.setCurrentElementTarget(element); + boolean subResult = f.fire(gqEvent); + result &= subResult; + if (!subResult) { + // Event should not continue to be bubbled, break the second for + break; + } } } } diff --git a/gwtquery-core/upload_sonatype.sh b/gwtquery-core/upload_sonatype.sh new file mode 100644 index 00000000..3d31e26d --- /dev/null +++ b/gwtquery-core/upload_sonatype.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +v=`cat pom.xml | head -15 | grep "" | head -1 | cut -d ">" -f2 | cut -d "<" -f1` +[ -z "$v" ] && exit + +mvn clean package -Dmaven.test.skip javadoc:jar source:jar + +for i in "" sources javadoc +do + [ -n "$i" ] && c="-Dclassifier=$i" || c="" + mvn gpg:sign-and-deploy-file \ + -Dfile=target/gwtquery-$v-$i.jar \ + -DrepositoryId=sonatype-nexus-staging \ + -Durl=http://oss.sonatype.org/service/local/staging/deploy/maven2 \ + -Dpackaging=jar \ + -DartifactId=gwtquery \ + -DgroupId=com.googlecode.gwtquery \ + -Dversion=$v \ + -DpomFile=pom.xml $c || exit +done diff --git a/pom.xml b/pom.xml index 9d82d9cf..e2e9a5bc 100644 --- a/pom.xml +++ b/pom.xml @@ -65,8 +65,8 @@ -