Handle markdown in account/video channel pages
This commit is contained in:
parent
4d089429fe
commit
53055a1124
|
@ -1,7 +1,7 @@
|
||||||
<div *ngIf="account" class="row">
|
<div *ngIf="account" class="row">
|
||||||
<div class="block col-md-6 col-sm-12">
|
<div class="block col-md-6 col-sm-12">
|
||||||
<div i18n class="small-title">Description</div>
|
<div i18n class="small-title">Description</div>
|
||||||
<div class="content">{{ getAccountDescription() }}</div>
|
<div class="content" [innerHtml]="getAccountDescription()"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="block col-md-6 col-sm-12">
|
<div class="block col-md-6 col-sm-12">
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { Account } from '@app/shared/account/account.model'
|
||||||
import { AccountService } from '@app/shared/account/account.service'
|
import { AccountService } from '@app/shared/account/account.service'
|
||||||
import { I18n } from '@ngx-translate/i18n-polyfill'
|
import { I18n } from '@ngx-translate/i18n-polyfill'
|
||||||
import { Subscription } from 'rxjs'
|
import { Subscription } from 'rxjs'
|
||||||
|
import { MarkdownService } from '@app/videos/shared'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-account-about',
|
selector: 'my-account-about',
|
||||||
|
@ -12,19 +13,24 @@ import { Subscription } from 'rxjs'
|
||||||
})
|
})
|
||||||
export class AccountAboutComponent implements OnInit, OnDestroy {
|
export class AccountAboutComponent implements OnInit, OnDestroy {
|
||||||
account: Account
|
account: Account
|
||||||
|
descriptionHTML = ''
|
||||||
|
|
||||||
private accountSub: Subscription
|
private accountSub: Subscription
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private i18n: I18n,
|
private i18n: I18n,
|
||||||
private accountService: AccountService
|
private accountService: AccountService,
|
||||||
|
private markdownService: MarkdownService
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
ngOnInit () {
|
ngOnInit () {
|
||||||
// Parent get the account for us
|
// Parent get the account for us
|
||||||
this.accountSub = this.accountService.accountLoaded
|
this.accountSub = this.accountService.accountLoaded
|
||||||
.subscribe(account => this.account = account)
|
.subscribe(account => {
|
||||||
|
this.account = account
|
||||||
|
this.descriptionHTML = this.markdownService.textMarkdownToHTML(this.account.description)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy () {
|
ngOnDestroy () {
|
||||||
|
@ -32,7 +38,7 @@ export class AccountAboutComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
getAccountDescription () {
|
getAccountDescription () {
|
||||||
if (this.account.description) return this.account.description
|
if (this.descriptionHTML) return this.descriptionHTML
|
||||||
|
|
||||||
return this.i18n('No description')
|
return this.i18n('No description')
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
<div class="description col-md-6 col-sm-12">
|
<div class="description col-md-6 col-sm-12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<div i18n class="small-title">Description</div>
|
<div i18n class="small-title">Description</div>
|
||||||
<div class="content">{{ getVideoChannelDescription() }}</div>
|
<div class="content" [innerHtml]="getVideoChannelDescription()"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="block" *ngIf="videoChannel.support">
|
<div class="block" *ngIf="supportHTML">
|
||||||
<div i18n class="small-title">Support this channel</div>
|
<div i18n class="small-title">Support this channel</div>
|
||||||
<div class="content">{{ videoChannel.support }}</div>
|
<div class="content" [innerHtml]="supportHTML"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { VideoChannelService } from '@app/shared/video-channel/video-channel.ser
|
||||||
import { VideoChannel } from '@app/shared/video-channel/video-channel.model'
|
import { VideoChannel } from '@app/shared/video-channel/video-channel.model'
|
||||||
import { I18n } from '@ngx-translate/i18n-polyfill'
|
import { I18n } from '@ngx-translate/i18n-polyfill'
|
||||||
import { Subscription } from 'rxjs'
|
import { Subscription } from 'rxjs'
|
||||||
|
import { MarkdownService } from '@app/videos/shared'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-video-channel-about',
|
selector: 'my-video-channel-about',
|
||||||
|
@ -12,19 +13,27 @@ import { Subscription } from 'rxjs'
|
||||||
})
|
})
|
||||||
export class VideoChannelAboutComponent implements OnInit, OnDestroy {
|
export class VideoChannelAboutComponent implements OnInit, OnDestroy {
|
||||||
videoChannel: VideoChannel
|
videoChannel: VideoChannel
|
||||||
|
descriptionHTML = ''
|
||||||
|
supportHTML = ''
|
||||||
|
|
||||||
private videoChannelSub: Subscription
|
private videoChannelSub: Subscription
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private i18n: I18n,
|
private i18n: I18n,
|
||||||
private videoChannelService: VideoChannelService
|
private videoChannelService: VideoChannelService,
|
||||||
|
private markdownService: MarkdownService
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
ngOnInit () {
|
ngOnInit () {
|
||||||
// Parent get the video channel for us
|
// Parent get the video channel for us
|
||||||
this.videoChannelSub = this.videoChannelService.videoChannelLoaded
|
this.videoChannelSub = this.videoChannelService.videoChannelLoaded
|
||||||
.subscribe(videoChannel => this.videoChannel = videoChannel)
|
.subscribe(videoChannel => {
|
||||||
|
this.videoChannel = videoChannel
|
||||||
|
|
||||||
|
this.descriptionHTML = this.markdownService.textMarkdownToHTML(this.videoChannel.description)
|
||||||
|
this.supportHTML = this.markdownService.enhancedMarkdownToHTML(this.videoChannel.support)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy () {
|
ngOnDestroy () {
|
||||||
|
@ -32,7 +41,7 @@ export class VideoChannelAboutComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
getVideoChannelDescription () {
|
getVideoChannelDescription () {
|
||||||
if (this.videoChannel.description) return this.videoChannel.description
|
if (this.descriptionHTML) return this.descriptionHTML
|
||||||
|
|
||||||
return this.i18n('No description')
|
return this.i18n('No description')
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,11 +23,7 @@ export class VideoSupportComponent {
|
||||||
show () {
|
show () {
|
||||||
this.modal.show()
|
this.modal.show()
|
||||||
|
|
||||||
if (this.video.support) {
|
this.videoHTMLSupport = this.markdownService.enhancedMarkdownToHTML(this.video.support)
|
||||||
this.videoHTMLSupport = this.markdownService.enhancedMarkdownToHTML(this.video.support)
|
|
||||||
} else {
|
|
||||||
this.videoHTMLSupport = ''
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hide () {
|
hide () {
|
||||||
|
|
|
@ -290,11 +290,6 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
private setVideoDescriptionHTML () {
|
private setVideoDescriptionHTML () {
|
||||||
if (!this.video.description) {
|
|
||||||
this.videoHTMLDescription = ''
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.videoHTMLDescription = this.markdownService.textMarkdownToHTML(this.video.description)
|
this.videoHTMLDescription = this.markdownService.textMarkdownToHTML(this.video.description)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,14 +23,16 @@ export class MarkdownService {
|
||||||
}
|
}
|
||||||
|
|
||||||
textMarkdownToHTML (markdown: string) {
|
textMarkdownToHTML (markdown: string) {
|
||||||
const html = this.textMarkdownIt.render(markdown)
|
if (!markdown) return ''
|
||||||
|
|
||||||
|
const html = this.textMarkdownIt.render(markdown)
|
||||||
return this.avoidTruncatedLinks(html)
|
return this.avoidTruncatedLinks(html)
|
||||||
}
|
}
|
||||||
|
|
||||||
enhancedMarkdownToHTML (markdown: string) {
|
enhancedMarkdownToHTML (markdown: string) {
|
||||||
const html = this.enhancedMarkdownIt.render(markdown)
|
if (!markdown) return ''
|
||||||
|
|
||||||
|
const html = this.enhancedMarkdownIt.render(markdown)
|
||||||
return this.avoidTruncatedLinks(html)
|
return this.avoidTruncatedLinks(html)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue