diff --git a/package.json b/package.json
index 50a0a51d..17ba6a80 100644
--- a/package.json
+++ b/package.json
@@ -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 6f72b9c0..6ac9eb29 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -155,76 +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, padding, type
-
- if (ln.match(/<.+\/>/)) {
- type = "single"
- } else if (ln.match(/<\/.+>/)) {
- type = "closing"
- } else if (ln.match(/<[^!?].*>/)) {
- type = "opening"
- } else {
- type = "other"
- }
- 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 e50eb092..1068aab4 100644
--- a/test/core/utils.js
+++ b/test/core/utils.js
@@ -17,7 +17,6 @@ import {
getAcceptControllingResponse,
createDeepLinkPath,
escapeDeepLinkPath,
- formatXml,
sanitizeUrl
} from "core/utils"
import win from "core/window"
@@ -888,16 +887,6 @@ describe("utils", function() {
})
})
- describe("formatXml", function() {
- it("simple xml formatting", function() {
- const startTime = Date.now()
- const result = formatXml("john doe")
- let duration = Date.now() - startTime
- expect(result).toEqual("\n john doe\n\n")
- expect(duration).toBeLessThan(5)
- })
- })
-
describe("sanitizeUrl", function() {
it("should sanitize a `javascript:` url", function() {
const res = sanitizeUrl("javascript:alert('bam!')")