Refactors and reworks the LibraryContentBlock so that its sync-from-library operations are asynchronous and work with V2 content libraries. This also required us to make library_content block duplication asynchronous, as that involves syncing from the source library. For the sake of clarity, this PR includes two major method renames: * update_children(...) -> sync_from_library(...) * refresh_library(...) -> sync_from_library(upgrade_to_latest=True, ...) an an XBlock HTTP handler rename: /refresh_children -> /upgrade_and_sync There are still a couple issues with import or duplication of library_content blocks referencing V2 libraries other than latest. These will be resolved in an upcoming PR. Part of: https://openedx.atlassian.net/wiki/spaces/COMM/pages/3820617729/Spec+Memo+Content+Library+Authoring+Experience+V2 Follow-up work: https://github.com/openedx/edx-platform/issues/33640 Co-authored-by: Connor Haugh <chaugh@2u.com> Co-authored-by: Eugene Dyudyunov <evgen.dyudyunov@raccoongang.com>
324 lines
5.2 KiB
SCSS
324 lines
5.2 KiB
SCSS
// studio - elements - layouts
|
|
// ====================
|
|
|
|
// ====================
|
|
|
|
// layout - basic page header
|
|
.wrapper-mast {
|
|
margin: ($baseline*1.5) 0 0 0;
|
|
padding: 0 $baseline;
|
|
position: relative;
|
|
z-index: 1;
|
|
|
|
.mast,
|
|
.metadata {
|
|
@include clearfix();
|
|
|
|
position: relative;
|
|
max-width: $fg-max-width;
|
|
min-width: $fg-min-width;
|
|
width: flex-grid(12);
|
|
margin: 0 auto $baseline auto;
|
|
color: $gray-d2;
|
|
}
|
|
|
|
.mast {
|
|
border-bottom: 1px solid $gray-l4;
|
|
padding-bottom: ($baseline/2);
|
|
|
|
// layout without actions
|
|
.page-header {
|
|
width: flex-grid(12);
|
|
}
|
|
|
|
// layout with actions
|
|
&.has-actions {
|
|
@include clearfix();
|
|
|
|
.page-header {
|
|
@include float(left);
|
|
|
|
width: flex-grid(6, 12);
|
|
|
|
@include margin-right(flex-gutter());
|
|
}
|
|
|
|
.nav-actions {
|
|
position: relative;
|
|
bottom: -($baseline*0.75);
|
|
|
|
@include float(right);
|
|
|
|
width: flex-grid(6, 12);
|
|
|
|
@include text-align(right);
|
|
|
|
.nav-item {
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
|
|
@include margin-right(($baseline/2));
|
|
|
|
&:last-child {
|
|
@include margin-right(0);
|
|
}
|
|
}
|
|
|
|
// buttons
|
|
.button {
|
|
@extend %btn-primary-blue;
|
|
@extend %sizing;
|
|
|
|
.action-button-text {
|
|
display: inline-block;
|
|
vertical-align: baseline;
|
|
}
|
|
|
|
.icon {
|
|
display: inline-block;
|
|
vertical-align: baseline;
|
|
}
|
|
|
|
// CASE: new/create button
|
|
&.new-button,
|
|
&.button-new {
|
|
@extend %btn-primary-green;
|
|
@extend %sizing;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// layout with actions
|
|
&.has-subtitle {
|
|
.nav-actions {
|
|
bottom: -($baseline*1.5);
|
|
}
|
|
}
|
|
|
|
// layout with breadcrumb navigation
|
|
&.has-navigation {
|
|
.nav-actions {
|
|
top: -($baseline*2);
|
|
}
|
|
|
|
.navigation-item {
|
|
@extend %cont-truncated;
|
|
|
|
display: inline-block;
|
|
vertical-align: bottom; // correct for extra padding in FF
|
|
max-width: 250px;
|
|
color: $gray-d2;
|
|
|
|
&.navigation-current {
|
|
@extend %ui-disabled;
|
|
|
|
color: $gray;
|
|
max-width: 250px;
|
|
|
|
&::before {
|
|
color: $gray;
|
|
}
|
|
}
|
|
}
|
|
|
|
.navigation-link:hover {
|
|
color: $blue;
|
|
}
|
|
|
|
.navigation-item::before {
|
|
content: " / ";
|
|
margin: ($baseline/4);
|
|
color: $gray;
|
|
|
|
&:hover {
|
|
color: $gray;
|
|
}
|
|
}
|
|
|
|
.navigation .navigation-item:first-child::before {
|
|
content: "";
|
|
margin: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// CASE: wizard-based mast
|
|
.mast-wizard {
|
|
.page-header-sub {
|
|
@extend %t-title4;
|
|
|
|
color: $gray;
|
|
font-weight: 300;
|
|
}
|
|
|
|
.page-header-super {
|
|
@extend %t-title4;
|
|
|
|
float: left;
|
|
width: flex-grid(12, 12);
|
|
margin-top: ($baseline/2);
|
|
border-top: 1px solid $gray-l4;
|
|
padding-top: ($baseline/2);
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
}
|
|
|
|
// layout - basic page content
|
|
.wrapper-content {
|
|
margin: 0;
|
|
padding: 0 $baseline;
|
|
position: relative;
|
|
}
|
|
|
|
.content {
|
|
@include clearfix();
|
|
|
|
@extend %t-copy-base;
|
|
|
|
max-width: $fg-max-width;
|
|
min-width: $fg-min-width;
|
|
width: flex-grid(12);
|
|
margin: 0 auto;
|
|
color: $gray-d2;
|
|
|
|
header {
|
|
position: relative;
|
|
margin-bottom: $baseline;
|
|
border-bottom: 1px solid $gray-l4;
|
|
padding-bottom: ($baseline/2);
|
|
|
|
.title-sub {
|
|
@extend %t-copy-sub1;
|
|
|
|
display: block;
|
|
margin: 0;
|
|
color: $gray-l2;
|
|
}
|
|
|
|
.title-1 {
|
|
@extend %t-title3;
|
|
@extend %t-strong;
|
|
|
|
margin: 0;
|
|
padding: 0;
|
|
color: $gray-d3;
|
|
}
|
|
}
|
|
}
|
|
|
|
.content-primary,
|
|
.content-supplementary {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
// 3/4 - 1/4 two col layout
|
|
%two-col-1 {
|
|
.content-primary {
|
|
@include float(left);
|
|
@include margin-right(flex-gutter());
|
|
|
|
width: flex-grid(9, 12);
|
|
box-shadow: none;
|
|
border: 0;
|
|
background-color: $white;
|
|
|
|
&-fullwidth {
|
|
width: flex-grid(12, 12);
|
|
}
|
|
}
|
|
|
|
.content-supplementary {
|
|
@include float(left);
|
|
|
|
width: flex-grid(3, 12);
|
|
}
|
|
}
|
|
|
|
|
|
// layout - primary content
|
|
.content-primary {
|
|
.title-1 {
|
|
@extend %t-title3;
|
|
}
|
|
|
|
.title-2 {
|
|
@extend %t-title4;
|
|
|
|
margin: 0 0 ($baseline/2) 0;
|
|
}
|
|
|
|
.title-3 {
|
|
@extend %t-title6;
|
|
|
|
margin: 0 0 ($baseline/2) 0;
|
|
}
|
|
|
|
header {
|
|
@include clearfix();
|
|
|
|
.title-2 {
|
|
width: flex-grid(5, 12);
|
|
margin: 0 flex-gutter() 0 0;
|
|
float: left;
|
|
}
|
|
|
|
.tip {
|
|
@extend %t-copy-sub2;
|
|
|
|
width: flex-grid(7, 12);
|
|
float: right;
|
|
margin-top: ($baseline/2);
|
|
text-align: right;
|
|
color: $gray-d1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// layout - supplemental content
|
|
.content-supplementary {
|
|
> section {
|
|
margin: 0 0 $baseline 0;
|
|
}
|
|
}
|
|
|
|
// ====================
|
|
|
|
// layout - grandfathered
|
|
.main-wrapper {
|
|
position: relative;
|
|
margin: 0 ($baseline*2);
|
|
}
|
|
|
|
.inner-wrapper {
|
|
@include clearfix();
|
|
|
|
position: relative;
|
|
max-width: 1280px;
|
|
margin: auto;
|
|
|
|
> article {
|
|
clear: both;
|
|
}
|
|
}
|
|
|
|
.main-column {
|
|
clear: both;
|
|
float: left;
|
|
width: 70%;
|
|
}
|
|
|
|
.sidebar {
|
|
float: right;
|
|
width: 28%;
|
|
}
|
|
|
|
.left {
|
|
float: left;
|
|
}
|
|
|
|
.right {
|
|
float: right;
|
|
}
|