88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
//
|
|
// None of the following code was written for mson-three explicity.
|
|
// attribution is provided where necessary.
|
|
//
|
|
// all of this junk was copied from abandoned npm modules which mimic browser
|
|
// APIs in Node.js in order to make GLTFExporter work.
|
|
//
|
|
// this is taken from abandoned npm module "eventtarget" by Jesús Leganés Combarro "Piranna"
|
|
//
|
|
export class EventTarget {
|
|
listeners: any = {};
|
|
|
|
addEventListener(type: string | number, listener: any) {
|
|
if (!listener) return;
|
|
|
|
var listeners_type = this.listeners[type];
|
|
if (listeners_type === undefined)
|
|
this.listeners[type] = listeners_type = [];
|
|
|
|
for (var i = 0, l; (l = listeners_type[i]); i++) if (l === listener) return;
|
|
|
|
listeners_type.push(listener);
|
|
}
|
|
|
|
dispatchEvent(event: {
|
|
type: any;
|
|
message?: any;
|
|
_dispatched?: any;
|
|
cancelable?: any;
|
|
defaultPrevented?: any;
|
|
isTrusted?: any;
|
|
preventDefault?: any;
|
|
stopImmediatePropagation?: any;
|
|
target?: any;
|
|
timeStamp?: any;
|
|
}) {
|
|
if (event._dispatched) throw 'InvalidStateError';
|
|
event._dispatched = true;
|
|
|
|
var type = event.type;
|
|
if (type == undefined || type == '') throw 'UNSPECIFIED_EVENT_TYPE_ERR';
|
|
|
|
var listenerArray = this.listeners[type] || [];
|
|
|
|
var dummyListener = (this as any)['on' + type];
|
|
if (typeof dummyListener == 'function')
|
|
listenerArray = listenerArray.concat(dummyListener);
|
|
|
|
var stopImmediatePropagation = false;
|
|
|
|
// [ToDo] Use read-only properties instead of attributes when availables
|
|
event.cancelable = true;
|
|
event.defaultPrevented = false;
|
|
event.isTrusted = false;
|
|
event.preventDefault = function () {
|
|
if (this.cancelable) this.defaultPrevented = true;
|
|
};
|
|
event.stopImmediatePropagation = function () {
|
|
stopImmediatePropagation = true;
|
|
};
|
|
event.target = this;
|
|
event.timeStamp = new Date().getTime();
|
|
|
|
for (var i = 0, listener; (listener = listenerArray[i]); i++) {
|
|
if (stopImmediatePropagation) break;
|
|
|
|
listener.call(this, event);
|
|
}
|
|
|
|
return !event.defaultPrevented;
|
|
}
|
|
|
|
removeEventListener(type: string | number, listener: any) {
|
|
if (!listener) return;
|
|
|
|
var listeners_type = this.listeners[type];
|
|
if (listeners_type === undefined) return;
|
|
|
|
for (var i = 0, l; (l = listeners_type[i]); i++)
|
|
if (l === listener) {
|
|
listeners_type.splice(i, 1);
|
|
break;
|
|
}
|
|
|
|
if (!listeners_type.length) delete this.listeners[type];
|
|
}
|
|
}
|