jupyterhub/theme/static/js/home.js

124 lines
3.2 KiB
JavaScript

// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
require(["jquery", "moment", "jhapi"], function ($, moment, JHAPI) {
"use strict";
var base_url = window.jhdata.base_url;
var user = window.jhdata.user;
var api = new JHAPI(base_url);
// Named servers buttons
function getRow(element) {
while (!element.hasClass("home-server-row")) {
element = element.parent();
}
return element;
}
function disableRow(row) {
row.find(".btn").attr("disabled", true).off("click");
}
function enableRow(row, running) {
// enable buttons on a server row
// once the server is running or not
row.find(".btn").attr("disabled", false);
row.find(".stop-server").click(stopServer);
row.find(".delete-server").click(deleteServer);
if (running) {
row.find(".start-server").addClass("hidden");
row.find(".delete-server").addClass("hidden");
row.find(".stop-server").removeClass("hidden");
row.find(".server-link").removeClass("hidden");
} else {
row.find(".start-server").removeClass("hidden");
row.find(".delete-server").removeClass("hidden");
row.find(".stop-server").addClass("hidden");
row.find(".server-link").addClass("hidden");
}
}
function startServer() {
var row = getRow($(this));
var serverName = row.find(".new-server-name").val();
if (serverName === "") {
// ../spawn/user/ causes a 404, ../spawn/user redirects correctly to the default server
window.location.href = "./spawn/" + user;
} else {
window.location.href = "./spawn/" + user + "/" + serverName;
}
}
function stopServer() {
var row = getRow($(this));
var serverName = row.data("server-name");
// before request
disableRow(row);
// request
api.stop_named_server(user, serverName, {
success: function () {
enableRow(row, false);
},
});
}
function deleteServer() {
var row = getRow($(this));
var serverName = row.data("server-name");
// before request
disableRow(row);
// request
api.delete_named_server(user, serverName, {
success: function () {
row.remove();
},
});
}
// initial state: hook up click events
$("#stop").click(function () {
$("#start")
.attr("disabled", true)
.attr("title", "Your server is stopping")
.click(function () {
return false;
});
api.stop_server(user, {
success: function () {
$("#stop").hide();
$("#start")
.text("Start My Server")
.attr("title", "Start your default server")
.attr("disabled", false)
.attr("href", base_url + "spawn/" + user)
.off("click");
},
});
});
$(".new-server-btn").click(startServer);
$(".new-server-name").on("keypress", function (e) {
if (e.which === 13) {
startServer.call(this);
}
});
$(".stop-server").click(stopServer);
$(".delete-server").click(deleteServer);
// render timestamps
$(".time-col").map(function (i, el) {
// convert ISO datestamps to nice momentjs ones
el = $(el);
var m = moment(new Date(el.text().trim()));
el.text(m.isValid() ? m.fromNow() : "Never");
});
});