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/luxon3 | |
parent | 8cf5ac1abf9e2a6134cb82d4582aecaa99b1331a (diff) | |
download | cms-cebc19ef236aac2968d2ffccfcff9b975b63fa8d.zip |
fullcalendar
Diffstat (limited to 'public/js/fullcalendar/packages/luxon3')
-rw-r--r-- | public/js/fullcalendar/packages/luxon3/index.global.js | 131 | ||||
-rw-r--r-- | public/js/fullcalendar/packages/luxon3/index.global.min.js | 6 |
2 files changed, 137 insertions, 0 deletions
diff --git a/public/js/fullcalendar/packages/luxon3/index.global.js b/public/js/fullcalendar/packages/luxon3/index.global.js new file mode 100644 index 0000000..222e8f6 --- /dev/null +++ b/public/js/fullcalendar/packages/luxon3/index.global.js | |||
@@ -0,0 +1,131 @@ | |||
1 | /*! | ||
2 | FullCalendar Luxon 3 Plugin v6.1.17 | ||
3 | Docs & License: https://fullcalendar.io/docs/luxon | ||
4 | (c) 2024 Adam Shaw | ||
5 | */ | ||
6 | FullCalendar.Luxon3 = (function (exports, core, luxon, internal) { | ||
7 | 'use strict'; | ||
8 | |||
9 | function toLuxonDateTime(date, calendar) { | ||
10 | if (!(calendar instanceof internal.CalendarImpl)) { | ||
11 | throw new Error('must supply a CalendarApi instance'); | ||
12 | } | ||
13 | let { dateEnv } = calendar.getCurrentData(); | ||
14 | return luxon.DateTime.fromJSDate(date, { | ||
15 | zone: dateEnv.timeZone, | ||
16 | locale: dateEnv.locale.codes[0], | ||
17 | }); | ||
18 | } | ||
19 | function toLuxonDuration(duration, calendar) { | ||
20 | if (!(calendar instanceof internal.CalendarImpl)) { | ||
21 | throw new Error('must supply a CalendarApi instance'); | ||
22 | } | ||
23 | let { dateEnv } = calendar.getCurrentData(); | ||
24 | return luxon.Duration.fromObject(duration, { | ||
25 | locale: dateEnv.locale.codes[0], | ||
26 | }); | ||
27 | } | ||
28 | // Internal Utils | ||
29 | function luxonToArray(datetime) { | ||
30 | return [ | ||
31 | datetime.year, | ||
32 | datetime.month - 1, | ||
33 | datetime.day, | ||
34 | datetime.hour, | ||
35 | datetime.minute, | ||
36 | datetime.second, | ||
37 | datetime.millisecond, | ||
38 | ]; | ||
39 | } | ||
40 | function arrayToLuxon(arr, timeZone, locale) { | ||
41 | return luxon.DateTime.fromObject({ | ||
42 | year: arr[0], | ||
43 | month: arr[1] + 1, | ||
44 | day: arr[2], | ||
45 | hour: arr[3], | ||
46 | minute: arr[4], | ||
47 | second: arr[5], | ||
48 | millisecond: arr[6], | ||
49 | }, { | ||
50 | locale, | ||
51 | zone: timeZone, | ||
52 | }); | ||
53 | } | ||
54 | |||
55 | class LuxonNamedTimeZone extends internal.NamedTimeZoneImpl { | ||
56 | offsetForArray(a) { | ||
57 | return arrayToLuxon(a, this.timeZoneName).offset; | ||
58 | } | ||
59 | timestampToArray(ms) { | ||
60 | return luxonToArray(luxon.DateTime.fromMillis(ms, { | ||
61 | zone: this.timeZoneName, | ||
62 | })); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | function formatWithCmdStr(cmdStr, arg) { | ||
67 | let cmd = parseCmdStr(cmdStr); | ||
68 | if (arg.end) { | ||
69 | let start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]); | ||
70 | let end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]); | ||
71 | return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.defaultSeparator); | ||
72 | } | ||
73 | return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole); | ||
74 | } | ||
75 | function parseCmdStr(cmdStr) { | ||
76 | let parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters | ||
77 | if (parts) { | ||
78 | let middle = parseCmdStr(parts[2]); | ||
79 | return { | ||
80 | head: parts[1], | ||
81 | middle, | ||
82 | tail: parts[3], | ||
83 | whole: parts[1] + middle.whole + parts[3], | ||
84 | }; | ||
85 | } | ||
86 | return { | ||
87 | head: null, | ||
88 | middle: null, | ||
89 | tail: null, | ||
90 | whole: cmdStr, | ||
91 | }; | ||
92 | } | ||
93 | function formatRange(cmd, formatStart, formatEnd, separator) { | ||
94 | if (cmd.middle) { | ||
95 | let startHead = formatStart(cmd.head); | ||
96 | let startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator); | ||
97 | let startTail = formatStart(cmd.tail); | ||
98 | let endHead = formatEnd(cmd.head); | ||
99 | let endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator); | ||
100 | let endTail = formatEnd(cmd.tail); | ||
101 | if (startHead === endHead && startTail === endTail) { | ||
102 | return startHead + | ||
103 | (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) + | ||
104 | startTail; | ||
105 | } | ||
106 | } | ||
107 | let startWhole = formatStart(cmd.whole); | ||
108 | let endWhole = formatEnd(cmd.whole); | ||
109 | if (startWhole === endWhole) { | ||
110 | return startWhole; | ||
111 | } | ||
112 | return startWhole + separator + endWhole; | ||
113 | } | ||
114 | |||
115 | var plugin = core.createPlugin({ | ||
116 | name: '@fullcalendar/luxon3', | ||
117 | cmdFormatter: formatWithCmdStr, | ||
118 | namedTimeZonedImpl: LuxonNamedTimeZone, | ||
119 | }); | ||
120 | |||
121 | core.globalPlugins.push(plugin); | ||
122 | |||
123 | exports["default"] = plugin; | ||
124 | exports.toLuxonDateTime = toLuxonDateTime; | ||
125 | exports.toLuxonDuration = toLuxonDuration; | ||
126 | |||
127 | Object.defineProperty(exports, '__esModule', { value: true }); | ||
128 | |||
129 | return exports; | ||
130 | |||
131 | })({}, FullCalendar, luxon, FullCalendar.Internal); | ||
diff --git a/public/js/fullcalendar/packages/luxon3/index.global.min.js b/public/js/fullcalendar/packages/luxon3/index.global.min.js new file mode 100644 index 0000000..7c5aa9c --- /dev/null +++ b/public/js/fullcalendar/packages/luxon3/index.global.min.js | |||
@@ -0,0 +1,6 @@ | |||
1 | /*! | ||
2 | FullCalendar Luxon 3 Plugin v6.1.17 | ||
3 | Docs & License: https://fullcalendar.io/docs/luxon | ||
4 | (c) 2024 Adam Shaw | ||
5 | */ | ||
6 | FullCalendar.Luxon3=function(e,t,n,a){"use strict";function l(e,t,a){return n.DateTime.fromObject({year:e[0],month:e[1]+1,day:e[2],hour:e[3],minute:e[4],second:e[5],millisecond:e[6]},{locale:a,zone:t})}class r extends a.NamedTimeZoneImpl{offsetForArray(e){return l(e,this.timeZoneName).offset}timestampToArray(e){return[(t=n.DateTime.fromMillis(e,{zone:this.timeZoneName})).year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond];var t}}var o=t.createPlugin({name:"@fullcalendar/luxon3",cmdFormatter:function(e,t){let n=function e(t){let n=t.match(/^(.*?)\{(.*)\}(.*)$/);if(n){let t=e(n[2]);return{head:n[1],middle:t,tail:n[3],whole:n[1]+t.whole+n[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){let e=l(t.start.array,t.timeZone,t.localeCodes[0]),a=l(t.end.array,t.timeZone,t.localeCodes[0]);return function e(t,n,a,l){if(t.middle){let r=n(t.head),o=e(t.middle,n,a,l),i=n(t.tail),u=a(t.head),d=e(t.middle,n,a,l),m=a(t.tail);if(r===u&&i===m)return r+(o===d?o:o+l+d)+i}let r=n(t.whole),o=a(t.whole);if(r===o)return r;return r+l+o}(n,e.toFormat.bind(e),a.toFormat.bind(a),t.defaultSeparator)}return l(t.date.array,t.timeZone,t.localeCodes[0]).toFormat(n.whole)},namedTimeZonedImpl:r});return t.globalPlugins.push(o),e.default=o,e.toLuxonDateTime=function(e,t){if(!(t instanceof a.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return n.DateTime.fromJSDate(e,{zone:l.timeZone,locale:l.locale.codes[0]})},e.toLuxonDuration=function(e,t){if(!(t instanceof a.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return n.Duration.fromObject(e,{locale:l.locale.codes[0]})},Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,luxon,FullCalendar.Internal); \ No newline at end of file | ||