uiUtil.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.PickerModeMap = void 0;
  7. exports.addGlobalMousedownEvent = addGlobalMousedownEvent;
  8. exports.createKeydownHandler = createKeydownHandler;
  9. exports.elementsContains = elementsContains;
  10. exports.getDefaultFormat = getDefaultFormat;
  11. exports.getInputSize = getInputSize;
  12. exports.getTargetFromEvent = getTargetFromEvent;
  13. exports.scrollTo = scrollTo;
  14. exports.waitElementReady = waitElementReady;
  15. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  16. var _isVisible = _interopRequireDefault(require("../../vc-util/Dom/isVisible"));
  17. var _KeyCode = _interopRequireDefault(require("../../_util/KeyCode"));
  18. var _raf = _interopRequireDefault(require("../../_util/raf"));
  19. var scrollIds = new Map();
  20. /** Trigger when element is visible in view */
  21. function waitElementReady(element, callback) {
  22. var id;
  23. function tryOrNextFrame() {
  24. if ((0, _isVisible.default)(element)) {
  25. callback();
  26. } else {
  27. id = (0, _raf.default)(function () {
  28. tryOrNextFrame();
  29. });
  30. }
  31. }
  32. tryOrNextFrame();
  33. return function () {
  34. _raf.default.cancel(id);
  35. };
  36. }
  37. /* eslint-disable no-param-reassign */
  38. function scrollTo(element, to, duration) {
  39. if (scrollIds.get(element)) {
  40. _raf.default.cancel(scrollIds.get(element));
  41. }
  42. // jump to target if duration zero
  43. if (duration <= 0) {
  44. scrollIds.set(element, (0, _raf.default)(function () {
  45. element.scrollTop = to;
  46. }));
  47. return;
  48. }
  49. var difference = to - element.scrollTop;
  50. var perTick = difference / duration * 10;
  51. scrollIds.set(element, (0, _raf.default)(function () {
  52. element.scrollTop += perTick;
  53. if (element.scrollTop !== to) {
  54. scrollTo(element, to, duration - 10);
  55. }
  56. }));
  57. }
  58. function createKeydownHandler(event, _ref) {
  59. var onLeftRight = _ref.onLeftRight,
  60. onCtrlLeftRight = _ref.onCtrlLeftRight,
  61. onUpDown = _ref.onUpDown,
  62. onPageUpDown = _ref.onPageUpDown,
  63. onEnter = _ref.onEnter;
  64. var which = event.which,
  65. ctrlKey = event.ctrlKey,
  66. metaKey = event.metaKey;
  67. switch (which) {
  68. case _KeyCode.default.LEFT:
  69. if (ctrlKey || metaKey) {
  70. if (onCtrlLeftRight) {
  71. onCtrlLeftRight(-1);
  72. return true;
  73. }
  74. } else if (onLeftRight) {
  75. onLeftRight(-1);
  76. return true;
  77. }
  78. /* istanbul ignore next */
  79. break;
  80. case _KeyCode.default.RIGHT:
  81. if (ctrlKey || metaKey) {
  82. if (onCtrlLeftRight) {
  83. onCtrlLeftRight(1);
  84. return true;
  85. }
  86. } else if (onLeftRight) {
  87. onLeftRight(1);
  88. return true;
  89. }
  90. /* istanbul ignore next */
  91. break;
  92. case _KeyCode.default.UP:
  93. if (onUpDown) {
  94. onUpDown(-1);
  95. return true;
  96. }
  97. /* istanbul ignore next */
  98. break;
  99. case _KeyCode.default.DOWN:
  100. if (onUpDown) {
  101. onUpDown(1);
  102. return true;
  103. }
  104. /* istanbul ignore next */
  105. break;
  106. case _KeyCode.default.PAGE_UP:
  107. if (onPageUpDown) {
  108. onPageUpDown(-1);
  109. return true;
  110. }
  111. /* istanbul ignore next */
  112. break;
  113. case _KeyCode.default.PAGE_DOWN:
  114. if (onPageUpDown) {
  115. onPageUpDown(1);
  116. return true;
  117. }
  118. /* istanbul ignore next */
  119. break;
  120. case _KeyCode.default.ENTER:
  121. if (onEnter) {
  122. onEnter();
  123. return true;
  124. }
  125. /* istanbul ignore next */
  126. break;
  127. }
  128. return false;
  129. }
  130. // ===================== Format =====================
  131. function getDefaultFormat(format, picker, showTime, use12Hours) {
  132. var mergedFormat = format;
  133. if (!mergedFormat) {
  134. switch (picker) {
  135. case 'time':
  136. mergedFormat = use12Hours ? 'hh:mm:ss a' : 'HH:mm:ss';
  137. break;
  138. case 'week':
  139. mergedFormat = 'gggg-wo';
  140. break;
  141. case 'month':
  142. mergedFormat = 'YYYY-MM';
  143. break;
  144. case 'quarter':
  145. mergedFormat = 'YYYY-[Q]Q';
  146. break;
  147. case 'year':
  148. mergedFormat = 'YYYY';
  149. break;
  150. default:
  151. mergedFormat = showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
  152. }
  153. }
  154. return mergedFormat;
  155. }
  156. function getInputSize(picker, format, generateConfig) {
  157. var defaultSize = picker === 'time' ? 8 : 10;
  158. var length = typeof format === 'function' ? format(generateConfig.getNow()).length : format.length;
  159. return Math.max(defaultSize, length) + 2;
  160. }
  161. var globalClickFunc = null;
  162. var clickCallbacks = new Set();
  163. function addGlobalMousedownEvent(callback) {
  164. if (!globalClickFunc && typeof window !== 'undefined' && window.addEventListener) {
  165. globalClickFunc = function globalClickFunc(e) {
  166. // Clone a new list to avoid repeat trigger events
  167. (0, _toConsumableArray2.default)(clickCallbacks).forEach(function (queueFunc) {
  168. queueFunc(e);
  169. });
  170. };
  171. window.addEventListener('mousedown', globalClickFunc);
  172. }
  173. clickCallbacks.add(callback);
  174. return function () {
  175. clickCallbacks.delete(callback);
  176. if (clickCallbacks.size === 0) {
  177. window.removeEventListener('mousedown', globalClickFunc);
  178. globalClickFunc = null;
  179. }
  180. };
  181. }
  182. function getTargetFromEvent(e) {
  183. var target = e.target;
  184. // get target if in shadow dom
  185. if (e.composed && target.shadowRoot) {
  186. var _e$composedPath;
  187. return ((_e$composedPath = e.composedPath) === null || _e$composedPath === void 0 ? void 0 : _e$composedPath.call(e)[0]) || target;
  188. }
  189. return target;
  190. }
  191. // ====================== Mode ======================
  192. var getYearNextMode = function getYearNextMode(next) {
  193. if (next === 'month' || next === 'date') {
  194. return 'year';
  195. }
  196. return next;
  197. };
  198. var getMonthNextMode = function getMonthNextMode(next) {
  199. if (next === 'date') {
  200. return 'month';
  201. }
  202. return next;
  203. };
  204. var getQuarterNextMode = function getQuarterNextMode(next) {
  205. if (next === 'month' || next === 'date') {
  206. return 'quarter';
  207. }
  208. return next;
  209. };
  210. var getWeekNextMode = function getWeekNextMode(next) {
  211. if (next === 'date') {
  212. return 'week';
  213. }
  214. return next;
  215. };
  216. var PickerModeMap = {
  217. year: getYearNextMode,
  218. month: getMonthNextMode,
  219. quarter: getQuarterNextMode,
  220. week: getWeekNextMode,
  221. time: null,
  222. date: null
  223. };
  224. exports.PickerModeMap = PickerModeMap;
  225. function elementsContains(elements, target) {
  226. if (process.env.NODE_ENV === 'test') {
  227. return false;
  228. }
  229. return elements.some(function (ele) {
  230. return ele && ele.contains(target);
  231. });
  232. }