5 * Emit a custom event for any handlers to pick-up.
6 * @param {String} eventName
9 function emit(eventName, eventData) {
10 stack.push({name: eventName, data: eventData});
11 if (typeof listeners[eventName] === 'undefined') return this;
12 let eventsToStart = listeners[eventName];
13 for (let i = 0; i < eventsToStart.length; i++) {
14 let event = eventsToStart[i];
20 * Listen to a custom event and run the given callback when that event occurs.
21 * @param {String} eventName
22 * @param {Function} callback
25 function listen(eventName, callback) {
26 if (typeof listeners[eventName] === 'undefined') listeners[eventName] = [];
27 listeners[eventName].push(callback);
31 * Emit an event for public use.
32 * Sends the event via the native DOM event handling system.
33 * @param {Element} targetElement
34 * @param {String} eventName
35 * @param {Object} eventData
37 function emitPublic(targetElement, eventName, eventData) {
38 const event = new CustomEvent(eventName, {
42 targetElement.dispatchEvent(event);
46 * Notify of a http error.
47 * Check for standard scenarios such as validation errors and
48 * formats an error notification accordingly.
49 * @param {Error} error
51 function showValidationErrors(error) {
52 if (!error.status) return;
53 if (error.status === 422 && error.data) {
54 const message = Object.values(error.data).flat().join('\n');
55 emit('error', message);
63 success: (msg) => emit('success', msg),
64 error: (msg) => emit('error', msg),