Mypal/devtools/shared/gcli/commands/jsb.js
2019-03-11 13:26:37 +03:00

135 lines
4.2 KiB
JavaScript

/* 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/. */
"use strict";
const { Cc, Ci, Cu } = require("chrome");
const l10n = require("gcli/l10n");
const XMLHttpRequest = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"];
loader.lazyImporter(this, "Preferences", "resource://gre/modules/Preferences.jsm");
loader.lazyImporter(this, "ScratchpadManager", "resource://devtools/client/scratchpad/scratchpad-manager.jsm");
loader.lazyRequireGetter(this, "beautify", "devtools/shared/jsbeautify/beautify");
exports.items = [
{
item: "command",
runAt: "client",
name: "jsb",
description: l10n.lookup("jsbDesc"),
returnValue:"string",
params: [
{
name: "url",
type: "string",
description: l10n.lookup("jsbUrlDesc")
},
{
group: l10n.lookup("jsbOptionsDesc"),
params: [
{
name: "indentSize",
type: "number",
description: l10n.lookup("jsbIndentSizeDesc"),
manual: l10n.lookup("jsbIndentSizeManual"),
defaultValue: Preferences.get("devtools.editor.tabsize", 2),
},
{
name: "indentChar",
type: {
name: "selection",
lookup: [
{ name: "space", value: " " },
{ name: "tab", value: "\t" }
]
},
description: l10n.lookup("jsbIndentCharDesc"),
manual: l10n.lookup("jsbIndentCharManual"),
defaultValue: " ",
},
{
name: "doNotPreserveNewlines",
type: "boolean",
description: l10n.lookup("jsbDoNotPreserveNewlinesDesc")
},
{
name: "preserveMaxNewlines",
type: "number",
description: l10n.lookup("jsbPreserveMaxNewlinesDesc"),
manual: l10n.lookup("jsbPreserveMaxNewlinesManual"),
defaultValue: -1
},
{
name: "jslintHappy",
type: "boolean",
description: l10n.lookup("jsbJslintHappyDesc"),
manual: l10n.lookup("jsbJslintHappyManual")
},
{
name: "braceStyle",
type: {
name: "selection",
data: ["collapse", "expand", "end-expand", "expand-strict"]
},
description: l10n.lookup("jsbBraceStyleDesc2"),
manual: l10n.lookup("jsbBraceStyleManual2"),
defaultValue: "collapse"
},
{
name: "noSpaceBeforeConditional",
type: "boolean",
description: l10n.lookup("jsbNoSpaceBeforeConditionalDesc")
},
{
name: "unescapeStrings",
type: "boolean",
description: l10n.lookup("jsbUnescapeStringsDesc"),
manual: l10n.lookup("jsbUnescapeStringsManual")
}
]
}
],
exec: function(args, context) {
let opts = {
indent_size: args.indentSize,
indent_char: args.indentChar,
preserve_newlines: !args.doNotPreserveNewlines,
max_preserve_newlines: args.preserveMaxNewlines == -1 ?
undefined : args.preserveMaxNewlines,
jslint_happy: args.jslintHappy,
brace_style: args.braceStyle,
space_before_conditional: !args.noSpaceBeforeConditional,
unescape_strings: args.unescapeStrings
};
let xhr = new XMLHttpRequest();
let deferred = context.defer();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200 || xhr.status == 0) {
let result = beautify.js(xhr.responseText, opts);
ScratchpadManager.openScratchpad({text: result});
deferred.resolve();
} else {
deferred.reject("Unable to load page to beautify: " + args.url + " " +
xhr.status + " " + xhr.statusText);
}
};
}
try {
xhr.open("GET", args.url, true);
xhr.send(null);
} catch(e) {
return l10n.lookup("jsbInvalidURL");
}
return deferred.promise;
}
}
];