@@ -21,8 +21,9 @@ define([
21
21
'vp_base/js/com/com_generator' ,
22
22
'vp_base/js/com/component/PopupComponent' ,
23
23
'vp_base/js/com/component/FileNavigation' ,
24
- 'vp_base/js/com/component/SuggestInput'
25
- ] , function ( chartHTml , chartCss , com_String , com_Const , com_util , com_generator , PopupComponent , FileNavigation , SuggestInput ) {
24
+ 'vp_base/js/com/component/SuggestInput' ,
25
+ 'vp_base/js/com/component/DataSelector'
26
+ ] , function ( chartHTml , chartCss , com_String , com_Const , com_util , com_generator , PopupComponent , FileNavigation , SuggestInput , DataSelector ) {
26
27
27
28
/**
28
29
* Chart
@@ -57,17 +58,17 @@ define([
57
58
$ ( this ) . parent ( ) . find ( '.vp-plot-item' ) . removeClass ( 'selected' ) ;
58
59
$ ( this ) . addClass ( 'selected' ) ;
59
60
60
- // select 태그 강제 선택
61
+ // load selected kind
61
62
var kind = $ ( this ) . data ( 'kind' ) ;
62
63
$ ( that . wrapSelector ( '#kind' ) ) . val ( kind ) . prop ( 'selected' , true ) ;
63
64
64
65
var thisPackage = { ...that . plotPackage [ kind ] } ;
65
66
if ( thisPackage == undefined ) thisPackage = that . plotPackage [ 'plot' ] ;
66
67
67
- // 모두 숨기기 (단, 대상 변수 입력란과 차트 유형 선택지 제외 )
68
+ // hide all (without chart type, variable )
68
69
$ ( that . wrapSelector ( 'table.vp-plot-setting-table tr:not(:last)' ) ) . hide ( ) ;
69
70
70
- // 해당 옵션에 있는 선택지만 보이게 처리
71
+ // show selected chart type's option page
71
72
thisPackage . input && thisPackage . input . forEach ( obj => {
72
73
$ ( that . wrapSelector ( '#' + obj . name ) ) . closest ( 'tr' ) . show ( ) ;
73
74
@@ -94,7 +95,7 @@ define([
94
95
$ ( this . wrapSelector ( '#useColor' ) ) . change ( function ( ) {
95
96
var checked = $ ( this ) . prop ( 'checked' ) ;
96
97
if ( checked == true ) {
97
- // 색상 선택 가능하게
98
+ // enable color selector
98
99
$ ( that . wrapSelector ( '#color' ) ) . removeAttr ( 'disabled' ) ;
99
100
} else {
100
101
$ ( that . wrapSelector ( '#color' ) ) . attr ( 'disabled' , 'true' ) ;
@@ -404,219 +405,21 @@ define([
404
405
405
406
bindVariableSelector ( ) {
406
407
var that = this ;
407
- // view button click - view little popup to show variable & details
408
- $ ( this . wrapSelector ( '.vp-select-data' ) ) . click ( function ( event ) {
409
- var axes = $ ( this ) . data ( 'axes' ) ;
410
-
411
- if ( $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . is ( ":hidden" ) ) {
412
- // refresh variables
413
- that . refreshVariables ( function ( varList ) {
414
- // set position
415
- var boxSize = { width : 280 , height : 260 } ;
416
- var boxPosition = { position : 'fixed' , left : event . pageX - 20 , top : event . pageY + 20 } ;
417
-
418
- // set as center
419
- boxPosition . left = 'calc(50% - 140px)' ;
420
- boxPosition . top = 'calc(50% - 130px)' ;
421
- $ ( '#vp_varViewBox' ) . css ( {
422
- ...boxPosition
423
- } ) ;
424
-
425
- // set axes and prev code
426
- $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . attr ( {
427
- 'data-axes' : axes
428
- } ) ;
429
- $ ( that . wrapSelector ( '#vp_varSelectCode' ) ) . val ( $ ( that . wrapSelector ( '#' + axes ) ) . val ( ) ) ;
430
-
431
- // show popup area
432
- $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . show ( ) ;
433
- } ) ;
434
-
435
- } else {
436
- // hide popup area
437
- $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . hide ( ) ;
438
-
439
- // init boxes
440
- $ ( that . wrapSelector ( '#vp_varDetailColList' ) ) . html ( '' ) ;
441
- $ ( that . wrapSelector ( '#vp_varDetailDtype' ) ) . val ( '' ) ;
442
- $ ( that . wrapSelector ( '#vp_varDetailArray' ) ) . html ( '' ) ;
443
- }
444
- } ) ;
445
- // view close button click
446
- $ ( this . wrapSelector ( '.vp-close-view' ) ) . click ( function ( event ) {
447
- // hide view
448
- // show/hide popup area
449
- $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . toggle ( ) ;
450
- } ) ;
451
-
452
- // view object selection
453
- $ ( document ) . on ( 'click' , this . wrapSelector ( '.vp-var-view-item' ) , function ( event ) {
454
- // set selection style
455
- // TODO: attach .selected
456
- $ ( that . wrapSelector ( '.vp-var-view-item' ) ) . removeClass ( 'selected' ) ;
457
- $ ( this ) . addClass ( 'selected' ) ;
458
-
459
- var varName = $ ( this ) . find ( 'td:first' ) . text ( ) ;
460
- var varType = $ ( this ) . find ( 'td:last' ) . text ( ) ;
461
-
462
- // set code
463
- $ ( that . wrapSelector ( '#vp_varSelectCode' ) ) . val ( varName ) ;
464
-
465
- // dataframe : columns, dtypes, array
466
- // series : array
467
- // use json.dumps to make python dict/list to become parsable with javascript JSON
468
- var code = new com_String ( ) ;
469
- code . appendLine ( 'import json' ) ;
470
- if ( varType == 'DataFrame' ) {
471
- code . appendFormat ( `print(json.dumps([ { "colName": c, "dtype": str({0}[c].dtype), "array": str({1}[c].array) } for c in list({2}.columns) ]))` , varName , varName , varName ) ;
472
- } else if ( varType == 'Series' ) {
473
- code . appendFormat ( `print(json.dumps({"dtype": str({0}.dtype), "array": str({1}.array) }))` , varName , varName ) ;
474
- }
475
-
476
- // get result and show on detail box
477
- vpKernel . execute ( code . toString ( ) ) . then ( function ( resultObj ) {
478
- let { result } = resultObj ;
479
- var varResult = JSON . parse ( result ) ;
480
-
481
- $ ( that . wrapSelector ( '#vp_varDetailColList' ) ) . html ( '' ) ;
482
-
483
- var methodList = [ ] ;
484
- // DataFrame / Series Detail
485
- if ( varType == 'DataFrame' ) {
486
- if ( varResult . length > 0 ) {
487
- varResult . forEach ( v => {
488
- var option = $ ( `<div class="vp-column-select-item"
489
- data-dtype="${ v . dtype } " data-array="${ v . array } " data-col="${ v . colName } " title="${ v . array } ">
490
- ${ v . colName } </div>` ) ;
491
- $ ( that . wrapSelector ( '#vp_varDetailColList' ) ) . append ( option ) ;
492
- } ) ;
493
-
494
- // $(that.wrapSelector('#vp_varDetailDtype')).val(varResult[0].dtype);
495
-
496
- // var array = varResult[0].array.replaceAll('/n', '\n');
497
- // $(that.wrapSelector('#vp_varDetailArray')).text(array);
498
- }
499
-
500
- // method for object
501
- methodList = [
502
- { method : 'index' , label : 'index' } ,
503
- { method : 'columns' , label : 'columns' } ,
504
- { method : 'values' , label : 'values' }
505
- ]
506
- var methodArrayCode = new com_String ( ) ;
507
- methodList . forEach ( m => {
508
- methodArrayCode . appendFormat ( '<div class="{0}" data-method="{1}">{2}</div>' , 'vp-method-select-item' , m . method , m . label ) ;
509
- } ) ;
510
- $ ( that . wrapSelector ( '#vp_varDetailArray' ) ) . html ( methodArrayCode . toString ( ) ) ;
511
-
512
- // show columns
513
- // $(that.wrapSelector('#vp_varDetailColList')).closest('tr').show();
514
- $ ( that . wrapSelector ( '#vp_varDetailColList' ) ) . attr ( { 'disabled' : false } ) ;
515
- } else if ( varType == 'Series' ) {
516
- $ ( that . wrapSelector ( '#vp_varDetailDtype' ) ) . val ( varResult . dtype ) ;
517
- var array = varResult . array . replaceAll ( '/n' , '\n' ) ;
518
- // $(that.wrapSelector('#vp_varDetailArray')).text(array);
519
-
520
- // method for object
521
- methodList = [
522
- { method : 'index' , label : 'index' } ,
523
- { method : 'values' , label : 'values' }
524
- ]
525
- var methodArrayCode = new com_String ( ) ;
526
- methodList . forEach ( m => {
527
- methodArrayCode . appendFormat ( '<div class="{0}" data-method="{1}">{2}</div>' , 'vp-method-select-item' , m . method , m . label ) ;
528
- } ) ;
529
- $ ( that . wrapSelector ( '#vp_varDetailArray' ) ) . html ( methodArrayCode . toString ( ) ) ;
530
-
531
- // disable columns
532
- $ ( that . wrapSelector ( '#vp_varDetailColList' ) ) . attr ( { 'disabled' : true } ) ;
533
- }
534
-
535
- } ) ;
536
- } ) ;
537
-
538
- // view column selection
539
- $ ( document ) . on ( 'click' , this . wrapSelector ( '#vp_varDetailColList .vp-column-select-item' ) , function ( ) {
540
- var dtype = $ ( this ) . data ( 'dtype' ) ;
541
- var array = $ ( this ) . data ( 'array' ) ;
542
-
543
- var kind = $ ( that . wrapSelector ( '#kind' ) ) . val ( ) ;
544
- var axes = $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . attr ( 'data-axes' ) ;
545
-
546
- $ ( this ) . toggleClass ( 'selected' ) ;
547
-
548
- // if ((kind == 'plot' && axes == 'y')
549
- // || (kind == 'bar' && axes == 'y')) {
550
- // allow multi select
551
- var methodArrayCode = new com_String ( ) ;
552
- var methodList ;
553
- // if categorical variable exists, set as categorical
554
- var hasObject = false ;
555
- var selectedColumnList = $ ( that . wrapSelector ( '#vp_varDetailColList .vp-column-select-item.selected' ) ) ;
556
- if ( selectedColumnList . length > 0 ) {
557
- selectedColumnList . each ( ( i , tag ) => {
558
- var tagDtype = $ ( tag ) . data ( 'dtype' ) ;
559
- if ( tagDtype == 'object' ) {
560
- hasObject = true ;
561
- }
562
- } ) ;
563
- }
564
- if ( dtype != undefined ) {
565
- if ( hasObject == true ) {
566
- // categorical variable
567
- methodList = that . methodList . categorical ;
568
- } else {
569
- // numeric variable
570
- methodList = that . methodList . numerical ;
571
- }
572
- methodList = [
573
- { method : 'index' , label : 'index' } ,
574
- { method : 'columns' , label : 'columns' } ,
575
- { method : 'values' , label : 'values' } ,
576
- ...methodList
577
- ]
578
- methodList . forEach ( m => {
579
- methodArrayCode . appendFormat ( '<div class="{0}" data-method="{1}">{2}</div>' , 'vp-method-select-item' , m . method , m . label ) ;
580
- } ) ;
581
- }
582
- $ ( that . wrapSelector ( '#vp_varDetailArray' ) ) . html ( methodArrayCode . toString ( ) ) ;
583
-
584
- // set code
585
- var code = that . getSelectCode ( ) ;
586
- $ ( that . wrapSelector ( '#vp_varSelectCode' ) ) . val ( code ) ;
408
+
409
+ let xSelector = new DataSelector ( {
410
+ pageThis : this , id : 'x' , placeholder : 'Select data'
587
411
} ) ;
588
-
589
- // view method selection
590
- $ ( document ) . on ( 'click' , this . wrapSelector ( '#vp_varDetailArray .vp-method-select-item' ) , function ( ) {
591
- var method = $ ( this ) . data ( 'method' ) ;
592
- var nowState = $ ( this ) . hasClass ( 'selected' ) ;
593
-
594
- $ ( that . wrapSelector ( '#vp_varDetailArray .vp-method-select-item' ) ) . removeClass ( 'selected' ) ;
595
- if ( nowState == false ) {
596
- $ ( this ) . addClass ( 'selected' ) ;
597
- }
598
-
599
- // set code
600
- var code = that . getSelectCode ( ) ;
601
- $ ( that . wrapSelector ( '#vp_varSelectCode' ) ) . val ( code ) ;
412
+ $ ( this . wrapSelector ( '#x' ) ) . replaceWith ( xSelector . toTagString ( ) ) ;
413
+
414
+ let ySelector = new DataSelector ( {
415
+ pageThis : this , id : 'y' , placeholder : 'Select data'
602
416
} ) ;
603
-
604
- // enter variables button
605
- $ ( this . wrapSelector ( '#vp_varSelectBtn' ) ) . click ( function ( ) {
606
- var axes = $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . attr ( 'data-axes' ) ;
607
- var code = $ ( that . wrapSelector ( '#vp_varSelectCode' ) ) . val ( ) ;
608
-
609
- // set code
610
- $ ( that . wrapSelector ( '#' + axes ) ) . val ( code ) ;
611
-
612
- // hide view box
613
- $ ( that . wrapSelector ( '#vp_varViewBox' ) ) . hide ( ) ;
614
-
615
- // init boxes
616
- $ ( that . wrapSelector ( '#vp_varDetailColList' ) ) . html ( '' ) ;
617
- $ ( that . wrapSelector ( '#vp_varDetailDtype' ) ) . val ( '' ) ;
618
- $ ( that . wrapSelector ( '#vp_varDetailArray' ) ) . html ( '' ) ;
417
+ $ ( this . wrapSelector ( '#y' ) ) . replaceWith ( ySelector . toTagString ( ) ) ;
418
+
419
+ let zSelector = new DataSelector ( {
420
+ pageThis : this , id : 'z' , placeholder : 'Select data'
619
421
} ) ;
422
+ $ ( this . wrapSelector ( '#z' ) ) . replaceWith ( zSelector . toTagString ( ) ) ;
620
423
}
621
424
622
425
getSelectCode ( ) {
0 commit comments