summaryrefslogtreecommitdiff
path: root/public/js/fullcalendar/packages/rrule
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-06-23 03:33:38 +0200
committerpolo <ordipolo@gmx.fr>2025-06-23 03:33:38 +0200
commitcebc19ef236aac2968d2ffccfcff9b975b63fa8d (patch)
tree5b8e08045a45063475f533bfae4b4524720fe7bd /public/js/fullcalendar/packages/rrule
parent8cf5ac1abf9e2a6134cb82d4582aecaa99b1331a (diff)
downloadcms-cebc19ef236aac2968d2ffccfcff9b975b63fa8d.zip
fullcalendar
Diffstat (limited to 'public/js/fullcalendar/packages/rrule')
-rw-r--r--public/js/fullcalendar/packages/rrule/index.global.js169
-rw-r--r--public/js/fullcalendar/packages/rrule/index.global.min.js6
2 files changed, 175 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/*!
2FullCalendar RRule Plugin v6.1.17
3Docs & License: https://fullcalendar.io/docs/rrule-plugin
4(c) 2024 Adam Shaw
5*/
6FullCalendar.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);
diff --git a/public/js/fullcalendar/packages/rrule/index.global.min.js b/public/js/fullcalendar/packages/rrule/index.global.min.js
new file mode 100644
index 0000000..c80ec01
--- /dev/null
+++ b/public/js/fullcalendar/packages/rrule/index.global.min.js
@@ -0,0 +1,6 @@
1/*!
2FullCalendar RRule Plugin v6.1.17
3Docs & License: https://fullcalendar.io/docs/rrule-plugin
4(c) 2024 Adam Shaw
5*/
6FullCalendar.RRule=function(e,r,t,i){"use strict";function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var i=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,i.get?i:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,r}var l=n(t);const u={parse(e,r){if(null!=e.rrule){let t=function(e,r){let t,n=!1,u=!1;if("string"==typeof e.rrule){let r=function(e){let r=l.rrulestr(e,{forceset:!0}),t=function(e){let r=!1,t=!1;function n(e,n,l){let u=i.parseMarker(l);r=r||!u.isTimeUnspecified,t=t||null!==u.timeZoneOffset}return e.replace(/\b(DTSTART:)([^\n]*)/,n),e.replace(/\b(EXDATE:)([^\n]*)/,n),e.replace(/\b(UNTIL=)([^;\n]*)/,n),{isTimeSpecified:r,isTimeZoneSpecified:t}}(e);return Object.assign({rruleSet:r},t)}(e.rrule);t=r.rruleSet,n=r.isTimeSpecified,u=r.isTimeZoneSpecified}if("object"==typeof e.rrule&&e.rrule){let i=a(e.rrule,r);t=new l.RRuleSet,t.rrule(i.rrule),n=i.isTimeSpecified,u=i.isTimeZoneSpecified}let f=[].concat(e.exdate||[]),s=[].concat(e.exrule||[]);for(let e of f){let r=i.parseMarker(e);n=n||!r.isTimeUnspecified,u=u||null!==r.timeZoneOffset,t.exdate(new Date(r.marker.valueOf()-60*(r.timeZoneOffset||0)*1e3))}for(let e of s){let i=a(e,r);n=n||i.isTimeSpecified,u=u||i.isTimeZoneSpecified,t.exrule(i.rrule)}return{rruleSet:t,isTimeSpecified:n,isTimeZoneSpecified:u}}(e,r);if(t)return{typeData:{rruleSet:t.rruleSet,dateEnv:t.isTimeZoneSpecified?void 0:r},allDayGuess:!t.isTimeSpecified,duration:e.duration}}return null},expand:(e,r,t)=>e.rruleSet.between(i.addDays(r.start,-1),i.addDays(r.end,1)).map(r=>t.createMarker(e.dateEnv?e.dateEnv.toDate(r):r))};function a(e,r){let t=!1,n=!1;function u(e){if("string"==typeof e){let r=i.parseMarker(e);return r?(t=t||!r.isTimeUnspecified,n=n||null!==r.timeZoneOffset,new Date(r.marker.valueOf()-60*(r.timeZoneOffset||0)*1e3)):null}return e}let a=Object.assign(Object.assign({},e),{dtstart:u(e.dtstart),until:u(e.until),freq:s(e.freq),wkst:null==e.wkst?(r.weekDow-1+7)%7:s(e.wkst),byweekday:f(e.byweekday)});return{rrule:new l.RRule(a),isTimeSpecified:t,isTimeZoneSpecified:n}}function f(e){return Array.isArray(e)?e.map(s):s(e)}function s(e){return"string"==typeof e?l.RRule[e.toUpperCase()]:e}const c={rrule:i.identity,exrule:i.identity,exdate:i.identity,duration:i.createDuration};var o=r.createPlugin({name:"@fullcalendar/rrule",recurringTypes:[u],eventRefiners:c});return r.globalPlugins.push(o),e.default=o,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,rrule,FullCalendar.Internal); \ No newline at end of file