mirror of https://gitlab.crans.org/nounous/nixos
mise à jour mw et extension FullCalendar
parent
ffda38b4f1
commit
924f92ad00
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
$magicWords = [];
|
||||
$magicWords['en'] = [
|
||||
'calendar' => [ 0, 'calendar' ],
|
||||
];
|
||||
$magicWords['fr'] = [
|
||||
'calendar' => [ 0, 'calendrier' ],
|
||||
];
|
||||
?>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"name": "FullCalendar",
|
||||
"version": "0.1.0",
|
||||
"author": [
|
||||
"Crans"
|
||||
],
|
||||
"url": "",
|
||||
"license-name": "GPL-3.0+",
|
||||
"description": "",
|
||||
"type": "parserhook",
|
||||
"requires": {
|
||||
"MediaWiki": ">= 1.39.0"
|
||||
},
|
||||
"ResourceModules": {
|
||||
"ext.fullcalendar": {
|
||||
"scripts": [
|
||||
"ical.es5.cjs",
|
||||
"fullcalendar7/fullcalendar.global.js",
|
||||
"fullcalendar7/themes/breezy/global.js",
|
||||
"fullcalendar7/locales-all/global.js",
|
||||
"fullcalendar7/fullcalendar-ical.js",
|
||||
"init.js"
|
||||
],
|
||||
"styles": [
|
||||
"fullcalendar7/skeleton.css",
|
||||
"fullcalendar7/themes/breezy/theme.css",
|
||||
"fullcalendar7/themes/breezy/palettes/rose.css"
|
||||
]
|
||||
}
|
||||
},
|
||||
"ResourceFileModulePaths": {
|
||||
"localBasePath": "resources",
|
||||
"remoteExtPath": "fullcalendar/resources"
|
||||
},
|
||||
"AutoloadClasses": {
|
||||
"FullCalendar": "includes/FullCalendar.php"
|
||||
},
|
||||
"ExtensionMessagesFiles": {
|
||||
"FullCalendarMagic": "FullCalendarMagic.i18n.php"
|
||||
},
|
||||
"Hooks": {
|
||||
"ParserFirstCallInit": "FullCalendar::onParserFirstCallInit"
|
||||
},
|
||||
"manifest_version": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
use MediaWiki\Html\Html;
|
||||
|
||||
class FullCalendar {
|
||||
|
||||
// Register any render callbacks with the parser
|
||||
public static function onParserFirstCallInit( Parser $parser ) {
|
||||
// Create a function hook associating the <code>example</code> magic word with renderExample()
|
||||
$parser->setFunctionHook( 'calendar', [ self::class, 'renderCalendar' ] );
|
||||
}
|
||||
|
||||
public static function renderCalendar( Parser $parser, $param1 = '', ) {
|
||||
$parser->getOutput()->addModules( [ 'ext.fullcalendar' ] );
|
||||
|
||||
$resultHtml = Html::element( 'div', [ 'class' => 'mw-crans-fullcalendar', 'data-ics' => $param1 ] );
|
||||
return [ $resultHtml, 'noparse' => true, 'isHTML' => true ];
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 Adam Shaw
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
|
@ -0,0 +1,237 @@
|
|||
/*!
|
||||
FullCalendar iCalendar Plugin v7.0.1
|
||||
Docs & License: https://fullcalendar.io/docs/icalendar
|
||||
(c) 2026 Adam Shaw
|
||||
*/
|
||||
(function (ICAL) {
|
||||
'use strict';
|
||||
|
||||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
||||
|
||||
var ICAL__default = /*#__PURE__*/_interopDefaultLegacy(ICAL);
|
||||
|
||||
function addDays(m, n) {
|
||||
let a = dateToUtcArray(m);
|
||||
a[2] += n;
|
||||
return arrayToUtcDate(a);
|
||||
}
|
||||
function dateToUtcArray(date) {
|
||||
return [
|
||||
date.getUTCFullYear(),
|
||||
date.getUTCMonth(),
|
||||
date.getUTCDate(),
|
||||
date.getUTCHours(),
|
||||
date.getUTCMinutes(),
|
||||
date.getUTCSeconds(),
|
||||
date.getUTCMilliseconds(),
|
||||
];
|
||||
}
|
||||
function arrayToUtcDate(a) {
|
||||
// according to web standards (and Safari), a month index is required.
|
||||
// massage if only given a year.
|
||||
if (a.length === 1) {
|
||||
a = a.concat([0]);
|
||||
}
|
||||
return new Date(Date.UTC(...a));
|
||||
}
|
||||
|
||||
/* eslint-disable */
|
||||
class IcalExpander {
|
||||
constructor(opts) {
|
||||
this.maxIterations = opts.maxIterations != null ? opts.maxIterations : 1000;
|
||||
this.skipInvalidDates = opts.skipInvalidDates != null ? opts.skipInvalidDates : false;
|
||||
this.jCalData = ICAL__default["default"].parse(opts.ics);
|
||||
this.component = new ICAL__default["default"].Component(this.jCalData);
|
||||
this.events = this.component.getAllSubcomponents('vevent').map(vevent => new ICAL__default["default"].Event(vevent));
|
||||
if (this.skipInvalidDates) {
|
||||
this.events = this.events.filter((evt) => {
|
||||
try {
|
||||
evt.startDate.toJSDate();
|
||||
evt.endDate.toJSDate();
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
// skipping events with invalid time
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
between(after, before) {
|
||||
function isEventWithinRange(startTime, endTime) {
|
||||
return (!after || endTime >= after.getTime()) &&
|
||||
(!before || startTime <= before.getTime());
|
||||
}
|
||||
function getTimes(eventOrOccurrence) {
|
||||
const startTime = eventOrOccurrence.startDate.toJSDate().getTime();
|
||||
let endTime = eventOrOccurrence.endDate.toJSDate().getTime();
|
||||
// If it is an all day event, the end date is set to 00:00 of the next day
|
||||
// So we need to make it be 23:59:59 to compare correctly with the given range
|
||||
if (eventOrOccurrence.endDate.isDate && (endTime > startTime)) {
|
||||
endTime -= 1;
|
||||
}
|
||||
return { startTime, endTime };
|
||||
}
|
||||
const exceptions = [];
|
||||
this.events.forEach((event) => {
|
||||
if (event.isRecurrenceException())
|
||||
exceptions.push(event);
|
||||
});
|
||||
const ret = {
|
||||
events: [],
|
||||
occurrences: [],
|
||||
};
|
||||
this.events.filter(e => !e.isRecurrenceException()).forEach((event) => {
|
||||
const exdates = [];
|
||||
event.component.getAllProperties('exdate').forEach((exdateProp) => {
|
||||
const exdate = exdateProp.getFirstValue();
|
||||
exdates.push(exdate.toJSDate().getTime());
|
||||
});
|
||||
// Recurring event is handled differently
|
||||
if (event.isRecurring()) {
|
||||
const iterator = event.iterator();
|
||||
let next;
|
||||
let i = 0;
|
||||
do {
|
||||
i += 1;
|
||||
next = iterator.next();
|
||||
if (next) {
|
||||
const occurrence = event.getOccurrenceDetails(next);
|
||||
const { startTime, endTime } = getTimes(occurrence);
|
||||
const isOccurrenceExcluded = exdates.indexOf(startTime) !== -1;
|
||||
// TODO check that within same day?
|
||||
const exception = exceptions.find(ex => ex.uid === event.uid && ex.recurrenceId.toJSDate().getTime() === occurrence.startDate.toJSDate().getTime());
|
||||
// We have passed the max date, stop
|
||||
if (before && startTime > before.getTime())
|
||||
break;
|
||||
// Check that we are within our range
|
||||
if (isEventWithinRange(startTime, endTime)) {
|
||||
if (exception) {
|
||||
ret.events.push(exception);
|
||||
}
|
||||
else if (!isOccurrenceExcluded) {
|
||||
ret.occurrences.push(occurrence);
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (next && (!this.maxIterations || i < this.maxIterations));
|
||||
return;
|
||||
}
|
||||
// Non-recurring event:
|
||||
const { startTime, endTime } = getTimes(event);
|
||||
if (isEventWithinRange(startTime, endTime))
|
||||
ret.events.push(event);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
before(before) {
|
||||
return this.between(undefined, before);
|
||||
}
|
||||
after(after) {
|
||||
return this.between(after);
|
||||
}
|
||||
all() {
|
||||
return this.between();
|
||||
}
|
||||
}
|
||||
|
||||
const eventSourceDef = {
|
||||
parseMeta(refined) {
|
||||
if (refined.url && refined.format === 'ics') {
|
||||
return {
|
||||
url: refined.url,
|
||||
format: 'ics',
|
||||
};
|
||||
}
|
||||
return null;
|
||||
},
|
||||
fetch(arg, successCallback, // any
|
||||
errorCallback) {
|
||||
let meta = arg.eventSource.meta;
|
||||
let { internalState } = meta;
|
||||
/*
|
||||
NOTE: isRefetch is a HACK. we would do the recurring-expanding in a separate plugin hook,
|
||||
but we couldn't leverage built-in allDay-guessing, among other things.
|
||||
*/
|
||||
if (!internalState || arg.isRefetch) {
|
||||
internalState = meta.internalState = {
|
||||
response: null,
|
||||
iCalExpanderPromise: fetch(meta.url, { method: 'GET' }).then((response) => {
|
||||
return response.text().then((icsText) => {
|
||||
internalState.response = response;
|
||||
return new IcalExpander({
|
||||
ics: icsText,
|
||||
skipInvalidDates: true,
|
||||
});
|
||||
});
|
||||
}),
|
||||
};
|
||||
}
|
||||
internalState.iCalExpanderPromise.then((iCalExpander) => {
|
||||
successCallback({
|
||||
rawEvents: expandICalEvents(iCalExpander, arg.range),
|
||||
response: internalState.response,
|
||||
});
|
||||
}, errorCallback);
|
||||
},
|
||||
};
|
||||
function expandICalEvents(iCalExpander, range) {
|
||||
// expand the range. because our `range` is timeZone-agnostic UTC
|
||||
// or maybe because ical.js always produces dates in local time? i forget
|
||||
let rangeStart = addDays(range.start, -1);
|
||||
let rangeEnd = addDays(range.end, 1);
|
||||
let iCalRes = iCalExpander.between(rangeStart, rangeEnd); // end inclusive. will give extra results
|
||||
let expanded = [];
|
||||
// TODO: instead of using startDate/endDate.toString to communicate allDay,
|
||||
// we can query startDate/endDate.isDate. More efficient to avoid formatting/reparsing.
|
||||
// single events
|
||||
for (let iCalEvent of iCalRes.events) {
|
||||
expanded.push({
|
||||
...buildNonDateProps(iCalEvent),
|
||||
start: iCalEvent.startDate.toString(),
|
||||
end: (specifiesEnd(iCalEvent) && iCalEvent.endDate)
|
||||
? iCalEvent.endDate.toString()
|
||||
: null,
|
||||
});
|
||||
}
|
||||
// recurring event instances
|
||||
for (let iCalOccurence of iCalRes.occurrences) {
|
||||
let iCalEvent = iCalOccurence.item;
|
||||
expanded.push({
|
||||
...buildNonDateProps(iCalEvent),
|
||||
start: iCalOccurence.startDate.toString(),
|
||||
end: (specifiesEnd(iCalEvent) && iCalOccurence.endDate)
|
||||
? iCalOccurence.endDate.toString()
|
||||
: null,
|
||||
});
|
||||
}
|
||||
return expanded;
|
||||
}
|
||||
function buildNonDateProps(iCalEvent) {
|
||||
return {
|
||||
title: iCalEvent.summary,
|
||||
url: extractEventUrl(iCalEvent),
|
||||
extendedProps: {
|
||||
location: iCalEvent.location,
|
||||
organizer: iCalEvent.organizer,
|
||||
description: iCalEvent.description,
|
||||
},
|
||||
};
|
||||
}
|
||||
function extractEventUrl(iCalEvent) {
|
||||
let urlProp = iCalEvent.component.getFirstProperty('url');
|
||||
return urlProp ? urlProp.getFirstValue() : '';
|
||||
}
|
||||
function specifiesEnd(iCalEvent) {
|
||||
return Boolean(iCalEvent.component.getFirstProperty('dtend')) ||
|
||||
Boolean(iCalEvent.component.getFirstProperty('duration'));
|
||||
}
|
||||
|
||||
var plugin = {
|
||||
name: 'icalendar',
|
||||
eventSourceDefs: [eventSourceDef],
|
||||
};
|
||||
|
||||
FullCalendar.globalPlugins.push(plugin);
|
||||
|
||||
})(ICAL);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,469 @@
|
|||
|
||||
:root {
|
||||
--fc-sticky-header-footer-z: 3;
|
||||
--fc-popover-z: 4;
|
||||
}
|
||||
|
||||
.fc-11 {
|
||||
z-index: var(--fc-popover-z) !important;
|
||||
}
|
||||
|
||||
.fc-HY {
|
||||
isolation: isolate;
|
||||
}
|
||||
|
||||
/*
|
||||
This will prevent all ancestors from customizing their box size unless they use .contentBox
|
||||
*/
|
||||
.fc-jz,
|
||||
.fc-jz *,
|
||||
.fc-jz *:before,
|
||||
.fc-jz *:after {
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* classes attached to <body> */
|
||||
.fc-j2,
|
||||
.fc-j2 * {
|
||||
cursor: not-allowed !important;
|
||||
}
|
||||
|
||||
.fc-Ki {
|
||||
-ms-overflow-style: none !important; /* IE and Edge */
|
||||
scrollbar-width: none !important; /* Firefox */
|
||||
}
|
||||
|
||||
/* Hide scrollbar for Chrome, Safari and Opera */
|
||||
.fc-Ki::-webkit-scrollbar {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.fc-ST {
|
||||
flex-shrink: 0 !important;
|
||||
}
|
||||
|
||||
.fc-Z9 .fc-1g {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
flex-wrap: wrap !important;
|
||||
}
|
||||
|
||||
/* HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
|
||||
https://stackoverflow.com/a/60256345 */
|
||||
.fc-HC .fc-1g > * {
|
||||
float: left !important;
|
||||
}
|
||||
|
||||
[dir=rtl] .fc-HC .fc-1g > *,
|
||||
.fc-HC[dir=rtl] .fc-1g > * {
|
||||
float: right !important;
|
||||
}
|
||||
|
||||
.fc-HC .fc-1g::after {
|
||||
content: "" !important;
|
||||
display: block !important;
|
||||
clear: both !important;
|
||||
}
|
||||
|
||||
.fc-ZB {
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
.fc-Ld {
|
||||
cursor: n-resize !important;
|
||||
}
|
||||
|
||||
.fc-lJ {
|
||||
cursor: s-resize !important;
|
||||
}
|
||||
|
||||
.fc-Zm {
|
||||
cursor: w-resize !important;
|
||||
}
|
||||
|
||||
[dir=rtl] .fc-Zm {
|
||||
cursor: e-resize !important;
|
||||
}
|
||||
|
||||
.fc-n5 {
|
||||
cursor: e-resize !important;
|
||||
}
|
||||
|
||||
[dir=rtl] .fc-n5 {
|
||||
cursor: w-resize !important;
|
||||
}
|
||||
|
||||
.fc-Px {
|
||||
cursor: col-resize !important;
|
||||
}
|
||||
|
||||
.fc-QK,
|
||||
.fc-eh,
|
||||
.fc-M9 {
|
||||
position: absolute !important;
|
||||
box-sizing: content-box !important;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.fc-QK {
|
||||
padding: 10px !important;
|
||||
margin: -10px !important;
|
||||
}
|
||||
|
||||
.fc-eh {
|
||||
padding-left: 10px !important;
|
||||
padding-right: 10px !important;
|
||||
margin-left: -10px !important;
|
||||
margin-right: -10px !important;
|
||||
}
|
||||
|
||||
.fc-M9 {
|
||||
padding-top: 10px !important;
|
||||
padding-bottom: 10px !important;
|
||||
margin-top: -10px !important;
|
||||
margin-bottom: -10px !important;
|
||||
}
|
||||
|
||||
/* QUESTION: why not use -left -right instead of negative margins/padding for ALL? */
|
||||
.fc-SC {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: -5px;
|
||||
right: -5px;
|
||||
}
|
||||
|
||||
.fc-hi {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.fc-F0 {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/* Border Utils */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* TODO: break-out to x and y. don't have "only" all */
|
||||
/* TODO: instead of "border" utils, call them "borderless" to subtract? */
|
||||
|
||||
.fc-6s {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
.fc-8B {
|
||||
border-left: 0 !important;
|
||||
border-right: 0 !important;
|
||||
border-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.fc-RJ {
|
||||
border-top: 0 !important;
|
||||
border-left: 0 !important;
|
||||
border-right: 0 !important;
|
||||
}
|
||||
|
||||
.fc-Hm,
|
||||
.fc-ge {
|
||||
border-top: 0 !important;
|
||||
border-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.fc-Hm {
|
||||
border-inline-end: 0 !important;
|
||||
}
|
||||
|
||||
.fc-ge {
|
||||
border-inline-start: 0 !important;
|
||||
}
|
||||
|
||||
.fc-KC {
|
||||
border-left: 0 !important;
|
||||
border-right: 0 !important;
|
||||
}
|
||||
|
||||
.fc-mE {
|
||||
border-top: 0 !important;
|
||||
border-bottom: 0 !important;
|
||||
}
|
||||
|
||||
/* for matching cell start-border, assumed to be 1px, which can't be guaranteed */
|
||||
.fc-FA {
|
||||
border-inline-start: 1px solid transparent !important;
|
||||
}
|
||||
|
||||
/* Flexbox Utils */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-5g {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
}
|
||||
|
||||
.fc-Fa {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
.fc-16 {
|
||||
flex-grow: 1 !important;
|
||||
}
|
||||
|
||||
.fc-Im {
|
||||
flex-grow: 1 !important;
|
||||
flex-basis: 0 !important;
|
||||
min-width: 0 !important;
|
||||
min-height: 0 !important;
|
||||
}
|
||||
|
||||
.fc-tZ {
|
||||
min-height: 0 !important;
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: use liquidX/Y elsewhere because frees up min other dimension; less collisions
|
||||
*/
|
||||
.fc-Pw {
|
||||
flex-grow: 1 !important;
|
||||
flex-basis: 0 !important;
|
||||
min-width: 0 !important;
|
||||
}
|
||||
|
||||
/* Print-Safe Utils (media:screen ONLY) */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-Z9 .fc-kE,
|
||||
.fc-Z9 .fc-Xg {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
/* Table Utils */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-np {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.fc-gd {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.fc-hB {
|
||||
margin-top: 0 !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.fc-uk {
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
.fc-he {
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
|
||||
.fc-Bv {
|
||||
white-space: pre !important;
|
||||
}
|
||||
|
||||
/* Misc Utils */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-U2 {
|
||||
overflow-anchor: none;
|
||||
}
|
||||
|
||||
.fc-bB {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: eventually use this on daygrid/timegrid events' inner, time, and title, FOR PRINT
|
||||
Needed to prevent wrapping to multiple lines, increasing height, throwing off print-positioning,
|
||||
which can't rely on dynamic height detection after print-flag activated.
|
||||
*/
|
||||
.fc-pp {
|
||||
white-space: nowrap !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.fc-8A {
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.fc-7t {
|
||||
position: absolute !important;
|
||||
}
|
||||
|
||||
.fc-pK {
|
||||
inset-inline-start: 0 !important;
|
||||
}
|
||||
|
||||
.fc-wP {
|
||||
position: absolute !important;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
right: 0 !important;
|
||||
bottom: 0 !important;
|
||||
}
|
||||
|
||||
.fc-yW,
|
||||
.fc-5j {
|
||||
position: absolute !important;
|
||||
left: 0 !important;
|
||||
right: 0 !important;
|
||||
}
|
||||
|
||||
.fc-1K,
|
||||
.fc-bH {
|
||||
position: absolute !important;
|
||||
top: 0 !important;
|
||||
bottom: 0 !important;
|
||||
}
|
||||
|
||||
.fc-yW {
|
||||
top: 0 !important;
|
||||
}
|
||||
|
||||
.fc-bH {
|
||||
left: 0 !important;
|
||||
right: 0 !important;
|
||||
width: 0 !important;
|
||||
}
|
||||
|
||||
@media not print {
|
||||
.fc-dY {
|
||||
position: sticky !important;
|
||||
}
|
||||
|
||||
.fc-aX {
|
||||
position: sticky !important;
|
||||
top: 0 !important;
|
||||
}
|
||||
|
||||
/* Sticks to either left or right (the flex "start") depending on ltr/rtl */
|
||||
.fc-pZ {
|
||||
position: sticky !important;
|
||||
inset-inline-start: 0 !important;
|
||||
}
|
||||
|
||||
.fc-Mw {
|
||||
position: sticky !important;
|
||||
top: 0 !important;
|
||||
z-index: var(--fc-sticky-header-footer-z) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Only needed when padding/border must be separate from width/height */
|
||||
.fc-CU {
|
||||
box-sizing: content-box !important;
|
||||
}
|
||||
|
||||
.fc-jm {
|
||||
position: absolute !important;
|
||||
left: -10000px !important;
|
||||
}
|
||||
|
||||
.fc-oO {
|
||||
align-items: center !important;
|
||||
}
|
||||
|
||||
.fc-MM {
|
||||
align-items: flex-start !important;
|
||||
}
|
||||
|
||||
.fc-Qk {
|
||||
align-items: flex-end !important;
|
||||
}
|
||||
|
||||
/* Footer Scrollbar */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-Q6 {
|
||||
position: sticky !important;
|
||||
bottom: 0 !important;
|
||||
z-index: var(--fc-sticky-header-footer-z) !important;
|
||||
}
|
||||
|
||||
.fc-bD > * {
|
||||
margin-top: -1px !important;
|
||||
}
|
||||
|
||||
.fc-bD > * > * {
|
||||
height: 1px !important;
|
||||
}
|
||||
|
||||
/* Print-Safe Utils */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-HC .fc-lF {
|
||||
-moz-column-break-inside: avoid !important;
|
||||
break-inside: avoid !important;
|
||||
}
|
||||
|
||||
.fc-HC .fc-kE {
|
||||
display: table !important;
|
||||
table-layout: fixed !important;
|
||||
width: 100% !important;
|
||||
border-spacing: 0 !important;
|
||||
border-collapse: separate !important;
|
||||
}
|
||||
|
||||
.fc-HC .fc-Xg {
|
||||
display: table-header-group !important;
|
||||
-moz-column-break-inside: avoid !important;
|
||||
break-inside: avoid !important;
|
||||
background: #fff !important;
|
||||
z-index: 9999 !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.fc-Vf {
|
||||
/* min-height when multiple rows coexist, provides sane aspect-ratio for cells */
|
||||
min-height: 6em !important;
|
||||
}
|
||||
|
||||
/* Z-index */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-BP {
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.fc-XV {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.fc-Ah:focus-visible {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
/* INTERNAL MARKER -- used to mark an element for internal significance */
|
||||
/* ------------------------------------------------------------------------------------------------- */
|
||||
|
||||
.fc-vz {}
|
||||
|
||||
.fc-4B {}
|
||||
.fc-D7 {}
|
||||
.fc-wp {}
|
||||
.fc-Ex {}
|
||||
.fc-wl {}
|
||||
.fc-yM {}
|
||||
.fc-2f {}
|
||||
.fc-zR {}
|
||||
|
||||
.fc-0j {}
|
||||
|
||||
.fc-M7 {}
|
||||
|
||||
.fc-tb {}
|
||||
|
||||
.fc-ew {}
|
||||
|
||||
.fc-IZ {}
|
||||
|
||||
.fc-UH {}
|
||||
|
|
@ -0,0 +1,387 @@
|
|||
/*!
|
||||
FullCalendar (Vanilla JS) v7.0.1
|
||||
Docs & License: https://fullcalendar.io
|
||||
(c) 2026 Adam Shaw
|
||||
*/
|
||||
(function ({ H: joinClassNames, u, S, G: globalPlugins }) {
|
||||
|
||||
|
||||
// usually 11px font / 12px line-height
|
||||
const xxsTextClass = "fc-breezy-vQz";
|
||||
// outline
|
||||
const outlineWidthClass = "fc-breezy-0Bj";
|
||||
const outlineWidthFocusClass = "fc-breezy-uqo";
|
||||
const outlineWidthGroupFocusClass = "fc-breezy-nPR";
|
||||
const outlineOffsetClass = "fc-breezy-3Xj";
|
||||
const primaryOutlineColorClass = "fc-breezy-yg7";
|
||||
const primaryOutlineFocusClass = `${outlineWidthFocusClass} ${primaryOutlineColorClass}`;
|
||||
// neutral buttons
|
||||
const strongSolidPressableClass = joinClassNames("fc-breezy-hJa", "fc-breezy-AT7", "fc-breezy-b3B");
|
||||
const mutedHoverClass = "fc-breezy-qiG";
|
||||
const mutedHoverPressableClass = `${mutedHoverClass} fc-breezy-WfX`;
|
||||
const faintHoverClass = "fc-breezy-1EL";
|
||||
const faintHoverPressableClass = `${faintHoverClass} fc-breezy-qWF fc-breezy-UTk`;
|
||||
// controls
|
||||
const selectedClass = `fc-breezy-GfU fc-breezy-Oiq ${primaryOutlineFocusClass}`;
|
||||
const unselectedClass = `fc-breezy-t4l fc-breezy-hnE ${primaryOutlineFocusClass}`;
|
||||
// primary
|
||||
const primaryClass = "fc-breezy-Anp fc-breezy-ECg";
|
||||
const primaryPressableClass = `${primaryClass} fc-breezy-8mf`;
|
||||
const primaryPressableGroupClass = `${primaryClass} fc-breezy-t8l`;
|
||||
const primaryButtonClass = `${primaryPressableClass} fc-breezy-d0j ${primaryOutlineFocusClass} ${outlineOffsetClass}`;
|
||||
// secondary
|
||||
const secondaryClass = "fc-breezy-nyY fc-breezy-NK3";
|
||||
const secondaryPressableClass = `${secondaryClass} fc-breezy-StK`;
|
||||
const secondaryButtonClass = `${secondaryPressableClass} fc-breezy-nuP ${primaryOutlineFocusClass} fc-breezy-07j`;
|
||||
const secondaryButtonIconClass = "fc-breezy-XUJ fc-breezy-J7Y fc-breezy-b7A fc-breezy-tRE";
|
||||
// event content
|
||||
const eventMutedFgClass = "fc-breezy-WLU";
|
||||
const eventFaintBgClass = "fc-breezy-GjO";
|
||||
const eventFaintPressableClass = joinClassNames(eventFaintBgClass, "fc-breezy-yE8", "fc-breezy-x2T");
|
||||
// interactive neutral foregrounds
|
||||
const mutedFgPressableGroupClass = "fc-breezy-t4l fc-breezy-Wxh fc-breezy-x7E";
|
||||
// transparent resizer for mouse
|
||||
const blockPointerResizerClass = "fc-breezy-1EY fc-breezy-pps fc-breezy-vs6";
|
||||
const rowPointerResizerClass = `${blockPointerResizerClass} fc-breezy-AWB fc-breezy-hza`;
|
||||
const columnPointerResizerClass = `${blockPointerResizerClass} fc-breezy-MaV fc-breezy-uuA`;
|
||||
// circle resizer for touch
|
||||
const blockTouchResizerClass = "fc-breezy-1EY fc-breezy-3wQ fc-breezy-wsy fc-breezy-lNM fc-breezy-gmc fc-breezy-AAA";
|
||||
const rowTouchResizerClass = `${blockTouchResizerClass} fc-breezy-ERR fc-breezy-Dq8`;
|
||||
const columnTouchResizerClass = `${blockTouchResizerClass} fc-breezy-1V6 fc-breezy-F99`;
|
||||
const getNormalDayHeaderBorderClass = (info) => joinClassNames(!info.inPopover && (info.isMajor ? "fc-breezy-wsy fc-breezy-OFc" :
|
||||
!info.isNarrow && "fc-breezy-wsy fc-breezy-EAo"));
|
||||
const getMutedDayHeaderBorderClass = (info) => joinClassNames(!info.inPopover && (info.isMajor ? "fc-breezy-wsy fc-breezy-OFc" :
|
||||
!info.isNarrow && "fc-breezy-wsy fc-breezy-tTN"));
|
||||
const getNormalDayCellBorderColorClass = (info) => (info.isMajor ? "fc-breezy-OFc" : "fc-breezy-EAo");
|
||||
const getMutedDayCellBorderColorClass = (info) => (info.isMajor ? "fc-breezy-OFc" : "fc-breezy-tTN");
|
||||
const tallDayCellBottomClass = "fc-breezy-mhE";
|
||||
const getShortDayCellBottomClass = (info) => joinClassNames(!info.isNarrow && "fc-breezy-toR");
|
||||
const mutedHoverButtonClass = joinClassNames(mutedHoverPressableClass, outlineWidthFocusClass, primaryOutlineColorClass);
|
||||
const dayRowCommonClasses = {
|
||||
/* Day Row > List-Item Event
|
||||
----------------------------------------------------------------------------------------------- */
|
||||
listItemEventClass: (info) => joinClassNames("fc-breezy-Ika fc-breezy-7A6", info.isNarrow
|
||||
? "fc-breezy-148 fc-breezy-Fvv"
|
||||
: "fc-breezy-rVY fc-breezy-KzJ", info.isSelected
|
||||
? "fc-breezy-pZQ"
|
||||
: info.isInteractive
|
||||
? mutedHoverPressableClass
|
||||
: mutedHoverClass),
|
||||
listItemEventInnerClass: (info) => joinClassNames("fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK fc-breezy-N2M", info.isNarrow
|
||||
? `fc-breezy-z5u ${xxsTextClass}`
|
||||
: "fc-breezy-2rx fc-breezy-a3B"),
|
||||
listItemEventTimeClass: (info) => joinClassNames(info.isNarrow ? "fc-breezy-F1o" : "fc-breezy-oQ2", "fc-breezy-t4l fc-breezy-NPw fc-breezy-TZ4 fc-breezy-pKG fc-breezy-1Zl"),
|
||||
listItemEventTitleClass: (info) => joinClassNames(info.isNarrow ? "fc-breezy-F1o" : "fc-breezy-oQ2", "fc-breezy-Oiq fc-breezy-1OT fc-breezy-TZ4 fc-breezy-pKG fc-breezy-OLq", info.timeText && "fc-breezy-IPx"),
|
||||
/* Day Row > Row Event
|
||||
----------------------------------------------------------------------------------------------- */
|
||||
rowEventClass: (info) => joinClassNames(info.isStart && (info.isNarrow ? "fc-breezy-Jzj" : "fc-breezy-Wga"), info.isEnd && (info.isNarrow ? "fc-breezy-3e1" : "fc-breezy-KYn")),
|
||||
rowEventInnerClass: (info) => info.isNarrow ? "fc-breezy-z5u" : "fc-breezy-2rx",
|
||||
/* Day Row > More-Link
|
||||
----------------------------------------------------------------------------------------------- */
|
||||
rowMoreLinkClass: (info) => joinClassNames("fc-breezy-Ika fc-breezy-wsy", info.isNarrow
|
||||
? "fc-breezy-148 fc-breezy-UIT fc-breezy-Fvv"
|
||||
: "fc-breezy-sI7 fc-breezy-rVY fc-breezy-d0j fc-breezy-KzJ", mutedHoverPressableClass),
|
||||
rowMoreLinkInnerClass: (info) => joinClassNames(info.isNarrow
|
||||
? `fc-breezy-7A6 ${xxsTextClass}`
|
||||
: "fc-breezy-KUX fc-breezy-a3B", "fc-breezy-Oiq"),
|
||||
};
|
||||
var index = {
|
||||
name: "theme-breezy",
|
||||
optionDefaults: {
|
||||
className: (info) => joinClassNames("fc-breezy-gmc fc-breezy-n5m", !(info.borderlessTop || info.borderlessBottom || info.borderlessX) && "fc-breezy-hny"),
|
||||
viewClass: (info) => {
|
||||
const hasBorderTop = !info.options.headerToolbar && !info.borderlessTop;
|
||||
const hasBorderBottom = !info.options.footerToolbar && !info.borderlessBottom;
|
||||
const hasBorderX = !info.borderlessX;
|
||||
return joinClassNames("fc-breezy-EAo", hasBorderTop && "fc-breezy-ku3", hasBorderBottom && "fc-breezy-zi1", hasBorderX && "fc-breezy-1Wx", (hasBorderTop && hasBorderX) && "fc-breezy-wko", (hasBorderBottom && hasBorderX) && "fc-breezy-L2o", !info.isHeightAuto && "fc-breezy-pKG");
|
||||
},
|
||||
/* Toolbar
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
toolbarClass: (info) => joinClassNames("fc-breezy-KRz fc-breezy-OEz fc-breezy-nYK fc-breezy-dl1 fc-breezy-1sP fc-breezy-dNl fc-breezy-XpK fc-breezy-N2M fc-breezy-Pms fc-breezy-pKG fc-breezy-EAo", !info.borderlessX && "fc-breezy-1Wx"),
|
||||
headerToolbarClass: (info) => joinClassNames("fc-breezy-zi1", !info.borderlessTop && "fc-breezy-ku3", !(info.borderlessTop || info.borderlessX) && "fc-breezy-wko"),
|
||||
footerToolbarClass: (info) => joinClassNames("fc-breezy-ku3", !info.borderlessBottom && "fc-breezy-zi1", !(info.borderlessBottom || info.borderlessX) && "fc-breezy-L2o"),
|
||||
toolbarSectionClass: "fc-breezy-yi0 fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK fc-breezy-Pms",
|
||||
toolbarTitleClass: "fc-breezy-9ZS fc-breezy-C8a fc-breezy-Oiq",
|
||||
buttonGroupClass: (info) => joinClassNames("fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK", !info.hasSelection && "fc-breezy-KzJ fc-breezy-eSM"),
|
||||
buttonClass: (info) => joinClassNames("fc-breezy-bCs fc-breezy-dl6 fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK fc-breezy-9yp fc-breezy-Z9U", info.isIconOnly ? "fc-breezy-Nca" : "fc-breezy-Apf", info.buttonGroup?.hasSelection ? joinClassNames("fc-breezy-KzJ fc-breezy-1OT", info.isSelected
|
||||
? selectedClass
|
||||
: unselectedClass) : joinClassNames("fc-breezy-C8a", info.isPrimary
|
||||
? primaryButtonClass
|
||||
: secondaryButtonClass, info.buttonGroup
|
||||
? "fc-breezy-Ps8 fc-breezy-H1W fc-breezy-g3A fc-breezy-7ss fc-breezy-JIC"
|
||||
: "fc-breezy-KzJ fc-breezy-eSM fc-breezy-wsy")),
|
||||
buttons: {
|
||||
prev: {
|
||||
iconContent: () => chevronDown(joinClassNames(secondaryButtonIconClass, "fc-breezy-z44 fc-breezy-keW")),
|
||||
},
|
||||
next: {
|
||||
iconContent: () => chevronDown(joinClassNames(secondaryButtonIconClass, "fc-breezy-KxI fc-breezy-ZW3")),
|
||||
},
|
||||
prevYear: {
|
||||
iconContent: () => chevronDoubleLeft(joinClassNames(secondaryButtonIconClass, "fc-breezy-asP"))
|
||||
},
|
||||
nextYear: {
|
||||
iconContent: () => chevronDoubleLeft(joinClassNames(secondaryButtonIconClass, "fc-breezy-jmT fc-breezy-jY6"))
|
||||
},
|
||||
},
|
||||
/* Abstract Event
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
eventShortHeight: 50,
|
||||
eventColor: "var(--fc-breezy-event)",
|
||||
eventContrastColor: "var(--fc-breezy-event-contrast)",
|
||||
eventClass: (info) => joinClassNames(info.isDragging && "fc-breezy-n5m", info.event.url && "fc-breezy-JiE", info.isSelected
|
||||
? joinClassNames(outlineWidthClass, info.isDragging && "fc-breezy-tkw")
|
||||
: outlineWidthFocusClass, primaryOutlineColorClass),
|
||||
/* Background Event
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
backgroundEventColor: "var(--fc-breezy-background-event)",
|
||||
backgroundEventClass: "fc-breezy-aPk fc-breezy-jsy fc-breezy-DO7",
|
||||
backgroundEventTitleClass: (info) => joinClassNames("fc-breezy-lMo fc-breezy-L1Y", info.isNarrow
|
||||
? `fc-breezy-iS4 ${xxsTextClass}`
|
||||
: "fc-breezy-3N5 fc-breezy-a3B", "fc-breezy-sI1"),
|
||||
/* Block Event
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
blockEventClass: (info) => joinClassNames("fc-breezy-bCs fc-breezy-eYX fc-breezy-vwH fc-breezy-d0j fc-breezy-DO7", info.isInteractive ? eventFaintPressableClass : eventFaintBgClass, (info.isDragging && !info.isSelected) && "fc-breezy-iTG"),
|
||||
blockEventInnerClass: eventMutedFgClass,
|
||||
blockEventTimeClass: "fc-breezy-TZ4 fc-breezy-pKG fc-breezy-1Zl",
|
||||
blockEventTitleClass: "fc-breezy-TZ4 fc-breezy-pKG fc-breezy-OLq",
|
||||
/* Row Event
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
rowEventClass: (info) => joinClassNames("fc-breezy-Ika fc-breezy-JIC", info.isStart && joinClassNames("fc-breezy-3J4", info.isNarrow ? "fc-breezy-kmj" : "fc-breezy-QUg"), info.isEnd && joinClassNames("fc-breezy-USt", info.isNarrow ? "fc-breezy-Skl" : "fc-breezy-RNO")),
|
||||
rowEventBeforeClass: (info) => joinClassNames(info.isStartResizable && joinClassNames(info.isSelected ? rowTouchResizerClass : rowPointerResizerClass, "fc-breezy-11a")),
|
||||
rowEventAfterClass: (info) => joinClassNames(info.isEndResizable && joinClassNames(info.isSelected ? rowTouchResizerClass : rowPointerResizerClass, "fc-breezy-Tuc")),
|
||||
rowEventInnerClass: (info) => joinClassNames("fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK", info.isNarrow ? xxsTextClass : "fc-breezy-a3B"),
|
||||
rowEventTimeClass: (info) => joinClassNames(info.isNarrow ? "fc-breezy-a7i" : "fc-breezy-C2j", "fc-breezy-1OT"),
|
||||
rowEventTitleClass: (info) => (info.isNarrow ? "fc-breezy-oQ2" : "fc-breezy-aCI"),
|
||||
/* Column Event
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
columnEventClass: (info) => joinClassNames("fc-breezy-1Wx fc-breezy-A3h fc-breezy-9Iz", info.isStart && joinClassNames("fc-breezy-ku3 fc-breezy-wko", info.isNarrow ? "fc-breezy-sEX" : "fc-breezy-zZM"), info.isEnd && joinClassNames("fc-breezy-zi1 fc-breezy-L2o", info.isNarrow ? "fc-breezy-Ika" : "fc-breezy-vUo")),
|
||||
columnEventBeforeClass: (info) => joinClassNames(info.isStartResizable && joinClassNames(info.isSelected ? columnTouchResizerClass : columnPointerResizerClass, "fc-breezy-YDC")),
|
||||
columnEventAfterClass: (info) => joinClassNames(info.isEndResizable && joinClassNames(info.isSelected ? columnTouchResizerClass : columnPointerResizerClass, "fc-breezy-fJL")),
|
||||
columnEventInnerClass: (info) => joinClassNames("fc-breezy-dl1", info.isShort
|
||||
? "fc-breezy-1sP fc-breezy-XpK fc-breezy-NWN fc-breezy-iS4"
|
||||
: joinClassNames("fc-breezy-sgX", info.isNarrow ? "fc-breezy-aCI fc-breezy-2rx" : "fc-breezy-Nca fc-breezy-Jhn"), (info.isShort || info.isNarrow) ? xxsTextClass : "fc-breezy-a3B"),
|
||||
columnEventTimeClass: (info) => (!info.isShort && (info.isNarrow ? "fc-breezy-166" : "fc-breezy-4dx")),
|
||||
columnEventTitleClass: (info) => joinClassNames(!info.isShort && (info.isNarrow ? "fc-breezy-2rx" : "fc-breezy-Jhn"), "fc-breezy-C8a"),
|
||||
/* More-Link
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
moreLinkClass: `${outlineWidthFocusClass} ${primaryOutlineColorClass}`,
|
||||
moreLinkInnerClass: "fc-breezy-TZ4 fc-breezy-pKG",
|
||||
columnMoreLinkClass: (info) => joinClassNames(info.isNarrow ? "fc-breezy-SEP" : "fc-breezy-V9v", `fc-breezy-wsy fc-breezy-d0j fc-breezy-4MR fc-breezy-KzJ ${strongSolidPressableClass} fc-breezy-vwH fc-breezy-A3h fc-breezy-9Iz`),
|
||||
columnMoreLinkInnerClass: (info) => joinClassNames(info.isNarrow
|
||||
? `fc-breezy-KUX ${xxsTextClass}`
|
||||
: "fc-breezy-iS4 fc-breezy-a3B", "fc-breezy-sI1"),
|
||||
/* Day Header
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
dayHeaderAlign: (info) => info.inPopover ? "start" : "center",
|
||||
dayHeaderClass: (info) => joinClassNames("fc-breezy-E9P", info.inPopover && "fc-breezy-zi1 fc-breezy-EAo fc-breezy-nYK"),
|
||||
dayHeaderInnerClass: (info) => joinClassNames("fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK", (!info.dayNumberText && !info.inPopover)
|
||||
? joinClassNames("fc-breezy-Jhn fc-breezy-Fvv fc-breezy-a3B", info.isNarrow
|
||||
? "fc-breezy-aCI fc-breezy-gMS fc-breezy-t4l"
|
||||
: "fc-breezy-ZrE fc-breezy-bvX fc-breezy-C8a fc-breezy-sI1", info.hasNavLink && mutedHoverButtonClass)
|
||||
: (info.isToday && info.dayNumberText && !info.inPopover)
|
||||
? joinClassNames("fc-breezy-bCs fc-breezy-bvX fc-breezy-hS8", info.isNarrow ? "fc-breezy-TFV" : "fc-breezy-I1A")
|
||||
: joinClassNames("fc-breezy-Fvv", info.inPopover
|
||||
? "fc-breezy-bvX fc-breezy-aCI fc-breezy-2rx"
|
||||
: joinClassNames("fc-breezy-fn8 fc-breezy-TFV fc-breezy-ZrE", info.isNarrow ? "fc-breezy-2tF" : "fc-breezy-X6C"), info.hasNavLink && mutedHoverButtonClass)),
|
||||
dayHeaderContent: (info) => ((!info.dayNumberText && !info.inPopover) ? (u(S, { children: info.text })) : (u(S, { children: info.textParts.map((textPart, i) => (u("span", { className: joinClassNames("fc-breezy-jm6", info.isNarrow ? "fc-breezy-a3B" : "fc-breezy-9yp", textPart.type === "day"
|
||||
? joinClassNames("fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK", !info.isNarrow && "fc-breezy-C8a", (info.isToday && !info.inPopover)
|
||||
? joinClassNames("fc-breezy-cKZ fc-breezy-AAA fc-breezy-E9P", info.isNarrow ? "fc-breezy-MSG" : "fc-breezy-n6w", info.hasNavLink
|
||||
? `${primaryPressableGroupClass} ${outlineWidthGroupFocusClass} ${outlineOffsetClass} ${primaryOutlineColorClass}`
|
||||
: primaryClass)
|
||||
: "fc-breezy-Oiq")
|
||||
: "fc-breezy-t4l"), children: textPart.value }, i))) }))),
|
||||
/* Day Cell
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
dayCellClass: (info) => joinClassNames("fc-breezy-wsy", ((info.isOther || info.isDisabled) && !info.options.businessHours) && "fc-breezy-nYK"),
|
||||
dayCellTopClass: (info) => joinClassNames(info.isNarrow ? "fc-breezy-84e" : "fc-breezy-p7s", "fc-breezy-dl1 fc-breezy-1sP"),
|
||||
dayCellTopInnerClass: (info) => joinClassNames("fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK fc-breezy-E9P fc-breezy-TZ4", info.isNarrow
|
||||
? `fc-breezy-SEP fc-breezy-oM6 ${xxsTextClass}`
|
||||
: "fc-breezy-V9v fc-breezy-TFV fc-breezy-a3B", info.isToday
|
||||
? joinClassNames("fc-breezy-AAA fc-breezy-C8a", info.isNarrow ? "fc-breezy-qvL" : "fc-breezy-Wga", info.text === info.dayNumberText
|
||||
? (info.isNarrow ? "fc-breezy-79F" : "fc-breezy-ilz")
|
||||
: (info.isNarrow ? "fc-breezy-aCI" : "fc-breezy-Nca"), info.hasNavLink
|
||||
? `${primaryPressableClass} ${outlineOffsetClass}`
|
||||
: primaryClass)
|
||||
: joinClassNames("fc-breezy-Skl", info.isNarrow ? "fc-breezy-aCI" : "fc-breezy-Nca", info.hasNavLink && mutedHoverPressableClass, info.isOther
|
||||
? "fc-breezy-mNS"
|
||||
: (info.monthText ? "fc-breezy-sI1" : "fc-breezy-t4l"), info.monthText && "fc-breezy-DIS")),
|
||||
dayCellInnerClass: (info) => joinClassNames(info.inPopover && "fc-breezy-3N5"),
|
||||
/* Popover
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
popoverClass: "fc-breezy-uhF fc-breezy-wsy fc-breezy-LDJ fc-breezy-hny fc-breezy-pKG fc-breezy-1kP fc-breezy-gMS fc-breezy-aNc fc-breezy-n5m",
|
||||
popoverCloseClass: `fc-breezy-bCs fc-breezy-1EY fc-breezy-SKv fc-breezy-aYN fc-breezy-KUX fc-breezy-Fvv ${mutedHoverButtonClass} fc-breezy-Z9U`,
|
||||
popoverCloseContent: () => x(`fc-breezy-XUJ ${mutedFgPressableGroupClass}`),
|
||||
/* Lane
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
dayLaneClass: (info) => joinClassNames("fc-breezy-wsy", info.isMajor ? "fc-breezy-OFc" : "fc-breezy-tTN", info.isDisabled && "fc-breezy-nYK"),
|
||||
dayLaneInnerClass: (info) => (info.isStack
|
||||
? "fc-breezy-gMS"
|
||||
: info.isNarrow ? "fc-breezy-148" : "fc-breezy-rVY"),
|
||||
slotLaneClass: (info) => joinClassNames("fc-breezy-wsy fc-breezy-tTN", info.isMinor && "fc-breezy-TN2"),
|
||||
/* List Day
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
listDaysClass: "fc-breezy-8T7 fc-breezy-g0K fc-breezy-6u7 fc-breezy-E7b fc-breezy-KRz",
|
||||
listDayClass: (info) => joinClassNames(!info.isLast && "fc-breezy-zi1 fc-breezy-tTN", "fc-breezy-dl1 fc-breezy-1sP fc-breezy-EF4 fc-breezy-tgZ"),
|
||||
listDayHeaderClass: "fc-breezy-SEP fc-breezy-yi0 fc-breezy-vVE fc-breezy-kMV fc-breezy-MKw fc-breezy-dl1 fc-breezy-sgX fc-breezy-EF4",
|
||||
listDayHeaderInnerClass: (info) => joinClassNames("fc-breezy-cJ3 fc-breezy-2rx fc-breezy-Nca fc-breezy-PtF fc-breezy-AAA fc-breezy-9yp", !info.level
|
||||
? joinClassNames(info.isToday
|
||||
? joinClassNames("fc-breezy-C8a", info.hasNavLink ? primaryPressableClass : primaryClass)
|
||||
: joinClassNames("fc-breezy-1OT fc-breezy-Oiq", info.hasNavLink && mutedHoverPressableClass))
|
||||
: joinClassNames("fc-breezy-mNS", info.hasNavLink && `${mutedHoverPressableClass} fc-breezy-i3P`)),
|
||||
listDayBodyClass: "fc-breezy-9Qs fc-breezy-1El fc-breezy-2KU fc-breezy-wsy fc-breezy-EAo fc-breezy-KzJ",
|
||||
/* Single Month (in Multi-Month)
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
singleMonthClass: (info) => joinClassNames(info.multiMonthColumns > 1 && "fc-breezy-jD5", (info.multiMonthColumns === 1 && !info.isLast) && "fc-breezy-zi1 fc-breezy-EAo"),
|
||||
singleMonthHeaderClass: (info) => joinClassNames(info.multiMonthColumns > 1
|
||||
? "fc-breezy-x96"
|
||||
: "fc-breezy-End fc-breezy-gmc fc-breezy-zi1 fc-breezy-EAo", "fc-breezy-XpK"),
|
||||
singleMonthHeaderInnerClass: (info) => joinClassNames("fc-breezy-Jhn fc-breezy-Nca fc-breezy-KzJ fc-breezy-9yp fc-breezy-Oiq fc-breezy-C8a", info.hasNavLink && mutedHoverPressableClass),
|
||||
/* Misc Table
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
tableHeaderClass: "fc-breezy-gmc",
|
||||
fillerClass: "fc-breezy-wsy fc-breezy-tTN",
|
||||
dayNarrowWidth: 100,
|
||||
dayHeaderRowClass: "fc-breezy-wsy fc-breezy-tTN",
|
||||
dayRowClass: "fc-breezy-wsy fc-breezy-EAo",
|
||||
slotHeaderRowClass: "fc-breezy-wsy fc-breezy-EAo",
|
||||
slotHeaderInnerClass: "fc-breezy-mNS fc-breezy-XHd",
|
||||
/* Misc Content
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
navLinkClass: `${outlineWidthFocusClass} ${primaryOutlineColorClass}`,
|
||||
inlineWeekNumberClass: (info) => joinClassNames("fc-breezy-1EY fc-breezy-n9G fc-breezy-iD1 fc-breezy-gmc fc-breezy-t4l fc-breezy-TZ4 fc-breezy-4In fc-breezy-zi1 fc-breezy-k8g fc-breezy-3J4 fc-breezy-Hhp", info.isNarrow
|
||||
? `fc-breezy-KUX ${xxsTextClass}`
|
||||
: "fc-breezy-XJa fc-breezy-a3B", info.hasNavLink
|
||||
? `${mutedHoverPressableClass} fc-breezy-07j`
|
||||
: mutedHoverClass),
|
||||
highlightClass: "fc-breezy-xAy",
|
||||
nonBusinessHoursClass: "fc-breezy-nYK",
|
||||
nowIndicatorLineClass: "fc-breezy-CH7 fc-breezy-qQW fc-breezy-D9l",
|
||||
nowIndicatorDotClass: "fc-breezy-aAW fc-breezy-Vpk fc-breezy-D9l fc-breezy-63n fc-breezy-AAA fc-breezy-GBJ fc-breezy-9Iz",
|
||||
/* Resource Day Header
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
resourceDayHeaderAlign: "center",
|
||||
resourceDayHeaderClass: "fc-breezy-wsy",
|
||||
resourceDayHeaderInnerClass: (info) => joinClassNames("fc-breezy-bvX fc-breezy-sI1 fc-breezy-C8a", info.isNarrow ? "fc-breezy-a3B" : "fc-breezy-9yp"),
|
||||
/* Resource Data Grid
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
resourceColumnHeaderClass: "fc-breezy-wsy fc-breezy-tTN fc-breezy-E9P",
|
||||
resourceColumnHeaderInnerClass: "fc-breezy-bvX fc-breezy-sI1 fc-breezy-9yp",
|
||||
resourceColumnResizerClass: "fc-breezy-1EY fc-breezy-AWB fc-breezy-4Tv fc-breezy-dnf",
|
||||
resourceGroupHeaderClass: "fc-breezy-wsy fc-breezy-EAo fc-breezy-pZQ",
|
||||
resourceGroupHeaderInnerClass: "fc-breezy-bvX fc-breezy-sI1 fc-breezy-9yp",
|
||||
resourceCellClass: "fc-breezy-wsy fc-breezy-tTN",
|
||||
resourceCellInnerClass: "fc-breezy-bvX fc-breezy-sI1 fc-breezy-9yp",
|
||||
resourceIndentClass: "fc-breezy-Wga fc-breezy-p9t fc-breezy-E9P",
|
||||
resourceExpanderClass: `fc-breezy-bCs fc-breezy-KUX fc-breezy-AAA ${mutedHoverPressableClass} ${outlineWidthFocusClass} ${primaryOutlineColorClass}`,
|
||||
resourceExpanderContent: (info) => chevronDown(joinClassNames(`fc-breezy-XUJ ${mutedFgPressableGroupClass}`, !info.isExpanded && "fc-breezy-KxI fc-breezy-ZW3")),
|
||||
resourceHeaderRowClass: "fc-breezy-wsy fc-breezy-EAo",
|
||||
resourceRowClass: "fc-breezy-wsy fc-breezy-EAo",
|
||||
resourceColumnDividerClass: "fc-breezy-USt fc-breezy-OFc",
|
||||
/* Timeline Lane
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
resourceGroupLaneClass: "fc-breezy-wsy fc-breezy-EAo fc-breezy-pZQ",
|
||||
resourceLaneClass: "fc-breezy-wsy fc-breezy-EAo",
|
||||
resourceLaneBottomClass: (info) => joinClassNames(info.options.eventOverlap && "fc-breezy-uuA"),
|
||||
timelineBottomClass: "fc-breezy-uuA",
|
||||
},
|
||||
views: {
|
||||
dayGrid: {
|
||||
...dayRowCommonClasses,
|
||||
dayHeaderClass: getNormalDayHeaderBorderClass,
|
||||
dayHeaderDividerClass: "fc-breezy-zi1 fc-breezy-OFc",
|
||||
dayCellClass: getNormalDayCellBorderColorClass,
|
||||
dayCellBottomClass: getShortDayCellBottomClass,
|
||||
backgroundEventInnerClass: "fc-breezy-dl1 fc-breezy-1sP fc-breezy-LMv",
|
||||
},
|
||||
multiMonth: {
|
||||
...dayRowCommonClasses,
|
||||
dayHeaderClass: getNormalDayHeaderBorderClass,
|
||||
dayHeaderDividerClass: (info) => joinClassNames(info.multiMonthColumns === 1 && "fc-breezy-zi1 fc-breezy-OFc fc-breezy-qNs"),
|
||||
dayCellClass: getNormalDayCellBorderColorClass,
|
||||
dayCellBottomClass: getShortDayCellBottomClass,
|
||||
tableBodyClass: (info) => joinClassNames(info.multiMonthColumns > 1 && "fc-breezy-wsy fc-breezy-EAo fc-breezy-KzJ fc-breezy-eSM fc-breezy-pKG"),
|
||||
},
|
||||
timeGrid: {
|
||||
...dayRowCommonClasses,
|
||||
dayHeaderClass: getMutedDayHeaderBorderClass,
|
||||
dayHeaderDividerClass: (info) => joinClassNames("fc-breezy-zi1", info.options.allDaySlot
|
||||
? "fc-breezy-EAo"
|
||||
: "fc-breezy-OFc fc-breezy-rf6"),
|
||||
dayCellClass: getMutedDayCellBorderColorClass,
|
||||
dayCellBottomClass: tallDayCellBottomClass,
|
||||
/* TimeGrid > Week Number Header
|
||||
------------------------------------------------------------------------------------------- */
|
||||
weekNumberHeaderClass: "fc-breezy-XpK fc-breezy-LMv",
|
||||
weekNumberHeaderInnerClass: (info) => joinClassNames("fc-breezy-cGD fc-breezy-TFV fc-breezy-ZrE fc-breezy-t4l fc-breezy-Fvv fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK", info.hasNavLink && mutedHoverPressableClass, info.isNarrow ? "fc-breezy-a3B" : "fc-breezy-9yp"),
|
||||
/* TimeGrid > All-Day Header
|
||||
------------------------------------------------------------------------------------------- */
|
||||
allDayHeaderClass: "fc-breezy-XpK",
|
||||
allDayHeaderInnerClass: (info) => joinClassNames("fc-breezy-rUb fc-breezy-mNS", info.isNarrow ? xxsTextClass : "fc-breezy-a3B"),
|
||||
allDayDividerClass: "fc-breezy-zi1 fc-breezy-OFc fc-breezy-rf6",
|
||||
/* TimeGrid > Slot Header
|
||||
------------------------------------------------------------------------------------------- */
|
||||
slotHeaderClass: "fc-breezy-LMv",
|
||||
slotHeaderInnerClass: (info) => joinClassNames("fc-breezy-eYX fc-breezy-GFf fc-breezy-2tF", info.isNarrow
|
||||
? `fc-breezy-Cy2 ${xxsTextClass}`
|
||||
: "fc-breezy-uqG fc-breezy-a3B", info.isFirst && "fc-breezy-pps"),
|
||||
slotHeaderDividerClass: "fc-breezy-USt fc-breezy-tTN",
|
||||
},
|
||||
list: {
|
||||
/* List-View > List-Item Event
|
||||
------------------------------------------------------------------------------------------- */
|
||||
listItemEventClass: (info) => joinClassNames("fc-breezy-bCs fc-breezy-lqx fc-breezy-XpK fc-breezy-wwb", !info.isLast && "fc-breezy-zi1 fc-breezy-tTN", info.isInteractive
|
||||
? faintHoverPressableClass
|
||||
: faintHoverClass),
|
||||
listItemEventBeforeClass: "fc-breezy-5JF fc-breezy-lNM fc-breezy-AAA",
|
||||
listItemEventInnerClass: "fc-breezy-dl1 fc-breezy-1sP fc-breezy-XpK fc-breezy-wwb fc-breezy-9yp",
|
||||
listItemEventTimeClass: "fc-breezy-yi0 fc-breezy-roZ fc-breezy-kMV fc-breezy-TZ4 fc-breezy-pKG fc-breezy-IPx fc-breezy-t4l",
|
||||
listItemEventTitleClass: (info) => joinClassNames("fc-breezy-1El fc-breezy-2KU fc-breezy-1OT fc-breezy-TZ4 fc-breezy-pKG fc-breezy-sI1", info.event.url && "fc-breezy-Ogp"),
|
||||
/* No-Events Screen
|
||||
------------------------------------------------------------------------------------------- */
|
||||
noEventsClass: "fc-breezy-1El fc-breezy-dl1 fc-breezy-sgX fc-breezy-XpK fc-breezy-E9P",
|
||||
noEventsInnerClass: "fc-breezy-P9h fc-breezy-t4l",
|
||||
},
|
||||
resourceDayGrid: {
|
||||
resourceDayHeaderClass: (info) => (info.isMajor
|
||||
? "fc-breezy-OFc"
|
||||
: "fc-breezy-EAo"),
|
||||
},
|
||||
resourceTimeGrid: {
|
||||
resourceDayHeaderClass: (info) => (info.isMajor
|
||||
? "fc-breezy-OFc"
|
||||
: "fc-breezy-tTN"),
|
||||
},
|
||||
timeline: {
|
||||
/* Timeline > Row Event
|
||||
------------------------------------------------------------------------------------------- */
|
||||
rowEventClass: (info) => info.isEnd && "fc-breezy-9hC",
|
||||
rowEventInnerClass: (info) => info.options.eventOverlap ? "fc-breezy-Jhn" : "fc-breezy-dl6",
|
||||
/* Timeline > More-Link
|
||||
------------------------------------------------------------------------------------------- */
|
||||
rowMoreLinkClass: `fc-breezy-9hC fc-breezy-Ika fc-breezy-wsy fc-breezy-d0j fc-breezy-4MR fc-breezy-KzJ ${strongSolidPressableClass} fc-breezy-vwH`,
|
||||
rowMoreLinkInnerClass: "fc-breezy-iS4 fc-breezy-sI1 fc-breezy-a3B",
|
||||
/* Timeline > Slot Header
|
||||
------------------------------------------------------------------------------------------- */
|
||||
slotHeaderAlign: (info) => info.isTime ? "start" : "center",
|
||||
slotHeaderClass: (info) => joinClassNames(info.level > 0 && "fc-breezy-wsy fc-breezy-tTN", "fc-breezy-LMv"),
|
||||
slotHeaderInnerClass: (info) => joinClassNames("fc-breezy-GFf fc-breezy-2tF fc-breezy-a3B", info.isTime && joinClassNames("fc-breezy-eYX fc-breezy-OAt", info.isFirst && "fc-breezy-pps"), info.hasNavLink && "fc-breezy-Eu0"),
|
||||
slotHeaderDividerClass: "fc-breezy-zi1 fc-breezy-OFc fc-breezy-qNs",
|
||||
},
|
||||
},
|
||||
};
|
||||
/* SVGs
|
||||
------------------------------------------------------------------------------------------------- */
|
||||
function chevronDown(className) {
|
||||
return u("svg", { className: className, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", children: u("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) });
|
||||
}
|
||||
function chevronDoubleLeft(className) {
|
||||
return u("svg", { className: className, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", children: u("path", { fillRule: "evenodd", d: "M4.72 9.47a.75.75 0 0 0 0 1.06l4.25 4.25a.75.75 0 1 0 1.06-1.06L6.31 10l3.72-3.72a.75.75 0 1 0-1.06-1.06L4.72 9.47Zm9.25-4.25L9.72 9.47a.75.75 0 0 0 0 1.06l4.25 4.25a.75.75 0 1 0 1.06-1.06L11.31 10l3.72-3.72a.75.75 0 0 0-1.06-1.06Z", clipRule: "evenodd" }) });
|
||||
}
|
||||
function x(className) {
|
||||
return u("svg", { className: className, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", children: u("path", { d: "M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z" }) });
|
||||
}
|
||||
|
||||
globalPlugins.push(index);
|
||||
|
||||
})(FullCalendar.Shared);
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
|
||||
:root {
|
||||
/* primary */
|
||||
--fc-breezy-primary: #e11d48;
|
||||
--fc-breezy-primary-over: #f43f5e;
|
||||
--fc-breezy-primary-foreground: #ffffff;
|
||||
|
||||
/* secondary */
|
||||
--fc-breezy-secondary: var(--fc-breezy-background);
|
||||
--fc-breezy-secondary-over: var(--fc-breezy-faint);
|
||||
--fc-breezy-secondary-border: var(--fc-breezy-strong-border);
|
||||
--fc-breezy-secondary-foreground: var(--fc-breezy-strong-foreground);
|
||||
--fc-breezy-secondary-icon: var(--fc-breezy-faint-foreground);
|
||||
--fc-breezy-secondary-icon-over: var(--fc-breezy-muted-foreground);
|
||||
|
||||
/* calendar content */
|
||||
--fc-breezy-event: #ec4899;
|
||||
--fc-breezy-event-contrast: #fff;
|
||||
--fc-breezy-background-event: #f97316;
|
||||
--fc-breezy-highlight: #ef444414;
|
||||
--fc-breezy-now: #ef4444;
|
||||
|
||||
/* controls */
|
||||
--fc-breezy-selected: var(--fc-breezy-strong);
|
||||
|
||||
/* popover */
|
||||
--fc-breezy-popover: var(--fc-breezy-background);
|
||||
--fc-breezy-popover-border: var(--fc-breezy-strong-border);
|
||||
|
||||
/* neutral backgrounds */
|
||||
--fc-breezy-background: #ffffff;
|
||||
--fc-breezy-faint: #00000005;
|
||||
--fc-breezy-muted: #0000000D;
|
||||
--fc-breezy-strong: #0000001A;
|
||||
--fc-breezy-stronger: #00000024;
|
||||
--fc-breezy-strongest: #0000002E;
|
||||
|
||||
/* neutral foregrounds */
|
||||
--fc-breezy-foreground: #374151;
|
||||
--fc-breezy-faint-foreground: #9ca3af;
|
||||
--fc-breezy-muted-foreground: #6b7280;
|
||||
--fc-breezy-strong-foreground: #111827;
|
||||
|
||||
/* neutral borders */
|
||||
--fc-breezy-border: #e5e7eb;
|
||||
--fc-breezy-muted-border: #f3f4f6;
|
||||
--fc-breezy-strong-border: #d1d5db;
|
||||
}
|
||||
|
||||
@media not print {
|
||||
[data-color-scheme=dark] {
|
||||
/* secondary */
|
||||
--fc-breezy-secondary: var(--fc-breezy-muted);
|
||||
--fc-breezy-secondary-over: var(--fc-breezy-strong);
|
||||
--fc-breezy-secondary-border: var(--fc-breezy-muted-border);
|
||||
--fc-breezy-secondary-foreground: var(--fc-breezy-strong-foreground);
|
||||
--fc-breezy-secondary-icon: var(--fc-breezy-muted-foreground);
|
||||
--fc-breezy-secondary-icon-over: var(--fc-breezy-foreground);
|
||||
|
||||
/* calendar content */
|
||||
--fc-breezy-highlight: #f8717114;
|
||||
|
||||
/* controls */
|
||||
--fc-breezy-selected: var(--fc-breezy-muted);
|
||||
|
||||
/* popovers */
|
||||
--fc-breezy-popover: #1f2937;
|
||||
--fc-breezy-popover-border: var(--fc-breezy-border);
|
||||
|
||||
/* neutral backgrounds */
|
||||
--fc-breezy-background: #111827;
|
||||
--fc-breezy-faint: #ffffff08;
|
||||
--fc-breezy-muted: #ffffff12;
|
||||
--fc-breezy-strong: #ffffff1F;
|
||||
--fc-breezy-stronger: #ffffff29;
|
||||
--fc-breezy-strongest: #ffffff33;
|
||||
|
||||
/* neutral foregrounds */
|
||||
--fc-breezy-foreground: #d1d5db;
|
||||
--fc-breezy-muted-foreground: #9ca3af;
|
||||
--fc-breezy-faint-foreground: #6b7280;
|
||||
--fc-breezy-strong-foreground: #ffffff;
|
||||
|
||||
/* neutral borders */
|
||||
--fc-breezy-border: #ffffff1A;
|
||||
--fc-breezy-muted-border: #ffffff0D;
|
||||
--fc-breezy-strong-border: #ffffff26;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,24 @@
|
|||
console.log("Youpi Calendar !");
|
||||
|
||||
mw.hook('wikipage.content').add(function() {
|
||||
console.log("Content loaded ?");
|
||||
console.log(FullCalendar);
|
||||
var elems = document.getElementsByClassName('mw-crans-fullcalendar');
|
||||
for (let el of elems) {
|
||||
try {
|
||||
const url = new URL(el.dataset.ics);
|
||||
let calendar = new FullCalendar.Calendar(el, {
|
||||
events: {
|
||||
url: url.href,
|
||||
format: 'ics'
|
||||
}
|
||||
});
|
||||
calendar.render();
|
||||
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
console.log(elems);
|
||||
});
|
||||
|
|
@ -2,14 +2,6 @@ diff --git a/CategoryLockdown.php b/CategoryLockdown.php
|
|||
index 3309c52..c4f4cb0 100644
|
||||
--- a/CategoryLockdown.php
|
||||
+++ b/CategoryLockdown.php
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use MediaWiki\MediaWikiServices;
|
||||
+use MediaWiki\Title\Title; // To remove at the next upade
|
||||
|
||||
class CategoryLockdown {
|
||||
|
||||
@@ -15,6 +16,8 @@ class CategoryLockdown {
|
||||
*/
|
||||
public static function onGetUserPermissionsErrors( $title, $user, $action, &$result ) {
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ in
|
|||
rev = "REL" + major + "_" + minor;
|
||||
# Le SHA doit être changé à chaque nouveau commit de traduction.
|
||||
# Pas de meilleure solution à ma connaissance pour suivre les releases.
|
||||
sha256 = "sha256-lrBhevfXs1Eyi69uvF/+qs/+wzOsKm0SLbnY8lD6pp4=";
|
||||
sha256 = "sha256-KrqGAvw0/cJdPijF8aOU58l8ZlCunzkGYjDjwyAQpzI=";
|
||||
};
|
||||
patches = [
|
||||
# Cette extension s’occupe des du contrôle d’accès du Wiki
|
||||
|
|
@ -244,6 +244,9 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
# FullCalendar
|
||||
FullCalendar = ./FullCalendar;
|
||||
|
||||
# Popups
|
||||
Popups = pkgs.fetchFromGitHub {
|
||||
name = "Popups";
|
||||
|
|
@ -252,7 +255,7 @@ in
|
|||
rev = "REL" + major + "_" + minor;
|
||||
# Le SHA doit être changé à chaque nouveau commit de traduction.
|
||||
# Pas de meilleure solution à ma connaissance pour suivre les releases.
|
||||
sha256 = "sha256-wNI6LnpGrpUA96Nr+4+KbuislKXTGyyua2F3N+t2O1s=";
|
||||
sha256 = "sha256-4lsh6b2Xyg7B6W7ZKkH3BhdzFpWrU5gDDZRwXAfcjIw=";
|
||||
};
|
||||
|
||||
# Auth
|
||||
|
|
|
|||
Loading…
Reference in New Issue