/* * This file is part of Linode Manager Classic. * * Linode Manager Classic is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Linode Manager Classic is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Linode Manager Classic. If not, see . */ import { settings, elements, apiGet, md5, parseParams, setupHeader } from "/global.js"; (function() { // Element names specific to this page elements.info = "info"; elements.lmcRow = "lmc-tr1"; elements.lmcRowAlt = "lmc-tr2"; elements.loading = "loading"; elements.navlinkActive = "navlink-active"; elements.profileImg = "profile-img"; elements.userTable = "user-table"; // Data received from API calls var data = {}; data.users = []; // Static references to UI elements var ui = {}; ui.loading = {}; ui.userTable = {}; // Generates a user table row var createUserRow = function(user, alt) { var row = document.createElement("tr"); if (alt) row.className = elements.lmcRowAlt; else row.className = elements.lmcRow; var nameCell = document.createElement("td"); var imgLink = document.createElement("a"); imgLink.href = "/user/edit?user=" + user.username; var img = document.createElement("img"); img.className = elements.profileImg; img.src = "https://www.gravatar.com/avatar/" + md5(user.email); img.alt = user.username; imgLink.appendChild(img); var separator = document.createElement("span"); separator.innerHTML = " "; var nameLink = document.createElement("a"); nameLink.href = "/user/edit?user=" + user.username; nameLink.innerHTML = user.username; nameCell.appendChild(imgLink); nameCell.appendChild(separator); nameCell.appendChild(nameLink); row.appendChild(nameCell); var email = document.createElement("td"); email.innerHTML = user.email; row.appendChild(email); var restricted = document.createElement("td"); if (user.restricted) { var yes = document.createElement("span"); yes.innerHTML = "Yes ("; var permsLink = document.createElement("a"); permsLink.href = "/user/grants?user=" + user.username; permsLink.innerHTML = "edit permissions"; var close = document.createElement("span"); close.innerHTML = ")"; restricted.appendChild(yes); restricted.appendChild(permsLink); restricted.appendChild(close); } else { restricted.innerHTML = "No"; } row.appendChild(restricted); var options = document.createElement("td"); var editLink = document.createElement("a"); editLink.href = "/user/edit?user=" + user.username; editLink.innerHTML = "Edit"; var pipe = document.createElement("span"); pipe.innerHTML = " | "; var removeLink = document.createElement("a"); removeLink.href = "/user/remove?user=" + user.username; removeLink.innerHTML = "Remove"; options.appendChild(editLink); options.appendChild(pipe); options.appendChild(removeLink); row.appendChild(options); return row; }; // Callback for users API call var displayUsers = function(response) { data.users = data.users.concat(response.data); // Request the next page if there are more if (response.page != response.pages) { apiGet("/account/users?page=" + (response.page + 1), displayUsers, null); return; } ui.loading.remove(); // Add users to table for (var i = 0; i < data.users.length; i++) ui.userTable.appendChild(createUserRow(data.users[i], ui.userTable.children.length % 2)); }; // Initial setup var setup = function() { // Parse URL parameters data.params = parseParams(); setupHeader(); // Highlight the account nav link var navlinks = document.getElementsByClassName(elements.navlink); for (var i = 0; i < navlinks.length; i++) { if (navlinks[i].pathname == "/account/") navlinks[i].className = " " + elements.navlinkActive; } // Get element references ui.loading = document.getElementById(elements.loading); ui.userTable = document.getElementById(elements.userTable); // Get data from API apiGet("/account/users", displayUsers, null); }; // Attach onload handler window.addEventListener("load", setup); })();