Fix watch page responsive
[oweals/peertube.git] / client / src / app / videos / +video-watch / video-watch.component.scss
index 7bcfeb7c3507a2bd746c3d0d5b0c308fed54542b..58c45cde99a1a9b1e60e72ba582375e09c4d2b55 100644 (file)
@@ -1,12 +1,69 @@
-#video-container {
+@import '_variables';
+@import '_mixins';
+
+.root-row {
+  flex-direction: column;
+}
+
+.blacklisted-label {
+  font-weight: $font-semibold;
+}
+
+#video-element-wrapper {
   background-color: #000;
   display: flex;
   justify-content: center;
+  flex-grow: 1;
 
-  #video-element {
-    width: 888px;
+  .remote-server-down {
+    color: #fff;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    text-align: center;
+    justify-content: center;
+    background-color: #141313;
+    width: 100%;
+    font-size: 24px;
     height: 500px;
+
+    @media screen and (max-width: 1000px) {
+      font-size: 20px;
+    }
+
+    @media screen and (max-width: 600px) {
+      font-size: 16px;
+    }
   }
+
+  /deep/ .video-js {
+    width: calc(100vw - 240px);
+    height: auto;
+    max-height: 500px;
+
+    &.vjs-theater-enabled {
+      height: calc(100vh - #{$header-height} - #{$theater-bottom-space});
+      width: 100%;
+    }
+
+    // VideoJS create an inner video player
+    video {
+      outline: 0;
+      position: relative !important;
+    }
+  }
+
+  @media screen and (max-width: 600px) {
+    .remote-server-down,
+    /deep/ .video-js {
+      width: 100vw;
+      height: calc(100vw / 1.7); // 16/9
+    }
+  }
+}
+
+.alert {
+  text-align: center;
 }
 
 #video-not-found {
   line-height: 300px;
   margin-top: 50px;
   text-align: center;
-  font-weight: bold;
+  font-weight: $font-semibold;
+  font-size: 15px;
 }
 
 .video-bottom {
   margin-top: 40px;
-  display: flex;
 
   .video-info {
     flex-grow: 1;
-    margin-right: 28px;
+    // Set min width for flex item
+    min-width: 1px;
 
-    .video-info-name-actions {
+    .video-info-first-row {
       display: flex;
-      align-items: center;
+
+      & > div:first-child {
+        flex-grow: 1;
+      }
 
       .video-info-name {
+        margin-right: 30px;
+        min-height: 40px; // Align with the action buttons
         font-size: 27px;
         font-weight: $font-semibold;
         flex-grow: 1;
       }
 
-      .video-info-actions {
-        .action-button {
-          @include peertube-button;
+      .video-info-date-views {
+        flex-grow: 1;
+        margin-bottom: 10px;
+        margin-right: 10px;
+        font-size: 16px;
+      }
 
-          font-size: 15px;
-          font-weight: $font-semibold;
-          color: #585858;
-          background-color: #E5E5E5;
-          display: inline-block;
-          padding: 0 10px 0 10px;
+      .video-info-channel {
+        font-weight: $font-semibold;
+        font-size: 15px;
+
+        a {
+          @include disable-default-a-behaviour;
+
+          color: var(--mainForegroundColor);
 
           &:hover {
-            background-color: #EFEFEF;
+            opacity: 0.8;
+          }
+
+          img {
+            @include avatar(18px);
+
+            margin: -2px 2px 0 5px;
           }
         }
 
-        .action-more {
-          display: inline-block;
+        my-subscribe-button {
+          margin-left: 5px;
         }
+      }
 
-        .icon {
-          display: inline-block;
-          background-repeat: no-repeat;
-          background-size: contain;
-          width: 21px;
-          height: 21px;
-          vertical-align: middle;
-          position: relative;
-          top: -2px;
+      .video-info-by {
 
-          &.icon-like {
-            background-image: url('../../../assets/images/video/like.svg');
-          }
+        a {
+          @include disable-default-a-behaviour;
 
-          &.icon-dislike {
-            background-image: url('../../../assets/images/video/dislike.svg');
-          }
+          display: inline;
+          align-items: center;
+          font-size: 13px;
+          color: var(--mainForegroundColor);
 
-          &.icon-share {
-            background-image: url('../../../assets/images/video/share.svg');
+          span:hover {
+            opacity: 0.8;
           }
 
-          &.icon-more {
-            background-image: url('../../../assets/images/video/more.svg');
+          img {
+            @include avatar(18px);
+
+            margin-top: -2px;
+            margin-left: 7px;
           }
         }
+
+        my-help {
+          position: relative;
+          top: 1px;
+          margin-left: 2px;
+        }
       }
-    }
 
-    .video-info-date-views {
-      font-size: 16px;
-      margin-bottom: 10px;
-    }
+      my-video-feed {
+        margin-left: 5px;
+        margin-top: 1px;
+      }
 
-    .video-info-channel {
-      font-weight: $font-semibold;
-      font-size: 15px;
-    }
+      .video-actions-rates {
+        margin: 20px 0 10px 0;
+        align-items: start;
 
-    .video-info-by {
-      display: flex;
-      align-items: center;
-      font-size: 13px;
+        .video-actions {
+          height: 40px; // Align with the title
+          display: flex;
+          align-items: center;
 
-      img {
-        width: 16px;
-        height: 16px;
-        margin-left: 3px;
+          .action-button:not(:first-child), .action-more {
+            margin-left: 10px;
+          }
+
+          .action-button {
+            @include peertube-button;
+            @include grey-button;
+
+            font-size: 15px;
+            font-weight: $font-semibold;
+            display: inline-block;
+            padding: 0 10px 0 10px;
+            white-space: nowrap;
+
+            &::after {
+              display: none;
+            }
+
+            .icon {
+              @include icon(21px);
+
+              position: relative;
+              top: -2px;
+
+              &.icon-like {
+                background-image: url('../../../assets/images/video/like-grey.svg');
+              }
+
+              &.icon-dislike {
+                background-image: url('../../../assets/images/video/dislike-grey.svg');
+              }
+
+              &.icon-support {
+                background-image: url('../../../assets/images/video/heart.svg');
+              }
+
+              &.icon-share {
+                background-image: url('../../../assets/images/video/share.svg');
+              }
+
+              &.icon-more {
+                background-image: url('../../../assets/images/video/more.svg');
+                top: -1px;
+              }
+            }
+
+            .icon-text {
+              margin-left: 3px;
+            }
+
+            &.action-button-like.activated {
+              background-color: $green;
+
+              .icon-like {
+                background-image: url('../../../assets/images/video/like-white.svg');
+              }
+            }
+
+            &.action-button-dislike.activated {
+              background-color: $red;
+
+              .icon-dislike {
+                background-image: url('../../../assets/images/video/dislike-white.svg');
+              }
+            }
+          }
+
+          .action-more {
+            display: inline-block;
+
+            .dropdown-menu .dropdown-item {
+              padding: 6px 24px;
+
+              .icon {
+                @include icon(24px);
+
+                margin-right: 10px;
+                position: relative;
+                top: -1px;
+
+                &.icon-download {
+                  background-image: url('../../../assets/images/video/download-black.svg');
+                }
+
+                &.icon-edit {
+                  background-image: url('../../../assets/images/global/edit-black.svg');
+                }
+
+                &.icon-alert {
+                  background-image: url('../../../assets/images/video/alert.svg');
+                }
+
+                &.icon-blacklist {
+                  background-image: url('../../../assets/images/video/blacklist.svg');
+                }
+
+                &.icon-unblacklist {
+                  background-image: url('../../../assets/images/global/undo.svg');
+                }
+
+                &.icon-delete {
+                  background-image: url('../../../assets/images/global/delete-black.svg');
+                }
+              }
+            }
+          }
+        }
+
+        .video-info-likes-dislikes-bar {
+          $likes-bar-height: 2px;
+          height: $likes-bar-height;
+          margin-top: -$likes-bar-height;
+          width: 186px;
+          background-color: #E5E5E5;
+          position: relative;
+          top: 10px;
+
+          .likes-bar {
+            height: 100%;
+            background-color: #39CC0B;
+          }
+        }
       }
     }
 
       margin: 20px 0;
       font-size: 15px;
 
+      .video-info-description-html {
+        @include peertube-word-wrap;
+      }
+
+      .glyphicon, .description-loading {
+        margin-left: 3px;
+      }
+
       .description-loading {
         display: inline-block;
       }
       }
     }
 
-    .video-attributes {
-      .video-attribute {
-        font-size: 13px;
-        display: block;
-        margin-bottom: 12px;
+    .video-attributes .video-attribute {
+      font-size: 13px;
+      display: block;
+      margin-bottom: 12px;
 
-        .video-attribute-label {
-          width: 86px;
-          display: inline-block;
-          color: #585858;
-          font-weight: $font-bold;
+      .video-attribute-label {
+        min-width: 91px;
+        padding-right: 5px;
+        display: inline-block;
+        color: #585858;
+        font-weight: $font-bold;
+      }
+
+      a.video-attribute-value {
+        @include disable-default-a-behaviour;
+        color: var(--mainForegroundColor);
+
+        &:hover {
+          opacity: 0.9;
+        }
+      }
+
+      &.video-attribute-tags {
+        .video-attribute-value:not(:nth-child(2)) {
+          &::before {
+            content: ', '
+          }
         }
       }
     }
+  }
+
+  /deep/ .other-videos {
+    padding-left: 1em;
+    width: 260px;
+
+    .title-page {
+      margin-top: 0 !important;
+    }
+
+    .video-miniature {
+      display: flex;
+      height: 100%;
+      margin-bottom: 20px;
+      flex-wrap: wrap;
+
+      .video-miniature-information {
+        flex-grow: 1;
+      }
+
+      .video-thumbnail {
+        margin-right: 10px
+      }
+    }
+  }
+}
+
+// If the view is not expanded, take into account the menu
+.privacy-concerns {
+  width: calc(100% - #{$menu-width});
+}
+
+@media screen and (max-width: $small-view) {
+  .privacy-concerns {
+    margin-left: $menu-width;
+  }
+}
+
+:host-context(.expanded) {
+  .privacy-concerns {
+    width: 100%;
+    margin-left: 0;
+  }
+}
+
+.privacy-concerns {
+  position: fixed;
+  bottom: 0;
+
+  padding: 5px 15px;
+
+  display: flex;
+  align-items: center;
+  justify-content: flex-start;
+  background-color: rgba(0, 0, 0, 0.9);
+  color: #fff;
+
+  .privacy-concerns-text {
+    margin: 0 5px;
+  }
+
+  a {
+    @include disable-default-a-behaviour;
+
+    color: var(--mainColor);
+    transition: color 0.3s;
+
+    &:hover {
+      color: #fff;
+    }
+  }
+
+  .privacy-concerns-okay {
+    background-color: var(--mainColor);
+    padding: 5px 8px 5px 7px;
+    margin-left: auto;
+    border-radius: 3px;
+    cursor: pointer;
+    transition: background-color 0.3s;
+    font-weight: $font-semibold;
+
+    &:hover {
+      background-color: #000;
+    }
+  }
+}
+
+
+@media screen and (max-width: 1600px) {
+  .video-bottom .video-info .video-attributes .video-attribute {
+    margin-bottom: 5px;
+  }
+}
+
+@media screen and (max-width: 1300px) {
+  /deep/ .other-videos {
+    padding-left: 0 !important;
+  }
+
+  .privacy-concerns {
+    font-size: 12px;
+    padding: 2px 5px;
+
+    .privacy-concerns-text {
+      margin: 0;
+    }
+  }
+}
+
+@media screen and (max-width: 600px) {
+  .video-bottom {
+    margin: 20px 0 0 0;
+
+    .video-info {
+
+      .video-info-first-row {
+
+        .video-info-name {
+          font-size: 20px;
+          height: auto;
+        }
+      }
+    }
+  }
+
+  /deep/ .other-videos {
+    /deep/ .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;
   }
 }