зеркало из https://github.com/mozilla/gecko-dev.git
176 строки
6.6 KiB
JavaScript
176 строки
6.6 KiB
JavaScript
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* 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 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
function nsHelperAppLauncherDialog() {
|
|
// Initialize data properties.
|
|
this.userChoseApp = false;
|
|
this.chosenApp = null;
|
|
|
|
try {
|
|
// App launcher is passed as dialog argument.
|
|
this.appLauncher = window.arguments[0];
|
|
|
|
// Initialize the dialog contents.
|
|
this.initDialog();
|
|
} catch( e ) {
|
|
// On error, close dialog.
|
|
dump( "nsHelperAppLauncherDialog error: " + e + "\n" );
|
|
window.close();
|
|
}
|
|
}
|
|
|
|
nsHelperAppLauncherDialog.prototype= {
|
|
// Statics.
|
|
nsIHelperAppLauncher : Components.interfaces.nsIHelperAppLauncher,
|
|
nsIMIMEInfo : Components.interfaces.nsIMIMEInfo,
|
|
nsIFilePicker : Components.interfaces.nsIFilePicker,
|
|
|
|
// Fill dialog from app launcher attributes.
|
|
initDialog : function () {
|
|
// "Always ask me" is always set (or else we wouldn't have got here!).
|
|
document.getElementById( "alwaysAskMe" ).checked = true;
|
|
document.getElementById( "alwaysAskMe" ).setAttribute("disabled", "true");
|
|
|
|
// Pre-select the choice the user made last time.
|
|
this.chosenApp = this.appLauncher.MIMEInfo.preferredApplicationHandler;
|
|
var applicationDescription = this.appLauncher.MIMEInfo.applicationDescription;
|
|
if (applicationDescription != "")
|
|
document.getElementById( "appName" ).value = applicationDescription;
|
|
else if (this.chosenApp)
|
|
{
|
|
// If a user-chosen application, show its path.
|
|
document.getElementById( "appName" ).value = this.chosenApp.unicodePath;
|
|
}
|
|
|
|
var saveToDisk = document.getElementById("saveToDisk");
|
|
if ( applicationDescription && this.appLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.saveToDisk ) {
|
|
saveToDisk.radioGroup.selectedItem = document.getElementById( "runApp" );
|
|
} else {
|
|
// Save to disk.
|
|
saveToDisk.radioGroup.selectedItem = saveToDisk;
|
|
// Disable choose app button.
|
|
document.getElementById( "chooseApp" ).setAttribute( "disabled", "true" );
|
|
}
|
|
|
|
// Put content type into dialog text.
|
|
var html = document.getElementById( "intro" );
|
|
if ( html && html.childNodes && html.childNodes.length ) {
|
|
// Get raw text.
|
|
var text = html.childNodes[ 0 ].nodeValue;
|
|
// Substitute content type for "#1".
|
|
text = text.replace( /#1/, this.appLauncher.MIMEInfo.MIMEType );
|
|
|
|
// Replace #2 with product name.
|
|
var brandBundle = srGetStrBundle("chrome://global/locale/brand.properties");
|
|
if ( brandBundle ) {
|
|
var product = brandBundle.GetStringFromName( "brandShortName" );
|
|
text = text.replace( /#2/, product );
|
|
}
|
|
|
|
// Replace text in document.
|
|
html.childNodes[ 0 ].nodeValue = text;
|
|
}
|
|
|
|
moveToAlertPosition();
|
|
},
|
|
|
|
// If the user presses OK, we do as requested...
|
|
onOK : function () {
|
|
// Get boolean switch from checkbox.
|
|
var dontAskNextTime = !document.getElementById( "alwaysAskMe" ).checked;
|
|
|
|
// this.appLauncher.MIMEInfo.alwaysAskBeforeHandling = document.getElementById( "alwaysAskMe" ).checked;
|
|
|
|
if ( document.getElementById( "runApp" ).selected ) {
|
|
// Update preferred action if the user chose an app.
|
|
if ( this.userChoseApp ) {
|
|
this.appLauncher.MIMEInfo.preferredAction = this.nsIHelperAppLauncher.useHelperApp;
|
|
}
|
|
this.appLauncher.launchWithApplication( this.chosenApp, dontAskNextTime );
|
|
} else {
|
|
this.appLauncher.MIMEInfo.preferredAction = this.nsIHelperAppLauncher.saveToDisk;
|
|
try {
|
|
this.appLauncher.saveToDisk( null, dontAskNextTime );
|
|
} catch (exception) {
|
|
}
|
|
}
|
|
},
|
|
|
|
// If the user presses cancel, tell the app launcher and close the dialog...
|
|
onCancel : function () {
|
|
// Cancel app launcher.
|
|
try {
|
|
this.appLauncher.Cancel();
|
|
} catch( exception ) {
|
|
}
|
|
},
|
|
|
|
// Enable pick app button if the user chooses that option.
|
|
toggleChoice : function () {
|
|
// See what option is selected.
|
|
if ( document.getElementById( "runApp" ).selected ) {
|
|
// We can enable the pick app button.
|
|
document.getElementById( "chooseApp" ).removeAttribute( "disabled" );
|
|
} else {
|
|
// We can disable the pick app button.
|
|
document.getElementById( "chooseApp" ).setAttribute( "disabled", "true" );
|
|
}
|
|
},
|
|
|
|
// Choose a new/different app...
|
|
chooseApp : function () {
|
|
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance( this.nsIFilePicker );
|
|
fp.init( window,
|
|
this.getString( "chooseAppFilePickerTitle" ),
|
|
this.nsIFilePicker.modeOpen );
|
|
// XXX - We want to say nsIFilePicker.filterExecutable or something
|
|
fp.appendFilters( this.nsIFilePicker.filterAll );
|
|
|
|
if ( fp.show() == this.nsIFilePicker.returnOK && fp.file ) {
|
|
// Remember the file they chose to run.
|
|
this.userChoseApp = true;
|
|
this.chosenApp = fp.file;
|
|
// Update dialog.
|
|
document.getElementById( "appName" ).value = this.chosenApp.unicodePath;
|
|
}
|
|
},
|
|
|
|
// Get string from bundle.
|
|
getString : function ( id ) {
|
|
// String of last resort is the id.
|
|
var result = id;
|
|
|
|
// Get string bundle (if not done previously).
|
|
if ( !this.strings ) {
|
|
this.strings = srGetStrBundle("chrome://global/locale/helperAppLauncher.properties");
|
|
}
|
|
|
|
if ( this.strings ) {
|
|
// Get string from bundle.
|
|
result = this.strings.GetStringFromName( id );
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|