зеркало из 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">
|
||||||
|
|
Загрузка…
Ссылка в новой задаче