]> err.no Git - scalable-opengroupware.org/blobdiff - UI/WebServerResources/SchedulerUI.js
Install libs to /usr/lib
[scalable-opengroupware.org] / UI / WebServerResources / SchedulerUI.js
index da4c678d8138d947f0ee0475b744e2e8d1897cb2..012688b25f724c8a2993891a7d1335f284a57d35 100644 (file)
@@ -1,7 +1,5 @@
 /* JavaScript for SOGoCalendar */
 
-var sortOrder = '';
-var sortKey = '';
 var listFilter = 'view_today';
 
 var listOfSelection = null;
@@ -74,7 +72,8 @@ function _editEventId(id, calendar) {
   var targetname = "SOGo_edit_" + id;
   var win = window.open(urlstr, "_blank",
                         "width=490,height=470,resizable=0");
-  win.focus();
+  if (win)
+    win.focus();
 }
 
 function editEvent() {
@@ -217,19 +216,25 @@ function modifyEventCallback(http) {
 function deleteEventCallback(http) {
   if (http.readyState == 4) {
     if (isHttpStatus204(http.status)) {
+      var isTask = false;
       var nodes = http.callbackData;
       for (var i = 0; i < nodes.length; i++) {
        var node = $(nodes[i]);
-       if (node)
+       if (node) {
+         isTask = isTask || (node.parentNode.id == 'tasksList');
          node.parentNode.removeChild(node);
+       }
       }
       if (eventsToDelete.length)
        _batchDeleteEvents();
       else {
        document.deleteEventAjaxRequest = null;
-       refreshEvents();
-       refreshTasks();
-       changeCalendarDisplay();
+       if (isTask)
+         refreshTasks();
+       else {
+         refreshEvents();
+         changeCalendarDisplay();
+       }
       }
     }
     else
@@ -268,6 +273,7 @@ function onDaySelect(node) {
   document.selectedDate = td;
 
   changeCalendarDisplay( { "day": day } );
+  currentDay = day;
   if (needRefresh)
     refreshEvents();
 
@@ -284,9 +290,13 @@ function onDateSelectorGotoMonth(event) {
 
 function onCalendarGotoDay(node) {
    var day = node.getAttribute("date");
+   var needRefresh = (listFilter == 'view_selectedday'
+                     && day != currentDay);
    
    changeDateSelectorDisplay(day);
    changeCalendarDisplay( { "day": day } );
+   if (needRefresh)
+     refreshEvents();
   
    return false;
 }
@@ -327,9 +337,6 @@ function eventsListCallback(http) {
 
     document.eventsListAjaxRequest = null;
     var table = $("eventsList");
-    var params = parseQueryParameters(http.callbackData);
-    sortKey = params["sort"];
-    sortOrder = params["desc"];
     lastClickedRow = -1; // from generic.js
 
     if (http.responseText.length > 0) {
@@ -346,8 +353,8 @@ function eventsListCallback(http) {
        startDate.setTime(data[i][4] * 1000);
        row.day = startDate.getDayString();
        row.hour = startDate.getHourString();
-       Event.observe(row, "click",
-                     onEventClick.bindAsEventListener(row));
+       Event.observe(row, "mousedown", onRowClick);
+       Event.observe(row, "selectstart", listRowMouseDownHandler);
        Event.observe(row, "dblclick",
                      editDoubleClickedEvent.bindAsEventListener(row));
        Event.observe(row, "contextmenu",
@@ -361,18 +368,36 @@ function eventsListCallback(http) {
        td = document.createElement("td");
        row.appendChild(td);
        Event.observe(td, "mousedown", listRowMouseDownHandler, true);
-       td.appendChild(document.createTextNode(data[i][9]));
+       td.appendChild(document.createTextNode(data[i][10]));
 
        td = document.createElement("td");
        row.appendChild(td);
        Event.observe(td, "mousedown", listRowMouseDownHandler, true);
-       td.appendChild(document.createTextNode(data[i][10]));
+       td.appendChild(document.createTextNode(data[i][11]));
       
        td = document.createElement("td");
        row.appendChild(td);
        Event.observe(td, "mousedown", listRowMouseDownHandler, true);
        td.appendChild(document.createTextNode(data[i][6]));
       }
+
+      if (sorting["attribute"] && sorting["attribute"].length > 0) {
+       var sortHeader = $(sorting["attribute"] + "Header");
+      
+       if (sortHeader) {
+         var sortImages = $(table.tHead).getElementsByClassName("sortImage");
+         $(sortImages).each(function(item) {
+             item.remove();
+           });
+
+         var sortImage = createElement("img", "messageSortImage", "sortImage");
+         sortHeader.insertBefore(sortImage, sortHeader.firstChild);
+         if (sorting["ascending"])
+           sortImage.src = ResourcesURL + "/title_sortdown_12x12.png";
+         else
+           sortImage.src = ResourcesURL + "/title_sortup_12x12.png";
+       }
+      }
     }
   }
   else
@@ -391,7 +416,6 @@ function tasksListCallback(http) {
       var data = http.responseText.evalJSON(true);
 
       for (var i = 0; i < data.length; i++) {
-       //log(i + " = " + data[i][3]);
        var listItem = document.createElement("li");
        list.appendChild(listItem);
        Event.observe(listItem, "mousedown", listRowMouseDownHandler);
@@ -400,6 +424,7 @@ function tasksListCallback(http) {
                      editDoubleClickedEvent.bindAsEventListener(listItem));
        listItem.setAttribute("id", data[i][0]);
        $(listItem).addClassName(data[i][5]);
+       $(listItem).addClassName(data[i][6]);
        listItem.calendar = data[i][1];
        $(listItem).addClassName("calendarFolder" + data[i][1]);
        listItem.cname = escape(data[i][0]);
@@ -746,6 +771,8 @@ function drawCalendarEvent(eventData, sd, ed) {
                                    null, null, title);
         siblings.push(eventDiv);
         eventDiv.siblings = siblings;
+        if (eventData[9].length > 0)
+          eventDiv.addClassName(eventData[9]);
         var dayString = days[i].getDayString();
 //      log("day: " + dayString);
         var parentDiv = null;
@@ -919,21 +946,10 @@ function popupCalendar(node) {
 
 function onEventContextMenu(event) {
   var topNode = $("eventsList");
-//   log(topNode);
-
   var menu = $("eventsListMenu");
 
   Event.observe(menu, "hideMenu",  onEventContextMenuHide);
   popupMenu(event, "eventsListMenu", this);
-
-  var topNode = $("eventsList");
-  var selectedNodes = topNode.getSelectedRows();
-  topNode.menuSelectedRows = selectedNodes;
-  for (var i = 0; i < selectedNodes.length; i++)
-    selectedNodes[i].deselect();
-
-  topNode.menuSelectedEntry = this;
-  this.select();
 }
 
 function onEventContextMenuHide(event) {
@@ -943,20 +959,20 @@ function onEventContextMenuHide(event) {
     topNode.menuSelectedEntry.deselect();
     topNode.menuSelectedEntry = null;
   }
-  if (topNode.menuSelectedRows) {
-    var nodeIds = topNode.menuSelectedRows;
-    for (var i = 0; i < nodeIds.length; i++) {
-      var node = $(nodeIds[i]);
-      node.select();
-    }
-    topNode.menuSelectedRows = null;
-  }
 }
 
 function onEventsSelectionChange() {
   listOfSelection = this;
   this.removeClassName("_unfocused");
   $("tasksList").addClassName("_unfocused");
+
+  var rows = this.tBodies[0].getSelectedNodes();
+  if (rows.length == 1) {
+    var row = rows[0];
+    changeCalendarDisplay( { "day": row.day,
+         "scrollEvent": row.getAttribute("id") } );
+    changeDateSelectorDisplay(row.day);
+  }
 }
 
 function onTasksSelectionChange() {
@@ -1005,10 +1021,28 @@ function _loadTasksHref(href) {
 }
 
 function onHeaderClick(event) {
-  //log("onHeaderClick: " + this.link);
-  //_loadEventHref(this.link);
+   var headerId = this.getAttribute("id");
+  var newSortAttribute;
+  if (headerId == "titleHeader")
+    newSortAttribute = "title";
+  else if (headerId == "startHeader")
+    newSortAttribute = "start";
+  else if (headerId == "endHeader")
+    newSortAttribute = "end";
+  else if (headerId == "locationHeader")
+    newSortAttribute = "location";
+  else
+    newSortAttribute = "start";
+  
+   if (sorting["attribute"] == newSortAttribute)
+    sorting["ascending"] = !sorting["ascending"];
+  else {
+    sorting["attribute"] = newSortAttribute;
+    sorting["ascending"] = true;
+  }
+   refreshEvents();
 
-  preventDefault(event);
+  Event.stop(event);
 }
 
 function refreshCurrentFolder() {
@@ -1022,9 +1056,9 @@ function refreshEvents() {
     titleSearch = "&search=" + value;
   else
     titleSearch = "";
-
-  return _loadEventHref("eventslist?desc=" + sortOrder
-                       + "&sort=" + sortKey
+  return _loadEventHref("eventslist?asc=" + sorting["ascending"]
+                       + "&sort=" + sorting["attribute"]
                        + "&day=" + currentDay
                        + titleSearch
                        + "&filterpopup=" + listFilter);
@@ -1048,14 +1082,6 @@ function onListFilterChange() {
   return refreshEvents();
 }
 
-function onEventClick(event) {
-  changeCalendarDisplay( { "day": this.day,
-       "scrollEvent": this.getAttribute("id") } );
-  changeDateSelectorDisplay(this.day);
-  
-  return onRowClick(event);
-}
-
 function selectMonthInMenu(menu, month) {
    var entries = menu.childNodes[1].childNodesWithTag("LI");
    for (i = 0; i < entries.length; i++) {
@@ -1535,25 +1561,13 @@ function appendCalendar(folderName, folderPath) {
     window.alert(clabels["You have already subscribed to that folder!"]);
   else {
     var calendarList = $("calendarList");
-    var lis = calendarList.childNodesWithTag("li");
+    var items = calendarList.childNodesWithTag("li");
     var li = document.createElement("li");
     
     // Add the calendar to the proper place
-    var previousOwner = null;
-    for (var i = 0; i < lis.length; i++) {
-      var currentFolderName = lis[i].lastChild.nodeValue.strip();
-      var currentOwner = lis[i].readAttribute('owner');
-      if (currentOwner == owner) {
-       previousOwner = currentOwner;
-       if (currentFolderName > folderName)
-         break;
-      }
-      else if (previousOwner || 
-              (currentOwner != UserLogin && currentOwner > owner))
-       break;
-    }
-    if (i != lis.length) // User is subscribed to other calendars of the same owner
-      calendarList.insertBefore(li, lis[i]);
+    var i = getListIndexForFolder(items, owner, folderName);
+    if (i != items.length) // User is subscribed to other calendars of the same owner
+      calendarList.insertBefore(li, items[i]);
     else 
       calendarList.appendChild(li);
     
@@ -1562,7 +1576,7 @@ function appendCalendar(folderName, folderPath) {
 
     // Generate new color
     if (calendarColorIndex == null)
-      calendarColorIndex = lis.length;
+      calendarColorIndex = items.length;
     calendarColorIndex++;
     var colorTable = [1, 1, 1];
     var color;
@@ -1591,6 +1605,8 @@ function appendCalendar(folderName, folderPath) {
     li.appendChild(checkBox);
     li.appendChild(document.createTextNode(" "));
     $(checkBox).addClassName("checkBox");
+    if (owner == UserLogin)
+      checkBox.checked = 1;
 
     var colorBox = document.createElement("div");
     li.appendChild(colorBox);
@@ -1717,13 +1733,10 @@ function configureLists() {
 
    list = $("eventsList");
    list.multiselect = true;
-   //configureSortableTableHeaders(list);
+   configureSortableTableHeaders(list);
    TableKit.Resizable.init(list, {'trueResize' : true, 'keepWidth' : true});
    Event.observe(list, "mousedown",
                 onEventsSelectionChange.bindAsEventListener(list));
-   var div = list.parentNode;
-   Event.observe(div, "contextmenu",
-                onEventContextMenu.bindAsEventListener(div));
 }
 
 function initDateSelectorEvents() {
@@ -1743,6 +1756,9 @@ function initDateSelectorEvents() {
 }
 
 function initCalendars() {
+   sorting["attribute"] = "start";
+   sorting["ascending"] = true;
+  
    if (!document.body.hasClassName("popup")) {
       initDateSelectorEvents();
       initCalendarSelector();