2014-04-14 16:29:23 +02:00
|
|
|
/* -*- Mode: js2-mode; tab-width: 4; c-label-minimum-indentation: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
|
|
|
|
/*
|
2014-05-16 16:04:37 +02:00
|
|
|
Copyright (C) 2006-2014 Inverse
|
|
|
|
|
|
|
|
This file is part of SOGo
|
|
|
|
|
|
|
|
SOGo is free software; you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU Lesser General Public License as published by the
|
|
|
|
Free Software Foundation; either version 2, or (at your option) any
|
|
|
|
later version.
|
|
|
|
|
|
|
|
SOGo is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
|
|
License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with SOGo; see the file COPYING. If not, write to the
|
|
|
|
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
02111-1307, USA.
|
|
|
|
*/
|
2014-04-14 16:29:23 +02:00
|
|
|
|
2014-04-17 23:33:30 +02:00
|
|
|
/******************************** Global variables *******************************************/
|
|
|
|
var firstDayOfWeek = window.opener.firstDayOfWeek;
|
2014-04-22 23:47:29 +02:00
|
|
|
var printCompletedTasks=1;
|
2014-08-26 19:36:42 +02:00
|
|
|
var printNoDueDateTasks=true;
|
|
|
|
var printColors= { checked:true, style:"borders" };
|
2014-04-22 23:47:29 +02:00
|
|
|
var eventsBlocks;
|
2014-06-25 23:39:48 +02:00
|
|
|
var currentPreview;
|
2014-04-26 00:04:24 +02:00
|
|
|
var currentDay = window.parentvar("currentDay");
|
2014-04-22 23:47:29 +02:00
|
|
|
var sd, ed;
|
2014-04-14 16:29:23 +02:00
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
/****************************************** Ajax Requests, callbacks & events/tasks drawings ***************************************************/
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function refreshContent() {
|
2014-08-25 19:46:35 +02:00
|
|
|
refreshEvents(); // Get the eventBlocks and draw them
|
|
|
|
refreshTasks(); // Get the taskLists and draw them
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function updateDisplayView(data, newView) {
|
2014-08-25 19:46:35 +02:00
|
|
|
newView = ((newView) ? newView : currentPreview);
|
|
|
|
var url = ApplicationBaseURL + "/" + newView;
|
|
|
|
var day = null;
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
if (data)
|
2014-08-25 19:46:35 +02:00
|
|
|
day = data['day'];
|
|
|
|
if (!day)
|
|
|
|
day = currentDay;
|
|
|
|
if (day) {
|
|
|
|
if (data) {
|
|
|
|
var dayDiv = $("day"+day);
|
|
|
|
if (dayDiv) {
|
|
|
|
// Don't reload the view if the event is present in current view
|
|
|
|
|
|
|
|
// Deselect day in date selector
|
|
|
|
if (document.selectedDate)
|
|
|
|
document.selectedDate.deselect();
|
|
|
|
|
|
|
|
// Select day in date selector
|
|
|
|
var selectedLink = $$('table#dateSelectorTable span[day='+day+']');
|
|
|
|
if (selectedLink.length > 0) {
|
|
|
|
selectedCell = selectedLink[0].getParentWithTagName("td");
|
|
|
|
$(selectedCell).selectElement();
|
|
|
|
document.selectedDate = selectedCell;
|
2014-08-26 19:36:42 +02:00
|
|
|
}
|
|
|
|
else
|
2014-08-25 19:46:35 +02:00
|
|
|
document.selectedDate = null;
|
|
|
|
|
|
|
|
setSelectedDayDate(day);
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2014-08-26 19:36:42 +02:00
|
|
|
else if (day.length == 6)
|
2014-08-25 19:46:35 +02:00
|
|
|
day += "01";
|
|
|
|
}
|
|
|
|
url += "?day=" + day;
|
|
|
|
}
|
|
|
|
selectedCalendarCell = null;
|
2014-08-26 19:36:42 +02:00
|
|
|
|
2014-08-25 19:46:35 +02:00
|
|
|
if (document.dayDisplayAjaxRequest) {
|
|
|
|
document.dayDisplayAjaxRequest.aborted = true;
|
|
|
|
document.dayDisplayAjaxRequest.abort();
|
|
|
|
}
|
|
|
|
document.dayDisplayAjaxRequest = triggerAjaxRequest(url, previewDisplayCallback,
|
|
|
|
{ "view": newView, "day": day});
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function previewDisplayCallback(http) {
|
2014-08-25 19:46:35 +02:00
|
|
|
if (http.readyState == 4
|
|
|
|
&& http.status == 200) {
|
|
|
|
$("rightFrameEvents").innerHTML = http.responseText;
|
|
|
|
$("currentViewMenu").remove();
|
|
|
|
$("listCollapse").remove();
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
if (currentPreview == "multicolumndayview")
|
2014-08-25 19:46:35 +02:00
|
|
|
_drawCalendarAllDayEvents(null, null, eventsBlocks);
|
|
|
|
else {
|
|
|
|
allDayEventsList = eventsBlocks[1];
|
|
|
|
if (currentPreview == "monthview") {
|
|
|
|
//_drawMonthCalendarEvents(eventsList, eventsBlocks[0], null);
|
|
|
|
}
|
2014-08-26 19:36:42 +02:00
|
|
|
else
|
2014-08-25 19:46:35 +02:00
|
|
|
_drawCalendarAllDayEvents(allDayEventsList, eventsBlocks[0], null);
|
|
|
|
}
|
2014-08-26 19:36:42 +02:00
|
|
|
// This ensure to diplay working hours checkbox when switching views
|
2014-08-25 19:46:35 +02:00
|
|
|
var printHoursCheckBox = $("printHours");
|
|
|
|
onPrintWorkingHoursCheck(printHoursCheckBox);
|
|
|
|
|
|
|
|
// Add events color for each calendars
|
2014-08-26 19:36:42 +02:00
|
|
|
//addCalendarsColor();
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
else
|
|
|
|
log ("calendarDisplayCallback Ajax error ("+ http.readyState + "/" + http.status + ")");
|
|
|
|
|
|
|
|
return false;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
function addCalendarsColor () {
|
2014-08-25 19:46:35 +02:00
|
|
|
var allCalendars = window.parent$("calendarList");
|
|
|
|
var allColors = window.parentvar("UserSettings")['Calendar']['FolderColors'];
|
|
|
|
|
|
|
|
for (var i = 0; i < allCalendars.children.length; i++) {
|
|
|
|
if (allCalendars.children[i].down("input").checked){
|
|
|
|
owner = allCalendars.children[i].getAttribute("owner");
|
|
|
|
folderName = allCalendars.children[i].getAttribute("id").substr(1);
|
|
|
|
|
|
|
|
color = allColors[owner + ":Calendar/" + folderName];
|
|
|
|
if (!color) {
|
|
|
|
if(folderName.split("_")[1])
|
|
|
|
color = allColors[owner + ":Calendar/" + folderName.split("_")[1]];
|
|
|
|
else
|
|
|
|
color = "#AAAAAA";
|
|
|
|
}
|
|
|
|
appendStyleElement(folderName, color);
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function refreshEvents() {
|
2014-08-25 19:46:35 +02:00
|
|
|
var todayDate = new Date();
|
|
|
|
|
|
|
|
if (!currentDay)
|
|
|
|
currentDay = todayDate.getDayString();
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
if (currentPreview == "dayview" || currentPreview == "multicolumndayview") {
|
2014-08-25 19:46:35 +02:00
|
|
|
sd = currentDay;
|
|
|
|
ed = sd;
|
|
|
|
}
|
2014-08-26 19:36:42 +02:00
|
|
|
else if (currentPreview == "weekview") {
|
2014-08-25 19:46:35 +02:00
|
|
|
var startDate;
|
|
|
|
startDate = currentDay.asDate();
|
|
|
|
startDate = startDate.beginOfWeek();
|
|
|
|
sd = startDate.getDayString();
|
|
|
|
var endDate = new Date();
|
|
|
|
endDate.setTime(startDate.getTime());
|
|
|
|
endDate.addDays(6);
|
|
|
|
ed = endDate.getDayString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
var monthDate;
|
|
|
|
monthDate = currentDay.asDate();
|
|
|
|
monthDate.setDate(1);
|
|
|
|
sd = monthDate.beginOfWeek().getDayString();
|
|
|
|
|
|
|
|
var lastMonthDate = new Date();
|
|
|
|
lastMonthDate.setTime(monthDate.getTime());
|
|
|
|
lastMonthDate.setMonth(monthDate.getMonth() + 1);
|
|
|
|
lastMonthDate.addDays(-1);
|
|
|
|
ed = lastMonthDate.endOfWeek().getDayString();
|
|
|
|
}
|
|
|
|
if (document.refreshEventsAjaxRequest) {
|
|
|
|
document.refreshEventsAjaxRequest.aborted = true;
|
|
|
|
document.refreshEventsAjaxRequest.abort();
|
|
|
|
}
|
|
|
|
var url = (ApplicationBaseURL + "/eventsblocks?sd=" + sd + "&ed=" + ed
|
|
|
|
+ "&view=" + currentPreview);
|
|
|
|
|
|
|
|
document.refreshEventsAjaxRequest
|
|
|
|
= triggerAjaxRequest(url, refreshEventsCallback,
|
|
|
|
{"startDate": sd, "endDate": ed});
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function refreshTasks(){
|
2014-08-25 19:46:35 +02:00
|
|
|
if (document.tasksListAjaxRequest) {
|
|
|
|
document.tasksListAjaxRequest.aborted = true;
|
|
|
|
document.tasksListAjaxRequest.abort();
|
|
|
|
}
|
|
|
|
|
|
|
|
var taskListFilter = window.parentvar("taskListFilter");
|
|
|
|
url = window.parentvar("ApplicationBaseURL") + "/" + "taskslist?show-completed=" + printCompletedTasks
|
|
|
|
+ "&asc=" + sorting["task-ascending"]
|
|
|
|
+ "&sort=" + sorting["task-attribute"]
|
|
|
|
+ "&filterpopup=" + taskListFilter;
|
|
|
|
|
|
|
|
// TODO : Is that really necessary ?
|
|
|
|
var tasksList = window.parent$("tasksList");
|
|
|
|
var selectedIds;
|
|
|
|
if (tasksList)
|
|
|
|
selectedIds = tasksList.getSelectedNodesId();
|
|
|
|
else
|
|
|
|
selectedIds = null;
|
|
|
|
|
|
|
|
document.tasksListAjaxRequest = triggerAjaxRequest(url, refreshTasksListCallback, selectedIds);
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function refreshEventsCallback(http) {
|
2014-08-25 19:46:35 +02:00
|
|
|
if (http.readyState == 4
|
|
|
|
&& http.status == 200) {
|
|
|
|
if (http.responseText.length > 0) {
|
|
|
|
eventsBlocks = http.responseText.evalJSON(true);
|
|
|
|
$("rightFrameEvents").innerHTML = "";
|
|
|
|
if ($("printLayoutList").value == "0" && eventsBlocks.length > 0) {
|
|
|
|
_drawEventsCells(eventsBlocks);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
updateDisplayView(null, currentPreview);
|
|
|
|
}
|
|
|
|
adjustFrames();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
log("AJAX error when refreshing calendar events");
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function refreshTasksListCallback(http) {
|
2014-08-25 19:46:35 +02:00
|
|
|
if (http.readyState == 4
|
|
|
|
&& http.status == 200) {
|
|
|
|
if (http.responseText.length > 0) {
|
|
|
|
var tasksBlocks = http.responseText.evalJSON(true);
|
|
|
|
$("rightFrameTasks").innerHTML = "";
|
|
|
|
if (tasksBlocks.length > 0) {
|
|
|
|
_drawTasksCells(tasksBlocks);
|
|
|
|
adjustFrames();
|
|
|
|
}
|
|
|
|
}
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
else
|
|
|
|
log("AJAX error when refreshing calendar events");
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function _drawEventsCells(eventsBlocks) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var events = _("Events");
|
|
|
|
$("rightFrameEvents").insert("<h3>"+events+"</h3>");
|
|
|
|
if (currentPreview == "multicolumndayview") {
|
|
|
|
for(var i=0; i < eventsBlocks.length; i++) { // calendars
|
|
|
|
for (var j = 0; j < eventsBlocks[i][0].length; j++) {
|
|
|
|
var event = _parseEvent(eventsBlocks[i][0][j]);
|
|
|
|
$("rightFrameEvents").insert(event);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
for(var i=0; i < eventsBlocks[0].length; i++) {
|
|
|
|
var event = _parseEvent(eventsBlocks[0][i]);
|
|
|
|
$("rightFrameEvents").insert(event);
|
|
|
|
}
|
|
|
|
}
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
2014-04-14 16:29:23 +02:00
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
function _drawTasksCells(tasksBlocks) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var task = _("Tasks");
|
|
|
|
$("rightFrameTasks").insert("<h3>"+task+"</h3>");
|
|
|
|
for(var i=0; i < tasksBlocks.length; i++) {
|
2014-08-26 19:36:42 +02:00
|
|
|
if (!(printNoDueDateTasks == false && tasksBlocks[i][5] == null)) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var task = _parseTask(tasksBlocks[i]);
|
|
|
|
$("rightFrameTasks").insert(task);
|
|
|
|
}
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
function addColorsOnEvents(eventInside, eventCell) {
|
|
|
|
if (printColors.checked == true) {
|
|
|
|
if (printColors.style == "borders") {
|
|
|
|
var string = "borderC" + eventInside.getAttribute("class").split(" ")[1].substr(1);
|
|
|
|
Element.addClassName(eventCell, string);
|
|
|
|
}
|
|
|
|
else if(printColors.style == "backgrounds") {
|
|
|
|
var string = "backgroundC" + eventInside.getAttribute("class").split(" ")[1].substr(1);
|
|
|
|
Element.addClassName(eventInside, string);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-04-28 19:54:29 +02:00
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
function _drawCalendarEvents(events, eventsData, columnsData) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var daysView = $("daysView");
|
|
|
|
var subdivs = daysView.childNodesWithTag("div");
|
|
|
|
var printHoursCheckBox = $("printHours");
|
|
|
|
for (var i = 0; i < subdivs.length; i++) {
|
|
|
|
var subdiv = subdivs[i];
|
|
|
|
if (subdiv.hasClassName("days")) {
|
|
|
|
var days = subdiv.childNodesWithTag("div");
|
|
|
|
if (currentPreview == "multicolumndayview") {
|
|
|
|
for (var j = 0; j < days.length; j++) {
|
|
|
|
var parentDiv = days[j].childNodesWithTag("div")[0];
|
|
|
|
var calendar = columnsData[j];
|
|
|
|
var calendarEvents = calendar[2][0];
|
|
|
|
var calendarEventsData = calendar[0];
|
|
|
|
if (parentDiv.getElementsByClassName("event").length > 0) {
|
|
|
|
var oldEvents = parentDiv.getElementsByClassName("event");
|
|
|
|
var length = oldEvents.length - 1;
|
|
|
|
for (var x = length; x >= 0; x--)
|
|
|
|
oldEvents[x].remove();
|
|
|
|
}
|
|
|
|
for (var k = 0; k < calendarEvents.length; k++) {
|
|
|
|
var eventRep = calendarEvents[k];
|
|
|
|
var nbr = eventRep.nbr;
|
|
|
|
|
|
|
|
if (printHoursCheckBox.checked) {
|
|
|
|
var offset = _computeOffset(parentDiv);
|
2015-11-03 14:57:51 +01:00
|
|
|
if ((eventRep.start - offset[0]) >= 0 && (eventRep.start - offset[0]) <= offset[1]) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var eventCell = newEventDIV(eventRep, calendarEventsData[nbr], offset[0]);
|
2014-08-26 19:36:42 +02:00
|
|
|
var eventInside = eventCell.down(".eventInside");
|
|
|
|
addColorsOnEvents(eventInside, eventCell);
|
2014-08-25 19:46:35 +02:00
|
|
|
parentDiv.appendChild(eventCell);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
var eventCell = newEventDIV(eventRep, calendarEventsData[nbr], null);
|
2014-08-26 19:36:42 +02:00
|
|
|
var eventInside = eventCell.down(".eventInside");
|
|
|
|
addColorsOnEvents(eventInside, eventCell);
|
2014-08-25 19:46:35 +02:00
|
|
|
parentDiv.appendChild(eventCell);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
else {
|
2014-08-25 19:46:35 +02:00
|
|
|
for (var j = 0; j < days.length; j++) {
|
|
|
|
var parentDiv = days[j].childNodesWithTag("div")[0];
|
|
|
|
if (parentDiv.getElementsByClassName("event").length > 0) {
|
|
|
|
var oldEvents = parentDiv.getElementsByClassName("event");
|
|
|
|
var length = oldEvents.length - 1;
|
|
|
|
for (var x = length; x >= 0; x--)
|
|
|
|
oldEvents[x].remove();
|
|
|
|
}
|
|
|
|
for (var k = 0; k < events[j].length; k++) {
|
|
|
|
var eventRep = events[j][k];
|
|
|
|
var nbr = eventRep.nbr;
|
|
|
|
if (printHoursCheckBox.checked) {
|
|
|
|
var offset = _computeOffset(parentDiv);
|
2015-11-03 14:57:51 +01:00
|
|
|
if ((eventRep.start - offset[0]) >= 0 && (eventRep.start - offset[0]) <= offset[1]) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var eventCell = newEventDIV(eventRep, eventsData[nbr], offset[0]);
|
2014-08-26 19:36:42 +02:00
|
|
|
var eventInside = eventCell.down(".eventInside");
|
|
|
|
addColorsOnEvents(eventInside, eventCell);
|
2014-08-25 19:46:35 +02:00
|
|
|
parentDiv.appendChild(eventCell);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
var eventCell = newEventDIV(eventRep, eventsData[nbr], null);
|
2014-08-26 19:36:42 +02:00
|
|
|
var eventInside = eventCell.down(".eventInside");
|
|
|
|
addColorsOnEvents(eventInside, eventCell);
|
2014-08-25 19:46:35 +02:00
|
|
|
parentDiv.appendChild(eventCell);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function _drawCalendarAllDayEvents(events, eventsData, columnsData) {
|
|
|
|
var headerView = $("calendarHeader");
|
|
|
|
var subdivs = headerView.childNodesWithTag("div");
|
|
|
|
|
|
|
|
if (currentPreview == "multicolumndayview") {
|
|
|
|
var days = subdivs[2].childNodesWithTag("div");
|
|
|
|
for (var i = 0; i < days.length; i++) {
|
|
|
|
var parentDiv = days[i];
|
|
|
|
var calendar = columnsData[i];
|
|
|
|
var calendarAllDayEvents = calendar[1][0];
|
|
|
|
var calendarAllDayEventsData = calendar[0];
|
|
|
|
for (var j = 0; j < calendarAllDayEvents.length; j++) {
|
|
|
|
var eventRep = calendarAllDayEvents[j];
|
|
|
|
var nbr = eventRep.nbr;
|
|
|
|
var eventCell = newAllDayEventDIV(eventRep, calendarAllDayEventsData[nbr]);
|
2014-06-25 23:39:48 +02:00
|
|
|
parentDiv.appendChild(eventCell);
|
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
var days = subdivs[1].childNodesWithTag("div");
|
|
|
|
for (var i = 0; i < days.length; i++) {
|
|
|
|
var parentDiv = days[i];
|
|
|
|
for (var j = 0; j < events[i].length; j++) {
|
|
|
|
var eventRep = events[i][j];
|
|
|
|
var nbr = eventRep.nbr;
|
|
|
|
var eventCell = newAllDayEventDIV(eventRep, eventsData[nbr]);
|
|
|
|
parentDiv.appendChild(eventCell);
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
adjustPreviewHeader();
|
2014-04-28 19:54:29 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
// todo : month
|
2014-04-14 16:29:23 +02:00
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
function newEventDIV(eventRep, event, offset) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var eventCell = newBaseEventDIV(eventRep, event, event[4]);
|
|
|
|
|
|
|
|
var pc = 100 / eventRep.siblings;
|
|
|
|
var left = Math.floor(eventRep.position * pc);
|
|
|
|
eventCell.style.left = left + "%";
|
|
|
|
var right = Math.floor(100 - (eventRep.position + 1) * pc);
|
|
|
|
eventCell.style.right = right + "%";
|
|
|
|
if (offset != null) {
|
|
|
|
eventCell.addClassName("starts" + (eventRep.start - offset));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
eventCell.addClassName("starts" + eventRep.start);
|
|
|
|
}
|
|
|
|
eventCell.addClassName("lasts" + eventRep.length);
|
|
|
|
|
|
|
|
if (event[7]) {
|
|
|
|
var inside = eventCell.childNodesWithTag("div")[0];
|
|
|
|
var textDiv = inside.childNodesWithTag("div")[1];
|
|
|
|
textDiv.appendChild(createElement("br"));
|
|
|
|
var span = createElement("span", null, "location");
|
2016-01-13 17:29:41 +01:00
|
|
|
var text = _("Location") + " " + event[7];
|
2014-08-25 19:46:35 +02:00
|
|
|
span.update(text);
|
|
|
|
textDiv.appendChild(span);
|
|
|
|
}
|
|
|
|
|
|
|
|
return eventCell;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
2014-04-14 16:29:23 +02:00
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
function newBaseEventDIV(eventRep, event, eventText) {
|
2014-08-25 19:46:35 +02:00
|
|
|
// log ("0 cname = " + event[0]);
|
|
|
|
// log ("1 calendar = " + event[1]);
|
|
|
|
// log ("2 calendar name = " + event[2]);
|
|
|
|
// log ("3 status = " + event[3]);
|
|
|
|
// log ("4 title = " + event[4]);
|
|
|
|
// log ("5 start = " + event[5]);
|
|
|
|
// log ("6 end = " + event[6]);
|
|
|
|
// log ("7 location = " + event[7]);
|
|
|
|
// log ("8 isallday = " + event[8]);
|
|
|
|
// log ("9 classification = " + event[9]); // 0 = public, 1 = private, 2 = confidential
|
|
|
|
// log ("10 category = " + event[10]);
|
|
|
|
// log ("11 participants emails = " + event[11]);
|
|
|
|
// log ("12 participants states = " + event[12]);
|
|
|
|
// log ("13 owner = " + event[13]);
|
|
|
|
// log ("14 iscycle = " + event[14]);
|
|
|
|
// log ("15 nextalarm = " + event[15]);
|
|
|
|
// log ("16 recurrenceid = " + event[16]);
|
|
|
|
// log ("17 isexception = " + event[17]);
|
|
|
|
// log ("18 editable = " + event[18]);
|
|
|
|
// log ("19 erasable = " + event[19]);
|
|
|
|
// log ("20 ownerisorganizer = " + event[20]);
|
|
|
|
|
|
|
|
var eventCell = createElement("div");
|
|
|
|
eventCell.cname = event[0];
|
|
|
|
eventCell.calendar = event[1];
|
|
|
|
var startDate = new Date(event[5]*1000);
|
|
|
|
if (startDate) {
|
|
|
|
eventCell.startDate = event[5];
|
|
|
|
eventCell.writeAttribute('day', startDate.getDayString());
|
|
|
|
eventCell.writeAttribute('hour', event[8]? 'allday' : startDate.getHourString());
|
|
|
|
}
|
|
|
|
// if (event[8] == 1)
|
|
|
|
// eventCell.addClassName("private");
|
|
|
|
// else if (event[8] == 2)
|
|
|
|
// eventCell.addClassName("confidential");
|
|
|
|
if (eventRep.recurrenceTime)
|
|
|
|
eventCell.recurrenceTime = eventRep.recurrenceTime;
|
|
|
|
//eventCell.owner = event[12];
|
|
|
|
eventCell.isException = event[17];
|
|
|
|
eventCell.editable = event[18];
|
|
|
|
eventCell.erasable = event[19] || IsSuperUser;
|
|
|
|
eventCell.ownerIsOrganizer = event[20];
|
|
|
|
eventCell.addClassName("event");
|
|
|
|
// if (event[14] > 0)
|
|
|
|
// eventCell.addClassName("alarm");
|
|
|
|
|
|
|
|
var innerDiv = createElement("div");
|
|
|
|
eventCell.appendChild(innerDiv);
|
|
|
|
innerDiv.addClassName("eventInside");
|
|
|
|
innerDiv.addClassName("calendarFolder" + event[1]);
|
|
|
|
if (eventRep.userState >= 0 && userStates[eventRep.userState])
|
|
|
|
innerDiv.addClassName(userStates[eventRep.userState]);
|
|
|
|
|
|
|
|
var gradientDiv = createElement("div");
|
|
|
|
innerDiv.appendChild(gradientDiv);
|
|
|
|
gradientDiv.addClassName("gradient");
|
|
|
|
|
|
|
|
var gradientImg = createElement("img");
|
|
|
|
gradientDiv.appendChild(gradientImg);
|
|
|
|
gradientImg.src = ResourcesURL + "/event-gradient.png";
|
|
|
|
|
|
|
|
var textDiv = createElement("div");
|
|
|
|
innerDiv.appendChild(textDiv);
|
|
|
|
textDiv.addClassName("text");
|
|
|
|
var iconSpan = createElement("span", null, "icons");
|
|
|
|
textDiv.update(eventText.replace(/(\\r)?\\n/g, "<BR/>"));
|
|
|
|
textDiv.appendChild(iconSpan);
|
|
|
|
|
|
|
|
// Add alarm and classification icons
|
|
|
|
if (event[9] == 1)
|
|
|
|
createElement("img", null, null, {src: ResourcesURL + "/private.png"}, null, iconSpan);
|
|
|
|
else if (event[9] == 2)
|
|
|
|
createElement("img", null, null, {src: ResourcesURL + "/confidential.png"}, null, iconSpan);
|
|
|
|
if (event[15] > 0)
|
|
|
|
createElement("img", null, null, {src: ResourcesURL + "/alarm.png"}, null, iconSpan);
|
|
|
|
|
|
|
|
if (event[10] != null) {
|
|
|
|
var category = event[10].decodeEntities();
|
|
|
|
var categoryStyle = categoriesStyles.get(category);
|
|
|
|
if (!categoryStyle) {
|
|
|
|
categoryStyle = 'category_' + categoriesStyles.keys().length;
|
|
|
|
categoriesStyles.set([category], categoryStyle);
|
|
|
|
}
|
|
|
|
innerDiv.addClassName(categoryStyle);
|
|
|
|
}
|
|
|
|
|
|
|
|
return eventCell;
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
function appendStyleElement(folderPath, color) {
|
2014-08-25 19:46:35 +02:00
|
|
|
if (document.styleSheets) {
|
|
|
|
var fgColor = getContrastingTextColor(color);
|
|
|
|
var styleElement = document.styleSheets[3];
|
2014-08-26 19:36:42 +02:00
|
|
|
|
|
|
|
if (printColors.style == "backgrounds") {
|
|
|
|
styleElement.insertRule(".calendarFolder" + folderPath +
|
|
|
|
"{background-color: " + color + " !important;" +
|
|
|
|
" color: " + fgColor + " !important;" +
|
|
|
|
" border: none;}", styleElement.cssRules.length);
|
|
|
|
}
|
|
|
|
else if (printColors.style == "borders")
|
|
|
|
styleElement.insertRule(".calendarFolder" + folderPath +
|
|
|
|
"{background-color: none" +
|
|
|
|
" color: none" +
|
|
|
|
" border:1px solid " + color + " !important;}", styleElement.cssRules.length);
|
2014-08-25 19:46:35 +02:00
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
function _parseEvent(event) {
|
2014-08-25 19:46:35 +02:00
|
|
|
// Localized strings :
|
2016-01-13 17:29:41 +01:00
|
|
|
var start = _("Start");
|
|
|
|
var end = _("End");
|
|
|
|
var location = _("Location");
|
|
|
|
var calendar = _("Calendar");
|
|
|
|
var description = _("Description");
|
2014-08-26 19:36:42 +02:00
|
|
|
var newEvent = document.createElement("div");
|
|
|
|
var table = document.createElement("table");
|
|
|
|
Element.addClassName(newEvent, "divEventsPreview");
|
|
|
|
|
|
|
|
var row = table.insertRow(0);
|
|
|
|
row.insertCell(0);
|
|
|
|
var title = row.insertCell(1);
|
|
|
|
row = table.insertRow(1);
|
|
|
|
var startCell = row.insertCell(0);
|
|
|
|
Element.addClassName(startCell, "cellFormat");
|
|
|
|
var startCellValue = row.insertCell(1);
|
|
|
|
row = table.insertRow(2);
|
|
|
|
var endCell = row.insertCell(0);
|
|
|
|
Element.addClassName(endCell, "cellFormat");
|
|
|
|
var endCellValue = row.insertCell(1);
|
|
|
|
row = table.insertRow(3);
|
|
|
|
var locationCell = row.insertCell(0);
|
|
|
|
Element.addClassName(locationCell, "cellFormat");
|
|
|
|
var locationCellValue = row.insertCell(1);
|
|
|
|
row = table.insertRow(4);
|
|
|
|
var calendarCell = row.insertCell(0);
|
|
|
|
Element.addClassName(calendarCell, "cellFormat");
|
|
|
|
var calendarCellValue = row.insertCell(1);
|
2015-05-13 19:12:15 +02:00
|
|
|
row = table.insertRow(5);
|
|
|
|
var descriptionCell = row.insertCell(0);
|
|
|
|
Element.addClassName(descriptionCell, "cellFormat");
|
|
|
|
var descriptionCellValue = row.insertCell(1);
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
title.innerHTML = event[4];
|
|
|
|
startCell.innerHTML = start;
|
2014-08-25 19:46:35 +02:00
|
|
|
var startDate = new Date(event[5] *1000);
|
2014-08-26 19:36:42 +02:00
|
|
|
startCellValue.innerHTML = startDate.toLocaleString();
|
|
|
|
endCell.innerHTML = end;
|
2014-08-25 19:46:35 +02:00
|
|
|
var endDate = new Date(event[6] *1000);
|
2014-08-26 19:36:42 +02:00
|
|
|
endCellValue.innerHTML = endDate.toLocaleString();
|
|
|
|
locationCell.innerHTML = location;
|
|
|
|
locationCellValue.innerHTML = event[7];
|
|
|
|
calendarCell.innerHTML = calendar;
|
|
|
|
calendarCellValue.innerHTML = event[2];
|
|
|
|
|
2015-05-13 19:12:15 +02:00
|
|
|
if (event[21] && event[21].length) {
|
|
|
|
descriptionCell.innerHTML = description;
|
2015-07-22 20:49:09 +02:00
|
|
|
descriptionCellValue.innerHTML = event[21].replace(/(?:\r\n|\r|\n)/g, '<br/>');
|
2015-05-13 19:12:15 +02:00
|
|
|
}
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
if (printColors.checked) {
|
|
|
|
var allColors = window.parentvar("UserSettings")['Calendar']['FolderColors'];
|
|
|
|
var owner = event[13];
|
|
|
|
var folderName = event[1];
|
|
|
|
var color = allColors[owner + ":Calendar/" + folderName];
|
|
|
|
var fgColor = getContrastingTextColor(color);
|
|
|
|
|
|
|
|
if (printColors.style == "backgrounds") {
|
|
|
|
newEvent.writeAttribute("style", "background-color:" + color + "; color:" + fgColor + ";");
|
|
|
|
startCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
endCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
locationCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
calendarCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (printColors.style == "borders")
|
|
|
|
newEvent.writeAttribute("style", "border:2px solid " + color + ";");
|
|
|
|
}
|
|
|
|
if (event[7] == "") {
|
|
|
|
locationCell.hide();
|
|
|
|
locationCellValue.hide();
|
|
|
|
}
|
|
|
|
newEvent.appendChild(table);
|
|
|
|
|
|
|
|
return newEvent;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
function _parseTask(task) {
|
2014-08-26 19:36:42 +02:00
|
|
|
// new code
|
2016-01-13 17:29:41 +01:00
|
|
|
var end = _("Due Date");
|
|
|
|
var calendar = _("Calendar");
|
|
|
|
var location = _("Location");
|
2014-08-26 19:36:42 +02:00
|
|
|
|
|
|
|
var newTask = document.createElement("div");
|
|
|
|
var table = document.createElement("table");
|
|
|
|
Element.addClassName(newTask, "divTasksPreview");
|
|
|
|
|
|
|
|
var row = table.insertRow(0);
|
|
|
|
row.insertCell(0);
|
|
|
|
var title = row.insertCell(1);
|
|
|
|
row = table.insertRow(1);
|
|
|
|
var endCell = row.insertCell(0);
|
|
|
|
var endCellValue = row.insertCell(1);
|
|
|
|
row = table.insertRow(2);
|
|
|
|
var locationCell = row.insertCell(0);
|
|
|
|
var locationCellValue = row.insertCell(1);
|
|
|
|
row = table.insertRow(3);
|
|
|
|
var calendarCell = row.insertCell(0);
|
|
|
|
var calendarCellValue = row.insertCell(1);
|
|
|
|
|
|
|
|
title.innerHTML = task[4];
|
2014-08-25 19:46:35 +02:00
|
|
|
if (task[5] != null) {
|
2014-08-26 19:36:42 +02:00
|
|
|
endCell.innerHTML = end;
|
2014-08-25 19:46:35 +02:00
|
|
|
var endDate = new Date(task[5] *1000);
|
2014-08-26 19:36:42 +02:00
|
|
|
endCellValue.innerHTML = endDate.toLocaleString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
endCell.hide();
|
|
|
|
endCellValue.hide();
|
2014-08-25 19:46:35 +02:00
|
|
|
}
|
|
|
|
if (task[7] != "") {
|
2014-08-26 19:36:42 +02:00
|
|
|
locationCell.innerHTML = location;
|
|
|
|
locationCellValue.innerHTML = task[7];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
locationCell.hide();
|
|
|
|
locationCellValue.hide();
|
|
|
|
}
|
|
|
|
calendarCell.innerHTML = calendar;
|
|
|
|
calendarCellValue.innerHTML = task[2];
|
|
|
|
|
|
|
|
if (task[13] == "overdue")
|
|
|
|
Element.addClassName(title, "overdueTasks");
|
|
|
|
else if (task[13] == "completed")
|
|
|
|
Element.addClassName(title, "completedTasks");
|
|
|
|
else
|
|
|
|
Element.addClassName(title, "tasksTitle");
|
|
|
|
|
|
|
|
if (printColors.checked) {
|
|
|
|
var allColors = window.parentvar("UserSettings")['Calendar']['FolderColors'];
|
|
|
|
var owner = task[12];
|
|
|
|
var folderName = task[1];
|
|
|
|
var color = allColors[owner + ":Calendar/" + folderName];
|
|
|
|
var fgColor = getContrastingTextColor(color);
|
|
|
|
|
|
|
|
if (printColors.style == "backgrounds") {
|
|
|
|
newTask.writeAttribute("style", "background-color:" + color + "; color:" + fgColor + ";");
|
|
|
|
endCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
locationCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
calendarCell.writeAttribute("style", "color:" + fgColor + ";");
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (printColors.style == "borders")
|
|
|
|
newTask.writeAttribute("style", "border:2px solid " + color + ";");
|
2014-08-25 19:46:35 +02:00
|
|
|
}
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
newTask.appendChild(table);
|
|
|
|
|
|
|
|
return newTask;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
function _computeOffset(hoursCells) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var outOfDayCells = hoursCells.getElementsByClassName("outOfDay");
|
|
|
|
var count = 1;
|
|
|
|
var offset = [];
|
|
|
|
var buffer;
|
|
|
|
var j = 1;
|
|
|
|
for (var i = 0; i < outOfDayCells.length; i++) {
|
|
|
|
hourCell1 = parseInt(outOfDayCells[i].getAttribute("hour")) + 100;
|
|
|
|
hourCell2 = parseInt(outOfDayCells[j].getAttribute("hour"));
|
|
|
|
if (hourCell1 == hourCell2)
|
|
|
|
count += 1;
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
j ++;
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
offset.push(count * 4);
|
|
|
|
offset.push((hourCell2 / 100 * 4) - (count * 4));
|
|
|
|
|
|
|
|
return offset;
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
|
2014-04-26 00:04:24 +02:00
|
|
|
/************************************** Preview Navigation *****************************************/
|
|
|
|
|
|
|
|
function onCalendarGotoDay(node) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var day = node.getAttribute("date");
|
|
|
|
|
|
|
|
changeDateSelectorDisplay(day);
|
|
|
|
updateDisplayView({ "day": day });
|
|
|
|
refreshEvents();
|
|
|
|
|
|
|
|
return false;
|
2014-04-26 00:04:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function changeDateSelectorDisplay(day, keepCurrentDay) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var url = ApplicationBaseURL + "/dateselector";
|
|
|
|
if (day) {
|
|
|
|
if (day.length < 8)
|
|
|
|
day += "01";
|
|
|
|
url += "?day=" + day;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!keepCurrentDay)
|
|
|
|
currentDay = day;
|
|
|
|
|
|
|
|
var month = day.substr(0, 6);
|
|
|
|
if (cachedDateSelectors[month]) {
|
|
|
|
// log ("restoring cached selector for month: " + month);
|
|
|
|
setDateSelectorContent(cachedDateSelectors[month]);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// log ("loading selector for month: " + month);
|
|
|
|
if (document.dateSelectorAjaxRequest) {
|
|
|
|
document.dateSelectorAjaxRequest.aborted = true;
|
|
|
|
document.dateSelectorAjaxRequest.abort();
|
|
|
|
}
|
|
|
|
document.dateSelectorAjaxRequest
|
|
|
|
= triggerAjaxRequest(url,
|
|
|
|
dateSelectorCallback,
|
|
|
|
month);
|
|
|
|
}
|
2014-04-26 00:04:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function dateSelectorCallback(http) {
|
2014-08-25 19:46:35 +02:00
|
|
|
if (http.readyState == 4
|
|
|
|
&& http.status == 200) {
|
|
|
|
document.dateSelectorAjaxRequest = null;
|
|
|
|
var content = http.responseText;
|
|
|
|
setDateSelectorContent(content);
|
|
|
|
cachedDateSelectors[http.callbackData] = content;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
log ("dateSelectorCallback Ajax error");
|
|
|
|
|
|
|
|
return false;
|
2014-04-26 00:04:24 +02:00
|
|
|
}
|
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
/*********************** Input Field, listMenu, Checkboxes and Radio *********************************/
|
2014-04-22 23:47:29 +02:00
|
|
|
|
|
|
|
function onInputTitleChange(event){
|
2014-08-25 19:46:35 +02:00
|
|
|
var inputFieldTitle = $("inputFieldTitle").value;
|
|
|
|
if (inputFieldTitle)
|
|
|
|
document.getElementById("rightFrameTitle").innerHTML = inputFieldTitle + "<br />";
|
|
|
|
else
|
|
|
|
document.getElementById("rightFrameTitle").remove();
|
|
|
|
|
|
|
|
return false;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
function onPrintLayoutListChange() {
|
2014-08-25 19:46:35 +02:00
|
|
|
var parentView = window.parentvar("currentView");
|
|
|
|
var selectedLayout = $("printLayoutList").value;
|
|
|
|
document.getElementById("printHours").disabled = (selectedLayout == 0);
|
|
|
|
switch(selectedLayout) {
|
|
|
|
case "0": // List view
|
|
|
|
window.resizeTo(700,500);
|
|
|
|
currentPreview = parentView;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "1": // Day view
|
|
|
|
window.resizeTo(1010,500);
|
|
|
|
currentPreview = "dayview";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "2": // Multi-columns view
|
|
|
|
window.resizeTo(1010,500);
|
|
|
|
currentPreview = "multicolumndayview";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "3": // Week view
|
|
|
|
window.resizeTo(1010,500);
|
|
|
|
currentPreview = "weekview";
|
|
|
|
break;
|
|
|
|
|
|
|
|
/*case "4": // Month view
|
|
|
|
window.resizeTo(1010,500);
|
|
|
|
currentPreview = "monthview";
|
|
|
|
break;*/
|
|
|
|
}
|
|
|
|
refreshContent();
|
|
|
|
return false;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-06-25 23:39:48 +02:00
|
|
|
function adjustPreviewHeader() {
|
2014-08-25 19:46:35 +02:00
|
|
|
// 1 - Check if there is any allDay Events. If not reduce the space taken
|
|
|
|
var selectedLayout = $("printLayoutList").value;
|
|
|
|
if (selectedLayout != 0) {
|
|
|
|
var calendarHeader = $("calendarHeader");
|
|
|
|
var allDayDisplay = $("calendarHeader").getElementsByClassName("days");
|
|
|
|
var allDayEvents = $("calendarHeader").getElementsByClassName("eventInside");
|
|
|
|
var eventHeight = 22;
|
|
|
|
var headerHeight = 38;
|
|
|
|
if (selectedLayout == 1) { // Since there is only one column in day view
|
|
|
|
height = allDayEvents.length * eventHeight;
|
|
|
|
}
|
|
|
|
else { // Applies only on week view and multi-columns view
|
|
|
|
var nbEventsMax = 0
|
|
|
|
var eventClass = $("calendarHeader").getElementsByClassName("event");
|
|
|
|
for (var i = 0; i < allDayDisplay[0].childNodes.length; i++) {
|
|
|
|
if (allDayDisplay[0].childNodes[i].firstChild != null) {
|
|
|
|
count = allDayDisplay[0].childNodes[i].getElementsByClassName("event").length;
|
|
|
|
if (count > nbEventsMax) {
|
|
|
|
nbEventsMax = count;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
height = nbEventsMax * eventHeight;
|
|
|
|
if (selectedLayout == 2) {
|
|
|
|
headerHeight = 58;
|
|
|
|
adjustMultiColumnCalendarHeaderDIV();
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
calendarHeader.style.height = (height + headerHeight) + "px";
|
|
|
|
allDayDisplay[0].style.height = height + "px";
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function adjustMultiColumnCalendarHeaderDIV() {
|
2014-08-25 19:46:35 +02:00
|
|
|
var ch = $("calendarHeader");
|
|
|
|
var calendarLabels = ch.getElementsByClassName("calendarLabels")[0];
|
|
|
|
var calendarsToDisplay = calendarLabels.getElementsByClassName("calendarsToDisplay");
|
|
|
|
var dayLabels = ch.getElementsByClassName("dayLabels")[0].getElementsByClassName("dayColumn")[0];
|
|
|
|
var days = ch.getElementsByClassName("days")[0].getElementsByClassName("dayColumn");
|
|
|
|
var daysView = $("daysView").getElementsByClassName("dayColumn");
|
|
|
|
var nbCalendars = calendarsToDisplay.length;
|
|
|
|
|
|
|
|
if (nbCalendars > 0) {
|
|
|
|
var width = 100/nbCalendars;
|
|
|
|
var left = 0;
|
|
|
|
var position = "absolute";
|
|
|
|
for(var i=0; i < nbCalendars; i++){
|
|
|
|
calendarsToDisplay[i].setStyle({ width: width + '%', left: left + '%', position: position}).show();
|
|
|
|
days[i].setStyle({ width: width + '%', left: left + '%'}).show();
|
|
|
|
daysView[i].setStyle({ width: width + '%', left: left + '%'}).show();
|
|
|
|
left += width;
|
|
|
|
}
|
|
|
|
dayLabels.setStyle({ width: '100%'}).show();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$("calendarHeader").remove();
|
|
|
|
$("daysView").remove();
|
2016-01-13 17:29:41 +01:00
|
|
|
var htmlText = "<div class='alert-box notice'><span>" + _("notice") + "</span>"+_("Please go ahead and select calendars")+"</div>";
|
2014-08-25 19:46:35 +02:00
|
|
|
$("calendarContent").innerHTML = htmlText;
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function adjustFrames() {
|
2014-08-25 19:46:35 +02:00
|
|
|
var view = $("printLayoutList").value;
|
|
|
|
if (view == 0) {
|
|
|
|
var eventsCheckBox = $("printEvents");
|
|
|
|
var tasksCheckBox = $("printTasks");
|
|
|
|
onEventsCheck(eventsCheckBox);
|
|
|
|
onTasksCheck(tasksCheckBox);
|
|
|
|
document.getElementById("rightFrameTasks").style.pageBreakBefore = 'auto';
|
|
|
|
document.getElementById("rightFrameTasks").style.pageBreakInside = 'auto';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
document.getElementById("rightFrameEvents").style.width = '100%';
|
|
|
|
document.getElementById("rightFrameTasks").style.width = '100%';
|
|
|
|
document.getElementById("rightFrameTasks").style.pageBreakBefore = 'always';
|
|
|
|
document.getElementById("rightFrameTasks").style.pageBreakInside = 'avoid';
|
|
|
|
}
|
|
|
|
return false;
|
2014-05-13 16:36:26 +02:00
|
|
|
}
|
|
|
|
|
2014-04-17 23:33:30 +02:00
|
|
|
function onEventsCheck(checkBox) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var printOptions = document.getElementById("printHours");
|
|
|
|
var selectedLayout = $("printLayoutList").value;
|
|
|
|
if (!checkBox.checked || selectedLayout == 0)
|
|
|
|
printOptions.disabled = true;
|
|
|
|
else
|
|
|
|
printOptions.disabled = false;
|
|
|
|
|
|
|
|
var events = $("rightFrameEvents").childNodesWithTag("DIV");
|
|
|
|
if(checkBox.checked && events.length > 0){
|
|
|
|
$("rightFrameEvents").style.display = 'block';
|
|
|
|
if ($("printLayoutList").value == 0){
|
|
|
|
$("rightFrameTasks").style.width = '49.5%';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$("rightFrameEvents").style.display = 'none';
|
|
|
|
if ($("printLayoutList").value == 0){
|
|
|
|
$("rightFrameTasks").style.width = '100%';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function onTasksCheck(checkBox) {
|
2014-08-25 19:46:35 +02:00
|
|
|
var printOptions = document.getElementsByName("printOptions");
|
|
|
|
for (var i = 0; i < printOptions.length; i++)
|
|
|
|
printOptions[i].disabled = !checkBox.checked;
|
|
|
|
|
|
|
|
var tasks = $("rightFrameTasks").childNodesWithTag("DIV");
|
|
|
|
if(checkBox.checked && tasks.length > 0) {
|
|
|
|
$("rightFrameTasks").style.display = 'block';
|
|
|
|
if ($("printLayoutList").value == 0){
|
|
|
|
$("rightFrameEvents").style.width = '49.5%';
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
|
|
|
else {
|
2014-08-25 19:46:35 +02:00
|
|
|
$("rightFrameTasks").style.display = 'none';
|
|
|
|
if ($("printLayoutList").value == 0){
|
|
|
|
$("rightFrameEvents").style.width = '100%';
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function onPrintWorkingHoursCheck(checkBox) {
|
|
|
|
var isCheked = checkBox.checked;
|
|
|
|
var outOfDayCells = $$("DIV#daysView .outOfDay");
|
|
|
|
var hours = $$("DIV#daysView .hour");
|
|
|
|
var hoursOutOfDay = [];
|
|
|
|
for (var i = 0; i < outOfDayCells.length; i++) {
|
|
|
|
var buffer = outOfDayCells[i].getAttribute("hour").substr(0,1);
|
|
|
|
if (buffer != "0") {
|
|
|
|
buffer += outOfDayCells[i].getAttribute("hour").substr(1,1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
buffer = outOfDayCells[i].getAttribute("hour").substr(1,1);
|
|
|
|
}
|
|
|
|
if(isCheked) {
|
|
|
|
outOfDayCells[i].hide();
|
|
|
|
hours[buffer].hide();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
outOfDayCells[i].show();
|
|
|
|
hours[buffer].show();
|
|
|
|
}
|
2014-06-25 23:39:48 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
|
|
|
|
if (currentPreview == "multicolumndayview")
|
|
|
|
_drawCalendarEvents(null, null, eventsBlocks);
|
2014-06-25 23:39:48 +02:00
|
|
|
else {
|
2014-08-25 19:46:35 +02:00
|
|
|
eventsList = eventsBlocks[2];
|
2014-08-26 19:36:42 +02:00
|
|
|
if (currentPreview == "monthview") {
|
2014-08-25 19:46:35 +02:00
|
|
|
//_drawMonthCalendarEvents(eventsList, eventsBlocks[0], null);
|
2014-08-26 19:36:42 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
else
|
|
|
|
_drawCalendarEvents(eventsList, eventsBlocks[0], null);
|
2014-05-13 16:36:26 +02:00
|
|
|
}
|
2014-08-25 19:46:35 +02:00
|
|
|
return false;
|
2014-04-17 23:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-08-26 19:36:42 +02:00
|
|
|
function onPrintColorsCheck(checkBox) {
|
|
|
|
printColors.checked = (checkBox.checked ? true : false);
|
|
|
|
|
|
|
|
if (printColors.checked) {
|
|
|
|
$("printBackgroundColors").disabled = false;
|
|
|
|
$("printBorderColors").disabled = false;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$("printBackgroundColors").disabled = true;
|
|
|
|
$("printBorderColors").disabled = true;
|
|
|
|
}
|
|
|
|
refreshContent();
|
|
|
|
}
|
|
|
|
|
|
|
|
function onPrintColors(selectedRadioButton) {
|
|
|
|
printColors.style = selectedRadioButton.value;
|
|
|
|
refreshContent();
|
|
|
|
}
|
2014-05-09 01:14:39 +02:00
|
|
|
/*function onPrintDateCheck() {
|
2014-05-16 16:04:37 +02:00
|
|
|
var dateRange = document.getElementsByName("dateRange");
|
|
|
|
var customDate = document.getElementById("customDate");
|
|
|
|
for (var i = 0; i < dateRange.length; i++)
|
|
|
|
if (dateRange[i].children[1].children[0].disabled == customDate.checked)
|
|
|
|
dateRange[i].children[1].children[0].disabled = !customDate.checked;
|
|
|
|
}*/
|
2014-04-17 23:33:30 +02:00
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
function onPrintCompletedTasksCheck(checkBox) {
|
2014-08-25 19:46:35 +02:00
|
|
|
printCompletedTasks = (checkBox.checked ? 1 : 0);
|
|
|
|
refreshContent();
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function onPrintNoDueDateTasksCheck(checkBox) {
|
2014-08-26 19:36:42 +02:00
|
|
|
printNoDueDateTasks = (checkBox.checked ? true : false);
|
2014-08-25 19:46:35 +02:00
|
|
|
refreshContent();
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
2014-05-09 01:14:39 +02:00
|
|
|
/************** Date picker functions *************
|
2014-05-16 16:04:37 +02:00
|
|
|
this.initTimeWidgets = function (widgets) {
|
|
|
|
this.timeWidgets = widgets;
|
|
|
|
|
|
|
|
jQuery(widgets['start']['date']).closest('.date').datepicker({autoclose: true, weekStart: 0});
|
|
|
|
jQuery(widgets['end']['date']).closest('.date').datepicker({autoclose: true, weekStart: 0});
|
|
|
|
|
|
|
|
//jQuery(widgets['start']['date']).change(onAdjustTime);
|
|
|
|
|
|
|
|
jQuery(widgets['startingDate']['date']).closest('.date').datepicker({autoclose: true,
|
|
|
|
weekStart: 0,
|
|
|
|
endDate: lastDay,
|
|
|
|
startDate: firstDay,
|
|
|
|
setStartDate: lastDay,
|
|
|
|
startView: 2,
|
|
|
|
position: "below-shifted-left"});
|
|
|
|
}
|
|
|
|
|
|
|
|
this.onAdjustTime = function(event) {
|
|
|
|
onAdjustDueTime(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.onAdjustDueTime = function(event) {
|
|
|
|
var dateDelta = (window.getStartDate().valueOf() - window.getShadowStartDate().valueOf());
|
|
|
|
var newDueDate = new Date(window.getDueDate().valueOf() + dateDelta);
|
|
|
|
window.setDueDate(newDueDate);
|
|
|
|
|
|
|
|
window.timeWidgets['start']['date'].updateShadowValue();
|
|
|
|
}
|
|
|
|
/****************************************************/
|
2014-04-22 23:47:29 +02:00
|
|
|
|
2014-04-17 23:33:30 +02:00
|
|
|
/******************************* Buttons ***********************************************/
|
2014-04-14 16:29:23 +02:00
|
|
|
|
|
|
|
function onPrintCancelClick(event) {
|
2014-08-25 19:46:35 +02:00
|
|
|
this.blur();
|
|
|
|
onCloseButtonClick(event);
|
2014-04-14 16:29:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function onPrintClick(event) {
|
2014-08-25 19:46:35 +02:00
|
|
|
this.blur();
|
|
|
|
window.print();
|
2014-04-14 16:29:23 +02:00
|
|
|
}
|
2014-04-17 23:33:30 +02:00
|
|
|
/**************************** Initialization *******************************************/
|
2014-04-14 16:29:23 +02:00
|
|
|
|
|
|
|
function init() {
|
2014-08-25 19:46:35 +02:00
|
|
|
initializePrintSettings();
|
|
|
|
//initializeWhatToPrint();
|
|
|
|
//initializeOptions();
|
|
|
|
$("cancelButton").observe("click", onPrintCancelClick);
|
|
|
|
$("printButton").observe("click", onPrintClick);
|
|
|
|
|
|
|
|
/* TODO : Selected and custom date must be implemented and finished.
|
|
|
|
document.getElementById("eventsTasks").disabled=true;
|
|
|
|
document.getElementById("customDate").disabled=true;*/
|
|
|
|
|
|
|
|
onPrintLayoutListChange();
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function initializePrintSettings() {
|
2014-08-25 19:46:35 +02:00
|
|
|
$("inputFieldTitle").observe("change", onInputTitleChange);
|
|
|
|
$("printLayoutList").observe("change", onPrintLayoutListChange);
|
2014-04-22 23:47:29 +02:00
|
|
|
}
|
|
|
|
|
2014-05-09 01:14:39 +02:00
|
|
|
/*function initializeWhatToPrint() {
|
2014-05-16 16:04:37 +02:00
|
|
|
var widgets = {'start': {'date': $("startingDate")},
|
|
|
|
'end': {'date': $("endingDate")}};
|
|
|
|
initTimeWidgets(widgets);
|
|
|
|
onPrintDateCheck();
|
|
|
|
|
|
|
|
}*/
|
2014-04-14 16:29:23 +02:00
|
|
|
|
2014-04-22 23:47:29 +02:00
|
|
|
/*function initializeOptions() {
|
2014-06-25 23:39:48 +02:00
|
|
|
}*/
|
2014-04-22 23:47:29 +02:00
|
|
|
|
2014-04-14 16:29:23 +02:00
|
|
|
document.observe("dom:loaded", init);
|