summaryrefslogtreecommitdiffstats
path: root/devtools/shared/gcli/commands/jsb.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/gcli/commands/jsb.js')
-rw-r--r--devtools/shared/gcli/commands/jsb.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/devtools/shared/gcli/commands/jsb.js b/devtools/shared/gcli/commands/jsb.js
new file mode 100644
index 000000000..b56e079d2
--- /dev/null
+++ b/devtools/shared/gcli/commands/jsb.js
@@ -0,0 +1,134 @@
+/* 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;
+ }
+ }
+];