devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
202 lines (200 loc) • 8.49 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/drawer/m_drawer.rendering.strategy.overlap.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/
*/
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _translator = require("../../../common/core/animation/translator");
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _common = require("../../../core/utils/common");
var _inflector = require("../../../core/utils/inflector");
var _size = require("../../../core/utils/size");
var _m_overlay = _interopRequireDefault(require("../../ui/overlay/m_overlay"));
var _m_drawer = require("./m_drawer.animation");
var _m_drawerRendering = _interopRequireDefault(require("./m_drawer.rendering.strategy"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
class OverlapStrategy extends _m_drawerRendering.default {
renderPanelContent(whenPanelContentRendered) {
delete this._initialPosition;
const drawer = this.getDrawerInstance();
const {
opened: opened,
minSize: minSize
} = drawer.option();
drawer._overlay = drawer._createComponent(drawer.content(), _m_overlay.default, {
shading: false,
container: drawer.content(),
visualContainer: drawer.getOverlayTarget(),
position: this._getOverlayPosition(),
width: opened ? "auto" : minSize || 0,
height: "100%",
templatesRenderAsynchronously: drawer.option("templatesRenderAsynchronously"),
animation: {
show: {
duration: 0
}
},
onPositioned: function(e) {
this._fixOverlayPosition(e.component.$content())
}.bind(this),
contentTemplate: drawer.option("template"),
onContentReady: args => {
whenPanelContentRendered.resolve();
this._processOverlayZIndex(args.component.content())
},
visible: true,
propagateOutsideClick: true
})
}
_fixOverlayPosition($overlayContent) {
const position = (0, _common.ensureDefined)(this._initialPosition, {
left: 0,
top: 0
});
(0, _translator.move)($overlayContent, position);
if ("right" === this.getDrawerInstance().calcTargetPosition()) {
$overlayContent.css("left", "auto")
}
if ("bottom" === this.getDrawerInstance().calcTargetPosition()) {
$overlayContent.css("top", "auto");
$overlayContent.css("bottom", "0px")
}
}
_getOverlayPosition() {
const drawer = this.getDrawerInstance();
const panelPosition = drawer.calcTargetPosition();
let result = {};
switch (panelPosition) {
case "left":
result = {
my: "top left",
at: "top left"
};
break;
case "right":
result = {
my: drawer.option("rtlEnabled") ? "top left" : "top right",
at: "top right"
};
break;
case "top":
case "bottom":
result = {
my: panelPosition,
at: panelPosition
}
}
result.of = drawer.getOverlayTarget();
return result
}
refreshPanelElementSize(calcFromRealPanelSize) {
const drawer = this.getDrawerInstance();
const overlay = drawer.getOverlay();
if (drawer.isHorizontalDirection()) {
overlay.option("height", "100%");
overlay.option("width", calcFromRealPanelSize ? drawer.getRealPanelWidth() : this._getPanelSize(drawer.option("opened")))
} else {
overlay.option("width", (0, _size.getWidth)(drawer.getOverlayTarget()));
overlay.option("height", calcFromRealPanelSize ? drawer.getRealPanelHeight() : this._getPanelSize(drawer.option("opened")))
}
}
onPanelContentRendered() {
this._updateViewContentStyles()
}
_updateViewContentStyles() {
const drawer = this.getDrawerInstance();
(0, _renderer.default)(drawer.viewContent()).css(`padding${(0,_inflector.camelize)(drawer.calcTargetPosition(),true)}`, drawer.option("minSize"));
(0, _renderer.default)(drawer.viewContent()).css("transform", "inherit")
}
_internalRenderPosition(changePositionUsingFxAnimation, whenAnimationCompleted) {
const drawer = this.getDrawerInstance();
const $panel = (0, _renderer.default)(drawer.content());
const $panelOverlayContent = drawer.getOverlay().$content();
const revealMode = drawer.option("revealMode");
const targetPanelPosition = drawer.calcTargetPosition();
const panelSize = this._getPanelSize(drawer.option("opened"));
const panelOffset = this._getPanelOffset(drawer.option("opened")) * drawer._getPositionCorrection();
const marginTop = drawer.getRealPanelHeight() - panelSize;
this._updateViewContentStyles();
if (changePositionUsingFxAnimation) {
if ("slide" === revealMode) {
this._initialPosition = drawer.isHorizontalDirection() ? {
left: panelOffset
} : {
top: panelOffset
};
_m_drawer.animation.moveTo({
complete: () => {
whenAnimationCompleted.resolve()
},
duration: drawer.option("animationDuration"),
direction: targetPanelPosition,
$element: $panel,
position: panelOffset
})
} else if ("expand" === revealMode) {
this._initialPosition = drawer.isHorizontalDirection() ? {
left: 0
} : {
top: 0
};
(0, _translator.move)($panelOverlayContent, this._initialPosition);
_m_drawer.animation.size({
complete: () => {
whenAnimationCompleted.resolve()
},
duration: drawer.option("animationDuration"),
direction: targetPanelPosition,
$element: $panelOverlayContent,
size: panelSize,
marginTop: marginTop
})
}
} else if ("slide" === revealMode) {
this._initialPosition = drawer.isHorizontalDirection() ? {
left: panelOffset
} : {
top: panelOffset
};
(0, _translator.move)($panel, this._initialPosition)
} else if ("expand" === revealMode) {
this._initialPosition = drawer.isHorizontalDirection() ? {
left: 0
} : {
top: 0
};
(0, _translator.move)($panelOverlayContent, this._initialPosition);
if (drawer.isHorizontalDirection()) {
(0, _renderer.default)($panelOverlayContent).css("width", panelSize)
} else {
(0, _renderer.default)($panelOverlayContent).css("height", panelSize);
if ("bottom" === targetPanelPosition) {
(0, _renderer.default)($panelOverlayContent).css("marginTop", marginTop)
}
}
}
}
getPanelContent() {
return (0, _renderer.default)(this.getDrawerInstance().getOverlay().content())
}
_processOverlayZIndex($element) {
const styles = (0, _renderer.default)($element).get(0).style;
const zIndex = styles.zIndex || 1;
this.getDrawerInstance().setZIndex(zIndex)
}
isViewContentFirst(position) {
return "right" === position || "bottom" === position
}
}
var _default = exports.default = OverlapStrategy;