UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

250 lines (247 loc) • 9.55 kB
/** * DevExtreme (cjs/__internal/ui/dialog.js) * Version: 25.1.5 * Build date: Wed Sep 03 2025 * * Copyright (c) 2012 - 2025 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.custom = exports.confirm = exports.alert = void 0; var _events_engine = _interopRequireDefault(require("../../common/core/events/core/events_engine")); var _message = _interopRequireDefault(require("../../common/core/localization/message")); var _action = _interopRequireDefault(require("../../core/action")); var _config = _interopRequireDefault(require("../../core/config")); var _devices = _interopRequireDefault(require("../../core/devices")); var _guid = _interopRequireDefault(require("../../core/guid")); var _renderer = _interopRequireDefault(require("../../core/renderer")); var _common = require("../../core/utils/common"); var _deferred = require("../../core/utils/deferred"); var _size = require("../../core/utils/size"); var _type = require("../../core/utils/type"); var _view_port = require("../../core/utils/view_port"); var _window = require("../../core/utils/window"); var _themes = require("../../ui/themes"); var _ui = _interopRequireDefault(require("../../ui/widget/ui.errors")); var _m_dom = _interopRequireDefault(require("../core/utils/m_dom")); var _m_popup = _interopRequireDefault(require("../ui/popup/m_popup")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function(n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) { ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]) } } return n }, _extends.apply(null, arguments) } const window = (0, _window.getWindow)(); const DX_DIALOG_CLASSNAME = "dx-dialog"; const DX_DIALOG_WRAPPER_CLASSNAME = "dx-dialog-wrapper"; const DX_DIALOG_ROOT_CLASSNAME = "dx-dialog-root"; const DX_DIALOG_CONTENT_CLASSNAME = "dx-dialog-content"; const DX_DIALOG_MESSAGE_CLASSNAME = "dx-dialog-message"; const DX_DIALOG_BUTTONS_CLASSNAME = "dx-dialog-buttons"; const DX_DIALOG_BUTTON_CLASSNAME = "dx-dialog-button"; const DX_BUTTON_CLASSNAME = "dx-button"; const DEFAULT_HORIZONTAL_OFFSET = 10; const DEFAULT_VERTICAL_OFFSET = 0; const DEFAULT_BOUNDARY_OFFSET = { h: 10, v: 0 }; const DEFAULT_BUTTON_OPTIONS = { text: _message.default.format("OK"), onClick: () => true }; const getApplyButtonConfig = () => { if ((0, _themes.isFluent)((0, _themes.current)())) { return { stylingMode: "contained", type: "default" } } return {} }; const getCancelButtonConfig = () => { if ((0, _themes.isFluent)((0, _themes.current)())) { return { stylingMode: "outlined", type: "default" } } return {} }; const custom = params => { const { buttons: buttons, dragEnabled: dragEnabled, message: message, messageHtml: messageHtml, popupOptions: popupOptions, showCloseButton: showCloseButton, showTitle: showTitle, title: title = "", width: width, position: position } = params ?? {}; const isMessageDefined = (0, _type.isDefined)(message); if (isMessageDefined) { _ui.default.log("W1013") } const isMessageHtmlDefined = (0, _type.isDefined)(messageHtml); const messageMarkup = String(isMessageHtmlDefined ? messageHtml : message); const messageId = title ? null : (new _guid.default).toString(); const deferred = (0, _deferred.Deferred)(); const $element = (0, _renderer.default)("<div>").addClass("dx-dialog").appendTo((0, _view_port.value)()); const $message = (0, _renderer.default)("<div>").addClass("dx-dialog-message").html(messageMarkup).attr("id", messageId); let popupInstance = null; const hide = value => { var _popupInstance3; deferred.resolve(value); null === (_popupInstance3 = popupInstance) || void 0 === _popupInstance3 || _popupInstance3.hide() }; const buttonOptions = buttons ?? [DEFAULT_BUTTON_OPTIONS]; const toolbarItems = buttonOptions.map((configuration => { const { onClick: onClick } = configuration; const action = new _action.default(onClick, { context: popupInstance }); const buttonItem = { toolbar: "bottom", location: _devices.default.current().android ? "after" : "center", widget: "dxButton", options: _extends({}, configuration, { onClick: e => { const result = action.execute(e); hide(result) } }) }; return buttonItem })); const popupPosition = position ?? { boundaryOffset: _extends({}, DEFAULT_BOUNDARY_OFFSET) }; const configuration = { animation: { show: { type: "pop", duration: 400 }, hide: { type: "pop", duration: 400, to: { opacity: 0, scale: 0 }, from: { opacity: 1, scale: 1 } } }, container: $element, dragAndResizeArea: window, dragEnabled: (0, _common.ensureDefined)(dragEnabled, true), height: "auto", ignoreChildEvents: false, onContentReady: e => { const component = e.component; component.$content().addClass("dx-dialog-content").append($message); if (messageId) { component.$overlayContent().attr("aria-labelledby", messageId) } }, onHidden: e => { (0, _renderer.default)(e.element).remove() }, onHiding: () => { deferred.reject() }, onShowing: e => { const component = e.component; const bottomToolbar = component.bottomToolbar(); null === bottomToolbar || void 0 === bottomToolbar || bottomToolbar.addClass("dx-dialog-buttons").find(".dx-button").addClass("dx-dialog-button"); _m_dom.default.resetActiveElement() }, onShown: e => { const component = e.component; const bottomToolbar = component.bottomToolbar(); const $firstButton = null === bottomToolbar || void 0 === bottomToolbar ? void 0 : bottomToolbar.find(".dx-button").first(); _events_engine.default.trigger($firstButton, "focus") }, position: popupPosition, rtlEnabled: (0, _config.default)().rtlEnabled, showCloseButton: showCloseButton ?? false, showTitle: (0, _common.ensureDefined)(showTitle, true), title: title, toolbarItems: toolbarItems, visualContainer: window, width: width }; const options = _extends({}, configuration, popupOptions); popupInstance = new _m_popup.default($element, options); popupInstance.$wrapper().addClass("dx-dialog-wrapper").addClass("dx-dialog-root"); const dialog = { show: () => { var _popupInstance2; if ("phone" === _devices.default.real().deviceType) { var _popupInstance; const isPortrait = (0, _size.getHeight)(window) > (0, _size.getWidth)(window); const width = isPortrait ? "90%" : "60%"; null === (_popupInstance = popupInstance) || void 0 === _popupInstance || _popupInstance.option({ width: width }) } null === (_popupInstance2 = popupInstance) || void 0 === _popupInstance2 || _popupInstance2.show(); return deferred.promise() }, hide: hide }; return dialog }; exports.custom = custom; const isCustomDialogOptions = options => (0, _type.isPlainObject)(options); const alert = (messageHtml, title, showTitle) => { const titleValue = title ?? ""; const options = isCustomDialogOptions(messageHtml) ? messageHtml : { title: titleValue, messageHtml: messageHtml, showTitle: showTitle, buttons: [_extends({}, DEFAULT_BUTTON_OPTIONS, getApplyButtonConfig())], dragEnabled: showTitle }; return custom(options).show() }; exports.alert = alert; const confirm = (messageHtml, title, showTitle) => { const titleValue = title ?? ""; const options = isCustomDialogOptions(messageHtml) ? messageHtml : { title: titleValue, messageHtml: messageHtml, showTitle: showTitle, buttons: [_extends({ text: _message.default.format("Yes"), onClick: () => true }, getApplyButtonConfig()), _extends({ text: _message.default.format("No"), onClick: () => false }, getCancelButtonConfig())], dragEnabled: showTitle }; return custom(options).show() }; exports.confirm = confirm;