UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

169 lines (164 loc) • 5.9 kB
/** * DevExtreme (cjs/__internal/ui/text_box/texteditor_button_collection/index.js) * Version: 25.2.5 * Build date: Fri Feb 20 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _renderer = _interopRequireDefault(require("../../../../core/renderer")); var _ui = _interopRequireDefault(require("../../../../ui/widget/ui.errors")); var _custom = _interopRequireDefault(require("../../../ui/text_box/texteditor_button_collection/custom")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } const TEXTEDITOR_BUTTONS_CONTAINER_CLASS = "dx-texteditor-buttons-container"; function checkButtonInfo(buttonInfo) { (() => { if (!buttonInfo || "object" !== typeof buttonInfo || Array.isArray(buttonInfo)) { throw _ui.default.Error("E1053") } })(); (() => { if (!("name" in buttonInfo)) { throw _ui.default.Error("E1054") } })(); (() => { const { name: name } = buttonInfo; if ("string" !== typeof name) { throw _ui.default.Error("E1055") } })(); (() => { const { location: location } = buttonInfo; if ("location" in buttonInfo && "after" !== location && "before" !== location) { buttonInfo.location = "after" } })() } function checkNamesUniqueness(existingNames, newName) { if (existingNames.includes(newName)) { throw _ui.default.Error("E1055", newName) } existingNames.push(newName) } function isPredefinedButtonName(name, predefinedButtonsInfo) { return !!predefinedButtonsInfo.find((info => info.name === name)) } class TextEditorButtonCollection { constructor(editor, defaultButtonsInfo) { this.buttons = []; this.defaultButtonsInfo = defaultButtonsInfo; this.editor = editor } _compileButtonInfo(buttons) { const names = []; return buttons.map((button => { if ("string" === typeof button) { const defaultButtonInfo = this.defaultButtonsInfo.find((_ref => { let { name: name } = _ref; return name === button })); if (!defaultButtonInfo) { throw _ui.default.Error("E1056", this.editor.NAME, button) } checkNamesUniqueness(names, button); return defaultButtonInfo } checkButtonInfo(button); const isDefaultButton = isPredefinedButtonName(button.name, this.defaultButtonsInfo); if (isDefaultButton) { const defaultButtonInfo = this.defaultButtonsInfo.find((_ref2 => { let { name: name } = _ref2; return name === button.name })); if (!defaultButtonInfo) { throw _ui.default.Error("E1056", this.editor.NAME, button) } checkNamesUniqueness(names, button); return defaultButtonInfo } const { name: name = "" } = button; checkNamesUniqueness(names, name); return Object.assign({}, button, { Ctor: _custom.default }) })) } _createButton(buttonsInfo) { const { Ctor: Ctor, options: options, name: name } = buttonsInfo; const button = new Ctor(name, this.editor, options ?? {}); this.buttons.push(button); return button } _renderButtons(buttons, $container, targetLocation) { let $buttonsContainer = null; const buttonsInfo = buttons ? this._compileButtonInfo(buttons) : this.defaultButtonsInfo; buttonsInfo.forEach((buttonInfo => { const { location: location = "after" } = buttonInfo; if (location === targetLocation) { this._createButton(buttonInfo).render((() => { $buttonsContainer = $buttonsContainer ?? (0, _renderer.default)("<div>").addClass("dx-texteditor-buttons-container"); if ("before" === targetLocation) { $container.prepend($buttonsContainer) } else { $container.append($buttonsContainer) } return $buttonsContainer })()) } })); return $buttonsContainer } clean() { this.buttons.forEach((button => button.dispose())); this.buttons = [] } getButton(buttonName) { const button = this.buttons.find((_ref3 => { let { name: name } = _ref3; return name === buttonName })); return null === button || void 0 === button ? void 0 : button.instance } renderAfterButtons(buttons, $container) { return this._renderButtons(buttons, $container, "after") } renderBeforeButtons(buttons, $container) { return this._renderButtons(buttons, $container, "before") } updateButtons(names) { this.buttons.forEach((button => { if (!names || names.includes(button.name)) { button.update() } })) } } exports.default = TextEditorButtonCollection;