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 standard server-provided validation errors.
47 * @param {Object} error
49 function showValidationErrors(error) {
50 if (!error.status) return;
51 if (error.status === 422 && error.data) {
52 const message = Object.values(error.data).flat().join('\n');
53 emit('error', message);
58 * Notify standard server-provided error messages.
59 * @param {Object} error
61 function showResponseError(error) {
62 if (!error.status) return;
63 if (error.status >= 400 && error.data && error.data.message) {
64 emit('error', error.data.message);
72 success: (msg) => emit('success', msg),
73 error: (msg) => emit('error', msg),