diff --git a/lumi2/__init__.py b/lumi2/__init__.py index 46571eb..45338da 100644 --- a/lumi2/__init__.py +++ b/lumi2/__init__.py @@ -45,6 +45,5 @@ def create_app(test_config=None): app.add_url_rule('/', endpoint='index') # TODO create OUs - # TODO create static files return app diff --git a/lumi2/static/js/groupEdit.js b/lumi2/static/js/group_edit.js similarity index 81% rename from lumi2/static/js/groupEdit.js rename to lumi2/static/js/group_edit.js index ba81020..0ee4afa 100644 --- a/lumi2/static/js/groupEdit.js +++ b/lumi2/static/js/group_edit.js @@ -17,6 +17,7 @@ function removeUserFromFormField(username) { } } formField.value = JSON.stringify(newMembersList); + adjustLastMemberButtonState(); }; function addUserToFormField(username) { @@ -24,6 +25,7 @@ function addUserToFormField(username) { let oldMembersList = JSON.parse(formField.value); oldMembersList.push(username); formField.value = JSON.stringify(oldMembersList); + adjustLastMemberButtonState(); }; class MemberEntry extends AbstractUserEntry { @@ -68,9 +70,9 @@ function createRemovedMemberRow(username) { let newTableDataButton = document.createElement("td"); let newTableButton = document.createElement("button"); newTableButton.type = "button"; - newTableButton.className = "toggleMembershipButton btn btn-outline-light"; + newTableButton.className = "toggleMembershipButton inProgress btn btn-outline-light"; newTableButton.disabled = true; - newTableButton.textContent = "Being removed..."; + newTableButton.textContent = "Will be removed"; newTableDataButton.appendChild(newTableButton); newTableRow.appendChild(newTableDataButton); }; @@ -101,13 +103,31 @@ function createAddedMemberRow(username) { let newTableDataButton = document.createElement("td"); let newTableButton = document.createElement("button"); newTableButton.type = "button"; - newTableButton.className = "toggleMembershipButton btn btn-outline-light"; + newTableButton.className = "toggleMembershipButton inProgress btn btn-outline-light"; newTableButton.disabled = true; - newTableButton.textContent = "Being added..."; + newTableButton.textContent = "Will be added"; newTableDataButton.appendChild(newTableButton); newTableRow.appendChild(newTableDataButton); }; +/** + * If there is only one member in the group member table, disables that member's + * remove button. + * If there is more than one member, activates the removal button. + */ +function adjustLastMemberButtonState() { + memberRows = membersTable.querySelectorAll(".userEntry"); + if (memberRows.length == 1) { + memberRows[0].querySelector(".toggleMembershipButton").disabled = true; + } else { + for (let button of membersTable.querySelectorAll(".toggleMembershipButton")) { + if (!button.className.includes("inProgress")) { + button.disabled = false; + } + } + } +} + const membersTable = document.getElementById("groupMembers"); const nonMembersTable = document.getElementById("groupNonMembers"); let memberEntries = new Set(); @@ -120,3 +140,4 @@ for (let userEntry of document.body.querySelectorAll(".userEntry")) { nonMemberEntries.add(new NonMemberEntry(userEntry.id, userEntry)); } } +adjustLastMemberButtonState(); diff --git a/lumi2/templates/usermanager/group_edit.html b/lumi2/templates/usermanager/group_edit.html index 564f9fd..2d4e826 100644 --- a/lumi2/templates/usermanager/group_edit.html +++ b/lumi2/templates/usermanager/group_edit.html @@ -4,6 +4,8 @@
Add or remove members from {{ groupname }} here. Hit the Apply button to save your changes.
+Note that Groups must always have at least one member.