mirror of
https://github.com/Poniverse/Pony.fm.git
synced 2025-02-16 18:14:23 +01:00
#1: Moved the artists list into its own directive + visual cleanup of search.
This commit is contained in:
parent
864112b1f2
commit
7a7f4ee02a
11 changed files with 85 additions and 47 deletions
|
@ -195,18 +195,7 @@ class ArtistsController extends ApiControllerBase
|
||||||
$users = [];
|
$users = [];
|
||||||
|
|
||||||
foreach ($query->get() as $user) {
|
foreach ($query->get() as $user) {
|
||||||
$users[] = [
|
$users[] = User::mapPublicUserSummary($user);
|
||||||
'id' => $user->id,
|
|
||||||
'name' => $user->display_name,
|
|
||||||
'slug' => $user->slug,
|
|
||||||
'url' => $user->url,
|
|
||||||
'is_archived' => $user->is_archived,
|
|
||||||
'avatars' => [
|
|
||||||
'small' => $user->getAvatarUrl(Image::SMALL),
|
|
||||||
'normal' => $user->getAvatarUrl(Image::NORMAL)
|
|
||||||
],
|
|
||||||
'created_at' => $user->created_at
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Response::json(["artists" => $users, "current_page" => $page, "total_pages" => ceil($count / $perPage)],
|
return Response::json(["artists" => $users, "current_page" => $page, "total_pages" => ceil($count / $perPage)],
|
||||||
|
|
|
@ -30,9 +30,7 @@ class SearchController extends ApiControllerBase
|
||||||
{
|
{
|
||||||
public function getSearch(Search $search)
|
public function getSearch(Search $search)
|
||||||
{
|
{
|
||||||
$input = Input::all();
|
$results = $search->searchAllContent(Input::query('query'));
|
||||||
|
|
||||||
$results = $search->searchAllContent($input['query']);
|
|
||||||
|
|
||||||
return Response::json([
|
return Response::json([
|
||||||
'results' => $results,
|
'results' => $results,
|
||||||
|
|
|
@ -117,7 +117,7 @@ class Search {
|
||||||
$tracks = $this->transformTracks($results['responses'][0]['hits']['hits']);
|
$tracks = $this->transformTracks($results['responses'][0]['hits']['hits']);
|
||||||
$albums = $this->transformAlbums($results['responses'][1]['hits']['hits']);
|
$albums = $this->transformAlbums($results['responses'][1]['hits']['hits']);
|
||||||
$playlists = $this->transformPlaylists($results['responses'][2]['hits']['hits']);
|
$playlists = $this->transformPlaylists($results['responses'][2]['hits']['hits']);
|
||||||
$users = $this->transformToEloquent(User::class, $results['responses'][3]['hits']['hits']);
|
$users = $this->transformUsers($results['responses'][3]['hits']['hits']);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'tracks' => $tracks,
|
'tracks' => $tracks,
|
||||||
|
@ -137,20 +137,28 @@ class Search {
|
||||||
|
|
||||||
protected function transformAlbums(array $searchHits) {
|
protected function transformAlbums(array $searchHits) {
|
||||||
$albums = $this->transformToEloquent(Album::class, $searchHits);
|
$albums = $this->transformToEloquent(Album::class, $searchHits);
|
||||||
$albums = $albums->map(function (Album $track) {
|
$albums = $albums->map(function (Album $album) {
|
||||||
return Album::mapPublicAlbumSummary($track);
|
return Album::mapPublicAlbumSummary($album);
|
||||||
});
|
});
|
||||||
return $albums;
|
return $albums;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function transformPlaylists(array $searchHits) {
|
protected function transformPlaylists(array $searchHits) {
|
||||||
$playlists = $this->transformToEloquent(Playlist::class, $searchHits);
|
$playlists = $this->transformToEloquent(Playlist::class, $searchHits);
|
||||||
$playlists = $playlists->map(function (Playlist $track) {
|
$playlists = $playlists->map(function (Playlist $playlist) {
|
||||||
return Playlist::mapPublicPlaylistSummary($track);
|
return Playlist::mapPublicPlaylistSummary($playlist);
|
||||||
});
|
});
|
||||||
return $playlists;
|
return $playlists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function transformUsers(array $searchHits) {
|
||||||
|
$users = $this->transformToEloquent(User::class, $searchHits);
|
||||||
|
$users = $users->map(function (User $user) {
|
||||||
|
return User::mapPublicUserSummary($user);
|
||||||
|
});
|
||||||
|
return $users;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transforms the given Elasticsearch results into a collection of corresponding
|
* Transforms the given Elasticsearch results into a collection of corresponding
|
||||||
* Eloquent models.
|
* Eloquent models.
|
||||||
|
|
|
@ -251,6 +251,21 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function mapPublicUserSummary(User $user) {
|
||||||
|
return [
|
||||||
|
'id' => $user->id,
|
||||||
|
'name' => $user->display_name,
|
||||||
|
'slug' => $user->slug,
|
||||||
|
'url' => $user->url,
|
||||||
|
'is_archived' => $user->is_archived,
|
||||||
|
'avatars' => [
|
||||||
|
'small' => $user->getAvatarUrl(Image::SMALL),
|
||||||
|
'normal' => $user->getAvatarUrl(Image::NORMAL)
|
||||||
|
],
|
||||||
|
'created_at' => $user->created_at
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns this model in Elasticsearch-friendly form. The array returned by
|
* Returns this model in Elasticsearch-friendly form. The array returned by
|
||||||
* this method should match the current mapping for this model's ES type.
|
* this method should match the current mapping for this model's ES type.
|
||||||
|
|
|
@ -1,21 +1,3 @@
|
||||||
<div class="stretch-to-bottom">
|
<div class="stretch-to-bottom">
|
||||||
<ul class="artist-listing">
|
<pfm-users-list users="artists"></pfm-users-list>
|
||||||
<li class="artist" ng-class="{'x-archived': artist.is_archived}" ng-repeat="artist in artists" bindonce>
|
|
||||||
<a href="{{artist.url}}">
|
|
||||||
<img class="image" pfm-src-loader="artist.avatars.small" pfm-src-size="small" />
|
|
||||||
<span class="info">
|
|
||||||
<span class="title" bo-text="artist.name"></span>
|
|
||||||
<span ng-hide="artist.is_archived" class="published">
|
|
||||||
joined <span bo-text="artist.created_at.date | momentFromNow"></span>
|
|
||||||
</span>
|
|
||||||
<span ng-show="artist.is_archived" class="published">
|
|
||||||
archived artist
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li ng-show="!artists.length" class="empty">
|
|
||||||
No artists found...
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -16,9 +16,7 @@
|
||||||
|
|
||||||
<div class="-column2">
|
<div class="-column2">
|
||||||
<h3 class="-section-header">Matching users</h3>
|
<h3 class="-section-header">Matching users</h3>
|
||||||
<ol>
|
<pfm-users-list users="users"></pfm-users-list>
|
||||||
<li bindonce ng-repeat="user in users track by user.id" bo-text="user.display_name"></li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<h3 class="-section-header">Matching albums</h3>
|
<h3 class="-section-header">Matching albums</h3>
|
||||||
<pfm-albums-list albums="albums"></pfm-albums-list>
|
<pfm-albums-list albums="albums"></pfm-albums-list>
|
||||||
|
|
19
public/templates/directives/users-list.html
Normal file
19
public/templates/directives/users-list.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<ul class="users-listing">
|
||||||
|
<li class="artist" ng-class="{'x-archived': user.is_archived}" ng-repeat="user in users track by user.id" bindonce>
|
||||||
|
<a bo-href="user.url">
|
||||||
|
<img class="image" pfm-src-loader="user.avatars.small" pfm-src-size="small" />
|
||||||
|
<span class="info">
|
||||||
|
<span class="title" bo-text="user.name"></span>
|
||||||
|
<span ng-hide="user.is_archived" class="published">
|
||||||
|
joined <span bo-text="user.created_at.date | momentFromNow"></span>
|
||||||
|
</span>
|
||||||
|
<span ng-show="user.is_archived" class="published">
|
||||||
|
archived artist
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li ng-show="!users.length" class="empty">
|
||||||
|
No users found…
|
||||||
|
</li>
|
||||||
|
</ul>
|
|
@ -59,5 +59,5 @@ angular.module('ponyfm').directive 'pfmSearch', () ->
|
||||||
|
|
||||||
for user in results.users
|
for user in results.users
|
||||||
$scope.users.push(user)
|
$scope.users.push(user)
|
||||||
, 200)
|
, 300)
|
||||||
]
|
]
|
||||||
|
|
29
resources/assets/scripts/app/directives/users-list.coffee
Normal file
29
resources/assets/scripts/app/directives/users-list.coffee
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# Pony.fm - A community for pony fan music.
|
||||||
|
# Copyright (C) 2016 Peter Deltchev
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
angular.module('ponyfm').directive 'pfmUsersList', () ->
|
||||||
|
restrict: 'E'
|
||||||
|
replace: true
|
||||||
|
templateUrl: '/templates/directives/users-list.html'
|
||||||
|
scope:
|
||||||
|
users: '=users',
|
||||||
|
class: '@class'
|
||||||
|
|
||||||
|
controller: [
|
||||||
|
'$scope', 'auth'
|
||||||
|
($scope, auth) ->
|
||||||
|
$scope.auth = auth.data
|
||||||
|
]
|
6
resources/assets/styles/content.less
vendored
6
resources/assets/styles/content.less
vendored
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
@media (max-width: 1300px) and (min-width: 720px) {
|
@media (max-width: 1300px) and (min-width: 720px) {
|
||||||
html {
|
html {
|
||||||
.albums-listing, .playlists-listing, .artist-listing {
|
.albums-listing, .playlists-listing, .users-listing {
|
||||||
&.two-columns li {
|
&.two-columns li {
|
||||||
width: auto;
|
width: auto;
|
||||||
float: none;
|
float: none;
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
@media (max-width: 720px) {
|
@media (max-width: 720px) {
|
||||||
html {
|
html {
|
||||||
.albums-listing, .playlists-listing, .artist-listing {
|
.albums-listing, .playlists-listing, .users-listing {
|
||||||
&.two-columns li {
|
&.two-columns li {
|
||||||
width: auto;
|
width: auto;
|
||||||
float: none;
|
float: none;
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.albums-listing, .playlists-listing, .artist-listing {
|
.albums-listing, .playlists-listing, .users-listing {
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
2
resources/assets/styles/search.less
vendored
2
resources/assets/styles/search.less
vendored
|
@ -66,7 +66,7 @@ input.search-input {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.albums-listing, .playlists-listing {
|
.albums-listing, .playlists-listing, .users-listing {
|
||||||
li {
|
li {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue