]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+videos/+video-watch/video-watch.component.scss
Move watch action buttons in a dedicated component
[github/Chocobozzz/PeerTube.git] / client / src / app / +videos / +video-watch / video-watch.component.scss
index 2e083982eb46fe42d488b480be841228746fb3c8..1d83fa139ea30dd45f8d59101e3d80967f3945ee 100644 (file)
@@ -1,17 +1,15 @@
-@import '_variables';
-@import '_mixins';
-@import '_bootstrap-variables';
-@import '_miniature';
-
-$player-factor: 1.7; // 16/9
-$video-info-margin-left: 44px;
-
-@function getPlayerHeight($width){
-  @return calc(#{$width} / #{$player-factor})
+@use 'sass:math';
+@use '_variables' as *;
+@use '_mixins' as *;
+@use '_bootstrap-variables';
+@use '_miniature' as *;
+
+@function getPlayerHeight ($width) {
+  @return calc(#{$width} / #{$video-watch-player-factor});
 }
 
-@function getPlayerWidth($height){
-  @return calc(#{$height} * #{$player-factor})
+@function getPlayerWidth ($height) {
+  @return calc(#{$height} * #{$video-watch-player-factor});
 }
 
 @mixin playlist-below-player {
@@ -24,16 +22,17 @@ $video-info-margin-left: 44px;
 
 .root {
   &.theater-enabled #video-wrapper {
+    $height: calc(100vh - #{$header-height} - #{$theater-bottom-space});
+
     flex-direction: column;
     justify-content: center;
 
     #videojs-wrapper {
       width: 100%;
+      height: $height;
     }
 
     ::ng-deep .video-js {
-      $height: calc(100vh - #{$header-height} - #{$theater-bottom-space});
-
       height: $height;
       width: 100%;
       max-width: initial;
@@ -49,7 +48,13 @@ $video-info-margin-left: 44px;
   font-weight: $font-semibold;
 }
 
+.placeholder-image {
+  height: 100%;
+}
+
 #video-wrapper {
+  $video-height: 66vh;
+
   background-color: #000;
   display: flex;
   justify-content: center;
@@ -58,6 +63,7 @@ $video-info-margin-left: 44px;
     display: flex;
     justify-content: center;
     flex-grow: 1;
+    height: $video-height;
   }
 
   .remote-server-down {
@@ -84,7 +90,7 @@ $video-info-margin-left: 44px;
   ::ng-deep .video-js {
     width: 100%;
     max-width: getPlayerWidth(66vh);
-    height: 66vh;
+    height: $video-height;
 
     // VideoJS create an inner video player
     video {
@@ -94,10 +100,14 @@ $video-info-margin-left: 44px;
   }
 
   @media screen and (max-width: 600px) {
+    #videojs-wrapper {
+      height: getPlayerHeight(100vw) !important;
+    }
+
     .remote-server-down,
     ::ng-deep .video-js {
       width: 100vw;
-      height: getPlayerHeight(100vw)
+      height: getPlayerHeight(100vw) !important;
     }
   }
 }
@@ -133,12 +143,15 @@ $video-info-margin-left: 44px;
     .video-info-first-row {
       display: flex;
 
-      > div:first-child {
+      > div:first-child {
         flex-grow: 1;
       }
 
       .video-info-name {
-        margin-right: 30px;
+        @include peertube-word-wrap;
+
+        @include margin-right(30px);
+
         min-height: 40px; // Align with the action buttons
         font-size: 27px;
         font-weight: $font-semibold;
@@ -153,9 +166,10 @@ $video-info-margin-left: 44px;
       }
 
       .video-info-date-views {
-        align-self: start;
+        @include margin-right(10px);
+
         margin-bottom: 10px;
-        margin-right: 10px;
+        align-self: start;
         font-size: 1em;
       }
 
@@ -165,18 +179,13 @@ $video-info-margin-left: 44px;
 
         a {
           @include disable-default-a-behaviour;
+          @include peertube-word-wrap;
 
           color: pvar(--mainForegroundColor);
 
           &:hover {
             opacity: 0.8;
           }
-
-          img {
-            @include avatar(18px);
-
-            margin: -2px 5px 0 0;
-          }
         }
 
         .video-info-channel-left {
@@ -189,185 +198,24 @@ $video-info-margin-left: 44px;
             line-height: 1.37;
 
             a:nth-of-type(2) {
-              font-weight: 500;
+              font-weight: $font-regular;
               font-size: 90%;
             }
-          }
-        }
-
-        my-subscribe-button {
-          margin-left: 5px;
-        }
-      }
-
-      my-feed {
-        margin-left: 5px;
-        margin-top: 1px;
-      }
-
-      .video-actions-rates {
-        margin: 0 0 10px 0;
-        align-items: start;
-        width: max-content;
-        margin-left: auto;
-
-        .video-actions {
-          height: 40px; // Align with the title
-          display: flex;
-          align-items: center;
-
-          .action-button:not(:first-child),
-          .action-dropdown,
-          my-video-actions-dropdown {
-            margin-left: 5px;
-          }
-
-          ::ng-deep.action-button {
-            @include peertube-button;
-            @include button-with-icon(21px, 0, -1px);
-            @include apply-svg-color(pvar(--actionButtonColor));
-
-            font-size: 100%;
-            font-weight: $font-semibold;
-            display: inline-block;
-            padding: 0 10px 0 10px;
-            white-space: nowrap;
-            background-color: transparent !important;
-            color: pvar(--actionButtonColor);
-            text-transform: uppercase;
-
-            &::after {
-              display: none;
-            }
-
-            &:hover {
-              opacity: 0.9;
-            }
-
-            &.action-button-like,
-            &.action-button-dislike {
-              filter: brightness(120%);
 
-              .count {
-                margin-right: 5px;
-              }
-            }
-
-            &.action-button-like.activated {
-              .count {
-                color: pvar(--activatedActionButtonColor);
-              }
-
-              my-global-icon {
-                @include apply-svg-color(pvar(--activatedActionButtonColor));
-              }
-            }
-
-            &.action-button-dislike.activated {
-              .count {
-                color: pvar(--activatedActionButtonColor);
-              }
-
-              my-global-icon {
-                @include apply-svg-color(pvar(--activatedActionButtonColor));
-              }
-            }
-
-            &.action-button-support {
-              color: pvar(--supportButtonColor);
-
-              my-global-icon {
-                @include apply-svg-color(pvar(--supportButtonColor));
-              }
-            }
-
-            &.action-button-support {
-              my-global-icon {
-                ::ng-deep path:first-child {
-                  fill: pvar(--supportButtonHeartColor) !important;
-                }
-              }
-            }
-
-            &.action-button-save {
-              my-global-icon {
-                top: 0 !important;
-                right: -1px;
-              }
-            }
-
-            .icon-text {
-              margin-left: 3px;
-            }
-          }
-        }
-
-        .video-info-likes-dislikes-bar-outer-container {
-          position: relative;
-        }
-
-        .video-info-likes-dislikes-bar-inner-container {
-          position: absolute;
-          height: 20px;
-        }
-
-        .video-info-likes-dislikes-bar {
-          $likes-bar-height: 2px;
-          height: $likes-bar-height;
-          margin-top: -$likes-bar-height;
-          width: 120px;
-          background-color: #ccc;
-          position: relative;
-          top: 10px;
-
-          .likes-bar {
-            height: 100%;
-            background-color: #909090;
-
-            &.liked {
-              background-color: pvar(--activatedActionButtonColor);
+            a.single-link {
+              margin-top: 7px;
             }
           }
         }
-      }
-    }
-
-    .video-info-description {
-      margin: 20px 0;
-      margin-left: $video-info-margin-left;
-      font-size: 15px;
-
-      .video-info-description-html {
-        @include peertube-word-wrap;
-
-        /deep/ a {
-          text-decoration: none;
-        }
-      }
-
-      .glyphicon, .description-loading {
-        margin-left: 3px;
-      }
-
-      .description-loading {
-        display: inline-block;
-      }
 
-      .video-info-description-more {
-        cursor: pointer;
-        font-weight: $font-semibold;
-        color: pvar(--greyForegroundColor);
-        font-size: 14px;
-
-        .glyphicon {
-          position: relative;
-          top: 2px;
+        my-subscribe-button {
+          @include margin-left(5px);
         }
       }
     }
 
     .video-attributes {
-      margin-left: $video-info-margin-left;
+      @include margin-left($video-watch-info-margin-left);
     }
 
     .video-attributes .video-attribute {
@@ -376,8 +224,9 @@ $video-info-margin-left: 44px;
       margin-bottom: 12px;
 
       .video-attribute-label {
+        @include padding-right(5px);
+
         min-width: 142px;
-        padding-right: 5px;
         display: inline-block;
         color: pvar(--greyForegroundColor);
         font-weight: $font-bold;
@@ -395,43 +244,31 @@ $video-info-margin-left: 44px;
       &.video-attribute-tags {
         .video-attribute-value:not(:nth-child(2)) {
           &::before {
-            content: ', '
+            content: ', ';
           }
         }
       }
     }
   }
+}
 
-  ::ng-deep .other-videos {
-    padding-left: 15px;
-    min-width: $video-miniature-width;
+my-action-buttons {
+  @include margin-left(auto);
+  @include margin-right(0);
 
-    @media screen and (min-width: 1800px - (3* $video-miniature-width)) {
-      width: min-content;
-    }
+  display: block;
+  margin-top: 0;
+  margin-bottom: 10px;
 
-    .title-page {
-      margin: 0 !important;
-    }
+  align-items: start;
+  width: max-content;
+}
 
-    .video-miniature {
-      display: flex;
-      width: max-content;
-      height: 100%;
-      padding-bottom: 20px;
-      flex-wrap: wrap;
-    }
+my-recommended-videos {
+  @include padding-left(15px);
 
-    .video-bottom {
-      @media screen and (max-width: 1800px - (3* $video-miniature-width)) {
-        margin-left: 1rem;
-      }
-      @media screen and (max-width: 500px) {
-        margin-left: 0;
-        margin-top: .5rem;
-      }
-    }
-  }
+  display: block;
+  min-width: 250px;
 }
 
 my-video-comments {
@@ -440,91 +277,13 @@ my-video-comments {
   margin-bottom: 20px;
 }
 
-// If the view is not expanded, take into account the menu
-.privacy-concerns {
-  z-index: z(dropdown) + 1;
-  width: calc(100% - #{$menu-width});
-}
-
-@media screen and (max-width: $small-view) {
-  .privacy-concerns {
-    margin-left: $menu-width - 15px; // Menu is absolute
-  }
-}
-
-:host-context(.expanded) {
-  .privacy-concerns {
-    width: 100%;
-    margin-left: -15px;
-  }
-}
-
-.privacy-concerns {
-  position: fixed;
-  bottom: 0;
-  z-index: z(privacymsg);
-
-  padding: 5px 15px;
-
-  display: flex;
-  flex-wrap: nowrap;
-  align-items: center;
-  justify-content: space-between;
-  background-color: rgba(0, 0, 0, 0.9);
-  color: #fff;
-
-  .privacy-concerns-text {
-    margin: 0 5px;
-  }
-
-  a {
-    @include disable-default-a-behaviour;
-
-    color: pvar(--mainColor);
-    transition: color 0.3s;
-
-    &:hover {
-      color: #fff;
-    }
-  }
-
-  .privacy-concerns-button {
-    padding: 5px 8px 5px 7px;
-    margin-left: auto;
-    border-radius: 3px;
-    white-space: nowrap;
-    cursor: pointer;
-    transition: background-color 0.3s;
-    font-weight: $font-semibold;
-
-    &:hover {
-      background-color: #000;
-    }
-  }
-
-  .privacy-concerns-okay {
-    background-color: pvar(--mainColor);
-    margin-left: 10px;
-  }
-}
-
 @media screen and (max-width: 1600px) {
   .video-bottom .video-info .video-attributes .video-attribute {
     margin-bottom: 5px;
   }
 }
 
-@media screen and (max-width: 1300px) {
-  .privacy-concerns {
-    font-size: 12px;
-    padding: 2px 5px;
-
-    .privacy-concerns-text {
-      margin: 0;
-    }
-  }
-}
-
+// Use the same breakpoint than in the typescript component to display the other video miniatures as row
 @media screen and (max-width: 1100px) {
   #video-wrapper {
     flex-direction: column;
@@ -537,15 +296,10 @@ my-video-comments {
 
   .video-bottom {
     flex-direction: column;
+  }
 
-    ::ng-deep .other-videos {
-      padding-left: 0 !important;
-
-      ::ng-deep .video-miniature  {
-        flex-direction: row;
-        width: auto;
-      }
-    }
+  my-recommended-videos {
+    @include padding-left(0);
   }
 }
 
@@ -566,26 +320,10 @@ my-video-comments {
       }
     }
   }
-
-  ::ng-deep .other-videos .video-miniature  {
-    flex-direction: column;
-  }
-
-  .privacy-concerns {
-    width: 100%;
-
-    strong {
-      display: none;
-    }
-  }
 }
 
 @media screen and (max-width: 450px) {
   .video-bottom {
-    .action-button .icon-text {
-      display: none !important;
-    }
-
     .video-info .video-info-first-row {
       .video-info-name {
         font-size: 18px;
@@ -594,14 +332,16 @@ my-video-comments {
       .video-info-date-views {
         font-size: 14px;
       }
-
-      .video-actions-rates {
-        margin-top: 10px;
-      }
     }
+  }
 
-    .video-info-description {
-      font-size: 14px !important;
-    }
+  my-action-buttons {
+    margin-top: 10px;
   }
 }
+
+
+// Special case for iOS, that takes into account the width for fullscreens
+#video-wrapper ::ng-deep .video-js.vjs-fullscreen {
+  max-width: unset;
+}