Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core aguila
Dieses Widget stellt einen Kalender dar, um Termine in einer Tages-, Wochen- und Monatsansicht darzustellen und zu bearbeiten.
Folgendes Skript dient als Grundgerüst für den Aufbau eines Kalenders. Ein vollständiges Beispiel finden Sie am Ende des Dokuments.
let aguila = require('common/aguila');
// create the calendar widget
let widget = aguila.create({
type: 'agorum.single',
width: 800,
height: 600,
items: [
{
// initialize the calendar widget
type: 'agorum.calendar',
name: 'calendar',
flexible: true,
// locale of calendar, eg. de, en
locale: 'de',
// timeZone of calendar, e.g. Europe/Berlin
timeZone: 'local',
// scroll time (time to start in dayGrid)
// optional, Standard: '06:00:00'
scrollTime: '09:00:00',
// slot duration
// optional, Standard: '00:30:00'
slotDuration: '00:30:00',
// current active date-time for displaying
// optional, Standard: current date
activeTime: new Date(),
// set active date-time
// optional, Standard: current date
now: new Date(),
// set active view
// optional: Standard: dayGridMonth
// possible values: dayGridMonth, timeGridWeek, timeGridDay, list
view: 'timeGridWeek',
// set initial events
events: [],
// set calendar not readOnly
// optional, Standard: false
readOnly: false,
// show navigation header
// optional, Standard: false
header: true,
// optional, Standard, siehe Beispiel
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay' // listYear
},
// show week numbers
// optional, Standard: false
weekNumbers: true,
// show now indicator
// optional, Standard: false
nowIndicator: true,
// show navigation links (click on day)
// optional, Standard: false
navLinks: true,
// setup business hours and week days
// optional, Standard: as defined below
businessHours: {
daysOfWeek: [ 1, 2, 3, 4, 5 ],
startTime: '09:00',
endTime: '17:00'
}
}
]
});
// get widgets
let calendar = widget.down('calendar');
/**
* events
*/
/**
* fired, when an event is clicked
*
* info: {
* id: 'id-of-event',
* start: from-date-time
* end: to-date-time
* }
*/
calendar.on('eventClicked', info => {
console.log('eventClicked', info);
});
/**
* fired, when event is changed
* changes can be stored in a database here
*
* info: {
* id: 'id-of-event',
* start: new-start-date-time,
* end: new-end-date-time
* }
*/
calendar.on('eventChanged', info => {
console.log('eventChanged', info);
});
/**
* fired, when an event is added
* event can be saved to a database here
*
* info: {
* start: start-date-time,
* end: end-date-time
* }
*/
calendar.on('eventAdded', info => {
console.log('eventAdded', info);
});
/**
* fired, when the calendar widget wants new events for the given range
* here events can be fetched from a database or a REST service
*
* info: {
* start: from-date-time
* end: to-date-time
* }
*/
calendar.on('fetchEvents', info => {
console.log('fetchEvents', info);
});
/**
* fired, when view is changed
*
* view: string (dayGridMonth, timeGridWeek, timeGridDay, list)
*/
calendar.on('viewChanged', view => {
console.log('viewChanged', view);
});
/**
* fired, when activeTime is changed (normally start of week, month or day)
*
* activeTime: the date-time
*/
calendar.on('activeTimeChanged', activeTime => {
console.log('activeTimeChanged', activeTime);
});
/**
* fired, when now is changed (the current selected date-time)
*
* now: the date-time
*/
calendar.on('nowChanged', now => {
console.log('nowChanged', now);
});
/**
* fired, when activeStart is changed (the start of fetched events)
*
* activeStart: the date-time
*/
calendar.on('activeStartChanged', activeStart => {
console.log('activeStartChanged', activeStart);
});
/**
* fired, when activeEnd is changed (the end of fetched events)
*
* activeEnd: the date-time
*/
calendar.on('activeEndChanged', activeEnd => {
console.log('activeEndChanged', activeEnd);
});
widget;
Lädt der Kalender oder ändert sich der Datumsbereich, löst das Event fetchEvents aus.
Details zum Event selbst (siehe Parameter events).
let event = {
start: new Date('2020-01-01T13:00:00Z'),
end: new Date('2020-01-01T14:00:00Z'),
title: 'Test Termin',
id: 'Eindeutige ID',
description: 'Eine Beschreibung',
color: '#00FF00', // Farbe
mark: 'orange', // Farbe: Markierung linker Rand
textColor: 'white', // Textfarbe
readOnly: false, // Bearbeitbar: false/true
groupId: 'ID einer Gruppe', // etwa für Wiederholtermine
cls: 'custom-stylesheet-classname' // optional
};
calendar.events = [ event ];
Definiert die Sprache des Kalenders.
Beispiel
calendar.locale = 'de'; // Standard: en
Beispiel: Sprache der aktuellen agorum core-Session
calendar.locale = sc.locale;
Definiert einen Zeitpunkt, der erscheint.
Beispiel
calendar.activeTime = new Date('2020-01-01T00:00:00Z'); // Standard: aktuelle Zeit
Definiert den aktiven Zeitpunkt des Kalenders und markiert den aktuellen Zeitpunkt durch eine Linie.
Beispiel
calendar.now = new Date('2020-01-01T00:00:00Z'); // Standard: aktuelle Zeit
Definiert die Darstellung.
Wert | Beschreibung |
---|---|
timeGridDay | Tagesansicht |
timeGridWeek | Wochenansicht |
dayGridMonth (Standard) | Monatsansicht |
list | Liste |
Beispiel
calendar.view = 'timeGridWeek';
Setzt Termine.
Beispiel
let event = {
start: new Date('2020-01-01T13:00:00Z'),
end: new Date('2020-01-01T14:00:00Z'),
title: 'Test Termin',
id: 'Eindeutige ID',
description: 'Eine Beschreibung',
color: '#00FF00', // Farbe
mark: 'orange', // Farbmarkierung
textColor: 'white',
readOnly: false, // Bearbeitbar: false/true
groupId: 'ID einer Gruppe', // etwa für Wiederholtermine
cls: 'custom-stylesheet-classname' // optional
};
calendar.events = [ event ];
Beispiel: Ganztagestermin
let event = {
startDay: '2020-01-01',
title: 'Feiertag',
description: 'Ein schöner Feiertag',
color: '#00FF00', // Farbe
mark: 'orange', // Farbmarkierung
textColor: 'white',
readOnly: true, // Bearbeitbar: false/true
};
calendar.events = [ event ];
Erlaubt die Änderung von Terminen im Kalender.
Wert | Beschreibung |
---|---|
true | Benutzer können die Termine im Kalender NICHT ändern. |
false (Standard) | Benutzer können die Termine im Kalender ändern. |
Beispiel
calendar.readOnly = true;
Wert | Beschreibung |
---|---|
true | Blendet den Header des Kalenders über die Schaltflächen für die Navigation und Ansicht ein. |
false (Standard) | Blendet den Header des Kalenders über die Schaltflächen für die Navigation und Ansicht aus. |
Beispiel
calendar.header = true;
Stellt den Header des Kalenders individuell ein.
Beispiel: Standard
calendar.headerToolbar= {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
};
Beispiel: Mit Terminübersicht
calendar.headerToolbar = {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listYear'
};
Wert | Beschreibung |
---|---|
true | Blendet Kalenderwochen ein. |
false (Standard) | Blendet Kalenderwochen aus. |
Beispiel
calendar.weekNumbers = true;
Wert | Beschreibung |
---|---|
true | Blendet den aktuellen Zeitpunkt im Kalender ein (Linie in der Tagesansicht und Wochenansicht). |
false (Standard) | Blendet den aktuellen Zeitpunkt im Kalender aus. |
Beispiel
calendar.nowIndicator = true;
Wert | Beschreibung |
---|---|
true | Wechselt bei Klick auf die Tagesangaben zur Tagesansicht. |
false (Standard) | Wechselt bei Klick auf die Tagesangaben NICHT zur Tagesansicht. |
Beispiel
calendar.navLinks= true;
Stellt die Zeitzone des Kalenders ein.
Beispiel
calendar.timeZone = 'Europe/Berlin'; // Standard: local (Zeitzone des Browsers)
Definiert, zu welcher Uhrzeit das System im Standard scrollt.
Beispiel
calendar.scrollTime = '09:00:00'; // Standard: 06:00:00
Definiert, welche Zeitschritte zwischen den einzelnen Stundenabschnitten gelten.
Beispiel
calendar.slotDuration = '00:15:00'; // Alle 15 Minuten (pro Stunde 4 Slots), Standard: 00:30:00
Definiert, welche Zeitbereiche das System als „Arbeitszeit“ definiert.
Beispiel
Das folgende Beispiel definiert Montag (1) – Freitag (5) je von 09:00 Uhr – 17:00 Uhr als Arbeitszeit. (Sonntag = 0):
calendar.businessHours = businessHours: {
daysOfWeek: [ 1, 2, 3, 4, 5 ],
startTime: '09:00',
endTime: '17:00'
};
Definiert den Titel des Termins.
Definiert eine eindeutige ID des Termins.
Definiert die Startzeit des Termins (Datum + Uhrzeit in UTC).
Beispiel
new Date('2020-01-01T14:00:00Z')
Definiert die Endzeit des Termins (Datum + Uhrzeit in UTC).
Beispiel
new Date('2020-01-01T14:00:00Z')
Definiert das Startdatum von Ganztagesterminen.
Beispiel
'2020-01-01'
Definiert das Enddatum von Ganztagesterminen.
Hinweis: Das Datum ist exklusiv, wenn Sie endDay definiert haben, d. h. der Termin endet vor diesem Datum und das Datum ist nicht mehr dabei. Ausnahme: startDay und endDay sind am selben Tag.
Beispiel
'2020-01-01'
Beschreibt den Termin in Form eines Tooltips.
Definiert optional Farbe des Termins.
Beispiele
#FF0000
red
Definiert die Farbmarkierung des Termins am linken Rand.
Beispiele
#FF0000 // Standard: kein Rand
orange
Definiert die Farbe des Textes.
Beispiele
#FF0000 // Standard: white
orange
Wert | Beschreibung |
---|---|
true | Benutzer können den Termin ändern. |
false (Standard) | Benutzer können den Termin NICHT ändern. |
Gruppiert Termine mit derselben GroupId, um sie etwa zusammen verschieben zu können, etwa bei Wiederholterminen (Standard: undefined).
Ordnet einem Event einen CSS-Classname zu, den Sie dann über eine CSS definieren können (Standard: undefined).
Löst aus, wenn ein Benutzer auf einen Termin klickt.
info: {
id: 'id-des-events',
start: Start-Zeit (als Date-Objekt)
end: Ende-Zeit (als Date-Objekt)
}
Beispiel
calendar.on('eventClicked', info => {
console.log('eventClicked', info);
});
Löst aus, wenn sich ein Termin ändert (verschoben oder Dauer geändert).
info: {
id: 'id-des-events',
start: neue Start-Zeit (als Date-Objekt)
end: neue Ende-Zeit (als Date-Objekt)
}
Beispiel
calendar.on('eventChanged', info => {
console.log('eventChanged', info);
});
Löst aus, wenn ein Benutzer einen Termin hinzufügt.
info: {
start: Start-Zeit (als Date-Objekt)
end: Ende-Zeit (als Date-Objekt)
}
Beispiel
calendar.on('eventAdded', info => {
console.log('eventAdded', info);
});
Löst aus, wenn der Kalender neue Termine für die Darstellung anfordert.
info: {
start: Start-Zeit (als Date-Objekt)
end: Ende-Zeit (als Date-Objekt)
}
Beispiel
calendar.on('fetchEvents', info => {
console.log('fetchEvents', info);
// load events from somewhere (e.g. database or service)
let events = [ ... ];
// set loaded events to calendar
calendar.events = events;
});
Löst aus, wenn sich die Ansicht des Kalenders ändert (Tagesansicht, Wochenansicht, Monatsansicht oder Liste).
Wert | Beschreibung |
---|---|
timeGridDay | Tagesansicht |
timeGridWeek | Wochenansicht |
dayGridMonth | Monatsansicht |
list | Liste |
Beispiel
calendar.on('viewChanged', view => {
console.log('viewChanged', view);
});
Löst aus, wenn sich die activeTime ändert (das Datum der aktuellen Ansicht).
Beispiel
calendar.on('activeTimeChanged', activeTime => {
console.log('activeTimeChanged', activeTime);
});
Löst aus, wenn sich now ändert (das Datum des aktuell selektierten Tags + Uhrzeit).
Beispiel
calendar.on('nowChanged', now => {
console.log('nowChanged', now);
});
Löst aus, wenn sich activeStart ändert (das Start-Datum der aktuellen Ansicht).
Beispiel
calendar.on('activeStartChanged', activeStart => {
console.log('activeStartChanged', activeStart);
});
Löst aus, wenn sich activeEnd ändert (das Ende-Datum der aktuellen Ansicht).
Beispiel
calendar.on('activeEndChanged', activeEnd => {
console.log('activeEndChanged', activeEnd);
});
Das folgende Beispiel erstellt Zufallstermine im gewählten Zeitraum und lässt die Erstellung von Terminen zu (In-Memory).
/* global sc */
let aguila = require('common/aguila');
let message = require('/agorum/roi/customers/agorum.composite/js/lib/message.js');
let templates = require('common/templates');
let events = [];
let testGlobalId = 0;
// create the calendar widget
let widget = aguila.create({
type: 'agorum.single',
width: 800,
height: 600,
docked: {
top: {
type: 'agorum.toolbar',
items: [
// go to current date
aguila.create({
type: 'agorum.button',
text: 'Now'
}).on('clicked', () => calendar.activeTime = new Date()),
// switch views
aguila.create({
type: 'agorum.button',
text: 'Month'
}).on('clicked', () => changeView('dayGridMonth')),
aguila.create({
type: 'agorum.button',
text: 'Week'
}).on('clicked', () => changeView('timeGridWeek')),
aguila.create({
type: 'agorum.button',
text: 'Day'
}).on('clicked', () => changeView('timeGridDay')),
aguila.create({
type: 'agorum.button',
text: 'List'
}).on('clicked', () => changeView('list')),
// toggle weekNumbers on/off
aguila.create({
type: 'agorum.button',
text: 'weekNumbers'
}).on('clicked', () => calendar.weekNumbers = !calendar.weekNumbers),
// toggle readOnly on/off
aguila.create({
type: 'agorum.button',
text: 'readOnly'
}).on('clicked', () => {
calendar.readOnly = !calendar.readOnly;
}),
// toggle header on/off
aguila.create({
type: 'agorum.button',
text: 'header'
}).on('clicked', () => {
calendar.header = !calendar.header;
}),
// set scroll position to 03:00
aguila.create({
type: 'agorum.button',
text: 'scroll'
}).on('clicked', () => {
calendar.scrollTime = '03:00:00';
}),
]
}
},
items: [
{
// initialize the calendar widget
type: 'agorum.calendar',
name: 'calendar',
flexible: true,
// locale of calendar, e.g., de, en
// use locale of session here
locale: sc.locale,
// timeZone of calendar, e.g., Europe/Berlin
// local = timeZone of browser
timeZone: 'local',
// scroll time (time to start in dayGrid)
// optional, Standard: '06:00:00'
scrollTime: '09:00:00',
// slot duration
// optional, Standard: '00:30:00'
slotDuration: '00:30:00',
// current active date-time for displaying
// optional, Standard: current date
activeTime: new Date(),
// set active date-time
// optional, Standard: current date
now: new Date(),
// set active view
// optional: Standard: dayGridMonth
// possible values: dayGridMonth, timeGridWeek, timeGridDay, list
view: 'timeGridWeek',
// set initial events
events: events,
// set calendar not readOnly
// optional, Standard: false
readOnly: false,
// show navigation header
// optional, Standard: false
header: true,
// show week numbers
// optional, Standard: false
weekNumbers: true,
// show now indicator
// optional, Standard: false
nowIndicator: true,
// show navigation links (click on day)
// optional, Standard: false
navLinks: true,
// setup business hours and weekdays
// optional, Standard: as defined below
businessHours: {
daysOfWeek: [ 1, 2, 3, 4, 5 ],
startTime: '09:00',
endTime: '17:00'
}
}
]
});
// get widgets
let calendar = widget.down('calendar');
/**
* events
*/
/**
* fired, when an event is clicked
*
* info: {
* id: 'id-of-event',
* start: from-date-time
* end: to-date-time
* }
*/
calendar.on('eventClicked', info => {
console.log('eventClicked', info);
message.alert('eventClicked', 'You clicked on: ' + info.id);
});
/**
* fired, when event is changed
* changes can be stored in a database here
*
* info: {
* id: 'id-of-event',
* start: new-start-date-time,
* end: new-end-date-time
* }
*/
calendar.on('eventChanged', info => {
console.log('eventChanged', info);
// find event in events and change it
let event = events.find(event => event.id === info.id);
if (event) {
// change it
createUpdateEvent({
start: info.start,
end: info.end
}, event);
// update events
calendar.events = events;
}
});
/**
* fired, when an event is added
* event can be saved to a database here
*
* info: {
* start: start-date-time,
* end: end-date-time
* }
*/
calendar.on('eventAdded', info => {
console.log('eventAdded', info);
// add a test event
let id = buildTestId();
events.push(createUpdateEvent({
title: 'Event ' + id,
id: id,
start: info.start,
end: info.end,
descriptionText: 'This is an event',
color: '#00c200'
}));
// set events to calendar
calendar.events = events;
});
/**
* fired, when the calendar widget wants new events for the given range
* here events can be fetched from a database or a REST service
*
* info: {
* start: from-date-time
* end: to-date-time
* }
*/
calendar.on('fetchEvents', info => {
console.log('fetchEvents', info);
// drop all events and fetch new (e.g., from index)
// create some random events between range
// please keep in mind, this is just for demo purposes
// so events change everytime the date range is changed
let startTS = new Date(info.start).getTime();
let endTS = new Date(info.end).getTime();
aguila.fork(() => {
let newEvents = [];
// create test appointments, depending on current view
let amount;
if (calendar.view === 'dayGridMonth') amount = 100;
else if (calendar.view === 'timeGridWeek') amount = 10;
else if (calendar.view === 'timeGridDay') amount = 5;
else if (calendar.view === 'list') amount = 50;
for (let i = 0; i < amount; i++) {
let id = buildTestId();
let eventTS = Math.floor(startTS + (Math.random() * (endTS - startTS)));
let duration = Math.floor((1 + Math.random()) * 3 * 60 * 60 * 1000);
let eventStart = new Date(eventTS);
let eventEnd = new Date(eventTS + duration);
newEvents.push(createUpdateEvent({
title: 'Event ' + id,
id: id,
start: eventStart,
end: eventEnd,
descriptionText: 'This is an event',
color: '#73a3e0'
}));
}
return newEvents;
}).then(newEvents => {
// set new events to calendar
events = newEvents;
calendar.events = events;
});
});
/**
* fired, when view is changed
*
* view: string (dayGridMonth, timeGridWeek, timeGridDay, list)
*/
calendar.on('viewChanged', view => {
console.log('viewChanged', view);
});
/**
* fired, when activeTime is changed (normally start of week, month, or day)
*
* activeTime: the date-time
*/
calendar.on('activeTimeChanged', activeTime => {
console.log('activeTimeChanged', activeTime);
});
/**
* fired, when now is changed (the current selected date-time)
*
* now: the date-time
*/
calendar.on('nowChanged', now => {
console.log('nowChanged', now);
});
/**
* fired, when activeStart is changed (the start of fetched events)
*
* activeStart: the date-time
*/
calendar.on('activeStartChanged', activeStart => {
console.log('activeStartChanged', activeStart);
});
/**
* fired, when activeEnd is changed (the end of fetched events)
*
* activeEnd: the date-time
*/
calendar.on('activeEndChanged', activeEnd => {
console.log('activeEndChanged', activeEnd);
});
/**
* helpers
*/
// change the view of the calendar
function changeView(view) {
calendar.view = view;
}
function getLocale() {
return 'de';
}
// format a date with time
function formatDateTime(date) {
return templates.fill('${aDate:dd.MM.yyyy HH:mm}', { aDate: date });
}
// test creation/update of an event
function createUpdateEvent(info, event) {
// this is just a sample event creation
// also used to update an existing event
event = event || {};
let start = formatDateTime(info.start || event.start);
let end = formatDateTime(info.end || event.end);
event.title = info.title || event.title;
event.id = info.id || event.id;
// descriptionText is used here to remember the description, when an event is updated
event.descriptionText = info.descriptionText || event.descriptionText;
event.description = '<b>' + event.title + '</b><br>' +
sc.loginUser.fullName + '<br>' +
start + ' - ' + end + '<br><br>' +
event.descriptionText;
event.start = info.start || event.start;
event.end = info.end || event.end;
event.color = info.color || event.color;
event.readOnly = info.readOnly || event.readOnly;
event.groupId = info.groupId;
return event;
}
// build a test id
function buildTestId() {
testGlobalId ++;
return 'id-' + testGlobalId;
}
widget;
Ein REST-Service lädt Feiertage und stellt sie in einem Kalender dar. Dabei bündelt das System die Termine pro Bundesland und gibt sie beim Tooltip aus.
let aguila = require('common/aguila');
let json = require('client/json');
let loadedYears = {};
let events = [];
// create the calendar widget
let widget = aguila.create({
type: 'agorum.vbox',
width: 800,
height: 600,
items: [
{
// initialize the calendar widget
type: 'agorum.calendar',
name: 'calendar',
flexible: true,
// locale of calendar, e.g., de, en
locale: 'de',
// timeZone of calendar, e.g., Europe/Berlin
timeZone: 'local',
// scroll time (time to start in dayGrid)
// optional, Standard: '06:00:00'
scrollTime: '09:00:00',
// slot duration
// optional, Standard: '00:30:00'
slotDuration: '00:30:00',
// current active date-time for displaying
// optional, Standard: current date
activeTime: new Date('2020-01-01T13:00:00Z'),
// set active date-time
// optional, Standard: current date
// now: new Date(),
// set active view
// optional: Standard: dayGridMonth
// possible values: dayGridMonth, timeGridWeek, timeGridDay, list
view: 'timeGridWeek',
// set initial events
events: [],
// set calendar not readOnly
// optional, Standard: false
readOnly: true,
// show navigation header
// optional, Standard: false
header: true,
// show week numbers
// optional, Standard: false
weekNumbers: true,
// show now indicator
// optional, Standard: false
nowIndicator: true,
// show navigation links (click on day)
// optional, Standard: false
navLinks: true,
// setup business hours and weekdays
// optional, Standard: as defined below
businessHours: {
daysOfWeek: [ 1, 2, 3, 4, 5 ],
startTime: '09:00',
endTime: '17:00'
}
}
]
});
// get widgets
let calendar = widget.down('calendar');
/**
* events
*/
/**
* fired, when an event is clicked
*
* info: {
* id: 'id-of-event',
* start: from-date-time
* end: to-date-time
* }
*/
calendar.on('eventClicked', info => {
console.log('eventClicked', info);
});
/**
* fired, when event is changed
* changes can be stored in a database here
*
* info: {
* id: 'id-of-event',
* start: new-start-date-time,
* end: new-end-date-time
* }
*/
calendar.on('eventChanged', info => {
console.log('eventChanged', info);
});
/**
* fired, when an event is added
* event can be saved to a database here
*
* info: {
* start: start-date-time,
* end: end-date-time
* }
*/
calendar.on('eventAdded', info => {
console.log('eventAdded', info);
});
/**
* fired, when the calendar widget wants new events for the given range
* here events can be fetched from a database or a REST service
*
* info: {
* start: from-date-time
* end: to-date-time
* }
*/
calendar.on('fetchEvents', info => {
console.log('fetchEvents', info);
let startYear = '' + (new Date(info.start).getYear() + 1900);
let endYear = '' + (new Date(info.end).getYear() + 1900);
// load events 2 times, for boundaries at the beginning of
// the year and the end.
// make this with a promise, to prevent concurrent changes to
// events
loadEvents(startYear, false).then(() => {
loadEvents(endYear, true);
});
});
function loadEvents(loadYear, append) {
return aguila.fork(() => {
if (loadedYears[loadYear]) {
// year already loaded
return;
}
// https://feiertage-api.de/api/?jahr=2020&nur_land=BW
let service = json('https://feiertage-api.de/api', {
type: 'application/json; charset=utf-8',
accept: 'application/json'
})('/');
service.query({
jahr: loadYear
});
// load events
let response = service.get();
// build a structure with events for combined for each country
let allEvents = {};
Object.keys(response).forEach(country => {
let countryEvents = response[country];
Object.keys(countryEvents).forEach(title => {
let event = countryEvents[title];
if (allEvents[title]) {
// add to existing
// append country to description
allEvents[title].description += ', ' + country;
}
else {
// make new
allEvents[title] = {
title: title,
startDay: event.datum,
description: 'Bundesländer: ' + country,
color: '#0069b5',
mark: '#00e5ff'
};
}
});
});
// convert to array
return Object.keys(allEvents).map(title => allEvents[title]);
}).then(newEvents => {
if (!newEvents) return;
if (append) {
// append loaded year
events = events.concat(newEvents);
loadedYears[loadYear] = true;
}
else {
events = newEvents;
// reset loaded years and set new
loadedYears = {};
loadedYears[loadYear] = true;
}
calendar.events = events;
});
}
/**
* fired, when view is changed
*
* view: string (dayGridMonth, timeGridWeek, timeGridDay, list)
*/
calendar.on('viewChanged', view => {
console.log('viewChanged', view);
});
/**
* fired, when activeTime is changed (normally start of week, month, or day)
*
* activeTime: the date-time
*/
calendar.on('activeTimeChanged', activeTime => {
console.log('activeTimeChanged', activeTime);
});
/**
* fired, when now is changed (the current selected date-time)
*
* now: the date-time
*/
calendar.on('nowChanged', now => {
console.log('nowChanged', now);
});
/**
* fired, when activeStart is changed (the start of fetched events)
*
* activeStart: the date-time
*/
calendar.on('activeStartChanged', activeStart => {
console.log('activeStartChanged', activeStart);
});
/**
* fired, when activeEnd is changed (the end of fetched events)
*
* activeEnd: the date-time
*/
calendar.on('activeEndChanged', activeEnd => {
console.log('activeEndChanged', activeEnd);
});
widget;