Minor members list redesign.
This commit is contained in:
parent
239b0bae61
commit
e678efedf4
7 changed files with 139 additions and 309 deletions
|
@ -190,7 +190,6 @@ html {
|
|||
@include profile/guidelines.css;
|
||||
@include profile/header.css;
|
||||
@include profile/profile.css;
|
||||
@include profile/relations.css;
|
||||
@include profile/signature.css;
|
||||
@include profile/warning.css;
|
||||
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
.profile__relations {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
.profile__relations__user {
|
||||
margin: 2px;
|
||||
width: 300px;
|
||||
display: flex;
|
||||
}
|
|
@ -1,22 +1,16 @@
|
|||
.usercard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
transition: box-shadow .5s;
|
||||
z-index: 1;
|
||||
color: #fff;
|
||||
background-color: var(--background-colour);
|
||||
box-shadow: 0 1px 2px #000A;
|
||||
text-shadow: 0 1px 4px #000;
|
||||
overflow: hidden;
|
||||
flex: 1 1 auto;
|
||||
|
||||
--usercard-header-overlay-start: transparent;
|
||||
--usercard-header-overlay-stop: var(--background-colour-translucent-9);
|
||||
box-shadow: 0 1px 2px var(--background-colour-translucent-6);
|
||||
}
|
||||
.usercard:hover {
|
||||
box-shadow: 0 1px 4px #000;
|
||||
box-shadow: 0 1px 4px var(--background-colour-translucent-6);
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.usercard__background {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
|
@ -27,10 +21,7 @@
|
|||
background-blend-mode: multiply;
|
||||
}
|
||||
|
||||
.usercard__header {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
.usercard__header__link {
|
||||
.usercard__link {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
@ -38,133 +29,132 @@
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
.usercard__header__avatar {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
.usercard__avatar {
|
||||
box-sizing: content-box;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
.usercard__header__container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
background-image: linear-gradient(0deg, var(--usercard-header-overlay-stop), var(--usercard-header-overlay-start));
|
||||
padding: 8px;
|
||||
pointer-events: none;
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.usercard__header__details {
|
||||
margin: 0 10px;
|
||||
flex: 1 1 auto;
|
||||
.usercard__details {
|
||||
pointer-events: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.usercard__header__relation {
|
||||
font-variant: all-small-caps;
|
||||
background: var(--usercard-header-overlay-stop);
|
||||
border-radius: 2px;
|
||||
line-height: 1.2em;
|
||||
padding: 1px 5px 4px;
|
||||
cursor: default;
|
||||
.usercard__details__username {
|
||||
font-size: 1.4em;
|
||||
line-height: 1.4em;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.usercard__header__username {
|
||||
font-size: 1.5em;
|
||||
line-height: 1.3em;
|
||||
}
|
||||
|
||||
.usercard__header__title {
|
||||
.usercard__details__title {
|
||||
font-size: .9em;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
.usercard__header__country {
|
||||
.usercard__details__country {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
.usercard__header__country__name {
|
||||
.usercard__details__country__name {
|
||||
font-size: .9em;
|
||||
margin-left: 4px;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
.usercard__container {
|
||||
flex: 1 1 auto;
|
||||
background-color: var(--usercard-header-overlay-stop);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.usercard__dates {
|
||||
font-size: .9em;
|
||||
line-height: 1em;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
align-items: center;
|
||||
flex: 0 0 auto;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
.usercard__date {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.usercard__stats {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-end;
|
||||
flex: 0 0 auto;
|
||||
align-items: center;
|
||||
pointer-events: none;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
gap: 6px;
|
||||
padding: 0 6px;
|
||||
}
|
||||
.usercard__stat {
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
padding: 4px 8px;
|
||||
min-width: 80px;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
padding: 5px 10px;
|
||||
cursor: default;
|
||||
flex: 0 0 auto;
|
||||
text-align: right;
|
||||
background-color: var(--background-colour-translucent-8);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid var(--background-colour-translucent-6);
|
||||
border-radius: 5px;
|
||||
pointer-events: initial;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
.usercard__stat--wide {
|
||||
min-width: 140px;
|
||||
}
|
||||
.usercard__stat[href] {
|
||||
cursor: pointer;
|
||||
transition: border-color .2s;
|
||||
}
|
||||
.usercard__stat[href]:hover,
|
||||
.usercard__stat[href]:focus {
|
||||
border-bottom: 2px solid var(--accent-colour);
|
||||
padding-bottom: 3px;
|
||||
border-color: var(--accent-colour);
|
||||
}
|
||||
.usercard__stat__name {
|
||||
display: block;
|
||||
font-size: .9em;
|
||||
line-height: 1.5em;
|
||||
font-variant: small-caps;
|
||||
cursor: inherit;
|
||||
}
|
||||
.usercard__stat__value {
|
||||
font-size: 1.3em;
|
||||
cursor: inherit;
|
||||
display: block;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.5em;
|
||||
cursor: inherit;
|
||||
}
|
||||
|
||||
.usercard__actions {
|
||||
flex: 0 0 auto;
|
||||
display: flex;
|
||||
height: 38px;
|
||||
}
|
||||
.usercard__action {
|
||||
flex: 1 1 auto;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
font-size: 1.5em;
|
||||
transition: background-color .2s;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
.usercard__action:hover,
|
||||
.usercard__action:focus { background-color: rgba(255, 255, 255, .2); }
|
||||
.usercard__action:active { background-color: rgba(255, 255, 255, .1); }
|
||||
|
||||
@media (max-width: 800px) {
|
||||
.usercard__header__details {
|
||||
text-align: center;
|
||||
.usercard {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.usercard__details {
|
||||
/* i swear to god man */
|
||||
width: calc(100% - 66px);
|
||||
}
|
||||
|
||||
.usercard__stats {
|
||||
width: 100%;
|
||||
justify-content: flex-start;
|
||||
padding: 0 8px 4px;
|
||||
}
|
||||
|
||||
.usercard__stat,
|
||||
.usercard__stat--wide {
|
||||
min-width: auto;
|
||||
flex-direction: row-reverse;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.usercard__stat--wide {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.usercard__stat__name,
|
||||
.usercard__stat__value {
|
||||
display: inline-block;
|
||||
font-size: .9em;
|
||||
line-height: 1.2em;
|
||||
font-variant: initial;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
.userlist {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
padding: 2px;
|
||||
.userlist--search {
|
||||
margin: 0 2px;
|
||||
}
|
||||
.userlist__item {
|
||||
margin: 2px;
|
||||
width: 300px;
|
||||
display: flex;
|
||||
margin: 2px 0;
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.userlist__empty {
|
||||
text-align: center;
|
||||
|
@ -63,4 +59,4 @@
|
|||
.userlist__select:not(:first-child) {
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
<div class="container search__container">
|
||||
{{ container_title('<i class="fas fa-users fa-fw"></i> Users (%s)'|format(users|length|number_format)) }}
|
||||
|
||||
<div class="userlist">
|
||||
<div class="userlist userlist--search">
|
||||
{% for user in users %}
|
||||
<div class="userlist__item">
|
||||
{{ user_card(user) }}
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
{% extends 'profile/master.twig' %}
|
||||
{% from 'macros.twig' import pagination %}
|
||||
{% from 'user/macros.twig' import user_card %}
|
||||
|
||||
{% block content %}
|
||||
<div class="profile">
|
||||
{% include 'profile/_layout/header.twig' %}
|
||||
|
||||
<div class="profile__relations">
|
||||
{% for user in profile_users %}
|
||||
<div class="profile__relations__user">
|
||||
{{ user_card(attribute(user, relation_prop), profile_viewer) }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% if profile_relation_pagination.pages > 1 %}
|
||||
<div class="container profile__pagination">
|
||||
{{ pagination(profile_relation_pagination, canonical_url) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,187 +1,65 @@
|
|||
{% macro user_card(user, current_user) %}
|
||||
{% if user.getId is defined %}
|
||||
{% from _self import user_card_new %}
|
||||
{{ user_card_new(user, current_user) }}
|
||||
{% else %}
|
||||
{% from _self import user_card_old %}
|
||||
{{ user_card_old(user) }}
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro user_card_new(user, current_user) %}
|
||||
{% from 'macros.twig' import avatar %}
|
||||
|
||||
<div class="usercard" style="--accent-colour: {{ user.colour }}">
|
||||
<div class="usercard__background"></div>
|
||||
|
||||
<div class="usercard__header">
|
||||
<a class="usercard__header__link" href="{{ url('user-profile', {'user': user.id}) }}"></a>
|
||||
|
||||
<div class="usercard__header__container">
|
||||
<div class="usercard__header__avatar">
|
||||
{{ avatar(user.id, 60, user.username) }}
|
||||
</div>
|
||||
|
||||
<div class="usercard__header__details">
|
||||
<div class="usercard__header__username">
|
||||
{{ user.username }}
|
||||
</div>
|
||||
|
||||
{% if user.hasTitle %}
|
||||
<div class="usercard__header__title">
|
||||
{{ user.title }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.hasCountry %}
|
||||
<div class="usercard__header__country">
|
||||
<div class="flag flag--{{ user.country|lower }}"></div>
|
||||
<div class="usercard__header__country__name">
|
||||
{{ user.countryName }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="usercard__container">
|
||||
<div class="usercard__stats">
|
||||
{% if user.forumTopicCount > 0 %}
|
||||
<a class="usercard__stat" href="{{ url('user-profile-forum-topics', {'user': user.id}) }}">
|
||||
<div class="usercard__stat__name">
|
||||
Topics
|
||||
</div>
|
||||
<div class="usercard__stat__value">
|
||||
{{ user.forumTopicCount|number_format }}
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if user.forumPostCount > 0 %}
|
||||
<a class="usercard__stat" href="{{ url('user-profile-forum-posts', {'user': user.id}) }}">
|
||||
<div class="usercard__stat__name">
|
||||
Posts
|
||||
</div>
|
||||
<div class="usercard__stat__value">
|
||||
{{ user.forumPostCount|number_format }}
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="usercard__dates">
|
||||
<div class="usercard__date" title="{{ user.createdTime|date('r') }}">
|
||||
Joined <time datetime="{{ user.createdTime|date('c') }}">{{ user.createdTime|time_format }}</time>
|
||||
</div>
|
||||
|
||||
{% if user.hasBeenActive %}
|
||||
<div class="usercard__date" title="{{ user.activeTime|date('r') }}">
|
||||
Last seen <time datetime="{{ user.activeTime|date('c') }}">{{ user.activeTime|time_format }}</time>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="usercard__date">
|
||||
Never logged in
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="usercard__actions">
|
||||
<a class="usercard__action" href="{{ url('user-profile', {'user': user.id}) }}" title="View Profile">
|
||||
<i class="fas fa-user"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro user_card_old(user) %}
|
||||
{% macro user_card(user) %}
|
||||
{% from 'macros.twig' import avatar %}
|
||||
|
||||
<div class="usercard"{% if user.user_colour is defined %} style="{{ user.user_colour|html_colour('--accent-colour') }}"{% endif %}>
|
||||
<div class="usercard__background"></div>
|
||||
<a class="usercard__link" href="{{ url('user-profile', {'user': user.user_id}) }}" title="Visit {{ user.username }}'{{ user.username|last|lower == 's' ? '' : 's' }} profile"></a>
|
||||
|
||||
<div class="usercard__header">
|
||||
<a class="usercard__header__link" href="{{ url('user-profile', {'user': user.user_id}) }}"></a>
|
||||
<div class="usercard__avatar">
|
||||
{{ avatar(user.user_id, 50, user.username) }}
|
||||
</div>
|
||||
|
||||
<div class="usercard__header__container">
|
||||
<div class="usercard__header__avatar">
|
||||
{{ avatar(user.user_id, 60, user.username) }}
|
||||
<div class="usercard__details">
|
||||
<div class="usercard__details_inner">
|
||||
<div class="usercard__details__username"{% if user.user_colour is defined %} style="{{ user.user_colour|html_colour }}"{% endif %}>
|
||||
{{ user.username }}
|
||||
</div>
|
||||
|
||||
<div class="usercard__header__details">
|
||||
<div class="usercard__header__username"{% if user.user_colour is defined %} style="{{ user.user_colour|html_colour }}"{% endif %}>
|
||||
{{ user.username }}
|
||||
{% if user.user_title is defined and user.user_title is not empty %}
|
||||
<div class="usercard__details__title">
|
||||
{{ user.user_title }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_title is defined and user.user_title is not empty %}
|
||||
<div class="usercard__header__title">
|
||||
{{ user.user_title }}
|
||||
{% if user.user_country|default('XX') != 'XX' %}
|
||||
<div class="usercard__details__country">
|
||||
<div class="flag flag--{{ user.user_country|lower }}"></div>
|
||||
<div class="usercard__details__country__name">
|
||||
{{ user.user_country|country_name }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_country|default('XX') != 'XX' %}
|
||||
<div class="usercard__header__country">
|
||||
<div class="flag flag--{{ user.user_country|lower }}"></div>
|
||||
<div class="usercard__header__country__name">
|
||||
{{ user.user_country|country_name }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="usercard__container">
|
||||
<div class="usercard__stats">
|
||||
{% if user.user_count_topics|default(0) > 0 %}
|
||||
<a class="usercard__stat" href="{{ url('user-profile-forum-topics', {'user': user.user_id}) }}">
|
||||
<div class="usercard__stat__name">
|
||||
Topics
|
||||
</div>
|
||||
<div class="usercard__stat__value">
|
||||
{{ user.user_count_topics|number_format }}
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_count_posts|default(0) > 0 %}
|
||||
<a class="usercard__stat" href="{{ url('user-profile-forum-posts', {'user': user.user_id}) }}">
|
||||
<div class="usercard__stat__name">
|
||||
Posts
|
||||
</div>
|
||||
<div class="usercard__stat__value">
|
||||
{{ user.user_count_posts|number_format }}
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="usercard__dates">
|
||||
{% if user.user_created is defined %}
|
||||
<div class="usercard__date" title="{{ user.user_created|date('r') }}">
|
||||
Joined <time datetime="{{ user.user_created|date('c') }}">{{ user.user_created|time_format }}</time>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_active is defined %}
|
||||
{% if user.user_active is null %}
|
||||
<div class="usercard__date">
|
||||
Never logged in
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="usercard__date" title="{{ user.user_active|date('r') }}">
|
||||
Last seen <time datetime="{{ user.user_active|date('c') }}">{{ user.user_active|time_format }}</time>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="usercard__actions">
|
||||
<a class="usercard__action" href="{{ url('user-profile', {'user': user.user_id}) }}" title="View Profile">
|
||||
<i class="fas fa-user"></i>
|
||||
<div class="usercard__stats">
|
||||
{% if user.user_count_topics|default(0) > 0 %}
|
||||
<a class="usercard__stat" href="{{ url('user-profile-forum-topics', {'user': user.user_id}) }}">
|
||||
<div class="usercard__stat__name">Topics</div>
|
||||
<div class="usercard__stat__value">{{ user.user_count_topics|number_format }}</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_count_posts|default(0) > 0 %}
|
||||
<a class="usercard__stat" href="{{ url('user-profile-forum-posts', {'user': user.user_id}) }}">
|
||||
<div class="usercard__stat__name">Posts</div>
|
||||
<div class="usercard__stat__value">{{ user.user_count_posts|number_format }}</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_active is defined and user.user_active is not null %}
|
||||
<div class="usercard__stat usercard__stat--wide">
|
||||
<div class="usercard__stat__name">Last seen</div>
|
||||
<div class="usercard__stat__value"><time datetime="{{ user.user_active|date('c') }}">{{ user.user_active|time_format }}</time></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if user.user_created is defined %}
|
||||
<div class="usercard__stat usercard__stat--wide">
|
||||
<div class="usercard__stat__name">Joined</div>
|
||||
<div class="usercard__stat__value"><time datetime="{{ user.user_created|date('c') }}">{{ user.user_created|time_format }}</time></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
|
Loading…
Reference in a new issue