mirror of
https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin.git
synced 2026-07-31 00:02:14 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03320113b4 | ||
|
|
5634e1d84c | ||
|
|
2add9bef7b | ||
|
|
c252764372 | ||
|
|
ba7c60f324 | ||
|
|
eed523111b | ||
|
|
e0420e0aef | ||
|
|
8c10bcaec5 | ||
|
|
5d9aa4f187 | ||
|
|
50290d83de | ||
|
|
3d0b2927ae | ||
|
|
2cb29b217a | ||
|
|
6208c60449 |
@@ -63,18 +63,19 @@ Toast is compatible with [Cordova Plugman](https://github.com/apache/cordova-plu
|
||||
|
||||
Using the Cordova CLI and the [Cordova Plugin Registry](http://plugins.cordova.io)
|
||||
```
|
||||
$ cordova plugin add nl.x-services.plugins.toast
|
||||
$ cordova plugin add cordova-plugin-x-toast
|
||||
$ cordova prepare
|
||||
```
|
||||
|
||||
Or using the phonegap CLI
|
||||
```
|
||||
$ phonegap local plugin add nl.x-services.plugins.toast
|
||||
$ phonegap local plugin add cordova-plugin-x-toast
|
||||
```
|
||||
|
||||
Toast.js is brought in automatically. There is no need to change or add anything in your html.
|
||||
|
||||
### Manually
|
||||
You'd better use the CLI, but here goes:
|
||||
|
||||
1\. Add the following xml to your `config.xml` in the root directory of your `www` folder:
|
||||
```xml
|
||||
@@ -118,11 +119,7 @@ Toast works with PhoneGap build too, but only with PhoneGap 3.0 and up.
|
||||
|
||||
Just add the following xml to your `config.xml` to always use the latest version of this plugin:
|
||||
```xml
|
||||
<gap:plugin name="nl.x-services.plugins.toast" source="plugins.cordova.io" />
|
||||
```
|
||||
or to use a specific version:
|
||||
```xml
|
||||
<gap:plugin name="nl.x-services.plugins.toast" source="plugins.cordova.io" version="2.0.6" />
|
||||
<gap:plugin name="cordova-plugin-x-toast" source="npm" />
|
||||
```
|
||||
|
||||
Toast.js is brought in automatically. There is no need to change or add anything in your html.
|
||||
@@ -132,8 +129,8 @@ Toast.js is brought in automatically. There is no need to change or add anything
|
||||
### Showing a Toast
|
||||
You have two choices to make when showing a Toast: where to show it and for how long.
|
||||
* show(message, duration, position)
|
||||
* duration: 'short', 'long'
|
||||
* position: 'top', 'center', 'bottom'
|
||||
* duration: 'short', 'long'
|
||||
* position: 'top', 'center', 'bottom'
|
||||
|
||||
You can also use any of these convenience methods:
|
||||
* showShortTop(message)
|
||||
@@ -150,6 +147,24 @@ You can copy-paste these lines of code for a quick test:
|
||||
<button onclick="window.plugins.toast.show('Hello there!', 'long', 'center', function(a){console.log('toast success: ' + a)}, function(b){alert('toast error: ' + b)})">Toast show long center</button>
|
||||
```
|
||||
|
||||
#### Tweaking the vertical position
|
||||
Since 2.1.0 you can add pixels to move the toast up or down.
|
||||
Note that `showWithOptions` can be used instead of the functions above, but it's not useful unless you want to pass `addPixelsY`.
|
||||
```js
|
||||
function showTop() {
|
||||
window.plugins.toast.showWithOptions(
|
||||
{
|
||||
message: "hey there",
|
||||
duration: "short",
|
||||
position: "bottom",
|
||||
addPixelsY: -40 // added a negative value to move it up a bit (default 0)
|
||||
},
|
||||
onSuccess, // optional
|
||||
onError // optional
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Hiding a Toast
|
||||
In case you want to hide a Toast manually, call this:
|
||||
```js
|
||||
@@ -159,7 +174,7 @@ function hide() {
|
||||
}
|
||||
```
|
||||
|
||||
### WP8 quircks
|
||||
### WP8 quirks
|
||||
The WP8 implementation needs a little more work, but it's perfectly useable when you keep this in mind:
|
||||
* You can't show two Toasts simultaneously.
|
||||
* Wait until the first Toast is hidden before the second is shown, otherwise the second one will be hidden quickly.
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "cordova-plugin-x-toast",
|
||||
"version": "2.2.1",
|
||||
"description": "This plugin allows you to show a Toast. A Toast is a little non intrusive buttonless popup which automatically disappears.",
|
||||
"cordova": {
|
||||
"id": "cordova-plugin-x-toast",
|
||||
"platforms": [
|
||||
"ios",
|
||||
"android",
|
||||
"wp8",
|
||||
"blackberry10"
|
||||
]
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin.git"
|
||||
},
|
||||
"keywords": [
|
||||
"Toast",
|
||||
"Notification",
|
||||
"Message",
|
||||
"Alert",
|
||||
"ecosystem:cordova",
|
||||
"cordova-ios",
|
||||
"cordova-android",
|
||||
"cordova-wp8",
|
||||
"cordova-blackberry10"
|
||||
],
|
||||
"engines": [
|
||||
{
|
||||
"name": "cordova",
|
||||
"version": ">=3.0.0"
|
||||
}
|
||||
],
|
||||
"author": "Eddy Verbruggen <eddyverbruggen@gmail.com> (https://github.com/EddyVerbruggen)",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin/issues"
|
||||
},
|
||||
"homepage": "https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin#readme"
|
||||
}
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
id="nl.x-services.plugins.toast"
|
||||
version="2.0.6">
|
||||
id="cordova-plugin-x-toast"
|
||||
version="2.2.1">
|
||||
|
||||
<name>Toast</name>
|
||||
|
||||
|
||||
@@ -47,20 +47,21 @@ public class Toast extends CordovaPlugin {
|
||||
final String message = options.getString("message");
|
||||
final String duration = options.getString("duration");
|
||||
final String position = options.getString("position");
|
||||
final int addPixelsY = options.has("addPixelsY") ? options.getInt("addPixelsY") : 0;
|
||||
|
||||
cordova.getActivity().runOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
android.widget.Toast toast = android.widget.Toast.makeText(
|
||||
webView.getContext(),
|
||||
cordova.getActivity().getApplicationContext(),
|
||||
message,
|
||||
"short".equals(duration) ? android.widget.Toast.LENGTH_SHORT : android.widget.Toast.LENGTH_LONG);
|
||||
|
||||
if ("top".equals(position)) {
|
||||
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 20);
|
||||
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 20 + addPixelsY);
|
||||
} else if ("bottom".equals(position)) {
|
||||
toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 20);
|
||||
toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 20 - addPixelsY);
|
||||
} else if ("center".equals(position)) {
|
||||
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
|
||||
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, addPixelsY);
|
||||
} else {
|
||||
callbackContext.error("invalid position. valid options are 'top', 'center' and 'bottom'");
|
||||
return;
|
||||
@@ -91,4 +92,4 @@ public class Toast extends CordovaPlugin {
|
||||
public void onResume(boolean multitasking) {
|
||||
this.isPaused = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
// each makeToast method creates a view and displays it as toast
|
||||
- (void)makeToast:(NSString *)message;
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)interval position:(id)position;
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)duration position:(id)position addPixelsY:(int)addPixelsY;
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)interval position:(id)position image:(UIImage *)image;
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)interval position:(id)position title:(NSString *)title;
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)interval position:(id)position title:(NSString *)title image:(UIImage *)image;
|
||||
@@ -18,6 +19,7 @@
|
||||
|
||||
// the showToast methods display any view as toast
|
||||
- (void)showToast:(UIView *)toast;
|
||||
- (void)showToast:(UIView *)toast duration:(NSTimeInterval)interval position:(id)point;
|
||||
- (void)showToast:(UIView *)toast duration:(NSTimeInterval)interval position:(id)point ;
|
||||
- (void)showToast:(UIView *)toast duration:(NSTimeInterval)interval position:(id)point addedPixelsY:(int)addPixelsY;
|
||||
|
||||
@end
|
||||
|
||||
+46
-24
@@ -53,7 +53,7 @@ static UIView *prevToast = NULL;
|
||||
- (void)hideToast:(UIView *)toast;
|
||||
- (void)toastTimerDidFinish:(NSTimer *)timer;
|
||||
- (void)handleToastTapped:(UITapGestureRecognizer *)recognizer;
|
||||
- (CGPoint)centerPointForPosition:(id)position withToast:(UIView *)toast;
|
||||
- (CGPoint)centerPointForPosition:(id)position withToast:(UIView *)toast withAddedPixelsY:(int) addPixelsY;
|
||||
- (UIView *)viewForMessage:(NSString *)message title:(NSString *)title image:(UIImage *)image;
|
||||
- (CGSize)sizeForString:(NSString *)string font:(UIFont *)font constrainedToSize:(CGSize)constrainedSize lineBreakMode:(NSLineBreakMode)lineBreakMode;
|
||||
|
||||
@@ -73,19 +73,24 @@ static UIView *prevToast = NULL;
|
||||
[self showToast:toast duration:duration position:position];
|
||||
}
|
||||
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)duration position:(id)position addPixelsY:(int)addPixelsY {
|
||||
UIView *toast = [self viewForMessage:message title:nil image:nil];
|
||||
[self showToast:toast duration:duration position:position addedPixelsY:addPixelsY];
|
||||
}
|
||||
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)duration position:(id)position title:(NSString *)title {
|
||||
UIView *toast = [self viewForMessage:message title:title image:nil];
|
||||
[self showToast:toast duration:duration position:position];
|
||||
[self showToast:toast duration:duration position:position];
|
||||
}
|
||||
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)duration position:(id)position image:(UIImage *)image {
|
||||
UIView *toast = [self viewForMessage:message title:nil image:image];
|
||||
[self showToast:toast duration:duration position:position];
|
||||
[self showToast:toast duration:duration position:position];
|
||||
}
|
||||
|
||||
- (void)makeToast:(NSString *)message duration:(NSTimeInterval)duration position:(id)position title:(NSString *)title image:(UIImage *)image {
|
||||
UIView *toast = [self viewForMessage:message title:title image:image];
|
||||
[self showToast:toast duration:duration position:position];
|
||||
[self showToast:toast duration:duration position:position];
|
||||
}
|
||||
|
||||
- (void)showToast:(UIView *)toast {
|
||||
@@ -93,21 +98,27 @@ static UIView *prevToast = NULL;
|
||||
}
|
||||
|
||||
- (void)showToast:(UIView *)toast duration:(NSTimeInterval)duration position:(id)point {
|
||||
[self showToast:toast duration:CSToastDefaultDuration position:CSToastDefaultPosition addedPixelsY:0];
|
||||
}
|
||||
|
||||
- (void)showToast:(UIView *)toast duration:(NSTimeInterval)duration position:(id)point addedPixelsY:(int) addPixelsY {
|
||||
[self hideToast];
|
||||
prevToast = toast;
|
||||
toast.center = [self centerPointForPosition:point withToast:toast];
|
||||
toast.center = [self centerPointForPosition:point withToast:toast withAddedPixelsY:addPixelsY];
|
||||
toast.alpha = 0.0;
|
||||
|
||||
|
||||
if (CSToastHidesOnTap) {
|
||||
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:toast action:@selector(handleToastTapped:)];
|
||||
[toast addGestureRecognizer:recognizer];
|
||||
toast.userInteractionEnabled = YES;
|
||||
toast.exclusiveTouch = YES;
|
||||
}
|
||||
|
||||
|
||||
// make sure that if InAppBrowser is active, we're still showing Toasts on top of it
|
||||
[self.superview.superview addSubview:toast];
|
||||
|
||||
UIViewController *vc = [self getTopMostViewController];
|
||||
UIView *v = [vc view];
|
||||
[v addSubview:toast];
|
||||
|
||||
[UIView animateWithDuration:CSToastFadeDuration
|
||||
delay:0.0
|
||||
options:(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAllowUserInteraction)
|
||||
@@ -118,7 +129,15 @@ static UIView *prevToast = NULL;
|
||||
// associate the timer with the toast view
|
||||
objc_setAssociatedObject (toast, &CSToastTimerKey, timer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
}];
|
||||
|
||||
|
||||
}
|
||||
|
||||
- (UIViewController*) getTopMostViewController {
|
||||
UIViewController *presentingViewController = [[[UIApplication sharedApplication] delegate] window].rootViewController;
|
||||
while (presentingViewController.presentedViewController != nil) {
|
||||
presentingViewController = presentingViewController.presentedViewController;
|
||||
}
|
||||
return presentingViewController;
|
||||
}
|
||||
|
||||
- (void)hideToast {
|
||||
@@ -147,7 +166,7 @@ static UIView *prevToast = NULL;
|
||||
- (void)handleToastTapped:(UITapGestureRecognizer *)recognizer {
|
||||
NSTimer *timer = (NSTimer *)objc_getAssociatedObject(self, &CSToastTimerKey);
|
||||
[timer invalidate];
|
||||
|
||||
|
||||
[self hideToast:recognizer.view];
|
||||
}
|
||||
|
||||
@@ -161,31 +180,31 @@ static UIView *prevToast = NULL;
|
||||
// sanity
|
||||
UIView *existingActivityView = (UIView *)objc_getAssociatedObject(self, &CSToastActivityViewKey);
|
||||
if (existingActivityView != nil) return;
|
||||
|
||||
|
||||
UIView *activityView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CSToastActivityWidth, CSToastActivityHeight)];
|
||||
activityView.center = [self centerPointForPosition:position withToast:activityView];
|
||||
activityView.center = [self centerPointForPosition:position withToast:activityView withAddedPixelsY:0];
|
||||
activityView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:CSToastOpacity];
|
||||
activityView.alpha = 0.0;
|
||||
activityView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
|
||||
activityView.layer.cornerRadius = CSToastCornerRadius;
|
||||
|
||||
|
||||
if (CSToastDisplayShadow) {
|
||||
activityView.layer.shadowColor = [UIColor blackColor].CGColor;
|
||||
activityView.layer.shadowOpacity = CSToastShadowOpacity;
|
||||
activityView.layer.shadowRadius = CSToastShadowRadius;
|
||||
activityView.layer.shadowOffset = CSToastShadowOffset;
|
||||
}
|
||||
|
||||
|
||||
UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
|
||||
activityIndicatorView.center = CGPointMake(activityView.bounds.size.width / 2, activityView.bounds.size.height / 2);
|
||||
[activityView addSubview:activityIndicatorView];
|
||||
[activityIndicatorView startAnimating];
|
||||
|
||||
|
||||
// associate the activity view with self
|
||||
objc_setAssociatedObject (self, &CSToastActivityViewKey, activityView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
|
||||
|
||||
[self addSubview:activityView];
|
||||
|
||||
|
||||
[UIView animateWithDuration:CSToastFadeDuration
|
||||
delay:0.0
|
||||
options:UIViewAnimationOptionCurveEaseOut
|
||||
@@ -211,22 +230,22 @@ static UIView *prevToast = NULL;
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
- (CGPoint)centerPointForPosition:(id)point withToast:(UIView *)toast {
|
||||
- (CGPoint)centerPointForPosition:(id)point withToast:(UIView *)toast withAddedPixelsY:(int) addPixelsY {
|
||||
if([point isKindOfClass:[NSString class]]) {
|
||||
// convert string literals @"top", @"bottom", @"center", or any point wrapped in an NSValue object into a CGPoint
|
||||
if([point caseInsensitiveCompare:@"top"] == NSOrderedSame) {
|
||||
return CGPointMake(self.bounds.size.width/2, (toast.frame.size.height / 2) + CSToastVerticalPadding + CSToastTopBottomOffset);
|
||||
return CGPointMake(self.bounds.size.width/2, (toast.frame.size.height / 2) + addPixelsY + CSToastVerticalPadding + CSToastTopBottomOffset);
|
||||
} else if([point caseInsensitiveCompare:@"bottom"] == NSOrderedSame) {
|
||||
return CGPointMake(self.bounds.size.width/2, (self.bounds.size.height - (toast.frame.size.height / 2)) - CSToastVerticalPadding - CSToastTopBottomOffset);
|
||||
return CGPointMake(self.bounds.size.width/2, (self.bounds.size.height - (toast.frame.size.height / 2)) - CSToastVerticalPadding - CSToastTopBottomOffset + addPixelsY);
|
||||
} else if([point caseInsensitiveCompare:@"center"] == NSOrderedSame) {
|
||||
return CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);
|
||||
return CGPointMake(self.bounds.size.width / 2, (self.bounds.size.height / 2) + addPixelsY);
|
||||
}
|
||||
} else if ([point isKindOfClass:[NSValue class]]) {
|
||||
return [point CGPointValue];
|
||||
}
|
||||
|
||||
|
||||
NSLog(@"Warning: Invalid position for toast.");
|
||||
return [self centerPointForPosition:CSToastDefaultPosition withToast:toast];
|
||||
return [self centerPointForPosition:CSToastDefaultPosition withToast:toast withAddedPixelsY:addPixelsY];
|
||||
}
|
||||
|
||||
- (CGSize)sizeForString:(NSString *)string font:(UIFont *)font constrainedToSize:(CGSize)constrainedSize lineBreakMode:(NSLineBreakMode)lineBreakMode {
|
||||
@@ -238,7 +257,10 @@ static UIView *prevToast = NULL;
|
||||
return CGSizeMake(ceilf(boundingRect.size.width), ceilf(boundingRect.size.height));
|
||||
}
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
return [string sizeWithFont:font constrainedToSize:constrainedSize lineBreakMode:lineBreakMode];
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
|
||||
- (UIView *)viewForMessage:(NSString *)message title:(NSString *)title image:(UIImage *)image {
|
||||
|
||||
+2
-1
@@ -11,6 +11,7 @@
|
||||
NSString *message = [options objectForKey:@"message"];
|
||||
NSString *duration = [options objectForKey:@"duration"];
|
||||
NSString *position = [options objectForKey:@"position"];
|
||||
NSNumber *addPixelsY = [options objectForKey:@"addPixelsY"];
|
||||
|
||||
if (![position isEqual: @"top"] && ![position isEqual: @"center"] && ![position isEqual: @"bottom"]) {
|
||||
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"invalid position. valid options are 'top', 'center' and 'bottom'"];
|
||||
@@ -29,7 +30,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
[self.webView makeToast:message duration:durationInt position:position];
|
||||
[self.webView makeToast:message duration:durationInt position:position addPixelsY:addPixelsY == nil ? 0 : [addPixelsY intValue]];
|
||||
|
||||
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
|
||||
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
|
||||
|
||||
+7
-3
@@ -39,6 +39,9 @@ namespace WPCordovaClassLib.Cordova.Commands
|
||||
|
||||
[DataMember(IsRequired = true, Name = "position")]
|
||||
public string position { get; set; }
|
||||
|
||||
[DataMember(IsRequired = false, Name = "addPixelsY")]
|
||||
public int addPixelsY { get; set; }
|
||||
}
|
||||
|
||||
public void show(string options)
|
||||
@@ -60,6 +63,7 @@ namespace WPCordovaClassLib.Cordova.Commands
|
||||
var message = toastOptions.message;
|
||||
var duration = toastOptions.duration;
|
||||
var position = toastOptions.position;
|
||||
int addPixelsY = toastOptions.addPixelsY;
|
||||
|
||||
string aliasCurrentCommandCallbackId = args[1];
|
||||
|
||||
@@ -104,17 +108,17 @@ namespace WPCordovaClassLib.Cordova.Commands
|
||||
if ("top".Equals(position))
|
||||
{
|
||||
popup.VerticalAlignment = VerticalAlignment.Top;
|
||||
popup.VerticalOffset = 20;
|
||||
popup.VerticalOffset = 20 + addPixelsY;
|
||||
}
|
||||
else if ("bottom".Equals(position))
|
||||
{
|
||||
popup.VerticalAlignment = VerticalAlignment.Bottom;
|
||||
popup.VerticalOffset = -100; // TODO can do better
|
||||
popup.VerticalOffset = -100 + addPixelsY; // TODO can do better
|
||||
}
|
||||
else if ("center".Equals(position))
|
||||
{
|
||||
popup.VerticalAlignment = VerticalAlignment.Center;
|
||||
popup.VerticalOffset = -50; // TODO can do way better
|
||||
popup.VerticalOffset = -50 + addPixelsY; // TODO can do way better
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+8
-1
@@ -7,6 +7,7 @@ Toast.prototype.optionsBuilder = function () {
|
||||
var message = null;
|
||||
var duration = "short";
|
||||
var position = "center";
|
||||
var addPixelsY = 0;
|
||||
|
||||
return {
|
||||
withMessage: function(m) {
|
||||
@@ -24,11 +25,17 @@ Toast.prototype.optionsBuilder = function () {
|
||||
return this;
|
||||
},
|
||||
|
||||
withAddPixelsY: function(y) {
|
||||
addPixelsY = y;
|
||||
return this;
|
||||
},
|
||||
|
||||
build: function() {
|
||||
return {
|
||||
message: message,
|
||||
duration: duration,
|
||||
position: position
|
||||
position: position,
|
||||
addPixelsY: addPixelsY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user