!import
1 //@line 38 "/home/visbrero/mnt/roisin/rev_control/hg/mozilla/mail/components/preferences/changeaction.js"
2
3 var gChangeActionDialog = {
4 _item : null,
5 _bundle : null,
6 _lastSelectedMode : null,
7 _lastSelectedSave : null,
8
init
9 init: function ()
10 {
11 this._item = window.arguments[0];
12 this._bundle = document.getElementById("bundlePreferences");
13
14 var typeField = document.getElementById("typeField");
15 typeField.value = this._item.typeName;
16
17 var extensionField = document.getElementById("extensionField");
18 var ext = "." + this._item.extension.toLowerCase();
19 var contentType = this._item.type;
20 extensionField.value = this._bundle.getFormattedString("extensionStringFormat", [ext, contentType]);
21
22 var typeIcon = document.getElementById("typeIcon");
23 typeIcon.src = this._item.bigIcon;
24
25 // Custom App Handler Path - this must be set before we set the selected
26 // radio button because the selection event handler for the radio group
27 // requires the extapp handler field to be non-empty for the extapp radio
28 // button to be selected.
29 var customApp = document.getElementById("customApp");
30 if (this._item.customHandler)
31 customApp.file = this._item.customHandler;
32 else
33 customApp.file = null;
34
35 var defaultApp = document.getElementById("defaultApp");
36 var defaultAppIcon = null;
37 var fallbackIconURL = "moz-icon://goat?contentType=" + this._item.type + "&size=16";
38 if (this._item.mimeInfo instanceof Components.interfaces.nsIPropertyBag) {
39 try {
40 defaultAppIcon = this._item.mimeInfo.getProperty("defaultApplicationIconURL");
41 }
42 catch (e) { }
43 if (defaultAppIcon)
44 defaultAppIcon += "?size=16";
45 }
46 defaultApp.image = defaultAppIcon || fallbackIconURL;
47 defaultApp.label = this._item.mimeInfo.defaultDescription;
48
49 // Selected Action Radiogroup
50 var handlerGroup = document.getElementById("handlerGroup");
51 if (this._item.handleMode == FILEACTION_OPEN_DEFAULT)
52 handlerGroup.selectedItem = document.getElementById("openDefault");
53 else if (this._item.handleMode == FILEACTION_SAVE_TO_DISK)
54 handlerGroup.selectedItem = document.getElementById("saveToDisk");
55 else
56 handlerGroup.selectedItem = document.getElementById("openApplication");
57
58 this._lastSelectedMode = handlerGroup.selectedItem;
59
60 // Figure out the last selected Save As mode
61 var saveToOptions = document.getElementById("saveToOptions");
62 this._lastSelectedSave = saveToOptions.selectedItem;
63
64 // We don't let users open .exe files or random binary data directly
65 // from the browser at the moment because of security concerns.
66 var mimeType = this._item.mimeInfo.MIMEType;
67 if (mimeType == "application/octet-stream" ||
68 mimeType == "application/x-msdownload") {
69 document.getElementById("openApplication").disabled = true;
70 document.getElementById("openDefault").disabled = true;
71 handlerGroup.selectedItem = document.getElementById("saveToDisk");
72 }
73 },
74
onAccept
75 onAccept: function ()
76 {
77 var contentType = this._item.mimeInfo.MIMEType;
78 var handlerGroup = document.getElementById("handlerGroup");
79 switch (handlerGroup.selectedItem.value) {
80 case "system":
81 this._item.handledOnlyByPlugin = false;
82 this._item.handleMode = FILEACTION_OPEN_DEFAULT;
83 var defaultDescr = this._item.mimeInfo.defaultDescription;
84 this._item.action = this._bundle.getFormattedString("openWith", [defaultDescr]);
85 break;
86 case "app":
87 this._item.handledOnlyByPlugin = false;
88 this._item.handleMode = FILEACTION_OPEN_CUSTOM;
89 var customApp = document.getElementById("customApp");
90 this._item.action = this._bundle.getFormattedString("openWith", [customApp.label]);
91 break;
92 case "save":
93 this._item.handledOnlyByPlugin = false;
94 this._item.handleMode = FILEACTION_SAVE_TO_DISK;
95 this._item.action = this._bundle.getString("saveToDisk");
96 break;
97 }
98
99 // The opener uses the modifications to the FileAction item to update the
100 // datasource.
101 return true;
102 },
103
doEnabling
104 doEnabling: function (aSelectedItem)
105 {
106 var defaultApp = document.getElementById("defaultApp");
107 var saveToDefault = document.getElementById("saveToDefault");
108 var saveToCustom = document.getElementById("saveToCustom");
109 var customDownloadFolder = document.getElementById("customDownloadFolder");
110 var chooseCustomDownloadFolder = document.getElementById("chooseCustomDownloadFolder");
111 var saveToAskMe = document.getElementById("saveToAskMe");
112 var changeApp = document.getElementById("changeApp");
113 var customApp = document.getElementById("customApp");
114
115 switch (aSelectedItem.id) {
116 case "openDefault":
117 changeApp.disabled = customApp.disabled = saveToDefault.disabled = saveToCustom.disabled = customDownloadFolder.disabled = chooseCustomDownloadFolder.disabled = saveToAskMe.disabled = true;
118 defaultApp.disabled = false;
119 break;
120 case "openApplication":
121 defaultApp.disabled = saveToDefault.disabled = saveToCustom.disabled = customDownloadFolder.disabled = chooseCustomDownloadFolder.disabled = saveToAskMe.disabled = true;
122 changeApp.disabled = customApp.disabled = false;
123 if (!customApp.file && !this.changeApp()) {
124 this._lastSelectedMode.click();
125 return;
126 }
127 break;
128 case "saveToDisk":
129 changeApp.disabled = customApp.disabled = defaultApp.disabled = true;
130 var saveToOptions = document.getElementById("saveToOptions");
131 customDownloadFolder.disabled = chooseCustomDownloadFolder.disabled = !(saveToOptions.selectedItem.id == "saveToCustom");
132 saveToDefault.disabled = saveToCustom.disabled = saveToAskMe.disabled = false;
133 break;
134 }
135 this._lastSelectedMode = aSelectedItem;
136 },
137
doSaveToDiskEnabling
138 doSaveToDiskEnabling: function (aSelectedItem)
139 {
140 var isSaveToCustom = aSelectedItem.id == "saveToCustom";
141 var customDownloadFolder = document.getElementById("customDownloadFolder");
142 var chooseCustomDownloadFolder = document.getElementById("chooseCustomDownloadFolder");
143 chooseCustomDownloadFolder.disabled = customDownloadFolder.disabled = !isSaveToCustom;
144
145 if (isSaveToCustom &&
146 !customDownloadFolder.file && !this.changeCustomFolder()) {
147 this._lastSelectedSave.click();
148 return;
149 }
150 this._lastSelectedSave = aSelectedItem;
151 },
152
changeApp
153 changeApp: function ()
154 {
155 const nsIFilePicker = Components.interfaces.nsIFilePicker;
156 var fp = Components.classes["@mozilla.org/filepicker;1"]
157 .createInstance(nsIFilePicker);
158 var winTitle = this._bundle.getString("fpTitleChooseApp");
159 fp.init(window, winTitle, nsIFilePicker.modeOpen);
160 fp.appendFilters(nsIFilePicker.filterApps);
161 if (fp.show() == nsIFilePicker.returnOK && fp.file) {
162 var customApp = document.getElementById("customApp");
163 customApp.file = fp.file;
164 this._item.customHandler = fp.file;
165 return true;
166 }
167 return false;
168 },
169
changeCustomFolder
170 changeCustomFolder: function ()
171 {
172 const nsIFilePicker = Components.interfaces.nsIFilePicker;
173 var fp = Components.classes["@mozilla.org/filepicker;1"]
174 .createInstance(nsIFilePicker);
175
176 // extract the window title
177 var winTitle = this._bundle.getString("fpTitleChooseDL");
178 fp.init(window, winTitle, nsIFilePicker.modeGetFolder);
179 if (fp.show() == nsIFilePicker.returnOK && fp.file) {
180 var customDownloadFolder = document.getElementById("customDownloadFolder");
181 customDownloadFolder.file = fp.file;
182 customDownloadFolder.label = fp.file.path;
183 return true;
184 }
185 return false;
186 },
187 };