summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-04-14 10:54:04 -0400
committerDessalines <tyhou13@gmx.com>2020-04-14 10:54:04 -0400
commit6d5518cbd4499a9266915d4e7acb0c26aef8c125 (patch)
treecacc596ec35b46ea21c32ed39e435db0f676b24c /ui
parentc92201a6743650a08b58413733d15d2559c06c8b (diff)
parentb9aef5891fbb8191a0d9de5a40c23f7cfbd7c8f9 (diff)
Merge branch 'dev' into admin_settings
Diffstat (limited to 'ui')
-rw-r--r--ui/assets/css/main.css2
-rw-r--r--ui/package.json1
-rw-r--r--ui/src/components/comment-form.tsx31
-rw-r--r--ui/src/components/post-form.tsx35
-rw-r--r--ui/src/components/sponsors.tsx8
-rw-r--r--ui/src/components/symbols.tsx3
-rw-r--r--ui/src/utils.ts14
-rw-r--r--ui/src/version.ts2
-rw-r--r--ui/translations/en.json2
-rw-r--r--ui/translations/ka.json152
-rw-r--r--ui/yarn.lock75
11 files changed, 316 insertions, 9 deletions
diff --git a/ui/assets/css/main.css b/ui/assets/css/main.css
index 1c8206e3..bf249e5b 100644
--- a/ui/assets/css/main.css
+++ b/ui/assets/css/main.css
@@ -156,7 +156,7 @@ hr {
}
.emoji {
- height: 1.2em !important;
+ max-height: 1.2em !important;
}
.text-wrap-truncate {
diff --git a/ui/package.json b/ui/package.json
index 7d946614..25ee2e00 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -14,6 +14,7 @@
},
"keywords": [],
"dependencies": {
+ "@joeattardi/emoji-button": "^2.12.1",
"@types/autosize": "^3.0.6",
"@types/js-cookie": "^2.2.5",
"@types/jwt-decode": "^2.2.1",
diff --git a/ui/src/components/comment-form.tsx b/ui/src/components/comment-form.tsx
index ae3e7cfc..5239eb2c 100644
--- a/ui/src/components/comment-form.tsx
+++ b/ui/src/components/comment-form.tsx
@@ -17,10 +17,12 @@ import {
toast,
setupTribute,
wsJsonToRes,
+ emojiPicker,
} from '../utils';
import { WebSocketService, UserService } from '../services';
import autosize from 'autosize';
import Tribute from 'tributejs/src/Tribute.js';
+import emojiShortName from 'emoji-short-name';
import { i18n } from '../i18next';
interface CommentFormProps {
@@ -69,6 +71,8 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
super(props, context);
this.tribute = setupTribute();
+ this.setupEmojiPicker();
+
this.state = this.emptyState;
if (this.props.node) {
@@ -209,6 +213,15 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
<use xlinkHref="#icon-spinner"></use>
</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>
</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() {
this.state.previewMode = false;
this.state.loading = false;
@@ -242,6 +269,10 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
i.setState(i.state);
}
+ handleEmojiPickerClick(_i: CommentForm, event: any) {
+ emojiPicker.togglePicker(event.target);
+ }
+
handleCommentContentChange(i: CommentForm, event: any) {
i.state.commentForm.content = event.target.value;
i.setState(i.state);
diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx
index 47920b9b..912d8e58 100644
--- a/ui/src/components/post-form.tsx
+++ b/ui/src/components/post-form.tsx
@@ -34,9 +34,11 @@ import {
randomStr,
setupTribute,
setupTippy,
+ emojiPicker,
} from '../utils';
import autosize from 'autosize';
import Tribute from 'tributejs/src/Tribute.js';
+import emojiShortName from 'emoji-short-name';
import Selectr from 'mobius1-selectr';
import { i18n } from '../i18next';
@@ -92,6 +94,8 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
this.fetchPageTitle = debounce(this.fetchPageTitle).bind(this);
this.tribute = setupTribute();
+ this.setupEmojiPicker();
+
this.state = this.emptyState;
if (this.props.post) {
@@ -191,7 +195,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
<label
htmlFor="file-upload"
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')}
>
<svg class="icon icon-inline">
@@ -294,13 +298,22 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
<a
href={markdownHelpUrl}
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')}
>
<svg class="icon icon-inline">
<use xlinkHref="#icon-help-circle"></use>
</svg>
</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>
{!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) {
event.preventDefault();
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) {
let res = wsJsonToRes(msg);
if (msg.error) {
diff --git a/ui/src/components/sponsors.tsx b/ui/src/components/sponsors.tsx
index 643153e6..cd7e14c5 100644
--- a/ui/src/components/sponsors.tsx
+++ b/ui/src/components/sponsors.tsx
@@ -5,9 +5,9 @@ import { T } from 'inferno-i18next';
import { repoUrl } from '../utils';
let general = [
+ 'alexx henry',
'Nathan J. Goode',
'Andre Vallestero',
- 'riccardo',
'NotTooHighToHack',
];
let highlighted = ['Alex Benishek'];
@@ -57,6 +57,12 @@ export class Sponsors extends Component<any, any> {
>
{i18n.t('support_on_patreon')}
</a>
+ <a
+ class="btn btn-secondary ml-2"
+ href="https://opencollective.com/lemmy"
+ >
+ {i18n.t('support_on_open_collective')}
+ </a>
</div>
);
}
diff --git a/ui/src/components/symbols.tsx b/ui/src/components/symbols.tsx
index 87ba879e..cdb7436a 100644
--- a/ui/src/components/symbols.tsx
+++ b/ui/src/components/symbols.tsx
@@ -18,6 +18,9 @@ export class Symbols extends Component<any, any> {
<symbol id="icon-settings" viewBox="0 0 24 24">
<path d="M16 12c0-1.104-0.449-2.106-1.172-2.828s-1.724-1.172-2.828-1.172-2.106 0.449-2.828 1.172-1.172 1.724-1.172 2.828 0.449 2.106 1.172 2.828 1.724 1.172 2.828 1.172 2.106-0.449 2.828-1.172 1.172-1.724 1.172-2.828zM14 12c0 0.553-0.223 1.051-0.586 1.414s-0.861 0.586-1.414 0.586-1.051-0.223-1.414-0.586-0.586-0.861-0.586-1.414 0.223-1.051 0.586-1.414 0.861-0.586 1.414-0.586 1.051 0.223 1.414 0.586 0.586 0.861 0.586 1.414zM20.315 15.404c0.046-0.105 0.112-0.191 0.192-0.257 0.112-0.092 0.251-0.146 0.403-0.147h0.090c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121-0.337-1.58-0.879-2.121-1.293-0.879-2.121-0.879h-0.159c-0.11-0.001-0.215-0.028-0.308-0.076-0.127-0.066-0.23-0.172-0.292-0.312-0.003-0.029-0.004-0.059-0.004-0.089-0.024-0.055-0.040-0.111-0.049-0.168 0.020-0.334 0.077-0.454 0.168-0.547l0.062-0.062c0.585-0.586 0.878-1.356 0.877-2.122s-0.294-1.536-0.881-2.122c-0.586-0.585-1.356-0.878-2.122-0.877s-1.536 0.294-2.12 0.879l-0.046 0.046c-0.083 0.080-0.183 0.136-0.288 0.166-0.14 0.039-0.291 0.032-0.438-0.033-0.101-0.044-0.187-0.11-0.253-0.19-0.092-0.112-0.146-0.251-0.147-0.403v-0.090c0-0.828-0.337-1.58-0.879-2.121s-1.293-0.879-2.121-0.879-1.58 0.337-2.121 0.879-0.879 1.293-0.879 2.121v0.159c-0.001 0.11-0.028 0.215-0.076 0.308-0.066 0.127-0.172 0.23-0.312 0.292-0.029 0.003-0.059 0.004-0.089 0.004-0.055 0.024-0.111 0.040-0.168 0.049-0.335-0.021-0.455-0.078-0.548-0.169l-0.062-0.062c-0.586-0.585-1.355-0.878-2.122-0.878s-1.535 0.294-2.122 0.882c-0.585 0.586-0.878 1.355-0.878 2.122s0.294 1.536 0.879 2.12l0.048 0.047c0.080 0.083 0.136 0.183 0.166 0.288 0.039 0.14 0.032 0.291-0.031 0.434-0.006 0.016-0.013 0.034-0.021 0.052-0.041 0.109-0.108 0.203-0.191 0.275-0.11 0.095-0.25 0.153-0.383 0.156h-0.090c-0.828 0-1.58 0.337-2.121 0.879s-0.879 1.294-0.879 2.122 0.337 1.58 0.879 2.121 1.293 0.879 2.121 0.879h0.159c0.11 0.001 0.215 0.028 0.308 0.076 0.128 0.067 0.233 0.174 0.296 0.321 0.024 0.055 0.040 0.111 0.049 0.168-0.020 0.334-0.077 0.454-0.168 0.547l-0.062 0.062c-0.585 0.586-0.878 1.356-0.877 2.122s0.294 1.536 0.881 2.122c0.586 0.585 1.356 0.878 2.122 0.877s1.536-0.294 2.12-0.879l0.047-0.048c0.083-0.080 0.183-0.136 0.288-0.166 0.14-0.039 0.291-0.032 0.434 0.031 0.016 0.006 0.034 0.013 0.052 0.021 0.109 0.041 0.203 0.108 0.275 0.191 0.095 0.11 0.153 0.25 0.156 0.383v0.092c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879 1.58-0.337 2.121-0.879 0.879-1.293 0.879-2.121v-0.159c0.001-0.11 0.028-0.215 0.076-0.308 0.067-0.128 0.174-0.233 0.321-0.296 0.055-0.024 0.111-0.040 0.168-0.049 0.334 0.020 0.454 0.077 0.547 0.168l0.062 0.062c0.586 0.585 1.356 0.878 2.122 0.877s1.536-0.294 2.122-0.881c0.585-0.586 0.878-1.356 0.877-2.122s-0.294-1.536-0.879-2.12l-0.048-0.047c-0.080-0.083-0.136-0.183-0.166-0.288-0.039-0.14-0.032-0.291 0.031-0.434zM18.396 9.302c-0.012-0.201-0.038-0.297-0.076-0.382v0.080c0 0.043 0.003 0.084 0.008 0.125 0.021 0.060 0.043 0.119 0.068 0.177 0.004 0.090 0.005 0.091 0.005 0.092 0.249 0.581 0.684 1.030 1.208 1.303 0.371 0.193 0.785 0.298 1.211 0.303h0.18c0.276 0 0.525 0.111 0.707 0.293s0.293 0.431 0.293 0.707-0.111 0.525-0.293 0.707-0.431 0.293-0.707 0.293h-0.090c-0.637 0.003-1.22 0.228-1.675 0.603-0.323 0.266-0.581 0.607-0.75 0.993-0.257 0.582-0.288 1.21-0.127 1.782 0.119 0.423 0.341 0.814 0.652 1.136l0.072 0.073c0.196 0.196 0.294 0.45 0.294 0.707s-0.097 0.512-0.292 0.707c-0.197 0.197-0.451 0.295-0.709 0.295s-0.512-0.097-0.707-0.292l-0.061-0.061c-0.463-0.453-1.040-0.702-1.632-0.752-0.437-0.037-0.882 0.034-1.293 0.212-0.578 0.248-1.027 0.683-1.3 1.206-0.193 0.371-0.298 0.785-0.303 1.211v0.181c0 0.276-0.111 0.525-0.293 0.707s-0.43 0.292-0.706 0.292-0.525-0.111-0.707-0.293-0.293-0.431-0.293-0.707v-0.090c-0.015-0.66-0.255-1.242-0.644-1.692-0.284-0.328-0.646-0.585-1.058-0.744-0.575-0.247-1.193-0.274-1.756-0.116-0.423 0.119-0.814 0.341-1.136 0.652l-0.073 0.072c-0.196 0.196-0.45 0.294-0.707 0.294s-0.512-0.097-0.707-0.292c-0.197-0.197-0.295-0.451-0.295-0.709s0.097-0.512 0.292-0.707l0.061-0.061c0.453-0.463 0.702-1.040 0.752-1.632 0.037-0.437-0.034-0.882-0.212-1.293-0.248-0.578-0.683-1.027-1.206-1.3-0.371-0.193-0.785-0.298-1.211-0.303l-0.18 0.001c-0.276 0-0.525-0.111-0.707-0.293s-0.293-0.431-0.293-0.707 0.111-0.525 0.293-0.707 0.431-0.293 0.707-0.293h0.090c0.66-0.015 1.242-0.255 1.692-0.644 0.328-0.284 0.585-0.646 0.744-1.058 0.247-0.575 0.274-1.193 0.116-1.756-0.119-0.423-0.341-0.814-0.652-1.136l-0.073-0.073c-0.196-0.196-0.294-0.45-0.294-0.707s0.097-0.512 0.292-0.707c0.197-0.197 0.451-0.295 0.709-0.295s0.512 0.097 0.707 0.292l0.061 0.061c0.463 0.453 1.040 0.702 1.632 0.752 0.37 0.032 0.745-0.014 1.101-0.137 0.096-0.012 0.186-0.036 0.266-0.072-0.031 0.001-0.061 0.003-0.089 0.004-0.201 0.012-0.297 0.038-0.382 0.076h0.080c0.043 0 0.084-0.003 0.125-0.008 0.060-0.021 0.119-0.043 0.177-0.068 0.090-0.004 0.091-0.005 0.092-0.005 0.581-0.249 1.030-0.684 1.303-1.208 0.193-0.37 0.298-0.785 0.303-1.21v-0.181c0-0.276 0.111-0.525 0.293-0.707s0.431-0.293 0.707-0.293 0.525 0.111 0.707 0.293 0.293 0.431 0.293 0.707v0.090c0.003 0.637 0.228 1.22 0.603 1.675 0.266 0.323 0.607 0.581 0.996 0.751 0.578 0.255 1.206 0.286 1.778 0.125 0.423-0.119 0.814-0.341 1.136-0.652l0.073-0.072c0.196-0.196 0.45-0.294 0.707-0.294s0.512 0.097 0.707 0.292c0.197 0.197 0.295 0.451 0.295 0.709s-0.097 0.512-0.292 0.707l-0.061 0.061c-0.453 0.463-0.702 1.040-0.752 1.632-0.032 0.37 0.014 0.745 0.137 1.101 0.012 0.095 0.037 0.185 0.072 0.266-0.001-0.032-0.002-0.062-0.004-0.089z"></path>
</symbol>
+ <symbol id="icon-smile" viewBox="0 0 24 24">
+ <path d="M23 12c0-3.037-1.232-5.789-3.222-7.778s-4.741-3.222-7.778-3.222-5.789 1.232-7.778 3.222-3.222 4.741-3.222 7.778 1.232 5.789 3.222 7.778 4.741 3.222 7.778 3.222 5.789-1.232 7.778-3.222 3.222-4.741 3.222-7.778zM21 12c0 2.486-1.006 4.734-2.636 6.364s-3.878 2.636-6.364 2.636-4.734-1.006-6.364-2.636-2.636-3.878-2.636-6.364 1.006-4.734 2.636-6.364 3.878-2.636 6.364-2.636 4.734 1.006 6.364 2.636 2.636 3.878 2.636 6.364zM7.2 14.6c0 0 0.131 0.173 0.331 0.383 0.145 0.153 0.338 0.341 0.577 0.54 0.337 0.281 0.772 0.59 1.297 0.853 0.705 0.352 1.579 0.624 2.595 0.624s1.89-0.272 2.595-0.624c0.525-0.263 0.96-0.572 1.297-0.853 0.239-0.199 0.432-0.387 0.577-0.54 0.2-0.21 0.331-0.383 0.331-0.383 0.331-0.442 0.242-1.069-0.2-1.4s-1.069-0.242-1.4 0.2c-0.041 0.050-0.181 0.206-0.181 0.206-0.1 0.105-0.237 0.239-0.408 0.382-0.243 0.203-0.549 0.419-0.91 0.6-0.48 0.239-1.050 0.412-1.701 0.412s-1.221-0.173-1.701-0.413c-0.36-0.18-0.667-0.397-0.91-0.6-0.171-0.143-0.308-0.277-0.408-0.382-0.14-0.155-0.181-0.205-0.181-0.205-0.331-0.442-0.958-0.531-1.4-0.2s-0.531 0.958-0.2 1.4zM9 10c0.552 0 1-0.448 1-1s-0.448-1-1-1-1 0.448-1 1 0.448 1 1 1zM15 10c0.552 0 1-0.448 1-1s-0.448-1-1-1-1 0.448-1 1 0.448 1 1 1z"></path>
+ </symbol>
<symbol id="icon-book-open" viewBox="0 0 24 24">
<path d="M21 4v13h-6c-0.728 0-1.412 0.195-2 0.535v-10.535c0-0.829 0.335-1.577 0.879-2.121s1.292-0.879 2.121-0.879zM11 17.535c-0.588-0.34-1.272-0.535-2-0.535h-6v-13h5c0.829 0 1.577 0.335 2.121 0.879s0.879 1.292 0.879 2.121zM22 2h-6c-1.38 0-2.632 0.561-3.536 1.464-0.167 0.167-0.322 0.346-0.464 0.536-0.142-0.19-0.297-0.369-0.464-0.536-0.904-0.903-2.156-1.464-3.536-1.464h-6c-0.552 0-1 0.448-1 1v15c0 0.552 0.448 1 1 1h7c0.553 0 1.051 0.223 1.414 0.586s0.586 0.861 0.586 1.414c0 0.552 0.448 1 1 1s1-0.448 1-1c0-0.553 0.223-1.051 0.586-1.414s0.861-0.586 1.414-0.586h7c0.552 0 1-0.448 1-1v-15c0-0.552-0.448-1-1-1z"></path>
</symbol>
diff --git a/ui/src/utils.ts b/ui/src/utils.ts
index ceb05764..21a7fef8 100644
--- a/ui/src/utils.ts
+++ b/ui/src/utils.ts
@@ -43,6 +43,7 @@ import twemoji from 'twemoji';
import emojiShortName from 'emoji-short-name';
import Toastify from 'toastify-js';
import tippy from 'tippy.js';
+import EmojiButton from '@joeattardi/emoji-button';
export const repoUrl = 'https://github.com/LemmyNet/lemmy';
export const helpGuideUrl = '/docs/about_guide.html';
@@ -88,6 +89,14 @@ export const themes = [
'i386',
];
+export const emojiPicker = new EmojiButton({
+ // Use the emojiShortName from native
+ style: 'twemoji',
+ theme: 'dark',
+ position: 'auto-start',
+ // TODO i18n
+});
+
export function randomStr() {
return Math.random()
.toString(36)
@@ -473,8 +482,9 @@ export function setupTribute(): Tribute {
{
trigger: ':',
menuItemTemplate: (item: any) => {
- let emoji = `:${item.original.key}:`;
- return `${item.original.val} ${emoji}`;
+ let shortName = `:${item.original.key}:`;
+ let twemojiIcon = twemoji.parse(item.original.val);
+ return `${twemojiIcon} ${shortName}`;
},
selectTemplate: (item: any) => {
return `:${item.original.key}:`;
diff --git a/ui/src/version.ts b/ui/src/version.ts
index f0847f75..8a356353 100644
--- a/ui/src/version.ts
+++ b/ui/src/version.ts
@@ -1 +1 @@
-export const version: string = 'v0.6.45';
+export const version: string = 'v0.6.49';
diff --git a/ui/translations/en.json b/ui/translations/en.json
index a39496ab..a880b0c5 100644
--- a/ui/translations/en.json
+++ b/ui/translations/en.json
@@ -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:",
"support_on_patreon": "Support on Patreon",
"support_on_liberapay": "Support on Liberapay",
+ "support_on_open_collective": "Support on OpenCollective",
"donate_to_lemmy": "Donate to Lemmy",
"donate": "Donate",
"general_sponsors":
@@ -255,5 +256,6 @@
"couldnt_update_private_message": "Couldn't update private message.",
"time": "Time",
"action": "Action",
+ "emoji_picker": "Emoji Picker",
"block_leaving": "Are you sure you want to leave?"
}
diff --git a/ui/translations/ka.json b/ui/translations/ka.json
index 01dbe4ed..ebda8982 100644
--- a/ui/translations/ka.json
+++ b/ui/translations/ka.json
@@ -71,5 +71,155 @@
"unsticky": "unsticky",
"remove_as_mod": "მოხსენი როგორც მოდერატორი",
"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": "პოსტის სათაური ძალიან გრძელია."
}
diff --git a/ui/yarn.lock b/ui/yarn.lock
index 8d75052b..eb88b8af 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -126,6 +126,51 @@
lodash "^4.17.13"
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":
version "2.1.1"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.1.1.tgz#12c572ab88ef7345b43f21883fca26631c223085"
@@ -1829,6 +1874,14 @@ fliplog@^0.3.13:
dependencies:
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:
version "1.0.2"
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"
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:
version "5.4.6"
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"
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:
version "1.1.0"
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"
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:
version "1.10.0"
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"
integrity sha512-ND4LZXF4X92/PFrzSgGkq6KPPg8swy/U0yRw1k/+izWRVmq1HYi3khPwV3XIB6FRudgVICAaBhJfW8e8G3HC7Q==
-twemoji@^12.1.2:
+twemoji@^12.1.2, twemoji@^12.1.5:
version "12.1.5"
resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-12.1.5.tgz#a961fb65a1afcb1f729ad7e59391f9fe969820b9"
integrity sha512-B0PBVy5xomwb1M/WZxf/IqPZfnoIYy1skXnlHjMwLwTNfZ9ljh8VgWQktAPcJXu8080WoEh6YwQGPVhDVqvrVQ==
@@ -4890,6 +4958,11 @@ xregexp@^4.3.0:
dependencies:
"@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:
version "1.7.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2"