diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fe96ea79..7f2e376cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## v0.0.27-alpha +### Features + + * Add ability for admin to inject custom JavaScript/CSS + ### Bug fixes * Fix comment reply highlighting diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 34114b60b..cae99786b 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -1,11 +1,9 @@ import { NgModule } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' -import { ServiceWorkerModule } from '@angular/service-worker' import { AboutModule } from '@app/about' import { ResetPasswordModule } from '@app/reset-password' import { MetaLoader, MetaModule, MetaStaticLoader, PageTitlePositioning } from '@ngx-meta/core' -import { environment } from '../environments/environment' import { AccountModule } from './account' @@ -60,9 +58,7 @@ export function metaFactory (): MetaLoader { MetaModule.forRoot({ provide: MetaLoader, useFactory: (metaFactory) - }), - - ServiceWorkerModule.register('/ngsw-worker.js', { enabled: environment.production }) + }) ], providers: [ ] }) diff --git a/client/src/app/core/core.module.ts b/client/src/app/core/core.module.ts index 93c9741a7..eea6f340b 100644 --- a/client/src/app/core/core.module.ts +++ b/client/src/app/core/core.module.ts @@ -1,7 +1,7 @@ -import { NgModule, Optional, SkipSelf } from '@angular/core' import { CommonModule } from '@angular/common' -import { RouterModule } from '@angular/router' +import { NgModule, Optional, SkipSelf } from '@angular/core' import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { RouterModule } from '@angular/router' import { LoadingBarModule } from '@ngx-loading-bar/core' import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client' @@ -9,10 +9,10 @@ import { SimpleNotificationsModule } from 'angular2-notifications' import { ModalModule } from 'ngx-bootstrap/modal' import { AuthService } from './auth' -import { LoginGuard, UserRightGuard } from './routing' -import { ServerService } from './server' import { ConfirmComponent, ConfirmService } from './confirm' import { throwIfAlreadyLoaded } from './module-import-guard' +import { LoginGuard, UserRightGuard } from './routing' +import { ServerService } from './server' @NgModule({ imports: [ diff --git a/client/src/main.ts b/client/src/main.ts index b02b6830f..9686ba4b8 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -12,6 +12,19 @@ if (environment.production) { const bootstrap = () => platformBrowserDynamic() .bootstrapModule(AppModule) + .then(bootstrapModule => { + // TODO: Remove when https://github.com/angular/angular-cli/issues/8779 is fixed? + if ('serviceWorker' in navigator && environment.production) { + navigator.serviceWorker.register('/ngsw-worker.js') + .catch(err => console.error('Cannot register service worker.', err)) + } + + return bootstrapModule + }) + .catch(err => { + console.error(err) + return null + }) if (environment.hmr) { if (module[ 'hot' ]) { diff --git a/client/src/manifest.json b/client/src/manifest.json index 707efb973..30914e35f 100644 --- a/client/src/manifest.json +++ b/client/src/manifest.json @@ -43,5 +43,5 @@ ], "name": "PeerTube", "short_name": "PeerTube", - "start_url": "." + "start_url": "/videos/trending" } diff --git a/server/controllers/client.ts b/server/controllers/client.ts index f5124c55b..2fcca6f76 100644 --- a/server/controllers/client.ts +++ b/server/controllers/client.ts @@ -11,8 +11,6 @@ const clientsRouter = express.Router() const distPath = join(root(), 'client', 'dist') const assetsImagesPath = join(root(), 'client', 'dist', 'client', 'assets', 'images') -const manifestPath = join(root(), 'client', 'dist', 'manifest.json') -const serviceWorkerPath = join(root(), 'client', 'dist', 'ngsw-worker.js') const embedPath = join(distPath, 'standalone', 'videos', 'embed.html') const indexPath = join(distPath, 'index.html') @@ -27,8 +25,17 @@ clientsRouter.use('/videos/embed', (req: express.Request, res: express.Response, }) // Static HTML/CSS/JS client files -clientsRouter.use('/manifest.json', express.static(manifestPath, { maxAge: STATIC_MAX_AGE })) -clientsRouter.use('/ngsw-worker.js', express.static(serviceWorkerPath, { maxAge: STATIC_MAX_AGE })) + +const staticClientFiles = [ + 'manifest.json', + 'ngsw-worker.js', + 'ngsw.json' +] +for (const staticClientFile of staticClientFiles) { + const path = join(root(), 'client', 'dist', staticClientFile) + clientsRouter.use('/' + staticClientFile, express.static(path, { maxAge: STATIC_MAX_AGE })) +} + clientsRouter.use('/client', express.static(distPath, { maxAge: STATIC_MAX_AGE })) clientsRouter.use('/client/assets/images', express.static(assetsImagesPath, { maxAge: STATIC_MAX_AGE }))