From 26b3dfa6b0453e683ec74c3c54c223311e5f5bd0 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 7 Jun 2007 23:23:07 +0000 Subject: [PATCH] Monotone-Parent: caf1d2f37537ebf54064ae629c40a78656a15b5b Monotone-Revision: 01621f78171d7d62c9f2ae9d1fdfb5891f9447d7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-06-07T23:23:07 Monotone-Branch: ca.inverse.sogo --- UI/Templates/SchedulerUI/UIxCalMainView.wox | 25 ++- UI/WebServerResources/SchedulerUI.js | 223 +++++++++++++------- 2 files changed, 162 insertions(+), 86 deletions(-) diff --git a/UI/Templates/SchedulerUI/UIxCalMainView.wox b/UI/Templates/SchedulerUI/UIxCalMainView.wox index 6c075ace7..fe34f7e23 100644 --- a/UI/Templates/SchedulerUI/UIxCalMainView.wox +++ b/UI/Templates/SchedulerUI/UIxCalMainView.wox @@ -28,7 +28,7 @@ > - -
+
+ + +
-
+
+ + + + + + + +
+
diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index 25d9969e8..33842ca63 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -74,10 +74,10 @@ function editEvent() { for (var i = 0; i < nodes.length; i++) _editEventId(nodes[i].getAttribute("id"), - nodes[i].getAttribute("owner")); + nodes[i].owner); } else if (selectedCalendarCell) { _editEventId(selectedCalendarCell.getAttribute("aptCName"), - selectedCalendarCell.getAttribute("owner")); + selectedCalendarCell.owner); } return false; /* stop following the link */ @@ -102,7 +102,7 @@ function deleteEvent() { if (listOfSelection == $("tasksList")) label = labels["taskDeleteConfirmation"].decodeEntities(); else - label = labels["appointmentDeleteConfirmation"].decodeEntities(); + label = labels["eventDeleteConfirmation"].decodeEntities(); if (confirm(label)) { if (document.deleteEventAjaxRequest) { @@ -113,7 +113,7 @@ function deleteEvent() { var owners = new Array(); for (var i = 0; i < nodes.length; i++) { - var owner = nodes[i].getAttribute("owner"); + var owner = nodes[i].owner; if (!sortedNodes[owner]) { sortedNodes[owner] = new Array(); owners.push(owner); @@ -129,14 +129,14 @@ function deleteEvent() { } } else if (selectedCalendarCell) { - var label = labels["appointmentDeleteConfirmation"].decodeEntities(); + var label = labels["eventDeleteConfirmation"].decodeEntities(); if (confirm(label)) { if (document.deleteEventAjaxRequest) { document.deleteEventAjaxRequest.aborted = true; document.deleteEventAjaxRequest.abort(); } eventsToDelete.push([selectedCalendarCell.getAttribute("aptCName")]); - ownersOfEventsToDelete.push(selectedCalendarCell.getAttribute("owner")); + ownersOfEventsToDelete.push(selectedCalendarCell.owner); _batchDeleteEvents(); } } @@ -177,7 +177,7 @@ function modifyEventCallback(http) { if (queryParameters["mail-invitation"].toLowerCase() == "yes") closeInvitationWindow(); else { - window.opener.setTimeout("refreshAppointmentsAndDisplay();", 100); + window.opener.setTimeout("refreshEventsAndDisplay();", 100); window.setTimeout("window.close();", 100); } } @@ -202,7 +202,7 @@ function deleteEventCallback(http) { _batchDeleteEvents(); else { document.deleteEventAjaxRequest = null; - refreshAppointments(); + refreshEvents(); refreshTasks(); changeCalendarDisplay(); } @@ -213,21 +213,21 @@ function deleteEventCallback(http) { function editDoubleClickedEvent() { _editEventId(this.getAttribute("id"), - this.getAttribute("owner")); + this.owner); return false; } function onSelectAll() { - var list = $("appointmentsList"); - list.selectRowsMatchingClass("appointmentRow"); + var list = $("eventsList"); + list.selectRowsMatchingClass("eventRow"); return false; } -function displayAppointment(event) { +function displayEvent(event) { _editEventId(this.getAttribute("aptCName"), - this.getAttribute("owner")); + this.owner); preventDefault(event); event.stopPropagation(); @@ -253,7 +253,7 @@ function onDaySelect(node) { changeCalendarDisplay( { "day": day } ); if (needRefresh) - refreshAppointments(); + refreshEvents(); return false; } @@ -302,22 +302,62 @@ function dateSelectorCallback(http) { log ("dateSelectorCallback Ajax error"); } -function appointmentsListCallback(http) { - var div = $("appointmentsListView"); +function eventsListCallback(http) { + var div = $("eventsListView"); if (http.readyState == 4 && http.status == 200) { - document.appointmentsListAjaxRequest = null; - div.innerHTML = http.responseText; + document.eventsListAjaxRequest = null; + var table = $("eventsList").tBodies[0]; var params = parseQueryParameters(http.callbackData); sortKey = params["sort"]; sortOrder = params["desc"]; - var list = $("appointmentsList"); - Event.observe(list, "mousedown", onAppointmentsSelectionChange.bindAsEventListener(list), true); configureSortableTableHeaders(); + + var data = http.responseText.evalJSON(true); + for (var i = 0; i < data.length; i++) { + var row = document.createElement("tr"); + table.appendChild(row); + $(row).addClassName("eventRow"); + row.setAttribute("id", data[i][0]); + row.owner = data[i][1]; + + var startDate = new Date(); + startDate.setTime(data[i][4] * 1000); + row.day = startDate.getDayString(); + row.hour = startDate.getHourString(); + Event.observe(row, "click", onEventClick.bindAsEventListener(row)); + Event.observe(row, "dblclick", editDoubleClickedEvent.bindAsEventListener(row)); + Event.observe(row, "contextmenu", + onEventContextMenu.bindAsEventListener(row)); + + var td = document.createElement("td"); + row.appendChild(td); + Event.observe(td, "mousedown", + listRowMouseDownHandler.bindAsEventListener(td), true); + td.appendChild(document.createTextNode(data[i][3])); + + td = document.createElement("td"); + row.appendChild(td); + Event.observe(td, "mousedown", + listRowMouseDownHandler.bindAsEventListener(td), true); + td.appendChild(document.createTextNode(data[i][4])); + + td = document.createElement("td"); + row.appendChild(td); + Event.observe(td, "mousedown", + listRowMouseDownHandler.bindAsEventListener(td), true); + td.appendChild(document.createTextNode(data[i][5])); + + td = document.createElement("td"); + row.appendChild(td); + Event.observe(td, "mousedown", + listRowMouseDownHandler.bindAsEventListener(td), true); + td.appendChild(document.createTextNode(data[i][6])); + } } else - log ("appointmentsListCallback Ajax error"); + log ("eventsListCallback Ajax error"); } function tasksListCallback(http) { @@ -327,23 +367,20 @@ function tasksListCallback(http) { && http.status == 200) { document.tasksListAjaxRequest = null; var list = $("tasksList"); - var newList = document.createElement("ul"); - newList.setAttribute("multiselect", "yes"); - newList.setAttribute("id", "tasksList"); - var scroll = list.scrollTop; - var data = http.responseText.evalJSON(true); for (var i = 0; i < data.length; i++) { //log(i + " = " + data[i][3]); var listItem = document.createElement("li"); - newList.appendChild(listItem); + list.appendChild(listItem); Event.observe(listItem, "mousedown", listRowMouseDownHandler); Event.observe(listItem, "click", onRowClick); Event.observe(listItem, "dblclick", editDoubleClickedEvent.bindAsEventListener(listItem)); listItem.setAttribute("id", data[i][0]); - listItem.setAttribute("owner", data[i][1]); - $(listItem).addClassName(data[i][4]); + $(listItem).addClassName(data[i][5]); + var owner = data[i][1]; + listItem.owner = owner; + $(listItem).addClassName("ownerIs" + owner); var input = document.createElement("input"); input.setAttribute("type", "checkbox"); listItem.appendChild(input); @@ -355,10 +392,7 @@ function tasksListCallback(http) { listItem.appendChild(document.createTextNode(data[i][3])); } - Event.observe(newList, "mousedown", onTasksSelectionChange.bindAsEventListener(newList), true); - newList.scrollTop = scroll; - - list.parentNode.replaceChild(newList, list); + list.scrollTop = list.previousScroll; if (http.callbackData) { var selectedNodesId = http.callbackData; @@ -533,11 +567,11 @@ function calendarDisplayCallback(http) { scrollDayView(hour); contentView = $("daysView"); } - var appointments = document.getElementsByClassName("appointment", contentView); - for (var i = 0; i < appointments.length; i++) { - Event.observe(appointments[i], "mousedown", listRowMouseDownHandler); - Event.observe(appointments[i], "click", onCalendarSelectAppointment.bindAsEventListener(appointments[i])); - Event.observe(appointments[i], "dblclick", displayAppointment.bindAsEventListener(appointments[i])); + var events = document.getElementsByClassName("event", contentView); + for (var i = 0; i < events.length; i++) { + Event.observe(events[i], "mousedown", listRowMouseDownHandler); + Event.observe(events[i], "click", onCalendarSelectEvent.bindAsEventListener(events[i])); + Event.observe(events[i], "dblclick", displayEvent.bindAsEventListener(events[i])); } var days = document.getElementsByClassName("day", contentView); if (currentView == "monthview") @@ -578,27 +612,27 @@ function popupCalendar(node) { return false; } -function onAppointmentContextMenu(event, element) { - var topNode = $("appointmentsList"); +function onEventContextMenu(event) { + var topNode = $("eventsList"); // log(topNode); - var menu = $("appointmentsListMenu"); + var menu = $("eventsListMenu"); - Event.observe(menu, "hideMenu", onAppointmentContextMenuHide); - popupMenu(event, "appointmentsListMenu", element); + Event.observe(menu, "hideMenu", onEventContextMenuHide); + popupMenu(event, "eventsListMenu", this); - var topNode = $("appointmentsList"); + var topNode = $("eventsList"); var selectedNodes = topNode.getSelectedRows(); topNode.menuSelectedRows = selectedNodes; for (var i = 0; i < selectedNodes.length; i++) selectedNodes[i].deselect(); - topNode.menuSelectedEntry = element; - element.select(); + topNode.menuSelectedEntry = this; + this.select(); } -function onAppointmentContextMenuHide(event) { - var topNode = $("appointmentsList"); +function onEventContextMenuHide(event) { + var topNode = $("eventsList"); if (topNode.menuSelectedEntry) { topNode.menuSelectedEntry.deselect(); @@ -614,7 +648,7 @@ function onAppointmentContextMenuHide(event) { } } -function onAppointmentsSelectionChange() { +function onEventsSelectionChange() { listOfSelection = this; this.removeClassName("_unfocused"); $("tasksList").addClassName("_unfocused"); @@ -623,17 +657,21 @@ function onAppointmentsSelectionChange() { function onTasksSelectionChange() { listOfSelection = this; this.removeClassName("_unfocused"); - $("appointmentsList").addClassName("_unfocused"); + $("eventsList").addClassName("_unfocused"); } -function _loadAppointmentHref(href) { - if (document.appointmentsListAjaxRequest) { - document.appointmentsListAjaxRequest.aborted = true; - document.appointmentsListAjaxRequest.abort(); +function _loadEventHref(href) { + if (document.eventsListAjaxRequest) { + document.eventsListAjaxRequest.aborted = true; + document.eventsListAjaxRequest.abort(); } var url = ApplicationBaseURL + href; - document.appointmentsListAjaxRequest - = triggerAjaxRequest(url, appointmentsListCallback, href); + document.eventsListAjaxRequest + = triggerAjaxRequest(url, eventsListCallback, href); + + var table = $("eventsList").tBodies[0]; + while (table.rows.length > 1) + table.removeChild(table.rows[1]); return false; } @@ -645,33 +683,42 @@ function _loadTasksHref(href) { } url = ApplicationBaseURL + href; - var selectedIds = $("tasksList").getSelectedNodesId(); + var tasksList = $("tasksList"); + var selectedIds; + if (tasksList) + selectedIds = tasksList.getSelectedNodesId(); + else + selectedIds = null; document.tasksListAjaxRequest = triggerAjaxRequest(url, tasksListCallback, selectedIds); + tasksList.previousScroll = tasksList.scrollTop; + while (tasksList.childNodes.length) + tasksList.removeChild(tasksList.childNodes[0]); + return true; } function onHeaderClick(event) { // log("onHeaderClick: " + this.link); - _loadAppointmentHref(this.link); + _loadEventHref(this.link); preventDefault(event); } -function refreshAppointments() { - return _loadAppointmentHref("aptlist?desc=" + sortOrder - + "&sort=" + sortKey - + "&day=" + currentDay - + "&filterpopup=" + listFilter); +function refreshEvents() { + return _loadEventHref("eventslist?desc=" + sortOrder + + "&sort=" + sortKey + + "&day=" + currentDay + + "&filterpopup=" + listFilter); } function refreshTasks() { return _loadTasksHref("taskslist?show-completed=" + showCompletedTasks); } -function refreshAppointmentsAndDisplay() { - refreshAppointments(); +function refreshEventsAndDisplay() { + refreshEvents(); changeCalendarDisplay(); } @@ -681,10 +728,10 @@ function onListFilterChange() { listFilter = node.value; // log ("listFilter = " + listFilter); - return refreshAppointments(); + return refreshEvents(); } -function onAppointmentClick(event) { +function onEventClick(event) { var target = getTarget(event); var node = target.getParentWithTagName("tr"); var day = node.getAttribute("day"); @@ -771,8 +818,8 @@ function onSearchFormSubmit() { return false; } -function onCalendarSelectAppointment() { - var list = $("appointmentsList"); +function onCalendarSelectEvent() { + var list = $("eventsList"); list.deselectAll(); var aptCName = this.getAttribute("aptCName"); @@ -809,7 +856,7 @@ function onCalendarSelectDay(event) { } if (needRefresh) - refreshAppointments(); + refreshEvents(); } function changeWeekCalendarDisplayOfSelectedDay(node) { @@ -849,15 +896,15 @@ function changeMonthCalendarDisplayOfSelectedDay(node) { node.addClassName("selectedDay"); } -function onShowCompletedTasks(node) { - showCompletedTasks = (node.checked ? 1 : 0); +function onShowCompletedTasks(event) { + showCompletedTasks = (this.checked ? 1 : 0); - return refreshTasks(); + return refreshTasks(); } function updateTaskStatus(event) { var taskId = this.parentNode.getAttribute("id"); - var taskOwner = this.parentNode.getAttribute("owner"); + var taskOwner = this.parentNode.owner; var newStatus = (this.checked ? 1 : 0); var http = createHTTPClient(); @@ -917,7 +964,7 @@ function updateCalendarStatus(event) { } else { updateCalendarsList(); - refreshAppointments(); + refreshEvents(); refreshTasks(); changeCalendarDisplay(); } @@ -928,7 +975,7 @@ function updateCalendarStatus(event) { function calendarStatusCallback(http) { if (http.readyState == 4) { if (http.status == 204) { // No content - refreshAppointments(); + refreshEvents(); refreshTasks(); changeCalendarDisplay(); } @@ -1018,7 +1065,7 @@ function getMenus() { dateMenu.push(onYearMenuItemClick); menus["yearListMenu"] = dateMenu; - menus["appointmentsListMenu"] = new Array(onMenuNewEventClick, "-", + menus["eventsListMenu"] = new Array(onMenuNewEventClick, "-", onMenuNewTaskClick, editEvent, deleteEvent, "-", onSelectAll, "-", @@ -1054,7 +1101,7 @@ function configureDragHandles() { handle = $("rightDragHandle"); if (handle) { handle.addInterface(SOGoDragHandlesInterface); - handle.upperBlock=$("appointmentsListView"); + handle.upperBlock=$("eventsListView"); handle.lowerBlock=$("calendarView"); } } @@ -1161,10 +1208,30 @@ function configureSearchField() { Event.observe(searchValue, "keydown", onSearchKeyDown.bindAsEventListener(searchValue)); } +function configureLists() { + var list = $("tasksList"); + list.multiselect = true; + Event.observe(list, "mousedown", + onTasksSelectionChange.bindAsEventListener(list)); + + var input = $("showHideCompletedTasks"); + Event.observe(input, "change", + onShowCompletedTasks.bindAsEventListener(input)); + + list = $("eventsList"); + list.multiselect = true; + Event.observe(list, "mousedown", + onEventsSelectionChange.bindAsEventListener(list)); + var div = list.parentNode; + Event.observe(div, "contextmenu", + onEventContextMenu.bindAsEventListener(div)); +} + function initCalendars() { if (!document.body.hasClassName("popup")) { initCalendarSelector(); configureSearchField(); + configureLists(); var selector = $("calendarSelector"); if (selector) selector.attachMenu("calendarsMenu");