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