]> err.no Git - scalable-opengroupware.org/blobdiff - UI/WebServerResources/SchedulerUI.js
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1294 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / WebServerResources / SchedulerUI.js
index 32ea684afbbadd260c88a731fa105860a5e44a95..8dd803d1062cce318802928183e1ca329c034d6e 100644 (file)
@@ -1,7 +1,5 @@
 /* JavaScript for SOGoCalendar */
 
-var sortOrder = '';
-var sortKey = '';
 var listFilter = 'view_today';
 
 var listOfSelection = null;
@@ -24,16 +22,13 @@ var usersRightsWindowHeight = 250;
 var usersRightsWindowWidth = 502;
 
 function newEvent(sender, type) {
-   var day = sender.day;
+   var day = sender.readAttribute("day");
    if (!day)
       day = currentDay;
-
-   var hour = sender.hour;
-   if (!hour)
-      hour = sender.getAttribute("hour");
+   var hour = sender.readAttribute("hour");
    var folder = getSelectedFolder();
-   var folderID = folder.getAttribute("id");
-   var roles = folder.getAttribute("roles");
+   var folderID = folder.readAttribute("id");
+   var roles = folder.readAttribute("roles");
    if (roles) {
      roles = roles.split(",")
        if ($(roles).indexOf("PublicModifier") < 0)
@@ -47,7 +42,6 @@ function newEvent(sender, type) {
       params.push("hm=" + hour);
    if (params.length > 0)
       urlstr += "?" + params.join("&");
-   
    window.open(urlstr, "", "width=490,height=470,resizable=0");
    
    return false; /* stop following the link */
@@ -78,19 +72,27 @@ 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() {
   if (listOfSelection) {
     var nodes = listOfSelection.getSelectedRows();
 
+    if (nodes.length == 0) {
+      window.alert(labels["Please select an event or a task."]);
+      return false;
+    }
+
     for (var i = 0; i < nodes.length; i++)
       _editEventId(nodes[i].getAttribute("id"),
                    nodes[i].calendar);
   } else if (selectedCalendarCell) {
-      _editEventId(selectedCalendarCell[0].cname,
-                   selectedCalendarCell[0].calendar);
+    _editEventId(selectedCalendarCell[0].cname,
+                 selectedCalendarCell[0].calendar);
+  } else {
+    window.alert(labels["Please select an event or a task."]);
   }
 
   return false; /* stop following the link */
@@ -139,6 +141,8 @@ function deleteEvent() {
         }
         _batchDeleteEvents();
       }
+    } else {
+      window.alert(labels["Please select an event or a task."]);
     }
   }
   else if (selectedCalendarCell) {
@@ -154,7 +158,7 @@ function deleteEvent() {
      }
   }
   else
-    window.alert("no selection");
+    window.alert(labels["Please select an event or a task."]);
 
   return false;
 }
@@ -322,9 +326,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) {
@@ -341,8 +342,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",
@@ -368,6 +369,24 @@ function eventsListCallback(http) {
        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
@@ -386,7 +405,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);
@@ -395,6 +413,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]);
@@ -905,7 +924,7 @@ function assignCalendar(name) {
 }
 
 function popupCalendar(node) {
-   var nodeId = node.getAttribute("inputId");
+   var nodeId = $(node).readAttribute("inputId");
    var input = $(nodeId);
    input.calendar.popup();
 
@@ -914,21 +933,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) {
@@ -938,20 +946,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() {
@@ -1000,10 +1008,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() {
@@ -1017,9 +1043,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);
@@ -1043,14 +1069,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++) {
@@ -1530,25 +1548,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);
     
@@ -1557,7 +1563,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;
@@ -1712,13 +1718,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() {
@@ -1738,6 +1741,9 @@ function initDateSelectorEvents() {
 }
 
 function initCalendars() {
+   sorting["attribute"] = "start";
+   sorting["ascending"] = true;
+  
    if (!document.body.hasClassName("popup")) {
       initDateSelectorEvents();
       initCalendarSelector();