Add user group badges

This commit is contained in:
Toby Zerner 2015-05-06 11:25:19 +09:30
parent 447cf1bcb1
commit 7906bbd986
11 changed files with 78 additions and 43 deletions

View File

@ -25,7 +25,7 @@ export default class PostHeaderUser extends Component {
avatar(user), avatar(user),
username(user) username(user)
]), ]),
m('ul.badges', listItems(user.badges().toArray())) m('ul.badges', listItems(user.badges().toArray().reverse()))
] : [ ] : [
avatar(), avatar(),
username() username()

View File

@ -3,6 +3,9 @@ import Model from 'flarum/model';
class Group extends Model {} class Group extends Model {}
Group.prototype.id = Model.prop('id'); Group.prototype.id = Model.prop('id');
Group.prototype.name = Model.prop('name'); Group.prototype.nameSingular = Model.prop('nameSingular');
Group.prototype.namePlural = Model.prop('namePlural');
Group.prototype.color = Model.prop('color');
Group.prototype.icon = Model.prop('icon');
export default Group; export default Group;

View File

@ -2,6 +2,7 @@ import Model from 'flarum/model'
import stringToColor from 'flarum/utils/string-to-color'; import stringToColor from 'flarum/utils/string-to-color';
import ItemList from 'flarum/utils/item-list'; import ItemList from 'flarum/utils/item-list';
import computed from 'flarum/utils/computed'; import computed from 'flarum/utils/computed';
import Badge from 'flarum/components/badge';
class User extends Model {} class User extends Model {}
@ -48,6 +49,22 @@ User.prototype.color = computed('username', 'avatarUrl', 'avatarColor', function
} }
}); });
User.prototype.badges = () => new ItemList(); User.prototype.badges = function() {
var items = new ItemList();
this.groups().forEach(group => {
if (group.id() != 3) {
items.add('group'+group.id(),
Badge.component({
label: group.nameSingular(),
icon: group.icon(),
style: {backgroundColor: group.color()}
})
);
}
});
return items;
}
export default User; export default User;

View File

@ -191,7 +191,7 @@
font-size: 15px; font-size: 15px;
} }
& .badges { & h3 .badges {
text-align: right; text-align: right;
white-space: nowrap; white-space: nowrap;
@ -337,7 +337,7 @@
.post-user { .post-user {
position: relative; position: relative;
& .badges { & h3 .badges {
position: absolute; position: absolute;
top: -7px; top: -7px;
left: 5px; left: 5px;
@ -381,7 +381,7 @@
} }
} }
.post-user { .post-user {
& .badges { & h3 .badges {
float: left; float: left;
margin-left: -85px; margin-left: -85px;
margin-top: -3px; margin-top: -3px;

View File

@ -12,13 +12,13 @@
width: @size; width: @size;
height: @size; height: @size;
border-radius: @size / 2; border-radius: @size / 2;
line-height: @size - 4px; line-height: @size - 5px;
&, & .fa { &, & .fa {
font-size: 0.6 * @size; font-size: 0.56 * @size;
} }
} }
.badge { .badge {
.badge-size(23px); .badge-size(25px);
border: 2px solid @fl-body-bg; border: 2px solid @fl-body-bg;
background: @fl-body-muted-color; background: @fl-body-muted-color;
color: #fff; color: #fff;

View File

@ -3,30 +3,31 @@
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
class CreateGroupsTable extends Migration { class CreateGroupsTable extends Migration
{
/** /**
* Run the migrations. * Run the migrations.
* *
* @return void * @return void
*/ */
public function up() public function up()
{ {
Schema::create('groups', function(Blueprint $table) Schema::create('groups', function (Blueprint $table) {
{ $table->increments('id');
$table->increments('id'); $table->string('name_singular');
$table->string('name'); $table->string('name_plural');
}); $table->string('color')->nullable();
} $table->string('icon')->nullable();
});
/** }
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('groups');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('groups');
}
} }

View File

@ -28,6 +28,7 @@ class ShowAction extends SerializeResourceAction
*/ */
public static $include = [ public static $include = [
'user' => true, 'user' => true,
'user.groups' => true,
'editUser' => true, 'editUser' => true,
'hideUser' => true, 'hideUser' => true,
'discussion' => false 'discussion' => false

View File

@ -18,8 +18,11 @@ class GroupSerializer extends BaseSerializer
protected function attributes($group) protected function attributes($group)
{ {
$attributes = [ $attributes = [
'id' => (int) $group->id, 'id' => (int) $group->id,
'name' => $group->name 'nameSingular' => $group->name_singular,
'namePlural' => $group->name_plural,
'color' => $group->color,
'icon' => $group->icon,
]; ];
return $this->extendAttributes($group, $attributes); return $this->extendAttributes($group, $attributes);

View File

@ -24,4 +24,9 @@ class UserBasicSerializer extends BaseSerializer
return $this->extendAttributes($user, $attributes); return $this->extendAttributes($user, $attributes);
} }
protected function groups()
{
return $this->hasMany('Flarum\Api\Serializers\GroupSerializer');
}
} }

View File

@ -56,9 +56,4 @@ class UserSerializer extends UserBasicSerializer
return $this->extendAttributes($user, $attributes); return $this->extendAttributes($user, $attributes);
} }
protected function groups()
{
return $this->hasMany('Flarum\Api\Serializers\GroupSerializer');
}
} }

View File

@ -15,9 +15,19 @@ class GroupsTableSeeder extends Seeder {
Group::unguard(); Group::unguard();
Group::truncate(); Group::truncate();
$groups = ['Administrator', 'Guest', 'Member', 'Moderator', 'Staff']; $groups = [
['Admin', 'Admins', '#B72A2A', 'wrench'],
['Guest', 'Guests', null, null],
['Member', 'Members', null, null],
['Mod', 'Mods', '#80349E', 'bolt']
];
foreach ($groups as $group) { foreach ($groups as $group) {
Group::create(['name' => $group]); Group::create([
'name_singular' => $group[0],
'name_plural' => $group[1],
'color' => $group[2],
'icon' => $group[3]
]);
} }
} }