devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
91 lines (90 loc) • 2.59 kB
JavaScript
/**
* DevExtreme (esm/__internal/ui/text_box/texteditor_button_collection/m_button.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import $ from "../../../../core/renderer";
export default class TextEditorButton {
constructor(name, editor, options) {
this.instance = null;
this.$container = null;
this.$placeMarker = null;
this.editor = editor;
this.name = name;
this.options = options || {}
}
_addPlaceMarker($container) {
this.$placeMarker = $("<div>").appendTo($container)
}
_addToContainer($element) {
const {
$placeMarker: $placeMarker,
$container: $container
} = this;
if ($placeMarker) {
$placeMarker.replaceWith($element)
} else {
$element.appendTo($container)
}
}
_attachEvents(instance, $element) {
throw "Not implemented"
}
_create() {
throw "Not implemented"
}
_isRendered() {
return !!this.instance
}
_isVisible() {
const {
editor: editor,
options: options
} = this;
return options.visible || !editor.option("readOnly")
}
_isDisabled() {
throw "Not implemented"
}
_shouldRender() {
return this._isVisible() && !this._isRendered()
}
dispose() {
const {
instance: instance,
$placeMarker: $placeMarker
} = this;
if (instance) {
if (instance.dispose) {
instance.dispose()
} else {
instance.remove()
}
this.instance = null
}
$placeMarker && $placeMarker.remove()
}
render() {
let $container = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.$container;
this.$container = $container;
if (this._isVisible()) {
const {
instance: instance,
$element: $element
} = this._create();
this.instance = instance;
this._attachEvents(instance, $element)
} else {
this._addPlaceMarker($container)
}
}
update() {
if (this._shouldRender()) {
this.render()
}
return !!this.instance
}
}