2021-02-03 20:50:02 +08:00
|
|
|
// 2 list which will store sharing and shared collection's display mode.
|
|
|
|
|
// key is uuid, value is bool
|
2021-02-08 16:22:04 +08:00
|
|
|
var ccn_calendar_owned_displayCache = [];
|
2021-02-03 20:50:02 +08:00
|
|
|
var ccn_calendar_shared_displayCache = [];
|
|
|
|
|
|
2021-02-07 21:12:56 +08:00
|
|
|
// modal editing object.
|
|
|
|
|
// undefined mean add
|
2021-02-08 16:22:04 +08:00
|
|
|
// not undefined mean update(a copy of calendar event)
|
2021-02-07 21:12:56 +08:00
|
|
|
var ccn_calendar_eventModal_editing = undefined;
|
2021-02-08 16:22:04 +08:00
|
|
|
var ccn_calendar_eventModal_collectionCache = [];
|
2021-02-07 21:12:56 +08:00
|
|
|
var ccn_calendar_calendar_listCache = [];
|
|
|
|
|
var ccn_calendar_calendar_displayCache = [];
|
2021-02-10 16:51:11 +08:00
|
|
|
var ccn_calendar_calendar_displayDateTime = 0;
|
2021-02-07 21:12:56 +08:00
|
|
|
|
2021-01-19 22:20:11 +08:00
|
|
|
$(document).ready(function() {
|
|
|
|
|
ccn_pages_currentPage = ccn_pages_enumPages.calendar;
|
2021-01-24 14:38:08 +08:00
|
|
|
|
|
|
|
|
// template process
|
|
|
|
|
ccn_template_Load();
|
|
|
|
|
|
|
|
|
|
// nav process
|
2021-01-30 17:30:28 +08:00
|
|
|
ccn_headerNav_Insert();
|
|
|
|
|
ccn_headerNav_BindEvents();
|
|
|
|
|
ccn_headerNav_LoggedRefresh();
|
2021-01-19 22:20:11 +08:00
|
|
|
|
2021-01-30 17:30:28 +08:00
|
|
|
// messagebox process
|
|
|
|
|
ccn_messagebox_Insert();
|
|
|
|
|
ccn_messagebox_BindEvent();
|
|
|
|
|
|
2021-01-19 22:20:11 +08:00
|
|
|
// process calendar it self
|
2021-02-07 21:12:56 +08:00
|
|
|
ccn_calendar_calendar_LoadCalendarBody();
|
2021-01-19 22:20:11 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// init datetimepicker
|
|
|
|
|
ccn_datetimepicker_Init();
|
|
|
|
|
|
2021-01-23 18:37:12 +08:00
|
|
|
// bind tab control switcher and set current tab
|
|
|
|
|
$("#tabcontrol-tab-1-1").click(function(){
|
|
|
|
|
ccn_tabcontrol_SwitchTab(1, 1);
|
|
|
|
|
});
|
|
|
|
|
$("#tabcontrol-tab-1-2").click(function(){
|
|
|
|
|
ccn_tabcontrol_SwitchTab(1, 2);
|
|
|
|
|
});
|
|
|
|
|
$("#tabcontrol-tab-1-3").click(function(){
|
|
|
|
|
ccn_tabcontrol_SwitchTab(1, 3);
|
|
|
|
|
});
|
|
|
|
|
ccn_tabcontrol_SwitchTab(1, 1);
|
|
|
|
|
|
2021-01-19 22:20:11 +08:00
|
|
|
// apply i18n
|
2021-02-03 16:08:40 +08:00
|
|
|
ccn_i18n_LoadLanguage();
|
2021-01-19 22:20:11 +08:00
|
|
|
ccn_i18n_ApplyLanguage();
|
2021-02-04 16:32:42 +08:00
|
|
|
|
2021-02-05 17:07:20 +08:00
|
|
|
//refresh once
|
2021-02-08 16:22:04 +08:00
|
|
|
ccn_calendar_collection_Refresh();
|
2021-02-10 16:51:11 +08:00
|
|
|
ccn_calendar_calendar_Refresh();
|
|
|
|
|
ccn_calendar_calendar_Analyse();
|
|
|
|
|
ccn_calendar_calendar_Render();
|
2021-02-05 17:07:20 +08:00
|
|
|
|
2021-02-04 16:32:42 +08:00
|
|
|
// bind event
|
2021-02-08 16:22:04 +08:00
|
|
|
$('#ccn-calendar-collection-btnRefresh').click(ccn_calendar_collection_Refresh);
|
2021-02-07 21:12:56 +08:00
|
|
|
|
2021-02-10 16:51:11 +08:00
|
|
|
$('#ccn-calendar-calendar-btnJump').click(ccn_calendar_calendar_btnRefresh);
|
|
|
|
|
$('#ccn-calendar-calendar-btnToday').click(ccn_calendar_calendar_btnToday);
|
|
|
|
|
$('#ccn-calendar-calendar-btnAdd').click(ccn_calendar_calendar_btnAdd);
|
2021-01-19 22:20:11 +08:00
|
|
|
});
|
|
|
|
|
|
2021-02-04 16:32:42 +08:00
|
|
|
// ================== calendar
|
|
|
|
|
|
2021-02-07 21:12:56 +08:00
|
|
|
function ccn_calendar_calendar_LoadCalendarBody() {
|
|
|
|
|
$('#ccn-calendar-calendarBody').append(ccn_template_calendarItem.render());
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-10 16:51:11 +08:00
|
|
|
// this function only refresh cache list
|
2021-02-07 21:12:56 +08:00
|
|
|
function ccn_calendar_calendar_Refresh() {
|
2021-02-10 16:51:11 +08:00
|
|
|
var gottenDateTime = ccn_datetimepicker_Get(1, false);
|
|
|
|
|
var gottenYear = gottenDateTime.getFullYear();
|
|
|
|
|
var gottenMonth = gottenDateTime.getMonth() + 1;
|
|
|
|
|
// don't need to set anything, because its default value is enough to use.
|
|
|
|
|
|
|
|
|
|
var gottenWeek = ccn_datetime_DayOfWeek(gottenYear, gottenMonth, 1);
|
|
|
|
|
var startTimestamp = Math.floor(gottenDateTime.getTime() / 60000) - gottenWeek * ccn_datetime_DAY1_SPAN;
|
|
|
|
|
var endTimestamp = startTimestamp + ccn_datetime_DAY1_SPAN * 6 * 7 - 1;
|
|
|
|
|
|
|
|
|
|
ccn_calendar_calendar_listCache = new Array();
|
|
|
|
|
var result = ccn_api_calendar_getFull(startTimestamp, endTimestamp);
|
|
|
|
|
if (typeof(result) != 'undefined') {
|
|
|
|
|
for(var index in result) {
|
|
|
|
|
ccn_calendar_calendar_listCache[result[index][0]] = result[index];
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-02-07 21:12:56 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-10 16:51:11 +08:00
|
|
|
// this function take responsibility to analyse event
|
|
|
|
|
// call datetime function to resolve loop event
|
|
|
|
|
// and split event if some event cross 2+ days
|
|
|
|
|
function ccn_calendar_calendar_Analyse() {
|
|
|
|
|
// first, we need construct ccn_calendar_calendar_displayCache
|
|
|
|
|
ccn_calendar_calendar_displayCache = new Array();
|
|
|
|
|
var gottenDateTime = ccn_datetimepicker_Get(1, false);
|
|
|
|
|
var gottenYear = gottenDateTime.getFullYear();
|
|
|
|
|
var gottenMonth = gottenDateTime.getMonth() + 1;
|
|
|
|
|
var gottenWeek = ccn_datetime_DayOfWeek(gottenYear, gottenMonth, 1);
|
|
|
|
|
var startTimestamp = Math.floor(gottenDateTime.getTime() / 60000) - gottenWeek * ccn_datetime_DAY1_SPAN;
|
|
|
|
|
var endTimestamp = startTimestamp + ccn_datetime_DAY1_SPAN * 6 * 7 - 1;
|
|
|
|
|
gottenDateTime.setTime(startTimestamp * 60000);
|
|
|
|
|
for(var index = 0; index < 6 * 7; index++) {
|
|
|
|
|
ccn_calendar_calendar_displayCache.push({
|
|
|
|
|
month: gottenDateTime.getMonth() + 1,
|
|
|
|
|
day: gottenDateTime.getDate(),
|
2021-02-10 20:50:53 +08:00
|
|
|
dayOfWeek: gottenDateTime.getWeekday() + 1,
|
|
|
|
|
subcalendar: " -",
|
2021-02-10 16:51:11 +08:00
|
|
|
events: new Array()
|
|
|
|
|
});
|
|
|
|
|
gottenDateTime.setTime(gottenDateTime.getTime() + ccn_datetime_DAY1_SPAN * 60000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var mytimezone = -(new Date().getTimezoneOffset());
|
|
|
|
|
// then analyse each event
|
|
|
|
|
for(var index in ccn_calendar_calendar_listCache) {
|
|
|
|
|
var item = ccn_calendar_calendar_listCache[index];
|
|
|
|
|
|
|
|
|
|
var result = ccn_datetime_ResolveLoopRules4Event(
|
|
|
|
|
item[8],
|
|
|
|
|
Math.max(item[6] - item[5] + startTimestamp, item[9]),
|
|
|
|
|
Math.min(item[10], endTimestamp),
|
|
|
|
|
item[5],
|
|
|
|
|
item[6],
|
|
|
|
|
item[7],
|
|
|
|
|
startTimestamp
|
|
|
|
|
);
|
|
|
|
|
if(typeof(result) != 'undefined') {
|
|
|
|
|
for(var i in result) {
|
|
|
|
|
var it = result[i];
|
|
|
|
|
// try get event belong to which cell
|
|
|
|
|
var eventDateTime = new Date(it[0] * 60000);
|
2021-02-10 20:50:53 +08:00
|
|
|
var count = Math.floor((it[0] - startTimestamp) / ccn_datetime_DAY1_SPAN);
|
2021-02-10 16:51:11 +08:00
|
|
|
var exitFlag = false;
|
|
|
|
|
// then split event
|
|
|
|
|
while(count < 6 * 7) {
|
|
|
|
|
var eventItem = {
|
|
|
|
|
uuid: item[0],
|
2021-02-10 20:50:53 +08:00
|
|
|
belongTo: item[1],
|
2021-02-10 16:51:11 +08:00
|
|
|
title: item[2],
|
|
|
|
|
description: item[3],
|
|
|
|
|
isVisible: true,
|
|
|
|
|
isLocked: typeof(ccn_calendar_owned_displayCache[item[0]]) != 'undefined',
|
|
|
|
|
loopText: " ", // todo: finish this
|
|
|
|
|
timezoneWarning: mytimezone != item[7],
|
|
|
|
|
start: eventDateTime.toLocaleTimeString(),
|
|
|
|
|
end: undefined // filled in follwing code
|
|
|
|
|
}
|
|
|
|
|
eventDateTime.setHours(23, 59, 0, 0);
|
2021-02-10 20:50:53 +08:00
|
|
|
if (Math.floor(eventDateTime.getTime() / 60000) > it[1]) {
|
2021-02-10 16:51:11 +08:00
|
|
|
exitFlag = true;
|
|
|
|
|
eventDateTime.setTime(it[1] * 60000);
|
|
|
|
|
}
|
2021-02-10 20:50:53 +08:00
|
|
|
eventItem.end = eventDateTime.toLocaleTimeString();
|
2021-02-10 16:51:11 +08:00
|
|
|
ccn_calendar_calendar_displayCache[count].events.push(eventItem);
|
|
|
|
|
if (exitFlag) break;
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-02-07 21:12:56 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-10 16:51:11 +08:00
|
|
|
// just use produced ccn_calendar_calendar_displayCache
|
|
|
|
|
// to re-generate ui
|
|
|
|
|
function ccn_calendar_calendar_Render() {
|
|
|
|
|
// all data has been alanysed, feeback to calendar body.
|
|
|
|
|
var counter = 0;
|
|
|
|
|
for(var i = 0; i < 6; i++) {
|
|
|
|
|
for(var j = 0; j < 7; j++) {
|
|
|
|
|
var item = ccn_calendar_calendar_displayCache[counter];
|
2021-02-10 20:50:53 +08:00
|
|
|
$('#ccn-calendarItem-title-' + i + '-' + j).text(item.day);
|
|
|
|
|
$('#ccn-calendarItem-desc-' + i + '-' + j).text(item.subcalendar);
|
|
|
|
|
$('#ccn-calendarItem-task-' + i + '-' + j).text(item.events.length.toString());
|
2021-02-10 16:51:11 +08:00
|
|
|
counter++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// todo: add / migrate subcalendar feature here
|
|
|
|
|
|
|
|
|
|
// analyse visible data
|
|
|
|
|
for(var i in ccn_calendar_calendar_displayCache) {
|
|
|
|
|
for(var j in ccn_calendar_calendar_displayCache[i].events) {
|
|
|
|
|
var gottenOwnedVisible = ccn_calendar_owned_displayCache[
|
2021-02-10 20:50:53 +08:00
|
|
|
ccn_calendar_calendar_displayCache[i].events[j].belongTo
|
2021-02-10 16:51:11 +08:00
|
|
|
];
|
2021-02-10 20:50:53 +08:00
|
|
|
if (typeof(gottenOwnedVisible) == 'undefined') gottenOwnedVisible = false;
|
2021-02-10 16:51:11 +08:00
|
|
|
var gottenSharedVisible = ccn_calendar_shared_displayCache[
|
2021-02-10 20:50:53 +08:00
|
|
|
ccn_calendar_calendar_displayCache[i].events[j].belongTo
|
2021-02-10 16:51:11 +08:00
|
|
|
];
|
2021-02-10 20:50:53 +08:00
|
|
|
if (typeof(gottenSharedVisible) == 'undefined') gottenSharedVisible = false;
|
2021-02-10 16:51:11 +08:00
|
|
|
|
|
|
|
|
ccn_calendar_calendar_displayCache[i].events[j].isVisible = gottenOwnedVisible || gottenSharedVisible;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// just render them
|
|
|
|
|
var listDOM = $('#ccn-calendar-scheduleList');
|
|
|
|
|
listDOM.empty();
|
|
|
|
|
listDOM.append(ccn_template_scheduleItem.render({renderdata: ccn_calendar_calendar_displayCache}));
|
|
|
|
|
ccn_i18n_ApplyLanguage2Content(listDOM);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ccn_calendar_calendar_btnRefresh() {
|
|
|
|
|
ccn_calendar_calendar_Refresh();
|
|
|
|
|
ccn_calendar_calendar_Analyse();
|
|
|
|
|
ccn_calendar_calendar_Render();
|
2021-02-07 21:12:56 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-10 16:51:11 +08:00
|
|
|
function ccn_calendar_calendar_btnToday() {
|
2021-02-07 21:12:56 +08:00
|
|
|
var nowtime = new Date();
|
2021-02-09 17:10:05 +08:00
|
|
|
ccn_datetimepicker_Set(1, nowtime, false);
|
2021-02-07 21:12:56 +08:00
|
|
|
ccn_calendar_calendar_Refresh();
|
2021-02-10 20:50:53 +08:00
|
|
|
ccn_calendar_calendar_Analyse();
|
|
|
|
|
ccn_calendar_calendar_Render();
|
2021-02-07 21:12:56 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-10 16:51:11 +08:00
|
|
|
function ccn_calendar_calendar_btnAdd() {
|
2021-02-08 16:22:04 +08:00
|
|
|
window.location.href = '/web/eventAdd';
|
2021-02-07 21:12:56 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ccn_calendar_calendar_ItemUpdate() {
|
2021-02-08 16:22:04 +08:00
|
|
|
var uuid = $(this).attr("uuid");
|
|
|
|
|
window.location.href = '/web/eventUpdate/' + uuid;
|
2021-02-03 16:08:40 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// ============================= collection
|
2021-02-03 20:50:02 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
function ccn_calendar_collection_Refresh() {
|
|
|
|
|
ccn_calendar_owned_displayCache = new Array();
|
2021-02-03 20:50:02 +08:00
|
|
|
ccn_calendar_shared_displayCache = new Array();
|
2021-02-03 16:08:40 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// render shared
|
2021-02-03 20:50:02 +08:00
|
|
|
var result = ccn_api_collection_getShared();
|
2021-02-08 16:22:04 +08:00
|
|
|
var listDOM = $('#ccn-calendar-sharedList');
|
|
|
|
|
listDOM.empty();
|
2021-02-03 20:50:02 +08:00
|
|
|
var renderdata = {
|
|
|
|
|
uuid: undefined,
|
|
|
|
|
name: undefined,
|
|
|
|
|
username: undefined
|
|
|
|
|
}
|
2021-02-08 16:22:04 +08:00
|
|
|
if (typeof(result) != 'undefined') {
|
|
|
|
|
for(var index in result) {
|
|
|
|
|
var item = result[index];
|
|
|
|
|
renderdata.uuid = item[0];
|
|
|
|
|
renderdata.name = item[1];
|
|
|
|
|
renderdata.username = item[2];
|
|
|
|
|
|
|
|
|
|
listDOM.append(ccn_template_displaySharedItem.render(renderdata));
|
|
|
|
|
|
|
|
|
|
// change display
|
|
|
|
|
var uuid = renderdata.uuid;
|
|
|
|
|
ccn_calendar_shared_ChangeDisplayMode(uuid, true);
|
2021-02-03 20:50:02 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// push into display list
|
|
|
|
|
ccn_calendar_shared_displayCache[uuid] = true;
|
|
|
|
|
|
|
|
|
|
// bind event
|
|
|
|
|
$('#ccn-displaySharedItem-btnHide-' + uuid).click(ccn_calendar_shared_ItemSwitchDisplay);
|
|
|
|
|
$('#ccn-displaySharedItem-btnShow-' + uuid).click(ccn_calendar_shared_ItemSwitchDisplay);
|
|
|
|
|
}
|
2021-02-03 20:50:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ccn_i18n_ApplyLanguage2Content(listDOM);
|
|
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// render owned
|
|
|
|
|
result = ccn_api_collection_getFullOwn();
|
|
|
|
|
listDOM = $('#ccn-calendar-ownedList');
|
|
|
|
|
listDOM.empty();
|
|
|
|
|
renderdata = {
|
|
|
|
|
uuid: undefined,
|
|
|
|
|
name: undefined
|
2021-02-03 20:50:02 +08:00
|
|
|
}
|
2021-02-08 16:22:04 +08:00
|
|
|
if (typeof(result) != 'undefined') {
|
|
|
|
|
for(var index in result) {
|
|
|
|
|
var item = result[index];
|
|
|
|
|
renderdata.uuid = item[0];
|
|
|
|
|
renderdata.name = item[1];
|
2021-02-04 16:32:42 +08:00
|
|
|
|
|
|
|
|
// render
|
2021-02-08 16:22:04 +08:00
|
|
|
listDOM.append(ccn_template_displayOwnedItem.render(renderdata));
|
2021-02-03 20:50:02 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// set mode
|
|
|
|
|
var uuid = renderdata.uuid;
|
|
|
|
|
ccn_calendar_owned_ChangeDisplayMode(uuid, true);
|
2021-02-04 16:32:42 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// push into display list
|
|
|
|
|
ccn_calendar_owned_displayCache[uuid] = true;
|
2021-02-03 20:50:02 +08:00
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
// bind event
|
|
|
|
|
$('#ccn-displayOwnedItem-btnHide-' + uuid).click(ccn_calendar_owned_ItemSwitchDisplay);
|
|
|
|
|
$('#ccn-displayOwnedItem-btnShow-' + uuid).click(ccn_calendar_owned_ItemSwitchDisplay);
|
2021-02-04 16:32:42 +08:00
|
|
|
}
|
|
|
|
|
}
|
2021-02-03 20:50:02 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-05 17:07:20 +08:00
|
|
|
function ccn_calendar_owned_ItemSwitchDisplay() {
|
2021-02-04 16:32:42 +08:00
|
|
|
var uuid = $(this).attr("uuid");
|
2021-02-08 16:22:04 +08:00
|
|
|
ccn_calendar_owned_displayCache[uuid] = !(ccn_calendar_owned_displayCache[uuid]);
|
|
|
|
|
ccn_calendar_owned_ChangeDisplayMode(uuid, ccn_calendar_owned_displayCache[uuid]);
|
2021-02-03 20:50:02 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
function ccn_calendar_shared_ItemSwitchDisplay() {
|
2021-02-04 16:32:42 +08:00
|
|
|
var uuid = $(this).attr("uuid");
|
2021-02-08 16:22:04 +08:00
|
|
|
ccn_calendar_shared_displayCache[uuid] = !(ccn_calendar_shared_displayCache[uuid]);
|
|
|
|
|
ccn_calendar_shared_ChangeDisplayMode(uuid, ccn_calendar_shared_displayCache[uuid]);
|
2021-02-03 20:50:02 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
function ccn_calendar_shared_ChangeDisplayMode(uuid, isShow) {
|
|
|
|
|
if (isShow) {
|
|
|
|
|
$('#ccn-displaySharedItem-btnHide-' + uuid).show();
|
|
|
|
|
$('#ccn-displaySharedItem-btnShow-' + uuid).hide();
|
|
|
|
|
} else {
|
|
|
|
|
$('#ccn-displaySharedItem-btnHide-' + uuid).hide();
|
|
|
|
|
$('#ccn-displaySharedItem-btnShow-' + uuid).show();
|
2021-02-04 16:32:42 +08:00
|
|
|
}
|
2021-02-03 20:50:02 +08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 16:22:04 +08:00
|
|
|
function ccn_calendar_owned_ChangeDisplayMode(uuid, isShow) {
|
|
|
|
|
if (isShow) {
|
|
|
|
|
$('#ccn-displayOwnedItem-btnHide-' + uuid).show();
|
|
|
|
|
$('#ccn-displayOwnedItem-btnShow-' + uuid).hide();
|
|
|
|
|
} else {
|
|
|
|
|
$('#ccn-displayOwnedItem-btnHide-' + uuid).hide();
|
|
|
|
|
$('#ccn-displayOwnedItem-btnShow-' + uuid).show();
|
2021-02-04 16:32:42 +08:00
|
|
|
}
|
2021-02-03 20:50:02 +08:00
|
|
|
}
|