summaryrefslogtreecommitdiffstats
path: root/templates (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Update module ↵Renovate Bot2024-08-0910-20/+20
| | | | github.com/editorconfig-checker/editorconfig-checker/v2/cmd/editorconfig-checker to v3
* [UI] Fix inconsitencies in link/login account pageGusted2024-08-093-7/+7
| | | | | | | | - Add the 'correct' styling for column on the link account page, this follows what was done for the login/register page in 629ca22a975d74cf6d02bbb25963195d4d21ff5b. - Move some if conditions to be outside of the container which allocates space on the page, this ensures it's not being shown if it's not needed. - Resolves #4844
* feat(performance): remove `BranchName` in `/:owner/:repo/commit/:commit`emilylange2024-08-081-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `BranchName` provides the nearest branch of the requested `:commit`. It's plenty fast on smaller repositories. On larger repositories like nixpkgs, however, this can easily take 2-3 seconds on a modern machine on a NVMe. For context, at the time of writing, nixpkgs has over 650k commits and roughly 250 branches. `BranchName` is used once in the whole view: The cherry-pick target branch default selection. And I believe that's a logic error, which is why this patch is so small. The nearest branch of a given commit will always be a branch the commit is already part of. The branch you most likely *don't* want to cherry-pick to. Sure, one can technically cherry-pick a commit onto the same branch, but that simply results in an empty commit. I don't believe this is intended and even less so worth the compute. Instead, the cherry-pick branch selection suggestion now always uses the default branch, which used to be the fallback. If a user wants to know which branches contain the given commit, `load-branches-and-tags` exists and should be used instead. Also, to add insult to injury, `BranchName` was calculated for both logged-in and not logged-in users, despite its only consumer, the cherry-pick operation, only being rendered when a given user has write/commit permissions. But this isn't particularly surprising, given this happens a lot in Forgejo's codebase.
* feat(i18n): allow different translations of creation links and titles (#4829)0ko2024-08-074-7/+7
| | | | | Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4829 Reviewed-by: Gusted <gusted@noreply.codeberg.org>
* [BUG] Ensure all filters are persistent in issue filtersGusted2024-08-063-35/+35
| | | | | | | - Ensure that all filters are set in the issue filters links, thus becoming persistent. - Adds integration test - Resolves #4843
* Merge pull request '[UI] Do not include trailing EOL character when counting ↵Gusted2024-08-061-0/+5
|\ | | | | | | | | | | | | | | lines' (#4835) from gusted/forgejo-num-lines into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4835 Reviewed-by: Caesar Schinas <caesar@caesarschinas.com> Reviewed-by: Otto <otto@codeberg.org>
| * [UI] Do not include trailing EOL character when counting linesGusted2024-08-061-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - Adjust the counting of the number of lines of a file to match the amount of rendered lines. This simply means that a file with the content of `a\n` will be shown as having `1 line` rather than `2 lines`. This matches with the amount of lines that are being rendered (the last empty line is never rendered) and matches more with the expecation of the user (a trailing EOL is a technical detail). - In the case there's no EOL, the reason why it was counting 'incorrectly' was to show if there was a trailing EOL or not, but now text is shown to tell the user this. - Integration test added. - Resolves Codeberg/Community#1612
* | Merge pull request '[gitea] week 2024-32 cherry pick (gitea/main -> ↵Earl Warren2024-08-062-37/+48
|\ \ | |/ |/| | | | | | | | | forgejo)' (#4801) from earl-warren/wcp/2024-32 into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4801 Reviewed-by: Gusted <gusted@noreply.codeberg.org>
| * Add permission description for API to add repo collaborator (#31744)Jason Song2024-08-041-0/+5
| | | | | | | | | | | | Fix #31552. (cherry picked from commit 333c9ed8cab961b6dd58b04edc47a57dc4d6dbab)
| * Fix the display of project type for deleted projects (#31732)yp053272024-08-041-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | Fix: #31727 After: ![image](https://github.com/user-attachments/assets/1dfb4b31-3bd6-47f7-b126-650f33f453e2) (cherry picked from commit 75d0b61546e00390afdd850149de525dd64336a5) Conflicts: options/locale/locale_en-US.ini trivial conflict & fix excessive uppercase to unify with the other translations
| * Fix API endpoint for registration-token (#31722)Jason Song2024-08-041-33/+33
| | | | | | | | | | | | Partially fix #31707. Related to #30656 (cherry picked from commit bf5ae79c5163b8dd6a3185711ad11893b1270f62)
* | activitypub: Implement an instance-wide actorGergely Nagy2024-08-051-0/+34
|/ | | | | | | | | An instance-wide actor is required for outgoing signed requests that are done on behalf of the instance, rather than on behalf of other actors. Such things include updating profile information, or fetching public keys. Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
* Arch packages implementation (#4785)Exploding Dragon2024-08-043-0/+149
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This PR is from https://github.com/go-gitea/gitea/pull/31037 This PR was originally created by @d1nch8g , and the original source code comes from https://ion.lc/core/gitea. This PR adds a package registry for [Arch Linux](https://archlinux.org/) packages with support for package files, [signatures](https://wiki.archlinux.org/title/Pacman/Package_signing), and automatic [pacman-database](https://archlinux.org/pacman/repo-add.8.html) management. Features: 1. Push any ` tar.zst ` package and Gitea sign it. 2. Delete endpoint for specific package version and all related files 3. Supports trust levels with `SigLevel = Required`. 4. Package UI with instructions to connect to the new pacman database and visualised package metadata ![](/attachments/810ca6df-bd20-44c2-bdf7-95e94886d750) You can follow [this tutorial](https://wiki.archlinux.org/title/Creating_packages) to build a *.pkg.tar.zst package for testing docs pr: https://codeberg.org/forgejo/docs/pulls/791 Co-authored-by: d1nch8g@ion.lc Co-authored-by: @KN4CK3R Co-authored-by: @mahlzahn Co-authored-by: @silverwind Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4785 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Co-authored-by: Exploding Dragon <explodingfkl@gmail.com> Co-committed-by: Exploding Dragon <explodingfkl@gmail.com>
* Merge pull request 'Refactor user-cards as a grid' (#4760) from ↵0ko2024-08-021-12/+15
|\ | | | | | | | | | | | | 0ko/forgejo:ui-usercards-grid into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4760 Reviewed-by: Caesar Schinas <caesar@caesarschinas.com>
| * ui: refactor user-cards as a grid0ko2024-08-021-12/+15
| |
* | feat(quota): Quota enforcementGergely Nagy2024-08-022-0/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous commit laid out the foundation of the quota engine, this one builds on top of it, and implements the actual enforcement. Enforcement happens at the route decoration level, whenever possible. In case of the API, when over quota, a 413 error is returned, with an appropriate JSON payload. In case of web routes, a 413 HTML page is rendered with similar information. This implementation is for a **soft quota**: quota usage is checked before an operation is to be performed, and the operation is *only* denied if the user is already over quota. This makes it possible to go over quota, but has the significant advantage of being practically implementable within the current Forgejo architecture. The goal of enforcement is to deny actions that can make the user go over quota, and allow the rest. As such, deleting things should - in almost all cases - be possible. A prime exemption is deleting files via the web ui: that creates a new commit, which in turn increases repo size, thus, is denied if the user is over quota. Limitations ----------- Because we generally work at a route decorator level, and rarely look *into* the operation itself, `size:repos:public` and `size:repos:private` are not enforced at this level, the engine enforces against `size:repos:all`. This will be improved in the future. AGit does not play very well with this system, because AGit PRs count toward the repo they're opened against, while in the GitHub-style fork + pull model, it counts against the fork. This too, can be improved in the future. There's very little done on the UI side to guard against going over quota. What this patch implements, is enforcement, not prevention. The UI will still let you *try* operations that *will* result in a denial. Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
* | feat(quota): Humble beginnings of a quota engineGergely Nagy2024-08-021-1/+1371
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an implementation of a quota engine, and the API routes to manage its settings. This does *not* contain any enforcement code: this is just the bedrock, the engine itself. The goal of the engine is to be flexible and future proof: to be nimble enough to build on it further, without having to rewrite large parts of it. It might feel a little more complicated than necessary, because the goal was to be able to support scenarios only very few Forgejo instances need, scenarios the vast majority of mostly smaller instances simply do not care about. The goal is to support both big and small, and for that, we need a solid, flexible foundation. There are thee big parts to the engine: counting quota use, setting limits, and evaluating whether the usage is within the limits. Sounds simple on paper, less so in practice! Quota counting ============== Quota is counted based on repo ownership, whenever possible, because repo owners are in ultimate control over the resources they use: they can delete repos, attachments, everything, even if they don't *own* those themselves. They can clean up, and will always have the permission and access required to do so. Would we count quota based on the owning user, that could lead to situations where a user is unable to free up space, because they uploaded a big attachment to a repo that has been taken private since. It's both more fair, and much safer to count quota against repo owners. This means that if user A uploads an attachment to an issue opened against organization O, that will count towards the quota of organization O, rather than user A. One's quota usage stats can be queried using the `/user/quota` API endpoint. To figure out what's eating into it, the `/user/repos?order_by=size`, `/user/quota/attachments`, `/user/quota/artifacts`, and `/user/quota/packages` endpoints should be consulted. There's also `/user/quota/check?subject=<...>` to check whether the signed-in user is within a particular quota limit. Quotas are counted based on sizes stored in the database. Setting quota limits ==================== There are different "subjects" one can limit usage for. At this time, only size-based limits are implemented, which are: - `size:all`: As the name would imply, the total size of everything Forgejo tracks. - `size:repos:all`: The total size of all repositories (not including LFS). - `size:repos:public`: The total size of all public repositories (not including LFS). - `size:repos:private`: The total size of all private repositories (not including LFS). - `size:git:all`: The total size of all git data (including all repositories, and LFS). - `size:git:lfs`: The size of all git LFS data (either in private or public repos). - `size:assets:all`: The size of all assets tracked by Forgejo. - `size:assets:attachments:all`: The size of all kinds of attachments tracked by Forgejo. - `size:assets:attachments:issues`: Size of all attachments attached to issues, including issue comments. - `size:assets:attachments:releases`: Size of all attachments attached to releases. This does *not* include automatically generated archives. - `size:assets:artifacts`: Size of all Action artifacts. - `size:assets:packages:all`: Size of all Packages. - `size:wiki`: Wiki size Wiki size is currently not tracked, and the engine will always deem it within quota. These subjects are built into Rules, which set a limit on *all* subjects within a rule. Thus, we can create a rule that says: "1Gb limit on all release assets, all packages, and git LFS, combined". For a rule to stand, the total sum of all subjects must be below the rule's limit. Rules are in turn collected into groups. A group is just a name, and a list of rules. For a group to stand, all of its rules must stand. Thus, if we have a group with two rules, one that sets a combined 1Gb limit on release assets, all packages, and git LFS, and another rule that sets a 256Mb limit on packages, if the user has 512Mb of packages, the group will not stand, because the second rule deems it over quota. Similarly, if the user has only 128Mb of packages, but 900Mb of release assets, the group will not stand, because the combined size of packages and release assets is over the 1Gb limit of the first rule. Groups themselves are collected into Group Lists. A group list stands when *any* of the groups within stand. This allows an administrator to set conservative defaults, but then place select users into additional groups that increase some aspect of their limits. To top it off, it is possible to set the default quota groups a user belongs to in `app.ini`. If there's no explicit assignment, the engine will use the default groups. This makes it possible to avoid having to assign each and every user a list of quota groups, and only those need to be explicitly assigned who need a different set of groups than the defaults. If a user has any quota groups assigned to them, the default list will not be considered for them. The management APIs =================== This commit contains the engine itself, its unit tests, and the quota management APIs. It does not contain any enforcement. The APIs are documented in-code, and in the swagger docs, and the integration tests can serve as an example on how to use them. Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
* | feat(api): An `order_by` param for user.ListMyReposGergely Nagy2024-08-021-0/+9
| | | | | | | | | | | | | | | | | | | | | | Add an optional `order_by` parameter to the `user.ListMyRepos` handler (which handles the `/api/v1/user/repos` route), allowing a user to sort repos by name (the default), id, or size. The latter will be useful later for figuring out which repos use most space, which repos eat most into a user's quota. Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
* | Merge pull request 'Distinguish between new tags, releases and pre-releases ↵Gusted2024-08-021-4/+12
|\ \ | | | | | | | | | | | | | | | | | | | | | on activity page' (#4782) from mahlzahn/forgejo:repo_activity_releases into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4782 Reviewed-by: 0ko <0ko@noreply.codeberg.org> Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
| * | feat(UI): fix links, add labels for releases on repo activity pageRobert Wolff2024-08-021-4/+12
| |/
* / feat(UI): add links to icons in repository file listRobert Wolff2024-08-011-10/+9
|/
* Merge pull request 'feat(UI): add package counter to repo/user/org overview ↵Gusted2024-07-313-0/+11
|\ | | | | | | | | | | | | pages' (#4697) from mahlzahn/forgejo:add_packages_counter into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4697 Reviewed-by: Gusted <gusted@noreply.codeberg.org>
| * feat(UI): add package counter to repo/user/org overview pagesRobert Wolff2024-07-313-0/+11
| | | | | | | | | | | | | | - add package counter to repo/user/org overview pages - add go unit tests for repo/user has/count packages - add many more unit tests for packages model - fix error for non-existing packages in DeletePackageByID and SetRepositoryLink
* | Merge pull request 'fix(UI): missing rebase command line instructions for ↵Earl Warren2024-07-311-0/+2
|\ \ | |/ |/| | | | | | | | | rebase ff-only' (#4758) from mahlzahn/forgejo:fix_command_line_instructions_rebase_ff_only into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4758 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
| * fix(UI): missing rebase command line instructions for rebase ff-onlyRobert Wolff2024-07-311-0/+2
| |
* | [UI] Fix admin layoutGusted2024-07-301-1/+1
|/ | | | | - Partially reverts a72b660cbb61d1932190e5d1cecd9defbab1260b - Restores the behavior of #3087
* Merge pull request 'Implement external release assets' (#1445) from ↵Earl Warren2024-07-303-15/+76
|\ | | | | | | | | | | | | maltejur/forgejo:forgejo-external-attachments into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/1445 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
| * Implement external assetsMalte Jürgens2024-07-293-15/+76
| |
* | Merge pull request 'Refactor repo migration items' (#4710) from ↵Earl Warren2024-07-307-44/+83
|\ \ | | | | | | | | | | | | | | | | | | 0ko/forgejo:ui-migration-items into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4710 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
| * | ui: refactor repo migration items0ko2024-07-277-44/+83
| | |
* | | Merge pull request '[gitea] week 2024-31 cherry pick (gitea/main -> ↵Earl Warren2024-07-302-3/+30
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | forgejo)' (#4716) from earl-warren/wcp/2024-31 into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4716 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Reviewed-by: 0ko <0ko@noreply.codeberg.org>
| * | Add return type to GetRawFileOrLFS and GetRawFile (#31680)Adam Majer2024-07-281-3/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | Document return type for the endpoints that fetch specific files from a repository. This allows the swagger generated code to read the returned data. Co-authored-by: Giteabot <teabot@gitea.io> (cherry picked from commit bae87dfb0958e6a2920c905e51c2a026b7b71ca6)
| * | Support delete user email in admin panel (#31690)yp053272024-07-281-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ![QQ_1721784609320](https://github.com/user-attachments/assets/23f08bf3-93f4-44d7-963d-10380ef8c1f1) ![QQ_1721784616403](https://github.com/user-attachments/assets/667cbd1e-5e21-4489-8d18-2a7be85190db) ![QQ_1721784626722](https://github.com/user-attachments/assets/495beb94-dfa2-481c-aa60-d5115cad1ae1) --------- Co-authored-by: Jason Song <i@wolfogre.com> (cherry picked from commit cc044818c33ff066c4e5869c9e75de9707def6ed)
* | | [UI] Show AGit label on merged PRGusted2024-07-281-0/+9
|/ / | | | | | | | | - The label wasn't show on merged PRs. - Integration test added
* | Merge pull request '[SEC] Notify owner about TOTP enrollment' (#4704) from ↵Gusted2024-07-271-0/+15
|\ \ | |/ |/| | | | | | | | | gusted/sec-more-totp into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4704 Reviewed-by: 0ko <0ko@noreply.codeberg.org>
| * [SEC] Notify owner about TOTP enrollmentGusted2024-07-261-0/+15
| | | | | | | | | | | | | | - In the spirit of #4635 - Notify the owner when their account is getting enrolled into TOTP. The message is changed according if they have security keys or not. - Integration test added.
* | [MAIL] Use correct function in mail footerGusted2024-07-261-1/+1
|/ | | | | | | | - Regression of #4635 - The authentication mails weren't being sent with links to the instance, because the the wrong variable was used in the mail footer. `$.AppUrl` should've been `AppUrl`. - Unit test added.
* fix(ui): fix conversation template0ko2024-07-251-1/+1
|
* fix(ui): use right placeholder string in milestones search (#4628)Robert Wolff2024-07-251-0/+2
| | | | | | | | | | | | | This PR fixes a wrong placeholder for the search for milestones. I tested it locally (see attachments, below). Before: https://codeberg.org/attachments/ba845ce1-1f20-4131-a74d-7220986a4acf After: https://codeberg.org/attachments/0c4e32ee-b1a8-4472-837d-daa2a2a50121 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4628 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Reviewed-by: 0ko <0ko@noreply.codeberg.org> Co-authored-by: Robert Wolff <mahlzahn@posteo.de> Co-committed-by: Robert Wolff <mahlzahn@posteo.de>
* [UI] Fix scoped-access-tokenGusted2024-07-241-8/+6
| | | | | | - Regression of #4571 - Refactor to not use the component API of Vue. The root cause is still unknown.
* [SECURITY] Notify users about account security changesGusted2024-07-235-0/+61
| | | | | | | | | | | | | | | | | | | - Currently if the password, primary mail, TOTP or security keys are changed, no notification is made of that and makes compromising an account a bit easier as it's essentially undetectable until the original person tries to log in. Although other changes should be made as well (re-authing before allowing a password change), this should go a long way of improving the account security in Forgejo. - Adds a mail notification for password and primary mail changes. For the primary mail change, a mail notification is sent to the old primary mail. - Add a mail notification when TOTP or a security keys is removed, if no other 2FA method is configured the mail will also contain that 2FA is no longer needed to log into their account. - `MakeEmailAddressPrimary` is refactored to the user service package, as it now involves calling the mailer service. - Unit tests added. - Integration tests added.
* Merge pull request '[gitea] week 2024-30 cherry pick (gitea/main -> ↵Earl Warren2024-07-232-2/+2
|\ | | | | | | | | | | | | forgejo)' (#4607) from algernon/wcp/2024-30 into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4607 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
| * allow synchronizing user status from OAuth2 login providers (#31572)Rowan Bohde2024-07-222-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This leverages the existing `sync_external_users` cron job to synchronize the `IsActive` flag on users who use an OAuth2 provider set to synchronize. This synchronization is done by checking for expired access tokens, and using the stored refresh token to request a new access token. If the response back from the OAuth2 provider is the `invalid_grant` error code, the user is marked as inactive. However, the user is able to reactivate their account by logging in the web browser through their OAuth2 flow. Also changed to support this is that a linked `ExternalLoginUser` is always created upon a login or signup via OAuth2. Ideally, we would also refresh permissions from the configured OAuth provider (e.g., admin, restricted and group mappings) to match the implementation of LDAP. However, the OAuth library used for this `goth`, doesn't seem to support issuing a session via refresh tokens. The interface provides a [`RefreshToken` method](https://github.com/markbates/goth/blob/master/provider.go#L20), but the returned `oauth.Token` doesn't implement the `goth.Session` we would need to call `FetchUser`. Due to specific implementations, we would need to build a compatibility function for every provider, since they cast to concrete types (e.g. [Azure](https://github.com/markbates/goth/blob/master/providers/azureadv2/azureadv2.go#L132)) --------- Co-authored-by: Kyle D <kdumontnu@gmail.com> (cherry picked from commit 416c36f3034e228a27258b5a8a15eec4e5e426ba) Conflicts: - tests/integration/auth_ldap_test.go Trivial conflict resolved by manually applying the change. - routers/web/auth/oauth.go Technically not a conflict, but the original PR removed the modules/util import, which in our version, is still in use. Added it back.
* | Make it consistent with the other sorting filtersGusted2024-07-222-2/+2
| |
* | [PORT] Added default sorting milestones by name (gitea#27084)Bartlomiej Komendarczuk2024-07-222-0/+2
|/ | | | | | | | | | | | | | Resolves https://github.com/go-gitea/gitea/issues/26996 Added default sorting for milestones by name. Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> --- Conflict resolution: trivial, was due to the improvement made to 'the due date sorting' strings. (cherry picked from commit e8d4b7a8b198eca3b0bd117efb422d7d7cac93fe)
* ui: encourage participation in the localization of Forgejo in language ↵0ko2024-07-201-0/+6
| | | | | | | | | | | | | | | | settings (#4596) Changes: - clarify how the language selector works as this is not very unclear: the footer selector is per-session and the settings selector is per-account, usually users need the 2nd - tell about how to participate in improvement of localization via this link: https://forgejo.org/docs/latest/developer/localization/. Test that the link is present by extending and existing test Preview: - https://codeberg.org/attachments/f5d04fa1-2e9a-46e4-ac94-d8effefb9762 - https://codeberg.org/attachments/2a820bf5-1326-4c4a-9aff-4b9b70ee1bc0 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4596 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
* Remove APA as cite formatBeowulf2024-07-201-5/+2
| | | | | This removes APA as cite format, because it depends on an copyleft dependency (https://github.com/Juris-M/citeproc-js).
* Merge pull request '[UI] Convert milestone to HTMX' (#4542) from ↵Earl Warren2024-07-204-23/+30
|\ | | | | | | | | | | | | gusted/htmx-milestone into forgejo Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4542 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
| * [UI] Convert milestone to HTMXGusted2024-07-174-23/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Currently if you want to update the milestone of an issue or pull request, your whole page will be reloaded to reflect the newly set milestone. This is quite unecessary, as only the milestone text is updated and a new timeline event is added. - This patch converts the milestone section in the issue/pull request sidebar to use HTMX, so it becomes a progressive element and avoids reloading the whole page to update the milestone. - The update of the milestone section itself is quite straightforward and nothing special is happening. To support adding new timeline events, a new element `#insert-timeline` is conviently placed after the last timeline event, which can be used with [`hx-swap-oob`](https://htmx.org/attributes/hx-swap-oob/) to position new timeline events before that element. - Adds E2E test.
* | [UI] Replace `vue-bar-graph` with `chart.js`Gusted2024-07-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | - The usage of the `vue-bar-graph` is complicated, because of the `GSAP` dependency they pull in, the dependency uses a non-free license. - The code is rewritten to use the `chart.js` library, which is already used to draw other charts in the activity tab. Due to the limitation of `chart.js`, we have to create a plugin in order to have images as labels and do click handling for those images. - The chart isn't the same as the previous one, once again simply due to how `chart.js` works, the amount of commits isn't drawn anymore in the bar, you instead have to hover over it or look at the y-axis. - Resolves #4569