diff options
author | Chocobozzz <me@florianbigard.com> | 2018-07-18 09:52:46 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-07-18 10:00:37 +0200 |
commit | e032aec9b92be25a996923361f83a96a89505254 (patch) | |
tree | 245b559061fdcb1c27946333ff7ecd6bd82247f7 /client/src/app | |
parent | 1d94c154689b89b2c5e55f6e12ec25f49b369d52 (diff) | |
download | PeerTube-e032aec9b92be25a996923361f83a96a89505254.tar.gz PeerTube-e032aec9b92be25a996923361f83a96a89505254.tar.zst PeerTube-e032aec9b92be25a996923361f83a96a89505254.zip |
Render CSS/title/description tags on server side
Diffstat (limited to 'client/src/app')
-rw-r--r-- | client/src/app/app.component.ts | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index fc4d6c6a2..2149768a2 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts | |||
@@ -4,6 +4,7 @@ import { GuardsCheckStart, NavigationEnd, Router } from '@angular/router' | |||
4 | import { AuthService, RedirectService, ServerService } from '@app/core' | 4 | import { AuthService, RedirectService, ServerService } from '@app/core' |
5 | import { is18nPath } from '../../../shared/models/i18n' | 5 | import { is18nPath } from '../../../shared/models/i18n' |
6 | import { ScreenService } from '@app/shared/misc/screen.service' | 6 | import { ScreenService } from '@app/shared/misc/screen.service' |
7 | import { skip } from 'rxjs/operators' | ||
7 | 8 | ||
8 | @Component({ | 9 | @Component({ |
9 | selector: 'my-app', | 10 | selector: 'my-app', |
@@ -89,25 +90,36 @@ export class AppComponent implements OnInit { | |||
89 | } | 90 | } |
90 | ) | 91 | ) |
91 | 92 | ||
93 | // Inject JS | ||
92 | this.serverService.configLoaded | 94 | this.serverService.configLoaded |
93 | .subscribe(() => { | 95 | .subscribe(() => { |
94 | const config = this.serverService.getConfig() | 96 | const config = this.serverService.getConfig() |
97 | |||
98 | if (config.instance.customizations.javascript) { | ||
99 | try { | ||
100 | // tslint:disable:no-eval | ||
101 | eval(config.instance.customizations.javascript) | ||
102 | } catch (err) { | ||
103 | console.error('Cannot eval custom JavaScript.', err) | ||
104 | } | ||
105 | } | ||
106 | }) | ||
95 | 107 | ||
96 | // We test customCSS if the admin removed the css | 108 | // Inject CSS if modified (admin config settings) |
97 | if (this.customCSS || config.instance.customizations.css) { | 109 | this.serverService.configLoaded |
98 | const styleTag = '<style>' + config.instance.customizations.css + '</style>' | 110 | .pipe(skip(1)) // We only want to subscribe to reloads, because the CSS is already injected by the server |
99 | this.customCSS = this.domSanitizer.bypassSecurityTrustHtml(styleTag) | 111 | .subscribe(() => { |
100 | } | 112 | const headStyle = document.querySelector('style.custom-css-style') |
113 | if (headStyle) headStyle.parentNode.removeChild(headStyle) | ||
101 | 114 | ||
102 | if (config.instance.customizations.javascript) { | 115 | const config = this.serverService.getConfig() |
103 | try { | 116 | |
104 | // tslint:disable:no-eval | 117 | // We test customCSS if the admin removed the css |
105 | eval(config.instance.customizations.javascript) | 118 | if (this.customCSS || config.instance.customizations.css) { |
106 | } catch (err) { | 119 | const styleTag = '<style>' + config.instance.customizations.css + '</style>' |
107 | console.error('Cannot eval custom JavaScript.', err) | 120 | this.customCSS = this.domSanitizer.bypassSecurityTrustHtml(styleTag) |
108 | } | 121 | } |
109 | } | 122 | }) |
110 | }) | ||
111 | } | 123 | } |
112 | 124 | ||
113 | isUserLoggedIn () { | 125 | isUserLoggedIn () { |