diff --git a/src/block_manager/view/BlockView.ts b/src/block_manager/view/BlockView.ts
index 433ce8529..85da29f6d 100644
--- a/src/block_manager/view/BlockView.ts
+++ b/src/block_manager/view/BlockView.ts
@@ -1,7 +1,8 @@
import { isFunction } from 'underscore';
import { View } from '../../common';
import EditorModel from '../../editor/model/Editor';
-import { on, off, hasDnd } from '../../utils/mixins';
+import { on, off } from '../../utils/dom';
+import { hasDnd } from '../../utils/mixins';
import { BlockManagerConfig } from '../config/config';
import Block from '../model/Block';
diff --git a/src/canvas/view/CanvasView.ts b/src/canvas/view/CanvasView.ts
index a927718d2..d3dac77e3 100644
--- a/src/canvas/view/CanvasView.ts
+++ b/src/canvas/view/CanvasView.ts
@@ -4,8 +4,8 @@ import { ModuleView } from '../../abstract';
import { BoxRect, Coordinates, ElementRect } from '../../common';
import Component from '../../dom_components/model/Component';
import ComponentView from '../../dom_components/view/ComponentView';
-import { createEl, getDocumentScroll, isTextNode, getElRect } from '../../utils/dom';
-import { getComponentView, getElement, getKeyChar, getUiClass, off, on } from '../../utils/mixins';
+import { createEl, getDocumentScroll, getElRect, getKeyChar, isTextNode, off, on } from '../../utils/dom';
+import { getComponentView, getElement, getUiClass } from '../../utils/mixins';
import Canvas from '../model/Canvas';
import Frame from '../model/Frame';
import FrameView from './FrameView';
diff --git a/src/canvas/view/FrameView.ts b/src/canvas/view/FrameView.ts
index d7ed82ef0..1262af87c 100644
--- a/src/canvas/view/FrameView.ts
+++ b/src/canvas/view/FrameView.ts
@@ -1,13 +1,22 @@
-import { bindAll, isString, debounce, isUndefined } from 'underscore';
-import { appendVNodes, append, createEl, createCustomEvent, motionsEv } from '../../utils/dom';
-import { on, off, setViewEl, hasDnd, getPointerEvent } from '../../utils/mixins';
+import { bindAll, debounce, isString, isUndefined } from 'underscore';
import { ModuleView } from '../../abstract';
+import { BoxRect } from '../../common';
import CssRulesView from '../../css_composer/view/CssRulesView';
import Droppable from '../../utils/Droppable';
-import Frame from '../model/Frame';
+import {
+ append,
+ appendVNodes,
+ createCustomEvent,
+ createEl,
+ getPointerEvent,
+ motionsEv,
+ off,
+ on,
+} from '../../utils/dom';
+import { hasDnd, setViewEl } from '../../utils/mixins';
import Canvas from '../model/Canvas';
+import Frame from '../model/Frame';
import FrameWrapView from './FrameWrapView';
-import { BoxRect } from '../../common';
export default class FrameView extends ModuleView {
/** @ts-ignore */
diff --git a/src/commands/view/CanvasMove.ts b/src/commands/view/CanvasMove.ts
index ee0c1d2cb..5c5f0d701 100644
--- a/src/commands/view/CanvasMove.ts
+++ b/src/commands/view/CanvasMove.ts
@@ -1,6 +1,6 @@
import { bindAll } from 'underscore';
-import { on, off, getKeyChar } from '../../utils/mixins';
import Dragger from '../../utils/Dragger';
+import { getKeyChar, off, on } from '../../utils/dom';
import { CommandObject } from './CommandAbstract';
export default {
diff --git a/src/commands/view/MoveComponent.ts b/src/commands/view/MoveComponent.ts
index 77cf59208..2accf7812 100644
--- a/src/commands/view/MoveComponent.ts
+++ b/src/commands/view/MoveComponent.ts
@@ -1,10 +1,10 @@
-import { extend, bindAll } from 'underscore';
+import { bindAll, extend } from 'underscore';
import { $ } from '../../common';
-import { on, off } from '../../utils/mixins';
+import Component from '../../dom_components/model/Component';
+import { off, on } from '../../utils/dom';
+import { CommandObject } from './CommandAbstract';
import SelectComponent from './SelectComponent';
import SelectPosition from './SelectPosition';
-import { CommandObject } from './CommandAbstract';
-import Component from '../../dom_components/model/Component';
export default extend({}, SelectPosition, SelectComponent, {
init(o: any) {
diff --git a/src/commands/view/SelectComponent.ts b/src/commands/view/SelectComponent.ts
index e1a05d48c..eb0c6a36a 100644
--- a/src/commands/view/SelectComponent.ts
+++ b/src/commands/view/SelectComponent.ts
@@ -3,8 +3,8 @@ import { $ } from '../../common';
import Component from '../../dom_components/model/Component';
import Toolbar from '../../dom_components/model/Toolbar';
import ToolbarView from '../../dom_components/view/ToolbarView';
-import { isDoc, isTaggableNode, isVisible } from '../../utils/dom';
-import { getComponentView, getUnitFromValue, getViewEl, hasWin, off, on } from '../../utils/mixins';
+import { isDoc, isTaggableNode, isVisible, off, on } from '../../utils/dom';
+import { getComponentView, getUnitFromValue, getViewEl, hasWin } from '../../utils/mixins';
import { CommandObject } from './CommandAbstract';
let showOffsets: boolean;
diff --git a/src/dom_components/view/ComponentTextView.ts b/src/dom_components/view/ComponentTextView.ts
index 1c68a1a68..9a871daf9 100644
--- a/src/dom_components/view/ComponentTextView.ts
+++ b/src/dom_components/view/ComponentTextView.ts
@@ -2,10 +2,11 @@ import { bindAll } from 'underscore';
import { ObjectAny } from '../../common';
import RichTextEditorModule from '../../rich_text_editor';
import RichTextEditor from '../../rich_text_editor/model/RichTextEditor';
-import { getModel, off, on } from '../../utils/mixins';
+import { off, on } from '../../utils/dom';
+import { getModel } from '../../utils/mixins';
import Component from '../model/Component';
-import { getComponentIds } from '../model/Components';
import ComponentText from '../model/ComponentText';
+import { getComponentIds } from '../model/Components';
import { ComponentDefinition } from '../model/types';
import ComponentView from './ComponentView';
diff --git a/src/domain_abstract/ui/InputNumber.ts b/src/domain_abstract/ui/InputNumber.ts
index 141ad96db..47937b342 100644
--- a/src/domain_abstract/ui/InputNumber.ts
+++ b/src/domain_abstract/ui/InputNumber.ts
@@ -1,5 +1,5 @@
-import { bindAll, isUndefined, indexOf } from 'underscore';
-import { on, off } from '../../utils/mixins';
+import { bindAll, indexOf, isUndefined } from 'underscore';
+import { off, on } from '../../utils/dom';
import Input from './Input';
export default class InputNumber extends Input {
diff --git a/src/navigator/view/ItemView.ts b/src/navigator/view/ItemView.ts
index 0e78e9a89..a56bc4a23 100644
--- a/src/navigator/view/ItemView.ts
+++ b/src/navigator/view/ItemView.ts
@@ -1,11 +1,12 @@
-import { isString, bindAll } from 'underscore';
+import { bindAll, isString } from 'underscore';
import { View, ViewOptions } from '../../common';
-import { getModel, isEscKey, isEnterKey } from '../../utils/mixins';
-import ComponentView from '../../dom_components/view/ComponentView';
import Component, { eventDrag } from '../../dom_components/model/Component';
-import ItemsView from './ItemsView';
+import ComponentView from '../../dom_components/view/ComponentView';
import EditorModel from '../../editor/model/Editor';
+import { isEnterKey, isEscKey } from '../../utils/dom';
+import { getModel } from '../../utils/mixins';
import LayerManager from '../index';
+import ItemsView from './ItemsView';
export type ItemViewProps = ViewOptions & {
ItemView: ItemView;
diff --git a/src/rich_text_editor/index.ts b/src/rich_text_editor/index.ts
index 682062aae..75617ab30 100644
--- a/src/rich_text_editor/index.ts
+++ b/src/rich_text_editor/index.ts
@@ -42,8 +42,8 @@ import { Module } from '../abstract';
import { Debounced, Model } from '../common';
import ComponentView from '../dom_components/view/ComponentView';
import EditorModel from '../editor/model/Editor';
-import { createEl, cx, removeEl } from '../utils/dom';
-import { hasWin, isDef, on } from '../utils/mixins';
+import { createEl, cx, on, removeEl } from '../utils/dom';
+import { hasWin, isDef } from '../utils/mixins';
import defaults, { CustomRTE, RichTextEditorConfig } from './config/config';
import RichTextEditor, { RichTextEditorAction } from './model/RichTextEditor';
diff --git a/src/rich_text_editor/model/RichTextEditor.ts b/src/rich_text_editor/model/RichTextEditor.ts
index 79d2cfd4c..7a45f6fa6 100644
--- a/src/rich_text_editor/model/RichTextEditor.ts
+++ b/src/rich_text_editor/model/RichTextEditor.ts
@@ -4,7 +4,8 @@
import { isString } from 'underscore';
import RichTextEditorModule from '..';
import EditorModel from '../../editor/model/Editor';
-import { on, off, getPointerEvent, getModel } from '../../utils/mixins';
+import { getPointerEvent, off, on } from '../../utils/dom';
+import { getModel } from '../../utils/mixins';
export interface RichTextEditorAction {
name: string;
diff --git a/src/utils/Dragger.ts b/src/utils/Dragger.ts
index 8190eee83..a10f48a9a 100644
--- a/src/utils/Dragger.ts
+++ b/src/utils/Dragger.ts
@@ -1,6 +1,6 @@
-import { bindAll, isFunction, result, isUndefined } from 'underscore';
+import { bindAll, isFunction, isUndefined, result } from 'underscore';
import { Position } from '../common';
-import { on, off, isEscKey, getPointerEvent } from './mixins';
+import { getPointerEvent, isEscKey, off, on } from './dom';
type DraggerPosition = Position & { end?: boolean };
diff --git a/src/utils/Droppable.ts b/src/utils/Droppable.ts
index 72ca3ff3c..04c37eb9b 100644
--- a/src/utils/Droppable.ts
+++ b/src/utils/Droppable.ts
@@ -2,8 +2,7 @@ import { bindAll, indexOf } from 'underscore';
import CanvasModule from '../canvas';
import { ObjectStrings } from '../common';
import EditorModel from '../editor/model/Editor';
-import { getDocumentScroll } from './dom';
-import { off, on } from './mixins';
+import { getDocumentScroll, off, on } from './dom';
// TODO move in sorter
type SorterOptions = {
diff --git a/src/utils/Resizer.ts b/src/utils/Resizer.ts
index aec29f8e5..cc3ca5682 100644
--- a/src/utils/Resizer.ts
+++ b/src/utils/Resizer.ts
@@ -1,7 +1,8 @@
-import { bindAll, isFunction, each } from 'underscore';
-import { Position } from '../common';
-import { on, off, normalizeFloat } from './mixins';
+import { bindAll, each, isFunction } from 'underscore';
import { ElementPosOpts } from '../canvas/view/CanvasView';
+import { Position } from '../common';
+import { off, on } from './dom';
+import { normalizeFloat } from './mixins';
type RectDim = {
t: number;
@@ -457,7 +458,7 @@ export default class Resizer {
const resizer = this;
const config = this.opts || {};
const mouseFetch = this.mousePosFetcher;
- const attrName = 'data-' + config.prefix + 'handler';
+ const attrName = 'data-' + config.prefix + 'handler';
const rect = this.getElementPos(el!, { avoidFrameZoom: true, avoidFrameOffset: true });
const parentRect = this.getElementPos(parentEl!);
const target = e.target as HTMLElement;
diff --git a/src/utils/Sorter.ts b/src/utils/Sorter.ts
index b87bfc37b..08a18b8ce 100644
--- a/src/utils/Sorter.ts
+++ b/src/utils/Sorter.ts
@@ -3,8 +3,8 @@ import { BlockProperties } from '../block_manager/model/Block';
import CanvasModule from '../canvas';
import { $, Collection, Model, View } from '../common';
import EditorModel from '../editor/model/Editor';
-import { isTextNode } from './dom';
-import { getElement, getModel, getPointerEvent, matches, off, on } from './mixins';
+import { getPointerEvent, isTextNode, off, on } from './dom';
+import { getElement, getModel, matches } from './mixins';
const noop = () => {};
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index 15f867102..15f3ac6e0 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -1,4 +1,4 @@
-import { each, isUndefined, isString } from 'underscore';
+import { each, isArray, isString, isUndefined } from 'underscore';
import { ObjectAny } from '../common';
type vNode = {
@@ -190,3 +190,41 @@ export const getDocumentScroll = (el?: HTMLElement) => {
y: (win.pageYOffset || docEl.scrollTop || 0) - (docEl.clientTop || 0),
};
};
+
+export const getKeyCode = (ev: KeyboardEvent) => ev.which || ev.keyCode;
+
+export const getKeyChar = (ev: KeyboardEvent) => String.fromCharCode(getKeyCode(ev));
+
+export const getPointerEvent = (ev: any): PointerEvent => (ev.touches && ev.touches[0] ? ev.touches[0] : ev);
+
+export const isEscKey = (ev: KeyboardEvent) => getKeyCode(ev) === 27;
+
+export const isEnterKey = (ev: KeyboardEvent) => getKeyCode(ev) === 13;
+
+export const on = (
+ el: EventTarget | EventTarget[],
+ ev: string,
+ fn: (ev: E) => void,
+ opts?: AddEventListenerOptions
+) => {
+ const evs = ev.split(/\s+/);
+ const els = isArray(el) ? el : [el];
+
+ evs.forEach(ev => {
+ els.forEach(el => el?.addEventListener(ev, fn as EventListener, opts));
+ });
+};
+
+export const off = (
+ el: EventTarget | EventTarget[],
+ ev: string,
+ fn: (ev: E) => void,
+ opts?: AddEventListenerOptions
+) => {
+ const evs = ev.split(/\s+/);
+ const els = isArray(el) ? el : [el];
+
+ evs.forEach(ev => {
+ els.forEach(el => el?.removeEventListener(ev, fn as EventListener, opts));
+ });
+};
diff --git a/src/utils/mixins.ts b/src/utils/mixins.ts
index 1cab13bee..10d840b5a 100644
--- a/src/utils/mixins.ts
+++ b/src/utils/mixins.ts
@@ -89,34 +89,6 @@ const shallowDiff = (objOrig: Record, objNew: Record)
return result;
};
-const on = (
- el: HTMLElement | Window | Document | (Window | HTMLElement | Document)[],
- ev: string,
- fn: (ev: Event) => void,
- opts?: AddEventListenerOptions
-) => {
- const evs = ev.split(/\s+/);
- el = el instanceof Array ? el : [el];
-
- for (let i = 0; i < evs.length; ++i) {
- el.forEach(elem => elem && elem.addEventListener(evs[i], fn, opts));
- }
-};
-
-const off = (
- el: HTMLElement | Window | Document | (Window | HTMLElement | Document)[],
- ev: string,
- fn: (ev: Event) => void,
- opts?: AddEventListenerOptions
-) => {
- const evs = ev.split(/\s+/);
- el = el instanceof Array ? el : [el];
-
- for (let i = 0; i < evs.length; ++i) {
- el.forEach(elem => elem && elem.removeEventListener(evs[i], fn, opts));
- }
-};
-
const getUnitFromValue = (value: any) => {
return value.replace(parseFloat(value), '');
};
@@ -215,24 +187,6 @@ const getModel = (el: any, $?: any) => {
return model;
};
-/**
- * Get cross-device pointer event
- * @param {Event} ev
- * @return {PointerEvent}
- */
-const getPointerEvent = (ev: Event) =>
- // @ts-ignore
- ev.touches && ev.touches[0] ? ev.touches[0] : ev;
-
-/**
- * Get cross-browser keycode
- * @param {Event} ev
- * @return {Number}
- */
-const getKeyCode = (ev: KeyboardEvent) => ev.which || ev.keyCode;
-const getKeyChar = (ev: KeyboardEvent) => String.fromCharCode(getKeyCode(ev));
-const isEscKey = (ev: KeyboardEvent) => getKeyCode(ev) === 27;
-const isEnterKey = (ev: KeyboardEvent) => getKeyCode(ev) === 13;
const isObject = (val: any): val is Object => val !== null && !Array.isArray(val) && typeof val === 'object';
const isEmptyObj = (val: Record) => Object.keys(val).length <= 0;
@@ -273,21 +227,14 @@ export const buildBase64UrlFromSvg = (svg: string) => {
};
export {
- on,
- off,
hasDnd,
upFirst,
matches,
getModel,
camelCase,
- getKeyCode,
- getKeyChar,
- isEscKey,
- isEnterKey,
getElement,
shallowDiff,
normalizeFloat,
- getPointerEvent,
getUnitFromValue,
capitalize,
getViewEl,