summaryrefslogtreecommitdiffstats
path: root/devtools/client/jsonview/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/jsonview/utils.js')
-rw-r--r--devtools/client/jsonview/utils.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/devtools/client/jsonview/utils.js b/devtools/client/jsonview/utils.js
new file mode 100644
index 000000000..a70afdc68
--- /dev/null
+++ b/devtools/client/jsonview/utils.js
@@ -0,0 +1,101 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* 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 { Cu, Cc, Ci } = require("chrome");
+const Services = require("Services");
+const { getMostRecentBrowserWindow } = require("sdk/window/utils");
+
+const OPEN_FLAGS = {
+ RDONLY: parseInt("0x01", 16),
+ WRONLY: parseInt("0x02", 16),
+ CREATE_FILE: parseInt("0x08", 16),
+ APPEND: parseInt("0x10", 16),
+ TRUNCATE: parseInt("0x20", 16),
+ EXCL: parseInt("0x80", 16)
+};
+
+/**
+ * Open File Save As dialog and let the user to pick proper file location.
+ */
+exports.getTargetFile = function () {
+ let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
+
+ let win = getMostRecentBrowserWindow();
+ fp.init(win, null, Ci.nsIFilePicker.modeSave);
+ fp.appendFilter("JSON Files", "*.json; *.jsonp;");
+ fp.appendFilters(Ci.nsIFilePicker.filterText);
+ fp.appendFilters(Ci.nsIFilePicker.filterAll);
+ fp.filterIndex = 0;
+
+ let rv = fp.show();
+ if (rv == Ci.nsIFilePicker.returnOK || rv == Ci.nsIFilePicker.returnReplace) {
+ return fp.file;
+ }
+
+ return null;
+};
+
+/**
+ * Save JSON to a file
+ */
+exports.saveToFile = function (file, jsonString) {
+ let foStream = Cc["@mozilla.org/network/file-output-stream;1"]
+ .createInstance(Ci.nsIFileOutputStream);
+
+ // write, create, truncate
+ let openFlags = OPEN_FLAGS.WRONLY | OPEN_FLAGS.CREATE_FILE |
+ OPEN_FLAGS.TRUNCATE;
+
+ let permFlags = parseInt("0666", 8);
+ foStream.init(file, openFlags, permFlags, 0);
+
+ let converter = Cc["@mozilla.org/intl/converter-output-stream;1"]
+ .createInstance(Ci.nsIConverterOutputStream);
+
+ converter.init(foStream, "UTF-8", 0, 0);
+
+ // The entire jsonString can be huge so, write the data in chunks.
+ let chunkLength = 1024 * 1204;
+ for (let i = 0; i <= jsonString.length; i++) {
+ let data = jsonString.substr(i, chunkLength + 1);
+ if (data) {
+ converter.writeString(data);
+ }
+ i = i + chunkLength;
+ }
+
+ // this closes foStream
+ converter.close();
+};
+
+/**
+ * Get the current theme from preferences.
+ */
+exports.getCurrentTheme = function () {
+ return Services.prefs.getCharPref("devtools.theme");
+};
+
+/**
+ * Export given object into the target window scope.
+ */
+exports.exportIntoContentScope = function (win, obj, defineAs) {
+ let clone = Cu.createObjectIn(win, {
+ defineAs: defineAs
+ });
+
+ let props = Object.getOwnPropertyNames(obj);
+ for (let i = 0; i < props.length; i++) {
+ let propName = props[i];
+ let propValue = obj[propName];
+ if (typeof propValue == "function") {
+ Cu.exportFunction(propValue, clone, {
+ defineAs: propName
+ });
+ }
+ }
+};