11import * as React from 'react'
22
33import { getAttributes , NodeType } from './dom'
4+ import { EnrichedElement , EventHandlers } from './event'
45
5- export interface Attributes { [ keyof : string ] : string }
6+ export interface Attributes { [ keyof : string ] : string | React . EventHandler < any > }
67
7- const reactAttributesMap : Attributes = {
8+ const reactAttributesMap : { [ keyof : string ] : string } = {
89 acceptcharset : 'acceptCharset' ,
910 accesskey : 'accessKey' ,
1011 allowfullscreen : 'allowFullScreen' ,
@@ -52,10 +53,16 @@ const reactAttributesMap: Attributes = {
5253 usemap : 'useMap' ,
5354}
5455
55- function transformAttributes ( attributesMap : NamedNodeMap ) : Attributes {
56+ function transformAttributes ( attributesMap : NamedNodeMap , eventHandlers : EventHandlers ) : Attributes {
5657 const attributes = getAttributes ( attributesMap )
5758 const transformedAttributes : Attributes = { }
5859
60+ if ( eventHandlers ) {
61+ Object . keys ( eventHandlers ) . forEach ( ( eventHandler ) => {
62+ transformedAttributes [ eventHandler ] = eventHandlers [ eventHandler ]
63+ } )
64+ }
65+
5966 Object . keys ( attributes ) . forEach ( ( key ) => {
6067 if ( reactAttributesMap [ key ] ) {
6168 transformedAttributes [ reactAttributesMap [ key ] ] = attributes [ key ]
@@ -71,16 +78,16 @@ function renderTextNode(node: Node & ChildNode) {
7178}
7279
7380function renderElementNode ( node : Node & ChildNode ) {
74- const element = transform ( node as Element )
81+ const element = transform ( node as EnrichedElement )
7582 if ( element . childNodes ) {
7683 return React . createElement ( element . nodeName , element . attributes , render ( element . childNodes ) )
7784 }
7885 return React . createElement ( element . nodeName , element . attributes )
7986}
8087
81- function transform ( element : Element ) {
88+ function transform ( element : EnrichedElement ) {
8289 return {
83- attributes : transformAttributes ( element . attributes ) ,
90+ attributes : transformAttributes ( element . attributes , element . eventHandlers ) ,
8491 childNodes : element . childNodes ,
8592 nodeName : element . nodeName . toLowerCase ( ) ,
8693 nodeType : element . nodeType ,
0 commit comments