Files
jupyterhub/share/jupyter/hub/static/js/admin.js
Min RK da647397ac create multiple users in admin panel
usernames separated by lines
2015-05-06 14:03:19 -07:00

198 lines
6.1 KiB
JavaScript

// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
require(["jquery", "bootstrap", "moment", "jhapi", "utils"], function ($, bs, moment, JHAPI, utils) {
"use strict";
var base_url = window.jhdata.base_url;
var prefix = window.jhdata.prefix;
var api = new JHAPI(base_url);
function get_row (element) {
while (!element.hasClass("user-row")) {
element = element.parent();
}
return element;
}
function resort (col, order) {
var query = window.location.search.slice(1).split('&');
// if col already present in args, remove it
var i = 0;
while (i < query.length) {
if (query[i] === 'sort=' + col) {
query.splice(i,1);
if (query[i] && query[i].substr(0, 6) === 'order=') {
query.splice(i,1);
}
} else {
i += 1;
}
}
// add new order to the front
if (order) {
query.unshift('order=' + order);
}
query.unshift('sort=' + col);
// reload page with new order
window.location = window.location.pathname + '?' + query.join('&');
}
$("th").map(function (i, th) {
th = $(th);
var col = th.data('sort');
if (!col || col.length === 0) {
return;
}
var order = th.find('i').hasClass('fa-sort-desc') ? 'asc':'desc';
th.find('a').click(
function () {
resort(col, order);
}
);
});
$(".time-col").map(function (i, el) {
// convert ISO datestamps to nice momentjs ones
el = $(el);
el.text(moment(new Date(el.text())).fromNow());
});
$(".stop-server").click(function () {
var el = $(this);
var row = get_row(el);
var user = row.data('user');
el.text("stopping...");
api.stop_server(user, {
success: function () {
el.text('stop server').addClass('hidden');
row.find('.access-server').addClass('hidden');
row.find('.start-server').removeClass('hidden');
}
});
});
$(".access-server").click(function () {
var el = $(this);
var row = get_row(el);
var user = row.data('user');
var w = window.open();
api.admin_access(user, {
async: false,
success: function () {
w.location = utils.url_path_join(prefix, 'user', user);
},
error: function (xhr, err) {
w.close();
console.error("Failed to gain access to server", err);
}
});
});
$(".start-server").click(function () {
var el = $(this);
var row = get_row(el);
var user = row.data('user');
el.text("starting...");
api.start_server(user, {
success: function () {
el.text('start server').addClass('hidden');
row.find('.stop-server').removeClass('hidden');
row.find('.access-server').removeClass('hidden');
}
});
});
$(".edit-user").click(function () {
var el = $(this);
var row = get_row(el);
var user = row.data('user');
var admin = row.data('admin');
var dialog = $("#edit-user-dialog");
dialog.data('user', user);
dialog.find(".username-input").val(user);
dialog.find(".admin-checkbox").attr("checked", admin==='True');
dialog.modal();
});
$("#edit-user-dialog").find(".save-button").click(function () {
var dialog = $("#edit-user-dialog");
var user = dialog.data('user');
var name = dialog.find(".username-input").val();
var admin = dialog.find(".admin-checkbox").prop("checked");
api.edit_user(user, {
admin: admin,
name: name
}, {
success: function () {
window.location.reload();
}
});
});
$(".delete-user").click(function () {
var el = $(this);
var row = get_row(el);
var user = row.data('user');
var dialog = $("#delete-user-dialog");
dialog.find(".delete-username").text(user);
dialog.modal();
});
$("#delete-user-dialog").find(".delete-button").click(function () {
var dialog = $("#delete-user-dialog");
var username = dialog.find(".delete-username").text();
console.log("deleting", username);
api.delete_user(username, {
success: function () {
window.location.reload();
}
});
});
$("#add-user").click(function () {
var dialog = $("#add-user-dialog");
dialog.find(".username-input").val('');
dialog.find(".admin-checkbox").prop("checked", false);
dialog.modal();
});
$("#add-user-dialog").find(".save-button").click(function () {
var dialog = $("#add-user-dialog");
var lines = dialog.find(".username-input").val().split('\n');
var admin = dialog.find(".admin-checkbox").prop("checked");
var usernames = [];
lines.map(function (line) {
var username = line.trim();
if (username.length) {
usernames.push(username);
}
});
api.add_users(usernames, {admin: admin}, {
success: function () {
window.location.reload();
}
});
});
$("#shutdown-hub").click(function () {
var dialog = $("#shutdown-hub-dialog");
dialog.find("input[type=checkbox]").prop("checked", true);
dialog.modal();
});
$("#shutdown-hub-dialog").find(".shutdown-button").click(function () {
var dialog = $("#shutdown-hub-dialog");
var servers = dialog.find(".shutdown-servers-checkbox").prop("checked");
var proxy = dialog.find(".shutdown-proxy-checkbox").prop("checked");
api.shutdown_hub({
proxy: proxy,
servers: servers,
});
});
});