UNPKG

devexpress-richedit

Version:

DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.

43 lines (42 loc) 1.7 kB
import { DomEventHandlersHolder } from '@devexpress/utils/lib/class/event-handlers-holder'; import { ListUtils } from '@devexpress/utils/lib/utils/list'; export class RulerViewElementScrollManager { constructor() { this.controls = []; this.evtHandlersHolder = new DomEventHandlersHolder(); } dispose() { this.evtHandlersHolder.removeAllListeners(); } addListener(owner, viewElement) { let listenerObj = ListUtils.elementBy(this.controls, control => control.view == viewElement); if (!listenerObj) { listenerObj = new ListenerScrollStruct(viewElement); this.evtHandlersHolder.addListener(listenerObj.view, "scroll", (_evt) => this.onScroll(this.controls.length - 1)); this.controls.push(listenerObj); } listenerObj.listeners.push(owner); } removeListener(owner, viewElement) { const indOfControl = ListUtils.indexBy(this.controls, control => control.view == viewElement); if (indOfControl >= 0) { const control = this.controls[indOfControl]; const indOfListner = control.listeners.indexOf(owner); if (indOfListner >= 0) control.listeners.splice(indOfListner, 1); if (control.listeners.length == 0) this.controls.splice(indOfControl, 1); } if (this.controls.length == 0) this.dispose(); } onScroll(index) { this.controls[index].listeners.forEach(listener => listener.onScroll()); } } class ListenerScrollStruct { constructor(view) { this.listeners = []; this.view = view; } }