@@ -1165,54 +1165,61 @@ const EasyCoder_Browser = {
1165
1165
} ,
1166
1166
1167
1167
run : ( program ) => {
1168
+ let targetRecord ;
1168
1169
const command = program [ program . pc ] ;
1169
1170
switch ( command . action ) {
1170
1171
case `change` :
1171
1172
targetRecord = program . getSymbolRecord ( command . symbol ) ;
1172
1173
targetRecord . program = program . script ;
1173
1174
targetRecord . element . forEach ( function ( target , index ) {
1174
- target . targetRecord = targetRecord ;
1175
- target . targetIndex = index ;
1176
- target . targetPc = command . pc + 2 ;
1177
- target . addEventListener ( `change` , ( event ) => {
1178
- event . stopPropagation ( ) ;
1179
- if ( program . length > 0 ) {
1180
- const eventTarget = event . target ;
1181
- if ( typeof eventTarget . targetRecord !== `undefined` ) {
1182
- eventTarget . targetRecord . index = eventTarget . targetIndex ;
1183
- setTimeout ( function ( ) {
1184
- EasyCoder . timestamp = Date . now ( ) ;
1185
- let p = EasyCoder . scripts [ eventTarget . targetRecord . program ] ;
1186
- p . run ( eventTarget . targetPc ) ;
1187
- } , 1 ) ;
1175
+ if ( target ) {
1176
+ target . targetRecord = targetRecord ;
1177
+ target . targetIndex = index ;
1178
+ target . targetPc = command . pc + 2 ;
1179
+ target . addEventListener ( `change` , ( event ) => {
1180
+ event . stopPropagation ( ) ;
1181
+ if ( program . length > 0 ) {
1182
+ const eventTarget = event . target ;
1183
+ if ( typeof eventTarget . targetRecord !== `undefined` ) {
1184
+ eventTarget . targetRecord . index = eventTarget . targetIndex ;
1185
+ setTimeout ( function ( ) {
1186
+ EasyCoder . timestamp = Date . now ( ) ;
1187
+ let p = EasyCoder . scripts [ eventTarget . targetRecord . program ] ;
1188
+ p . run ( eventTarget . targetPc ) ;
1189
+ } , 1 ) ;
1190
+ }
1188
1191
}
1189
- }
1190
- } ) ;
1192
+ } ) ;
1193
+ }
1191
1194
} ) ;
1192
1195
break ;
1193
1196
case `click` :
1194
1197
targetRecord = program . getSymbolRecord ( command . symbol ) ;
1195
1198
targetRecord . program = program . script ;
1196
1199
targetRecord . element . forEach ( function ( target , index ) {
1197
- target . targetRecord = targetRecord ;
1198
- target . targetIndex = index ;
1199
- target . targetPc = command . pc + 2 ;
1200
- target . onclick = function ( event ) {
1201
- event . stopPropagation ( ) ;
1202
- if ( program . length > 0 ) {
1203
- const eventTarget = event . target ;
1204
- eventTarget . blur ( ) ;
1205
- if ( typeof eventTarget . targetRecord !== `undefined` ) {
1206
- eventTarget . targetRecord . index = eventTarget . targetIndex ;
1207
- setTimeout ( function ( ) {
1208
- EasyCoder . timestamp = Date . now ( ) ;
1209
- let p = EasyCoder . scripts [ eventTarget . targetRecord . program ] ;
1210
- p . run ( eventTarget . targetPc ) ;
1211
- } , 1 ) ;
1200
+ if ( target ) {
1201
+ target . targetRecord = targetRecord ;
1202
+ target . targetIndex = index ;
1203
+ target . targetPc = command . pc + 2 ;
1204
+ target . onclick = function ( event ) {
1205
+ event . stopPropagation ( ) ;
1206
+ if ( program . length > 0 ) {
1207
+ const eventTarget = event . target ;
1208
+ if ( eventTarget . type != `radio` ) {
1209
+ eventTarget . blur ( ) ;
1210
+ }
1211
+ if ( typeof eventTarget . targetRecord !== `undefined` ) {
1212
+ eventTarget . targetRecord . index = eventTarget . targetIndex ;
1213
+ setTimeout ( function ( ) {
1214
+ EasyCoder . timestamp = Date . now ( ) ;
1215
+ let p = EasyCoder . scripts [ eventTarget . targetRecord . program ] ;
1216
+ p . run ( eventTarget . targetPc ) ;
1217
+ } , 1 ) ;
1218
+ }
1212
1219
}
1213
- }
1214
- return false ;
1215
- } ;
1220
+ return false ;
1221
+ } ;
1222
+ }
1216
1223
} ) ;
1217
1224
break ;
1218
1225
case `clickDocument` :
@@ -1606,7 +1613,9 @@ const EasyCoder_Browser = {
1606
1613
case `removeElement` :
1607
1614
const elementRecord = program . getSymbolRecord ( command . element ) ;
1608
1615
const element = elementRecord . element [ elementRecord . index ] ;
1609
- element . parentElement . removeChild ( element ) ;
1616
+ if ( element ) {
1617
+ element . parentElement . removeChild ( element ) ;
1618
+ }
1610
1619
break ;
1611
1620
case `removeStorage` :
1612
1621
const key = program . getValue ( command . key ) ;
@@ -2869,6 +2878,15 @@ const EasyCoder_Browser = {
2869
2878
} ;
2870
2879
}
2871
2880
return null ;
2881
+ case `storage` :
2882
+ if ( compiler . nextTokenIs ( `keys` ) ) {
2883
+ compiler . next ( ) ;
2884
+ return {
2885
+ domain : `browser` ,
2886
+ type : `storageKeys`
2887
+ } ;
2888
+ }
2889
+ return null ;
2872
2890
case `parent` :
2873
2891
switch ( compiler . nextToken ( ) ) {
2874
2892
case `name` :
@@ -3146,6 +3164,12 @@ const EasyCoder_Browser = {
3146
3164
numeric : false ,
3147
3165
content : program . docPath
3148
3166
} ;
3167
+ case `storageKeys` :
3168
+ return {
3169
+ type : `constant` ,
3170
+ numeric : false ,
3171
+ content : JSON . stringify ( Object . keys ( localStorage ) )
3172
+ } ;
3149
3173
case `location` :
3150
3174
return {
3151
3175
type : `constant` ,
0 commit comments