|
@@ -1,6 +1,47 @@
|
|
|
-import { GlobalEventType } from '@medici/types';
|
|
|
+import { getGlobalObject } from '@medici/utils';
|
|
|
+import { Dict } from '@medici/types';
|
|
|
// export
|
|
|
+const global = getGlobalObject<Window>();
|
|
|
+
|
|
|
+// const eventSelect = "[class*='umami--']";
|
|
|
export class Eventer {
|
|
|
+ private _identifier: string;
|
|
|
+ private eventSelect: string;
|
|
|
+ private eventClassValidate: RegExp;
|
|
|
+ private listeners: Dict<any>;
|
|
|
constructor() {
|
|
|
+ this._identifier = 'mdc';
|
|
|
+ this.eventSelect = `[class*='${this._identifier}--']`;
|
|
|
+ this.eventClassValidate = /^mdc--([a-z]+)--([\w]+[\w-]*)$/;
|
|
|
+ }
|
|
|
+ updateIdentifier(identifier: string): void {
|
|
|
+ this._identifier = identifier;
|
|
|
+ this.eventClassValidate = new RegExp('^' + identifier + '--([a-z]+)--([w]+[w-]*)$');
|
|
|
+ }
|
|
|
+
|
|
|
+ addCssEvent(element: HTMLElement): void {
|
|
|
+ console.log('className', element.getAttribute('class'));
|
|
|
+ console.log('element', element);
|
|
|
+ (element.getAttribute('class') || '').split(' ').forEach((className) => {
|
|
|
+ console.log('validate', this.eventClassValidate.test(className));
|
|
|
+ if (!this.eventClassValidate.test(className)) return;
|
|
|
+
|
|
|
+ const [, type, value] = className.split('--');
|
|
|
+ const listener = this.listeners[className]
|
|
|
+ ? this.listeners[className]
|
|
|
+ : (this.listeners[className] = () => {
|
|
|
+ if (element.tagName === 'A') {
|
|
|
+ console.log('sendEvent', value, type);
|
|
|
+ // sendEvent(value, type);
|
|
|
+ } else {
|
|
|
+ console.log('trackEvent', value, type);
|
|
|
+ // trackEvent(value, type);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ console.log('listener', listener)
|
|
|
+
|
|
|
+ // element.addEventListener(type, listener, true);
|
|
|
+ });
|
|
|
}
|
|
|
}
|