import { Observable } from 'rxjs'
-import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core'
+import { getLocaleDirection } from '@angular/common'
+import {
+ Component,
+ ElementRef,
+ EventEmitter,
+ Inject,
+ Input,
+ LOCALE_ID,
+ OnChanges,
+ OnInit,
+ Output,
+ SimpleChanges,
+ ViewChild
+} from '@angular/core'
import { Router } from '@angular/router'
import { Notifier, User } from '@app/core'
import { VIDEO_COMMENT_TEXT_VALIDATOR } from '@app/shared/form-validators/video-comment-validators'
private notifier: Notifier,
private videoCommentService: VideoCommentService,
private modalService: NgbModal,
- private router: Router
+ private router: Router,
+ @Inject(LOCALE_ID) private localeId: string
) {
super()
}
get emojiMarkupList () {
- const emojiMarkup = require('markdown-it-emoji/lib/data/light.json')
+ const emojiMarkupObjectList = require('markdown-it-emoji/lib/data/light.json')
+
+ // Populate emoji-markup-list from object to array to avoid keys alphabetical order
+ const emojiMarkupArrayList = []
+ for (const emojiMarkupName in emojiMarkupObjectList) {
+ if (emojiMarkupName) {
+ const emoji = emojiMarkupObjectList[emojiMarkupName]
+ emojiMarkupArrayList.push([emoji, emojiMarkupName])
+ }
+ }
- return emojiMarkup
+ return emojiMarkupArrayList
}
ngOnInit () {
}
ngOnChanges (changes: SimpleChanges) {
+ // Not initialized yet
+ if (!this.form) return
+
if (changes.textValue && changes.textValue.currentValue && changes.textValue.currentValue !== changes.textValue.previousValue) {
this.patchTextValue(changes.textValue.currentValue, true)
}
openEmojiModal (event: any) {
event.preventDefault()
- this.modalService.open(this.emojiModal, { backdrop: true })
+ this.modalService.open(this.emojiModal, { backdrop: true, size: 'lg' })
}
hideModals () {
return window.location.href
}
- getAvatarUrl () {
- if (this.user) return this.user.accountAvatarUrl
- return window.location.origin + '/client/assets/images/default-avatar.png'
- }
-
gotoLogin () {
this.hideModals()
this.router.navigate([ '/login' ])
this.form.value['text'] = this.textareaElement.nativeElement.value = ''
}
+ isRTL () {
+ return getLocaleDirection(this.localeId) === 'rtl'
+ }
+
private addCommentReply (commentCreate: VideoCommentCreate) {
return this.videoCommentService
.addCommentReply(this.video.id, this.parentComment.id, commentCreate)
this.textareaElement.nativeElement.focus()
}
+ // Scroll to textarea
this.textareaElement.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' })
+
+ // Use the native textarea autosize according to the text's break lines
+ this.textareaElement.nativeElement.dispatchEvent(new Event('input'))
})
this.form.patchValue({ text })