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