100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.8 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.weekSelect = 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 weekSelectPlugin() {
 | 
						|
      return function (fp) {
 | 
						|
          function onDayHover(event) {
 | 
						|
              var day = getEventTarget(event);
 | 
						|
              if (!day.classList.contains("flatpickr-day"))
 | 
						|
                  return;
 | 
						|
              var days = fp.days.childNodes;
 | 
						|
              var dayIndex = day.$i;
 | 
						|
              var dayIndSeven = dayIndex / 7;
 | 
						|
              var weekStartDay = days[7 * Math.floor(dayIndSeven)]
 | 
						|
                  .dateObj;
 | 
						|
              var weekEndDay = days[7 * Math.ceil(dayIndSeven + 0.01) - 1].dateObj;
 | 
						|
              for (var i = days.length; i--;) {
 | 
						|
                  var day_1 = days[i];
 | 
						|
                  var date = day_1.dateObj;
 | 
						|
                  if (date > weekEndDay || date < weekStartDay)
 | 
						|
                      day_1.classList.remove("inRange");
 | 
						|
                  else
 | 
						|
                      day_1.classList.add("inRange");
 | 
						|
              }
 | 
						|
          }
 | 
						|
          function highlightWeek() {
 | 
						|
              var selDate = fp.latestSelectedDateObj;
 | 
						|
              if (selDate !== undefined &&
 | 
						|
                  selDate.getMonth() === fp.currentMonth &&
 | 
						|
                  selDate.getFullYear() === fp.currentYear) {
 | 
						|
                  fp.weekStartDay = fp.days.childNodes[7 * Math.floor(fp.selectedDateElem.$i / 7)].dateObj;
 | 
						|
                  fp.weekEndDay = fp.days.childNodes[7 * Math.ceil(fp.selectedDateElem.$i / 7 + 0.01) - 1].dateObj;
 | 
						|
              }
 | 
						|
              var days = fp.days.childNodes;
 | 
						|
              for (var i = days.length; i--;) {
 | 
						|
                  var date = days[i].dateObj;
 | 
						|
                  if (date >= fp.weekStartDay && date <= fp.weekEndDay)
 | 
						|
                      days[i].classList.add("week", "selected");
 | 
						|
              }
 | 
						|
          }
 | 
						|
          function clearHover() {
 | 
						|
              var days = fp.days.childNodes;
 | 
						|
              for (var i = days.length; i--;)
 | 
						|
                  days[i].classList.remove("inRange");
 | 
						|
          }
 | 
						|
          function onReady() {
 | 
						|
              if (fp.daysContainer !== undefined)
 | 
						|
                  fp.daysContainer.addEventListener("mouseover", onDayHover);
 | 
						|
          }
 | 
						|
          function onDestroy() {
 | 
						|
              if (fp.daysContainer !== undefined)
 | 
						|
                  fp.daysContainer.removeEventListener("mouseover", onDayHover);
 | 
						|
          }
 | 
						|
          return {
 | 
						|
              onValueUpdate: highlightWeek,
 | 
						|
              onMonthChange: highlightWeek,
 | 
						|
              onYearChange: highlightWeek,
 | 
						|
              onOpen: highlightWeek,
 | 
						|
              onClose: clearHover,
 | 
						|
              onParseConfig: function () {
 | 
						|
                  fp.config.mode = "single";
 | 
						|
                  fp.config.enableTime = false;
 | 
						|
                  fp.config.dateFormat = fp.config.dateFormat
 | 
						|
                      ? fp.config.dateFormat
 | 
						|
                      : "\\W\\e\\e\\k #W, Y";
 | 
						|
                  fp.config.altFormat = fp.config.altFormat
 | 
						|
                      ? fp.config.altFormat
 | 
						|
                      : "\\W\\e\\e\\k #W, Y";
 | 
						|
              },
 | 
						|
              onReady: [
 | 
						|
                  onReady,
 | 
						|
                  highlightWeek,
 | 
						|
                  function () {
 | 
						|
                      fp.loadedPlugins.push("weekSelect");
 | 
						|
                  },
 | 
						|
              ],
 | 
						|
              onDestroy: onDestroy,
 | 
						|
          };
 | 
						|
      };
 | 
						|
  }
 | 
						|
 | 
						|
  return weekSelectPlugin;
 | 
						|
 | 
						|
})));
 |