70 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
| (function (global, factory) {
 | |
|   typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
 | |
|   typeof define === 'function' && define.amd ? define(factory) :
 | |
|   (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.momentPlugin = factory());
 | |
| }(this, (function () { 'use strict';
 | |
| 
 | |
|   function getEventTarget(event) {
 | |
|       try {
 | |
|           if (typeof event.composedPath === "function") {
 | |
|               var path = event.composedPath();
 | |
|               return path[0];
 | |
|           }
 | |
|           return event.target;
 | |
|       }
 | |
|       catch (error) {
 | |
|           return event.target;
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   function momentPlugin(config) {
 | |
|       var moment = config.moment;
 | |
|       return function (fp) {
 | |
|           function captureIncrement(e) {
 | |
|               var event = e;
 | |
|               event.stopPropagation();
 | |
|               var date = moment(fp.selectedDates[0]);
 | |
|               var input = getEventTarget(event);
 | |
|               var unit = Array.from(input.classList)
 | |
|                   .filter(function (name) { return name.startsWith("flatpickr-"); })
 | |
|                   .map(function (name) { return name.substring(10); })[0];
 | |
|               var step = parseFloat(input.getAttribute("step"));
 | |
|               date.add(step * event.delta, unit);
 | |
|               fp.setDate(date.toDate());
 | |
|           }
 | |
|           return {
 | |
|               parseDate: function (datestr, format) {
 | |
|                   return moment(datestr, format, true).toDate();
 | |
|               },
 | |
|               formatDate: function (date, format) {
 | |
|                   // locale can also be used
 | |
|                   var momentDate = moment(date);
 | |
|                   if (typeof fp.config.locale === "string") {
 | |
|                       momentDate.locale(fp.config.locale);
 | |
|                   }
 | |
|                   return momentDate.format(format);
 | |
|               },
 | |
|               onReady: function () {
 | |
|                   [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
 | |
|                       return element &&
 | |
|                           element.addEventListener("increment", captureIncrement, {
 | |
|                               capture: true,
 | |
|                           });
 | |
|                   });
 | |
|               },
 | |
|               onDestroy: function () {
 | |
|                   [fp.hourElement, fp.minuteElement, fp.secondElement].forEach(function (element) {
 | |
|                       return element &&
 | |
|                           element.removeEventListener("increment", captureIncrement, {
 | |
|                               capture: true,
 | |
|                           });
 | |
|                   });
 | |
|               },
 | |
|           };
 | |
|       };
 | |
|   }
 | |
| 
 | |
|   return momentPlugin;
 | |
| 
 | |
| })));
 |