@@ -608,15 +608,15 @@ define([
608608 // Array Items
609609 let arrItems = $ ( `<div class="vp-numpy-style-flex-row-wrap vp-numpy-1darr-item-box"></div>` ) ;
610610 arrState . forEach ( ( item , idx ) => {
611- arrItems . append ( render1dArrItem ( pageThis , idx , item ) ) ;
611+ arrItems . append ( render1dArrItem ( idx , item ) ) ;
612612 } ) ;
613613 contentTag . append ( arrItems ) ;
614614 // add button
615615 contentTag . append ( $ ( `<button class="vp-button vp-numpy-1darr-add">+ Add</button>` ) ) ;
616616 return contentTag ;
617617 }
618618
619- var render1dArrItem = function ( pageThis , idx , value = 0 ) {
619+ var render1dArrItem = function ( idx , value = 0 ) {
620620 return $ ( `<div class="vp-numpy-style-flex-column" style="margin-top:10px;;margin-bottom:10px;">
621621 <div class="text-center" style="margin-top:10px;;margin-bottom:10px;">
622622 ${ idx }
@@ -628,8 +628,85 @@ define([
628628 </div>` ) ;
629629 }
630630
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 ;
633710 }
634711
635712 var renderNdArr = function ( pageThis , obj , defaultValue ) {
@@ -750,7 +827,106 @@ define([
750827 //====================================================================
751828 // Event for 2dArr
752829 //====================================================================
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+ } ) ;
753845
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+ } ) ;
754930
755931 //====================================================================
756932 // Event for ndArr
0 commit comments