Add click handlers to calendar reminders notifications

This commit is contained in:
yflory 2022-09-14 16:11:54 +02:00
parent f27d779aef
commit 0ee48d40f2
6 changed files with 107 additions and 51 deletions

View File

@ -27,14 +27,16 @@
color: @cryptpad_color_red;
}
}
.cp-avatar {
.avatar_main(30px);
padding: 0 5px;
.cp-reminder, .cp-avatar {
cursor: pointer;
&:hover {
background-color: @cp_dropdown-bg-hover;
}
}
.cp-avatar {
.avatar_main(30px);
padding: 0 5px;
}
.cp-notification-content {
flex: 1;
align-items: stretch;

View File

@ -135,6 +135,66 @@ define([
return weekDays.map(function (day) { return day.replace(/^./, function (str) { return str.toUpperCase(); }); });
};
// Get week number in our calendar view
var ISO8601_week_no = function (dt) {
var tdt = new Date(dt.valueOf());
var dayn = (dt.getDay() + 6) % 7;
tdt.setDate(tdt.getDate() - dayn + 3);
var firstThursday = tdt.valueOf();
tdt.setMonth(0, 1);
if (tdt.getDay() !== 4) {
tdt.setMonth(0, 1 + ((4 - tdt.getDay()) + 7) % 7);
}
return 1 + Math.ceil((firstThursday - tdt) / 604800000);
};
var updateDateRange = function () {
var range = APP.calendar._renderRange;
var start = range.start._date.toLocaleDateString();
var end = range.end._date.toLocaleDateString();
var week = ISO8601_week_no(range.start._date);
var date = [
h('b.cp-small', Messages._getKey('calendar_weekNumber', [week])),
h('b', start),
h('span', ' - '),
h('b', end),
];
if (APP.calendar._viewName === "day") {
date = h('b', start);
} else if (APP.calendar._viewName === "month") {
var month;
var mid = new Date(Math.floor(((+range.start._date) + (+range.end._date)) / 2));
try {
month = mid.toLocaleString('default', {
month: 'long',
year:'numeric'
});
month = month.replace(/^./, function (str) { return str.toUpperCase(); });
date = h('b', month);
} catch (e) {
// Use same as week range: first day of month to last day of month
}
}
APP.toolbar.$bottomM.empty().append(h('div', date));
};
APP.moveToDate = function (time) {
var cal = APP.calendar;
if (!cal) { return; }
// Move calendar to correct date
var d = new Date(time);
cal.setDate(d);
updateDateRange();
// Scroll to correct time
setTimeout(function () {
var h = d.toLocaleTimeString('en-US', { hour12: 0, timeStyle: "short" }).slice(0,2);
h = Number(h) % 24;
var $h = $('.tui-full-calendar-timegrid-timezone .tui-full-calendar-timegrid-hour');
try { $h.get(h).scrollIntoView(); } catch (e) { console.error(e); }
});
};
var getCalendars = function () {
var LOOKUP = {};
var TEAMS = {};
@ -223,6 +283,10 @@ define([
cal.setCalendars(getCalendars());
cal.createSchedules(applyUpdates(getSchedules()), true);
cal.render();
if (APP.initTime && APP.moveToDate) {
APP.moveToDate(APP.initTime);
delete APP.initTime;
}
Rec.resetCache();
updateRecurring();
} catch (e) {
@ -785,19 +849,6 @@ define([
};
// Get week number in our calendar view
var ISO8601_week_no = function (dt) {
var tdt = new Date(dt.valueOf());
var dayn = (dt.getDay() + 6) % 7;
tdt.setDate(tdt.getDate() - dayn + 3);
var firstThursday = tdt.valueOf();
tdt.setMonth(0, 1);
if (tdt.getDay() !== 4) {
tdt.setMonth(0, 1 + ((4 - tdt.getDay()) + 7) % 7);
}
return 1 + Math.ceil((firstThursday - tdt) / 604800000);
};
var _updateRecurring = function () {
var cal = APP.calendar;
if (!cal) { return; }
@ -868,35 +919,6 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v
};
};
var updateDateRange = function () {
var range = APP.calendar._renderRange;
var start = range.start._date.toLocaleDateString();
var end = range.end._date.toLocaleDateString();
var week = ISO8601_week_no(range.start._date);
var date = [
h('b.cp-small', Messages._getKey('calendar_weekNumber', [week])),
h('b', start),
h('span', ' - '),
h('b', end),
];
if (APP.calendar._viewName === "day") {
date = h('b', start);
} else if (APP.calendar._viewName === "month") {
var month;
var mid = new Date(Math.floor(((+range.start._date) + (+range.end._date)) / 2));
try {
month = mid.toLocaleString('default', {
month: 'long',
year:'numeric'
});
month = month.replace(/^./, function (str) { return str.toUpperCase(); });
date = h('b', month);
} catch (e) {
// Use same as week range: first day of month to last day of month
}
}
APP.toolbar.$bottomM.empty().append(h('div', date));
};
var makeCalendar = function (view) {
var store = window.cryptpadStore;
@ -1190,12 +1212,12 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v
});
$(goRight).click(function () {
cal.next();
// XXX update recurring
updateDateRange();
updateRecurring();
});
$(goToday).click(function () {
cal.today();
APP.moveToDate(+new Date());
//cal.today();
updateDateRange();
updateRecurring();
});
@ -2191,6 +2213,8 @@ APP.recurrenceRule = {
}, function (obj) {
if (obj && obj.error) { console.error(obj.error); }
});
} else if (privateData.calendarOpts) {
APP.initTime = privateData.calendarOpts.time;
}
store.get('calendarView', makeCalendar);
UI.removeLoadingScreen();

View File

@ -6,13 +6,21 @@ define([
'/common/sframe-common-outer.js',
], function (nThen, ApiConfig, DomReady, SFCommonO) {
// Loaded in load #2
var hash, href;
nThen(function (waitFor) {
DomReady.onReady(waitFor());
}).nThen(function (waitFor) {
SFCommonO.initIframe(waitFor);
var obj = SFCommonO.initIframe(waitFor, true);
href = obj.href;
hash = obj.hash;
}).nThen(function (/*waitFor*/) {
var addData = function (meta) {
var addData = function (meta, Cryptpad, user, Utils) {
if (hash) {
var parsed = Utils.Hash.parsePadUrl(href);
if (parsed.hashData && parsed.hashData.newPadOpts) {
meta.calendarOpts = Utils.Hash.decodeDataOptions(parsed.hashData.newPadOpts);
}
}
meta.calendarHash = Boolean(window.location.hash);
};
SFCommonO.start({

View File

@ -564,6 +564,7 @@ define([
rec.forEach(function (obj) {
var _start = new Date(obj.start);
var _end = new Date(obj.end);
var _origin = obj;
var rule = obj.recurrenceRule;
if (!rule) { return; }
@ -624,7 +625,7 @@ define([
_toAdd.some(function (_newS) {
// Make event with correct start and end time
var _ev = Util.clone(obj);
_ev.id += '|' + (+_newS);
_ev.id = _origin.id + '|' + (+_newS);
var _evS = new Date(+_newS);
var _evE = new Date(+_newS);
setEndData(_evS, _evE, endData);

View File

@ -481,6 +481,18 @@ define([
var missed = content.msg.missed;
var start = msg.start;
var title = Util.fixHTML(msg.title);
content.handler = function () {
var priv = common.getMetadataMgr().getPrivateData();
var time = Util.find(data, ['content', 'msg', 'content', 'start']);
if (priv.app === "calendar" && window.APP && window.APP.moveToDate) {
return void window.APP.moveToDate(time);
}
var url = Hash.hashToHref('', 'calendar');
var optsUrl = Hash.getNewPadURL(url, {
time: time
});
common.openURL(optsUrl);
};
content.getFormatText = function () {
var now = +new Date();

View File

@ -13,6 +13,7 @@ define([
Mailbox.create = function (Common) {
var mailbox = Common.mailbox;
var sframeChan = Common.getSframeChannel();
var priv = Common.getMetadataMgr().getPrivateData();
var execCommand = function (cmd, data, cb) {
sframeChan.query('Q_MAILBOX_COMMAND', {
@ -67,6 +68,14 @@ define([
}
} else if (data.type === 'reminders') {
avatar = h('i.fa.fa-calendar.cp-broadcast.preview');
if (priv.app !== 'calendar') { avatar.classList.add('cp-reminder'); }
$(avatar).click(function (e) {
e.stopPropagation();
if (data.content && data.content.handler) {
return void data.content.handler();
}
Common.openURL(Hash.hashToHref('', 'calendar'));
});
} else if (userData && typeof(userData) === "object" && userData.profile) {
avatar = h('span.cp-avatar');
Common.displayAvatar($(avatar), userData.avatar, userData.displayName || userData.name);