X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fsass%2Finclude%2F_mixins.scss;h=d414704e943e7a2f6d3872b3d5a248f68718717e;hb=23f1b9da1577c64e2caa1dff8f3aa92eb8d184cf;hp=e18e9ae9d7990e0cff85cd9ac88ad62d57698829;hpb=28f3d1b36a70426795240c9370e47b6c4ba847f8;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/sass/include/_mixins.scss b/client/src/sass/include/_mixins.scss index e18e9ae9d..d414704e9 100644 --- a/client/src/sass/include/_mixins.scss +++ b/client/src/sass/include/_mixins.scss @@ -11,30 +11,23 @@ &:focus:not(.focus-visible) { outline: none; } +} - &::-moz-focus-inner { - border: 0; - padding: 0 - } + +@mixin ellipsis { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -/** - * This mixin will crop text in block for needed amount of lines and put ellipsis at the end - * - * @param $font-size font-size property - * @param $line-height line-height property - * @param $lines-to-show amount of lines to show - */ -@mixin ellipsis-multiline($font-size: 1rem, $line-height: 1, $lines-to-show: 2) { +@mixin ellipsis-multiline($font-size: 16px, $number-of-lines: 2) { display: block; /* Fallback for non-webkit */ display: -webkit-box; - max-height: $font-size * $line-height * $lines-to-show; + max-height: $font-size * $number-of-lines; /* Fallback for non-webkit */ font-size: $font-size; - line-height: $line-height; - -webkit-line-clamp: $lines-to-show; - -webkit-box-orient: vertical; + line-height: $font-size; overflow: hidden; text-overflow: ellipsis; } @@ -46,7 +39,7 @@ } @mixin peertube-word-wrap { - word-break: normal; + word-break: break-word; word-wrap: break-word; overflow-wrap: break-word; -webkit-hyphens: auto; @@ -56,14 +49,41 @@ } @mixin apply-svg-color ($color) { - /deep/ svg { - path[fill="#000000"], g[fill="#000000"], rect[fill="#000000"], circle[fill="#000000"] { + ::ng-deep svg { + path[fill="#000000"], + g[fill="#000000"], + rect[fill="#000000"], + circle[fill="#000000"], + polygon[fill="#000000"] { fill: $color; } - path[stroke="#000000"], g[stroke="#000000"], rect[stroke="#000000"], circle[stroke="#000000"] { + path[stroke="#000000"], + g[stroke="#000000"], + rect[stroke="#000000"], + circle[stroke="#000000"], + polygon[stroke="#000000"] { stroke: $color; } + + stop[stop-color="#000000"] { + stop-color: $color; + } + } +} + +@mixin fill-svg-color ($color) { + ::ng-deep svg { + path { + fill: $color; + } + } +} + +@mixin button-focus($color) { + &:focus, + &.focus-visible { + box-shadow: 0 0 0 .2rem $color; } } @@ -71,7 +91,7 @@ display: inline-block; height: $button-height; width: $width; - background: var(--inputColor); + background: var(--inputBackgroundColor); border: 1px solid #C6C6C6; border-radius: 3px; padding-left: 15px; @@ -89,7 +109,7 @@ @mixin peertube-input-group($width) { width: $width; - height: $button-height; + min-height: $button-height; padding-top: 0; padding-bottom: 0; @@ -108,6 +128,8 @@ } @mixin orange-button { + @include button-focus(var(--mainColorLightest)); + &, &:active, &:focus { color: #fff; background-color: var(--mainColor); @@ -129,7 +151,24 @@ } } +@mixin tertiary-button { + @include button-focus($grey-button-outline-color); + + color: $grey-foreground-color; + background-color: transparent; + + &[disabled], &.disabled { + cursor: default; + } + + my-global-icon { + @include apply-svg-color(transparent) + } +} + @mixin grey-button { + @include button-focus($grey-button-outline-color); + &, &:active, &:focus { background-color: $grey-background-color; color: $grey-foreground-color; @@ -159,7 +198,6 @@ text-align: center; padding: 0 17px 0 13px; cursor: pointer; - outline: 0; } @mixin peertube-button-link { @@ -169,6 +207,15 @@ @include peertube-button; } +@mixin peertube-button-outline { + display: inline-block; + + @include disable-default-a-behaviour; + @include peertube-button; + + border: 1px solid; +} + @mixin button-with-icon($width: 20px, $margin-right: 3px, $top: -1px) { my-global-icon { position: relative; @@ -183,6 +230,7 @@ overflow: hidden; display: inline-block; width: $width; + min-height: 30px; @include peertube-button; @include orange-button; @@ -191,8 +239,8 @@ position: absolute; top: 0; right: 0; - min-width: 100%; - min-height: 100%; + width: 100%; + height: 100%; font-size: 100px; text-align: right; filter: alpha(opacity=0); @@ -214,29 +262,43 @@ cursor: pointer; } +@mixin select-arrow-down { + top: 50%; + right: calc(0% + 15px); + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border: 5px solid rgba(0, 0, 0, 0); + border-top-color: #000; + margin-top: -2px; + z-index: 100; +} + @mixin peertube-select-container ($width) { padding: 0; margin: 0; - border: 1px solid #C6C6C6; width: $width; border-radius: 3px; - overflow: hidden; - background: var(--inputColor); + background: var(--inputBackgroundColor); position: relative; font-size: 15px; + &.disabled { + background-color: #E5E5E5; + + select { + cursor: default; + } + } + + @media screen and (max-width: $width) { + width: 100%; + } + &:after { - top: 50%; - right: calc(0% + 15px); - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border: 5px solid rgba(0, 0, 0, 0); - border-top-color: #000; - margin-top: -2px; - z-index: 100; + @include select-arrow-down; } select { @@ -244,8 +306,7 @@ width: calc(100% + 2px); position: relative; left: 1px; - border: none; - box-shadow: none; + border: 1px solid #C6C6C6; background: transparent none; appearance: none; cursor: pointer; @@ -268,16 +329,6 @@ } } -@mixin peertube-select-disabled-container ($width) { - @include peertube-select-container($width); - - background-color: #E5E5E5; - - select { - cursor: default; - } -} - // Thanks: https://codepen.io/triss90/pen/XNEdRe/ @mixin peertube-radio-container { input[type="radio"] { @@ -317,13 +368,19 @@ } @mixin peertube-checkbox ($border-width) { - display: none; + opacity: 0; + position: absolute; + + &:focus + span { + box-shadow: 0 0 0 .2rem var(--mainColorLightest); + } & + span { position: relative; width: 18px; + min-width: 18px; height: 18px; - border: $border-width solid var(--mainForegroundColor); + border: $border-width solid $fg-color; border-radius: 3px; vertical-align: middle; cursor: pointer; @@ -337,8 +394,8 @@ height: 12px; opacity: 0; transform: rotate(45deg) scale(0); - border-right: 2px solid var(--mainBackgroundColor); - border-bottom: 2px solid var(--mainBackgroundColor); + border-right: 2px solid $bg-color; + border-bottom: 2px solid $bg-color; } } @@ -374,6 +431,8 @@ border-radius: 50%; width: $size; height: $size; + min-width: $size; + min-height: $size; } @mixin chevron ($size, $border-width) { @@ -407,10 +466,17 @@ font-size: 13px; } +@mixin settings-big-title { + text-transform: uppercase; + color: var(--mainColor); + font-weight: $font-bold; + font-size: 110%; + margin-bottom: 10px; +} + @mixin actor-owner { @include disable-default-a-behaviour; - display: inline-table; font-size: 13px; margin-top: 4px; color: var(--mainForegroundColor); @@ -429,10 +495,10 @@ } @mixin sub-menu-with-actor { - height: 160px; + height: max-content; display: flex; flex-direction: column; - align-items: start; + align-items: flex-start; .actor { display: flex; @@ -453,14 +519,15 @@ .actor-names { display: flex; align-items: center; + flex-wrap: wrap; .actor-display-name { font-size: 23px; font-weight: $font-bold; + margin-right: 7px; } .actor-name { - margin-left: 7px; position: relative; top: 3px; font-size: 14px; @@ -468,6 +535,10 @@ } } + .actor-lower { + grid-area: lower; + } + .actor-followers { font-size: 15px; } @@ -480,11 +551,18 @@ .links { margin-top: 0; - margin-bottom: 10px; + margin-bottom: 15px; a { margin-top: 0; margin-bottom: 0; + text-transform: uppercase; + font-weight: 600; + font-size: 110%; + + @media screen and (max-width: $mobile-view) { + font-size: 130%; + } } } } @@ -505,36 +583,217 @@ @media screen and (max-width: 800px) { flex-direction: column; height: auto; - text-align: center; align-items: center; } } -@mixin video-miniature-small-screen { - text-align: center; +@mixin dropdown-with-icon-item { + padding: 6px 15px; - /deep/ .video-miniature { - padding-right: 0; - height: auto; - width: 100%; + my-global-icon { + width: 22px; + opacity: .7; + + margin-right: 10px; + position: relative; + top: -2px; + } +} + +@mixin progressbar { + background-color: $grey-background-color; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + border-radius: 0.25rem; + + .progress-bar { + color: var(--mainBackgroundColor); + background-color: var(--mainColor); + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + white-space: nowrap; + transition: width 0.6s ease; + + &.secondary { + background-color: var(--secondaryColor); + } + } +} + +@mixin breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: var(--submenuColor); + border-radius: 0.25rem; + + .breadcrumb-item { + display: flex; + + a { + color: var(--mainColor); + } + + & + .breadcrumb-item { + padding-left: 0.5rem; + &::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; + } + } + + &.active { + color: #6c757d; + } + } +} + +@mixin dashboard { + display: flex; + flex-wrap: wrap; + margin: 0 -5px; + + & > div { + box-sizing: border-box; + flex: 0 0 percentage(1/3); + padding: 0 5px; + margin-bottom: 10px; + + & > a { + text-decoration: none; + color: inherit; + display: block; + font-size: 18px; + + &:active, + &:focus, + &:hover { + opacity: .8; + } + } + + & > a, + & > div { + padding: 20px; + background: var(--submenuColor); + border-radius: 4px; + box-sizing: border-box; + height: 100%; + } + } + + .dashboard-num, .dashboard-text { + text-align: center; + font-size: 130%; + line-height: 21px; + color: var(--mainForegroundColor); + line-height: 30px; margin-bottom: 20px; + } + + .dashboard-label { + font-size: 90%; + color: var(--inputPlaceholderColor); + text-align: center; + } +} + +@mixin ng2-tags { + ::ng-deep { + .ng2-tag-input { + border: none !important; + } + + .ng2-tags-container { + display: flex; + align-items: center; + border: 1px solid #C6C6C6; + border-radius: 3px; + padding: 5px !important; + height: max-content; + + &:focus-within { + box-shadow: 0 0 0 .2rem var(--mainColorLightest); + } + } + + tag-input-form { + input { + height: 30px !important; + font-size: 12px !important; - .video-miniature-information { - width: 100% !important; + background-color: var(--mainBackgroundColor) !important; + color: var(--mainForegroundColor) !important; + } + } - span { - width: 100%; + tag { + background-color: $grey-background-color !important; + color: #000 !important; + border-radius: 3px !important; + font-size: 12px !important; + height: 30px !important; + line-height: 30px !important; + margin: 0 5px 0 0 !important; + cursor: default !important; + padding: 0 8px 0 10px !important; + + div { + height: 100% !important; } } - .video-thumbnail { - width: 100%; - height: auto; + delete-icon { + cursor: pointer !important; + height: auto !important; + vertical-align: middle !important; + padding-left: 6px !important; + + svg { + position: relative; + top: -1px; + height: auto !important; + vertical-align: middle !important; + + path { + fill: $grey-foreground-color !important; + } + } - img { - width: 100%; - height: auto; + &:hover { + transform: none !important; } } } } + +@mixin divider($color: var(--submenuColor), $background: var(--mainBackgroundColor)) { + width: 95%; + border-top: .05rem solid $color; + height: .05rem; + text-align: center; + display: block; + position: relative; + + &[data-content] { + margin: .8rem 0; + + &::after { + background: $background; + color: $color; + content: attr(data-content); + display: inline-block; + font-size: .7rem; + padding: 0 .4rem; + transform: translateY(-.65rem); + } + } +}