X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Bvideos%2F%2Bvideo-watch%2Fcomment%2Fvideo-comment-add.component.ts;h=f1f0dfeba139b7183bd4b48eaf109beb511e00ee;hb=62bc0352d9d465ce9d7c3e074b1b60bf99155e24;hp=3d0611a2df6e6e36cc5e8e5919be6e931afeac2a;hpb=ee3bd9db05faee81c3def742ffd77de02f25342a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+videos/+video-watch/comment/video-comment-add.component.ts b/client/src/app/+videos/+video-watch/comment/video-comment-add.component.ts index 3d0611a2d..f1f0dfeba 100644 --- a/client/src/app/+videos/+video-watch/comment/video-comment-add.component.ts +++ b/client/src/app/+videos/+video-watch/comment/video-comment-add.component.ts @@ -2,12 +2,12 @@ import { Observable } from 'rxjs' import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core' import { Router } from '@angular/router' import { Notifier, User } from '@app/core' -import { FormReactive, FormValidatorService, VideoCommentValidatorsService } from '@app/shared/shared-forms' -import { Video } from '@app/shared/shared-main' +import { VIDEO_COMMENT_TEXT_VALIDATOR } from '@app/shared/form-validators/video-comment-validators' +import { FormReactive, FormValidatorService } from '@app/shared/shared-forms' +import { Video, Account } from '@app/shared/shared-main' import { VideoComment, VideoCommentService } from '@app/shared/shared-video-comment' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { VideoCommentCreate } from '@shared/models' -import { I18n } from '@ngx-translate/i18n-polyfill' @Component({ selector: 'my-video-comment-add', @@ -17,11 +17,10 @@ import { I18n } from '@ngx-translate/i18n-polyfill' export class VideoCommentAddComponent extends FormReactive implements OnChanges, OnInit { @Input() user: User @Input() video: Video - @Input() parentComment: VideoComment - @Input() parentComments: VideoComment[] + @Input() parentComment?: VideoComment + @Input() parentComments?: VideoComment[] @Input() focusOnInit = false @Input() textValue?: string - @Input() commentThread?: boolean @Output() commentCreated = new EventEmitter() @Output() cancel = new EventEmitter() @@ -35,49 +34,42 @@ export class VideoCommentAddComponent extends FormReactive implements OnChanges, constructor ( protected formValidatorService: FormValidatorService, - private videoCommentValidatorsService: VideoCommentValidatorsService, private notifier: Notifier, private videoCommentService: VideoCommentService, private modalService: NgbModal, - private router: Router, - private i18n: I18n + private router: Router ) { 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 () { this.buildForm({ - text: this.videoCommentValidatorsService.VIDEO_COMMENT_TEXT + text: VIDEO_COMMENT_TEXT_VALIDATOR }) if (this.user) { - if (this.commentThread) { - this.addingCommentButtonValue = this.i18n('Comment') + if (!this.parentComment) { + this.addingCommentButtonValue = $localize`Comment` } else { - this.addingCommentButtonValue = this.i18n('Reply') - } - - if (this.textValue) { - this.patchTextValue(this.textValue, this.focusOnInit) - return + this.addingCommentButtonValue = $localize`Reply` } - if (this.parentComment) { - const mentions = this.parentComments - .filter(c => c.account && c.account.id !== this.user.account.id) // Don't add mention of ourselves - .map(c => '@' + c.by) - - const mentionsSet = new Set(mentions) - const mentionsText = Array.from(mentionsSet).join(' ') + ' ' - - this.patchTextValue(mentionsText, this.focusOnInit) - } + this.initTextValue() } } @@ -106,7 +98,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnChanges, openEmojiModal (event: any) { event.preventDefault() - this.modalService.open(this.emojiModal, { backdrop: true }) + this.modalService.open(this.emojiModal, { backdrop: true, size: 'lg' }) } hideModals () { @@ -153,7 +145,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnChanges, getAvatarUrl () { if (this.user) return this.user.accountAvatarUrl - return window.location.origin + '/client/assets/images/default-avatar.png' + return Account.GET_DEFAULT_AVATAR_URL() } gotoLogin () { @@ -176,13 +168,35 @@ export class VideoCommentAddComponent extends FormReactive implements OnChanges, .addCommentThread(this.video.id, commentCreate) } + private initTextValue () { + if (this.textValue) { + this.patchTextValue(this.textValue, this.focusOnInit) + return + } + + if (this.parentComment) { + const mentions = this.parentComments + .filter(c => c.account && c.account.id !== this.user.account.id) // Don't add mention of ourselves + .map(c => '@' + c.by) + + const mentionsSet = new Set(mentions) + const mentionsText = Array.from(mentionsSet).join(' ') + ' ' + + this.patchTextValue(mentionsText, this.focusOnInit) + } + } + private patchTextValue (text: string, focus: boolean) { setTimeout(() => { if (focus) { 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 })