Fix video rows overflow

In discover and account channel videos pages
This commit is contained in:
Chocobozzz 2019-08-22 13:59:54 +02:00
parent a3671f0709
commit 6eb62c3390
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
6 changed files with 37 additions and 11 deletions

View File

@ -9,7 +9,6 @@
.section { .section {
@include miniature-rows; @include miniature-rows;
overflow: visible; // For the subscribe dropdown
padding-top: 0 !important; padding-top: 0 !important;
.section-title { .section-title {

View File

@ -11,6 +11,7 @@ import { AuthService } from '@app/core'
import { VideoService } from '@app/shared/video/video.service' import { VideoService } from '@app/shared/video/video.service'
import { VideoSortField } from '@app/shared/video/sort-field.type' import { VideoSortField } from '@app/shared/video/sort-field.type'
import { ComponentPagination, hasMoreItems } from '@app/shared/rest/component-pagination.model' import { ComponentPagination, hasMoreItems } from '@app/shared/rest/component-pagination.model'
import { ScreenService } from '@app/shared/misc/screen.service'
@Component({ @Component({
selector: 'my-account-video-channels', selector: 'my-account-video-channels',
@ -42,7 +43,8 @@ export class AccountVideoChannelsComponent implements OnInit, OnDestroy {
private authService: AuthService, private authService: AuthService,
private accountService: AccountService, private accountService: AccountService,
private videoChannelService: VideoChannelService, private videoChannelService: VideoChannelService,
private videoService: VideoService private videoService: VideoService,
private screenService: ScreenService
) { } ) { }
get user () { get user () {
@ -83,7 +85,10 @@ export class AccountVideoChannelsComponent implements OnInit, OnDestroy {
} }
getVideosOf (videoChannel: VideoChannel) { getVideosOf (videoChannel: VideoChannel) {
return this.videos[ videoChannel.id ] const numberOfVideos = this.screenService.getNumberOfAvailableMiniatures()
// 2 rows
return this.videos[ videoChannel.id ].slice(0, numberOfVideos * 2)
} }
onNearOfBottom () { onNearOfBottom () {

View File

@ -22,8 +22,22 @@ export class ScreenService {
return 'ontouchstart' in window || navigator.msMaxTouchPoints return 'ontouchstart' in window || navigator.msMaxTouchPoints
} }
getNumberOfAvailableMiniatures () {
const screenWidth = this.getWindowInnerWidth()
let numberOfVideos = 1
if (screenWidth > 1850) numberOfVideos = 6
else if (screenWidth > 1600) numberOfVideos = 5
else if (screenWidth > 1370) numberOfVideos = 4
else if (screenWidth > 1100) numberOfVideos = 3
else if (screenWidth > 850) numberOfVideos = 2
return numberOfVideos
}
// Cache window inner width, because it's an expensive call // Cache window inner width, because it's an expensive call
private getWindowInnerWidth () { getWindowInnerWidth () {
if (this.cacheWindowInnerWidthExpired()) this.refreshWindowInnerWidth() if (this.cacheWindowInnerWidthExpired()) this.refreshWindowInnerWidth()
return this.windowInnerWidth return this.windowInnerWidth

View File

@ -7,7 +7,8 @@
<a routerLink="/search" [queryParams]="{ categoryOneOf: [ object.category.id ] }">{{ object.category.label }}</a> <a routerLink="/search" [queryParams]="{ categoryOneOf: [ object.category.id ] }">{{ object.category.label }}</a>
</div> </div>
<my-video-miniature *ngFor="let video of object.videos" [video]="video" [user]="user" [displayVideoActions]="false"></my-video-miniature> <my-video-miniature *ngFor="let video of buildVideos(object.videos)" [video]="video" [user]="user" [displayVideoActions]="false">
</my-video-miniature>
</div> </div>
<div class="section" *ngFor="let object of overview.tags"> <div class="section" *ngFor="let object of overview.tags">
@ -15,7 +16,8 @@
<a routerLink="/search" [queryParams]="{ tagsOneOf: [ object.tag ] }">#{{ object.tag }}</a> <a routerLink="/search" [queryParams]="{ tagsOneOf: [ object.tag ] }">#{{ object.tag }}</a>
</div> </div>
<my-video-miniature *ngFor="let video of object.videos" [video]="video" [user]="user" [displayVideoActions]="false"></my-video-miniature> <my-video-miniature *ngFor="let video of buildVideos(object.videos)" [video]="video" [user]="user" [displayVideoActions]="false">
</my-video-miniature>
</div> </div>
<div class="section channel" *ngFor="let object of overview.channels"> <div class="section channel" *ngFor="let object of overview.channels">
@ -27,7 +29,8 @@
</a> </a>
</div> </div>
<my-video-miniature *ngFor="let video of object.videos" [video]="video" [user]="user" [displayVideoActions]="false"></my-video-miniature> <my-video-miniature *ngFor="let video of buildVideos(object.videos)" [video]="video" [user]="user" [displayVideoActions]="false">
</my-video-miniature>
</div> </div>
</div> </div>

View File

@ -4,6 +4,7 @@ import { I18n } from '@ngx-translate/i18n-polyfill'
import { VideosOverview } from '@app/shared/overview/videos-overview.model' import { VideosOverview } from '@app/shared/overview/videos-overview.model'
import { OverviewService } from '@app/shared/overview' import { OverviewService } from '@app/shared/overview'
import { Video } from '@app/shared/video/video.model' import { Video } from '@app/shared/video/video.model'
import { ScreenService } from '@app/shared/misc/screen.service'
@Component({ @Component({
selector: 'my-video-overview', selector: 'my-video-overview',
@ -22,7 +23,8 @@ export class VideoOverviewComponent implements OnInit {
private i18n: I18n, private i18n: I18n,
private notifier: Notifier, private notifier: Notifier,
private authService: AuthService, private authService: AuthService,
private overviewService: OverviewService private overviewService: OverviewService,
private screenService: ScreenService
) { } ) { }
get user () { get user () {
@ -53,4 +55,10 @@ export class VideoOverviewComponent implements OnInit {
buildVideoChannelAvatarUrl (object: { videos: Video[] }) { buildVideoChannelAvatarUrl (object: { videos: Video[] }) {
return object.videos[0].videoChannelAvatarUrl return object.videos[0].videoChannelAvatarUrl
} }
buildVideos (videos: Video[]) {
const numberOfVideos = this.screenService.getNumberOfAvailableMiniatures()
return videos.slice(0, numberOfVideos * 2)
}
} }

View File

@ -140,9 +140,6 @@ $play-overlay-width: 18px;
} }
@mixin miniature-rows { @mixin miniature-rows {
max-height: 540px; // 2 rows max
overflow: hidden;
&:first-child { &:first-child {
padding-top: 30px; padding-top: 30px;