From 9b122f513f2ee91084484ad57410e3bddb39cf1a Mon Sep 17 00:00:00 2001 From: nathan Date: Thu, 20 Jul 2023 10:32:08 -0600 Subject: [PATCH] Revert "Revert "Calendar: Fix moving cursor while clicking did not add an event"" This reverts commit 3339ab947edb8a86042029097feb91e6dbe7872a. --- calendar/js/et2_widget_daycol.ts | 22 ++++++++++++++++------ calendar/js/et2_widget_timegrid.ts | 28 +++++++++++++++++++++------- calendar/js/et2_widget_view.ts | 10 +++++----- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/calendar/js/et2_widget_daycol.ts b/calendar/js/et2_widget_daycol.ts index 4c212dddef..1bc5ea9115 100644 --- a/calendar/js/et2_widget_daycol.ts +++ b/calendar/js/et2_widget_daycol.ts @@ -111,12 +111,14 @@ export class et2_calendar_daycol extends et2_valueWidget implements et2_IDetache .appendTo(this.header); this.all_day = jQuery(document.createElement('div')) .addClass("calendar_calDayColAllDay") - .css('max-height', (egw.preference('limit_all_day_lines', 'calendar') || 3 ) * 1.4 + 'em') + .css('max-height', (egw.preference('limit_all_day_lines', 'calendar') || 3) * 1.4 + 'em') .appendTo(this.header); this.event_wrapper = jQuery(document.createElement('div')) .addClass("event_wrapper") .appendTo(this.div); + this.click = this.click.bind(this); + this.setDOMNode(this.div[0]); } @@ -1116,19 +1118,21 @@ export class et2_calendar_daycol extends et2_valueWidget implements et2_IDetache // Remove the binding for the click handler, unless there's something // custom here. - if (!this.onclick) + if(!this.onclick) { jQuery(this.node).off("click"); } // But we do want to listen to certain clicks, and handle them internally - jQuery(this.node).on('click.et2_daycol', - '.calendar_calDayColHeader,.calendar_calAddEvent', - jQuery.proxy(this.click, this) - ); + this.node.addEventListener("click", this.click); return result; } + removeFromDOM() + { + this.node.removeEventListener("click", this.click) + } + /** * Click handler calling custom handler set via onclick attribute to this.onclick, * or the default which is to open a new event at that time. @@ -1159,6 +1163,8 @@ export class et2_calendar_daycol extends et2_valueWidget implements et2_IDetache owner: this.options.owner }; this.getInstanceManager().app_obj.calendar.add(options); + _ev.stopImmediatePropagation(); + _ev.preventDefault(); return false; } // Header, all day non-blocking @@ -1175,6 +1181,8 @@ export class et2_calendar_daycol extends et2_valueWidget implements et2_IDetache owner: this.options.owner }; this.getInstanceManager().app_obj.calendar.add(options); + _ev.preventDefault(); + _ev.stopImmediatePropagation(); return false; } } @@ -1182,6 +1190,8 @@ export class et2_calendar_daycol extends et2_valueWidget implements et2_IDetache else if(this.title.is(_ev.target) || this.title.has(_ev.target).length) { this.getInstanceManager().app_obj.calendar.update_state({view: 'day', date: this.date.toJSON()}); + _ev.preventDefault(); + _ev.stopImmediatePropagation(); return false; } diff --git a/calendar/js/et2_widget_timegrid.ts b/calendar/js/et2_widget_timegrid.ts index e3fbafc90a..0d22e66cf6 100644 --- a/calendar/js/et2_widget_timegrid.ts +++ b/calendar/js/et2_widget_timegrid.ts @@ -382,9 +382,11 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet { timegrid.gridHover.hide(); } - }) - .on('mousedown', ':not(.calendar_calEvent)', this._mouse_down.bind(this)) - .on('mouseup', this._mouse_up.bind(this)); + }); + + this.div.get(0).addEventListener("mousedown", this._mouse_down.bind(this)); + this.div.get(0).addEventListener("mouseup", this._mouse_up.bind(this)); + this.div.get(0).addEventListener("click", this.click.bind(this), true); return true; } @@ -1979,6 +1981,7 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet result = this.onclick.apply(this, args); } + _ev.stopImmediatePropagation(); var event_node = jQuery(event.event_node); if(event.id && result && !this.disabled && !this.options.readonly && // Permissions - opening will fail if we try @@ -2004,14 +2007,17 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet app.calendar.update_state(jQuery.extend( {view: 'week'}, this._labelContainer.is(_ev.target) ? - this.gridHeader[0].dataset : - _ev.target.dataset + this.gridHeader[0].dataset : + _ev.target.dataset )); + _ev.preventDefault(); + _ev.stopImmediatePropagation(); } else if (this.options.owner.length === 1 && jQuery(this.owner.getDOMNode()).is(_ev.target)) { // Click on the owner in header, show just that owner app.calendar.update_state({owner: this.options.owner}); + _ev.stopImmediatePropagation(); } else if (this.dayHeader.has(_ev.target).length) { @@ -2029,7 +2035,8 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet } // No time grid, click on a day else if (this.options.granularity === 0 && - (jQuery(_ev.target).hasClass('event_wrapper') || jQuery(_ev.target).hasClass('.calendar_calDayCol')) + (jQuery(_ev.target).hasClass('event_wrapper') || jQuery(_ev.target).hasClass('.calendar_calDayCol')) || + _ev.target.classList.contains("calendar_calAddEvent") ) { // Default handler to open a new event at the selected time @@ -2041,6 +2048,8 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet owner: this.options.owner }; app.calendar.add(options); + _ev.preventDefault(); + _ev.stopImmediatePropagation(); return false; } } @@ -2067,6 +2076,11 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet { return; } + // Skip for headers + if(this.dayHeader.has(event.target).length > 0) + { + return; + } let start = {...this.gridHover[0].dataset}; if(start.date) @@ -2164,7 +2178,7 @@ export class et2_calendar_timegrid extends et2_calendar_view implements et2_IDet this.div.off('mousemove.dragcreate'); this.gridHover.css('cursor', ''); - return this._drag_create_end(this.drag_create.event ? {date: end.date} : undefined); + this._drag_create_end(this.drag_create.event ? {date: end.date} : undefined); } /** diff --git a/calendar/js/et2_widget_view.ts b/calendar/js/et2_widget_view.ts index e65f98da4f..299588c849 100644 --- a/calendar/js/et2_widget_view.ts +++ b/calendar/js/et2_widget_view.ts @@ -536,10 +536,11 @@ export class et2_calendar_view extends et2_valueWidget this.drag_create.event = null; } // Wait a bit before adding an "event", it may be just a click - window.setTimeout(jQuery.proxy(function() { + window.setTimeout(() => + { // Create event - this._drag_create_event(); - }, this), 250); + this._drag_create_event() + }, 100); } /** @@ -608,8 +609,7 @@ export class et2_calendar_view extends et2_valueWidget end = {}; } - if(this.drag_create.start && end.date && - JSON.stringify(this.drag_create.start.date) !== JSON.stringify(end.date)) + if(this.drag_create.start && end.date) { // Drag from start to end, open dialog var options = {