diff --git a/components/lenses/ResponseBodyRenderer.vue b/components/lenses/ResponseBodyRenderer.vue
new file mode 100644
index 000000000..0b0fd05fa
--- /dev/null
+++ b/components/lenses/ResponseBodyRenderer.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/components/lenses/renderers/ImageLensRenderer.vue b/components/lenses/renderers/ImageLensRenderer.vue
new file mode 100644
index 000000000..24f29bc1c
--- /dev/null
+++ b/components/lenses/renderers/ImageLensRenderer.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
diff --git a/components/lenses/renderers/JSONLensRenderer.vue b/components/lenses/renderers/JSONLensRenderer.vue
new file mode 100644
index 000000000..96d6b61e5
--- /dev/null
+++ b/components/lenses/renderers/JSONLensRenderer.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
diff --git a/components/lenses/renderers/RawLensRenderer.vue b/components/lenses/renderers/RawLensRenderer.vue
new file mode 100644
index 000000000..2e1c64c1e
--- /dev/null
+++ b/components/lenses/renderers/RawLensRenderer.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
diff --git a/components/ui/ace-editor.vue b/components/ui/ace-editor.vue
index ca77e09bc..10f147c84 100644
--- a/components/ui/ace-editor.vue
+++ b/components/ui/ace-editor.vue
@@ -76,6 +76,7 @@ export default {
})
},
lang(value) {
+ console.log("ace/mode/" + value)
this.editor.getSession().setMode("ace/mode/" + value)
},
options(value) {
diff --git a/helpers/lenses/htmlLens.js b/helpers/lenses/htmlLens.js
new file mode 100644
index 000000000..369efb614
--- /dev/null
+++ b/helpers/lenses/htmlLens.js
@@ -0,0 +1,7 @@
+const htmlLens = {
+ lensName: "HTML",
+ supportedContentTypes: ["text/html"],
+ renderer: "htmlres",
+}
+
+export default htmlLens
diff --git a/helpers/lenses/imageLens.js b/helpers/lenses/imageLens.js
new file mode 100644
index 000000000..93157b004
--- /dev/null
+++ b/helpers/lenses/imageLens.js
@@ -0,0 +1,12 @@
+const imageLens = {
+ lensName: "Image",
+ supportedContentTypes: [
+ "image/gif",
+ "image/jpeg",
+ "image/png",
+ // TODO : Add more image types!
+ ],
+ renderer: "imageres",
+}
+
+export default imageLens
diff --git a/helpers/lenses/jsonLens.js b/helpers/lenses/jsonLens.js
new file mode 100644
index 000000000..9ecb154fa
--- /dev/null
+++ b/helpers/lenses/jsonLens.js
@@ -0,0 +1,7 @@
+const jsonLens = {
+ lensName: "JSON",
+ supportedContentTypes: ["application/json", "application/hal+json", "application/vnd.api+json"],
+ renderer: "json",
+}
+
+export default jsonLens
diff --git a/helpers/lenses/lenses.js b/helpers/lenses/lenses.js
new file mode 100644
index 000000000..0f07a0d6f
--- /dev/null
+++ b/helpers/lenses/lenses.js
@@ -0,0 +1,37 @@
+import jsonLens from "./jsonLens"
+import rawLens from "./rawLens"
+import imageLens from "./imageLens"
+import htmlLens from "./htmlLens"
+
+const lenses = [
+ jsonLens,
+ imageLens,
+ htmlLens,
+
+ // Keep Raw Lens as the last option
+ rawLens,
+]
+
+function getSuitableLenses(response) {
+ const result = []
+
+ if (response && response.headers && response.headers["content-type"]) {
+ const properContentType = response.headers["content-type"].split(";")[0]
+
+ for (const lens of lenses) {
+ if (
+ lens.supportedContentTypes === null ||
+ lens.supportedContentTypes.includes(properContentType)
+ ) {
+ result.push(lens)
+ }
+ }
+ } else {
+ // We don't know the content type, so lets just add rawLens
+ result.push(rawLens)
+ }
+
+ return result
+}
+
+export default getSuitableLenses
diff --git a/helpers/lenses/rawLens.js b/helpers/lenses/rawLens.js
new file mode 100644
index 000000000..8ccb35ba3
--- /dev/null
+++ b/helpers/lenses/rawLens.js
@@ -0,0 +1,7 @@
+const rawLens = {
+ lensName: "Raw",
+ supportedContentTypes: null,
+ renderer: "raw",
+}
+
+export default rawLens
diff --git a/helpers/strategies/AxiosStrategy.js b/helpers/strategies/AxiosStrategy.js
index 81361009f..738094f74 100644
--- a/helpers/strategies/AxiosStrategy.js
+++ b/helpers/strategies/AxiosStrategy.js
@@ -1,4 +1,5 @@
import axios from "axios"
+import { isJSONContentType } from "../utils/contenttypes"
let cancelSource = axios.CancelToken.source()
@@ -34,28 +35,9 @@ const axiosWithoutProxy = async (req, _store) => {
const res = await axios({
...req,
cancelToken: cancelSource.token,
- transformResponse: [
- (data, headers) => {
- // If the response has a JSON content type, try parsing it
- if (
- headers["content-type"] &&
- (headers["content-type"].startsWith("application/json") ||
- headers["content-type"].startsWith("application/vnd.api+json") ||
- headers["content-type"].startsWith("application/hal+json"))
- ) {
- try {
- const jsonData = JSON.parse(data)
- return jsonData
- } catch (e) {
- return data
- }
- }
-
- // Else return the string itself without any transformations
- return data
- },
- ],
+ responseType: "arraybuffer",
})
+
return res
} catch (e) {
if (axios.isCancel(e)) {
diff --git a/pages/index.vue b/pages/index.vue
index b2bc2fb6d..ff40d95c5 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -952,6 +952,10 @@
/>
+