171 строка
5.4 KiB
JavaScript
171 строка
5.4 KiB
JavaScript
/* 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/. */
|
|
|
|
this.EXPORTED_SYMBOLS = [
|
|
"MessageFormat",
|
|
"TextboxSize",
|
|
"TextboxSpellChecker"
|
|
];
|
|
|
|
Components.utils.import("resource:///modules/imServices.jsm");
|
|
var Ci = Components.interfaces;
|
|
|
|
var MessageFormat = {
|
|
_observedPrefs: [],
|
|
|
|
getValues: function mf_getValues() {
|
|
this.unregisterObservers();
|
|
let langGroup =
|
|
Services.prefs.getComplexValue("font.language.group",
|
|
Ci.nsIPrefLocalizedString).data;
|
|
let fontGroup = Services.prefs.getCharPref("font.default." + langGroup);
|
|
let fontPref = "font.name." + fontGroup + "." + langGroup;
|
|
let fontSizePref = "font.size.variable." + langGroup;
|
|
this._values = {
|
|
langGroup: langGroup,
|
|
fontGroup: fontGroup,
|
|
font: Services.prefs.getCharPref(fontPref),
|
|
fontIsDefault: !Services.prefs.prefHasUserValue(fontPref),
|
|
fontSize: Services.prefs.getIntPref(fontSizePref),
|
|
fontSizeIsDefault: !Services.prefs.prefHasUserValue(fontSizePref),
|
|
defaultFontSize:
|
|
Services.prefs.getDefaultBranch(null).getIntPref(fontSizePref),
|
|
foregroundColor:
|
|
Services.prefs.getCharPref("browser.display.foreground_color"),
|
|
foregroundColorIsDefault:
|
|
!Services.prefs.prefHasUserValue("browser.display.foreground_color"),
|
|
useSystemColor:
|
|
Services.prefs.getBoolPref("browser.display.use_system_colors")
|
|
};
|
|
|
|
this._observedPrefs = [
|
|
"font.language.group",
|
|
"font.default." + langGroup,
|
|
"font.name." + fontGroup + "." + langGroup,
|
|
"font.size.variable." + langGroup,
|
|
"browser.display.foreground_color",
|
|
"browser.display.use_system_colors"
|
|
];
|
|
for (let name of this._observedPrefs)
|
|
Services.prefs.addObserver(name, this, false);
|
|
},
|
|
unregisterObservers: function mf_unregisterObservers() {
|
|
for (let name of this._observedPrefs)
|
|
Services.prefs.removeObserver(name, this);
|
|
this._observedPrefs = [];
|
|
},
|
|
observe: function(aSubject, aTopic, aMsg) {
|
|
this.getValues();
|
|
for (let textbox of this._textboxes)
|
|
this.styleTextbox(textbox);
|
|
},
|
|
_getColor: function mf__getColor() {
|
|
if (this._values.foregroundColorIsDefault || this._values.useSystemColor)
|
|
return "";
|
|
return this._values.foregroundColor;
|
|
},
|
|
styleTextbox: function mf_styleTextbox(aTextbox) {
|
|
aTextbox.style.color = this._getColor();
|
|
aTextbox.style.fontSize = this._values.fontSize + "px";
|
|
aTextbox.style.fontFamily = this._values.font;
|
|
},
|
|
getMessageStyle: function mf_getMessageStyle() {
|
|
let result = {};
|
|
|
|
let color = this._getColor();
|
|
if (color)
|
|
result.color = color;
|
|
|
|
if (!this._values.fontSizeIsDefault) {
|
|
result.fontSize = this._values.fontSize;
|
|
result.defaultFontSize = this._values.defaultFontSize;
|
|
}
|
|
|
|
if (!this._values.fontIsDefault)
|
|
result.fontFamily = this._values.font;
|
|
|
|
return result;
|
|
},
|
|
_textboxes: [],
|
|
registerTextbox: function mf_registerTextbox(aTextbox) {
|
|
if (!this._textboxes.includes(aTextbox))
|
|
this._textboxes.push(aTextbox);
|
|
|
|
if (this._textboxes.length == 1)
|
|
this.getValues();
|
|
|
|
this.styleTextbox(aTextbox);
|
|
},
|
|
unregisterTextbox: function(aTextbox) {
|
|
let index = this._textboxes.indexOf(aTextbox);
|
|
if (index != -1)
|
|
this._textboxes.splice(index, 1);
|
|
|
|
if (!this._textboxes.length)
|
|
this.unregisterObservers();
|
|
}
|
|
};
|
|
|
|
var TextboxSize = {
|
|
_textboxAutoResizePrefName: "messenger.conversations.textbox.autoResize",
|
|
get autoResize() {
|
|
delete this.autoResize;
|
|
Services.prefs.addObserver(this._textboxAutoResizePrefName, this, false);
|
|
return this.autoResize =
|
|
Services.prefs.getBoolPref(this._textboxAutoResizePrefName);
|
|
},
|
|
observe: function(aSubject, aTopic, aMsg) {
|
|
if (aTopic == "nsPref:changed" && aMsg == this._textboxAutoResizePrefName)
|
|
this.autoResize = Services.prefs.getBoolPref(aMsg);
|
|
}
|
|
};
|
|
|
|
var TextboxSpellChecker = {
|
|
#ifndef MOZ_THUNDERBIRD
|
|
_spellCheckPrefName: "layout.spellcheckDefault",
|
|
#else
|
|
_spellCheckPrefName: "mail.spellcheck.inline",
|
|
#endif
|
|
_enabled: false,
|
|
getValue: function tsc_getValue() {
|
|
#ifndef MOZ_THUNDERBIRD
|
|
this._enabled = !!Services.prefs.getIntPref(this._spellCheckPrefName);
|
|
#else
|
|
this._enabled = Services.prefs.getBoolPref(this._spellCheckPrefName);
|
|
#endif
|
|
},
|
|
applyValue: function tsc_applyValue(aTextbox) {
|
|
if (this._enabled)
|
|
aTextbox.setAttribute("spellcheck", "true");
|
|
else
|
|
aTextbox.removeAttribute("spellcheck");
|
|
},
|
|
|
|
_textboxes: [],
|
|
registerTextbox: function tsc_registerTextbox(aTextbox) {
|
|
if (!this._textboxes.includes(aTextbox))
|
|
this._textboxes.push(aTextbox);
|
|
|
|
if (this._textboxes.length == 1) {
|
|
Services.prefs.addObserver(this._spellCheckPrefName, this, false);
|
|
this.getValue();
|
|
}
|
|
|
|
this.applyValue(aTextbox);
|
|
},
|
|
unregisterTextbox: function tsc_unregisterTextbox(aTextbox) {
|
|
let index = this._textboxes.indexOf(aTextbox);
|
|
if (index != -1)
|
|
this._textboxes.splice(index, 1);
|
|
|
|
if (!this._textboxes.length)
|
|
Services.prefs.removeObserver(this._spellCheckPrefName, this);
|
|
},
|
|
observe: function tsc_observe(aSubject, aTopic, aMsg) {
|
|
this.getValue();
|
|
for (let textbox of this._textboxes)
|
|
this.applyValue(textbox);
|
|
}
|
|
};
|