001package org.gwtbootstrap3.extras.notify.client.ui;
002
003/*
004 * #%L
005 * GwtBootstrap3
006 * %%
007 * Copyright (C) 2013 - 2015 GwtBootstrap3
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023import org.gwtbootstrap3.client.ui.constants.IconType;
024import org.gwtbootstrap3.client.ui.constants.Styles;
025import org.gwtbootstrap3.extras.notify.client.constants.NotifyPlacement;
026import org.gwtbootstrap3.extras.notify.client.constants.NotifyType;
027
028import com.google.gwt.core.client.JavaScriptObject;
029
030/**
031 * This class represent instance of displayed Notify.
032 * <p/>
033 * You can display new Notify using static methods, e.g.:
034 * {@link #notify(String)},
035 * {@link #notify(String, NotifyType)},
036 * {@link #notify(String, NotifySettings)} and others
037 * <p/>
038 * To further configure Notify before displaying see:
039 * {@see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings}
040 * <p/>
041 * You can update displayed Notify by:
042 * {@link #updateTitle(String)},
043 * {@link #updateMessage(String)},
044 * {@link #updateIcon(String)},
045 * {@link #updateType(NotifyType)},
046 * <p/>
047 * You can hide displayed Notify:
048 * {@link #hide()},
049 * {@link #hideAll()},
050 * {@link #hideAll(NotifyPlacement)}
051 *
052 * @author jeffisenhart
053 * @author Sven Jacobs
054 * @author Joshua Godi
055 * @author Pavel Zlámal
056 */
057public class Notify extends JavaScriptObject {
058
059    protected Notify() {
060    }
061
062    /**
063     * Display Notify with custom message, and default settings.
064     *
065     * @param message Message to set
066     * @return Displayed Notify for update or hiding.
067     */
068    public static final native Notify notify(final String message) /*-{
069        return $wnd.jQuery.notify({ message: message }, null);
070    }-*/;
071
072    /**
073     * Display Notify with custom title, message, and default settings.
074     *
075     * @param title   Title to set
076     * @param message Message to set
077     * @return Displayed Notify for update or hiding.
078     */
079    public static final native Notify notify(final String title, final String message) /*-{
080        return $wnd.jQuery.notify({ title: title, message: message }, null);
081    }-*/;
082
083    /**
084     * Display Notify with custom title, message, icon, and default settings.
085     *
086     * @param title   Title to set
087     * @param message Message to set
088     * @param icon    Icon to set
089     * @return Displayed Notify for update or hiding.
090     */
091    public static final native Notify notify(final String title, final String message, final String icon) /*-{
092        return $wnd.jQuery.notify({ title: title, message: message, icon: icon }, null);
093    }-*/;
094
095    /**
096     * Display Notify with custom title, message, icon, and default settings.
097     *
098     * @param title    Title to set
099     * @param message  Message to set
100     * @param iconType IconType to set
101     * @return Displayed Notify for update or hiding.
102     */
103    public static final Notify notify(final String title, final String message, final IconType iconType) {
104        return Notify.notify(title, message, Styles.FONT_AWESOME_BASE + " " + iconType.getCssName());
105    }
106
107    /**
108     * Display Notify with custom title, message, icon, URL, and default settings.
109     *
110     * @param title   Title to set
111     * @param message Message to set
112     * @param icon    IconType to set
113     * @param url     Url to set
114     * @return Displayed Notify for update or hiding.
115     */
116    public static final native Notify notify(final String title, final String message, final String icon, final String url) /*-{
117        return $wnd.jQuery.notify({ title: title, message: message, icon: icon, url: url }, null);
118    }-*/;
119
120    /**
121     * Display Notify with custom title, message, icon, url and default settings.
122     *
123     * @param title    Title to set
124     * @param message  Message to set
125     * @param iconType IconType to set
126     * @param url      Url to set
127     * @return Displayed Notify for update or hiding.
128     */
129    public static final Notify notify(final String title, final String message, final IconType iconType, final String url) {
130        return Notify.notify(title, message, Styles.FONT_AWESOME_BASE + " " + iconType.getCssName(), url);
131    }
132
133    /**
134     * Display Notify with custom message, type and default settings.
135     *
136     * @param message Message to set
137     * @param type    NotifyType
138     * @return Displayed Notify for update or hiding.
139     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
140     */
141    public static final native Notify notify(final String message, final NotifyType type) /*-{
142        return $wnd.jQuery.notify({ message: message }, { type: type.@org.gwtbootstrap3.extras.notify.client.constants.NotifyType::getCssName()() });
143    }-*/;
144
145    /**
146     * Display Notify with custom title, message, type and default settings.
147     *
148     * @param title   Title to set
149     * @param message Message to set
150     * @param type    NotifyType
151     * @return Displayed Notify for update or hiding.
152     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
153     */
154    public static final native Notify notify(final String title, final String message, final NotifyType type) /*-{
155        return $wnd.jQuery.notify({ title: title, message: message }, { type: type.@org.gwtbootstrap3.extras.notify.client.constants.NotifyType::getCssName()() });
156    }-*/;
157
158    /**
159     * Display Notify with custom title, message, icon, type and default settings.
160     *
161     * @param title   Title to set
162     * @param message Message to set
163     * @param icon    Icon to set
164     * @param type    NotifyType
165     * @return Displayed Notify for update or hiding.
166     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
167     */
168    public static final native Notify notify(final String title, final String message, final String icon, final NotifyType type) /*-{
169        return $wnd.jQuery.notify({ title: title, message: message, icon: icon }, { type: type.@org.gwtbootstrap3.extras.notify.client.constants.NotifyType::getCssName()() });
170    }-*/;
171
172    /**
173     * Display Notify with custom title, message, icon, type and default settings.
174     *
175     * @param title    Title to set
176     * @param message  Message to set
177     * @param iconType IconType to set (css name of icon form FONT AWESOME)
178     * @param type     NotifyType
179     * @return Displayed Notify for update or hiding.
180     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
181     */
182    public static final Notify notify(final String title, final String message, final IconType iconType, final NotifyType type) {
183        return Notify.notify(title, message, Styles.FONT_AWESOME_BASE + " " + iconType.getCssName(), type);
184    }
185
186    /**
187     * Display Notify with custom title, message, icon, url, type and default settings.
188     *
189     * @param title   Title to set
190     * @param message Message to set
191     * @param icon    Icon to set
192     * @param url     Url to set
193     * @param type    NotifyType
194     * @return Displayed Notify for update or hiding.
195     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
196     */
197    public static final native Notify notify(final String title, final String message, final String icon, final String url, final NotifyType type) /*-{
198        return $wnd.jQuery.notify({ title: title, message: message, icon: icon, url: url }, { type: type.@org.gwtbootstrap3.extras.notify.client.constants.NotifyType::getCssName()() });
199    }-*/;
200
201    /**
202     * Display Notify with custom title, message, icon, url, type and default settings.
203     *
204     * @param title    Title to set
205     * @param message  Message to set
206     * @param iconType IconType to set (css name of icon form FONT AWESOME)
207     * @param url      Url to set
208     * @param type     NotifyType
209     * @return Displayed Notify for update or hiding.
210     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
211     */
212    public static final Notify notify(final String title, final String message, final IconType iconType, final String url, final NotifyType type) {
213        return Notify.notify(title, message, Styles.FONT_AWESOME_BASE + " " + iconType.getCssName(), url, type);
214    }
215
216    /**
217     * Display Notify with custom message and custom settings.
218     *
219     * @param message Message to set
220     * @param settings custom settings
221     * @return Displayed Notify for update or hiding.
222     * @see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings
223     */
224    public static final native Notify notify(final String message, final NotifySettings settings) /*-{
225        return $wnd.jQuery.notify({ message: message }, settings);
226    }-*/;
227
228    /**
229     * Display Notify with custom title, message and custom settings.
230     *
231     * @param title   Title to set
232     * @param message Message to set
233     * @param settings custom settings
234     * @return Displayed Notify for update or hiding.
235     * @see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings
236     */
237    public static final native Notify notify(final String title, final String message, final NotifySettings settings) /*-{
238        return $wnd.jQuery.notify({ title: title, message: message }, settings);
239    }-*/;
240
241    /**
242     * Display Notify with custom title, message, icon and custom settings.
243     *
244     * @param title   Title to set
245     * @param message Message to set
246     * @param icon    Icon to set
247     * @param settings custom settings
248     * @return Displayed Notify for update or hiding.
249     * @see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings
250     */
251    public static final native Notify notify(final String title, final String message, final String icon, final NotifySettings settings) /*-{
252        return $wnd.jQuery.notify({ title: title, message: message, icon: icon }, settings);
253    }-*/;
254
255    /**
256     * Display Notify with custom title, message, icon and custom settings.
257     *
258     * @param title    Title to set
259     * @param message  Message to set
260     * @param iconType IconType to set (css name of icon form FONT AWESOME)
261     * @param settings  custom settings
262     * @return Displayed Notify for update or hiding.
263     * @see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings
264     */
265    public static final Notify notify(final String title, final String message, final IconType iconType, final NotifySettings settings) {
266        return Notify.notify(title, message, Styles.FONT_AWESOME_BASE + " " + iconType.getCssName(), settings);
267    }
268
269    /**
270     * Display Notify with custom title, message, icon, URL and custom settings.
271     *
272     * @param title   Title to set
273     * @param message Message to set
274     * @param icon    Icon to set
275     * @param url     Url to set
276     * @param settings custom settings
277     * @return Displayed Notify for update or hiding.
278     * @see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings
279     */
280    public static final native Notify notify(final String title, final String message, final String icon, final String url, final NotifySettings settings) /*-{
281        return $wnd.jQuery.notify({ title: title, message: message, icon: icon, url: url}, settings);
282    }-*/;
283
284    /**
285     * Display Notify with custom title, message, icon, URL and custom settings.
286     *
287     * @param title    Title to set
288     * @param message  Message to set
289     * @param iconType IconType to set
290     * @param url      Url to set
291     * @param settings custom settings
292     * @return Displayed Notify for update or hiding.
293     * @see org.gwtbootstrap3.extras.notify.client.ui.NotifySettings
294     */
295    public static final Notify notify(final String title, final String message, final IconType iconType, final String url, final NotifySettings settings) {
296        return Notify.notify(title, message, Styles.FONT_AWESOME_BASE + " " + iconType.getCssName(), url, settings);
297    }
298
299    /**
300     * Hide all displayed Notifies.
301     */
302    public static final native void hideAll() /*-{
303        $wnd.jQuery.notifyClose();
304    }-*/;
305
306    /**
307     * Hide all displayed Notifies on specific screen location.
308     *
309     * @param placement Notify's placement on screen.
310     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyPlacement
311     */
312    public static final native void hideAll(NotifyPlacement placement) /*-{
313        if (plamenet !== null) {
314            $wnd.jQuery.notifyClose(placement.@org.gwtbootstrap3.extras.notify.client.constants.NotifyPlacement::getPlacement()());
315        }
316    }-*/;
317
318    /**
319     * Updates title parameter of once displayed Notify.
320     *
321     * @param title Title to set
322     */
323    public final native void updateTitle(String title) /*-{
324        this.update('title', title);
325    }-*/;
326
327    /**
328     * Updates message parameter of once displayed Notify.
329     *
330     * @param message Message to set
331     */
332    public final native void updateMessage(String message) /*-{
333        this.update('message', message);
334    }-*/;
335
336    /**
337     * Updates Icon parameter of once displayed Notify.
338     *
339     * @param icon Icon to set
340     */
341    public final native void updateIcon(String icon) /*-{
342        this.update('icon', icon);
343    }-*/;
344
345    /**
346     * Updates Icon parameter of once displayed Notify.
347     * This method is shortcut when using FONT AWESOME iconic font.
348     *
349     * @param type IconType to get CSS class name to set
350     */
351    public final void updateIcon(final IconType type) {
352        if (type != null) updateIcon(Styles.FONT_AWESOME_BASE + " " + type.getCssName());
353    }
354
355    /**
356     * Update type of once displayed Notify (CSS style class name).
357     *
358     * @param type one of INFO, WARNING, DANGER, SUCCESS
359     * @see org.gwtbootstrap3.extras.notify.client.constants.NotifyType
360     */
361    public final void updateType(final NotifyType type) {
362        if (type != null) {
363            updateType(type.getCssName());
364        }
365    }
366
367    /**
368     * Update type of once displayed Notify (CSS style class name).
369     * Resulting class name to use is "alert-[type]".
370     *
371     * @param type CSS class name to set
372     */
373    private final native void updateType(String type) /*-{
374        this.update('type', type);
375    }-*/;
376
377    /**
378     * Update URL target of once displayed Notify.
379     *
380     * @param target URL target to set
381     */
382    private final native void updateTarget(String target) /*-{
383        this.update('target', target);
384    }-*/;
385
386    /**
387     * Hide this Notify.
388     */
389    public final native void hide() /*-{
390        this.close();
391    }-*/;
392
393}