Fix loading spinner in player
This commit is contained in:
parent
9b7d1c723d
commit
20206dfb0b
|
@ -7,7 +7,7 @@
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 800px) {
|
@media screen and (max-width: 600px) {
|
||||||
width: calc(100% - 150px);
|
width: calc(100% - 150px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,149 +5,149 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="videoNotFound" id="video-not-found">Video not found :'(</div>
|
<div *ngIf="videoNotFound" id="video-not-found">Video not found :'(</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Video information -->
|
<!-- Video information -->
|
||||||
<div *ngIf="video" class="margin-content video-bottom">
|
<div *ngIf="video" class="margin-content video-bottom">
|
||||||
<div class="video-info">
|
<div class="video-info">
|
||||||
<div class="video-info-name-actions">
|
<div class="video-info-name-actions">
|
||||||
<div class="video-info-name">{{ video.name }}</div>
|
<div class="video-info-name">{{ video.name }}</div>
|
||||||
|
|
||||||
<div class="video-info-actions">
|
<div class="video-info-actions">
|
||||||
<div *ngIf="isUserLoggedIn()" [ngClass]="{ 'activated': userRating === 'like' }" class="action-button">
|
<div *ngIf="isUserLoggedIn()" [ngClass]="{ 'activated': userRating === 'like' }" class="action-button">
|
||||||
<span class="icon icon-like" title="Like this video" (click)="setLike()"></span>
|
<span class="icon icon-like" title="Like this video" (click)="setLike()"></span>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="isUserLoggedIn()" [ngClass]="{ 'activated': userRating === 'dislike' }" class="action-button">
|
|
||||||
<span class="icon icon-dislike" title="Dislike this video" (click)="setDislike()"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div (click)="showShareModal()" class="action-button">
|
|
||||||
<span class="icon icon-share"></span>
|
|
||||||
Share
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="action-more" dropdown dropup="true" placement="right">
|
|
||||||
<div class="action-button" dropdownToggle>
|
|
||||||
<span class="icon icon-more"></span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul *dropdownMenu class="dropdown-menu" id="more-menu" role="menu" aria-labelledby="single-button">
|
<div *ngIf="isUserLoggedIn()" [ngClass]="{ 'activated': userRating === 'dislike' }" class="action-button">
|
||||||
<li role="menuitem">
|
<span class="icon icon-dislike" title="Dislike this video" (click)="setDislike()"></span>
|
||||||
<a class="dropdown-item" title="Download the video" href="#" (click)="showDownloadModal($event)">
|
</div>
|
||||||
<span class="icon icon-download"></span> Download
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li *ngIf="isUserLoggedIn()" role="menuitem">
|
<div (click)="showShareModal()" class="action-button">
|
||||||
<a class="dropdown-item" title="Report this video" href="#" (click)="showReportModal($event)">
|
<span class="icon icon-share"></span>
|
||||||
<span class="icon icon-alert"></span> Report
|
Share
|
||||||
</a>
|
</div>
|
||||||
</li>
|
|
||||||
|
|
||||||
<li *ngIf="isVideoBlacklistable()" role="menuitem">
|
<div class="action-more" dropdown dropup="true" placement="right">
|
||||||
<a class="dropdown-item" title="Blacklist this video" href="#" (click)="blacklistVideo($event)">
|
<div class="action-button" dropdownToggle>
|
||||||
<span class="icon icon-blacklist"></span> Blacklist
|
<span class="icon icon-more"></span>
|
||||||
</a>
|
</div>
|
||||||
</li>
|
|
||||||
</ul>
|
<ul *dropdownMenu class="dropdown-menu" id="more-menu" role="menu" aria-labelledby="single-button">
|
||||||
|
<li role="menuitem">
|
||||||
|
<a class="dropdown-item" title="Download the video" href="#" (click)="showDownloadModal($event)">
|
||||||
|
<span class="icon icon-download"></span> Download
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li *ngIf="isUserLoggedIn()" role="menuitem">
|
||||||
|
<a class="dropdown-item" title="Report this video" href="#" (click)="showReportModal($event)">
|
||||||
|
<span class="icon icon-alert"></span> Report
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li *ngIf="isVideoBlacklistable()" role="menuitem">
|
||||||
|
<a class="dropdown-item" title="Blacklist this video" href="#" (click)="blacklistVideo($event)">
|
||||||
|
<span class="icon icon-blacklist"></span> Blacklist
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="video-info-date-views-bar">
|
||||||
|
<div class="video-info-date-views">
|
||||||
|
{{ video.createdAt | myFromNow }} - {{ video.views | myNumberFormatter }} views
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="video.likes !== 0 || video.dislikes !== 0" class="video-info-likes-dislikes-bar">
|
||||||
|
<div class="likes-bar" [ngStyle]="{ 'width.%': video.likesPercent }"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-info-channel">
|
||||||
|
{{ video.channel.name }}
|
||||||
|
<!-- Here will be the subscribe button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-info-by">
|
||||||
|
By {{ video.by }}
|
||||||
|
<img [src]="getAvatarPath()" alt="Account avatar" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-info-description">
|
||||||
|
<div class="video-info-description-html" [innerHTML]="videoHTMLDescription"></div>
|
||||||
|
|
||||||
|
<div class="video-info-description-more" *ngIf="completeDescriptionShown === false && video.description?.length === 250" (click)="showMoreDescription()">
|
||||||
|
Show more
|
||||||
|
<span *ngIf="descriptionLoading === false" class="glyphicon glyphicon-menu-down"></span>
|
||||||
|
<my-loader class="description-loading" [loading]="descriptionLoading"></my-loader>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="completeDescriptionShown === true" (click)="showLessDescription()" class="video-info-description-more">
|
||||||
|
Show less
|
||||||
|
<span *ngIf="descriptionLoading === false" class="glyphicon glyphicon-menu-up"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-attributes">
|
||||||
|
<div class="video-attribute">
|
||||||
|
<span class="video-attribute-label">
|
||||||
|
Privacy
|
||||||
|
</span>
|
||||||
|
<span class="video-attribute-value">
|
||||||
|
{{ video.privacyLabel }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-attribute">
|
||||||
|
<span class="video-attribute-label">
|
||||||
|
Category
|
||||||
|
</span>
|
||||||
|
<span class="video-attribute-value">
|
||||||
|
{{ video.categoryLabel }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-attribute">
|
||||||
|
<span class="video-attribute-label">
|
||||||
|
Licence
|
||||||
|
</span>
|
||||||
|
<span class="video-attribute-value">
|
||||||
|
{{ video.licenceLabel }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-attribute">
|
||||||
|
<span class="video-attribute-label">
|
||||||
|
Language
|
||||||
|
</span>
|
||||||
|
<span class="video-attribute-value">
|
||||||
|
{{ video.languageLabel }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="video-attribute">
|
||||||
|
<span class="video-attribute-label">
|
||||||
|
Tags
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class="video-attribute-value">
|
||||||
|
{{ getVideoTags() }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="video-info-date-views-bar">
|
<div class="other-videos">
|
||||||
<div class="video-info-date-views">
|
<div class="title-page title-page-single">
|
||||||
{{ video.createdAt | myFromNow }} - {{ video.views | myNumberFormatter }} views
|
Other videos
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="video.likes !== 0 || video.dislikes !== 0" class="video-info-likes-dislikes-bar">
|
<div *ngFor="let video of otherVideos">
|
||||||
<div class="likes-bar" [ngStyle]="{ 'width.%': video.likesPercent }"></div>
|
<my-video-miniature [video]="video" [user]="user"></my-video-miniature>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="video-info-channel">
|
|
||||||
{{ video.channel.name }}
|
|
||||||
<!-- Here will be the subscribe button -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-info-by">
|
|
||||||
By {{ video.by }}
|
|
||||||
<img [src]="getAvatarPath()" alt="Account avatar" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-info-description">
|
|
||||||
<div class="video-info-description-html" [innerHTML]="videoHTMLDescription"></div>
|
|
||||||
|
|
||||||
<div class="video-info-description-more" *ngIf="completeDescriptionShown === false && video.description?.length === 250" (click)="showMoreDescription()">
|
|
||||||
Show more
|
|
||||||
<span *ngIf="descriptionLoading === false" class="glyphicon glyphicon-menu-down"></span>
|
|
||||||
<my-loader class="description-loading" [loading]="descriptionLoading"></my-loader>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="completeDescriptionShown === true" (click)="showLessDescription()" class="video-info-description-more">
|
|
||||||
Show less
|
|
||||||
<span *ngIf="descriptionLoading === false" class="glyphicon glyphicon-menu-up"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-attributes">
|
|
||||||
<div class="video-attribute">
|
|
||||||
<span class="video-attribute-label">
|
|
||||||
Privacy
|
|
||||||
</span>
|
|
||||||
<span class="video-attribute-value">
|
|
||||||
{{ video.privacyLabel }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-attribute">
|
|
||||||
<span class="video-attribute-label">
|
|
||||||
Category
|
|
||||||
</span>
|
|
||||||
<span class="video-attribute-value">
|
|
||||||
{{ video.categoryLabel }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-attribute">
|
|
||||||
<span class="video-attribute-label">
|
|
||||||
Licence
|
|
||||||
</span>
|
|
||||||
<span class="video-attribute-value">
|
|
||||||
{{ video.licenceLabel }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-attribute">
|
|
||||||
<span class="video-attribute-label">
|
|
||||||
Language
|
|
||||||
</span>
|
|
||||||
<span class="video-attribute-value">
|
|
||||||
{{ video.languageLabel }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="video-attribute">
|
|
||||||
<span class="video-attribute-label">
|
|
||||||
Tags
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span class="video-attribute-value">
|
|
||||||
{{ getVideoTags() }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="other-videos">
|
|
||||||
<div class="title-page title-page-single">
|
|
||||||
Other videos
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngFor="let video of otherVideos">
|
|
||||||
<my-video-miniature [video]="video" [user]="user"></my-video-miniature>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -216,14 +216,18 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@media screen and (max-width: 800px) {
|
@media screen and (max-width: 1000px) {
|
||||||
.other-videos {
|
.other-videos {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
.video-bottom {
|
.video-bottom {
|
||||||
|
margin: 20px 0 0 0;
|
||||||
|
|
||||||
.video-info {
|
.video-info {
|
||||||
margin-right: 10px;
|
margin-right: 0;
|
||||||
|
|
||||||
.video-info-name-actions {
|
.video-info-name-actions {
|
||||||
align-items: left;
|
align-items: left;
|
||||||
|
|
|
@ -107,35 +107,6 @@ label {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On small screen, menu is absolute
|
|
||||||
@media screen and (max-width: 800px) {
|
|
||||||
.title-menu-left {
|
|
||||||
width: 150px !important;
|
|
||||||
position: absolute !important;
|
|
||||||
z-index: 10000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-col {
|
|
||||||
margin-left: 0;
|
|
||||||
|
|
||||||
&, &.expanded {
|
|
||||||
.margin-content {
|
|
||||||
margin-left: 10px;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sub-menu {
|
|
||||||
padding-left: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=text], input[type=password] {
|
|
||||||
width: 100% !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Thanks https://gist.github.com/alexandrevicenzi/680147013e902a4eaa5d
|
// Thanks https://gist.github.com/alexandrevicenzi/680147013e902a4eaa5d
|
||||||
.glyphicon-refresh-animate {
|
.glyphicon-refresh-animate {
|
||||||
-animation: spin .7s infinite linear;
|
-animation: spin .7s infinite linear;
|
||||||
|
@ -330,3 +301,32 @@ p-datatable {
|
||||||
@include peertube-button-link;
|
@include peertube-button-link;
|
||||||
@include grey-button;
|
@include grey-button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// On small screen, menu is absolute
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.title-menu-left {
|
||||||
|
width: 150px !important;
|
||||||
|
position: absolute !important;
|
||||||
|
z-index: 10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-col {
|
||||||
|
margin-left: 0;
|
||||||
|
|
||||||
|
&, &.expanded {
|
||||||
|
.margin-content {
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sub-menu {
|
||||||
|
padding-left: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=text], input[type=password] {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -28,10 +28,6 @@ $control-bar-height: 34px;
|
||||||
$big-play-width: 3em;
|
$big-play-width: 3em;
|
||||||
$big-play-height: 1.5em;
|
$big-play-height: 1.5em;
|
||||||
|
|
||||||
line-height: $big-play-height;
|
|
||||||
height: $big-play-height;
|
|
||||||
width: $big-play-width;
|
|
||||||
|
|
||||||
border: 0;
|
border: 0;
|
||||||
border-radius: 0.3em;
|
border-radius: 0.3em;
|
||||||
|
|
||||||
|
@ -39,10 +35,7 @@ $control-bar-height: 34px;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
margin-left: -($big-play-width / 2);
|
margin-left: -($big-play-width / 2);
|
||||||
margin-top: -($big-play-height / 2);
|
margin-top: -($big-play-height / 2);
|
||||||
}
|
background-color: transparent !important;
|
||||||
|
|
||||||
&:hover .vjs-big-play-button {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.vjs-control-bar,
|
.vjs-control-bar,
|
||||||
|
@ -321,13 +314,8 @@ $control-bar-height: 34px;
|
||||||
|
|
||||||
// Thanks: https://projects.lukehaas.me/css-loaders/
|
// Thanks: https://projects.lukehaas.me/css-loaders/
|
||||||
.vjs-loading-spinner {
|
.vjs-loading-spinner {
|
||||||
margin: 0 !important;
|
|
||||||
//position: absolute;
|
|
||||||
// 15px is the nav bar height
|
|
||||||
top: calc(50% - 15px);
|
|
||||||
left: 50%;
|
left: 50%;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
position: relative;
|
|
||||||
text-indent: -9999em;
|
text-indent: -9999em;
|
||||||
border: 0.7em solid rgba(255, 255, 255, 0.2);
|
border: 0.7em solid rgba(255, 255, 255, 0.2);
|
||||||
border-left-color: #ffffff;
|
border-left-color: #ffffff;
|
||||||
|
|
Loading…
Reference in New Issue