mirror of
https://github.com/cryptpad/cryptpad.git
synced 2026-09-14 11:05:41 +05:00
Add click handlers to calendar reminders notifications
This commit is contained in:
parent
f27d779aef
commit
0ee48d40f2
@ -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;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user