feat(web/user): username color (#24)
All checks were successful
continuous-integration/drone/push Build is passing

Co-authored-by: Wenkuo Yu <82705676+youwike@users.noreply.github.com>
Co-authored-by: Baoshuo Ren <47095648+renbaoshuo@users.noreply.github.com>
This commit is contained in:
Baoshuo Ren 2023-01-14 17:48:47 +08:00 committed by GitHub
commit 983a0077dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 76 additions and 10 deletions

View File

@ -1336,7 +1336,7 @@ EOD);
EOD, EOD,
function ($row) { function ($row) {
echo '<tr>'; echo '<tr>';
echo '<td>', '<span class="uoj-username" data-realname="', HTML::escape($row['realname']), '">', $row['username'], '</span>', '</td>'; echo '<td>', UOJUser::getLink($row), '</td>';
echo '<td>', HTML::escape($row['school']), '</td>'; echo '<td>', HTML::escape($row['school']), '</td>';
echo '<td>'; echo '<td>';
switch ($row['usergroup']) { switch ($row['usergroup']) {

View File

@ -233,6 +233,36 @@ EOD);
}, },
null null
); );
if ($user['usergroup'] == 'B') {
$update_profile_form->appendHTML(<<<EOD
<div class="mb-3">
<label for="input-username_color" class="form-label">用户名颜色</label>
<input type="text" class="form-control" id="input-username_color" aria-describedby="help-username_color" value="棕色 - #996600" disabled>
<div id="help-username_color" class="form-text">被封禁的用户无法修改用户名颜色。</div>
</div>
EOD);
} else if ($user['usergroup'] == 'T') {
$update_profile_form->appendHTML(<<<EOD
<div class="mb-3">
<label for="input-username_color" class="form-label">用户名颜色</label>
<input type="text" class="form-control" id="input-username_color" aria-describedby="help-username_color" value="灰色 - #707070" disabled>
<div id="help-username_color" class="form-text">临时用户无法修改用户名颜色。</div>
</div>
EOD);
} else {
$additional_colors = [];
if (isSuperUser($user)) {
$additional_colors['#9d3dcf'] = '紫色 - #9d3dcf';
$additional_colors['#fe4c61'] = '红色 - #fe4c61';
}
$update_profile_form->addVSelect('username_color', $additional_colors + [
'#0d6efd' => '蓝色 - #0d6efd',
'#2da44e' => '绿色 - #2da44e',
'#f48fb1' => '粉色 - #f48fb1',
], '用户名颜色', '#0d6efd');
}
$update_profile_form->handle = function (&$vdata) use ($user) { $update_profile_form->handle = function (&$vdata) use ($user) {
$data = [ $data = [
'email' => $vdata['email'], 'email' => $vdata['email'],
@ -268,7 +298,9 @@ EOD);
'$.social.codeforces', '$.social.codeforces',
$vdata['codeforces'], $vdata['codeforces'],
'$.social.website', '$.social.website',
$vdata['website'] $vdata['website'],
'$.username_color',
$_POST['username_color']
), ),
], ],
"where", ["username" => $user['username']] "where", ["username" => $user['username']]

View File

@ -221,14 +221,37 @@ class UOJUser {
} }
} }
if ($user['usergroup'] == 'B') { $extra = UOJUser::getExtra($user);
return HTML::tag('a', ['class' => 'text-danger fw-bold', 'href' => "/user/{$user['username']}"], $user['username']); $realname = $user['realname'];
$color = '#0d6efd';
if ($user['usergroup'] === 'B') {
$color = '#996600';
} else if (isTmpUser($user)) {
$color = '#707070';
} else {
if (isSuperUser($user)) {
$color = '#9d3dcf';
}
$color = $extra['username_color'];
// 前管理员设置颜色为紫色、红色的,颜色改为蓝色
if (($color === '#9d3dcf' || $color === '#fe4c61') && !isSuperUser($user)) {
$color = '#0d6efd';
}
} }
// 未登录不可查看真实姓名 if ($user['usertype'] == 'teacher') {
$realname = Auth::check() ? $user['realname'] : ''; $realname .= '老师';
}
return HTML::tag('span', ['class' => 'uoj-username', 'data-realname' => trim(HTML::escape($realname))], $user['username']); return HTML::tag('span', [
'class' => 'uoj-username',
// 未登录不可查看真实姓名
'data-realname' => Auth::check() ? trim(HTML::escape($realname)) : '',
'data-color' => $color,
], $user['username']);
} }
public static function getUpdatedExtraVisitHistory($history, $cur) { public static function getUpdatedExtraVisitHistory($history, $cur) {
@ -290,6 +313,7 @@ class UOJUser {
'show_email' => 'all', 'show_email' => 'all',
'show_qq' => 'all', 'show_qq' => 'all',
'avatar_source' => 'gravatar', 'avatar_source' => 'gravatar',
'username_color' => isSuperUser($user) ? '#9d3dcf' : '#0d6efd',
]); ]);
return $extra; return $extra;
} }

View File

@ -25,6 +25,11 @@ a {
'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
} }
.uoj-realname {
font-size: 90%;
font-weight: normal;
}
h1, h1,
.h1 { .h1 {
/* font-size: 2.5rem; */ /* font-size: 2.5rem; */
@ -164,7 +169,7 @@ h6,
.card-uoj-tle > .card-header:hover, .card-uoj-tle > .card-header:hover,
.card-uoj-tle > div.card-header > div > .uoj-status-text { .card-uoj-tle > div.card-header > div > .uoj-status-text {
color: sandybrown; color: #f4a460;
} }
.card-uoj-wrong > .card-header:hover, .card-uoj-wrong > .card-header:hover,

View File

@ -148,11 +148,16 @@ function getUserSpan(username, realname) {
function replaceWithHighlightUsername() { function replaceWithHighlightUsername() {
var username = $(this).text(); var username = $(this).text();
var realname = $(this).data("realname"); var realname = $(this).data("realname");
var color = $(this).data("color");
var new_elem_inner = '';
if ($(this).data("link") != 0) { if ($(this).data("link") != 0) {
$(this).replaceWith(getUserLink(username, realname)); new_elem_inner = getUserLink(username, realname);
} else { } else {
$(this).replaceWith(getUserSpan(username, realname)); new_elem_inner = getUserSpan(username, realname);
} }
$(this).replaceWith($(new_elem_inner).css('color', color));
} }
$.fn.uoj_honor = function() { $.fn.uoj_honor = function() {