diff options
| author | polo <ordipolo@gmx.fr> | 2025-06-23 03:33:38 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2025-06-23 03:33:38 +0200 |
| commit | cebc19ef236aac2968d2ffccfcff9b975b63fa8d (patch) | |
| tree | 5b8e08045a45063475f533bfae4b4524720fe7bd /public/js/fullcalendar/packages/rrule | |
| parent | 8cf5ac1abf9e2a6134cb82d4582aecaa99b1331a (diff) | |
| download | cms-cebc19ef236aac2968d2ffccfcff9b975b63fa8d.tar.gz cms-cebc19ef236aac2968d2ffccfcff9b975b63fa8d.tar.bz2 cms-cebc19ef236aac2968d2ffccfcff9b975b63fa8d.zip | |
fullcalendar
Diffstat (limited to 'public/js/fullcalendar/packages/rrule')
| -rw-r--r-- | public/js/fullcalendar/packages/rrule/index.global.js | 169 | ||||
| -rw-r--r-- | public/js/fullcalendar/packages/rrule/index.global.min.js | 6 |
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 | /*! | ||
| 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); | ||
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 | /*! | ||
| 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(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 | ||
