mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-29 12:37:40 +01:00
Update to FullCalendar 5 (#1611)
This commit is contained in:
parent
1a19a6b042
commit
7569e417ab
@ -759,121 +759,126 @@ div.scrollbar {
|
|||||||
background: rgba(0, 0, 0, 0) linear-gradient(180deg, rgba(0, 0, 0, 0) 20%, rgba(0, 0, 0, 0.2) 100%);
|
background: rgba(0, 0, 0, 0) linear-gradient(180deg, rgba(0, 0, 0, 0) 20%, rgba(0, 0, 0, 0.2) 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-red {
|
.bg-red, body.theme-red .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #F44336;
|
background-color: #F44336;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-pink {
|
.bg-pink, body.theme-pink .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #E91E63;
|
background-color: #E91E63;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-purple {
|
.bg-purple, body.theme-purple .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #9C27B0;
|
background-color: #9C27B0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-deep-purple {
|
.bg-deep-purple, body.theme-deep-purple .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #673AB7;
|
background-color: #673AB7;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-indigo {
|
.bg-indigo, body.theme-indigo .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #3F51B5;
|
background-color: #3F51B5;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-blue {
|
.bg-blue, body.theme-blue .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #2196F3;
|
background-color: #2196F3;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-light-blue {
|
.bg-light-blue, body.theme-light-blue .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #03A9F4;
|
background-color: #03A9F4;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-cyan {
|
.bg-cyan, body.theme-cyan .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #00BCD4;
|
background-color: #00BCD4;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-teal {
|
.bg-teal, body.theme-teal .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #009688;
|
background-color: #009688;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-green {
|
.bg-green, body.theme-green .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #4CAF50;
|
background-color: #4CAF50;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-light-green {
|
.bg-light-green, body.theme-light-green .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #8BC34A;
|
background-color: #8BC34A;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-lime {
|
.bg-lime , body.theme-lime .fc-toolbar-chunk .btn.btn-primary{
|
||||||
background-color: #CDDC39;
|
background-color: #CDDC39;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-yellow {
|
.bg-yellow, body.theme-yellow .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #ffe821;
|
background-color: #ffe821;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-amber {
|
.bg-amber, body.theme-amber .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #FFC107;
|
background-color: #FFC107;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-orange {
|
.bg-orange, body.theme-orange .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #FF9800;
|
background-color: #FF9800;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-deep-orange {
|
.bg-deep-orange, body.theme-deep-orange .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #FF5722;
|
background-color: #FF5722;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-brown {
|
.bg-brown, body.theme-brown .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #795548;
|
background-color: #795548;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-grey {
|
.bg-grey, body.theme-grey .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #9E9E9E;
|
background-color: #9E9E9E;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-blue-grey {
|
.bg-blue-grey, body.theme-blue-grey .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #607D8B;
|
background-color: #607D8B;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-black {
|
.bg-black, body.theme-black .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #555555;
|
background-color: #555555;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-white {
|
.bg-white, body.theme-white .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-plan {
|
.bg-plan, body.theme-plan .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #368F17;
|
background-color: #368F17;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-night {
|
.bg-night, body.theme-night .fc-toolbar-chunk .btn.btn-primary {
|
||||||
background-color: #44475a;
|
background-color: #44475a;
|
||||||
color: #eee8d5;
|
color: #eee8d5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fc-toolbar-chunk .btn.btn-primary {
|
||||||
|
outline: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
.bg-red-outline {
|
.bg-red-outline {
|
||||||
outline-color: #F44336;
|
outline-color: #F44336;
|
||||||
border-color: #F44336;
|
border-color: #F44336;
|
||||||
@ -1196,3 +1201,36 @@ div.scrollbar {
|
|||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
text-shadow: 0 0 8px #000;
|
text-shadow: 0 0 8px #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Adding a translation, even though it doesn't visually
|
||||||
|
impact the page, causes child elements with a
|
||||||
|
position of "fixed" to be based on this element
|
||||||
|
instead of any other parent elements. For example,
|
||||||
|
if a child element to this element had `top: 0`
|
||||||
|
and `left: 0`, then it would align with the top
|
||||||
|
left of this element instead of another parent or the document body.
|
||||||
|
See this StackOverflow answer: https://stackoverflow.com/a/20830413
|
||||||
|
|
||||||
|
We use this to properly align the popover when there are more
|
||||||
|
than 3 events in one day on the sessions calendar.
|
||||||
|
*/
|
||||||
|
#sessions-overview {
|
||||||
|
transform: translateX(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
When the sidebar is visible, it offsets the popovers by its width.
|
||||||
|
The rules below fix that by applying a negative margin.
|
||||||
|
*/
|
||||||
|
body .fc-popover {
|
||||||
|
margin-left: -14rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.sidebar-hidden .fc-popover {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.sidebar-hidden .navbar-nav {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
// Function for changing color
|
// Function for changing color
|
||||||
function setColor(nextColor) {
|
function setColor(nextColor) {
|
||||||
|
$('body').removeClass('theme-' + currentColor).addClass('theme-' + nextColor);
|
||||||
if (!nextColor || nextColor == currentColor) {
|
if (!nextColor || nextColor == currentColor) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -218,6 +219,7 @@
|
|||||||
'.collapse-item:hover,.nav-link.active {background-color: #606270 !important;}' +
|
'.collapse-item:hover,.nav-link.active {background-color: #606270 !important;}' +
|
||||||
'.nav-tabs .nav-link.active {background-color: #44475a !important;border-color:#6272a4 #6272a4 #44475a !important;}' +
|
'.nav-tabs .nav-link.active {background-color: #44475a !important;border-color:#6272a4 #6272a4 #44475a !important;}' +
|
||||||
'.fc-today {background:#646e8c !important}' +
|
'.fc-today {background:#646e8c !important}' +
|
||||||
|
'.fc-popover-body,.fc-popover-header {background-color: #44475a;color: #eee8d5;}' +
|
||||||
nightModeColors +
|
nightModeColors +
|
||||||
'</style>');
|
'</style>');
|
||||||
// Turn bright tables to dark
|
// Turn bright tables to dark
|
||||||
|
@ -20,6 +20,7 @@ var linegraphButtons = [{
|
|||||||
}];
|
}];
|
||||||
|
|
||||||
var graphs = [];
|
var graphs = [];
|
||||||
|
window.calendars = {};
|
||||||
|
|
||||||
function activityPie(id, activitySeries) {
|
function activityPie(id, activitySeries) {
|
||||||
graphs.push(Highcharts.chart(id, {
|
graphs.push(Highcharts.chart(id, {
|
||||||
@ -148,32 +149,36 @@ function dayByDay(id, series) {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
function onlineActivityCalendar(id, events, firstDay) {
|
function onlineActivityCalendar(id, event_data, firstDay) {
|
||||||
$(id).fullCalendar({
|
window.calendars.online_activity = new FullCalendar.Calendar(document.querySelector(id), {
|
||||||
|
themeSystem: 'bootstrap',
|
||||||
eventColor: '#2196F3',
|
eventColor: '#2196F3',
|
||||||
firstDay: firstDay,
|
firstDay: firstDay,
|
||||||
|
initialView: 'dayGridMonth',
|
||||||
|
|
||||||
eventRender: function (eventObj, $el) {
|
eventDidMount: function (info) {
|
||||||
$el.popover({
|
$(info.el).popover({
|
||||||
content: eventObj.title,
|
content: info.event.title,
|
||||||
trigger: 'hover',
|
trigger: 'hover',
|
||||||
placement: 'top',
|
placement: 'top',
|
||||||
container: 'body'
|
container: 'body'
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
events: events,
|
events: function (fetchInfo, successCallback, failureCallback) {
|
||||||
|
successCallback(event_data)
|
||||||
|
},
|
||||||
|
|
||||||
height: 800,
|
height: 800,
|
||||||
contentHeight: 795,
|
contentHeight: 795,
|
||||||
header: {
|
headerToolbar: {
|
||||||
left: 'title',
|
left: 'title',
|
||||||
center: '',
|
center: '',
|
||||||
right: 'month prev,next'
|
right: 'today prev,next'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$(id).fullCalendar('render')
|
window.calendars.online_activity.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
function performanceChart(id, playersOnlineSeries, tpsSeries, cpuSeries, ramSeries, entitySeries, chunkSeries) {
|
function performanceChart(id, playersOnlineSeries, tpsSeries, cpuSeries, ramSeries, entitySeries, chunkSeries) {
|
||||||
@ -401,36 +406,40 @@ function formatTimeAmount(ms) {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sessionCalendar(id, events, firstDay) {
|
function sessionCalendar(id, event_data, firstDay) {
|
||||||
$(id).fullCalendar({
|
window.calendars.sessions = new FullCalendar.Calendar(document.querySelector(id), {
|
||||||
|
themeSystem: 'bootstrap',
|
||||||
eventColor: '#009688',
|
eventColor: '#009688',
|
||||||
eventLimit: 4,
|
dayMaxEventRows: 4,
|
||||||
firstDay: firstDay,
|
firstDay: firstDay,
|
||||||
|
initialView: 'dayGridMonth',
|
||||||
|
|
||||||
eventRender: function (eventObj, $el) {
|
eventDidMount: function (info) {
|
||||||
$el.popover({
|
$(info.el).popover({
|
||||||
content: eventObj.title,
|
content: info.event.title,
|
||||||
trigger: 'hover',
|
trigger: 'hover',
|
||||||
placement: 'top',
|
placement: 'top',
|
||||||
container: 'body'
|
container: 'body'
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
events: events,
|
events: function (fetchInfo, successCallback, failureCallback) {
|
||||||
|
successCallback(event_data)
|
||||||
|
},
|
||||||
|
|
||||||
navLinks: true,
|
navLinks: true,
|
||||||
height: 450,
|
height: 450,
|
||||||
contentHeight: 445,
|
contentHeight: 445,
|
||||||
header: {
|
headerToolbar: {
|
||||||
left: 'title',
|
left: 'title',
|
||||||
center: '',
|
center: '',
|
||||||
right: 'month agendaWeek agendaDay today prev,next'
|
right: 'dayGridMonth dayGridWeek dayGridDay today prev,next'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
$(id).fullCalendar('render')
|
window.calendars.sessions.render();
|
||||||
}, 1000);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function stackChart(id, categories, series, label) {
|
function stackChart(id, categories, series, label) {
|
||||||
|
@ -56,7 +56,7 @@ $('.nav-tabs a.nav-link').click(event => {
|
|||||||
const uriHash = (window.location.hash).split("&");
|
const uriHash = (window.location.hash).split("&");
|
||||||
if (!uriHash) return;
|
if (!uriHash) return;
|
||||||
const currentTab = uriHash[0];
|
const currentTab = uriHash[0];
|
||||||
const originalTargetId = event.target.href.split('#')[1];
|
const originalTargetId = event.currentTarget.href.split('#')[1];
|
||||||
window.location.hash = currentTab + '&' + originalTargetId;
|
window.location.hash = currentTab + '&' + originalTargetId;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -68,16 +68,16 @@ function reduceSidebar() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const $sidebar = $('.sidebar');
|
const $body = $('body')
|
||||||
const closeModal = $('.sidebar-close-modal');
|
const closeModal = $('.sidebar-close-modal');
|
||||||
if ($(window).width() < 1350) {
|
if ($(window).width() < 1350) {
|
||||||
if (!$sidebar.hasClass('hidden')) $sidebar.addClass('hidden');
|
if (!$body.hasClass('sidebar-hidden')) $body.addClass('sidebar-hidden');
|
||||||
if (!closeModal.hasClass('hidden')) closeModal.addClass('hidden');
|
if (!closeModal.hasClass('hidden')) closeModal.addClass('hidden');
|
||||||
|
|
||||||
// Close any open menu accordions when window is resized
|
// Close any open menu accordions when window is resized
|
||||||
$('.sidebar .collapse').collapse('hide');
|
$('.sidebar .collapse').collapse('hide');
|
||||||
} else if ($(window).width() > 1400 && $sidebar.hasClass('hidden')) {
|
} else if ($(window).width() > 1400 && $body.hasClass('sidebar-hidden')) {
|
||||||
$sidebar.removeClass('hidden');
|
$body.removeClass('sidebar-hidden');
|
||||||
if (!closeModal.hasClass('hidden')) closeModal.addClass('hidden');
|
if (!closeModal.hasClass('hidden')) closeModal.addClass('hidden');
|
||||||
}
|
}
|
||||||
oldWidth = newWidth;
|
oldWidth = newWidth;
|
||||||
@ -87,7 +87,7 @@ reduceSidebar();
|
|||||||
$(window).resize(reduceSidebar);
|
$(window).resize(reduceSidebar);
|
||||||
|
|
||||||
function toggleSidebar() {
|
function toggleSidebar() {
|
||||||
$('.sidebar').toggleClass('hidden');
|
$('body').toggleClass('sidebar-hidden');
|
||||||
$('.sidebar .collapse').collapse('hide');
|
$('.sidebar .collapse').collapse('hide');
|
||||||
|
|
||||||
const closeModal = $('.sidebar-close-modal');
|
const closeModal = $('.sidebar-close-modal');
|
||||||
|
@ -1539,7 +1539,12 @@
|
|||||||
$('#calendar').text('');
|
$('#calendar').text('');
|
||||||
onlineActivityCalendar('#calendar', json.data, json.firstDay);
|
onlineActivityCalendar('#calendar', json.data, json.firstDay);
|
||||||
$('#online-calendar-tab').click(function () {
|
$('#online-calendar-tab').click(function () {
|
||||||
$('#calendar').fullCalendar('render');
|
// Wrapping this in a 0ms setTimeout waits for all other event handlers
|
||||||
|
// to finish. We need this because if the calendar is rendered
|
||||||
|
// immediately, it renders for a width of 0.
|
||||||
|
setTimeout(function() {
|
||||||
|
window.calendars.online_activity.render();
|
||||||
|
}, 0);
|
||||||
});
|
});
|
||||||
} else if (error) {
|
} else if (error) {
|
||||||
$('#calendar').text("Failed to load calendar data: " + error)
|
$('#calendar').text("Failed to load calendar data: " + error)
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user