momentPlugin.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. (function (global, factory) {
  2. typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  3. typeof define === 'function' && define.amd ? define(factory) :
  4. (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.momentPlugin = factory());
  5. }(this, (function () { 'use strict';
  6. function getEventTarget(event) {
  7. try {
  8. if (typeof event.composedPath === "function") {
  9. var path = event.composedPath();
  10. return path[0];
  11. }
  12. return event.target;
  13. }
  14. catch (error) {
  15. return event.target;
  16. }
  17. }
  18. function momentPlugin(config) {
  19. var moment = config.moment;
  20. return function (fp) {
  21. function captureIncrement(e) {
  22. var event = e;
  23. event.stopPropagation();
  24. var date = moment(fp.selectedDates[0]);
  25. var input = getEventTarget(event);
  26. var unit = Array.from(input.classList)
  27. .filter(function (name) { return name.startsWith("flatpickr-"); })
  28. .map(function (name) { return name.substring(10); })[0];
  29. var step = parseFloat(input.getAttribute("step"));
  30. date.add(step * event.delta, unit);
  31. fp.setDate(date.toDate());
  32. }
  33. return {
  34. parseDate: function (datestr, format) {
  35. return moment(datestr, format, true).toDate();
  36. },
  37. formatDate: function (date, format) {
  38. // locale can also be used
  39. var momentDate = moment(date);
  40. if (typeof fp.config.locale === "string") {
  41. momentDate.locale(fp.config.locale);
  42. }
  43. return momentDate.format(format);
  44. },
  45. onReady: function () {
  46. [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
  47. return element &&
  48. element.addEventListener("increment", captureIncrement, {
  49. capture: true,
  50. });
  51. });
  52. },
  53. onDestroy: function () {
  54. [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
  55. return element &&
  56. element.removeEventListener("increment", captureIncrement, {
  57. capture: true,
  58. });
  59. });
  60. },
  61. };
  62. };
  63. }
  64. return momentPlugin;
  65. })));