/*! * Jodit Editor (https://xdsoft.net/jodit/) * License GNU General Public License version 2 or later; * Copyright 2013-2019 Valeriy Chupurnov https://xdsoft.net */ import { CallbackFunction, EventHandlerBlock, IDictionary } from '../../types'; export const defaultNameSpace = 'JoditEventDefaultNamespace'; export class EventHandlersStore { private __store: IDictionary> = {}; get(event: string, namespace: string): EventHandlerBlock[] | void { if (this.__store[namespace] !== undefined) { return this.__store[namespace][event]; } } indexOf( event: string, namespace: string, originalCallback: CallbackFunction ): false | number { const blocks: EventHandlerBlock[] | void = this.get(event, namespace); if (blocks) { for (let i = 0; i < blocks.length; i += 1) { if (blocks[i].originalCallback === originalCallback) { return i; } } } return false; } namespaces(withoutDefault: boolean = false): string[] { const nss = Object.keys(this.__store); return withoutDefault ? nss.filter(ns => ns !== defaultNameSpace) : nss; } events(namespace: string): string[] { return this.__store[namespace] ? Object.keys(this.__store[namespace]) : []; } set( event: string, namespace: string, data: EventHandlerBlock, onTop: boolean = false ) { if (this.__store[namespace] === undefined) { this.__store[namespace] = {}; } if (this.__store[namespace][event] === undefined) { this.__store[namespace][event] = []; } if (!onTop) { this.__store[namespace][event].push(data); } else { this.__store[namespace][event].unshift(data); } } clear() { delete this.__store; this.__store = {}; } }