]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/sass/application.scss
Improve navigation sub-menu and tabs effects (#2971)
[github/Chocobozzz/PeerTube.git] / client / src / sass / application.scss
index 8e26669443c13e6868f83a89d8ae8f61dcf6bb29..c76e5db7b2c692fd418581a5c46ea403a108b6d8 100644 (file)
-@import '~primeng/resources/themes/bootstrap/theme.css';
-@import '~primeng/resources/primeng.css';
+$icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/';
+
+@import '_bootstrap-variables';
+@import '_variables';
+@import '_mixins';
+
+@import '_fonts';
+
 @import '~video.js/dist/video-js.css';
-@import './video-js-custom.scss';
+
+$assets-path: '../assets/';
+@import './player/index';
+@import './loading-bar';
+
+@import './bootstrap';
+@import './primeng-custom';
 
 [hidden] {
   display: none !important;
 }
 
+body {
+  /*** theme ***/
+  // now beware node-sass requires interpolation
+  // for css custom properties #{$var}
+  --mainColor: #{$main-color};
+  --mainColorLighter: #{$main-color-lighter};
+  --mainColorLightest: #{$main-color-lightest};
+  --mainHoverColor: #{$main-hover-color};
+  --mainBackgroundColor: #{$bg-color};
+  --mainForegroundColor: #{$fg-color};
+  --secondaryColor: #{$secondary-color};
+
+  --greyForegroundColor: #{$grey-foreground-color};
+
+  --menuBackgroundColor: #{$menu-background};
+  --menuForegroundColor: #{$menu-color};
+  --submenuColor: #{$sub-menu-color};
+
+  --inputForegroundColor: #{$input-foreground-color};
+  --inputBackgroundColor: #{$input-background-color};
+  --inputPlaceholderColor: #{$input-placeholder-color};
+
+  --textareaForegroundColor: #{$textarea-foreground-color};
+  --textareaBackgroundColor: #{$textarea-background-color};
+  --markdownTextareaBackgroundColor: #{$markdown-textarea-background-color};
+
+  --actionButtonColor: #{$grey-foreground-color};
+  --supportButtonBackgroundColor: #{transparent};
+  --supportButtonColor: #{pvar(--actionButtonColor)};
+  --supportButtonHeartColor: #{$support-button-heart};
+
+  --activatedActionButtonColor: #{$activated-action-button-color};
+
+  font-family: $main-fonts;
+  font-weight: $font-regular;
+  color: pvar(--mainForegroundColor);
+  background-color: pvar(--mainBackgroundColor);
+  font-size: 14px;
+  // On desktop browsers, make sure vertical scroll bar is always visible
+  // Allow to disable the scrollbar instead of hide it when the content fit the body
+  // And not move the content and header horizontally sticked to right when the content is updating
+  overflow-y: scroll;
+}
+
+::selection {
+  color: pvar(--mainBackgroundColor);
+  background-color: pvar(--mainHoverColor);
+}
+
+#incompatible-browser {
+  display: none;
+  text-align: center;
+  position: absolute;
+  width: 100%;
+  top: 45%;
+}
+
+strong {
+  font-weight: $font-semibold;
+}
+
 input.readonly {
   /* Force blank on readonly inputs */
-  background-color: #fff !important;
+  background-color: pvar(--inputBackgroundColor) !important;
+}
+
+input, textarea {
+  outline: none;
+  color: pvar(--mainForegroundColor);
+}
+
+button {
+  background: unset;
+  @include disable-outline;
+}
+
+label {
+  font-weight: $font-bold;
+  font-size: 15px;
+}
+
+.form-error {
+  display: block;
+  color: $red;
+  margin-top: 5px;
 }
 
-.form-control, .btn {
-  border-radius: 0;
+.input-error {
+  border-color: $red !important;
 }
 
-.dropdown-menu {
-  border-radius: 0;
+.fullWidth {
+  width: 100%;
+  margin-left: auto;
+  margin-right: auto;
+  max-width: initial;
 }
 
 .glyphicon-black {
   color: black;
 }
 
+.row {
+  margin: 0 !important;
+}
+
 .main-col {
+  margin-left: $menu-width;
+  width: calc(100% - #{$menu-width});
+  outline: none;
+
+  .margin-content {
+    margin-left: $not-expanded-horizontal-margins;
+    margin-right: $not-expanded-horizontal-margins;
+    flex-grow: 1;
+  }
+
+  .sub-menu {
+    background-color: pvar(--submenuColor);
+    width: 100%;
+    height: $sub-menu-height;
+    display: flex;
+    align-items: center;
+    padding-left: $not-expanded-horizontal-margins;
+    padding-right: $not-expanded-horizontal-margins;
+    position: fixed;
+    z-index: 1;
+  }
+
+  // Override some properties if the main content is expanded (no menu on the left)
+  &.expanded {
+    margin-left: 0;
+    width: 100%;
 
-  .content-padding {
-    padding: 15px 30px;
+    .margin-content {
+      margin-left: $expanded-horizontal-margins;
+      margin-right: $expanded-horizontal-margins;
+    }
 
-    @media screen and (max-width: 800px) {
-      padding: 15px 10px;
+    .sub-menu {
+      padding-left: $expanded-horizontal-margins;
+      padding-right: $expanded-horizontal-margins;
     }
+  }
 
-    @media screen and (min-width: 1400px) {
-      padding: 15px 40px;
+  &.lock-scroll .main-row > router-outlet + * {
+    // Lock and hide body scrollbars
+    position: fixed;
+
+    // Lock and hide sub-menu scrollbars
+    .sub-menu {
+      overflow-x: hidden;
     }
+  }
+}
+
+.title-page {
+  opacity: 0.6;
+  color: pvar(--mainForegroundColor);
+  font-size: 16px;
+  display: inline-block;
+  margin-right: 55px;
+  font-weight: $font-semibold;
+  @include disable-default-a-behaviour;
+
+  border-bottom: 2px solid transparent;
+
+  &.title-page-single {
+    margin-top: 30px;
+    margin-bottom: 25px;
+  }
+
+  &.active {
+    border-bottom-color: pvar(--mainColor);
+  }
+
+  &.title-page-single {
+    font-size: 125%;
+  }
+
+  &:hover, &:active, &:focus {
+    color: pvar(--mainForegroundColor);
+  }
+
+  &.active, &:hover,  &:active, &:focus, &.title-page-single {
+    opacity: 1;
+    outline: 0px hidden !important;
+  }
+
+  @media screen and (max-width: $mobile-view) {
+    margin-right: 15px;
+  }
+}
 
-    @media screen and (min-width: 1600px) {
-      padding: 15px 50px;
+.title-page-about,
+.title-page-settings {
+  white-space: nowrap;
+  font-size: 115%;
+}
+
+.admin-sub-header {
+  display: flex;
+  align-items: center;
+  margin-bottom: 30px;
+
+  .form-sub-title {
+    flex-grow: 1;
+  }
+
+  .admin-sub-nav a {
+    @include disable-default-a-behaviour;
+
+    font-size: 16px;
+    color: pvar(--mainForegroundColor);
+    padding: 5px 15px;
+    border-radius: 0.25rem;
+    font-weight: $font-semibold;
+    opacity: 0.6;
+
+    &.active {
+      background-color: #f0f0f0;
     }
 
-    @media screen and (min-width: 1800px) {
-      padding: 15px 60px;
+    &.active, &:hover, &:active, &:focus {
+      opacity: 1;
     }
   }
 }
 
-// Thanks https://gist.github.com/alexandrevicenzi/680147013e902a4eaa5d
-.glyphicon-refresh-animate {
-  -animation: spin .7s infinite linear;
-  -ms-animation: spin .7s infinite linear;
-  -webkit-animation: spinw .7s infinite linear;
-  -moz-animation: spinm .7s infinite linear;
+.form-sub-title {
+  font-size: 20px;
+  font-weight: bold;
 }
 
 @keyframes spin {
@@ -60,23 +258,167 @@ input.readonly {
   to { transform: scale(1) rotate(360deg);}
 }
 
-@-webkit-keyframes spinw {
-  from { -webkit-transform: rotate(0deg);}
-  to { -webkit-transform: rotate(360deg);}
+// In tables, don't have a hover different background
+table {
+  .action-button-edit, .action-button-delete {
+    &:hover, &:active, &:focus, &[disabled], &.disabled {
+      background-color: $grey-background-color !important;
+    }
+  }
+}
+
+.no-results {
+  height: 40vh;
+  max-height: 500px;
+
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 16px;
+  font-weight: $font-semibold;
+}
+
+.dropdown-item {
+  @include dropdown-with-icon-item;
+
+  my-global-icon {
+    width: 22px;
+    height: 22px;
+  }
+}
+
+.anchor {
+  position: relative;
+  top: #{-($header-height + 20px)};
+}
+
+@media screen and (max-width: #{breakpoint(xxl)}) {
+  .main-col {
+    &.expanded {
+      .margin-content {
+        margin-left: $expanded-horizontal-margins/2;
+        margin-right: $expanded-horizontal-margins/2;
+      }
+    }
+  }
+}
+
+@media screen and (max-width: #{breakpoint(lg)}) {
+  /* the following applies from 500px to 900px and is partially overriden from 500px to 800px by changes below to $small-view */
+  .main-col {
+    &, &.expanded {
+      .margin-content {
+        margin-left: $expanded-horizontal-margins/3;
+        margin-right: $expanded-horizontal-margins/3;
+      }
+
+      .sub-menu {
+        padding-left: 50px;
+        padding-right: 50px;
+
+        .title-page {
+          font-size: 17px;
+        }
+      }
+    }
+  }
 }
 
-@-moz-keyframes spinm {
-  from { -moz-transform: rotate(0deg);}
-  to { -moz-transform: rotate(360deg);}
+@media screen and (min-width: $mobile-view) and (max-width: $small-view) {
+  .main-col {
+    width: 100%;
+  }
+}
+
+@media screen and (max-width: $small-view) {
+  .main-col {
+    margin-left: 0;
+
+    &, &.expanded {
+      .margin-content {
+        margin-left: 15px;
+        margin-right: 15px;
+      }
+
+      .sub-menu {
+        width: 100vw;
+        padding-left: 15px;
+        padding-right: 15px;
+        margin-bottom: $sub-menu-margin-bottom-small-view;
+        overflow-x: auto;
+      }
+
+      .admin-sub-header {
+        @include admin-sub-header-responsive(15px*2);
+      }
+
+      my-markdown-textarea {
+        .root {
+          max-width: 100% !important;
+        }
+      }
+
+      input[type=text],
+      input[type=password],
+      input[type=email],
+      textarea,
+      .peertube-select-container {
+        width: 100% !important;
+      }
+
+      .caption input[type=text] {
+        width: unset !important;
+        flex-grow: 1;
+      }
+    }
+  }
+}
+
+// overflow-databale responsive rules
+@media screen and (min-width: #{breakpoint(lg)}) {
+  .main-col {
+    &.expanded {
+      @include overflow-datatable(breakpoint(lg), $expanded-horizontal-margins/2, $mobile-paginator: false);
+    }
+
+    &:not(.expanded) {
+      @include overflow-datatable(breakpoint(lg), $not-expanded-horizontal-margins + $menu-width/2, $mobile-paginator: false);
+    }
+  }
+}
+
+@media screen and (max-width: #{breakpoint(lg)}) {
+  .main-col {
+    &.expanded {
+      @include overflow-datatable(breakpoint(lg), $expanded-horizontal-margins/3);
+    }
+
+    &:not(.expanded) {
+      @include overflow-datatable(breakpoint(lg), $expanded-horizontal-margins/3 + $menu-width/2);
+    }
+  }
+}
+
+@media screen and (max-width: $small-view) {
+  .main-col {
+    &:not(.expanded),
+    &.expanded {
+      @include overflow-datatable(breakpoint(lg), 15px);
+    }
+  }
 }
 
-/* ngprime data table customizations */
-p-datatable {
-  .action-cell {
-    text-align: center;
+@media screen and (min-width: $small-view) and (max-width: #{$small-view + $menu-width}) {
+  .main-col {
+    &:not(.expanded) {
+      .admin-sub-header {
+        @include admin-sub-header-responsive($expanded-horizontal-margins/3 + $menu-width/2);
+      }
 
-    .glyphicon {
-      cursor: pointer;
+      .sub-menu {
+        overflow-x: auto;
+        width: calc(100vw - #{$menu-width});
+      }
     }
   }
 }