Go back when cancel NSFW modal

Instead of redirecting on the homepage
This commit is contained in:
Chocobozzz 2019-08-22 17:13:58 +02:00
parent 4334445d04
commit 60c2bc80b8
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
5 changed files with 22 additions and 7 deletions

View File

@ -12,6 +12,7 @@ import { PlatformLocation, ViewportScroller } from '@angular/common'
import { PluginService } from '@app/core/plugins/plugin.service' import { PluginService } from '@app/core/plugins/plugin.service'
import { HooksService } from '@app/core/plugins/hooks.service' import { HooksService } from '@app/core/plugins/hooks.service'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { POP_STATE_MODAL_DISMISS } from '@app/shared/misc/constants'
@Component({ @Component({
selector: 'my-app', selector: 'my-app',
@ -94,7 +95,7 @@ export class AppComponent implements OnInit {
.pipe(debounceTime(200)) .pipe(debounceTime(200))
.subscribe(() => this.onResize()) .subscribe(() => this.onResize())
this.location.onPopState(() => this.modalService.dismissAll()) this.location.onPopState(() => this.modalService.dismissAll(POP_STATE_MODAL_DISMISS))
} }
isUserLoggedIn () { isUserLoggedIn () {
@ -115,7 +116,6 @@ export class AppComponent implements OnInit {
const eventsObs = this.router.events const eventsObs = this.router.events
const scrollEvent = eventsObs.pipe(filter((e: Event): e is Scroll => e instanceof Scroll)) const scrollEvent = eventsObs.pipe(filter((e: Event): e is Scroll => e instanceof Scroll))
const navigationEndEvent = eventsObs.pipe(filter((e: Event): e is NavigationEnd => e instanceof NavigationEnd))
scrollEvent.subscribe(e => { scrollEvent.subscribe(e => {
if (e.position) { if (e.position) {
@ -131,6 +131,8 @@ export class AppComponent implements OnInit {
} }
}) })
const navigationEndEvent = eventsObs.pipe(filter((e: Event): e is NavigationEnd => e instanceof NavigationEnd))
// When we add the a-state parameter, we don't want to alter the scroll // When we add the a-state parameter, we don't want to alter the scroll
navigationEndEvent.pipe(pairwise()) navigationEndEvent.pipe(pairwise())
.subscribe(([ e1, e2 ]) => { .subscribe(([ e1, e2 ]) => {

View File

@ -18,12 +18,16 @@ export class ConfirmService {
confirm (message: string, title = '', confirmButtonText?: string) { confirm (message: string, title = '', confirmButtonText?: string) {
this.showConfirm.next({ title, message, confirmButtonText }) this.showConfirm.next({ title, message, confirmButtonText })
return this.confirmResponse.asObservable().pipe(first()).toPromise() return this.confirmResponse.asObservable()
.pipe(first())
.toPromise()
} }
confirmWithInput (message: string, inputLabel: string, expectedInputValue: string, title = '', confirmButtonText?: string) { confirmWithInput (message: string, inputLabel: string, expectedInputValue: string, title = '', confirmButtonText?: string) {
this.showConfirm.next({ title, message, inputLabel, expectedInputValue, confirmButtonText }) this.showConfirm.next({ title, message, inputLabel, expectedInputValue, confirmButtonText })
return this.confirmResponse.asObservable().pipe(first()).toPromise() return this.confirmResponse.asObservable()
.pipe(first())
.toPromise()
} }
} }

View File

@ -3,6 +3,7 @@ import { ConfirmService } from '@app/core/confirm/confirm.service'
import { I18n } from '@ngx-translate/i18n-polyfill' import { I18n } from '@ngx-translate/i18n-polyfill'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
import { POP_STATE_MODAL_DISMISS } from '@app/shared/misc/constants'
@Component({ @Component({
selector: 'my-confirm', selector: 'my-confirm',
@ -63,6 +64,11 @@ export class ConfirmComponent implements OnInit {
this.openedModal.result this.openedModal.result
.then(() => this.confirmService.confirmResponse.next(true)) .then(() => this.confirmService.confirmResponse.next(true))
.catch(() => this.confirmService.confirmResponse.next(false)) .catch((reason: string) => {
// If the reason was that the user used the back button, we don't care about the confirm dialog result
if (!reason || reason !== POP_STATE_MODAL_DISMISS) {
this.confirmService.confirmResponse.next(false)
}
})
} }
} }

View File

@ -0,0 +1 @@
export const POP_STATE_MODAL_DISMISS = 'pop state dismiss'

View File

@ -34,6 +34,7 @@ import { VideoWatchPlaylistComponent } from '@app/videos/+video-watch/video-watc
import { getStoredTheater } from '../../../assets/player/peertube-player-local-storage' import { getStoredTheater } from '../../../assets/player/peertube-player-local-storage'
import { PluginService } from '@app/core/plugins/plugin.service' import { PluginService } from '@app/core/plugins/plugin.service'
import { HooksService } from '@app/core/plugins/hooks.service' import { HooksService } from '@app/core/plugins/hooks.service'
import { PlatformLocation } from '@angular/common'
@Component({ @Component({
selector: 'my-video-watch', selector: 'my-video-watch',
@ -95,6 +96,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
private i18n: I18n, private i18n: I18n,
private hotkeysService: HotkeysService, private hotkeysService: HotkeysService,
private hooks: HooksService, private hooks: HooksService,
private location: PlatformLocation,
@Inject(LOCALE_ID) private localeId: string @Inject(LOCALE_ID) private localeId: string
) {} ) {}
@ -374,13 +376,13 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
this.i18n('This video contains mature or explicit content. Are you sure you want to watch it?'), this.i18n('This video contains mature or explicit content. Are you sure you want to watch it?'),
this.i18n('Mature or explicit content') this.i18n('Mature or explicit content')
) )
if (res === false) return this.redirectService.redirectToHomepage() if (res === false) return this.location.back()
} }
// Flush old player if needed // Flush old player if needed
this.flushPlayer() this.flushPlayer()
// Build video element, because videojs remove it on dispose // Build video element, because videojs removes it on dispose
const playerElementWrapper = this.elementRef.nativeElement.querySelector('#videojs-wrapper') const playerElementWrapper = this.elementRef.nativeElement.querySelector('#videojs-wrapper')
this.playerElement = document.createElement('video') this.playerElement = document.createElement('video')
this.playerElement.className = 'video-js vjs-peertube-skin' this.playerElement.className = 'video-js vjs-peertube-skin'