Go to file
Yarden Shoham 1e29bccddb
Fix elipsis button not working if the last commit loading is deferred (#29544)
Before this change, if we had more than 200 entries being deferred in
loading, the entire table would get replaced thus losing any event
listeners attached to the elements within the table, such as the elipsis
button and commit list with tippy.

With this change we remove the previous javascript code that replaced
the table and use htmx to replace the table.

htmx attributes added:
- `hx-indicator="tr.notready td.message span"`: attach the loading
spinner to the files whose last commit is still being loaded
- `hx-trigger="load"` trigger the request-replace behavior as soon as
possible
- `hx-swap="morph"`: use the idiomorph morphing algorithm, this is the
thing that makes it so the elipsis button event listener is kept during
the replacement, fixing the bug because we don't actually replace the
table, only modifying it
- `hx-post="{{.LastCommitLoaderURL}}"`: make a post request to this url
to get the table with all of the commit information

As part of this change I removed the handling of partial replacement in
the case we have less than 200 "not ready" files. The first reason is
that I couldn't make htmx replace only a subset of returned elements,
the second reason is that we have a cache implemented in the backend
already so the only cost added is that we query the cache a few times
(which is sure to be populated due to the initial request), and the last
reason is that since the last refactor of this functionality that
removed jQuery we don't properly send the "not ready" entries as the
backend expects `FormData` with `f[]` and we send a JSON with `f` so we
always query for all rows anyway.

# Before

![before](https://github.com/go-gitea/gitea/assets/20454870/482ebfec-66c5-40cc-9c1e-e3b3bfe1bbc1)

# After

![after](https://github.com/go-gitea/gitea/assets/20454870/454c517e-3a4e-4006-a49f-99cc56e0fd60)

---------

Signed-off-by: Yarden Shoham <git@yardenshoham.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
(cherry picked from commit 937e8b55149388840bbf6c4d7216495bc3dd2fe9)
2024-03-06 12:10:46 +08:00
.devcontainer
.forgejo [CI] pin go v1.21.8 version 2024-03-06 11:38:47 +08:00
.gitea
assets [CHORE] Update connect-go to maintained fork 2024-02-28 09:40:56 +01:00
build Refactor generate-svg.js (#29348) 2024-02-26 22:30:26 +01:00
cmd Start to migrate from util.OptionalBool to optional.Option[bool] (#29329) 2024-02-26 22:30:26 +01:00
contrib Merge branch 'rebase-forgejo-dependency' into wip-forgejo 2024-02-05 18:58:23 +01:00
custom/conf Allow options to disable user gpg keys configuration from the interface on app.ini (#29486) 2024-03-06 12:10:45 +08:00
docker
docs Allow options to disable user gpg keys configuration from the interface on app.ini (#29486) 2024-03-06 12:10:45 +08:00
manual-testing@877d11b403 [TESTS] add manual testing instructions as a sub-module 2024-02-08 11:43:43 +01:00
models Fix incorrect relative/absolute URL usages (#29531) 2024-03-06 12:10:46 +08:00
modules Fix queue worker incorrectly stopped when there are still more items in the queue (#29532) 2024-03-06 12:10:46 +08:00
options Fix incorrect redirection when creating a PR fails (#29537) 2024-03-06 12:10:45 +08:00
public Update Discord logo (#29285) 2024-02-26 21:42:15 +01:00
releases/images
routers Fix elipsis button not working if the last commit loading is deferred (#29544) 2024-03-06 12:10:46 +08:00
services Fix incorrect relative/absolute URL usages (#29531) 2024-03-06 12:10:46 +08:00
snap
templates Fix elipsis button not working if the last commit loading is deferred (#29544) 2024-03-06 12:10:46 +08:00
tests Add support for API blob upload of release attachments (#29507) 2024-03-06 12:10:46 +08:00
web_src Fix elipsis button not working if the last commit loading is deferred (#29544) 2024-03-06 12:10:46 +08:00
.air.toml
.changelog.yml
.deadcode-out [DEADCODE] update 2024-02-26 22:30:27 +01:00
.dockerignore [RELEASE] cache node_modules 2024-02-19 14:18:26 +01:00
.editorconfig
.eslintrc.yaml Remove jQuery .map() and enable eslint rules for it (#29272) 2024-02-26 21:42:15 +01:00
.gitattributes
.gitignore Ignore __debug_bin* which is generated by vscode when debugging (#29524) 2024-03-06 12:10:45 +08:00
.gitmodules [TESTS] add manual testing instructions as a sub-module 2024-02-08 11:43:43 +01:00
.gitpod.yml Fix Gitpod logic of setting ROOT_URL (#29162) 2024-02-16 15:20:52 +01:00
.golangci.yml
.ignore
.markdownlint.yaml
.npmrc
.spectral.yaml
.stylelintrc.yaml Add tailwindcss (#29357) 2024-02-26 22:30:27 +01:00
.yamllint.yaml
BSDmakefile
build.go
CHANGELOG.md
CODEOWNERS
CONTRIBUTING.md
DCO
Dockerfile [RELEASE] cache node_modules 2024-02-19 14:18:26 +01:00
Dockerfile.rootless [RELEASE] cache node_modules 2024-02-19 14:18:26 +01:00
go.mod bump protobuf module (#29617) 2024-03-06 11:39:07 +08:00
go.sum bump protobuf module (#29617) 2024-03-06 11:39:07 +08:00
LICENSE
main.go [RELEASE] decouple the release name from the version number 2024-02-17 15:27:35 +01:00
MAINTAINERS
Makefile [CI] do not hardcode the Forgejo release in end-to-end testing 2024-03-06 03:15:07 +08:00
package-lock.json Add tailwindcss (#29357) 2024-02-26 22:30:27 +01:00
package.json Add tailwindcss (#29357) 2024-02-26 22:30:27 +01:00
playwright.config.js Merge pull request 'Do not run e2e tests in parallel' (#2440) from maltejur/forgejo:e2e_parallel into forgejo 2024-02-22 18:57:05 +00:00
poetry.lock Update JS and PY dependencies (#29184) 2024-02-17 23:24:31 +01:00
poetry.toml
pyproject.toml Update JS and PY dependencies (#29184) 2024-02-17 23:24:31 +01:00
README.md
RELEASE-NOTES.md [RELEASE] v1.21.6-0 release notes 2024-02-22 14:22:32 +01:00
tailwind.config.js Apply tailwindcss rules with !important (#29437) 2024-03-06 12:10:43 +08:00
vitest.config.js [gitea] Move vitest setup file to root (#29097) 2024-02-10 10:53:43 +01:00
webpack.config.js Add tailwindcss (#29357) 2024-02-26 22:30:27 +01:00

Welcome to Forgejo

Hi there! Tired of big platforms playing monopoly? Providing Git hosting for your project, friends, company or community? Forgejo (/for'd͡ʒe.jo/ inspired by forĝejo the Esperanto word for forge) has you covered with its intuitive interface, light and easy hosting and a lot of builtin functionality.

Forgejo was created in 2022 because we think that the project should be owned by an independent community. If you second that, then Forgejo is for you! Our promise: Independent Free/Libre Software forever!

What does Forgejo offer?

If you like any of the following, Forgejo is literally meant for you:

  • Lightweight: Forgejo can easily be hosted on nearly every machine. Running on a Raspberry? Small cloud instance? No problem!
  • Project management: Besides Git hosting, Forgejo offers issues, pull requests, wikis, kanban boards and much more to coordinate with your team.
  • Publishing: Have something to share? Use releases to host your software for download, or use the package registry to publish it for docker, npm and many other package managers.
  • Customizable: Want to change your look? Change some settings? There are many config switches to make Forgejo work exactly like you want.
  • Powerful: Organizations & team permissions, CI integration, Code Search, LDAP, OAuth and much more. If you have advanced needs, Forgejo has you covered.
  • Privacy: From update checker to default settings: Forgejo is built to be privacy first for you and your crew.
  • Federation: (WIP) We are actively working to connect software forges with each other through ActivityPub, and create a collaborative network of personal instances.

Learn more

Dive into the documentation, subscribe to releases and blog post on our website, find us on the Fediverse or hop into our Matrix room if you have any questions or want to get involved.

Get involved

If you are interested in making Forgejo better, either by reporting a bug or by changing the governance, please take a look at the contribution guide.