]> err.no Git - scalable-opengroupware.org/blobdiff - UI/WebServerResources/ContactsUI.js
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1267 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / WebServerResources / ContactsUI.js
index 2b58fa4cc29d1cb6b996bd4563e48cba4e945d73..42ced264f9b9188f3bcd351c78069391f5591a4d 100644 (file)
@@ -2,7 +2,6 @@
 
 var cachedContacts = new Array();
 var currentContactFolder = null;
-var savedColumnsWidth = null;
 
 var usersRightsWindowHeight = 200;
 var usersRightsWindowWidth = 450;
@@ -15,7 +14,7 @@ function validateEditorInput(sender) {
   if (field.value == "")
     errortext = errortext + labels.error_missingsubject + "\n";
 
-  if (!UIxRecipientSelectorHasRecipients())
+  if (!hasRecipients())
     errortext = errortext + labels.error_missingrecipients + "\n";
   
   if (errortext.length > 0) {
@@ -47,8 +46,8 @@ function openContactsFolder(contactsFolder, reload, idx) {
         var contactsList = $("contactsList");
         if (contactsList)
            selection = contactsList.getSelectedRowsId();
-        else
-           window.alert("no contactsList");
+//        else
+//           window.alert("no contactsList");
      }
      else
        selection = null;
@@ -74,33 +73,30 @@ function openContactsFolderAtIndex(element) {
     = triggerAjaxRequest(url, contactsListCallback);
 }
 
-function configureContactsListHeaders(cells) {
-   for (var i = 0; i < cells.length; i++) {
-      var currentCell = $(cells[i]);
-      Event.observe(currentCell, "click",
-                   onHeaderClick.bindAsEventListener(currentCell));
-      //Event.observe(currentCell, "mousedown", listRowMouseDownHandler);
-   }
-}
-
 function contactsListCallback(http) {
-  var div = $("contactsListContent");
-
   if (http.readyState == 4
       && http.status == 200) {
     document.contactsListAjaxRequest = null;
-    div.update(http.responseText);
 
     var table = $("contactsList");
     if (table) {
-       TableKit.Resizable.init(table);
-       if (savedColumnsWidth != null) {
-        // Restore columns width
-        table.setColumnsWidth(savedColumnsWidth);
-       }
-       configureContactsListHeaders(table.tBodies[0].rows[0].cells);
+      // Update table
+      var data = http.responseText;
+      var html = data.replace(/^(.*\n)*.*(<table(.*\n)*)$/, "$2");
+      var tbody = table.tBodies[0]; 
+      var tmp = document.createElement('div');
+      $(tmp).update(html);
+      table.replaceChild(tmp.firstChild.tBodies[0], tbody);
     }
-
+    else {
+      // Add table (doesn't happen .. yet)
+      var div = $("contactsListContent");
+      div.update(http.responseText);
+      table = $("contactsList");
+      configureSortableTableHeaders(table);
+      TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
+    }
+    
     if (sorting["attribute"] && sorting["attribute"].length > 0) {
        var sortHeader;
        if (sorting["attribute"] == "displayName")
@@ -117,6 +113,11 @@ function contactsListCallback(http) {
          sortHeader = null;
        
        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"])
@@ -300,7 +301,7 @@ function onMenuWriteToContact(event) {
    var emailCell = contactRow.down('td', 1);
 
    if (!emailCell.firstChild) { // .nodeValue is the contact email address
-     window.alert(labels["The selected contact has no email address."].decodeEntities());
+     window.alert(labels["The selected contact has no email address."]);
      return false;
    }
 
@@ -332,6 +333,9 @@ function onToolbarWriteToSelectedContacts(event) {
   var rows = contactsList.getSelectedRowsId();
   var rowsWithEmail = 0;
 
+  if (rows.length == 0)
+    return false;
+
   for (var i = 0; i < rows.length; i++) {
     var emailCell = $(rows[i]).down('td', 1);
     if (emailCell.firstChild) { // .nodeValue is the contact email address
@@ -340,9 +344,9 @@ function onToolbarWriteToSelectedContacts(event) {
                            + "/" + rows[i] + "/write");
     }
   }
-  
+
   if (rowsWithEmail == 0) {
-    window.alert(labels["The selected contact has no email address."].decodeEntities());
+    window.alert(labels["The selected contact has no email address."]);
   }
   else if (document.body.hasClassName("popup"))
     window.close();
@@ -418,10 +422,9 @@ function onHeaderClick(event) {
       sorting["ascending"] = true;
    }
 
-   savedColumnsWidth = this.up('table').getColumnsWidth();
    refreshCurrentFolder();
 
-   preventDefault(event);
+   Event.stop(event);
 }
 
 function newContact(sender) {
@@ -437,7 +440,7 @@ function onFolderSelectionChange() {
   
    if (nodes[0].hasClassName("denied")) {
       var div = $("contactsListContent");
-      div.innerHTML = "";
+      div.update();
    }
    else {
       search = {};
@@ -630,7 +633,6 @@ function lookupDeniedFolders() {
   for (var i = 0; i < list.length; i++) {
      var folderID = list[i].getAttribute("id");
      var url = URLForFolderID(folderID) + "/canAccessContent";
-     
      triggerAjaxRequest(url, deniedFoldersLookupCallback, folderID);
   }
 }
@@ -707,12 +709,36 @@ function folderRenameCallback(http) {
 }
 
 function onMenuSharing(event) {
+  if ($(this).hasClassName("disabled"))
+    return;
+
    var folders = $("contactFolders");
    var selected = folders.getSelectedNodes()[0];
-   var title = this.innerHTML;
-   var url = URLForFolderID(selected.getAttribute("id"));
+   var owner = selected.getAttribute("owner");
+   if (owner == "nobody")
+     window.alert(clabels["The user rights cannot be"
+                         + " edited for this object!"]);
+   else {
+     var title = this.innerHTML;
+     var url = URLForFolderID(selected.getAttribute("id"));
 
-   openAclWindow(url + "/acls", title);
+     openAclWindow(url + "/acls", title);
+   }
+}
+
+function onContactFoldersMenuPrepareVisibility() {
+  var folders = $("contactFolders");
+  var selected = folders.getSelectedNodes();  
+
+  if (selected.length > 0) {
+    var folderOwner = selected[0].getAttribute("owner");
+    var sharingOption = $(this).down("ul").childElements().last();
+    // Disable the "Sharing" option when address book is not owned by user
+    if (folderOwner == UserLogin || IsSuperUser)
+      sharingOption.removeClassName("disabled");
+    else
+      sharingOption.addClassName("disabled");
+  }
 }
 
 function getMenus() {
@@ -724,7 +750,11 @@ function getMenus() {
                                    onMenuWriteToContact, null, "-",
                                    onMenuDeleteContact);
    menus["searchMenu"] = new Array(setSearchCriteria);
-
+   
+   var contactFoldersMenu = $("contactFoldersMenu");
+   if (contactFoldersMenu)
+     contactFoldersMenu.prepareVisibility = onContactFoldersMenuPrepareVisibility;
+   
    return menus;
 }
 
@@ -746,6 +776,14 @@ function initContacts(event) {
      configureSelectionButtons();
    configureContactFolders();
 //     initDnd();
+
+   var table = $("contactsList");
+   if (table) {
+     // Initialize contacts table
+     table.multiselect = true;
+     configureSortableTableHeaders(table);
+     TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
+   }
 }
 
-addEvent(window, 'load', initContacts);
+FastInit.addOnLoad(initContacts);