!import
1 //@line 38 "/home/visbrero/mnt/roisin/rev_control/hg/mozilla/mail/components/preferences/fonts.js"
2
3 const kDefaultFontType = "font.default.%LANG%";
4 const kFontNameFmtSerif = "font.name.serif.%LANG%";
5 const kFontNameFmtSansSerif = "font.name.sans-serif.%LANG%";
6 const kFontNameFmtMonospace = "font.name.monospace.%LANG%";
7 const kFontNameListFmtSerif = "font.name-list.serif.%LANG%";
8 const kFontNameListFmtSansSerif = "font.name-list.sans-serif.%LANG%";
9 const kFontNameListFmtMonospace = "font.name-list.monospace.%LANG%";
10 const kFontSizeFmtVariable = "font.size.variable.%LANG%";
11 const kFontSizeFmtFixed = "font.size.fixed.%LANG%";
12 const kFontMinSizeFmt = "font.minimum-size.%LANG%";
13
14 var gFontsDialog = {
_init
15 _init: function()
16 {
17 // build the charset menu list. We do this by hand instead of using the xul template
18 // builder because of Bug #285076,
19 this.createCharsetMenus(document.getElementById("viewDefaultCharset-menupopup"), "NC:DecodersRoot",
20 document.getElementById('mailnews.view_default_charset').value);
21 },
22
_selectLanguageGroup
23 _selectLanguageGroup: function (aLanguageGroup)
24 {
25 var prefs = [{ format: kDefaultFontType, type: "string", element: "defaultFontType", fonttype: null},
26 { format: kFontNameFmtSerif, type: "fontname", element: "serif", fonttype: "serif" },
27 { format: kFontNameFmtSansSerif, type: "fontname", element: "sans-serif", fonttype: "sans-serif" },
28 { format: kFontNameFmtMonospace, type: "fontname", element: "monospace", fonttype: "monospace" },
29 { format: kFontNameListFmtSerif, type: "unichar", element: null, fonttype: "serif" },
30 { format: kFontNameListFmtSansSerif, type: "unichar", element: null, fonttype: "sans-serif" },
31 { format: kFontNameListFmtMonospace, type: "unichar", element: null, fonttype: "monospace" },
32 { format: kFontSizeFmtVariable, type: "int", element: "sizeVar", fonttype: null },
33 { format: kFontSizeFmtFixed, type: "int", element: "sizeMono", fonttype: null },
34 { format: kFontMinSizeFmt, type: "int", element: "minSize", fonttype: null }];
35 var preferences = document.getElementById("fontPreferences");
36 for (var i = 0; i < prefs.length; ++i) {
37 var preference = document.getElementById(prefs[i].format.replace(/%LANG%/, aLanguageGroup));
38 if (!preference) {
39 preference = document.createElement("preference");
40 var name = prefs[i].format.replace(/%LANG%/, aLanguageGroup);
41 preference.id = name;
42 preference.setAttribute("name", name);
43 preference.setAttribute("type", prefs[i].type);
44 preferences.appendChild(preference);
45 }
46
47 if (!prefs[i].element)
48 continue;
49
50 var element = document.getElementById(prefs[i].element);
51 if (element) {
52 element.setAttribute("preference", preference.id);
53
54 if (prefs[i].fonttype)
55 FontBuilder.buildFontList(aLanguageGroup, prefs[i].fonttype, element);
56
57 preference.setElementValue(element);
58 }
59 }
60 },
61
readFontLanguageGroup
62 readFontLanguageGroup: function ()
63 {
64 var languagePref = document.getElementById("font.language.group");
65 this._selectLanguageGroup(languagePref.value);
66 return undefined;
67 },
68
readFontSelection
69 readFontSelection: function (aElement)
70 {
71 // Determine the appropriate value to select, for the following cases:
72 // - there is no setting
73 // - the font selected by the user is no longer present (e.g. deleted from
74 // fonts folder)
75 var preference = document.getElementById(aElement.getAttribute("preference"));
76 if (preference.value) {
77 var fontItems = aElement.getElementsByAttribute("value", preference.value);
78
79 // There is a setting that actually is in the list. Respect it.
80 if (fontItems.length > 0)
81 return undefined;
82 }
83
84 var defaultValue = aElement.firstChild.firstChild.getAttribute("value");
85 var languagePref = document.getElementById("font.language.group");
86 preference = document.getElementById("font.name-list." + aElement.id + "." + languagePref.value);
87 if (!preference || !preference.hasUserValue)
88 return defaultValue;
89
90 var fontNames = preference.value.split(",");
91 var stripWhitespace = /^\s*(.*)\s*$/;
92
93 for (var i = 0; i < fontNames.length; ++i) {
94 var fontName = fontNames[i].replace(stripWhitespace, "$1");
95 fontItems = aElement.getElementsByAttribute("value", fontName);
96 if (fontItems.length)
97 break;
98 }
99 if (fontItems.length)
100 return fontItems[0].getAttribute("value");
101 return defaultValue;
102 },
103
readUseDocumentFonts
104 readUseDocumentFonts: function ()
105 {
106 var preference = document.getElementById("browser.display.use_document_fonts");
107 return preference.value == 1;
108 },
109
writeUseDocumentFonts
110 writeUseDocumentFonts: function ()
111 {
112 var useDocumentFonts = document.getElementById("useDocumentFonts");
113 return useDocumentFonts.checked ? 1 : 0;
114 },
115 addMenuItem: function(aMenuPopup, aLabel, aValue)
116 {
117 var menuItem = document.createElement('menuitem');
118 menuItem.setAttribute('label', aLabel);
119 menuItem.setAttribute('value', aValue);
120 aMenuPopup.appendChild(menuItem);
121 },
122
readRDFString
123 readRDFString: function(aDS,aRes,aProp)
124 {
125 var n = aDS.GetTarget(aRes, aProp, true);
126 return (n) ? n.QueryInterface(Components.interfaces.nsIRDFLiteral).Value : "";
127 },
128
129 createCharsetMenus: function(aMenuPopup, aRoot, aPreferenceValue)
130 {
131 var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
132 .getService(Components.interfaces.nsIRDFService);
133 var kNC_Root = rdfService.GetResource(aRoot);
134 var kNC_Name = rdfService.GetResource("http://home.netscape.com/NC-rdf#Name");
135
136 var rdfDataSource = rdfService.GetDataSource("rdf:charset-menu");
137 var rdfContainer = Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer);
138 rdfContainer.Init(rdfDataSource, kNC_Root);
139
140 var charset;
141 var availableCharsets = rdfContainer.GetElements();
142
143 for (var i = 0; i < rdfContainer.GetCount(); i++)
144 {
145 charset = availableCharsets.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
146
147 this.addMenuItem(aMenuPopup, this.readRDFString(rdfDataSource, charset, kNC_Name), charset.Value);
148 if (charset.Value == aPreferenceValue)
149 aMenuPopup.parentNode.value = charset.Value;
150 }
151 },
152
153 mCharsetMenuInitialized: false,
readDefaultCharset
154 readDefaultCharset: function()
155 {
156 if (!this.mCharsetMenuInitialized)
157 {
158 Components.classes["@mozilla.org/observer-service;1"]
159 .getService(Components.interfaces.nsIObserverService)
160 .notifyObservers(null, "charsetmenu-selected", "mailedit");
161 // build the charset menu list. We do this by hand instead of using the xul template
162 // builder because of Bug #285076,
163 this.createCharsetMenus(document.getElementById("sendDefaultCharset-menupopup"), "NC:MaileditCharsetMenuRoot",
164 document.getElementById('mailnews.send_default_charset').value);
165 this.mCharsetMenuInitialized = true;
166 }
167 return undefined;
168 },
169 };