Merge branch 'dev' into admin_settings
This commit is contained in:
commit
5e9475c6ef
18 changed files with 333 additions and 26 deletions
2
.dockerignore
vendored
2
.dockerignore
vendored
|
@ -2,5 +2,5 @@ ui/node_modules
|
||||||
ui/dist
|
ui/dist
|
||||||
server/target
|
server/target
|
||||||
docker/dev/volumes
|
docker/dev/volumes
|
||||||
docker/federation-test/volumes
|
docker/federation/volumes
|
||||||
.git
|
.git
|
||||||
|
|
3
README.md
vendored
3
README.md
vendored
|
@ -108,8 +108,9 @@ Each lemmy server can set its own moderation policy; appointing site-wide admins
|
||||||
|
|
||||||
Lemmy is free, open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project.
|
Lemmy is free, open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project.
|
||||||
|
|
||||||
- [Support on Liberapay.](https://liberapay.com/Lemmy)
|
- [Support on Liberapay](https://liberapay.com/Lemmy).
|
||||||
- [Support on Patreon](https://www.patreon.com/dessalines).
|
- [Support on Patreon](https://www.patreon.com/dessalines).
|
||||||
|
- [Support on OpenCollective](https://opencollective.com/lemmy).
|
||||||
- [List of Sponsors](https://dev.lemmy.ml/sponsors).
|
- [List of Sponsors](https://dev.lemmy.ml/sponsors).
|
||||||
|
|
||||||
### Crypto
|
### Crypto
|
||||||
|
|
2
ansible/VERSION
vendored
2
ansible/VERSION
vendored
|
@ -1 +1 @@
|
||||||
v0.6.45
|
v0.6.49
|
||||||
|
|
12
docker/dev/dev_deploy.sh
vendored
12
docker/dev/dev_deploy.sh
vendored
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Building from the dev branch for dev servers
|
|
||||||
git checkout dev
|
|
||||||
|
|
||||||
# Rebuilding dev docker
|
|
||||||
docker-compose build
|
|
||||||
docker tag dev_lemmy:latest dessalines/lemmy:dev
|
|
||||||
docker push dessalines/lemmy:dev
|
|
||||||
|
|
||||||
# SSH and pull it
|
|
||||||
ssh $LEMMY_USER@$LEMMY_HOST "cd ~/git/lemmy/docker/dev && docker pull dessalines/lemmy:dev && docker-compose up -d"
|
|
11
docker/dev/test_deploy.sh
vendored
Executable file
11
docker/dev/test_deploy.sh
vendored
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Rebuilding dev docker
|
||||||
|
docker-compose build
|
||||||
|
docker tag dev_lemmy:latest dessalines/lemmy:test
|
||||||
|
docker push dessalines/lemmy:test
|
||||||
|
|
||||||
|
# Run the playbook
|
||||||
|
pushd ../../../lemmy-ansible
|
||||||
|
ansible-playbook -i test playbooks/site.yml --vault-password-file vault_pass
|
||||||
|
popd
|
2
docker/prod/docker-compose.yml
vendored
2
docker/prod/docker-compose.yml
vendored
|
@ -12,7 +12,7 @@ services:
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
lemmy:
|
lemmy:
|
||||||
image: dessalines/lemmy:v0.6.45
|
image: dessalines/lemmy:v0.6.49
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:8536:8536"
|
- "127.0.0.1:8536:8536"
|
||||||
restart: always
|
restart: always
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
pub const VERSION: &str = "v0.6.45";
|
pub const VERSION: &str = "v0.6.49";
|
||||||
|
|
2
ui/assets/css/main.css
vendored
2
ui/assets/css/main.css
vendored
|
@ -156,7 +156,7 @@ hr {
|
||||||
}
|
}
|
||||||
|
|
||||||
.emoji {
|
.emoji {
|
||||||
height: 1.2em !important;
|
max-height: 1.2em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-wrap-truncate {
|
.text-wrap-truncate {
|
||||||
|
|
1
ui/package.json
vendored
1
ui/package.json
vendored
|
@ -14,6 +14,7 @@
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@joeattardi/emoji-button": "^2.12.1",
|
||||||
"@types/autosize": "^3.0.6",
|
"@types/autosize": "^3.0.6",
|
||||||
"@types/js-cookie": "^2.2.5",
|
"@types/js-cookie": "^2.2.5",
|
||||||
"@types/jwt-decode": "^2.2.1",
|
"@types/jwt-decode": "^2.2.1",
|
||||||
|
|
31
ui/src/components/comment-form.tsx
vendored
31
ui/src/components/comment-form.tsx
vendored
|
@ -17,10 +17,12 @@ import {
|
||||||
toast,
|
toast,
|
||||||
setupTribute,
|
setupTribute,
|
||||||
wsJsonToRes,
|
wsJsonToRes,
|
||||||
|
emojiPicker,
|
||||||
} from '../utils';
|
} from '../utils';
|
||||||
import { WebSocketService, UserService } from '../services';
|
import { WebSocketService, UserService } from '../services';
|
||||||
import autosize from 'autosize';
|
import autosize from 'autosize';
|
||||||
import Tribute from 'tributejs/src/Tribute.js';
|
import Tribute from 'tributejs/src/Tribute.js';
|
||||||
|
import emojiShortName from 'emoji-short-name';
|
||||||
import { i18n } from '../i18next';
|
import { i18n } from '../i18next';
|
||||||
|
|
||||||
interface CommentFormProps {
|
interface CommentFormProps {
|
||||||
|
@ -69,6 +71,8 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
|
|
||||||
this.tribute = setupTribute();
|
this.tribute = setupTribute();
|
||||||
|
this.setupEmojiPicker();
|
||||||
|
|
||||||
this.state = this.emptyState;
|
this.state = this.emptyState;
|
||||||
|
|
||||||
if (this.props.node) {
|
if (this.props.node) {
|
||||||
|
@ -209,6 +213,15 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
|
||||||
<use xlinkHref="#icon-spinner"></use>
|
<use xlinkHref="#icon-spinner"></use>
|
||||||
</svg>
|
</svg>
|
||||||
)}
|
)}
|
||||||
|
<span
|
||||||
|
onClick={linkEvent(this, this.handleEmojiPickerClick)}
|
||||||
|
class="pointer unselectable d-inline-block mr-3 float-right text-muted font-weight-bold"
|
||||||
|
data-tippy-content={i18n.t('emoji_picker')}
|
||||||
|
>
|
||||||
|
<svg class="icon icon-inline">
|
||||||
|
<use xlinkHref="#icon-smile"></use>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -216,6 +229,20 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupEmojiPicker() {
|
||||||
|
emojiPicker.on('emoji', twemojiHtmlStr => {
|
||||||
|
if (this.state.commentForm.content == null) {
|
||||||
|
this.state.commentForm.content = '';
|
||||||
|
}
|
||||||
|
var el = document.createElement('div');
|
||||||
|
el.innerHTML = twemojiHtmlStr;
|
||||||
|
let nativeUnicode = (el.childNodes[0] as HTMLElement).getAttribute('alt');
|
||||||
|
let shortName = `:${emojiShortName[nativeUnicode]}:`;
|
||||||
|
this.state.commentForm.content += shortName;
|
||||||
|
this.setState(this.state);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
handleFinished() {
|
handleFinished() {
|
||||||
this.state.previewMode = false;
|
this.state.previewMode = false;
|
||||||
this.state.loading = false;
|
this.state.loading = false;
|
||||||
|
@ -242,6 +269,10 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
|
||||||
i.setState(i.state);
|
i.setState(i.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleEmojiPickerClick(_i: CommentForm, event: any) {
|
||||||
|
emojiPicker.togglePicker(event.target);
|
||||||
|
}
|
||||||
|
|
||||||
handleCommentContentChange(i: CommentForm, event: any) {
|
handleCommentContentChange(i: CommentForm, event: any) {
|
||||||
i.state.commentForm.content = event.target.value;
|
i.state.commentForm.content = event.target.value;
|
||||||
i.setState(i.state);
|
i.setState(i.state);
|
||||||
|
|
35
ui/src/components/post-form.tsx
vendored
35
ui/src/components/post-form.tsx
vendored
|
@ -34,9 +34,11 @@ import {
|
||||||
randomStr,
|
randomStr,
|
||||||
setupTribute,
|
setupTribute,
|
||||||
setupTippy,
|
setupTippy,
|
||||||
|
emojiPicker,
|
||||||
} from '../utils';
|
} from '../utils';
|
||||||
import autosize from 'autosize';
|
import autosize from 'autosize';
|
||||||
import Tribute from 'tributejs/src/Tribute.js';
|
import Tribute from 'tributejs/src/Tribute.js';
|
||||||
|
import emojiShortName from 'emoji-short-name';
|
||||||
import Selectr from 'mobius1-selectr';
|
import Selectr from 'mobius1-selectr';
|
||||||
import { i18n } from '../i18next';
|
import { i18n } from '../i18next';
|
||||||
|
|
||||||
|
@ -92,6 +94,8 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
this.fetchPageTitle = debounce(this.fetchPageTitle).bind(this);
|
this.fetchPageTitle = debounce(this.fetchPageTitle).bind(this);
|
||||||
|
|
||||||
this.tribute = setupTribute();
|
this.tribute = setupTribute();
|
||||||
|
this.setupEmojiPicker();
|
||||||
|
|
||||||
this.state = this.emptyState;
|
this.state = this.emptyState;
|
||||||
|
|
||||||
if (this.props.post) {
|
if (this.props.post) {
|
||||||
|
@ -191,7 +195,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
<label
|
<label
|
||||||
htmlFor="file-upload"
|
htmlFor="file-upload"
|
||||||
className={`${UserService.Instance.user &&
|
className={`${UserService.Instance.user &&
|
||||||
'pointer'} d-inline-block float-right text-muted h6 font-weight-bold`}
|
'pointer'} d-inline-block float-right text-muted font-weight-bold`}
|
||||||
data-tippy-content={i18n.t('upload_image')}
|
data-tippy-content={i18n.t('upload_image')}
|
||||||
>
|
>
|
||||||
<svg class="icon icon-inline">
|
<svg class="icon icon-inline">
|
||||||
|
@ -294,13 +298,22 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
<a
|
<a
|
||||||
href={markdownHelpUrl}
|
href={markdownHelpUrl}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
class="d-inline-block float-right text-muted h6 font-weight-bold"
|
class="d-inline-block float-right text-muted font-weight-bold"
|
||||||
title={i18n.t('formatting_help')}
|
title={i18n.t('formatting_help')}
|
||||||
>
|
>
|
||||||
<svg class="icon icon-inline">
|
<svg class="icon icon-inline">
|
||||||
<use xlinkHref="#icon-help-circle"></use>
|
<use xlinkHref="#icon-help-circle"></use>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
<span
|
||||||
|
onClick={linkEvent(this, this.handleEmojiPickerClick)}
|
||||||
|
class="pointer unselectable d-inline-block mr-3 float-right text-muted font-weight-bold"
|
||||||
|
data-tippy-content={i18n.t('emoji_picker')}
|
||||||
|
>
|
||||||
|
<svg class="icon icon-inline">
|
||||||
|
<use xlinkHref="#icon-smile"></use>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{!this.props.post && (
|
{!this.props.post && (
|
||||||
|
@ -369,6 +382,20 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupEmojiPicker() {
|
||||||
|
emojiPicker.on('emoji', twemojiHtmlStr => {
|
||||||
|
if (this.state.postForm.body == null) {
|
||||||
|
this.state.postForm.body = '';
|
||||||
|
}
|
||||||
|
var el = document.createElement('div');
|
||||||
|
el.innerHTML = twemojiHtmlStr;
|
||||||
|
let nativeUnicode = (el.childNodes[0] as HTMLElement).getAttribute('alt');
|
||||||
|
let shortName = `:${emojiShortName[nativeUnicode]}:`;
|
||||||
|
this.state.postForm.body += shortName;
|
||||||
|
this.setState(this.state);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
handlePostSubmit(i: PostForm, event: any) {
|
handlePostSubmit(i: PostForm, event: any) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (i.props.post) {
|
if (i.props.post) {
|
||||||
|
@ -512,6 +539,10 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleEmojiPickerClick(_i: PostForm, event: any) {
|
||||||
|
emojiPicker.togglePicker(event.target);
|
||||||
|
}
|
||||||
|
|
||||||
parseMessage(msg: WebSocketJsonResponse) {
|
parseMessage(msg: WebSocketJsonResponse) {
|
||||||
let res = wsJsonToRes(msg);
|
let res = wsJsonToRes(msg);
|
||||||
if (msg.error) {
|
if (msg.error) {
|
||||||
|
|
8
ui/src/components/sponsors.tsx
vendored
8
ui/src/components/sponsors.tsx
vendored
|
@ -5,9 +5,9 @@ import { T } from 'inferno-i18next';
|
||||||
import { repoUrl } from '../utils';
|
import { repoUrl } from '../utils';
|
||||||
|
|
||||||
let general = [
|
let general = [
|
||||||
|
'alexx henry',
|
||||||
'Nathan J. Goode',
|
'Nathan J. Goode',
|
||||||
'Andre Vallestero',
|
'Andre Vallestero',
|
||||||
'riccardo',
|
|
||||||
'NotTooHighToHack',
|
'NotTooHighToHack',
|
||||||
];
|
];
|
||||||
let highlighted = ['Alex Benishek'];
|
let highlighted = ['Alex Benishek'];
|
||||||
|
@ -57,6 +57,12 @@ export class Sponsors extends Component<any, any> {
|
||||||
>
|
>
|
||||||
{i18n.t('support_on_patreon')}
|
{i18n.t('support_on_patreon')}
|
||||||
</a>
|
</a>
|
||||||
|
<a
|
||||||
|
class="btn btn-secondary ml-2"
|
||||||
|
href="https://opencollective.com/lemmy"
|
||||||
|
>
|
||||||
|
{i18n.t('support_on_open_collective')}
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
3
ui/src/components/symbols.tsx
vendored
3
ui/src/components/symbols.tsx
vendored
File diff suppressed because one or more lines are too long
14
ui/src/utils.ts
vendored
14
ui/src/utils.ts
vendored
|
@ -43,6 +43,7 @@ import twemoji from 'twemoji';
|
||||||
import emojiShortName from 'emoji-short-name';
|
import emojiShortName from 'emoji-short-name';
|
||||||
import Toastify from 'toastify-js';
|
import Toastify from 'toastify-js';
|
||||||
import tippy from 'tippy.js';
|
import tippy from 'tippy.js';
|
||||||
|
import EmojiButton from '@joeattardi/emoji-button';
|
||||||
|
|
||||||
export const repoUrl = 'https://github.com/LemmyNet/lemmy';
|
export const repoUrl = 'https://github.com/LemmyNet/lemmy';
|
||||||
export const helpGuideUrl = '/docs/about_guide.html';
|
export const helpGuideUrl = '/docs/about_guide.html';
|
||||||
|
@ -88,6 +89,14 @@ export const themes = [
|
||||||
'i386',
|
'i386',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const emojiPicker = new EmojiButton({
|
||||||
|
// Use the emojiShortName from native
|
||||||
|
style: 'twemoji',
|
||||||
|
theme: 'dark',
|
||||||
|
position: 'auto-start',
|
||||||
|
// TODO i18n
|
||||||
|
});
|
||||||
|
|
||||||
export function randomStr() {
|
export function randomStr() {
|
||||||
return Math.random()
|
return Math.random()
|
||||||
.toString(36)
|
.toString(36)
|
||||||
|
@ -473,8 +482,9 @@ export function setupTribute(): Tribute {
|
||||||
{
|
{
|
||||||
trigger: ':',
|
trigger: ':',
|
||||||
menuItemTemplate: (item: any) => {
|
menuItemTemplate: (item: any) => {
|
||||||
let emoji = `:${item.original.key}:`;
|
let shortName = `:${item.original.key}:`;
|
||||||
return `${item.original.val} ${emoji}`;
|
let twemojiIcon = twemoji.parse(item.original.val);
|
||||||
|
return `${twemojiIcon} ${shortName}`;
|
||||||
},
|
},
|
||||||
selectTemplate: (item: any) => {
|
selectTemplate: (item: any) => {
|
||||||
return `:${item.original.key}:`;
|
return `:${item.original.key}:`;
|
||||||
|
|
2
ui/src/version.ts
vendored
2
ui/src/version.ts
vendored
|
@ -1 +1 @@
|
||||||
export const version: string = 'v0.6.45';
|
export const version: string = 'v0.6.49';
|
||||||
|
|
2
ui/translations/en.json
vendored
2
ui/translations/en.json
vendored
|
@ -190,6 +190,7 @@
|
||||||
"Lemmy is free, <1>open-source</1> software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:",
|
"Lemmy is free, <1>open-source</1> software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:",
|
||||||
"support_on_patreon": "Support on Patreon",
|
"support_on_patreon": "Support on Patreon",
|
||||||
"support_on_liberapay": "Support on Liberapay",
|
"support_on_liberapay": "Support on Liberapay",
|
||||||
|
"support_on_open_collective": "Support on OpenCollective",
|
||||||
"donate_to_lemmy": "Donate to Lemmy",
|
"donate_to_lemmy": "Donate to Lemmy",
|
||||||
"donate": "Donate",
|
"donate": "Donate",
|
||||||
"general_sponsors":
|
"general_sponsors":
|
||||||
|
@ -255,5 +256,6 @@
|
||||||
"couldnt_update_private_message": "Couldn't update private message.",
|
"couldnt_update_private_message": "Couldn't update private message.",
|
||||||
"time": "Time",
|
"time": "Time",
|
||||||
"action": "Action",
|
"action": "Action",
|
||||||
|
"emoji_picker": "Emoji Picker",
|
||||||
"block_leaving": "Are you sure you want to leave?"
|
"block_leaving": "Are you sure you want to leave?"
|
||||||
}
|
}
|
||||||
|
|
152
ui/translations/ka.json
vendored
152
ui/translations/ka.json
vendored
|
@ -71,5 +71,155 @@
|
||||||
"unsticky": "unsticky",
|
"unsticky": "unsticky",
|
||||||
"remove_as_mod": "მოხსენი როგორც მოდერატორი",
|
"remove_as_mod": "მოხსენი როგორც მოდერატორი",
|
||||||
"remove_as_admin": "მოხსენი როგორც ადმინი",
|
"remove_as_admin": "მოხსენი როგორც ადმინი",
|
||||||
"delete_account_confirm": "გაფთხილება: ეს შენს ყველაფერს წაშლის. პაროლი ჩაწერეთ რომ დაადასტუროთ."
|
"delete_account_confirm": "გაფთხილება: ეს შენს ყველაფერს წაშლის. პაროლი ჩაწერეთ რომ დაადასტუროთ.",
|
||||||
|
"creator": "შემქნელი",
|
||||||
|
"username": "მომხმარებლის სახელი",
|
||||||
|
"email_or_username": "ელ-პოსტა ან მომხმარებლის სახელი",
|
||||||
|
"number_of_users": "მომხმარებელი",
|
||||||
|
"number_of_users_plural": "მომხმარებლები",
|
||||||
|
"number_of_subscribers": "გამომწერი",
|
||||||
|
"number_of_subscribers_plural": "გამომწერები",
|
||||||
|
"number_of_points": "ქულა",
|
||||||
|
"number_of_points_plural": "ქულა",
|
||||||
|
"number_online": "მომხმარებელი საიტზე",
|
||||||
|
"number_online_plural": "მომხმარებელი საიტზე",
|
||||||
|
"name": "სახელი",
|
||||||
|
"title": "სათაური",
|
||||||
|
"category": "კატეგორია",
|
||||||
|
"subscribers": "გამომწერი",
|
||||||
|
"both": "ორივე",
|
||||||
|
"saved": "შანახული",
|
||||||
|
"unsubscribe": "გამოწერის გაუქმნება",
|
||||||
|
"subscribe": "გამოწერა",
|
||||||
|
"subscribed": "გამოწერილია",
|
||||||
|
"prev": "წუნა",
|
||||||
|
"next": "შემდეგი",
|
||||||
|
"sidebar": "Sidebar",
|
||||||
|
"sort_type": "სორტირების ტიპი",
|
||||||
|
"inbox": "Inbox",
|
||||||
|
"inbox_for": "<1>{{user}}</1>-s Inbox",
|
||||||
|
"mark_all_as_read": "მონიშვნა ყველასი როგორც წაკითხული",
|
||||||
|
"type": "ტიპი",
|
||||||
|
"unread": "წაუკითხავია",
|
||||||
|
"mentions": "ხსენებები",
|
||||||
|
"reply_sent": "პასუხი გაგზავნილია",
|
||||||
|
"message_sent": "მესეჯი",
|
||||||
|
"search": "ძებმა",
|
||||||
|
"overview": "გადახედვა",
|
||||||
|
"view": "ნახვა",
|
||||||
|
"logout": "გასვლა",
|
||||||
|
"login_sign_up": "შესვლა ან რეგისტრაცია",
|
||||||
|
"login": "შესვლა",
|
||||||
|
"sign_up": "რეგისტრაცია",
|
||||||
|
"unread_messages": "წაუკითხავი მესეჯები",
|
||||||
|
"messages": "მესეჯები",
|
||||||
|
"password": "პაროლი",
|
||||||
|
"verify_password": "პაროლის დადასტურება",
|
||||||
|
"old_password": "ძველი პაროლი",
|
||||||
|
"forgot_password": "აღგდენა",
|
||||||
|
"reset_password_mail_sent": "ელ-პოსტა შეამოწმეთ",
|
||||||
|
"password_change": "პაროლის შეცვლა",
|
||||||
|
"new_password": "ახალი პაროლი",
|
||||||
|
"email": "ელ-პოსტა",
|
||||||
|
"matrix_user_id": "მატრიცული მომხმარებელი",
|
||||||
|
"private_message_disclaimer": ".",
|
||||||
|
"send_notifications_to_email": "შეტყობინების გაგზავნა ელ-პოსტაზე",
|
||||||
|
"optional": "არასავალდებულო",
|
||||||
|
"expires": "ვადა გასდის",
|
||||||
|
"language": "ენა",
|
||||||
|
"browser_default": "Browser Default",
|
||||||
|
"enable_downvotes": "არმოწონების ჩართვა",
|
||||||
|
"upvote": "მოწონება",
|
||||||
|
"downvote": "არ მოწონება",
|
||||||
|
"open_registration": "რეგისტრაციის გახსნა",
|
||||||
|
"registration_closed": "რეგისტრაცია დახურულია",
|
||||||
|
"enable_nsfw": "Enable NSFW",
|
||||||
|
"url": "მისამართი",
|
||||||
|
"body": "ტექსტი",
|
||||||
|
"copy_suggested_title": "დაკოპირება რეკომინდებულის სათაური: {{title}}",
|
||||||
|
"community": "თემა",
|
||||||
|
"expand_here": "Expand here",
|
||||||
|
"subscribe_to_communities": "Subscribe to some <1>communities</1>.",
|
||||||
|
"chat": "ჩეტი",
|
||||||
|
"recent_comments": "ბოლო კომენტარები",
|
||||||
|
"no_results": "0 შედეგი",
|
||||||
|
"setup": "Setup",
|
||||||
|
"lemmy_instance_setup": "Lemmy Instance Setup",
|
||||||
|
"setup_admin": "Set Up Site Administrator",
|
||||||
|
"your_site": "შენი გვერდი",
|
||||||
|
"modified": "რედაკტირებული",
|
||||||
|
"nsfw": "NSFW",
|
||||||
|
"notifications_error": "გთხოვთ იხმაღეთ Chome ან Firefox შეტყობინებისთვის",
|
||||||
|
"no_email_setup": "This server hasn't correctly set up email.",
|
||||||
|
"downvotes_disabled": "არმოწონები გამორთულია",
|
||||||
|
"number_of_upvotes": "მოწონება",
|
||||||
|
"number_of_upvotes_plural": "მოწონება",
|
||||||
|
"number_of_downvotes": "არ მოწონება",
|
||||||
|
"number_of_downvotes_plural": "არ მოწონება",
|
||||||
|
"hot": "ცხელი",
|
||||||
|
"new": "ახალი",
|
||||||
|
"old": "ძველი",
|
||||||
|
"top_day": "ტოპ დღეს",
|
||||||
|
"week": "კვირა",
|
||||||
|
"month": "თვე",
|
||||||
|
"year": "წელი",
|
||||||
|
"all": "ყველა",
|
||||||
|
"top": "ტოპ",
|
||||||
|
"api": "API",
|
||||||
|
"show_nsfw": "Show NSFW content",
|
||||||
|
"related_posts": "ეს პოსტები შეიძლება ერთმანეც ეხება",
|
||||||
|
"cross_post": "გადაკვეთა-პოსტი",
|
||||||
|
"general_sponsors": "General Sponsors are those that pledged $10 to $39 to Lemmy.",
|
||||||
|
"cross_posted_to": "გადაკვეთა-პოსტი გაკეთდა: ",
|
||||||
|
"subscribed_to_communities": "მიყვები <1>communities</1>",
|
||||||
|
"trending_communities": "ტრენდული <1>communities</1>",
|
||||||
|
"list_of_communities": "ყველა თემა",
|
||||||
|
"number_of_communities": "თემა",
|
||||||
|
"number_of_communities_plural": "თემები",
|
||||||
|
"landing": "Lemmy is a <1>link aggregator</1> / reddit alternative, intended to work in the <2>fediverse</2>.<3></3>It's self-hostable, has live-updating comment threads, and is tiny (<4>~80kB</4>). Federation into the ActivityPub network is on the roadmap. <5></5>This is a <6>very early beta version</6>, and a lot of features are currently broken or missing. <7></7>Suggest new features or report bugs <8>here.</8><9></9>Made with <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.",
|
||||||
|
"docs": "დოკუმენტაცია",
|
||||||
|
"couldnt_like_comment": "კომენტარის მოწონება ვერ მოხერხდა.",
|
||||||
|
"couldnt_update_comment": "კომენტარის განახლება ვერ მოხერხდა.",
|
||||||
|
"replies": "პასუხები",
|
||||||
|
"theme": "საიტის თემა",
|
||||||
|
"sponsors": "სპონსორები",
|
||||||
|
"sponsors_of_lemmy": "Sponsors",
|
||||||
|
"sponsor_message": "Lemmy is free, <1>open-source</1> software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:",
|
||||||
|
"support_on_patreon": "Support on Patreon",
|
||||||
|
"support_on_liberapay": "Support on Liberapay",
|
||||||
|
"donate_to_lemmy": "Donate to Lemmy",
|
||||||
|
"no_comment_edit_allowed": "კომენტარის რედაკტირება არ შეიძლება.",
|
||||||
|
"donate": "Donate",
|
||||||
|
"crypto": "Crypto",
|
||||||
|
"bitcoin": "Bitcoin",
|
||||||
|
"ethereum": "Ethereum",
|
||||||
|
"code": "კოდი",
|
||||||
|
"joined": "დაემატა",
|
||||||
|
"by": "by",
|
||||||
|
"to": "to",
|
||||||
|
"from": "from",
|
||||||
|
"transfer_community": "transfer community",
|
||||||
|
"transfer_site": "transfer site",
|
||||||
|
"are_you_sure": "დარწმუნებული ხარ?",
|
||||||
|
"yes": "კი",
|
||||||
|
"no": "არა",
|
||||||
|
"powered_by": "Powered by",
|
||||||
|
"not_logged_in": "შასული არ ხართ",
|
||||||
|
"logged_in": "შაული ხართ.",
|
||||||
|
"community_ban": "შენ ამ თემისგან გაშავებული ხარ.",
|
||||||
|
"site_ban": "საიტიდან გაშავებული ხარ.",
|
||||||
|
"couldnt_create_comment": "კომენტარის შექმნა ვერ მოხერხდა.",
|
||||||
|
"couldnt_find_community": "ტემა არ მოიძებნა.",
|
||||||
|
"couldnt_save_comment": "კომენტარის შენახვა ვერ მოხერხდა.",
|
||||||
|
"couldnt_get_comments": "კომენტარების ნახვა ვერ მოხერხდა.",
|
||||||
|
"no_post_edit_allowed": "პოსტის რედაკტირება არ შეიძლება.",
|
||||||
|
"no_community_edit_allowed": "თემის რედაკტირება არ შეიძლება.",
|
||||||
|
"couldnt_update_community": "თემა ვერ განახლდა.",
|
||||||
|
"community_already_exists": "ეს თემა უკვე არსებობს.",
|
||||||
|
"community_follower_already_exists": "თემის ფოლოვორი უკვე არსებობს.",
|
||||||
|
"community_user_already_banned": "თემის მომხმარებელი უკვე შავ სიაშია.",
|
||||||
|
"couldnt_like_post": "პოსტის მოწონება ვერ მოხერხდა.",
|
||||||
|
"community_moderator_already_exists": "ამ თემის მოდერატორი უკვე არსებობს.",
|
||||||
|
"couldnt_create_post": "პოსტი ვერ შეიქმნა.",
|
||||||
|
"post_title_too_long": "პოსტის სათაური ძალიან გრძელია."
|
||||||
}
|
}
|
||||||
|
|
75
ui/yarn.lock
vendored
75
ui/yarn.lock
vendored
|
@ -126,6 +126,51 @@
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
|
"@fortawesome/fontawesome-common-types@^0.2.28":
|
||||||
|
version "0.2.28"
|
||||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz#1091bdfe63b3f139441e9cba27aa022bff97d8b2"
|
||||||
|
integrity sha512-gtis2/5yLdfI6n0ia0jH7NJs5i/Z/8M/ZbQL6jXQhCthEOe5Cr5NcQPhgTvFxNOtURE03/ZqUcEskdn2M+QaBg==
|
||||||
|
|
||||||
|
"@fortawesome/fontawesome-svg-core@^1.2.22":
|
||||||
|
version "1.2.28"
|
||||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.28.tgz#e5b8c8814ef375f01f5d7c132d3c3a2f83a3abf9"
|
||||||
|
integrity sha512-4LeaNHWvrneoU0i8b5RTOJHKx7E+y7jYejplR7uSVB34+mp3Veg7cbKk7NBCLiI4TyoWS1wh9ZdoyLJR8wSAdg==
|
||||||
|
dependencies:
|
||||||
|
"@fortawesome/fontawesome-common-types" "^0.2.28"
|
||||||
|
|
||||||
|
"@fortawesome/free-regular-svg-icons@^5.10.2":
|
||||||
|
version "5.13.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.13.0.tgz#925a13d8bdda0678f71551828cac80ab47b8150c"
|
||||||
|
integrity sha512-70FAyiS5j+ANYD4dh9NGowTorNDnyvQHHpCM7FpnF7GxtDjBUCKdrFqCPzesEIpNDFNd+La3vex+jDk4nnUfpA==
|
||||||
|
dependencies:
|
||||||
|
"@fortawesome/fontawesome-common-types" "^0.2.28"
|
||||||
|
|
||||||
|
"@fortawesome/free-solid-svg-icons@^5.10.2":
|
||||||
|
version "5.13.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.0.tgz#44d9118668ad96b4fd5c9434a43efc5903525739"
|
||||||
|
integrity sha512-IHUgDJdomv6YtG4p3zl1B5wWf9ffinHIvebqQOmV3U+3SLw4fC+LUCCgwfETkbTtjy5/Qws2VoVf6z/ETQpFpg==
|
||||||
|
dependencies:
|
||||||
|
"@fortawesome/fontawesome-common-types" "^0.2.28"
|
||||||
|
|
||||||
|
"@joeattardi/emoji-button@^2.12.1":
|
||||||
|
version "2.12.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@joeattardi/emoji-button/-/emoji-button-2.12.1.tgz#190df7c00721e04742ed6f8852db828798a4cf98"
|
||||||
|
integrity sha512-rUuCXIcv4mRFK2IUKarYJN6J667wtH234smb1aQILzRf3/ycOoa6yUwnnvjxZeXMsPhuTnz15ndMOP2DhO5nNw==
|
||||||
|
dependencies:
|
||||||
|
"@fortawesome/fontawesome-svg-core" "^1.2.22"
|
||||||
|
"@fortawesome/free-regular-svg-icons" "^5.10.2"
|
||||||
|
"@fortawesome/free-solid-svg-icons" "^5.10.2"
|
||||||
|
"@popperjs/core" "^2.0.0"
|
||||||
|
focus-trap "^5.1.0"
|
||||||
|
tiny-emitter "^2.1.0"
|
||||||
|
tslib "^1.10.0"
|
||||||
|
twemoji "^12.1.5"
|
||||||
|
|
||||||
|
"@popperjs/core@^2.0.0":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.2.3.tgz#0ae22b5650ab0b8fe508047245b66e71fc59e983"
|
||||||
|
integrity sha512-68EQPzEZRrpFavFX40V2+80eqzQIhgza2AGTXW+i8laxSA4It+Y13rmZInrAYoIujp8YO7YJPbvgOesDZcIulQ==
|
||||||
|
|
||||||
"@popperjs/core@^2.1.1":
|
"@popperjs/core@^2.1.1":
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.1.1.tgz#12c572ab88ef7345b43f21883fca26631c223085"
|
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.1.1.tgz#12c572ab88ef7345b43f21883fca26631c223085"
|
||||||
|
@ -1829,6 +1874,14 @@ fliplog@^0.3.13:
|
||||||
dependencies:
|
dependencies:
|
||||||
chain-able "^1.0.1"
|
chain-able "^1.0.1"
|
||||||
|
|
||||||
|
focus-trap@^5.1.0:
|
||||||
|
version "5.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-5.1.0.tgz#64a0bfabd95c382103397dbc96bfef3a3cf8e5ad"
|
||||||
|
integrity sha512-CkB/nrO55069QAUjWFBpX6oc+9V90Qhgpe6fBWApzruMq5gnlh90Oo7iSSDK7pKiV5ugG6OY2AXM5mxcmL3lwQ==
|
||||||
|
dependencies:
|
||||||
|
tabbable "^4.0.0"
|
||||||
|
xtend "^4.0.1"
|
||||||
|
|
||||||
for-in@^1.0.1, for-in@^1.0.2:
|
for-in@^1.0.1, for-in@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||||
|
@ -4473,6 +4526,11 @@ symbol-observable@^1.1.0:
|
||||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||||
|
|
||||||
|
tabbable@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-4.0.0.tgz#5bff1d1135df1482cf0f0206434f15eadbeb9261"
|
||||||
|
integrity sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==
|
||||||
|
|
||||||
table@^5.2.3:
|
table@^5.2.3:
|
||||||
version "5.4.6"
|
version "5.4.6"
|
||||||
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
|
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
|
||||||
|
@ -4502,6 +4560,11 @@ through@^2.3.6:
|
||||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||||
|
|
||||||
|
tiny-emitter@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
|
||||||
|
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
|
||||||
|
|
||||||
tiny-invariant@^1.0.2:
|
tiny-invariant@^1.0.2:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
|
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
|
||||||
|
@ -4609,6 +4672,11 @@ ts-transform-inferno@^4.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/ts-transform-inferno/-/ts-transform-inferno-4.0.2.tgz#06b9be45edf874ba7a6ebfb6107ba782509c6afe"
|
resolved "https://registry.yarnpkg.com/ts-transform-inferno/-/ts-transform-inferno-4.0.2.tgz#06b9be45edf874ba7a6ebfb6107ba782509c6afe"
|
||||||
integrity sha512-CZb4+w/2l2zikPZ/c51fi3n+qnR2HCEfAS73oGQB80aqRLffkZqm25kYYTMmqUW2+oVfs4M5AZa0z14cvxlQ5w==
|
integrity sha512-CZb4+w/2l2zikPZ/c51fi3n+qnR2HCEfAS73oGQB80aqRLffkZqm25kYYTMmqUW2+oVfs4M5AZa0z14cvxlQ5w==
|
||||||
|
|
||||||
|
tslib@^1.10.0:
|
||||||
|
version "1.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
|
||||||
|
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
|
||||||
|
|
||||||
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
|
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
|
||||||
version "1.10.0"
|
version "1.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||||
|
@ -4638,7 +4706,7 @@ twemoji-parser@12.1.3:
|
||||||
resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-12.1.3.tgz#916c0153e77bd5f1011e7a99cbeacf52e43c9371"
|
resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-12.1.3.tgz#916c0153e77bd5f1011e7a99cbeacf52e43c9371"
|
||||||
integrity sha512-ND4LZXF4X92/PFrzSgGkq6KPPg8swy/U0yRw1k/+izWRVmq1HYi3khPwV3XIB6FRudgVICAaBhJfW8e8G3HC7Q==
|
integrity sha512-ND4LZXF4X92/PFrzSgGkq6KPPg8swy/U0yRw1k/+izWRVmq1HYi3khPwV3XIB6FRudgVICAaBhJfW8e8G3HC7Q==
|
||||||
|
|
||||||
twemoji@^12.1.2:
|
twemoji@^12.1.2, twemoji@^12.1.5:
|
||||||
version "12.1.5"
|
version "12.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-12.1.5.tgz#a961fb65a1afcb1f729ad7e59391f9fe969820b9"
|
resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-12.1.5.tgz#a961fb65a1afcb1f729ad7e59391f9fe969820b9"
|
||||||
integrity sha512-B0PBVy5xomwb1M/WZxf/IqPZfnoIYy1skXnlHjMwLwTNfZ9ljh8VgWQktAPcJXu8080WoEh6YwQGPVhDVqvrVQ==
|
integrity sha512-B0PBVy5xomwb1M/WZxf/IqPZfnoIYy1skXnlHjMwLwTNfZ9ljh8VgWQktAPcJXu8080WoEh6YwQGPVhDVqvrVQ==
|
||||||
|
@ -4890,6 +4958,11 @@ xregexp@^4.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime-corejs3" "^7.8.3"
|
"@babel/runtime-corejs3" "^7.8.3"
|
||||||
|
|
||||||
|
xtend@^4.0.1:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||||
|
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||||
|
|
||||||
yaml@^1.7.2:
|
yaml@^1.7.2:
|
||||||
version "1.7.2"
|
version "1.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2"
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2"
|
||||||
|
|
Loading…
Reference in a new issue