diff --git a/client/src/views/user/fields/generate-password.js b/client/src/views/user/fields/generate-password.js
index 484c548940..13ef5a05ea 100644
--- a/client/src/views/user/fields/generate-password.js
+++ b/client/src/views/user/fields/generate-password.js
@@ -26,148 +26,153 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
-define('views/user/fields/generate-password', ['views/fields/base'], function (Dep) {
+import BaseFieldView from 'views/fields/base';
- return Dep.extend({
+class UserGeneratePasswordFieldView extends BaseFieldView {
- templateContent: '',
+ templateContent = `
+ `
- events: {
- 'click [data-action="generatePassword"]': function () {
- this.actionGeneratePassword();
- },
+ events = {
+ /** @this {UserGeneratePasswordFieldView} */
+ 'click [data-action="generatePassword"]': function () {
+ this.actionGeneratePassword();
},
+ }
- setup: function () {
- Dep.prototype.setup.call(this);
+ setup() {
+ super.setup();
- this.listenTo(this.model, 'change:password', (model, value, o) => {
- if (o.isGenerated) {
- return;
- }
-
- if (value !== undefined) {
- this.model.set('passwordPreview', null);
-
- return;
- }
-
- this.model.unset('passwordPreview');
- });
-
- this.strengthParams = this.options.strengthParams || {};
-
- this.passwordStrengthLength = this.strengthParams.passwordStrengthLength ||
- this.getConfig().get('passwordStrengthLength');
-
- this.passwordStrengthLetterCount = this.strengthParams.passwordStrengthLetterCount ||
- this.getConfig().get('passwordStrengthLetterCount');
-
- this.passwordStrengthNumberCount = this.strengthParams.passwordStrengthNumberCount ||
- this.getConfig().get('passwordStrengthNumberCount');
-
- this.passwordGenerateLength = this.strengthParams.passwordGenerateLength ||
- this.getConfig().get('passwordGenerateLength');
-
- this.passwordGenerateLetterCount = this.strengthParams.passwordGenerateLetterCount ||
- this.getConfig().get('passwordGenerateLetterCount');
-
- this.passwordGenerateNumberCount = this.strengthParams.passwordGenerateNumberCount ||
- this.getConfig().get('passwordGenerateNumberCount');
- },
-
- fetch: function () {
- return {};
- },
-
- actionGeneratePassword: function () {
- let length = this.passwordStrengthLength;
- let letterCount = this.passwordStrengthLetterCount;
- let numberCount = this.passwordStrengthNumberCount;
-
- const generateLength = this.passwordGenerateLength || 10;
- const generateLetterCount = this.passwordGenerateLetterCount || 4;
- const generateNumberCount = this.passwordGenerateNumberCount || 2;
-
- length = (typeof length === 'undefined') ? generateLength : length;
- letterCount = (typeof letterCount === 'undefined') ? generateLetterCount : letterCount;
- numberCount = (typeof numberCount === 'undefined') ? generateNumberCount : numberCount;
-
- if (length < generateLength) {
- length = generateLength;
+ this.listenTo(this.model, 'change:password', (model, value, o) => {
+ if (o.isGenerated) {
+ return;
}
- if (letterCount < generateLetterCount) {
- letterCount = generateLetterCount;
+ if (value !== undefined) {
+ this.model.set('passwordPreview', null);
+
+ return;
}
- if (numberCount < generateNumberCount) {
- numberCount = generateNumberCount;
+ this.model.unset('passwordPreview');
+ });
+
+ this.strengthParams = this.options.strengthParams || {};
+
+ this.passwordStrengthLength = this.strengthParams.passwordStrengthLength ||
+ this.getConfig().get('passwordStrengthLength');
+
+ this.passwordStrengthLetterCount = this.strengthParams.passwordStrengthLetterCount ||
+ this.getConfig().get('passwordStrengthLetterCount');
+
+ this.passwordStrengthNumberCount = this.strengthParams.passwordStrengthNumberCount ||
+ this.getConfig().get('passwordStrengthNumberCount');
+
+ this.passwordGenerateLength = this.strengthParams.passwordGenerateLength ||
+ this.getConfig().get('passwordGenerateLength');
+
+ this.passwordGenerateLetterCount = this.strengthParams.passwordGenerateLetterCount ||
+ this.getConfig().get('passwordGenerateLetterCount');
+
+ this.passwordGenerateNumberCount = this.strengthParams.passwordGenerateNumberCount ||
+ this.getConfig().get('passwordGenerateNumberCount');
+ }
+
+ fetch() {
+ return {};
+ }
+
+ actionGeneratePassword() {
+ let length = this.passwordStrengthLength;
+ let letterCount = this.passwordStrengthLetterCount;
+ let numberCount = this.passwordStrengthNumberCount;
+
+ const generateLength = this.passwordGenerateLength || 10;
+ const generateLetterCount = this.passwordGenerateLetterCount || 4;
+ const generateNumberCount = this.passwordGenerateNumberCount || 2;
+
+ length = (typeof length === 'undefined') ? generateLength : length;
+ letterCount = (typeof letterCount === 'undefined') ? generateLetterCount : letterCount;
+ numberCount = (typeof numberCount === 'undefined') ? generateNumberCount : numberCount;
+
+ if (length < generateLength) {
+ length = generateLength;
+ }
+
+ if (letterCount < generateLetterCount) {
+ letterCount = generateLetterCount;
+ }
+
+ if (numberCount < generateNumberCount) {
+ numberCount = generateNumberCount;
+ }
+
+ const password = this.generatePassword(length, letterCount, numberCount, true);
+
+ this.model.set({
+ password: password,
+ passwordConfirm: password,
+ passwordPreview: password,
+ }, {isGenerated: true});
+ }
+
+ generatePassword(length, letters, numbers, bothCases) {
+ const chars = [
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
+ '0123456789',
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'abcdefghijklmnopqrstuvwxyz',
+ ];
+
+ let upperCase = 0;
+ let lowerCase = 0;
+
+ if (bothCases) {
+ upperCase = 1;
+ lowerCase = 1;
+
+ if (letters >= 2) {
+ letters = letters - 2;
+ } else {
+ letters = 0;
+ }
+ }
+
+ let either = length - (letters + numbers + upperCase + lowerCase);
+
+ if (either < 0) {
+ either = 0;
+ }
+
+ const setList = [letters, numbers, either, upperCase, lowerCase];
+
+ const shuffle = function (array) {
+ let currentIndex = array.length, temporaryValue, randomIndex;
+
+ while (0 !== currentIndex) {
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
}
- const password = this.generatePassword(length, letterCount, numberCount, true);
+ return array;
+ };
- this.model.set({
- password: password,
- passwordConfirm: password,
- passwordPreview: password,
- }, {isGenerated: true});
- },
+ const array = setList.map(
+ (len, i) => Array(len).fill(chars[i]).map(
+ x => x[Math.floor(Math.random() * x.length)]
+ ).join('')
+ ).concat();
- generatePassword: function (length, letters, numbers, bothCases) {
- const chars = [
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
- '0123456789',
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
- 'abcdefghijklmnopqrstuvwxyz',
- ];
+ return shuffle(array).join('');
+ }
+}
- let upperCase = 0;
- let lowerCase = 0;
-
- if (bothCases) {
- upperCase = 1;
- lowerCase = 1;
-
- if (letters >= 2) {
- letters = letters - 2;
- } else {
- letters = 0;
- }
- }
-
- let either = length - (letters + numbers + upperCase + lowerCase);
-
- if (either < 0) {
- either = 0;
- }
-
- const setList = [letters, numbers, either, upperCase, lowerCase];
-
- const shuffle = function (array) {
- let currentIndex = array.length, temporaryValue, randomIndex;
-
- while (0 !== currentIndex) {
- randomIndex = Math.floor(Math.random() * currentIndex);
- currentIndex -= 1;
- temporaryValue = array[currentIndex];
- array[currentIndex] = array[randomIndex];
- array[randomIndex] = temporaryValue;
- }
-
- return array;
- };
-
- const array = setList.map(
- (len, i) => Array(len).fill(chars[i]).map(
- x => x[Math.floor(Math.random() * x.length)]
- ).join('')
- ).concat();
-
- return shuffle(array).join('');
- },
-
- });
-});
+export default UserGeneratePasswordFieldView;