mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
b6b202b6bb
The -*- file variable lines -*- establish per-file settings that Emacs will pick up. This patch makes the following changes to those lines (and touches nothing else): - Never set the buffer's mode. Years ago, Emacs did not have a good JavaScript mode, so it made sense to use Java or C++ mode in .js files. However, Emacs has had js-mode for years now; it's perfectly serviceable, and is available and enabled by default in all major Emacs packagings. Selecting a mode in the -*- file variable line -*- is almost always the wrong thing to do anyway. It overrides Emacs's default choice, which is (now) reasonable; and even worse, it overrides settings the user might have made in their '.emacs' file for that file extension. It's only useful when there's something specific about that particular file that makes a particular mode appropriate. - Correctly propagate settings that establish the correct indentation level for this file: c-basic-offset and js2-basic-offset should be js-indent-level. Whatever value they're given should be preserved; different parts of our tree use different indentation styles. - We don't use tabs in Mozilla JS code. Always set indent-tabs-mode: nil. Remove tab-width: settings, at least in files that don't contain tab characters. - Remove js2-mode settings that belong in the user's .emacs file, like js2-skip-preprocessor-directives.
166 lines
5.9 KiB
JavaScript
166 lines
5.9 KiB
JavaScript
// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
|
const kDialog = "dialog";
|
|
|
|
/**
|
|
* This dialog can be initialized from parameters supplied via window.arguments
|
|
* or it can be used to display blocklist notification and blocklist blocked
|
|
* installs via nsIDialogParamBlock as is done by nsIExtensionManager.
|
|
*
|
|
* When using this dialog with window.arguments it must be opened modally, the
|
|
* caller can inspect the user action after the dialog closes by inspecting the
|
|
* value of the |result| parameter on this object which is set to the dlgtype
|
|
* of the button used to close the dialog.
|
|
*
|
|
* window.arguments[0] is an array of strings to display in the tree. If the
|
|
* array is empty the tree will not be displayed.
|
|
* window.arguments[1] a JS Object with the following properties:
|
|
*
|
|
* title: A title string, to be displayed in the title bar of the dialog.
|
|
* message1: A message string, displayed above the addon list
|
|
* message2: A message string, displayed below the addon list
|
|
* message3: A bolded message string, displayed below the addon list
|
|
* moreInfoURL: An url for displaying more information
|
|
* iconClass : Can be one of the following values (default is alert-icon)
|
|
* alert-icon, error-icon, or question-icon
|
|
*
|
|
* If no value is supplied for message1, message2, message3, or moreInfoURL,
|
|
* the element is not displayed.
|
|
*
|
|
* buttons: {
|
|
* accept: { label: "A Label for the Accept button",
|
|
* focused: true },
|
|
* cancel: { label: "A Label for the Cancel button" },
|
|
* ...
|
|
* },
|
|
*
|
|
* result: The dlgtype of button that was used to dismiss the dialog.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var gButtons = { };
|
|
|
|
function init() {
|
|
var de = document.documentElement;
|
|
var items = [];
|
|
if (window.arguments[0] instanceof Components.interfaces.nsIDialogParamBlock) {
|
|
// This is a warning about a blocklisted item the user is trying to install
|
|
var args = window.arguments[0];
|
|
var softblocked = args.GetInt(0) == 1 ? true : false;
|
|
|
|
var extensionsBundle = document.getElementById("extensionsBundle");
|
|
try {
|
|
var formatter = Components.classes["@mozilla.org/toolkit/URLFormatterService;1"]
|
|
.getService(Components.interfaces.nsIURLFormatter);
|
|
var url = formatter.formatURLPref("extensions.blocklist.detailsURL");
|
|
}
|
|
catch (e) { }
|
|
|
|
var params = {
|
|
moreInfoURL: url,
|
|
};
|
|
|
|
if (softblocked) {
|
|
params.title = extensionsBundle.getString("softBlockedInstallTitle");
|
|
params.message1 = extensionsBundle.getFormattedString("softBlockedInstallMsg",
|
|
[args.GetString(0)]);
|
|
var accept = de.getButton("accept");
|
|
accept.label = extensionsBundle.getString("softBlockedInstallAcceptLabel");
|
|
accept.accessKey = extensionsBundle.getString("softBlockedInstallAcceptKey");
|
|
de.getButton("cancel").focus();
|
|
document.addEventListener("dialogaccept", allowInstall, false);
|
|
}
|
|
else {
|
|
params.title = extensionsBundle.getString("blocklistedInstallTitle2");
|
|
params.message1 = extensionsBundle.getFormattedString("blocklistedInstallMsg2",
|
|
[args.GetString(0)]);
|
|
de.buttons = "accept";
|
|
de.getButton("accept").focus();
|
|
}
|
|
}
|
|
else {
|
|
items = window.arguments[0];
|
|
params = window.arguments[1];
|
|
}
|
|
|
|
var addons = document.getElementById("addonsChildren");
|
|
if (items.length > 0)
|
|
document.getElementById("addonsTree").hidden = false;
|
|
|
|
// Fill the addons list
|
|
for (var item of items) {
|
|
var treeitem = document.createElementNS(kXULNS, "treeitem");
|
|
var treerow = document.createElementNS(kXULNS, "treerow");
|
|
var treecell = document.createElementNS(kXULNS, "treecell");
|
|
treecell.setAttribute("label", item);
|
|
treerow.appendChild(treecell);
|
|
treeitem.appendChild(treerow);
|
|
addons.appendChild(treeitem);
|
|
}
|
|
|
|
// Set the messages
|
|
var messages = ["message1", "message2", "message3"];
|
|
for (let messageEntry of messages) {
|
|
if (messageEntry in params) {
|
|
var message = document.getElementById(messageEntry);
|
|
message.hidden = false;
|
|
message.appendChild(document.createTextNode(params[messageEntry]));
|
|
}
|
|
}
|
|
|
|
document.getElementById("infoIcon").className =
|
|
params["iconClass"] ? "spaced " + params["iconClass"] : "spaced alert-icon";
|
|
|
|
if ("moreInfoURL" in params && params["moreInfoURL"]) {
|
|
message = document.getElementById("moreInfo");
|
|
message.value = extensionsBundle.getString("moreInfoText");
|
|
message.setAttribute("href", params["moreInfoURL"]);
|
|
document.getElementById("moreInfoBox").hidden = false;
|
|
}
|
|
|
|
// Set the window title
|
|
if ("title" in params)
|
|
document.title = params.title;
|
|
|
|
// Set up the buttons
|
|
if ("buttons" in params) {
|
|
gButtons = params.buttons;
|
|
var buttonString = "";
|
|
for (var buttonType in gButtons)
|
|
buttonString += "," + buttonType;
|
|
de.buttons = buttonString.substr(1);
|
|
for (buttonType in gButtons) {
|
|
var button = de.getButton(buttonType);
|
|
button.label = gButtons[buttonType].label;
|
|
if (gButtons[buttonType].focused)
|
|
button.focus();
|
|
document.addEventListener(kDialog + buttonType, handleButtonCommand, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
function shutdown() {
|
|
for (var buttonType in gButtons)
|
|
document.removeEventListener(kDialog + buttonType, handleButtonCommand, true);
|
|
}
|
|
|
|
function allowInstall() {
|
|
var args = window.arguments[0];
|
|
args.SetInt(1, 1);
|
|
}
|
|
|
|
/**
|
|
* Watch for the user hitting one of the buttons to dismiss the dialog
|
|
* and report the result back to the caller through the |result| property on
|
|
* the arguments object.
|
|
*/
|
|
function handleButtonCommand(event) {
|
|
window.arguments[1].result = event.type.substr(kDialog.length);
|
|
}
|