@@ -5,27 +5,40 @@ export function serializeEvent(event) {
5
5
Object . assign ( data , eventTransforms [ event . type ] ( event ) ) ;
6
6
}
7
7
8
- const target = event . target ;
9
- if ( target . tagName in targetTransforms ) {
10
- targetTransforms [ target . tagName ] . forEach ( ( trans ) =>
11
- Object . assign ( data , trans ( target ) )
12
- ) ;
13
- }
8
+ data . target = serializeDomElement ( event . target ) ;
9
+ data . currentTarget =
10
+ event . target === event . currentTarget
11
+ ? data . target
12
+ : serializeDomElement ( event . currentTarget ) ;
13
+ data . relatedTarget = serializeDomElement ( event . relatedTarget ) ;
14
14
15
15
return data ;
16
16
}
17
17
18
- const targetTransformCategories = {
19
- hasValue : ( target ) => ( {
20
- value : target . value ,
18
+ function serializeDomElement ( element ) {
19
+ let elementData = null ;
20
+ if ( element ) {
21
+ elementData = defaultElementTransform ( element ) ;
22
+ if ( element . tagName in elementTransforms ) {
23
+ elementTransforms [ element . tagName ] . forEach ( ( trans ) =>
24
+ Object . assign ( elementData , trans ( element ) )
25
+ ) ;
26
+ }
27
+ }
28
+ return elementData ;
29
+ }
30
+
31
+ const elementTransformCategories = {
32
+ hasValue : ( element ) => ( {
33
+ value : element . value ,
21
34
} ) ,
22
- hasCurrentTime : ( target ) => ( {
23
- currentTime : target . currentTime ,
35
+ hasCurrentTime : ( element ) => ( {
36
+ currentTime : element . currentTime ,
24
37
} ) ,
25
- hasFiles : ( target ) => {
26
- if ( target ?. type === "file" ) {
38
+ hasFiles : ( element ) => {
39
+ if ( element ?. type === "file" ) {
27
40
return {
28
- files : Array . from ( target . files ) . map ( ( file ) => ( {
41
+ files : Array . from ( element . files ) . map ( ( file ) => ( {
29
42
lastModified : file . lastModified ,
30
43
name : file . name ,
31
44
size : file . size ,
@@ -38,7 +51,11 @@ const targetTransformCategories = {
38
51
} ,
39
52
} ;
40
53
41
- const targetTagCategories = {
54
+ function defaultElementTransform ( element ) {
55
+ return { boundingClientRect : element . getBoundingClientRect ( ) } ;
56
+ }
57
+
58
+ const elementTagCategories = {
42
59
hasValue : [
43
60
"BUTTON" ,
44
61
"INPUT" ,
@@ -54,12 +71,13 @@ const targetTagCategories = {
54
71
hasFiles : [ "INPUT" ] ,
55
72
} ;
56
73
57
- const targetTransforms = { } ;
74
+ const elementTransforms = { } ;
58
75
59
- Object . keys ( targetTagCategories ) . forEach ( ( category ) => {
60
- targetTagCategories [ category ] . forEach ( ( type ) => {
61
- const transforms = targetTransforms [ type ] || ( targetTransforms [ type ] = [ ] ) ;
62
- transforms . push ( targetTransformCategories [ category ] ) ;
76
+ Object . keys ( elementTagCategories ) . forEach ( ( category ) => {
77
+ elementTagCategories [ category ] . forEach ( ( type ) => {
78
+ const transforms =
79
+ elementTransforms [ type ] || ( elementTransforms [ type ] = [ ] ) ;
80
+ transforms . push ( elementTransformCategories [ category ] ) ;
63
81
} ) ;
64
82
} ) ;
65
83
0 commit comments