-
-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Add repo file tree item link behavior #34730
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
It should also follow the browser's default behavior: |
Done, thanks for pointing this out |
By doing some searches, I think "middle key" is not a widely used approach to "open a new window". I do not see browsers officially support it. The widely supported approach is "Ctrl+LeftClick" |
If you'd like to support "middle click", the ideal approach can be like this:
|
I think we should just render a native This way, stuff like middle click, ctrl+click, cmd+click will all work natively and don't even need explicit handlers. |
The same as #34730 (comment) ? Or is there something I missed? |
Basically the same, but I guess the code still need to check whether any modifier key is held, and only |
I see, maybe ideally it could be like this:
|
Yes, so basically: if (e.button !== 0 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) {
return; // let browser handle the click
}
e.preventDefault();
// update view to clicked file Maybe |
Thanks for the suggestions, I've updated the PR accordingly by using
Interesting, I almost exclusively use the middle click to open links and such in a new tab.
Shift+LeftClick opens the link in a new browser window, so I've kept it. |
Yes, we need to keep all modifiers, they all have a purpose and mine opens new window on shift+click too. middle click and ctrl+click are both known to me, so they are not so obscure :) |
@@ -131,6 +142,8 @@ const doGotoSubModule = () => { | |||
} | |||
|
|||
.tree-item { | |||
color: inherit; | |||
text-decoration: inherit; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can add one of our link classes from here instead:
Lines 253 to 256 in a2ae7c6
/* a = always colored, underlined on hover */ | |
/* a.muted = colored on hover, underlined on hover */ | |
/* a.suppressed = never colored, underlined on hover */ | |
/* a.silenced = never colored, never underlined */ |
I guess silenced
may be the best fit if you never want to highlight.
props.navigateViewContent(props.item.fullPath); | ||
}; | ||
const doLoadFileContent = (e: MouseEvent) => { | ||
if (e.button !== 0 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) return; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would extract this into a function in web_src/js/utils/dom.ts
:
/** Returns whether a click event is a left-click without any modifiers held */
export function isPlainClick(e: MouseEvent) {
return e.button === 0 && !e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey;
}
selectedItem?: string, | ||
}>(); | ||
|
||
const isLoading = ref(false); | ||
const children = ref(props.item.children); | ||
const collapsed = ref(!props.item.children); | ||
|
||
const doLoadChildren = async () => { | ||
const doLoadChildren = async (e?: MouseEvent) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const doLoadChildren = async (e?: MouseEvent) => { | |
const doLoadChildren = async (e: MouseEvent | null) => { |
I guess I would prefer if you pass explicit null here to indicate the absence of a event.
Converts the repo file tree items into
<a>
elements to have default link behavior. Dynamic content load is still done when no special key is pressed while clicking on an item.