@@ -102,6 +102,7 @@ define([
102
102
* Dictionary of keyword arguments.
103
103
* session_list: SessionList instance
104
104
* element_name: string
105
+ * element: string
105
106
* base_url: string
106
107
* notebook_path: string
107
108
* contents: Contents instance
@@ -112,8 +113,11 @@ define([
112
113
// allow code re-use by just changing element_name in kernellist.js
113
114
this . element_name = options . element_name || 'notebook' ;
114
115
this . selector = selector ;
115
- if ( this . selector !== undefined ) {
116
- this . element = $ ( selector ) ;
116
+ if ( this . selector !== undefined || options . element !== undefined ) {
117
+ if ( options . element !== undefined )
118
+ this . element = $ ( options . element ) ;
119
+ else
120
+ this . element = $ ( selector ) ;
117
121
this . style ( ) ;
118
122
this . bind_events ( ) ;
119
123
}
@@ -162,6 +166,35 @@ define([
162
166
return false ;
163
167
} ) ;
164
168
169
+ // Bind events for action buttons.
170
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.rename-button' ) . click ( $ . proxy ( this . rename_selected , this ) ) ;
171
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.move-button' ) . click ( $ . proxy ( this . move_selected , this ) ) ;
172
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.download-button' ) . click ( $ . proxy ( this . download_selected , this ) ) ;
173
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.shutdown-button' ) . click ( $ . proxy ( this . shutdown_selected , this ) ) ;
174
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.duplicate-button' ) . click ( $ . proxy ( this . duplicate_selected , this ) ) ;
175
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.view-button' ) . click ( $ . proxy ( this . view_selected , this ) ) ;
176
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.edit-button' ) . click ( $ . proxy ( this . edit_selected , this ) ) ;
177
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( '.delete-button' ) . click ( $ . proxy ( this . delete_selected , this ) ) ;
178
+
179
+ var select_all = $ ( that . selector ) . find ( '#select-all' ) ;
180
+ select_all . change ( function ( ) {
181
+ if ( ! select_all . prop ( 'checked' ) || select_all . data ( 'indeterminate' ) ) {
182
+ that . select ( 'select-none' ) ;
183
+ } else {
184
+ that . select ( 'select-all' ) ;
185
+ }
186
+ } ) ;
187
+ $ ( that . selector ) . find ( '#button-select-all' ) . click ( function ( e ) {
188
+ // toggle checkbox if the click doesn't come from the checkbox already
189
+ if ( ! $ ( e . target ) . is ( 'input[type=checkbox]' ) ) {
190
+ if ( select_all . prop ( 'checked' ) || select_all . data ( 'indeterminate' ) ) {
191
+ that . select ( 'select-none' ) ;
192
+ } else {
193
+ that . select ( 'select-all' ) ;
194
+ }
195
+ }
196
+ } ) ;
197
+
165
198
// Bind events for singleton controls.
166
199
if ( ! NotebookList . _bound_singletons ) {
167
200
NotebookList . _bound_singletons = true ;
@@ -212,39 +245,10 @@ define([
212
245
e . preventDefault ( ) ;
213
246
} ) ;
214
247
215
- // Bind events for action buttons.
216
- $ ( '.rename-button' ) . click ( $ . proxy ( this . rename_selected , this ) ) ;
217
- $ ( '.move-button' ) . click ( $ . proxy ( this . move_selected , this ) ) ;
218
- $ ( '.download-button' ) . click ( $ . proxy ( this . download_selected , this ) ) ;
219
- $ ( '.shutdown-button' ) . click ( $ . proxy ( this . shutdown_selected , this ) ) ;
220
- $ ( '.duplicate-button' ) . click ( $ . proxy ( this . duplicate_selected , this ) ) ;
221
- $ ( '.view-button' ) . click ( $ . proxy ( this . view_selected , this ) ) ;
222
- $ ( '.edit-button' ) . click ( $ . proxy ( this . edit_selected , this ) ) ;
223
- $ ( '.delete-button' ) . click ( $ . proxy ( this . delete_selected , this ) ) ;
224
-
225
248
// Bind events for selection menu buttons.
226
249
$ ( '#selector-menu' ) . click ( function ( event ) {
227
250
that . select ( $ ( event . target ) . attr ( 'id' ) ) ;
228
251
} ) ;
229
- var select_all = $ ( '#select-all' ) ;
230
- select_all . change ( function ( ) {
231
- if ( ! select_all . prop ( 'checked' ) || select_all . data ( 'indeterminate' ) ) {
232
- that . select ( 'select-none' ) ;
233
- } else {
234
- that . select ( 'select-all' ) ;
235
- }
236
- } ) ;
237
-
238
- $ ( '#button-select-all' ) . click ( function ( e ) {
239
- // toggle checkbox if the click doesn't come from the checkbox already
240
- if ( ! $ ( e . target ) . is ( 'input[type=checkbox]' ) ) {
241
- if ( select_all . prop ( 'checked' ) || select_all . data ( 'indeterminate' ) ) {
242
- that . select ( 'select-none' ) ;
243
- } else {
244
- that . select ( 'select-all' ) ;
245
- }
246
- }
247
- } ) ;
248
252
249
253
$ ( '.sort-action' ) . click ( function ( e ) {
250
254
var sort_on = e . target . id ;
@@ -468,6 +472,7 @@ define([
468
472
var type_order = { 'directory' :0 , 'notebook' :1 , 'file' :2 } ;
469
473
470
474
NotebookList . prototype . draw_notebook_list = function ( list , error_msg ) {
475
+ var that = this ;
471
476
// Remember what was selected before the refresh.
472
477
var selected_before = this . selected ;
473
478
@@ -515,7 +520,7 @@ define([
515
520
// Reselect the items that were selected before. Notify listeners
516
521
// that the selected items may have changed. O(n^2) operation.
517
522
selected_before . forEach ( function ( item ) {
518
- var list_items = $ ( '.list_item' ) ;
523
+ var list_items = that . element . children ( '.list_item' ) ;
519
524
for ( var i = 0 ; i < list_items . length ; i ++ ) {
520
525
var $list_item = $ ( list_items [ i ] ) ;
521
526
if ( $list_item . data ( 'path' ) === item . path ) {
@@ -592,8 +597,8 @@ define([
592
597
} else if ( selectable === true ) {
593
598
var that = this ;
594
599
row . click ( function ( e ) {
595
- // toggle checkbox only if the click doesn't come from the checkbox or the link
596
- if ( ! $ ( e . target ) . is ( 'span[class=item_name]' ) && ! $ ( e . target ) . is ( 'input[type=checkbox]' ) ) {
600
+ // toggle checkbox only if the click doesn't come from the checkbox or the link or any button
601
+ if ( ! $ ( e . target ) . is ( 'span[class=item_name]' ) && ! $ ( e . target ) . is ( 'input[type=checkbox]' ) && ! $ ( e . target ) . is ( 'button' ) ) {
597
602
checkbox . prop ( 'checked' , ! checkbox . prop ( 'checked' ) ) ;
598
603
}
599
604
that . _selection_changed ( ) ;
@@ -634,7 +639,7 @@ define([
634
639
*/
635
640
NotebookList . prototype . select = function ( selection_type ) {
636
641
var that = this ;
637
- $ ( '.list_item' ) . each ( function ( index , item ) {
642
+ $ ( that . selector ) . find ( '.list_item' ) . each ( function ( index , item ) {
638
643
var item_type = $ ( item ) . data ( 'type' ) ;
639
644
var state = false ;
640
645
state = state || ( selection_type === "select-all" ) ;
@@ -689,8 +694,9 @@ define([
689
694
var has_running_notebook = false ;
690
695
var has_directory = false ;
691
696
var has_file = false ;
697
+ var has_terminal = $ ( '#terminal_list' ) . find ( '.list_item :checked' ) . length ;
692
698
var checked = 0 ;
693
- $ ( '.list_item :checked' ) . each ( function ( index , item ) {
699
+ $ ( that . selector ) . find ( '.list_item :checked' ) . each ( function ( index , item ) {
694
700
var parent = $ ( item ) . parent ( ) . parent ( ) ;
695
701
696
702
// If the item doesn't have an upload button, isn't the
@@ -716,48 +722,48 @@ define([
716
722
717
723
// Rename is only visible when one item is selected, and it is not a running notebook
718
724
if ( selected . length === 1 && ! has_running_notebook ) {
719
- $ ( '.rename-button' ) . css ( 'display' , 'inline-block' ) ;
725
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .rename-button') . css ( 'display' , 'inline-block' ) ;
720
726
} else {
721
- $ ( '.rename-button' ) . css ( 'display' , 'none' ) ;
727
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .rename-button') . css ( 'display' , 'none' ) ;
722
728
}
723
729
724
730
// Move is visible if at least one item is selected, and none of them
725
731
// are a running notebook.
726
732
if ( selected . length > 0 && ! has_running_notebook ) {
727
- $ ( '.move-button' ) . css ( 'display' , 'inline-block' ) ;
733
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .move-button') . css ( 'display' , 'inline-block' ) ;
728
734
} else {
729
- $ ( '.move-button' ) . css ( 'display' , 'none' ) ;
735
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .move-button') . css ( 'display' , 'none' ) ;
730
736
}
731
737
732
738
// Download is only visible when one item is selected, and it is not a
733
739
// running notebook or a directory
734
740
// TODO(nhdaly): Add support for download multiple items at once.
735
741
if ( selected . length === 1 && ! has_running_notebook && ! has_directory ) {
736
- $ ( '.download-button' ) . css ( 'display' , 'inline-block' ) ;
742
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .download-button') . css ( 'display' , 'inline-block' ) ;
737
743
} else {
738
- $ ( '.download-button' ) . css ( 'display' , 'none' ) ;
744
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .download-button') . css ( 'display' , 'none' ) ;
739
745
}
740
746
741
747
// Shutdown is only visible when one or more notebooks running notebooks
742
748
// are selected and no non-notebook items are selected.
743
- if ( has_running_notebook && ! ( has_file || has_directory ) ) {
744
- $ ( '.shutdown-button' ) . css ( 'display' , 'inline-block' ) ;
749
+ if ( ( has_running_notebook || has_terminal ) && ! ( has_file || has_directory ) ) {
750
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .shutdown-button') . css ( 'display' , 'inline-block' ) ;
745
751
} else {
746
- $ ( '.shutdown-button' ) . css ( 'display' , 'none' ) ;
752
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .shutdown-button') . css ( 'display' , 'none' ) ;
747
753
}
748
754
749
- // Duplicate isn't visible when a directory is selected.
750
- if ( selected . length > 0 && ! has_directory ) {
751
- $ ( '.duplicate-button' ) . css ( 'display' , 'inline-block' ) ;
755
+ // Duplicate isn't visible when a directory or terminal is selected.
756
+ if ( selected . length > 0 && ! has_directory && ! has_terminal ) {
757
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .duplicate-button') . css ( 'display' , 'inline-block' ) ;
752
758
} else {
753
- $ ( '.duplicate-button' ) . css ( 'display' , 'none' ) ;
759
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .duplicate-button') . css ( 'display' , 'none' ) ;
754
760
}
755
761
756
- // Delete is visible if one or more items are selected.
757
- if ( selected . length > 0 ) {
758
- $ ( '.delete-button' ) . css ( 'display' , 'inline-block' ) ;
762
+ // Delete isn't visible when a terminal is selected.
763
+ if ( selected . length > 0 && ! has_terminal ) {
764
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .delete-button') . css ( 'display' , 'inline-block' ) ;
759
765
} else {
760
- $ ( '.delete-button' ) . css ( 'display' , 'none' ) ;
766
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .delete-button') . css ( 'display' , 'none' ) ;
761
767
}
762
768
763
769
// View is visible in the following case:
@@ -768,10 +774,10 @@ define([
768
774
// If it's not editable or unknown, the default action should be view
769
775
// already so no need to show the button.
770
776
// That should include things like, html, py, txt, json....
771
- if ( selected . length >= 1 && ! has_directory ) {
772
- $ ( '.view-button' ) . css ( 'display' , 'inline-block' ) ;
777
+ if ( selected . length >= 1 && ! has_directory && ! has_terminal ) {
778
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .view-button') . css ( 'display' , 'inline-block' ) ;
773
779
} else {
774
- $ ( '.view-button' ) . css ( 'display' , 'none' ) ;
780
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .view-button') . css ( 'display' , 'none' ) ;
775
781
}
776
782
777
783
// Edit is visible when an item is unknown, that is to say:
@@ -781,19 +787,19 @@ define([
781
787
// Indeed if it's editable the default action is already to edit.
782
788
// And non editable files should not show edit button.
783
789
// for unknown we'll assume users know what they are doing.
784
- if ( selected . length >= 1 && ! has_directory && selected . every ( function ( el ) {
790
+ if ( selected . length >= 1 && ! has_directory && ! has_terminal && selected . every ( function ( el ) {
785
791
return that . _is_editable ( el ) ;
786
792
} ) ) {
787
- $ ( '.edit-button' ) . css ( 'display' , 'inline-block' ) ;
793
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .edit-button') . css ( 'display' , 'inline-block' ) ;
788
794
} else {
789
- $ ( '.edit-button' ) . css ( 'display' , 'none' ) ;
795
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .edit-button') . css ( 'display' , 'none' ) ;
790
796
}
791
797
792
798
// If all of the items are selected, show the selector as checked. If
793
799
// some of the items are selected, show it as checked. Otherwise,
794
800
// uncheck it.
795
801
var total = 0 ;
796
- $ ( '.list_item input[type=checkbox]' ) . each ( function ( index , item ) {
802
+ $ ( that . selector ) . find ( '.list_item input[type=checkbox]' ) . each ( function ( index , item ) {
797
803
var parent = $ ( item ) . parent ( ) . parent ( ) ;
798
804
// If the item doesn't have an upload button and it's not the
799
805
// breadcrumbs, it can be selected. Breadcrumbs path == ''.
@@ -802,7 +808,7 @@ define([
802
808
}
803
809
} ) ;
804
810
805
- var select_all = $ ( "#select-all" ) ;
811
+ var select_all = $ ( that . selector ) . find ( "#select-all" ) ;
806
812
if ( checked === 0 ) {
807
813
select_all . prop ( 'checked' , false ) ;
808
814
select_all . prop ( 'indeterminate' , false ) ;
@@ -818,7 +824,7 @@ define([
818
824
}
819
825
// Update total counter
820
826
checked = bidi . applyBidi ( checked ) ;
821
- $ ( '#counter-select-all' ) . html ( checked === 0 ? ' ' : checked ) ;
827
+ $ ( that . selector ) . find ( '#counter-select-all' ) . html ( checked === 0 ? ' ' : checked ) ;
822
828
823
829
//#issue 3961, update the checkbox aria-label when it changed
824
830
if ( selected . length >= 1 ) {
@@ -838,10 +844,10 @@ define([
838
844
}
839
845
840
846
// If at aleast on item is selected, hide the selection instructions.
841
- if ( checked > 0 ) {
842
- $ ( '.dynamic-instructions' ) . hide ( ) ;
847
+ if ( checked > 0 || has_terminal ) {
848
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .dynamic-instructions') . hide ( ) ;
843
849
} else {
844
- $ ( '.dynamic-instructions' ) . show ( ) ;
850
+ $ ( '#' + that . element_name + '_toolbar' ) . find ( ' .dynamic-instructions') . show ( ) ;
845
851
}
846
852
} ;
847
853
0 commit comments