{{define "title"}} Users Settings {{end}} {{define "top_css"}} {{end}} {{define "username"}} {{ .username }} {{end}} {{define "page_title"}} Users Settings {{end}} {{define "page_content"}} <section class="content"> <div class="container-fluid"> <div class="row" id="users-list"> </div> </div> </section> <div class="modal fade" id="modal_edit_user"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title">Edit User</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <form name="frm_edit_user" id="frm_edit_user"> <div class="modal-body"> <div class="form-group" style="display:none"> <input type="text" style="display:none" class="form-control" id="_previous_user_name" name="_previous_user_name"> </div> <div class="form-group"> <label for="_user_name" class="control-label">Name</label> <input type="text" class="form-control" id="_user_name" name="_user_name"> </div> <div class="form-group"> <label for="_user_password" class="control-label">Password</label> <input type="password" class="form-control" id="_user_password" name="_user_password" value="" placeholder="Leave empty to keep the password unchanged"> </div> <div class="form-group"> <div class="icheck-primary d-inline"> <input type="checkbox" id="_admin"> <label for="_admin"> Admin </label> </div> </div> </div> <div class="modal-footer justify-content-between"> <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> <button type="submit" class="btn btn-success">Save</button> </div> </form> </div> <!-- /.modal-content --> </div> <!-- /.modal-dialog --> </div> <!-- /.modal --> <div class="modal fade" id="modal_remove_user"> <div class="modal-dialog"> <div class="modal-content bg-danger"> <div class="modal-header"> <h4 class="modal-title">Remove</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> </div> <div class="modal-footer justify-content-between"> <button type="button" class="btn btn-outline-dark" data-dismiss="modal">Cancel</button> <button type="button" class="btn btn-outline-dark" id="remove_user_confirm">Apply</button> </div> </div> <!-- /.modal-content --> </div> <!-- /.modal-dialog --> </div> <!-- /.modal --> {{end}} {{define "bottom_js"}} <script> function populateUsersList() { $.ajax({ cache: false, method: 'GET', url: '{{.basePath}}/get-users', dataType: 'json', contentType: "application/json", success: function (data) { renderUserList(data); }, error: function (jqXHR, exception) { const responseJson = jQuery.parseJSON(jqXHR.responseText); toastr.error(responseJson['message']); } }); } </script> <script> // load user list $(document).ready(function () { populateUsersList(); let newUserHtml = '<div class="col-sm-2 offset-md-4" style=" text-align: right;">' + '<button style="" id="btn_new_user" type="button" class="btn btn-outline-primary btn-sm" ' + 'data-toggle="modal" data-target="#modal_edit_user" data-username="">' + '<i class="nav-icon fas fa-plus"></i> New User</button></div>'; $('h1').parents(".row").append(newUserHtml); }) // modal_remove_user modal event $("#modal_remove_user").on('show.bs.modal', function (event) { const button = $(event.relatedTarget); const user_name = button.data('username'); const modal = $(this); modal.find('.modal-body').text("You are about to remove user " + user_name); modal.find('#remove_user_confirm').val(user_name); }) // remove_user_confirm button event $(document).ready(function () { $("#remove_user_confirm").click(function () { const user_name = $(this).val(); const data = {"username": user_name}; $.ajax({ cache: false, method: 'POST', url: '{{.basePath}}/remove-user', dataType: 'json', contentType: "application/json", data: JSON.stringify(data), success: function (data) { $("#modal_remove_user").modal('hide'); toastr.success('Removed user successfully'); const divElement = document.getElementById('user_' + user_name); divElement.style.display = "none"; location.reload() }, error: function (jqXHR, exception) { const responseJson = jQuery.parseJSON(jqXHR.responseText); toastr.error(responseJson['message']); } }); }); }); // Edit user modal event $(document).ready(function () { $("#modal_edit_user").on('show.bs.modal', function (event) { let modal = $(this); const button = $(event.relatedTarget); const user_name = button.data('username'); // update user modal data if (user_name !== "") { $.ajax({ cache: false, method: 'GET', url: '{{.basePath}}/api/user/' + user_name, dataType: 'json', contentType: "application/json", success: function (resp) { const user = resp; modal.find(".modal-title").text("Edit user " + user.username); modal.find("#_user_name").val(user.username); modal.find("#_previous_user_name").val(user.username); modal.find("#_user_password").val(""); modal.find("#_user_password").prop("placeholder", "Leave empty to keep the password unchanged") modal.find("#_admin").prop("checked", user.admin); }, error: function (jqXHR, exception) { const responseJson = jQuery.parseJSON(jqXHR.responseText); toastr.error(responseJson['message']); } }); } else { modal.find(".modal-title").text("Add new user"); modal.find("#_user_name").val(""); modal.find("#_previous_user_name").val(""); modal.find("#_user_password").val(""); modal.find("#_user_password").prop("placeholder", "") modal.find("#_admin").prop("checked", false); } }); }); function updateUserInfo() { const username = $("#_user_name").val(); const previous_username = $("#_previous_user_name").val(); const password = $("#_user_password").val(); let admin = false; if ($("#_admin").is(':checked')) { admin = true; } const data = { "username": username, "password": password, "previous_username": previous_username, "admin": admin }; if (previous_username !== "") { $.ajax({ cache: false, method: 'POST', url: '{{.basePath}}/update-user', dataType: 'json', contentType: "application/json", data: JSON.stringify(data), success: function (data) { toastr.success("Updated user information successfully"); location.reload(); }, error: function (jqXHR, exception) { const responseJson = jQuery.parseJSON(jqXHR.responseText); toastr.error(responseJson['message']); } }); } else { $.ajax({ cache: false, method: 'POST', url: '{{.basePath}}/create-user', dataType: 'json', contentType: "application/json", data: JSON.stringify(data), success: function (data) { toastr.success("Created user successfully"); location.reload(); }, error: function (jqXHR, exception) { const responseJson = jQuery.parseJSON(jqXHR.responseText); toastr.error(responseJson['message']); } }); } } $(document).ready(function () { $.validator.setDefaults({ submitHandler: function (form) { updateUserInfo(); } }); // Edit user form validation $("#frm_edit_user").validate({ rules: { _user_name: { required: true }, _user_password: { required: function () { return $("#_previous_user_name").val() === ""; } }, }, messages: { _user_name: { required: "Please enter a username" }, _user_password: { required: "Please input a password" }, }, errorElement: 'span', errorPlacement: function (error, element) { error.addClass('invalid-feedback'); element.closest('.form-group').append(error); }, highlight: function (element, errorClass, validClass) { $(element).addClass('is-invalid'); }, unhighlight: function (element, errorClass, validClass) { $(element).removeClass('is-invalid'); } }); // }); </script> {{end}}