Skip to content

Commit faa0423

Browse files
authored
Merge pull request ppy#12070 from nanaya/ranking-team-page
Update team leaderboard page
2 parents 30e703b + a58c135 commit faa0423

7 files changed

+103
-145
lines changed

app/Http/Controllers/TeamsController.php

+7-2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ public function leaderboard(string $id, ?string $ruleset = null): Response
9696
if ($statisticsRelationName === null) {
9797
throw new InvariantException(osu_trans('beatmaps.invalid_ruleset'));
9898
}
99+
$sort = get_string(\Request::input('sort'));
100+
if ($sort !== 'score') {
101+
$sort = 'performance';
102+
}
103+
99104
$leaderboard = $team
100105
->members
101106
->loadMissing("user.{$statisticsRelationName}")
@@ -104,10 +109,10 @@ public function leaderboard(string $id, ?string $ruleset = null): Response
104109
$member->user->$statisticsRelationName
105110
?? $member->user->$statisticsRelationName()->make()
106111
)->setRelation('user', $member->user))
107-
->sortByDesc(['rank_score', 'ranked_score'])
112+
->sortByDesc($sort === 'score' ? 'ranked_score' : 'rank_score')
108113
->values();
109114

110-
return ext_view('teams.leaderboard', compact('leaderboard', 'ruleset', 'team'));
115+
return ext_view('teams.leaderboard', compact('leaderboard', 'ruleset', 'sort', 'team'));
111116
}
112117

113118
public function part(string $id): Response

resources/css/bem-index.less

-2
Original file line numberDiff line numberDiff line change
@@ -392,8 +392,6 @@
392392
@import "bem/team-info-entries";
393393
@import "bem/team-info-entry";
394394
@import "bem/team-members";
395-
@import "bem/team-members-leaderboard";
396-
@import "bem/team-members-leaderboard-item";
397395
@import "bem/team-members-manage";
398396
@import "bem/team-settings";
399397
@import "bem/team-settings-description-preview";

resources/css/bem/team-members-leaderboard-item.less

-71
This file was deleted.

resources/css/bem/team-members-leaderboard.less

-15
This file was deleted.

resources/views/rankings/_main_column.blade.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class="ranking-page-table-main"
3232
class="ranking-page-table-main"
3333
href="{{ route('teams.leaderboard', [
3434
'ruleset' => $mode,
35+
'sort' => $sort,
3536
'team' => $object,
3637
]) }}"
3738
>
@@ -63,7 +64,7 @@ class="u-contents"
6364
</a>
6465
</span>
6566

66-
@if (($team = $object->team) !== null)
67+
@if (($showTeam ?? true) && ($team = $object->team) !== null)
6768
<span class="ranking-page-table-main__flag">
6869
<a class="u-contents" href="{{ route('teams.show', $team) }}">
6970
@include('objects._flag_team', compact('team'))

resources/views/teams/_members_leaderboard.blade.php

+77-50
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,80 @@
22
Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
33
See the LICENCE file in the repository root for full licence text.
44
--}}
5-
<ul class="team-members-leaderboard">
6-
@foreach ($leaderboard as $i => $stats)
7-
<li class="team-members-leaderboard-item">
8-
<div class="team-members-leaderboard-item__rank">
9-
#{{ i18n_number_format($i + 1) }}
10-
</div>
11-
<div class="team-members-leaderboard-item__username-container">
12-
<a
13-
class="team-members-leaderboard-item__username js-usercard"
14-
data-user-id="{{ $stats->user_id }}"
15-
href="{{ route('users.show', $stats->user_id) }}"
16-
>
17-
<span class="team-members-leaderboard-item__avatar">
18-
<span
19-
class="avatar avatar--full avatar--guest"
20-
{!! background_image($stats->user->user_avatar) !!}
21-
></span>
22-
</span>
23-
24-
{{ $stats->user->username }}
25-
</a>
26-
</div>
27-
<div class="team-members-leaderboard-item__numbers">
28-
<div class="team-members-leaderboard-item__number">
29-
<div class="team-members-leaderboard-item__number-title">
30-
{{ osu_trans('rankings.stat.ranked_score') }}
31-
</div>
32-
<div>
33-
{{ i18n_number_format($stats->ranked_score) }}
34-
</div>
35-
</div>
36-
<div class="team-members-leaderboard-item__number">
37-
<div class="team-members-leaderboard-item__number-title">
38-
{{ osu_trans('rankings.stat.performance') }}
39-
</div>
40-
<div>
41-
{{ i18n_number_format($stats->rank_score) ?? '-' }}
42-
</div>
43-
</div>
44-
<div class="team-members-leaderboard-item__number">
45-
<div class="team-members-leaderboard-item__number-title">
46-
{{ osu_trans('teams.leaderboard.global_rank') }}
47-
</div>
48-
<div>
49-
{{ i18n_number_format($stats->globalRank()) ?? '-' }}
50-
</div>
51-
</div>
52-
</div>
53-
@endforeach
54-
</ul>
5+
<table class="ranking-page-table">
6+
<thead>
7+
<tr>
8+
<th></th>
9+
<th class="ranking-page-table__heading ranking-page-table__heading--main"></th>
10+
<th class="ranking-page-table__heading">
11+
{{ osu_trans('rankings.stat.accuracy') }}
12+
</th>
13+
<th class="ranking-page-table__heading">
14+
{{ osu_trans('rankings.stat.play_count') }}
15+
</th>
16+
<th class="{{ class_with_modifiers('ranking-page-table__heading', ['focused' => $sort === 'score']) }}">
17+
{{ osu_trans('rankings.stat.ranked_score') }}
18+
</th>
19+
<th class="{{ class_with_modifiers('ranking-page-table__heading', ['focused' => $sort === 'performance']) }}">
20+
{{ osu_trans('rankings.stat.performance') }}
21+
</th>
22+
<th class="ranking-page-table__heading">
23+
{{ osu_trans('teams.leaderboard.global_rank') }}
24+
</th>
25+
<th class="ranking-page-table__heading ranking-page-table__heading--grade">
26+
{{ osu_trans('rankings.stat.ss') }}
27+
</th>
28+
<th class="ranking-page-table__heading ranking-page-table__heading--grade">
29+
{{ osu_trans('rankings.stat.s') }}
30+
</th>
31+
<th class="ranking-page-table__heading ranking-page-table__heading--grade">
32+
{{ osu_trans('rankings.stat.a') }}
33+
</th>
34+
</tr>
35+
</thead>
36+
<tbody>
37+
@foreach ($leaderboard as $i => $stats)
38+
<tr class="{{ class_with_modifiers('ranking-page-table__row', ['inactive' => !$stats->user->isActive()]) }}">
39+
<td class="ranking-page-table__column">
40+
#{{ i18n_number_format($i + 1) }}
41+
</td>
42+
<td class="ranking-page-table__column ranking-page-table__column--main">
43+
@include('rankings._main_column', [
44+
'mode' => $ruleset,
45+
'object' => $stats->user,
46+
'showTeam' => false,
47+
'sort' => null,
48+
'type' => $sort,
49+
])
50+
</td>
51+
<td class="ranking-page-table__column ranking-page-table__column--dimmed">
52+
{{ format_percentage($stats->accuracy_new / 100) }}
53+
</td>
54+
<td class="ranking-page-table__column ranking-page-table__column--dimmed">
55+
{{ i18n_number_format($stats->playcount) }}
56+
</td>
57+
<td class="{{ class_with_modifiers('ranking-page-table__column', ['dimmed' => $sort !== 'score']) }}">
58+
{{ i18n_number_format(round($stats->ranked_score)) }}
59+
</td>
60+
<td class="{{ class_with_modifiers('ranking-page-table__column', ['dimmed' => $sort !== 'performance']) }}">
61+
{{ i18n_number_format($stats->rank_score) ?? '-' }}
62+
</td>
63+
<td class="ranking-page-table__column ranking-page-table__column--dimmed">
64+
@php
65+
$rank = $stats->globalRank();
66+
@endphp
67+
{{ $rank === null ? '-' : '#'.i18n_number_format($rank) }}
68+
</td>
69+
<td class="ranking-page-table__column ranking-page-table__column--dimmed">
70+
{{ i18n_number_format(max(0, $stats->x_rank_count + $stats->xh_rank_count)) }}
71+
</td>
72+
<td class="ranking-page-table__column ranking-page-table__column--dimmed">
73+
{{ i18n_number_format(max(0, $stats->s_rank_count + $stats->sh_rank_count)) }}
74+
</td>
75+
<td class="ranking-page-table__column ranking-page-table__column--dimmed">
76+
{{ i18n_number_format(max(0, $stats->a_rank_count)) }}
77+
</td>
78+
</tr>
79+
@endforeach
80+
</tbody>
81+
</table>

resources/views/teams/leaderboard.blade.php

+17-4
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,24 @@
2020
@endslot
2121
@endcomponent
2222

23-
<div class="osu-page osu-page--generic-compact">
24-
<div class="user-profile-pages user-profile-pages--no-tabs">
25-
<div class="page-extra u-fancy-scrollbar">
26-
@include('teams._members_leaderboard')
23+
<div class="osu-page osu-page--generic">
24+
<div class="sort">
25+
<div class="sort__items">
26+
<div class="sort__item sort__item--title">
27+
{{ osu_trans('sort._') }}
28+
</div>
29+
@foreach ([['performance', 'performance'], ['score', 'ranked_score']] as $newSort)
30+
<a
31+
class="{{ class_with_modifiers('sort__item', 'button', ['active' => $newSort[0] === $sort]) }}"
32+
href="{{ route('teams.leaderboard', ['team' => $team, 'sort' => $newSort[0]]) }}"
33+
>
34+
{{ osu_trans("rankings.stat.{$newSort[1]}") }}
35+
</a>
36+
@endforeach
2737
</div>
2838
</div>
39+
<div class="ranking-page">
40+
@include('teams._members_leaderboard')
41+
</div>
2942
</div>
3043
@endsection

0 commit comments

Comments
 (0)