mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 02:47:31 +09:00
142 lines
4.3 KiB
JavaScript
142 lines
4.3 KiB
JavaScript
/* -*- 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);
|
|
}
|