mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 19:07:31 +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
114
mailnews/base/prefs/content/am-prefs.js
Normal file
114
mailnews/base/prefs/content/am-prefs.js
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
/* -*- Mode: C++; tab-width: 4; 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/. */
|
||||
|
||||
/* functions for disabling front end elements when the appropriate
|
||||
back-end preference is locked. */
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
/**
|
||||
* Prefs in MailNews require dynamic portions to indicate
|
||||
* which of multiple servers or identities. This function
|
||||
* takes a string and a xul element.
|
||||
*
|
||||
* @param aStr The string is a prefstring with a token %tokenname%.
|
||||
* @param aElement The xul element has an attribute of name |tokenname|
|
||||
* whose value is substituted into the string and returned
|
||||
* by the function.
|
||||
*
|
||||
* Any tokens which do not have associated attribute value
|
||||
* are not substituted, and left in the string as-is.
|
||||
*/
|
||||
function substPrefTokens(aStr, aElement)
|
||||
{
|
||||
let tokenpat = /%(\w+)%/;
|
||||
let token;
|
||||
let newprefstr = "";
|
||||
|
||||
let prefPartsArray = aStr.split(".");
|
||||
/* here's a little loop that goes through
|
||||
each part of the string separated by a dot, and
|
||||
if any parts are of the form %string%, it will replace
|
||||
them with the value of the attribute of that name from
|
||||
the xul object */
|
||||
for (let i = 0; i < prefPartsArray.length; i++) {
|
||||
token = prefPartsArray[i].match(tokenpat);
|
||||
if (token) { /* we've got a %% match */
|
||||
if (token[1]) {
|
||||
if (aElement[token[1]]) {
|
||||
newprefstr += aElement[token[1]] + "."; // here's where we get the info
|
||||
} else { /* all we got was this stinkin % */
|
||||
newprefstr += prefPartsArray[i] + ".";
|
||||
}
|
||||
}
|
||||
} else /* if (token) */ {
|
||||
newprefstr += prefPartsArray[i] + ".";
|
||||
}
|
||||
}
|
||||
newprefstr = newprefstr.slice(0, -1); // remove the last char, a dot
|
||||
if (newprefstr.length <= 0)
|
||||
newprefstr = null;
|
||||
|
||||
return newprefstr;
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple function to check if a pref in an element is locked.
|
||||
*
|
||||
* @param aElement a xul element with the pref related attributes
|
||||
* (pref, preftype, prefstring)
|
||||
* @return whether the prefstring specified in that element is
|
||||
* locked (true/false).
|
||||
* If it does not have a valid prefstring, a false is returned.
|
||||
*/
|
||||
function getAccountValueIsLocked(aElement)
|
||||
{
|
||||
let prefstring = aElement.getAttribute("prefstring");
|
||||
if (prefstring) {
|
||||
let prefstr = substPrefTokens(prefstring, aElement);
|
||||
// see if the prefstring is locked
|
||||
if (prefstr)
|
||||
return Services.prefs.prefIsLocked(prefstr);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables/disables element (slave) according to the checked state
|
||||
* of another elements (masters).
|
||||
*
|
||||
* @param aChangeElementId Slave element which should be enabled
|
||||
* if all the checkElementIDs are checked.
|
||||
* Otherwise it gets disabled.
|
||||
* @param aCheckElementIds An array of IDs of the master elements.
|
||||
*
|
||||
* See bug 728681 for the pattern on how this is used.
|
||||
*/
|
||||
function onCheckItem(aChangeElementId, aCheckElementIds)
|
||||
{
|
||||
let elementToControl = document.getElementById(aChangeElementId);
|
||||
let disabled = false;
|
||||
|
||||
for (let notifyId of aCheckElementIds) {
|
||||
let notifyElement = document.getElementById(notifyId);
|
||||
let notifyElementState = null;
|
||||
if ("checked" in notifyElement)
|
||||
notifyElementState = notifyElement.checked;
|
||||
else if ("selected" in notifyElement)
|
||||
notifyElementState = notifyElement.selected;
|
||||
else
|
||||
Components.utils.reportError("Unknown type of control element: " + notifyElement.id);
|
||||
|
||||
if (!notifyElementState) {
|
||||
disabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!disabled && getAccountValueIsLocked(elementToControl))
|
||||
disabled = true;
|
||||
|
||||
elementToControl.disabled = disabled;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue