From 7ed49aeea670eeafb6491f67636ffeb9ab0850e7 Mon Sep 17 00:00:00 2001 From: Martin Hettiger Date: Sun, 30 Sep 2018 15:45:17 +0200 Subject: [PATCH 1/2] feat: implement capitalization type option for prompt dialogs Allow setting auto capitalization to "none", "all", "sentences" and "words". This feature works on both Android and iOS. --- tns-core-modules/ui/dialogs/dialogs-common.ts | 25 ++++++++++++++++ .../ui/dialogs/dialogs.android.ts | 17 ++++++++++- tns-core-modules/ui/dialogs/dialogs.d.ts | 30 +++++++++++++++++++ tns-core-modules/ui/dialogs/dialogs.ios.ts | 19 +++++++++++- 4 files changed, 89 insertions(+), 2 deletions(-) diff --git a/tns-core-modules/ui/dialogs/dialogs-common.ts b/tns-core-modules/ui/dialogs/dialogs-common.ts index bade766b58..441c6a3661 100644 --- a/tns-core-modules/ui/dialogs/dialogs-common.ts +++ b/tns-core-modules/ui/dialogs/dialogs-common.ts @@ -33,6 +33,31 @@ export module inputType { export const email: string = "email"; } +/** + * Defines the capitalization type for prompt dialog. + */ +export module capitalizationType { + /** + * No automatic capitalization. + */ + export const none: string = "none"; + + /** + * Capitalizes every character. + */ + export const all: string = "all"; + + /** + * Capitalize the first word of each sentence. + */ + export const sentences: string = "sentences"; + + /** + * Capitalize the first letter of every word. + */ + export const words: string = "words"; +} + let frame: typeof frameModule; export function getCurrentPage(): Page { if (!frame) { diff --git a/tns-core-modules/ui/dialogs/dialogs.android.ts b/tns-core-modules/ui/dialogs/dialogs.android.ts index 63962506d3..7d6c81d33e 100644 --- a/tns-core-modules/ui/dialogs/dialogs.android.ts +++ b/tns-core-modules/ui/dialogs/dialogs.android.ts @@ -2,7 +2,7 @@ * Android specific dialogs functions implementation. */ import { DialogOptions, ConfirmOptions, PromptOptions, PromptResult, LoginOptions, LoginResult, ActionOptions } from "."; -import { getLabelColor, getButtonColors, isDialogOptions, inputType, ALERT, OK, CONFIRM, CANCEL, PROMPT, LOGIN } from "./dialogs-common"; +import { getLabelColor, getButtonColors, isDialogOptions, inputType, capitalizationType, ALERT, OK, CONFIRM, CANCEL, PROMPT, LOGIN } from "./dialogs-common"; import { android as androidApp } from "../../application"; export * from "./dialogs-common"; @@ -185,6 +185,21 @@ export function prompt(arg: any): Promise { } else if (options.inputType === inputType.email) { input.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); } + + switch (options.capitalizationType) { + case capitalizationType.all: { + input.setInputType(input.getInputType() | android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); + break; + } + case capitalizationType.sentences: { + input.setInputType(input.getInputType() | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + break; + } + case capitalizationType.words: { + input.setInputType(input.getInputType() | android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS); + break; + } + } } input.setText(options && options.defaultText || ""); diff --git a/tns-core-modules/ui/dialogs/dialogs.d.ts b/tns-core-modules/ui/dialogs/dialogs.d.ts index f9a96d6607..9921f8761d 100644 --- a/tns-core-modules/ui/dialogs/dialogs.d.ts +++ b/tns-core-modules/ui/dialogs/dialogs.d.ts @@ -23,6 +23,31 @@ export module inputType { export var email: string; } +/** + * Defines the capitalization type for prompt dialog. + */ +export module capitalizationType { + /** + * No automatic capitalization. + */ + export var none: string; + + /** + * Capitalizes every character. + */ + export var all: string; + + /** + * Capitalize the first word of each sentence. + */ + export var sentences: string; + + /** + * Capitalize the first letter of every word. + */ + export var words: string; +} + /** * The alert() method displays an alert box with a specified message. * @param message Specifies the text to display in the alert box. @@ -177,6 +202,11 @@ export interface PromptOptions extends ConfirmOptions { * Gets or sets the prompt input type (plain text, password, or email). */ inputType?: string; + + /** + * Gets or sets the prompt capitalizationType (none, all, sentences, or words). + */ + capitalizationType?: string; } /** diff --git a/tns-core-modules/ui/dialogs/dialogs.ios.ts b/tns-core-modules/ui/dialogs/dialogs.ios.ts index 776c0add16..bf748c09d5 100644 --- a/tns-core-modules/ui/dialogs/dialogs.ios.ts +++ b/tns-core-modules/ui/dialogs/dialogs.ios.ts @@ -3,7 +3,7 @@ */ import { View, ios as iosView } from "../core/view"; import { ConfirmOptions, PromptOptions, PromptResult, LoginOptions, LoginResult, ActionOptions } from "."; -import { getCurrentPage, getLabelColor, getButtonColors, getTextFieldColor, isDialogOptions, inputType, ALERT, OK, CONFIRM, CANCEL, PROMPT, LOGIN } from "./dialogs-common"; +import { getCurrentPage, getLabelColor, getButtonColors, getTextFieldColor, isDialogOptions, inputType, capitalizationType, ALERT, OK, CONFIRM, CANCEL, PROMPT, LOGIN } from "./dialogs-common"; import { isString, isDefined, isFunction } from "../../utils/types"; import { getRootView } from "../../application"; @@ -114,6 +114,23 @@ export function prompt(arg: any): Promise { 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 }); }); From 7ab3c3fb2dfd7def35e350cb43e5cef7799671de Mon Sep 17 00:00:00 2001 From: Martin Hettiger Date: Wed, 3 Oct 2018 07:16:52 +0200 Subject: [PATCH 2/2] feat: add capitalization type examples to test page for dialogs --- apps/app/ui-tests-app/dialogs/dialogs.xml | 4 ++ apps/app/ui-tests-app/dialogs/view-model.ts | 76 +++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/apps/app/ui-tests-app/dialogs/dialogs.xml b/apps/app/ui-tests-app/dialogs/dialogs.xml index cdd9a158a7..b8a68129de 100644 --- a/apps/app/ui-tests-app/dialogs/dialogs.xml +++ b/apps/app/ui-tests-app/dialogs/dialogs.xml @@ -8,5 +8,9 @@