mirror of
https://github.com/jupyter/notebook.git
synced 2024-12-27 04:20:22 +08:00
New new button
This commit is contained in:
parent
849c96ae61
commit
e0adde46f3
@ -71,7 +71,7 @@ require([
|
|||||||
|
|
||||||
var login_widget = new loginwidget.LoginWidget('#login_widget', common_options);
|
var login_widget = new loginwidget.LoginWidget('#login_widget', common_options);
|
||||||
|
|
||||||
var nnw = new newnotebook.NewNotebookWidget("#new-notebook-buttons",
|
var new_buttons = new newnotebook.NewNotebookWidget("#new-buttons",
|
||||||
$.extend(
|
$.extend(
|
||||||
{contents: contents},
|
{contents: contents},
|
||||||
common_options
|
common_options
|
||||||
@ -130,7 +130,7 @@ require([
|
|||||||
IPython.session_list = session_list;
|
IPython.session_list = session_list;
|
||||||
IPython.kernel_list = kernel_list;
|
IPython.kernel_list = kernel_list;
|
||||||
IPython.login_widget = login_widget;
|
IPython.login_widget = login_widget;
|
||||||
IPython.new_notebook_widget = nnw;
|
IPython.new_notebook_widget = new_buttons;
|
||||||
|
|
||||||
events.trigger('app_initialized.DashboardApp');
|
events.trigger('app_initialized.DashboardApp');
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ define([
|
|||||||
this.notebook_path = options.notebook_path;
|
this.notebook_path = options.notebook_path;
|
||||||
this.contents = options.contents;
|
this.contents = options.contents;
|
||||||
this.default_kernel = null;
|
this.default_kernel = null;
|
||||||
this.config = options.config;
|
|
||||||
this.kernelspecs = {};
|
this.kernelspecs = {};
|
||||||
if (this.selector !== undefined) {
|
if (this.selector !== undefined) {
|
||||||
this.element = $(selector);
|
this.element = $(selector);
|
||||||
@ -41,7 +40,7 @@ define([
|
|||||||
/** load kernelspec list */
|
/** load kernelspec list */
|
||||||
var that = this;
|
var that = this;
|
||||||
this.kernelspecs = data.kernelspecs;
|
this.kernelspecs = data.kernelspecs;
|
||||||
var menu = this.element.find("#new-notebook-menu");
|
var menu = this.element.find("#notebook-kernels");
|
||||||
var keys = Object.keys(data.kernelspecs).sort(function (a, b) {
|
var keys = Object.keys(data.kernelspecs).sort(function (a, b) {
|
||||||
var da = data.kernelspecs[a].display_name;
|
var da = data.kernelspecs[a].display_name;
|
||||||
var db = data.kernelspecs[b].display_name;
|
var db = data.kernelspecs[b].display_name;
|
||||||
@ -64,45 +63,8 @@ define([
|
|||||||
.text(ks.display_name)
|
.text(ks.display_name)
|
||||||
.attr('title', 'Create a new notebook with ' + ks.display_name)
|
.attr('title', 'Create a new notebook with ' + ks.display_name)
|
||||||
);
|
);
|
||||||
menu.append(li);
|
menu.after(li);
|
||||||
}
|
}
|
||||||
this.config.loaded.then(function () {
|
|
||||||
that._load_default_kernelspec(data['default']);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
NewNotebookWidget.prototype._load_default_kernelspec = function (default_name) {
|
|
||||||
/** load default kernelspec name from config, if defined */
|
|
||||||
if (this.config.data.NewNotebookWidget &&
|
|
||||||
this.config.data.NewNotebookWidget.default_kernel &&
|
|
||||||
this.kernelspecs[this.config.data.NewNotebookWidget.default_kernel] !== undefined
|
|
||||||
) {
|
|
||||||
default_name = this.config.data.NewNotebookWidget.default_kernel;
|
|
||||||
}
|
|
||||||
this.set_default_kernel(default_name);
|
|
||||||
};
|
|
||||||
|
|
||||||
NewNotebookWidget.prototype.set_default_kernel = function (kernel_name) {
|
|
||||||
/** select the current default kernel */
|
|
||||||
this.default_kernel = kernel_name;
|
|
||||||
this.config.update({
|
|
||||||
NewNotebookWidget: {
|
|
||||||
default_kernel: kernel_name
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var spec = this.kernelspecs[kernel_name];
|
|
||||||
var display_name;
|
|
||||||
if (spec) {
|
|
||||||
display_name = spec.display_name;
|
|
||||||
this.element.find("#current-kernel")
|
|
||||||
.text(display_name)
|
|
||||||
.attr('title', display_name + " is the default kernel for new notebooks");
|
|
||||||
} else {
|
|
||||||
display_name = 'default kernel';
|
|
||||||
}
|
|
||||||
this.element.find("#new_notebook").attr('title',
|
|
||||||
'Create a new notebook with ' + display_name
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NewNotebookWidget.prototype.new_notebook = function (kernel_name) {
|
NewNotebookWidget.prototype.new_notebook = function (kernel_name) {
|
||||||
|
@ -7,7 +7,8 @@ define([
|
|||||||
'base/js/utils',
|
'base/js/utils',
|
||||||
'base/js/dialog',
|
'base/js/dialog',
|
||||||
'base/js/events',
|
'base/js/events',
|
||||||
], function(IPython, $, utils, dialog, events) {
|
'base/js/keyboard',
|
||||||
|
], function(IPython, $, utils, dialog, events, keyboard) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var NotebookList = function (selector, options) {
|
var NotebookList = function (selector, options) {
|
||||||
@ -54,7 +55,6 @@ define([
|
|||||||
this.element.addClass("list_container");
|
this.element.addClass("list_container");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
NotebookList.prototype.bind_events = function () {
|
NotebookList.prototype.bind_events = function () {
|
||||||
var that = this;
|
var that = this;
|
||||||
$('#refresh_' + this.element_name + '_list').click(function () {
|
$('#refresh_' + this.element_name + '_list').click(function () {
|
||||||
@ -67,6 +67,25 @@ define([
|
|||||||
that.handleFilesUpload(event,'drop');
|
that.handleFilesUpload(event,'drop');
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Bind events for singleton controls.
|
||||||
|
if (!NotebookList._bound_singletons) {
|
||||||
|
NotebookList._bound_singletons = true;
|
||||||
|
$('#new-file').click(function(e) {
|
||||||
|
that._prompt_name('File').then(function(name) {
|
||||||
|
that._create('file', name).then(function() {
|
||||||
|
that.load_sessions();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('#new-folder').click(function(e) {
|
||||||
|
that._prompt_name('Folder').then(function(name) {
|
||||||
|
that._create('directory', name).then(function() {
|
||||||
|
that.load_sessions();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
NotebookList.prototype.handleFilesUpload = function(event, dropOrForm) {
|
NotebookList.prototype.handleFilesUpload = function(event, dropOrForm) {
|
||||||
@ -519,6 +538,90 @@ define([
|
|||||||
.append(cancel_button);
|
.append(cancel_button);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prompt the user for a name.
|
||||||
|
* @param {string} what - What you want a name for.
|
||||||
|
* @return {Promise} Promise that resolve with a string name
|
||||||
|
*/
|
||||||
|
NotebookList.prototype._prompt_name = function(what) {
|
||||||
|
var that = this;
|
||||||
|
var dialog_body = $('<div/>').append(
|
||||||
|
$("<p/>").addClass("rename-message")
|
||||||
|
.text(what + ' name:')
|
||||||
|
).append(
|
||||||
|
$("<br/>")
|
||||||
|
).append(
|
||||||
|
$('<input/>').attr('type','text').attr('size','25').addClass('form-control')
|
||||||
|
.val('') // Default to empty
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
var dialog_inst = dialog.modal({
|
||||||
|
title: "Rename Notebook",
|
||||||
|
body: dialog_body,
|
||||||
|
buttons: {
|
||||||
|
"OK": {
|
||||||
|
class: "btn-primary",
|
||||||
|
click: function () {
|
||||||
|
resolve(dialog_inst.find('input').val());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Cancel": {
|
||||||
|
click: function () {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, open: function () {
|
||||||
|
/**
|
||||||
|
* Upon ENTER, click the OK button.
|
||||||
|
*/
|
||||||
|
dialog_inst.find('input[type="text"]').keydown(function (event) {
|
||||||
|
if (event.which === keyboard.keycodes.enter) {
|
||||||
|
dialog_inst.find('.btn-primary').first().click();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dialog_inst.find('input[type="text"]').focus().select();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a `file` or `directory`
|
||||||
|
* @param {string} type - "file" or "directory"
|
||||||
|
* @param {string} name - name of the thing to create
|
||||||
|
* @return {Promise} success
|
||||||
|
*/
|
||||||
|
NotebookList.prototype._create = function(type, name) {
|
||||||
|
var that = this;
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
var settings = {
|
||||||
|
processData : false,
|
||||||
|
cache : false,
|
||||||
|
type : "PUT",
|
||||||
|
data: JSON.stringify({
|
||||||
|
type: type,
|
||||||
|
format: 'text',
|
||||||
|
content: '',
|
||||||
|
}),
|
||||||
|
dataType: "json",
|
||||||
|
success: function () {
|
||||||
|
resolve();
|
||||||
|
},
|
||||||
|
error: function() {
|
||||||
|
reject();
|
||||||
|
utils.log_ajax_error.apply(this, arguments);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
var url = utils.url_join_encode(
|
||||||
|
that.base_url,
|
||||||
|
'api/contents/' + name
|
||||||
|
);
|
||||||
|
$.ajax(url, settings);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Backwards compatability.
|
// Backwards compatability.
|
||||||
IPython.NotebookList = NotebookList;
|
IPython.NotebookList = NotebookList;
|
||||||
|
@ -156,7 +156,7 @@ input.engine_num_input {
|
|||||||
.icon(@fa-var-file-o)
|
.icon(@fa-var-file-o)
|
||||||
}
|
}
|
||||||
|
|
||||||
ul#new-notebook-menu {
|
ul#new-menu {
|
||||||
// align right instead of left
|
// align right instead of left
|
||||||
left: auto;
|
left: auto;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
@ -42,16 +42,22 @@ data-terminals-available="{{terminals_available}}"
|
|||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</form>
|
</form>
|
||||||
<div id="notebook_buttons" class="pull-right btn-toolbar">
|
<div class="pull-right">
|
||||||
<div id="new-notebook-buttons" class="btn-group">
|
<div id="new-buttons" class="btn-group">
|
||||||
<button id="new_notebook" class="btn btn-default btn-xs">
|
|
||||||
New Notebook
|
|
||||||
</button>
|
|
||||||
<button class="dropdown-toggle btn btn-default btn-xs" data-toggle="dropdown">
|
<button class="dropdown-toggle btn btn-default btn-xs" data-toggle="dropdown">
|
||||||
<span id="current-kernel">Loading...</span>
|
<span>New</span>
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul id="new-notebook-menu" class="dropdown-menu"></ul>
|
<ul id="new-menu" class="dropdown-menu">
|
||||||
|
<li role="presentation" class="dropdown-header" id="notebook-kernels">Notebooks</li>
|
||||||
|
<li role="presentation" class="divider"></li>
|
||||||
|
<li role="presentation" id="new-file">
|
||||||
|
<a role="menuitem" tabindex="-1" href="#">File</a>
|
||||||
|
</li>
|
||||||
|
<li role="presentation" id="new-folder">
|
||||||
|
<a role="menuitem" tabindex="-1" href="#">Folder</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button id="refresh_notebook_list" title="Refresh notebook list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
|
<button id="refresh_notebook_list" title="Refresh notebook list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
|
||||||
|
Loading…
Reference in New Issue
Block a user