X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fsass%2Finclude%2F_mixins.scss;h=ca11488cb0c117c51046b4eb2424fb70fe273e30;hb=370240824e2fb28b314255f6c23f5ea7d6b08625;hp=cfb14ef65ee7208b394430ca3251fe2f77059440;hpb=7a03209d28f3f31d706dee08ae487d2ca1926893;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/sass/include/_mixins.scss b/client/src/sass/include/_mixins.scss index cfb14ef65..ca11488cb 100644 --- a/client/src/sass/include/_mixins.scss +++ b/client/src/sass/include/_mixins.scss @@ -29,31 +29,6 @@ line-height: $font-size; overflow: hidden; text-overflow: ellipsis; - /* Let space at right for dots */ - position: relative; - margin-right: -1em; - padding-right: 1em; - - /* Display dots if the max number of lines is exceeded */ - &::before { - content: "..."; - /* set position to right bottom corner of block */ - position: absolute; - bottom: 0; - right: 0; - } - - /* Hide dots if the max number of lines is not exceeded */ - &:after { - content: ''; - background-color: var(--mainBackgroundColor); - /* set position to right bottom corner of text */ - position: absolute; - right: 0; - width: 1em; - height: 1em; - margin-top: 0.2em; - } } @mixin prefix($property, $parameters...) { @@ -73,24 +48,29 @@ } @mixin apply-svg-color ($color) { + ::ng-deep .feather, + ::ng-deep .material { + color: $color; + } + ::ng-deep svg { - path[fill="#000000"], - g[fill="#000000"], - rect[fill="#000000"], - circle[fill="#000000"], - polygon[fill="#000000"] { + path[fill="#000"], + g[fill="#000"], + rect[fill="#000"], + circle[fill="#000"], + polygon[fill="#000"] { fill: $color; } - path[stroke="#000000"], - g[stroke="#000000"], - rect[stroke="#000000"], - circle[stroke="#000000"], - polygon[stroke="#000000"] { + path[stroke="#000"], + g[stroke="#000"], + rect[stroke="#000"], + circle[stroke="#000"], + polygon[stroke="#000"] { stroke: $color; } - stop[stop-color="#000000"] { + stop[stop-color="#000"] { stop-color: $color; } } @@ -115,7 +95,8 @@ display: inline-block; height: $button-height; width: $width; - background: var(--inputBackgroundColor); + color: pvar(--inputForegroundColor); + background-color: pvar(--inputBackgroundColor); border: 1px solid #C6C6C6; border-radius: 3px; padding-left: 15px; @@ -123,7 +104,11 @@ font-size: 15px; &::placeholder { - color: var(--inputPlaceholderColor); + color: pvar(--inputPlaceholderColor); + } + + &[readonly] { + opacity: 0.7; } @media screen and (max-width: $width) { @@ -136,6 +121,7 @@ min-height: $button-height; padding-top: 0; padding-bottom: 0; + flex-wrap: nowrap; .input-group-text{ font-size: 14px; @@ -146,22 +132,24 @@ @mixin peertube-textarea ($width, $height) { @include peertube-input-text($width); + color: pvar(--textareaForegroundColor); + background-color: pvar(--textareaBackgroundColor); height: $height; padding: 5px 15px; font-size: 15px; } @mixin orange-button { - @include button-focus(var(--mainColorLightest)); + @include button-focus(pvar(--mainColorLightest)); &, &:active, &:focus { color: #fff; - background-color: var(--mainColor); + background-color: pvar(--mainColor); } &:hover { color: #fff; - background-color: var(--mainHoverColor); + background-color: pvar(--mainHoverColor); } &[disabled], &.disabled { @@ -178,7 +166,7 @@ @mixin tertiary-button { @include button-focus($grey-button-outline-color); - color: $grey-foreground-color; + color: pvar(--greyForegroundColor); background-color: transparent; &[disabled], &.disabled { @@ -193,13 +181,11 @@ @mixin grey-button { @include button-focus($grey-button-outline-color); - &, &:active, &:focus { - background-color: $grey-background-color; - color: $grey-foreground-color; - } + background-color: $grey-background-color; + color: pvar(--greyForegroundColor); &:hover, &:active, &:focus, &[disabled], &.disabled { - color: $grey-foreground-color; + color: pvar(--greyForegroundColor); background-color: $grey-background-hover-color; } @@ -208,7 +194,28 @@ } my-global-icon { - @include apply-svg-color($grey-foreground-color) + @include apply-svg-color(pvar(--greyForegroundColor)) + } +} + +@mixin danger-button { + $color: lighten($color: #c54130, $amount: 10); + $text: #fff6f5; + + @include button-focus(scale-color($color, $alpha: -95%)); + background-color: $color; + color: $text; + + &:hover, &:active, &:focus, &[disabled], &.disabled { + background-color: lighten($color: $color, $amount: 10); + } + + &[disabled], &.disabled { + cursor: default; + } + + my-global-icon { + @include apply-svg-color($text) } } @@ -241,6 +248,10 @@ } @mixin button-with-icon($width: 20px, $margin-right: 3px, $top: -1px) { + display: inline-flex; + align-items: center; + line-height: normal !important; + my-global-icon { position: relative; width: $width; @@ -249,16 +260,12 @@ } } -@mixin peertube-button-file ($width) { +@mixin peertube-file { position: relative; overflow: hidden; display: inline-block; - width: $width; min-height: 30px; - @include peertube-button; - @include orange-button; - input[type=file] { position: absolute; top: 0; @@ -276,6 +283,13 @@ } } +@mixin peertube-button-file ($width) { + width: $width; + + @include peertube-file; + @include peertube-button; +} + @mixin icon ($size) { display: inline-block; background-repeat: no-repeat; @@ -300,12 +314,21 @@ z-index: 100; } +@mixin responsive-width ($width) { + width: $width; + + @media screen and (max-width: $width) { + width: 100%; + } +} + @mixin peertube-select-container ($width) { padding: 0; margin: 0; width: $width; border-radius: 3px; - background: var(--inputBackgroundColor); + color: pvar(--inputForegroundColor); + background: pvar(--inputBackgroundColor); position: relative; font-size: 15px; @@ -327,16 +350,14 @@ select { padding: 0 35px 0 12px; - width: calc(100% + 2px); position: relative; - left: 1px; border: 1px solid #C6C6C6; background: transparent none; appearance: none; cursor: pointer; height: $button-height; text-overflow: ellipsis; - color: var(--mainForegroundColor); + color: pvar(--mainForegroundColor); &:focus { outline: none; @@ -351,6 +372,17 @@ color: #000; } } + + &.peertube-select-button { + @include grey-button; + + select, + option { + font-weight: $font-semibold; + color: pvar(--greyForegroundColor); + border: none; + } + } } // Thanks: https://codepen.io/triss90/pen/XNEdRe/ @@ -396,7 +428,7 @@ position: absolute; &:focus + span { - box-shadow: #{$focus-box-shadow-form} var(--mainColorLightest); + box-shadow: #{$focus-box-shadow-form} pvar(--mainColorLightest); } & + span { @@ -425,7 +457,7 @@ &:checked + span { border-color: transparent; - background: var(--mainColor); + background: pvar(--mainColor); animation: jelly 0.6s ease; &:after { @@ -449,6 +481,49 @@ } } +@mixin table-badge { + border-radius: 2px; + padding: 1/4em 1/2em; + text-transform: uppercase; + font-weight: $font-bold; + font-size: 12px; + letter-spacing: 1/3px; + + &.badge-banned, + &.badge-red { + background-color: #ffcdd2; + color: #c63737; + } + + &.badge-banned { + text-decoration: line-through; + } + + &.badge-yellow { + background-color: #feedaf; + color: #8a5340; + } + + &.badge-brown { + background-color: #ffd8b2; + color: #805b36; + } + + &.badge-green { + background-color: #c8e6c9; + color: #256029; + } + + &.badge-blue { + background-color: #b3e5fc; + color: #23547b; + } + + &.badge-purple { + background-color: #eccfff; + color: #694382; + } +} @mixin avatar ($size) { object-fit: cover; @@ -485,14 +560,14 @@ @mixin in-content-small-title { text-transform: uppercase; - color: var(--mainColor); + color: pvar(--mainColor); font-weight: $font-bold; font-size: 13px; } @mixin settings-big-title { text-transform: uppercase; - color: var(--mainColor); + color: pvar(--mainColor); font-weight: $font-bold; font-size: 110%; margin-bottom: 10px; @@ -503,7 +578,7 @@ font-size: 13px; margin-top: 4px; - color: var(--mainForegroundColor); + color: pvar(--mainForegroundColor); span:hover { opacity: 0.8; @@ -519,6 +594,8 @@ } @mixin sub-menu-with-actor { + position: initial; + z-index: unset; height: max-content; display: flex; flex-direction: column; @@ -588,6 +665,11 @@ font-size: 130%; } } + + list-overflow { + display: inline-block; + width: max-content; + } } } @@ -624,17 +706,33 @@ } } -@mixin progressbar { +@mixin progressbar($small: false) { background-color: $grey-background-color; display: flex; height: 1rem; overflow: hidden; font-size: 0.75rem; border-radius: 0.25rem; + position: relative; + + span { + position: absolute; + color: $grey-foreground-color; + @if $small { + top: -1px; + } + + &:nth-of-type(1) { + left: .2rem; + } + &:nth-of-type(2) { + right: .2rem; + } + } .progress-bar { - color: var(--mainBackgroundColor); - background-color: var(--mainColor); + color: pvar(--mainBackgroundColor); + background-color: pvar(--mainColor); display: flex; flex-direction: column; justify-content: center; @@ -643,7 +741,11 @@ transition: width 0.6s ease; &.secondary { - background-color: var(--secondaryColor); + background-color: pvar(--secondaryColor); + } + + &.red { + background-color: lighten($color: #c54130, $amount: 10); } } } @@ -654,14 +756,14 @@ padding: 0.75rem 1rem; margin-bottom: 1rem; list-style: none; - background-color: var(--submenuColor); + background-color: pvar(--submenuColor); border-radius: 0.25rem; .breadcrumb-item { display: flex; a { - color: var(--mainColor); + color: pvar(--mainColor); } & + .breadcrumb-item { @@ -692,6 +794,8 @@ margin-bottom: 10px; & > a { + @include disable-default-a-behaviour; + text-decoration: none; color: inherit; display: block; @@ -707,7 +811,7 @@ & > a, & > div { padding: 20px; - background: var(--submenuColor); + background: pvar(--submenuColor); border-radius: 4px; box-sizing: border-box; height: 100%; @@ -717,89 +821,19 @@ .dashboard-num, .dashboard-text { text-align: center; font-size: 130%; - line-height: 21px; - color: var(--mainForegroundColor); + color: pvar(--mainForegroundColor); line-height: 30px; margin-bottom: 20px; } .dashboard-label { font-size: 90%; - color: var(--inputPlaceholderColor); + color: pvar(--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: #{$focus-box-shadow-form} var(--mainColorLightest); - } - } - - tag-input-form { - input { - height: 30px !important; - font-size: 12px !important; - - background-color: var(--mainBackgroundColor) !important; - color: var(--mainForegroundColor) !important; - } - } - - 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; - } - } - - 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; - } - } - - &:hover { - transform: none !important; - } - } - } -} - -@mixin divider($color: var(--submenuColor), $background: var(--mainBackgroundColor)) { +@mixin divider($color: pvar(--submenuColor), $background: pvar(--mainBackgroundColor)) { width: 95%; border-top: .05rem solid $color; height: .05rem; @@ -823,24 +857,31 @@ } @mixin chip { + --chip-radius: 5rem; + --chip-padding: .2rem .4rem; $avatar-height: 1.2rem; align-items: center; - border-radius: 5rem; + border-radius: var(--chip-radius); display: inline-flex; font-size: 90%; - color: var(--mainForegroundColor); + color: pvar(--mainForegroundColor); height: $avatar-height; - line-height: .8rem; + line-height: 1rem; margin: .1rem; max-width: 320px; overflow: hidden; - padding: .2rem .4rem; + padding: var(--chip-padding); text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; + &.rectangular { + --chip-radius: .2rem; + --chip-padding: .2rem .3rem; + } + .avatar { margin-left: -.4rem; margin-right: .2rem; @@ -855,7 +896,7 @@ } &.two-lines { - $avatar-height: 1.8rem; + $avatar-height: 2rem; height: $avatar-height; @@ -867,7 +908,6 @@ div { display: flex; flex-direction: column; - font-size: 80%; height: $avatar-height; margin-left: .1rem; margin-right: .1rem; @@ -898,3 +938,56 @@ } } } + +// applies 16:9 ratio to a child element (using $selector) only using +// an immediate's parent size. This allows 16:9 ratio without explicit +// dimensions, as width/height cannot be computed from each other. +@mixin large-screen-ratio ($selector: 'div') { + position: relative; + height: 0; + width: 100%; + padding-top: 56%; + + #{$selector} { + position: absolute; + width: 100%; + height: 100%; + top: 0; + @content; + } +} + +@mixin sub-menu-h1 { + ::ng-deep h1 { + font-size: 1.3rem; + border-bottom: 2px solid $grey-background-color; + padding-bottom: 15px; + margin-bottom: $sub-menu-margin-bottom; + + my-global-icon { + margin-right: 10px; + vertical-align: bottom; + width: 24px; + height: 24px; + } + + .badge { + margin-left: 7px; + } + } +} + +@mixin play-icon ($width, $height) { + width: 0; + height: 0; + + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) scale(0.5); + + border-top: ($height / 2) solid transparent; + border-bottom: ($height / 2) solid transparent; + + border-left: $width solid rgba(255, 255, 255, 0.95); +}