@@ -58,6 +58,41 @@ const remove_event_listener = (el, id) => {
5858 }
5959} ;
6060
61+ /**
62+ * Await an event to be thrown.
63+ *
64+ * Usage:
65+ * await events.await_event(button, "click");
66+ *
67+ * @param {DOM Node } el - The element to listen on.
68+ * @param {String } event_name - The event name to listen for.
69+ *
70+ * @returns {Promise } - Returns a Promise which can be used for ``await`` and which will be resolved when the event is throwm.
71+ *
72+ */
73+ const await_event = ( el , event_name ) => {
74+ // See: https://stackoverflow.com/a/44746691/1337474
75+ return new Promise ( ( resolve ) =>
76+ el . addEventListener ( event_name , resolve , { once : true } )
77+ ) ;
78+ } ;
79+
80+ /**
81+ * Await pattern init.
82+ *
83+ * Usage:
84+ * await events.await_pattern_init(PATTERN);
85+ *
86+ * @param {Pattern instance } pattern - The pattern instance.
87+ *
88+ * @returns {Promise } - Returns a Promise which can be used for ``await`` and which will be resolved when the event is throwm.
89+ *
90+ */
91+ const await_pattern_init = ( pattern ) => {
92+ // See: https://stackoverflow.com/a/44746691/1337474
93+ return new Promise ( ( resolve ) => pattern . one ( "init" , resolve ) ) ;
94+ } ;
95+
6196/**
6297 * Event factories
6398 */
@@ -100,6 +135,8 @@ const submit_event = () => {
100135export default {
101136 add_event_listener : add_event_listener ,
102137 remove_event_listener : remove_event_listener ,
138+ await_event : await_event ,
139+ await_pattern_init : await_pattern_init ,
103140 click_event : click_event ,
104141 change_event : change_event ,
105142 input_event : input_event ,
0 commit comments