diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6a7a02ba7..397a3ea03 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@
- Add cache-busting for mitmweb's front end code.
([#7386](https://github.com/mitmproxy/mitmproxy/pull/7386), @mhils)
+- Clicking the URL in mitmweb now places the cursor at the current position instead of selecting the entire URL.
+ ([#7385](https://github.com/mitmproxy/mitmproxy/pull/7385), @lups2000)
## 05 December 2024: mitmproxy 11.0.2
diff --git a/web/src/js/components/FlowView/Comment.tsx b/web/src/js/components/FlowView/Comment.tsx
index 0f3c7c66e..bfb3d786c 100644
--- a/web/src/js/components/FlowView/Comment.tsx
+++ b/web/src/js/components/FlowView/Comment.tsx
@@ -17,6 +17,7 @@ export default function Comment({ flow }: { flow: Flow }) {
dispatch(flowActions.update(flow, { comment }));
}}
placeholder="empty"
+ selectAllOnClick={true}
/>
);
diff --git a/web/src/js/components/FlowView/HttpMessages.tsx b/web/src/js/components/FlowView/HttpMessages.tsx
index 82012e9ed..b5703c48f 100644
--- a/web/src/js/components/FlowView/HttpMessages.tsx
+++ b/web/src/js/components/FlowView/HttpMessages.tsx
@@ -33,6 +33,7 @@ function RequestLine({ flow }: RequestLineProps) {
)
}
isValid={(method) => method.length > 0}
+ selectAllOnClick={true}
/>
@@ -82,6 +84,7 @@ function ResponseLine({ flow }: ResponseLineProps) {
)
}
isValid={isValidHttpVersion}
+ selectAllOnClick={true}
/>
/^\d+$/.test(code)}
+ selectAllOnClick={true}
/>
{flow.response.http_version !== "HTTP/2.0" && (
<>
@@ -105,6 +109,7 @@ function ResponseLine({ flow }: ResponseLineProps) {
flowActions.update(flow, { response: { msg } }),
)
}
+ selectAllOnClick={true}
/>
>
)}
diff --git a/web/src/js/components/Modes/Reverse.tsx b/web/src/js/components/Modes/Reverse.tsx
index 1aea1bc29..20516f14a 100644
--- a/web/src/js/components/Modes/Reverse.tsx
+++ b/web/src/js/components/Modes/Reverse.tsx
@@ -115,7 +115,7 @@ function ReverseToggleRow({
Advanced Configuration
Listen Host
dispatch(setListenHost({ server, value }))
@@ -124,7 +124,7 @@ function ReverseToggleRow({
/>
Listen Port
dispatch(
diff --git a/web/src/js/components/editors/KeyValueListEditor.tsx b/web/src/js/components/editors/KeyValueListEditor.tsx
index 16b7e82f4..ee0b75cf6 100644
--- a/web/src/js/components/editors/KeyValueListEditor.tsx
+++ b/web/src/js/components/editors/KeyValueListEditor.tsx
@@ -36,6 +36,7 @@ class Row extends Component {
onEditDone={(newKey) =>
this.props.onEditDone([newKey, value])
}
+ selectAllOnClick={true}
/>
:
{
this.props.onEditDone([key, newVal])
}
placeholder="empty"
+ selectAllOnClick={true}
/>
);
diff --git a/web/src/js/components/editors/ValueEditor.tsx b/web/src/js/components/editors/ValueEditor.tsx
index 6f5d84f2d..c307c1a91 100644
--- a/web/src/js/components/editors/ValueEditor.tsx
+++ b/web/src/js/components/editors/ValueEditor.tsx
@@ -9,6 +9,7 @@ export interface ValueEditorProps {
onInput?: (newVal: string) => void;
onKeyDown?: (e: React.KeyboardEvent) => void;
placeholder?: string;
+ selectAllOnClick?: boolean;
}
/** "plaintext-only" for browsers which support it, "true" for everyone else */
@@ -69,11 +70,13 @@ export default class ValueEditor extends Component {
this.input.current.focus();
this.suppress_events = false;
- const range = document.createRange();
- range.selectNodeContents(this.input.current);
- const sel = window.getSelection();
- sel?.removeAllRanges();
- sel?.addRange(range);
+ if (this.props.selectAllOnClick) {
+ const range = document.createRange();
+ range.selectNodeContents(this.input.current);
+ const sel = window.getSelection();
+ sel?.removeAllRanges();
+ sel?.addRange(range);
+ }
this.props.onEditStart?.();
});
@@ -125,8 +128,14 @@ export default class ValueEditor extends Component {
has_not_selected_text,
);
- if (still_on_elem && has_not_selected_text) {
- this.startEditing();
+ if (this.props.selectAllOnClick) {
+ if (still_on_elem && has_not_selected_text) {
+ this.startEditing();
+ }
+ } else {
+ if (still_on_elem) {
+ this.startEditing();
+ }
}
this.suppress_events = false;
};