mirror of
https://github.com/jupyter/notebook.git
synced 2025-01-12 11:45:38 +08:00
Add selector button to dashboard
This commit is contained in:
parent
6d248f258a
commit
30a23d4456
@ -114,10 +114,20 @@ define([
|
|||||||
that.load_sessions();
|
that.load_sessions();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Bind events for action buttons.
|
||||||
$('.rename-button').click($.proxy(this.rename_selected, this));
|
$('.rename-button').click($.proxy(this.rename_selected, this));
|
||||||
$('.shutdown-button').click($.proxy(this.shutdown_selected, this));
|
$('.shutdown-button').click($.proxy(this.shutdown_selected, this));
|
||||||
$('.duplicate-button').click($.proxy(this.duplicate_selected, this));
|
$('.duplicate-button').click($.proxy(this.duplicate_selected, this));
|
||||||
$('.delete-button').click($.proxy(this.delete_selected, this));
|
$('.delete-button').click($.proxy(this.delete_selected, this));
|
||||||
|
|
||||||
|
// Bind events for selection menu buttons.
|
||||||
|
$('#tree-selector .select-all').click($.proxy(this.select_all, this));
|
||||||
|
$('#tree-selector .select-notebooks').click($.proxy(this.select_notebooks, this));
|
||||||
|
$('#tree-selector .select-running-notebooks').click($.proxy(this.select_running_notebooks, this));
|
||||||
|
$('#tree-selector .select-files').click($.proxy(this.select_files, this));
|
||||||
|
$('#tree-selector .select-directories').click($.proxy(this.select_directories, this));
|
||||||
|
$('#tree-selector .select-inverse').click($.proxy(this.select_inverse, this));
|
||||||
|
$('#tree-selector .unselect-all').click($.proxy(this.unselect_all, this));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -355,11 +365,94 @@ define([
|
|||||||
file: 'edit',
|
file: 'edit',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all of the items in the tree.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.select_all = function() {
|
||||||
|
$('.list_item input[type=checkbox]').each(function(index, item) {
|
||||||
|
$(item).prop('checked', true);
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all of the notebooks in the tree.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.select_notebooks = function() {
|
||||||
|
this.unselect_all();
|
||||||
|
$('.list_item').each(function(index, item) {
|
||||||
|
if ($(item).data('type') === 'notebook') {
|
||||||
|
$(item).find('input[type=checkbox]').prop('checked', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all of the running notebooks in the tree.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.select_running_notebooks = function() {
|
||||||
|
this.unselect_all();
|
||||||
|
var that = this;
|
||||||
|
$('.list_item').each(function(index, item) {
|
||||||
|
if ($(item).data('type') === 'notebook' && that.sessions[$(item).data('path')] !== undefined) {
|
||||||
|
$(item).find('input[type=checkbox]').prop('checked', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all of the files in the tree.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.select_files = function() {
|
||||||
|
this.unselect_all();
|
||||||
|
$('.list_item').each(function(index, item) {
|
||||||
|
if ($(item).data('type') === 'file') {
|
||||||
|
$(item).find('input[type=checkbox]').prop('checked', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all of the directories in the tree.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.select_directories = function() {
|
||||||
|
this.unselect_all();
|
||||||
|
$('.list_item').each(function(index, item) {
|
||||||
|
if ($(item).data('type') === 'directory') {
|
||||||
|
$(item).find('input[type=checkbox]').prop('checked', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select the inverse of the current selection.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.select_inverse = function() {
|
||||||
|
$('.list_item input[type=checkbox]').each(function(index, item) {
|
||||||
|
$(item).prop('checked', !$(item).prop('checked'));
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unselect everything selected in the tree.
|
||||||
|
*/
|
||||||
|
NotebookList.prototype.unselect_all = function() {
|
||||||
|
$('.list_item input[type=checkbox]').each(function(index, item) {
|
||||||
|
$(item).prop('checked', false);
|
||||||
|
});
|
||||||
|
this._selection_changed();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles when any row selector checkbox is toggled.
|
* Handles when any row selector checkbox is toggled.
|
||||||
*/
|
*/
|
||||||
NotebookList.prototype._selection_changed = function() {
|
NotebookList.prototype._selection_changed = function() {
|
||||||
|
|
||||||
// Use a JQuery selector to find each row with a checked checkbox. If
|
// Use a JQuery selector to find each row with a checked checkbox. If
|
||||||
// we decide to add more checkboxes in the future, this code will need
|
// we decide to add more checkboxes in the future, this code will need
|
||||||
// to be changed to distinguish which checkbox is the row selector.
|
// to be changed to distinguish which checkbox is the row selector.
|
||||||
@ -368,11 +461,14 @@ define([
|
|||||||
var has_directory = false;
|
var has_directory = false;
|
||||||
var has_file = false;
|
var has_file = false;
|
||||||
var that = this;
|
var that = this;
|
||||||
|
var checked = 0;
|
||||||
$('.list_item :checked').each(function(index, item) {
|
$('.list_item :checked').each(function(index, item) {
|
||||||
var parent = $(item).parent().parent();
|
var parent = $(item).parent().parent();
|
||||||
|
|
||||||
// If the item doesn't have an upload button, it can be selected.
|
// If the item doesn't have an upload button and it's not the
|
||||||
if (parent.find('.upload_button').length === 0) {
|
// breadcrumbs, it can be selected. Breadcrumbs path == ''.
|
||||||
|
if (parent.find('.upload_button').length === 0 && parent.data('path') !== '') {
|
||||||
|
checked++;
|
||||||
selected.push({
|
selected.push({
|
||||||
name: parent.data('name'),
|
name: parent.data('name'),
|
||||||
path: parent.data('path'),
|
path: parent.data('path'),
|
||||||
@ -417,6 +513,15 @@ define([
|
|||||||
} else {
|
} else {
|
||||||
$('.delete-button').css('display', 'none');
|
$('.delete-button').css('display', 'none');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If all of the items are selected, show the selector as checked. If
|
||||||
|
// some of the items are selected, show it as checked. Otherwise,
|
||||||
|
// uncheck it.
|
||||||
|
if (checked === 0) {
|
||||||
|
$('#tree-selector input[type=checkbox]').prop('checked', false);
|
||||||
|
} else {
|
||||||
|
$('#tree-selector input[type=checkbox]').prop('checked', true);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
NotebookList.prototype.add_link = function (model, item) {
|
NotebookList.prototype.add_link = function (model, item) {
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
@dark_dashboard_color: @breadcrumb-color;
|
@dark_dashboard_color: @breadcrumb-color;
|
||||||
@list_stripe_color: lighten(@page-backdrop-color,3%);
|
@list_stripe_color: lighten(@page-backdrop-color,3%);
|
||||||
|
|
||||||
|
// The left padding of the selector button's contents.
|
||||||
|
@dashboard-selectorbtn-lpad: 7px;
|
||||||
|
|
||||||
ul#tabs {
|
ul#tabs {
|
||||||
margin-bottom: @dashboard_tb_pad;
|
margin-bottom: @dashboard_tb_pad;
|
||||||
}
|
}
|
||||||
@ -100,6 +103,11 @@ ul.breadcrumb {
|
|||||||
|
|
||||||
input {
|
input {
|
||||||
margin-right: @dashboard_lr_pad;
|
margin-right: @dashboard_lr_pad;
|
||||||
|
margin-left: @dashboard_lr_pad + @dashboard-selectorbtn-lpad;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item_link {
|
||||||
|
margin-left: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,12 +160,23 @@ input.engine_num_input {
|
|||||||
color: blue;
|
color: blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#project_name > .breadcrumb {
|
#project_name {
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
> .breadcrumb {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#tree-selector {
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
input[type=checkbox] {
|
||||||
|
margin-left: @dashboard_lr_pad;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-content .row {
|
.tab-content .row {
|
||||||
|
@ -76,6 +76,24 @@ data-terminals-available="{{terminals_available}}"
|
|||||||
</div>
|
</div>
|
||||||
<div id="notebook_list">
|
<div id="notebook_list">
|
||||||
<div id="notebook_list_header" class="row list_header">
|
<div id="notebook_list_header" class="row list_header">
|
||||||
|
|
||||||
|
<div class="dropdown" id='tree-selector'>
|
||||||
|
<button class="btn btn-default btn-xs dropdown-toggle" type="button" id="tree-selector-btn" data-toggle="dropdown" aria-expanded="true">
|
||||||
|
<input type='checkbox'></input>
|
||||||
|
<i class='semicheck fa fa-minus'></i>
|
||||||
|
<span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu" role="menu" aria-labelledby="tree-selector-btn">
|
||||||
|
<li role="presentation" class="select-all"><a role="menuitem" tabindex="-1" href="#">Select all</a></li>
|
||||||
|
<li role="presentation" class="select-notebooks"><a role="menuitem" tabindex="-1" href="#">Select notebooks</a></li>
|
||||||
|
<li role="presentation" class="select-running-notebooks"><a role="menuitem" tabindex="-1" href="#">Select running notebooks</a></li>
|
||||||
|
<li role="presentation" class="select-files"><a role="menuitem" tabindex="-1" href="#">Select files</a></li>
|
||||||
|
<li role="presentation" class="select-directories"><a role="menuitem" tabindex="-1" href="#">Select directories</a></li>
|
||||||
|
<li role="presentation" class="select-inverse"><a role="menuitem" tabindex="-1" href="#">Select inverse</a></li>
|
||||||
|
<li role="presentation" class="unselect-all"><a role="menuitem" tabindex="-1" href="#">Unselect all</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="project_name">
|
<div id="project_name">
|
||||||
<ul class="breadcrumb">
|
<ul class="breadcrumb">
|
||||||
<li><a href="{{breadcrumbs[0][0]}}"><i class="fa fa-home"></i></a></li>
|
<li><a href="{{breadcrumbs[0][0]}}"><i class="fa fa-home"></i></a></li>
|
||||||
|
Loading…
Reference in New Issue
Block a user