diff options
Diffstat (limited to 'public/js/fullcalendar/packages/rrule/index.global.js')
-rw-r--r-- | public/js/fullcalendar/packages/rrule/index.global.js | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/public/js/fullcalendar/packages/rrule/index.global.js b/public/js/fullcalendar/packages/rrule/index.global.js new file mode 100644 index 0000000..750be32 --- /dev/null +++ b/public/js/fullcalendar/packages/rrule/index.global.js | |||
@@ -0,0 +1,169 @@ | |||
1 | /*! | ||
2 | FullCalendar RRule Plugin v6.1.17 | ||
3 | Docs & License: https://fullcalendar.io/docs/rrule-plugin | ||
4 | (c) 2024 Adam Shaw | ||
5 | */ | ||
6 | FullCalendar.RRule = (function (exports, core, rruleLib, internal) { | ||
7 | 'use strict'; | ||
8 | |||
9 | function _interopNamespace(e) { | ||
10 | if (e && e.__esModule) return e; | ||
11 | var n = Object.create(null); | ||
12 | if (e) { | ||
13 | Object.keys(e).forEach(function (k) { | ||
14 | if (k !== 'default') { | ||
15 | var d = Object.getOwnPropertyDescriptor(e, k); | ||
16 | Object.defineProperty(n, k, d.get ? d : { | ||
17 | enumerable: true, | ||
18 | get: function () { return e[k]; } | ||
19 | }); | ||
20 | } | ||
21 | }); | ||
22 | } | ||
23 | n["default"] = e; | ||
24 | return n; | ||
25 | } | ||
26 | |||
27 | var rruleLib__namespace = /*#__PURE__*/_interopNamespace(rruleLib); | ||
28 | |||
29 | const recurringType = { | ||
30 | parse(eventProps, dateEnv) { | ||
31 | if (eventProps.rrule != null) { | ||
32 | let eventRRuleData = parseEventRRule(eventProps, dateEnv); | ||
33 | if (eventRRuleData) { | ||
34 | return { | ||
35 | typeData: { | ||
36 | rruleSet: eventRRuleData.rruleSet, | ||
37 | dateEnv: eventRRuleData.isTimeZoneSpecified ? undefined : dateEnv, | ||
38 | }, | ||
39 | allDayGuess: !eventRRuleData.isTimeSpecified, | ||
40 | duration: eventProps.duration, | ||
41 | }; | ||
42 | } | ||
43 | } | ||
44 | return null; | ||
45 | }, | ||
46 | expand(eventRRuleData, framingRange, calendarDateEnv) { | ||
47 | return eventRRuleData.rruleSet.between( | ||
48 | // Add one-day leeway since rrule lib only operates in UTC, | ||
49 | // but the zoned variant of framingRange is not. | ||
50 | // Also overcomes this rrule bug: | ||
51 | // https://github.com/jakubroztocil/rrule/issues/84) | ||
52 | internal.addDays(framingRange.start, -1), internal.addDays(framingRange.end, 1)).map((date) => { | ||
53 | // convert to plain-datetime | ||
54 | return calendarDateEnv.createMarker( | ||
55 | // convert to epoch-milliseconds in original timezone | ||
56 | eventRRuleData.dateEnv | ||
57 | ? eventRRuleData.dateEnv.toDate(date) | ||
58 | : date); | ||
59 | }); | ||
60 | }, | ||
61 | }; | ||
62 | function parseEventRRule(eventProps, dateEnv) { | ||
63 | let rruleSet; | ||
64 | let isTimeSpecified = false; | ||
65 | let isTimeZoneSpecified = false; | ||
66 | if (typeof eventProps.rrule === 'string') { | ||
67 | let res = parseRRuleString(eventProps.rrule); | ||
68 | rruleSet = res.rruleSet; | ||
69 | isTimeSpecified = res.isTimeSpecified; | ||
70 | isTimeZoneSpecified = res.isTimeZoneSpecified; | ||
71 | } | ||
72 | if (typeof eventProps.rrule === 'object' && eventProps.rrule) { // non-null object | ||
73 | let res = parseRRuleObject(eventProps.rrule, dateEnv); | ||
74 | rruleSet = new rruleLib__namespace.RRuleSet(); | ||
75 | rruleSet.rrule(res.rrule); | ||
76 | isTimeSpecified = res.isTimeSpecified; | ||
77 | isTimeZoneSpecified = res.isTimeZoneSpecified; | ||
78 | } | ||
79 | // convery to arrays. TODO: general util? | ||
80 | let exdateInputs = [].concat(eventProps.exdate || []); | ||
81 | let exruleInputs = [].concat(eventProps.exrule || []); | ||
82 | for (let exdateInput of exdateInputs) { | ||
83 | let res = internal.parseMarker(exdateInput); | ||
84 | isTimeSpecified = isTimeSpecified || !res.isTimeUnspecified; | ||
85 | isTimeZoneSpecified = isTimeZoneSpecified || res.timeZoneOffset !== null; | ||
86 | rruleSet.exdate(new Date(res.marker.valueOf() - (res.timeZoneOffset || 0) * 60 * 1000)); | ||
87 | } | ||
88 | // TODO: exrule is deprecated. what to do? (https://icalendar.org/iCalendar-RFC-5545/a-3-deprecated-features.html) | ||
89 | for (let exruleInput of exruleInputs) { | ||
90 | let res = parseRRuleObject(exruleInput, dateEnv); | ||
91 | isTimeSpecified = isTimeSpecified || res.isTimeSpecified; | ||
92 | isTimeZoneSpecified = isTimeZoneSpecified || res.isTimeZoneSpecified; | ||
93 | rruleSet.exrule(res.rrule); | ||
94 | } | ||
95 | return { rruleSet, isTimeSpecified, isTimeZoneSpecified }; | ||
96 | } | ||
97 | function parseRRuleObject(rruleInput, dateEnv) { | ||
98 | let isTimeSpecified = false; | ||
99 | let isTimeZoneSpecified = false; | ||
100 | function processDateInput(dateInput) { | ||
101 | if (typeof dateInput === 'string') { | ||
102 | let markerData = internal.parseMarker(dateInput); | ||
103 | if (markerData) { | ||
104 | isTimeSpecified = isTimeSpecified || !markerData.isTimeUnspecified; | ||
105 | isTimeZoneSpecified = isTimeZoneSpecified || markerData.timeZoneOffset !== null; | ||
106 | return new Date(markerData.marker.valueOf() - (markerData.timeZoneOffset || 0) * 60 * 1000); // NOT DRY | ||
107 | } | ||
108 | return null; | ||
109 | } | ||
110 | return dateInput; // TODO: what about number timestamps? | ||
111 | } | ||
112 | let rruleOptions = Object.assign(Object.assign({}, rruleInput), { dtstart: processDateInput(rruleInput.dtstart), until: processDateInput(rruleInput.until), freq: convertConstant(rruleInput.freq), wkst: rruleInput.wkst == null | ||
113 | ? (dateEnv.weekDow - 1 + 7) % 7 // convert Sunday-first to Monday-first | ||
114 | : convertConstant(rruleInput.wkst), byweekday: convertConstants(rruleInput.byweekday) }); | ||
115 | return { rrule: new rruleLib__namespace.RRule(rruleOptions), isTimeSpecified, isTimeZoneSpecified }; | ||
116 | } | ||
117 | function parseRRuleString(str) { | ||
118 | let rruleSet = rruleLib__namespace.rrulestr(str, { forceset: true }); | ||
119 | let analysis = analyzeRRuleString(str); | ||
120 | return Object.assign({ rruleSet }, analysis); | ||
121 | } | ||
122 | function analyzeRRuleString(str) { | ||
123 | let isTimeSpecified = false; | ||
124 | let isTimeZoneSpecified = false; | ||
125 | function processMatch(whole, introPart, datePart) { | ||
126 | let result = internal.parseMarker(datePart); | ||
127 | isTimeSpecified = isTimeSpecified || !result.isTimeUnspecified; | ||
128 | isTimeZoneSpecified = isTimeZoneSpecified || result.timeZoneOffset !== null; | ||
129 | } | ||
130 | str.replace(/\b(DTSTART:)([^\n]*)/, processMatch); | ||
131 | str.replace(/\b(EXDATE:)([^\n]*)/, processMatch); | ||
132 | str.replace(/\b(UNTIL=)([^;\n]*)/, processMatch); | ||
133 | return { isTimeSpecified, isTimeZoneSpecified }; | ||
134 | } | ||
135 | function convertConstants(input) { | ||
136 | if (Array.isArray(input)) { | ||
137 | return input.map(convertConstant); | ||
138 | } | ||
139 | return convertConstant(input); | ||
140 | } | ||
141 | function convertConstant(input) { | ||
142 | if (typeof input === 'string') { | ||
143 | return rruleLib__namespace.RRule[input.toUpperCase()]; | ||
144 | } | ||
145 | return input; | ||
146 | } | ||
147 | |||
148 | const RRULE_EVENT_REFINERS = { | ||
149 | rrule: internal.identity, | ||
150 | exrule: internal.identity, | ||
151 | exdate: internal.identity, | ||
152 | duration: internal.createDuration, | ||
153 | }; | ||
154 | |||
155 | var plugin = core.createPlugin({ | ||
156 | name: '@fullcalendar/rrule', | ||
157 | recurringTypes: [recurringType], | ||
158 | eventRefiners: RRULE_EVENT_REFINERS, | ||
159 | }); | ||
160 | |||
161 | core.globalPlugins.push(plugin); | ||
162 | |||
163 | exports["default"] = plugin; | ||
164 | |||
165 | Object.defineProperty(exports, '__esModule', { value: true }); | ||
166 | |||
167 | return exports; | ||
168 | |||
169 | })({}, FullCalendar, rrule, FullCalendar.Internal); | ||