diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index b3553e0ec..7783d5594 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -37,29 +37,29 @@ var eventsToCopy = []; // This should probably go in the generic.js function printView() { - var flag = false; - var calendarsList = $("calendarList").children; - for (var i = 0; i < calendarsList.length; i++) { - if (calendarsList[i].down("input").checked) { - flag = true; - break; + var flag = false; + var calendarsList = $("calendarList").children; + for (var i = 0; i < calendarsList.length; i++) { + if (calendarsList[i].down("input").checked) { + flag = true; + break; + } } - } - if (flag) - window.open("printView","","width=660,height=470"); - - else - showAlertDialog("Please select at least one calendar"); - - - return false; + if (flag) + window.open("printView","","width=660,height=470"); + + else + showAlertDialog("Please select at least one calendar"); + + + return false; } function newEvent(type, day, hour, duration) { var folder = null; - /* if (currentView == "multicolumndayview") { - Need to find where the click register is saved - }*/ + /* if (currentView == "multicolumndayview") { + Need to find where the click register is saved + }*/ if (UserDefaults['SOGoDefaultCalendar'] == 'personal') folder = $("calendarList").down("li"); else if (UserDefaults['SOGoDefaultCalendar'] == 'first') { @@ -89,16 +89,16 @@ function newEvent(type, day, hour, duration) { params.push("duration=" + duration); if (params.length > 0) urlstr += "?" + params.join("&"); - + window.open(urlstr, "", "width=490,height=470,resizable=0"); - + return false; /* stop following the link */ } function newEventFromWidget(sender, type) { var day = $(sender).readAttribute("day"); var hour = sender.readAttribute("hour"); - + newEvent.delay(0.1, type, day, hour); } @@ -109,7 +109,7 @@ function minutesToHM(minutes) { var mins = minutes % 60; if (mins < 10) mins = "0" + mins; - + return "" + hours + mins; } @@ -124,33 +124,33 @@ function newEventFromDragging(controller, day, coordinates) { } function updateEventFromDragging(controller, eventCells, eventDelta, calendarID) { - if (eventDelta.dayNumber || eventDelta.start || eventDelta.duration) { - if (calendarID != 0) - var params = ("calendarID=" + calendarID - + "&days=" + 0 - + "&start=" + eventDelta.start * 15 - + "&duration=" + eventDelta.duration * 15); - else - var params = ("calendarID=" + calendarID - + "&days=" + eventDelta.dayNumber - + "&start=" + eventDelta.start * 15 - + "&duration=" + eventDelta.duration * 15); - // log("eventCells: " + eventCells.length); - var eventCell = eventCells[0]; - // log(" time: " + eventCell.recurrenceTime); - // log(" exception: " + eventCell.isException); - - if (eventCell.recurrenceTime && !eventCell.isException) - _editRecurrenceDialog(eventCell, "confirmAdjustment", params); - else { - var urlstr = (ApplicationBaseURL + "/" + eventCell.calendar + "/" + eventCell.cname); - if (eventCell.recurrenceTime && (calendarID[0] == calendarID[1])) - urlstr += "/occurence" + eventCell.recurrenceTime; - urlstr += ("/adjust?" + params); - // log(" urlstr: " + urlstr); - triggerAjaxRequest(urlstr, updateEventFromDraggingCallback); + if (eventDelta.dayNumber || eventDelta.start || eventDelta.duration) { + if (calendarID != 0) + var params = ("calendarID=" + calendarID + + "&days=" + 0 + + "&start=" + eventDelta.start * 15 + + "&duration=" + eventDelta.duration * 15); + else + var params = ("calendarID=" + calendarID + + "&days=" + eventDelta.dayNumber + + "&start=" + eventDelta.start * 15 + + "&duration=" + eventDelta.duration * 15); + // log("eventCells: " + eventCells.length); + var eventCell = eventCells[0]; + // log(" time: " + eventCell.recurrenceTime); + // log(" exception: " + eventCell.isException); + + if (eventCell.recurrenceTime && !eventCell.isException) + _editRecurrenceDialog(eventCell, "confirmAdjustment", params); + else { + var urlstr = (ApplicationBaseURL + "/" + eventCell.calendar + "/" + eventCell.cname); + if (eventCell.recurrenceTime && (calendarID[0] == calendarID[1])) + urlstr += "/occurence" + eventCell.recurrenceTime; + urlstr += ("/adjust?" + params); + // log(" urlstr: " + urlstr); + triggerAjaxRequest(urlstr, updateEventFromDraggingCallback); + } } - } } function performEventAdjustment(folder, event, recurrence, params) { @@ -181,7 +181,7 @@ function getSelectedFolder() { folder = nodes[0]; else folder = list.down("li"); // personal calendar - + return folder; } @@ -226,12 +226,12 @@ function _editEventId(id, calendar, recurrence) { function editEvent() { if (listOfSelection) { var nodes = listOfSelection.getSelectedRows(); - + if (nodes.length == 0) { showAlertDialog(_("Please select an event or a task.")); return false; } - + for (var i = 0; i < nodes.length; i++) _editEventId.delay(0.1, nodes[i].cname, @@ -248,7 +248,7 @@ function editEvent() { } else { showAlertDialog(_("Please select an event or a task.")); } - + return false; /* stop following the link */ } @@ -273,7 +273,7 @@ function deleteEvent() { label = _("taskDeleteConfirmation"); else label = _("eventDeleteConfirmation"); - + if (nodes.length == 1 && nodes[0].recurrenceTime) { if (nodes[0].erasable) @@ -405,7 +405,7 @@ function deleteEvent() { } else showAlertDialog(_("Please select an event or a task.")); - + if (events.length > 0) { // Show confirmation dialog var p = new Element('p'); @@ -418,19 +418,19 @@ function deleteEvent() { p.appendChild(document.createTextNode(_("Would you like to continue?"))); showConfirmDialog(_("Warning"), p, deleteEventFromListConfirm, deleteEventCancel); } - + return false; } function deleteEventFromListConfirm() { - if (document.deleteEventAjaxRequest) { - document.deleteEventAjaxRequest.aborted = true; - document.deleteEventAjaxRequest.abort(); - } - - _batchDeleteEvents(); - refreshTasks(); - disposeDialog(); + if (document.deleteEventAjaxRequest) { + document.deleteEventAjaxRequest.aborted = true; + document.deleteEventAjaxRequest.abort(); + } + + _batchDeleteEvents(); + refreshTasks(); + disposeDialog(); } function deleteEventFromViewConfirm() { @@ -438,7 +438,7 @@ function deleteEventFromViewConfirm() { document.deleteEventAjaxRequest.aborted = true; document.deleteEventAjaxRequest.abort(); } - + selectedCalendarCell = null; _batchDeleteEvents(); disposeDialog(); @@ -509,12 +509,12 @@ function copyEventCallback(http) { function onMenuRawEvent(event) { if (selectedCalendarCell.length != 1) { - return; + return; } - + var calendar = selectedCalendarCell[0].calendar; var cname = selectedCalendarCell[0].cname; - + var url = ApplicationBaseURL + "/" + calendar + "/" + cname + "/raw"; openGenericWindow.delay(0.1, url); } @@ -523,13 +523,13 @@ function modifyEvent(sender, modification, parameters) { var currentLocation = '' + window.location; var arr = currentLocation.split("/"); arr[arr.length-1] = modification; - + document.modifyEventAjaxRequest = triggerAjaxRequest(arr.join("/"), modifyEventCallback, modification, parameters, { "Content-type": "application/x-www-form-urlencoded" }); - + return false; } @@ -537,7 +537,7 @@ function closeInvitationWindow() { var closeDiv = document.createElement("div"); document.body.appendChild(closeDiv); closeDiv.addClassName("javascriptPopupBackground"); - + var closePseudoWin = document.createElement("div"); document.body.appendChild(closePseudoWin); closePseudoWin.addClassName("javascriptMessagePseudoTopWindow"); @@ -545,7 +545,7 @@ function closeInvitationWindow() { closePseudoWin.style.left = "0px;"; closePseudoWin.style.right = "0px;"; closePseudoWin.appendChild(document.createTextNode(_("closeThisWindowMessage"))); - + var calLink = document.createElement("a"); closePseudoWin.appendChild(calLink); calLink.href = ApplicationBaseURL; @@ -623,7 +623,7 @@ function _deleteCalendarEventBlocks(calendar, cname, occurenceTime) { } } } - + resizeCalendarHeaderDIV(); } @@ -637,7 +637,7 @@ function _deleteEventFromTables(calendar, cname, occurenceTime) { if (occurences) { var occurence = occurences.first(); var ownerIsOrganizer = occurence[19]; - + // Delete event from events list var table = $("eventsList"); var rows = table.tBodies[0].rows; @@ -666,7 +666,7 @@ function _deleteEventFromTables(calendar, cname, occurenceTime) { } } } - + // Delete task from tasks list var row = $(calendar + basename); if (row) { @@ -681,7 +681,7 @@ function _deleteCalendarEventCache(calendar, cname, occurenceTime) { if (occurences) ownerIsOrganizer = occurences[0][19]; } - + for (var otherCalendar in calendarEvents) { if (calendarEvents[otherCalendar]) { var occurences = calendarEvents[otherCalendar][cname]; @@ -738,7 +738,7 @@ function deleteEventCallback(http) { function getEventById(cname, owner) { var event = null; - + if (calendarEvents) { if (!owner) owner = UserLogin; @@ -746,7 +746,7 @@ function getEventById(cname, owner) { if (userEvents) event = userEvents[cname]; } - + return event; } @@ -766,7 +766,7 @@ function _editRecurrenceDialog(eventCell, method, params) { function onViewEvent(event) { if (event.detail == 2) return; var url = ApplicationBaseURL + "/" + this.calendar + "/" + this.cname; - + if (typeof this.recurrenceTime != "undefined") url += "/occurence" + this.recurrenceTime; url += "/view"; @@ -792,11 +792,11 @@ function onViewEventCallback(http) { var view; var left; var top = cellPosition[1] - 5; - + if (currentView != "monthview") { view = $("daysView"); var viewPosition = view.cumulativeOffset(); - + if (parseInt(data["isAllDay"]) == 0) { top -= view.scrollTop; if (viewPosition[1] > top + 2) { @@ -810,7 +810,7 @@ function onViewEventCallback(http) { else { top -= cell.up("DIV.day").scrollTop; } - + left = cellPosition[0] + cellDimensions["width"] + 4; if (left + divDimensions["width"] > window.width()) { left = cellPosition[0] - divDimensions["width"]; @@ -821,10 +821,10 @@ function onViewEventCallback(http) { div.removeClassName("right"); div.addClassName("left"); } - + // Put the event's data in the DIV div.down("h1").update(data["summary"].replace(/\r?\n/g, "
")); - + var paras = div.getElementsByTagName("p"); var para = $(paras[0]); if (parseInt(data["isAllDay"]) == 0) { @@ -832,35 +832,35 @@ function onViewEventCallback(http) { para.show(); } else para.hide(); - + para = $(paras[1]); if (data["calendar"].length) { para.down("SPAN", 1).update(data["calendar"]); para.show(); } else para.hide(); - + para = $(paras[2]); if (data["location"].length) { para.down("SPAN", 1).update(data["location"]); para.show(); } else para.hide(); - - para = $(paras[3]); + + para = $(paras[3]); if (data["created_by"].length) { - para.down("SPAN", 1).update(data["created_by"]); + para.down("SPAN", 1).update(data["created_by"]); para.show(); } else para.hide(); - + para = $(paras[4]); if (data["description"].length) { para.update(data["description"].replace(/\r?\n/g, "
")); para.show(); } else para.hide(); - + div.setStyle({ left: left + "px", top: top + "px" }); div.show(); configureLinks(div); @@ -878,7 +878,7 @@ function editDoubleClickedEvent(event) { _editRecurrenceDialog(this, "confirmEditing"); else _editEventId(this.cname, this.calendar); - + Event.stop(event); } @@ -893,12 +893,12 @@ function performEventDeletion(folder, event, recurrence) { var occurenceTime = recurrence.substring(9); var nodes = _eventBlocksMatching(folder, event, occurenceTime); var urlstr = ApplicationBaseURL + "/" + folder + "/" + event + "/" + recurrence + "/delete"; - + if (nodes) document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr, performDeleteEventCallback, { nodes: nodes, - occurence: occurenceTime }); + occurence: occurenceTime }); } else { // All recurrences @@ -920,7 +920,7 @@ function performDeleteEventCallback(http) { var nodes = http.callbackData.nodes; var cname = nodes[0].cname; var calendar = nodes[0].calendar; - + _deleteCalendarEventBlocks(calendar, cname, occurenceTime); _deleteEventFromTables(calendar, cname, occurenceTime); _deleteCalendarEventCache(calendar, cname, occurenceTime); @@ -933,44 +933,44 @@ function onDaySelect(node) { var day = node.getAttribute('day'); var needRefresh = (eventListFilter == 'view_selectedday' && day != currentDay); - + var td = $(node).getParentWithTagName("td"); // var table = $(td).getParentWithTagName("table"); // log ("table.selected: " + table.selected); - + if (document.selectedDate) document.selectedDate.deselect(); - + td.selectElement(); document.selectedDate = td; - + changeCalendarDisplay( { "day": day } ); currentDay = day; selectedDayDate = day; if (needRefresh) refreshEvents(); - + return false; } function onDateSelectorGotoMonth(event) { var day = this.getAttribute("date"); - + changeDateSelectorDisplay(day, true); - + Event.stop(event); } function onCalendarGotoDay(node) { var day = node.getAttribute("date"); var needRefresh = (eventListFilter == 'view_selectedday' && day != currentDay); - + changeDateSelectorDisplay(day); changeCalendarDisplay( { "day": day } ); if (needRefresh) refreshEvents(); - + return false; } @@ -979,17 +979,17 @@ function gotoToday() { selectedDayDate = todayDate.getDayString(); changeDateSelectorDisplay(''); changeCalendarDisplay(); - + return false; } function setDateSelectorContent(content) { var div = $("dateSelectorView"); - + div.update(content); if (currentDay.length > 0) restoreCurrentDaySelection(div); - + initDateSelectorEvents(); } @@ -1012,12 +1012,12 @@ function eventsListCallback(http) { document.eventsListAjaxRequest = null; var table = $("eventsList"); lastClickedRow = -1; // from generic.js - + var rows = table.select("TBODY TR"); rows.each(function(e) { - e.remove(); - }); - + e.remove(); + }); + if (http.responseText.length > 0) { var data = http.responseText.evalJSON(true); for (var i = 0; i < data.length; i++) { @@ -1047,7 +1047,7 @@ function eventsListCallback(http) { if (data[i][3] != null) // Status is defined -- event is readable row.observe("dblclick", editDoubleClickedEvent); - + var td = createElement("td"); row.appendChild(td); td.observe("mousedown", listRowMouseDownHandler, true); @@ -1057,44 +1057,44 @@ function eventsListCallback(http) { var span = createElement("span"); td.appendChild(span); span.update(data[i][4]); // title - + td = createElement("td"); row.appendChild(td); td.observe("mousedown", listRowMouseDownHandler, true); td.update(data[i][21]); // start date - + td = createElement("td"); row.appendChild(td); td.observe("mousedown", listRowMouseDownHandler, true); td.update(data[i][22]); // end date - + td = createElement("td"); row.appendChild(td); td.observe("mousedown", listRowMouseDownHandler, true); if (data[i][7]) td.update(data[i][7]); // location - + td = createElement("td"); row.appendChild(td); td.observe("mousedown", listRowMouseDownHandler, true); if (data[i][10]) - td.update(data[i][10]); // category - + td.update(data[i][10]); // category + td = createElement("td"); row.appendChild(td); td.observe("mousedown", listRowMouseDownHandler, true); td.update(data[i][2]); // calendar } - + if (sorting["event-header"] && sorting["event-header"].length > 0) { var sortHeader = $(sorting["event-header"]); - + if (sortHeader) { var sortImages = $(table.tHead).select(".sortImage"); $(sortImages).each(function(item) { - item.remove(); - }); - + item.remove(); + }); + var sortImage = createElement("img", "messageSortImage", "sortImage"); sortHeader.insertBefore(sortImage, sortHeader.firstChild); if (sorting["event-ascending"]) @@ -1116,6 +1116,7 @@ function activeTasksCallback(http) { document.activeTasksAjaxRequest = null; var data = http.responseText.evalJSON(true); var list = $("calendarList"); +<<<<<<< HEAD var items = list.childNodesWithTag("li"); for (var i = 0; i < items.length; i++) { @@ -1134,6 +1135,20 @@ function activeTasksCallback(http) { } if (number > 0) { activeTasks.innerHTML = number; +======= + + var items = list.childNodesWithTag("li"); + for (var i = 0; i < items.length; i++) { + var id = items[i].getAttribute("id").substr(1); + var number = data[id]; + var input = items[i].childNodesWithTag("input")[0]; + var activeTasks = items[i].childNodesWithTag("span")[0]; + if (number == "0") { + activeTasks.innerHTML = ""; + } + else { + activeTasks.innerHTML = "(" + number + ")"; +>>>>>>> added event7.png and adjust javascript indentation } } } @@ -1141,141 +1156,141 @@ function activeTasksCallback(http) { } function tasksListCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - var div = $("tasksListView"); - document.tasksListAjaxRequest = null; - var table = $("tasksList"); - lastClickedRow = -1; // from generic.js - - var rows = table.select("TBODY TR"); - rows.each(function(e) { - e.remove(); - }); - - if (http.responseText.length > 0) { - var data = http.responseText.evalJSON(true); - - // [0] Task ID - // [1] Calendar ID - // [2] Calendar name - // [3] Status (0, 1 = completed, 2) - // [4] Title - // [5] Due date (int) - // [6] Classification (0 = public, 1, = private, 2 = confidential) - // [7] Location - // [8] Category - // [9] Editable? - // [10] Erasable? - // [11] Priority (0, 1 = important, 9 = low) - // [12] Status CSS class (duelater, completed, etc) - // (13) Due date (formatted) - - for (var i = 0; i < data.length; i++) { - var row = createElement("tr"); - table.tBodies[0].appendChild(row); + if (http.readyState == 4 + && http.status == 200) { + var div = $("tasksListView"); + document.tasksListAjaxRequest = null; + var table = $("tasksList"); + lastClickedRow = -1; // from generic.js - row.on("dblclick", editDoubleClickedEvent); + var rows = table.select("TBODY TR"); + rows.each(function(e) { + e.remove(); + }); - var calendar = escape(data[i][1]); - var cname = escape(data[i][0]); - row.setAttribute("id", calendar + "-" + cname); - //listItem.addClassName(data[i][5]); // Classification - row.addClassName(data[i][12]); // status - row.calendar = calendar; - row.cname = cname; - row.erasable = data[i][10] || IsSuperUser; - if (parseInt(data[i][11]) == 1) { - row.addClassName("important"); + if (http.responseText.length > 0) { + var data = http.responseText.evalJSON(true); + + // [0] Task ID + // [1] Calendar ID + // [2] Calendar name + // [3] Status (0, 1 = completed, 2) + // [4] Title + // [5] Due date (int) + // [6] Classification (0 = public, 1, = private, 2 = confidential) + // [7] Location + // [8] Category + // [9] Editable? + // [10] Erasable? + // [11] Priority (0, 1 = important, 9 = low) + // [12] Status CSS class (duelater, completed, etc) + // (13) Due date (formatted) + + for (var i = 0; i < data.length; i++) { + var row = createElement("tr"); + table.tBodies[0].appendChild(row); + + row.on("dblclick", editDoubleClickedEvent); + + var calendar = escape(data[i][1]); + var cname = escape(data[i][0]); + row.setAttribute("id", calendar + "-" + cname); + //listItem.addClassName(data[i][5]); // Classification + row.addClassName(data[i][12]); // status + row.calendar = calendar; + row.cname = cname; + row.erasable = data[i][10] || IsSuperUser; + if (parseInt(data[i][11]) == 1) { + row.addClassName("important"); + } + else if (parseInt(data[i][11]) == 9) { + row.addClassName("low"); + } + + var cell = createElement("td"); + row.appendChild(cell); + var input = createElement("input"); + input.setAttribute("type", "checkbox"); + cell.appendChild(input); + input.setAttribute("value", "1"); + if (parseInt(data[i][9]) == 0) // editable? + input.setAttribute("disabled", true); + input.addClassName("checkBox"); + if (parseInt(data[i][3]) == 1) // completed? + input.setAttribute("checked", "checked"); + input.observe("click", updateTaskStatus, true); + + cell = createElement("td"); + row.appendChild(cell); + if (data[i][11] != null) { + cell.update(_("prio_" + data[i][11])); // Priority + } + else { + cell.update(""); // Priority + } + + cell = createElement("td"); + row.appendChild(cell); + var colorDiv = createElement("div", false, "colorBox calendarFolder" + calendar); + cell.appendChild(colorDiv); + colorDiv.update(' '); + var t = new Element ("span"); + cell.appendChild(t); + t.update(data[i][4]); // title + + cell = createElement("td"); + row.appendChild(cell); + if (data[i][13]) + cell.update(data[i][13]); // end date + + cell = createElement("td"); + row.appendChild(cell); + cell.update(data[i][7]); // location + + cell = createElement("td"); + row.appendChild(cell); + cell.update(data[i][8]); // category + + cell = createElement("td"); + row.appendChild(cell); + cell.update(data[i][2]); // calendar name + } + + table.scrollTop = table.previousScroll; + + if (sorting["task-attribute"] && sorting["task-attribute"].length > 0) { + var sortHeader = $(sorting["task-header"]); + + if (sortHeader) { + var sortImages = $(table.tHead).select(".sortImage"); + $(sortImages).each(function(item) { + item.remove(); + }); + + var sortImage = createElement("img", "messageSortImage", "sortImage"); + sortHeader.insertBefore(sortImage, sortHeader.firstChild); + if (sorting["task-ascending"]) + sortImage.src = ResourcesURL + "/arrow-up.png"; + else + sortImage.src = ResourcesURL + "/arrow-down.png"; + } + } + if (http.callbackData) { + var selectedNodesId = http.callbackData; + for (var i = 0; i < selectedNodesId.length; i++) { + // log(selectedNodesId[i] + " (" + i + ") is selected"); + var node = $(selectedNodesId[i]); + if (node) { + node.selectElement(); + } + } + } + else + log ("tasksListCallback: no data"); } - else if (parseInt(data[i][11]) == 9) { - row.addClassName("low"); - } - - var cell = createElement("td"); - row.appendChild(cell); - var input = createElement("input"); - input.setAttribute("type", "checkbox"); - cell.appendChild(input); - input.setAttribute("value", "1"); - if (parseInt(data[i][9]) == 0) // editable? - input.setAttribute("disabled", true); - input.addClassName("checkBox"); - if (parseInt(data[i][3]) == 1) // completed? - input.setAttribute("checked", "checked"); - input.observe("click", updateTaskStatus, true); - - cell = createElement("td"); - row.appendChild(cell); - if (data[i][11] != null) { - cell.update(_("prio_" + data[i][11])); // Priority - } - else { - cell.update(""); // Priority - } - - cell = createElement("td"); - row.appendChild(cell); - var colorDiv = createElement("div", false, "colorBox calendarFolder" + calendar); - cell.appendChild(colorDiv); - colorDiv.update(' '); - var t = new Element ("span"); - cell.appendChild(t); - t.update(data[i][4]); // title - - cell = createElement("td"); - row.appendChild(cell); - if (data[i][13]) - cell.update(data[i][13]); // end date - - cell = createElement("td"); - row.appendChild(cell); - cell.update(data[i][7]); // location - - cell = createElement("td"); - row.appendChild(cell); - cell.update(data[i][8]); // category - - cell = createElement("td"); - row.appendChild(cell); - cell.update(data[i][2]); // calendar name - } - - table.scrollTop = table.previousScroll; - - if (sorting["task-attribute"] && sorting["task-attribute"].length > 0) { - var sortHeader = $(sorting["task-header"]); - - if (sortHeader) { - var sortImages = $(table.tHead).select(".sortImage"); - $(sortImages).each(function(item) { - item.remove(); - }); - - var sortImage = createElement("img", "messageSortImage", "sortImage"); - sortHeader.insertBefore(sortImage, sortHeader.firstChild); - if (sorting["task-ascending"]) - sortImage.src = ResourcesURL + "/arrow-up.png"; - else - sortImage.src = ResourcesURL + "/arrow-down.png"; - } - } - if (http.callbackData) { - var selectedNodesId = http.callbackData; - for (var i = 0; i < selectedNodesId.length; i++) { - // log(selectedNodesId[i] + " (" + i + ") is selected"); - var node = $(selectedNodesId[i]); - if (node) { - node.selectElement(); - } - } - } - else - log ("tasksListCallback: no data"); } - } - else - log ("tasksListCallback Ajax error"); + else + log ("tasksListCallback Ajax error"); } /* in dateselector */ @@ -1313,10 +1328,10 @@ function changeDateSelectorDisplay(day, keepCurrentDay) { 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); @@ -1329,9 +1344,9 @@ function changeDateSelectorDisplay(day, keepCurrentDay) { document.dateSelectorAjaxRequest.abort(); } document.dateSelectorAjaxRequest - = triggerAjaxRequest(url, - dateSelectorCallback, - month); + = triggerAjaxRequest(url, + dateSelectorCallback, + month); } } @@ -1344,20 +1359,20 @@ function changeCalendarDisplay(data, newView) { day = data['day']; scrollEvent = data['scrollEvent']; } - + 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) { @@ -1366,15 +1381,15 @@ function changeCalendarDisplay(data, newView) { document.selectedDate = selectedCell; } else document.selectedDate = null; - + // Scroll to event if (scrollEvent) { preventAutoScroll = false; scrollDayView(scrollEvent); } - + setSelectedDayDate(day); - + return false; } else if (day.length == 6) { @@ -1383,26 +1398,26 @@ function changeCalendarDisplay(data, newView) { } url += "?day=" + day; } - + selectedCalendarCell = null; - + if (document.dayDisplayAjaxRequest) { document.dayDisplayAjaxRequest.aborted = true; document.dayDisplayAjaxRequest.abort(); } document.dayDisplayAjaxRequest - = triggerAjaxRequest(url, calendarDisplayCallback, - { "view": newView, - "day": day, - "scrollEvent": scrollEvent }); - + = triggerAjaxRequest(url, calendarDisplayCallback, + { "view": newView, + "day": day, + "scrollEvent": scrollEvent }); + return false; } function _ensureView(view) { if (currentView != view) changeCalendarDisplay(null, view); - + return false; } @@ -1432,7 +1447,7 @@ function onCalendarReload() { refreshEventsAndTasks(); changeCalendarDisplay(); } - + return false; } @@ -1442,7 +1457,7 @@ function reloadWebCalendars() { if (UserSettings['Calendar'] && UserSettings['Calendar']['WebCalendars']) { var webCalendars = UserSettings['Calendar']['WebCalendars']; - + var folders = $("calendarList"); var calendarNodes = folders.childNodesWithTag("li"); for (var i = 0; i < calendarNodes.length; i++) { @@ -1456,19 +1471,19 @@ function reloadWebCalendars() { } } } - + return (remaining.length > 0); } var calendarReloadErrors = { "invalid-calendar-content": - _("the returned content was not valid calendar" - + " data"), - "http-error": _("an unknown http error occurred" - + " during the load operation"), - "bad-url": _("the url in use is invalid or the" - + " host is currently unreachable"), - "invalid-url": _("the url being used is invalid" - + " or not handled") }; + _("the returned content was not valid calendar" + + " data"), + "http-error": _("an unknown http error occurred" + + " during the load operation"), + "bad-url": _("the url in use is invalid or the" + + " host is currently unreachable"), + "invalid-url": _("the url being used is invalid" + + " or not handled") }; function reloadWebCalendar(folderID, refreshOperations) { var url = URLForFolderID(folderID) + "/reload"; @@ -1513,7 +1528,7 @@ function reloadWebCalendarCallback(http) { } showAlertDialog (errorMessage); } - + if (requireAuth) { reauthenticateWebCalendar(cbData["folderID"], cbData); } @@ -1601,12 +1616,12 @@ function scrollDayView(scrollEvent) { var eventBlocks = selectCalendarEvent(eventRow.calendar, eventRow.cname, eventRow.recurrenceTime); if (eventBlocks) { var firstEvent = eventBlocks.first(); - + if (currentView == "monthview") contentView = firstEvent.up("DIV.day"); else contentView = $("daysView"); - + // Don't scroll to an all-day event if (typeof eventRow.hour != "undefined") { var top = firstEvent.cumulativeOffset()[1] - contentView.scrollTop; @@ -1640,10 +1655,10 @@ function refreshCalendarEvents(scrollEvent) { var todayDate = new Date(); var sd; var ed; - + if (!currentDay) currentDay = todayDate.getDayString(); - + if (currentView == "dayview" || currentView == "multicolumndayview") { sd = currentDay; ed = sd; @@ -1663,7 +1678,7 @@ function refreshCalendarEvents(scrollEvent) { monthDate = currentDay.asDate(); monthDate.setDate(1); sd = monthDate.beginOfWeek().getDayString(); - + var lastMonthDate = new Date(); lastMonthDate.setTime(monthDate.getTime()); lastMonthDate.setMonth(monthDate.getMonth() + 1); @@ -1677,57 +1692,57 @@ function refreshCalendarEvents(scrollEvent) { var url = (ApplicationBaseURL + "/eventsblocks?sd=" + sd + "&ed=" + ed + "&view=" + currentView); document.refreshCalendarEventsAjaxRequest - = triggerAjaxRequest(url, refreshCalendarEventsCallback, - {"startDate": sd, "endDate": ed, - "scrollEvent": scrollEvent}); + = triggerAjaxRequest(url, refreshCalendarEventsCallback, + {"startDate": sd, "endDate": ed, + "scrollEvent": scrollEvent}); } function _parseEvents(list, calendars) { var newCalendarEvents = {}; - + if (currentView == "multicolumndayview") { - var list; - for (var i = 0; i < calendars.length; i++) { - list = calendars[i][0]; - for (var j = 0; j < list.length; j++) { - var event = list[j]; - var cname = event[0]; - var calendar = event[1]; - // log("parsed cname: " + cname + "; calendar: " + calendar); - var calendarDict = newCalendarEvents[calendar]; - if (!calendarDict) { - calendarDict = {}; - newCalendarEvents[calendar] = calendarDict; - } - var occurences = calendarDict[cname]; - if (!occurences) { - occurences = []; - calendarDict[cname] = occurences; - } - event.blocks = []; - occurences.push(event); + var list; + for (var i = 0; i < calendars.length; i++) { + list = calendars[i][0]; + for (var j = 0; j < list.length; j++) { + var event = list[j]; + var cname = event[0]; + var calendar = event[1]; + // log("parsed cname: " + cname + "; calendar: " + calendar); + var calendarDict = newCalendarEvents[calendar]; + if (!calendarDict) { + calendarDict = {}; + newCalendarEvents[calendar] = calendarDict; + } + var occurences = calendarDict[cname]; + if (!occurences) { + occurences = []; + calendarDict[cname] = occurences; + } + event.blocks = []; + occurences.push(event); + } } - } } else { - for (var i = 0; i < list.length; i++) { - var event = list[i]; - var cname = event[0]; - var calendar = event[1]; - // log("parsed cname: " + cname + "; calendar: " + calendar); - var calendarDict = newCalendarEvents[calendar]; - if (!calendarDict) { - calendarDict = {}; - newCalendarEvents[calendar] = calendarDict; + for (var i = 0; i < list.length; i++) { + var event = list[i]; + var cname = event[0]; + var calendar = event[1]; + // log("parsed cname: " + cname + "; calendar: " + calendar); + var calendarDict = newCalendarEvents[calendar]; + if (!calendarDict) { + calendarDict = {}; + newCalendarEvents[calendar] = calendarDict; + } + var occurences = calendarDict[cname]; + if (!occurences) { + occurences = []; + calendarDict[cname] = occurences; + } + event.blocks = []; + occurences.push(event); } - var occurences = calendarDict[cname]; - if (!occurences) { - occurences = []; - calendarDict[cname] = occurences; - } - event.blocks = []; - occurences.push(event); - } } return newCalendarEvents; @@ -1735,11 +1750,11 @@ function _parseEvents(list, calendars) { function _setupEventsDragAndDrop(events) { /* We setup the drag controllers for all the events. - Since the same events may be listed more than once per calendar - (repeating events), we must keep account of those that have already - been setup. */ + Since the same events may be listed more than once per calendar + (repeating events), we must keep account of those that have already + been setup. */ var setupFlags = {}; - + for (var i = 0; i < events.length; i++) { var cname = events[i][0]; var calendar = events[i][1]; @@ -1808,19 +1823,19 @@ function resetCategoriesStyles() { while (categoriesStyleSheet.firstChild) categoriesStyleSheet.removeChild(categoriesStyleSheet.firstChild); } - + if (UserDefaults['SOGoCalendarCategoriesColors']) { // Update stylesheet with new categories colors var selectors = []; var rules = []; categoriesStyles.keys().each(function(category) { - var color = UserDefaults['SOGoCalendarCategoriesColors'][category]; - if (color) { - rules[rules.length] = '{ border-right: 8px solid ' + color + '; }'; - selectors[selectors.length] = 'DIV.' + categoriesStyles.get(category); - } - }); - + var color = UserDefaults['SOGoCalendarCategoriesColors'][category]; + if (color) { + rules[rules.length] = '{ border-right: 8px solid ' + color + '; }'; + selectors[selectors.length] = 'DIV.' + categoriesStyles.get(category); + } + }); + if (selectors.length > 0) { if (categoriesStyleSheet.styleSheet && categoriesStyleSheet.styleSheet.addRule) { // IE @@ -1860,7 +1875,7 @@ function newBaseEventDIV(eventRep, event, eventText) { // 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]; @@ -1870,10 +1885,10 @@ function newBaseEventDIV(eventRep, event, eventText) { 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 (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]; @@ -1882,31 +1897,31 @@ function newBaseEventDIV(eventRep, event, eventText) { eventCell.erasable = event[19] || IsSuperUser; eventCell.ownerIsOrganizer = event[20]; eventCell.addClassName("event"); -// if (event[14] > 0) -// eventCell.addClassName("alarm"); - + // 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, "
")); textDiv.appendChild(iconSpan); - + // Add alarm and classification icons if (event[9] == 1) createElement("img", null, null, {src: ResourcesURL + "/private.png"}, null, iconSpan); @@ -1914,7 +1929,7 @@ function newBaseEventDIV(eventRep, event, eventText) { 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); @@ -1925,7 +1940,7 @@ function newBaseEventDIV(eventRep, event, eventText) { innerDiv.addClassName(categoryStyle); } eventCell.observe("contextmenu", onMenuCurrentView); - + if (event[3] == null) { // Status field is not defined -- user can't read event eventCell.observe("selectstart", listRowMouseDownHandler); @@ -1939,9 +1954,9 @@ function newBaseEventDIV(eventRep, event, eventText) { eventCell.observe("dblclick", editDoubleClickedEvent); eventCell.observe("click", onViewEvent); } - + event.blocks.push(eventCell); - + return eventCell; } @@ -1950,38 +1965,38 @@ function _drawCalendarAllDayEvents(events, eventsData, columnsData) { var subdivs = headerView.childNodesWithTag("div"); if (currentView == "multicolumndayview"){ - var days = subdivs[2].childNodesWithTag("div"); + 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]); - parentDiv.appendChild(eventCell); - } - } + 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]); + parentDiv.appendChild(eventCell); + } + } } 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); + 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); + } } - } } resizeCalendarHeaderDIV(); } /* When the list of all day events overflows, we resize it in order to contain - at least 6 or 7 items. Afterwards we restore the regular scrollbar - mechanism. */ + at least 6 or 7 items. Afterwards we restore the regular scrollbar + mechanism. */ function resizeCalendarHeaderDIV() { var headerView = $("calendarHeader"); var daysView = $("daysView"); @@ -1990,14 +2005,14 @@ function resizeCalendarHeaderDIV() { var headerViewBaseHeight = 90; var daysViewBaseTop = 95; /* /consts */ - + var maxEventPerDay = 0; - + var subdivs = headerView.childNodesWithTag("div"); if (currentView == "multicolumndayview") - var days = subdivs[2].childNodesWithTag("div"); + var days = subdivs[2].childNodesWithTag("div"); else - var days = subdivs[1].childNodesWithTag("div"); + var days = subdivs[1].childNodesWithTag("div"); for (var i = 0; i < days.length; i++) { var parentDiv = days[i]; var divs = parentDiv.childNodesWithTag("div"); @@ -2006,17 +2021,17 @@ function resizeCalendarHeaderDIV() { } } if (maxEventPerDay > 0 && maxEventPerDay <= 4) { - var moveDaysView = (maxEventPerDay * 19.5); - var expendHeaderHeight = ((maxEventPerDay - 1) * 20); - var deltaMax = 60; - if (expendHeaderHeight > deltaMax){ - expendHeaderHeight = deltaMax; - moveDaysView = deltaMax; - } - daysView.style.top = String(daysViewBaseTop + moveDaysView) + "px"; - headerView.style.height = String(headerViewBaseHeight + expendHeaderHeight) + "px"; + var moveDaysView = (maxEventPerDay * 19.5); + var expendHeaderHeight = ((maxEventPerDay - 1) * 20); + var deltaMax = 60; + if (expendHeaderHeight > deltaMax){ + expendHeaderHeight = deltaMax; + moveDaysView = deltaMax; + } + daysView.style.top = String(daysViewBaseTop + moveDaysView) + "px"; + headerView.style.height = String(headerViewBaseHeight + expendHeaderHeight) + "px"; } - + else if (maxEventPerDay > 4) { var deltaMax = 60; daysView.style.top = String(daysViewBaseTop + deltaMax + 19) + "px"; @@ -2025,11 +2040,11 @@ function resizeCalendarHeaderDIV() { else { var headerDays = document.getElementsByClassName("days")[0]; headerDays.observe("mouseenter", function(event){ - headerDays.style.zIndex = "1"; - }); + headerDays.style.zIndex = "1"; + }); headerDays.observe("mouseleave", function(event){ - headerDays.style.zIndex = "0"; - }); + headerDays.style.zIndex = "0"; + }); daysView.style.top = null; headerView.style.height = null; } @@ -2040,7 +2055,7 @@ function newAllDayEventDIV(eventRep, event) { // cname, calendar, starts, lasts, // startHour, endHour, title) { var eventCell = newBaseEventDIV(eventRep, event, event[4]); - + return eventCell; } @@ -2052,59 +2067,59 @@ function _drawCalendarEvents(events, eventsData, columnsData) { if (subdiv.hasClassName("days")) { var days = subdiv.childNodesWithTag("div"); if (currentView == "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]; - for (var k = 0; k < calendarEvents.length; k++) { - var eventRep = calendarEvents[k]; - var nbr = eventRep.nbr; - var eventCell = newEventDIV(eventRep, calendarEventsData[nbr]); - parentDiv.appendChild(eventCell); - } - } + 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]; + for (var k = 0; k < calendarEvents.length; k++) { + var eventRep = calendarEvents[k]; + var nbr = eventRep.nbr; + var eventCell = newEventDIV(eventRep, calendarEventsData[nbr]); + parentDiv.appendChild(eventCell); + } + } } else { - for (var j = 0; j < days.length; j++) { - var parentDiv = days[j].childNodesWithTag("div")[0]; - for (var k = 0; k < events[j].length; k++) { - var eventRep = events[j][k]; - var nbr = eventRep.nbr; - var eventCell = newEventDIV(eventRep, eventsData[nbr]); - parentDiv.appendChild(eventCell); + for (var j = 0; j < days.length; j++) { + var parentDiv = days[j].childNodesWithTag("div")[0]; + for (var k = 0; k < events[j].length; k++) { + var eventRep = events[j][k]; + var nbr = eventRep.nbr; + var eventCell = newEventDIV(eventRep, eventsData[nbr]); + parentDiv.appendChild(eventCell); + } } - } } } } } function newEventDIV(eventRep, event) { - var eventCell = newBaseEventDIV(eventRep, event, event[4]); - - var pc = 100 / eventRep.siblings; - var left = eventRep.position * pc; - eventCell.style.left = left + "%"; - var right = 100 - (eventRep.position + 1) * pc; - if (event[10] != null) - eventCell.style.borderRight = "8px solid white"; - - eventCell.style.right = right + "%"; - 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"); - var text = _("Location:") + " " + event[7]; - span.update(text); - textDiv.appendChild(span); - } - - return eventCell; + var eventCell = newBaseEventDIV(eventRep, event, event[4]); + + var pc = 100 / eventRep.siblings; + var left = eventRep.position * pc; + eventCell.style.left = left + "%"; + var right = 100 - (eventRep.position + 1) * pc; + if (event[10] != null) + eventCell.style.borderRight = "8px solid white"; + + eventCell.style.right = right + "%"; + 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"); + var text = _("Location:") + " " + event[7]; + span.update(text); + textDiv.appendChild(span); + } + + return eventCell; } function _drawMonthCalendarEvents(events, eventsData) { @@ -2122,18 +2137,18 @@ function _drawMonthCalendarEvents(events, eventsData) { } function newMonthEventDIV(eventRep, event) { - var eventText; - if (event[8]) // all-day event - eventText = event[4]; - else - eventText = eventRep.starthour + " - " + event[4]; - - var eventCell = newBaseEventDIV(eventRep, event, - eventText); - if (event[10] != null) - eventCell.style.borderRight = "8px solid white"; - - return eventCell; + var eventText; + if (event[8]) // all-day event + eventText = event[4]; + else + eventText = eventRep.starthour + " - " + event[4]; + + var eventCell = newBaseEventDIV(eventRep, event, + eventText); + if (event[10] != null) + eventCell.style.borderRight = "8px solid white"; + + return eventCell; } function attachDragControllers(contentView) { @@ -2149,8 +2164,8 @@ function attachDragControllers(contentView) { } /* On IE, the scroll bar is part of the last element. For other browsers, we - execute this method so that the "right" style attribute of the - "calendarHeader" element can be computed. This is execute only once. */ + execute this method so that the "right" style attribute of the + "calendarHeader" element can be computed. This is execute only once. */ function adjustCalendarHeaderDIV() { var dv = $("daysView"); if (dv) { @@ -2188,22 +2203,22 @@ function adjustMultiColumnCalendarHeaderDIV() { 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(); + 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(); - $("calendarContent").style.height = "100%"; - $("calendarContent").style.background = "#E7E7E7"; + $("calendarHeader").remove(); + $("daysView").remove(); + $("calendarContent").style.height = "100%"; + $("calendarContent").style.background = "#E7E7E7"; } } @@ -2211,17 +2226,17 @@ function calendarDisplayCallback(http) { var div = $("calendarView"); var daysView = $("daysView"); var position = -1; - + // Check the previous view to restore the scrolling position if (daysView) - position = daysView.scrollTop; + position = daysView.scrollTop; preventAutoScroll = (position != -1); - + if (http.readyState == 4 && http.status == 200) { document.dayDisplayAjaxRequest = null; div.update(http.responseText); - + // DOM has changed daysView = $("daysView"); if (daysView) { @@ -2230,7 +2245,7 @@ function calendarDisplayCallback(http) { if (!calendarHeaderAdjusted) adjustCalendarHeaderDIV(); } - + if (http.callbackData["view"]) currentView = http.callbackData["view"]; if (http.callbackData["day"]) @@ -2238,7 +2253,7 @@ function calendarDisplayCallback(http) { if (currentView == "multicolumndayview") adjustMultiColumnCalendarHeaderDIV(); - + // Initialize contextual menu var menu = new Array(onMenuNewEventClick, onMenuNewTaskClick, @@ -2249,7 +2264,7 @@ function calendarDisplayCallback(http) { deleteEvent, copyEventToPersonalCalendar, onMenuRawEvent - ); + ); var observer; if (currentView == 'dayview' || currentView == 'weekview' || currentView == 'multicolumndayview') { observer = $("daysView"); @@ -2257,7 +2272,7 @@ function calendarDisplayCallback(http) { else { observer = $("monthDaysView"); } - + var contentView; if (currentView == "monthview") contentView = $("calendarContent"); @@ -2265,7 +2280,7 @@ function calendarDisplayCallback(http) { contentView = $("daysView"); contentView.observe("scroll", onBodyClickHandler); attachDragControllers($("calendarHeader")); - + // Create a clone of the contextual menu for the all-day // events area var allDayViewMenu = Element.clone($("currentViewMenu"), true); @@ -2278,19 +2293,19 @@ function calendarDisplayCallback(http) { allDayArea.observe("contextmenu", onMenuAllDayView); } attachDragControllers(contentView); - + // Attach contextual menu var currentViewMenu = $("currentViewMenu"); initMenu(currentViewMenu, menu); observer.observe("contextmenu", onMenuCurrentView); currentViewMenu.prepareVisibility = onMenuCurrentViewPrepareVisibility; - + restoreSelectedDay(); - + refreshCalendarEvents(http.callbackData.scrollEvent); - + var days = contentView.select("DIV.day"); - + if (currentView == "monthview") for (var i = 0; i < days.length; i++) { days[i].observe("click", onCalendarSelectDay); @@ -2301,20 +2316,20 @@ function calendarDisplayCallback(http) { days[i].observe("scroll", onBodyClickHandler); } else if (currentView == "multicolumndayview") { - var calendarHeader = $("calendarHeader"); - var headerCalendarsLabels = calendarHeader.select("DIV.calendarLabels DIV.calendarsToDisplay"); - var headerDays = calendarHeader.select("DIV.days DIV.day"); - for (var i = 0; i < days.length; i++) { - headerDays[i].hour = "allday"; - headerCalendarsLabels[i].observe("mousedown", listRowMouseDownHandler); - headerDays[i].observe("click", onCalendarSelectDay); - headerDays[i].observe("dblclick", onClickableCellsDblClick); - days[i].observe("click", onCalendarSelectDay); - - var clickableCells = days[i].select("DIV.clickableHourCell"); - for (var j = 0; j < clickableCells.length; j++) - clickableCells[j].observe("dblclick", onClickableCellsDblClick); - } + var calendarHeader = $("calendarHeader"); + var headerCalendarsLabels = calendarHeader.select("DIV.calendarLabels DIV.calendarsToDisplay"); + var headerDays = calendarHeader.select("DIV.days DIV.day"); + for (var i = 0; i < days.length; i++) { + headerDays[i].hour = "allday"; + headerCalendarsLabels[i].observe("mousedown", listRowMouseDownHandler); + headerDays[i].observe("click", onCalendarSelectDay); + headerDays[i].observe("dblclick", onClickableCellsDblClick); + days[i].observe("click", onCalendarSelectDay); + + var clickableCells = days[i].select("DIV.clickableHourCell"); + for (var j = 0; j < clickableCells.length; j++) + clickableCells[j].observe("dblclick", onClickableCellsDblClick); + } } else { var calendarHeader = $("calendarHeader"); @@ -2326,7 +2341,7 @@ function calendarDisplayCallback(http) { headerDays[i].observe("click", onCalendarSelectDay); headerDays[i].observe("dblclick", onClickableCellsDblClick); days[i].observe("click", onCalendarSelectDay); - + var clickableCells = days[i].select("DIV.clickableHourCell"); for (var j = 0; j < clickableCells.length; j++) clickableCells[j].observe("dblclick", onClickableCellsDblClick); @@ -2341,16 +2356,16 @@ function calendarDisplayCallback(http) { function onEventsSelectionChange() { listOfSelection = this; this.removeClassName("_unfocused"); - + var tasksList = $("tasksList"); tasksList.addClassName("_unfocused"); deselectAll(tasksList); - + var rows = $(this).getSelectedNodes(); if (rows.length == 1) { var row = rows[0]; changeCalendarDisplay( { "day": row.day, - "scrollEvent": row.getAttribute("id") } ); + "scrollEvent": row.getAttribute("id") } ); changeDateSelectorDisplay(row.day, true); } else { @@ -2365,13 +2380,13 @@ function onEventsSelectionChange() { function onTasksSelectionChange(event) { listOfSelection = this; this.removeClassName("_unfocused"); - + var target = Event.element(event); if (target.tagName == 'SPAN') target = target.parentNode; // Update selection onRowClick(event, target); - + var eventsList = $("eventsList"); eventsList.addClassName("_unfocused"); eventsList.deselectAll(); @@ -2384,45 +2399,45 @@ function _loadEventHref(href) { } var url = ApplicationBaseURL + "/" + href; document.eventsListAjaxRequest - = triggerAjaxRequest(url, eventsListCallback, href); - + = triggerAjaxRequest(url, eventsListCallback, href); + return false; } function _loadTasksHref(href) { - if (document.tasksListAjaxRequest) { - document.tasksListAjaxRequest.aborted = true; - document.tasksListAjaxRequest.abort(); - } - if (document.activeTasksAjaxRequest) { - document.activeTasksAjaxRequest.aborted = true; - document.activeTasksAjaxRequest.abort(); - } - url = ApplicationBaseURL + "/" + href; - urlActiveTasks = ApplicationBaseURL + "/activeTasks"; - - var tasksList = $("tasksList"); - var selectedIds; - if (tasksList) - selectedIds = tasksList.getSelectedNodesId(); - else - selectedIds = null; - - document.tasksListAjaxRequest = triggerAjaxRequest(url, tasksListCallback, selectedIds); - - document.activeTasksAjaxRequest = triggerAjaxRequest(urlActiveTasks, activeTasksCallback); - - return true; + if (document.tasksListAjaxRequest) { + document.tasksListAjaxRequest.aborted = true; + document.tasksListAjaxRequest.abort(); + } + if (document.activeTasksAjaxRequest) { + document.activeTasksAjaxRequest.aborted = true; + document.activeTasksAjaxRequest.abort(); + } + url = ApplicationBaseURL + "/" + href; + urlActiveTasks = ApplicationBaseURL + "/activeTasks"; + + var tasksList = $("tasksList"); + var selectedIds; + if (tasksList) + selectedIds = tasksList.getSelectedNodesId(); + else + selectedIds = null; + + document.tasksListAjaxRequest = triggerAjaxRequest(url, tasksListCallback, selectedIds); + + document.activeTasksAjaxRequest = triggerAjaxRequest(urlActiveTasks, activeTasksCallback); + + return true; } function onHeaderClick(event) { var newSortAttribute; var headerId; - + headerId = this.getAttribute("id"); - + if (headerId.startsWith('event')) - { + { // This is needed to get the dom object and flip the triangle sorting["event-header"] = headerId; // Take away the 'events' and 'Header' and lowercase the result @@ -2433,9 +2448,9 @@ function onHeaderClick(event) { sorting["event-ascending"] = true; sorting["event-attribute"] = newSortAttribute; refreshEvents(); - } + } else // Tasks - { + { // This is needed to get the dom object and flip the triangle sorting["task-header"] = headerId; // Take away the 'tasks' and 'Header' and lowercase the result @@ -2446,31 +2461,31 @@ function onHeaderClick(event) { sorting["task-ascending"] = true; sorting["task-attribute"] = newSortAttribute; refreshTasks(); - } - + } + Event.stop(event); } function refreshCurrentFolder(id) { if (id == 'tasks') - refreshTasks(); + refreshTasks(); else - refreshEvents(); + refreshEvents(); } /* refreshes the "unifinder" list */ function refreshEvents() { var specificSearch; var value = search["events"]["value"]; - + if (value && value.length) specificSearch = ("&search=" + search["events"]["criteria"] + "&value=" + escape(value.utf8encode())); else specificSearch = ""; - + refreshAlarms(); - + return _loadEventHref("eventslist?asc=" + sorting["event-ascending"] + "&sort=" + sorting["event-attribute"] + "&day=" + currentDay @@ -2481,18 +2496,18 @@ function refreshEvents() { function refreshTasks(setUserDefault) { var specificSearch; var value = search["tasks"]["value"]; - + if (value && value.length) specificSearch = ("&search=" + search["tasks"]["criteria"] + "&value=" + escape(value.utf8encode())); else specificSearch = ""; - + if (setUserDefault == 1) specificSearch += "&setud=1"; - + refreshAlarms(); - + return _loadTasksHref("taskslist?show-completed=" + showCompletedTasks + "&asc=" + sorting["task-ascending"] + "&sort=" + sorting["task-attribute"] @@ -2507,22 +2522,22 @@ function refreshEventsAndDisplay() { function onEventsListFilterChange() { var node = $("filterpopup"); - + eventListFilter = node.value; - + return refreshEvents(); } function onTasksListFilterChange() { - var node = $("tasksFilterpopup"); - - taskListFilter = node.value; - - $("showHideCompletedTasks").disabled = taskListFilter == "view_overdue" || - taskListFilter == "view_incomplete" || - taskListFilter == "view_not_started"; - - return refreshTasks(); + var node = $("tasksFilterpopup"); + + taskListFilter = node.value; + + $("showHideCompletedTasks").disabled = taskListFilter == "view_overdue" || + taskListFilter == "view_incomplete" || + taskListFilter == "view_not_started"; + + return refreshTasks(); } function selectMonthInMenu(menu, month) { @@ -2556,13 +2571,13 @@ function popupMonthMenu(event) { menuId = "monthListMenu"; else menuId = "yearListMenu"; - + var popup = $(menuId); if (id == "monthLabel") selectMonthInMenu(popup, this.getAttribute("month")); else selectYearInMenu(popup, this.innerHTML); - + popupToolbarMenu(this, menuId); Event.stop(event); } @@ -2571,14 +2586,14 @@ function popupMonthMenu(event) { function onMonthMenuItemClick(event) { var month = '' + this.getAttribute("month"); var year = '' + $("yearLabel").innerHTML.strip(); - + changeDateSelectorDisplay(year + month + "01", true); } function onYearMenuItemClick(event) { var month = '' + $("monthLabel").getAttribute("month");; var year = '' + this.innerHTML.strip(); - + changeDateSelectorDisplay(year + month + "01", true); } @@ -2604,7 +2619,7 @@ function _eventBlocksMatching(calendar, cname, recurrenceTime) { } } } - + return blocks; } @@ -2620,7 +2635,7 @@ function selectCalendarEvent(calendar, cname, recurrenceTime) { else selectedCalendarCell = selection; } - + return selection; } @@ -2640,10 +2655,10 @@ function onSelectAll(event) { } for (var i = 0; i < selectedBlocks.length; i++) selectedBlocks[i].selectElement(); - + selectedCalendarCell = selectedBlocks; } - + return false; } @@ -2665,7 +2680,7 @@ function deselectAll(list) { /** Click on an event in the calendar view */ function onCalendarSelectEvent(event, willShowContextualMenu) { var alreadySelected = false; - + // Look for event in events list // TODO: event will likely not be found if an Ajax query is refreshing // the events list. @@ -2673,7 +2688,7 @@ function onCalendarSelectEvent(event, willShowContextualMenu) { if (this.recurrenceTime) rowID += "-" + this.recurrenceTime; var row = $(rowID); - + // Check if event is already selected if (selectedCalendarCell) for (var i = 0; i < selectedCalendarCell.length; i++) @@ -2681,7 +2696,7 @@ function onCalendarSelectEvent(event, willShowContextualMenu) { alreadySelected = true; break; } - + if ((isMac() && event.metaKey == 1) || (!isMac() && event.ctrlKey == 1)) { // If meta or ctrl key is pressed, inverse the selection if (alreadySelected) { @@ -2689,7 +2704,7 @@ function onCalendarSelectEvent(event, willShowContextualMenu) { selectedCalendarCell.splice(i, 1); if (row) row.deselect(); - + return true; } } @@ -2704,7 +2719,7 @@ function onCalendarSelectEvent(event, willShowContextualMenu) { if (alreadySelected) selectedCalendarCell = [this]; } - + if (!alreadySelected) { // Select event in calendar view selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime); @@ -2720,39 +2735,39 @@ function onCalendarSelectEvent(event, willShowContextualMenu) { function onCalendarSelectDay(event) { var day = this.getAttribute("day"); var needRefresh = (eventListFilter == 'view_selectedday' && day != currentDay); - + setSelectedDayDate(day); changeDateSelectorDisplay(day); - + if (needRefresh) refreshEvents(); - + var target = Event.findElement(event); var div = target.up('div'); - + // Select the calendar associated with the day clicked if (currentView == "multicolumndayview") { - if (target.getAttribute("calendar")) - var calendar = "[id='/" + target.getAttribute("calendar") + "']"; - else - var calendar = "[id='/" + target.up("[calendar]").getAttribute("calendar") + "']"; - var list = $("calendarList"); - var selectedCalendar = list.down(calendar); - - onRowClick(event, selectedCalendar); + if (target.getAttribute("calendar")) + var calendar = "[id='/" + target.getAttribute("calendar") + "']"; + else + var calendar = "[id='/" + target.up("[calendar]").getAttribute("calendar") + "']"; + var list = $("calendarList"); + var selectedCalendar = list.down(calendar); + + onRowClick(event, selectedCalendar); } - + if (div && !div.hasClassName('event') && !div.hasClassName('eventInside') && !div.hasClassName('text') && !div.hasClassName('gradient')) { // Target is not an event -- unselect all events. listOfSelection = $("eventsList"); deselectAll(); return true; } - + if (listOfSelection) { listOfSelection.addClassName("_unfocused"); } - + changeCalendarDisplay( { "day": currentDay } ); } @@ -2764,9 +2779,9 @@ function setSelectedDayDate(dayDate) { var allDay = $("allDay" + selectedDayDate); if (allDay) allDay.removeClassName("selectedDay"); - + selectedDayDate = dayDate; - + day = $("day" + selectedDayDate); day.addClassName("selectedDay"); selectedDayNumber = day.readAttribute("day-number"); @@ -2807,7 +2822,7 @@ function findDateFromDayNumber(dayNumber) { function onShowCompletedTasks(event) { showCompletedTasks = (this.checked ? 1 : 0); - + return refreshTasks(1); } @@ -2820,7 +2835,7 @@ function updateTaskStatus(event) { function updateCalendarStatus(event) { var list = []; var newStatus = (this.checked ? 1 : 0); - + var nodes = $("calendarList").childNodesWithTag("li"); for (var i = 0; i < nodes.length; i++) { var input = $(nodes[i]).childNodesWithTag("input")[0]; @@ -2833,15 +2848,15 @@ function updateCalendarStatus(event) { list.push(UserLogin); } } - + // if (!list.length) { // list.push(UserLogin); // nodes[0].childNodesWithTag("input")[0].checked = true; // } - + // ApplicationBaseURL = (UserFolderURL + "Groups/_custom_" // + list.join(",") + "/Calendar/"); - + if (event) { var folderID = this.parentNode.getAttribute("id"); var urlstr = URLForFolderID(folderID); @@ -2858,7 +2873,7 @@ function updateCalendarStatus(event) { refreshTasks(); changeCalendarDisplay(); } - + if (event) { event.returnValue = true; } @@ -2928,9 +2943,9 @@ function onCalendarsMenuPrepareVisibility() { var selected = folders.getSelectedNodes(); if (selected.length > 0) { var folderOwner = selected[0].getAttribute("owner"); - + var lis = $(this).down("ul").childElements(); - + /* distance: sharing = length - 1, export = length - 7 */ var endDists = [ 1, 7 ]; for (var i = 0; i < endDists.length; i++) { @@ -2941,14 +2956,14 @@ function onCalendarsMenuPrepareVisibility() { else option.addClassName("disabled"); } - + var deleteCalendarOption = $("deleteCalendarMenuItem"); // Swith between Delete and Unsubscribe if (folderOwner == UserLogin) deleteCalendarOption.update(_("Delete Calendar")); else deleteCalendarOption.update(_("Unsubscribe Calendar")); - + return true; } return false; @@ -2971,43 +2986,43 @@ function onMenuCurrentViewPrepareVisibility() { copyOption.addClassName("disabled"); else copyOption.removeClassName("disabled"); - if (selectedCalendarCell.length == 1) { - // show raw content is only allowed for single event + if (selectedCalendarCell.length == 1) { + // show raw content is only allowed for single event rawOption.removeClassName("disabled"); } - else + else rawOption.addClassName("disabled"); } - + return true; } function onTasksListMenuPrepareVisibility() { var options = $(this).down("ul"); var rawOption = options.down("li", 6); - + var selectedTasks = $$("#tasksList ._selected"); if (selectedTasks.length == 1) rawOption.removeClassName("disabled"); else rawOption.addClassName("disabled"); - + return true; } function getMenus() { var menus = {}; - + var dateMenu = []; for (var i = 0; i < 12; i++) dateMenu.push(onMonthMenuItemClick); menus["monthListMenu"] = dateMenu; - + dateMenu = []; for (var i = 0; i < 11; i++) dateMenu.push(onYearMenuItemClick); menus["yearListMenu"] = dateMenu; - + menus["eventsListMenu"] = new Array(onMenuNewEventClick, onMenuNewTaskClick, "-", editEvent, deleteEvent, "-", @@ -3019,20 +3034,20 @@ function getMenus() { "-", onCalendarExport, onCalendarImport, null, "-", null, "-", onMenuSharing); menus["eventSearchMenu"] = new Array(setSearchCriteria, setSearchCriteria, setSearchCriteria); - + menus["tasksListMenu"] = new Array (editEvent, newTask, "-", marksTasksAsCompleted, deleteEvent, "-", - onMenuRawTask); + onMenuRawTask); menus["taskSearchMenu"] = new Array(setSearchCriteria, setSearchCriteria, setSearchCriteria); - + var calendarsMenu = $("calendarsMenu"); if (calendarsMenu) calendarsMenu.prepareVisibility = onCalendarsMenuPrepareVisibility; - + var tasksListMenu = $("tasksListMenu"); if (tasksListMenu) tasksListMenu.prepareVisibility = onTasksListMenuPrepareVisibility; - + return menus; } @@ -3042,7 +3057,7 @@ function newTask () { function marksTasksAsCompleted () { var selectedTasks = $$("#tasksList ._selected"); - + for (var i = 0; i < selectedTasks.length; i++) { var task = selectedTasks[i]; _updateTaskCompletion (task, 1); @@ -3052,18 +3067,18 @@ function marksTasksAsCompleted () { function _updateTaskCompletion (task, value) { url = (ApplicationBaseURL + "/" + task.calendar + "/" + task.cname + "/changeStatus?status=" + value); - + triggerAjaxRequest(url, refreshTasks, null); - + return false; } function onMenuRawTask(event) { var selectedTasks = $$("#tasksList ._selected"); if (selectedTasks.length != 1) { - return; + return; } - + var url = ApplicationBaseURL + "/" + selectedTasks[0].calendar + "/" + selectedTasks[0].cname + "/raw" openGenericWindow.delay(0.1, url); } @@ -3071,15 +3086,15 @@ function onMenuRawTask(event) { function onMenuSharing(event) { if ($(this).hasClassName("disabled")) return; - + var folders = $("calendarList"); var selected = folders.getSelectedNodes()[0]; /* FIXME: activation of the context menu should preferably select the entry - above which the event has occurred */ + above which the event has occurred */ if (selected) { var folderID = selected.getAttribute("id"); var urlstr = URLForFolderID(folderID) + "/acls"; - + openAclWindow(urlstr); } } @@ -3106,23 +3121,23 @@ function configureDraggables() { var rows = jQuery("tr.eventRow"); try { rows.draggable("destroy"); } catch (e) {} rows.draggable({ - helper: function (event) { return '
'; }, - start: startDragging, - drag: whileDragging, - stop: stopDragging, - appendTo: 'body', - cursorAt: { right: 25 }, - scroll: false, - distance: 4, - zIndex: 20 - }); + helper: function (event) { return '
'; }, + start: startDragging, + drag: whileDragging, + stop: stopDragging, + appendTo: 'body', + cursorAt: { right: 25 }, + scroll: false, + distance: 4, + zIndex: 20 + }); } } function configureDroppables() { jQuery("#calendarList li").droppable({ - hoverClass: 'genericHoverClass', - drop: dropAction }); + hoverClass: 'genericHoverClass', + drop: dropAction }); } function startDragging(event, ui) { @@ -3130,20 +3145,20 @@ function startDragging(event, ui) { var handle = ui.helper; var events = $('eventsList').getSelectedRowsId(); var count = events.length; - + if (count == 0 || events.indexOf(row.id) < 0) { onRowClick(event, $(row.id)); events = $("eventsList").getSelectedRowsId(); count = events.length; } handle.html(count); - + handle.show(); } function whileDragging(event, ui) { - if (event) - var handle = ui.helper; + if (event) + var handle = ui.helper; } function stopDragging(event, ui) { @@ -3158,37 +3173,35 @@ function dropAction(event, ui) { } function dropSelectedEvents(action, toId) { - var selectedCalendars = $("calendarList").getElementsByTagName("li"); - if (selectedCalendars.length > 0) { - var eventIds = $('eventsList').getSelectedRowsId(); - for (var i = 0; i < eventIds.length; i++) { - if (!eventIds[i].endsWith("ics")) { - showAlertDialog(_("An error as occurred please try again")); - return false; - } - else { - if (eventIds[i].search(toId+"-") == -1) { - - var x = eventIds[i].indexOf('-'); - if (eventIds[i].indexOf('-') == 4) { - fromId = eventIds[i].substr(0,25); - eventICS = eventIds[i].substr(26); - } - else { - fromId = eventIds[i].substr(0, x); - eventICS = eventIds[i].slice(x + 1); - } - - var calendarID = "calendarID=" + fromId + "," + toId; - var params = calendarID + "&days=0&start=0&duration=0"; - - var urlstr = ApplicationBaseURL + "/" + fromId + "/" + eventICS + "/adjust?" + params; - - triggerAjaxRequest(urlstr, updateEventFromDraggingCallback); + var selectedCalendars = $("calendarList").getElementsByTagName("li"); + if (selectedCalendars.length > 0) { + var eventIds = $('eventsList').getSelectedRowsId(); + for (var i = 0; i < eventIds.length; i++) { + if (!eventIds[i].endsWith("ics")) { + showAlertDialog(_("An error as occurred please try again")); + return false; + } + else { + if (eventIds[i].search(toId+"-") == -1) { + var x = eventIds[i].indexOf('-'); + if (eventIds[i].indexOf('-') == 4) { + fromId = eventIds[i].substr(0,25); + eventICS = eventIds[i].substr(26); + } + else { + fromId = eventIds[i].substr(0, x); + eventICS = eventIds[i].slice(x + 1); + } + + var calendarID = "calendarID=" + fromId + "," + toId; + var params = calendarID + "&days=0&start=0&duration=0"; + var urlstr = ApplicationBaseURL + "/" + fromId + "/" + eventICS + "/adjust?" + params; + + triggerAjaxRequest(urlstr, updateEventFromDraggingCallback); + } + } } - } } - } } function configureDragHandles() { @@ -3198,7 +3211,7 @@ function configureDragHandles() { handle.leftBlock = $("leftPanel"); handle.rightBlock = $("rightPanel"); } - + handle = $("rightDragHandle"); if (handle) { handle.addInterface(SOGoDragHandlesInterface); @@ -3208,28 +3221,35 @@ function configureDragHandles() { } function initCalendarSelector() { - var selector = $("calendarSelector"); - updateCalendarStatus(); // triggers the initial events refresh - selector.changeNotification = updateCalendarsList; - - var list = $("calendarList"); - list.on("mousedown", onCalendarSelectionChange); - list.on("dblclick", onCalendarModify); - list.on("selectstart", listRowMouseDownHandler); - list.attachMenu("calendarsMenu"); - - var items = list.childNodesWithTag("li"); - for (var i = 0; i < items.length; i++) { - var input = items[i].childNodesWithTag("input")[0]; - var activeTasks = items[i].childNodesWithTag("span")[1]; - $(input).observe("click", clickEventWrapper(updateCalendarStatus)); - } - - var links = $("calendarSelectorButtons").childNodesWithTag("a"); - $(links[0]).observe("click", clickEventWrapper(onCalendarNew)); - $(links[1]).observe("click", clickEventWrapper(onCalendarWebAdd)); - $(links[2]).observe("click", clickEventWrapper(onCalendarAdd)); - $(links[3]).observe("click", clickEventWrapper(onCalendarRemove)); + var selector = $("calendarSelector"); + updateCalendarStatus(); // triggers the initial events refresh + selector.changeNotification = updateCalendarsList; + + var list = $("calendarList"); + list.on("mousedown", onCalendarSelectionChange); + list.on("dblclick", onCalendarModify); + list.on("selectstart", listRowMouseDownHandler); + list.attachMenu("calendarsMenu"); + + var items = list.childNodesWithTag("li"); + for (var i = 0; i < items.length; i++) { + var input = items[i].childNodesWithTag("input")[0]; + var activeTasks = items[i].childNodesWithTag("span")[0]; + $(input).observe("click", clickEventWrapper(updateCalendarStatus)); + if (activeTasks.textContent == "0") { + activeTasks.innerHTML = ""; + } + else { + activeTasks.innerHTML = "(" + activeTasks.innerText + ")"; + } + + } + + var links = $("calendarSelectorButtons").childNodesWithTag("a"); + $(links[0]).observe("click", clickEventWrapper(onCalendarNew)); + $(links[1]).observe("click", clickEventWrapper(onCalendarWebAdd)); + $(links[2]).observe("click", clickEventWrapper(onCalendarAdd)); + $(links[3]).observe("click", clickEventWrapper(onCalendarRemove)); } function onCalendarSelectionChange(event) { @@ -3237,7 +3257,7 @@ function onCalendarSelectionChange(event) { if (target.tagName == 'DIV' || target.tagName == 'SPAN') { target = target.parentNode; } - + onRowClick(event, target); } @@ -3260,7 +3280,7 @@ function onCalendarModify(event) { } } if (Prototype.Browser.IE) height += 10; - + if (owner == UserLogin) { height += 20; } @@ -3270,19 +3290,19 @@ function onCalendarModify(event) { else if (calendarID == "/personal") { height -= 26; } - + $(function() { - var properties = window.open(url, windowID, - "width="+width+",height="+height+",resizable=0"); - properties.focus(); - }).delay(0.1); + var properties = window.open(url, windowID, + "width="+width+",height="+height+",resizable=0"); + properties.focus(); + }).delay(0.1); } function updateCalendarProperties(calendarID, calendarName, calendarColor) { var idParts = calendarID.split(":"); var folderName = idParts[1].split("/")[1]; var nodeID; - + if (idParts[0] != UserLogin) nodeID = "/" + idParts[0].asCSSIdentifier() + "_" + folderName; else @@ -3340,7 +3360,7 @@ function addWebCalendarCallback(http) { } webCalendars[data["folderID"]] = http.callbackData; } - + appendCalendar(data["name"], data["folderID"]); reloadWebCalendar(data["folderID"]); } @@ -3348,7 +3368,7 @@ function addWebCalendarCallback(http) { else { showAlertDialog (_("An error occurred while importing calendar.")); } - + // if (data.imported) { // appendCalendar(data.displayname, "/" + data.name); // refreshEvents(); @@ -3373,17 +3393,17 @@ function onCalendarImport(event) { var list = $("calendarList"); var node = list.getSelectedNodes().first(); var folderId = node.getAttribute("id"); - + var url = ApplicationBaseURL + folderId + "/import"; $("uploadForm").action = url; $("calendarFile").value = ""; - + var cellPosition = node.cumulativeOffset(); var cellDimensions = node.getDimensions(); var left = cellDimensions['width'] - 20; var top = cellPosition[1]; top -= list.scrollTop; - + var div = $("uploadDialog"); var res = $("uploadResults"); res.setStyle({ top: top + "px", left: left + "px" }); @@ -3399,11 +3419,11 @@ function hideImportResults(event) { function validateUploadForm() { rc = false; if ($("calendarFile").value.length) { - var btn = jQuery('#uploadSubmit'); - jQuery('#uploadCancel').fadeOut('fast'); - btn.addClass("disabled"); - btn.children('span').text(_('Uploading')); - rc = true; + var btn = jQuery('#uploadSubmit'); + jQuery('#uploadCancel').fadeOut('fast'); + btn.addClass("disabled"); + btn.children('span').text(_('Uploading')); + rc = true; } return rc; } @@ -3413,48 +3433,48 @@ function uploadCompleted(response) { btn.removeClass("disabled"); btn.children('span').text(_('Upload')); var div = $("uploadResults"); - + try { - data = response.evalJSON(true); - - if (data.imported < 0) + data = response.evalJSON(true); + + if (data.imported < 0) $("uploadResultsContent").update(_("An error occurred while importing calendar.")); - else if (data.imported == 0) + else if (data.imported == 0) $("uploadResultsContent").update(_("No event was imported.")); - else { + else { $("uploadResultsContent").update(_("A total of %{0} events were imported in the calendar.").formatted(data.imported)); refreshEventsAndDisplay(); - } + } } catch (e) { - $("uploadResultsContent").update(_("An error occurred while importing calendar.")); + $("uploadResultsContent").update(_("An error occurred while importing calendar.")); } - + hideCalendarImport(); $("uploadResults").show(); } function appendCalendar(folderName, folderPath) { var owner; - + if (folderPath) { owner = getSubscribedFolderOwner(folderPath); folderPath = accessToSubscribedFolder(folderPath); } else folderPath = "/" + folderName; - + if (!owner) owner = UserLogin; - + //log ("append name: " + folderName + "; path: " + folderPath + "; owner: " + owner); - + if ($(folderPath)) showAlertDialog(_("You have already subscribed to that folder!")); else { var calendarList = $("calendarList"); var items = calendarList.select("li"); var li = document.createElement("li"); - + // Add the calendar to the proper place var i = getListIndexForFolder(items, owner, folderName); if (i != items.length) // User is subscribed to other calendars of the same owner @@ -3463,32 +3483,26 @@ function appendCalendar(folderName, folderPath) { calendarList.appendChild(li); $(li).writeAttribute("id", folderPath); $(li).writeAttribute("owner", owner); - + var checkBox = createElement("input", null, "checkBox", { checked: 1 }, { type: "checkbox" }, li); - + li.appendChild(document.createTextNode(" ")); - + var colorBox = document.createElement("div"); colorBox.appendChild(document.createTextNode("\u00a0")); - li.appendChild(colorBox); - - var displayName = document.createElement("span"); - displayName.appendChild(document.createTextNode(folderName)); - li.appendChild(displayName); - $(colorBox).addClassName("colorBox"); $(colorBox).addClassName('calendarFolder' + folderPath.substr(1)); - + // Check the checkbox (required for IE) li.getElementsByTagName("input")[0].checked = true; - + // Register event on checkbox $(checkBox).on("click", clickEventWrapper(updateCalendarStatus)); - + var url = URLForFolderID(folderPath) + "/canAccessContent"; triggerAjaxRequest(url, calendarEntryCallback, folderPath); - + // Update CSS for events color appendStyleElement(folderPath, "#AAAAAA"); } @@ -3499,15 +3513,15 @@ function appendStyleElement(folderPath, color) { var fgColor = getContrastingTextColor(color); var styleElement = document.createElement("style"); styleElement.type = "text/css"; - + var styles = ' .calendarFolder' + folderPath.substr(1) - + ' { background-color: ' + color + ' !important;' + ' color: ' + fgColor + ' !important; }' - + ' div.colorBox.calendarFolder' + folderPath.substr(1) - + ' { color: ' + color + ' !important; }'; - + + ' { background-color: ' + color + ' !important;' + ' color: ' + fgColor + ' !important; }' + + ' div.colorBox.calendarFolder' + folderPath.substr(1) + + ' { color: ' + color + ' !important; }'; + if (styleElement.styleSheet) styleElement.styleSheet.cssText = styles; // IE else styleElement.appendChild(document.createTextNode(styles)); // Mozilla + Webkit - + document.getElementsByTagName("head")[0].appendChild(styleElement); } } @@ -3559,7 +3573,7 @@ function onCalendarRemove(event) { } } } - + preventDefault(event); } @@ -3608,7 +3622,7 @@ function configureLists() { if (!$("schedulerTabs").visible()) { $('calendarView').setStyle({ top: '0' }).show(); } - + // TASK LIST var list = $("tasksList"); list.multiselect = true; @@ -3617,13 +3631,13 @@ function configureLists() { list.down("tbody").on("mousedown", onTasksSelectionChange); list.down("tbody").on("selectstart", listRowMouseDownHandler); list.down("tbody").attachMenu("tasksListMenu"); - + var input = $("showHideCompletedTasks"); input.observe("click", onShowCompletedTasks); - + if (showCompletedTasks) - input.checked = true; - + input.checked = true; + // EVENT LIST list = $("eventsList"); list.multiselect = true; @@ -3638,7 +3652,7 @@ function initDateSelectorEvents() { arrow.observe("click", onDateSelectorGotoMonth); arrow = $("leftArrow"); arrow.observe("click", onDateSelectorGotoMonth); - + var menuButton = $("monthLabel"); menuButton.observe("click", popupMonthMenu); menuButton = $("yearLabel"); @@ -3656,67 +3670,67 @@ function onWindowResize(event) { handle = $("rightDragHandle"); if (handle) handle.adjust(); - + if (!$(document.body).hasClassName("popup")) drawNowLine(); } function drawNowLine() { - var d = new Date(); - var hours = d.getHours(); - var minutes = d.getMinutes(); - - if (currentView == "dayview") { - var today = new Date(); - var m = parseInt(today.getMonth()) + 1; - var d = today.getDate(); - if (m < 10) - m = "0" + m; - if (d < 10) - d = "0" + d; - var day = today.getFullYear() + "" + m + "" + d; - var targets = $$("DIV#daysView DIV.days DIV.day[day=" + day - + "] DIV.hourCells"); - } - else if (currentView == "multicolumndayview") { - var targets = $$("DIV#daysView DIV.hourCells"); - } - else if (currentView == "weekview") - var targets = $$("DIV#daysView DIV.days DIV.dayOfToday DIV.hourCells"); - - else { - var targets = []; - } - - if (targets[0] != undefined) { - if (currentView == "multicolumndayview") { - var nbCalendars = targets.length; - for(var i = 0; i < nbCalendars; i++){ - var target = targets[i].getElementsByClassName("clickableHourCell")[hours]; - - if (target) { - var div = targets[i].getElementsByClassName("nowLineDisplay")[0]; - if (!div) - div = new Element("div", {'class': 'nowLineDisplay'}); - - div.style.top = parseInt((minutes * target.offsetHeight / 60) - 1) + "px"; - target.insertBefore(div, target.firstChild); - } - } + var d = new Date(); + var hours = d.getHours(); + var minutes = d.getMinutes(); + + if (currentView == "dayview") { + var today = new Date(); + var m = parseInt(today.getMonth()) + 1; + var d = today.getDate(); + if (m < 10) + m = "0" + m; + if (d < 10) + d = "0" + d; + var day = today.getFullYear() + "" + m + "" + d; + var targets = $$("DIV#daysView DIV.days DIV.day[day=" + day + + "] DIV.hourCells"); } + else if (currentView == "multicolumndayview") { + var targets = $$("DIV#daysView DIV.hourCells"); + } + else if (currentView == "weekview") + var targets = $$("DIV#daysView DIV.days DIV.dayOfToday DIV.hourCells"); + else { - var target = targets[0].getElementsByClassName("clickableHourCell")[hours]; - if (target) { - var div = targets[0].getElementsByClassName("nowLineDisplay")[0]; - if (!div) - div = new Element("div", {'class': 'nowLineDisplay'}); - - div.style.top = parseInt((minutes * target.offsetHeight / 60) - 1) + "px"; - target.insertBefore(div, target.firstChild); - } + var targets = []; + } + + if (targets[0] != undefined) { + if (currentView == "multicolumndayview") { + var nbCalendars = targets.length; + for(var i = 0; i < nbCalendars; i++){ + var target = targets[i].getElementsByClassName("clickableHourCell")[hours]; + + if (target) { + var div = targets[i].getElementsByClassName("nowLineDisplay")[0]; + if (!div) + div = new Element("div", {'class': 'nowLineDisplay'}); + + div.style.top = parseInt((minutes * target.offsetHeight / 60) - 1) + "px"; + target.insertBefore(div, target.firstChild); + } + } + } + else { + var target = targets[0].getElementsByClassName("clickableHourCell")[hours]; + if (target) { + var div = targets[0].getElementsByClassName("nowLineDisplay")[0]; + if (!div) + div = new Element("div", {'class': 'nowLineDisplay'}); + + div.style.top = parseInt((minutes * target.offsetHeight / 60) - 1) + "px"; + target.insertBefore(div, target.firstChild); + } + } + setTimeout("drawNowLine ();", 60000); // 1 min. } - setTimeout("drawNowLine ();", 60000); // 1 min. - } } function onListCollapse(event, element) { @@ -3725,13 +3739,13 @@ function onListCollapse(event, element) { var handle = $("rightDragHandle"); var view = jQuery("#calendarView"); var state = 'collapse'; - + if (tabs.visible()) { img.removeClassName('collapse').addClassName('rise'); handle.hide(); view.animate({ top: '0' }, 200, function() { - tabs.hide(); - }); + tabs.hide(); + }); } else { state = 'rise'; @@ -3739,15 +3753,15 @@ function onListCollapse(event, element) { tabs.show(); tabs.controller.onWindowResize(); view.animate({ top: handle.getStyle('top') }, 200, function() { - handle.show(); - }); + handle.show(); + }); } - + var url = ApplicationBaseURL + "/saveListState"; var params = "state=" + state; triggerAjaxRequest(url, null, null, params, { "Content-type": "application/x-www-form-urlencoded" }); - + } function onDocumentKeydown(event) { @@ -3787,7 +3801,7 @@ function onDocumentKeydown(event) { function saveTabState(event) { var tab = $(event).memo; - + var url = ApplicationBaseURL + "/saveSelectedList"; var params = "list=" + tab; triggerAjaxRequest(url, null, null, params, @@ -3801,23 +3815,23 @@ function initScheduler() { sorting["task-attribute"] = "end"; sorting["event-ascending"] = true; sorting["task-ascending"] = true; - + if (!$(document.body).hasClassName("popup")) { var node = $("filterpopup"); eventListFilter = node.value; - + var tabsContainer = $("schedulerTabs"); var controller = new SOGoTabsController(); controller.attachToTabsContainer(tabsContainer); tabsContainer.on("tabs:click", saveTabState); - + if (UserSettings['ShowCompletedTasks']) { showCompletedTasks = parseInt(UserSettings['ShowCompletedTasks']); } else { showCompletedTasks = 0; } - + initDateSelectorEvents(); initCalendarSelector(); configureSearchField(); @@ -3829,7 +3843,7 @@ function initScheduler() { $("calendarView").on("click", "#listCollapse", onListCollapse); Event.observe(document, "keydown", onDocumentKeydown); } - + onWindowResize.defer(); Event.observe(window, "resize", onWindowResize); } diff --git a/UI/WebServerResources/SchedulerUIDnD.js b/UI/WebServerResources/SchedulerUIDnD.js index 48bed552a..cbac2f1e3 100644 --- a/UI/WebServerResources/SchedulerUIDnD.js +++ b/UI/WebServerResources/SchedulerUIDnD.js @@ -218,52 +218,52 @@ SOGoEventDragEventCoordinates.prototype = { }, initFromEventCellMultiDay: function(eventCell) { - var classNames = eventCell.className.split(" "); + var classNames = eventCell.className.split(" "); for (var i = 0; (this.start == -1 || this.duration == -1) && i < classNames.length; i++) { - var className = classNames[i]; + var className = classNames[i]; if (className.startsWith("starts")) { - this.start = parseInt(className.substr(6)); + this.start = parseInt(className.substr(6)); } else if (className.startsWith("lasts")) { this.duration = parseInt(className.substr(5)); } } var dayNumber = -1; - + var dayNode = eventCell.parentNode.parentNode; if (currentView == "multicolumndayview") { - calendarID[0] = dayNode.getAttribute("calendar"); - var dayNumber = this._updateMulticolumnViewDayNumber(calendarID); + calendarID[0] = dayNode.getAttribute("calendar"); + var dayNumber = this._updateMulticolumnViewDayNumber(calendarID); } else { - var classNames = dayNode.className.split(" "); - for (var i = 0; dayNumber == -1 && i < classNames.length; i++) { - var className = classNames[i]; - if (className.startsWith("day") && className.length > 3) { - dayNumber = parseInt(className.substr(3)); + var classNames = dayNode.className.split(" "); + for (var i = 0; dayNumber == -1 && i < classNames.length; i++) { + var className = classNames[i]; + if (className.startsWith("day") && className.length > 3) { + dayNumber = parseInt(className.substr(3)); + } } - } } this.dayNumber = dayNumber; }, initFromEventCellMultiDayAllDay: function(eventCell) { this.start = 0; this.duration = SOGoEventDragDayLength; - + var dayNode = eventCell.parentNode; if (currentView == "multicolumndayview") { - calendarID[0] = dayNode.getAttribute("calendar"); - var dayNumber = this._updateMulticolumnViewDayNumber(calendarID); + calendarID[0] = dayNode.getAttribute("calendar"); + var dayNumber = this._updateMulticolumnViewDayNumber(calendarID); } else { - var classNames = dayNode.className.split(" "); - var dayNumber = -1; - for (var i = 0; dayNumber == -1 && i < classNames.length; i++) { - var className = classNames[i]; - if (className.startsWith("day") && className.length > 3) { - dayNumber = parseInt(className.substr(3)); + var classNames = dayNode.className.split(" "); + var dayNumber = -1; + for (var i = 0; dayNumber == -1 && i < classNames.length; i++) { + var className = classNames[i]; + if (className.startsWith("day") && className.length > 3) { + dayNumber = parseInt(className.substr(3)); + } } - } } this.dayNumber = dayNumber; }, @@ -334,17 +334,16 @@ SOGoEventDragEventCoordinates.prototype = { }, _updateMulticolumnViewDayNumber: function(calendarID) { - var calendarList = $("calendarList").getElementsByTagName("li"); - for (var j = 0; j < calendarList.length ; j++) { - if ($("calendarList").getElementsByTagName("li")[j].down().checked) { - activeCalendars.push($("calendarList").getElementsByTagName("li")[j].getAttribute("id").substr(1)); + var calendarList = $("calendarList").getElementsByTagName("li"); + for (var j = 0; j < calendarList.length ; j++) { + if ($("calendarList").getElementsByTagName("li")[j].down().checked) + activeCalendars.push($("calendarList").getElementsByTagName("li")[j].getAttribute("id").substr(1)); } - } - for (var k = 0; k < activeCalendars.length; k++) { - if (activeCalendars[k] == calendarID[0]) { - return k; + for (var k = 0; k < activeCalendars.length; k++) { + if (activeCalendars[k] == calendarID[0]) { + return k; + } } - } }, getStartTime: function() { @@ -541,20 +540,19 @@ SOGoEventDragGhostController.prototype = { }, _updateMulticolumnViewDayNumber_SEDGC: function() { - var calendarID_SEDGC = this.folderClass.substr(14); - var calendarList = $("calendarList").getElementsByTagName("li"); - activeCalendars = []; - for (var j = 0; j < calendarList.length ; j++) { - if ($("calendarList").getElementsByTagName("li")[j].down().checked) { - activeCalendars.push($("calendarList").getElementsByTagName("li")[j].getAttribute("id").substr(1)); + var calendarID_SEDGC = this.folderClass.substr(14); + var calendarList = $("calendarList").getElementsByTagName("li"); + activeCalendars = []; + for (var j = 0; j < calendarList.length ; j++) { + if ($("calendarList").getElementsByTagName("li")[j].down().checked) + activeCalendars.push($("calendarList").getElementsByTagName("li")[j].getAttribute("id").substr(1)); } - } - for (var k = 0; k < activeCalendars.length; k++) { - if (activeCalendars[k] == calendarID_SEDGC) { - this.currentCoordinates.dayNumber = k; - break; + for (var k = 0; k < activeCalendars.length; k++) { + if (activeCalendars[k] == calendarID_SEDGC) { + this.currentCoordinates.dayNumber = k; + break; + } } - } }, _updateCoordinates: function SEDGC__updateCoordinates() { @@ -977,17 +975,16 @@ function SOGoEventDragLeftPanelController() { } SOGoEventDragLeftPanelController.prototype = { - - updateFromPointerHandler: function SEDLPC_updateFromPointerHandler() { - // Highlight the calendar hover - $$('#calendarList li').each(function(e) { - e.removeClassName('genericHoverClass'); - }); - var hoverCalendar = $(event).findElement('#calendarList li'); - if (hoverCalendar) { - hoverCalendar.addClassName('genericHoverClass'); + + updateFromPointerHandler: function SEDLPC_updateFromPointerHandler() { + // Highlight the calendar hover + $$('#calendarList li').each(function(e) { + e.removeClassName('genericHoverClass'); + }); + var hoverCalendar = $(event).findElement('#calendarList li'); + if (hoverCalendar) + hoverCalendar.addClassName('genericHoverClass'); } - } } function SOGoEventDragController() { @@ -1102,17 +1099,17 @@ SOGoEventDragController.prototype = { this.ghostController.initWithCoordinates(coordinates); if (!this.eventCells) { - if (currentView == "multicolumndayview") { - if (target.getAttribute("calendar")) - var folderID = target.getAttribute("calendar"); - else - var folderID = target.up("[calendar]").getAttribute("calendar"); - } - else { - var folder = getSelectedFolder(); - var folderID = folder.readAttribute("id").substr(1); - } - this.ghostController.setFolderClass("calendarFolder" + folderID); + if (currentView == "multicolumndayview") { + if (target.getAttribute("calendar")) + var folderID = target.getAttribute("calendar"); + else + var folderID = target.up("[calendar]").getAttribute("calendar"); + } + else { + var folder = getSelectedFolder(); + var folderID = folder.readAttribute("id").substr(1); + } + this.ghostController.setFolderClass("calendarFolder" + folderID); } this.ghostController.setDragMode(this._determineDragMode()); this.ghostController.setPointerHandler(this.pointerHandler); @@ -1388,18 +1385,18 @@ SOGoEventDragController.prototype = { var dropCalendar = $(event).findElement('#calendarList li'); if (dropCalendar != null) { - calendarID[0] = this.folderClass.substr(14); - calendarID[1] = dropCalendar.getAttribute("id").substr(1); - this.updateDropCallback(this, this.eventCells, delta, calendarID); + calendarID[0] = this.folderClass.substr(14); + calendarID[1] = dropCalendar.getAttribute("id").substr(1); + this.updateDropCallback(this, this.eventCells, delta, calendarID); } else if (currentView == "multicolumndayview" && delta.dayNumber != 0) { - var position = activeCalendars.indexOf(calendarID[0]); - position += delta.dayNumber; - calendarID[1] = activeCalendars[position]; - this.updateDropCallback(this, this.eventCells, delta, calendarID); + var position = activeCalendars.indexOf(calendarID[0]); + position += delta.dayNumber; + calendarID[1] = activeCalendars[position]; + this.updateDropCallback(this, this.eventCells, delta, calendarID); } else - this.updateDropCallback(this, this.eventCells, delta, 0); + this.updateDropCallback(this, this.eventCells, delta, 0); } else { var eventContainerNodes = utilities.getEventContainerNodes(); var dayNode = eventContainerNodes[this.ghostController @@ -1428,40 +1425,38 @@ SOGoEventDragController.prototype = { }, onDragMode: function SEDC_onDragMode(event) { - this.pointerHandler.updateFromEvent(event); - if (this.scrollController) - this.scrollController.updateFromPointerHandler(); - - if (this.dragHasStarted) { - var newCoordinates = this.ghostController.pointerHandler.getEventViewCoordinates(); - if (newCoordinates == null) { - if (this.ghostController.ghosts) { - this.ghostController.hideGhosts(); - } - this.leftPanelController.updateFromPointerHandler(); + this.pointerHandler.updateFromEvent(event); + if (this.scrollController) + this.scrollController.updateFromPointerHandler(); + + if (this.dragHasStarted) { + var newCoordinates = this.ghostController.pointerHandler.getEventViewCoordinates(); + if (newCoordinates == null) { + if (this.ghostController.ghosts) + this.ghostController.hideGhosts(); + this.leftPanelController.updateFromPointerHandler(); + } + else { + if (this.ghostController.ghosts == null) + this.ghostController.showGhosts(); + this.ghostController.updateFromPointerHandler(); + } } else { - if (this.ghostController.ghosts == null) { - this.ghostController.showGhosts(); - } - this.ghostController.updateFromPointerHandler(); - } - } - else { - var distance = this.pointerHandler.getDistance(); - if (distance > 3) { - $("eventDialog").hide(); - this.dragHasStarted = true; - if (this.eventCells) { - for (var i = 0; i < this.eventCells.length; i++) { - var currentCell = this.eventCells[i]; - currentCell.addClassName("dragging"); + var distance = this.pointerHandler.getDistance(); + if (distance > 3) { + $("eventDialog").hide(); + this.dragHasStarted = true; + if (this.eventCells) { + for (var i = 0; i < this.eventCells.length; i++) { + var currentCell = this.eventCells[i]; + currentCell.addClassName("dragging"); + } + } + this.ghostController.showGhosts(); + this.ghostController.updateFromPointerHandler(); } - } - this.ghostController.showGhosts(); - this.ghostController.updateFromPointerHandler(); } - } - Event.stop(event); + Event.stop(event); } }; diff --git a/UI/WebServerResources/event7.png b/UI/WebServerResources/event7.png new file mode 100644 index 000000000..3a9a8bd32 Binary files /dev/null and b/UI/WebServerResources/event7.png differ