/**
* Module for dispatching events from an HTML element
*
* @module customEvent
* @prop STICKY_ATTACHED - name of event fired when a sticky element is attached
* @prop STICKY_DETACHED - name of event fired when a sticky element is detached
*/
const customEvent = {
IN_VIEW: 'inView',
IN_BOUNDS: 'inBounds',
LOADED: 'loaded',
MORE_LOADED: 'moreLoaded',
STICKY_ATTACHED: 'stickyAttached', // when sticky element is first attached
STICKY_DETACHED: 'stickyDetached', // when sticky element has been completely detached
STICKY_ON: 'stickyOn', // when an attached sticky element is visually stuck
STICKY_OFF: 'stickyOff', // when an attached sticky element is visually unstuck
REGION_CHANGE: 'regionChange',
NAV_TRANSITIONED: 'navTransitioned',
NAV_TITLE_AND_SOCIAL: 'navTitleAndSocial',
TRANSITION_COMPLETED: 'transitionCompleted',
AUTO_PLAY_FAILED: 'autoPlayFailed',
SNACKBAR_DISMISSED: 'snackbarDismissed',
SNACKBAR_ACCEPTED: 'snackbarAccepted',
VIDEO_PLAYER_READY: 'videoReady',
SCROLL_DIRECTION_CHANGED: 'scrollDirectionChanged',
SCROLLED_TO_TOP: 'scrolledToTop',
SCROLLED: 'scrolled',
/**
* Register ad related data to be retrieved for ad bidding.
* @method fire
* @param {HTMLElement} target - Element to trigger event for
* @param {String} name - name of event
* @param {Object} data - details to be fired with event
*/
fire( target, name, data ) {
let evt;
if ( 'function' === typeof CustomEvent ) {
evt = new CustomEvent( name, {
detail: data,
});
} else {
evt = window.document.createEvent( 'Event' );
evt.initEvent( name, true, true );
evt.detail = data;
}
target.dispatchEvent( evt );
},
};
export default customEvent;