mirror of
https://github.com/cryptpad/cryptpad.git
synced 2026-09-14 11:05:41 +05:00
Merge branch 'fixTimeZone' into staging
This commit is contained in:
commit
3da0eec8a7
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 () {
|
||||
|
||||
@ -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
2
www/lib/calendar/moment.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user