mirror of https://github.com/pixelfed/pixelfed.git
Update legacy components to properly handle follow/unfollowing
This commit is contained in:
parent
87dfc55b43
commit
60fbf0e7d5
|
@ -484,8 +484,6 @@
|
||||||
size="sm"
|
size="sm"
|
||||||
body-class="list-group-flush p-0 rounded">
|
body-class="list-group-flush p-0 rounded">
|
||||||
<div class="list-group text-center">
|
<div class="list-group text-center">
|
||||||
<!-- <div v-if="user && user.id != status.account.id && relationship && relationship.following" class="list-group-item rounded cursor-pointer font-weight-bold text-danger" @click="ctxMenuUnfollow()">Unfollow</div>
|
|
||||||
<div v-if="user && user.id != status.account.id && relationship && !relationship.following" class="list-group-item rounded cursor-pointer font-weight-bold text-primary" @click="ctxMenuFollow()">Follow</div> -->
|
|
||||||
<div v-if="status && status.local == true" class="list-group-item rounded cursor-pointer" @click="showEmbedPostModal()">Embed</div>
|
<div v-if="status && status.local == true" class="list-group-item rounded cursor-pointer" @click="showEmbedPostModal()">Embed</div>
|
||||||
<div class="list-group-item rounded cursor-pointer" @click="ctxMenuCopyLink()">Copy Link</div>
|
<div class="list-group-item rounded cursor-pointer" @click="ctxMenuCopyLink()">Copy Link</div>
|
||||||
<div v-if="status && user.id == status.account.id" class="list-group-item rounded cursor-pointer" @click="toggleCommentVisibility">{{ showComments ? 'Disable' : 'Enable'}} Comments</div>
|
<div v-if="status && user.id == status.account.id" class="list-group-item rounded cursor-pointer" @click="toggleCommentVisibility">{{ showComments ? 'Disable' : 'Enable'}} Comments</div>
|
||||||
|
@ -1605,34 +1603,6 @@ export default {
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
|
||||||
ctxMenuFollow() {
|
|
||||||
let id = this.status.account.id;
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
let username = this.status.account.acct;
|
|
||||||
this.relationship.following = true;
|
|
||||||
this.$refs.ctxModal.hide();
|
|
||||||
setTimeout(function() {
|
|
||||||
swal('Follow successful!', 'You are now following ' + username, 'success');
|
|
||||||
}, 500);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
ctxMenuUnfollow() {
|
|
||||||
let id = this.status.account.id;
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
let username = this.status.account.acct;
|
|
||||||
this.relationship.following = false;
|
|
||||||
this.$refs.ctxModal.hide();
|
|
||||||
setTimeout(function() {
|
|
||||||
swal('Unfollow successful!', 'You are no longer following ' + username, 'success');
|
|
||||||
}, 500);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
archivePost(status) {
|
archivePost(status) {
|
||||||
if(window.confirm('Are you sure you want to archive this post?') == false) {
|
if(window.confirm('Are you sure you want to archive this post?') == false) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -342,7 +342,7 @@
|
||||||
<div class="list-group-item border-0 py-1 mb-1" v-for="(user, index) in following" :key="'following_'+index">
|
<div class="list-group-item border-0 py-1 mb-1" v-for="(user, index) in following" :key="'following_'+index">
|
||||||
<div class="media">
|
<div class="media">
|
||||||
<a :href="profileUrlRedirect(user)">
|
<a :href="profileUrlRedirect(user)">
|
||||||
<img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + '’s avatar'" width="30px" loading="lazy" onerror="this.src='/storage/avatars/default.jpg?v=0';this.onerror=null">
|
<img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + '’s avatar'" width="30px" loading="lazy" onerror="this.src='/storage/avatars/default.jpg?v=0';this.onerror=null;" v-once>
|
||||||
</a>
|
</a>
|
||||||
<div class="media-body text-truncate">
|
<div class="media-body text-truncate">
|
||||||
<p class="mb-0" style="font-size: 14px">
|
<p class="mb-0" style="font-size: 14px">
|
||||||
|
@ -397,7 +397,7 @@
|
||||||
<div class="list-group-item border-0 py-1 mb-1" v-for="(user, index) in followers" :key="'follower_'+index">
|
<div class="list-group-item border-0 py-1 mb-1" v-for="(user, index) in followers" :key="'follower_'+index">
|
||||||
<div class="media mb-0">
|
<div class="media mb-0">
|
||||||
<a :href="profileUrlRedirect(user)">
|
<a :href="profileUrlRedirect(user)">
|
||||||
<img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + '’s avatar'" width="30px" height="30px" loading="lazy" onerror="this.src='/storage/avatars/default.jpg?v=0';this.onerror=null">
|
<img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + '’s avatar'" width="30px" height="30px" loading="lazy" onerror="this.src='/storage/avatars/default.jpg?v=0';this.onerror=null;" v-once>
|
||||||
</a>
|
</a>
|
||||||
<div class="media-body mb-0">
|
<div class="media-body mb-0">
|
||||||
<p class="mb-0" style="font-size: 14px">
|
<p class="mb-0" style="font-size: 14px">
|
||||||
|
@ -1049,19 +1049,22 @@
|
||||||
if($('body').hasClass('loggedIn') == false) {
|
if($('body').hasClass('loggedIn') == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
axios.post('/i/follow', {
|
this.$refs.visitorContextMenu.hide();
|
||||||
item: this.profileId
|
const curState = this.relationship.following;
|
||||||
}).then(res => {
|
const apiUrl = curState ?
|
||||||
this.$refs.visitorContextMenu.hide();
|
'/api/v1/accounts/' + this.profileId + '/unfollow' :
|
||||||
if(this.relationship.following) {
|
'/api/v1/accounts/' + this.profileId + '/follow';
|
||||||
|
axios.post(apiUrl)
|
||||||
|
.then(res => {
|
||||||
|
if(curState) {
|
||||||
this.profile.followers_count--;
|
this.profile.followers_count--;
|
||||||
if(this.profile.locked == true) {
|
if(this.profile.locked) {
|
||||||
window.location.href = '/';
|
location.reload();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.profile.followers_count++;
|
this.profile.followers_count++;
|
||||||
}
|
}
|
||||||
this.relationship.following = !this.relationship.following;
|
this.relationship = res.data;
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
if(err.response.data.message) {
|
if(err.response.data.message) {
|
||||||
swal('Error', err.response.data.message, 'error');
|
swal('Error', err.response.data.message, 'error');
|
||||||
|
@ -1218,9 +1221,11 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
followModalAction(id, index, type = 'following') {
|
followModalAction(id, index, type = 'following') {
|
||||||
axios.post('/i/follow', {
|
const apiUrl = type === 'following' ?
|
||||||
item: id
|
'/api/v1/accounts/' + id + '/unfollow' :
|
||||||
}).then(res => {
|
'/api/v1/accounts/' + id + '/follow';
|
||||||
|
axios.post(apiUrl)
|
||||||
|
.then(res => {
|
||||||
if(type == 'following') {
|
if(type == 'following') {
|
||||||
this.following.splice(index, 1);
|
this.following.splice(index, 1);
|
||||||
this.profile.following_count--;
|
this.profile.following_count--;
|
||||||
|
|
|
@ -379,26 +379,6 @@ export default {
|
||||||
this.searchContext(this.analysis);
|
this.searchContext(this.analysis);
|
||||||
},
|
},
|
||||||
|
|
||||||
followProfile(profile, index) {
|
|
||||||
this.loading = true;
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: profile.entity.id
|
|
||||||
}).then(res => {
|
|
||||||
if(profile.entity.local == true) {
|
|
||||||
this.fetchSearchResults();
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
this.loading = false;
|
|
||||||
this.results.profiles[index].entity.follow_request = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
if(err.response.data.message) {
|
|
||||||
swal('Error', err.response.data.message, 'error');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
searchLexer() {
|
searchLexer() {
|
||||||
let q = this.query;
|
let q = this.query;
|
||||||
|
|
||||||
|
|
|
@ -283,21 +283,21 @@
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer bg-transparent border-0 pt-0 pb-1">
|
<div class="card-footer bg-transparent border-0 pt-0 pb-1">
|
||||||
<div class="d-flex justify-content-between text-center">
|
<div class="d-flex justify-content-between text-center">
|
||||||
<span class="cursor-pointer" @click="redirect(profile.url)">
|
<span class="cursor-pointer" @click="redirect(profile.url)">
|
||||||
<p class="mb-0 font-weight-bold">{{formatCount(profile.statuses_count)}}</p>
|
<p class="mb-0 font-weight-bold">{{formatCount(profile.statuses_count)}}</p>
|
||||||
<p class="mb-0 small text-muted">Posts</p>
|
<p class="mb-0 small text-muted">Posts</p>
|
||||||
</span>
|
</span>
|
||||||
<span class="cursor-pointer" @click="redirect(profile.url+'?md=followers')">
|
<span class="cursor-pointer" @click="redirect(profile.url+'?md=followers')">
|
||||||
<p class="mb-0 font-weight-bold">{{formatCount(profile.followers_count)}}</p>
|
<p class="mb-0 font-weight-bold">{{formatCount(profile.followers_count)}}</p>
|
||||||
<p class="mb-0 small text-muted">Followers</p>
|
<p class="mb-0 small text-muted">Followers</p>
|
||||||
</span>
|
</span>
|
||||||
<span class="cursor-pointer" @click="redirect(profile.url+'?md=following')">
|
<span class="cursor-pointer" @click="redirect(profile.url+'?md=following')">
|
||||||
<p class="mb-0 font-weight-bold">{{formatCount(profile.following_count)}}</p>
|
<p class="mb-0 font-weight-bold">{{formatCount(profile.following_count)}}</p>
|
||||||
<p class="mb-0 small text-muted">Following</p>
|
<p class="mb-0 small text-muted">Following</p>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-show="modes.notify == true && !loading" class="mb-4">
|
<div v-show="modes.notify == true && !loading" class="mb-4">
|
||||||
|
@ -324,7 +324,6 @@
|
||||||
</p>
|
</p>
|
||||||
<p class="mb-0 small text-muted">{{rec.message}}</p>
|
<p class="mb-0 small text-muted">{{rec.message}}</p>
|
||||||
</div>
|
</div>
|
||||||
<a class="font-weight-bold small" href="#" @click.prevent="expRecFollow(rec.id, index)">Follow</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -761,24 +760,6 @@
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
expRecFollow(id, index) {
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(this.config.ab.rec == false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
this.suggestions.splice(index, 1);
|
|
||||||
}).catch(err => {
|
|
||||||
if(err.response.data.message) {
|
|
||||||
swal('Error', err.response.data.message, 'error');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
owner(status) {
|
owner(status) {
|
||||||
return this.profile.id === status.account.id;
|
return this.profile.id === status.account.id;
|
||||||
},
|
},
|
||||||
|
@ -865,34 +846,34 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
commentFocus(status, $event) {
|
commentFocus(status, $event) {
|
||||||
if(status.comments_disabled) {
|
if(status.comments_disabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(this.status && this.status.id == status.id) {
|
// if(this.status && this.status.id == status.id) {
|
||||||
// this.$refs.replyModal.show();
|
// this.$refs.replyModal.show();
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.replies = {};
|
this.replies = {};
|
||||||
this.replyStatus = {};
|
this.replyStatus = {};
|
||||||
this.replyText = '';
|
this.replyText = '';
|
||||||
this.replyId = status.id;
|
this.replyId = status.id;
|
||||||
this.replyStatus = status;
|
this.replyStatus = status;
|
||||||
// this.$refs.replyModal.show();
|
// this.$refs.replyModal.show();
|
||||||
this.fetchStatusComments(status, '');
|
this.fetchStatusComments(status, '');
|
||||||
|
|
||||||
$('nav').hide();
|
$('nav').hide();
|
||||||
$('footer').hide();
|
$('footer').hide();
|
||||||
$('.mobile-footer-spacer').attr('style', 'display:none !important');
|
$('.mobile-footer-spacer').attr('style', 'display:none !important');
|
||||||
$('.mobile-footer').attr('style', 'display:none !important');
|
$('.mobile-footer').attr('style', 'display:none !important');
|
||||||
this.currentLayout = 'comments';
|
this.currentLayout = 'comments';
|
||||||
window.history.pushState({}, '', this.statusUrl(status));
|
window.history.pushState({}, '', this.statusUrl(status));
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
|
||||||
fetchStatusComments(status, card) {
|
fetchStatusComments(status, card) {
|
||||||
let url = '/api/v2/comments/'+status.account.id+'/status/'+status.id;
|
let url = '/api/v2/comments/'+status.account.id+'/status/'+status.id;
|
||||||
axios.get(url)
|
axios.get(url)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
size="sm"
|
size="sm"
|
||||||
body-class="list-group-flush p-0 rounded">
|
body-class="list-group-flush p-0 rounded">
|
||||||
<div class="list-group text-center">
|
<div class="list-group text-center">
|
||||||
<!-- <div v-if="status && status.account.id != profile.id && ctxMenuRelationship && ctxMenuRelationship.following" class="list-group-item rounded cursor-pointer font-weight-bold text-danger" @click="ctxMenuUnfollow()">Unfollow</div>
|
|
||||||
<div v-if="status && status.account.id != profile.id && ctxMenuRelationship && !ctxMenuRelationship.following" class="list-group-item rounded cursor-pointer font-weight-bold text-primary" @click="ctxMenuFollow()">Follow</div> -->
|
|
||||||
<div v-if="status.visibility !== 'archived'" class="list-group-item rounded cursor-pointer" @click="ctxMenuGoToPost()">View Post</div>
|
<div v-if="status.visibility !== 'archived'" class="list-group-item rounded cursor-pointer" @click="ctxMenuGoToPost()">View Post</div>
|
||||||
<div v-if="status.visibility !== 'archived'" class="list-group-item rounded cursor-pointer" @click="ctxMenuGoToProfile()">View Profile</div>
|
<div v-if="status.visibility !== 'archived'" class="list-group-item rounded cursor-pointer" @click="ctxMenuGoToProfile()">View Profile</div>
|
||||||
<!-- <div v-if="status && status.local == true && !status.in_reply_to_id" class="list-group-item rounded cursor-pointer" @click="ctxMenuEmbed()">Embed</div>
|
<!-- <div v-if="status && status.local == true && !status.in_reply_to_id" class="list-group-item rounded cursor-pointer" @click="ctxMenuEmbed()">Embed</div>
|
||||||
|
@ -289,37 +287,6 @@
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
|
||||||
ctxMenuFollow() {
|
|
||||||
let id = this.ctxMenuStatus.account.id;
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
let username = this.ctxMenuStatus.account.acct;
|
|
||||||
this.closeCtxMenu();
|
|
||||||
setTimeout(function() {
|
|
||||||
swal('Follow successful!', 'You are now following ' + username, 'success');
|
|
||||||
}, 500);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
ctxMenuUnfollow() {
|
|
||||||
let id = this.ctxMenuStatus.account.id;
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
let username = this.ctxMenuStatus.account.acct;
|
|
||||||
if(this.scope == 'home') {
|
|
||||||
this.feed = this.feed.filter(s => {
|
|
||||||
return s.account.id != this.ctxMenuStatus.account.id;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.closeCtxMenu();
|
|
||||||
setTimeout(function() {
|
|
||||||
swal('Unfollow successful!', 'You are no longer following ' + username, 'success');
|
|
||||||
}, 500);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
ctxMenuReportPost() {
|
ctxMenuReportPost() {
|
||||||
this.$refs.ctxModal.hide();
|
this.$refs.ctxModal.hide();
|
||||||
this.$refs.ctxReport.show();
|
this.$refs.ctxReport.show();
|
||||||
|
|
|
@ -71,14 +71,7 @@
|
||||||
<a v-if="status.place" class="small text-decoration-none text-muted" :href="'/discover/places/'+status.place.id+'/'+status.place.slug" title="Location" data-toggle="tooltip"><i class="fas fa-map-marked-alt"></i> {{status.place.name}}, {{status.place.country}}</a>
|
<a v-if="status.place" class="small text-decoration-none text-muted" :href="'/discover/places/'+status.place.id+'/'+status.place.slug" title="Location" data-toggle="tooltip"><i class="fas fa-map-marked-alt"></i> {{status.place.name}}, {{status.place.country}}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="canFollow(status)">
|
|
||||||
<span class="px-2"></span>
|
|
||||||
<button class="btn btn-primary btn-sm font-weight-bold py-1 px-3 rounded-lg" @click="follow(status.account.id)"><i class="far fa-user-plus mr-1"></i> Follow</button>
|
|
||||||
</div>
|
|
||||||
<div v-if="status.hasOwnProperty('relationship') && status.relationship.hasOwnProperty('following') && status.relationship.following">
|
|
||||||
<span class="px-2"></span>
|
|
||||||
<button class="btn btn-outline-primary btn-sm font-weight-bold py-1 px-3 rounded-lg" @click="unfollow(status.account.id)"><i class="far fa-user-check mr-1"></i> Following</button>
|
|
||||||
</div>
|
|
||||||
<div class="text-right" style="flex-grow:1;">
|
<div class="text-right" style="flex-grow:1;">
|
||||||
<button class="btn btn-link text-dark py-0" type="button" @click="ctxMenu()">
|
<button class="btn btn-link text-dark py-0" type="button" @click="ctxMenu()">
|
||||||
<span class="fas fa-ellipsis-h text-lighter"></span>
|
<span class="fas fa-ellipsis-h text-lighter"></span>
|
||||||
|
@ -397,52 +390,6 @@
|
||||||
|
|
||||||
statusDeleted(status) {
|
statusDeleted(status) {
|
||||||
this.$emit('status-delete', status);
|
this.$emit('status-delete', status);
|
||||||
},
|
|
||||||
|
|
||||||
canFollow(status) {
|
|
||||||
if(!status.hasOwnProperty('relationship')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!status.hasOwnProperty('account') || !status.account.hasOwnProperty('id')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(status.account.id == this.profile.id) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return !status.relationship.following;
|
|
||||||
},
|
|
||||||
|
|
||||||
follow(id) {
|
|
||||||
event.currentTarget.blur();
|
|
||||||
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
this.status.relationship.following = true;
|
|
||||||
this.$emit('followed', id);
|
|
||||||
}).catch(err => {
|
|
||||||
if(err.response.data.message) {
|
|
||||||
swal('Error', err.response.data.message, 'error');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
unfollow(id) {
|
|
||||||
event.currentTarget.blur();
|
|
||||||
|
|
||||||
axios.post('/i/follow', {
|
|
||||||
item: id
|
|
||||||
}).then(res => {
|
|
||||||
this.status.relationship.following = false;
|
|
||||||
this.$emit('unfollowed', id);
|
|
||||||
}).catch(err => {
|
|
||||||
if(err.response.data.message) {
|
|
||||||
swal('Error', err.response.data.message, 'error');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,121 +0,0 @@
|
||||||
@extends('layouts.app',['title' => $user->username . " on " . config('app.name')])
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
@if (session('error'))
|
|
||||||
<div class="alert alert-danger text-center font-weight-bold mb-0">
|
|
||||||
{{ session('error') }}
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
@include('profile.partial.user-info')
|
|
||||||
|
|
||||||
@if(true === $owner)
|
|
||||||
<div>
|
|
||||||
<ul class="nav nav-topbar d-flex justify-content-center border-0">
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link {{request()->is($user->username) ? 'active': ''}} font-weight-bold text-uppercase" href="{{$user->url()}}">Posts</a>
|
|
||||||
</li>
|
|
||||||
{{-- <li class="nav-item">
|
|
||||||
<a class="nav-link {{request()->is('*/collections') ? 'active': ''}} font-weight-bold text-uppercase" href="{{$user->url()}}/collections">Collections</a>
|
|
||||||
</li> --}}
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link {{request()->is('*/saved') ? 'active':''}} font-weight-bold text-uppercase" href="{{$user->url('/saved')}}">Saved</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<div class="container">
|
|
||||||
@if($owner && request()->is('*/saved'))
|
|
||||||
<div class="col-12">
|
|
||||||
<p class="text-muted font-weight-bold small">{{__('profile.savedWarning')}}</p>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<div class="profile-timeline mt-2 mt-md-4">
|
|
||||||
<div class="row">
|
|
||||||
@if($timeline->count() > 0)
|
|
||||||
@foreach($timeline as $status)
|
|
||||||
<div class="col-4 p-0 p-sm-2 p-md-3">
|
|
||||||
<a class="card info-overlay card-md-border-0" href="{{$status->url()}}">
|
|
||||||
<div class="square {{$status->firstMedia()->filter_class}}">
|
|
||||||
@switch($status->viewType())
|
|
||||||
@case('album')
|
|
||||||
@case('photo:album')
|
|
||||||
<span class="float-right mr-3" style="color:#fff;position:relative;margin-top:10px;z-index: 999999;opacity:0.6;text-shadow: 3px 3px 16px #272634;"><i class="fas fa-images fa-2x"></i></span>
|
|
||||||
@break
|
|
||||||
@case('video')
|
|
||||||
<span class="float-right mr-3" style="color:#fff;position:relative;margin-top:10px;z-index: 999999;opacity:0.6;text-shadow: 3px 3px 16px #272634;"><i class="fas fa-video fa-2x"></i></span>
|
|
||||||
@break
|
|
||||||
@case('video-album')
|
|
||||||
<span class="float-right mr-3" style="color:#fff;position:relative;margin-top:10px;z-index: 999999;opacity:0.6;text-shadow: 3px 3px 16px #272634;"><i class="fas fa-film fa-2x"></i></span>
|
|
||||||
@break
|
|
||||||
@endswitch
|
|
||||||
<div class="square-content" style="background-image: url('{{$status->thumb()}}')">
|
|
||||||
</div>
|
|
||||||
<div class="info-overlay-text">
|
|
||||||
<h5 class="text-white m-auto font-weight-bold">
|
|
||||||
<span>
|
|
||||||
<span class="far fa-heart fa-lg p-2 d-flex-inline"></span>
|
|
||||||
<span class="d-flex-inline">{{App\Util\Lexer\PrettyNumber::convert($status->likes_count)}}</span>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
<span class="far fa-comment fa-lg p-2 d-flex-inline"></span>
|
|
||||||
<span class="d-flex-inline">{{App\Util\Lexer\PrettyNumber::convert($status->comments_count)}}</span>
|
|
||||||
</span>
|
|
||||||
</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pagination-container">
|
|
||||||
<div class="d-flex justify-content-center">
|
|
||||||
{{$timeline->links()}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@else
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body py-5 my-5">
|
|
||||||
<div class="d-flex my-5 py-5 justify-content-center align-items-center">
|
|
||||||
@if($owner && request()->is('*/saved'))
|
|
||||||
<p class="lead font-weight-bold">{{ __('profile.emptySaved') }}</p>
|
|
||||||
@else
|
|
||||||
<p class="lead font-weight-bold">{{ __('profile.emptyTimeline') }}</p>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@endsection
|
|
||||||
|
|
||||||
@push('meta')<meta property="og:description" content="{{$user->bio}}">
|
|
||||||
<meta property="og:image" content="{{$user->avatarUrl()}}">
|
|
||||||
<link href="{{$user->permalink('.atom')}}" rel="alternate" title="{{$user->username}} on Pixelfed" type="application/atom+xml">
|
|
||||||
@if(false == $settings->crawlable || $user->remote_url)
|
|
||||||
<meta name="robots" content="noindex, nofollow">
|
|
||||||
@endif
|
|
||||||
@endpush
|
|
||||||
|
|
||||||
@push('scripts')
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() {
|
|
||||||
$('.pagination-container').hide();
|
|
||||||
$('.pagination').hide();
|
|
||||||
let elem = document.querySelector('.profile-timeline');
|
|
||||||
let infScroll = new InfiniteScroll( elem, {
|
|
||||||
path: '.pagination__next',
|
|
||||||
append: '.profile-timeline .row',
|
|
||||||
status: '.page-load-status',
|
|
||||||
history: false,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endpush
|
|
||||||
|
|
|
@ -10,28 +10,20 @@
|
||||||
<div class="profile-details">
|
<div class="profile-details">
|
||||||
<div class="username-bar pb-2 d-flex align-items-center">
|
<div class="username-bar pb-2 d-flex align-items-center">
|
||||||
<span class="font-weight-ultralight h3">{{$user->username}}</span>
|
<span class="font-weight-ultralight h3">{{$user->username}}</span>
|
||||||
@if(Auth::check() && $is_following == true)
|
@auth
|
||||||
|
@if($is_following == true)
|
||||||
<span class="pl-4">
|
<span class="pl-4">
|
||||||
<form class="follow-form" method="post" action="/i/follow" style="display: inline;" data-id="{{$user->id}}" data-action="unfollow">
|
<button class="btn btn-outline-secondary font-weight-bold px-4 py-0" type="button" onclick="unfollowProfile()">Unfollow</button>
|
||||||
@csrf
|
|
||||||
<input type="hidden" name="item" value="{{$user->id}}">
|
|
||||||
<button class="btn btn-outline-secondary font-weight-bold px-4 py-0" type="submit">Unfollow</button>
|
|
||||||
</form>
|
|
||||||
</span>
|
</span>
|
||||||
@elseif(Auth::check() && $requested == true)
|
@elseif($requested == true)
|
||||||
<span class="pl-4">
|
<span class="pl-4">
|
||||||
<button class="btn btn-outline-secondary font-weight-bold px-4 py-0 disabled" disabled type="button">Follow Requested</button>
|
<button class="btn btn-outline-secondary font-weight-bold px-4 py-0" type="button" onclick="unfollowProfile()">Follow Requested</button>
|
||||||
</span>
|
</span>
|
||||||
@elseif(Auth::check() && $is_following == false)
|
@elseif($is_following == false)
|
||||||
<span class="pl-4">
|
<span class="pl-4">
|
||||||
<form class="follow-form" method="post" action="/i/follow" style="display: inline;" data-id="{{$user->id}}" data-action="follow">
|
<button class="btn btn-primary font-weight-bold px-4 py-0" type="button" onclick="followProfile()">Follow</button>
|
||||||
@csrf
|
|
||||||
<input type="hidden" name="item" value="{{$user->id}}">
|
|
||||||
<button class="btn btn-primary font-weight-bold px-4 py-0" type="submit">Follow</button>
|
|
||||||
</form>
|
|
||||||
</span>
|
</span>
|
||||||
@endif
|
@endif
|
||||||
@auth
|
|
||||||
<span class="pl-4">
|
<span class="pl-4">
|
||||||
<i class="fas fa-cog fa-lg text-muted cursor-pointer" data-toggle="modal" data-target="#ctxProfileMenu"></i>
|
<i class="fas fa-cog fa-lg text-muted cursor-pointer" data-toggle="modal" data-target="#ctxProfileMenu"></i>
|
||||||
<div class="modal" tabindex="-1" role="dialog" id="ctxProfileMenu">
|
<div class="modal" tabindex="-1" role="dialog" id="ctxProfileMenu">
|
||||||
|
@ -81,6 +73,7 @@
|
||||||
swal('Muted Profile', 'You have successfully muted this profile.', 'success');
|
swal('Muted Profile', 'You have successfully muted this profile.', 'success');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function blockProfile() {
|
function blockProfile() {
|
||||||
axios.post('/i/block', {
|
axios.post('/i/block', {
|
||||||
type: 'user',
|
type: 'user',
|
||||||
|
@ -92,6 +85,20 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function followProfile() {
|
||||||
|
axios.post('/api/v1/accounts/{{$user->id}}/follow')
|
||||||
|
.then(res => {
|
||||||
|
location.reload();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function unfollowProfile() {
|
||||||
|
axios.post('/api/v1/accounts/{{$user->id}}/unfollow')
|
||||||
|
.then(res => {
|
||||||
|
location.reload();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@endauth
|
@endauth
|
||||||
@endpush
|
@endpush
|
||||||
|
|
|
@ -1,92 +0,0 @@
|
||||||
<div class="bg-white py-5 border-bottom">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12 col-md-4 d-flex">
|
|
||||||
<div class="profile-avatar mx-auto">
|
|
||||||
<img class="rounded-circle box-shadow" src="{{$user->avatarUrl()}}" width="172px" height="172px">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-8 d-flex align-items-center">
|
|
||||||
<div class="profile-details">
|
|
||||||
<div class="username-bar pb-2 d-flex align-items-center">
|
|
||||||
<span class="font-weight-ultralight h1">{{$user->username}}</span>
|
|
||||||
@if($is_admin == true)
|
|
||||||
<span class="pl-4">
|
|
||||||
<span class="btn btn-outline-danger font-weight-bold py-0">ADMIN</span>
|
|
||||||
</span>
|
|
||||||
@endif
|
|
||||||
@if($owner == true)
|
|
||||||
<span class="pl-4">
|
|
||||||
<a class="fas fa-cog fa-lg text-muted" href="{{route('settings')}}"></a>
|
|
||||||
</span>
|
|
||||||
@elseif (Auth::check() && $is_following == true)
|
|
||||||
<span class="pl-4">
|
|
||||||
<form class="follow-form" method="post" action="/i/follow" style="display: inline;" data-id="{{$user->id}}" data-action="unfollow">
|
|
||||||
@csrf
|
|
||||||
<input type="hidden" name="item" value="{{$user->id}}">
|
|
||||||
<button class="btn btn-outline-secondary font-weight-bold px-4 py-0" type="submit">Unfollow</button>
|
|
||||||
</form>
|
|
||||||
</span>
|
|
||||||
@elseif (Auth::check() && $is_following == false)
|
|
||||||
<span class="pl-4">
|
|
||||||
<form class="follow-form" method="post" action="/i/follow" style="display: inline;" data-id="{{$user->id}}" data-action="follow">
|
|
||||||
@csrf
|
|
||||||
<input type="hidden" name="item" value="{{$user->id}}">
|
|
||||||
<button class="btn btn-primary font-weight-bold px-4 py-0" type="submit">Follow</button>
|
|
||||||
</form>
|
|
||||||
</span>
|
|
||||||
@endif
|
|
||||||
{{-- <span class="pl-4">
|
|
||||||
<div class="dropdown">
|
|
||||||
<button class="btn btn-link text-muted dropdown-toggle py-0" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="text-decoration: none;">
|
|
||||||
<i class="fas fa-ellipsis-v"></i>
|
|
||||||
</button>
|
|
||||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
|
||||||
<a class="dropdown-item font-weight-bold" href="#">Report User</a>
|
|
||||||
<div class="dropdown-divider"></div>
|
|
||||||
<a class="dropdown-item font-weight-bold" href="#">Mute User</a>
|
|
||||||
<a class="dropdown-item font-weight-bold" href="#">Block User</a>
|
|
||||||
<a class="dropdown-item font-weight-bold mute-users" href="#">Mute User & User Followers</a>
|
|
||||||
<a class="dropdown-item font-weight-bold" href="#">Block User & User Followers</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</span>
|
|
||||||
--}}
|
|
||||||
</div>
|
|
||||||
<div class="profile-stats pb-3 d-inline-flex lead">
|
|
||||||
<div class="font-weight-light pr-5">
|
|
||||||
<a class="text-dark" href="{{$user->url()}}">
|
|
||||||
<span class="font-weight-bold">{{$user->statusCount()}}</span>
|
|
||||||
Posts
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
@if($settings->show_profile_follower_count)
|
|
||||||
<div class="font-weight-light pr-5">
|
|
||||||
<a class="text-dark" href="{{$user->url('/followers')}}">
|
|
||||||
<span class="font-weight-bold">{{$user->followerCount(true)}}</span>
|
|
||||||
Followers
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
@if($settings->show_profile_following_count)
|
|
||||||
<div class="font-weight-light pr-5">
|
|
||||||
<a class="text-dark" href="{{$user->url('/following')}}">
|
|
||||||
<span class="font-weight-bold">{{$user->followingCount(true)}}</span>
|
|
||||||
Following
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<p class="lead mb-0 d-flex align-items-center">
|
|
||||||
<span class="font-weight-bold pr-3">{{$user->name}}</span>
|
|
||||||
@if($user->remote_url)
|
|
||||||
<span class="btn btn-outline-secondary btn-sm py-0">REMOTE PROFILE</span>
|
|
||||||
@endif
|
|
||||||
</p>
|
|
||||||
<div class="mb-0 lead" v-pre>{!!str_limit($user->bio, 127)!!}</div>
|
|
||||||
<p class="mb-0"><a href="{{$user->website}}" class="font-weight-bold" rel="me external nofollow noopener" target="_blank">{{str_limit($user->website, 30)}}</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
Loading…
Reference in New Issue