From d4f53a18040700716298a03b51ea5d9a2690aa34 Mon Sep 17 00:00:00 2001 From: Daniel Orihuela Date: Fri, 26 Jun 2020 17:10:06 +0200 Subject: [PATCH 1/7] feat: add destructiveActionsIndexes property to ActionOptions We added a property called destructiveActionsIndexes in order to support ios destructive style for action buttons. See: https://developer.apple.com/documentation/uikit/uialertaction/style/destructive Co-authored-by: Marc Bisquert --- nativescript-core/ui/dialogs/dialogs.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nativescript-core/ui/dialogs/dialogs.d.ts b/nativescript-core/ui/dialogs/dialogs.d.ts index c254148e23..3a7da8fde7 100644 --- a/nativescript-core/ui/dialogs/dialogs.d.ts +++ b/nativescript-core/ui/dialogs/dialogs.d.ts @@ -171,6 +171,11 @@ export interface ActionOptions extends CancelableOptions { * Gets or sets the list of available actions. */ actions?: Array; + + /** + * [iOS only] Gets or sets the indexes of destructive actions. + */ + destructiveActionsIndexes?: Array; } /** From db4f0c73bf8d4f38f33246447c5699d8703ffd50 Mon Sep 17 00:00:00 2001 From: Daniel Orihuela Date: Fri, 26 Jun 2020 17:31:30 +0200 Subject: [PATCH 2/7] feat: set destructive style from options Set the ios destructive style for the action buttons given the indexes included in the optional destructiveActionsIndexes property. The action buttons not included in the stated property remain with the default style. Co-authored-by: Marc Bisquert --- nativescript-core/ui/dialogs/dialogs.ios.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nativescript-core/ui/dialogs/dialogs.ios.ts b/nativescript-core/ui/dialogs/dialogs.ios.ts index 0e172c607a..fd2f4c7577 100644 --- a/nativescript-core/ui/dialogs/dialogs.ios.ts +++ b/nativescript-core/ui/dialogs/dialogs.ios.ts @@ -272,10 +272,16 @@ export function action(): Promise { let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.ActionSheet); if (options.actions) { + let dialogType = UIAlertActionStyle.Default; + for (i = 0; i < options.actions.length; i++) { action = options.actions[i]; + + if(options.destructiveActionsIndexes && options.destructiveActionsIndexes.indexOf(i) !== -1) { + dialogType = UIAlertActionStyle.Destructive; + } if (isString(action)) { - alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(action, UIAlertActionStyle.Default, (arg: UIAlertAction) => { + alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(action, dialogType, (arg: UIAlertAction) => { resolve(arg.title); })); } From 8c5661d55676965b39477b91b1a1c8cc4ed880e9 Mon Sep 17 00:00:00 2001 From: Daniel Orihuela Date: Fri, 26 Jun 2020 18:34:42 +0200 Subject: [PATCH 3/7] refactor: improve readability 1. Substitute let for const. 2. Create thisActionIsDestructive variable for readability. Co-authored-by: Marc Bisquert Co-authored-by: Diego Rodriguez Co-authored-by: Sergio Sanchez --- nativescript-core/ui/dialogs/dialogs.ios.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/nativescript-core/ui/dialogs/dialogs.ios.ts b/nativescript-core/ui/dialogs/dialogs.ios.ts index fd2f4c7577..f3404f066e 100644 --- a/nativescript-core/ui/dialogs/dialogs.ios.ts +++ b/nativescript-core/ui/dialogs/dialogs.ios.ts @@ -272,15 +272,11 @@ export function action(): Promise { let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.ActionSheet); if (options.actions) { - let dialogType = UIAlertActionStyle.Default; - for (i = 0; i < options.actions.length; i++) { action = options.actions[i]; - - if(options.destructiveActionsIndexes && options.destructiveActionsIndexes.indexOf(i) !== -1) { - dialogType = UIAlertActionStyle.Destructive; - } if (isString(action)) { + const thisActionIsDestructive = options.destructiveActionsIndexes && options.destructiveActionsIndexes.indexOf(i) !== -1; + const dialogType = thisActionIsDestructive? UIAlertActionStyle.Destructive : UIAlertActionStyle.Default; alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(action, dialogType, (arg: UIAlertAction) => { resolve(arg.title); })); From 24bd6eb501c634b633598a58feba16a9fb020d9c Mon Sep 17 00:00:00 2001 From: Daniel Orihuela Date: Fri, 26 Jun 2020 18:35:52 +0200 Subject: [PATCH 4/7] refactor: lint with prettier Co-authored-by: Marc Bisquert Co-authored-by: Diego Rodriguez Co-authored-by: Sergio Sanchez --- nativescript-core/ui/dialogs/dialogs.ios.ts | 641 ++++++++++++-------- 1 file changed, 385 insertions(+), 256 deletions(-) diff --git a/nativescript-core/ui/dialogs/dialogs.ios.ts b/nativescript-core/ui/dialogs/dialogs.ios.ts index f3404f066e..21c0cb7f1c 100644 --- a/nativescript-core/ui/dialogs/dialogs.ios.ts +++ b/nativescript-core/ui/dialogs/dialogs.ios.ts @@ -1,299 +1,428 @@ /** * iOS specific dialogs functions implementation. */ -import { ios as iosView, traceCategories, traceWrite, traceMessageType } from "../core/view"; -import { ConfirmOptions, PromptOptions, PromptResult, LoginOptions, LoginResult, ActionOptions } from "."; -import { getCurrentPage, getLabelColor, getButtonColors, getTextFieldColor, isDialogOptions, inputType, capitalizationType, ALERT, OK, CONFIRM, CANCEL, PROMPT, parseLoginOptions } from "./dialogs-common"; +import { + ios as iosView, + traceCategories, + traceWrite, + traceMessageType, +} from "../core/view"; +import { + ConfirmOptions, + PromptOptions, + PromptResult, + LoginOptions, + LoginResult, + ActionOptions, +} from "."; +import { + getCurrentPage, + getLabelColor, + getButtonColors, + getTextFieldColor, + isDialogOptions, + inputType, + capitalizationType, + ALERT, + OK, + CONFIRM, + CANCEL, + PROMPT, + parseLoginOptions, +} from "./dialogs-common"; import { isString, isDefined, isFunction } from "../../utils/types"; import { getRootView, ios } from "../../application"; export * from "./dialogs-common"; -function addButtonsToAlertController(alertController: UIAlertController, options: ConfirmOptions, callback?: Function): void { - if (!options) { - return; - } - - if (isString(options.cancelButtonText)) { - alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(options.cancelButtonText, UIAlertActionStyle.Default, () => { - raiseCallback(callback, false); - })); - } - - if (isString(options.neutralButtonText)) { - alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(options.neutralButtonText, UIAlertActionStyle.Default, () => { - raiseCallback(callback, undefined); - })); - } - - if (isString(options.okButtonText)) { - alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(options.okButtonText, UIAlertActionStyle.Default, () => { - raiseCallback(callback, true); - })); - } +function addButtonsToAlertController( + alertController: UIAlertController, + options: ConfirmOptions, + callback?: Function +): void { + if (!options) { + return; + } + + if (isString(options.cancelButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.cancelButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, false); + } + ) + ); + } + + if (isString(options.neutralButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.neutralButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, undefined); + } + ) + ); + } + + if (isString(options.okButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.okButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, true); + } + ) + ); + } } function raiseCallback(callback, result) { - if (isFunction(callback)) { - callback(result); - } + if (isFunction(callback)) { + callback(result); + } } export function alert(arg: any): Promise { - return new Promise((resolve, reject) => { - try { - let options = !isDialogOptions(arg) ? { title: ALERT, okButtonText: OK, message: arg + "" } : arg; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.Alert); - - addButtonsToAlertController(alertController, options, () => { resolve(); }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + return new Promise((resolve, reject) => { + try { + let options = !isDialogOptions(arg) + ? { title: ALERT, okButtonText: OK, message: arg + "" } + : arg; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + addButtonsToAlertController(alertController, options, () => { + resolve(); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function confirm(arg: any): Promise { - return new Promise((resolve, reject) => { - try { - let options = !isDialogOptions(arg) ? { title: CONFIRM, okButtonText: OK, cancelButtonText: CANCEL, message: arg + "" } : arg; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.Alert); - - addButtonsToAlertController(alertController, options, (r) => { resolve(r); }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + return new Promise((resolve, reject) => { + try { + let options = !isDialogOptions(arg) + ? { + title: CONFIRM, + okButtonText: OK, + cancelButtonText: CANCEL, + message: arg + "", + } + : arg; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + addButtonsToAlertController(alertController, options, (r) => { + resolve(r); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function prompt(arg: any): Promise { - let options: PromptOptions; - - let defaultOptions = { - title: PROMPT, - okButtonText: OK, - cancelButtonText: CANCEL, - inputType: inputType.text, - }; - - if (arguments.length === 1) { - if (isString(arg)) { - options = defaultOptions; - options.message = arg; - } else { - options = arg; + let options: PromptOptions; + + let defaultOptions = { + title: PROMPT, + okButtonText: OK, + cancelButtonText: CANCEL, + inputType: inputType.text, + }; + + if (arguments.length === 1) { + if (isString(arg)) { + options = defaultOptions; + options.message = arg; + } else { + options = arg; + } + } else if (arguments.length === 2) { + if (isString(arguments[0]) && isString(arguments[1])) { + options = defaultOptions; + options.message = arguments[0]; + options.defaultText = arguments[1]; + } + } + + return new Promise((resolve, reject) => { + try { + let textField: UITextField; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.text = isString(options.defaultText) ? options.defaultText : ""; + arg.secureTextEntry = + options && options.inputType === inputType.password; + + if (options && options.inputType === inputType.email) { + arg.keyboardType = UIKeyboardType.EmailAddress; + } else if (options && options.inputType === inputType.number) { + arg.keyboardType = UIKeyboardType.NumberPad; + } else if (options && options.inputType === inputType.decimal) { + arg.keyboardType = UIKeyboardType.DecimalPad; + } else if (options && options.inputType === inputType.phone) { + arg.keyboardType = UIKeyboardType.PhonePad; + } + + let color = getTextFieldColor(); + if (color) { + arg.textColor = arg.tintColor = color.ios; + } } - } else if (arguments.length === 2) { - if (isString(arguments[0]) && isString(arguments[1])) { - options = defaultOptions; - options.message = arguments[0]; - options.defaultText = arguments[1]; + ); + + textField = alertController.textFields.firstObject; + + if (options) { + switch (options.capitalizationType) { + case capitalizationType.all: { + textField.autocapitalizationType = + UITextAutocapitalizationType.AllCharacters; + break; + } + case capitalizationType.sentences: { + textField.autocapitalizationType = + UITextAutocapitalizationType.Sentences; + break; + } + case capitalizationType.words: { + textField.autocapitalizationType = + UITextAutocapitalizationType.Words; + break; + } + default: { + textField.autocapitalizationType = + UITextAutocapitalizationType.None; + } } - } + } - return new Promise((resolve, reject) => { - try { - let textField: UITextField; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.Alert); - - alertController.addTextFieldWithConfigurationHandler((arg: UITextField) => { - arg.text = isString(options.defaultText) ? options.defaultText : ""; - arg.secureTextEntry = options && options.inputType === inputType.password; - - if (options && options.inputType === inputType.email) { - arg.keyboardType = UIKeyboardType.EmailAddress; - } else if (options && options.inputType === inputType.number) { - arg.keyboardType = UIKeyboardType.NumberPad; - } else if (options && options.inputType === inputType.decimal) { - arg.keyboardType = UIKeyboardType.DecimalPad; - } else if (options && options.inputType === inputType.phone) { - arg.keyboardType = UIKeyboardType.PhonePad; - } + addButtonsToAlertController(alertController, options, (r) => { + resolve({ result: r, text: textField.text }); + }); - let color = getTextFieldColor(); - if (color) { - arg.textColor = arg.tintColor = color.ios; - } - }); - - textField = alertController.textFields.firstObject; - - if (options) { - switch (options.capitalizationType) { - case capitalizationType.all: { - textField.autocapitalizationType = UITextAutocapitalizationType.AllCharacters; break; - } - case capitalizationType.sentences: { - textField.autocapitalizationType = UITextAutocapitalizationType.Sentences; break; - } - case capitalizationType.words: { - textField.autocapitalizationType = UITextAutocapitalizationType.Words; break; - } - default: { - textField.autocapitalizationType = UITextAutocapitalizationType.None; - } - } - } - - addButtonsToAlertController(alertController, options, - (r) => { resolve({ result: r, text: textField.text }); }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function login(...args: any[]): Promise { - let options: LoginOptions = parseLoginOptions(args); - - return new Promise((resolve, reject) => { - try { - let userNameTextField: UITextField; - let passwordTextField: UITextField; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.Alert); - - let textFieldColor = getTextFieldColor(); - - alertController.addTextFieldWithConfigurationHandler((arg: UITextField) => { - arg.placeholder = "Login"; - arg.placeholder = options.userNameHint ? options.userNameHint : ""; - arg.text = isString(options.userName) ? options.userName : ""; - - if (textFieldColor) { - arg.textColor = arg.tintColor = textFieldColor.ios; - } - }); - - alertController.addTextFieldWithConfigurationHandler((arg: UITextField) => { - arg.placeholder = "Password"; - arg.secureTextEntry = true; - arg.placeholder = options.passwordHint ? options.passwordHint : ""; - arg.text = isString(options.password) ? options.password : ""; - - if (textFieldColor) { - arg.textColor = arg.tintColor = textFieldColor.ios; - } - }); - - userNameTextField = alertController.textFields.firstObject; - passwordTextField = alertController.textFields.lastObject; - - addButtonsToAlertController(alertController, options, - (r) => { - resolve({ - result: r, - userName: - userNameTextField.text, - password: passwordTextField.text - }); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); + let options: LoginOptions = parseLoginOptions(args); + + return new Promise((resolve, reject) => { + try { + let userNameTextField: UITextField; + let passwordTextField: UITextField; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + let textFieldColor = getTextFieldColor(); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.placeholder = "Login"; + arg.placeholder = options.userNameHint ? options.userNameHint : ""; + arg.text = isString(options.userName) ? options.userName : ""; + + if (textFieldColor) { + arg.textColor = arg.tintColor = textFieldColor.ios; + } + } + ); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.placeholder = "Password"; + arg.secureTextEntry = true; + arg.placeholder = options.passwordHint ? options.passwordHint : ""; + arg.text = isString(options.password) ? options.password : ""; + + if (textFieldColor) { + arg.textColor = arg.tintColor = textFieldColor.ios; + } } - }); + ); + + userNameTextField = alertController.textFields.firstObject; + passwordTextField = alertController.textFields.lastObject; + + addButtonsToAlertController(alertController, options, (r) => { + resolve({ + result: r, + userName: userNameTextField.text, + password: passwordTextField.text, + }); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } function showUIAlertController(alertController: UIAlertController) { - let viewController = ios.rootController; - - while (viewController && viewController.presentedViewController) { - viewController = viewController.presentedViewController; - } - - if (!viewController) { - traceWrite(`No root controller found to open dialog.`, traceCategories.Error, traceMessageType.warn); - - return; - } - - if (alertController.popoverPresentationController) { - alertController.popoverPresentationController.sourceView = viewController.view; - alertController.popoverPresentationController.sourceRect = CGRectMake(viewController.view.bounds.size.width / 2.0, viewController.view.bounds.size.height / 2.0, 1.0, 1.0); - alertController.popoverPresentationController.permittedArrowDirections = 0; - } - - let color = getButtonColors().color; - if (color) { - alertController.view.tintColor = color.ios; + let viewController = ios.rootController; + + while (viewController && viewController.presentedViewController) { + viewController = viewController.presentedViewController; + } + + if (!viewController) { + traceWrite( + `No root controller found to open dialog.`, + traceCategories.Error, + traceMessageType.warn + ); + + return; + } + + if (alertController.popoverPresentationController) { + alertController.popoverPresentationController.sourceView = + viewController.view; + alertController.popoverPresentationController.sourceRect = CGRectMake( + viewController.view.bounds.size.width / 2.0, + viewController.view.bounds.size.height / 2.0, + 1.0, + 1.0 + ); + alertController.popoverPresentationController.permittedArrowDirections = 0; + } + + let color = getButtonColors().color; + if (color) { + alertController.view.tintColor = color.ios; + } + + let lblColor = getLabelColor(); + if (lblColor) { + if (alertController.title) { + let title = NSAttributedString.alloc().initWithStringAttributes( + alertController.title, + { [NSForegroundColorAttributeName]: lblColor.ios } + ); + alertController.setValueForKey(title, "attributedTitle"); } - - let lblColor = getLabelColor(); - if (lblColor) { - if (alertController.title) { - let title = NSAttributedString.alloc().initWithStringAttributes(alertController.title, { [NSForegroundColorAttributeName]: lblColor.ios }); - alertController.setValueForKey(title, "attributedTitle"); - } - if (alertController.message) { - let message = NSAttributedString.alloc().initWithStringAttributes(alertController.message, { [NSForegroundColorAttributeName]: lblColor.ios }); - alertController.setValueForKey(message, "attributedMessage"); - } + if (alertController.message) { + let message = NSAttributedString.alloc().initWithStringAttributes( + alertController.message, + { [NSForegroundColorAttributeName]: lblColor.ios } + ); + alertController.setValueForKey(message, "attributedMessage"); } + } - viewController.presentModalViewControllerAnimated(alertController, true); + viewController.presentModalViewControllerAnimated(alertController, true); } export function action(): Promise { - let options: ActionOptions; + let options: ActionOptions; - let defaultOptions = { title: null, cancelButtonText: CANCEL }; + let defaultOptions = { title: null, cancelButtonText: CANCEL }; - if (arguments.length === 1) { - if (isString(arguments[0])) { - options = defaultOptions; - options.message = arguments[0]; - } else { - options = arguments[0]; - } - } else if (arguments.length === 2) { - if (isString(arguments[0]) && isString(arguments[1])) { - options = defaultOptions; - options.message = arguments[0]; - options.cancelButtonText = arguments[1]; - } - } else if (arguments.length === 3) { - if (isString(arguments[0]) && isString(arguments[1]) && isDefined(arguments[2])) { - options = defaultOptions; - options.message = arguments[0]; - options.cancelButtonText = arguments[1]; - options.actions = arguments[2]; - } + if (arguments.length === 1) { + if (isString(arguments[0])) { + options = defaultOptions; + options.message = arguments[0]; + } else { + options = arguments[0]; } - - return new Promise((resolve, reject) => { - try { - let i: number; - let action: string; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle(options.title, options.message, UIAlertControllerStyle.ActionSheet); - - if (options.actions) { - for (i = 0; i < options.actions.length; i++) { - action = options.actions[i]; - if (isString(action)) { - const thisActionIsDestructive = options.destructiveActionsIndexes && options.destructiveActionsIndexes.indexOf(i) !== -1; - const dialogType = thisActionIsDestructive? UIAlertActionStyle.Destructive : UIAlertActionStyle.Default; - alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(action, dialogType, (arg: UIAlertAction) => { - resolve(arg.title); - })); - } + } else if (arguments.length === 2) { + if (isString(arguments[0]) && isString(arguments[1])) { + options = defaultOptions; + options.message = arguments[0]; + options.cancelButtonText = arguments[1]; + } + } else if (arguments.length === 3) { + if ( + isString(arguments[0]) && + isString(arguments[1]) && + isDefined(arguments[2]) + ) { + options = defaultOptions; + options.message = arguments[0]; + options.cancelButtonText = arguments[1]; + options.actions = arguments[2]; + } + } + + return new Promise((resolve, reject) => { + try { + let i: number; + let action: string; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.ActionSheet + ); + + if (options.actions) { + for (i = 0; i < options.actions.length; i++) { + action = options.actions[i]; + if (isString(action)) { + const thisActionIsDestructive = + options.destructiveActionsIndexes && + options.destructiveActionsIndexes.indexOf(i) !== -1; + const dialogType = thisActionIsDestructive + ? UIAlertActionStyle.Destructive + : UIAlertActionStyle.Default; + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + action, + dialogType, + (arg: UIAlertAction) => { + resolve(arg.title); } + ) + ); + } + } + } + + if (isString(options.cancelButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.cancelButtonText, + UIAlertActionStyle.Cancel, + (arg: UIAlertAction) => { + resolve(arg.title); } + ) + ); + } - if (isString(options.cancelButtonText)) { - alertController.addAction(UIAlertAction.actionWithTitleStyleHandler(options.cancelButtonText, UIAlertActionStyle.Cancel, (arg: UIAlertAction) => { - resolve(arg.title); - })); - } - - showUIAlertController(alertController); - - } catch (ex) { - reject(ex); - } - }); + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } From bbb4eee5058823e7c99aa2cf882e842c1467b7a8 Mon Sep 17 00:00:00 2001 From: "danielorihuelarodriguez@gmail.com" Date: Thu, 2 Jul 2020 23:55:03 +0200 Subject: [PATCH 5/7] chore: lint with tabs[2] --- nativescript-core/ui/dialogs/dialogs.ios.ts | 782 ++++++++++---------- 1 file changed, 391 insertions(+), 391 deletions(-) diff --git a/nativescript-core/ui/dialogs/dialogs.ios.ts b/nativescript-core/ui/dialogs/dialogs.ios.ts index 21c0cb7f1c..650e315bc8 100644 --- a/nativescript-core/ui/dialogs/dialogs.ios.ts +++ b/nativescript-core/ui/dialogs/dialogs.ios.ts @@ -2,33 +2,33 @@ * iOS specific dialogs functions implementation. */ import { - ios as iosView, - traceCategories, - traceWrite, - traceMessageType, + ios as iosView, + traceCategories, + traceWrite, + traceMessageType, } from "../core/view"; import { - ConfirmOptions, - PromptOptions, - PromptResult, - LoginOptions, - LoginResult, - ActionOptions, + ConfirmOptions, + PromptOptions, + PromptResult, + LoginOptions, + LoginResult, + ActionOptions, } from "."; import { - getCurrentPage, - getLabelColor, - getButtonColors, - getTextFieldColor, - isDialogOptions, - inputType, - capitalizationType, - ALERT, - OK, - CONFIRM, - CANCEL, - PROMPT, - parseLoginOptions, + getCurrentPage, + getLabelColor, + getButtonColors, + getTextFieldColor, + isDialogOptions, + inputType, + capitalizationType, + ALERT, + OK, + CONFIRM, + CANCEL, + PROMPT, + parseLoginOptions, } from "./dialogs-common"; import { isString, isDefined, isFunction } from "../../utils/types"; import { getRootView, ios } from "../../application"; @@ -36,393 +36,393 @@ import { getRootView, ios } from "../../application"; export * from "./dialogs-common"; function addButtonsToAlertController( - alertController: UIAlertController, - options: ConfirmOptions, - callback?: Function + alertController: UIAlertController, + options: ConfirmOptions, + callback?: Function ): void { - if (!options) { - return; - } - - if (isString(options.cancelButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.cancelButtonText, - UIAlertActionStyle.Default, - () => { - raiseCallback(callback, false); - } - ) - ); - } - - if (isString(options.neutralButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.neutralButtonText, - UIAlertActionStyle.Default, - () => { - raiseCallback(callback, undefined); - } - ) - ); - } - - if (isString(options.okButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.okButtonText, - UIAlertActionStyle.Default, - () => { - raiseCallback(callback, true); - } - ) - ); - } + if (!options) { + return; + } + + if (isString(options.cancelButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.cancelButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, false); + } + ) + ); + } + + if (isString(options.neutralButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.neutralButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, undefined); + } + ) + ); + } + + if (isString(options.okButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.okButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, true); + } + ) + ); + } } function raiseCallback(callback, result) { - if (isFunction(callback)) { - callback(result); - } + if (isFunction(callback)) { + callback(result); + } } export function alert(arg: any): Promise { - return new Promise((resolve, reject) => { - try { - let options = !isDialogOptions(arg) - ? { title: ALERT, okButtonText: OK, message: arg + "" } - : arg; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - addButtonsToAlertController(alertController, options, () => { - resolve(); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + return new Promise((resolve, reject) => { + try { + let options = !isDialogOptions(arg) + ? { title: ALERT, okButtonText: OK, message: arg + "" } + : arg; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + addButtonsToAlertController(alertController, options, () => { + resolve(); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function confirm(arg: any): Promise { - return new Promise((resolve, reject) => { - try { - let options = !isDialogOptions(arg) - ? { - title: CONFIRM, - okButtonText: OK, - cancelButtonText: CANCEL, - message: arg + "", - } - : arg; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - addButtonsToAlertController(alertController, options, (r) => { - resolve(r); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + return new Promise((resolve, reject) => { + try { + let options = !isDialogOptions(arg) + ? { + title: CONFIRM, + okButtonText: OK, + cancelButtonText: CANCEL, + message: arg + "", + } + : arg; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + addButtonsToAlertController(alertController, options, (r) => { + resolve(r); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function prompt(arg: any): Promise { - let options: PromptOptions; - - let defaultOptions = { - title: PROMPT, - okButtonText: OK, - cancelButtonText: CANCEL, - inputType: inputType.text, - }; - - if (arguments.length === 1) { - if (isString(arg)) { - options = defaultOptions; - options.message = arg; - } else { - options = arg; - } - } else if (arguments.length === 2) { - if (isString(arguments[0]) && isString(arguments[1])) { - options = defaultOptions; - options.message = arguments[0]; - options.defaultText = arguments[1]; - } - } - - return new Promise((resolve, reject) => { - try { - let textField: UITextField; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - alertController.addTextFieldWithConfigurationHandler( - (arg: UITextField) => { - arg.text = isString(options.defaultText) ? options.defaultText : ""; - arg.secureTextEntry = - options && options.inputType === inputType.password; - - if (options && options.inputType === inputType.email) { - arg.keyboardType = UIKeyboardType.EmailAddress; - } else if (options && options.inputType === inputType.number) { - arg.keyboardType = UIKeyboardType.NumberPad; - } else if (options && options.inputType === inputType.decimal) { - arg.keyboardType = UIKeyboardType.DecimalPad; - } else if (options && options.inputType === inputType.phone) { - arg.keyboardType = UIKeyboardType.PhonePad; - } - - let color = getTextFieldColor(); - if (color) { - arg.textColor = arg.tintColor = color.ios; - } - } - ); - - textField = alertController.textFields.firstObject; - - if (options) { - switch (options.capitalizationType) { - case capitalizationType.all: { - textField.autocapitalizationType = - UITextAutocapitalizationType.AllCharacters; - break; - } - case capitalizationType.sentences: { - textField.autocapitalizationType = - UITextAutocapitalizationType.Sentences; - break; - } - case capitalizationType.words: { - textField.autocapitalizationType = - UITextAutocapitalizationType.Words; - break; - } - default: { - textField.autocapitalizationType = - UITextAutocapitalizationType.None; - } - } - } - - addButtonsToAlertController(alertController, options, (r) => { - resolve({ result: r, text: textField.text }); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + let options: PromptOptions; + + let defaultOptions = { + title: PROMPT, + okButtonText: OK, + cancelButtonText: CANCEL, + inputType: inputType.text, + }; + + if (arguments.length === 1) { + if (isString(arg)) { + options = defaultOptions; + options.message = arg; + } else { + options = arg; + } + } else if (arguments.length === 2) { + if (isString(arguments[0]) && isString(arguments[1])) { + options = defaultOptions; + options.message = arguments[0]; + options.defaultText = arguments[1]; + } + } + + return new Promise((resolve, reject) => { + try { + let textField: UITextField; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.text = isString(options.defaultText) ? options.defaultText : ""; + arg.secureTextEntry = + options && options.inputType === inputType.password; + + if (options && options.inputType === inputType.email) { + arg.keyboardType = UIKeyboardType.EmailAddress; + } else if (options && options.inputType === inputType.number) { + arg.keyboardType = UIKeyboardType.NumberPad; + } else if (options && options.inputType === inputType.decimal) { + arg.keyboardType = UIKeyboardType.DecimalPad; + } else if (options && options.inputType === inputType.phone) { + arg.keyboardType = UIKeyboardType.PhonePad; + } + + let color = getTextFieldColor(); + if (color) { + arg.textColor = arg.tintColor = color.ios; + } + } + ); + + textField = alertController.textFields.firstObject; + + if (options) { + switch (options.capitalizationType) { + case capitalizationType.all: { + textField.autocapitalizationType = + UITextAutocapitalizationType.AllCharacters; + break; + } + case capitalizationType.sentences: { + textField.autocapitalizationType = + UITextAutocapitalizationType.Sentences; + break; + } + case capitalizationType.words: { + textField.autocapitalizationType = + UITextAutocapitalizationType.Words; + break; + } + default: { + textField.autocapitalizationType = + UITextAutocapitalizationType.None; + } + } + } + + addButtonsToAlertController(alertController, options, (r) => { + resolve({ result: r, text: textField.text }); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function login(...args: any[]): Promise { - let options: LoginOptions = parseLoginOptions(args); - - return new Promise((resolve, reject) => { - try { - let userNameTextField: UITextField; - let passwordTextField: UITextField; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - let textFieldColor = getTextFieldColor(); - - alertController.addTextFieldWithConfigurationHandler( - (arg: UITextField) => { - arg.placeholder = "Login"; - arg.placeholder = options.userNameHint ? options.userNameHint : ""; - arg.text = isString(options.userName) ? options.userName : ""; - - if (textFieldColor) { - arg.textColor = arg.tintColor = textFieldColor.ios; - } - } - ); - - alertController.addTextFieldWithConfigurationHandler( - (arg: UITextField) => { - arg.placeholder = "Password"; - arg.secureTextEntry = true; - arg.placeholder = options.passwordHint ? options.passwordHint : ""; - arg.text = isString(options.password) ? options.password : ""; - - if (textFieldColor) { - arg.textColor = arg.tintColor = textFieldColor.ios; - } - } - ); - - userNameTextField = alertController.textFields.firstObject; - passwordTextField = alertController.textFields.lastObject; - - addButtonsToAlertController(alertController, options, (r) => { - resolve({ - result: r, - userName: userNameTextField.text, - password: passwordTextField.text, - }); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + let options: LoginOptions = parseLoginOptions(args); + + return new Promise((resolve, reject) => { + try { + let userNameTextField: UITextField; + let passwordTextField: UITextField; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + let textFieldColor = getTextFieldColor(); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.placeholder = "Login"; + arg.placeholder = options.userNameHint ? options.userNameHint : ""; + arg.text = isString(options.userName) ? options.userName : ""; + + if (textFieldColor) { + arg.textColor = arg.tintColor = textFieldColor.ios; + } + } + ); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.placeholder = "Password"; + arg.secureTextEntry = true; + arg.placeholder = options.passwordHint ? options.passwordHint : ""; + arg.text = isString(options.password) ? options.password : ""; + + if (textFieldColor) { + arg.textColor = arg.tintColor = textFieldColor.ios; + } + } + ); + + userNameTextField = alertController.textFields.firstObject; + passwordTextField = alertController.textFields.lastObject; + + addButtonsToAlertController(alertController, options, (r) => { + resolve({ + result: r, + userName: userNameTextField.text, + password: passwordTextField.text, + }); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } function showUIAlertController(alertController: UIAlertController) { - let viewController = ios.rootController; - - while (viewController && viewController.presentedViewController) { - viewController = viewController.presentedViewController; - } - - if (!viewController) { - traceWrite( - `No root controller found to open dialog.`, - traceCategories.Error, - traceMessageType.warn - ); - - return; - } - - if (alertController.popoverPresentationController) { - alertController.popoverPresentationController.sourceView = - viewController.view; - alertController.popoverPresentationController.sourceRect = CGRectMake( - viewController.view.bounds.size.width / 2.0, - viewController.view.bounds.size.height / 2.0, - 1.0, - 1.0 - ); - alertController.popoverPresentationController.permittedArrowDirections = 0; - } - - let color = getButtonColors().color; - if (color) { - alertController.view.tintColor = color.ios; - } - - let lblColor = getLabelColor(); - if (lblColor) { - if (alertController.title) { - let title = NSAttributedString.alloc().initWithStringAttributes( - alertController.title, - { [NSForegroundColorAttributeName]: lblColor.ios } - ); - alertController.setValueForKey(title, "attributedTitle"); - } - if (alertController.message) { - let message = NSAttributedString.alloc().initWithStringAttributes( - alertController.message, - { [NSForegroundColorAttributeName]: lblColor.ios } - ); - alertController.setValueForKey(message, "attributedMessage"); - } - } - - viewController.presentModalViewControllerAnimated(alertController, true); + let viewController = ios.rootController; + + while (viewController && viewController.presentedViewController) { + viewController = viewController.presentedViewController; + } + + if (!viewController) { + traceWrite( + `No root controller found to open dialog.`, + traceCategories.Error, + traceMessageType.warn + ); + + return; + } + + if (alertController.popoverPresentationController) { + alertController.popoverPresentationController.sourceView = + viewController.view; + alertController.popoverPresentationController.sourceRect = CGRectMake( + viewController.view.bounds.size.width / 2.0, + viewController.view.bounds.size.height / 2.0, + 1.0, + 1.0 + ); + alertController.popoverPresentationController.permittedArrowDirections = 0; + } + + let color = getButtonColors().color; + if (color) { + alertController.view.tintColor = color.ios; + } + + let lblColor = getLabelColor(); + if (lblColor) { + if (alertController.title) { + let title = NSAttributedString.alloc().initWithStringAttributes( + alertController.title, + { [NSForegroundColorAttributeName]: lblColor.ios } + ); + alertController.setValueForKey(title, "attributedTitle"); + } + if (alertController.message) { + let message = NSAttributedString.alloc().initWithStringAttributes( + alertController.message, + { [NSForegroundColorAttributeName]: lblColor.ios } + ); + alertController.setValueForKey(message, "attributedMessage"); + } + } + + viewController.presentModalViewControllerAnimated(alertController, true); } export function action(): Promise { - let options: ActionOptions; - - let defaultOptions = { title: null, cancelButtonText: CANCEL }; - - if (arguments.length === 1) { - if (isString(arguments[0])) { - options = defaultOptions; - options.message = arguments[0]; - } else { - options = arguments[0]; - } - } else if (arguments.length === 2) { - if (isString(arguments[0]) && isString(arguments[1])) { - options = defaultOptions; - options.message = arguments[0]; - options.cancelButtonText = arguments[1]; - } - } else if (arguments.length === 3) { - if ( - isString(arguments[0]) && - isString(arguments[1]) && - isDefined(arguments[2]) - ) { - options = defaultOptions; - options.message = arguments[0]; - options.cancelButtonText = arguments[1]; - options.actions = arguments[2]; - } - } - - return new Promise((resolve, reject) => { - try { - let i: number; - let action: string; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.ActionSheet - ); - - if (options.actions) { - for (i = 0; i < options.actions.length; i++) { - action = options.actions[i]; - if (isString(action)) { - const thisActionIsDestructive = - options.destructiveActionsIndexes && - options.destructiveActionsIndexes.indexOf(i) !== -1; - const dialogType = thisActionIsDestructive - ? UIAlertActionStyle.Destructive - : UIAlertActionStyle.Default; - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - action, - dialogType, - (arg: UIAlertAction) => { - resolve(arg.title); - } - ) - ); - } - } - } - - if (isString(options.cancelButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.cancelButtonText, - UIAlertActionStyle.Cancel, - (arg: UIAlertAction) => { - resolve(arg.title); - } - ) - ); - } - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + let options: ActionOptions; + + let defaultOptions = { title: null, cancelButtonText: CANCEL }; + + if (arguments.length === 1) { + if (isString(arguments[0])) { + options = defaultOptions; + options.message = arguments[0]; + } else { + options = arguments[0]; + } + } else if (arguments.length === 2) { + if (isString(arguments[0]) && isString(arguments[1])) { + options = defaultOptions; + options.message = arguments[0]; + options.cancelButtonText = arguments[1]; + } + } else if (arguments.length === 3) { + if ( + isString(arguments[0]) && + isString(arguments[1]) && + isDefined(arguments[2]) + ) { + options = defaultOptions; + options.message = arguments[0]; + options.cancelButtonText = arguments[1]; + options.actions = arguments[2]; + } + } + + return new Promise((resolve, reject) => { + try { + let i: number; + let action: string; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.ActionSheet + ); + + if (options.actions) { + for (i = 0; i < options.actions.length; i++) { + action = options.actions[i]; + if (isString(action)) { + const thisActionIsDestructive = + options.destructiveActionsIndexes && + options.destructiveActionsIndexes.indexOf(i) !== -1; + const dialogType = thisActionIsDestructive + ? UIAlertActionStyle.Destructive + : UIAlertActionStyle.Default; + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + action, + dialogType, + (arg: UIAlertAction) => { + resolve(arg.title); + } + ) + ); + } + } + } + + if (isString(options.cancelButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.cancelButtonText, + UIAlertActionStyle.Cancel, + (arg: UIAlertAction) => { + resolve(arg.title); + } + ) + ); + } + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } From e6c0aa2ffba81ee32b9e28cb41993861e0bc9066 Mon Sep 17 00:00:00 2001 From: Diego Rodriguez Date: Mon, 6 Jul 2020 11:56:47 +0200 Subject: [PATCH 6/7] style: indent using tabs Tab-width = 2 spaces --- nativescript-core/ui/dialogs/dialogs.ios.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nativescript-core/ui/dialogs/dialogs.ios.ts b/nativescript-core/ui/dialogs/dialogs.ios.ts index 650e315bc8..408da2a7b3 100644 --- a/nativescript-core/ui/dialogs/dialogs.ios.ts +++ b/nativescript-core/ui/dialogs/dialogs.ios.ts @@ -114,11 +114,11 @@ export function confirm(arg: any): Promise { try { let options = !isDialogOptions(arg) ? { - title: CONFIRM, - okButtonText: OK, - cancelButtonText: CANCEL, - message: arg + "", - } + title: CONFIRM, + okButtonText: OK, + cancelButtonText: CANCEL, + message: arg + "", + } : arg; let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( options.title, From 06dd08388eb213abeea206072265b1de201a6d90 Mon Sep 17 00:00:00 2001 From: Diego Rodriguez Date: Mon, 6 Jul 2020 12:01:30 +0200 Subject: [PATCH 7/7] style: convert to 4 space indentation Since this is what Travis CI is asking. See: https://travis-ci.org/github/NativeScript/NativeScript/builds/705343740 --- nativescript-core/ui/dialogs/dialogs.ios.ts | 782 ++++++++++---------- 1 file changed, 391 insertions(+), 391 deletions(-) diff --git a/nativescript-core/ui/dialogs/dialogs.ios.ts b/nativescript-core/ui/dialogs/dialogs.ios.ts index 408da2a7b3..0e535c5de0 100644 --- a/nativescript-core/ui/dialogs/dialogs.ios.ts +++ b/nativescript-core/ui/dialogs/dialogs.ios.ts @@ -2,33 +2,33 @@ * iOS specific dialogs functions implementation. */ import { - ios as iosView, - traceCategories, - traceWrite, - traceMessageType, + ios as iosView, + traceCategories, + traceWrite, + traceMessageType, } from "../core/view"; import { - ConfirmOptions, - PromptOptions, - PromptResult, - LoginOptions, - LoginResult, - ActionOptions, + ConfirmOptions, + PromptOptions, + PromptResult, + LoginOptions, + LoginResult, + ActionOptions, } from "."; import { - getCurrentPage, - getLabelColor, - getButtonColors, - getTextFieldColor, - isDialogOptions, - inputType, - capitalizationType, - ALERT, - OK, - CONFIRM, - CANCEL, - PROMPT, - parseLoginOptions, + getCurrentPage, + getLabelColor, + getButtonColors, + getTextFieldColor, + isDialogOptions, + inputType, + capitalizationType, + ALERT, + OK, + CONFIRM, + CANCEL, + PROMPT, + parseLoginOptions, } from "./dialogs-common"; import { isString, isDefined, isFunction } from "../../utils/types"; import { getRootView, ios } from "../../application"; @@ -36,393 +36,393 @@ import { getRootView, ios } from "../../application"; export * from "./dialogs-common"; function addButtonsToAlertController( - alertController: UIAlertController, - options: ConfirmOptions, - callback?: Function + alertController: UIAlertController, + options: ConfirmOptions, + callback?: Function ): void { - if (!options) { - return; - } - - if (isString(options.cancelButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.cancelButtonText, - UIAlertActionStyle.Default, - () => { - raiseCallback(callback, false); - } - ) - ); - } - - if (isString(options.neutralButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.neutralButtonText, - UIAlertActionStyle.Default, - () => { - raiseCallback(callback, undefined); - } - ) - ); - } - - if (isString(options.okButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.okButtonText, - UIAlertActionStyle.Default, - () => { - raiseCallback(callback, true); - } - ) - ); - } + if (!options) { + return; + } + + if (isString(options.cancelButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.cancelButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, false); + } + ) + ); + } + + if (isString(options.neutralButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.neutralButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, undefined); + } + ) + ); + } + + if (isString(options.okButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.okButtonText, + UIAlertActionStyle.Default, + () => { + raiseCallback(callback, true); + } + ) + ); + } } function raiseCallback(callback, result) { - if (isFunction(callback)) { - callback(result); - } + if (isFunction(callback)) { + callback(result); + } } export function alert(arg: any): Promise { - return new Promise((resolve, reject) => { - try { - let options = !isDialogOptions(arg) - ? { title: ALERT, okButtonText: OK, message: arg + "" } - : arg; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - addButtonsToAlertController(alertController, options, () => { - resolve(); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + return new Promise((resolve, reject) => { + try { + let options = !isDialogOptions(arg) + ? { title: ALERT, okButtonText: OK, message: arg + "" } + : arg; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + addButtonsToAlertController(alertController, options, () => { + resolve(); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function confirm(arg: any): Promise { - return new Promise((resolve, reject) => { - try { - let options = !isDialogOptions(arg) - ? { - title: CONFIRM, - okButtonText: OK, - cancelButtonText: CANCEL, - message: arg + "", - } - : arg; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - addButtonsToAlertController(alertController, options, (r) => { - resolve(r); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + return new Promise((resolve, reject) => { + try { + let options = !isDialogOptions(arg) + ? { + title: CONFIRM, + okButtonText: OK, + cancelButtonText: CANCEL, + message: arg + "", + } + : arg; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + addButtonsToAlertController(alertController, options, (r) => { + resolve(r); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function prompt(arg: any): Promise { - let options: PromptOptions; - - let defaultOptions = { - title: PROMPT, - okButtonText: OK, - cancelButtonText: CANCEL, - inputType: inputType.text, - }; - - if (arguments.length === 1) { - if (isString(arg)) { - options = defaultOptions; - options.message = arg; - } else { - options = arg; - } - } else if (arguments.length === 2) { - if (isString(arguments[0]) && isString(arguments[1])) { - options = defaultOptions; - options.message = arguments[0]; - options.defaultText = arguments[1]; - } - } - - return new Promise((resolve, reject) => { - try { - let textField: UITextField; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - alertController.addTextFieldWithConfigurationHandler( - (arg: UITextField) => { - arg.text = isString(options.defaultText) ? options.defaultText : ""; - arg.secureTextEntry = - options && options.inputType === inputType.password; - - if (options && options.inputType === inputType.email) { - arg.keyboardType = UIKeyboardType.EmailAddress; - } else if (options && options.inputType === inputType.number) { - arg.keyboardType = UIKeyboardType.NumberPad; - } else if (options && options.inputType === inputType.decimal) { - arg.keyboardType = UIKeyboardType.DecimalPad; - } else if (options && options.inputType === inputType.phone) { - arg.keyboardType = UIKeyboardType.PhonePad; - } - - let color = getTextFieldColor(); - if (color) { - arg.textColor = arg.tintColor = color.ios; - } - } - ); - - textField = alertController.textFields.firstObject; - - if (options) { - switch (options.capitalizationType) { - case capitalizationType.all: { - textField.autocapitalizationType = - UITextAutocapitalizationType.AllCharacters; - break; - } - case capitalizationType.sentences: { - textField.autocapitalizationType = - UITextAutocapitalizationType.Sentences; - break; - } - case capitalizationType.words: { - textField.autocapitalizationType = - UITextAutocapitalizationType.Words; - break; - } - default: { - textField.autocapitalizationType = - UITextAutocapitalizationType.None; - } - } - } - - addButtonsToAlertController(alertController, options, (r) => { - resolve({ result: r, text: textField.text }); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + let options: PromptOptions; + + let defaultOptions = { + title: PROMPT, + okButtonText: OK, + cancelButtonText: CANCEL, + inputType: inputType.text, + }; + + if (arguments.length === 1) { + if (isString(arg)) { + options = defaultOptions; + options.message = arg; + } else { + options = arg; + } + } else if (arguments.length === 2) { + if (isString(arguments[0]) && isString(arguments[1])) { + options = defaultOptions; + options.message = arguments[0]; + options.defaultText = arguments[1]; + } + } + + return new Promise((resolve, reject) => { + try { + let textField: UITextField; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.text = isString(options.defaultText) ? options.defaultText : ""; + arg.secureTextEntry = + options && options.inputType === inputType.password; + + if (options && options.inputType === inputType.email) { + arg.keyboardType = UIKeyboardType.EmailAddress; + } else if (options && options.inputType === inputType.number) { + arg.keyboardType = UIKeyboardType.NumberPad; + } else if (options && options.inputType === inputType.decimal) { + arg.keyboardType = UIKeyboardType.DecimalPad; + } else if (options && options.inputType === inputType.phone) { + arg.keyboardType = UIKeyboardType.PhonePad; + } + + let color = getTextFieldColor(); + if (color) { + arg.textColor = arg.tintColor = color.ios; + } + } + ); + + textField = alertController.textFields.firstObject; + + if (options) { + switch (options.capitalizationType) { + case capitalizationType.all: { + textField.autocapitalizationType = + UITextAutocapitalizationType.AllCharacters; + break; + } + case capitalizationType.sentences: { + textField.autocapitalizationType = + UITextAutocapitalizationType.Sentences; + break; + } + case capitalizationType.words: { + textField.autocapitalizationType = + UITextAutocapitalizationType.Words; + break; + } + default: { + textField.autocapitalizationType = + UITextAutocapitalizationType.None; + } + } + } + + addButtonsToAlertController(alertController, options, (r) => { + resolve({ result: r, text: textField.text }); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } export function login(...args: any[]): Promise { - let options: LoginOptions = parseLoginOptions(args); - - return new Promise((resolve, reject) => { - try { - let userNameTextField: UITextField; - let passwordTextField: UITextField; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.Alert - ); - - let textFieldColor = getTextFieldColor(); - - alertController.addTextFieldWithConfigurationHandler( - (arg: UITextField) => { - arg.placeholder = "Login"; - arg.placeholder = options.userNameHint ? options.userNameHint : ""; - arg.text = isString(options.userName) ? options.userName : ""; - - if (textFieldColor) { - arg.textColor = arg.tintColor = textFieldColor.ios; - } - } - ); - - alertController.addTextFieldWithConfigurationHandler( - (arg: UITextField) => { - arg.placeholder = "Password"; - arg.secureTextEntry = true; - arg.placeholder = options.passwordHint ? options.passwordHint : ""; - arg.text = isString(options.password) ? options.password : ""; - - if (textFieldColor) { - arg.textColor = arg.tintColor = textFieldColor.ios; - } - } - ); - - userNameTextField = alertController.textFields.firstObject; - passwordTextField = alertController.textFields.lastObject; - - addButtonsToAlertController(alertController, options, (r) => { - resolve({ - result: r, - userName: userNameTextField.text, - password: passwordTextField.text, - }); - }); - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + let options: LoginOptions = parseLoginOptions(args); + + return new Promise((resolve, reject) => { + try { + let userNameTextField: UITextField; + let passwordTextField: UITextField; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.Alert + ); + + let textFieldColor = getTextFieldColor(); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.placeholder = "Login"; + arg.placeholder = options.userNameHint ? options.userNameHint : ""; + arg.text = isString(options.userName) ? options.userName : ""; + + if (textFieldColor) { + arg.textColor = arg.tintColor = textFieldColor.ios; + } + } + ); + + alertController.addTextFieldWithConfigurationHandler( + (arg: UITextField) => { + arg.placeholder = "Password"; + arg.secureTextEntry = true; + arg.placeholder = options.passwordHint ? options.passwordHint : ""; + arg.text = isString(options.password) ? options.password : ""; + + if (textFieldColor) { + arg.textColor = arg.tintColor = textFieldColor.ios; + } + } + ); + + userNameTextField = alertController.textFields.firstObject; + passwordTextField = alertController.textFields.lastObject; + + addButtonsToAlertController(alertController, options, (r) => { + resolve({ + result: r, + userName: userNameTextField.text, + password: passwordTextField.text, + }); + }); + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); } function showUIAlertController(alertController: UIAlertController) { - let viewController = ios.rootController; - - while (viewController && viewController.presentedViewController) { - viewController = viewController.presentedViewController; - } - - if (!viewController) { - traceWrite( - `No root controller found to open dialog.`, - traceCategories.Error, - traceMessageType.warn - ); - - return; - } - - if (alertController.popoverPresentationController) { - alertController.popoverPresentationController.sourceView = - viewController.view; - alertController.popoverPresentationController.sourceRect = CGRectMake( - viewController.view.bounds.size.width / 2.0, - viewController.view.bounds.size.height / 2.0, - 1.0, - 1.0 - ); - alertController.popoverPresentationController.permittedArrowDirections = 0; - } - - let color = getButtonColors().color; - if (color) { - alertController.view.tintColor = color.ios; - } - - let lblColor = getLabelColor(); - if (lblColor) { - if (alertController.title) { - let title = NSAttributedString.alloc().initWithStringAttributes( - alertController.title, - { [NSForegroundColorAttributeName]: lblColor.ios } - ); - alertController.setValueForKey(title, "attributedTitle"); - } - if (alertController.message) { - let message = NSAttributedString.alloc().initWithStringAttributes( - alertController.message, - { [NSForegroundColorAttributeName]: lblColor.ios } - ); - alertController.setValueForKey(message, "attributedMessage"); - } - } - - viewController.presentModalViewControllerAnimated(alertController, true); + let viewController = ios.rootController; + + while (viewController && viewController.presentedViewController) { + viewController = viewController.presentedViewController; + } + + if (!viewController) { + traceWrite( + `No root controller found to open dialog.`, + traceCategories.Error, + traceMessageType.warn + ); + + return; + } + + if (alertController.popoverPresentationController) { + alertController.popoverPresentationController.sourceView = + viewController.view; + alertController.popoverPresentationController.sourceRect = CGRectMake( + viewController.view.bounds.size.width / 2.0, + viewController.view.bounds.size.height / 2.0, + 1.0, + 1.0 + ); + alertController.popoverPresentationController.permittedArrowDirections = 0; + } + + let color = getButtonColors().color; + if (color) { + alertController.view.tintColor = color.ios; + } + + let lblColor = getLabelColor(); + if (lblColor) { + if (alertController.title) { + let title = NSAttributedString.alloc().initWithStringAttributes( + alertController.title, + { [NSForegroundColorAttributeName]: lblColor.ios } + ); + alertController.setValueForKey(title, "attributedTitle"); + } + if (alertController.message) { + let message = NSAttributedString.alloc().initWithStringAttributes( + alertController.message, + { [NSForegroundColorAttributeName]: lblColor.ios } + ); + alertController.setValueForKey(message, "attributedMessage"); + } + } + + viewController.presentModalViewControllerAnimated(alertController, true); } export function action(): Promise { - let options: ActionOptions; - - let defaultOptions = { title: null, cancelButtonText: CANCEL }; - - if (arguments.length === 1) { - if (isString(arguments[0])) { - options = defaultOptions; - options.message = arguments[0]; - } else { - options = arguments[0]; - } - } else if (arguments.length === 2) { - if (isString(arguments[0]) && isString(arguments[1])) { - options = defaultOptions; - options.message = arguments[0]; - options.cancelButtonText = arguments[1]; - } - } else if (arguments.length === 3) { - if ( - isString(arguments[0]) && - isString(arguments[1]) && - isDefined(arguments[2]) - ) { - options = defaultOptions; - options.message = arguments[0]; - options.cancelButtonText = arguments[1]; - options.actions = arguments[2]; - } - } - - return new Promise((resolve, reject) => { - try { - let i: number; - let action: string; - let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( - options.title, - options.message, - UIAlertControllerStyle.ActionSheet - ); - - if (options.actions) { - for (i = 0; i < options.actions.length; i++) { - action = options.actions[i]; - if (isString(action)) { - const thisActionIsDestructive = - options.destructiveActionsIndexes && - options.destructiveActionsIndexes.indexOf(i) !== -1; - const dialogType = thisActionIsDestructive - ? UIAlertActionStyle.Destructive - : UIAlertActionStyle.Default; - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - action, - dialogType, - (arg: UIAlertAction) => { - resolve(arg.title); - } - ) - ); - } - } - } - - if (isString(options.cancelButtonText)) { - alertController.addAction( - UIAlertAction.actionWithTitleStyleHandler( - options.cancelButtonText, - UIAlertActionStyle.Cancel, - (arg: UIAlertAction) => { - resolve(arg.title); - } - ) - ); - } - - showUIAlertController(alertController); - } catch (ex) { - reject(ex); - } - }); + let options: ActionOptions; + + let defaultOptions = { title: null, cancelButtonText: CANCEL }; + + if (arguments.length === 1) { + if (isString(arguments[0])) { + options = defaultOptions; + options.message = arguments[0]; + } else { + options = arguments[0]; + } + } else if (arguments.length === 2) { + if (isString(arguments[0]) && isString(arguments[1])) { + options = defaultOptions; + options.message = arguments[0]; + options.cancelButtonText = arguments[1]; + } + } else if (arguments.length === 3) { + if ( + isString(arguments[0]) && + isString(arguments[1]) && + isDefined(arguments[2]) + ) { + options = defaultOptions; + options.message = arguments[0]; + options.cancelButtonText = arguments[1]; + options.actions = arguments[2]; + } + } + + return new Promise((resolve, reject) => { + try { + let i: number; + let action: string; + let alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle( + options.title, + options.message, + UIAlertControllerStyle.ActionSheet + ); + + if (options.actions) { + for (i = 0; i < options.actions.length; i++) { + action = options.actions[i]; + if (isString(action)) { + const thisActionIsDestructive = + options.destructiveActionsIndexes && + options.destructiveActionsIndexes.indexOf(i) !== -1; + const dialogType = thisActionIsDestructive + ? UIAlertActionStyle.Destructive + : UIAlertActionStyle.Default; + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + action, + dialogType, + (arg: UIAlertAction) => { + resolve(arg.title); + } + ) + ); + } + } + } + + if (isString(options.cancelButtonText)) { + alertController.addAction( + UIAlertAction.actionWithTitleStyleHandler( + options.cancelButtonText, + UIAlertActionStyle.Cancel, + (arg: UIAlertAction) => { + resolve(arg.title); + } + ) + ); + } + + showUIAlertController(alertController); + } catch (ex) { + reject(ex); + } + }); }