Skip to content

Conversation

bytedream
Copy link
Contributor

@bytedream bytedream commented Jun 15, 2025

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.

@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Jun 15, 2025
@lunny lunny added type/enhancement An improvement of existing functionality topic/ui Change the appearance of the Gitea UI labels Jun 15, 2025
@lunny lunny added this to the 1.25.0 milestone Jun 15, 2025
@wxiaoguang
Copy link
Contributor

It should also follow the browser's default behavior: Ctrl+Click / Command+Click means "Open in New Window"

@bytedream
Copy link
Contributor Author

Done, thanks for pointing this out

@wxiaoguang
Copy link
Contributor

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"

@wxiaoguang
Copy link
Contributor

If you'd like to support "middle click", the ideal approach can be like this:

  • make the items to be real <a> links, then middle-click works for users by default.
  • use our @click handler to handle ctrl/meta keys, and stop the default link's behavior.

@silverwind
Copy link
Member

silverwind commented Jun 17, 2025

I think we should just render a native <a> element and only preventDefault the click event with button 0, while letting the browser handle all other interactions.

This way, stuff like middle click, ctrl+click, cmd+click will all work natively and don't even need explicit handlers.

@wxiaoguang
Copy link
Contributor

I think we should just render a native <a> element and only preventDefault the click event with button 0, while letting the browser handle all other interactions.

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?

@silverwind
Copy link
Member

silverwind commented Jun 17, 2025

I think we should just render a native <a> element and only preventDefault the click event with button 0, while letting the browser handle all other interactions.
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 e.preventDefault when none are because deciding only on e.button is not enough.

@wxiaoguang
Copy link
Contributor

I see, maybe ideally it could be like this:

  • use <a> for tree items with real links.
  • if no ctrl/meta/alt key, then use our "fetch" to load the file view content without reload, and preventDefault.
  • otherwise, we do nothing and leave the work to the browser.

@silverwind
Copy link
Member

silverwind commented Jun 17, 2025

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 shiftKey can be removed, I'm not aware of any special functionality tied to it. altKey is useful for text selection within a link.

@bytedream bytedream changed the title Add repo file tree middle click open Add repo file tree item link behavior Jun 18, 2025
@bytedream
Copy link
Contributor Author

Thanks for the suggestions, I've updated the PR accordingly by using <a> tags.

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.

Interesting, I almost exclusively use the middle click to open links and such in a new tab.

Maybe shiftKey can be removed, I'm not aware of any special functionality tied to it. altKey is useful for text selection within a link.

Shift+LeftClick opens the link in a new browser window, so I've kept it.

@silverwind
Copy link
Member

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 :)

@GiteaBot GiteaBot added lgtm/need 1 This PR needs approval from one additional maintainer to be merged. and removed lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. labels Jun 19, 2025
@lunny
Copy link
Member

lunny commented Jun 19, 2025

It seems when a subtree is loaded, the whole screen flashes briefly.

@bytedream
Copy link
Contributor Author

Fixed

@GiteaBot GiteaBot added lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. and removed lgtm/need 1 This PR needs approval from one additional maintainer to be merged. labels Jun 19, 2025
@lunny lunny added the reviewed/wait-merge This pull request is part of the merge queue. It will be merged soon. label Jun 19, 2025
@wxiaoguang wxiaoguang merged commit 7346ae7 into go-gitea:main Jun 19, 2025
26 checks passed
@GiteaBot GiteaBot removed the reviewed/wait-merge This pull request is part of the merge queue. It will be merged soon. label Jun 19, 2025
zjjhot added a commit to zjjhot/gitea that referenced this pull request Jun 20, 2025
* giteaofficial/main:
  [skip ci] Updated translations via Crowdin
  Add ff_only parameter to POST /repos/{owner}/{repo}/merge-upstream (go-gitea#34770)
  Add repo file tree item link behavior (go-gitea#34730)
  Fix tag target (go-gitea#34781)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. modifies/frontend topic/ui Change the appearance of the Gitea UI type/enhancement An improvement of existing functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants