blob: 4e646b16010d88dbd328ce1e38e1ae4eea2e3942 [file] [log] [blame]
Yoshie Muranakafa562732019-07-17 11:23:15 -05001<div class="uib-modal__content modal__local-users">
2 <div class="modal-header">
3 <h2 class="modal-title" id="dialog_label">
4 {{ modalCtrl.user.new ? 'Add user' : 'Modify user' }}
5 </h2>
6 <button type="button" class="btn btn--close" ng-click="$dismiss()" aria-label="Close">
7 <icon file="icon-close.svg" aria-hidden="true"></icon>
8 </button>
9 </div>
10 <form name="form">
11 <div class="modal-body">
Yoshie Muranakab4d9c092019-08-01 16:19:40 -050012 <!-- Manual unlock -->
13 <div class="row" ng-if="modalCtrl.user.locked && !modalCtrl.automaticLockout">
14 <div class="column medium-9">
15 <div class="notification-banner"
16 aria-live="polite"
17 ng-class="{'notification-banner--warning': !form.lock.$dirty,
18 'notification-banner--information': form.lock.$dirty}">
19 <p class="notification-banner__text" ng-if="!form.lock.$dirty">Account locked</p>
20 <p class="notification-banner__text" ng-if="form.lock.$dirty">Click "Save" to unlock account</p>
21 </div>
22 </div>
23 <div class="column medium-3">
24 <input
25 type="hidden"
26 name="lock"
27 ng-model="modalCtrl.manualUnlockProperty"
28 value="false">
29 <button class="btn btn-primary"
30 type="button"
31 ng-click="form.lock.$setDirty()"
32 ng-disabled="form.lock.$dirty">Unlock</button>
33 </div>
34 </div>
Yoshie Muranakafa562732019-07-17 11:23:15 -050035 <div class="row">
36 <div class="column medium-6">
37 <!-- Account Status -->
38 <fieldset class="field-group-container">
39 <legend>Account Status</legend>
40 <label class="radio-label">
41 <input type="radio"
42 name="accountStatus"
43 ng-value="true"
44 ng-model="modalCtrl.user.accountStatus"
45 ng-disabled="modalCtrl.user.isRoot">
46 Enabled
47 </label>
48 <label class="radio-label">
49 <input type="radio"
50 name="accountStatus1"
51 ng-value="false"
52 ng-model="modalCtrl.user.accountStatus"
53 ng-disabled="modalCtrl.user.isRoot">
54 Disabled
55 </label>
56 </fieldset>
57 <!-- Username -->
58 <div class="field-group-container">
59 <label for="username">Username</label>
60 <p class="label__helper-text">Cannot start with a number</p>
61 <p class="label__helper-text">No special characters except underscore</p>
62 <input id="username"
63 name="username"
64 type="text"
65 required
66 minlength="1"
67 maxlength="16"
68 ng-pattern="'^([a-zA-Z_][a-zA-Z0-9_]*)'"
69 ng-readonly="modalCtrl.user.isRoot"
70 ng-model="modalCtrl.user.username"
71 username-validator
72 existing-usernames="modalCtrl.existingUsernames"/>
73 <div ng-if="form.username.$invalid && form.username.$touched" class="form__validation-message">
74 <span ng-show="form.username.$error.required">
75 Field is required</span>
76 <span ng-show="form.username.$error.minlength || form.username.$error.maxlength">
77 Length must be between <span class="nowrap">1 – 16</span> characters</span>
78 <span ng-show="form.username.$error.pattern">
79 Invalid format</span>
80 <span ng-show="form.username.$error.duplicateUsername">
81 Username already exists</span>
82 </div>
83 </div>
84 <!-- Privlege -->
85 <div class="field-group-container">
86 <label for="privilege">Privilege</label>
87 <select id="privilege"
88 name="privilege"
89 required
90 ng-disabled="modalCtrl.user.isRoot"
91 ng-model="modalCtrl.user.privilege">
92 <option ng-if="modalCtrl.user.new"
93 ng-selected="modalCtrl.user.new"
94 value=""
95 disabled>
96 Select an option
97 </option>
98 <option ng-value="role"
99 ng-repeat="role in modalCtrl.privilegeRoles">
100 {{role}}
101 </option>
102 </select>
103 </div>
104 </div>
105 <div class="column medium-6">
106 <!-- Password -->
107 <div class="field-group-container">
108 <label for="password">User password</label>
109 <p class="label__helper-text">Password must between <span class="nowrap">{{modalCtrl.minPasswordLength}} – {{modalCtrl.maxPasswordLength}}</span> characters</p>
110 <input id="password"
111 name="password"
112 type="password"
113 ng-minlength="modalCtrl.minPasswordLength"
114 ng-maxlength="modalCtrl.maxPasswordLength"
115 autocomplete="new-password"
116 ng-required="modalCtrl.user.new || form.password.$touched || form.passwordConfirm.$touched"
117 ng-model="modalCtrl.user.password"
Yoshie Muranakafb79e542019-08-12 09:02:00 -0500118 password-visibility-toggle
Yoshie Muranakafa562732019-07-17 11:23:15 -0500119 ng-click="form.password.$setTouched()"
120 placeholder="{{
121 (modalCtrl.user.new ||
122 form.password.$touched ||
123 form.passwordConfirm.$touched) ? '' : '******'}}"/>
124 <div ng-if="form.password.$invalid && form.password.$dirty" class="form__validation-message">
125 <span ng-show="form.password.$error.required">
126 Field is required</span>
127 <span ng-show="form.password.$error.minlength || form.password.$error.maxlength">
128 Length must be between <span class="nowrap">{{modalCtrl.minPasswordLength}} – {{modalCtrl.maxPasswordLength}}</span> characters</span>
129 </div>
130 </div>
131 <!-- Password confirm -->
132 <div class="field-group-container">
133 <label for="passwordConfirm">Confirm user password</label>
134 <input id="passwordConfirm"
135 name="passwordConfirm"
136 type="password"
137 autocomplete="new-password"
138 ng-required="modalCtrl.user.new || form.password.$touched || form.passwordConfirm.$touched"
139 ng-model="modalCtrl.user.passwordConfirm"
Yoshie Muranakafb79e542019-08-12 09:02:00 -0500140 password-visibility-toggle
Yoshie Muranakafa562732019-07-17 11:23:15 -0500141 password-confirm
142 first-password="form.password.$modelValue"
143 ng-click="form.passwordConfirm.$setTouched()"
144 placeholder="{{(
145 modalCtrl.user.new ||
146 form.password.$touched ||
147 form.passwordConfirm.$touched) ? '' : '******'}}"/>
148 <div ng-if="form.passwordConfirm.$invalid && form.passwordConfirm.$dirty" class="form__validation-message">
149 <span ng-show="form.passwordConfirm.$error.required">
150 Field is required</span>
151 <span ng-show="form.passwordConfirm.$error.passwordConfirm"
152 ng-hide="form.passwordConfirm.$error.required">
153 Passwords do not match</span>
154 <span ng-show="form.passwordConfirm.$error.minlength || form.passwordConfirm.$error.maxlength">
155 Length must be between <span class="nowrap">1 – 16</span> characters</span>
156 </div>
157 </div>
158 </div>
159 </div>
160 </div>
161 <div class="modal-footer">
162 <button class="btn btn-secondary" ng-click="$dismiss()" type="button">
163 Cancel
164 </button>
165 <button class="btn btn-primary"
166 type="submit"
167 ng-click="$close(form)"
168 ng-disabled="form.$invalid || form.$pristine"
169 ng-class="{'disabled': form.$invalid}">
170 {{ modalCtrl.user.new ? 'Add user' : 'Save' }}
171 </button>
172 </div>
173 </form>
174</div>