UNPKG

9.08 kBSource Map (JSON)View Raw
1{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/calendar/calendar.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Calendar, CalendarDay, CalendarOptions } from './calendar_typing.js';\nimport { getWeekNumber } from './helpers/get-week-number.js';\nimport { normalizeWeekday } from './helpers/normalize-weekday.js';\nimport { toUTCDate } from './helpers/to-utc-date.js';\nimport { toValidWeekday } from './helpers/to-valid-weekday.js';\n\n// Month Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n// Days 31 28 31 30 31 30 31 31 30 31 30 31\n// 31? 0 2 4 6 7 9 11\n// 30? 3 5 8 10\n// Feb? 1\n// Su Mo Tu We Th Fr Sa startDay - _firstDayOfWeek\n// 1 2 5 - 0 < 0 ? 6 : 5 - 0;\n// Mo Tu We Th Fr Sa Su\n// 1 2 3 5 - 1 < 0 ? 6 : 5 - 1;\n// Tu We Th Fr Sa Su Mo\n// 1 2 3 4 5 - 2 < 0 ? 6 : 5 - 2;\n// We Th Fr Sa Su Mo Tu\n// 1 2 3 4 5 5 - 3 < 0 ? 6 : 5 - 3;\n// Th Fr Sa Su Mo Tu We\n// 1 2 3 4 5 6 5 - 4 < 0 ? 6 : 5 - 4;\n// Fr Sa Su Mo Tu We Th\n// 1 2 3 4 5 6 7 5 - 5 < 0 ? 6 : 5 - 5;\n// Sa Su Mo Tu We Th Fr\n// 1 5 - 6 < 0 ? 6 : 5 - 6;\nexport function calendar(options: CalendarOptions): Calendar {\n const {\n dayFormat,\n fullDateFormat,\n locale = 'en-US',\n selectedDate,\n\n disabledDates = [],\n disabledDays = [],\n firstDayOfWeek = 0,\n max,\n min,\n showWeekNumber = false,\n weekLabel = 'Week',\n weekNumberType = 'first-4-day-week',\n }: CalendarOptions = options || {};\n\n const firstDayOfWeek2 = toValidWeekday(firstDayOfWeek);\n\n const dateYear = selectedDate.getUTCFullYear();\n const dateMonth = selectedDate.getUTCMonth();\n const firstDateOfMonth = toUTCDate(dateYear, dateMonth, 1);\n\n const disabledDaysSet = new Set(\n disabledDays.map(n => normalizeWeekday(n, firstDayOfWeek2, showWeekNumber))\n );\n const disabledDatesSet = new Set(disabledDates.map(n => +n));\n const calendarKey = [\n firstDateOfMonth.toJSON(),\n firstDayOfWeek2,\n locale,\n null == max ? '' : max.toJSON(),\n null == min ? '' : min.toJSON(),\n Array.from(disabledDaysSet).join(','),\n Array.from(disabledDatesSet).join(','),\n weekNumberType,\n ].filter(Boolean).join(':');\n\n const firstDayOfWeekOffset =\n normalizeWeekday(firstDateOfMonth.getDay(), firstDayOfWeek2, showWeekNumber);\n const minTime = null == min ? +new Date('2000-01-01') : +min;\n const maxTime = null == max ? +new Date('2100-12-31') : +max;\n const colNum = showWeekNumber ? 8 : 7;\n const totalDays = toUTCDate(dateYear, 1 + dateMonth, 0).getUTCDate();\n const rows: CalendarDay[][] = [];\n\n let cols: CalendarDay[] = [];\n let calendarComplete = false;\n let curDay = 1;\n\n /**\n * This would be constant since there are only in total of 6x7 cells in calendar month.\n * Only some cells will be filled with day depends on the value of `totalDays`.\n * Others will be empty (not-filled cells).\n */\n for (const row of [0, 1, 2, 3, 4, 5]) {\n for (const col of ([0, 1, 2, 3, 4, 5, 6].concat(colNum === 7 ? [] : [7]))) {\n const idx = col + (row * colNum);\n\n // Week label when week number needs to be shown\n if (!calendarComplete && showWeekNumber && col === 0) {\n const weekNumberOffset = row < 1 ? firstDayOfWeek2 : 0;\n\n const weekNumber = getWeekNumber(\n weekNumberType,\n toUTCDate(dateYear, dateMonth, curDay - weekNumberOffset)\n );\n const wkLabel = `${weekLabel} ${weekNumber}`;\n\n cols.push({\n fullDate: null,\n label: wkLabel,\n value: `${weekNumber}`,\n key: `${calendarKey}:${wkLabel}`,\n disabled: true,\n });\n\n continue;\n }\n\n // Empty days before and after the actual calendar days of the month\n if (calendarComplete || idx < firstDayOfWeekOffset) {\n cols.push({\n fullDate: null,\n label: '',\n value: '',\n key: `${calendarKey}:${idx}`,\n disabled: true,\n });\n\n continue;\n }\n\n const curDate = toUTCDate(dateYear, dateMonth, curDay);\n const curTime = +curDate;\n const isDisabledDay =\n disabledDaysSet.has(col) ||\n disabledDatesSet.has(curTime) ||\n (curTime < minTime || curTime > maxTime);\n\n if (isDisabledDay) disabledDatesSet.add(curTime);\n\n cols.push({\n fullDate: curDate,\n /** NOTE: Stripping LTR mark away for x-browser compatibilities and consistency reason */\n label: fullDateFormat(curDate),\n value: dayFormat(curDate),\n key: `${calendarKey}:${curDate.toJSON()}`,\n disabled: isDisabledDay,\n });\n\n curDay += 1;\n\n if (curDay > totalDays) calendarComplete = true;\n }\n\n rows.push(cols);\n cols = [];\n }\n\n return {\n disabledDatesSet,\n calendar: rows,\n disabledDaysSet: new Set(disabledDays.map(n => toValidWeekday(n))),\n key: calendarKey,\n };\n}\n"]}
\No newline at end of file