Show More
@@ -114,10 +114,20 b' define([' | |||
|
114 | 114 | that.load_sessions(); |
|
115 | 115 | }); |
|
116 | 116 | |
|
117 | // Bind events for action buttons. | |
|
117 | 118 | $('.rename-button').click($.proxy(this.rename_selected, this)); |
|
118 | 119 | $('.shutdown-button').click($.proxy(this.shutdown_selected, this)); |
|
119 | 120 | $('.duplicate-button').click($.proxy(this.duplicate_selected, this)); |
|
120 | 121 | $('.delete-button').click($.proxy(this.delete_selected, this)); |
|
122 | ||
|
123 | // Bind events for selection menu buttons. | |
|
124 | $('#tree-selector .select-all').click($.proxy(this.select_all, this)); | |
|
125 | $('#tree-selector .select-notebooks').click($.proxy(this.select_notebooks, this)); | |
|
126 | $('#tree-selector .select-running-notebooks').click($.proxy(this.select_running_notebooks, this)); | |
|
127 | $('#tree-selector .select-files').click($.proxy(this.select_files, this)); | |
|
128 | $('#tree-selector .select-directories').click($.proxy(this.select_directories, this)); | |
|
129 | $('#tree-selector .select-inverse').click($.proxy(this.select_inverse, this)); | |
|
130 | $('#tree-selector .unselect-all').click($.proxy(this.unselect_all, this)); | |
|
121 | 131 | } |
|
122 | 132 | }; |
|
123 | 133 | |
@@ -356,10 +366,93 b' define([' | |||
|
356 | 366 | }; |
|
357 | 367 | |
|
358 | 368 | /** |
|
369 | * Select all of the items in the tree. | |
|
370 | */ | |
|
371 | NotebookList.prototype.select_all = function() { | |
|
372 | $('.list_item input[type=checkbox]').each(function(index, item) { | |
|
373 | $(item).prop('checked', true); | |
|
374 | }); | |
|
375 | this._selection_changed(); | |
|
376 | }; | |
|
377 | ||
|
378 | /** | |
|
379 | * Select all of the notebooks in the tree. | |
|
380 | */ | |
|
381 | NotebookList.prototype.select_notebooks = function() { | |
|
382 | this.unselect_all(); | |
|
383 | $('.list_item').each(function(index, item) { | |
|
384 | if ($(item).data('type') === 'notebook') { | |
|
385 | $(item).find('input[type=checkbox]').prop('checked', true); | |
|
386 | } | |
|
387 | }); | |
|
388 | this._selection_changed(); | |
|
389 | }; | |
|
390 | ||
|
391 | /** | |
|
392 | * Select all of the running notebooks in the tree. | |
|
393 | */ | |
|
394 | NotebookList.prototype.select_running_notebooks = function() { | |
|
395 | this.unselect_all(); | |
|
396 | var that = this; | |
|
397 | $('.list_item').each(function(index, item) { | |
|
398 | if ($(item).data('type') === 'notebook' && that.sessions[$(item).data('path')] !== undefined) { | |
|
399 | $(item).find('input[type=checkbox]').prop('checked', true); | |
|
400 | } | |
|
401 | }); | |
|
402 | this._selection_changed(); | |
|
403 | }; | |
|
404 | ||
|
405 | /** | |
|
406 | * Select all of the files in the tree. | |
|
407 | */ | |
|
408 | NotebookList.prototype.select_files = function() { | |
|
409 | this.unselect_all(); | |
|
410 | $('.list_item').each(function(index, item) { | |
|
411 | if ($(item).data('type') === 'file') { | |
|
412 | $(item).find('input[type=checkbox]').prop('checked', true); | |
|
413 | } | |
|
414 | }); | |
|
415 | this._selection_changed(); | |
|
416 | }; | |
|
417 | ||
|
418 | /** | |
|
419 | * Select all of the directories in the tree. | |
|
420 | */ | |
|
421 | NotebookList.prototype.select_directories = function() { | |
|
422 | this.unselect_all(); | |
|
423 | $('.list_item').each(function(index, item) { | |
|
424 | if ($(item).data('type') === 'directory') { | |
|
425 | $(item).find('input[type=checkbox]').prop('checked', true); | |
|
426 | } | |
|
427 | }); | |
|
428 | this._selection_changed(); | |
|
429 | }; | |
|
430 | ||
|
431 | /** | |
|
432 | * Select the inverse of the current selection. | |
|
433 | */ | |
|
434 | NotebookList.prototype.select_inverse = function() { | |
|
435 | $('.list_item input[type=checkbox]').each(function(index, item) { | |
|
436 | $(item).prop('checked', !$(item).prop('checked')); | |
|
437 | }); | |
|
438 | this._selection_changed(); | |
|
439 | }; | |
|
440 | ||
|
441 | /** | |
|
442 | * Unselect everything selected in the tree. | |
|
443 | */ | |
|
444 | NotebookList.prototype.unselect_all = function() { | |
|
445 | $('.list_item input[type=checkbox]').each(function(index, item) { | |
|
446 | $(item).prop('checked', false); | |
|
447 | }); | |
|
448 | this._selection_changed(); | |
|
449 | }; | |
|
450 | ||
|
451 | ||
|
452 | /** | |
|
359 | 453 | * Handles when any row selector checkbox is toggled. |
|
360 | 454 | */ |
|
361 | 455 | NotebookList.prototype._selection_changed = function() { |
|
362 | ||
|
363 | 456 | // Use a JQuery selector to find each row with a checked checkbox. If |
|
364 | 457 | // we decide to add more checkboxes in the future, this code will need |
|
365 | 458 | // to be changed to distinguish which checkbox is the row selector. |
@@ -368,11 +461,14 b' define([' | |||
|
368 | 461 | var has_directory = false; |
|
369 | 462 | var has_file = false; |
|
370 | 463 | var that = this; |
|
464 | var checked = 0; | |
|
371 | 465 | $('.list_item :checked').each(function(index, item) { |
|
372 | 466 | var parent = $(item).parent().parent(); |
|
373 | 467 | |
|
374 |
// If the item doesn't have an upload button |
|
|
375 | if (parent.find('.upload_button').length === 0) { | |
|
468 | // If the item doesn't have an upload button and it's not the | |
|
469 | // breadcrumbs, it can be selected. Breadcrumbs path == ''. | |
|
470 | if (parent.find('.upload_button').length === 0 && parent.data('path') !== '') { | |
|
471 | checked++; | |
|
376 | 472 | selected.push({ |
|
377 | 473 | name: parent.data('name'), |
|
378 | 474 | path: parent.data('path'), |
@@ -417,6 +513,15 b' define([' | |||
|
417 | 513 | } else { |
|
418 | 514 | $('.delete-button').css('display', 'none'); |
|
419 | 515 | } |
|
516 | ||
|
517 | // If all of the items are selected, show the selector as checked. If | |
|
518 | // some of the items are selected, show it as checked. Otherwise, | |
|
519 | // uncheck it. | |
|
520 | if (checked === 0) { | |
|
521 | $('#tree-selector input[type=checkbox]').prop('checked', false); | |
|
522 | } else { | |
|
523 | $('#tree-selector input[type=checkbox]').prop('checked', true); | |
|
524 | } | |
|
420 | 525 | }; |
|
421 | 526 | |
|
422 | 527 | NotebookList.prototype.add_link = function (model, item) { |
@@ -14,6 +14,9 b'' | |||
|
14 | 14 | @dark_dashboard_color: @breadcrumb-color; |
|
15 | 15 | @list_stripe_color: lighten(@page-backdrop-color,3%); |
|
16 | 16 | |
|
17 | // The left padding of the selector button's contents. | |
|
18 | @dashboard-selectorbtn-lpad: 7px; | |
|
19 | ||
|
17 | 20 | ul#tabs { |
|
18 | 21 | margin-bottom: @dashboard_tb_pad; |
|
19 | 22 | } |
@@ -100,6 +103,11 b' ul.breadcrumb {' | |||
|
100 | 103 | |
|
101 | 104 | input { |
|
102 | 105 | margin-right: @dashboard_lr_pad; |
|
106 | margin-left: @dashboard_lr_pad + @dashboard-selectorbtn-lpad; | |
|
107 | } | |
|
108 | ||
|
109 | .item_link { | |
|
110 | margin-left: 14px; | |
|
103 | 111 | } |
|
104 | 112 | } |
|
105 | 113 | |
@@ -152,12 +160,23 b' input.engine_num_input {' | |||
|
152 | 160 | color: blue; |
|
153 | 161 | } |
|
154 | 162 | |
|
155 |
#project_name |
|
|
163 | #project_name { | |
|
164 | display: inline-block; | |
|
165 | ||
|
166 | > .breadcrumb { | |
|
156 | 167 | padding: 0px; |
|
157 | 168 | margin-bottom: 0px; |
|
158 | 169 | background-color: transparent; |
|
159 | 170 | font-weight: bold; |
|
171 | } | |
|
172 | } | |
|
160 | 173 | |
|
174 | #tree-selector { | |
|
175 | display: inline-block; | |
|
176 | ||
|
177 | input[type=checkbox] { | |
|
178 | margin-left: @dashboard_lr_pad; | |
|
179 | } | |
|
161 | 180 | } |
|
162 | 181 | |
|
163 | 182 | .tab-content .row { |
@@ -76,6 +76,24 b' data-terminals-available="{{terminals_available}}"' | |||
|
76 | 76 | </div> |
|
77 | 77 | <div id="notebook_list"> |
|
78 | 78 | <div id="notebook_list_header" class="row list_header"> |
|
79 | ||
|
80 | <div class="dropdown" id='tree-selector'> | |
|
81 | <button class="btn btn-default btn-xs dropdown-toggle" type="button" id="tree-selector-btn" data-toggle="dropdown" aria-expanded="true"> | |
|
82 | <input type='checkbox'></input> | |
|
83 | <i class='semicheck fa fa-minus'></i> | |
|
84 | <span class="caret"></span> | |
|
85 | </button> | |
|
86 | <ul class="dropdown-menu" role="menu" aria-labelledby="tree-selector-btn"> | |
|
87 | <li role="presentation" class="select-all"><a role="menuitem" tabindex="-1" href="#">Select all</a></li> | |
|
88 | <li role="presentation" class="select-notebooks"><a role="menuitem" tabindex="-1" href="#">Select notebooks</a></li> | |
|
89 | <li role="presentation" class="select-running-notebooks"><a role="menuitem" tabindex="-1" href="#">Select running notebooks</a></li> | |
|
90 | <li role="presentation" class="select-files"><a role="menuitem" tabindex="-1" href="#">Select files</a></li> | |
|
91 | <li role="presentation" class="select-directories"><a role="menuitem" tabindex="-1" href="#">Select directories</a></li> | |
|
92 | <li role="presentation" class="select-inverse"><a role="menuitem" tabindex="-1" href="#">Select inverse</a></li> | |
|
93 | <li role="presentation" class="unselect-all"><a role="menuitem" tabindex="-1" href="#">Unselect all</a></li> | |
|
94 | </ul> | |
|
95 | </div> | |
|
96 | ||
|
79 | 97 | <div id="project_name"> |
|
80 | 98 | <ul class="breadcrumb"> |
|
81 | 99 | <li><a href="{{breadcrumbs[0][0]}}"><i class="fa fa-home"></i></a></li> |
General Comments 0
You need to be logged in to leave comments.
Login now