[REF] calendar,web: update to FullCalendar v4
This commit updates the FullCalendar library from v3 to v4.
The purpose of this update for us is to add a proper support of the
drag-and-drop of events on mobile.
But also to fix scrolling issues present mainly on smaller screens. In
those configurations multi/inner-scrolls were present resulting into
either the inability to properly scroll the desired content or even
blocking alltogether the scroll.
As a nice-to-have feature, the version 4 removes its dependency on the
jQuery library, allowing a faster loading of a bigger set of events.
Last but not least, this version also reduces its dependency on the
Moment.js library (but still keeps a binding to it for compatibility
purpose).
This commit focus only on the update of the library itself and the
adaptation of the related code to keep it working. Further
enhancements/fixes will be done later on.
To do so it modifies the following points:
* Update the library in itself (js, css...).
* Convert all FullCalendar's method calls to the new syntax (e.g.
`$calendar.fullCalendar('destroy')` becomes `calendar.destroy()`).
* Add a utility method to convert v4 events into the old v3 event
structure to ease the transition from one version to the other.
* Wrap all event's custom fields into a new event's
`extendedProps` object (as its the new way of storing them instead of
directly as a prop. of the event).
* Adapt `slotLabelFormat` and `weekNumberCalculation`.
* Use the view's new names:
** `agendaDay` -> `timeGridDay`
** `agendaWeek` -> `timeGridWeek`
** `month` -> `dayGridMonth`
* Use the option's new names:
** `viewRender` -> `datesRender`
** `eventMouseover` -> `eventMouseEnter`
** `eventMouseout` -> `eventMouseLeave`
** `isRTL` -> `dir`
** `selectHelper` -> `selectMirror`
** `weekNumberTitle` -> `weekLabel`
Ref:
https://fullcalendar.io/docs/upgrading-from-v3
Task ID: 2092550
This commit is contained in:
committed by
Pierre Paridans
parent
d2851b2039
commit
ebce7719b6
@@ -25,7 +25,7 @@ var AttendeeCalendarPopover = CalendarPopover.extend({
|
||||
_.each(this.fields.attendee_status.selection, function (selection) {
|
||||
self.statusInfo[selection[0]] = {text: selection[1], color: self.statusColors[selection[0]]};
|
||||
});
|
||||
this.selectedStatusInfo = this.statusInfo[this.event.record.attendee_status];
|
||||
this.selectedStatusInfo = this.statusInfo[this.event.extendedProps.record.attendee_status];
|
||||
}
|
||||
},
|
||||
|
||||
@@ -37,7 +37,7 @@ var AttendeeCalendarPopover = CalendarPopover.extend({
|
||||
* @return {boolean}
|
||||
*/
|
||||
isCurrentPartnerAttendee() {
|
||||
return this.event.record.partner_ids.includes(session.partner_id);
|
||||
return this.event.extendedProps.record.partner_ids.includes(session.partner_id);
|
||||
},
|
||||
/**
|
||||
* @override
|
||||
@@ -70,7 +70,7 @@ var AttendeeCalendarPopover = CalendarPopover.extend({
|
||||
* @return {boolean}
|
||||
*/
|
||||
_isEventPrivate() {
|
||||
return this.event.record.privacy === 'private';
|
||||
return this.event.extendedProps.record.privacy === 'private';
|
||||
},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
@@ -90,7 +90,7 @@ var AttendeeCalendarPopover = CalendarPopover.extend({
|
||||
method: 'change_attendee_status',
|
||||
args: [this.event.id, selectedStatus],
|
||||
}).then(function () {
|
||||
self.event.record.attendee_status = selectedStatus; // FIXEME: Maybe we have to reload view
|
||||
self.event.extendedProps.record.attendee_status = selectedStatus; // FIXEME: Maybe we have to reload view
|
||||
self.$('.o-calendar-attendee-status-text').text(self.statusInfo[selectedStatus].text);
|
||||
self.$('.o-calendar-attendee-status-icon').removeClass(_.values(self.statusColors).join(' ')).addClass(self.statusInfo[selectedStatus].color);
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2015 Adam Shaw
|
||||
Copyright (c) 2019 Adam Shaw
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
.fc.fc-bootstrap a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.fc.fc-bootstrap a[data-goto]:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.fc-bootstrap hr.fc-divider {
|
||||
border-color: inherit;
|
||||
}
|
||||
|
||||
.fc-bootstrap .fc-today.alert {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.fc-bootstrap a.fc-event:not([href]):not([tabindex]) {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.fc-bootstrap .fc-popover.card {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/* Popover
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-bootstrap .fc-popover .card-body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* TimeGrid Slats (lines that run horizontally)
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-bootstrap .fc-time-grid .fc-slats table {
|
||||
/* some themes have background color. see through to slats */
|
||||
background: none;
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*!
|
||||
FullCalendar Bootstrap Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarBootstrap = {}, global.FullCalendar));
|
||||
}(this, function (exports, core) { 'use strict';
|
||||
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
/* global Reflect, Promise */
|
||||
|
||||
var extendStatics = function(d, b) {
|
||||
extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
|
||||
function __extends(d, b) {
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
}
|
||||
|
||||
var BootstrapTheme = /** @class */ (function (_super) {
|
||||
__extends(BootstrapTheme, _super);
|
||||
function BootstrapTheme() {
|
||||
return _super !== null && _super.apply(this, arguments) || this;
|
||||
}
|
||||
return BootstrapTheme;
|
||||
}(core.Theme));
|
||||
BootstrapTheme.prototype.classes = {
|
||||
widget: 'fc-bootstrap',
|
||||
tableGrid: 'table-bordered',
|
||||
tableList: 'table',
|
||||
tableListHeading: 'table-active',
|
||||
buttonGroup: 'btn-group',
|
||||
button: 'btn btn-primary',
|
||||
buttonActive: 'active',
|
||||
today: 'alert alert-info',
|
||||
popover: 'card card-primary',
|
||||
popoverHeader: 'card-header',
|
||||
popoverContent: 'card-body',
|
||||
// day grid
|
||||
// for left/right border color when border is inset from edges (all-day in timeGrid view)
|
||||
// avoid `table` class b/c don't want margins/padding/structure. only border color.
|
||||
headerRow: 'table-bordered',
|
||||
dayRow: 'table-bordered',
|
||||
// list view
|
||||
listView: 'card card-primary'
|
||||
};
|
||||
BootstrapTheme.prototype.baseIconClass = 'fa';
|
||||
BootstrapTheme.prototype.iconClasses = {
|
||||
close: 'fa-times',
|
||||
prev: 'fa-chevron-left',
|
||||
next: 'fa-chevron-right',
|
||||
prevYear: 'fa-angle-double-left',
|
||||
nextYear: 'fa-angle-double-right'
|
||||
};
|
||||
BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
|
||||
BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
|
||||
BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
|
||||
var main = core.createPlugin({
|
||||
themeClasses: {
|
||||
bootstrap: BootstrapTheme
|
||||
}
|
||||
});
|
||||
|
||||
exports.BootstrapTheme = BootstrapTheme;
|
||||
exports.default = main;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.af = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var af = {
|
||||
code: "af",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Vorige",
|
||||
next: "Volgende",
|
||||
today: "Vandag",
|
||||
year: "Jaar",
|
||||
month: "Maand",
|
||||
week: "Week",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
allDayHtml: "Heeldag",
|
||||
eventLimitText: "Addisionele",
|
||||
noEventsMessage: "Daar is geen gebeurtenisse nie"
|
||||
};
|
||||
|
||||
return af;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-dz'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arDz = {
|
||||
code: "ar-dz",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 4 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arDz;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-kw'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arKw = {
|
||||
code: "ar-kw",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arKw;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ly'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arLy = {
|
||||
code: "ar-ly",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arLy;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ma'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arMa = {
|
||||
code: "ar-ma",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arMa;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-sa'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arSa = {
|
||||
code: "ar-sa",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 6 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arSa;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-tn'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arTn = {
|
||||
code: "ar-tn",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arTn;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ar = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ar = {
|
||||
code: "ar",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return ar;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.az = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var az = {
|
||||
code: "az",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Əvvəl",
|
||||
next: "Sonra",
|
||||
today: "Bu Gün",
|
||||
month: "Ay",
|
||||
week: "Həftə",
|
||||
day: "Gün",
|
||||
list: "Gündəm"
|
||||
},
|
||||
weekLabel: "Həftə",
|
||||
allDayText: "Bütün Gün",
|
||||
eventLimitText: function (n) {
|
||||
return "+ daha çox " + n;
|
||||
},
|
||||
noEventsMessage: "Göstərmək üçün hadisə yoxdur"
|
||||
};
|
||||
|
||||
return az;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bg = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var bg = {
|
||||
code: "bg",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "назад",
|
||||
next: "напред",
|
||||
today: "днес",
|
||||
month: "Месец",
|
||||
week: "Седмица",
|
||||
day: "Ден",
|
||||
list: "График"
|
||||
},
|
||||
allDayText: "Цял ден",
|
||||
eventLimitText: function (n) {
|
||||
return "+още " + n;
|
||||
},
|
||||
noEventsMessage: "Няма събития за показване"
|
||||
};
|
||||
|
||||
return bg;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bs = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var bs = {
|
||||
code: "bs",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prošli",
|
||||
next: "Sljedeći",
|
||||
today: "Danas",
|
||||
month: "Mjesec",
|
||||
week: "Sedmica",
|
||||
day: "Dan",
|
||||
list: "Raspored"
|
||||
},
|
||||
weekLabel: "Sed",
|
||||
allDayText: "Cijeli dan",
|
||||
eventLimitText: function (n) {
|
||||
return "+ još " + n;
|
||||
},
|
||||
noEventsMessage: "Nema događaja za prikazivanje"
|
||||
};
|
||||
|
||||
return bs;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ca = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ca = {
|
||||
code: "ca",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Anterior",
|
||||
next: "Següent",
|
||||
today: "Avui",
|
||||
month: "Mes",
|
||||
week: "Setmana",
|
||||
day: "Dia",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Set",
|
||||
allDayText: "Tot el dia",
|
||||
eventLimitText: "més",
|
||||
noEventsMessage: "No hi ha esdeveniments per mostrar"
|
||||
};
|
||||
|
||||
return ca;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.cs = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var cs = {
|
||||
code: "cs",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Dříve",
|
||||
next: "Později",
|
||||
today: "Nyní",
|
||||
month: "Měsíc",
|
||||
week: "Týden",
|
||||
day: "Den",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Týd",
|
||||
allDayText: "Celý den",
|
||||
eventLimitText: function (n) {
|
||||
return "+další: " + n;
|
||||
},
|
||||
noEventsMessage: "Žádné akce k zobrazení"
|
||||
};
|
||||
|
||||
return cs;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.da = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var da = {
|
||||
code: "da",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Forrige",
|
||||
next: "Næste",
|
||||
today: "I dag",
|
||||
month: "Måned",
|
||||
week: "Uge",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Uge",
|
||||
allDayText: "Hele dagen",
|
||||
eventLimitText: "flere",
|
||||
noEventsMessage: "Ingen arrangementer at vise"
|
||||
};
|
||||
|
||||
return da;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.de = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var de = {
|
||||
code: "de",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Zurück",
|
||||
next: "Vor",
|
||||
today: "Heute",
|
||||
year: "Jahr",
|
||||
month: "Monat",
|
||||
week: "Woche",
|
||||
day: "Tag",
|
||||
list: "Terminübersicht"
|
||||
},
|
||||
weekLabel: "KW",
|
||||
allDayText: "Ganztägig",
|
||||
eventLimitText: function (n) {
|
||||
return "+ weitere " + n;
|
||||
},
|
||||
noEventsMessage: "Keine Ereignisse anzuzeigen"
|
||||
};
|
||||
|
||||
return de;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.el = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var el = {
|
||||
code: "el",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Προηγούμενος",
|
||||
next: "Επόμενος",
|
||||
today: "Σήμερα",
|
||||
month: "Μήνας",
|
||||
week: "Εβδομάδα",
|
||||
day: "Ημέρα",
|
||||
list: "Ατζέντα"
|
||||
},
|
||||
weekLabel: "Εβδ",
|
||||
allDayText: "Ολοήμερο",
|
||||
eventLimitText: "περισσότερα",
|
||||
noEventsMessage: "Δεν υπάρχουν γεγονότα προς εμφάνιση"
|
||||
};
|
||||
|
||||
return el;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,17 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-au'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var enAu = {
|
||||
code: "en-au",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
};
|
||||
|
||||
return enAu;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,17 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-gb'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var enGb = {
|
||||
code: "en-gb",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
};
|
||||
|
||||
return enGb;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,17 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-nz'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var enNz = {
|
||||
code: "en-nz",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
};
|
||||
|
||||
return enNz;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['es-us'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var esUs = {
|
||||
code: "es",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 6 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Ant",
|
||||
next: "Sig",
|
||||
today: "Hoy",
|
||||
month: "Mes",
|
||||
week: "Semana",
|
||||
day: "Día",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Todo<br/>el día",
|
||||
eventLimitText: "más",
|
||||
noEventsMessage: "No hay eventos para mostrar"
|
||||
};
|
||||
|
||||
return esUs;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.es = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var es = {
|
||||
code: "es",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Ant",
|
||||
next: "Sig",
|
||||
today: "Hoy",
|
||||
month: "Mes",
|
||||
week: "Semana",
|
||||
day: "Día",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Todo<br/>el día",
|
||||
eventLimitText: "más",
|
||||
noEventsMessage: "No hay eventos para mostrar"
|
||||
};
|
||||
|
||||
return es;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.et = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var et = {
|
||||
code: "et",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Eelnev",
|
||||
next: "Järgnev",
|
||||
today: "Täna",
|
||||
month: "Kuu",
|
||||
week: "Nädal",
|
||||
day: "Päev",
|
||||
list: "Päevakord"
|
||||
},
|
||||
weekLabel: "näd",
|
||||
allDayText: "Kogu päev",
|
||||
eventLimitText: function (n) {
|
||||
return "+ veel " + n;
|
||||
},
|
||||
noEventsMessage: "Kuvamiseks puuduvad sündmused"
|
||||
};
|
||||
|
||||
return et;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.eu = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var eu = {
|
||||
code: "eu",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Aur",
|
||||
next: "Hur",
|
||||
today: "Gaur",
|
||||
month: "Hilabetea",
|
||||
week: "Astea",
|
||||
day: "Eguna",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "As",
|
||||
allDayHtml: "Egun<br/>osoa",
|
||||
eventLimitText: "gehiago",
|
||||
noEventsMessage: "Ez dago ekitaldirik erakusteko"
|
||||
};
|
||||
|
||||
return eu;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fa = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var fa = {
|
||||
code: "fa",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "قبلی",
|
||||
next: "بعدی",
|
||||
today: "امروز",
|
||||
month: "ماه",
|
||||
week: "هفته",
|
||||
day: "روز",
|
||||
list: "برنامه"
|
||||
},
|
||||
weekLabel: "هف",
|
||||
allDayText: "تمام روز",
|
||||
eventLimitText: function (n) {
|
||||
return "بیش از " + n;
|
||||
},
|
||||
noEventsMessage: "هیچ رویدادی به نمایش"
|
||||
};
|
||||
|
||||
return fa;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fi = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var fi = {
|
||||
code: "fi",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Edellinen",
|
||||
next: "Seuraava",
|
||||
today: "Tänään",
|
||||
month: "Kuukausi",
|
||||
week: "Viikko",
|
||||
day: "Päivä",
|
||||
list: "Tapahtumat"
|
||||
},
|
||||
weekLabel: "Vk",
|
||||
allDayText: "Koko päivä",
|
||||
eventLimitText: "lisää",
|
||||
noEventsMessage: "Ei näytettäviä tapahtumia"
|
||||
};
|
||||
|
||||
return fi;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,27 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ca'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var frCa = {
|
||||
code: "fr",
|
||||
buttonText: {
|
||||
prev: "Précédent",
|
||||
next: "Suivant",
|
||||
today: "Aujourd'hui",
|
||||
year: "Année",
|
||||
month: "Mois",
|
||||
week: "Semaine",
|
||||
day: "Jour",
|
||||
list: "Mon planning"
|
||||
},
|
||||
weekLabel: "Sem.",
|
||||
allDayHtml: "Toute la<br/>journée",
|
||||
eventLimitText: "en plus",
|
||||
noEventsMessage: "Aucun événement à afficher"
|
||||
};
|
||||
|
||||
return frCa;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ch'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var frCh = {
|
||||
code: "fr-ch",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Précédent",
|
||||
next: "Suivant",
|
||||
today: "Courant",
|
||||
year: "Année",
|
||||
month: "Mois",
|
||||
week: "Semaine",
|
||||
day: "Jour",
|
||||
list: "Mon planning"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Toute la<br/>journée",
|
||||
eventLimitText: "en plus",
|
||||
noEventsMessage: "Aucun événement à afficher"
|
||||
};
|
||||
|
||||
return frCh;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fr = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var fr = {
|
||||
code: "fr",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Précédent",
|
||||
next: "Suivant",
|
||||
today: "Aujourd'hui",
|
||||
year: "Année",
|
||||
month: "Mois",
|
||||
week: "Semaine",
|
||||
day: "Jour",
|
||||
list: "Planning"
|
||||
},
|
||||
weekLabel: "Sem.",
|
||||
allDayHtml: "Toute la<br/>journée",
|
||||
eventLimitText: "en plus",
|
||||
noEventsMessage: "Aucun événement à afficher"
|
||||
};
|
||||
|
||||
return fr;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.gl = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var gl = {
|
||||
code: "gl",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Ant",
|
||||
next: "Seg",
|
||||
today: "Hoxe",
|
||||
month: "Mes",
|
||||
week: "Semana",
|
||||
day: "Día",
|
||||
list: "Axenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Todo<br/>o día",
|
||||
eventLimitText: "máis",
|
||||
noEventsMessage: "Non hai eventos para amosar"
|
||||
};
|
||||
|
||||
return gl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,27 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.he = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var he = {
|
||||
code: "he",
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "הקודם",
|
||||
next: "הבא",
|
||||
today: "היום",
|
||||
month: "חודש",
|
||||
week: "שבוע",
|
||||
day: "יום",
|
||||
list: "סדר יום"
|
||||
},
|
||||
allDayText: "כל היום",
|
||||
eventLimitText: "אחר",
|
||||
noEventsMessage: "אין אירועים להצגה",
|
||||
weekLabel: "שבוע"
|
||||
};
|
||||
|
||||
return he;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hi = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var hi = {
|
||||
code: "hi",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 6 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "पिछला",
|
||||
next: "अगला",
|
||||
today: "आज",
|
||||
month: "महीना",
|
||||
week: "सप्ताह",
|
||||
day: "दिन",
|
||||
list: "कार्यसूची"
|
||||
},
|
||||
weekLabel: "हफ्ता",
|
||||
allDayText: "सभी दिन",
|
||||
eventLimitText: function (n) {
|
||||
return "+अधिक " + n;
|
||||
},
|
||||
noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए"
|
||||
};
|
||||
|
||||
return hi;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hr = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var hr = {
|
||||
code: "hr",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prijašnji",
|
||||
next: "Sljedeći",
|
||||
today: "Danas",
|
||||
month: "Mjesec",
|
||||
week: "Tjedan",
|
||||
day: "Dan",
|
||||
list: "Raspored"
|
||||
},
|
||||
weekLabel: "Tje",
|
||||
allDayText: "Cijeli dan",
|
||||
eventLimitText: function (n) {
|
||||
return "+ još " + n;
|
||||
},
|
||||
noEventsMessage: "Nema događaja za prikaz"
|
||||
};
|
||||
|
||||
return hr;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hu = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var hu = {
|
||||
code: "hu",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "vissza",
|
||||
next: "előre",
|
||||
today: "ma",
|
||||
month: "Hónap",
|
||||
week: "Hét",
|
||||
day: "Nap",
|
||||
list: "Napló"
|
||||
},
|
||||
weekLabel: "Hét",
|
||||
allDayText: "Egész nap",
|
||||
eventLimitText: "további",
|
||||
noEventsMessage: "Nincs megjeleníthető esemény"
|
||||
};
|
||||
|
||||
return hu;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.id = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var id = {
|
||||
code: "id",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "mundur",
|
||||
next: "maju",
|
||||
today: "hari ini",
|
||||
month: "Bulan",
|
||||
week: "Minggu",
|
||||
day: "Hari",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Mg",
|
||||
allDayHtml: "Sehari<br/>penuh",
|
||||
eventLimitText: "lebih",
|
||||
noEventsMessage: "Tidak ada acara untuk ditampilkan"
|
||||
};
|
||||
|
||||
return id;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.is = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var is = {
|
||||
code: "is",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Fyrri",
|
||||
next: "Næsti",
|
||||
today: "Í dag",
|
||||
month: "Mánuður",
|
||||
week: "Vika",
|
||||
day: "Dagur",
|
||||
list: "Dagskrá"
|
||||
},
|
||||
weekLabel: "Vika",
|
||||
allDayHtml: "Allan<br/>daginn",
|
||||
eventLimitText: "meira",
|
||||
noEventsMessage: "Engir viðburðir til að sýna"
|
||||
};
|
||||
|
||||
return is;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.it = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var it = {
|
||||
code: "it",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prec",
|
||||
next: "Succ",
|
||||
today: "Oggi",
|
||||
month: "Mese",
|
||||
week: "Settimana",
|
||||
day: "Giorno",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Tutto il<br/>giorno",
|
||||
eventLimitText: function (n) {
|
||||
return "+altri " + n;
|
||||
},
|
||||
noEventsMessage: "Non ci sono eventi da visualizzare"
|
||||
};
|
||||
|
||||
return it;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,28 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ja = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ja = {
|
||||
code: "ja",
|
||||
buttonText: {
|
||||
prev: "前",
|
||||
next: "次",
|
||||
today: "今日",
|
||||
month: "月",
|
||||
week: "週",
|
||||
day: "日",
|
||||
list: "予定リスト"
|
||||
},
|
||||
weekLabel: "週",
|
||||
allDayText: "終日",
|
||||
eventLimitText: function (n) {
|
||||
return "他 " + n + " 件";
|
||||
},
|
||||
noEventsMessage: "表示する予定はありません"
|
||||
};
|
||||
|
||||
return ja;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ka = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ka = {
|
||||
code: "ka",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7
|
||||
},
|
||||
buttonText: {
|
||||
prev: "წინა",
|
||||
next: "შემდეგი",
|
||||
today: "დღეს",
|
||||
month: "თვე",
|
||||
week: "კვირა",
|
||||
day: "დღე",
|
||||
list: "დღის წესრიგი"
|
||||
},
|
||||
weekLabel: "კვ",
|
||||
allDayText: "მთელი დღე",
|
||||
eventLimitText: function (n) {
|
||||
return "+ კიდევ " + n;
|
||||
},
|
||||
noEventsMessage: "ღონისძიებები არ არის"
|
||||
};
|
||||
|
||||
return ka;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.kk = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var kk = {
|
||||
code: "kk",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Алдыңғы",
|
||||
next: "Келесі",
|
||||
today: "Бүгін",
|
||||
month: "Ай",
|
||||
week: "Апта",
|
||||
day: "Күн",
|
||||
list: "Күн тәртібі"
|
||||
},
|
||||
weekLabel: "Не",
|
||||
allDayText: "Күні бойы",
|
||||
eventLimitText: function (n) {
|
||||
return "+ тағы " + n;
|
||||
},
|
||||
noEventsMessage: "Көрсету үшін оқиғалар жоқ"
|
||||
};
|
||||
|
||||
return kk;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,26 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ko = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ko = {
|
||||
code: "ko",
|
||||
buttonText: {
|
||||
prev: "이전달",
|
||||
next: "다음달",
|
||||
today: "오늘",
|
||||
month: "월",
|
||||
week: "주",
|
||||
day: "일",
|
||||
list: "일정목록"
|
||||
},
|
||||
weekLabel: "주",
|
||||
allDayText: "종일",
|
||||
eventLimitText: "개",
|
||||
noEventsMessage: "일정이 없습니다"
|
||||
};
|
||||
|
||||
return ko;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lb = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var lb = {
|
||||
code: "lb",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Zréck",
|
||||
next: "Weider",
|
||||
today: "Haut",
|
||||
month: "Mount",
|
||||
week: "Woch",
|
||||
day: "Dag",
|
||||
list: "Terminiwwersiicht"
|
||||
},
|
||||
weekLabel: "W",
|
||||
allDayText: "Ganzen Dag",
|
||||
eventLimitText: "méi",
|
||||
noEventsMessage: "Nee Evenementer ze affichéieren"
|
||||
};
|
||||
|
||||
return lb;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lt = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var lt = {
|
||||
code: "lt",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Atgal",
|
||||
next: "Pirmyn",
|
||||
today: "Šiandien",
|
||||
month: "Mėnuo",
|
||||
week: "Savaitė",
|
||||
day: "Diena",
|
||||
list: "Darbotvarkė"
|
||||
},
|
||||
weekLabel: "SAV",
|
||||
allDayText: "Visą dieną",
|
||||
eventLimitText: "daugiau",
|
||||
noEventsMessage: "Nėra įvykių rodyti"
|
||||
};
|
||||
|
||||
return lt;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lv = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var lv = {
|
||||
code: "lv",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Iepr.",
|
||||
next: "Nāk.",
|
||||
today: "Šodien",
|
||||
month: "Mēnesis",
|
||||
week: "Nedēļa",
|
||||
day: "Diena",
|
||||
list: "Dienas kārtība"
|
||||
},
|
||||
weekLabel: "Ned.",
|
||||
allDayText: "Visu dienu",
|
||||
eventLimitText: function (n) {
|
||||
return "+vēl " + n;
|
||||
},
|
||||
noEventsMessage: "Nav notikumu"
|
||||
};
|
||||
|
||||
return lv;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,28 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.mk = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var mk = {
|
||||
code: "mk",
|
||||
buttonText: {
|
||||
prev: "претходно",
|
||||
next: "следно",
|
||||
today: "Денес",
|
||||
month: "Месец",
|
||||
week: "Недела",
|
||||
day: "Ден",
|
||||
list: "График"
|
||||
},
|
||||
weekLabel: "Сед",
|
||||
allDayText: "Цел ден",
|
||||
eventLimitText: function (n) {
|
||||
return "+повеќе " + n;
|
||||
},
|
||||
noEventsMessage: "Нема настани за прикажување"
|
||||
};
|
||||
|
||||
return mk;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ms = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ms = {
|
||||
code: "ms",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Sebelum",
|
||||
next: "Selepas",
|
||||
today: "hari ini",
|
||||
month: "Bulan",
|
||||
week: "Minggu",
|
||||
day: "Hari",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Mg",
|
||||
allDayText: "Sepanjang hari",
|
||||
eventLimitText: function (n) {
|
||||
return "masih ada " + n + " acara";
|
||||
},
|
||||
noEventsMessage: "Tiada peristiwa untuk dipaparkan"
|
||||
};
|
||||
|
||||
return ms;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nb = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var nb = {
|
||||
code: "nb",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Forrige",
|
||||
next: "Neste",
|
||||
today: "I dag",
|
||||
month: "Måned",
|
||||
week: "Uke",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Uke",
|
||||
allDayText: "Hele dagen",
|
||||
eventLimitText: "til",
|
||||
noEventsMessage: "Ingen hendelser å vise"
|
||||
};
|
||||
|
||||
return nb;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nl = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var nl = {
|
||||
code: "nl",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Voorgaand",
|
||||
next: "Volgende",
|
||||
today: "Vandaag",
|
||||
year: "Jaar",
|
||||
month: "Maand",
|
||||
week: "Week",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
allDayText: "Hele dag",
|
||||
eventLimitText: "extra",
|
||||
noEventsMessage: "Geen evenementen om te laten zien"
|
||||
};
|
||||
|
||||
return nl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nn = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var nn = {
|
||||
code: "nn",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Førre",
|
||||
next: "Neste",
|
||||
today: "I dag",
|
||||
month: "Månad",
|
||||
week: "Veke",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Veke",
|
||||
allDayText: "Heile dagen",
|
||||
eventLimitText: "til",
|
||||
noEventsMessage: "Ingen hendelser å vise"
|
||||
};
|
||||
|
||||
return nn;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pl = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var pl = {
|
||||
code: "pl",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Poprzedni",
|
||||
next: "Następny",
|
||||
today: "Dziś",
|
||||
month: "Miesiąc",
|
||||
week: "Tydzień",
|
||||
day: "Dzień",
|
||||
list: "Plan dnia"
|
||||
},
|
||||
weekLabel: "Tydz",
|
||||
allDayText: "Cały dzień",
|
||||
eventLimitText: "więcej",
|
||||
noEventsMessage: "Brak wydarzeń do wyświetlenia"
|
||||
};
|
||||
|
||||
return pl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,28 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['pt-br'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ptBr = {
|
||||
code: "pt-br",
|
||||
buttonText: {
|
||||
prev: "Anterior",
|
||||
next: "Próximo",
|
||||
today: "Hoje",
|
||||
month: "Mês",
|
||||
week: "Semana",
|
||||
day: "Dia",
|
||||
list: "Lista"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayText: "dia inteiro",
|
||||
eventLimitText: function (n) {
|
||||
return "mais +" + n;
|
||||
},
|
||||
noEventsMessage: "Não há eventos para mostrar"
|
||||
};
|
||||
|
||||
return ptBr;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pt = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var pt = {
|
||||
code: "pt",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Anterior",
|
||||
next: "Seguinte",
|
||||
today: "Hoje",
|
||||
month: "Mês",
|
||||
week: "Semana",
|
||||
day: "Dia",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sem",
|
||||
allDayText: "Todo o dia",
|
||||
eventLimitText: "mais",
|
||||
noEventsMessage: "Não há eventos para mostrar"
|
||||
};
|
||||
|
||||
return pt;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ro = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ro = {
|
||||
code: "ro",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "precedentă",
|
||||
next: "următoare",
|
||||
today: "Azi",
|
||||
month: "Lună",
|
||||
week: "Săptămână",
|
||||
day: "Zi",
|
||||
list: "Agendă"
|
||||
},
|
||||
weekLabel: "Săpt",
|
||||
allDayText: "Toată ziua",
|
||||
eventLimitText: function (n) {
|
||||
return "+alte " + n;
|
||||
},
|
||||
noEventsMessage: "Nu există evenimente de afișat"
|
||||
};
|
||||
|
||||
return ro;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ru = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ru = {
|
||||
code: "ru",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Пред",
|
||||
next: "След",
|
||||
today: "Сегодня",
|
||||
month: "Месяц",
|
||||
week: "Неделя",
|
||||
day: "День",
|
||||
list: "Повестка дня"
|
||||
},
|
||||
weekLabel: "Нед",
|
||||
allDayText: "Весь день",
|
||||
eventLimitText: function (n) {
|
||||
return "+ ещё " + n;
|
||||
},
|
||||
noEventsMessage: "Нет событий для отображения"
|
||||
};
|
||||
|
||||
return ru;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sk = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var sk = {
|
||||
code: "sk",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Predchádzajúci",
|
||||
next: "Nasledujúci",
|
||||
today: "Dnes",
|
||||
month: "Mesiac",
|
||||
week: "Týždeň",
|
||||
day: "Deň",
|
||||
list: "Rozvrh"
|
||||
},
|
||||
weekLabel: "Ty",
|
||||
allDayText: "Celý deň",
|
||||
eventLimitText: function (n) {
|
||||
return "+ďalšie: " + n;
|
||||
},
|
||||
noEventsMessage: "Žiadne akcie na zobrazenie"
|
||||
};
|
||||
|
||||
return sk;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sl = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var sl = {
|
||||
code: "sl",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prejšnji",
|
||||
next: "Naslednji",
|
||||
today: "Trenutni",
|
||||
month: "Mesec",
|
||||
week: "Teden",
|
||||
day: "Dan",
|
||||
list: "Dnevni red"
|
||||
},
|
||||
weekLabel: "Teden",
|
||||
allDayText: "Ves dan",
|
||||
eventLimitText: "več",
|
||||
noEventsMessage: "Ni dogodkov za prikaz"
|
||||
};
|
||||
|
||||
return sl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sq = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var sq = {
|
||||
code: "sq",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "mbrapa",
|
||||
next: "Përpara",
|
||||
today: "sot",
|
||||
month: "Muaj",
|
||||
week: "Javë",
|
||||
day: "Ditë",
|
||||
list: "Listë"
|
||||
},
|
||||
weekLabel: "Ja",
|
||||
allDayHtml: "Gjithë<br/>ditën",
|
||||
eventLimitText: function (n) {
|
||||
return "+më tepër " + n;
|
||||
},
|
||||
noEventsMessage: "Nuk ka evente për të shfaqur"
|
||||
};
|
||||
|
||||
return sq;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['sr-cyrl'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var srCyrl = {
|
||||
code: "sr-cyrl",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Претходна",
|
||||
next: "следећи",
|
||||
today: "Данас",
|
||||
month: "Месец",
|
||||
week: "Недеља",
|
||||
day: "Дан",
|
||||
list: "Планер"
|
||||
},
|
||||
weekLabel: "Сед",
|
||||
allDayText: "Цео дан",
|
||||
eventLimitText: function (n) {
|
||||
return "+ још " + n;
|
||||
},
|
||||
noEventsMessage: "Нема догађаја за приказ"
|
||||
};
|
||||
|
||||
return srCyrl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sr = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var sr = {
|
||||
code: "sr",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prethodna",
|
||||
next: "Sledeći",
|
||||
today: "Danas",
|
||||
month: "Mеsеc",
|
||||
week: "Nеdеlja",
|
||||
day: "Dan",
|
||||
list: "Planеr"
|
||||
},
|
||||
weekLabel: "Sed",
|
||||
allDayText: "Cеo dan",
|
||||
eventLimitText: function (n) {
|
||||
return "+ još " + n;
|
||||
},
|
||||
noEventsMessage: "Nеma događaja za prikaz"
|
||||
};
|
||||
|
||||
return sr;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sv = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var sv = {
|
||||
code: "sv",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Förra",
|
||||
next: "Nästa",
|
||||
today: "Idag",
|
||||
month: "Månad",
|
||||
week: "Vecka",
|
||||
day: "Dag",
|
||||
list: "Program"
|
||||
},
|
||||
weekLabel: "v.",
|
||||
allDayText: "Heldag",
|
||||
eventLimitText: "till",
|
||||
noEventsMessage: "Inga händelser att visa"
|
||||
};
|
||||
|
||||
return sv;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.th = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var th = {
|
||||
code: "th",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "ก่อนหน้า",
|
||||
next: "ถัดไป",
|
||||
prevYear: 'ปีก่อนหน้า',
|
||||
nextYear: 'ปีถัดไป',
|
||||
year: 'ปี',
|
||||
today: "วันนี้",
|
||||
month: "เดือน",
|
||||
week: "สัปดาห์",
|
||||
day: "วัน",
|
||||
list: "กำหนดการ"
|
||||
},
|
||||
weekLabel: "สัปดาห์",
|
||||
allDayText: "ตลอดวัน",
|
||||
eventLimitText: "เพิ่มเติม",
|
||||
noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
|
||||
};
|
||||
|
||||
return th;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.tr = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var tr = {
|
||||
code: "tr",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "geri",
|
||||
next: "ileri",
|
||||
today: "bugün",
|
||||
month: "Ay",
|
||||
week: "Hafta",
|
||||
day: "Gün",
|
||||
list: "Ajanda"
|
||||
},
|
||||
weekLabel: "Hf",
|
||||
allDayText: "Tüm gün",
|
||||
eventLimitText: "daha fazla",
|
||||
noEventsMessage: "Gösterilecek etkinlik yok"
|
||||
};
|
||||
|
||||
return tr;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,20 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ug = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ug = {
|
||||
code: "ug",
|
||||
buttonText: {
|
||||
month: "ئاي",
|
||||
week: "ھەپتە",
|
||||
day: "كۈن",
|
||||
list: "كۈنتەرتىپ"
|
||||
},
|
||||
allDayText: "پۈتۈن كۈن"
|
||||
};
|
||||
|
||||
return ug;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uk = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var uk = {
|
||||
code: "uk",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Попередній",
|
||||
next: "далі",
|
||||
today: "Сьогодні",
|
||||
month: "Місяць",
|
||||
week: "Тиждень",
|
||||
day: "День",
|
||||
list: "Порядок денний"
|
||||
},
|
||||
weekLabel: "Тиж",
|
||||
allDayText: "Увесь день",
|
||||
eventLimitText: function (n) {
|
||||
return "+ще " + n + "...";
|
||||
},
|
||||
noEventsMessage: "Немає подій для відображення"
|
||||
};
|
||||
|
||||
return uk;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,24 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uz = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var uz = {
|
||||
code: "uz",
|
||||
buttonText: {
|
||||
month: "Oy",
|
||||
week: "Xafta",
|
||||
day: "Kun",
|
||||
list: "Kun tartibi"
|
||||
},
|
||||
allDayText: "Kun bo'yi",
|
||||
eventLimitText: function (n) {
|
||||
return "+ yana " + n;
|
||||
},
|
||||
noEventsMessage: "Ko'rsatish uchun voqealar yo'q"
|
||||
};
|
||||
|
||||
return uz;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.vi = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var vi = {
|
||||
code: "vi",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Trước",
|
||||
next: "Tiếp",
|
||||
today: "Hôm nay",
|
||||
month: "Tháng",
|
||||
week: "Tuần",
|
||||
day: "Ngày",
|
||||
list: "Lịch biểu"
|
||||
},
|
||||
weekLabel: "Tu",
|
||||
allDayText: "Cả ngày",
|
||||
eventLimitText: function (n) {
|
||||
return "+ thêm " + n;
|
||||
},
|
||||
noEventsMessage: "Không có sự kiện để hiển thị"
|
||||
};
|
||||
|
||||
return vi;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-cn'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var zhCn = {
|
||||
code: "zh-cn",
|
||||
week: {
|
||||
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "上月",
|
||||
next: "下月",
|
||||
today: "今天",
|
||||
month: "月",
|
||||
week: "周",
|
||||
day: "日",
|
||||
list: "日程"
|
||||
},
|
||||
weekLabel: "周",
|
||||
allDayText: "全天",
|
||||
eventLimitText: function (n) {
|
||||
return "另外 " + n + " 个";
|
||||
},
|
||||
noEventsMessage: "没有事件显示"
|
||||
};
|
||||
|
||||
return zhCn;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,26 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-tw'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var zhTw = {
|
||||
code: "zh-tw",
|
||||
buttonText: {
|
||||
prev: "上月",
|
||||
next: "下月",
|
||||
today: "今天",
|
||||
month: "月",
|
||||
week: "週",
|
||||
day: "天",
|
||||
list: "活動列表"
|
||||
},
|
||||
weekLabel: "周",
|
||||
allDayText: "整天",
|
||||
eventLimitText: '顯示更多',
|
||||
noEventsMessage: "没有任何活動"
|
||||
};
|
||||
|
||||
return zhTw;
|
||||
|
||||
}));
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,78 @@
|
||||
/* DayGridView
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
/* day row structure */
|
||||
.fc-dayGridWeek-view .fc-content-skeleton,
|
||||
.fc-dayGridDay-view .fc-content-skeleton {
|
||||
/* there may be week numbers in these views, so no padding-top */
|
||||
padding-bottom: 1em;
|
||||
/* ensure a space at bottom of cell for user selecting/clicking */
|
||||
}
|
||||
|
||||
.fc-dayGrid-view .fc-body .fc-row {
|
||||
min-height: 4em;
|
||||
/* ensure that all rows are at least this tall */
|
||||
}
|
||||
|
||||
/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */
|
||||
.fc-row.fc-rigid {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.fc-row.fc-rigid .fc-content-skeleton {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* week and day number styling */
|
||||
.fc-day-top.fc-other-month {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.fc-dayGrid-view .fc-week-number,
|
||||
.fc-dayGrid-view .fc-day-number {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.fc-dayGrid-view th.fc-week-number,
|
||||
.fc-dayGrid-view th.fc-day-number {
|
||||
padding: 0 2px;
|
||||
/* column headers can't have as much v space */
|
||||
}
|
||||
|
||||
.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number {
|
||||
float: left;
|
||||
border-radius: 0 0 3px 0;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number {
|
||||
float: right;
|
||||
border-radius: 0 0 0 3px;
|
||||
}
|
||||
|
||||
.fc-dayGrid-view .fc-day-top .fc-week-number {
|
||||
min-width: 1.5em;
|
||||
text-align: center;
|
||||
background-color: #f2f2f2;
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
/* when week/day number have own column */
|
||||
.fc-dayGrid-view td.fc-week-number {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.fc-dayGrid-view td.fc-week-number > * {
|
||||
/* work around the way we do column resizing and ensure a minimum width */
|
||||
display: inline-block;
|
||||
min-width: 1.25em;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,175 @@
|
||||
/*!
|
||||
FullCalendar Google Calendar Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarGoogleCalendar = {}, global.FullCalendar));
|
||||
}(this, function (exports, core) { 'use strict';
|
||||
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
|
||||
var __assign = function() {
|
||||
__assign = Object.assign || function __assign(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
|
||||
// TODO: expose somehow
|
||||
var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
|
||||
var STANDARD_PROPS = {
|
||||
url: String,
|
||||
googleCalendarApiKey: String,
|
||||
googleCalendarId: String,
|
||||
googleCalendarApiBase: String,
|
||||
data: null
|
||||
};
|
||||
var eventSourceDef = {
|
||||
parseMeta: function (raw) {
|
||||
if (typeof raw === 'string') {
|
||||
raw = { url: raw };
|
||||
}
|
||||
if (typeof raw === 'object') {
|
||||
var standardProps = core.refineProps(raw, STANDARD_PROPS);
|
||||
if (!standardProps.googleCalendarId && standardProps.url) {
|
||||
standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url);
|
||||
}
|
||||
delete standardProps.url;
|
||||
if (standardProps.googleCalendarId) {
|
||||
return standardProps;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
fetch: function (arg, onSuccess, onFailure) {
|
||||
var calendar = arg.calendar;
|
||||
var meta = arg.eventSource.meta;
|
||||
var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey');
|
||||
if (!apiKey) {
|
||||
onFailure({
|
||||
message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/'
|
||||
});
|
||||
}
|
||||
else {
|
||||
var url = buildUrl(meta);
|
||||
var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv);
|
||||
core.requestJson('GET', url, requestParams_1, function (body, xhr) {
|
||||
if (body.error) {
|
||||
onFailure({
|
||||
message: 'Google Calendar API: ' + body.error.message,
|
||||
errors: body.error.errors,
|
||||
xhr: xhr
|
||||
});
|
||||
}
|
||||
else {
|
||||
onSuccess({
|
||||
rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone),
|
||||
xhr: xhr
|
||||
});
|
||||
}
|
||||
}, function (message, xhr) {
|
||||
onFailure({ message: message, xhr: xhr });
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
function parseGoogleCalendarId(url) {
|
||||
var match;
|
||||
// detect if the ID was specified as a single string.
|
||||
// will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
|
||||
if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
|
||||
return url;
|
||||
}
|
||||
else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
|
||||
(match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) {
|
||||
return decodeURIComponent(match[1]);
|
||||
}
|
||||
}
|
||||
function buildUrl(meta) {
|
||||
var apiBase = meta.googleCalendarApiBase;
|
||||
if (!apiBase) {
|
||||
apiBase = API_BASE;
|
||||
}
|
||||
return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events';
|
||||
}
|
||||
function buildRequestParams(range, apiKey, extraParams, dateEnv) {
|
||||
var params;
|
||||
var startStr;
|
||||
var endStr;
|
||||
if (dateEnv.canComputeOffset) {
|
||||
// strings will naturally have offsets, which GCal needs
|
||||
startStr = dateEnv.formatIso(range.start);
|
||||
endStr = dateEnv.formatIso(range.end);
|
||||
}
|
||||
else {
|
||||
// when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day
|
||||
// from the UTC day-start to guarantee we're getting all the events
|
||||
// (start/end will be UTC-coerced dates, so toISOString is okay)
|
||||
startStr = core.addDays(range.start, -1).toISOString();
|
||||
endStr = core.addDays(range.end, 1).toISOString();
|
||||
}
|
||||
params = __assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 });
|
||||
if (dateEnv.timeZone !== 'local') {
|
||||
params.timeZone = dateEnv.timeZone;
|
||||
}
|
||||
return params;
|
||||
}
|
||||
function gcalItemsToRawEventDefs(items, gcalTimezone) {
|
||||
return items.map(function (item) {
|
||||
return gcalItemToRawEventDef(item, gcalTimezone);
|
||||
});
|
||||
}
|
||||
function gcalItemToRawEventDef(item, gcalTimezone) {
|
||||
var url = item.htmlLink || null;
|
||||
// make the URLs for each event show times in the correct timezone
|
||||
if (url && gcalTimezone) {
|
||||
url = injectQsComponent(url, 'ctz=' + gcalTimezone);
|
||||
}
|
||||
return {
|
||||
id: item.id,
|
||||
title: item.summary,
|
||||
start: item.start.dateTime || item.start.date,
|
||||
end: item.end.dateTime || item.end.date,
|
||||
url: url,
|
||||
location: item.location,
|
||||
description: item.description
|
||||
};
|
||||
}
|
||||
// Injects a string like "arg=value" into the querystring of a URL
|
||||
// TODO: move to a general util file?
|
||||
function injectQsComponent(url, component) {
|
||||
// inject it after the querystring but before the fragment
|
||||
return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) {
|
||||
return (qs ? qs + '&' : '?') + component + hash;
|
||||
});
|
||||
}
|
||||
var main = core.createPlugin({
|
||||
eventSourceDefs: [eventSourceDef]
|
||||
});
|
||||
|
||||
exports.default = main;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,180 +0,0 @@
|
||||
/*!
|
||||
* FullCalendar v3.0.1 Google Calendar Plugin
|
||||
* Docs & License: http://fullcalendar.io/
|
||||
* (c) 2016 Adam Shaw
|
||||
*/
|
||||
|
||||
(function(factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([ 'jquery' ], factory);
|
||||
}
|
||||
else if (typeof exports === 'object') { // Node/CommonJS
|
||||
module.exports = factory(require('jquery'));
|
||||
}
|
||||
else {
|
||||
factory(jQuery);
|
||||
}
|
||||
})(function($) {
|
||||
|
||||
|
||||
var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
|
||||
var FC = $.fullCalendar;
|
||||
var applyAll = FC.applyAll;
|
||||
|
||||
|
||||
FC.sourceNormalizers.push(function(sourceOptions) {
|
||||
var googleCalendarId = sourceOptions.googleCalendarId;
|
||||
var url = sourceOptions.url;
|
||||
var match;
|
||||
|
||||
// if the Google Calendar ID hasn't been explicitly defined
|
||||
if (!googleCalendarId && url) {
|
||||
|
||||
// detect if the ID was specified as a single string.
|
||||
// will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
|
||||
if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
|
||||
googleCalendarId = url;
|
||||
}
|
||||
// try to scrape it out of a V1 or V3 API feed URL
|
||||
else if (
|
||||
(match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
|
||||
(match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))
|
||||
) {
|
||||
googleCalendarId = decodeURIComponent(match[1]);
|
||||
}
|
||||
|
||||
if (googleCalendarId) {
|
||||
sourceOptions.googleCalendarId = googleCalendarId;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (googleCalendarId) { // is this a Google Calendar?
|
||||
|
||||
// make each Google Calendar source uneditable by default
|
||||
if (sourceOptions.editable == null) {
|
||||
sourceOptions.editable = false;
|
||||
}
|
||||
|
||||
// We want removeEventSource to work, but it won't know about the googleCalendarId primitive.
|
||||
// Shoehorn it into the url, which will function as the unique primitive. Won't cause side effects.
|
||||
// This hack is obsolete since 2.2.3, but keep it so this plugin file is compatible with old versions.
|
||||
sourceOptions.url = googleCalendarId;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
FC.sourceFetchers.push(function(sourceOptions, start, end, timezone) {
|
||||
if (sourceOptions.googleCalendarId) {
|
||||
return transformOptions(sourceOptions, start, end, timezone, this); // `this` is the calendar
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function transformOptions(sourceOptions, start, end, timezone, calendar) {
|
||||
var url = API_BASE + '/' + encodeURIComponent(sourceOptions.googleCalendarId) + '/events?callback=?'; // jsonp
|
||||
var apiKey = sourceOptions.googleCalendarApiKey || calendar.options.googleCalendarApiKey;
|
||||
var success = sourceOptions.success;
|
||||
var data;
|
||||
var timezoneArg; // populated when a specific timezone. escaped to Google's liking
|
||||
|
||||
function reportError(message, apiErrorObjs) {
|
||||
var errorObjs = apiErrorObjs || [ { message: message } ]; // to be passed into error handlers
|
||||
|
||||
// call error handlers
|
||||
(sourceOptions.googleCalendarError || $.noop).apply(calendar, errorObjs);
|
||||
(calendar.options.googleCalendarError || $.noop).apply(calendar, errorObjs);
|
||||
|
||||
// print error to debug console
|
||||
FC.warn.apply(null, [ message ].concat(apiErrorObjs || []));
|
||||
}
|
||||
|
||||
if (!apiKey) {
|
||||
reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/");
|
||||
return {}; // an empty source to use instead. won't fetch anything.
|
||||
}
|
||||
|
||||
// The API expects an ISO8601 datetime with a time and timezone part.
|
||||
// Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each
|
||||
// side, guaranteeing we will receive all events in the desired range, albeit a superset.
|
||||
// .utc() will set a zone and give it a 00:00:00 time.
|
||||
if (!start.hasZone()) {
|
||||
start = start.clone().utc().add(-1, 'day');
|
||||
}
|
||||
if (!end.hasZone()) {
|
||||
end = end.clone().utc().add(1, 'day');
|
||||
}
|
||||
|
||||
// when sending timezone names to Google, only accepts underscores, not spaces
|
||||
if (timezone && timezone != 'local') {
|
||||
timezoneArg = timezone.replace(' ', '_');
|
||||
}
|
||||
|
||||
data = $.extend({}, sourceOptions.data || {}, {
|
||||
key: apiKey,
|
||||
timeMin: start.format(),
|
||||
timeMax: end.format(),
|
||||
timeZone: timezoneArg,
|
||||
singleEvents: true,
|
||||
maxResults: 9999
|
||||
});
|
||||
|
||||
return $.extend({}, sourceOptions, {
|
||||
googleCalendarId: null, // prevents source-normalizing from happening again
|
||||
url: url,
|
||||
data: data,
|
||||
startParam: false, // `false` omits this parameter. we already included it above
|
||||
endParam: false, // same
|
||||
timezoneParam: false, // same
|
||||
success: function(data) {
|
||||
var events = [];
|
||||
var successArgs;
|
||||
var successRes;
|
||||
|
||||
if (data.error) {
|
||||
reportError('Google Calendar API: ' + data.error.message, data.error.errors);
|
||||
}
|
||||
else if (data.items) {
|
||||
$.each(data.items, function(i, entry) {
|
||||
var url = entry.htmlLink || null;
|
||||
|
||||
// make the URLs for each event show times in the correct timezone
|
||||
if (timezoneArg && url !== null) {
|
||||
url = injectQsComponent(url, 'ctz=' + timezoneArg);
|
||||
}
|
||||
|
||||
events.push({
|
||||
id: entry.id,
|
||||
title: entry.summary,
|
||||
start: entry.start.dateTime || entry.start.date, // try timed. will fall back to all-day
|
||||
end: entry.end.dateTime || entry.end.date, // same
|
||||
url: url,
|
||||
location: entry.location,
|
||||
description: entry.description
|
||||
});
|
||||
});
|
||||
|
||||
// call the success handler(s) and allow it to return a new events array
|
||||
successArgs = [ events ].concat(Array.prototype.slice.call(arguments, 1)); // forward other jq args
|
||||
successRes = applyAll(success, this, successArgs);
|
||||
if ($.isArray(successRes)) {
|
||||
return successRes;
|
||||
}
|
||||
}
|
||||
|
||||
return events;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Injects a string like "arg=value" into the querystring of a URL
|
||||
function injectQsComponent(url, component) {
|
||||
// inject it after the querystring but before the fragment
|
||||
return url.replace(/(\?.*?)?(#|$)/, function(whole, qs, hash) {
|
||||
return (qs ? qs + '&' : '?') + component + hash;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,118 @@
|
||||
/* List View
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
/* possibly reusable */
|
||||
.fc-event-dot {
|
||||
display: inline-block;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* view wrapper */
|
||||
.fc-rtl .fc-list-view {
|
||||
direction: rtl;
|
||||
/* unlike core views, leverage browser RTL */
|
||||
}
|
||||
|
||||
.fc-list-view {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
/* table resets */
|
||||
.fc .fc-list-table {
|
||||
table-layout: auto;
|
||||
/* for shrinkwrapping cell content */
|
||||
}
|
||||
|
||||
.fc-list-table td {
|
||||
border-width: 1px 0 0;
|
||||
padding: 8px 14px;
|
||||
}
|
||||
|
||||
.fc-list-table tr:first-child td {
|
||||
border-top-width: 0;
|
||||
}
|
||||
|
||||
/* day headings with the list */
|
||||
.fc-list-heading {
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
|
||||
.fc-list-heading td {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.fc-ltr .fc-list-heading-main {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.fc-ltr .fc-list-heading-alt {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-list-heading-main {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-list-heading-alt {
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* event list items */
|
||||
.fc-list-item.fc-has-url {
|
||||
cursor: pointer;
|
||||
/* whole row will be clickable */
|
||||
}
|
||||
|
||||
.fc-list-item-marker,
|
||||
.fc-list-item-time {
|
||||
white-space: nowrap;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
/* make the dot closer to the event title */
|
||||
.fc-ltr .fc-list-item-marker {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-list-item-marker {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.fc-list-item-title a {
|
||||
/* every event title cell has an <a> tag */
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.fc-list-item-title a[href]:hover {
|
||||
/* hover effect only on titles with hrefs */
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* message when no events */
|
||||
.fc-list-empty-wrap2 {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.fc-list-empty-wrap1 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: table;
|
||||
}
|
||||
|
||||
.fc-list-empty {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.fc-unthemed .fc-list-empty {
|
||||
/* theme will provide own background */
|
||||
background-color: #eee;
|
||||
}
|
||||
@@ -0,0 +1,356 @@
|
||||
/*!
|
||||
FullCalendar List View Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarList = {}, global.FullCalendar));
|
||||
}(this, function (exports, core) { 'use strict';
|
||||
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
/* global Reflect, Promise */
|
||||
|
||||
var extendStatics = function(d, b) {
|
||||
extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
|
||||
function __extends(d, b) {
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
}
|
||||
|
||||
var ListEventRenderer = /** @class */ (function (_super) {
|
||||
__extends(ListEventRenderer, _super);
|
||||
function ListEventRenderer(listView) {
|
||||
var _this = _super.call(this) || this;
|
||||
_this.listView = listView;
|
||||
return _this;
|
||||
}
|
||||
ListEventRenderer.prototype.attachSegs = function (segs) {
|
||||
if (!segs.length) {
|
||||
this.listView.renderEmptyMessage();
|
||||
}
|
||||
else {
|
||||
this.listView.renderSegList(segs);
|
||||
}
|
||||
};
|
||||
ListEventRenderer.prototype.detachSegs = function () {
|
||||
};
|
||||
// generates the HTML for a single event row
|
||||
ListEventRenderer.prototype.renderSegHtml = function (seg) {
|
||||
var _a = this.context, theme = _a.theme, options = _a.options;
|
||||
var eventRange = seg.eventRange;
|
||||
var eventDef = eventRange.def;
|
||||
var eventInstance = eventRange.instance;
|
||||
var eventUi = eventRange.ui;
|
||||
var url = eventDef.url;
|
||||
var classes = ['fc-list-item'].concat(eventUi.classNames);
|
||||
var bgColor = eventUi.backgroundColor;
|
||||
var timeHtml;
|
||||
if (eventDef.allDay) {
|
||||
timeHtml = core.getAllDayHtml(options);
|
||||
}
|
||||
else if (core.isMultiDayRange(eventRange.range)) {
|
||||
if (seg.isStart) {
|
||||
timeHtml = core.htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay
|
||||
));
|
||||
}
|
||||
else if (seg.isEnd) {
|
||||
timeHtml = core.htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay
|
||||
));
|
||||
}
|
||||
else { // inner segment that lasts the whole day
|
||||
timeHtml = core.getAllDayHtml(options);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Display the normal time text for the *event's* times
|
||||
timeHtml = core.htmlEscape(this.getTimeText(eventRange));
|
||||
}
|
||||
if (url) {
|
||||
classes.push('fc-has-url');
|
||||
}
|
||||
return '<tr class="' + classes.join(' ') + '">' +
|
||||
(this.displayEventTime ?
|
||||
'<td class="fc-list-item-time ' + theme.getClass('widgetContent') + '">' +
|
||||
(timeHtml || '') +
|
||||
'</td>' :
|
||||
'') +
|
||||
'<td class="fc-list-item-marker ' + theme.getClass('widgetContent') + '">' +
|
||||
'<span class="fc-event-dot"' +
|
||||
(bgColor ?
|
||||
' style="background-color:' + bgColor + '"' :
|
||||
'') +
|
||||
'></span>' +
|
||||
'</td>' +
|
||||
'<td class="fc-list-item-title ' + theme.getClass('widgetContent') + '">' +
|
||||
'<a' + (url ? ' href="' + core.htmlEscape(url) + '"' : '') + '>' +
|
||||
core.htmlEscape(eventDef.title || '') +
|
||||
'</a>' +
|
||||
'</td>' +
|
||||
'</tr>';
|
||||
};
|
||||
// like "4:00am"
|
||||
ListEventRenderer.prototype.computeEventTimeFormat = function () {
|
||||
return {
|
||||
hour: 'numeric',
|
||||
minute: '2-digit',
|
||||
meridiem: 'short'
|
||||
};
|
||||
};
|
||||
return ListEventRenderer;
|
||||
}(core.FgEventRenderer));
|
||||
|
||||
/*
|
||||
Responsible for the scroller, and forwarding event-related actions into the "grid".
|
||||
*/
|
||||
var ListView = /** @class */ (function (_super) {
|
||||
__extends(ListView, _super);
|
||||
function ListView(viewSpec, parentEl) {
|
||||
var _this = _super.call(this, viewSpec, parentEl) || this;
|
||||
_this.computeDateVars = core.memoize(computeDateVars);
|
||||
_this.eventStoreToSegs = core.memoize(_this._eventStoreToSegs);
|
||||
_this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
|
||||
var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this);
|
||||
_this.renderContent = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]);
|
||||
return _this;
|
||||
}
|
||||
ListView.prototype.firstContext = function (context) {
|
||||
context.calendar.registerInteractiveComponent(this, {
|
||||
el: this.el
|
||||
// TODO: make aware that it doesn't do Hits
|
||||
});
|
||||
};
|
||||
ListView.prototype.render = function (props, context) {
|
||||
_super.prototype.render.call(this, props, context);
|
||||
var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges;
|
||||
this.dayDates = dayDates;
|
||||
this.renderSkeleton(context);
|
||||
this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges));
|
||||
};
|
||||
ListView.prototype.destroy = function () {
|
||||
_super.prototype.destroy.call(this);
|
||||
this.renderSkeleton.unrender();
|
||||
this.renderContent.unrender();
|
||||
this.context.calendar.unregisterInteractiveComponent(this);
|
||||
};
|
||||
ListView.prototype._renderSkeleton = function (context) {
|
||||
var theme = context.theme;
|
||||
this.el.classList.add('fc-list-view');
|
||||
var listViewClassNames = (theme.getClass('listView') || '').split(' '); // wish we didn't have to do this
|
||||
for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) {
|
||||
var listViewClassName = listViewClassNames_1[_i];
|
||||
if (listViewClassName) { // in case input was empty string
|
||||
this.el.classList.add(listViewClassName);
|
||||
}
|
||||
}
|
||||
this.scroller = new core.ScrollComponent('hidden', // overflow x
|
||||
'auto' // overflow y
|
||||
);
|
||||
this.el.appendChild(this.scroller.el);
|
||||
this.contentEl = this.scroller.el; // shortcut
|
||||
};
|
||||
ListView.prototype._unrenderSkeleton = function () {
|
||||
// TODO: remove classNames
|
||||
this.scroller.destroy(); // will remove the Grid too
|
||||
};
|
||||
ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
|
||||
_super.prototype.updateSize.call(this, isResize, viewHeight, isAuto);
|
||||
this.eventRenderer.computeSizes(isResize);
|
||||
this.eventRenderer.assignSizes(isResize);
|
||||
this.scroller.clear(); // sets height to 'auto' and clears overflow
|
||||
if (!isAuto) {
|
||||
this.scroller.setHeight(this.computeScrollerHeight(viewHeight));
|
||||
}
|
||||
};
|
||||
ListView.prototype.computeScrollerHeight = function (viewHeight) {
|
||||
return viewHeight -
|
||||
core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
|
||||
};
|
||||
ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) {
|
||||
return this.eventRangesToSegs(core.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges);
|
||||
};
|
||||
ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) {
|
||||
var segs = [];
|
||||
for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
|
||||
var eventRange = eventRanges_1[_i];
|
||||
segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges));
|
||||
}
|
||||
return segs;
|
||||
};
|
||||
ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) {
|
||||
var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold;
|
||||
var range = eventRange.range;
|
||||
var allDay = eventRange.def.allDay;
|
||||
var dayIndex;
|
||||
var segRange;
|
||||
var seg;
|
||||
var segs = [];
|
||||
for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {
|
||||
segRange = core.intersectRanges(range, dayRanges[dayIndex]);
|
||||
if (segRange) {
|
||||
seg = {
|
||||
component: this,
|
||||
eventRange: eventRange,
|
||||
start: segRange.start,
|
||||
end: segRange.end,
|
||||
isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
|
||||
isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
|
||||
dayIndex: dayIndex
|
||||
};
|
||||
segs.push(seg);
|
||||
// detect when range won't go fully into the next day,
|
||||
// and mutate the latest seg to the be the end.
|
||||
if (!seg.isEnd && !allDay &&
|
||||
dayIndex + 1 < dayRanges.length &&
|
||||
range.end <
|
||||
dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
|
||||
seg.end = range.end;
|
||||
seg.isEnd = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return segs;
|
||||
};
|
||||
ListView.prototype.renderEmptyMessage = function () {
|
||||
this.contentEl.innerHTML =
|
||||
'<div class="fc-list-empty-wrap2">' + // TODO: try less wraps
|
||||
'<div class="fc-list-empty-wrap1">' +
|
||||
'<div class="fc-list-empty">' +
|
||||
core.htmlEscape(this.context.options.noEventsMessage) +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
};
|
||||
// called by ListEventRenderer
|
||||
ListView.prototype.renderSegList = function (allSegs) {
|
||||
var theme = this.context.theme;
|
||||
var segsByDay = this.groupSegsByDay(allSegs); // sparse array
|
||||
var dayIndex;
|
||||
var daySegs;
|
||||
var i;
|
||||
var tableEl = core.htmlToElement('<table class="fc-list-table ' + theme.getClass('tableList') + '"><tbody></tbody></table>');
|
||||
var tbodyEl = tableEl.querySelector('tbody');
|
||||
for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {
|
||||
daySegs = segsByDay[dayIndex];
|
||||
if (daySegs) { // sparse array, so might be undefined
|
||||
// append a day header
|
||||
tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex]));
|
||||
daySegs = this.eventRenderer.sortEventSegs(daySegs);
|
||||
for (i = 0; i < daySegs.length; i++) {
|
||||
tbodyEl.appendChild(daySegs[i].el); // append event row
|
||||
}
|
||||
}
|
||||
}
|
||||
this.contentEl.innerHTML = '';
|
||||
this.contentEl.appendChild(tableEl);
|
||||
};
|
||||
// Returns a sparse array of arrays, segs grouped by their dayIndex
|
||||
ListView.prototype.groupSegsByDay = function (segs) {
|
||||
var segsByDay = []; // sparse array
|
||||
var i;
|
||||
var seg;
|
||||
for (i = 0; i < segs.length; i++) {
|
||||
seg = segs[i];
|
||||
(segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
|
||||
.push(seg);
|
||||
}
|
||||
return segsByDay;
|
||||
};
|
||||
// generates the HTML for the day headers that live amongst the event rows
|
||||
ListView.prototype.buildDayHeaderRow = function (dayDate) {
|
||||
var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
|
||||
var mainFormat = core.createFormatter(options.listDayFormat); // TODO: cache
|
||||
var altFormat = core.createFormatter(options.listDayAltFormat); // TODO: cache
|
||||
return core.createElement('tr', {
|
||||
className: 'fc-list-heading',
|
||||
'data-date': dateEnv.formatIso(dayDate, { omitTime: true })
|
||||
}, '<td class="' + (theme.getClass('tableListHeading') ||
|
||||
theme.getClass('widgetHeader')) + '" colspan="3">' +
|
||||
(mainFormat ?
|
||||
core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, core.htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML
|
||||
) :
|
||||
'') +
|
||||
(altFormat ?
|
||||
core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, core.htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML
|
||||
) :
|
||||
'') +
|
||||
'</td>');
|
||||
};
|
||||
return ListView;
|
||||
}(core.View));
|
||||
ListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions
|
||||
function computeDateVars(dateProfile) {
|
||||
var dayStart = core.startOfDay(dateProfile.renderRange.start);
|
||||
var viewEnd = dateProfile.renderRange.end;
|
||||
var dayDates = [];
|
||||
var dayRanges = [];
|
||||
while (dayStart < viewEnd) {
|
||||
dayDates.push(dayStart);
|
||||
dayRanges.push({
|
||||
start: dayStart,
|
||||
end: core.addDays(dayStart, 1)
|
||||
});
|
||||
dayStart = core.addDays(dayStart, 1);
|
||||
}
|
||||
return { dayDates: dayDates, dayRanges: dayRanges };
|
||||
}
|
||||
|
||||
var main = core.createPlugin({
|
||||
views: {
|
||||
list: {
|
||||
class: ListView,
|
||||
buttonTextKey: 'list',
|
||||
listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like "January 1, 2016"
|
||||
},
|
||||
listDay: {
|
||||
type: 'list',
|
||||
duration: { days: 1 },
|
||||
listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header
|
||||
},
|
||||
listWeek: {
|
||||
type: 'list',
|
||||
duration: { weeks: 1 },
|
||||
listDayFormat: { weekday: 'long' },
|
||||
listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' }
|
||||
},
|
||||
listMonth: {
|
||||
type: 'list',
|
||||
duration: { month: 1 },
|
||||
listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have
|
||||
},
|
||||
listYear: {
|
||||
type: 'list',
|
||||
duration: { year: 1 },
|
||||
listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
exports.ListView = ListView;
|
||||
exports.default = main;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,170 @@
|
||||
/*!
|
||||
FullCalendar Luxon Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('luxon'), require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', 'luxon', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarLuxon = {}, global.luxon, global.FullCalendar));
|
||||
}(this, function (exports, luxon, core) { 'use strict';
|
||||
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
/* global Reflect, Promise */
|
||||
|
||||
var extendStatics = function(d, b) {
|
||||
extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
|
||||
function __extends(d, b) {
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
}
|
||||
|
||||
var __assign = function() {
|
||||
__assign = Object.assign || function __assign(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
|
||||
function toDateTime(date, calendar) {
|
||||
if (!(calendar instanceof core.Calendar)) {
|
||||
throw new Error('must supply a Calendar instance');
|
||||
}
|
||||
return luxon.DateTime.fromJSDate(date, {
|
||||
zone: calendar.dateEnv.timeZone,
|
||||
locale: calendar.dateEnv.locale.codes[0]
|
||||
});
|
||||
}
|
||||
function toDuration(duration, calendar) {
|
||||
if (!(calendar instanceof core.Calendar)) {
|
||||
throw new Error('must supply a Calendar instance');
|
||||
}
|
||||
return luxon.Duration.fromObject(__assign({}, duration, { locale: calendar.dateEnv.locale.codes[0] }));
|
||||
}
|
||||
var LuxonNamedTimeZone = /** @class */ (function (_super) {
|
||||
__extends(LuxonNamedTimeZone, _super);
|
||||
function LuxonNamedTimeZone() {
|
||||
return _super !== null && _super.apply(this, arguments) || this;
|
||||
}
|
||||
LuxonNamedTimeZone.prototype.offsetForArray = function (a) {
|
||||
return arrayToLuxon(a, this.timeZoneName).offset;
|
||||
};
|
||||
LuxonNamedTimeZone.prototype.timestampToArray = function (ms) {
|
||||
return luxonToArray(luxon.DateTime.fromMillis(ms, {
|
||||
zone: this.timeZoneName
|
||||
}));
|
||||
};
|
||||
return LuxonNamedTimeZone;
|
||||
}(core.NamedTimeZoneImpl));
|
||||
function formatWithCmdStr(cmdStr, arg) {
|
||||
var cmd = parseCmdStr(cmdStr);
|
||||
if (arg.end) {
|
||||
var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
|
||||
var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
|
||||
return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.separator);
|
||||
}
|
||||
return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
|
||||
}
|
||||
var main = core.createPlugin({
|
||||
cmdFormatter: formatWithCmdStr,
|
||||
namedTimeZonedImpl: LuxonNamedTimeZone
|
||||
});
|
||||
function luxonToArray(datetime) {
|
||||
return [
|
||||
datetime.year,
|
||||
datetime.month - 1,
|
||||
datetime.day,
|
||||
datetime.hour,
|
||||
datetime.minute,
|
||||
datetime.second,
|
||||
datetime.millisecond
|
||||
];
|
||||
}
|
||||
function arrayToLuxon(arr, timeZone, locale) {
|
||||
return luxon.DateTime.fromObject({
|
||||
zone: timeZone,
|
||||
locale: locale,
|
||||
year: arr[0],
|
||||
month: arr[1] + 1,
|
||||
day: arr[2],
|
||||
hour: arr[3],
|
||||
minute: arr[4],
|
||||
second: arr[5],
|
||||
millisecond: arr[6]
|
||||
});
|
||||
}
|
||||
function parseCmdStr(cmdStr) {
|
||||
var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
|
||||
if (parts) {
|
||||
var middle = parseCmdStr(parts[2]);
|
||||
return {
|
||||
head: parts[1],
|
||||
middle: middle,
|
||||
tail: parts[3],
|
||||
whole: parts[1] + middle.whole + parts[3]
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
head: null,
|
||||
middle: null,
|
||||
tail: null,
|
||||
whole: cmdStr
|
||||
};
|
||||
}
|
||||
}
|
||||
function formatRange(cmd, formatStart, formatEnd, separator) {
|
||||
if (cmd.middle) {
|
||||
var startHead = formatStart(cmd.head);
|
||||
var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
|
||||
var startTail = formatStart(cmd.tail);
|
||||
var endHead = formatEnd(cmd.head);
|
||||
var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
|
||||
var endTail = formatEnd(cmd.tail);
|
||||
if (startHead === endHead && startTail === endTail) {
|
||||
return startHead +
|
||||
(startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
|
||||
startTail;
|
||||
}
|
||||
}
|
||||
var startWhole = formatStart(cmd.whole);
|
||||
var endWhole = formatEnd(cmd.whole);
|
||||
if (startWhole === endWhole) {
|
||||
return startWhole;
|
||||
}
|
||||
else {
|
||||
return startWhole + separator + endWhole;
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = main;
|
||||
exports.toDateTime = toDateTime;
|
||||
exports.toDuration = toDuration;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,64 @@
|
||||
/*!
|
||||
FullCalendar Moment Timezone Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('moment'), require('moment-timezone/builds/moment-timezone-with-data'), require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', 'moment', 'moment-timezone/builds/moment-timezone-with-data', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarMomentTimezone = {}, global.moment, global.moment, global.FullCalendar));
|
||||
}(this, function (exports, momentNs, momentTimezoneWithData, core) { 'use strict';
|
||||
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
/* global Reflect, Promise */
|
||||
|
||||
var extendStatics = function(d, b) {
|
||||
extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
|
||||
function __extends(d, b) {
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
}
|
||||
|
||||
var moment = momentNs; // the directly callable function
|
||||
var MomentNamedTimeZone = /** @class */ (function (_super) {
|
||||
__extends(MomentNamedTimeZone, _super);
|
||||
function MomentNamedTimeZone() {
|
||||
return _super !== null && _super.apply(this, arguments) || this;
|
||||
}
|
||||
MomentNamedTimeZone.prototype.offsetForArray = function (a) {
|
||||
return moment.tz(a, this.timeZoneName).utcOffset();
|
||||
};
|
||||
MomentNamedTimeZone.prototype.timestampToArray = function (ms) {
|
||||
return moment.tz(ms, this.timeZoneName).toArray();
|
||||
};
|
||||
return MomentNamedTimeZone;
|
||||
}(core.NamedTimeZoneImpl));
|
||||
var main = core.createPlugin({
|
||||
namedTimeZonedImpl: MomentNamedTimeZone
|
||||
});
|
||||
|
||||
exports.default = main;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,110 @@
|
||||
/*!
|
||||
FullCalendar Moment Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('moment'), require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', 'moment', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarMoment = {}, global.moment, global.FullCalendar));
|
||||
}(this, function (exports, momentNs, core) { 'use strict';
|
||||
|
||||
var moment = momentNs; // the directly callable function
|
||||
function toMoment(date, calendar) {
|
||||
if (!(calendar instanceof core.Calendar)) {
|
||||
throw new Error('must supply a Calendar instance');
|
||||
}
|
||||
return convertToMoment(date, calendar.dateEnv.timeZone, null, calendar.dateEnv.locale.codes[0]);
|
||||
}
|
||||
function toDuration(fcDuration) {
|
||||
return moment.duration(fcDuration); // moment accepts all the props that fc.Duration already has!
|
||||
}
|
||||
function formatWithCmdStr(cmdStr, arg) {
|
||||
var cmd = parseCmdStr(cmdStr);
|
||||
if (arg.end) {
|
||||
var startMom = convertToMoment(arg.start.array, arg.timeZone, arg.start.timeZoneOffset, arg.localeCodes[0]);
|
||||
var endMom = convertToMoment(arg.end.array, arg.timeZone, arg.end.timeZoneOffset, arg.localeCodes[0]);
|
||||
return formatRange(cmd, createMomentFormatFunc(startMom), createMomentFormatFunc(endMom), arg.separator);
|
||||
}
|
||||
return convertToMoment(arg.date.array, arg.timeZone, arg.date.timeZoneOffset, arg.localeCodes[0]).format(cmd.whole); // TODO: test for this
|
||||
}
|
||||
var main = core.createPlugin({
|
||||
cmdFormatter: formatWithCmdStr
|
||||
});
|
||||
function createMomentFormatFunc(mom) {
|
||||
return function (cmdStr) {
|
||||
return cmdStr ? mom.format(cmdStr) : ''; // because calling with blank string results in ISO8601 :(
|
||||
};
|
||||
}
|
||||
function convertToMoment(input, timeZone, timeZoneOffset, locale) {
|
||||
var mom;
|
||||
if (timeZone === 'local') {
|
||||
mom = moment(input);
|
||||
}
|
||||
else if (timeZone === 'UTC') {
|
||||
mom = moment.utc(input);
|
||||
}
|
||||
else if (moment.tz) {
|
||||
mom = moment.tz(input, timeZone);
|
||||
}
|
||||
else {
|
||||
mom = moment.utc(input);
|
||||
if (timeZoneOffset != null) {
|
||||
mom.utcOffset(timeZoneOffset);
|
||||
}
|
||||
}
|
||||
mom.locale(locale);
|
||||
return mom;
|
||||
}
|
||||
function parseCmdStr(cmdStr) {
|
||||
var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
|
||||
if (parts) {
|
||||
var middle = parseCmdStr(parts[2]);
|
||||
return {
|
||||
head: parts[1],
|
||||
middle: middle,
|
||||
tail: parts[3],
|
||||
whole: parts[1] + middle.whole + parts[3]
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
head: null,
|
||||
middle: null,
|
||||
tail: null,
|
||||
whole: cmdStr
|
||||
};
|
||||
}
|
||||
}
|
||||
function formatRange(cmd, formatStart, formatEnd, separator) {
|
||||
if (cmd.middle) {
|
||||
var startHead = formatStart(cmd.head);
|
||||
var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
|
||||
var startTail = formatStart(cmd.tail);
|
||||
var endHead = formatEnd(cmd.head);
|
||||
var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
|
||||
var endTail = formatEnd(cmd.tail);
|
||||
if (startHead === endHead && startTail === endTail) {
|
||||
return startHead +
|
||||
(startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
|
||||
startTail;
|
||||
}
|
||||
}
|
||||
var startWhole = formatStart(cmd.whole);
|
||||
var endWhole = formatEnd(cmd.whole);
|
||||
if (startWhole === endWhole) {
|
||||
return startWhole;
|
||||
}
|
||||
else {
|
||||
return startWhole + separator + endWhole;
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = main;
|
||||
exports.toDuration = toDuration;
|
||||
exports.toMoment = toMoment;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,128 @@
|
||||
/*!
|
||||
FullCalendar RRule Plugin v4.4.0
|
||||
Docs & License: https://fullcalendar.io/
|
||||
(c) 2019 Adam Shaw
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rrule'), require('@fullcalendar/core')) :
|
||||
typeof define === 'function' && define.amd ? define(['exports', 'rrule', '@fullcalendar/core'], factory) :
|
||||
(global = global || self, factory(global.FullCalendarRrule = {}, global.rrule, global.FullCalendar));
|
||||
}(this, function (exports, rrule, core) { 'use strict';
|
||||
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
***************************************************************************** */
|
||||
|
||||
var __assign = function() {
|
||||
__assign = Object.assign || function __assign(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
|
||||
var EVENT_DEF_PROPS = {
|
||||
rrule: null,
|
||||
duration: core.createDuration
|
||||
};
|
||||
var recurring = {
|
||||
parse: function (rawEvent, leftoverProps, dateEnv) {
|
||||
if (rawEvent.rrule != null) {
|
||||
var props = core.refineProps(rawEvent, EVENT_DEF_PROPS, {}, leftoverProps);
|
||||
var parsed = parseRRule(props.rrule, dateEnv);
|
||||
if (parsed) {
|
||||
return {
|
||||
typeData: parsed.rrule,
|
||||
allDayGuess: parsed.allDayGuess,
|
||||
duration: props.duration
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
expand: function (rrule, framingRange) {
|
||||
// we WANT an inclusive start and in exclusive end, but the js rrule lib will only do either BOTH
|
||||
// inclusive or BOTH exclusive, which is stupid: https://github.com/jakubroztocil/rrule/issues/84
|
||||
// Workaround: make inclusive, which will generate extra occurences, and then trim.
|
||||
return rrule.between(framingRange.start, framingRange.end, true)
|
||||
.filter(function (date) {
|
||||
return date.valueOf() < framingRange.end.valueOf();
|
||||
});
|
||||
}
|
||||
};
|
||||
var main = core.createPlugin({
|
||||
recurringTypes: [recurring]
|
||||
});
|
||||
function parseRRule(input, dateEnv) {
|
||||
var allDayGuess = null;
|
||||
var rrule$1;
|
||||
if (typeof input === 'string') {
|
||||
rrule$1 = rrule.rrulestr(input);
|
||||
}
|
||||
else if (typeof input === 'object' && input) { // non-null object
|
||||
var refined = __assign({}, input); // copy
|
||||
if (typeof refined.dtstart === 'string') {
|
||||
var dtstartMeta = dateEnv.createMarkerMeta(refined.dtstart);
|
||||
if (dtstartMeta) {
|
||||
refined.dtstart = dtstartMeta.marker;
|
||||
allDayGuess = dtstartMeta.isTimeUnspecified;
|
||||
}
|
||||
else {
|
||||
delete refined.dtstart;
|
||||
}
|
||||
}
|
||||
if (typeof refined.until === 'string') {
|
||||
refined.until = dateEnv.createMarker(refined.until);
|
||||
}
|
||||
if (refined.freq != null) {
|
||||
refined.freq = convertConstant(refined.freq);
|
||||
}
|
||||
if (refined.wkst != null) {
|
||||
refined.wkst = convertConstant(refined.wkst);
|
||||
}
|
||||
else {
|
||||
refined.wkst = (dateEnv.weekDow - 1 + 7) % 7; // convert Sunday-first to Monday-first
|
||||
}
|
||||
if (refined.byweekday != null) {
|
||||
refined.byweekday = convertConstants(refined.byweekday); // the plural version
|
||||
}
|
||||
rrule$1 = new rrule.RRule(refined);
|
||||
}
|
||||
if (rrule$1) {
|
||||
return { rrule: rrule$1, allDayGuess: allDayGuess };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function convertConstants(input) {
|
||||
if (Array.isArray(input)) {
|
||||
return input.map(convertConstant);
|
||||
}
|
||||
return convertConstant(input);
|
||||
}
|
||||
function convertConstant(input) {
|
||||
if (typeof input === 'string') {
|
||||
return rrule.RRule[input.toUpperCase()];
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
exports.default = main;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,309 @@
|
||||
@charset "UTF-8";
|
||||
/* TimeGridView all-day area
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-timeGrid-view .fc-day-grid {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
/* so the "more.." popover will be over the time grid */
|
||||
}
|
||||
|
||||
.fc-timeGrid-view .fc-day-grid .fc-row {
|
||||
min-height: 3em;
|
||||
/* all-day section will never get shorter than this */
|
||||
}
|
||||
|
||||
.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton {
|
||||
padding-bottom: 1em;
|
||||
/* give space underneath events for clicking/selecting days */
|
||||
}
|
||||
|
||||
/* TimeGrid axis running down the side (for both the all-day area and the slot area)
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc .fc-axis {
|
||||
/* .fc to overcome default cell styles */
|
||||
vertical-align: middle;
|
||||
padding: 0 4px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.fc-ltr .fc-axis {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-axis {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* TimeGrid Structure
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-time-grid-container,
|
||||
.fc-time-grid {
|
||||
/* so slats/bg/content/etc positions get scoped within here */
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.fc-time-grid {
|
||||
min-height: 100%;
|
||||
/* so if height setting is 'auto', .fc-bg stretches to fill height */
|
||||
}
|
||||
|
||||
.fc-time-grid table {
|
||||
/* don't put outer borders on slats/bg/content/etc */
|
||||
border: 0 hidden transparent;
|
||||
}
|
||||
|
||||
.fc-time-grid > .fc-bg {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-slats,
|
||||
.fc-time-grid > hr {
|
||||
/* the <hr> TimeGridView injects when grid is shorter than scroller */
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-content-col {
|
||||
position: relative;
|
||||
/* because now-indicator lives directly inside */
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-content-skeleton {
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* divs within a cell within the fc-content-skeleton */
|
||||
.fc-time-grid .fc-business-container {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-bgevent-container {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-highlight-container {
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-event-container {
|
||||
position: relative;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-now-indicator-line {
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-mirror-container {
|
||||
/* also is fc-event-container */
|
||||
position: relative;
|
||||
z-index: 6;
|
||||
}
|
||||
|
||||
/* TimeGrid Slats (lines that run horizontally)
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-time-grid .fc-slats td {
|
||||
height: 1.5em;
|
||||
border-bottom: 0;
|
||||
/* each cell is responsible for its top border */
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-slats .fc-minor td {
|
||||
border-top-style: dotted;
|
||||
}
|
||||
|
||||
/* TimeGrid Highlighting Slots
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-time-grid .fc-highlight-container {
|
||||
/* a div within a cell within the fc-highlight-skeleton */
|
||||
position: relative;
|
||||
/* scopes the left/right of the fc-highlight to be in the column */
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-highlight {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
/* top and bottom will be in by JS */
|
||||
}
|
||||
|
||||
/* TimeGrid Event Containment
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-ltr .fc-time-grid .fc-event-container {
|
||||
/* space on the sides of events for LTR (default) */
|
||||
margin: 0 2.5% 0 2px;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-time-grid .fc-event-container {
|
||||
/* space on the sides of events for RTL */
|
||||
margin: 0 2px 0 2.5%;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-event,
|
||||
.fc-time-grid .fc-bgevent {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
/* scope inner z-index's */
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-bgevent {
|
||||
/* background events always span full width */
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* TimeGrid Event Styling
|
||||
----------------------------------------------------------------------------------------------------
|
||||
We use the full "fc-time-grid-event" class instead of using descendants because the event won't
|
||||
be a descendant of the grid when it is being dragged.
|
||||
*/
|
||||
.fc-time-grid-event {
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.fc-time-grid-event-inset {
|
||||
-webkit-box-shadow: 0px 0px 0px 1px #fff;
|
||||
box-shadow: 0px 0px 0px 1px #fff;
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-not-start {
|
||||
/* events that are continuing from another day */
|
||||
/* replace space made by the top border with padding */
|
||||
border-top-width: 0;
|
||||
padding-top: 1px;
|
||||
/* remove top rounded corners */
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-not-end {
|
||||
/* replace space made by the top border with padding */
|
||||
border-bottom-width: 0;
|
||||
padding-bottom: 1px;
|
||||
/* remove bottom rounded corners */
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.fc-time-grid-event .fc-content {
|
||||
overflow: hidden;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.fc-time-grid-event .fc-time,
|
||||
.fc-time-grid-event .fc-title {
|
||||
padding: 0 1px;
|
||||
}
|
||||
|
||||
.fc-time-grid-event .fc-time {
|
||||
font-size: 0.85em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* short mode, where time and title are on the same line */
|
||||
.fc-time-grid-event.fc-short .fc-content {
|
||||
/* don't wrap to second line (now that contents will be inline) */
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-short .fc-time,
|
||||
.fc-time-grid-event.fc-short .fc-title {
|
||||
/* put the time and title on the same line */
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-short .fc-time span {
|
||||
display: none;
|
||||
/* don't display the full time text... */
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-short .fc-time:before {
|
||||
content: attr(data-start);
|
||||
/* ...instead, display only the start time */
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-short .fc-time:after {
|
||||
content: " - ";
|
||||
/* seperate with a dash, wrapped in nbsp's */
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-short .fc-title {
|
||||
font-size: 0.85em;
|
||||
/* make the title text the same size as the time */
|
||||
padding: 0;
|
||||
/* undo padding from above */
|
||||
}
|
||||
|
||||
/* resizer (cursor device) */
|
||||
.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 8px;
|
||||
overflow: hidden;
|
||||
line-height: 8px;
|
||||
font-size: 11px;
|
||||
font-family: monospace;
|
||||
text-align: center;
|
||||
cursor: s-resize;
|
||||
}
|
||||
|
||||
.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after {
|
||||
content: "=";
|
||||
}
|
||||
|
||||
/* resizer (touch device) */
|
||||
.fc-time-grid-event.fc-selected .fc-resizer {
|
||||
/* 10x10 dot */
|
||||
border-radius: 5px;
|
||||
border-width: 1px;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-style: solid;
|
||||
border-color: inherit;
|
||||
background: #fff;
|
||||
/* horizontally center */
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
/* center on the bottom edge */
|
||||
bottom: -5px;
|
||||
}
|
||||
|
||||
/* Now Indicator
|
||||
--------------------------------------------------------------------------------------------------*/
|
||||
.fc-time-grid .fc-now-indicator-line {
|
||||
border-top-width: 1px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/* arrow on axis */
|
||||
.fc-time-grid .fc-now-indicator-arrow {
|
||||
margin-top: -5px;
|
||||
/* vertically center on top coordinate */
|
||||
}
|
||||
|
||||
.fc-ltr .fc-time-grid .fc-now-indicator-arrow {
|
||||
left: 0;
|
||||
/* triangle pointing right... */
|
||||
border-width: 5px 0 5px 6px;
|
||||
border-top-color: transparent;
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
|
||||
.fc-rtl .fc-time-grid .fc-now-indicator-arrow {
|
||||
right: 0;
|
||||
/* triangle pointing left... */
|
||||
border-width: 5px 6px 5px 0;
|
||||
border-top-color: transparent;
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -356,7 +356,7 @@ return AbstractModel.extend({
|
||||
return this._rpc({
|
||||
model: this.modelName,
|
||||
method: 'write',
|
||||
args: [[record.id], data],
|
||||
args: [[parseInt(record.id, 10)], data],
|
||||
context: context
|
||||
});
|
||||
},
|
||||
@@ -419,11 +419,22 @@ return AbstractModel.extend({
|
||||
* @returns {Object}
|
||||
*/
|
||||
_getFullCalendarOptions: function () {
|
||||
var format12Hour = {
|
||||
hour: 'numeric',
|
||||
minute: '2-digit',
|
||||
omitZeroMinute: true,
|
||||
meridiem: 'short'
|
||||
};
|
||||
var format24Hour = {
|
||||
hour: 'numeric',
|
||||
minute: '2-digit',
|
||||
hour12: false,
|
||||
};
|
||||
return {
|
||||
defaultView: (this.mode === "month")? "month" : ((this.mode === "week")? "agendaWeek" : ((this.mode === "day")? "agendaDay" : "agendaWeek")),
|
||||
defaultView: (this.mode === "month")? "dayGridMonth" : ((this.mode === "week")? "timeGridWeek" : ((this.mode === "day")? "timeGridDay" : "timeGridWeek")),
|
||||
header: false,
|
||||
selectable: this.creatable && this.create_right,
|
||||
selectHelper: true,
|
||||
selectMirror: true,
|
||||
editable: this.editable,
|
||||
droppable: true,
|
||||
navLinks: false,
|
||||
@@ -434,14 +445,18 @@ return AbstractModel.extend({
|
||||
nowIndicator: true,
|
||||
weekNumbers: true,
|
||||
weekNumbersWithinDays: true,
|
||||
weekNumberTitle: _t("Week") + " ",
|
||||
weekNumberCalculation: function (date) {
|
||||
// Since FullCalendar v4 ISO 8601 week date is preferred so we force the old system
|
||||
return moment(date).week();
|
||||
},
|
||||
weekLabel: _t("Week"),
|
||||
allDayText: _t("All day"),
|
||||
monthNames: moment.months(),
|
||||
monthNamesShort: moment.monthsShort(),
|
||||
dayNames: moment.weekdays(),
|
||||
dayNamesShort: moment.weekdaysShort(),
|
||||
firstDay: this.week_start,
|
||||
slotLabelFormat: _t.database.parameters.time_format.search("%H") != -1 ? 'H:mm': 'h(:mm)a',
|
||||
slotLabelFormat: _t.database.parameters.time_format.search("%H") !== -1 ? format24Hour : format12Hour,
|
||||
};
|
||||
},
|
||||
/**
|
||||
@@ -733,10 +748,10 @@ return AbstractModel.extend({
|
||||
}
|
||||
var r = {
|
||||
'record': evt,
|
||||
'start': date_start,
|
||||
'end': date_stop,
|
||||
'r_start': date_start.clone(),
|
||||
'r_end': date_stop.clone(),
|
||||
'start': date_start.local(true).toDate(),
|
||||
'end': date_stop.local(true).toDate(),
|
||||
'r_start': date_start.clone().local(true).toDate(),
|
||||
'r_end': date_stop.clone().local(true).toDate(),
|
||||
'title': the_title,
|
||||
'allDay': all_day,
|
||||
'id': evt.id,
|
||||
@@ -754,8 +769,8 @@ return AbstractModel.extend({
|
||||
// allow to resize in month mode
|
||||
r.reset_allday = r.allDay;
|
||||
r.allDay = true;
|
||||
r.start = date_start.format('YYYY-MM-DD');
|
||||
r.end = date_stop.startOf('day').format('YYYY-MM-DD');
|
||||
r.start = date_start.toDate();
|
||||
r.end = date_stop.startOf('day').toDate();
|
||||
r.showTime = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ var CalendarPopover = Widget.extend(WidgetAdapterMixin, StandaloneFieldManagerMi
|
||||
var field = {
|
||||
name: fieldName,
|
||||
string: displayFieldInfo.attrs.string || fieldInfo.string,
|
||||
value: self.event.record[fieldName],
|
||||
value: self.event.extendedProps.record[fieldName],
|
||||
type: fieldInfo.type,
|
||||
};
|
||||
if (field.type === 'selection') {
|
||||
@@ -199,7 +199,7 @@ var CalendarPopover = Widget.extend(WidgetAdapterMixin, StandaloneFieldManagerMi
|
||||
ev.preventDefault();
|
||||
this.trigger_up('edit_event', {
|
||||
id: this.event.id,
|
||||
title: this.event.record.display_name,
|
||||
title: this.event.extendedProps.record.display_name,
|
||||
});
|
||||
},
|
||||
/**
|
||||
|
||||
@@ -16,9 +16,9 @@ var _t = core._t;
|
||||
var qweb = core.qweb;
|
||||
|
||||
var scales = {
|
||||
day: 'agendaDay',
|
||||
week: 'agendaWeek',
|
||||
month: 'month'
|
||||
day: 'timeGridDay',
|
||||
week: 'timeGridWeek',
|
||||
month: 'dayGridMonth'
|
||||
};
|
||||
|
||||
var SidebarFilterM2O = relational_fields.FieldMany2One.extend({
|
||||
@@ -78,6 +78,7 @@ var SidebarFilter = Widget.extend(FieldManagerMixin, {
|
||||
{
|
||||
mode: 'edit',
|
||||
attrs: {
|
||||
string: _t(self.fields[self.fieldName].string),
|
||||
placeholder: "+ " + _.str.sprintf(_t("Add %s"), self.title),
|
||||
can_create: false
|
||||
},
|
||||
@@ -192,6 +193,7 @@ return AbstractRenderer.extend({
|
||||
this.hideDate = params.hideDate;
|
||||
this.hideTime = params.hideTime;
|
||||
this.canDelete = params.canDelete;
|
||||
this._isInDOM = false;
|
||||
},
|
||||
/**
|
||||
* @override
|
||||
@@ -209,22 +211,29 @@ return AbstractRenderer.extend({
|
||||
* @override
|
||||
*/
|
||||
on_attach_callback: function () {
|
||||
this._super(...arguments);
|
||||
this._isInDOM = true;
|
||||
if (config.device.isMobile) {
|
||||
this.$el.height($(window).height() - this.$el.offset().top);
|
||||
}
|
||||
var scrollTop = this.$calendar.find('.fc-scroller').scrollTop();
|
||||
if (scrollTop) {
|
||||
this.$calendar.fullCalendar('reinitView');
|
||||
} else {
|
||||
this.$calendar.fullCalendar('render');
|
||||
}
|
||||
// BUG Test ????
|
||||
// this.$el.height($(window).height() - this.$el.offset().top);
|
||||
this.calendar.render();
|
||||
this._renderCalendar();
|
||||
},
|
||||
/**
|
||||
* Called when the field is detached from the DOM.
|
||||
*/
|
||||
on_detach_callback: function () {
|
||||
this._super(...arguments);
|
||||
this._isInDOM = false;
|
||||
},
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
destroy: function () {
|
||||
if (this.$calendar) {
|
||||
this.$calendar.fullCalendar('destroy');
|
||||
if (this.calendar) {
|
||||
this.calendar.destroy();
|
||||
}
|
||||
if (this.$small_calendar) {
|
||||
this.$small_calendar.datepicker('destroy');
|
||||
@@ -296,9 +305,9 @@ return AbstractRenderer.extend({
|
||||
* @override
|
||||
*/
|
||||
getLocalState: function () {
|
||||
var $fcScroller = this.$calendar.find('.fc-scroller');
|
||||
var fcScroller = this.calendarElement.querySelector('.fc-scroller');
|
||||
return {
|
||||
scrollPosition: $fcScroller.scrollTop(),
|
||||
scrollPosition: fcScroller.scrollTop,
|
||||
};
|
||||
},
|
||||
/**
|
||||
@@ -306,8 +315,8 @@ return AbstractRenderer.extend({
|
||||
*/
|
||||
setLocalState: function (localState) {
|
||||
if (localState.scrollPosition) {
|
||||
var $fcScroller = this.$calendar.find('.fc-scroller');
|
||||
$fcScroller.scrollTop(localState.scrollPosition);
|
||||
var fcScroller = this.calendarElement.querySelector('.fc-scroller');
|
||||
fcScroller.scrollTop = localState.scrollPosition;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -325,14 +334,15 @@ return AbstractRenderer.extend({
|
||||
var self = this;
|
||||
var touchStartX;
|
||||
var touchEndX;
|
||||
this.$calendar.on('touchstart', function (event) {
|
||||
touchStartX = event.originalEvent.touches[0].pageX;
|
||||
this.calendarElement.addEventListener('touchstart', function (event) {
|
||||
self.isSwipeEnabled = true;
|
||||
touchStartX = event.touches[0].pageX;
|
||||
});
|
||||
this.$calendar.on('touchend', function (event) {
|
||||
touchEndX = event.originalEvent.changedTouches[0].pageX;
|
||||
this.calendarElement.addEventListener('touchend', function (event) {
|
||||
if (!self.isSwipeEnabled) {
|
||||
return;
|
||||
}
|
||||
touchEndX = event.changedTouches[0].pageX;
|
||||
if (touchStartX - touchEndX > 100) {
|
||||
self.trigger_up('next');
|
||||
} else if (touchStartX - touchEndX < -100) {
|
||||
@@ -340,6 +350,35 @@ return AbstractRenderer.extend({
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Convert the new format of Event from FullCalendar V4 to a Event FullCalendar V3
|
||||
* @param fc4Event
|
||||
* @return {Object} FullCalendar V3 Object Event
|
||||
* @private
|
||||
*/
|
||||
_convertEventToFC3Event: function (fc4Event) {
|
||||
var event = fc4Event;
|
||||
if (!moment.isMoment(fc4Event.start)) {
|
||||
event = {
|
||||
id: fc4Event.id,
|
||||
title: fc4Event.title,
|
||||
start: moment(fc4Event.start).utcOffset(0, true),
|
||||
end: fc4Event.end && moment(fc4Event.end).utcOffset(0, true),
|
||||
allDay: fc4Event.allDay,
|
||||
color: fc4Event.color,
|
||||
};
|
||||
if (fc4Event.extendedProps) {
|
||||
event = Object.assign({}, event, {
|
||||
r_start: fc4Event.extendedProps.r_start && moment(fc4Event.extendedProps.r_start).utcOffset(0, true),
|
||||
r_end: fc4Event.extendedProps.r_end && moment(fc4Event.extendedProps.r_end).utcOffset(0, true),
|
||||
reset_allday: fc4Event.extendedProps.reset_allday,
|
||||
record: fc4Event.extendedProps.record,
|
||||
attendees: fc4Event.extendedProps.attendees,
|
||||
});
|
||||
}
|
||||
}
|
||||
return event;
|
||||
},
|
||||
/**
|
||||
* @param {any} event
|
||||
* @returns {string} the html for the rendered event
|
||||
@@ -347,8 +386,8 @@ return AbstractRenderer.extend({
|
||||
_eventRender: function (event) {
|
||||
var qweb_context = {
|
||||
event: event,
|
||||
record: event.record,
|
||||
color: this.getColor(event.color_index),
|
||||
record: event.extendedProps.record,
|
||||
color: this.getColor(event.extendedProps.color_index),
|
||||
};
|
||||
this.qweb_context = qweb_context;
|
||||
if (_.isEmpty(qweb_context.record)) {
|
||||
@@ -379,43 +418,50 @@ return AbstractRenderer.extend({
|
||||
_initCalendar: function () {
|
||||
var self = this;
|
||||
|
||||
this.$calendar = this.$(".o_calendar_widget");
|
||||
|
||||
// This seems like a workaround but apparently passing the locale
|
||||
// in the options is not enough. We should initialize it beforehand
|
||||
this.calendarElement = this.$(".o_calendar_widget")[0];
|
||||
var locale = moment.locale();
|
||||
$.fullCalendar.locale(locale);
|
||||
|
||||
//Documentation here : http://arshaw.com/fullcalendar/docs/
|
||||
var fc_options = $.extend({}, this.state.fc_options, {
|
||||
eventDrop: function (event) {
|
||||
plugins: [
|
||||
'moment',
|
||||
'interaction',
|
||||
'dayGrid',
|
||||
'timeGrid'
|
||||
],
|
||||
eventDrop: function (eventDropInfo) {
|
||||
var event = self._convertEventToFC3Event(eventDropInfo.event);
|
||||
self.trigger_up('dropRecord', event);
|
||||
},
|
||||
eventResize: function (event) {
|
||||
eventResize: function (eventResizeInfo) {
|
||||
self.isSwipeEnabled = false;
|
||||
self._unselectEvent();
|
||||
var event = self._convertEventToFC3Event(eventResizeInfo.event);
|
||||
self.trigger_up('updateRecord', event);
|
||||
},
|
||||
eventClick: function (eventData, ev) {
|
||||
eventClick: function (eventClickInfo) {
|
||||
var eventData = eventClickInfo.event;
|
||||
self._unselectEvent();
|
||||
self.$calendar.find(_.str.sprintf('[data-event-id=%s]', eventData.id)).addClass('o_cw_custom_highlight');
|
||||
self._renderEventPopover(eventData, $(ev.currentTarget));
|
||||
$(self.calendarElement).find(_.str.sprintf('[data-event-id=%s]', eventData.id)).addClass('o_cw_custom_highlight');
|
||||
self._renderEventPopover(eventData, $(eventClickInfo.el));
|
||||
},
|
||||
select: function (startDate, endDate) {
|
||||
self.isSwipeEnabled = false;
|
||||
select: function (selectionInfo) {
|
||||
// Clicking on the view, dispose any visible popover. Otherwise create a new event.
|
||||
if (self.$('.o_cw_popover').length) {
|
||||
self._unselectEvent();
|
||||
} else {
|
||||
var data = {start: startDate, end: endDate};
|
||||
var data = {start: selectionInfo.start, end: selectionInfo.end};
|
||||
if (self.state.context.default_name) {
|
||||
data.title = self.state.context.default_name;
|
||||
}
|
||||
self.trigger_up('openCreate', data);
|
||||
self.trigger_up('openCreate', self._convertEventToFC3Event(data));
|
||||
}
|
||||
self.$calendar.fullCalendar('unselect');
|
||||
self.calendar.unselect();
|
||||
},
|
||||
eventRender: function (event, element, view) {
|
||||
eventRender: function (info) {
|
||||
self.isSwipeEnabled = false;
|
||||
var event = info.event;
|
||||
var element = $(info.el);
|
||||
var view = info.view;
|
||||
var $render = $(self._eventRender(event));
|
||||
element.find('.fc-content').html($render.html());
|
||||
element.addClass($render.attr('class'));
|
||||
@@ -426,17 +472,17 @@ return AbstractRenderer.extend({
|
||||
element.find('.fc-content').after($('<div/>', {class: 'fc-bg'}));
|
||||
}
|
||||
|
||||
if (view.name === 'month' && event.record) {
|
||||
var start = event.r_start || event.start;
|
||||
var end = event.r_end || event.end;
|
||||
if (view.type === 'dayGridMonth' && event.extendedProps.record) {
|
||||
var start = event.extendedProps.r_start || event.start;
|
||||
var end = event.extendedProps.r_end || event.end;
|
||||
// Detect if the event occurs in just one day
|
||||
// note: add & remove 1 min to avoid issues with 00:00
|
||||
var isSameDayEvent = start.clone().add(1, 'minute').isSame(end.clone().subtract(1, 'minute'), 'day');
|
||||
if (!event.record.allday && isSameDayEvent) {
|
||||
var isSameDayEvent = moment(start).clone().add(1, 'minute').isSame(moment(end).clone().subtract(1, 'minute'), 'day');
|
||||
if (!event.extendedProps.record.allday && isSameDayEvent) {
|
||||
// For month view: do not show background for non allday, single day events
|
||||
element.addClass('o_cw_nobg');
|
||||
if (event.showTime && !self.hideTime) {
|
||||
const displayTime = start.format(self._getDbTimeFormat());
|
||||
if (event.extendedProps.showTime && !self.hideTime) {
|
||||
const displayTime = moment(start).clone().format(self._getDbTimeFormat());
|
||||
element.find('.fc-content .fc-time').text(displayTime);
|
||||
}
|
||||
}
|
||||
@@ -447,32 +493,36 @@ return AbstractRenderer.extend({
|
||||
self.trigger_up('edit_event', {id: event.id});
|
||||
});
|
||||
},
|
||||
eventAfterAllRender: function () {
|
||||
self.isSwipeEnabled = true;
|
||||
eventPositioned: function (){
|
||||
self.isSwipeEnabled = false;
|
||||
},
|
||||
viewRender: function (view) {
|
||||
// compute mode from view.name which is either 'month', 'agendaWeek' or 'agendaDay'
|
||||
var mode = view.name === 'month' ? 'month' : (view.name === 'agendaWeek' ? 'week' : 'day');
|
||||
datesRender: function (info) {
|
||||
// compute mode from view.type which is either 'dayGridMonth', 'timeGridWeek' or 'timeGridDay'
|
||||
var mode = info.view.type === 'dayGridMonth' ? 'month' : (info.view.type === 'timeGridWeek' ? 'week' : 'day');
|
||||
self.trigger_up('viewUpdated', {
|
||||
mode: mode,
|
||||
title: view.title,
|
||||
title: info.view.title,
|
||||
});
|
||||
},
|
||||
// Add/Remove a class on hover to style multiple days events.
|
||||
// The css ":hover" selector can't be used because these events
|
||||
// are rendered using multiple elements.
|
||||
eventMouseover: function (eventData) {
|
||||
self.$calendar.find(_.str.sprintf('[data-event-id=%s]', eventData.id)).addClass('o_cw_custom_hover');
|
||||
eventMouseEnter: function (mouseEnterInfo) {
|
||||
$(self.calendarElement).find(_.str.sprintf('[data-event-id=%s]', mouseEnterInfo.event.id)).addClass('o_cw_custom_hover');
|
||||
},
|
||||
eventMouseout: function (eventData) {
|
||||
self.$calendar.find(_.str.sprintf('[data-event-id=%s]', eventData.id)).removeClass('o_cw_custom_hover');
|
||||
eventMouseLeave: function (mouseLeaveInfo) {
|
||||
if (!mouseLeaveInfo.event.id) {
|
||||
return;
|
||||
}
|
||||
$(self.calendarElement).find(_.str.sprintf('[data-event-id=%s]', mouseLeaveInfo.event.id)).removeClass('o_cw_custom_hover');
|
||||
},
|
||||
eventDragStart: function (eventData) {
|
||||
self.$calendar.find(_.str.sprintf('[data-event-id=%s]', eventData.id)).addClass('o_cw_custom_hover');
|
||||
eventDragStart: function (mouseDragInfo) {
|
||||
$(self.calendarElement).find(_.str.sprintf('[data-event-id=%s]', mouseDragInfo.event.id)).addClass('o_cw_custom_hover');
|
||||
self._unselectEvent();
|
||||
},
|
||||
eventResizeStart: function (eventData) {
|
||||
self.$calendar.find(_.str.sprintf('[data-event-id=%s]', eventData.id)).addClass('o_cw_custom_hover');
|
||||
eventResizeStart: function (mouseResizeInfo) {
|
||||
self.isSwipeEnabled = false;
|
||||
$(self.calendarElement).find(_.str.sprintf('[data-event-id=%s]', mouseResizeInfo.event.id)).addClass('o_cw_custom_hover');
|
||||
self._unselectEvent();
|
||||
},
|
||||
eventLimitClick: function () {
|
||||
@@ -483,23 +533,23 @@ return AbstractRenderer.extend({
|
||||
self._render();
|
||||
},
|
||||
views: {
|
||||
day: {
|
||||
columnFormat: 'LL'
|
||||
timeGridDay: {
|
||||
columnHeaderFormat: 'LL'
|
||||
},
|
||||
week: {
|
||||
columnFormat: 'ddd D'
|
||||
timeGridWeek: {
|
||||
columnHeaderFormat: 'ddd D'
|
||||
},
|
||||
month: {
|
||||
columnFormat: config.device.isMobile ? 'ddd' : 'dddd'
|
||||
dayGridMonth: {
|
||||
columnHeaderFormat: config.device.isMobile ? 'ddd' : 'dddd'
|
||||
}
|
||||
},
|
||||
height: 'parent',
|
||||
unselectAuto: false,
|
||||
isRTL: _t.database.parameters.direction === "rtl",
|
||||
locale: locale, // reset locale when fullcalendar has already been instanciated before now
|
||||
dir: _t.database.parameters.direction,
|
||||
locale: locale,
|
||||
});
|
||||
|
||||
this.$calendar.fullCalendar(fc_options);
|
||||
this.calendar = new FullCalendar.Calendar(this.calendarElement, fcOptions);
|
||||
},
|
||||
/**
|
||||
* Initialize the mini calendar in the sidebar
|
||||
@@ -551,22 +601,10 @@ return AbstractRenderer.extend({
|
||||
* @returns {Promise}
|
||||
*/
|
||||
_render: function () {
|
||||
var $calendar = this.$calendar;
|
||||
var $fc_view = $calendar.find('.fc-view');
|
||||
var scrollPosition = $fc_view.scrollLeft();
|
||||
|
||||
$fc_view.scrollLeft(0);
|
||||
$calendar.fullCalendar('unselect');
|
||||
|
||||
if (scales[this.state.scale] !== $calendar.data('fullCalendar').getView().type) {
|
||||
$calendar.fullCalendar('changeView', scales[this.state.scale]);
|
||||
this.$('.o_calendar_view')[0].prepend(this.calendarElement);
|
||||
if (this._isInDOM) {
|
||||
this._renderCalendar();
|
||||
}
|
||||
|
||||
if (this.target_date !== this.state.target_date.toString()) {
|
||||
$calendar.fullCalendar('gotoDate', moment(this.state.target_date));
|
||||
this.target_date = this.state.target_date.toString();
|
||||
}
|
||||
|
||||
this.$small_calendar.datepicker("setDate", this.state.highlight_date.toDate())
|
||||
.find('.o_selected_range')
|
||||
.removeClass('o_color o_selected_range');
|
||||
@@ -581,23 +619,41 @@ return AbstractRenderer.extend({
|
||||
$a.not('.ui-state-active').addClass('o_color');
|
||||
});
|
||||
|
||||
$fc_view.scrollLeft(scrollPosition);
|
||||
|
||||
this._unselectEvent();
|
||||
var filterProm = this._renderFilters();
|
||||
this._renderEvents();
|
||||
this.$calendar.prependTo(this.$('.o_calendar_view'));
|
||||
|
||||
return Promise.all([filterProm, this._super.apply(this, arguments)]);
|
||||
},
|
||||
/**
|
||||
* Render the specific code for the FullCalendar when it's in the DOM
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
_renderCalendar() {
|
||||
this.calendar.unselect();
|
||||
|
||||
if (scales[this.state.scale] !== this.calendar.view.type) {
|
||||
this.calendar.changeView(scales[this.state.scale]);
|
||||
}
|
||||
|
||||
if (this.target_date !== this.state.target_date.toString()) {
|
||||
this.calendar.gotoDate(moment(this.state.target_date).toDate());
|
||||
this.target_date = this.state.target_date.toString();
|
||||
}
|
||||
|
||||
this._unselectEvent();
|
||||
this._renderEvents();
|
||||
// this._scrollToScrollTime();
|
||||
},
|
||||
/**
|
||||
* Render all events
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
_renderEvents: function () {
|
||||
this.$calendar.fullCalendar('removeEvents');
|
||||
this.$calendar.fullCalendar('addEventSource', this.state.data);
|
||||
this.calendar.getEvents().forEach(function(event) {
|
||||
event.remove();
|
||||
});
|
||||
this.calendar.addEventSource(this.state.data);
|
||||
},
|
||||
/**
|
||||
* Render all filters
|
||||
@@ -612,7 +668,7 @@ return AbstractRenderer.extend({
|
||||
filter.destroy();
|
||||
});
|
||||
if (this.state.fullWidth) {
|
||||
return;
|
||||
return Promise.resolve();
|
||||
}
|
||||
return this._renderFiltersOneByOne();
|
||||
},
|
||||
@@ -699,12 +755,12 @@ return AbstractRenderer.extend({
|
||||
canDelete: this.canDelete,
|
||||
};
|
||||
|
||||
var start = moment(eventData.r_start || eventData.start);
|
||||
var end = moment(eventData.r_end || eventData.end);
|
||||
var start = moment((eventData.extendedProps && eventData.extendedProps.r_start) || eventData.start);
|
||||
var end = moment((eventData.extendedProps && eventData.extendedProps.r_end) || eventData.end);
|
||||
var isSameDayEvent = start.clone().add(1, 'minute').isSame(end.clone().subtract(1, 'minute'), 'day');
|
||||
|
||||
// Do not display timing if the event occur across multiple days. Otherwise use user's timing preferences
|
||||
if (!this.hideTime && !eventData.record.allday && isSameDayEvent) {
|
||||
if (!this.hideTime && !eventData.extendedProps.record.allday && isSameDayEvent) {
|
||||
var dbTimeFormat = this._getDbTimeFormat();
|
||||
|
||||
context.eventTime.time = start.clone().format(dbTimeFormat) + ' - ' + end.clone().format(dbTimeFormat);
|
||||
@@ -729,9 +785,9 @@ return AbstractRenderer.extend({
|
||||
context.eventDate.date = isSameDayEvent ? start.clone().format('dddd, LL') : start.clone().format('LL') + ' - ' + end.clone().format('LL');
|
||||
}
|
||||
|
||||
if (eventData.record.allday && isSameDayEvent) {
|
||||
if (eventData.extendedProps.record.allday && isSameDayEvent) {
|
||||
context.eventDate.duration = _t("All day");
|
||||
} else if (eventData.record.allday && !isSameDayEvent) {
|
||||
} else if (eventData.extendedProps.record.allday && !isSameDayEvent) {
|
||||
var daysLocaleData = moment.localeData();
|
||||
var days = moment.duration(end.diff(start)).days();
|
||||
context.eventDate.duration = daysLocaleData.relativeTime(days, true, 'dd');
|
||||
@@ -756,8 +812,8 @@ return AbstractRenderer.extend({
|
||||
},
|
||||
trigger: 'manual',
|
||||
html: true,
|
||||
title: eventData.record.display_name,
|
||||
template: qweb.render('CalendarView.event.popover.placeholder', {color: this.getColor(eventData.color_index)}),
|
||||
title: eventData.extendedProps.record.display_name,
|
||||
template: qweb.render('CalendarView.event.popover.placeholder', {color: this.getColor(eventData.extendedProps.color_index)}),
|
||||
container: eventData.allDay ? '.fc-view' : '.fc-scroller',
|
||||
}
|
||||
},
|
||||
@@ -781,6 +837,14 @@ return AbstractRenderer.extend({
|
||||
}).popover('show');
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Scroll to the time set in the FullCalendar parameter
|
||||
* @private
|
||||
*/
|
||||
_scrollToScrollTime: function () {
|
||||
var scrollTime = this.calendar.getOption('scrollTime');
|
||||
this.calendar.scrollToTime(scrollTime);
|
||||
},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Handlers
|
||||
@@ -812,7 +876,7 @@ return AbstractRenderer.extend({
|
||||
*/
|
||||
_onDeleteEvent: function (event) {
|
||||
this._unselectEvent();
|
||||
this.trigger_up('deleteRecord', {id: event.data.id});
|
||||
this.trigger_up('deleteRecord', {id: parseInt(event.data.id, 10)});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -22,8 +22,20 @@ var fieldsToGather = [
|
||||
var CalendarView = AbstractView.extend({
|
||||
display_name: _lt('Calendar'),
|
||||
icon: 'fa-calendar',
|
||||
jsLibs: ['/web/static/lib/fullcalendar/js/fullcalendar.js'],
|
||||
cssLibs: ['/web/static/lib/fullcalendar/css/fullcalendar.css'],
|
||||
jsLibs: [
|
||||
'/web/static/lib/fullcalendar/core/main.js',
|
||||
'/web/static/lib/fullcalendar/interaction/main.js',
|
||||
'/web/static/lib/fullcalendar/moment/main.js',
|
||||
'/web/static/lib/fullcalendar/daygrid/main.js',
|
||||
'/web/static/lib/fullcalendar/timegrid/main.js',
|
||||
'/web/static/lib/fullcalendar/list/main.js'
|
||||
],
|
||||
cssLibs: [
|
||||
'/web/static/lib/fullcalendar/core/main.css',
|
||||
'/web/static/lib/fullcalendar/daygrid/main.css',
|
||||
'/web/static/lib/fullcalendar/timegrid/main.css',
|
||||
'/web/static/lib/fullcalendar/list/main.css'
|
||||
],
|
||||
config: _.extend({}, AbstractView.prototype.config, {
|
||||
Model: CalendarModel,
|
||||
Controller: CalendarController,
|
||||
|
||||
@@ -90,7 +90,7 @@ $o-cw-filter-avatar-size: 20px;
|
||||
background: gray('400');
|
||||
}
|
||||
|
||||
.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton {
|
||||
.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton {
|
||||
padding: .5em;
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ $o-cw-filter-avatar-size: 20px;
|
||||
// ====================================
|
||||
|
||||
// ====== Both Day and Week agenda
|
||||
.fc-agendaDay-view, .fc-agendaWeek-view {
|
||||
.fc-timeGridDay-view, .fc-timeGridWeek-view {
|
||||
.fc-axis {
|
||||
padding-left: $o-horizontal-padding;
|
||||
}
|
||||
@@ -167,7 +167,7 @@ $o-cw-filter-avatar-size: 20px;
|
||||
box-shadow: inset 0 1px 0 gray('400');
|
||||
}
|
||||
|
||||
.fc-day.fc-widget-content.fc-today.fc-state-highlight {
|
||||
.fc-day.fc-widget-content.fc-today {
|
||||
border-left-color: rgba($o-cw-color-today, 0.3);
|
||||
border-right-color: rgba($o-cw-color-today, 0.3);
|
||||
background: rgba($o-cw-color-today, 0.05 );
|
||||
@@ -177,7 +177,7 @@ $o-cw-filter-avatar-size: 20px;
|
||||
// Prevent events with similar color to visually overlap each other
|
||||
box-shadow: 0 0 0 1px white;
|
||||
|
||||
&.fc-v-event {
|
||||
&.fc-event:not(.fc-h-event) {
|
||||
border-width: 3px 0 0;
|
||||
|
||||
&.fc-not-start {
|
||||
@@ -197,7 +197,7 @@ $o-cw-filter-avatar-size: 20px;
|
||||
}
|
||||
|
||||
// ====== Day only
|
||||
.fc-agendaDay-view .fc-event {
|
||||
.fc-timeGridDay-view .fc-event {
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
|
||||
@@ -208,13 +208,13 @@ $o-cw-filter-avatar-size: 20px;
|
||||
}
|
||||
|
||||
// ====== Week only
|
||||
.fc-agendaWeek-view {
|
||||
.fc-timeGridWeek-view {
|
||||
.fc-now-indicator {
|
||||
left: $o-horizontal-padding;
|
||||
}
|
||||
|
||||
// Expand tiny events on hover/select
|
||||
.fc-v-event.o_cw_custom_highlight, .fc-v-event.o_cw_custom_hover {
|
||||
.fc-event:not(.fc-h-event).o_cw_custom_highlight, .fc-event:not(.fc-h-event).o_cw_custom_hover {
|
||||
transition: margin .1s .3s, left .1s .3s, right .1s .3s;
|
||||
margin: 0!important;
|
||||
right: 1px!important;
|
||||
@@ -223,7 +223,7 @@ $o-cw-filter-avatar-size: 20px;
|
||||
}
|
||||
|
||||
// ====== Month only
|
||||
.fc-month-view {
|
||||
.fc-dayGridMonth-view {
|
||||
padding-left: $o-horizontal-padding;
|
||||
|
||||
.fc-widget-header {
|
||||
@@ -319,11 +319,11 @@ $o-cw-filter-avatar-size: 20px;
|
||||
}
|
||||
// ====== RTL layout(s)
|
||||
&.fc-rtl {
|
||||
.fc-agendaWeek-view .fc-event {
|
||||
.fc-timeGrid-view .fc-event {
|
||||
border-width: 0 3px 0 0;
|
||||
}
|
||||
|
||||
.fc-month-view .fc-event {
|
||||
.fc-dayGridMonth-view .fc-event {
|
||||
border-width: 0 3px 0 0;
|
||||
|
||||
&.fc-not-start {
|
||||
|
||||
@@ -106,7 +106,12 @@ odoo.define('web.test_utils_create', function (require) {
|
||||
return calendar;
|
||||
}
|
||||
const viewElements = [...document.getElementById('qunit-fixture').children];
|
||||
// prepend reset the scrollTop to zero so we restore it manually
|
||||
let fcScroller = document.querySelector('.fc-scroller');
|
||||
const scrollPosition = fcScroller.scrollTop;
|
||||
viewElements.forEach(el => document.body.prepend(el));
|
||||
fcScroller = document.querySelector('.fc-scroller');
|
||||
fcScroller.scrollTop = scrollPosition;
|
||||
|
||||
const destroy = calendar.destroy;
|
||||
calendar.destroy = () => {
|
||||
|
||||
@@ -351,7 +351,7 @@ QUnit.module('Views', {
|
||||
},
|
||||
});
|
||||
|
||||
assert.ok(calendar.$('.fc-month-view').length, "should display in month mode");
|
||||
assert.ok(calendar.$('.fc-dayGridMonth-view').length, "should display in month mode");
|
||||
|
||||
// click on an existing event to open the formViewDialog
|
||||
|
||||
@@ -654,7 +654,7 @@ QUnit.module('Views', {
|
||||
assert.strictEqual($newevent.find('.o_event_title').text(), "new event",
|
||||
"should display the new event with title");
|
||||
|
||||
assert.deepEqual($newevent.data('fcSeg').event.record,
|
||||
assert.deepEqual($newevent[0].fcSeg.eventRange.def.extendedProps.record,
|
||||
{
|
||||
display_name: "new event",
|
||||
start: fieldUtils.parse.datetime("2016-12-13 06:00:00", this.data.event.fields.start, {isUTC: true}),
|
||||
@@ -972,7 +972,7 @@ QUnit.module('Views', {
|
||||
assert.strictEqual($newevent.find('.o_event_title').text(), "new event",
|
||||
"should display the new event with title");
|
||||
|
||||
assert.deepEqual($newevent.data('fcSeg').event.record,
|
||||
assert.deepEqual($newevent[0].fcSeg.eventRange.def.extendedProps.record,
|
||||
{
|
||||
display_name: "new event",
|
||||
start: fieldUtils.parse.datetime("2016-12-13 06:00:00", this.data.event.fields.start, {isUTC: true}),
|
||||
@@ -1083,7 +1083,7 @@ QUnit.module('Views', {
|
||||
assert.strictEqual($newevent.find('.o_event_title').text(), "new event",
|
||||
"should display the new event with title");
|
||||
|
||||
assert.deepEqual($newevent.data('fcSeg').event.record,
|
||||
assert.deepEqual($newevent[0].fcSeg.eventRange.def.extendedProps.record,
|
||||
{
|
||||
display_name: "new event",
|
||||
start: fieldUtils.parse.datetime("2016-12-13 06:00:00", this.data.event.fields.start, {isUTC: true}),
|
||||
@@ -1256,7 +1256,7 @@ QUnit.module('Views', {
|
||||
assert.strictEqual($newevent.find('.o_event_title').text(), "new event",
|
||||
"should display the new event with title");
|
||||
|
||||
assert.deepEqual($newevent.data('fcSeg').event.record,
|
||||
assert.deepEqual($newevent[0].fcSeg.eventRange.def.extendedProps.record,
|
||||
{
|
||||
display_name: "new event",
|
||||
start: fieldUtils.parse.datetime("2016-12-13 06:00:00", this.data.event.fields.start, {isUTC: true}),
|
||||
@@ -1373,7 +1373,7 @@ QUnit.module('Views', {
|
||||
assert.hasAttrValue($newevent.parent(), 'colspan', "2",
|
||||
"should appear over two days.");
|
||||
|
||||
assert.deepEqual($newevent.data('fcSeg').event.record,
|
||||
assert.deepEqual($newevent[0].fcSeg.eventRange.def.extendedProps.record,
|
||||
{
|
||||
display_name: "new event",
|
||||
start: fieldUtils.parse.datetime("2016-12-14 00:00:00", this.data.event.fields.start, {isUTC: true}),
|
||||
@@ -1552,7 +1552,7 @@ QUnit.module('Views', {
|
||||
assert.hasAttrValue($newevent.parent(), 'colspan', "2",
|
||||
"should appear over two days.");
|
||||
|
||||
assert.deepEqual($newevent.data('fcSeg').event.record, {
|
||||
assert.deepEqual($newevent[0].fcSeg.eventRange.def.extendedProps.record, {
|
||||
display_name: "new event",
|
||||
start: fieldUtils.parse.datetime("2016-12-14 05:00:00", this.data.event.fields.start, {isUTC: true}),
|
||||
stop: fieldUtils.parse.datetime("2016-12-15 17:00:00", this.data.event.fields.stop, {isUTC: true}),
|
||||
@@ -1588,25 +1588,25 @@ QUnit.module('Views', {
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsOnce(calendar, '.fc-agendaWeek-view', "should be in week mode");
|
||||
assert.containsOnce(calendar, '.fc-timeGridWeek-view', "should be in week mode");
|
||||
assert.containsN(calendar, '.fc-event', 9, "should display 9 events on the week (4 event + 5 days event)");
|
||||
await testUtils.dom.click(calendar.$('.o_calendar_mini a:contains(19)'));
|
||||
// Clicking on a day in another week should switch to the other week view
|
||||
assert.containsOnce(calendar, '.fc-agendaWeek-view', "should be in week mode");
|
||||
assert.containsOnce(calendar, '.fc-timeGridWeek-view', "should be in week mode");
|
||||
assert.containsN(calendar, '.fc-event', 4, "should display 4 events on the week (1 event + 3 days event)");
|
||||
// Clicking on a day in the same week should switch to that particular day view
|
||||
await testUtils.dom.click(calendar.$('.o_calendar_mini a:contains(18)'));
|
||||
assert.containsOnce(calendar, '.fc-agendaDay-view', "should be in day mode");
|
||||
assert.containsOnce(calendar, '.fc-timeGridDay-view', "should be in day mode");
|
||||
assert.containsN(calendar, '.fc-event', 2, "should display 2 events on the day");
|
||||
// Clicking on the same day should toggle between day, month and week views
|
||||
await testUtils.dom.click(calendar.$('.o_calendar_mini a:contains(18)'));
|
||||
assert.containsOnce(calendar, '.fc-month-view', "should be in month mode");
|
||||
assert.containsOnce(calendar, '.fc-dayGridMonth-view', "should be in month mode");
|
||||
assert.containsN(calendar, '.fc-event', 7, "should display 7 events on the month (event 5 is on multiple weeks and generates to .fc-event)");
|
||||
await testUtils.dom.click(calendar.$('.o_calendar_mini a:contains(18)'));
|
||||
assert.containsOnce(calendar, '.fc-agendaWeek-view', "should be in week mode");
|
||||
assert.containsOnce(calendar, '.fc-timeGridWeek-view', "should be in week mode");
|
||||
assert.containsN(calendar, '.fc-event', 4, "should display 4 events on the week (1 event + 3 days event)");
|
||||
await testUtils.dom.click(calendar.$('.o_calendar_mini a:contains(18)'));
|
||||
assert.containsOnce(calendar, '.fc-agendaDay-view', "should be in day mode");
|
||||
assert.containsOnce(calendar, '.fc-timeGridDay-view', "should be in day mode");
|
||||
assert.containsN(calendar, '.fc-event', 2, "should display 2 events on the day");
|
||||
|
||||
calendar.destroy();
|
||||
@@ -2459,7 +2459,7 @@ QUnit.module('Views', {
|
||||
});
|
||||
assert.containsOnce(calendar, '.fc-day-grid .fc-event-container',
|
||||
"should be one event in the all day row");
|
||||
assert.strictEqual(calendar.model.data.data[0].r_start.date(), 14,
|
||||
assert.strictEqual(moment(calendar.model.data.data[0].r_start).date(), 14,
|
||||
"the date should be 14");
|
||||
calendar.destroy();
|
||||
});
|
||||
|
||||
@@ -607,8 +607,17 @@
|
||||
<script type="text/javascript" src="/web/static/tests/helpers/qunit_asserts.js"></script>
|
||||
|
||||
<!-- add lazy-loaded libs to make tests synchronous -->
|
||||
<link rel="stylesheet" href="/web/static/lib/fullcalendar/css/fullcalendar.css"/>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/js/fullcalendar.js"></script>
|
||||
<link rel="stylesheet" href="/web/static/lib/fullcalendar/core/main.css"/>
|
||||
<link rel="stylesheet" href="/web/static/lib/fullcalendar/daygrid/main.css"/>
|
||||
<link rel="stylesheet" href="/web/static/lib/fullcalendar/timegrid/main.css"/>
|
||||
<link rel="stylesheet" href="/web/static/lib/fullcalendar/list/main.css"/>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/core/main.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/moment/main.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/interaction/main.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/daygrid/main.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/timegrid/main.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/fullcalendar/list/main.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/web/static/lib/ace/ace.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/ace/javascript_highlight_rules.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/ace/mode-python.js"></script>
|
||||
|
||||
Reference in New Issue
Block a user