ui.date_box.mask.parts.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /**
  2. * DevExtreme (ui/date_box/ui.date_box.mask.parts.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. Object.defineProperty(exports, "__esModule", {
  11. value: true
  12. });
  13. exports.renderDateParts = exports.getDatePartIndexByPosition = void 0;
  14. var _this = void 0;
  15. var _date = require("../../localization/ldml/date.parser");
  16. var _extend = require("../../core/utils/extend");
  17. var _math = require("../../core/utils/math");
  18. var _common = require("../../core/utils/common");
  19. var monthGetter = function(date) {
  20. return date.getMonth() + 1
  21. };
  22. var monthSetter = function(date, value) {
  23. var day = date.getDate();
  24. var monthLimits = getLimits("M", date);
  25. var newValue = (0, _math.fitIntoRange)(parseInt(value), monthLimits.min, monthLimits.max);
  26. date.setMonth(newValue - 1, 1);
  27. var _getLimits = getLimits("dM", date),
  28. min = _getLimits.min,
  29. max = _getLimits.max;
  30. var newDay = (0, _math.fitIntoRange)(day, min, max);
  31. date.setDate(newDay)
  32. };
  33. var PATTERN_GETTERS = {
  34. a: function(date) {
  35. return date.getHours() < 12 ? 0 : 1
  36. },
  37. E: "getDay",
  38. y: "getFullYear",
  39. M: monthGetter,
  40. L: monthGetter,
  41. d: "getDate",
  42. H: "getHours",
  43. h: "getHours",
  44. m: "getMinutes",
  45. s: "getSeconds",
  46. S: "getMilliseconds"
  47. };
  48. var PATTERN_SETTERS = (0, _extend.extend)({}, (0, _date.getPatternSetters)(), {
  49. a: function(date, value) {
  50. var hours = date.getHours();
  51. var current = hours >= 12;
  52. if (current === !!parseInt(value)) {
  53. return
  54. }
  55. date.setHours((hours + 12) % 24)
  56. },
  57. d: function(date, value) {
  58. var lastDayInMonth = getLimits("dM", date).max;
  59. if (value > lastDayInMonth) {
  60. date.setMonth(date.getMonth() + 1)
  61. }
  62. date.setDate(value)
  63. },
  64. h: function(date, value) {
  65. var isPM = date.getHours() >= 12;
  66. date.setHours(+value % 12 + (isPM ? 12 : 0))
  67. },
  68. M: monthSetter,
  69. L: monthSetter,
  70. E: function(date, value) {
  71. if (value < 0) {
  72. return
  73. }
  74. date.setDate(date.getDate() - date.getDay() + parseInt(value))
  75. },
  76. y: function(date, value) {
  77. var currentYear = date.getFullYear();
  78. var valueLength = String(value).length;
  79. var maxLimitLength = String(getLimits("y", date).max).length;
  80. var newValue = parseInt(String(currentYear).substr(0, maxLimitLength - valueLength) + value);
  81. date.setFullYear(newValue)
  82. }
  83. });
  84. var getPatternGetter = function(patternChar) {
  85. var unsupportedCharGetter = function() {
  86. return patternChar
  87. };
  88. return PATTERN_GETTERS[patternChar] || unsupportedCharGetter
  89. };
  90. var renderDateParts = function(text, regExpInfo) {
  91. var result = regExpInfo.regexp.exec(text);
  92. var start = 0;
  93. var end = 0;
  94. var sections = [];
  95. for (var i = 1; i < result.length; i++) {
  96. start = end;
  97. end = start + result[i].length;
  98. var pattern = regExpInfo.patterns[i - 1].replace(/^'|'$/g, "");
  99. var getter = getPatternGetter(pattern[0]);
  100. sections.push({
  101. index: i - 1,
  102. isStub: pattern === result[i],
  103. caret: {
  104. start: start,
  105. end: end
  106. },
  107. pattern: pattern,
  108. text: result[i],
  109. limits: getLimits.bind(_this, pattern[0]),
  110. setter: PATTERN_SETTERS[pattern[0]] || _common.noop,
  111. getter: getter
  112. })
  113. }
  114. return sections
  115. };
  116. var getLimits = function(pattern, date, forcedPattern) {
  117. var limits = {
  118. y: {
  119. min: 0,
  120. max: 9999
  121. },
  122. M: {
  123. min: 1,
  124. max: 12
  125. },
  126. L: {
  127. min: 1,
  128. max: 12
  129. },
  130. d: {
  131. min: 1,
  132. max: 31
  133. },
  134. dM: {
  135. min: 1,
  136. max: new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate()
  137. },
  138. E: {
  139. min: 0,
  140. max: 6
  141. },
  142. H: {
  143. min: 0,
  144. max: 23
  145. },
  146. h: {
  147. min: 0,
  148. max: 23
  149. },
  150. m: {
  151. min: 0,
  152. max: 59
  153. },
  154. s: {
  155. min: 0,
  156. max: 59
  157. },
  158. S: {
  159. min: 0,
  160. max: 999
  161. },
  162. a: {
  163. min: 0,
  164. max: 1
  165. }
  166. };
  167. return limits[forcedPattern || pattern] || limits.getAmPm
  168. };
  169. var getDatePartIndexByPosition = function(dateParts, position) {
  170. for (var i = 0; i < dateParts.length; i++) {
  171. var caretInGroup = dateParts[i].caret.end >= position;
  172. if (!dateParts[i].isStub && caretInGroup) {
  173. return i
  174. }
  175. }
  176. return null
  177. };
  178. exports.getDatePartIndexByPosition = getDatePartIndexByPosition;
  179. exports.renderDateParts = renderDateParts;