@@ -862,6 +862,7 @@ window.ComponentLine = class {
862
862
let foot = document . createElement ( 'tr' ) ;
863
863
foot . className = 'dlp-tr' ;
864
864
let columns = this . COLUMNS ;
865
+ this . INSERT_ROW_MENUE_DATA = { } ;
865
866
for ( let column in columns ) {
866
867
if ( ! columns . hasOwnProperty ( column ) ) continue ;
867
868
let val = columns [ column ] ;
@@ -878,7 +879,7 @@ window.ComponentLine = class {
878
879
case 'select' :
879
880
let td = document . createElement ( 'td' ) ;
880
881
td . style = val . style ;
881
- td . append ( this . menuMake ( column , [ ] , val . options , val . options_limit , val . name ) ) ;
882
+ td . append ( this . menuMake ( column , [ ] , val . options , val . options_limit , val . name , true ) ) ;
882
883
foot . append ( td ) ;
883
884
break ;
884
885
case 'datetime' :
@@ -920,40 +921,31 @@ window.ComponentLine = class {
920
921
let tbody = document . createElement ( 'tbody' ) ;
921
922
let columns = this . COLUMNS ;
922
923
if ( Array . isArray ( this . DATA ) === false ) return ;
923
- this . DATA . forEach ( ( value , key ) => {
924
+ this . DATA . forEach ( ( values , key ) => {
924
925
let tr = document . createElement ( 'tr' ) ;
925
926
tr . className = 'dlp-tr' ;
926
927
tr . setAttribute ( 'sortable-item' , 'sortable-item' ) ;
927
928
let record = { } ;
928
- for ( let column in columns ) {
929
- if ( ! columns . hasOwnProperty ( column ) ) continue ;
930
- if ( columns [ column ] . type === 'hidden' ) {
931
- if ( value [ column ] ) {
932
- record [ column ] = value [ column ] ;
933
- }
934
- continue ;
929
+ for ( let name in columns ) {
930
+ if ( ! columns . hasOwnProperty ( name ) ) continue ;
931
+ let column = columns [ name ] ;
932
+ if ( ! values [ name ] ) {
933
+ this . DATA [ key ] [ name ] = '' ;
934
+ record [ name ] = '' ;
935
935
}
936
936
let td = document . createElement ( 'td' ) ;
937
- if ( columns [ column ] . type === 'select' ) {
938
- let v = this . DATA [ key ] [ column ] ;
937
+ let v = this . DATA [ key ] [ name ] ;
938
+ if ( column . type === 'select' ) {
939
939
if ( / ^ [ 0 - 9 ] + $ / . test ( v ) ) {
940
940
v = [ parseInt ( v ) ] ;
941
941
} else if ( Array . isArray ( v ) === false ) {
942
942
v = [ ] ;
943
943
}
944
- value [ column ] = v ;
945
944
}
946
- if ( value [ column ] ) {
947
- record [ column ] = value [ column ] ;
948
- this . makeTd ( td , columns [ column ] , value [ column ] , column ) ;
949
- } else {
950
- record [ column ] = '' ;
951
- this . makeTd ( td , columns [ column ] , '' , column ) ;
952
- }
953
- tr . setAttribute ( 'data-key' , key . toString ( ) ) ;
945
+ this . makeTd ( td , name , column , v ) ;
946
+ record [ name ] = v ;
954
947
tr . appendChild ( td ) ;
955
948
}
956
-
957
949
let td = document . createElement ( 'td' ) ;
958
950
this . operateButton ( td ) ;
959
951
tr . appendChild ( td ) ;
@@ -989,7 +981,7 @@ window.ComponentLine = class {
989
981
let tr = document . createElement ( 'tr' ) ;
990
982
tr . className = 'dlp-tr' ;
991
983
tr . setAttribute ( 'sortable-item' , 'sortable-item' ) ;
992
- tr . setAttribute ( 'data-key' , this . DATA . length . toString ( ) ) ;
984
+
993
985
for ( let column in this . COLUMNS ) {
994
986
if ( ! this . COLUMNS . hasOwnProperty ( column ) ) continue ;
995
987
let type = this . COLUMNS [ column ] . insert_type ? this . COLUMNS [ column ] . insert_type : this . COLUMNS [ column ] . type ;
@@ -1001,7 +993,7 @@ window.ComponentLine = class {
1001
993
value = '' ;
1002
994
}
1003
995
insert [ column ] = value ;
1004
- this . makeTd ( td , this . COLUMNS [ column ] , value , column ) ;
996
+ this . makeTd ( td , column , this . COLUMNS [ column ] , value ) ;
1005
997
tr . appendChild ( td ) ;
1006
998
}
1007
999
@@ -1017,7 +1009,7 @@ window.ComponentLine = class {
1017
1009
this . TABLE_DOM . querySelector ( '.insert_handel' ) . appendChild ( i ) ;
1018
1010
}
1019
1011
1020
- makeTd ( td , settings , value , column ) {
1012
+ makeTd ( td , column , settings , value ) {
1021
1013
let input ;
1022
1014
let DATA = this . DATA ;
1023
1015
let DATA_INPUT = this . DATA_INPUT ;
@@ -1031,7 +1023,7 @@ window.ComponentLine = class {
1031
1023
input . setAttribute ( 'data-column' , column ) ;
1032
1024
input . value = value ;
1033
1025
input . addEventListener ( 'input' , ( ) => {
1034
- let key = input . parentNode . parentNode . getAttribute ( 'data-key' ) ;
1026
+ let key = this . searchChildrenDomIndex ( input . parentNode . parentNode ) ;
1035
1027
let column = input . getAttribute ( 'data-column' ) ;
1036
1028
if ( DATA [ key ] ) {
1037
1029
DATA [ key ] [ column ] = input . value ;
@@ -1059,7 +1051,7 @@ window.ComponentLine = class {
1059
1051
}
1060
1052
this . format_settings [ column ] = format ;
1061
1053
input . addEventListener ( 'blur' , ( ) => {
1062
- let key = input . parentNode . parentNode . getAttribute ( 'data-key' ) ;
1054
+ let key = this . searchChildrenDomIndex ( input . parentNode . parentNode ) ;
1063
1055
let column = input . getAttribute ( 'data-column' ) ;
1064
1056
if ( DATA [ key ] ) {
1065
1057
DATA [ key ] [ column ] = input . value ;
@@ -1098,26 +1090,21 @@ window.ComponentLine = class {
1098
1090
D . addEventListener ( 'click' , ( ) => {
1099
1091
let tr = D . parentNode . parentNode ;
1100
1092
let tbody = tr . parentNode ;
1101
- let key = tr . getAttribute ( 'data-key' ) ;
1093
+ let key = this . searchChildrenDomIndex ( tr ) ;
1102
1094
1103
1095
this . DATA . splice ( key , 1 ) ;
1104
1096
tbody . removeChild ( tr ) ;
1105
1097
this . DATA_INPUT . value = JSON . stringify ( this . DATA ) ;
1106
- for ( let node in tbody . childNodes ) {
1107
- if ( ! tbody . childNodes . hasOwnProperty ( node ) ) continue ;
1108
- if ( tbody . childNodes [ node ] instanceof HTMLElement ) {
1109
- tbody . childNodes [ node ] . setAttribute ( 'data-key' , node ) ;
1110
- }
1111
- }
1112
1098
} , false ) ;
1113
1099
td . appendChild ( D ) ;
1114
1100
}
1115
1101
td . className = 'operate-column' ;
1116
1102
}
1117
1103
1118
- menuMake ( column , selected , select , limit , placeholder ) {
1104
+ menuMake ( column , selected , select , limit , placeholder , insertRow = false ) {
1119
1105
let menu = document . createElement ( 'div' ) ;
1120
1106
menu . className = 'dlp-dot-menu' ;
1107
+ if ( insertRow ) this . INSERT_ROW_MENUE_DATA [ column ] = [ ] ;
1121
1108
1122
1109
let menu_select = document . createElement ( 'div' ) ;
1123
1110
menu_select . className = 'dlp-input dlp-dot-menu-select' ;
@@ -1144,29 +1131,46 @@ window.ComponentLine = class {
1144
1131
option . insertAdjacentHTML ( 'afterbegin' , `<div class="dlp dlp-text" data-v="${ id } ">${ select [ id ] } </div><div></div>` ) ;
1145
1132
option . addEventListener ( 'click' , ( ) => {
1146
1133
id = parseInt ( id ) ;
1147
- let data_key = parseInt ( menu . parentNode . parentNode . getAttribute ( 'data-key' ) ) ;
1148
- let selected = this . DATA [ data_key ] [ column ] ;
1134
+ let selected ;
1135
+ if ( insertRow ) {
1136
+ selected = this . INSERT_ROW_MENUE_DATA [ column ] ;
1137
+ } else {
1138
+ let key = this . searchChildrenDomIndex ( menu . parentNode . parentNode ) ;
1139
+ selected = this . DATA [ key ] [ column ] ;
1140
+ }
1149
1141
let index = selected . indexOf ( id ) ;
1150
1142
if ( index !== - 1 ) {
1151
1143
/*cancel*/
1152
1144
selected . splice ( index , 1 ) ;
1153
1145
option . classList . remove ( 'option-active' ) ;
1154
1146
if ( option . lastChild instanceof HTMLElement ) option . lastChild . innerHTML = '' ;
1155
1147
menuSelect ( select , selected , limit ) ;
1156
- this . DATA [ data_key ] [ column ] = selected ;
1157
1148
if ( selected . length === 0 ) menu_select . firstElementChild . textContent = placeholder ;
1149
+ if ( insertRow === false ) {
1150
+ this . DATA_INPUT . value = JSON . stringify ( this . DATA ) ;
1151
+ }
1158
1152
return ;
1159
1153
}
1160
1154
if ( limit > 0 && selected . length >= limit ) {
1161
1155
for ( let line of list . childNodes ) {
1162
- if ( ( selected . hasOwnProperty ( '0' ) ) && line . getAttribute ( 'data-id' ) === selected [ 0 ] . toString ( ) ) line . click ( ) ;
1156
+ if ( ( selected . hasOwnProperty ( '0' ) ) && line . getAttribute ( 'data-id' ) === selected [ 0 ] . toString ( ) ) line . click ( ) ;
1163
1157
}
1164
1158
}
1165
1159
option . classList . add ( 'option-active' ) ;
1166
1160
selected . push ( id ) ;
1167
1161
( option . lastChild instanceof HTMLElement ) && option . lastChild . insertAdjacentHTML ( 'afterbegin' , check ) ;
1168
1162
menuSelect ( select , selected , limit ) ;
1163
+ if ( insertRow === false ) {
1164
+ this . DATA_INPUT . value = JSON . stringify ( this . DATA ) ;
1165
+ }
1169
1166
} , false ) ;
1167
+ /*init selected*/
1168
+ if ( limit > 0 && selected . length >= limit ) selected . slice ( 0 , limit ) ;
1169
+ if ( selected . indexOf ( parseInt ( id ) ) !== - 1 ) {
1170
+ option . classList . add ( 'option-active' ) ;
1171
+ ( option . lastChild instanceof HTMLElement ) && option . lastChild . insertAdjacentHTML ( 'afterbegin' , check ) ;
1172
+ menuSelect ( select , selected , limit ) ;
1173
+ }
1170
1174
list . append ( option ) ;
1171
1175
}
1172
1176
@@ -1220,6 +1224,12 @@ window.ComponentLine = class {
1220
1224
} ) ;
1221
1225
}
1222
1226
}
1227
+
1228
+ searchChildrenDomIndex ( dom ) {
1229
+ let i = 0 ;
1230
+ while ( ( dom = dom . previousSibling ) != null ) i ++ ;
1231
+ return i ;
1232
+ }
1223
1233
} ;
1224
1234
1225
1235
window . ComponentPlane = class {
0 commit comments