Fix video rows overflow
In discover and account channel videos pages
This commit is contained in:
parent
a3671f0709
commit
6eb62c3390
|
@ -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 {
|
||||||
|
|
|
@ -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 () {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue