@@ -70,6 +70,7 @@ define([
70
70
slicingEnd2 : '' ,
71
71
ndRowType : 'slicing' ,
72
72
ndColType : 'slicing' ,
73
+ useIndex : false ,
73
74
indexing : [ ] ,
74
75
rowIndexing : [ ] ,
75
76
colIndexing : [ ] ,
@@ -338,6 +339,40 @@ define([
338
339
` ;
339
340
}
340
341
342
+ templateForMultiSelector ( ) {
343
+ return `
344
+ <div class="vp-ds-df-option-box">
345
+ <label><input type="checkbox" id="useIndex" class="vp-state" ${ this . state . useIndex === true ?'checked' :'' } /> <span>Use Index</span></label>
346
+ <div class="vp-ds-df-multiselector" ${ this . state . useIndex === true ?'style="display:none;"' :'' } >
347
+ </div>
348
+ <div class="vp-ds-df-index-box" ${ this . state . useIndex === false ?'style="display:none;"' :'' } >
349
+ <div><label>Index selected.</label>
350
+ <div class="vp-cs-select-container no-selection">
351
+ <div class="vp-cs-select-left">
352
+ <input type="text" class="vp-input wp100" placeholder="Search" value="" readonly>
353
+ <div class="vp-cs-select-box left vp-cs-droppable no-selection vp-scrollbar">
354
+ </div>
355
+ </div>
356
+ <div class="vp-cs-select-btn-box">
357
+ <button type="button" class="vp-cs-select-add-all-btn" title="Add all items"><img src="/nbextensions/visualpython/img/arrow_right_double.svg"></button>
358
+ <button type="button" class="vp-cs-select-add-btn" title="Add selected items"><img src="/nbextensions/visualpython/img/arrow_right.svg"></button>
359
+ <button type="button" class="vp-cs-select-del-btn" title="Remove selected items"><img src="/nbextensions/visualpython/img/arrow_left.svg"></button>
360
+ <button type="button" class="vp-cs-select-del-all-btn" title="Remove all items"><img src="/nbextensions/visualpython/img/arrow_left_double.svg"></button>
361
+ </div>
362
+ <div class="vp-cs-select-right">
363
+ <div class="vp-cs-select-box right vp-cs-droppable no-selection vp-scrollbar ui-droppable">
364
+ <div class="vp-cs-select-item">
365
+ <span>index</span>
366
+ </div>
367
+ </div>
368
+ </div>
369
+ </div>
370
+ </div>
371
+ </div>
372
+ </div>
373
+ `
374
+ }
375
+
341
376
templateForSlicing ( ) {
342
377
return `
343
378
<div>
@@ -480,10 +515,25 @@ define([
480
515
481
516
switch ( dataType ) {
482
517
case 'DataFrame' :
518
+ // render option page
519
+ $ ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ) . html ( this . templateForMultiSelector ( ) ) ;
483
520
// column selecting
484
- this . _columnSelector = new MultiSelector ( this . wrapSelector ( '.vp-ds-option-inner-box ' ) ,
521
+ this . _columnSelector = new MultiSelector ( this . wrapSelector ( '.vp-ds-df-multiselector ' ) ,
485
522
{ mode : 'columns' , parent : [ data ] , selectedList : this . state . indexing }
486
523
) ;
524
+
525
+ // bind event
526
+ $ ( this . wrapSelector ( '#useIndex' ) ) . on ( 'change' , function ( ) {
527
+ let checked = $ ( this ) . prop ( 'checked' ) ;
528
+ that . state . useIndex = checked ;
529
+ if ( checked === true ) {
530
+ $ ( that . wrapSelector ( '.vp-ds-df-multiselector' ) ) . hide ( ) ;
531
+ $ ( that . wrapSelector ( '.vp-ds-df-index-box' ) ) . show ( ) ;
532
+ } else {
533
+ $ ( that . wrapSelector ( '.vp-ds-df-multiselector' ) ) . show ( ) ;
534
+ $ ( that . wrapSelector ( '.vp-ds-df-index-box' ) ) . hide ( ) ;
535
+ }
536
+ } ) ;
487
537
break ;
488
538
case 'Series' :
489
539
case 'list' :
@@ -510,12 +560,12 @@ define([
510
560
$ ( this . wrapSelector ( '.vp-nd-col-box.' + this . state . ndColType ) ) . show ( ) ;
511
561
512
562
// bind event
513
- $ ( this . wrapSelector ( '#ndRowType' ) ) . change ( function ( ) {
563
+ $ ( this . wrapSelector ( '#ndRowType' ) ) . on ( 'change' , function ( ) {
514
564
that . state . ndRowType = $ ( this ) . val ( ) ;
515
565
$ ( that . wrapSelector ( '.vp-nd-row-box' ) ) . hide ( ) ;
516
566
$ ( that . wrapSelector ( '.vp-nd-row-box.' + that . state . ndRowType ) ) . show ( ) ;
517
567
} ) ;
518
- $ ( this . wrapSelector ( '#ndColType' ) ) . change ( function ( ) {
568
+ $ ( this . wrapSelector ( '#ndColType' ) ) . on ( 'change' , function ( ) {
519
569
that . state . ndColType = $ ( this ) . val ( ) ;
520
570
$ ( that . wrapSelector ( '.vp-nd-col-box' ) ) . hide ( ) ;
521
571
$ ( that . wrapSelector ( '.vp-nd-col-box.' + that . state . ndColType ) ) . show ( ) ;
@@ -593,6 +643,7 @@ define([
593
643
// get states
594
644
let {
595
645
data, dataType,
646
+ useIndex,
596
647
slicingStart1, slicingEnd1,
597
648
slicingStart2, slicingEnd2,
598
649
ndRowType, ndColType
@@ -602,21 +653,27 @@ define([
602
653
switch ( dataType ) {
603
654
case 'DataFrame' :
604
655
code . append ( data ) ;
605
- if ( this . _columnSelector != null ) {
606
- let result = this . _columnSelector . getDataList ( ) ;
607
- this . state . indexing = result . map ( obj => obj . code ) ; // save state
608
- let columnList = [ ] ;
609
- result && result . forEach ( obj => {
610
- columnList . push ( obj . code ) ;
611
- } ) ;
612
- if ( columnList . length > 0 ) {
613
- if ( columnList . length == 1 ) {
614
- // return as Series
615
- code . appendFormat ( '[{0}]' , columnList . join ( ', ' ) ) ;
616
- // change datatype to Series
617
- this . state . returnDataType = 'Series' ;
618
- } else {
619
- code . appendFormat ( '[[{0}]]' , columnList . join ( ', ' ) ) ;
656
+ if ( useIndex === true ) {
657
+ // use index
658
+ code . append ( '.index' ) ;
659
+ } else {
660
+ // use column selector
661
+ if ( this . _columnSelector != null ) {
662
+ let result = this . _columnSelector . getDataList ( ) ;
663
+ this . state . indexing = result . map ( obj => obj . code ) ; // save state
664
+ let columnList = [ ] ;
665
+ result && result . forEach ( obj => {
666
+ columnList . push ( obj . code ) ;
667
+ } ) ;
668
+ if ( columnList . length > 0 ) {
669
+ if ( columnList . length == 1 ) {
670
+ // return as Series
671
+ code . appendFormat ( '[{0}]' , columnList . join ( ', ' ) ) ;
672
+ // change datatype to Series
673
+ this . state . returnDataType = 'Series' ;
674
+ } else {
675
+ code . appendFormat ( '[[{0}]]' , columnList . join ( ', ' ) ) ;
676
+ }
620
677
}
621
678
}
622
679
}
0 commit comments