]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/shared/shared-main/misc/help.component.ts
Update build steps for localization
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-main / misc / help.component.ts
CommitLineData
421d935d 1import { AfterContentInit, Component, ContentChildren, Input, OnChanges, OnInit, QueryList, TemplateRef } from '@angular/core'
67ed6552 2import { MarkdownService } from '@app/core'
0975cd5c 3import { I18n } from '@ngx-translate/i18n-polyfill'
67ed6552 4import { PeerTubeTemplateDirective } from '../angular'
8a8e02a4
C
5
6@Component({
7 selector: 'my-help',
8 styleUrls: [ './help.component.scss' ],
9 templateUrl: './help.component.html'
10})
11
421d935d 12export class HelpComponent implements OnInit, OnChanges, AfterContentInit {
8a8e02a4 13 @Input() helpType: 'custom' | 'markdownText' | 'markdownEnhanced' = 'custom'
fc2df421 14 @Input() tooltipPlacement = 'right auto'
8a8e02a4 15
421d935d
C
16 @ContentChildren(PeerTubeTemplateDirective) templates: QueryList<PeerTubeTemplateDirective<'preHtml' | 'customHtml' | 'postHtml'>>
17
0f7fedc3 18 isPopoverOpened = false
8a8e02a4
C
19 mainHtml = ''
20
421d935d
C
21 preHtmlTemplate: TemplateRef<any>
22 customHtmlTemplate: TemplateRef<any>
23 postHtmlTemplate: TemplateRef<any>
24
0975cd5c
C
25 constructor (private i18n: I18n) { }
26
8a8e02a4 27 ngOnInit () {
5afdd0a5
C
28 this.init()
29 }
30
421d935d
C
31 ngAfterContentInit () {
32 {
33 const t = this.templates.find(t => t.name === 'preHtml')
34 if (t) this.preHtmlTemplate = t.template
35 }
36
37 {
38 const t = this.templates.find(t => t.name === 'customHtml')
39 if (t) this.customHtmlTemplate = t.template
40 }
41
42 {
43 const t = this.templates.find(t => t.name === 'postHtml')
44 if (t) this.postHtmlTemplate = t.template
45 }
46 }
47
5afdd0a5
C
48 ngOnChanges () {
49 this.init()
50 }
51
0f7fedc3
C
52 onPopoverHidden () {
53 this.isPopoverOpened = false
54 }
55
56 onPopoverShown () {
57 this.isPopoverOpened = true
58 }
59
5afdd0a5 60 private init () {
8a8e02a4 61 if (this.helpType === 'markdownText') {
621d99f5 62 this.mainHtml = this.formatMarkdownSupport(MarkdownService.TEXT_RULES)
8a8e02a4
C
63 return
64 }
65
66 if (this.helpType === 'markdownEnhanced') {
621d99f5 67 this.mainHtml = this.formatMarkdownSupport(MarkdownService.ENHANCED_RULES)
8a8e02a4
C
68 return
69 }
70 }
621d99f5 71
621d99f5 72 private formatMarkdownSupport (rules: string[]) {
0975cd5c
C
73 // tslint:disable:max-line-length
74 return this.i18n('<a href="https://en.wikipedia.org/wiki/Markdown#Example" target="_blank" rel="noopener noreferrer">Markdown</a> compatible that supports:') +
621d99f5
C
75 this.createMarkdownList(rules)
76 }
77
78 private createMarkdownList (rules: string[]) {
c199c427 79 const rulesToText = {
0975cd5c
C
80 'emphasis': this.i18n('Emphasis'),
81 'link': this.i18n('Links'),
82 'newline': this.i18n('New lines'),
83 'list': this.i18n('Lists'),
84 'image': this.i18n('Images')
621d99f5
C
85 }
86
87 const bullets = rules.map(r => rulesToText[r])
88 .filter(text => text)
89 .map(text => '<li>' + text + '</li>')
90 .join('')
91
92 return '<ul>' + bullets + '</ul>'
93 }
8a8e02a4 94}