@@ -61,7 +61,11 @@ export interface Kicker {
6161
6262export type RemoteFormHandler = ( form : HTMLFormElement , kicker : Kicker , req : SimpleRequest ) => void
6363
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 [ ] >
6569type Handler = ( form : HTMLFormElement ) => void
6670
6771const afterHandlers : Handler [ ] = [ ]
@@ -75,7 +79,7 @@ export function beforeRemote(fn: Handler): void {
7579 beforeHandlers . push ( fn )
7680}
7781
78- export function remoteForm ( selector : string , fn : RemoteFormHandler ) : void {
82+ export function remoteForm ( selector : Installable , fn : RemoteFormHandler ) : void {
7983 if ( ! formHandlers ) {
8084 formHandlers = new Map < string , RemoteFormHandler [ ] > ( )
8185
@@ -87,7 +91,7 @@ export function remoteForm(selector: string, fn: RemoteFormHandler): void {
8791 formHandlers . set ( selector , [ ...handlers , fn ] )
8892}
8993
90- export function remoteUninstall ( selector : string , fn : RemoteFormHandler ) : void {
94+ export function remoteUninstall ( selector : Installable , fn : RemoteFormHandler ) : void {
9195 if ( formHandlers ) {
9296 const handlers = formHandlers . get ( selector ) || [ ]
9397 formHandlers . set (
@@ -99,8 +103,19 @@ export function remoteUninstall(selector: string, fn: RemoteFormHandler): void {
99103
100104function getMatches ( el : HTMLElement ) : RemoteFormHandler [ ] {
101105 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+
102117 for ( const selector of formHandlers . keys ( ) ) {
103- if ( el . matches ( selector ) ) {
118+ if ( hasMatch ( selector ) ) {
104119 const handlers = formHandlers . get ( selector ) || [ ]
105120 results . push ( ...handlers )
106121 }
0 commit comments