diff --git a/package.json b/package.json index 50a0a51d..212ccd43 100644 --- a/package.json +++ b/package.json @@ -56,12 +56,12 @@ "memoizee": "0.4.1", "promise-worker": "^1.1.1", "prop-types": "^15.5.10", - "react": "^15.4.0", + "react": "^15.6.2", "react-addons-perf": "^15.4.0", "react-addons-shallow-compare": "0.14.8", - "react-addons-test-utils": "^15.4.0", + "react-addons-test-utils": "^15.6.2", "react-collapse": "2.3.1", - "react-dom": "^15.4.0", + "react-dom": "^15.6.2", "react-height": "^2.0.0", "react-hot-loader": "1.3.1", "react-immutable-proptypes": "2.1.0", @@ -84,6 +84,7 @@ "whatwg-fetch": "0.11.1", "worker-loader": "^0.7.1", "xml": "1.0.1", + "xml-but-prettier": "^1.0.1", "yaml-js": "0.2.0" }, "devDependencies": { diff --git a/src/core/components/response-body.jsx b/src/core/components/response-body.jsx index c55c1d6d..e3c2aeb1 100644 --- a/src/core/components/response-body.jsx +++ b/src/core/components/response-body.jsx @@ -1,6 +1,6 @@ import React from "react" import PropTypes from "prop-types" -import { formatXml } from "core/utils" +import formatXml from "xml-but-prettier" import lowerCase from "lodash/lowerCase" export default class ResponseBody extends React.Component { @@ -31,7 +31,9 @@ export default class ResponseBody extends React.Component { // XML } else if (/xml/i.test(contentType)) { - body = formatXml(content) + body = formatXml(content, { + textNodesOnSameLine: true + }) bodyEl = // HTML or Plain Text diff --git a/src/core/utils.js b/src/core/utils.js index b1b7f9de..6ac9eb29 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -155,83 +155,6 @@ export function getList(iterable, keys) { return Im.List.isList(val) ? val : Im.List() } -// Adapted from http://stackoverflow.com/a/2893259/454004 -// Note: directly ported from CoffeeScript -export function formatXml (xml) { - var contexp, fn, formatted, indent, l, lastType, len, lines, ln, reg, transitions, wsexp - reg = /(>)(<)(\/*)/g - wsexp = /[ ]*(.*)[ ]+\n/g - contexp = /(<.+>)(.+\n)/g - xml = xml.replace(/\r\n/g, "\n").replace(reg, "$1\n$2$3").replace(wsexp, "$1\n").replace(contexp, "$1\n$2") - formatted = "" - lines = xml.split("\n") - indent = 0 - lastType = "other" - transitions = { - "single->single": 0, - "single->closing": -1, - "single->opening": 0, - "single->other": 0, - "closing->single": 0, - "closing->closing": -1, - "closing->opening": 0, - "closing->other": 0, - "opening->single": 1, - "opening->closing": 0, - "opening->opening": 1, - "opening->other": 1, - "other->single": 0, - "other->closing": -1, - "other->opening": 0, - "other->other": 0 - } - fn = function(ln) { - var fromTo, key, padding, type, types, value - types = { - single: Boolean(ln.match(/<.+\/>/)), - closing: Boolean(ln.match(/<\/.+>/)), - opening: Boolean(ln.match(/<[^!?].*>/)) - } - type = ((function() { - var results - results = [] - for (key in types) { - value = types[key] - if (value) { - results.push(key) - } - } - return results - })())[0] - type = type === void 0 ? "other" : type - fromTo = lastType + "->" + type - lastType = type - padding = "" - indent += transitions[fromTo] - padding = ((function() { - /* eslint-disable no-unused-vars */ - var m, ref1, results, j - results = [] - for (j = m = 0, ref1 = indent; 0 <= ref1 ? m < ref1 : m > ref1; j = 0 <= ref1 ? ++m : --m) { - results.push(" ") - } - /* eslint-enable no-unused-vars */ - return results - })()).join("") - if (fromTo === "opening->closing") { - formatted = formatted.substr(0, formatted.length - 1) + ln + "\n" - } else { - formatted += padding + ln + "\n" - } - } - for (l = 0, len = lines.length; l < len; l++) { - ln = lines[l] - fn(ln) - } - return formatted -} - - /** * Adapted from http://github.com/asvd/microlight * @copyright 2016 asvd diff --git a/test/core/utils.js b/test/core/utils.js index d65046cb..1068aab4 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -925,4 +925,5 @@ sbG8iKTs8L3NjcmlwdD4=`) expect(sanitizeUrl({})).toEqual("") }) }) + })