/** * DevExtreme (ui/popup.js) * Version: 19.1.16 * Build date: Tue Oct 18 2022 * * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var $ = require("../core/renderer"); var window = require("../core/utils/window").getWindow(); var translator = require("../animation/translator"); var camelize = require("../core/utils/inflector").camelize; var noop = require("../core/utils/common").noop; var getPublicElement = require("../core/utils/dom").getPublicElement; var each = require("../core/utils/iterator").each; var isDefined = require("../core/utils/type").isDefined; var inArray = require("../core/utils/array").inArray; var extend = require("../core/utils/extend").extend; var browser = require("../core/utils/browser"); var compareVersions = require("../core/utils/version").compare; var messageLocalization = require("../localization/message"); var devices = require("../core/devices"); var registerComponent = require("../core/component_registrator"); var Button = require("./button"); var themes = require("./themes"); var Overlay = require("./overlay"); var EmptyTemplate = require("./widget/empty_template"); var domUtils = require("../core/utils/dom"); var sizeUtils = require("../core/utils/size"); var windowUtils = require("../core/utils/window"); require("./toolbar/ui.toolbar.base"); var POPUP_CLASS = "dx-popup"; var POPUP_WRAPPER_CLASS = "dx-popup-wrapper"; var POPUP_FULL_SCREEN_CLASS = "dx-popup-fullscreen"; var POPUP_FULL_SCREEN_WIDTH_CLASS = "dx-popup-fullscreen-width"; var POPUP_NORMAL_CLASS = "dx-popup-normal"; var POPUP_CONTENT_CLASS = "dx-popup-content"; var POPUP_DRAGGABLE_CLASS = "dx-popup-draggable"; var POPUP_TITLE_CLASS = "dx-popup-title"; var POPUP_TITLE_CLOSEBUTTON_CLASS = "dx-closebutton"; var POPUP_BOTTOM_CLASS = "dx-popup-bottom"; var TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper"; var POPUP_CONTENT_FLEX_HEIGHT_CLASS = "dx-popup-flex-height"; var POPUP_CONTENT_INHERIT_HEIGHT_CLASS = "dx-popup-inherit-height"; var ALLOWED_TOOLBAR_ITEM_ALIASES = ["cancel", "clear", "done"]; var BUTTON_DEFAULT_TYPE = "default"; var BUTTON_NORMAL_TYPE = "normal"; var BUTTON_TEXT_MODE = "text"; var BUTTON_CONTAINED_MODE = "contained"; var IS_IE11 = browser.msie && 11 === parseInt(browser.version); var IS_OLD_SAFARI = browser.safari && compareVersions(browser.version, [11]) < 0; var HEIGHT_STRATEGIES = { "static": "", inherit: POPUP_CONTENT_INHERIT_HEIGHT_CLASS, flex: POPUP_CONTENT_FLEX_HEIGHT_CLASS }; var getButtonPlace = function(name) { var device = devices.current(); var platform = device.platform; var toolbar = "bottom"; var location = "before"; if ("ios" === platform) { switch (name) { case "cancel": toolbar = "top"; break; case "clear": toolbar = "top"; location = "after"; break; case "done": location = "after" } } else { if ("win" === platform) { location = "after" } else { if ("android" === platform && device.version && parseInt(device.version[0]) > 4) { switch (name) { case "cancel": location = "after"; break; case "done": location = "after" } } else { if ("android" === platform) { location = "center" } } } } return { toolbar: toolbar, location: location } }; var Popup = Overlay.inherit({ _getDefaultOptions: function() { return extend(this.callBase(), { fullScreen: false, title: "", showTitle: true, titleTemplate: "title", onTitleRendered: null, dragEnabled: false, toolbarItems: [], showCloseButton: false, bottomTemplate: "bottom", useDefaultToolbarButtons: false, useFlatToolbarButtons: false, autoResizeEnabled: true }) }, _defaultOptionsRules: function() { var themeName = themes.current(); return this.callBase().concat([{ device: { platform: "ios" }, options: { animation: this._iosAnimation } }, { device: { platform: "android" }, options: { animation: this._androidAnimation } }, { device: { platform: "generic" }, options: { showCloseButton: true } }, { device: function(_device) { return "generic" === devices.real().platform && "generic" === _device.platform }, options: { dragEnabled: true } }, { device: function() { return "desktop" === devices.real().deviceType && !devices.isSimulator() }, options: { focusStateEnabled: true } }, { device: function() { return themes.isMaterial(themeName) }, options: { useDefaultToolbarButtons: true, useFlatToolbarButtons: true } }]) }, _iosAnimation: { show: { type: "slide", duration: 400, from: { position: { my: "top", at: "bottom" } }, to: { position: { my: "center", at: "center" } } }, hide: { type: "slide", duration: 400, from: { opacity: 1, position: { my: "center", at: "center" } }, to: { opacity: 1, position: { my: "top", at: "bottom" } } } }, _androidAnimation: function() { var fullScreenConfig = { show: { type: "slide", duration: 300, from: { top: "30%", opacity: 0 }, to: { top: 0, opacity: 1 } }, hide: { type: "slide", duration: 300, from: { top: 0, opacity: 1 }, to: { top: "30%", opacity: 0 } } }; var defaultConfig = { show: { type: "fade", duration: 400, from: 0, to: 1 }, hide: { type: "fade", duration: 400, from: 1, to: 0 } }; return this.option("fullScreen") ? fullScreenConfig : defaultConfig }, _init: function() { this.callBase(); this.$element().addClass(POPUP_CLASS); this._wrapper().addClass(POPUP_WRAPPER_CLASS); this._$popupContent = this._$content.wrapInner($("