devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
138 lines (136 loc) • 5.51 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/html_editor/modules/m_popup.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/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _events_engine = _interopRequireDefault(require("../../../../common/core/events/core/events_engine"));
var _index = require("../../../../common/core/events/utils/index");
var _renderer = _interopRequireDefault(require("../../../../core/renderer"));
var _extend = require("../../../../core/utils/extend");
var _size = require("../../../../core/utils/size");
var _list_light = _interopRequireDefault(require("../../../../ui/list_light"));
var _popup = _interopRequireDefault(require("../../../../ui/popup"));
var _m_window = _interopRequireDefault(require("../../../core/utils/m_window"));
var _devextremeQuill = _interopRequireDefault(require("devextreme-quill"));
var _m_base = _interopRequireDefault(require("./m_base"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const MODULE_NAMESPACE = "dxHtmlEditorPopupModule";
let ListPopupModule = _m_base.default;
if (_devextremeQuill.default) {
const SUGGESTION_LIST_CLASS = "dx-suggestion-list";
const SUGGESTION_LIST_WRAPPER_CLASS = "dx-suggestion-list-wrapper";
const DROPDOWN_EDITOR_OVERLAY_CLASS = "dx-dropdowneditor-overlay";
const MIN_HEIGHT = 100;
ListPopupModule = class extends _m_base.default {
constructor(quill, options) {
super(quill, options);
this.options = (0, _extend.extend)({}, this._getDefaultOptions(), options);
this._popup = this.renderPopup();
this._popup.$wrapper().addClass(`${SUGGESTION_LIST_WRAPPER_CLASS} ${DROPDOWN_EDITOR_OVERLAY_CLASS}`);
this._renderPreventFocusOut()
}
_getDefaultOptions() {
return {
dataSource: null
}
}
renderList($container, options) {
const $list = (0, _renderer.default)("<div>").addClass(SUGGESTION_LIST_CLASS).appendTo($container);
this._list = this.options.editorInstance._createComponent($list, _list_light.default, options)
}
renderPopup() {
const {
editorInstance: editorInstance
} = this.options;
const $container = (0, _renderer.default)("<div>").appendTo(editorInstance.$element());
const popupConfig = this._getPopupConfig();
return editorInstance._createComponent($container, _popup.default, popupConfig)
}
_getPopupConfig() {
return {
contentTemplate: contentElem => {
const listConfig = this._getListConfig(this.options);
this.renderList((0, _renderer.default)(contentElem), listConfig)
},
deferRendering: false,
onShown: () => {
this._list.focus()
},
onHidden: () => {
this._list.unselectAll();
this._list.option("focusedElement", null)
},
showTitle: false,
width: "auto",
height: "auto",
shading: false,
hideOnParentScroll: true,
hideOnOutsideClick: true,
animation: {
show: {
type: "fade",
duration: 0,
from: 0,
to: 1
},
hide: {
type: "fade",
duration: 400,
from: 1,
to: 0
}
},
fullScreen: false,
maxHeight: this.maxHeight
}
}
_getListConfig(options) {
return {
dataSource: options.dataSource,
onSelectionChanged: this.selectionChangedHandler.bind(this),
selectionMode: "single",
pageLoadMode: "scrollBottom"
}
}
get maxHeight() {
const window = _m_window.default.getWindow();
const windowHeight = window && (0, _size.getHeight)(window) || 0;
return Math.max(MIN_HEIGHT, .5 * windowHeight)
}
selectionChangedHandler(e) {
if (this._popup.option("visible")) {
this._popup.hide();
this.insertEmbedContent(e)
}
}
_renderPreventFocusOut() {
const eventName = (0, _index.addNamespace)("mousedown", MODULE_NAMESPACE);
_events_engine.default.on(this._popup.$wrapper(), eventName, (e => {
e.preventDefault()
}))
}
insertEmbedContent(selectionChangedEvent) {}
showPopup() {
this._popup && this._popup.show()
}
savePosition(position) {
this.caretPosition = position
}
getPosition() {
return this.caretPosition
}
}
}
var _default = exports.default = ListPopupModule;