Merge branch 'master' of https://git.loafle.net/ucap-web/next-ucap-messenger
This commit is contained in:
commit
f2759864ce
|
@ -2,6 +2,7 @@
|
||||||
<mat-tab-group
|
<mat-tab-group
|
||||||
mat-stretch-tabs
|
mat-stretch-tabs
|
||||||
animationDuration="0ms"
|
animationDuration="0ms"
|
||||||
|
[backgroundColor]="'transparent'"
|
||||||
(selectedTabChange)="onSelectedTabChange($event)"
|
(selectedTabChange)="onSelectedTabChange($event)"
|
||||||
class="global-menu"
|
class="global-menu"
|
||||||
>
|
>
|
||||||
|
|
|
@ -182,7 +182,11 @@
|
||||||
(fileDragLeave)="onFileDragLeave()"
|
(fileDragLeave)="onFileDragLeave()"
|
||||||
>
|
>
|
||||||
<!-- CHAT MESSAGES -->
|
<!-- CHAT MESSAGES -->
|
||||||
<button mat-stroked-button class=" icon-button text-accent-darkest">
|
<button
|
||||||
|
mat-stroked-button
|
||||||
|
class=" icon-button text-accent-darkest"
|
||||||
|
(click)="onClickScrollToBottom()"
|
||||||
|
>
|
||||||
<i class="mid mdi-arrow-collapse-down"></i>
|
<i class="mid mdi-arrow-collapse-down"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|
|
@ -691,7 +691,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
req: {
|
req: {
|
||||||
roomSeq: this.roomInfoSubject.value.roomSeq,
|
roomSeq: this.roomInfoSubject.value.roomSeq,
|
||||||
eventType: EventType.Character,
|
eventType: EventType.Character,
|
||||||
sentMessage: StringUtil.escapeHtml(message)
|
sentMessage: message
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -726,7 +726,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
const stickerJson: StickerEventJson = {
|
const stickerJson: StickerEventJson = {
|
||||||
name: '스티커',
|
name: '스티커',
|
||||||
file: this.selectedSticker.index,
|
file: this.selectedSticker.index,
|
||||||
chat: !!message ? StringUtil.escapeHtml(message.trim()) : ''
|
chat: !!message ? message.trim() : ''
|
||||||
};
|
};
|
||||||
this.store.dispatch(
|
this.store.dispatch(
|
||||||
EventStore.send({
|
EventStore.send({
|
||||||
|
@ -751,7 +751,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
roomSeq: this.roomInfoSubject.value.roomSeq,
|
roomSeq: this.roomInfoSubject.value.roomSeq,
|
||||||
eventType: EventType.MassText,
|
eventType: EventType.MassText,
|
||||||
// sentMessage: message.replace(/\n/gi, '\r\n')
|
// sentMessage: message.replace(/\n/gi, '\r\n')
|
||||||
sentMessage: StringUtil.escapeHtml(message)
|
sentMessage: message
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -759,7 +759,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
/** Send Translation message */
|
/** Send Translation message */
|
||||||
sendMessageOfTranslate(message: string) {
|
sendMessageOfTranslate(message: string) {
|
||||||
const destLocale = this.destLocale;
|
const destLocale = this.destLocale;
|
||||||
const original = StringUtil.escapeHtml(message);
|
const original = message;
|
||||||
const roomSeq = this.roomInfoSubject.value.roomSeq;
|
const roomSeq = this.roomInfoSubject.value.roomSeq;
|
||||||
|
|
||||||
if (!!this.isTranslationProcess) {
|
if (!!this.isTranslationProcess) {
|
||||||
|
@ -2007,4 +2007,9 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onClickScrollToBottom() {
|
||||||
|
this.chatMessages.initEventMore();
|
||||||
|
this.chatMessages.scrollToBottom();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,12 @@
|
||||||
></app-layout-messenger-left-side>
|
></app-layout-messenger-left-side>
|
||||||
</mat-drawer>
|
</mat-drawer>
|
||||||
<div class="chat-messages bg-accent-brightest">
|
<div class="chat-messages bg-accent-brightest">
|
||||||
|
<!-- <div class="messenger-statusbar-container">
|
||||||
|
<div class="messenger-statusbar-message">
|
||||||
|
업데이트가 존재합니다.
|
||||||
|
</div>
|
||||||
|
<div class="messenger-statusbar-actions"></div>
|
||||||
|
</div> -->
|
||||||
<app-layout-messenger-intro
|
<app-layout-messenger-intro
|
||||||
*ngIf="!(this.selectedChat$ | async)"
|
*ngIf="!(this.selectedChat$ | async)"
|
||||||
></app-layout-messenger-intro>
|
></app-layout-messenger-intro>
|
||||||
|
|
|
@ -16,10 +16,26 @@
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
min-width: 320px;
|
min-width: 320px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.chat-messages {
|
.chat-messages {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
|
|
||||||
|
.messenger-statusbar-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 25px;
|
||||||
|
background-color: silver;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.messenger-statusbar-message {
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.messenger-statusbar-actions {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.rightDrawer {
|
.rightDrawer {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
|
|
|
@ -391,6 +391,14 @@ $daesang-grey: (
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app-page-messenger-main mat-drawer-content {
|
||||||
|
overflow: hidden !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-tab-labels .cdk-focused {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
.messages .container {
|
.messages .container {
|
||||||
background: mat-color($accent, 50);
|
background: mat-color($accent, 50);
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,11 +165,16 @@ $tablet-s-width: 768px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.bubble-main {
|
::ng-deep .bubble-main {
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
|
a {
|
||||||
|
color: #0367a6;
|
||||||
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
::ng-deep .view-previous {
|
::ng-deep .view-previous {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div
|
<div
|
||||||
*ngIf="!translationSimpleview || (!!translationSimpleview && !!isMe)"
|
*ngIf="!translationSimpleview || (!!translationSimpleview && !!isMe)"
|
||||||
class="original"
|
class="original"
|
||||||
[innerHTML]="message.sentMessageJson.original | linky"
|
[innerHTML]="message.sentMessageJson.original | ucapSafeHtml | linky"
|
||||||
(contextmenu)="onContextMenuMessage($event, 'original')"
|
(contextmenu)="onContextMenuMessage($event, 'original')"
|
||||||
></div>
|
></div>
|
||||||
<div
|
<div
|
||||||
|
@ -11,7 +11,10 @@
|
||||||
(contextmenu)="onContextMenuMessage($event, 'translation')"
|
(contextmenu)="onContextMenuMessage($event, 'translation')"
|
||||||
>
|
>
|
||||||
<span class="language">{{ message.sentMessageJson.destLocale }}</span>
|
<span class="language">{{ message.sentMessageJson.destLocale }}</span>
|
||||||
<span [innerHTML]="message.sentMessageJson.translation | linky"> </span>
|
<span
|
||||||
|
[innerHTML]="message.sentMessageJson.translation | ucapSafeHtml | linky"
|
||||||
|
>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-box">
|
<div class="btn-box">
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
<div class="bubble-main">
|
<div class="bubble-main">
|
||||||
<span class="content" [innerHTML]="content | linefeedtohtml | linky"></span>
|
<span
|
||||||
|
class="content"
|
||||||
|
[innerHTML]="content | linefeedtohtml | ucapSafeHtml | linky"
|
||||||
|
></span>
|
||||||
<span>
|
<span>
|
||||||
{{ message.sendDate | ucapDate: 'YYYY.MM.DD a hh:mm' }}
|
{{ message.sendDate | ucapDate: 'YYYY.MM.DD a hh:mm' }}
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
onerror="this.src='assets/sticker/sticker_default.png'"
|
onerror="this.src='assets/sticker/sticker_default.png'"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li *ngIf="contents" [innerHTML]="contents | linefeedtohtml | linky"></li>
|
<li
|
||||||
|
*ngIf="contents"
|
||||||
|
[innerHTML]="contents | linefeedtohtml | ucapSafeHtml | linky"
|
||||||
|
></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<div class="bubble-main">
|
<div class="bubble-main">
|
||||||
<span [innerHTML]="message.sentMessage | linky"></span>
|
<span [innerHTML]="message.sentMessage | ucapSafeHtml | linky"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -69,7 +69,10 @@
|
||||||
<i class="mdi mid-18 mdi-bell-off-outline text-primary-light"></i>
|
<i class="mdi mid-18 mdi-bell-off-outline text-primary-light"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="final-message" [innerHTML]="finalEventMessage"></div>
|
<div
|
||||||
|
class="final-message"
|
||||||
|
[innerHTML]="finalEventMessage | ucapSafeHtml"
|
||||||
|
></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="date">
|
<div class="date">
|
||||||
|
|
|
@ -171,14 +171,7 @@
|
||||||
*ngIf="fileDownloadUrl"
|
*ngIf="fileDownloadUrl"
|
||||||
[src]="fileDownloadUrl"
|
[src]="fileDownloadUrl"
|
||||||
[style.width]="'auto'"
|
[style.width]="'auto'"
|
||||||
[style.height]="
|
[style.height]="getImageHeight(imageContainer.clientHeight)"
|
||||||
naturalHeight > imageContainer.clientHeight
|
|
||||||
? ((imageContainer.clientHeight - 20) / naturalHeight) *
|
|
||||||
(zoomRatio / 100) *
|
|
||||||
naturalHeight +
|
|
||||||
'px'
|
|
||||||
: naturalHeight + 'px'
|
|
||||||
"
|
|
||||||
(load)="onLoadFileDownloadUrl(downloadImage)"
|
(load)="onLoadFileDownloadUrl(downloadImage)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -82,4 +82,14 @@ export class ImageViewerComponent implements OnInit {
|
||||||
|
|
||||||
this.changeDetectorRef.detectChanges();
|
this.changeDetectorRef.detectChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getImageHeight(containerHeight: number): string {
|
||||||
|
const realContainerHeight = containerHeight - 20;
|
||||||
|
const oriHeight =
|
||||||
|
this.naturalHeight > realContainerHeight
|
||||||
|
? realContainerHeight
|
||||||
|
: this.naturalHeight;
|
||||||
|
|
||||||
|
return oriHeight * (this.zoomRatio / 100) + 'px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import { Pipe, PipeTransform } from '@angular/core';
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
import { DomSanitizer } from '@angular/platform-browser';
|
import { DomSanitizer } from '@angular/platform-browser';
|
||||||
|
import { StringUtil } from '../utils/string.util';
|
||||||
|
|
||||||
@Pipe({ name: 'ucapSafeHtml' })
|
@Pipe({ name: 'ucapSafeHtml' })
|
||||||
export class SafeHtmlPipe implements PipeTransform {
|
export class SafeHtmlPipe implements PipeTransform {
|
||||||
constructor(private domSanitizer: DomSanitizer) {}
|
constructor(private domSanitizer: DomSanitizer) {}
|
||||||
|
|
||||||
public transform(value: string) {
|
public transform(value: string) {
|
||||||
return this.domSanitizer.bypassSecurityTrustHtml(value);
|
// return this.domSanitizer.bypassSecurityTrustHtml(
|
||||||
|
// StringUtil.escapeHtml(value)
|
||||||
|
// );
|
||||||
|
return StringUtil.escapeHtml(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class StatusBarService {
|
||||||
|
public constructor() {}
|
||||||
|
|
||||||
|
open() {}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user