From cfba8d753727d55b15a257bfbc6703d2b1f85f9c Mon Sep 17 00:00:00 2001 From: Robert Price Date: Mon, 10 Dec 2018 12:14:35 +0000 Subject: [PATCH] Added the ability to trim leading and trailing whitespace from usernames and passwords on submission of the login form. --- README.md | 4 ++++ package.json | 2 +- src/LoginForm/LoginForm.xml | 10 +++++++++ src/LoginForm/widget/LoginForm.js | 35 ++++++++++++++++++++++++++++-- test/widgets/LoginForm.mpk | Bin 11728 -> 12007 bytes 5 files changed, 48 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 072854b..79d1b43 100644 --- a/README.md +++ b/README.md @@ -52,5 +52,9 @@ For more information on contributing to this repository visit [Contributing to a * Convert to lower/uppercase - this option will convert user name input to upper/lower case. Using this functionality only makes practical sense when all usernames defined in your application are either upper or lower cased. NOTE: MxAdmin administrative user will be accessible in both cases as well. +### Whitespace +* Trim username - this option will trim leading and trailing whitespace from the username on submission +* Trim password - this option will trim leading and trailing whitespace from the password on submission + ## Known issues - Mendix runtime returns no feedback about the existence of a username. This is by design. diff --git a/package.json b/package.json index 1016d44..8fb6bfa 100644 --- a/package.json +++ b/package.json @@ -33,4 +33,4 @@ "folders": "node ./node_modules/gulp/bin/gulp folders", "modeler": "node ./node_modules/gulp/bin/gulp modeler" } -} \ No newline at end of file +} diff --git a/src/LoginForm/LoginForm.xml b/src/LoginForm/LoginForm.xml index a272712..9e6d938 100644 --- a/src/LoginForm/LoginForm.xml +++ b/src/LoginForm/LoginForm.xml @@ -135,6 +135,16 @@ Convert to uppercase + + Trim username + Whitespace + Trim leading and trailing whitespace from the username + + + Trim password + Whitespace + Trim leading and trailing whitespace from the password + Auto-correct Mobile diff --git a/src/LoginForm/widget/LoginForm.js b/src/LoginForm/widget/LoginForm.js index a4f9b39..d465e98 100644 --- a/src/LoginForm/widget/LoginForm.js +++ b/src/LoginForm/widget/LoginForm.js @@ -13,6 +13,12 @@ ======================== A custom login form which can be used as an alternative to the default Mendix login page. */ +// polyfill for trim functionality +if (!String.prototype.trim) { + String.prototype.trim = function () { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; +} define([ "mxui/widget/_WidgetBase", "dijit/_TemplatedMixin", "mxui/dom", @@ -93,6 +99,11 @@ define([ * Case Handling */ convertCase: "none", + /** + * Whitespace handing + */ + trimPassword: false, + trimUsername: false, // Internal variables. Non-primitives created in the prototype are shared between all widget instances. _handle: null, @@ -281,8 +292,8 @@ define([ this.togglePasswordVisibility(); } - var username = this._changeCase(this.usernameInputNode.value), - password = this.passwordInputNode.value; + var username = this._trimUsername(this._changeCase(this.usernameInputNode.value)), + password = this._trimPassword(this.passwordInputNode.value); if (username && password) { if (this.showprogress) { @@ -367,6 +378,26 @@ define([ } return username; }, + /** + * Trim leading and trailing whitespace from the username if option selected. + */ + _trimUsername: function(username) { + if (this.trimUsername) { + return username.trim(); + } else { + return username; + } + }, + /** + * Trim leading and trailing whitespace from the password if option selected. + */ + _trimPassword: function(password) { + if (this.trimPassword) { + return password.trim(); + } else { + return password; + } + }, /** * Sets focus to the username input node if not the default * @private diff --git a/test/widgets/LoginForm.mpk b/test/widgets/LoginForm.mpk index fa423bad5ec9f8ccecbe6e29747bde74434d90f0..c667dde0ae619e0329fde3e2316db43a9c0933e5 100644 GIT binary patch delta 5222 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 M2@C?&@cerFKYM~~_y7O^ delta 4869 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