From c9b3075d19372e9c2f221c5c59f737876fc76b9f Mon Sep 17 00:00:00 2001 From: FReenen Date: Wed, 15 May 2024 22:56:38 +0200 Subject: [PATCH] handel concurrency clash on an already clashed event (#6) --- main.js | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/main.js b/main.js index ed0881e..8d864db 100644 --- a/main.js +++ b/main.js @@ -643,6 +643,7 @@ class CalendarView extends ItemView // check for concurrent events let classes = "frcal__event"; + let concurrentClash = ""; for (let i in container.children) { let child = container.children[i]; @@ -653,15 +654,35 @@ class CalendarView extends ItemView && (time[0] < parseInt(child.dataset.end)) ) { - if (time[0] < parseInt(child.dataset.start)) + if (child.dataset.concurrentClash != "") { - classes += " frcal__event_concurrent1"; - child.addClass("frcal__event_concurrent2"); + let third = document.getElementById("fr_event_" + child.dataset.concurrentClash); + if ( + (time[1] > parseInt(third.dataset.start)) + && (time[0] < parseInt(third.dataset.end)) + ) + { + console.warn("triple concurrent clashes are not suported with " + event.id + ", " + child.dataset.id + " and " + child.dataset.concurrentClash); + } + else + { + classes += (child.hasClass("frcal__event_concurrent2")) ? " frcal__event_concurrent1" : " frcal__event_concurrent2"; + } } else { - child.addClass("frcal__event_concurrent1"); - classes += " frcal__event_concurrent2"; + if (time[0] < parseInt(child.dataset.start)) + { + classes += " frcal__event_concurrent1"; + child.addClass("frcal__event_concurrent2"); + } + else + { + child.addClass("frcal__event_concurrent1"); + classes += " frcal__event_concurrent2"; + } + child.dataset.concurrentClash = event.id; + concurrentClash = child.dataset.id; } } } @@ -671,11 +692,13 @@ class CalendarView extends ItemView cls: classes, attr: { 'id': "fr_event_" + event.id, + 'data-id': event.id, 'data-group': event.group, 'data-state': event.state, 'data-type': event.type, 'data-start': time[0].toString(), 'data-end': time[1].toString(), + 'data-concurrent-clash': concurrentClash, 'style': ((allDay) ? '' : 'top:' + (time[0]*this.zoom).toString() + 'px') }, });