Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50654 views
1
// Copyright (c) IPython Development Team.
2
// Distributed under the terms of the Modified BSD License.
3
4
define([
5
'base/js/namespace',
6
'base/js/utils',
7
'jquery',
8
'tree/js/notebooklist',
9
], function(IPython, utils, $, notebooklist) {
10
"use strict";
11
12
var TerminalList = function (selector, options) {
13
/**
14
* Constructor
15
*
16
* Parameters:
17
* selector: string
18
* options: dictionary
19
* Dictionary of keyword arguments.
20
* base_url: string
21
*/
22
this.base_url = options.base_url || utils.get_body_data("baseUrl");
23
this.element_name = options.element_name || 'running';
24
this.selector = selector;
25
this.terminals = [];
26
if (this.selector !== undefined) {
27
this.element = $(selector);
28
this.style();
29
this.bind_events();
30
this.load_terminals();
31
}
32
};
33
34
TerminalList.prototype = Object.create(notebooklist.NotebookList.prototype);
35
36
TerminalList.prototype.bind_events = function () {
37
var that = this;
38
$('#refresh_' + this.element_name + '_list').click(function () {
39
that.load_terminals();
40
});
41
$('#new-terminal').click($.proxy(this.new_terminal, this));
42
};
43
44
TerminalList.prototype.new_terminal = function () {
45
var w = window.open(undefined, IPython._target);
46
var base_url = this.base_url;
47
var settings = {
48
type : "POST",
49
dataType: "json",
50
success : function (data, status, xhr) {
51
var name = data.name;
52
w.location = utils.url_join_encode(base_url, 'terminals', name);
53
},
54
error : function(jqXHR, status, error){
55
w.close();
56
utils.log_ajax_error(jqXHR, status, error);
57
},
58
};
59
var url = utils.url_join_encode(
60
this.base_url,
61
'api/terminals'
62
);
63
$.ajax(url, settings);
64
};
65
66
TerminalList.prototype.load_terminals = function() {
67
var url = utils.url_join_encode(this.base_url, 'api/terminals');
68
$.ajax(url, {
69
type: "GET",
70
cache: false,
71
dataType: "json",
72
success: $.proxy(this.terminals_loaded, this),
73
error : utils.log_ajax_error
74
});
75
};
76
77
TerminalList.prototype.terminals_loaded = function (data) {
78
this.terminals = data;
79
this.clear_list();
80
var item, term;
81
for (var i=0; i < this.terminals.length; i++) {
82
term = this.terminals[i];
83
item = this.new_item(-1);
84
this.add_link(term.name, item);
85
this.add_shutdown_button(term.name, item);
86
}
87
$('#terminal_list_header').toggle(data.length === 0);
88
};
89
90
TerminalList.prototype.add_link = function(name, item) {
91
item.data('term-name', name);
92
item.find(".item_name").text("terminals/" + name);
93
item.find(".item_icon").addClass("fa fa-terminal");
94
var link = item.find("a.item_link")
95
.attr('href', utils.url_join_encode(this.base_url, "terminals", name));
96
link.attr('target', IPython._target||'_blank');
97
this.add_shutdown_button(name, item);
98
};
99
100
TerminalList.prototype.add_shutdown_button = function(name, item) {
101
var that = this;
102
var shutdown_button = $("<button/>").text("Shutdown").addClass("btn btn-xs btn-warning").
103
click(function (e) {
104
var settings = {
105
processData : false,
106
type : "DELETE",
107
dataType : "json",
108
success : function () {
109
that.load_terminals();
110
},
111
error : utils.log_ajax_error,
112
};
113
var url = utils.url_join_encode(that.base_url, 'api/terminals', name);
114
$.ajax(url, settings);
115
return false;
116
});
117
item.find(".item_buttons").text("").append(shutdown_button);
118
};
119
120
return {TerminalList: TerminalList};
121
});
122
123