mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 09:57:32 +09:00
Issue #1258 - Part 1: Import mailnews, ldap, and mork from comm-esr52.9.1
This commit is contained in:
parent
23e0d82436
commit
e400f4130a
1564 changed files with 510348 additions and 0 deletions
266
mailnews/base/content/virtualFolderProperties.js
Normal file
266
mailnews/base/content/virtualFolderProperties.js
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
/* -*- 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/. */
|
||||
|
||||
var gPickedFolder;
|
||||
var gMailView = null;
|
||||
var msgWindow; // important, don't change the name of this variable. it's really a global used by commandglue.js
|
||||
var gSearchTermSession; // really an in memory temporary filter we use to read in and write out the search terms
|
||||
var gSearchFolderURIs = "";
|
||||
var gMessengerBundle = null;
|
||||
|
||||
var nsMsgSearchScope = Components.interfaces.nsMsgSearchScope;
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
Components.utils.import("resource://gre/modules/PluralForm.jsm");
|
||||
Components.utils.import("resource:///modules/mailServices.js");
|
||||
Components.utils.import("resource:///modules/virtualFolderWrapper.js");
|
||||
Components.utils.import("resource:///modules/iteratorUtils.jsm");
|
||||
Components.utils.import("resource:///modules/MailUtils.js");
|
||||
|
||||
function onLoad()
|
||||
{
|
||||
var windowArgs = window.arguments[0];
|
||||
var acceptButton = document.documentElement.getButton("accept");
|
||||
|
||||
gMessengerBundle = document.getElementById("bundle_messenger");
|
||||
|
||||
// call this when OK is pressed
|
||||
msgWindow = windowArgs.msgWindow;
|
||||
|
||||
initializeSearchWidgets();
|
||||
|
||||
setSearchScope(nsMsgSearchScope.offlineMail);
|
||||
if (windowArgs.editExistingFolder)
|
||||
{
|
||||
acceptButton.label =
|
||||
document.documentElement.getAttribute("editFolderAcceptButtonLabel");
|
||||
acceptButton.accesskey =
|
||||
document.documentElement.getAttribute("editFolderAcceptButtonAccessKey");
|
||||
InitDialogWithVirtualFolder(windowArgs.folder);
|
||||
}
|
||||
else // we are creating a new virtual folder
|
||||
{
|
||||
acceptButton.label =
|
||||
document.documentElement.getAttribute("newFolderAcceptButtonLabel");
|
||||
acceptButton.accesskey =
|
||||
document.documentElement.getAttribute("newFolderAcceptButtonAccessKey");
|
||||
// it is possible that we were given arguments to pre-fill the dialog with...
|
||||
gSearchTermSession = Components.classes["@mozilla.org/messenger/searchSession;1"]
|
||||
.createInstance(Components.interfaces.nsIMsgSearchSession);
|
||||
|
||||
if (windowArgs.searchTerms) // then add them to our search session
|
||||
{
|
||||
for (let searchTerm in fixIterator(windowArgs.searchTerms,
|
||||
Components.interfaces.nsIMsgSearchTerm))
|
||||
gSearchTermSession.appendTerm(searchTerm);
|
||||
}
|
||||
if (windowArgs.folder)
|
||||
{
|
||||
// pre select the folderPicker, based on what they selected in the folder pane
|
||||
gPickedFolder = windowArgs.folder;
|
||||
try {
|
||||
document.getElementById("msgNewFolderPopup").selectFolder(windowArgs.folder);
|
||||
} catch(ex) {
|
||||
document.getElementById("msgNewFolderPicker")
|
||||
.setAttribute("label", windowArgs.folder.prettyName);
|
||||
}
|
||||
|
||||
// if the passed in URI is not a server then pre-select it as the folder to search
|
||||
if (!windowArgs.folder.isServer)
|
||||
gSearchFolderURIs = windowArgs.folder.URI;
|
||||
}
|
||||
|
||||
let folderNameField = document.getElementById("name");
|
||||
folderNameField.hidden = false;
|
||||
folderNameField.focus();
|
||||
if (windowArgs.newFolderName)
|
||||
folderNameField.value = windowArgs.newFolderName;
|
||||
if (windowArgs.searchFolderURIs)
|
||||
gSearchFolderURIs = windowArgs.searchFolderURIs;
|
||||
|
||||
setupSearchRows(gSearchTermSession.searchTerms);
|
||||
doEnabling(); // we only need to disable/enable the OK button for new virtual folders
|
||||
}
|
||||
|
||||
if (typeof windowArgs.searchOnline != "undefined")
|
||||
document.getElementById('searchOnline').checked = windowArgs.searchOnline;
|
||||
updateOnlineSearchState();
|
||||
updateFoldersCount();
|
||||
}
|
||||
|
||||
function setupSearchRows(aSearchTerms)
|
||||
{
|
||||
if (aSearchTerms && aSearchTerms.Count() > 0)
|
||||
initializeSearchRows(nsMsgSearchScope.offlineMail, aSearchTerms); // load the search terms for the folder
|
||||
else
|
||||
onMore(null);
|
||||
}
|
||||
|
||||
function updateOnlineSearchState()
|
||||
{
|
||||
var enableCheckbox = false;
|
||||
var checkbox = document.getElementById('searchOnline');
|
||||
// only enable the checkbox for selection, for online servers
|
||||
var srchFolderUriArray = gSearchFolderURIs.split('|');
|
||||
if (srchFolderUriArray[0])
|
||||
{
|
||||
var realFolder = MailUtils.getFolderForURI(srchFolderUriArray[0]);
|
||||
enableCheckbox = realFolder.server.offlineSupportLevel; // anything greater than 0 is an online server like IMAP or news
|
||||
}
|
||||
|
||||
if (enableCheckbox)
|
||||
checkbox.removeAttribute('disabled');
|
||||
else
|
||||
{
|
||||
checkbox.setAttribute('disabled', true);
|
||||
checkbox.checked = false;
|
||||
}
|
||||
}
|
||||
|
||||
function InitDialogWithVirtualFolder(aVirtualFolder)
|
||||
{
|
||||
let virtualFolderWrapper =
|
||||
VirtualFolderHelper.wrapVirtualFolder(window.arguments[0].folder);
|
||||
|
||||
// when editing an existing folder, hide the folder picker that stores the parent location of the folder
|
||||
document.getElementById("chooseFolderLocationRow").collapsed = true;
|
||||
let folderNameField = document.getElementById("existingName");
|
||||
folderNameField.hidden = false;
|
||||
|
||||
gSearchFolderURIs = virtualFolderWrapper.searchFolderURIs;
|
||||
updateFoldersCount();
|
||||
document.getElementById('searchOnline').checked = virtualFolderWrapper.onlineSearch;
|
||||
gSearchTermSession = virtualFolderWrapper.searchTermsSession;
|
||||
|
||||
setupSearchRows(gSearchTermSession.searchTerms);
|
||||
|
||||
// set the name of the folder
|
||||
let folderBundle = document.getElementById("bundle_folder");
|
||||
let name = folderBundle.getFormattedString("verboseFolderFormat",
|
||||
[aVirtualFolder.prettyName, aVirtualFolder.server.prettyName]);
|
||||
folderNameField.setAttribute("label", name);
|
||||
// update the window title based on the name of the saved search
|
||||
document.title = gMessengerBundle.getFormattedString("editVirtualFolderPropertiesTitle",
|
||||
[aVirtualFolder.prettyName]);
|
||||
}
|
||||
|
||||
function onFolderPick(aEvent) {
|
||||
gPickedFolder = aEvent.target._folder;
|
||||
document.getElementById("msgNewFolderPopup")
|
||||
.selectFolder(gPickedFolder);
|
||||
}
|
||||
|
||||
function onOK()
|
||||
{
|
||||
var name = document.getElementById("name").value;
|
||||
var searchOnline = document.getElementById('searchOnline').checked;
|
||||
|
||||
if (!gSearchFolderURIs)
|
||||
{
|
||||
Services.prompt.alert(window, null,
|
||||
gMessengerBundle.getString('alertNoSearchFoldersSelected'));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (window.arguments[0].editExistingFolder)
|
||||
{
|
||||
// update the search terms
|
||||
saveSearchTerms(gSearchTermSession.searchTerms, gSearchTermSession);
|
||||
// save the settings
|
||||
let virtualFolderWrapper =
|
||||
VirtualFolderHelper.wrapVirtualFolder(window.arguments[0].folder);
|
||||
virtualFolderWrapper.searchTerms = gSearchTermSession.searchTerms;
|
||||
virtualFolderWrapper.searchFolders = gSearchFolderURIs;
|
||||
virtualFolderWrapper.onlineSearch = searchOnline;
|
||||
virtualFolderWrapper.cleanUpMessageDatabase();
|
||||
|
||||
MailServices.accounts.saveVirtualFolders();
|
||||
|
||||
if (window.arguments[0].onOKCallback)
|
||||
window.arguments[0].onOKCallback(virtualFolderWrapper.virtualFolder.URI);
|
||||
return true;
|
||||
}
|
||||
var uri = gPickedFolder.URI;
|
||||
if (name && uri) // create a new virtual folder
|
||||
{
|
||||
// check to see if we already have a folder with the same name and alert the user if so...
|
||||
var parentFolder = MailUtils.getFolderForURI(uri);
|
||||
|
||||
// sanity check the name based on the logic used by nsMsgBaseUtils.cpp. It can't start with a '.', it can't end with a '.', '~' or ' '.
|
||||
// it can't contain a ';' or '#'.
|
||||
if (/^\.|[\.\~ ]$|[\;\#]/.test(name))
|
||||
{
|
||||
Services.prompt.alert(window, null,
|
||||
gMessengerBundle.getString("folderCreationFailed"));
|
||||
return false;
|
||||
}
|
||||
else if (parentFolder.containsChildNamed(name))
|
||||
{
|
||||
Services.prompt.alert(window, null,
|
||||
gMessengerBundle.getString("folderExists"));
|
||||
return false;
|
||||
}
|
||||
|
||||
saveSearchTerms(gSearchTermSession.searchTerms, gSearchTermSession);
|
||||
VirtualFolderHelper.createNewVirtualFolder(name, parentFolder, gSearchFolderURIs,
|
||||
gSearchTermSession.searchTerms,
|
||||
searchOnline);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function doEnabling()
|
||||
{
|
||||
var acceptButton = document.documentElement.getButton("accept");
|
||||
acceptButton.disabled = !document.getElementById("name").value;
|
||||
}
|
||||
|
||||
function chooseFoldersToSearch()
|
||||
{
|
||||
// if we have some search folders already, then root the folder picker dialog off the account
|
||||
// for those folders. Otherwise fall back to the preselectedfolderURI which is the parent folder
|
||||
// for this new virtual folder.
|
||||
var dialog = window.openDialog("chrome://messenger/content/virtualFolderListDialog.xul", "",
|
||||
"chrome,titlebar,modal,centerscreen,resizable",
|
||||
{searchFolderURIs:gSearchFolderURIs,
|
||||
okCallback:onFolderListDialogCallback});
|
||||
}
|
||||
|
||||
// callback routine from chooseFoldersToSearch
|
||||
function onFolderListDialogCallback(searchFolderURIs)
|
||||
{
|
||||
gSearchFolderURIs = searchFolderURIs;
|
||||
updateFoldersCount();
|
||||
updateOnlineSearchState(); // we may have changed the server type we are searching...
|
||||
}
|
||||
|
||||
function updateFoldersCount()
|
||||
{
|
||||
let srchFolderUriArray = gSearchFolderURIs.split('|');
|
||||
let folderCount = gSearchFolderURIs ? srchFolderUriArray.length : 0;
|
||||
let foldersList = document.getElementById("chosenFoldersCount");
|
||||
foldersList.textContent =
|
||||
PluralForm.get(folderCount, gMessengerBundle.getString("virtualFolderSourcesChosen"))
|
||||
.replace("#1", folderCount);
|
||||
if (folderCount > 0) {
|
||||
let folderNames = [];
|
||||
for (let folderURI of srchFolderUriArray) {
|
||||
let folder = MailUtils.getFolderForURI(folderURI);
|
||||
let name = this.gMessengerBundle.getFormattedString("verboseFolderFormat",
|
||||
[folder.prettyName, folder.server.prettyName]);
|
||||
folderNames.push(name);
|
||||
}
|
||||
foldersList.setAttribute("tooltiptext", folderNames.join("\n"));
|
||||
} else {
|
||||
foldersList.removeAttribute("tooltiptext");
|
||||
}
|
||||
}
|
||||
|
||||
function onEnterInSearchTerm()
|
||||
{
|
||||
// stub function called by the core search widget code...
|
||||
// nothing for us to do here
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue