##// END OF EJS Templates
New Terminal into new new button
Jonathan Frederic -
Show More
@@ -1,121 +1,121 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'base/js/utils',
6 'base/js/utils',
7 'jquery',
7 'jquery',
8 'tree/js/notebooklist',
8 'tree/js/notebooklist',
9 ], function(IPython, utils, $, notebooklist) {
9 ], function(IPython, utils, $, notebooklist) {
10 "use strict";
10 "use strict";
11
11
12 var TerminalList = function (selector, options) {
12 var TerminalList = function (selector, options) {
13 /**
13 /**
14 * Constructor
14 * Constructor
15 *
15 *
16 * Parameters:
16 * Parameters:
17 * selector: string
17 * selector: string
18 * options: dictionary
18 * options: dictionary
19 * Dictionary of keyword arguments.
19 * Dictionary of keyword arguments.
20 * base_url: string
20 * base_url: string
21 */
21 */
22 this.base_url = options.base_url || utils.get_body_data("baseUrl");
22 this.base_url = options.base_url || utils.get_body_data("baseUrl");
23 this.element_name = options.element_name || 'running';
23 this.element_name = options.element_name || 'running';
24 this.selector = selector;
24 this.selector = selector;
25 this.terminals = [];
25 this.terminals = [];
26 if (this.selector !== undefined) {
26 if (this.selector !== undefined) {
27 this.element = $(selector);
27 this.element = $(selector);
28 this.style();
28 this.style();
29 this.bind_events();
29 this.bind_events();
30 this.load_terminals();
30 this.load_terminals();
31 }
31 }
32 };
32 };
33
33
34 TerminalList.prototype = Object.create(notebooklist.NotebookList.prototype);
34 TerminalList.prototype = Object.create(notebooklist.NotebookList.prototype);
35
35
36 TerminalList.prototype.bind_events = function () {
36 TerminalList.prototype.bind_events = function () {
37 var that = this;
37 var that = this;
38 $('#refresh_' + this.element_name + '_list').click(function () {
38 $('#refresh_' + this.element_name + '_list').click(function () {
39 that.load_terminals();
39 that.load_terminals();
40 });
40 });
41 $('#new_terminal').click($.proxy(this.new_terminal, this));
41 $('#new-terminal').click($.proxy(this.new_terminal, this));
42 };
42 };
43
43
44 TerminalList.prototype.new_terminal = function () {
44 TerminalList.prototype.new_terminal = function () {
45 var w = window.open();
45 var w = window.open();
46 var base_url = this.base_url;
46 var base_url = this.base_url;
47 var settings = {
47 var settings = {
48 type : "POST",
48 type : "POST",
49 dataType: "json",
49 dataType: "json",
50 success : function (data, status, xhr) {
50 success : function (data, status, xhr) {
51 var name = data.name;
51 var name = data.name;
52 w.location = utils.url_join_encode(base_url, 'terminals', name);
52 w.location = utils.url_join_encode(base_url, 'terminals', name);
53 },
53 },
54 error : function(jqXHR, status, error){
54 error : function(jqXHR, status, error){
55 w.close();
55 w.close();
56 utils.log_ajax_error(jqXHR, status, error);
56 utils.log_ajax_error(jqXHR, status, error);
57 },
57 },
58 };
58 };
59 var url = utils.url_join_encode(
59 var url = utils.url_join_encode(
60 this.base_url,
60 this.base_url,
61 'api/terminals'
61 'api/terminals'
62 );
62 );
63 $.ajax(url, settings);
63 $.ajax(url, settings);
64 };
64 };
65
65
66 TerminalList.prototype.load_terminals = function() {
66 TerminalList.prototype.load_terminals = function() {
67 var url = utils.url_join_encode(this.base_url, 'api/terminals');
67 var url = utils.url_join_encode(this.base_url, 'api/terminals');
68 $.ajax(url, {
68 $.ajax(url, {
69 type: "GET",
69 type: "GET",
70 cache: false,
70 cache: false,
71 dataType: "json",
71 dataType: "json",
72 success: $.proxy(this.terminals_loaded, this),
72 success: $.proxy(this.terminals_loaded, this),
73 error : utils.log_ajax_error
73 error : utils.log_ajax_error
74 });
74 });
75 };
75 };
76
76
77 TerminalList.prototype.terminals_loaded = function (data) {
77 TerminalList.prototype.terminals_loaded = function (data) {
78 this.terminals = data;
78 this.terminals = data;
79 this.clear_list();
79 this.clear_list();
80 var item, term;
80 var item, term;
81 for (var i=0; i < this.terminals.length; i++) {
81 for (var i=0; i < this.terminals.length; i++) {
82 term = this.terminals[i];
82 term = this.terminals[i];
83 item = this.new_item(-1);
83 item = this.new_item(-1);
84 this.add_link(term.name, item);
84 this.add_link(term.name, item);
85 this.add_shutdown_button(term.name, item);
85 this.add_shutdown_button(term.name, item);
86 }
86 }
87 $('#terminal_list_header').toggle(data.length === 0);
87 $('#terminal_list_header').toggle(data.length === 0);
88 };
88 };
89
89
90 TerminalList.prototype.add_link = function(name, item) {
90 TerminalList.prototype.add_link = function(name, item) {
91 item.data('term-name', name);
91 item.data('term-name', name);
92 item.find(".item_name").text("terminals/" + name);
92 item.find(".item_name").text("terminals/" + name);
93 item.find(".item_icon").addClass("fa fa-terminal");
93 item.find(".item_icon").addClass("fa fa-terminal");
94 var link = item.find("a.item_link")
94 var link = item.find("a.item_link")
95 .attr('href', utils.url_join_encode(this.base_url, "terminals", name));
95 .attr('href', utils.url_join_encode(this.base_url, "terminals", name));
96 link.attr('target', '_blank');
96 link.attr('target', '_blank');
97 this.add_shutdown_button(name, item);
97 this.add_shutdown_button(name, item);
98 };
98 };
99
99
100 TerminalList.prototype.add_shutdown_button = function(name, item) {
100 TerminalList.prototype.add_shutdown_button = function(name, item) {
101 var that = this;
101 var that = this;
102 var shutdown_button = $("<button/>").text("Shutdown").addClass("btn btn-xs btn-warning").
102 var shutdown_button = $("<button/>").text("Shutdown").addClass("btn btn-xs btn-warning").
103 click(function (e) {
103 click(function (e) {
104 var settings = {
104 var settings = {
105 processData : false,
105 processData : false,
106 type : "DELETE",
106 type : "DELETE",
107 dataType : "json",
107 dataType : "json",
108 success : function () {
108 success : function () {
109 that.load_terminals();
109 that.load_terminals();
110 },
110 },
111 error : utils.log_ajax_error,
111 error : utils.log_ajax_error,
112 };
112 };
113 var url = utils.url_join_encode(that.base_url, 'api/terminals', name);
113 var url = utils.url_join_encode(that.base_url, 'api/terminals', name);
114 $.ajax(url, settings);
114 $.ajax(url, settings);
115 return false;
115 return false;
116 });
116 });
117 item.find(".item_buttons").text("").append(shutdown_button);
117 item.find(".item_buttons").text("").append(shutdown_button);
118 };
118 };
119
119
120 return {TerminalList: TerminalList};
120 return {TerminalList: TerminalList};
121 });
121 });
@@ -1,158 +1,158 b''
1 {% extends "page.html" %}
1 {% extends "page.html" %}
2
2
3 {% block title %}{{page_title}}{% endblock %}
3 {% block title %}{{page_title}}{% endblock %}
4
4
5
5
6 {% block params %}
6 {% block params %}
7
7
8 data-base-url="{{base_url}}"
8 data-base-url="{{base_url}}"
9 data-notebook-path="{{notebook_path}}"
9 data-notebook-path="{{notebook_path}}"
10 data-terminals-available="{{terminals_available}}"
10 data-terminals-available="{{terminals_available}}"
11
11
12 {% endblock %}
12 {% endblock %}
13
13
14
14
15 {% block site %}
15 {% block site %}
16
16
17 <div id="ipython-main-app" class="container">
17 <div id="ipython-main-app" class="container">
18 <div id="tab_content" class="tabbable">
18 <div id="tab_content" class="tabbable">
19 <ul id="tabs" class="nav nav-tabs">
19 <ul id="tabs" class="nav nav-tabs">
20 <li class="active"><a href="#notebooks" data-toggle="tab">Files</a></li>
20 <li class="active"><a href="#notebooks" data-toggle="tab">Files</a></li>
21 <li><a href="#running" data-toggle="tab">Running</a></li>
21 <li><a href="#running" data-toggle="tab">Running</a></li>
22 <li><a href="#clusters" data-toggle="tab">Clusters</a></li>
22 <li><a href="#clusters" data-toggle="tab">Clusters</a></li>
23 </ul>
23 </ul>
24 <div class="tab-content">
24 <div class="tab-content">
25 <div id="notebooks" class="tab-pane active">
25 <div id="notebooks" class="tab-pane active">
26 <div id="notebook_toolbar" class="row">
26 <div id="notebook_toolbar" class="row">
27 <div class="col-sm-8 no-padding">
27 <div class="col-sm-8 no-padding">
28 <form id='alternate_upload' class='alternate_upload'>
28 <form id='alternate_upload' class='alternate_upload'>
29 <span id="notebook_list_info">
29 <span id="notebook_list_info">
30 To import a notebook, drag the file onto the listing below or
30 To import a notebook, drag the file onto the listing below or
31 <span class="input-overlay">
31 <span class="input-overlay">
32 <input type="file" name="datafile" class="fileinput" multiple='multiple'>
32 <input type="file" name="datafile" class="fileinput" multiple='multiple'>
33 click here.
33 click here.
34 </span>
34 </span>
35 </span>
35 </span>
36 </form>
36 </form>
37 </div>
37 </div>
38 <div class="col-sm-4 no-padding tree-buttons">
38 <div class="col-sm-4 no-padding tree-buttons">
39 <div class="pull-right">
39 <div class="pull-right">
40 <div id="new-buttons" class="btn-group">
40 <div id="new-buttons" class="btn-group">
41 <button class="dropdown-toggle btn btn-default btn-xs" data-toggle="dropdown">
41 <button class="dropdown-toggle btn btn-default btn-xs" data-toggle="dropdown">
42 <span>New</span>
42 <span>New</span>
43 <span class="caret"></span>
43 <span class="caret"></span>
44 </button>
44 </button>
45 <ul id="new-menu" class="dropdown-menu">
45 <ul id="new-menu" class="dropdown-menu">
46 <li role="presentation" id="new-file">
46 <li role="presentation" id="new-file">
47 <a role="menuitem" tabindex="-1" href="#">File</a>
47 <a role="menuitem" tabindex="-1" href="#">File</a>
48 </li>
48 </li>
49 <li role="presentation" id="new-folder">
49 <li role="presentation" id="new-folder">
50 <a role="menuitem" tabindex="-1" href="#">Folder</a>
50 <a role="menuitem" tabindex="-1" href="#">Folder</a>
51 </li>
51 </li>
52 {% if terminals_available %}
53 <li role="presentation" id="new-terminal">
54 <a role="menuitem" tabindex="-1" href="#">Terminal</a>
55 </li>
56 {% endif %}
52 <li role="presentation" class="divider"></li>
57 <li role="presentation" class="divider"></li>
53 <li role="presentation" class="dropdown-header" id="notebook-kernels">Notebooks</li>
58 <li role="presentation" class="dropdown-header" id="notebook-kernels">Notebooks</li>
54 </ul>
59 </ul>
55 </div>
60 </div>
56 <div class="btn-group">
61 <div class="btn-group">
57 <button id="refresh_notebook_list" title="Refresh notebook list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
62 <button id="refresh_notebook_list" title="Refresh notebook list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
58 </div>
63 </div>
59 </div>
64 </div>
60 </div>
65 </div>
61 </div>
66 </div>
62 <div id="notebook_list">
67 <div id="notebook_list">
63 <div id="notebook_list_header" class="row list_header">
68 <div id="notebook_list_header" class="row list_header">
64 <div id="project_name">
69 <div id="project_name">
65 <ul class="breadcrumb">
70 <ul class="breadcrumb">
66 <li><a href="{{breadcrumbs[0][0]}}"><i class="fa fa-home"></i></a></li>
71 <li><a href="{{breadcrumbs[0][0]}}"><i class="fa fa-home"></i></a></li>
67 {% for crumb in breadcrumbs[1:] %}
72 {% for crumb in breadcrumbs[1:] %}
68 <li><a href="{{crumb[0]}}">{{crumb[1]}}</a></li>
73 <li><a href="{{crumb[0]}}">{{crumb[1]}}</a></li>
69 {% endfor %}
74 {% endfor %}
70 </ul>
75 </ul>
71 </div>
76 </div>
72 </div>
77 </div>
73 </div>
78 </div>
74 </div>
79 </div>
75 <div id="running" class="tab-pane">
80 <div id="running" class="tab-pane">
76 <div id="running_toolbar" class="row">
81 <div id="running_toolbar" class="row">
77 <div class="col-sm-8 no-padding">
82 <div class="col-sm-8 no-padding">
78 <span id="running_list_info">Currently running Jupyter processes</span>
83 <span id="running_list_info">Currently running Jupyter processes</span>
79 </div>
84 </div>
80 <div class="col-sm-4 no-padding tree-buttons">
85 <div class="col-sm-4 no-padding tree-buttons">
81 <span id="running_buttons" class="pull-right">
86 <span id="running_buttons" class="pull-right">
82 {% if terminals_available %}
83 <button id="new_terminal" title="New terminal" class="btn btn-default btn-xs">
84 New Terminal
85 </button>
86 {% endif %}
87 <button id="refresh_running_list" title="Refresh running list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
87 <button id="refresh_running_list" title="Refresh running list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
88 </span>
88 </span>
89 </div>
89 </div>
90 </div>
90 </div>
91 <div class="panel-group" id="accordion" >
91 <div class="panel-group" id="accordion" >
92 <div class="panel panel-default">
92 <div class="panel panel-default">
93 <div class="panel-heading">
93 <div class="panel-heading">
94 <a data-toggle="collapse" data-target="#collapseOne" href="#">
94 <a data-toggle="collapse" data-target="#collapseOne" href="#">
95 Terminals
95 Terminals
96 </a>
96 </a>
97 </div>
97 </div>
98 <div id="collapseOne" class=" collapse in">
98 <div id="collapseOne" class=" collapse in">
99 <div class="panel-body">
99 <div class="panel-body">
100 {% if terminals_available %}
100 {% if terminals_available %}
101 <div id="terminal_list">
101 <div id="terminal_list">
102 <div id="terminal_list_header" class="row list_header">
102 <div id="terminal_list_header" class="row list_header">
103 <div> There are no terminals running. </div>
103 <div> There are no terminals running. </div>
104 </div>
104 </div>
105 </div>
105 </div>
106 {% endif %}
106 {% endif %}
107 </div>
107 </div>
108 </div>
108 </div>
109 </div>
109 </div>
110 <div class="panel panel-default">
110 <div class="panel panel-default">
111 <div class="panel-heading">
111 <div class="panel-heading">
112 <a data-toggle="collapse" data-target="#collapseTwo" href="#">
112 <a data-toggle="collapse" data-target="#collapseTwo" href="#">
113 Notebooks
113 Notebooks
114 </a>
114 </a>
115 </div>
115 </div>
116 <div id="collapseTwo" class=" collapse in">
116 <div id="collapseTwo" class=" collapse in">
117 <div class="panel-body">
117 <div class="panel-body">
118 <div id="running_list">
118 <div id="running_list">
119 <div id="running_list_header" class="row list_header">
119 <div id="running_list_header" class="row list_header">
120 <div> There are no notebooks running. </div>
120 <div> There are no notebooks running. </div>
121 </div>
121 </div>
122 </div>
122 </div>
123 </div>
123 </div>
124 </div>
124 </div>
125 </div>
125 </div>
126 </div>
126 </div>
127 </div>
127 </div>
128 <div id="clusters" class="tab-pane">
128 <div id="clusters" class="tab-pane">
129 <div id="cluster_toolbar" class="row">
129 <div id="cluster_toolbar" class="row">
130 <div class="col-xs-8 no-padding">
130 <div class="col-xs-8 no-padding">
131 <span id="cluster_list_info">IPython parallel computing clusters</span>
131 <span id="cluster_list_info">IPython parallel computing clusters</span>
132 </div>
132 </div>
133 <div class="col-xs-4 no-padding tree-buttons">
133 <div class="col-xs-4 no-padding tree-buttons">
134 <span id="cluster_buttons" class="pull-right">
134 <span id="cluster_buttons" class="pull-right">
135 <button id="refresh_cluster_list" title="Refresh cluster list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
135 <button id="refresh_cluster_list" title="Refresh cluster list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
136 </span>
136 </span>
137 </div>
137 </div>
138 </div>
138 </div>
139 <div id="cluster_list">
139 <div id="cluster_list">
140 <div id="cluster_list_header" class="row list_header">
140 <div id="cluster_list_header" class="row list_header">
141 <div class="profile_col col-xs-4">profile</div>
141 <div class="profile_col col-xs-4">profile</div>
142 <div class="status_col col-xs-3">status</div>
142 <div class="status_col col-xs-3">status</div>
143 <div class="engines_col col-xs-3" title="Enter the number of engines to start or empty for default"># of engines</div>
143 <div class="engines_col col-xs-3" title="Enter the number of engines to start or empty for default"># of engines</div>
144 <div class="action_col col-xs-2">action</div>
144 <div class="action_col col-xs-2">action</div>
145 </div>
145 </div>
146 </div>
146 </div>
147 </div>
147 </div>
148 </div><!-- class:tab-content -->
148 </div><!-- class:tab-content -->
149 </div><!-- id:tab_content -->
149 </div><!-- id:tab_content -->
150 </div><!-- ipython-main-app -->
150 </div><!-- ipython-main-app -->
151
151
152 {% endblock %}
152 {% endblock %}
153
153
154 {% block script %}
154 {% block script %}
155 {{super()}}
155 {{super()}}
156
156
157 <script src="{{ static_url("tree/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
157 <script src="{{ static_url("tree/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
158 {% endblock %}
158 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now