Merge branch 'fixTimeZone' into staging

This commit is contained in:
yflory 2023-12-13 15:13:14 +01:00
commit 3da0eec8a7
7 changed files with 57 additions and 14 deletions

View File

@ -23,6 +23,7 @@ define([
'/calendar/export.js',
'/calendar/recurrence.js',
'/lib/datepicker/flatpickr.js',
'tui-date-picker',
'/common/inner/share.js',
'/common/inner/access.js',
@ -64,6 +65,7 @@ define([
Export,
Rec,
Flatpickr,
DatePicker,
Share, Access, Properties,
diffMk,
SFCodeMirror,
@ -124,6 +126,8 @@ define([
var startDate = event.start._date;
var endDate = event.end._date;
var timeZone;
try { timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; } catch (e) {}
var data = {
id: Util.uid(),
calendarId: event.calendarId,
@ -135,6 +139,7 @@ define([
end: +endDate,
reminders: reminders,
body: eventBody,
timeZone: timeZone,
recurrenceRule: event.recurrenceRule
};
@ -306,9 +311,9 @@ define([
obj.title = obj.title || "";
obj.location = obj.location || "";
obj.body = obj.body || "";
if (obj.isAllDay && obj.startDay) { obj.start = +Flatpickr.parseDate((obj.startDay)); }
if (obj.isAllDay && obj.startDay) { obj.start = +DatePicker.parseDate((obj.startDay)); }
if (obj.isAllDay && obj.endDay) {
var endDate = Flatpickr.parseDate(obj.endDay);
var endDate = DatePicker.parseDate(obj.endDay);
endDate.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);
@ -1670,7 +1675,7 @@ APP.recurrenceRule = {
minDate: date,
//dateFormat: dateFormat,
onChange: function () {
//endPickr.set('minDate', startPickr.parseDate(s.value));
//endPickr.set('minDate', DatePicker.parseDate(s.value));
}
});
var endDate = new Date(+date);
@ -1848,7 +1853,7 @@ APP.recurrenceRule = {
if (until === "count") {
rec.count = $(radioCount).find('input[type="number"]').val();
} else if (until === "date") {
var _date = Flatpickr.parseDate(pickr.value);
var _date = DatePicker.parseDate(pickr.value);
_date.setDate(_date.getDate()+1);
rec.until = +_date - 1;
}
@ -2182,7 +2187,7 @@ APP.recurrenceRule = {
var $button = $el.find('.tui-full-calendar-section-button-save');
var $startDate = $el.find('#tui-full-calendar-schedule-start-date');
var startDate = Flatpickr.parseDate($startDate.val());
var startDate = DatePicker.parseDate($startDate.val());
var divRec = getRecurrenceInput(startDate);
$button.before(divRec);

View File

@ -582,6 +582,27 @@ define([
return r;
}).filter(Boolean);
};
var fixTimeZone = function (evTimeZone, origin, target) {
var getOffset = function (date, tz) {
// Get an ISO string using Canadian local format
let iso = date.toLocaleString('en-CA', { timeZone:tz, hour12: false }).replace(', ', 'T');
iso += '.' + date.getMilliseconds().toString().padStart(3, '0');
// Get a UTC version of this time
let utcDate = new Date(iso + 'Z');
// Return the difference in timestamps, as minutes (60*1000)
return -(utcDate - date);
};
var myTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
var offset = getOffset(origin, evTimeZone) - getOffset(target, evTimeZone);
var myOffset = getOffset(origin, myTimeZone) - getOffset(target, myTimeZone);
return myOffset - offset;
};
Rec.getRecurring = function (months, events) {
if (window.CP_DEV_MODE) { debug = console.warn; }
@ -739,6 +760,11 @@ define([
}
// Add this event
if (_origin.timeZone && !_ev.isAllDay) {
var offset = fixTimeZone(_origin.timeZone, _start, _evS);
_ev.start += offset;
_ev.end += offset;
}
toAdd.push(_ev);
if (newrule) {
useNewRule();

View File

@ -12,8 +12,8 @@ define([
'/common/common-constants.js',
'/customize/messages.js',
'/customize/pages.js',
'/lib/datepicker/flatpickr.js',
], function($, h, Hash, UI, UIElements, Util, Constants, Messages, Pages, Flatpickr) {
'tui-date-picker'
], function($, h, Hash, UI, UIElements, Util, Constants, Messages, Pages, DatePicker) {
var handlers = {};
@ -548,7 +548,7 @@ define([
var nowDateStr = new Date().toLocaleDateString();
var startDate = new Date(start);
if (msg.isAllDay && msg.startDay) {
startDate = Flatpickr.parseDate(msg.startDay);
startDate = DatePicker.parseDate(msg.startDay);
}
// Missed events

View File

@ -27,6 +27,7 @@ define([
'/common/text-cursor.js',
'cm/lib/codemirror',
'/components/chainpad/chainpad.dist.js',
'tui-date-picker',
'/common/inner/share.js',
'/common/inner/access.js',
@ -74,6 +75,7 @@ define([
TextCursor,
CMeditor,
ChainPad,
DatePicker,
Share, Access, Properties,
Flatpickr,
Sortable
@ -2051,7 +2053,7 @@ define([
tag: tag,
isEmpty: function () { return !$tag.val().trim(); },
getValue: function () {
var d = picker.parseDate(tag.value);
var d = DatePicker.parseDate(tag.value);
return +d;
},
setValue: function (val) {
@ -4822,7 +4824,7 @@ define([
if (datePicker.value === '') {
return void refreshEndDate();
}
var d = picker.parseDate(datePicker.value);
var d = DatePicker.parseDate(datePicker.value);
content.answers.endDate = +d;
framework.localChange();
framework._.cpNfInner.chainpad.onSettle(function () {

View File

@ -5,9 +5,15 @@
define([
'jquery',
'/lib/datepicker/flatpickr.js',
'/lib/calendar/moment.min.js',
'css!/lib/datepicker/flatpickr.min.css',
], function ($, Flatpickr) {
], function ($, Flatpickr, Moment) {
var parseDate = (value) => {
return Moment(value, 'YYYY-MM-DD HH:mm a').toDate();
};
var createRangePicker = function (cfg) {
var start = cfg.startpicker;
var end = cfg.endpicker;
@ -34,7 +40,7 @@ define([
time_24hr: is24h,
dateFormat: dateFormat,
onChange: function () {
endPickr.set('minDate', startPickr.parseDate(s.value));
endPickr.set('minDate', parseDate(s.value));
}
});
startPickr.setDate(start.date);
@ -43,11 +49,11 @@ define([
var getStartDate = function () {
setTimeout(function () { $(startPickr.calendarContainer).remove(); });
return startPickr.parseDate(s.value);
return parseDate(s.value);
};
var getEndDate = function () {
setTimeout(function () { $(endPickr.calendarContainer).remove(); });
var d = endPickr.parseDate(e.value);
var d = parseDate(e.value);
if (endPickr.config.dateFormat === "Y-m-d") { // All day event
// Tui-calendar will remove 1s (1000ms) to the date for an unknown reason...
@ -63,6 +69,7 @@ define([
};
};
return {
parseDate: parseDate,
createRangePicker: createRangePicker
};
});

2
www/lib/calendar/moment.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -16,6 +16,7 @@ This file is intended to be used as a log of what third-party source we have ven
* [jscolor v2.0.5](https://jscolor.com/) for providing a consistent color picker across all browsers
* [less.min.js v3.11.1](https://github.com/less/less.js/releases/tag/v3.11.1) with a minor modification to produce slightly more compact CSS
* [mermaid 10.2.4](https://github.com/mermaid-js/mermaid/releases/tag/v10.2.4) extends our markdown integration to support a variety of diagram types
* [Moment v2.29.4](http://momentjs.com/) for providing a date parser
* [our fork of tippy.js v1.2.0](https://github.com/xwiki-labs/tippyjs) for adding tooltips.
* [pdfjs](https://mozilla.github.io/pdf.js/) with some minor modifications to prevent CSP errors
* [qrcode.js](https://github.com/davidshimjs/qrcodejs) from [this commit](https://github.com/davidshimjs/qrcodejs/commit/06c7a5e134f116402699f03cda5819e10a0e5787) since the repo doesn't use tags