dialog.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /**
  2. * DevExtreme (ui/dialog.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. var _renderer = require("../core/renderer");
  11. var _renderer2 = _interopRequireDefault(_renderer);
  12. var _component = require("../core/component");
  13. var _component2 = _interopRequireDefault(_component);
  14. var _action = require("../core/action");
  15. var _action2 = _interopRequireDefault(_action);
  16. var _devices = require("../core/devices");
  17. var _devices2 = _interopRequireDefault(_devices);
  18. var _config = require("../core/config");
  19. var _config2 = _interopRequireDefault(_config);
  20. var _dom = require("../core/utils/dom");
  21. var _deferred = require("../core/utils/deferred");
  22. var _type = require("../core/utils/type");
  23. var _iterator = require("../core/utils/iterator");
  24. var _extend = require("../core/utils/extend");
  25. var _window = require("../core/utils/window");
  26. var _events_engine = require("../events/core/events_engine");
  27. var _view_port = require("../core/utils/view_port");
  28. var _message = require("../localization/message");
  29. var _message2 = _interopRequireDefault(_message);
  30. var _ui = require("./widget/ui.errors");
  31. var _ui2 = _interopRequireDefault(_ui);
  32. var _popup = require("./popup");
  33. var _popup2 = _interopRequireDefault(_popup);
  34. var _common = require("../core/utils/common");
  35. function _interopRequireDefault(obj) {
  36. return obj && obj.__esModule ? obj : {
  37. "default": obj
  38. }
  39. }
  40. var window = (0, _window.getWindow)();
  41. var DEFAULT_BUTTON = {
  42. text: "OK",
  43. onClick: function() {
  44. return true
  45. }
  46. };
  47. var DX_DIALOG_CLASSNAME = "dx-dialog";
  48. var DX_DIALOG_WRAPPER_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-wrapper");
  49. var DX_DIALOG_ROOT_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-root");
  50. var DX_DIALOG_CONTENT_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-content");
  51. var DX_DIALOG_MESSAGE_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-message");
  52. var DX_DIALOG_BUTTONS_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-buttons");
  53. var DX_DIALOG_BUTTON_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-button");
  54. var DX_BUTTON_CLASSNAME = "dx-button";
  55. var FakeDialogComponent = _component2.default.inherit({
  56. ctor: function(element, options) {
  57. this.callBase(options)
  58. },
  59. _defaultOptionsRules: function() {
  60. return this.callBase().concat([{
  61. device: {
  62. platform: "ios"
  63. },
  64. options: {
  65. width: 276
  66. }
  67. }, {
  68. device: {
  69. platform: "android"
  70. },
  71. options: {
  72. lWidth: "60%",
  73. pWidth: "80%"
  74. }
  75. }])
  76. }
  77. });
  78. exports.FakeDialogComponent = FakeDialogComponent;
  79. exports.title = "";
  80. exports.custom = function(options) {
  81. var deferred = new _deferred.Deferred;
  82. var defaultOptions = (new FakeDialogComponent).option();
  83. options = (0, _extend.extend)(defaultOptions, options);
  84. var $element = (0, _renderer2.default)("<div>").addClass(DX_DIALOG_CLASSNAME).appendTo((0, _view_port.value)());
  85. var isMessageDefined = "message" in options;
  86. var isMessageHtmlDefined = "messageHtml" in options;
  87. if (isMessageDefined) {
  88. _ui2.default.log("W1013")
  89. }
  90. var messageHtml = String(isMessageHtmlDefined ? options.messageHtml : options.message);
  91. var $message = (0, _renderer2.default)("<div>").addClass(DX_DIALOG_MESSAGE_CLASSNAME).html(messageHtml);
  92. var popupToolbarItems = [];
  93. var toolbarItemsOption = options.toolbarItems;
  94. if (toolbarItemsOption) {
  95. _ui2.default.log("W0001", "DevExpress.ui.dialog", "toolbarItems", "16.2", "Use the 'buttons' option instead")
  96. } else {
  97. toolbarItemsOption = options.buttons
  98. }(0, _iterator.each)(toolbarItemsOption || [DEFAULT_BUTTON], function() {
  99. var action = new _action2.default(this.onClick, {
  100. context: popupInstance
  101. });
  102. popupToolbarItems.push({
  103. toolbar: "bottom",
  104. location: _devices2.default.current().android ? "after" : "center",
  105. widget: "dxButton",
  106. options: (0, _extend.extend)({}, this, {
  107. onClick: function() {
  108. var result = action.execute.apply(action, arguments);
  109. hide(result)
  110. }
  111. })
  112. })
  113. });
  114. var popupInstance = new _popup2.default($element, (0, _extend.extend)({
  115. title: options.title || exports.title,
  116. showTitle: (0, _common.ensureDefined)(options.showTitle, true),
  117. dragEnabled: (0, _common.ensureDefined)(options.dragEnabled, true),
  118. height: "auto",
  119. width: function() {
  120. var isPortrait = (0, _renderer2.default)(window).height() > (0, _renderer2.default)(window).width();
  121. var key = (isPortrait ? "p" : "l") + "Width";
  122. var widthOption = Object.prototype.hasOwnProperty.call(options, key) ? options[key] : options.width;
  123. return (0, _type.isFunction)(widthOption) ? widthOption() : widthOption
  124. },
  125. showCloseButton: options.showCloseButton || false,
  126. ignoreChildEvents: false,
  127. onContentReady: function(args) {
  128. args.component.$content().addClass(DX_DIALOG_CONTENT_CLASSNAME).append($message)
  129. },
  130. onShowing: function(e) {
  131. e.component.bottomToolbar().addClass(DX_DIALOG_BUTTONS_CLASSNAME).find(".".concat(DX_BUTTON_CLASSNAME)).addClass(DX_DIALOG_BUTTON_CLASSNAME);
  132. (0, _dom.resetActiveElement)()
  133. },
  134. onShown: function(e) {
  135. var $firstButton = e.component.bottomToolbar().find(".".concat(DX_BUTTON_CLASSNAME)).first();
  136. (0, _events_engine.trigger)($firstButton, "focus")
  137. },
  138. onHiding: function() {
  139. deferred.reject()
  140. },
  141. toolbarItems: popupToolbarItems,
  142. animation: {
  143. show: {
  144. type: "pop",
  145. duration: 400
  146. },
  147. hide: {
  148. type: "pop",
  149. duration: 400,
  150. to: {
  151. opacity: 0,
  152. scale: 0
  153. },
  154. from: {
  155. opacity: 1,
  156. scale: 1
  157. }
  158. }
  159. },
  160. rtlEnabled: (0, _config2.default)().rtlEnabled,
  161. boundaryOffset: {
  162. h: 10,
  163. v: 0
  164. }
  165. }, options.popupOptions));
  166. popupInstance._wrapper().addClass(DX_DIALOG_WRAPPER_CLASSNAME);
  167. if (options.position) {
  168. popupInstance.option("position", options.position)
  169. }
  170. popupInstance._wrapper().addClass(DX_DIALOG_ROOT_CLASSNAME);
  171. function show() {
  172. popupInstance.show();
  173. return deferred.promise()
  174. }
  175. function hide(value) {
  176. deferred.resolve(value);
  177. popupInstance.hide().done(function() {
  178. popupInstance.$element().remove()
  179. })
  180. }
  181. return {
  182. show: show,
  183. hide: hide
  184. }
  185. };
  186. exports.alert = function(messageHtml, title, showTitle) {
  187. var options = (0, _type.isPlainObject)(messageHtml) ? messageHtml : {
  188. title: title,
  189. messageHtml: messageHtml,
  190. showTitle: showTitle,
  191. dragEnabled: showTitle
  192. };
  193. return exports.custom(options).show()
  194. };
  195. exports.confirm = function(messageHtml, title, showTitle) {
  196. var options = (0, _type.isPlainObject)(messageHtml) ? messageHtml : {
  197. title: title,
  198. messageHtml: messageHtml,
  199. showTitle: showTitle,
  200. buttons: [{
  201. text: _message2.default.format("Yes"),
  202. onClick: function() {
  203. return true
  204. }
  205. }, {
  206. text: _message2.default.format("No"),
  207. onClick: function() {
  208. return false
  209. }
  210. }],
  211. dragEnabled: showTitle
  212. };
  213. return exports.custom(options).show()
  214. };