ui.drawer.rendering.strategy.overlap.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. /**
  2. * DevExtreme (ui/drawer/ui.drawer.rendering.strategy.overlap.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. function _typeof(obj) {
  11. "@babel/helpers - typeof";
  12. return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
  13. return typeof obj
  14. } : function(obj) {
  15. return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
  16. }, _typeof(obj)
  17. }
  18. var _uiDrawerRendering = require("./ui.drawer.rendering.strategy");
  19. var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
  20. var _renderer = require("../../core/renderer");
  21. var _renderer2 = _interopRequireDefault(_renderer);
  22. var _translator = require("../../animation/translator");
  23. var _translator2 = _interopRequireDefault(_translator);
  24. var _overlay = require("../overlay");
  25. var _overlay2 = _interopRequireDefault(_overlay);
  26. var _type = require("../../core/utils/type");
  27. var _type2 = _interopRequireDefault(_type);
  28. var _extend = require("../../core/utils/extend");
  29. var _inflector = require("../../core/utils/inflector");
  30. function _interopRequireDefault(obj) {
  31. return obj && obj.__esModule ? obj : {
  32. "default": obj
  33. }
  34. }
  35. function _classCallCheck(instance, Constructor) {
  36. if (!(instance instanceof Constructor)) {
  37. throw new TypeError("Cannot call a class as a function")
  38. }
  39. }
  40. function _defineProperties(target, props) {
  41. for (var i = 0; i < props.length; i++) {
  42. var descriptor = props[i];
  43. descriptor.enumerable = descriptor.enumerable || false;
  44. descriptor.configurable = true;
  45. if ("value" in descriptor) {
  46. descriptor.writable = true
  47. }
  48. Object.defineProperty(target, descriptor.key, descriptor)
  49. }
  50. }
  51. function _createClass(Constructor, protoProps, staticProps) {
  52. if (protoProps) {
  53. _defineProperties(Constructor.prototype, protoProps)
  54. }
  55. if (staticProps) {
  56. _defineProperties(Constructor, staticProps)
  57. }
  58. Object.defineProperty(Constructor, "prototype", {
  59. writable: false
  60. });
  61. return Constructor
  62. }
  63. function _get() {
  64. if ("undefined" !== typeof Reflect && Reflect.get) {
  65. _get = Reflect.get.bind()
  66. } else {
  67. _get = function(target, property, receiver) {
  68. var base = _superPropBase(target, property);
  69. if (!base) {
  70. return
  71. }
  72. var desc = Object.getOwnPropertyDescriptor(base, property);
  73. if (desc.get) {
  74. return desc.get.call(arguments.length < 3 ? target : receiver)
  75. }
  76. return desc.value
  77. }
  78. }
  79. return _get.apply(this, arguments)
  80. }
  81. function _superPropBase(object, property) {
  82. while (!Object.prototype.hasOwnProperty.call(object, property)) {
  83. object = _getPrototypeOf(object);
  84. if (null === object) {
  85. break
  86. }
  87. }
  88. return object
  89. }
  90. function _inherits(subClass, superClass) {
  91. if ("function" !== typeof superClass && null !== superClass) {
  92. throw new TypeError("Super expression must either be null or a function")
  93. }
  94. subClass.prototype = Object.create(superClass && superClass.prototype, {
  95. constructor: {
  96. value: subClass,
  97. writable: true,
  98. configurable: true
  99. }
  100. });
  101. Object.defineProperty(subClass, "prototype", {
  102. writable: false
  103. });
  104. if (superClass) {
  105. _setPrototypeOf(subClass, superClass)
  106. }
  107. }
  108. function _setPrototypeOf(o, p) {
  109. _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(o, p) {
  110. o.__proto__ = p;
  111. return o
  112. };
  113. return _setPrototypeOf(o, p)
  114. }
  115. function _createSuper(Derived) {
  116. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  117. return function() {
  118. var result, Super = _getPrototypeOf(Derived);
  119. if (hasNativeReflectConstruct) {
  120. var NewTarget = _getPrototypeOf(this).constructor;
  121. result = Reflect.construct(Super, arguments, NewTarget)
  122. } else {
  123. result = Super.apply(this, arguments)
  124. }
  125. return _possibleConstructorReturn(this, result)
  126. }
  127. }
  128. function _possibleConstructorReturn(self, call) {
  129. if (call && ("object" === _typeof(call) || "function" === typeof call)) {
  130. return call
  131. } else {
  132. if (void 0 !== call) {
  133. throw new TypeError("Derived constructors may only return object or undefined")
  134. }
  135. }
  136. return _assertThisInitialized(self)
  137. }
  138. function _assertThisInitialized(self) {
  139. if (void 0 === self) {
  140. throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
  141. }
  142. return self
  143. }
  144. function _isNativeReflectConstruct() {
  145. if ("undefined" === typeof Reflect || !Reflect.construct) {
  146. return false
  147. }
  148. if (Reflect.construct.sham) {
  149. return false
  150. }
  151. if ("function" === typeof Proxy) {
  152. return true
  153. }
  154. try {
  155. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
  156. return true
  157. } catch (e) {
  158. return false
  159. }
  160. }
  161. function _getPrototypeOf(o) {
  162. _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(o) {
  163. return o.__proto__ || Object.getPrototypeOf(o)
  164. };
  165. return _getPrototypeOf(o)
  166. }
  167. var OverlapStrategy = function(_DrawerStrategy) {
  168. _inherits(OverlapStrategy, _DrawerStrategy);
  169. var _super = _createSuper(OverlapStrategy);
  170. function OverlapStrategy() {
  171. _classCallCheck(this, OverlapStrategy);
  172. return _super.apply(this, arguments)
  173. }
  174. _createClass(OverlapStrategy, [{
  175. key: "renderPanel",
  176. value: function(template, whenPanelRendered) {
  177. var _this = this;
  178. delete this._initialPosition;
  179. var position = this.getOverlayPosition();
  180. var drawer = this.getDrawerInstance();
  181. var _drawer$option = drawer.option(),
  182. opened = _drawer$option.opened,
  183. minSize = _drawer$option.minSize;
  184. drawer._overlay = drawer._createComponent(drawer.content(), _overlay2.default, {
  185. shading: false,
  186. container: drawer.getOverlayTarget(),
  187. position: position,
  188. width: opened ? "auto" : minSize || 0,
  189. height: "100%",
  190. templatesRenderAsynchronously: drawer.option("templatesRenderAsynchronously"),
  191. animation: {
  192. show: {
  193. duration: 0
  194. }
  195. },
  196. onPositioned: function(e) {
  197. this._fixOverlayPosition(e.component.$content())
  198. }.bind(this),
  199. contentTemplate: drawer.option("template"),
  200. onContentReady: function(args) {
  201. whenPanelRendered.resolve();
  202. _this._processOverlayZIndex(args.component.content())
  203. },
  204. visible: true,
  205. propagateOutsideClick: true
  206. })
  207. }
  208. }, {
  209. key: "_fixOverlayPosition",
  210. value: function($overlayContent) {
  211. var drawer = this.getDrawerInstance();
  212. if (_type2.default.isDefined(this._initialPosition)) {
  213. _translator2.default.move($overlayContent, {
  214. left: this._initialPosition.left,
  215. top: this._initialPosition.top
  216. })
  217. }
  218. if ("right" === drawer.getDrawerPosition()) {
  219. $overlayContent.css("left", "auto");
  220. if (drawer.option("rtlEnabled")) {
  221. _translator2.default.move($overlayContent, {
  222. left: 0
  223. })
  224. }
  225. }
  226. }
  227. }, {
  228. key: "getOverlayPosition",
  229. value: function() {
  230. var drawer = this.getDrawerInstance();
  231. var panelPosition = drawer.getDrawerPosition();
  232. var result = {};
  233. if ("left" === panelPosition) {
  234. result = {
  235. my: "top left",
  236. at: "top left"
  237. }
  238. }
  239. if ("right" === panelPosition) {
  240. var my = drawer.option("rtlEnabled") ? "top left" : "top right";
  241. result = {
  242. my: my,
  243. at: "top right"
  244. }
  245. }
  246. if ("top" === panelPosition || "bottom" === panelPosition) {
  247. result = {
  248. my: panelPosition,
  249. at: panelPosition
  250. }
  251. }
  252. result.of = drawer.getOverlayTarget();
  253. return result
  254. }
  255. }, {
  256. key: "setPanelSize",
  257. value: function(keepMaxSize) {
  258. var drawer = this.getDrawerInstance();
  259. var overlay = drawer.getOverlay();
  260. if (drawer.isHorizontalDirection()) {
  261. overlay.option("height", "100%");
  262. overlay.option("width", keepMaxSize ? drawer.getRealPanelWidth() : this._getPanelSize(drawer.option("opened")))
  263. } else {
  264. overlay.option("width", overlay.option("container").width());
  265. overlay.option("height", keepMaxSize ? drawer.getRealPanelHeight() : this._getPanelSize(drawer.option("opened")))
  266. }
  267. }
  268. }, {
  269. key: "setupContent",
  270. value: function($content, position) {
  271. var drawer = this.getDrawerInstance();
  272. $content.css("padding" + (0, _inflector.camelize)(position, true), drawer.option("minSize"));
  273. $content.css("transform", "inherit")
  274. }
  275. }, {
  276. key: "slidePositionRendering",
  277. value: function(config, offset, animate) {
  278. var drawer = this.getDrawerInstance();
  279. this._initialPosition = drawer.getOverlay().$content().position();
  280. var position = drawer.getDrawerPosition();
  281. this.setupContent(config.$content, position, config.drawer);
  282. if (animate) {
  283. var animationConfig = (0, _extend.extend)(config.defaultAnimationConfig, {
  284. $element: config.$panel,
  285. position: config.panelOffset,
  286. duration: drawer.option("animationDuration"),
  287. direction: position
  288. });
  289. _uiDrawerRendering.animation.moveTo(animationConfig)
  290. } else {
  291. if (drawer.isHorizontalDirection()) {
  292. _translator2.default.move(config.$panel, {
  293. left: config.panelOffset
  294. })
  295. } else {
  296. _translator2.default.move(config.$panel, {
  297. top: config.panelOffset
  298. })
  299. }
  300. }
  301. }
  302. }, {
  303. key: "expandPositionRendering",
  304. value: function(config, offset, animate) {
  305. var drawer = this.getDrawerInstance();
  306. this._initialPosition = drawer.getOverlay().$content().position();
  307. var position = drawer.getDrawerPosition();
  308. this.setupContent(config.$content, position);
  309. _translator2.default.move(config.$panelOverlayContent, {
  310. left: 0
  311. });
  312. var animationConfig = (0, _extend.extend)(config.defaultAnimationConfig, {
  313. $element: config.$panelOverlayContent,
  314. size: config.size,
  315. duration: drawer.option("animationDuration"),
  316. direction: position,
  317. marginTop: config.marginTop
  318. });
  319. if (animate) {
  320. _uiDrawerRendering.animation.size(animationConfig)
  321. } else {
  322. if (drawer.isHorizontalDirection()) {
  323. (0, _renderer2.default)(config.$panelOverlayContent).css("width", config.size)
  324. } else {
  325. (0, _renderer2.default)(config.$panelOverlayContent).css("height", config.size);
  326. if ("bottom" === position) {
  327. (0, _renderer2.default)(config.$panelOverlayContent).css("marginTop", config.marginTop)
  328. }
  329. }
  330. }
  331. }
  332. }, {
  333. key: "getPositionRenderingConfig",
  334. value: function(offset) {
  335. var drawer = this.getDrawerInstance();
  336. var config = _get(_getPrototypeOf(OverlapStrategy.prototype), "getPositionRenderingConfig", this).call(this, offset);
  337. return (0, _extend.extend)(config, {
  338. panelOffset: this._getPanelOffset(offset) * this.getDrawerInstance()._getPositionCorrection(),
  339. $panelOverlayContent: drawer.getOverlay().$content(),
  340. marginTop: drawer.getRealPanelHeight() - config.size
  341. })
  342. }
  343. }, {
  344. key: "getPanelContent",
  345. value: function() {
  346. return (0, _renderer2.default)(this.getDrawerInstance().getOverlay().content())
  347. }
  348. }, {
  349. key: "_processOverlayZIndex",
  350. value: function($element) {
  351. var styles = (0, _renderer2.default)($element).get(0).style;
  352. var zIndex = styles.zIndex || 1;
  353. this.getDrawerInstance().setZIndex(zIndex)
  354. }
  355. }, {
  356. key: "needOrderContent",
  357. value: function(position) {
  358. return "right" === position || "bottom" === position
  359. }
  360. }]);
  361. return OverlapStrategy
  362. }(_uiDrawerRendering2.default);
  363. module.exports = OverlapStrategy;