@@ -608,15 +608,15 @@ define([
608
608
// Array Items
609
609
let arrItems = $ ( `<div class="vp-numpy-style-flex-row-wrap vp-numpy-1darr-item-box"></div>` ) ;
610
610
arrState . forEach ( ( item , idx ) => {
611
- arrItems . append ( render1dArrItem ( pageThis , idx , item ) ) ;
611
+ arrItems . append ( render1dArrItem ( idx , item ) ) ;
612
612
} ) ;
613
613
contentTag . append ( arrItems ) ;
614
614
// add button
615
615
contentTag . append ( $ ( `<button class="vp-button vp-numpy-1darr-add">+ Add</button>` ) ) ;
616
616
return contentTag ;
617
617
}
618
618
619
- var render1dArrItem = function ( pageThis , idx , value = 0 ) {
619
+ var render1dArrItem = function ( idx , value = 0 ) {
620
620
return $ ( `<div class="vp-numpy-style-flex-column" style="margin-top:10px;;margin-bottom:10px;">
621
621
<div class="text-center" style="margin-top:10px;;margin-bottom:10px;">
622
622
${ idx }
@@ -628,8 +628,85 @@ define([
628
628
</div>` ) ;
629
629
}
630
630
631
- var render2dArr = function ( pageThis , obj , defaultValue ) {
632
- return $ ( '<input value="2darr"/>' ) ;
631
+ var render2dArr = function ( pageThis , obj , state ) {
632
+ let arrKey = obj . name + '_2darr' ;
633
+ let arrState = [ [ 0 ] ] ;
634
+ let value = `[[0]]` ;
635
+ if ( state [ arrKey ] == undefined ) {
636
+ pageThis . setState ( { [ arrKey ] : arrState } ) ;
637
+ pageThis . setState ( { [ obj . name ] : value } ) ;
638
+ } else {
639
+ arrState = state [ arrKey ] ;
640
+ value = `[${ arrState . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` ;
641
+ }
642
+
643
+ let contentTag = $ ( `<div class="vp-numpy-2darr-box"></div>` ) ;
644
+ $ ( contentTag ) . attr ( {
645
+ 'data-id' : obj . name
646
+ } ) ;
647
+ contentTag . data ( 'obj' , obj ) ;
648
+ // Length setting
649
+ let rowLength = arrState . length ;
650
+ let colLength = 0 ;
651
+ if ( arrState . length > 0 ) {
652
+ colLength = Math . max ( ...arrState . map ( ele => ele . length ) ) ;
653
+ }
654
+ contentTag . append ( `<div class="vp-numpy-style-flex-row-center">
655
+ <div style="margin:0 5px;">
656
+ <span>Row : </span>
657
+ <input class="vp-input vp-numpy-2darr-set-row" style="width:50px;" value="${ rowLength } " type="text">
658
+ </div>
659
+ <div style="margin:0 5px;">
660
+ <span>Col : </span>
661
+ <input class="vp-input vp-numpy-2darr-set-col" style="width:50px;" value="${ colLength } " type="text">
662
+ </div>
663
+ <button class="vp-button vp-numpy-2darr-set">Set</button>
664
+ <input type="hidden" class="vp-state" id="${ obj . name } " value="${ value } ">
665
+ </div>` )
666
+ // Array Items
667
+ let arrItems = $ ( `<div class="vp-numpy-style-flex-column vp-numpy-2darr-item-box"></div>` ) ;
668
+ arrState . forEach ( ( item , idx ) => {
669
+ arrItems . append ( render2dArrItem ( idx , item ) ) ;
670
+ } ) ;
671
+ contentTag . append ( arrItems ) ;
672
+ // row add button
673
+ contentTag . append ( $ ( `<button class="vp-button vp-numpy-2darr-row-add" style="width: 100%;">+ Row</button>` ) ) ;
674
+ return contentTag ;
675
+ }
676
+
677
+ var render2dArrItem = function ( rowIdx , item ) {
678
+ let arrRowBox = $ ( `<div class="vp-numpy-arrayEditor-row-block vp-numpy-style-flex-row vp-numpy-box-border"></div>` ) ;
679
+ let arrRows = $ ( `<div class="overflow-x-auto vp-numpy-style-flex-row vp-scrollbar" style="width: 80%; overflow: auto; margin-top:5px; margin-bottom:5px;"></div>` ) ;
680
+ // row index
681
+ arrRows . append ( $ ( `<div class="vp-numpy-style-flex-column-center vp-bold vp-numpy-2darr-row" data-idx="${ rowIdx } " style="width: 10%;">
682
+ ${ rowIdx }
683
+ </div>` ) )
684
+ // columns
685
+ let arrColBox = $ ( `<div class="vp-numpy-style-flex-column" style="width: 90%;"></div>` ) ;
686
+ let arrCols = $ ( `<div class="vp-numpy-array-row-container vp-numpy-style-flex-row-wrap" style="width:100%;"></div>` ) ;
687
+ item . forEach ( ( col , idx ) => {
688
+ arrCols . append ( $ ( `<div class="vp-numpy-style-flex-column" style="margin-top:5px">
689
+ <span class="vp-numpy-style-flex-row-center vp-bold">
690
+ ${ idx }
691
+ </span>
692
+ <input class="vp-input vp-numpy-2darr-item" style="width:40px;" value="${ col } " data-rowidx="${ rowIdx } " data-idx="${ idx } " type="text">
693
+ <button class="vp-button vp-numpy-2darr-col-del" style="width:40px;" title="Delete column">
694
+ x
695
+ </button>
696
+ </div>` ) ) ;
697
+ } ) ;
698
+ arrColBox . append ( arrCols ) ;
699
+ arrRows . append ( arrColBox ) ;
700
+ arrRowBox . append ( arrRows ) ;
701
+ // col add button
702
+ arrRowBox . append ( $ ( `<div class="vp-numpy-style-flex-column-center" style="width:10%;">
703
+ <button class="vp-button vp-numpy-2darr-col-add" style="width: 100%;height:40px;max-height:80px;" title="Add column">+</button>
704
+ </div>` ) ) ;
705
+ // row delete button
706
+ arrRowBox . append ( $ ( `<div class="vp-numpy-style-flex-column-center" style="width:10%;">
707
+ <button class="vp-button vp-numpy-2darr-row-del" style="width: 100%;height:40px;max-height:80px;" title="Delete row">x</button>
708
+ </div>` ) ) ;
709
+ return arrRowBox ;
633
710
}
634
711
635
712
var renderNdArr = function ( pageThis , obj , defaultValue ) {
@@ -750,7 +827,106 @@ define([
750
827
//====================================================================
751
828
// Event for 2dArr
752
829
//====================================================================
830
+ $ ( selector ) . on ( 'click' , '.vp-numpy-2darr-set' , function ( ) {
831
+ let id = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'id' ) ;
832
+ let arrId = id + '_2darr' ;
833
+ let row = $ ( this ) . parent ( ) . find ( '.vp-numpy-2darr-set-row' ) . val ( ) ;
834
+ let col = $ ( this ) . parent ( ) . find ( '.vp-numpy-2darr-set-col' ) . val ( ) ;
835
+ // update state
836
+ let state = Array ( parseInt ( row ) ) . fill ( Array ( parseInt ( col ) ) . fill ( 0 ) ) ;
837
+ pageThis . setState ( { [ arrId ] : state } ) ;
838
+ pageThis . setState ( { [ id ] : `[${ state . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` } ) ;
839
+ // re-render
840
+ let obj = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'obj' ) ;
841
+ $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . replaceWith ( function ( ) {
842
+ return render2dArr ( pageThis , obj , pageThis . getState ( ) ) ;
843
+ } ) ;
844
+ } ) ;
753
845
846
+ $ ( selector ) . on ( 'click' , '.vp-numpy-2darr-row-del' , function ( ) {
847
+ let id = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'id' ) ;
848
+ let arrId = id + '_2darr' ;
849
+ let idx = $ ( this ) . parent ( ) . parent ( ) . find ( '.vp-numpy-2darr-row' ) . data ( 'idx' ) ;
850
+ // update state
851
+ let state = pageThis . getState ( arrId ) ;
852
+ state . splice ( idx , 1 ) ;
853
+ pageThis . setState ( { [ arrId ] : state } ) ;
854
+ pageThis . setState ( { [ id ] : `[${ state . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` } ) ;
855
+ // re-render
856
+ let obj = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'obj' ) ;
857
+ $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . replaceWith ( function ( ) {
858
+ return render2dArr ( pageThis , obj , pageThis . getState ( ) ) ;
859
+ } ) ;
860
+ } ) ;
861
+
862
+ $ ( selector ) . on ( 'click' , '.vp-numpy-2darr-row-add' , function ( ) {
863
+ let id = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'id' ) ;
864
+ let arrId = id + '_2darr' ;
865
+ // update state
866
+ let state = pageThis . getState ( arrId ) ;
867
+ if ( ! state ) {
868
+ state = [ ] ;
869
+ }
870
+ state . push ( [ 0 ] ) ;
871
+ pageThis . setState ( { [ arrId ] : state } ) ;
872
+ pageThis . setState ( { [ id ] : `[${ state . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` } ) ;
873
+ // re-render
874
+ let obj = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'obj' ) ;
875
+ $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . replaceWith ( function ( ) {
876
+ return render2dArr ( pageThis , obj , pageThis . getState ( ) ) ;
877
+ } ) ;
878
+ } ) ;
879
+
880
+ $ ( selector ) . on ( 'click' , '.vp-numpy-2darr-col-del' , function ( ) {
881
+ let id = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'id' ) ;
882
+ let arrId = id + '_2darr' ;
883
+ let rowIdx = $ ( this ) . parent ( ) . parent ( ) . find ( '.vp-numpy-2darr-item' ) . data ( 'rowidx' ) ;
884
+ let idx = $ ( this ) . parent ( ) . find ( '.vp-numpy-2darr-item' ) . data ( 'idx' ) ;
885
+ // update state
886
+ let state = pageThis . getState ( arrId ) ;
887
+ state [ rowIdx ] . splice ( idx , 1 ) ;
888
+ pageThis . setState ( { [ arrId ] : state } ) ;
889
+ pageThis . setState ( { [ id ] : `[${ state . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` } ) ;
890
+ // re-render
891
+ let obj = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'obj' ) ;
892
+ $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . replaceWith ( function ( ) {
893
+ return render2dArr ( pageThis , obj , pageThis . getState ( ) ) ;
894
+ } ) ;
895
+ } ) ;
896
+
897
+ $ ( selector ) . on ( 'click' , '.vp-numpy-2darr-col-add' , function ( ) {
898
+ let id = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'id' ) ;
899
+ let arrId = id + '_2darr' ;
900
+ let rowIdx = $ ( this ) . parent ( ) . parent ( ) . find ( '.vp-numpy-2darr-item' ) . data ( 'rowidx' ) ;
901
+ // update state
902
+ let state = pageThis . getState ( arrId ) ;
903
+ if ( ! state ) {
904
+ state = Array ( rowIdx + 1 ) . fill ( [ ] ) ;
905
+ }
906
+ state [ rowIdx ] . push ( 0 ) ;
907
+ pageThis . setState ( { [ arrId ] : state } ) ;
908
+ pageThis . setState ( { [ id ] : `[${ state . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` } ) ;
909
+ // re-render
910
+ let obj = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'obj' ) ;
911
+ $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . replaceWith ( function ( ) {
912
+ return render2dArr ( pageThis , obj , pageThis . getState ( ) ) ;
913
+ } ) ;
914
+ } ) ;
915
+
916
+ $ ( selector ) . on ( 'change' , '.vp-numpy-2darr-item' , function ( ) {
917
+ let id = $ ( this ) . closest ( '.vp-numpy-2darr-box' ) . data ( 'id' ) ;
918
+ let arrId = id + '_2darr' ;
919
+ let rowIdx = $ ( this ) . data ( 'rowidx' ) ;
920
+ let idx = $ ( this ) . data ( 'idx' ) ;
921
+ let value = $ ( this ) . val ( ) ;
922
+ // update state
923
+ let state = pageThis . getState ( arrId ) ;
924
+ state [ rowIdx ] [ idx ] = value ;
925
+ let code = `[${ state . map ( ele => '[' + ele . join ( ',' ) + ']' ) . join ( ',' ) } ]` ;
926
+ pageThis . setState ( { [ arrId ] : state } ) ;
927
+ pageThis . setState ( { [ id ] : code } ) ;
928
+ $ ( pageThis . wrapSelector ( '#' + id ) ) . val ( code ) ;
929
+ } ) ;
754
930
755
931
//====================================================================
756
932
// Event for ndArr
0 commit comments