mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-21 08:30:50 +00:00
fix(ui): ensure same width of usercards in grid (#6799)
Followup to https://codeberg.org/forgejo/forgejo/pulls/4760 * some refactoring * move rules out of repo.css to a new module * simplify selectors by omitting .list: it is now only used to style the list itself, they're still precise enough in scope of .user-cards * apply wrap/ellipsis to cards' content. Done via CSS to avoid spamming gt-ellipsis in the template * prevent cards with long content from taking horizontal space from other cards * prevent such cards from causing horizontal overflow on mobile * prevent varying card height, it doesn't look good even with text wrapping Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6799 Reviewed-by: Otto <otto@codeberg.org> Co-authored-by: 0ko <0ko@noreply.codeberg.org> Co-committed-by: 0ko <0ko@noreply.codeberg.org>
This commit is contained in:
parent
0dd605a8d3
commit
8b93f41aaa
7 changed files with 100 additions and 51 deletions
|
@ -17,3 +17,13 @@
|
||||||
id: 4
|
id: 4
|
||||||
user_id: 31
|
user_id: 31
|
||||||
follow_id: 33
|
follow_id: 33
|
||||||
|
|
||||||
|
-
|
||||||
|
id: 5
|
||||||
|
user_id: 4
|
||||||
|
follow_id: 8
|
||||||
|
|
||||||
|
-
|
||||||
|
id: 6
|
||||||
|
user_id: 5
|
||||||
|
follow_id: 8
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
login_source: 0
|
login_source: 0
|
||||||
login_name: user2
|
login_name: user2
|
||||||
type: 0
|
type: 0
|
||||||
|
website: https://keyoxide.org/eb114f5e6c0dc2bcdd183550a4b61a2dc5923710
|
||||||
salt: ZogKvWdyEx
|
salt: ZogKvWdyEx
|
||||||
max_repo_creation: -1
|
max_repo_creation: -1
|
||||||
is_active: true
|
is_active: true
|
||||||
|
@ -143,7 +144,7 @@
|
||||||
avatar_email: user4@example.com
|
avatar_email: user4@example.com
|
||||||
use_custom_avatar: true
|
use_custom_avatar: true
|
||||||
num_followers: 0
|
num_followers: 0
|
||||||
num_following: 1
|
num_following: 2
|
||||||
num_stars: 0
|
num_stars: 0
|
||||||
num_repos: 0
|
num_repos: 0
|
||||||
num_teams: 0
|
num_teams: 0
|
||||||
|
@ -181,7 +182,7 @@
|
||||||
avatar_email: user5@example.com
|
avatar_email: user5@example.com
|
||||||
use_custom_avatar: true
|
use_custom_avatar: true
|
||||||
num_followers: 0
|
num_followers: 0
|
||||||
num_following: 0
|
num_following: 1
|
||||||
num_stars: 0
|
num_stars: 0
|
||||||
num_repos: 1
|
num_repos: 1
|
||||||
num_teams: 0
|
num_teams: 0
|
||||||
|
@ -294,7 +295,7 @@
|
||||||
avatar: ""
|
avatar: ""
|
||||||
avatar_email: user8@example.com
|
avatar_email: user8@example.com
|
||||||
use_custom_avatar: true
|
use_custom_avatar: true
|
||||||
num_followers: 1
|
num_followers: 3
|
||||||
num_following: 1
|
num_following: 1
|
||||||
num_stars: 0
|
num_stars: 0
|
||||||
num_repos: 0
|
num_repos: 0
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<a href="{{.HomeLink}}">
|
<a href="{{.HomeLink}}">
|
||||||
{{ctx.AvatarUtils.Avatar .}}
|
{{ctx.AvatarUtils.Avatar .}}
|
||||||
</a>
|
</a>
|
||||||
<div>
|
<div class="content">
|
||||||
<h3 class="name">
|
<h3 class="name">
|
||||||
<a href="{{.HomeLink}}">{{.DisplayName}}</a>
|
<a href="{{.HomeLink}}">{{.DisplayName}}</a>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
29
tests/e2e/user-cards.test.e2e.ts
Normal file
29
tests/e2e/user-cards.test.e2e.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
// @watch start
|
||||||
|
// templates/repo/user_cards.tmpl
|
||||||
|
// web_src/css/modules/user-cards.css
|
||||||
|
// @watch end
|
||||||
|
|
||||||
|
import {expect} from '@playwright/test';
|
||||||
|
import {test} from './utils_e2e.ts';
|
||||||
|
|
||||||
|
test('Usercards width', async ({page}) => {
|
||||||
|
await page.goto('/user8?tab=followers');
|
||||||
|
|
||||||
|
// Regardless of whether cards in a grid or flex mode, they should be ~same
|
||||||
|
// width. Verifying this relies on fixtures with users that have long website
|
||||||
|
// link or other content that could push the card width.
|
||||||
|
const widths = [];
|
||||||
|
const amount = 3;
|
||||||
|
|
||||||
|
for (let i = 1; i <= amount; i++) {
|
||||||
|
const card = await page.locator(`.user-cards .card:nth-child(${i})`).boundingBox();
|
||||||
|
widths.push(Math.round(card.width));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const width of widths) {
|
||||||
|
expect(width).toBe(widths[0]);
|
||||||
|
}
|
||||||
|
});
|
|
@ -27,6 +27,7 @@
|
||||||
@import "./modules/toast.css";
|
@import "./modules/toast.css";
|
||||||
@import "./modules/svg.css";
|
@import "./modules/svg.css";
|
||||||
@import "./modules/flexcontainer.css";
|
@import "./modules/flexcontainer.css";
|
||||||
|
@import "./modules/user-cards.css";
|
||||||
|
|
||||||
@import "./shared/flex-list.css";
|
@import "./shared/flex-list.css";
|
||||||
@import "./shared/milestone.css";
|
@import "./shared/milestone.css";
|
||||||
|
|
55
web_src/css/modules/user-cards.css
Normal file
55
web_src/css/modules/user-cards.css
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
.user-cards .list {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 15px;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767.98px) {
|
||||||
|
.user-cards .list {
|
||||||
|
grid-template-columns: repeat(1, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
.user.profile .user-cards .list {
|
||||||
|
grid-template-columns: repeat(1, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-cards .card {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 14px;
|
||||||
|
border-radius: 0.28571429rem;
|
||||||
|
border: 1px solid var(--color-secondary);
|
||||||
|
background: var(--color-box-body);
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-cards .card,
|
||||||
|
.user-cards .card .content,
|
||||||
|
.user-cards .card .name,
|
||||||
|
.user-cards .card .meta {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-cards .card .avatar {
|
||||||
|
width: 48px;
|
||||||
|
height: 48px;
|
||||||
|
margin-right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-cards .card .name {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-weight: var(--font-weight-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-cards .card .meta {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
|
@ -2010,53 +2010,6 @@ details.repo-search-result summary::marker {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-cards .list {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(3, 1fr);
|
|
||||||
gap: 15px;
|
|
||||||
margin: 0 0 10px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767.98px) {
|
|
||||||
.user-cards .list {
|
|
||||||
grid-template-columns: repeat(1, 1fr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 900px) {
|
|
||||||
.user.profile .user-cards .list {
|
|
||||||
grid-template-columns: repeat(1, 1fr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-cards .list .card {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
padding: 14px;
|
|
||||||
border-radius: 0.28571429rem;
|
|
||||||
border: 1px solid var(--color-secondary);
|
|
||||||
background: var(--color-box-body);
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-cards .list .card .avatar {
|
|
||||||
width: 48px;
|
|
||||||
height: 48px;
|
|
||||||
margin-right: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-cards .list .card .name {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
font-weight: var(--font-weight-normal);
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-cards .list .card .meta {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#search-user-box .results .result .image {
|
#search-user-box .results .result .image {
|
||||||
order: 0;
|
order: 0;
|
||||||
margin-right: 12px;
|
margin-right: 12px;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue