mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-12-22 21:13:16 +00:00
commit
089ca37457
25 changed files with 264 additions and 146 deletions
13
.env.docker
13
.env.docker
|
@ -56,11 +56,16 @@ MAIL_ENCRYPTION=null
|
|||
|
||||
## Databases (MySQL)
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_DATABASE=pixelfed_prod
|
||||
DB_HOST=db
|
||||
DB_PASSWORD=pixelfed_db_pass
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=pixelfed
|
||||
DB_USERNAME=pixelfed
|
||||
DB_PASSWORD=pixelfed
|
||||
# pass the same values to the db itself
|
||||
MYSQL_DATABASE=pixelfed_prod
|
||||
MYSQL_PASSWORD=pixelfed_db_pass
|
||||
MYSQL_RANDOM_ROOT_PASSWORD=true
|
||||
MYSQL_USER=pixelfed
|
||||
|
||||
## Databases (Postgres)
|
||||
#DB_CONNECTION=pgsql
|
||||
|
@ -74,7 +79,7 @@ DB_PASSWORD=pixelfed
|
|||
REDIS_CLIENT=phpredis
|
||||
REDIS_SCHEME=tcp
|
||||
REDIS_HOST=redis
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PASSWORD=redis_password
|
||||
REDIS_PORT=6379
|
||||
REDIS_DATABASE=0
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@
|
|||
- Updated Compose Apis, refactor rate limits. ([42375b3d](https://github.com/pixelfed/pixelfed/commit/42375b3d))
|
||||
- Updated PublicApiController, show unlisted comments. ([e1c6297e](https://github.com/pixelfed/pixelfed/commit/e1c6297e))
|
||||
- Updated ApiV1Controller, add missing variable. ([886ea617](https://github.com/pixelfed/pixelfed/commit/886ea617))
|
||||
- Updated PublicApiController, limit network pagination to 3 months. ([10119bbb](https://github.com/pixelfed/pixelfed/commit/10119bbb))
|
||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||
|
||||
## [v0.10.10 (2021-01-28)](https://github.com/pixelfed/pixelfed/compare/v0.10.9...v0.10.10)
|
||||
|
|
|
@ -523,7 +523,7 @@ class PublicApiController extends Controller
|
|||
->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
|
||||
->whereNotNull('uri')
|
||||
->whereScope('public')
|
||||
// ->where('created_at', '>', now()->subMonths(3))
|
||||
->where('created_at', '>', now()->subMonths(3))
|
||||
->orderBy('created_at', 'desc')
|
||||
->limit($limit)
|
||||
->get();
|
||||
|
|
|
@ -11,7 +11,6 @@ version: '3'
|
|||
# if the volumes are properly shared between cluster members.
|
||||
|
||||
services:
|
||||
|
||||
## App and Worker
|
||||
app:
|
||||
# Comment to use dockerhub image
|
||||
|
@ -21,16 +20,15 @@ services:
|
|||
image: pixelfed
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ./.env.docker
|
||||
- .env.docker
|
||||
volumes:
|
||||
- "app-storage:/var/www/storage"
|
||||
- "app-bootstrap:/var/www/bootstrap"
|
||||
- "./.env.docker:/var/www/.env"
|
||||
- app-storage:/var/www/storage
|
||||
- app-bootstrap:/var/www/bootstrap
|
||||
networks:
|
||||
- external
|
||||
- internal
|
||||
ports:
|
||||
- "8080:80"
|
||||
- "8080:80"
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
|
@ -42,10 +40,10 @@ services:
|
|||
image: pixelfed
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ./.env.docker
|
||||
- .env.docker
|
||||
volumes:
|
||||
- "app-storage:/var/www/storage"
|
||||
- "app-bootstrap:/var/www/bootstrap"
|
||||
- app-storage:/var/www/storage
|
||||
- app-bootstrap:/var/www/bootstrap
|
||||
networks:
|
||||
- external
|
||||
- internal
|
||||
|
@ -61,17 +59,16 @@ services:
|
|||
networks:
|
||||
- internal
|
||||
command: --default-authentication-plugin=mysql_native_password
|
||||
environment:
|
||||
- MYSQL_DATABASE=pixelfed
|
||||
- MYSQL_USER=${DB_USERNAME}
|
||||
- MYSQL_PASSWORD=${DB_PASSWORD}
|
||||
- MYSQL_RANDOM_ROOT_PASSWORD=true
|
||||
env_file:
|
||||
- .env.docker
|
||||
volumes:
|
||||
- "db-data:/var/lib/mysql"
|
||||
|
||||
redis:
|
||||
image: redis:5-alpine
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.docker
|
||||
volumes:
|
||||
- "redis-data:/data"
|
||||
networks:
|
||||
|
|
|
@ -334,7 +334,7 @@
|
|||
<p class="lead mb-0">
|
||||
by <a :href="statusProfileUrl">{{statusUsername}}</a>
|
||||
<span v-if="relationship && profile && user && !relationship.following && profile.id != user.id">
|
||||
<span class="px-1 text-lighter">•</span>
|
||||
<span class="px-1 text-lighter">•</span>
|
||||
<a class="font-weight-bold small" href="#">Follow</a>
|
||||
</span>
|
||||
</p>
|
||||
|
@ -348,7 +348,7 @@
|
|||
</h2>
|
||||
<p class="lead mb-0">
|
||||
by <a :href="statusProfileUrl">{{statusUsername}}</a>
|
||||
<!-- <span class="px-1 text-lighter">•</span>
|
||||
<!-- <span class="px-1 text-lighter">•</span>
|
||||
<a class="font-weight-bold small" href="#">Follow</a> -->
|
||||
</p>
|
||||
</div>
|
||||
|
@ -400,7 +400,7 @@
|
|||
<label class="custom-control-label small font-weight-bold text-muted" style="padding-top: 3px" for="sensitiveReply">Add Content Warning</label>
|
||||
</div>
|
||||
</span>
|
||||
<button class="btn btn-sm font-weight-bold btn-outline-primary py-1"
|
||||
<button class="btn btn-sm font-weight-bold btn-outline-primary py-1"
|
||||
v-if="replyText.length > 2" @click="postReply">Post</button>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -442,7 +442,7 @@
|
|||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -687,10 +687,10 @@
|
|||
.postPresenterContainer {
|
||||
background: #fff;
|
||||
}
|
||||
@media(min-width: 720px) {
|
||||
.postPresenterContainer {
|
||||
min-height: 600px;
|
||||
}
|
||||
@media(min-width: 720px) {
|
||||
.postPresenterContainer {
|
||||
min-height: 600px;
|
||||
}
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
width: 0px;
|
||||
|
@ -773,10 +773,11 @@ export default {
|
|||
'status-profile-url',
|
||||
'status-avatar',
|
||||
'status-profile-id',
|
||||
'profile-layout'
|
||||
'profile-layout',
|
||||
'profile-recent'
|
||||
],
|
||||
|
||||
components: {
|
||||
components: {
|
||||
VueTribute
|
||||
},
|
||||
|
||||
|
@ -941,12 +942,15 @@ export default {
|
|||
this.fetchComments();
|
||||
}
|
||||
this.loaded = true;
|
||||
setTimeout(function() {
|
||||
self.fetchProfilePosts();
|
||||
}, 3000);
|
||||
|
||||
if(this.profileRecent !== false) {
|
||||
setTimeout(function() {
|
||||
self.fetchProfilePosts();
|
||||
}, 3000);
|
||||
}
|
||||
setTimeout(function() {
|
||||
self.fetchState();
|
||||
document.querySelectorAll('.status-comment .postCommentsContainer .comment-body a').forEach(function(i, e) {
|
||||
document.querySelectorAll('.status-comment .postCommentsContainer .comment-body a').forEach(function(i, e) {
|
||||
i.href = App.util.format.rewriteLinks(i);
|
||||
});
|
||||
}, 500);
|
||||
|
@ -1202,7 +1206,7 @@ export default {
|
|||
comment: this.replyText,
|
||||
sensitive: this.replySensitive
|
||||
}
|
||||
|
||||
|
||||
this.replyText = '';
|
||||
|
||||
axios.post('/i/comment', data)
|
||||
|
@ -1262,7 +1266,7 @@ export default {
|
|||
this.redirect('/login?next=' + encodeURIComponent(window.location.pathname));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(this.status.comments_disabled) {
|
||||
return;
|
||||
}
|
||||
|
@ -1284,7 +1288,7 @@ export default {
|
|||
axios.get(url)
|
||||
.then(response => {
|
||||
let self = this;
|
||||
this.results = this.layout == 'metro' ?
|
||||
this.results = this.layout == 'metro' ?
|
||||
_.reverse(response.data.data) :
|
||||
response.data.data;
|
||||
this.pagination = response.data.meta.pagination;
|
||||
|
@ -1294,7 +1298,7 @@ export default {
|
|||
$('.postCommentsLoader').addClass('d-none');
|
||||
$('.postCommentsContainer').removeClass('d-none');
|
||||
setTimeout(function() {
|
||||
document.querySelectorAll('.status-comment .postCommentsContainer .comment-body a').forEach(function(i, e) {
|
||||
document.querySelectorAll('.status-comment .postCommentsContainer .comment-body a').forEach(function(i, e) {
|
||||
i.href = App.util.format.rewriteLinks(i);
|
||||
});
|
||||
}, 500);
|
||||
|
@ -1505,9 +1509,9 @@ export default {
|
|||
if(profile.local == true) {
|
||||
return reply.url;
|
||||
} else {
|
||||
return showOrigin ?
|
||||
return showOrigin ?
|
||||
reply.url :
|
||||
'/i/web/post/_/' + profile.id + '/' + reply.id;
|
||||
'/i/web/post/_/' + profile.id + '/' + reply.id;
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1575,7 +1579,7 @@ export default {
|
|||
});
|
||||
swal('Untagged', 'You have been untagged from this post.', 'success');
|
||||
}).catch(err => {
|
||||
swal('An Error Occurred', 'Please try again later.', 'error');
|
||||
swal('An Error Occurred', 'Please try again later.', 'error');
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -1737,7 +1741,7 @@ export default {
|
|||
}, 500);
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -130,7 +130,7 @@
|
|||
</div>
|
||||
<div class="pl-2">
|
||||
<!-- <a class="d-block username font-weight-bold text-dark" v-bind:href="status.account.url" style="line-height:0.5;"> -->
|
||||
<a class="username font-weight-bold text-dark text-decoration-none" v-bind:href="profileUrl(status)" v-html="statusCardUsernameFormat(status)">
|
||||
<a class="username font-weight-bold text-dark text-decoration-none text-break" v-bind:href="profileUrl(status)" v-html="statusCardUsernameFormat(status)">
|
||||
Loading...
|
||||
</a>
|
||||
<span v-if="status.account.is_admin" class="fa-stack" title="Admin Account" data-toggle="tooltip" style="height:1em; line-height:1em; max-width:19px;">
|
||||
|
@ -408,7 +408,7 @@
|
|||
<div class="col-12 col-md-6 offset-md-3">
|
||||
<div class="card shadow-none border" style="height:100vh;">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<div
|
||||
<div
|
||||
@click="commentNavigateBack(status.id)"
|
||||
class="cursor-pointer"
|
||||
>
|
||||
|
@ -441,9 +441,9 @@
|
|||
</div>
|
||||
<div class="postCommentsContainer d-none">
|
||||
<p v-if="replies.length" class="mb-1 text-center load-more-link my-4">
|
||||
<a
|
||||
href="#"
|
||||
class="text-dark"
|
||||
<a
|
||||
href="#"
|
||||
class="text-dark"
|
||||
title="Load more comments"
|
||||
@click.prevent="loadMoreComments"
|
||||
>
|
||||
|
@ -516,19 +516,19 @@
|
|||
</div>
|
||||
<div class="card-footer mb-3">
|
||||
<div class="align-middle d-flex">
|
||||
<img
|
||||
<img
|
||||
:src="profile.avatar"
|
||||
width="36"
|
||||
height="36"
|
||||
class="rounded-circle border mr-3">
|
||||
<textarea
|
||||
class="form-control rounded-pill"
|
||||
name="comment"
|
||||
placeholder="Add a comment…"
|
||||
autocomplete="off"
|
||||
<textarea
|
||||
class="form-control rounded-pill"
|
||||
name="comment"
|
||||
placeholder="Add a comment…"
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
rows="1"
|
||||
maxlength="0"
|
||||
maxlength="0"
|
||||
style="resize: none;overflow-y: hidden"
|
||||
@click="replyFocus(status)">
|
||||
</textarea>
|
||||
|
@ -741,9 +741,9 @@
|
|||
body-class="p-2 rounded">
|
||||
<div>
|
||||
<vue-tribute :options="tributeSettings">
|
||||
<textarea
|
||||
class="form-control replyModalTextarea"
|
||||
rows="4"
|
||||
<textarea
|
||||
class="form-control replyModalTextarea"
|
||||
rows="4"
|
||||
v-model="replyText">
|
||||
</textarea>
|
||||
</vue-tribute>
|
||||
|
@ -764,7 +764,7 @@
|
|||
<input type="checkbox" class="custom-control-input" id="replyModalCWSwitch" v-model="replyNsfw">
|
||||
<label :class="[replyNsfw ? 'custom-control-label font-weight-bold text-dark':'custom-control-label text-lighter']" for="replyModalCWSwitch">Mark as NSFW</label>
|
||||
</div>
|
||||
|
||||
|
||||
<button class="btn btn-primary btn-sm py-2 px-4 lead text-uppercase font-weight-bold" v-on:click.prevent="commentSubmit(status, $event)" :disabled="replyText.length == 0">
|
||||
{{replySending == true ? 'POSTING' : 'POST'}}
|
||||
</button>
|
||||
|
@ -781,14 +781,14 @@
|
|||
size="xl"
|
||||
body-class="list-group-flush p-0 m-0 rounded">
|
||||
<!-- <post-component
|
||||
v-if="ctxMenuStatus"
|
||||
:status-template="ctxMenuStatus.pf_type"
|
||||
:status-id="ctxMenuStatus.id"
|
||||
:status-username="ctxMenuStatus.account.username"
|
||||
:status-url="ctxMenuStatus.url"
|
||||
:status-profile-url="ctxMenuStatus.account.url"
|
||||
:status-avatar="ctxMenuStatus.account.avatar"
|
||||
:status-profile-id="ctxMenuStatus.account.id"
|
||||
v-if="ctxMenuStatus"
|
||||
:status-template="ctxMenuStatus.pf_type"
|
||||
:status-id="ctxMenuStatus.id"
|
||||
:status-username="ctxMenuStatus.account.username"
|
||||
:status-url="ctxMenuStatus.url"
|
||||
:status-profile-url="ctxMenuStatus.account.url"
|
||||
:status-avatar="ctxMenuStatus.account.avatar"
|
||||
:status-profile-id="ctxMenuStatus.account.id"
|
||||
profile-layout="metro">
|
||||
</post-component> -->
|
||||
</b-modal>
|
||||
|
@ -934,7 +934,7 @@
|
|||
|
||||
let el = document.querySelector('link[data-stylesheet="light"]');
|
||||
el.setAttribute('href', '/css/appdark.css?id=' + Date.now());
|
||||
el.setAttribute('data-stylesheet', 'dark');
|
||||
el.setAttribute('data-stylesheet', 'dark');
|
||||
}*/
|
||||
|
||||
if(localStorage.getItem('pf_metro_ui.exp.rec') == 'false') {
|
||||
|
@ -1019,14 +1019,14 @@
|
|||
$('.timeline .pagination').removeClass('d-none');
|
||||
// if(this.feed.length == 4) {
|
||||
// this.fetchTimelineApi();
|
||||
// }
|
||||
// }
|
||||
if(this.hashtagPosts.length == 0) {
|
||||
this.fetchHashtagPosts();
|
||||
}
|
||||
// this.fetchStories();
|
||||
this.rtw();
|
||||
setTimeout(function() {
|
||||
document.querySelectorAll('.timeline .card-body .comments .comment-body a').forEach(function(i, e) {
|
||||
document.querySelectorAll('.timeline .card-body .comments .comment-body a').forEach(function(i, e) {
|
||||
i.href = App.util.format.rewriteLinks(i);
|
||||
});
|
||||
}, 500);
|
||||
|
@ -1079,7 +1079,7 @@
|
|||
'status_id': d.id,
|
||||
'profile_id': d.account.id
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
this.min_id = Math.max(...this.ids).toString();
|
||||
this.max_id = Math.min(...this.ids).toString();
|
||||
|
@ -1211,7 +1211,7 @@
|
|||
},
|
||||
|
||||
fetchStatusComments(status, card) {
|
||||
// axios.get('/api/v2/status/'+status.id+'/replies',
|
||||
// axios.get('/api/v2/status/'+status.id+'/replies',
|
||||
// {
|
||||
// params: {
|
||||
// limit: 6
|
||||
|
@ -1223,7 +1223,7 @@
|
|||
// });
|
||||
// this.replies = _.reverse(data);
|
||||
// setTimeout(function() {
|
||||
// document.querySelectorAll('.timeline .card-body .comments .comment-body a').forEach(function(i, e) {
|
||||
// document.querySelectorAll('.timeline .card-body .comments .comment-body a').forEach(function(i, e) {
|
||||
// i.href = App.util.format.rewriteLinks(i);
|
||||
// });
|
||||
// }, 500);
|
||||
|
@ -1233,7 +1233,7 @@
|
|||
axios.get(url)
|
||||
.then(response => {
|
||||
let self = this;
|
||||
// this.results = this.layout == 'metro' ?
|
||||
// this.results = this.layout == 'metro' ?
|
||||
// _.reverse(response.data.data) :
|
||||
// response.data.data;
|
||||
this.replies = _.reverse(response.data.data);
|
||||
|
@ -1244,7 +1244,7 @@
|
|||
$('.postCommentsLoader').addClass('d-none');
|
||||
$('.postCommentsContainer').removeClass('d-none');
|
||||
// setTimeout(function() {
|
||||
// document.querySelectorAll('.status-comment .postCommentsContainer .comment-body a').forEach(function(i, e) {
|
||||
// document.querySelectorAll('.status-comment .postCommentsContainer .comment-body a').forEach(function(i, e) {
|
||||
// i.href = App.util.format.rewriteLinks(i);
|
||||
// });
|
||||
// }, 500);
|
||||
|
@ -1622,7 +1622,7 @@
|
|||
this.replyText += em + ' ';
|
||||
$('textarea[name="comment"]').focus();
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
refreshSuggestions() {
|
||||
return;
|
||||
|
@ -1794,7 +1794,7 @@
|
|||
this.$refs.ctxModModal.hide();
|
||||
this.$refs.ctxModOtherModal.show();
|
||||
},
|
||||
|
||||
|
||||
ctxModMenu() {
|
||||
this.$refs.ctxModal.hide();
|
||||
},
|
||||
|
@ -1854,7 +1854,7 @@
|
|||
return usr + '<span class="text-lighter font-weight-bold"> ' + txt + ' ' + dom + '</span>';
|
||||
break;
|
||||
|
||||
default:
|
||||
default:
|
||||
return usr + '<span class="text-lighter font-weight-bold">@' + dom + '</span>';
|
||||
break;
|
||||
}
|
||||
|
@ -2104,7 +2104,7 @@
|
|||
if(this.status.comments_disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
this.replyToIndex = index;
|
||||
this.replyingToId = e.id;
|
||||
this.replyingToUsername = e.account.username;
|
||||
|
@ -2184,9 +2184,9 @@
|
|||
color: #3897f0;
|
||||
}
|
||||
.replyModalTextarea {
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
resize: none;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
resize: none;
|
||||
white-space: pre-wrap;
|
||||
outline: none;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,20 @@
|
|||
<carousel ref="carousel" :centerMode="true" :loop="false" :per-page="1" :paginationPosition="'bottom-overlay'" paginationActiveColor="#3897f0" paginationColor="#dbdbdb">
|
||||
<slide v-for="(img, index) in status.media_attachments" :key="'px-carousel-'+img.id + '-' + index" class="w-100 h-100 d-block mx-auto text-center" :title="img.description">
|
||||
<img :class="img.filter_class + ' img-fluid'" :src="img.url" :alt="altText(img)" onerror="this.onerror=null;this.src='/storage/no-preview.png'">
|
||||
<p
|
||||
v-if="status.media_attachments[0].license"
|
||||
style="
|
||||
margin-bottom: 0;
|
||||
padding: 0 5px;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
text-align: right;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-top-left-radius: 5px;
|
||||
background: linear-gradient(0deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));
|
||||
"><a :href="status.url" class="font-weight-bold text-light">Photo</a> by <a :href="status.account.url" class="font-weight-bold text-light">@{{status.account.username}}</a> licensed under <a :href="status.media_attachments[0].license.url" class="font-weight-bold text-light">{{status.media_attachments[0].license.title}}</a></p>
|
||||
</slide>
|
||||
</carousel>
|
||||
</details>
|
||||
|
@ -16,6 +30,20 @@
|
|||
<carousel ref="carousel" :centerMode="true" :loop="false" :per-page="1" :paginationPosition="'bottom-overlay'" paginationActiveColor="#3897f0" paginationColor="#dbdbdb" class="p-0 m-0">
|
||||
<slide v-for="(img, index) in status.media_attachments" :key="'px-carousel-'+img.id + '-' + index" class="" style="background: #000; display: flex;align-items: center;" :title="img.description">
|
||||
<img :class="img.filter_class + ' img-fluid w-100 p-0'" style="" :src="img.url" :alt="altText(img)" onerror="this.onerror=null;this.src='/storage/no-preview.png'">
|
||||
<p
|
||||
v-if="status.media_attachments[0].license"
|
||||
style="
|
||||
margin-bottom: 0;
|
||||
padding: 0 5px;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
text-align: right;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-top-left-radius: 5px;
|
||||
background: linear-gradient(0deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));
|
||||
"><a :href="status.url" class="font-weight-bold text-light">Photo</a> by <a :href="status.account.url" class="font-weight-bold text-light">@{{status.account.username}}</a> licensed under <a :href="status.media_attachments[0].license.url" class="font-weight-bold text-light">{{status.media_attachments[0].license.title}}</a></p>
|
||||
</slide>
|
||||
</carousel>
|
||||
</div>
|
||||
|
@ -83,4 +111,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
@ -23,27 +23,27 @@
|
|||
</div>
|
||||
<div v-else>
|
||||
<div :title="status.media_attachments[0].description" style="position: relative;">
|
||||
<img class="card-img-top"
|
||||
:src="status.media_attachments[0].url"
|
||||
loading="lazy"
|
||||
<img class="card-img-top"
|
||||
:src="status.media_attachments[0].url"
|
||||
loading="lazy"
|
||||
:alt="altText(status)"
|
||||
:width="width()"
|
||||
:height="height()"
|
||||
onerror="this.onerror=null;this.src='/storage/no-preview.png'">
|
||||
|
||||
<p
|
||||
<p
|
||||
v-if="status.media_attachments[0].license"
|
||||
style="
|
||||
margin-bottom: 0;
|
||||
padding: 0 5px;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
text-align: right;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-top-left-radius: 5px;
|
||||
background: linear-gradient(0deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));
|
||||
margin-bottom: 0;
|
||||
padding: 0 5px;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
text-align: right;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-top-left-radius: 5px;
|
||||
background: linear-gradient(0deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));
|
||||
"><a :href="status.url" class="font-weight-bold text-light">Photo</a> by <a :href="status.account.url" class="font-weight-bold text-light">@{{status.account.username}}</a> licensed under <a :href="status.media_attachments[0].license.url" class="font-weight-bold text-light">{{status.media_attachments[0].license.title}}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -91,7 +91,7 @@
|
|||
},
|
||||
|
||||
width() {
|
||||
if( !this.status.media_attachments[0].meta ||
|
||||
if( !this.status.media_attachments[0].meta ||
|
||||
!this.status.media_attachments[0].meta.original ||
|
||||
!this.status.media_attachments[0].meta.original.width ) {
|
||||
return;
|
||||
|
@ -100,7 +100,7 @@
|
|||
},
|
||||
|
||||
height() {
|
||||
if( !this.status.media_attachments[0].meta ||
|
||||
if( !this.status.media_attachments[0].meta ||
|
||||
!this.status.media_attachments[0].meta.original ||
|
||||
!this.status.media_attachments[0].meta.original.height ) {
|
||||
return;
|
||||
|
@ -109,4 +109,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
@ -13,7 +13,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'failed' => 'لم نعثر على هذه المعطيات في سجلاتنا.',
|
||||
'throttle' => 'لقد قمت بعدة محاولات. يُرجى إعادة المحاولة لاحقًا بعد مُضيّ :seconds ثوان.',
|
||||
'failed' => 'هَذِهِ المُؤَهِلاتُ لَا تَتَطابَقُ مَعَ سِجِلَّاتِنَا.',
|
||||
'throttle' => 'العَدِيدُ مِن مُحَاوَلَاتِ تَسجِيلِ الدُّخُول. يُرجَى المُحَاوَلَةُ مَرَّةً أُخرَى بَعدَ زَمَنٍ قَدرُهُ :seconds ثَواني.',
|
||||
|
||||
];
|
||||
|
|
11
resources/lang/ar/exception.php
Normal file
11
resources/lang/ar/exception.php
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'compose' => [
|
||||
'invalid' => [
|
||||
'album' => 'يَجِبُ أن يَحوِي صُورَةً وَاحِدَة، مَقطَعً مَرئِيًّ أو عَدَدً مِنَ الصُّوَر.',
|
||||
],
|
||||
],
|
||||
|
||||
];
|
28
resources/lang/ar/helpcenter.php
Normal file
28
resources/lang/ar/helpcenter.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'helpcenter' => ' مَركَزُ المُسَاعَدَة',
|
||||
'whatsnew' => 'مَا الجَدِيد',
|
||||
|
||||
'gettingStarted' => 'اِبدَأ',
|
||||
'sharingMedia' => 'مُشَارَكَةُ الوَسَائِط',
|
||||
'profile' => 'المَلَفُّ الشَّخصِيّ',
|
||||
'stories' => 'القِصَص',
|
||||
'hashtags' => 'الأوسِمَةُ المُرَبَّعَة',
|
||||
'discover' => 'الاِستِكشاف',
|
||||
'directMessages' => 'الرَّسَائِلُ المُبَاشِرَة',
|
||||
'timelines' => 'الخَطُّ الزَّمَنِيّ',
|
||||
'embed' => 'التَّضمِين',
|
||||
|
||||
'communityGuidelines' => 'إرشَادَاتُ المُجتَمَع',
|
||||
'whatIsTheFediverse' => 'مَا هُوَ Fediverse؟',
|
||||
'controllingVisibility' => 'التَّحَكُّمُ فِي الرُّؤيَة',
|
||||
'blockingAccounts' => 'حَظرُ الحِسَابَات',
|
||||
'safetyTips' => 'نَصَائِحٌ أمنِيَّة',
|
||||
'reportSomething' => 'الإبلاَغُ عَن شَيءٍ مَا',
|
||||
'dataPolicy' => 'سِياسَةُ البَيَانَات',
|
||||
|
||||
'taggingPeople' => 'وَسمُ الأشخَاص'
|
||||
|
||||
];
|
|
@ -1,14 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'viewMyProfile' => 'معاينة ملفي الشخصي',
|
||||
'myTimeline' => 'خيطي الزمني',
|
||||
'publicTimeline' => 'الخيط الزمني العام',
|
||||
'remoteFollow' => 'المتابَعة عند بُعد',
|
||||
'settings' => 'الإعدادات',
|
||||
'admin' => 'المدير',
|
||||
'logout' => 'خروج',
|
||||
'directMessages' => 'الرسائل المباشرة',
|
||||
|
||||
'search' => 'البَحث',
|
||||
'home' => 'الرَّئِيسَة',
|
||||
'local' => 'المَحَلِّيّ',
|
||||
'network' => 'الشَّبَكَة',
|
||||
'discover' => 'الاِستِكشاف',
|
||||
'viewMyProfile' => 'الاِطِّلاعُ عَلَى مَلَفِّي الشَّخصِي',
|
||||
'myProfile' => 'مَلَفِّي الشَّخصِي',
|
||||
'myTimeline' => 'خَطِّي الزَّمَنِي',
|
||||
'publicTimeline' => 'الخَطُّ الزَّمَنِيّ العَام',
|
||||
'remoteFollow' => 'المُتَابَعَةُ عَن بُعد',
|
||||
'settings' => 'الإعدادَات',
|
||||
'admin' => 'المُدِير',
|
||||
'logout' => 'تَسجِيلُ الخُرُوج',
|
||||
'directMessages' => 'الرَّسَائِلُ المُبَاشِرَة',
|
||||
'composePost' => 'إنشاءُ مَنشُور',
|
||||
];
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
|
||||
return [
|
||||
|
||||
'likedPhoto' => 'أُعجِب بصورتك.',
|
||||
'startedFollowingYou' => 'يُتابِعك الآن.',
|
||||
'commented' => 'علّق على منشورك.',
|
||||
'mentionedYou' => 'أشار إليك.',
|
||||
'likedPhoto' => 'اُعجِبَ بِمَنشُورِك.',
|
||||
'likedComment' => 'اُعجِبَ بِتَعلِيقِك.',
|
||||
'startedFollowingYou' => 'بَدَأ بِمُتَابَعَتِك.',
|
||||
'commented' => 'عَلَّقَ عَلَى مَنشُورِك.',
|
||||
'mentionedYou' => 'قَد ذَكَرَك.',
|
||||
'shared' => 'شَارَكَ مَنشُورَك.',
|
||||
|
||||
];
|
||||
|
|
|
@ -13,7 +13,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'previous' => '« التالي',
|
||||
'next' => 'العودة »',
|
||||
'previous' => '« السَّابِق',
|
||||
'next' => 'التَّالِي »',
|
||||
|
||||
];
|
||||
|
|
|
@ -13,10 +13,10 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'password' => 'ينبغي أن يكون طول الكلمة السرية أزيَد مِن ستة حروف و تكون نفسها متطابقة.',
|
||||
'reset' => 'تم إعادة تعيين كلمتك السرية!',
|
||||
'sent' => 'لقد قمنا بإرسال رسالة مع رابط لإعادة تعيين الكلمة السرية!',
|
||||
'token' => 'رمز إعادة تعيين الكلمة السرية هذا لم يعد صالحًا.',
|
||||
'user' => "تعذّر علينا العثور على مستخدِم له عنوان البريد الإلكتروني هذا.",
|
||||
'password' => 'يَجِبُ أن تَتَكَوَّنَ كَلِمَةُ المُرُورِ مِن سِتِّ خَانَاتٍ عَلَى الأقل وَأن تَكُونَ مُتَطَابِقَةً مَعَ التَّأكِيد.',
|
||||
'reset' => 'لَقَد تَمَّ إعادَةُ تَعيِينِ كَلِمَةِ المُرُورِ الخَاصَّةِ بِك!',
|
||||
'sent' => 'إذَا كَانَ عُنوَانُ بَريدِكَ الإلِكتُرونِيِّ الخاصِّ بِكَ مَوجُودًا فِي قَاعِدَةِ البَيَانَاتِ الخَاصَّةِ بِنَا، فَسَوفَ تَتَلَقَّى رَابِطًا لاِستِعادَةِ كَلِمَةِ المُرُورِ عَلَى عُنوَانِ بَريدِكَ الإلِكتُرونِيِّ فِي غُضُونِ بِضعِ دَقائِق. إذَا لَم تَستَلِم هَذَا البَريد، يُرجَى التَّحقُّقُ مِن مُجَلَّدِ الرَّسَائِل غَيرِ المَرغُوبِ فِيهَا.',
|
||||
'token' => 'رَمزُ إعادَةِ تَعيِينِ كَلِمَةِ المُرُورِ هَذَا غَيرُ صَالِح.',
|
||||
'user' => 'إذَا كَانَ عُنوَانُ بَريدِكَ الإلِكتُرونِيِّ الخاصِّ بِكَ مَوجُودًا فِي قَاعِدَةِ البَيَانَاتِ الخَاصَّةِ بِنَا، فَسَوفَ تَتَلَقَّى رَابِطًا لاِستِعادَةِ كَلِمَةِ المُرُورِ عَلَى عُنوَانِ بَريدِكَ الإلِكتُرونِيِّ فِي غُضُونِ بِضعِ دَقائِق. إذَا لَم تَستَلِم هَذَا البَريد، يُرجَى التَّحقُّقُ مِن مُجَلَّدِ الرَّسَائِل غَيرِ المَرغُوبِ فِيهَا.',
|
||||
|
||||
];
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'emptyTimeline' => 'لم يقم هذا المستخدِم بنشر أي منشور بعد!',
|
||||
'emptyFollowers' => 'ليس لهذا المستخدِم متابِعون بعد!',
|
||||
'emptyFollowing' => 'هذا المستخدِم لا يتابع أحدًا بعد!',
|
||||
'emptySaved' => 'لم تقم بحفظ أي منشور بعد!',
|
||||
'savedWarning' => 'لا يمكنك عرض إلا ما قمت بالإحتفاظ به',
|
||||
'privateProfileWarning' => 'هذا الحساب خاص',
|
||||
'alreadyFollow' => 'أنت تتبع :username?',
|
||||
'loginToSeeProfile' => 'قصد عرض صوَرهم و فيديوهاتهت.',
|
||||
'emptyTimeline' => 'هَذَا المُستَخدِمُ لَيسَ لَدَيهِ أيُّ مَنشُورَاتٍ حَتَّى الآن!',
|
||||
'emptyFollowers' => 'هَذَا المُستَخدِمُ لَيسَ لَدَيهِ أيُّ مُتَابِعِينَ حَتَّى الآن!',
|
||||
'emptyFollowing' => 'هَذَا المُستَخدِمُ لَا يُتَابِعُ أَيُّ شَخصٍ حَتَّى الآن!',
|
||||
'emptySaved' => 'أنتَ لَم تَحفَظ أيُّ مَنشُورٍ حَتَّى الآن!',
|
||||
'savedWarning' => 'أنتَ فَقَطّ مَن يُمكَنُهُ رُؤيَةُ مَا قَد حَفَظتَهُ أنت',
|
||||
'privateProfileWarning' => 'هَذَا حِسَابٌ خاصّ',
|
||||
'alreadyFollow' => 'هَل تُتَابِعُ :username بِالفِعل؟',
|
||||
'loginToSeeProfile' => 'لِمُشَاهَدَةِ صُوَرِهِ وَمَقَاطِعِهِ المَرئِيَّة.',
|
||||
|
||||
'status.disabled.header' => 'إنَّ المَلَفَّ الشَّخصِيّ غَيرُ مُتَاح',
|
||||
'status.disabled.body' => 'عُذرًا، إنَّ هَذَا المَلَفَّ الشَّخصِيّ غَيرُ مُتَاحٍ فِي الوَقتِ الحالِيِّ. يُرجَى المُحَاوَلَةُ مَرَّةً أُخرَى بَعدَ قَلِيل.',
|
||||
];
|
||||
|
|
20
resources/lang/ar/site.php
Normal file
20
resources/lang/ar/site.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'about' => 'حَول',
|
||||
'help' => 'المُسَاعَدَة',
|
||||
'language' => 'اللُّغَة',
|
||||
'fediverse' => 'Fediverse',
|
||||
'opensource' => 'المَصدَرُ المَفتُوح',
|
||||
'terms' => 'الشُّرُوط',
|
||||
'privacy' => 'الخُصُوصِيَّة',
|
||||
'l10nWip' => 'لَا نَزَالُ نَعمَلُ عَلَى دَعمِ اللُّغَةِ العَرَبِيَّة',
|
||||
'currentLocale' => 'اللُّغَةُ الحالِيَّة',
|
||||
'selectLocale' => 'اِختَر إحدَى اللُّغَاتِ المَدعُومَة',
|
||||
'contact' => 'التَّوَاصُل',
|
||||
'contact-us' => 'تَوَاصَل مَعَنَا',
|
||||
'places' => 'الأَمَاكِن',
|
||||
'profiles' => 'المَلَفَّاتُ الشَّخصِيَّة',
|
||||
|
||||
];
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
return [
|
||||
|
||||
'emptyPersonalTimeline' => 'إنّ خيطك الزمني فارغ.',
|
||||
'emptyPersonalTimeline' => 'إنَّ الخَطَّ الزَّمَنِيَّ الخاصَّ بِكَ فَارِغ.',
|
||||
|
||||
];
|
||||
|
|
11
resources/lang/ru/exception.php
Normal file
11
resources/lang/ru/exception.php
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'compose' => [
|
||||
'invalid' => [
|
||||
'album' => 'Должен содержать одно фото, видео, или несколько фото.',
|
||||
],
|
||||
],
|
||||
|
||||
];
|
|
@ -5,22 +5,24 @@ return [
|
|||
'helpcenter' => 'Помощь',
|
||||
'whatsnew' => 'Что нового',
|
||||
|
||||
'gettingStarted' => 'Первые шаги',
|
||||
'gettingStarted' => 'Начало работы',
|
||||
'sharingMedia' => 'Поделиться',
|
||||
'profile' => 'Профиль',
|
||||
'stories' => 'Истории',
|
||||
'hashtags' => 'Хэштэти',
|
||||
'hashtags' => 'Хэштэги',
|
||||
'discover' => 'Discover',
|
||||
'directMessages' => 'Личное сообщение',
|
||||
'directMessages' => 'Личные сообщения',
|
||||
'timelines' => 'Ленты',
|
||||
'embed' => 'Вставить',
|
||||
|
||||
'communityGuidelines' => 'Правила сообщества',
|
||||
'whatIsTheFediverse' => 'Что такое fediverse?',
|
||||
'controllingVisibility' => 'Управление видимостью',
|
||||
'blockingAccounts' => 'Заблокированные аккаунты',
|
||||
'blockingAccounts' => 'Блокировка аккаунтов',
|
||||
'safetyTips' => 'Советы по безопасности',
|
||||
'reportSomething' => 'Пожаловаться',
|
||||
'reportSomething' => 'Жалобы',
|
||||
'dataPolicy' => 'Конфиденциальность'
|
||||
|
||||
'taggingPeople' => 'Отметки людей'
|
||||
|
||||
];
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
return [
|
||||
|
||||
'search' => 'Поиск',
|
||||
'home' => 'Home',
|
||||
'local' => 'локальная',
|
||||
'network' => 'Сеть',
|
||||
'home' => 'Главная',
|
||||
'local' => 'Локальная',
|
||||
'network' => 'Глобальная',
|
||||
'discover' => 'Discover',
|
||||
'viewMyProfile' => 'Локальная лента',
|
||||
'viewMyProfile' => 'Мой профиль',
|
||||
'myTimeline' => 'Моя лента',
|
||||
'publicTimeline' => 'Глобальная лента',
|
||||
'remoteFollow' => 'Remote Follow',
|
||||
|
|
|
@ -15,8 +15,8 @@ return [
|
|||
|
||||
'password' => 'Пароль должен содержать не менее 6 символов и должен совпадать с подтверждением пароля.',
|
||||
'reset' => 'Ваш пароль был сброшен!',
|
||||
'sent' => 'Мы отправили ссылку для сброса пароля по e-mail!',
|
||||
'sent' => 'Если ваш e-mail существует в нашей базе данных, в течение нескольких минут вы получите письмо со ссылкой для восстановления пароля. Если не получили письмо, пожалуйста, проверьте папку "Спам".',
|
||||
'token' => 'Этот токен для сброса пароля некорректен.',
|
||||
'user' => 'Мы не можем найти пользователя с таким e-mail.',
|
||||
'user' => 'Если ваш e-mail существует в нашей базе данных, в течение нескольких минут вы получите письмо со ссылкой для восстановления пароля. Если не получили письмо, пожалуйста, проверьте папку "Спам".',
|
||||
|
||||
];
|
||||
|
|
|
@ -5,11 +5,11 @@ return [
|
|||
'emptyFollowers' => 'У этого пользователя пока нет подписчиков!',
|
||||
'emptyFollowing' => 'Этот пользователь пока ни на кого не подписан!',
|
||||
'emptySaved' => 'Вы еще не сохранили ни одного поста!',
|
||||
'savedWarning' => 'Только можете видеть сохранённые посты',
|
||||
'savedWarning' => 'Только вы можете видеть сохранённые посты',
|
||||
'privateProfileWarning' => 'Эта учётная запись скрыта',
|
||||
'alreadyFollow' => 'Уже подписаны на :username?',
|
||||
'loginToSeeProfile' => 'что бы посмотреть их фото и видео.',
|
||||
'loginToSeeProfile' => 'чтобы посмотреть их фото и видео.',
|
||||
|
||||
'status.disabled.header' => 'Учётная запись недоступна',
|
||||
'status.disabled.body' => 'Нам очень жаль, эта учётная запись недоступна на данный момент. Пожалуйста, попробуйте позже.',
|
||||
'status.disabled.body' => 'К сожалению, эта учётная запись недоступна на данный момент. Пожалуйста, попробуйте ещё раз позднее.',
|
||||
];
|
||||
|
|
|
@ -11,8 +11,9 @@ return [
|
|||
'privacy' => 'Конфиденциальность',
|
||||
'l10nWip' => 'Мы все еще работаем над локализацией',
|
||||
'currentLocale' => 'Выбранный язык',
|
||||
'selectLocale' => 'выберите один из поддерживаемых языков',
|
||||
'selectLocale' => 'Выберите один из поддерживаемых языков',
|
||||
'contact' => 'Контакт',
|
||||
'contact-us' => 'Связь с нами',
|
||||
'profiles' => 'Профили',
|
||||
|
||||
];
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="bio" class="col-sm-3 col-form-label font-weight-bold">Language</label>
|
||||
<label for="language" class="col-sm-3 col-form-label font-weight-bold">Language</label>
|
||||
<div class="col-sm-9">
|
||||
<select class="form-control" name="language">
|
||||
@foreach(App\Util\Localization\Localization::languages() as $lang)
|
||||
|
|
Loading…
Reference in a new issue