diff options
Diffstat (limited to 'mailnews/addrbook/prefs/content/pref-editdirectories.js')
-rw-r--r-- | mailnews/addrbook/prefs/content/pref-editdirectories.js | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/mailnews/addrbook/prefs/content/pref-editdirectories.js b/mailnews/addrbook/prefs/content/pref-editdirectories.js new file mode 100644 index 0000000000..dfb3e05590 --- /dev/null +++ b/mailnews/addrbook/prefs/content/pref-editdirectories.js @@ -0,0 +1,142 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +Components.utils.import("resource://gre/modules/Services.jsm"); +Components.utils.import("resource:///modules/mailServices.js"); + +// Listener to refresh the list items if something changes. In all these +// cases we just rebuild the list as it is easier than searching/adding in the +// correct places an would be an infrequent operation. +var gAddressBookAbListener = { + onItemAdded: function(parentDir, item) { + if (item instanceof Components.interfaces.nsIAbDirectory) { + fillDirectoryList(); + } + }, + onItemRemoved: function(parentDir, item) { + if (item instanceof Components.interfaces.nsIAbDirectory) { + fillDirectoryList(); + } + }, + onItemPropertyChanged: function(item, property, oldValue, newValue) { + if (item instanceof Components.interfaces.nsIAbDirectory) { + fillDirectoryList(); + } + } +}; + +function onInitEditDirectories() +{ + // For AbDeleteDirectory in abCommon.js + gAddressBookBundle = document.getElementById("bundle_addressBook"); + + // If the pref is locked disable the "Add" button + if (Services.prefs.prefIsLocked("ldap_2.disable_button_add")) + document.getElementById("addButton").setAttribute('disabled', true); + + // Fill out the directory list + fillDirectoryList(); + + const nsIAbListener = Components.interfaces.nsIAbListener; + // Add a listener so we can update correctly if the list should change + MailServices.ab.addAddressBookListener(gAddressBookAbListener, + nsIAbListener.itemAdded | + nsIAbListener.directoryRemoved | + nsIAbListener.itemChanged); +} + +function onUninitEditDirectories() +{ + MailServices.ab.removeAddressBookListener(gAddressBookAbListener); +} + +function fillDirectoryList() +{ + var abList = document.getElementById("directoriesList"); + + // Empty out anything in the list + while (abList.hasChildNodes()) + abList.lastChild.remove(); + + // Init the address book list + let directories = MailServices.ab.directories; + let holdingArray = []; + while (directories && directories.hasMoreElements()) { + let ab = directories.getNext(); + if (ab instanceof Components.interfaces.nsIAbDirectory && ab.isRemote) + holdingArray.push(ab); + } + + holdingArray.sort(function (a, b) { return a.dirName.localeCompare(b.dirName); }); + + holdingArray.forEach(function (ab) { + var item = document.createElement('listitem'); + item.setAttribute("label", ab.dirName); + item.setAttribute("value", ab.URI); + + abList.appendChild(item); + }); +} + +function selectDirectory() +{ + var abList = document.getElementById("directoriesList"); + var editButton = document.getElementById("editButton"); + var removeButton = document.getElementById("removeButton"); + + if (abList && abList.selectedItem) { + editButton.removeAttribute("disabled"); + + // If the disable delete button pref for the selected directory is set, + // disable the delete button for that directory. + let disable = false; + let ab = MailServices.ab.getDirectory(abList.value); + try { + disable = Services.prefs.getBoolPref(ab.dirPrefId + ".disable_delete"); + } + catch(ex){ + // If this preference is not set, it's ok. + } + if (disable) + removeButton.setAttribute("disabled", true); + else + removeButton.removeAttribute("disabled"); + } + else { + editButton.setAttribute("disabled", true); + removeButton.setAttribute("disabled", true); + } +} + +function dblClickDirectory(event) +{ + // We only care about left click events. + if (event.button != 0) + return; + + editDirectory(); +} + +function editDirectory() +{ + var abList = document.getElementById("directoriesList"); + + if (abList && abList.selectedItem) { + let abURI = abList.value; + let ab = MailServices.ab.getDirectory(abURI); + + window.openDialog(ab.propertiesChromeURI, "editDirectory", + "chrome,modal=yes,resizable=no", + { selectedDirectory: ab }); + } +} + +function removeDirectory() +{ + var abList = document.getElementById("directoriesList"); + + if (abList && abList.selectedItem) + AbDeleteDirectory(abList.value); +} |