From c02a0acd4893f04d89b472aa571cea3b571af84a Mon Sep 17 00:00:00 2001 From: jdramaix Date: Fri, 29 Nov 2013 12:30:01 +0100 Subject: test issue 226 --- .../java/com/google/gwt/query/client/GQueryEventsTestGwt.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java index 6795a35d..e3ada526 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java @@ -1595,4 +1595,12 @@ public class GQueryEventsTestGwt extends GWTTestCase { assertEquals(1, handler.invokationCounter); } + + public void testIssue226() { + $(e).html("
"); + GQuery target = $("#target", e); + + // this should not throw a NPE + target.undelegate("li", "click"); + } } -- cgit v1.2.3 From 20a9a202e9e79bb72807ccda0d0526e2200fcf72 Mon Sep 17 00:00:00 2001 From: jdramaix Date: Fri, 29 Nov 2013 12:48:13 +0100 Subject: add test for issue #216 --- .../com/google/gwt/query/client/GQueryCoreTestGwt.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTestGwt.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTestGwt.java index c86b67e4..50f99d6f 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTestGwt.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTestGwt.java @@ -2049,4 +2049,18 @@ public class GQueryCoreTestGwt extends GWTTestCase { assertEquals(ulParentsNumber + 2, result.size()); } + // issue #216 : https://github.com/gwtquery/gwtquery/issues/216 + public void testDataAsInteger() { + $(e).html("
"); + + GQuery target = $("#target", e); + + $("#target", e).data("intValue", new Integer(1)); + + Integer value = $("#target", e).data("intValue", Integer.class); + + assertEquals(1, value.intValue()); + + } + } -- cgit v1.2.3 From 1a3bcc9d8559518872588dda9c80bbbec000ed9f Mon Sep 17 00:00:00 2001 From: jdramaix Date: Fri, 29 Nov 2013 13:08:22 +0100 Subject: fix issue 211 --- gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java | 4 +++- .../com/google/gwt/query/client/plugins/events/EventsListener.java | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java index 479f90ab..75d0c18b 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java @@ -2483,9 +2483,11 @@ public class GQuery implements Lazy { * 'in' to a frequent task. Whenever the mouse cursor is moved over a matched element, the first * specified function is fired. Whenever the mouse moves off of the element, the second specified * function fires. + * + * Since GQuery 1.4.0, this method binds handlers for both mouseenter and mouseleave events. */ public GQuery hover(Function fover, Function fout) { - return bind(Event.ONMOUSEOVER, null, fover).bind(Event.ONMOUSEOUT, null, fout); + return bind("mouseenter", null, fover).bind("mouseleave", null, fout); } /** 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 b8e73ae1..dad7099a 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 @@ -811,5 +811,4 @@ public class EventsListener implements EventListener { function.clean(); } } - } -- cgit v1.2.3 From f7119204c7717ec7f396079df182f111f7f35b2b Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Sat, 30 Nov 2013 12:57:24 +0100 Subject: Adding ability to cache promises. --- .../client/plugins/deferred/FunctionDeferred.java | 73 ++++++++++++++++------ .../gwt/query/client/deferred/DeferredTest.java | 43 +++++++++++++ 2 files changed, 96 insertions(+), 20 deletions(-) diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/deferred/FunctionDeferred.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/deferred/FunctionDeferred.java index 3b40fdce..771749f8 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/deferred/FunctionDeferred.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/deferred/FunctionDeferred.java @@ -21,29 +21,36 @@ import com.google.gwt.query.client.Promise.Deferred; * execution in pipelined processes. * * They have access to the associated deferred object via a method which - * will be called only in the case the previous promise is resolved + * will be called only in the case the previous promise is resolved. + * + * We can reuse the function and it will create new promises or will return + * the last one depending on the value of cache. It is very useful for caching + * server calls which we just want execute once like login, etc. * *
- *    Promise doSomething = new PromiseFunction() {
+ *    Function login = new FunctionDeferred() {
  *      @Override
  *      public void f(Deferred dfd) {
- *        dfd.notify("hi");
- *        dfd.resolve("done");
+ *        dfd.resolve("logged in as james-bond at " + new Date());
  *      }
- *    };
- *    
- *    doSomething.then(new FunctionDeferred() {
- *      public void f(Deferred dfd) {
- *        dfd.resolve("deferred " + arguments(0));
+ *    }.withCache(RESOLVED);
+ *
+ *    when(login)
+ *    .then(new Function() {
+ *      public void f() {
+ *        String loginMessage = arguments(0);
  *      }
  *    });
  * 
*/ public abstract class FunctionDeferred extends Function { - + + public static enum CacheType {NONE, ALL, RESOLVED, REJECTED}; + protected Deferred dfd; public Function resolve, reject; - + private CacheType cache = CacheType.NONE; + /** * This function is called once the the previous promise in the * pipe is resolved, and the new created deferred is available. @@ -51,20 +58,46 @@ public abstract class FunctionDeferred extends Function { * You have to override it, and resolve the new promise */ protected abstract void f(Deferred dfd); - + /** * This function is called when the previous promise in the pipe * is resolved. */ public final Object f(Object... args) { - return new PromiseFunction() { - public void f(Deferred dfd) { - FunctionDeferred.this.resolve = resolve; - FunctionDeferred.this.reject = reject; - FunctionDeferred.this.dfd = dfd; - FunctionDeferred.this.f(dfd); - } - }; + return dfd != null && + (cache == CacheType.ALL || + cache == CacheType.RESOLVED && dfd.promise().isResolved() || + cache == CacheType.REJECTED && dfd.promise().isRejected()) + ? dfd.promise() + : new PromiseFunction() { + public void f(Deferred dfd) { + FunctionDeferred.this.resolve = resolve; + FunctionDeferred.this.reject = reject; + FunctionDeferred.this.dfd = dfd; + FunctionDeferred.this.f(dfd); + } + }; } + /** + * Configure whether cache the promise the first time it is resolved + * or create new promises each time the function is executed. + * + * By default cache is disabled. + */ + public FunctionDeferred withCache(CacheType type) { + cache = type; + return this; + } + + /** + * Reset the cache so as a new invocation to this function will + * execute it instead of restoring old values from cache. + */ + public FunctionDeferred resetCache() { + if (dfd != null && !dfd.promise().isPending()) { + dfd = null; + } + return this; + } } diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java index 45eb6064..9c7f16ef 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java @@ -24,6 +24,7 @@ import com.google.gwt.query.client.GQuery; import com.google.gwt.query.client.Promise.Deferred; import com.google.gwt.query.client.plugins.deferred.Callbacks; import com.google.gwt.query.client.plugins.deferred.Callbacks.Callback; +import com.google.gwt.query.client.plugins.deferred.FunctionDeferred.CacheType; import com.google.gwt.query.client.plugins.deferred.FunctionDeferred; import com.google.gwt.query.client.plugins.deferred.PromiseFunction; @@ -371,4 +372,46 @@ public class DeferredTest extends GWTTestCase { }); } + private Boolean deferredData; + + public void testFunctionDeferredCache() { + + FunctionDeferred cachedFunction = new FunctionDeferred() {protected void f(Deferred dfd) { + dfd.resolve(deferredData); + }}; + + Function setDeferredDataToTrue = new Function(){public void f() { + deferredData = true; + }}; + + Function setDeferredDataToFalse = new Function(){public void f() { + deferredData = false; + }}; + + Function assertDeferredDataIsFalse = new Function(){public void f() { + Boolean data = arguments(0); + assertFalse(data); + }}; + + Function assertDeferredDataIsTrue = new Function(){public void f() { + Boolean data = arguments(0); + assertTrue(data); + }}; + + when(setDeferredDataToTrue, cachedFunction.withCache(CacheType.ALL)) + .always(setDeferredDataToFalse) + .done(assertDeferredDataIsTrue) + .then(cachedFunction) + .done(assertDeferredDataIsTrue) + .then(cachedFunction.withCache(CacheType.REJECTED)) + .done(assertDeferredDataIsFalse) + .always(setDeferredDataToTrue) + .then(cachedFunction.withCache(CacheType.RESOLVED)) + .done(assertDeferredDataIsFalse) + .then(cachedFunction.resetCache()) + .done(assertDeferredDataIsTrue) + .then(cachedFunction) + .done(assertDeferredDataIsTrue) + ; + } } -- cgit v1.2.3 From d1a13c80b3688494f332970bce8783b763de1e2d Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Mon, 2 Dec 2013 11:37:40 +0100 Subject: fixes issue #26 --- .../gwt/query/client/impl/SelectorEngineCssToXPath.java | 15 ++++++++------- .../google/gwt/query/client/GQuerySelectorsTestGwt.java | 16 ++++++++++------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineCssToXPath.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineCssToXPath.java index e5ec73a6..a78c1b5d 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineCssToXPath.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineCssToXPath.java @@ -78,27 +78,29 @@ public class SelectorEngineCssToXPath extends SelectorEngineImpl { String s1 = s.get(1); String s2 = s.get(2); - boolean noPrefix = s1 == null || s1.length() == 0; + boolean afterAttr = "]".equals(s1); + String prefix = afterAttr ? s1 : "*"; + boolean noPrefix = afterAttr || s1 == null || s1.length() == 0 ; if ("n".equals(s2)) { return s1; } if ("even".equals(s2)) { - return "*[position() mod 2=0 and position()>=0]" + (noPrefix ? "" : "/self::" + s1); + return prefix + "[position() mod 2=0 and position()>=0]" + (noPrefix ? "" : "/self::" + s1); } if ("odd".equals(s2)) { - String prefix = noPrefix ? "" : s1; + prefix = afterAttr ? prefix : noPrefix ? "" : s1; return prefix + "[(count(preceding-sibling::*) + 1) mod 2=1]"; } if (!s2.contains("n")){ - return "*[position() = "+s2+"]" + (noPrefix ? "" : "/self::" + s1); + return prefix + "[position() = "+s2+"]" + (noPrefix ? "" : "/self::" + s1); } String[] t = s2.replaceAll("^([0-9]*)n.*?([0-9]*)?$", "$1+$2").split("\\+"); String t0 = t[0]; String t1 = t.length > 1 ? t[1] : "0"; - return "*[(position()-" + t1 + ") mod " + t0 + "=0 and position()>=" + t1 + "]" + (noPrefix ? "" : "/self::" + s1); + return prefix + "[(position()-" + t1 + ") mod " + t0 + "=0 and position()>=" + t1 + "]" + (noPrefix ? "" : "/self::" + s1); } }; @@ -135,7 +137,7 @@ public class SelectorEngineCssToXPath extends SelectorEngineImpl { // :not "(.+):not\\(([^\\)]*)\\)", rc_Not, // :nth-child - "([a-zA-Z0-9\\_\\-\\*]*):nth-child\\(([^\\)]*)\\)", rc_nth_child, + "([a-zA-Z0-9\\_\\-\\*]*|\\]):nth-child\\(([^\\)]*)\\)", rc_nth_child, // :contains(selectors) ":contains\\(([^\\)]*)\\)", "[contains(string(.),'$1')]", // |= attrib @@ -270,5 +272,4 @@ public class SelectorEngineCssToXPath extends SelectorEngineImpl { return elm; } } - } diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTestGwt.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTestGwt.java index efd8953d..08897f56 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTestGwt.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTestGwt.java @@ -15,17 +15,13 @@ */ package com.google.gwt.query.client; -import static com.google.gwt.query.client.GQuery.$; -import static com.google.gwt.query.client.GQuery.body; -import static com.google.gwt.query.client.GQuery.document; +import static com.google.gwt.query.client.GQuery.*; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Node; import com.google.gwt.dom.client.NodeList; -import com.google.gwt.junit.DoNotRunWith; -import com.google.gwt.junit.Platform; import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.query.client.impl.SelectorEngineCssToXPath; import com.google.gwt.query.client.impl.SelectorEngineImpl; @@ -407,7 +403,7 @@ public class GQuerySelectorsTestGwt extends GWTTestCase { public void testOddEvenNthChild(){ $(e).append( - "
branchA target
branchA target
branchA target
branchA target
"); + "
branchA target
branchA target
branchA target
branchA target
"); GQuery odd = $("#parent > div:odd",e); assertEquals(2, odd.size()); @@ -449,6 +445,14 @@ public class GQuerySelectorsTestGwt extends GWTTestCase { assertEquals("second", secondAndFourth.eq(0).attr("id")); assertEquals("fourth", secondAndFourth.eq(1).attr("id")); + // odd and even with attribute filters + secondAndFourth = $("div[role=treeItem]:odd", e); + assertEquals("second", secondAndFourth.eq(0).attr("id")); + assertEquals("fourth", secondAndFourth.eq(1).attr("id")); + + GQuery treeItemFirstAndThird = $("div[role=treeItem]:even", e); + assertEquals("first", treeItemFirstAndThird.eq(0).attr("id")); + assertEquals("third", treeItemFirstAndThird.eq(1).attr("id")); } private void assertArrayContains(Object result, Object... array) { -- cgit v1.2.3 From 73af647e85d7e36d26a3561e37a3f50968f96e8d Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Tue, 3 Dec 2013 09:46:24 +0100 Subject: tests in jvm --- .../java/com/google/gwt/query/client/impl/SelectorEnginesTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/impl/SelectorEnginesTest.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/impl/SelectorEnginesTest.java index 7b8199ee..765dcfab 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/impl/SelectorEnginesTest.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/impl/SelectorEnginesTest.java @@ -77,6 +77,12 @@ public class SelectorEnginesTest extends GWTTestCase { assertEquals(".//div[@class='comment' and (contains(string(.),'John'))]", sel.css2Xpath("div[@class='comment']:contains('John')")); + + assertEquals(".//div[@role='treeItem' and (position() mod 2=0 and position()>=0)]", + sel.css2Xpath("div[role=treeItem]:odd")); + + assertEquals(".//div[@role='treeItem' and ((count(preceding-sibling::*) + 1) mod 2=1)]", + sel.css2Xpath("div[role=treeItem]:even")); } } -- cgit v1.2.3 From fcdc407c7eca342b07c85123d1c5a82441f47550 Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Tue, 3 Dec 2013 09:48:52 +0100 Subject: Formatting --- .../gwt/query/client/deferred/DeferredTest.java | 42 +++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java index 9c7f16ef..096e31bd 100644 --- a/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java +++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/deferred/DeferredTest.java @@ -376,27 +376,37 @@ public class DeferredTest extends GWTTestCase { public void testFunctionDeferredCache() { - FunctionDeferred cachedFunction = new FunctionDeferred() {protected void f(Deferred dfd) { + FunctionDeferred cachedFunction = new FunctionDeferred() { + protected void f(Deferred dfd) { dfd.resolve(deferredData); - }}; + } + }; - Function setDeferredDataToTrue = new Function(){public void f() { - deferredData = true; - }}; + Function setDeferredDataToTrue = new Function(){ + public void f() { + deferredData = true; + } + }; - Function setDeferredDataToFalse = new Function(){public void f() { - deferredData = false; - }}; + Function setDeferredDataToFalse = new Function() { + public void f() { + deferredData = false; + } + }; - Function assertDeferredDataIsFalse = new Function(){public void f() { - Boolean data = arguments(0); - assertFalse(data); - }}; + Function assertDeferredDataIsFalse = new Function() { + public void f() { + Boolean data = arguments(0); + assertFalse(data); + } + }; - Function assertDeferredDataIsTrue = new Function(){public void f() { - Boolean data = arguments(0); - assertTrue(data); - }}; + Function assertDeferredDataIsTrue = new Function() { + public void f() { + Boolean data = arguments(0); + assertTrue(data); + } + }; when(setDeferredDataToTrue, cachedFunction.withCache(CacheType.ALL)) .always(setDeferredDataToFalse) -- cgit v1.2.3 From 4a9488aca04b5212f784e848cc9e2d1083fbe31c Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Thu, 5 Dec 2013 17:46:28 +0100 Subject: Implementation of GQuery.console --- .../main/java/com/google/gwt/query/Query.gwt.xml | 5 + .../java/com/google/gwt/query/QueryMin.gwt.xml | 5 + .../java/com/google/gwt/query/client/Console.java | 96 ++++++++++ .../java/com/google/gwt/query/client/GQuery.java | 12 +- .../gwt/query/client/impl/ConsoleBrowser.java | 205 +++++++++++++++++++++ .../com/google/gwt/query/client/js/JsUtils.java | 12 -- 6 files changed, 316 insertions(+), 19 deletions(-) create mode 100644 gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java create mode 100644 gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/Query.gwt.xml b/gwtquery-core/src/main/java/com/google/gwt/query/Query.gwt.xml index a902fd99..520ceaa0 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/Query.gwt.xml +++ b/gwtquery-core/src/main/java/com/google/gwt/query/Query.gwt.xml @@ -22,6 +22,11 @@ + + + + + diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/QueryMin.gwt.xml b/gwtquery-core/src/main/java/com/google/gwt/query/QueryMin.gwt.xml index c67ec2af..6453aba3 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/QueryMin.gwt.xml +++ b/gwtquery-core/src/main/java/com/google/gwt/query/QueryMin.gwt.xml @@ -52,6 +52,11 @@ + + + + + diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java new file mode 100644 index 00000000..66709908 --- /dev/null +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java @@ -0,0 +1,96 @@ +/* + * Copyright 2013, The gwtquery team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.query.client; + + +/** + * This interface represents the Window.console object. + */ +public interface Console { + + /** + * Displays an interactive listing of the properties of a specified JavaScript object. This + * listing lets you use disclosure triangles to examine the contents of child objects. + */ + void dir(Object arg); + + /** + * Outputs an error message. You may use string substitution and additional arguments with this method. + */ + void error(Object arg); + + /** + * Creates a new inline group, indenting all following output by another level. To move back out a + * level, call groupEnd(). + */ + void group(Object arg); + + /** + * Creates a new inline group, indenting all following output by another level; unlike group(), + * this starts with the inline group collapsed, requiring the use of a disclosure button to expand + * it. To move back out a level, call groupEnd(). + */ + void groupCollapsed(Object arg); + + /** + * Exits the current inline group. + */ + void groupEnd(); + + /** + * Informative logging information. You may use string substitution and additional arguments with + * this method. + */ + void info(Object arg); + + /** + * For general output of logging information. You may use string substitution and additional + * arguments with this method. + */ + void log(Object arg); + + /** + * Starts a JavaScript CPU profile with a name. To complete the profile, call console.profileEnd(). + */ + void profile(String title); + + /** + * Stops the current JavaScript CPU profiling session, if one is in progress, and prints the report. + */ + void profileEnd(String title); + + /** + * Starts a timer with a name specified as an input parameter. Up to 10,000 simultaneous timers + * can run on a given page. + */ + void time(String title); + + /** + * Stops the specified timer and logs the elapsed time in seconds since its start. + */ + void timeEnd(String title); + + /** + * Outputs a timestamp. + */ + void timeStamp(Object arg); + + /** + * Outputs a warning message. You may use string substitution and additional arguments with this + * method. + */ + void warn(Object arg); +} diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java index 75d0c18b..e4f76a35 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java @@ -122,6 +122,11 @@ public class GQuery implements Lazy { */ public static final Browser browser = GWT.isClient() ? GWT.create(Browser.class) : null; + /** + * An object with the same methods than window.console. + */ + public static final Console console = GWT.isClient() ? GWT.create(Console.class) : null; + /** * Object to store element data (public so as we can access to it from tests). */ @@ -702,13 +707,6 @@ public class GQuery implements Lazy { return $().createLazy(); } - /** - * Dump an object to the window.console.log when available - */ - public static void log(Object o) { - JsUtils.log(o); - } - /** * Perform an ajax request to the server using POST. */ diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java new file mode 100644 index 00000000..6f67fd95 --- /dev/null +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java @@ -0,0 +1,205 @@ +/* + * Copyright 2013, The gwtquery team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.query.client.impl; + +import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.query.client.Console; +import com.google.gwt.query.client.GQuery; + +/** + * Implementation of the Console interface based on the + * browser console. + */ +public class ConsoleBrowser implements Console { + + /** + * http://whattheheadsaid.com/2011/04/internet-explorer-9s-problematic-console-object + */ + private static class ConsoleIe8 extends ConsoleIe9 { + @Override + protected native void init()/*-{ + Function.prototype.call.call($wnd.console.log, $wnd.console, Array.prototype.slice.call(arguments)); + }-*/; + } + + /** + * See: http://whattheheadsaid.com/2011/04/internet-explorer-9s-problematic-console-object + */ + private static class ConsoleIe9 extends ConsoleImpl { + public ConsoleIe9(){ + init(); + } + + protected native void init()/*-{ + [ "log", "info", "warn", "error", "dir", "clear", "profile", "profileEnd" ] + .forEach(function(method) { + $wnd.console[method] = this.call($wnd.console[method], $wnd.console); + }, Function.prototype.bind); + }-*/; + + @Override + public void group(Object arg) {} + @Override + public void groupCollapsed(Object arg) {} + @Override + public void groupEnd() {} + @Override + public void time(String title) {} + @Override + public void timeStamp(Object arg) {} + @Override + public void timeEnd(String title) {} + } + + /** + * Default implementation: webkit, opera, FF, ie10 + */ + private static class ConsoleImpl { + public native void dir(Object arg) /*-{ + $wnd.console.dir(arg); + }-*/; + + public native void error(Object arg) /*-{ + $wnd.console.error(arg); + }-*/; + + public native void group(Object arg) /*-{ + $wnd.console.group(arg); + }-*/; + + public native void groupCollapsed(Object arg) /*-{ + $wnd.console.groupCollapsed(arg); + }-*/; + + public native void groupEnd() /*-{ + $wnd.console.groupEnd(); + }-*/; + + public native void info(Object arg) /*-{ + $wnd.console.info(arg); + }-*/; + + public native void log(Object arg) /*-{ + $wnd.console.log(arg); + }-*/; + + public native void profile(String title) /*-{ + $wnd.console.profile(title); + }-*/; + + public native void profileEnd(String title) /*-{ + $wnd.console.profileEnd(title); + }-*/; + + public native void time(String title) /*-{ + $wnd.console.time(title); + }-*/; + + public native void timeEnd(String title) /*-{ + $wnd.console.timeEnd(title); + }-*/; + + public native void timeStamp(Object arg) /*-{ + $wnd.console.timeStamp(arg); + }-*/; + + public native void warn(Object arg) /*-{ + $wnd.console.warn(arg); + }-*/; + } + + private ConsoleImpl impl; + + public ConsoleBrowser() { + impl = GQuery.browser.ie8? new ConsoleIe8(): GQuery.browser.ie9? new ConsoleIe9(): new ConsoleImpl(); + } + + @Override + public void dir(Object arg) { + impl.dir(toJs(arg)); + } + + @Override + public void error(Object arg) { + impl.error(toJs(arg)); + } + + @Override + public void group(Object arg) { + impl.group(toJs(arg)); + } + + @Override + public void groupCollapsed(Object arg) { + impl.groupCollapsed(toJs(arg)); + } + + @Override + public void groupEnd() { + impl.groupEnd(); + } + + @Override + public void info(Object arg) { + impl.info(toJs(arg)); + } + + @Override + public void log(Object arg) { + impl.log(toJs(arg)); + } + + @Override + public void profile(String title) { + impl.profile(title); + } + + @Override + public void profileEnd(String title) { + impl.profileEnd(title); + } + + @Override + public void time(String title) { + impl.time(title); + } + + @Override + public void timeEnd(String title) { + impl.timeEnd(title); + } + + @Override + public void timeStamp(Object arg) { + impl.timeStamp(toJs(arg)); + } + + @Override + public void warn(Object arg) { + impl.warn(toJs(arg)); + } + + /** + * Don't pass GWT Objects to JS methods + */ + private Object toJs(Object arg) { + if (arg instanceof JavaScriptObject || arg instanceof String) { + return arg; + } else { + return String.valueOf(arg); + } + } +} diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsUtils.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsUtils.java index 9790b12f..ecd61d22 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsUtils.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsUtils.java @@ -26,7 +26,6 @@ import com.google.gwt.dom.client.NodeList; import com.google.gwt.query.client.Function; import com.google.gwt.query.client.GQuery; import com.google.gwt.query.client.Properties; -import com.google.gwt.query.client.plugins.ajax.Ajax; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; @@ -520,15 +519,4 @@ public class JsUtils { } return ret; } - - /** - * Dump an object to the browser console. - * - * TODO: enable console in IE8 && IE9 - * http://snipplr.com/view/67830/ - */ - public static native void log(Object o) /*-{ - if ($wnd.console && typeof $wnd.console.log === 'function') $wnd.console.log('' + o); - }-*/; - } -- cgit v1.2.3 From 1d41c7399d8df35d0d16e07eeb44ea832f87f67c Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Thu, 5 Dec 2013 17:55:41 +0100 Subject: update lazy interfaces --- .../src/main/java/com/google/gwt/query/client/LazyGQuery.java | 11 +++++++++++ .../java/com/google/gwt/query/client/plugins/LazyEvents.java | 11 ++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java index da0de164..2d9ce894 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java @@ -22,6 +22,7 @@ import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsArrayMixed; import com.google.gwt.core.client.JsArrayString; +import com.google.gwt.core.client.ScriptInjector; import com.google.gwt.dom.client.*; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.HasCssName; @@ -1116,6 +1117,8 @@ public interface LazyGQuery extends LazyBase{ * 'in' to a frequent task. Whenever the mouse cursor is moved over a matched element, the first * specified function is fired. Whenever the mouse moves off of the element, the second specified * function fires. + * + * Since GQuery 1.4.0, this method binds handlers for both mouseenter and mouseleave events. */ LazyGQuery hover(Function fover, Function fout); @@ -2227,6 +2230,14 @@ public interface LazyGQuery extends LazyBase{ */ LazyGQuery trigger(int eventbits, int... keys); + /** + * Trigger a event in all matched elements. + * + * @param eventName An string representing the type of the event desired + * @param datas Additional parameters to pass along to the event handlers. + */ + LazyGQuery trigger(String eventName, Object... datas); + /** * Removes all events that match the eventbits. */ diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/LazyEvents.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/LazyEvents.java index 741cfb85..c0689af6 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/LazyEvents.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/LazyEvents.java @@ -13,6 +13,7 @@ */ package com.google.gwt.query.client.plugins; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.FormElement; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.Node; import com.google.gwt.query.client.Function; @@ -132,11 +133,19 @@ public interface LazyEvents extends LazyBase{ /** * Trigger a html event in all matched elements. * - * @param htmlEvent An string representing the html event desired + * @param htmlEvent A string representing the desired html event. * @functions a set of function to run if the event is not canceled. */ LazyEvents triggerHtmlEvent(String htmlEvent, Function... functions); + /** + * Trigger a html event in all matched elements. + * + * @param htmlEvent An string representing the desired html event. + * @functions a set of function to run if the event is not canceled. + */ + LazyEvents triggerHtmlEvent(String htmlEvent, Object[] datas, Function... functions); + /** * Removes all handlers, that matches the events bits passed, from each element. * -- cgit v1.2.3 From 8e7e147abfcdc5e3c177be377ff0ac53acf95674 Mon Sep 17 00:00:00 2001 From: Manuel Carrasco Moñino Date: Thu, 5 Dec 2013 18:19:43 +0100 Subject: Adding missing method in console --- .../src/main/java/com/google/gwt/query/client/Console.java | 5 +++++ .../java/com/google/gwt/query/client/impl/ConsoleBrowser.java | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java index 66709908..52c71d35 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/Console.java @@ -21,6 +21,11 @@ package com.google.gwt.query.client; */ public interface Console { + /** + * Clears the console. + */ + void clear(); + /** * Displays an interactive listing of the properties of a specified JavaScript object. This * listing lets you use disclosure triangles to examine the contents of child objects. diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java index 6f67fd95..ec63c852 100644 --- a/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java +++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/impl/ConsoleBrowser.java @@ -68,6 +68,10 @@ public class ConsoleBrowser implements Console { * Default implementation: webkit, opera, FF, ie10 */ private static class ConsoleImpl { + public native void clear() /*-{ + $wnd.console.clear(); + }-*/; + public native void dir(Object arg) /*-{ $wnd.console.dir(arg); }-*/; @@ -126,7 +130,12 @@ public class ConsoleBrowser implements Console { public ConsoleBrowser() { impl = GQuery.browser.ie8? new ConsoleIe8(): GQuery.browser.ie9? new ConsoleIe9(): new ConsoleImpl(); } - + + @Override + public void clear() { + impl.clear(); + } + @Override public void dir(Object arg) { impl.dir(toJs(arg)); -- cgit v1.2.3