diff --git a/packages/hoppscotch-common/locales/en.json b/packages/hoppscotch-common/locales/en.json index 2cdc2f98..929f59b5 100644 --- a/packages/hoppscotch-common/locales/en.json +++ b/packages/hoppscotch-common/locales/en.json @@ -12,6 +12,7 @@ "clear_cache": "Clear Cache", "clear_history": "Clear all History", "clear_unpinned": "Clear Unpinned", + "clear_response": "Clear Response", "close": "Close", "confirm": "Confirm", "connect": "Connect", diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue index 4ebc0855..d959aef8 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue @@ -6,9 +6,8 @@ -
+
+ + + +
@@ -25,7 +52,7 @@ diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue index 86e2aea7..6e486bc0 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue @@ -7,9 +7,9 @@ -
+
+ + + +
() const htmlResponse = ref(null) +const responseMoreActionsTippy = ref(null) const WRAP_LINES = useNestedSetting("WRAP_LINES", "httpResponseBody") const responseName = computed(() => { @@ -174,6 +206,10 @@ const doTogglePreview = async () => { const { copyIcon, copyResponse } = useCopyResponse(responseBodyText) +const eraseResponse = () => { + emit("update:response", null) +} + const saveAsExample = () => { emit("save-as-example") } @@ -196,6 +232,7 @@ useCodemirror( defineActionHandler("response.preview.toggle", () => doTogglePreview()) defineActionHandler("response.file.download", () => downloadResponse()) defineActionHandler("response.copy", () => copyResponse()) +defineActionHandler("response.erase", () => eraseResponse()) defineActionHandler("response.save-as-example", () => { props.isSavable ? saveAsExample() : null }) diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue index 147957aa..5f3b0d8c 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue @@ -6,9 +6,8 @@ -
+
+ + + +
() + +const emit = defineEmits<{ + (e: "update:response", val: HoppRESTRequestResponse | HoppRESTResponse): void }>() const imageSource = ref("") +const responseMoreActionsTippy = ref(null) const responseType = computed(() => pipe( @@ -101,5 +137,10 @@ onMounted(() => { reader.readAsDataURL(blob) }) +const eraseResponse = () => { + emit("update:response", null) +} + defineActionHandler("response.file.download", () => downloadResponse()) +defineActionHandler("response.erase", () => eraseResponse()) diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue index 97a054c0..704140fa 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue @@ -59,7 +59,7 @@ @click="copyResponse" /> +
@@ -252,6 +258,7 @@ import IconMore from "~icons/lucide/more-horizontal" import IconHelpCircle from "~icons/lucide/help-circle" import IconNetwork from "~icons/lucide/network" import IconSave from "~icons/lucide/save" +import IconEraser from "~icons/lucide/eraser" import * as LJSON from "lossless-json" import * as O from "fp-ts/Option" import * as E from "fp-ts/Either" @@ -458,6 +465,11 @@ const saveAsExample = () => { } const { copyIcon, copyResponse } = useCopyResponse(jsonBodyText) + +const eraseResponse = () => { + emit("update:response", null) +} + const { downloadIcon, downloadResponse } = useDownloadResponse( "application/json", jsonBodyText, @@ -520,6 +532,7 @@ const toggleFilterState = () => { defineActionHandler("response.file.download", () => downloadResponse()) defineActionHandler("response.copy", () => copyResponse()) +defineActionHandler("response.erase", () => eraseResponse()) defineActionHandler("response.save-as-example", () => { props.isSavable ? saveAsExample() : null }) diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue index 9175d353..ee6db97b 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue @@ -6,9 +6,8 @@ -
+
+ + + +
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue index 154c98f3..4decc253 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue @@ -7,9 +7,8 @@ -
+
+ + + +
import IconWrapText from "~icons/lucide/wrap-text" import IconSave from "~icons/lucide/save" +import IconEraser from "~icons/lucide/eraser" +import IconMore from "~icons/lucide/more-horizontal" import { ref, computed, reactive } from "vue" import { flow, pipe } from "fp-ts/function" import * as S from "fp-ts/string" @@ -139,6 +166,10 @@ const saveAsExample = () => { emit("save-as-example") } +const eraseResponse = () => { + emit("update:response", null) +} + const responseType = computed(() => pipe( props.response, @@ -178,6 +209,7 @@ const { copyIcon, copyResponse } = useCopyResponse(responseBodyText) const rawResponse = ref(null) const WRAP_LINES = useNestedSetting("WRAP_LINES", "httpResponseBody") +const responseMoreActionsTippy = ref(null) useCodemirror( rawResponse, @@ -202,4 +234,5 @@ useCodemirror( defineActionHandler("response.file.download", () => downloadResponse()) defineActionHandler("response.copy", () => copyResponse()) +defineActionHandler("response.erase", () => eraseResponse()) diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue index 45516541..09f627b2 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue @@ -6,9 +6,8 @@ -
+
+ + + +
@@ -25,7 +52,7 @@ diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue index 4305c9e7..db95a7dd 100644 --- a/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue +++ b/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue @@ -6,9 +6,8 @@ -
+
+ + + +
@@ -61,6 +86,8 @@ diff --git a/packages/hoppscotch-common/src/helpers/actions.ts b/packages/hoppscotch-common/src/helpers/actions.ts index ceeba751..e8579aa2 100644 --- a/packages/hoppscotch-common/src/helpers/actions.ts +++ b/packages/hoppscotch-common/src/helpers/actions.ts @@ -70,6 +70,7 @@ export type HoppAction = | "response.schema.toggle" // Toggle response data schema | "response.file.download" // Download response as file | "response.copy" // Copy response to clipboard + | "response.erase" // Erase/clear response | "response.save" // Save response | "response.save-as-example" // Save response as example | "modals.login.toggle" // Login to Hoppscotch diff --git a/packages/hoppscotch-common/src/helpers/keybindings.ts b/packages/hoppscotch-common/src/helpers/keybindings.ts index 28b9d141..eab991b3 100644 --- a/packages/hoppscotch-common/src/helpers/keybindings.ts +++ b/packages/hoppscotch-common/src/helpers/keybindings.ts @@ -37,7 +37,7 @@ type Key = | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "up" | "down" | "left" - | "right" | "/" | "?" | "." | "enter" | "tab" + | "right" | "/" | "?" | "." | "enter" | "tab" | "delete" | "backspace" /* eslint-enable */ type ModifierBasedShortcutKey = `${ModifierKeys}-${Key}` @@ -77,6 +77,8 @@ const baseBindings: { "ctrl-.": "response.copy", "ctrl-e": "response.save-as-example", "ctrl-shift-l": "editor.format", + "ctrl-delete": "response.erase", + "ctrl-backspace": "response.erase", } // Desktop-only bindings @@ -225,6 +227,11 @@ function getPressedKey(ev: KeyboardEvent): Key | null { // Check for Tab key if (key === "tab") return "tab" + // Check for Delete key + if (key === "delete") return "delete" + + if (key === "backspace") return "backspace" + // Check letter keys const isLetter = key.length === 1 && key >= "a" && key <= "z" if (isLetter) return key as Key