wagtail/client/scss/components/_streamfield.scss

401 wiersze
8.4 KiB
SCSS

ul.sequence {
@include clearfix;
position: relative;
}
li.sequence-member {
@include clearfix;
position: relative;
border: 1px solid transparent;
border-width: 1px 0;
&:hover {
background-color: $color-input-focus;
border-color: darken($color-input-focus, 10%);
.sequence-member-inner {
> .struct-block > label,
> .char_field > label,
.sequence > label {
opacity: 1;
}
}
}
.struct-block .fields {
@include column(10);
padding-left: 0;
padding-right: 0;
}
.struct-block .sequence-container {
@include column(9);
padding-left: 0;
padding-right: 0;
.sequence-member-inner {
padding: 1.5em 0;
}
}
// Copied from page-editor.scss
.struct-block li.required > label:after {
content: '*';
color: $color-red;
font-weight: bold;
display: inline-block;
margin-left: 0.5em;
line-height: 1em;
font-size: 13px;
}
// The top level sequence doesn't have a sequnce-member-inner. This block is basically for things that should only affect inner blocks
.sequence-member-inner {
@include clearfix;
position: relative;
padding: 1.5em 50px;
.sequence-member {
border: 0;
}
// sequences within sequences, such as a ListBlock within StructBlock
> .sequence .sequence-inner {
@include column(10);
padding-left: 0;
padding-right: 0;
}
.sequence-type-list .sequence-container-inner {
@include column(10);
padding-left: 0;
padding-right: 0;
}
.sequence-type-list .sequence-member-inner {
padding: 0;
padding-top: 0.5em;
padding-bottom: 1.2em;
}
}
.fields > li {
position: relative;
}
}
.sequence-member__help {
opacity: 0;
.sequence-member:hover & {
opacity: 1;
}
.icon-help-inverse {
margin-right: 0.5em;
}
}
// Image chooser as direct descendant of top-level streamfield has special display
.sequence-member-inner > .widget-admin_image_chooser {
label {
display: none;
}
.field-content {
display: block;
float: none;
width: 100%;
text-align: center;
max-width: 500px;
margin: auto;
border: 1px solid $color-grey-4;
padding: 1em;
}
.chooser {
.chosen {
padding: 0;
}
.unchosen {
&:before {
float: none;
font-size: 4em;
margin: 0;
}
}
.preview-image {
float: none;
margin: 0;
}
}
.actions li {
display: inline-block;
float: none;
}
}
// This horridly specific selector ensures text inputs, rich text fields and textareas
// that are direct children of highest level sequence should be borderless and full-width
.block_field > .field-content > .input > .sequence-container > .sequence-container-inner > .sequence > .sequence-member > .sequence-member-inner {
> .widget-text_input input,
> .halloeditor,
> .widget-textarea textarea {
padding: 0;
max-width: 1024px;
border: 0;
background-color: transparent;
}
> .Draftail-Editor {
padding: 0;
max-width: 1024px;
}
}
// Controls for ordering and deletion of items in a sequence
.sequence-controls {
@include transition(opacity 0.2s ease);
border-radius: 2px 0 0;
border: 1px solid darken($color-input-focus, 10%);
border-width: 1px 1px 0;
opacity: 0;
visibility: hidden;
position: absolute;
top: -30px;
right: 0;
z-index: 1;
overflow: visible;
background-color: $color-input-focus;
padding: 0 0 0 1em;
height: 30px;
h3 {
margin: 0;
font-size: 0.7rem;
display: inline-block;
margin-right: 1em;
line-height: 1.8rem;
label {
color: $color-teal;
font-weight: normal;
text-transform: uppercase;
float: none;
width: auto;
padding: 0;
margin: 0;
}
}
button.icon.text-replace {
width: 1.8rem;
height: 1.8rem;
&:before {
line-height: 1.3em;
font-size: 0.9rem;
}
}
// .buttons only exists for menus in stream_member.html
.button-group {
float: right;
}
&:hover .buttons,
&:hover label {
opacity: 1;
}
.disabled {
display: none;
}
}
// list controls are slightly different as they require closer proximity to their associated fields
.list-controls {
border-radius: 0;
background: transparent;
top: 1.5em;
border: 0;
padding: 0;
overflow: hidden;
height: auto;
}
// Menu of other blocks to be added at each position
.stream-menu {
@include transition(all 0.2s ease);
box-shadow: inset 0 0 45px rgba(0, 0, 0, 0.3);
position: relative;
background-color: $color-grey-1;
opacity: 1;
.toggle {
@include transition(color 0.2s ease);
border-radius: 50px;
position: absolute;
top: -0.5em;
left: 0;
right: 0;
margin: 0 auto;
cursor: pointer;
font-size: 1.7em;
width: 1em;
height: 1em;
display: block;
z-index: 1;
color: $color-grey-1;
background-color: $color-white;
span {
@include visuallyhidden();
}
&:before {
transform: rotate(-45deg);
position: absolute;
font-family: wagtail;
content: 'B';
line-height: 1em;
text-align: center;
}
}
.stream-menu-inner {
transform: translate3d(0, 0, 0);
max-width: 50em;
margin: auto;
overflow: hidden;
}
ul {
@include transition(all 0.2s ease);
@include clearfix;
transform: translate3d(0, 0, 0) scale(1);
visibility: visible;
opacity: 1;
padding: 1em 1em 0;
overflow: hidden;
}
li {
@include column(3);
padding-bottom: $grid-gutter-width;
padding-left: 0;
padding-right: 0;
&:nth-child(4n+1) {
clear: left;
}
}
button {
@include transition(all 0.2s ease);
background-color: transparent;
border: 0;
color: darken($color-grey-3, 5%);
height: auto;
display: block;
width: 100%;
padding: 0 0 0.5em;
overflow: visible;
span {
text-transform: none;
white-space: pre-wrap;
width: 100%;
display: block;
overflow: hidden;
padding: 0 1em;
box-sizing: border-box;
}
&:before {
display: block;
font-family: wagtail;
font-size: 2em;
width: 100%;
height: 2em;
line-height: 2em;
text-align: center;
}
&:hover,
&:focus {
background-color: $color-teal;
color: $color-white;
}
}
&.stream-menu-closed {
box-shadow: none;
.stream-menu-inner ul {
transform: scale(0.9);
opacity: 0;
}
.toggle {
color: $color-grey-3;
background-color: $color-white;
&:before {
transform: rotate(0deg);
}
&:focus {
color: $color-teal;
}
}
&:hover {
border-top-color: $color-teal;
.toggle {
color: $color-teal;
}
}
}
@include media-breakpoint-up(sm) {
li {
@include column(2);
&:nth-child(4n+1) {
clear: none;
}
&:nth-child(6n+1) {
clear: left;
}
}
}
}
.sequence-member .stream-menu {
margin: auto auto 0;
}
.sequence-member .stream-menu-closed {
opacity: 0;
visibility: hidden;
}
.sequence-member:hover {
.sequence-controls {
visibility: visible;
opacity: 1;
}
.stream-menu {
visibility: visible;
opacity: 1;
}
}