@@ -3,7 +3,12 @@ import Utils from "../utils/Utils.js";
33import Component from "./Component.js" ;
44import State from "../core/State.js" ;
55import { container } from "../core/Container.js" ;
6- import { defineDomMethod , indirectEventHandler , isClass } from "../utils/helpers.js" ;
6+ import {
7+ defineDomMethod ,
8+ indirectEventHandler ,
9+ isClass ,
10+ registerDomListeners ,
11+ } from "../utils/helpers.js" ;
712
813/**
914 * Base Markup Engine Class
@@ -37,13 +42,13 @@ export default class MarkupEngine {
3742 registerComponent = ( name , componentClass ) => {
3843 if ( ! ( typeof name === "string" ) ) {
3944 throw Error (
40- `MarkupEngine.Exception: A Component's name must be a string: type '${ typeof name } ' given`
45+ `MarkupEngine.Exception: A Component's name must be a string: type '${ typeof name } ' given` ,
4146 ) ;
4247 }
4348
4449 if ( ! ( componentClass . prototype instanceof Component ) ) {
4550 throw new Error (
46- `MarkupEngine.Exception: The component for ${ name } must be an Component component. ${ componentClass . name } given`
51+ `MarkupEngine.Exception: The component for ${ name } must be an Component component. ${ componentClass . name } given` ,
4752 ) ;
4853 }
4954
@@ -83,7 +88,7 @@ export default class MarkupEngine {
8388 if ( this . hasComponent ( name ) ) return true ;
8489
8590 console . warn (
86- `MarkupEngine.Warn: Trying to ${ method } an unregistered component {${ name } }. Please ensure that the component is registered by using h.has(componentName)`
91+ `MarkupEngine.Warn: Trying to ${ method } an unregistered component {${ name } }. Please ensure that the component is registered by using h.has(componentName)` ,
8792 ) ;
8893
8994 return false ;
@@ -105,7 +110,8 @@ export default class MarkupEngine {
105110 // remove the listener from the event map in the repository
106111 // since for each event, there is only the indirect event handler
107112 // listening to that event.
108- let eventMap = container . resolve ( "repository" ) . domListeners . get ( this ) ?? new Map ( ) ;
113+ let eventMap =
114+ container . resolve ( "repository" ) . domListeners . get ( this ) ?? new Map ( ) ;
109115
110116 let listeners = eventMap . get ( event ) ?? new Set ( ) ;
111117
@@ -124,7 +130,9 @@ export default class MarkupEngine {
124130 } ;
125131
126132 element . getEventListeners = function ( ) {
127- return container . resolve ( "repository" ) . domListeners . get ( this ) ?? new Map ( ) ;
133+ return (
134+ container . resolve ( "repository" ) . domListeners . get ( this ) ?? new Map ( )
135+ ) ;
128136 } ;
129137
130138 element . toString = function ( ) {
@@ -135,7 +143,8 @@ export default class MarkupEngine {
135143 let methods = { } ;
136144
137145 // get the methods from the repository
138- let methodsMap = container . resolve ( "repository" ) . domMethods . get ( this ) ?? new Map ( ) ;
146+ let methodsMap =
147+ container . resolve ( "repository" ) . domMethods . get ( this ) ?? new Map ( ) ;
139148
140149 for ( let [ k , v ] of methodsMap ) {
141150 methods [ k ] = v ;
@@ -149,6 +158,7 @@ export default class MarkupEngine {
149158 this . removeEventListener ( event , indirectEventHandler ) ;
150159 } ) ;
151160 this . __eventListeners ?. clear ( ) ;
161+ container . resolve ( "repository" ) . domListeners . get ( this ) ?. clear ( ) ;
152162 } ;
153163
154164 element . __openscript_cleanup__ = ( ) => {
@@ -180,7 +190,7 @@ export default class MarkupEngine {
180190 handle = ( name , ...args ) => {
181191 if ( ! ( typeof name === "string" ) ) {
182192 throw Error (
183- `MarkupEngine.Exception: A Component's name must be a string: type '${ typeof name } ' given`
193+ `MarkupEngine.Exception: A Component's name must be a string: type '${ typeof name } ' given` ,
184194 ) ;
185195 }
186196
@@ -213,7 +223,6 @@ export default class MarkupEngine {
213223 return cmp . wrap ( ...args ) ;
214224 }
215225
216-
217226 /**
218227 * @type {DocumentFragment|HTMLElement }
219228 */
@@ -285,7 +294,7 @@ export default class MarkupEngine {
285294 if ( k === "listeners" ) {
286295 if ( typeof v !== "object" ) {
287296 throw TypeError (
288- `The value of 'listeners' should be an object. but found ${ typeof v } `
297+ `The value of 'listeners' should be an object. but found ${ typeof v } ` ,
289298 ) ;
290299 }
291300
@@ -294,12 +303,12 @@ export default class MarkupEngine {
294303
295304 if ( Array . isArray ( listener ) ) {
296305 listener . forEach ( ( l ) => {
297- this . registerDomListeners ( root , evt , l ) ;
306+ registerDomListeners ( root , evt , l ) ;
298307 } ) ;
299308
300309 root . addListener ( evt , indirectEventHandler ) ;
301310 } else {
302- this . registerDomListeners ( root , evt , listener ) ;
311+ registerDomListeners ( root , evt , listener ) ;
303312 root . addListener ( evt , indirectEventHandler ) ;
304313 }
305314 }
@@ -310,10 +319,10 @@ export default class MarkupEngine {
310319 if ( k === "methods" ) {
311320 if ( typeof v !== "object" ) {
312321 throw TypeError (
313- `The value of 'methods' attribute should be an object. but found ${ typeof v } `
322+ `The value of 'methods' attribute should be an object. but found ${ typeof v } ` ,
314323 ) ;
315324 }
316-
325+
317326 let methodMap = container . resolve ( "repository" ) . domMethods . get ( root ) ;
318327 if ( ! methodMap ) {
319328 methodMap = new Map ( ) ;
@@ -346,7 +355,7 @@ export default class MarkupEngine {
346355 `MarkupEngine.ParseAttribute.Exception: ` ,
347356 e ,
348357 `. Attributes resulting in the error: ` ,
349- obj
358+ obj ,
350359 ) ;
351360 throw Error ( e ) ;
352361 }
@@ -444,7 +453,7 @@ export default class MarkupEngine {
444453 f = ( ) => {
445454 const h = container . resolve ( "h" ) ;
446455 return h [ "ojs-group" ] ( ) ;
447- }
456+ } ,
448457 ) => {
449458 return f ( ) ;
450459 } ;
@@ -522,17 +531,4 @@ export default class MarkupEngine {
522531 toElement = ( value ) => {
523532 return value ;
524533 } ;
525-
526- registerDomListeners = ( node , event , listener ) => {
527- let eventMap = container . resolve ( "repository" ) . domListeners . get ( node ) ;
528-
529- if ( ! eventMap ) {
530- eventMap = new Map ( ) ;
531- container . resolve ( "repository" ) . domListeners . set ( node , eventMap ) ;
532- }
533-
534- let listeners = eventMap . get ( event ) ?? new Set ( ) ;
535- listeners . add ( listener ) ;
536- eventMap . set ( event , listeners ) ;
537- } ;
538534}
0 commit comments