mediawiki-skins-Citizen/resources/skins.citizen.styles/Pagetools.less
alistair3149 2f6d383d9e
fix(core): use z-index on popup only to avoid clipping
Also:
* Remove unnessecary margin on mw-body-header
* Move the extra mw-body margin to mw-body-header, as there can be other elements in mw-body
2022-06-02 10:57:19 -04:00

355 lines
6.3 KiB
Plaintext

.page-actions {
--size-button--page: 2.25rem;
display: flex;
margin-left: -0.75rem; // To align with page padding
font-size: 0.875rem;
font-weight: 450;
gap: 0.25rem;
// TODO: Merge this with header__item
&__item {
display: flex;
}
// TODO: Merge this with header__button
&__button {
display: grid;
width: var( --size-button--page );
height: var( --size-button--page );
border-radius: var( --border-radius--medium );
place-items: center;
&--icon:after {
width: var( --size-icon );
height: var( --size-icon );
background-position: center;
background-repeat: no-repeat;
background-size: contain;
content: '';
opacity: var( --opacity-icon-base );
transition: @transition-opacity;
}
&:hover {
background-color: var( --background-color-quiet--hover );
&:after {
opacity: var( --opacity-icon-base--hover );
}
}
&:active {
background-color: var( --background-color-quiet--active );
&:after {
opacity: var( --opacity-icon-base--active );
}
}
}
&__card {
position: absolute;
z-index: @z-index-page-header; // So the popups inside will be higher than content
right: 0;
overflow: auto;
min-width: 200px;
max-height: 60vh;
padding: 0.5rem 0;
margin-top: ~'calc( var( --size-button--page ) + 0.5rem )';
font-size: 0.875rem;
.citizen-card;
.citizen-card-hide( top right );
a {
padding: 0.625rem 1.25rem;
.menu-item-link;
&:hover {
.menu-item-link-hover;
}
&:active {
.menu-item-link-active;
}
}
}
// Visible page tools styles
> .mw-portlet {
ul {
display: flex;
gap: 0.25rem;
}
li > a {
display: flex;
align-items: center;
padding: 0.5rem 0.75rem;
border-radius: var( --border-radius--medium );
color: var( --color-base );
font-size: 0;
transition: @transition-background, @transition-color;
&:after {
width: var( --size-icon );
height: var( --size-icon );
order: -1; // Move icon before the text
background-position: center;
background-repeat: no-repeat;
background-size: var( --size-icon );
content: '';
opacity: var( --opacity-icon-base );
transition: @transition-opacity;
}
&:hover {
background-color: var( --background-color-quiet--hover );
color: var( --color-base--emphasized );
&:after {
opacity: var( --opacity-icon-base--hover );
}
}
&:active {
background-color: var( --background-color-quiet--active );
color: var( --color-base--subtle );
&:after {
opacity: var( --opacity-icon-base--active );
}
}
span {
.mixin-screen-reader-text;
}
}
}
ul {
margin: 0;
list-style: none;
}
li {
margin: 0;
}
// TODO: Merge this with header styles
.mw-checkbox-hack-checkbox:checked ~ .page-actions__button {
background-color: var( --background-color-primary--active );
}
}
// Language counter badge
// TODO: Maybe this should be in a mixin
#citizen-languages__buttonCheckbox {
position: relative; // So that the badge doesn't take a stroll to the far left
&:before {
position: absolute;
z-index: 2;
top: 0;
left: 55%;
display: block;
padding: 0.1em 0.4em;
background: var( --color-primary );
border-radius: 100px;
color: #fff;
content: attr( data-counter-text );
font-size: 0.65rem;
}
}
.citizen-languages {
// Special handling for ULS
// ULS won't be triggered by the label button
// so we need to overlay the checkbox on top of it
.mw-interlanguage-selector {
position: absolute;
z-index: 1;
display: block;
width: var( --size-button--page );
height: var( --size-button--page );
padding: 0;
margin: 0;
cursor: pointer;
opacity: 0;
// Hover state needs to be define because the checkbox now overlays the label
&:hover {
~ .page-actions__button {
background-color: var( --background-color-quiet--hover );
&:after {
opacity: var( --opacity-icon-base--hover );
}
}
}
&:active {
~ .page-actions__button {
background-color: var( --background-color-quiet--active );
&:after {
opacity: var( --opacity-icon-base--active );
}
}
}
}
}
// Handle icons
.page-actions-more {
a {
&:after {
.resource-loader-list-icon;
opacity: var( --opacity-icon-base );
}
&:hover {
&:after {
opacity: var( --opacity-icon-base--hover );
}
}
&:active {
&:after {
opacity: var( --opacity-icon-base--active );
}
}
}
}
.page-actions-more,
.citizen-languages {
position: relative;
}
#p-views {
// VE styles shouldn't be core but it is just a few lines :/
#ca-ve-edit:not( .selected ) {
order: 98; // Before source edit
> a {
padding-right: 1.5rem;
}
// Merge two buttons together
+ #ca-edit {
border-left: 1px solid var( --color-primary--hover );
margin-left: -1rem;
> a {
padding-left: 0.5rem;
border-radius: 0 var( --border-radius--medium ) var( --border-radius--medium ) 0;
font-size: 0; // hide edit source text
&:after {
margin-right: 0; // reset
}
}
}
}
#ca-edit {
order: 99; // Align to last
}
#ca-edit,
#ca-ve-edit {
> a {
background-color: var( --color-primary );
color: #fff;
&:after {
filter: invert( 1 );
// white icon
opacity: 1;
}
&:hover {
background-color: var( --color-primary--hover );
}
&:active {
background-color: var( --color-primary--active );
}
}
}
}
.skin-citizen-dark {
.page-actions {
&__button--icon:after {
filter: invert( 1 );
}
li > a:after {
filter: invert( 1 );
}
}
}
// Checkbox hack
#page-actions-more,
#citizen-languages {
&__checkbox:checked {
~ .page-actions__card {
.citizen-card-show();
}
}
}
.citizen-animations-ready {
.page-actions__card {
.citizen-card-transition();
}
}
@media ( min-width: @width-breakpoint-tablet ) {
.page-actions {
position: relative;
margin-right: 0;
> .mw-portlet {
li > a {
font-size: 0.875rem;
&:after {
margin-right: 0.5rem;
}
}
}
}
}
@media ( max-width: @width-breakpoint-tablet ) {
.page-actions {
&__item {
position: unset;
}
&__card {
right: 0;
left: 0;
}
}
}
// Reset hover styles if it is a touch device
// This is dumb but hover:hover overrides active states
@media ( hover: none ) {
.page-actions {
&__button {
&:hover {
background-color: none;
&:after {
opacity: var( --opacity-icon-base );
}
}
}
}
}