/** * DevExtreme (ui/slide_out_view.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 eventsEngine = require("../events/core/events_engine"); var noop = require("../core/utils/common").noop; var fx = require("../animation/fx"); var clickEvent = require("../events/click"); var translator = require("../animation/translator"); var getPublicElement = require("../core/utils/dom").getPublicElement; var hideTopOverlayCallback = require("../mobile/hide_top_overlay").hideCallback; var registerComponent = require("../core/component_registrator"); var extend = require("../core/utils/extend").extend; var AsyncTemplateMixin = require("./shared/async_template_mixin"); var Widget = require("./widget/ui.widget"); var Swipeable = require("../events/gesture/swipeable"); var EmptyTemplate = require("./widget/empty_template"); var Deferred = require("../core/utils/deferred").Deferred; var windowUtils = require("../core/utils/window"); var SLIDEOUTVIEW_CLASS = "dx-slideoutview"; var SLIDEOUTVIEW_WRAPPER_CLASS = "dx-slideoutview-wrapper"; var SLIDEOUTVIEW_MENU_CONTENT_CLASS = "dx-slideoutview-menu-content"; var SLIDEOUTVIEW_CONTENT_CLASS = "dx-slideoutview-content"; var SLIDEOUTVIEW_SHIELD_CLASS = "dx-slideoutview-shield"; var INVISIBLE_STATE_CLASS = "dx-state-invisible"; var ANONYMOUS_TEMPLATE_NAME = "content"; var ANIMATION_DURATION = 400; var animation = { moveTo: function($element, position, completeAction) { fx.animate($element, { type: "slide", to: { left: position }, duration: ANIMATION_DURATION, complete: completeAction }) }, complete: function($element) { fx.stop($element, true) } }; var SlideOutView = Widget.inherit({ _getDefaultOptions: function() { return extend(this.callBase(), { menuPosition: "normal", menuVisible: false, swipeEnabled: true, menuTemplate: "menu", contentTemplate: "content", contentOffset: 45 }) }, _defaultOptionsRules: function() { return this.callBase().concat([{ device: { android: true }, options: { contentOffset: 54 } }, { device: function(_device) { return "generic" === _device.platform && "desktop" !== _device.deviceType }, options: { contentOffset: 56 } }, { device: { win: true, phone: false }, options: { contentOffset: 76 } }]) }, _getAnonymousTemplateName: function() { return ANONYMOUS_TEMPLATE_NAME }, _init: function() { this.callBase(); this.$element().addClass(SLIDEOUTVIEW_CLASS); this._whenAnimationComplete = void 0; this._whenMenuRendered = void 0; this._initHideTopOverlayHandler() }, _initHideTopOverlayHandler: function() { this._hideMenuHandler = this.hideMenu.bind(this) }, _initTemplates: function() { this.callBase(); this._defaultTemplates.menu = new EmptyTemplate(this); this._defaultTemplates.content = new EmptyTemplate(this) }, _initMarkup: function() { var _this = this; this.callBase(); this._renderMarkup(); this._whenMenuRendered = new Deferred; var menuTemplate = this._getTemplate(this.option("menuTemplate")); menuTemplate && menuTemplate.render({ container: this.menuContent(), onRendered: function() { _this._whenMenuRendered.resolve() } }); var contentTemplateOption = this.option("contentTemplate"); var contentTemplate = this._getTemplate(contentTemplateOption); var transclude = this._getAnonymousTemplateName() === contentTemplateOption; contentTemplate && contentTemplate.render({ container: this.content(), noModel: true, transclude: transclude }); this._renderShield(); this._toggleMenuPositionClass() }, _render: function() { var _this2 = this; this.callBase(); this._whenMenuRendered.always(function() { _this2._initSwipeHandlers(); _this2._dimensionChanged() }) }, _renderMarkup: function() { var $wrapper = $("