@@ -61,7 +61,11 @@ export interface Kicker {
61
61
62
62
export type RemoteFormHandler = ( form : HTMLFormElement , kicker : Kicker , req : SimpleRequest ) => void
63
63
64
- let formHandlers : Map < string , RemoteFormHandler [ ] >
64
+ // remoteForm can be installed with a selector or reference to a <form>
65
+ // element.
66
+ type Installable = string | HTMLFormElement
67
+
68
+ let formHandlers : Map < Installable , RemoteFormHandler [ ] >
65
69
type Handler = ( form : HTMLFormElement ) => void
66
70
67
71
const afterHandlers : Handler [ ] = [ ]
@@ -75,7 +79,7 @@ export function beforeRemote(fn: Handler): void {
75
79
beforeHandlers . push ( fn )
76
80
}
77
81
78
- export function remoteForm ( selector : string , fn : RemoteFormHandler ) : void {
82
+ export function remoteForm ( selector : Installable , fn : RemoteFormHandler ) : void {
79
83
if ( ! formHandlers ) {
80
84
formHandlers = new Map < string , RemoteFormHandler [ ] > ( )
81
85
@@ -87,7 +91,7 @@ export function remoteForm(selector: string, fn: RemoteFormHandler): void {
87
91
formHandlers . set ( selector , [ ...handlers , fn ] )
88
92
}
89
93
90
- export function remoteUninstall ( selector : string , fn : RemoteFormHandler ) : void {
94
+ export function remoteUninstall ( selector : Installable , fn : RemoteFormHandler ) : void {
91
95
if ( formHandlers ) {
92
96
const handlers = formHandlers . get ( selector ) || [ ]
93
97
formHandlers . set (
@@ -99,8 +103,19 @@ export function remoteUninstall(selector: string, fn: RemoteFormHandler): void {
99
103
100
104
function getMatches ( el : HTMLElement ) : RemoteFormHandler [ ] {
101
105
const results = [ ]
106
+
107
+ const hasMatch = ( ref : Installable ) => {
108
+ if ( typeof ref === 'object' ) {
109
+ return ref === el
110
+ } else if ( typeof ref === 'string' ) {
111
+ return el . matches ( ref )
112
+ } else {
113
+ return false
114
+ }
115
+ }
116
+
102
117
for ( const selector of formHandlers . keys ( ) ) {
103
- if ( el . matches ( selector ) ) {
118
+ if ( hasMatch ( selector ) ) {
104
119
const handlers = formHandlers . get ( selector ) || [ ]
105
120
results . push ( ...handlers )
106
121
}
0 commit comments