Java tutorial
/* * Copyright 2014 Cristian Rinaldi & Andres Testi. * * 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 gwt.material.design.jquery.client.api; /* * #%L * GwtMaterial * %% * Copyright (C) 2015 - 2017 GwtMaterialDesign * %% * 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. * #L% */ import com.google.gwt.core.client.ScriptInjector; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Node; import com.google.gwt.user.client.ui.UIObject; import gwt.material.design.jquery.client.api.Functions.Func; import gwt.material.design.jquery.client.api.Functions.Func2; import gwt.material.design.jquery.client.api.Functions.Func3; import gwt.material.design.jquery.client.api.Functions.FuncRet2; import jsinterop.annotations.JsMethod; import jsinterop.annotations.JsOverlay; import jsinterop.annotations.JsPackage; import jsinterop.annotations.JsType; /** * Represent a JQuery access model. * * @author Ben Dol */ @JsType(isNative = true) public class JQuery { @JsOverlay public static Element window() { return ScriptInjector.TOP_WINDOW.cast(); } // Plain Object Query @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Object plainObject); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Object plainObject, Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Object plainObject, gwt.material.design.jscore.client.api.core.Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Object plainObject, JQueryElement context); @JsOverlay public static JQueryElement $(Object plainObject, UIObject context) { return $(plainObject, context.getElement()); } // String Selector Query @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(String selector); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(String selector, Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(String selector, gwt.material.design.jscore.client.api.core.Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(String selector, JQueryElement context); @JsOverlay public static JQueryElement $(String selector, UIObject context) { return $(selector, context.getElement()); } // JQueryElement Query @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(JQueryElement element); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(JQueryElement element, Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(JQueryElement element, gwt.material.design.jscore.client.api.core.Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(JQueryElement element, JQueryElement context); @JsOverlay public static JQueryElement $(JQueryElement element, UIObject context) { return $(element, context.getElement()); } // Element Query @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Element element); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Element element, Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Element element, gwt.material.design.jscore.client.api.core.Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Element element, JQueryElement context); @JsOverlay public static JQueryElement $(Element element, UIObject context) { return $(element, context.getElement()); } // Node Query @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Node element); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Node element, Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Node element, gwt.material.design.jscore.client.api.core.Element context); @JsMethod(namespace = JsPackage.GLOBAL) public static native JQueryElement $(Node element, JQueryElement context); @JsOverlay public static JQueryElement $(Node element, UIObject context) { return $(element, context.getElement()); } // Generic UIObject Query @JsOverlay @SuppressWarnings("unchecked") public static <T extends UIObject> JQueryElement $(T uiObject) { return $(uiObject.getElement()); } @JsOverlay @SuppressWarnings("unchecked") public static <T extends UIObject> JQueryElement $(T uiObject, Element context) { return $(uiObject.getElement(), context); } @JsOverlay @SuppressWarnings("unchecked") public static <T extends UIObject> JQueryElement $(T uiObject, gwt.material.design.jscore.client.api.core.Element context) { return $(uiObject.getElement(), context); } @JsOverlay @SuppressWarnings("unchecked") public static <T extends UIObject> JQueryElement $(T uiObject, JQueryElement context) { return $(uiObject.getElement(), context); } @JsOverlay @SuppressWarnings("unchecked") public static <T extends UIObject> JQueryElement $(T uiObject, UIObject context) { return $(uiObject.getElement(), context.getElement()); } // JQuery Global Functions /** * Get arbitrary data associated with the element. * @return self {@link JQueryElement} */ @JsMethod(namespace = "$") public static native JQueryElement _data(JQueryElement element, String key); /** * Check to see if a DOM element is a descendant of another DOM element. * @param container The DOM element that may contain the other element. * @param contained The DOM element that may be contained by (a descendant of) the other element. * @return returns true if the DOM element provided by the second argument is a descendant of the DOM * element provided by the first argument, whether it is a direct child or nested more deeply */ @JsMethod(namespace = "$") public static native boolean contains(Element container, Element contained); /** * Execute the next function on the queue for the matched element. * @param element A DOM element from which to remove and execute a queued function. */ @JsMethod(namespace = "$") public static native void dequeue(Element element); /** * Execute the next function on the queue for the matched element. * @param element A DOM element from which to remove and execute a queued function. * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue. */ @JsMethod(namespace = "$") public static native void dequeue(Element element, String queueName); /** * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. * Arrays and array-like objects with a length property (such as a function's arguments object) are * iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. * @param array The array to iterate over. * @param callback The function that will be executed on every object. */ @JsMethod(namespace = "$") public static native Object each(Object[] array, Func2<Integer, Object> callback); /** * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. * Arrays and array-like objects with a length property (such as a function's arguments object) are * iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. * @param object The object to iterate over. * @param callback The function that will be executed on every object. */ @JsMethod(namespace = "$") public static native Object each(Object object, Func2<Integer, Object> callback); /** * Takes a string and throws an exception containing it. * @param message The message to send out. */ @JsMethod(namespace = "$") public static native void error(String message); /** * Load JSON-encoded data from the server using a GET HTTP request. * @param url A string containing the URL to which the request is sent. */ @JsMethod(namespace = "$") public static native Object getJSON(String url); /** * Load JSON-encoded data from the server using a GET HTTP request. * @param url A string containing the URL to which the request is sent. * @param success A callback function that is executed if the request succeeds. */ @JsMethod(namespace = "$") public static native Object getJSON(String url, Func3<Object, String, Object> success); /** * Load JSON-encoded data from the server using a GET HTTP request. * @param url A string containing the URL to which the request is sent. * @param data A plain object or string that is sent to the server with the request. */ @JsMethod(namespace = "$") public static native Object getJSON(String url, String data); /** * Load JSON-encoded data from the server using a GET HTTP request. * @param url A string containing the URL to which the request is sent. * @param data A plain object or string that is sent to the server with the request. * @param success A callback function that is executed if the request succeeds. */ @JsMethod(namespace = "$") public static native Object getJSON(String url, String data, Func3<Object, String, Object> success); /** * Load a JavaScript file from the server using a GET HTTP request, then execute it. * @param url A string containing the URL to which the request is sent. */ @JsMethod(namespace = "$") public static native Object getScript(String url); /** * Load a JavaScript file from the server using a GET HTTP request, then execute it. * @param url A string containing the URL to which the request is sent. * @param success A callback function that is executed if the request succeeds. */ @JsMethod(namespace = "$") public static native Object getScript(String url, Func3<Object, String, Object> success); /** * Execute some JavaScript code globally. * @param code The JavaScript code to execute. */ @JsMethod(namespace = "$") public static native void globalEval(String code); /** * Finds the elements of an array which satisfy a filter function. The original array is not affected. * @param array The array-like object to search through. * @param function The function to process each item against. The first argument to the function is the * item, and the second argument is the index. The function should return a Boolean value. * this will be the global window object. * @return an array of objects */ @JsMethod(namespace = "$") public static native Object[] grep(Object[] array, FuncRet2<Object, Integer> function); /** * Finds the elements of an array which satisfy a filter function. The original array is not affected. * @param array The array-like object to search through. * @param function The function to process each item against. The first argument to the function is the * item, and the second argument is the index. The function should return a Boolean value. * this will be the global window object. * @param invert If "invert" is false, or not provided, then the function returns an array consisting of * all elements for which "callback" returns true. If "invert" is true, then the function * returns an array consisting of all elements for which "callback" returns false. * @return an array of objects */ @JsMethod(namespace = "$") public static native Object[] grep(Object[] array, FuncRet2<Object, Integer> function, boolean invert); /** * Determine whether an element has any jQuery data associated with it. * @param element A DOM element to be checked for data. * @return If no data is associated with an element (there is no data object at all or the data * object is empty), the method returns false; otherwise it returns true. */ @JsMethod(namespace = "$") public static native boolean hasData(Element element); /** * Holds or releases the execution of jQuery's ready event. * @param hold Indicates whether the ready hold is being requested or released */ @JsMethod(namespace = "$") public static native void holdReady(boolean hold); /** * Search for a specified value within an array and return its index (or -1 if not found). * @param value The value to search for. * @param array An array through which to search. * @return similar to JavaScript's native .indexOf() method in that it returns -1 when it doesn't * find a match. If the first element within the array matches value, $.inArray() returns 0. */ @JsMethod(namespace = "$") public static native int inArray(Object value, Object[] array); /** * Search for a specified value within an array and return its index (or -1 if not found). * @param value The value to search for. * @param array An array through which to search. * @param fromIndex The index of the array at which to begin the search. The default is 0, * which will search the whole array. * @return similar to JavaScript's native .indexOf() method in that it returns -1 when it doesn't * find a match. If the first element within the array matches value, $.inArray() returns 0. */ @JsMethod(namespace = "$") public static native int inArray(Object value, Object[] array, double fromIndex); /** * Determine whether the argument is an array. * @param obj Object to test whether or not it is an array. * @return returns a Boolean indicating whether the object is a JavaScript * array (not an array-like object, such as a jQuery object). */ @JsMethod(namespace = "$") public static native boolean isArray(Object obj); /** * Check to see if an object is empty (contains no enumerable properties). * @param obj The object that will be checked to see if it's empty. */ @JsMethod(namespace = "$") public static native boolean isEmptyObject(Object obj); /** * Determine if the argument passed is a JavaScript function object. * @param obj Object to test whether or not it is a function. */ @JsMethod(namespace = "$") public static native boolean isFunction(Object obj); /** * Determines whether its argument is a number. * @param value The value to be tested. * @return The $.isNumeric() method checks whether its argument represents a numeric value. * If so, it returns true. Otherwise it returns false. The argument can be of any type. */ @JsMethod(namespace = "$") public static native boolean isNumeric(Object value); /** * Check to see if an object is a plain object (created using "{}" or "new Object"). * @param object The object that will be checked to see if it's a plain object. */ @JsMethod(namespace = "$") public static native boolean isPlainObject(Object object); /** * Determine whether the argument is a window. This is used in a number of places in * jQuery to determine if we're operating against a browser window * (such as the current window or an iframe). * @param object Object to test whether or not it is a window. */ @JsMethod(namespace = "$") public static native boolean isWindow(Object object); /** * Check to see if a DOM node is within an XML document (or is an XML document). * @param node The DOM node that will be checked to see if it's in an XML document. */ @JsMethod(namespace = "$") public static native boolean isXMLDoc(Element node); /** * Convert an array-like object into a true JavaScript array. * @param object Any object to turn into a native Array. */ @JsMethod(namespace = "$") public static native Object[] makeArray(Object object); /** * Translate all items in an array or object to new array of items. * @param array The Array to translate. * @param callback The function to process each item against. The first argument to the * function is the array item, the second argument is the index in array * The function can return any value. A returned array will be flattened * into the resulting array. Within the function, this refers to the global * (window) object. Must return an Object type. * @return The final mapped array. */ @JsMethod(namespace = "$") public static native Object[] map(Object[] array, FuncRet2<Object, Integer> callback); /** * Translate all items in an array or object to new array of items. * @param object The Object to translate. * @param callback The function to process each item against. The first argument to the * function is the array item, the second argument is the index in array * The function can return any value. A returned array will be flattened * into the resulting array. Within the function, this refers to the global * (window) object. Must return an Object type. * @return The final mapped array. */ @JsMethod(namespace = "$") public static native Object[] map(Object object, FuncRet2<Object, Integer> callback); /** * Merge the contents of two arrays together into the first array. * @param first The first array-like object to merge, the elements of second added. * @param second The second array-like object to merge into the first, unaltered. * @return The final merged array. */ @JsMethod(namespace = "$") public static native Object[] merge(Object[] first, Object[] second); /** * Relinquish jQuery's control of the $ variable. * @param removeAll A Boolean indicating whether to remove all jQuery variables from the * global scope (including jQuery itself). */ @JsMethod(namespace = "$") public static native Object noConflict(boolean removeAll); /** * An empty function. */ @JsMethod(namespace = "$") public static native void noop(); /** * Return a number representing the current time. * The $.now() method is a shorthand for the number returned by the expression * (new Date).getTime(). */ @JsMethod(namespace = "$") public static native double now(); /** * Create a serialized representation of an array, a plain object, or a jQuery object suitable * for use in a URL query string or Ajax request. In case a jQuery object is passed, it should * contain input elements with name/value properties. * @param obj An array to serialize. * @return Serialized object result. */ @JsMethod(namespace = "$") public static native String param(Object[] obj); /** * Create a serialized representation of an array, a plain object, or a jQuery object suitable * for use in a URL query string or Ajax request. In case a jQuery object is passed, it should * contain input elements with name/value properties. * @param obj An object to serialize. * @return Serialized object result. */ @JsMethod(namespace = "$") public static native String param(Object obj); /** * Create a serialized representation of an array, a plain object, or a jQuery object suitable * for use in a URL query string or Ajax request. In case a jQuery object is passed, it should * contain input elements with name/value properties. * @param obj A jQuery element to serialize. * @return Serialized object result. */ @JsMethod(namespace = "$") public static native String param(JQueryElement obj); /** * Create a serialized representation of an array, a plain object, or a jQuery object suitable * for use in a URL query string or Ajax request. In case a jQuery object is passed, it should * contain input elements with name/value properties. * @param obj An array to serialize. * @param traditional A Boolean indicating whether to perform a traditional "shallow" serialization. * @return Serialized object result. */ @JsMethod(namespace = "$") public static native String param(Object[] obj, boolean traditional); /** * Create a serialized representation of an array, a plain object, or a jQuery object suitable * for use in a URL query string or Ajax request. In case a jQuery object is passed, it should * contain input elements with name/value properties. * @param obj An object to serialize. * @param traditional A Boolean indicating whether to perform a traditional "shallow" serialization. * @return Serialized object result. */ @JsMethod(namespace = "$") public static native String param(Object obj, boolean traditional); /** * Create a serialized representation of an array, a plain object, or a jQuery object suitable * for use in a URL query string or Ajax request. In case a jQuery object is passed, it should * contain input elements with name/value properties. * @param obj A jQuery element to serialize. * @param traditional A Boolean indicating whether to perform a traditional "shallow" serialization. * @return Serialized object result. */ @JsMethod(namespace = "$") public static native String param(JQueryElement obj, boolean traditional); /** * Parses a string into an array of DOM nodes. * @param data HTML string to be parsed * @return Array of DOM nodes from parsed HTML string. */ @JsMethod(namespace = "$") public static native Object[] parseHTML(String data); /** * Parses a string into an array of DOM nodes. * @param data HTML string to be parsed * @param context Document element to serve as the context in which the HTML fragment will be created * @return Array of DOM nodes from parsed HTML string. */ @JsMethod(namespace = "$") public static native Object[] parseHTML(String data, Element context); /** * Parses a string into an array of DOM nodes. * @param data HTML string to be parsed * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string * @return Array of DOM nodes from parsed HTML string. */ @JsMethod(namespace = "$") public static native Object[] parseHTML(String data, boolean keepScripts); /** * Parses a string into an array of DOM nodes. * @param data HTML string to be parsed * @param context Document element to serve as the context in which the HTML fragment will be created * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string * @return Array of DOM nodes from parsed HTML string. */ @JsMethod(namespace = "$") public static native Object[] parseHTML(String data, Element context, boolean keepScripts); /** * Takes a well-formed JSON string and returns the resulting JavaScript value. * @param json The JSON string to parse. * @return String, Number, Object, Array or Boolean. */ @JsMethod(namespace = "$") public static native Object parseJSON(String json); /** * Parses a string into an XML document. * @param data a well-formed XML string to be parsed * @return XMLDocument */ @JsMethod(namespace = "$") public static native Object parseXML(String data); /** * Load data from the server using a HTTP POST request. * @param url A string containing the URL to which the request is sent. */ @JsMethod(namespace = "$") public static native Object post(String url); /** * Load data from the server using a HTTP POST request. * @param url A string containing the URL to which the request is sent. * @param data A plain object or string that is sent to the server with the request. */ @JsMethod(namespace = "$") public static native Object post(String url, String data); /** * Load data from the server using a HTTP POST request. * @param url A string containing the URL to which the request is sent. * @param data A plain object or string that is sent to the server with the request. * @param success A callback function that is executed if the request succeeds. Required if * dataType is provided, but can be null in that case. */ @JsMethod(namespace = "$") public static native Object post(String url, String data, Func3<Object, String, Object> success); /** * Load data from the server using a HTTP POST request. * @param url A string containing the URL to which the request is sent. * @param data A plain object or string that is sent to the server with the request. * @param success A callback function that is executed if the request succeeds. Required if * dataType is provided, but can be null in that case. * @param dataType The type of data expected from the server. Default: Intelligent Guess * (xml, json, script, text, html). */ @JsMethod(namespace = "$") public static native Object post(String url, String data, Func3<Object, String, Object> success, String dataType); /** * Load data from the server using a HTTP POST request. * @param settings A set of key/value pairs that configure the Ajax request. All properties * except for url are optional. A default can be set for any option with * $.ajaxSetup(). See jQuery.ajax( settings ) for a complete list of all * settings. Type will automatically be set to POST. */ @JsMethod(namespace = "$") public static native Object post(Object settings); /** * Takes a function and returns a new one that will always have a particular context. * @param function The function whose context will be changed. * @param context The object to which the context (this) of the function should be set. * @return The new function proxied. */ @JsMethod(namespace = "$") public static native Func proxy(Func function, Object context); /** * Takes a function and returns a new one that will always have a particular context. * @param function The function whose context will be changed. * @param context The object to which the context (this) of the function should be set. * @param additionalArguments Any number of arguments to be passed to the function referenced * in the function argument. * @return The new function proxied. */ @JsMethod(namespace = "$") public static native Func proxy(Func function, Object context, Object... additionalArguments); /** * Takes a function and returns a new one that will always have a particular context. * @param context The object to which the context of the function should be set. * @param name The name of the function whose context will be changed (should be a property * of the context object). * @return The new function proxied. */ @JsMethod(namespace = "$") public static native Func proxy(Object context, String name); /** * Takes a function and returns a new one that will always have a particular context. * @param context The object to which the context of the function should be set. * @param name The name of the function whose context will be changed (should be a property * of the context object). * @param additionalArguments Any number of arguments to be passed to the function referenced * in the function argument. * @return The new function proxied. */ @JsMethod(namespace = "$") public static native Func proxy(Object context, String name, Object... additionalArguments); /** * Remove a previously-stored piece of data. * @param element A DOM element from which to remove data. */ @JsMethod(namespace = "$") public static native JQueryElement removeData(Element element); /** * Remove a previously-stored piece of data. * @param element A DOM element from which to remove data. * @param name A string naming the piece of data to remove. */ @JsMethod(namespace = "$") public static native JQueryElement removeData(Element element, String name); /** * Remove the whitespace from the beginning and end of a string. * @param str The string to trim. */ @JsMethod(namespace = "$") public static native String trim(String str); /** * Determine the internal JavaScript [[Class]] of an object. * @param obj Object to get the internal JavaScript [[Class]] of. */ @JsMethod(namespace = "$") public static native String type(Object obj); /** * Sorts an array of DOM elements, in place, with the duplicates removed. Note that * this only works on arrays of DOM elements, not strings or numbers. * @param array The Array of DOM elements. */ @JsMethod(namespace = "$") public static native Element[] unique(Element[] array); }