/* -*- 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/. */ define(function(require, exports, module) { // ReactJS const ReactDOM = require("react-dom"); // RDP Inspector const { createFactories } = require("./components/reps/rep-utils"); const { MainTabbedArea } = createFactories(require("./components/main-tabbed-area")); const json = document.getElementById("json"); const headers = document.getElementById("headers"); var jsonData; try { jsonData = JSON.parse(json.textContent); } catch (err) { jsonData = err + ""; } // Application state object. var input = { jsonText: json.textContent, jsonPretty : null, json: jsonData, headers: JSON.parse(headers.textContent), tabActive: 1, prettified: false } json.remove(); headers.remove(); /** * Application actions/commands. This list implements all commands * available for the JSON viewer. */ input.actions = { onCopyJson: function() { dispatchEvent("copy", input.prettified ? input.jsonPretty : input.jsonText); }, onSaveJson: function() { dispatchEvent("save", input.prettified ? input.jsonPretty : input.jsonText); }, onCopyHeaders: function() { dispatchEvent("copy-headers", input.headers); }, onSearch: function(value) { theApp.setState({searchFilter: value}); }, onPrettify: function(data) { if (input.prettified) { theApp.setState({jsonText: input.jsonText}); } else { if (!input.jsonPretty) { input.jsonPretty = JSON.stringify(jsonData, null, " "); } theApp.setState({jsonText: input.jsonPretty}); } input.prettified = !input.prettified; }, } /** * Helper for dispatching an event. It's handled in chrome scope. * * @param {String} type Event detail type * @param {Object} value Event detail value */ function dispatchEvent(type, value) { let data = { detail: { type, value, } }; let contentMessageEvent = new CustomEvent("contentMessage", data); window.dispatchEvent(contentMessageEvent); } /** * Render the main application component. It's the main tab bar displayed * at the top of the window. This component also represents ReacJS root. */ var content = document.getElementById("content"); var theApp = ReactDOM.render(MainTabbedArea(input), content); var onResize = event => { window.document.body.style.height = window.innerHeight + "px"; window.document.body.style.width = window.innerWidth + "px"; } window.addEventListener("resize", onResize); onResize(); // Send notification event to the window. Can be useful for // tests as well as extensions. var event = new CustomEvent("JSONViewInitialized", {}); window.jsonViewInitialized = true; window.dispatchEvent(event); // End of json-viewer.js });