@progress/kendo-charts
Version:
Kendo UI platform-independent Charts library
176 lines (132 loc) • 4.76 kB
JavaScript
import { Class } from '../drawing-utils';
var STRING = "string";
var FUNCTION = "function";
var preventDefault = function() {
this._defaultPrevented = true;
};
var isDefaultPrevented = function() {
return this._defaultPrevented === true;
};
var Observable = (function (Class) {
function Observable() {
Class.call(this);
this._events = {};
}
if ( Class ) Observable.__proto__ = Class;
Observable.prototype = Object.create( Class && Class.prototype );
Observable.prototype.constructor = Observable;
Observable.prototype.destroy = function destroy () {
this.unbind();
};
Observable.prototype.bind = function bind (event, handlers, one) {
var that = this,
idx,
eventNames = typeof event === STRING ? [event] : event || [],
length,
original,
handler,
handlersIsFunction = typeof handlers === FUNCTION,
events;
if (handlers === undefined) {
for (idx in event) {
that.bind(idx, event[idx]);
}
return that;
}
/* eslint-disable no-loop-func */
var loop = function ( ) {
var eventName = eventNames[idx];
handler = handlersIsFunction ? handlers : handlers[eventName];
if (handler) {
if (one) {
original = handler;
handler = function() {
that.unbind(eventName, handler);
original.apply(that, arguments);
};
handler.original = original;
}
events = that._events[eventName] = that._events[eventName] || [];
events.push(handler);
}
};
for (idx = 0, length = eventNames.length; idx < length; idx++) loop( );
/* eslint-enable no-loop-func */
return that;
};
Observable.prototype.one = function one (eventNames, handlers) {
return this.bind(eventNames, handlers, true);
};
Observable.prototype.first = function first (eventName, handlers) {
var that = this,
idx,
eventNames = typeof eventName === STRING ? [eventName] : eventName,
length,
handler,
handlersIsFunction = typeof handlers === FUNCTION,
events;
for (idx = 0, length = eventNames.length; idx < length; idx++) {
var eventName$1 = eventNames[idx];
handler = handlersIsFunction ? handlers : handlers[eventName$1];
if (handler) {
events = that._events[eventName$1] = that._events[eventName$1] || [];
events.unshift(handler);
}
}
return that;
};
Observable.prototype.trigger = function trigger (eventName, eventArgs) {
var that = this,
events = that._events[eventName],
idx,
length;
if (events) {
var e = eventArgs || {};
e.sender = that;
e._defaultPrevented = false;
e.preventDefault = preventDefault;
e.isDefaultPrevented = isDefaultPrevented;
events = events.slice();
for (idx = 0, length = events.length; idx < length; idx++) {
events[idx].call(that, e);
}
return e._defaultPrevented === true;
}
return false;
};
Observable.prototype.unbind = function unbind (eventName, handler) {
var that = this,
events = that._events[eventName],
idx;
if (eventName === undefined) {
that._events = {};
} else if (events) {
if (handler) {
for (idx = events.length - 1; idx >= 0; idx--) {
if (events[idx] === handler || events[idx].original === handler) {
events.splice(idx, 1);
}
}
} else {
that._events[eventName] = [];
}
}
return that;
};
Observable.prototype._setEvents = function _setEvents (options) {
var this$1 = this;
var length = (this.events || []).length;
for (var idx = 0; idx < length; idx ++) {
var e = this$1.events[idx];
if (this$1.options[e] && options[e]) {
this$1.unbind(e, this$1.options[e]);
if (this$1._events && this$1._events[e]) {
delete this$1._events[e];
}
}
}
this.bind(this.events, options);
};
return Observable;
}(Class));
export default Observable;