X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/1ee3e779e4b9b0a92f701a72f21a72c83cb1ce68..refs/pull/2023/head:/resources/js/services/events.js diff --git a/resources/js/services/events.js b/resources/js/services/events.js index 1f97d0cb8..fa3ed7fdf 100644 --- a/resources/js/services/events.js +++ b/resources/js/services/events.js @@ -7,6 +7,12 @@ class Events { this.stack = []; } + /** + * Emit a custom event for any handlers to pick-up. + * @param {String} eventName + * @param {*} eventData + * @returns {Events} + */ emit(eventName, eventData) { this.stack.push({name: eventName, data: eventData}); if (typeof this.listeners[eventName] === 'undefined') return this; @@ -18,11 +24,32 @@ class Events { return this; } + /** + * Listen to a custom event and run the given callback when that event occurs. + * @param {String} eventName + * @param {Function} callback + * @returns {Events} + */ listen(eventName, callback) { if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = []; this.listeners[eventName].push(callback); return this; } + + /** + * Emit an event for public use. + * Sends the event via the native DOM event handling system. + * @param {Element} targetElement + * @param {String} eventName + * @param {Object} eventData + */ + emitPublic(targetElement, eventName, eventData) { + const event = new CustomEvent(eventName, { + detail: eventData, + bubbles: true + }); + targetElement.dispatchEvent(event); + } } export default Events; \ No newline at end of file