зеркало из https://github.com/mozilla/gecko-dev.git
The Mother Of All Download Landings, Phase I
http://bugzilla.mozilla.org/show_bug.cgi?id=214259 Firebird Download System Upgrades. components/prefwindow/content/pref-downloads.js components/prefwindow/content/pref-downloads.xul components/prefwindow/locale/pref-downloads.dtd - New Download Options implementation
This commit is contained in:
Родитель
7ca8284f5d
Коммит
ffa29bffee
|
@ -0,0 +1,397 @@
|
|||
# -*- Mode: Java; tab-width: 4; c-basic-offset: 4; -*-
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Ben Goodger <ben@bengoodger.com>
|
||||
|
||||
var _elementIDs = ["askOnSave", "downloadFolderList", "downloadFolder"];
|
||||
|
||||
#if 0
|
||||
, "showWhenStarting", "closeWhenDone"
|
||||
#endif
|
||||
|
||||
var gLastSelectedIndex = 0;
|
||||
var gHelperApps = null;
|
||||
|
||||
var gEditFileHandler, gRemoveFileHandler, gHandlersList;
|
||||
|
||||
const downloadDirPref = "browser.download.dir";
|
||||
const downloadModePref = "browser.download.folderList";
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
|
||||
function selectFolder()
|
||||
{
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
var fp = Components.classes["@mozilla.org/filepicker;1"]
|
||||
.createInstance(nsIFilePicker);
|
||||
var pref = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
// XXXBlake Localize!
|
||||
fp.init(window, "Select Download Folder", nsIFilePicker.modeGetFolder);
|
||||
try
|
||||
{
|
||||
var initialDir = pref.getComplexValue(downloadDirPref, nsILocalFile);
|
||||
if (initialDir)
|
||||
fp.displayDirectory = initialDir;
|
||||
}
|
||||
catch (ex)
|
||||
{
|
||||
// ignore exception: file picker will open at default location
|
||||
}
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
var ret = fp.show();
|
||||
|
||||
if (ret == nsIFilePicker.returnOK) {
|
||||
var localFile = fp.file.QueryInterface(nsILocalFile);
|
||||
pref.setComplexValue(downloadDirPref, nsILocalFile, localFile)
|
||||
selectCustomFolder(true);
|
||||
}
|
||||
else {
|
||||
var folderList = document.getElementById("downloadFolderList");
|
||||
folderList.selectedIndex = gLastSelectedIndex;
|
||||
}
|
||||
}
|
||||
|
||||
function doEnabling(aSelectedItem)
|
||||
{
|
||||
var textbox = document.getElementById("downloadFolderList");
|
||||
var button = document.getElementById("showFolder");
|
||||
var disable = aSelectedItem.id == "alwaysAsk";
|
||||
textbox.disabled = disable;
|
||||
button.disabled = disable;
|
||||
}
|
||||
|
||||
function Startup()
|
||||
{
|
||||
var folderList = document.getElementById("downloadFolderList");
|
||||
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
var pref = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
|
||||
try {
|
||||
var downloadDir = pref.getComplexValue(downloadDirPref, nsILocalFile);
|
||||
|
||||
var desktop = getDownloadsFolder("Desktop");
|
||||
var downloads = getDownloadsFolder("Documents");
|
||||
|
||||
// Check to see if the user-entered download dir is actually one of our
|
||||
// enumerated values (Desktop, My Downloads) and if so select that
|
||||
// item instead of the user selected one.
|
||||
// XXX - It's lame that I should have to compare the path directly. The
|
||||
// win32 implementation of nsIFile should know that Windows is not case
|
||||
// sensitive.
|
||||
var downloadPath = downloadDir.path.toUpperCase();
|
||||
if (downloadPath == desktop.path.toUpperCase()) {
|
||||
pref.clearUserPref(downloadDirPref);
|
||||
pref.setIntPref(downloadModePref, 0);
|
||||
folderList.selectedIndex = 0;
|
||||
}
|
||||
else if (downloadPath == downloads.path.toUpperCase()) {
|
||||
pref.clearUserPref(downloadDirPref);
|
||||
pref.setIntPref(downloadModePref, 1);
|
||||
folderList.selectedIndex = 1;
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
|
||||
try {
|
||||
selectCustomFolder(false);
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
|
||||
gLastSelectedIndex = folderList.selectedIndex;
|
||||
|
||||
// Initialize the File Type list
|
||||
gHelperApps = new HelperApps();
|
||||
|
||||
gHandlersList = document.getElementById("fileHandlersList");
|
||||
gHandlersList.database.AddDataSource(gHelperApps);
|
||||
gHandlersList.setAttribute("ref", "urn:mimetypes");
|
||||
|
||||
(gEditFileHandler = document.getElementById("editFileHandler")).disabled = true;
|
||||
(gRemoveFileHandler = document.getElementById("removeFileHandler")).disabled = true;
|
||||
|
||||
parent.hPrefWindow.registerOKCallbackFunc(updateSaveToFolder);
|
||||
// XXXben such a hack. Should really update the OKCallbackFunction thing a bit to
|
||||
// let it support holding arbitrary data.
|
||||
parent.hPrefWindow.getSpecialFolderKey = getSpecialFolderKey;
|
||||
|
||||
// XXXben menulist hack #43. When initializing the display to the custom
|
||||
// download path field, the field is blank.
|
||||
var downloadFolderList = document.getElementById("downloadFolderList");
|
||||
downloadFolderList.parentNode.removeChild(downloadFolderList);
|
||||
var showFolder = document.getElementById("showFolder");
|
||||
showFolder.parentNode.insertBefore(downloadFolderList, showFolder);
|
||||
downloadFolderList.hidden = false;
|
||||
}
|
||||
|
||||
function uninit()
|
||||
{
|
||||
gHandlersList.database.RemoveDataSource(gHelperApps);
|
||||
|
||||
gHelperApps.destroy();
|
||||
}
|
||||
|
||||
function updateSaveToFolder()
|
||||
{
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
||||
function getPref(aPrefName, aPrefGetter, aDefVal)
|
||||
{
|
||||
try {
|
||||
var val = prefs[aPrefGetter](aPrefName);
|
||||
}
|
||||
catch (e) {
|
||||
val = aDefVal;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
const defaultFolderPref = "browser.download.defaultFolder";
|
||||
|
||||
var data = parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-downloads.xul"];
|
||||
// Don't let the variable names here fool you. This code executes if the
|
||||
// user chooses to have all files auto-download to a specific folder.
|
||||
if (data.askOnSave.value == "true") {
|
||||
var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
||||
|
||||
var targetFolder = null;
|
||||
switch (parseInt(data.downloadFolderList.value)) {
|
||||
case 1:
|
||||
targetFolder = fileLocator.get(parent.hPrefWindow.getSpecialFolderKey("Documents"),
|
||||
Components.interfaces.nsIFile);
|
||||
targetFolder.append("My Downloads"); // XXXben localize
|
||||
break;
|
||||
case 2:
|
||||
targetFolder = prefs.getComplexValue(downloadDirPref,
|
||||
Components.interfaces.nsILocalFile);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
targetFolder = fileLocator.get(parent.hPrefWindow.getSpecialFolderKey("Desktop"),
|
||||
Components.interfaces.nsIFile);
|
||||
break;
|
||||
}
|
||||
prefs.setComplexValue(defaultFolderPref,
|
||||
Components.interfaces.nsILocalFile,
|
||||
targetFolder);
|
||||
}
|
||||
else if (prefs.prefHasUserValue(defaultFolderPref))
|
||||
prefs.clearUserPref(defaultFolderPref);
|
||||
}
|
||||
|
||||
function selectCustomFolder(aShouldSelectItem)
|
||||
{
|
||||
var pref = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
var downloadDir = pref.getComplexValue(downloadDirPref, nsILocalFile);
|
||||
|
||||
var folder = document.getElementById("downloadFolder");
|
||||
folder.label = downloadDir.path;
|
||||
folder.setAttribute("path", downloadDir.path);
|
||||
folder.hidden = false;
|
||||
|
||||
var folderList = document.getElementById("downloadFolderList");
|
||||
if (aShouldSelectItem)
|
||||
folderList.selectedIndex = 2;
|
||||
}
|
||||
|
||||
function folderListCommand(aEvent)
|
||||
{
|
||||
var folderList = document.getElementById("downloadFolderList");
|
||||
if (folderList.selectedItem.getAttribute("value") == 9)
|
||||
selectFolder();
|
||||
|
||||
var selectedIndex = folderList.selectedIndex;
|
||||
|
||||
if (selectedIndex == 1) {
|
||||
var downloads = getDownloadsFolder("Documents");
|
||||
if (!downloads.exists())
|
||||
downloads.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755);
|
||||
}
|
||||
|
||||
// folderList.inputField.readonly = (selectedIndex == 0 || selectedIndex == 1);
|
||||
|
||||
gLastSelectedIndex = folderList.selectedIndex;
|
||||
}
|
||||
|
||||
function showFolder()
|
||||
{
|
||||
var folderList = document.getElementById("downloadFolderList");
|
||||
|
||||
var folder = null;
|
||||
|
||||
switch (folderList.selectedIndex) {
|
||||
case 0:
|
||||
folder = getDownloadsFolder("Desktop");
|
||||
break;
|
||||
case 1:
|
||||
folder = getDownloadsFolder("Downloads");
|
||||
break;
|
||||
case 2:
|
||||
var path = folderList.selectedItem.getAttribute("path");
|
||||
folder = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
|
||||
folder.path = path;
|
||||
break;
|
||||
}
|
||||
|
||||
folder.QueryInterface(Components.interfaces.nsILocalFile);
|
||||
folder.reveal();
|
||||
}
|
||||
|
||||
function getSpecialFolderKey(aFolderType)
|
||||
{
|
||||
#ifdef XP_WIN
|
||||
return aFolderType == "Desktop" ? "DeskV" : "Pers";
|
||||
#endif
|
||||
#ifdef XP_MACOSX
|
||||
return aFolderType == "Desktop" ? "Desk" : "UsrDocs";
|
||||
#endif
|
||||
return "Home";
|
||||
}
|
||||
|
||||
function getDownloadsFolder(aFolder)
|
||||
{
|
||||
var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
||||
|
||||
var dir = fileLocator.get(getSpecialFolderKey(aFolder), Components.interfaces.nsILocalFile);
|
||||
if (aFolder != "Desktop")
|
||||
dir.append("My Downloads"); // XXXben localize
|
||||
|
||||
return dir;
|
||||
}
|
||||
|
||||
function fileHandlerListSelectionChanged(aEvent)
|
||||
{
|
||||
var selection = gHandlersList.view.selection;
|
||||
var selected = selection.count;
|
||||
gRemoveFileHandler.disabled = selected == 0;
|
||||
gEditFileHandler.disabled = selected != 1;
|
||||
|
||||
var canRemove = true;
|
||||
|
||||
var cv = gHandlersList.contentView;
|
||||
var rangeCount = selection.getRangeCount();
|
||||
var min = { }, max = { };
|
||||
for (var i = 0; i < rangeCount; ++i) {
|
||||
selection.getRangeAt(i, min, max);
|
||||
|
||||
for (var j = min.value; j <= max.value; ++j) {
|
||||
var item = cv.getItemAtIndex(j);
|
||||
var editable = getLiteralValue(item.id, "editable") == "true";
|
||||
var handleInternal = getLiteralValue(item.id, "handleInternal");
|
||||
|
||||
if (!editable || handleInternal)
|
||||
canRemove = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!canRemove) {
|
||||
gRemoveFileHandler.disabled = true;
|
||||
gEditFileHandler.disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
function removeFileHandler()
|
||||
{
|
||||
const nsIPS = Components.interfaces.nsIPromptService;
|
||||
var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(nsIPS);
|
||||
|
||||
// XXXben LOCALIZE!
|
||||
var title = "Remove Actions";
|
||||
var msg = "The selected Actions will no longer be performed when files of the affected types are downloaded. Are you sure you want to remove these Actions?";
|
||||
var buttons = (nsIPS.BUTTON_TITLE_YES * nsIPS.BUTTON_POS_0) + (nsIPS.BUTTON_TITLE_NO * nsIPS.BUTTON_POS_1);
|
||||
|
||||
if (ps.confirmEx(window, title, msg, buttons, "", "", "", "", { }) == 1)
|
||||
return;
|
||||
|
||||
var c = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
|
||||
c.Init(gHelperApps, gRDF.GetResource("urn:mimetypes:root"));
|
||||
|
||||
var cv = gHandlersList.contentView;
|
||||
var selection = gHandlersList.view.selection;
|
||||
var rangeCount = selection.getRangeCount();
|
||||
var min = { }, max = { };
|
||||
|
||||
var lastAdjacent = -1;
|
||||
for (var i = 0; i < rangeCount; ++i) {
|
||||
selection.getRangeAt(i, min, max);
|
||||
|
||||
if (i == (rangeCount - 1)) {
|
||||
if (min.value >= (gHandlersList.view.rowCount - selection.count))
|
||||
lastAdjacent = min.value - 1;
|
||||
else
|
||||
lastAdjacent = min.value;
|
||||
}
|
||||
|
||||
for (var j = max.value; j >= min.value; --j) {
|
||||
var item = cv.getItemAtIndex(j);
|
||||
var itemResource = gRDF.GetResource(item.id);
|
||||
c.RemoveElement(itemResource, j == min.value);
|
||||
|
||||
cleanResource(itemResource);
|
||||
}
|
||||
}
|
||||
|
||||
if (lastAdjacent != -1) {
|
||||
selection.select(lastAdjacent);
|
||||
gHandlersList.focus();
|
||||
}
|
||||
|
||||
gHelperApps.flush();
|
||||
}
|
||||
|
||||
function cleanResource(aResource)
|
||||
{
|
||||
var handlerProp = gHelperApps.GetTarget(aResource, gHelperApps._handlerPropArc, true);
|
||||
if (handlerProp) {
|
||||
var extApp = gHelperApps.GetTarget(handlerProp, gHelperApps._externalAppArc, true);
|
||||
if (extApp)
|
||||
disconnect(extApp);
|
||||
disconnect(handlerProp);
|
||||
}
|
||||
disconnect(aResource);
|
||||
}
|
||||
|
||||
function disconnect(aResource)
|
||||
{
|
||||
var arcs = gHelperApps.ArcLabelsOut(aResource);
|
||||
while (arcs.hasMoreElements()) {
|
||||
var arc = arcs.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
var val = gHelperApps.GetTarget(aResource, arc, true);
|
||||
gHelperApps.Unassert(aResource, arc, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
function editFileHandler()
|
||||
{
|
||||
var selection = gHandlersList.view.selection;
|
||||
|
||||
var cv = gHandlersList.contentView;
|
||||
var item = cv.getItemAtIndex(selection.currentIndex);
|
||||
var itemResource = gRDF.GetResource(item.id);
|
||||
|
||||
openDialog("chrome://browser/content/pref/editAction.xul", "", "modal=yes", itemResource);
|
||||
}
|
||||
|
||||
function showPlugins()
|
||||
{
|
||||
openDialog("chrome://browser/content/pref/plugins.xul", "", "modal=yes");
|
||||
}
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
<?xml version="1.0"?>
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is Mozilla Communicator client code, released
|
||||
# March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998-2000 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Ben Goodger <ben@bengoodger.com>
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/pref/pref.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE window SYSTEM "chrome://browser/locale/pref/pref-downloads.dtd" >
|
||||
|
||||
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="parent.initPanel('chrome://browser/content/pref/pref-downloads.xul');"
|
||||
headertitle="&lHeader;" onunload="uninit();">
|
||||
|
||||
<script type="application/x-javascript" src="chrome://browser/content/downloads/helperApps.js"/>
|
||||
<script type="application/x-javascript" src="chrome://browser/content/pref/pref-downloads.js"/>
|
||||
|
||||
<groupbox>
|
||||
<caption label="&askOnSave.label;"/>
|
||||
|
||||
<radiogroup id="askOnSave" onselect="doEnabling(this.selectedItem);" flex="1"
|
||||
preftype="bool" prefstring="browser.download.useDownloadDir">
|
||||
<radio id="alwaysAsk" label="&alwaysAsk.label;" value="false"/>
|
||||
<hbox flex="1">
|
||||
<radio id="neverAsk" label="&neverAsk.label;" value="true"/>
|
||||
<button id="showFolder" label="&showFolder.label;" oncommand="showFolder();"/>
|
||||
</hbox>
|
||||
</radiogroup>
|
||||
</groupbox>
|
||||
|
||||
#if 0
|
||||
<groupbox>
|
||||
<caption label="&downloadManagerWindow.label;"/>
|
||||
|
||||
<checkbox id="showWhenStarting" label="&showWhenStarting.label;"
|
||||
prefstring="browser.download.showWhenStarting"/>
|
||||
<checkbox id="closeWhenDone" label="&closeWhenDone.label;" class="indent"
|
||||
prefstring="browser.download.closeWhenDone"/>
|
||||
</groupbox>
|
||||
#endif
|
||||
|
||||
<groupbox flex="1">
|
||||
<caption label="&fileTypes.label;"/>
|
||||
|
||||
<description>&fileTypesDescription.label;</description>
|
||||
<separator class="thin"/>
|
||||
|
||||
<!-- XXX it's really lame that I'm using a content backed tree here rather
|
||||
than one built with treebuilder but for some reason treebuilder is
|
||||
throwing "can't do open ended queries like that!" assertions for
|
||||
no discernible reason -->
|
||||
<vbox class="indent" flex="1">
|
||||
<tree id="fileHandlersList" flex="1" hidecolumnpicker="true"
|
||||
datasources="rdf:null"
|
||||
onselect="fileHandlerListSelectionChanged();"
|
||||
ondblclick="editFileHandler();">
|
||||
|
||||
<template>
|
||||
<rule>
|
||||
<conditions>
|
||||
<content uri="?uri"/>
|
||||
<triple subject="?uri"
|
||||
predicate="http://home.netscape.com/NC-rdf#MIME-types"
|
||||
object="?MIME-types"/>
|
||||
<member container="?MIME-types" child="?type"/>
|
||||
<triple subject="?type"
|
||||
predicate="http://home.netscape.com/NC-rdf#FileType"
|
||||
object="?file-type"/>
|
||||
<triple subject="?type"
|
||||
predicate="http://home.netscape.com/NC-rdf#FileHandler"
|
||||
object="?file-handler"/>
|
||||
<triple subject="?type"
|
||||
predicate="http://home.netscape.com/NC-rdf#FileIcon"
|
||||
object="?file-icon"/>
|
||||
<triple subject="?type"
|
||||
predicate="http://home.netscape.com/NC-rdf#FileHandleAuto"
|
||||
object="true"/>
|
||||
</conditions>
|
||||
<bindings>
|
||||
<binding subject="?type"
|
||||
predicate="http://home.netscape.com/NC-rdf#FileExtension"
|
||||
object="?file-extension"/>
|
||||
</bindings>
|
||||
<action>
|
||||
<treechildren class="extensionChildren">
|
||||
<treeitem uri="?type">
|
||||
<treerow>
|
||||
<treecell label="?file-extension" src="?file-icon"/>
|
||||
<treecell label="?file-type"/>
|
||||
<treecell label="?file-handler"/>
|
||||
</treerow>
|
||||
</treeitem>
|
||||
</treechildren>
|
||||
</action>
|
||||
</rule>
|
||||
</template>
|
||||
|
||||
<treecols>
|
||||
<treecol id="fileExtension"
|
||||
class="sortDirectionIndicator" persist="width"
|
||||
sort="rdf:http://home.netscape.com/NC-rdf#FileExtension"
|
||||
sortActive="true" sortDirection="none" hideheader="true"/>
|
||||
<treecol id="fileType" flex="1"
|
||||
class="sortDirectionIndicator" persist="width"
|
||||
sort="rdf:http://home.netscape.com/NC-rdf#FileType"
|
||||
sortActive="false" sortDirection="none" hideheader="true"/>
|
||||
<splitter class="tree-splitter" />
|
||||
<treecol id="fileHandler" flex="1"
|
||||
class="sortDirectionIndicator" persist="width"
|
||||
sort="rdf:http://home.netscape.com/NC-rdf#FileHandler"
|
||||
sortActive="false" sortDirection="none" hideheader="true"/>
|
||||
</treecols> <!-- label="&fileHandlerColName.label;" label="&fileTypeColName.label;" -->
|
||||
</tree>
|
||||
|
||||
<separator class="thin"/>
|
||||
<hbox>
|
||||
<button label="&editFileHandler.label;" accesskey="&editFileHandler.accesskey;"
|
||||
id="editFileHandler" oncommand="editFileHandler();"/>
|
||||
<button label="&removeFileHandler.label;" accesskey="&removeFileHandler.accesskey;"
|
||||
id="removeFileHandler" oncommand="removeFileHandler();"/>
|
||||
<spring flex="1"/>
|
||||
<button label="&plugins.label;" accesskey="&plugins.accesskey;"
|
||||
id="plugins" oncommand="showPlugins();"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
</groupbox>
|
||||
|
||||
<menulist id="downloadFolderList" flex="1" hidden="true"
|
||||
preftype="int" prefstring="browser.download.folderList" prefdefval="0"
|
||||
oncommand="folderListCommand();">
|
||||
<menupopup>
|
||||
<menuitem value="0" label="&desktop.label;"/>
|
||||
<menuitem value="1" label="&downloads.label;"/>
|
||||
<menuitem value="2" label="" hidden="true" id="downloadFolder" crop="middle"/>
|
||||
<menuitem value="9" label="&choose.label;"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
|
||||
</page>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<!ENTITY lHeader "Downloads">
|
||||
|
||||
<!ENTITY askOnSave.label "Download Folder">
|
||||
<!ENTITY alwaysAsk.label "Ask me where to save every file">
|
||||
<!ENTITY neverAsk.label "Save all files to this folder:">
|
||||
<!ENTITY desktop.label "Desktop">
|
||||
<!ENTITY downloads.label "My Downloads">
|
||||
<!ENTITY choose.label "Other...">
|
||||
<!ENTITY showFolder.label "Show Folder">
|
||||
|
||||
<!ENTITY downloadManagerWindow.label "Download Manager">
|
||||
<!ENTITY showWhenStarting.label "Show Download Manager window when a download begins.">
|
||||
<!ENTITY closeWhenDone.label "Close the Download Manager when all downloads are complete.">
|
||||
|
||||
<!ENTITY fileTypes.label "File Types">
|
||||
<!-- XXX this text string could improve -->
|
||||
<!ENTITY fileTypesDescription.label "Automatically perform the associated action with each of the following file types:">
|
||||
<!ENTITY fileTypeColName.label "File Type">
|
||||
<!ENTITY fileHandlerColName.label "Application">
|
||||
<!ENTITY editFileHandler.label "Change Action...">
|
||||
<!ENTITY editFileHandler.accesskey "a">
|
||||
<!ENTITY removeFileHandler.label "Remove">
|
||||
<!ENTITY removeFileHandler.accesskey "r">
|
||||
|
||||
<!ENTITY plugins.label "Plug-Ins...">
|
||||
<!ENTITY plugins.accesskey "p">
|
||||
|
Загрузка…
Ссылка в новой задаче