Commit Graph
100 Commits
Author SHA1 Message Date
0koandGusted eb76582261 chore(e2e): refactor "Toggle visibility" org-members test (#12871)
This test fails very often in CI. This should hopefully improve it.

With a downclocked CPU I've got 2 errors in 10 tries. After adding

```
await page.waitForLoadState();
```

I got no errors in 20 tries. But my testing methodology is unreliable so there's no guarantee that this helps:
* `Locator.click()` documentation says that it already waits by default for caused navigation to finish
* I added some `date` time measurement and `waitForLoadState` was clocking in about 5-15 ms, which shouldn't be causing the issue for `expect` that times out in 3000ms
...but e2e issues were `element(s) not found` on timeout, not wrong state, so my assumption is that somehow it is asserting the wrong snapshot of a page that isn't fully loaded

Additionally, I've converted _revertion_ logic to _make consistent before testing_, which is better at handling test retries in case that the _revertion_ part of the code was never ran in previous failure. In such case test retry is guaranteed to fail as well, at least when testing locally, not sure about CI.

Additionally, a completely unrelated comment fix in Playwright config.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12871
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-06-02 14:52:01 +02:00
0koandGusted 5f9745978a chore: update codeowners (#12844)
Make my frontend entry more scoped. I hope that having my notifications not overflowing could allow me to handle reviews more efficiently.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12844
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-05-31 14:42:17 +02:00
0ko 8a72b70f5f fix(ui): do not clip overflow in workflow dispatch menu (#12753)
Fixes forgejo/forgejo#12090
Fixes forgejo/forgejo#12228
Fixes forgejo/forgejo#12743

Partially revert https://codeberg.org/forgejo/forgejo/src/commit/b5988efc85ca54e39459323775aef0bc20f145be/web_src/css/actions.css#L91-L94 from forgejo/forgejo!10563.

This will cause overly long lists to overflow the viewport [like in this image](https://codeberg.org/forgejo/forgejo/attachments/b335c5b8-ad1a-44fc-bbd2-99c975c2a5e5), but will make the branch selector and select inputs usable again. In essence, replacing a serious bug with a less serious one.

Note: max-height limit wasn't effective since it was clipping inline (x) axis instead of block (y) axis. So the menu was still higher than 500 px.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12753
Reviewed-by: Andreas Ahlenstorf <aahlenst@noreply.codeberg.org>
2026-05-27 05:46:21 +02:00
0ko c400a3fac7 chore(i18n): May 2026 maintenence (#12718)
* remove two unused strings I identified while doing other things
* update two strings per request of @mahlzahn while avoiding a whole separate PR for this
* move 126 strings to JSON, some are remapped with a better structure
    * previous migration: forgejo/forgejo!12280

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12718
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
2026-05-25 10:59:49 +02:00
0ko bf2d4abda2 merge commit: i18n: translations update from Codeberg Translate (#12284)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12284
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-05-25 10:05:19 +02:00
0ko 9a2ae75a43 feat(ui): provide ability to add a warning message to the registration/login screens (#12597)
Example for how that would look like on code.forgejo.org:

![img](/attachments/eff849d5-4269-4c26-b742-b525de7709d1)

Login screen examples:

|![1](/attachments/78c23389-7bbd-490d-967a-da87d451c199)|![2](/attachments/c4693cd3-2616-4396-92e3-f22dbe8a0103)|
|-|-|

Many instances would benefit from being able to communicate such information before a user signs up or logs in after a long break.

## Testing

Disabled unless admin explicitly decides to create a template override, nothing to test.

In theory CSS could break but IDK how to test against that given the custom template requirement.

Also need to know that template customizations are provided as-is and shift all accountability of maintaining them to admins.

## Documentation

https://codeberg.org/forgejo/docs/pulls/1945

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12597
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-05-21 06:04:41 +02:00
0koandviceice abcfb46691 chore: fix rna config (#12304)
@viceice was getting error 500 trying to post this PR an hour ago. This commit is solely authored by him.

Co-authored-by: viceice <michael.kriese@gmx.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12304
2026-04-28 18:56:52 +02:00
0ko f05ff7ec5b chore(i18n): move 89 strings to JSON (#12280)
Previous similar PR: https://codeberg.org/forgejo/forgejo/pulls/11879.

Moved strings from INI to JSON. Some directly, some with keys updated to be consistent. The latter was done carefully, making sure all usages are updated, and was tested locally.

There are more deletions than insertions because some languages also had some extra empty lines removed.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12280
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
2026-04-27 16:07:51 +02:00
0ko f8eafe8c90 merge commit: i18n: translations update from Codeberg Translate (#12128)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12128
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-04-27 14:13:26 +02:00
0koandBeowulf 9ccaf473eb fix(i18n): don't log harmless missing translations as errors (#12183)
Followup to https://codeberg.org/forgejo/forgejo/pulls/6203

Currently it is logging an error wherever a template is rendered in language that doesn't have all plural strings covered. For example, Esperanto isn't well maintained.

Since more plural strings were migrated in v15 to new format, these errors became much more common. However, for all languages but the base one (English) they are completely harmless and just indicate an incomplete translation.

However, for base (English) they indicate a bug in either template or en-US.json, which should be still logged as an error.

The error is being logged by `LookupPluralByForm`, which is called by `TrPluralStringAllForms` and (`TrPluralString` through `LookupPluralByCount`). I originally intended to just pass log func directly to `LookupPluralByForm` from both, but since `TrPluralString` isn't calling `LookupPluralByForm` directly, it didn't look clean, so I went with passing a flag around instead and implemented logging logic in `LookupPluralByForm` itself.

I little concern is with that the so-called "default lang" is configurable, and if it is configured to something with less than 100% completion, it will cause fallback bugs, as well as a lot of logging of this as an error. But this is why changing "default lang" is a bad idea in the first place, and broken fallbacks should be greater concern than junk in the logs.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12183
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-04-18 23:18:02 +02:00
0ko 766c9c64f5 fix(rna): prioritize breaking changes without a feature or bug label over non-breaking changes (#12124)
Related: https://codeberg.org/forgejo/website/pulls/843#issuecomment-13131897
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12124
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2026-04-17 15:24:58 +02:00
0ko 3fe02a2175 merge commit: i18n: translations update from Codeberg Translate (#11963)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11963
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-04-15 19:04:26 +02:00
0ko 8cdfe1d57a fix(ui): a few small runners UI fixes (#12115)
Followup to https://codeberg.org/forgejo/forgejo/pulls/11516

The string will be fixed in other languages though Weblate after this PR is merged

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12115
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
2026-04-14 18:50:29 +02:00
0ko fd489b6963 chore(i18n): migrate strings to json, unhardcode one, improve plurals (#11879)
* migrate 17 strings related to repository migrations from INI to JSON
    * changed templates to get rid of unhelpful prefix `repo`
* migrate 4 strings related to counters
    * also changed templates to get rid of `repo`, but it had to be done anyway to use `TrPluralString`
* Unhardcode the header on migraiton type selector page, which I haven't noticed in https://codeberg.org/forgejo/forgejo/pulls/6795 or in two other PRs I did on this template since

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11879
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
2026-04-03 14:11:48 +02:00
0ko 3291f06749 merge commit: i18n: translations update from Codeberg Translate (#11810)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11810
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-04-03 13:23:56 +02:00
0ko 30ee20582e merge commit: i18n: translations update from Codeberg Translate (#11460)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11460
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-25 13:49:12 +01:00
0ko 7d2f1c2ee7 feat(ui): use better contrast color for required field indicator (#11677)
Use purpose-specific variable with better contrast on dark theme with fallback to generic variable, similarly to this rule: https://codeberg.org/forgejo/forgejo/src/commit/ce73827b7e516f3d8ccec59d1fab2295807b1557/web_src/css/base.css#L664-L666

### Preview

![](/attachments/eec8cb4f-cd8a-472d-ab98-9c73feaf82ff)

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11677
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-03-17 19:45:18 +01:00
0koandGusted d7de47ea23 fix(ui): cleanup css deadcode related to stackable menus (#11719)
Followup to https://codeberg.org/forgejo/forgejo/pulls/11597#issuecomment-11486785

We only have two stackable menus in the UI:

https://codeberg.org/forgejo/forgejo/src/commit/c1787d06e2917e75eb8901ac0586abb34a54f669/templates/user/dashboard/navbar.tmpl#L2

https://codeberg.org/forgejo/forgejo/src/commit/c1787d06e2917e75eb8901ac0586abb34a54f669/web_src/js/components/DashboardRepoList.vue#L328

None of them have classes `right` or `pointing`. Not normally, not through JS.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11719
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-17 18:45:50 +01:00
0koandMathieu Fenniak fd750f39b6 fix(ui): improve consistency in new runner management pages (#11675)
Followup to https://codeberg.org/forgejo/forgejo/pulls/11516 which I didn't have time to review. Some consistency fixes.

Haven't done anything with the [actions in the table](https://codeberg.org/attachments/5a7eb4f2-c45c-4189-b952-ca4cd4085eb5) but something will need to be done. Like an ellipsis menu.

## Preview

![1](/attachments/a894648b-51e0-4706-9a83-338868a24970)

![2](/attachments/a8b3dc47-49fc-42d6-a353-a3b2963414d2)

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11675
Reviewed-by: Andreas Ahlenstorf <aahlenst@noreply.codeberg.org>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-15 15:29:01 +01:00
0koandMathieu Fenniak a480324595 fix(i18n): reuse string for repository access, fix capitalization consistency (#11683)
Followup to https://codeberg.org/forgejo/forgejo/pulls/11604

These strings are used in similar contexts and can be reused. Fixed capitalization consistency (`specific_repo_access` inherited capitalization from `repo_and_org_access` which was nearby in the UI)

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11683
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-15 15:09:43 +01:00
0koandGusted d665904a22 feat(ui): improve visibility of counters inside of switch items (#11472)
Apply the feature from https://codeberg.org/forgejo/forgejo/pulls/2935 on element from https://codeberg.org/forgejo/forgejo/pulls/6459 (which was applied to notifications page in https://codeberg.org/forgejo/forgejo/pulls/6542).

A few small semi-related refactors. One of them (nested CSS commit) actually revealed a hole in testing: there are no test cases for hover in `evaluateSwitchItem`. I would like to address this but this PR already conflicts with https://codeberg.org/forgejo/forgejo/pulls/11341, so I won't do that until either is merged to save on rebase work.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11472
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-08 18:09:13 +01:00
0koandGusted 8d6812df25 fix(ui): use overflow:auto to avoid scrollbars when they are not needed (#11469)
Closes forgejo/forgejo#11407

I looked at related Gitea discussions for when it was implemented and it looks like what to use exactly for `overflow` was not discussed, the intention was just to have overflowing content scroll, not to have irrelevant scrollbars appear at all times.

- https://github.com/go-gitea/gitea/pull/31683
- https://github.com/go-gitea/gitea/issues/31667
- https://github.com/go-gitea/gitea/pull/26561

But with `max-height` restrictions that are in place only horizontal scrollbars are ever needed on demand. Vertical ones are not needed. For this `auto` works much better than `scroll`.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11469
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-04 00:36:54 +01:00
0koandGusted a0faae2764 fix(ui/mde): inputs in table/link insertion modals (#11341)
Fixes #11268
Fixes regression of #9614

Calling `initDisabledInputs` wasn't effective for template contents, so inputs in MDEs spawned by repo-legacy.js on comment editing were broken. Now repo-legacy.js also calls it when it spawns a new MDE.

Co-authored-by: Gusted <Gusted@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11341
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-02 23:32:40 +01:00
0ko 7055fb7056 merge commit: i18n: translations update from Codeberg Translate (#11344)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11344
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-01 10:32:14 +01:00
0ko f9a22b335e fix(ui): hardcode sort options in search syntax hint, improve look (#11381)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9109

Fix issue reported by @mahlzahn that the string was confusing translators and they translated the part that wasn't meant to be translated.
Part of this fix was to replace custom IterWithTr with simple dict iteration to allow for placeholders in strings.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11381
Reviewed-by: Shiny Nematoda <snematoda@noreply.codeberg.org>
Reviewed-by: Ellen Εμιλία Άννα Zscheile <fogti@noreply.codeberg.org>
2026-02-23 06:03:23 +01:00
0ko 8c2bb0f65b chore(i18n): deduplicate common packages related strings (#11345)
Our package registries types have many things in common, so they have many shared strings like
```json
"packages.installation": "Installation",
```

but not all and not consistently. For example, some packages duplicate these strings:
```json
"packages.*.install": "To install the package, run the following command:",
"packages.*.registry": "Setup this registry from the command line:",
"packages.*.repository": "Repository info",
"packages.*.dependencies": "Dependencies",
```

while other packages have them customized:
```json
"packages.cargo.install": "To install the package using Cargo, run the following command:",
"packages.composer.install": "To install the package using Composer, run the following command:",
"packages.conan.install": "To install the package using Conan, run the following command:",
"packages.conda.install": "To install the package using Conda, run the following command:",
```

While it's ok for them to have custom strings, I don't see need to duplicate the same generic strings. Even though Weblate provides tools to simplify maintenance of duplicated strings, our files still end up being bloated.

In this PR I deduplicated the strings listed above under a `common` key. There already was a generic shared string for Dependencies, that I just re-used.

Also fixed strings in Arch packages, which were saying Depends with meaning of Dependencies.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11345
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-02-18 04:07:14 +01:00
0ko 149f9a9ba9 fix(ui): improve a few English strings (#11343)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11343
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
2026-02-18 04:06:15 +01:00
0ko f8bee35e77 fix(i18n): unhardcode label exclusion tooltips (#11333)
Followup to #10702 where two new strings were hardcoded in the template.

## Changes

- added as translatable strings
- made the template use a variable to avoid making it a long unreadable
- an unrelated change where tests related to this area of the template are moved to a separate file
    - they were created in Forgejo: c92b4b12c8, 192177fc88

## Testing

Testing translations of all individual strings is considered not needed.

Added test for tmpl logic which was missing and that I've touched.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11333
Reviewed-by: Luis Adame <luisadame@noreply.codeberg.org>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-02-17 04:28:27 +01:00
0koandOtto 32c6f64f39 fix(e2e): use empty user for overflow menu test (#11337)
Potentially fixes one of the E2E failures that started to occur lately where the last tab (Starred repos) can overflow on user2's profile on CI.

Replaced the user by the one that has no counters on the tabs.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11337
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-02-16 23:03:19 +01:00
0ko b085be779c i18n(*): migrate 92 strings to json (#11325)
Previous migration: https://codeberg.org/forgejo/forgejo/pulls/10979

The white holes in between the red diff lines of the INI files aren't a migration bug: they are orphan strings that weren't cleaned up yet from those files.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11325
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2026-02-16 17:38:56 +01:00
0ko 7c4f684c68 merge commit: i18n(next): translations update from Codeberg Translate (#10978)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10978
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-02-16 16:41:12 +01:00
0ko 89bff31287 fix(ui): apply navbar min-height correctly, fix jitter on mobile (#11274)
Replaces https://codeberg.org/forgejo/forgejo/pulls/11271

This rule was problematic and didn't quite make sense:
* the intention is to have a navbar that is 48px+1px border
* we apply `min-height:49px` to: `#navbar` with intention of making it 49px tall total, with border
* but we also apply it to `#navbar .navbar-left/right`
* elements `#navbar .navbar-left/right` become 49px tall
* their parent `#navbar` becomes 49px+1px border = 50px, overriding what was done in step 2

This height missmatch had an incompatibility with this definition for open menu inside of navbar on mobile, causing jitter when the menu is opened/closed, because it was expecting navbar body to be 48px, but due to the rule that was removed it was actually 49px.

```css
#navbar.navbar-menu-open .navbar-left .navbar-mobile-right {
	    min-height: 48px;
}
```

The fix is to only apply `min-height` to `#navbar`'s children. At least `.navbar-left` is always expected to be present unconditionally on all pages. This does make the navbar 1px shorter. If we still want a 50px navbar but without the bug let me know and I'll adjust.

### Preview by @panc

From https://codeberg.org/forgejo/forgejo/pulls/11271, also applies to this PR.

| Before | After |
|----|----|
| <video src="/attachments/515fdfc1-cb97-46af-88ac-9bb0e216a996" title="Screencast From 2026-02-13 19-56-32" controls></video> | <video src="/attachments/133d1499-4660-402d-8082-f407b3644e5c" title="Screencast From 2026-02-13 19-57-29" controls></video> |

Reported-by: panc <panc@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11274
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
2026-02-14 14:57:44 +01:00
0ko bd5685812e feat(ui): convert org members list to grid (#11127)
Replaces #10789

Convert the layout from flex-list helpers to a CSS-native grid. This allows to having buttons in different rows aligned to each other while keeping the layout responsive, i.e. looking good on both desktop and mobile.

### Preview (desktop)

|Before|After|
|-|-|
|![j1](/attachments/85f244bf-0538-4c5d-8300-ae4f6744e5f3)|![new1](/attachments/a23c60f7-d7a3-4cb7-abc6-657541992204)|

### Preview (mobile)

|Before|After|
|-|-|
|![g1](/attachments/32b01933-652f-47e7-b97d-e35262cbbf44)|![new2](/attachments/927fb458-632c-4699-ba8b-bcb6a73ffe3d)|

### Preview (Guest)
|Before|After|
|-|-|
|![i1](/attachments/66d0d62d-5500-4c6d-8913-aad2cf69d1ab)|![new3](/attachments/0333b14e-2952-4c5b-9051-185840167dca)|

## Testing

Automated tests were added to make sure that actions in this list are still working, and for basic template logic. No tests were added for layout because layout being correct is an abstract concept that is difficult to explain to Playwright.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11127
Reviewed-by: Antonin Delpeuch <wetneb@noreply.codeberg.org>
2026-02-10 12:50:55 +01:00
0koandGusted ccf61c93bf feat(ui): consistently use AppVerNoMetadata in the footer (#11196)
Display version without compat metadata for admins too, not just for regular users. It was confusing to some, though I don't remember who got confused.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11196
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-02-09 05:32:34 +01:00
0koandBeowulf 31965f2dd7 chore(ui): add integration tests for footer tmpl logic (#11197)
Slightly related to https://codeberg.org/forgejo/forgejo/pulls/11196, but it has no tests related to the change in that PR.

Added tests because I wanted those config options be tested, but haven't found any existing tests.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11197
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-02-08 23:55:30 +01:00
0ko 7e4619df83 feat(ui): responsive releases list (#11080)
## Changes

I've made releases list more usable on narrow viewports while trying keep the layout unchanged for desktop viewports.

To support these changes large amount of Tailwind classes were converted to regular CSS to be applied conditionally via `@media`. While it was possible to just adjust the Tailwind classes to achieve the same behavior, there's a positive effect which is that the repeating HTML of releases generated by template's range is much less verbose and contains fewer long duplicated lines of Tailwind classes.

## Preview

### Desktop

Not much changed, but the dot between tag and release name is no more.

|Before|After|
|-|-|
|![bd](/attachments/a87bf050-03ba-4035-8a0e-7ab4f6e877a2)|![2d](/attachments/e0c2e052-01c6-4078-b06e-f8ef7b803690)|

### Mobile

|Before|After|
|-|-|
|![bm](/attachments/f63a606f-f3f8-435d-8378-0979e93cf7bd)|![2m](/attachments/0cb6086d-1def-4a86-bb0e-4131e50aae3b)|

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11080
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
2026-02-07 19:15:14 +01:00
0ko 3cafb7fa6c chore(ui): change /devtest to /-/demo (#11019)
It has always been largely used for showcasing UI elements but that name didn't work too well for it.

Testing:
Some of existing tests depend on these pages, making it redundant to create extra tests.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11019
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-01-26 13:12:25 +01:00
0koandBeowulf 2f8ae54b0f fix(ui): tippy menu styles too broad, affecting switch in PR review (#10969)
The custom styles for tippy-enabled menus had too broad selectors, conflicting with styles of other .item elements in tippy boxes.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10969
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-22 23:38:09 +01:00
0ko 1978afdb65 i18n(*): migrate ini section [packages] to json (#10979)
The following strings were skipped because they will need a separate template update for plurals:
```ini
[packages]
owner.settings.cleanuprules.keep.count.1
owner.settings.cleanuprules.keep.count.n
```

Repro command:
```sh
python remap.py --config --write \
	--insertion-mode s+p \
	--remap [packages]title:packages.title \
	--remap [packages]empty:packages.empty \
	--remap [packages]empty.documentation:packages.empty.documentation \
	--remap [packages]empty.repo:packages.empty.repo \
	--remap [packages]registry.documentation:packages.registry.documentation \
	--remap [packages]filter.type:packages.filter.type \
	--remap [packages]filter.type.all:packages.filter.type.all \
	--remap [packages]filter.no_result:packages.filter.no_result \
	--remap [packages]filter.container.tagged:packages.filter.container.tagged \
	--remap [packages]filter.container.untagged:packages.filter.container.untagged \
	--remap [packages]published_by:packages.published_by \
	--remap [packages]published_by_in:packages.published_by_in \
	--remap [packages]installation:packages.installation \
	--remap [packages]about:packages.about \
	--remap [packages]requirements:packages.requirements \
	--remap [packages]dependencies:packages.dependencies \
	--remap [packages]keywords:packages.keywords \
	--remap [packages]details:packages.details \
	--remap [packages]details.author:packages.details.author \
	--remap [packages]details.project_site:packages.details.project_site \
	--remap [packages]details.repository_site:packages.details.repository_site \
	--remap [packages]details.documentation_site:packages.details.documentation_site \
	--remap [packages]details.license:packages.details.license \
	--remap [packages]assets:packages.assets \
	--remap [packages]versions:packages.versions \
	--remap [packages]versions.view_all:packages.versions.view_all \
	--remap [packages]dependency.id:packages.dependency.id \
	--remap [packages]dependency.version:packages.dependency.version \
	--remap [packages]search_in_external_registry:packages.search_in_external_registry \
	--remap [packages]alpine.registry:packages.alpine.registry \
	--remap [packages]alpine.registry.key:packages.alpine.registry.key \
	--remap [packages]alpine.registry.info:packages.alpine.registry.info \
	--remap [packages]alpine.install:packages.alpine.install \
	--remap [packages]alpine.repository:packages.alpine.repository \
	--remap [packages]alpine.repository.branches:packages.alpine.repository.branches \
	--remap [packages]alpine.repository.repositories:packages.alpine.repository.repositories \
	--remap [packages]alpine.repository.architectures:packages.alpine.repository.architectures \
	--remap [packages]arch.pacman.helper.gpg:packages.arch.pacman.helper.gpg \
	--remap [packages]arch.pacman.repo.multi:packages.arch.pacman.repo.multi \
	--remap [packages]arch.pacman.repo.multi.item:packages.arch.pacman.repo.multi.item \
	--remap [packages]arch.pacman.conf:packages.arch.pacman.conf \
	--remap [packages]arch.pacman.sync:packages.arch.pacman.sync \
	--remap [packages]arch.version.properties:packages.arch.version.properties \
	--remap [packages]arch.version.description:packages.arch.version.description \
	--remap [packages]arch.version.provides:packages.arch.version.provides \
	--remap [packages]arch.version.groups:packages.arch.version.groups \
	--remap [packages]arch.version.depends:packages.arch.version.depends \
	--remap [packages]arch.version.optdepends:packages.arch.version.optdepends \
	--remap [packages]arch.version.makedepends:packages.arch.version.makedepends \
	--remap [packages]arch.version.checkdepends:packages.arch.version.checkdepends \
	--remap [packages]arch.version.conflicts:packages.arch.version.conflicts \
	--remap [packages]arch.version.replaces:packages.arch.version.replaces \
	--remap [packages]arch.version.backup:packages.arch.version.backup \
	--remap [packages]cargo.registry:packages.cargo.registry \
	--remap [packages]cargo.install:packages.cargo.install \
	--remap [packages]chef.registry:packages.chef.registry \
	--remap [packages]chef.install:packages.chef.install \
	--remap [packages]composer.registry:packages.composer.registry \
	--remap [packages]composer.install:packages.composer.install \
	--remap [packages]composer.dependencies:packages.composer.dependencies \
	--remap [packages]composer.dependencies.development:packages.composer.dependencies.development \
	--remap [packages]conan.registry:packages.conan.registry \
	--remap [packages]conan.install:packages.conan.install \
	--remap [packages]conda.registry:packages.conda.registry \
	--remap [packages]conda.install:packages.conda.install \
	--remap [packages]container.images.title:packages.container.images.title \
	--remap [packages]container.details.type:packages.container.details.type \
	--remap [packages]container.details.platform:packages.container.details.platform \
	--remap [packages]container.pull:packages.container.pull \
	--remap [packages]container.digest:packages.container.digest \
	--remap [packages]container.multi_arch:packages.container.multi_arch \
	--remap [packages]container.layers:packages.container.layers \
	--remap [packages]container.labels:packages.container.labels \
	--remap [packages]container.labels.key:packages.container.labels.key \
	--remap [packages]container.labels.value:packages.container.labels.value \
	--remap [packages]cran.registry:packages.cran.registry \
	--remap [packages]cran.install:packages.cran.install \
	--remap [packages]debian.registry:packages.debian.registry \
	--remap [packages]debian.registry.info:packages.debian.registry.info \
	--remap [packages]debian.install:packages.debian.install \
	--remap [packages]debian.repository:packages.debian.repository \
	--remap [packages]debian.repository.distributions:packages.debian.repository.distributions \
	--remap [packages]debian.repository.components:packages.debian.repository.components \
	--remap [packages]debian.repository.architectures:packages.debian.repository.architectures \
	--remap [packages]generic.download:packages.generic.download \
	--remap [packages]go.install:packages.go.install \
	--remap [packages]helm.registry:packages.helm.registry \
	--remap [packages]helm.install:packages.helm.install \
	--remap [packages]maven.registry:packages.maven.registry \
	--remap [packages]maven.install:packages.maven.install \
	--remap [packages]maven.install2:packages.maven.install2 \
	--remap [packages]maven.download:packages.maven.download \
	--remap [packages]nuget.registry:packages.nuget.registry \
	--remap [packages]nuget.install:packages.nuget.install \
	--remap [packages]nuget.dependency.framework:packages.nuget.dependency.framework \
	--remap [packages]npm.registry:packages.npm.registry \
	--remap [packages]npm.install:packages.npm.install \
	--remap [packages]npm.install2:packages.npm.install2 \
	--remap [packages]npm.dependencies:packages.npm.dependencies \
	--remap [packages]npm.dependencies.development:packages.npm.dependencies.development \
	--remap [packages]npm.dependencies.bundle:packages.npm.dependencies.bundle \
	--remap [packages]npm.dependencies.peer:packages.npm.dependencies.peer \
	--remap [packages]npm.dependencies.optional:packages.npm.dependencies.optional \
	--remap [packages]npm.details.tag:packages.npm.details.tag \
	--remap [packages]pub.install:packages.pub.install \
	--remap [packages]pypi.requires:packages.pypi.requires \
	--remap [packages]pypi.install:packages.pypi.install \
	--remap [packages]rpm.registry:packages.rpm.registry \
	--remap [packages]rpm.distros.redhat:packages.rpm.distros.redhat \
	--remap [packages]rpm.distros.suse:packages.rpm.distros.suse \
	--remap [packages]rpm.install:packages.rpm.install \
	--remap [packages]rpm.repository:packages.rpm.repository \
	--remap [packages]rpm.repository.architectures:packages.rpm.repository.architectures \
	--remap [packages]rpm.repository.multiple_groups:packages.rpm.repository.multiple_groups \
	--remap [packages]alt.registry:packages.alt.registry \
	--remap [packages]alt.registry.install:packages.alt.registry.install \
	--remap [packages]alt.install:packages.alt.install \
	--remap [packages]alt.setup:packages.alt.setup \
	--remap [packages]alt.repository:packages.alt.repository \
	--remap [packages]alt.repository.architectures:packages.alt.repository.architectures \
	--remap [packages]alt.repository.multiple_groups:packages.alt.repository.multiple_groups \
	--remap [packages]rubygems.install:packages.rubygems.install \
	--remap [packages]rubygems.install2:packages.rubygems.install2 \
	--remap [packages]rubygems.dependencies.runtime:packages.rubygems.dependencies.runtime \
	--remap [packages]rubygems.dependencies.development:packages.rubygems.dependencies.development \
	--remap [packages]rubygems.required.ruby:packages.rubygems.required.ruby \
	--remap [packages]rubygems.required.rubygems:packages.rubygems.required.rubygems \
	--remap [packages]swift.registry:packages.swift.registry \
	--remap [packages]swift.install:packages.swift.install \
	--remap [packages]swift.install2:packages.swift.install2 \
	--remap [packages]vagrant.install:packages.vagrant.install \
	--remap [packages]settings.link:packages.settings.link \
	--remap [packages]settings.link.description:packages.settings.link.description \
	--remap [packages]settings.link.select:packages.settings.link.select \
	--remap [packages]settings.link.button:packages.settings.link.button \
	--remap [packages]settings.link.success:packages.settings.link.success \
	--remap [packages]settings.link.error:packages.settings.link.error \
	--remap [packages]settings.delete:packages.settings.delete \
	--remap [packages]settings.delete.description:packages.settings.delete.description \
	--remap [packages]settings.delete.notice:packages.settings.delete.notice \
	--remap [packages]settings.delete.success:packages.settings.delete.success \
	--remap [packages]settings.delete.error:packages.settings.delete.error \
	--remap [packages]owner.settings.cargo.title:packages.owner.settings.cargo.title \
	--remap [packages]owner.settings.cargo.initialize:packages.owner.settings.cargo.initialize \
	--remap [packages]owner.settings.cargo.initialize.description:packages.owner.settings.cargo.initialize.description \
	--remap [packages]owner.settings.cargo.initialize.error:packages.owner.settings.cargo.initialize.error \
	--remap [packages]owner.settings.cargo.initialize.success:packages.owner.settings.cargo.initialize.success \
	--remap [packages]owner.settings.cargo.rebuild:packages.owner.settings.cargo.rebuild \
	--remap [packages]owner.settings.cargo.rebuild.description:packages.owner.settings.cargo.rebuild.description \
	--remap [packages]owner.settings.cargo.rebuild.error:packages.owner.settings.cargo.rebuild.error \
	--remap [packages]owner.settings.cargo.rebuild.success:packages.owner.settings.cargo.rebuild.success \
	--remap [packages]owner.settings.cargo.rebuild.no_index:packages.owner.settings.cargo.rebuild.no_index \
	--remap [packages]owner.settings.cleanuprules.title:packages.owner.settings.cleanuprules.title \
	--remap [packages]owner.settings.cleanuprules.add:packages.owner.settings.cleanuprules.add \
	--remap [packages]owner.settings.cleanuprules.edit:packages.owner.settings.cleanuprules.edit \
	--remap [packages]owner.settings.cleanuprules.none:packages.owner.settings.cleanuprules.none \
	--remap [packages]owner.settings.cleanuprules.preview:packages.owner.settings.cleanuprules.preview \
	--remap [packages]owner.settings.cleanuprules.preview.overview:packages.owner.settings.cleanuprules.preview.overview \
	--remap [packages]owner.settings.cleanuprules.preview.none:packages.owner.settings.cleanuprules.preview.none \
	--remap [packages]owner.settings.cleanuprules.pattern_full_match:packages.owner.settings.cleanuprules.pattern_full_match \
	--remap [packages]owner.settings.cleanuprules.keep.title:packages.owner.settings.cleanuprules.keep.title \
	--remap [packages]owner.settings.cleanuprules.keep.count:packages.owner.settings.cleanuprules.keep.count \
	--remap [packages]owner.settings.cleanuprules.keep.pattern:packages.owner.settings.cleanuprules.keep.pattern \
	--remap [packages]owner.settings.cleanuprules.keep.pattern.container:packages.owner.settings.cleanuprules.keep.pattern.container \
	--remap [packages]owner.settings.cleanuprules.remove.title:packages.owner.settings.cleanuprules.remove.title \
	--remap [packages]owner.settings.cleanuprules.remove.days:packages.owner.settings.cleanuprules.remove.days \
	--remap [packages]owner.settings.cleanuprules.remove.pattern:packages.owner.settings.cleanuprules.remove.pattern \
	--remap [packages]owner.settings.cleanuprules.success.update:packages.owner.settings.cleanuprules.success.update \
	--remap [packages]owner.settings.cleanuprules.success.delete:packages.owner.settings.cleanuprules.success.delete \
	--remap [packages]owner.settings.chef.title:packages.owner.settings.chef.title \
	--remap [packages]owner.settings.chef.keypair:packages.owner.settings.chef.keypair \
	--remap [packages]owner.settings.chef.keypair.description:packages.owner.settings.chef.keypair.description
```

In en-US the strings were manually moved lower in the file, before the `actions` section. Weblate proposes strings sequentially to translators, and would be really awkward to start a translation with `packages`.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10979
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2026-01-22 11:42:52 +01:00
0ko 9fd0fc36a0 merge commit: i18n: translations update from Codeberg Translate (#10660)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10660
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-22 10:08:01 +01:00
953c468b32 fix(ui): improve force-push layout alignment (#10939)
Followup to https://codeberg.org/forgejo/forgejo/pulls/7746
Replaces https://codeberg.org/forgejo/forgejo/pulls/10938

grid layout (desktop): give the Compare button a wrapper with same height as the first text line so it stays aligned to it (and to timeline badge)

inline layout (mobile): give the Compare button left margin so there's a gap between it and the text line

Initial fix for grid was proposed by luisadame.

Co-authored-by: Luis <luis@adame.dev>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10939
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-20 19:23:31 +01:00
0ko 10aaef5c7b feat(perf): remove unused size url parameter for local avatars (#10932)
Avatars storage handler ignores the size= url parameter, and we don't have any code for creating multiple sizes of the same avatar.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10932
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2026-01-20 04:59:15 +01:00
0ko bfef19d39d chore(ui): remove obsolete var --color-nav-text (#10898)
This variable isn't needed because all themes are setting it to `--color-text`, but the relevant UI elements are already inheriting it from `body`.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10898
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-01-18 05:39:28 +01:00
0koandMichael Kriese 05269232b8 fix(release): move reverted v14.0.0 feature line to Included for completeness (#10866)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9409#issuecomment-9894122

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10866
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-16 12:14:27 +01:00
0ko f6ca985739 chore(release): delete 10037 and 9840 release notes (#10837)
Same as https://codeberg.org/forgejo/forgejo/pulls/10835 but for main branch since release-notes-assistant recently gained ability to search on both branches.

It was already announced in release notes of v13 and v11 point releases and shouldn't be in release notes of v14, which this file is causing.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10837
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2026-01-14 17:30:03 +01:00
0koandBeowulf 581227f20a chore(ui): cleanup PR checks area (#10768)
Mostly a UI followup to https://codeberg.org/forgejo/forgejo/pulls/9397 with a few fixes.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10768
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-10 23:44:42 +01:00
0ko 59c721d26b i18n(next): convert indention style to tabs: en, editorconfig (#10661)
Followup to #10659

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10661
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2026-01-02 05:56:48 +01:00
0ko b8e7d7c9d8 merge commit: i18n(next): convert indention to tabs (#10659)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10659
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-01 11:45:11 +01:00
0ko 3f358608cd merge commit: i18n: update of translations from Codeberg Translate (#10599)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10599
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-01-01 10:06:26 +01:00
0koandGusted 0a6a5cb73e chore: remove obsolete code from button-legacy.css (#10581)
Fixes #10580

Remove obsolete styles so that people do not trip over them.

I went through the codebase with `rg` and made sure that the only elements which had potential to use such mix of classes were doing so accidentally, and removed all the unused code.

### A small fix for Forgejo themes

Ref https://codeberg.org/forgejo/forgejo/pulls/10581#issuecomment-9245399. The missing variable was used in one place outside of devtest.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10581
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-31 03:13:05 +01:00
0ko c53ea1ba2f merge commit: i18n: update of translations from Codeberg Translate (#10417)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10417
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-27 15:56:32 +01:00
0ko 973ff28f44 chore(test): separate and move around i18n testing (#10539)
Closes #10534

The primary code change is that `TestMissingTranslationHandling` was converted to a unit test.

However translation unit tests were a mix of mostly unrelated old (INI) and new (JSON) code with unclear licensing. It was cleaned up with help of Git history.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10539
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-12-23 04:39:26 +01:00
0ko 7a1935795d chore: 13.0 is now stable (#10482)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10482
2025-12-19 12:43:47 +01:00
0koandGusted 1ef5496055 feat: use AppDomain for key verification (#10429)
Fixes #10416
Followup to a hardcoded string in [gitea#17743](https://github.com/go-gitea/gitea/pull/17743)

* instead of using a hardcoded namespace, use the configured application domain
    * `ssh-keygen` refuses to work with empty namespace, but `Domain` falls back to `localhost`:
    https://codeberg.org/forgejo/forgejo/src/commit/95dca7ff57955f5a08e656caf8ceb61c88201ff8/modules/setting/server.go#L192
    * since `VerifySSHKey` verifies the namespace, I think that using a mostly-unique string instead of a hardcoded one doesn't hurt. Here's what `man ssh-keygen` says on the topic:
      > An additional signature namespace, used to prevent signature confusion across different domains of use (e.g. file signing vs email signing) must be provided  via  the  -n  flag.   Namespaces  are  arbitrary strings,  and  may  include:  “file”  for file signing, “email” for email signing.  For custom uses, it is recommended to use
names following a NAMESPACE@YOUR.DOMAIN pattern to generate unambiguous namespaces.

## Testing

There's a test `TestFromOpenSSH` but it uses a hardcoded default namespace `file`:
https://codeberg.org/forgejo/forgejo/src/commit/95dca7ff57955f5a08e656caf8ceb61c88201ff8/models/asymkey/ssh_key_test.go#L334

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10429
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-17 17:01:14 +01:00
0ko 5088d3ab12 fix(ui/buttons): implement .disabled class (#10410)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9359. `templates/repo/issue/list.tmpl` had buttons changed which had `.disabled` on them conditionally.

* adjust devtest page to have such buttons
* implement `.disabled` for the newer buttons that does the same thing as the `.ui` buttons do: apply custom opacity, disable pointer events
    * this is the most boring way of implementing this

Reported-by: @Gusted
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10410
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-12-16 14:18:08 +01:00
0ko 95dca7ff57 merge commit: i18n: update of translations from Codeberg Translate (#10249)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10249
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-13 14:17:10 +01:00
0koandGusted 2bde157a0d feat(i18n): translate system status data units in runtime (#10358)
Followup to https://codeberg.org/forgejo/forgejo/pulls/2528

Instead of storing translated strings in memory, store raw numbers and translate at template rendering time.

Our implementation of `TrSize` is not very efficient and is more expensive than just the underlying `humanize.IBytes`, but for me on localhost both ways render response to HTMLX's request to `/admin/system_status` in 0-1 ms.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10358
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-09 14:38:40 +01:00
0ko fe53015fe4 fix(ui): do not wrongly highlight devtest link in navbar menu (#10357)
Fix copypaste induced bug. Followup to https://codeberg.org/forgejo/forgejo/pulls/10263.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10357
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: floss4good <floss4good@noreply.codeberg.org>
2025-12-07 17:44:28 +01:00
0koandOtto 3f207017a8 feat(ui): improve admin dashboard cron list (#10270)
* in both `/admin` and `/admin/cron`: use new buttons, they are slightly more compact, which i think fits this place well as currently rows here feel too tall
* in `/admin/cron`: use `octicon-play` consistently with `/admin` instead of `octicon-triangle-right`
* in `/admin`: replace verbose template HTML with Range-based generator
    * added integration test to verify page content

<!--start release-notes-assistant-->

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- User Interface features
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/10270): <!--number 10270 --><!--line 0 --><!--description ZmVhdCh1aSk6IGltcHJvdmUgYWRtaW4gZGFzaGJvYXJkIGNyb24gbGlzdA==-->feat(ui): improve admin dashboard cron list<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10270
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-01 15:19:36 +01:00
0koandOtto 1000a0da3a chore(ui): cleanup reviews css, improve consistency (#10268)
* show/hide resolved: got rid of classes `ui labeled button` - ignoring them overriding each other, they were contributing three useful CSS properties in total:
  ```css
  padding: 0;
  background: none;
  font-weight: 500;
  ```
  and were also contributing an undesired margin:
  ![](/attachments/4774be16-2989-4b69-bcdb-86e1acae2a85)
* also fixed inconsistent font size between two views
* additionally got rid of verbose fomantic classes since there was already a rule that could accept their properties
* got rid of unused class `add-code-comment-right`
* added testing for the hide/show/resolve/unresolved buttons, but not related to CSS, just thought it might be useful

<!--start release-notes-assistant-->

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- User Interface changes without a feature or bug label
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/10268): <!--number 10268 --><!--line 0 --><!--description Y2hvcmUodWkpOiBjbGVhbnVwIHJldmlld3MgY3NzLCBpbXByb3ZlIGNvbnNpc3RlbmN5-->chore(ui): cleanup reviews css, improve consistency<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10268
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-12-01 01:30:25 +01:00
0koandGusted d4068e6bcf feat: improve devtest, link to it from user menu (#10263)
Addition to the user menu in navbar:
* display a link to `/devtest` if the instance run mode is dev instead of prod
* I think this is useful because:
    * devtest pages are in general useful in development, but are not easy to discover by newcomers
    * if the instance uses incorrect run mode, this entry should annoy it's admin into fixing the issue

Improvements to `/devtest`:
* fix error pages links
* add a few headers and explanation for what this page is for

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10263
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-30 17:03:22 +01:00
0ko 6edfeb60f9 ui: improve release editing (#9940)
Converted 8 buttons, fixed a few bugs with markdown editor, added some testing for template logic. The fixes are not auto-testable within reasonable effort and the changes like button conversion have nothing specific to be tested for.

### Convert form buttons to new buttons

|Before|After|
|-|-|
|![](/attachments/2e372363-4997-4831-9edb-e1a2c4839eb7)|![](/attachments/31c7be64-8f70-4287-b889-9055bc4a7a42)|

### Justify "Delete release" button away from other buttons

|Before|![](/attachments/e55124ee-b6e0-4098-ac06-d5ad8ada671f)|
|-|-|
|After|![](/attachments/22ea09b5-c6e2-4a02-ae77-d92e1dbe7a72)|

|Before|![](/attachments/2ad14280-676b-4341-ae85-a7036ea5ace2)|
|-|-|
|After|![](/attachments/6cbe7c70-8efd-4b35-bb12-21a19eaafa67)|

### Fix markdown editor on mobile

|Before|After|
|-|-|
|![](/attachments/21ed3b55-ea88-446f-b074-6242b07a38e1)|![](/attachments/d033b67f-c8bb-42e7-96a9-de48289e1ba2)|

### Buttons preview on mobile

|Before|After|Before|After|
|-|-|-|-|
|![](/attachments/2795d62c-e909-457d-9e52-81a76ab6531f)|![](/attachments/af6e534e-5300-42d6-93c3-4b763039e2ae)|![](/attachments/7812d273-c371-4ed1-8054-a80c0cfc2518)|![](/attachments/a98e8ad3-818d-4254-b9cd-70c81dd40fb9)|

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9940
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-11-30 05:08:24 +01:00
0koandGusted 3bf4f0275a chore(e2e): use expect().toBeCloseTo instead of Math.round (#10257)
Followup to https://codeberg.org/forgejo/forgejo/pulls/6799, https://codeberg.org/forgejo/forgejo/pulls/9057

toBeCloseTo() recently popped in autocomplete suggestions and it seems like a cleaner way than using Math.round

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10257
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-29 16:59:17 +01:00
0ko 79c47c2e50 feat(ui): improve modal width rules (#10246)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9636, https://codeberg.org/forgejo/forgejo/pulls/8859#issuecomment-6651595.

1. Due to lack of `min-width`, currently the new consistent dialogs can get disproportionally small to the screen. This PR adds a min-width of 400px. No deep consideration went into choosing this particular width.
    * To make the test not depend on modals we have in the UI with some arbitrary widths a devtest page was added instead
2. Use more horizontal space on narrow screens

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10246
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-11-28 19:38:50 +01:00
0ko d02db83bbb merge commit: i18n: update of translations from Codeberg Translate (#10131)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10131
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-28 07:26:52 +01:00
0ko de3f376882 feat(ui): convert disable/enable workflow menu to JS-less dropdown (#10133)
* convert the dropdown (overflow menu) to the JS-less one
    * the "link" still relies on JS to make a POST, changing this is not in scope of this PR
    * fixed the weird behavior where opener changes it's color when hovering over the "link"
    * the bug where the script that refreshes the list once in a while closes an open dropdown is not fixed and is not in scope of this PR
* use border in the opener
    * it might not look as sleek but it is easier to see and better for the user to be able to understand that this is an active intractable element
* global dropdown improvements
    * add rounding rules for dropdowns with only one item - the first such case
    * add testing for rounding rules
    * added a devtest page to play with the dropdown component on

Preview

B: https://codeberg.org/forgejo/forgejo/attachments/1462cdda-71f5-45d0-a206-33bb17740cb8
A: https://codeberg.org/forgejo/forgejo/attachments/d3c265cb-6b77-40c8-9944-d9327f3bec65

B: https://codeberg.org/forgejo/forgejo/attachments/17f17c29-4dcd-4015-b5b9-6d438bd2eb0b
A: https://codeberg.org/forgejo/forgejo/attachments/d94e196c-725e-47de-b4de-ed97b148ceb6

B: https://codeberg.org/forgejo/forgejo/attachments/1813ded9-f619-47d9-bf15-ad4bcd3535ab
A: https://codeberg.org/forgejo/forgejo/attachments/09042e58-331e-414d-ac8f-0f1091033b7f

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10133
Reviewed-by: Otto <otto@codeberg.org>
2025-11-21 16:59:01 +01:00
0ko 499ef1e599 fix(i18n/en): improve search syntax hints (#10187)
Followup to https://codeberg.org/forgejo/forgejo/issues/9109.

Fixed a few confusing ones:
* "Filter by reviewed user" sounded more related to "requested review", but it is really about users who already left one, even if it wasn't requested
* "Filter by sort type" only does sorting, not filtering

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10187
Reviewed-by: Shiny Nematoda <snematoda@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
2025-11-21 10:09:17 +01:00
0koandGusted f0b4e3b943 feat(ui): JS-less dropdowns in navbar (#10025)
Replaced dropdowns in the navbar with JS-less ones from https://codeberg.org/forgejo/forgejo/pulls/7906.

Also made some changes to the dropdown component:
* fixed variable name
* painted backgrounds (hover, focus) are now consistently applied to the actual interactive items (`<a>`, `<button>`), not to `<li>`. This is consistent with how backgrounds are conditionally applied to pre-selected (`.active`) items and is better, as it allows to place additional things to `<li>`...
* ...`<hr>` can now be placed in some `<li>` instead of requiring splitting into multiple `<ul>`. This is simpler in code and I am guessing this should be better for a11y as screen readers can cast one continuous list instead of multiple ones. But have no hard proof that this is actually better. My main motivation was to avoid ugly mistake-prone tmpl logic where unconditional `<ul>` was getting closed and reopened inside of a condition.

I should note that on mobile all items, including these dropdowns, are hidden in another dropdown, and it stays JS-dependand for now. So this PR only makes this part of the UI JS-less for desktop.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10025
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-16 14:56:42 +01:00
0ko 094f42f6b7 merge commit: i18n: update of translations from Codeberg Translate (#9917)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9917
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-16 06:12:05 +01:00
0koandmfenniak ed4be8bf54 fix(test): improve reliability of E2E "Button text replaced by JS" (#10075)
Potentially addresses https://codeberg.org/forgejo/forgejo/pulls/9959#issuecomment-8214671

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10075
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: mfenniak <mfenniak@noreply.codeberg.org>
2025-11-16 04:45:20 +01:00
0koandGusted a51a8d5701 chore(test): cleanup NewRequest which no longer supply CSRF values (#10119)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9830, which greatly simplified the tests that previously had to supply a csrf token in values map, but left behind the more complex funcs with empty maps.

Also fixed a few typos which popped up in the diff.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10119
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-14 23:21:10 +01:00
0koandGusted 5c9a909c03 feat(ui): arrow key navigation in dropdown (#10033)
Addresses https://codeberg.org/forgejo/forgejo/pulls/7906#issuecomment-5455662, https://codeberg.org/forgejo/forgejo/pulls/10025#issuecomment-8182184

Add arrow navigation to the JS-less/JS-enchanced dropdown component.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10033
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-10 13:35:38 +01:00
0ko 2f6ca55a1c fix(ui): replace obsolete gt- helpers (#9964)
Resolved a few obsolete (no longer functional) `gt-` helpers that were not converted into other classes at some point.

`gt-interact-bg` was replaced by `interact-bg`. The remaining one was on action view page in a gear icon, which lacked proper background change on hover.

`gt-font-18` & `gt-font-normal` were remaining in the repo name on repo page. I left out the `*-font-18` one out and kept fixed the font-weight, but also made the `/` use normal font-weight instead of semibold, which looks better.

Preview
Before: https://codeberg.org/attachments/e52d5ebc-7fa8-4057-8e4b-05d219525092
Gitea: https://codeberg.org/attachments/a9a50928-6e0e-483c-82fe-73b6c244f4d5
After: https://codeberg.org/attachments/fd04d5b1-1965-478f-9d45-97c5d994c780

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9964
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-11-08 18:21:05 +01:00
0ko d05002fbfb fix(ui): prevent JS from removing icon from close/reopen button (#9959)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9598. A bug surfaced.

When typing text in, JS was updating button's `textContent`, which also affected the icon included in the button. To avoid complex rebuilding of the button element in JS I just placed the text it it's own span, `textContent` of which is now updated by JS instead of the whole button.

Preview

Normal state from template:
https://codeberg.org/attachments/f504bcc3-c1bc-4b10-96ae-e8b666c4a828
https://codeberg.org/attachments/5e72109c-04c7-49b0-ba05-e8f17c949fcb

After editing text, without the fix:
https://codeberg.org/attachments/2c61b02f-b36a-4b80-8816-98bed3fc48e0
https://codeberg.org/attachments/923d4419-97ee-48c6-b60d-9719e36ae6ff

With the fix:
https://codeberg.org/attachments/458c1f6a-549e-4ef7-8822-8529351b7bc4
https://codeberg.org/attachments/839032f7-2f4a-488a-a8a5-d3fbfc45504b

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9959
Reviewed-by: Otto <otto@codeberg.org>
2025-11-05 05:02:52 +01:00
0ko 382c3c3228 feat(ui): allow dropdown to contain not just items (#9951)
Currently the dropdown component only supports having one `<summary>` and one `<ul>` (with interactive items) in it. This PR refactors it to add a `.content` container so that it is possible for the dropdown to contain things the more complex dropdowns do like `<hr>` and a searchbar.

Also adds an `<hr>` to user actions as a little demo.

Preview
B: https://codeberg.org/attachments/8dfb98d2-52be-4c3c-8fc0-8fe470f34703
A: https://codeberg.org/attachments/53f2acfb-2e61-4420-b616-13d563f5c257

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9951
Reviewed-by: Otto <otto@codeberg.org>
2025-11-05 05:00:15 +01:00
0koandGusted 0932c3ad71 chore(ui): remove unused css of id create-page-form (#9933)
`create-page-form` is currently only referenced in CSS files.
I've tried researching this with `git log -S 'create-page-form'` and here are the results:
* 80701d45bb - first mention. Introduced `create-page-form` as a Less function/inclusion or something
* 8e0a69f86a - added another usage of it in Less
* 4465c58f4b - seemingly added usage of it as of an actual ID to `gogs.css` (later renamed to `index.css`), still no use in templates
* 045f14fbd0 - unrelated mention in minified bundle
* 3d3faa2624 - ditto + did one property change to it like if it actually changed anything
* d9c67a8c90 - removed built bundle
* 202803fc69 - turned the strange Less thing into a proper pack of `#create-page-form` like if it was used, for some reason, duplicated the new code twice
* ee9e83b230 - removed some of the unused selectors by retiring the `.captcha-field` class, likely not knowing that nothing under `#create-page-form` is used

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9933
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-03 13:45:51 +01:00
0koandGusted b7460058ce feat(ui): add a little padding-top to form .help (#9932)
Ever since some forms were refactored into the new style I felt like the help texts were too close to the fields. So today I got to fixing this.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9932
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-11-03 03:22:31 +01:00
0koandGusted c13f3cae95 feat(ui): improve new buttons, use in more areas (#9863)
* Make danger buttons brighter - followup https://codeberg.org/forgejo/forgejo/pulls/9652#issuecomment-7803875
The new lightness 0.26 is same as lightness of --color-box-body instead of being darker than it, so the form controls aren't darker than the background they're on which might look bad. Looks pretty good, the calculated contrast is fine.
* Apply new buttons to avatar upload/removal forms
    * Better responds to overflowing
* Consistently apply medium font-weight to all buttons - followup https://codeberg.org/forgejo/forgejo/pulls/9652#issuecomment-7783718
    * This improves readability a lot. The previous normal weight was only chosen because some of the buttons had it, which wasn't a good excuse. We also have buttons with medium, and they are easier to read.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9863
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-10-28 00:10:38 +01:00
0ko 693e73b25f fix(ui/dropdown): ensure same height for all items (#9762)
Followup to https://codeberg.org/forgejo/forgejo/pulls/7906.

Depending on type (`a`, `button`) the height could have been different because of default styles:
* `base.css` supplies `body {line-height: 20px;}` which applies to `a`
* `normalize.css` supplies `button {line-height: 1.15;}`, making `button` shorter than `a`

To avoid this I refactored dropdown items' properties in the same way as I did to switch in `web_src/css/modules/switch.css` `min-height` is now used while `padding-block` is 0.

Preview
B: https://codeberg.org/forgejo/forgejo/attachments/29d9d9aa-bfb6-46a6-a368-23137e1ac60b
A: https://codeberg.org/forgejo/forgejo/attachments/026a0af2-9481-4335-930c-9c92ad00ef03

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9762
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-10-20 12:05:03 +02:00
0ko 22771fad30 fix(ui): remove extra helpers from statuspages (#9753)
These helpers are harmless for the normal Forgejo UI but are causing the viewport to break if the page is taller than the screen, causing overflow scroll in both directions.

Example: 404 page on Codeberg breaks because Codeberg is making the content of all pages full screen height before footer.

Originally added in bb50ab2861 but were likely made unused by some change at a later point, maybe in 91b5aa0e5f. I was not able to find a viewport where toggling this class via devtools would make any visual difference.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9753
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-10-20 12:03:58 +02:00
0ko b1ba9b06b2 feat(ui): dangerous buttons (#9652)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9359:
* add dangerous buttons type
    * they will be replacing `red` and `negative` buttons and don't have some of their problems:
        * they aren't as eye-catching and bright like `red` on dark and `negative` on both themes
        * they aren't as bland as `red` on light theme
        * ...they are consistent!
    * added them to the danger zone of repo settings for this initial PR

Preview:
- https://codeberg.org/attachments/e4d71f45-9455-4435-ab99-6e1bd2628d05
- https://codeberg.org/attachments/3056d3e1-d7b0-4417-8f2c-8fa34b399911

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9652
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Otto <otto@codeberg.org>
2025-10-20 12:03:17 +02:00
0ko bf80842b4f chore(ui): a few consistency improvements for modals (#9746)
A bucket of water for a lake of acidic modal inconsistencies but this PR exists.

## Change 1

Followup to https://codeberg.org/forgejo/forgejo/pulls/9636/files#diff-ed78a3f2bb5b010be9410d4a6be8ab08e50df2c4. Remove a few extra `center` wraps from the HTML. They are no longer doing anything anymore.

No visual changes.

## Change 2

Improve a few titles:

Preview:
- https://codeberg.org/attachments/4216f29f-687c-4b88-8a56-246282ae699b
- https://codeberg.org/attachments/14c493d1-21f2-4433-ac4d-fc2e985239b0
- https://codeberg.org/attachments/d18bd923-a46e-427c-9132-4e60a8ba0a9d

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9746
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-10-19 18:35:25 +02:00
0ko 609ce8c268 feat: improve tooltips and aria-labels of stars/forks/watchers links (#9754)
Followup: https://codeberg.org/forgejo/forgejo/pulls/2634, https://codeberg.org/forgejo/forgejo/pulls/2862

* i18n: migrate aria-label counters `n stars`, `n forks` to JSON in effort to eliminate the use of the old-style plurals
    * previous such migration https://codeberg.org/forgejo/forgejo/pulls/9625
    * testing: present, inherited from other changes
* a11y: add these aria-labels to usercards links on repo homepages
    * add a new one for `n watchers`
    * testing: present, minimal
* ui: re-use the counters in the tooltips so that they include a measurement unit and look better
    * testing: present, minimal
* ui: pretty-print the numbers in the tooltips
    * but not in aria labels
    * testing: missing: IDK how to work around the condition `{{if ge .NumStars 1000}}`
        * but `PrettyNumber` it relies on has test coverage, so it seems fine

Preview:
- https://codeberg.org/attachments/6d726bbd-fd84-4ca0-9aa4-cd5492512305
- https://codeberg.org/attachments/686eb429-93a7-4268-98d7-84863d6eb5ee

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9754
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2025-10-19 18:33:26 +02:00
0ko f200d53eb1 refactor(ui): re-implement icon colors but for all thin elements (#9643)
Followup to https://codeberg.org/forgejo/forgejo/pulls/3702.

* replace `--color-icon-*` with `--color-thin-*`
* use proper fallbacks instead of variables just referencing other variables
* Forgejo dark:
    * fix contrast of red and green texts (also purple if they exist)
    * improve contrast of orange texts
    * normalize chroma/lightness properties of all colors with `oklch`

Diff stats
B: https://codeberg.org/attachments/76c54dda-a6ac-4d87-b174-54eb97a71643
A: https://codeberg.org/attachments/7852d2f2-7db1-4480-91b1-ca809ffcd03e

Repo activity
B: https://codeberg.org/attachments/beb6ab5b-bcdb-464f-8d7d-038c1a082492
A: https://codeberg.org/attachments/b12be151-4ab3-4471-b6fb-ea60653580a5

Due date
B: https://codeberg.org/attachments/cdffc5bc-3379-451d-b99f-587d56821a26
A: https://codeberg.org/attachments/cf610300-f7aa-4c4f-ba11-0cd973ef8c94

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9643
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-10-12 10:01:24 +02:00
0ko e9528ec4a8 chore(e2e): disable webkit/safari in some tests (#9642)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9599#issuecomment-7670890.

I analyzed a bunch more recent runs and adding skipping for ones that fail very often. Coincidentally all of the most failing tests were already skipped for either Webkit or Safari, just not for both.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9642
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
2025-10-11 16:08:23 +02:00
0ko e13da8aae3 chore: remove branding from application run helper (#9640)
Rel: https://codeberg.org/forgejo/forgejo/pulls/9628.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9640
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-10-11 12:14:13 +02:00
0ko 688a83e405 chore(ui): remove unused class .small-menu-items (#9639)
Followup to https://codeberg.org/forgejo/forgejo/pulls/8399/files. That PR turned `small-menu-items` completely unused.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9639
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-10-11 10:39:43 +02:00
0ko edc6072da2 fix(ui): make it possible to post issues and comments w/o JS (#9614)
Fix regression of https://codeberg.org/forgejo/forgejo/pulls/5589 & https://codeberg.org/forgejo/forgejo/pulls/7006.

Both added invisible input fields with `required` attribute into the forms used for creating issues and adding comments via `combomarkdowneditor.tmpl`. These fields were not related to the form and were only used for the modal dialogs.
* When JS is on, modals are moved out of the form to the bottom of the page by JS that handles modals
* When JS is off, the forms are stuck with invisible inputs preventing form submission
    * Another side effect is that request data contains these unwanted fields

This was fixed by adding attribute `disabled` to unwanted inputs. Then JS removes it on initialization. Thanks to @Beowulf for helping with choosing the approach!
When a field is `disabled`, the browser doesn't consider it in form validation and doesn't even include it in the request data.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9614
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
2025-10-11 10:38:48 +02:00
0ko 03d77fd465 fix(ui/releases): strech elements apart when no search bar (#9626)
Fix minor visual defect, which is a regression of https://codeberg.org/forgejo/forgejo/pulls/8399.

When viewing individual releases, there's no search bar.

B: https://codeberg.org/attachments/5621e544-6d18-4f58-b4f5-f15bf2c10e3b
A: https://codeberg.org/attachments/f6ebc7bb-9168-4a3f-86ba-0b526c2ede89

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9626
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
2025-10-11 05:39:10 +02:00
0koandGusted 9a35b6ba77 chore: remove branding from context imports (#9628)
Kind of followup to https://codeberg.org/forgejo/forgejo/pulls/7337.

With cherry-picking being no more, this shouldn't cause too much chaos.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9628
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-10-11 01:52:51 +02:00
0koandGusted 220c8d173b chore(i18n): migrate download counts to json (#9625)
Previous such PR: https://codeberg.org/forgejo/forgejo/pulls/9463

As long as changes here do not conflict with https://codeberg.org/forgejo/forgejo/pulls/9597 it is safe to merge without merging that one first.

* removals from the INI are included to preserve traceability of strings being moved around
* in non-base items are prepended to the top to avoid conflict with Weblate
* in English insertion happened in a semi-random place to avoid conflict with PRs that append strings at the end

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9625
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-10-10 22:15:36 +02:00
0ko 39f389eb17 fix(e2e): disable webkit/safari in tests where they are too falky (#9599)
These tests often appear as failing with one failed retry in e2e logs for either browsers.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9599
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Otto <otto@codeberg.org>
2025-10-10 15:36:21 +02:00
0ko 84e9b566a0 feat(ui): improve close/reopen/comment buttons (#9598)
Related: https://codeberg.org/forgejo/forgejo/issues/2650, https://codeberg.org/forgejo/forgejo/pulls/6044

* improve consistency by getting rid of the less usual button kinds
    * same as changes to profile buttons in https://codeberg.org/forgejo/forgejo/pulls/9359
        * transparent outline button is now secondary
        * bulb-bright red button is now secondary
    * I think that actions like Close and Reopen shouldn't attract much attention, so they are secondary
* add icons to better visually indicate the action
    * yes this is inspired by GitHub
    * unlike in GitHub, the icons are monochrome:
        * colored icons had bad contrast due to buttons being brighter than the usual areas with colored icons
        * they are not at all common inside of buttons in our UI
* convert the buttons to the new CSS
    * differences are described in https://codeberg.org/forgejo/forgejo/pulls/9359
* a few general CSS improvements
    * prevent 1px vertical padding on `<button>` provided by browser defaults
        * wasn't noticed before because no `<buttons>` were converted yet
    * increased the default gap (for buttons with such icons) to 0.5rem
        * looks much better than Fomantic's 0.25rem
        * I took this opportunity because no buttons with icons were converted yet, so there's no blast radius to worry about yet

Preview

B: https://codeberg.org/attachments/3cdb2fc8-3887-4e82-8213-45dde42a5b33
A: https://codeberg.org/attachments/133b59c2-470f-4f97-8e85-e374e0a0b52e

B: https://codeberg.org/attachments/d814d2dc-d2a2-4daf-ba65-70d9097bb046
A: https://codeberg.org/attachments/2f2e0214-33e5-4ca9-a315-21252dc27525

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9598
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-10-10 07:11:53 +02:00
0ko 2b4754c1d7 feat(ui): JSfree sorting on /explore/{users,organizations} (#9556)
This PR replaces the sort dropdowns on Users and Organizations pages of Explore with the one we've got earlier in two other areas. Previous such replacement happened in #8572.

This implies a few positive changes such as:
* larger font size
* larger clickable area for coarse cursor
* it is possible to use while scripts are still loading
* it is possible to use w/o JS

Some refactors were made to support this change and as general improvements.

Desktop, closed
B: https://codeberg.org/attachments/354f7194-b247-4ecd-8875-2e95dadc7445
A: https://codeberg.org/attachments/0fa49cf5-e8e5-4c15-b2b0-7d13e8505945

Desktop, open
B: https://codeberg.org/attachments/b01b75d1-dbe4-458c-abd5-64cd8c121bc1
A: https://codeberg.org/attachments/94baccc4-fe36-4ae1-ace0-9b4d5fbd9f42

Mobile, open
B: https://codeberg.org/attachments/f868720a-ec71-4829-87f7-a1cfab860e37
A: https://codeberg.org/attachments/bbe72710-6824-4107-8086-d2bd50897038

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9556
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
2025-10-09 14:33:33 +02:00
0ko 563291579e fix(ui/mde): fix switch height and buttons alignment (#9545)
Followup to https://codeberg.org/forgejo/forgejo/pulls/9359.

The custom height override for the switch in MDE was not taken into account in that PR.
* How it used to be: constant height + variable padding for different scenarios
* How it works now: there's no padding, just variable height

After the change the override that was supposed to decrease the padding started increasing it from 0, making the switch too tall.

Also two of the buttons on the toolbar used to have a completely unused `button` class, which detonated them after it was globally implemented, so it was removed.

First time a button with this class was added in 4615891b9d, then it was duplicated in 6dad457552. Modals do not depend on presence of this class:
https://codeberg.org/forgejo/forgejo/src/commit/6610eb1dbfa16f88e4f685141735b7b719cb3de8/web_src/js/features/common-global.js#L441

Preview:
B: https://codeberg.org/attachments/5d10ac6e-45b3-4cd3-8083-f446824d4310
A: https://codeberg.org/attachments/93a00f69-56a6-4c02-93d8-6080f51d273f

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9545
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-10-08 17:53:50 +02:00
0koandOtto abd69183ea feat(ui): responsive, JS-free repo language stats panel (#9532)
Followup to https://codeberg.org/forgejo/forgejo/pulls/6700 & https://codeberg.org/forgejo/forgejo/pulls/9429

## Testing

Test coverage is already present in `tests/e2e/repo-home.test.e2e.ts` - there are no changes in behavior, so just selectors were updated.

## Changes

* Re-make stats using details+summary: it now works without JS, works immediately after page is displayed, responds to clicking more quickly
* Make the clickable bar taller on coarse screens
* Fix broken overflowing on narrow screens

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9532
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-10-05 20:36:35 +02:00
0ko f8d25228ce chore(release-notes): add chroma update to v13.0.0 release notes 2025-10-05 17:50:35 +05:00
0ko fd08eba8d2 chore(release-notes): add chroma update to v12.0.0 release notes
There were no chroma updates in v11.
2025-10-05 17:43:06 +05:00
0ko f2570811a4 chore(release-notes): add chroma update to v10.0.0 release notes 2025-10-05 17:24:51 +05:00
0ko 1e113fd8dc chore(release-notes): fix release notes of chroma update in v8.0.0 2025-10-05 17:10:38 +05:00