@syncfusion/ej2-base
Version:
A common package of Essential JS 2 base libraries, methods and class definitions
140 lines (139 loc) • 5.49 kB
JavaScript
import { debounce, extend } from './util';
import { Browser } from './browser';
/**
* EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element
* ```html
* <div id="Eventdiv"> </div>
* <script>
* let node: HTMLElement = document.querySelector("#Eventdiv");
* EventHandler.addEventListener(node, "click", function(){
* // click handler function code
* });
* EventHandler.addEventListener(node, "onmouseover", function(){
* // mouseover handler function code
* });
* EventHandler.removeEventListener(node, "click", function(){
* // click handler function code
* });
* eventObj.clearEvents();
* </script>
* ```
*/
var EventHandler = /** @class */ (function () {
function EventHandler() {
}
// to get the event data based on element
EventHandler.addOrGetEventData = function (element) {
if ('__eventList' in element) {
return element.__eventList.events;
}
else {
element.__eventList = {};
return element.__eventList.events = [];
}
};
/**
* Add an event to the specified DOM element.
*
* @param {any} element - Target HTML DOM element
* @param {string} eventName - A string that specifies the name of the event
* @param {Function} listener - Specifies the function to run when the event occurs
* @param {Object} bindTo - A object that binds 'this' variable in the event handler
* @param {number} intDebounce - Specifies at what interval given event listener should be triggered.
* @returns {Function} ?
*/
EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {
var eventData = EventHandler.addOrGetEventData(element);
var debounceListener;
if (intDebounce) {
debounceListener = debounce(listener, intDebounce);
}
else {
debounceListener = listener;
}
if (bindTo) {
debounceListener = debounceListener.bind(bindTo);
}
var event = eventName.split(' ');
for (var i = 0; i < event.length; i++) {
eventData.push({
name: event[parseInt(i.toString(), 10)],
listener: listener,
debounce: debounceListener
});
if (Browser.isIE) {
element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);
}
else {
element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });
}
}
return debounceListener;
};
/**
* Remove an event listener that has been attached before.
*
* @param {any} element - Specifies the target html element to remove the event
* @param {string} eventName - A string that specifies the name of the event to remove
* @param {Function} listener - Specifies the function to remove
* @returns {void} ?
*/
EventHandler.remove = function (element, eventName, listener) {
var eventData = EventHandler.addOrGetEventData(element);
var event = eventName.split(' ');
var _loop_1 = function (j) {
var index = -1;
var debounceListener;
if (eventData && eventData.length !== 0) {
eventData.some(function (x, i) {
return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ?
(index = i, debounceListener = x.debounce, true) : false;
});
}
if (index !== -1) {
eventData.splice(index, 1);
}
if (debounceListener) {
element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener);
}
};
for (var j = 0; j < event.length; j++) {
_loop_1(j);
}
};
/**
* Clear all the event listeners that has been previously attached to the element.
*
* @param {any} element - Specifies the target html element to clear the events
* @returns {void} ?
*/
EventHandler.clearEvents = function (element) {
var eventData = EventHandler.addOrGetEventData(element);
var copyData = extend([], undefined, eventData);
for (var i = 0; i < copyData.length; i++) {
var parseValue = copyData[parseInt(i.toString(), 10)];
element.removeEventListener(parseValue.name, parseValue.debounce);
eventData.shift();
}
};
/**
* Trigger particular event of the element.
*
* @param {any} element - Specifies the target html element to trigger the events
* @param {string} eventName - Specifies the event to trigger for the specified element.
* Can be a custom event, or any of the standard events.
* @param {any} eventProp - Additional parameters to pass on to the event properties
* @returns {void} ?
*/
EventHandler.trigger = function (element, eventName, eventProp) {
var eventData = EventHandler.addOrGetEventData(element);
for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {
var event_1 = eventData_1[_i];
if (event_1.name === eventName) {
event_1.debounce.call(this, eventProp);
}
}
};
return EventHandler;
}());
export { EventHandler };