Files
edx-platform/cms/static/sass/views/_dashboard.scss
Cristhian Garcia 3427a9a491 feat: added organization dropdown in studio (#30975)
Adds a dropdown to select the organization. The dropdown will only be activated for users with CourseCreator permission to specific organizations in Studio.

Use cases:

When FEATURES['ENABLE_CREATOR_GROUP'] = True and the user has CourseCreator permission granted, a dropdown will appear with all specific organizations allowed. In case of all_organizations setting is enabled, all organizations will appear in the dropdown.

In case the user is staff, he can create organizations it will work as before
2023-02-08 10:48:15 -04:00

737 lines
13 KiB
SCSS

// studio - views - user dashboard
// ====================
.view-dashboard {
// temp
.content {
margin-bottom: ($baseline*5);
&:last-child {
margin-bottom: 0;
}
}
// ====================
// basic layout
.content-primary,
.content-supplementary {
box-sizing: border-box;
}
.content-primary {
@extend .ui-col-wide;
}
.content-supplementary {
@extend .ui-col-narrow;
}
// ====================
// elements - notices
.content .notice-incontext {
width: flexgrid(9, 9);
// CASE: notice has actions {
&.has-actions,
&.list-notices .notice-item.has-actions {
.msg,
.list-actions {
display: inline-block;
vertical-align: middle;
}
.msg {
width: flex-grid(6, 9);
margin-right: flex-gutter();
}
.list-actions {
width: flex-grid(3, 9);
text-align: right;
margin-top: 0;
.action-create-course,
.action-create-library {
@extend %btn-primary-green;
@extend %t-action3;
}
}
}
}
// elements - course creation rights controls
.wrapper-creationrights {
overflow: hidden;
.ui-toggle-control {
@extend %ui-depth2;
@extend %btn-secondary-gray;
@include clearfix();
display: block;
text-align: left;
// STATE: hover - syncing up colors with current so transition is smoother
&:hover {
background: $gray-d1;
color: $white;
}
.label {
@extend %t-action3;
float: left;
width: flex-grid(8, 9);
margin: 3px flex-gutter() 0 0;
}
.fa-times-circle {
@extend %t-action1;
@include transform(rotate(45deg));
@include transform-origin(center center);
@include transition(all $tmg-f1 linear 0s);
float: right;
text-align: right;
}
}
.ui-toggle-target {
@extend %ui-depth1;
@include transition(opacity $tmg-f1 ease-in-out 0s);
position: relative;
top: -2px;
display: none;
opacity: 0;
}
// CASE: when the content area is shown
&.is-shown {
.ui-toggle-control {
@include border-bottom-radius(0);
.fa-times-circle {
@include transform(rotate(90deg));
@include transform-origin(center center);
}
}
.ui-toggle-target {
display: block;
opacity: 1;
}
}
}
// elements - course creation rights controls
.status-creationrights {
margin-top: $baseline;
.title {
@extend %t-title7;
@extend %t-strong;
margin-bottom: ($baseline/4);
color: $gray-d1;
}
.list-actions,
.form-actions {
margin-top: ($baseline*0.75);
.action-primary {
@extend %btn-primary-blue;
@extend %t-action3;
color: $white;
}
// specific - request button
// BT: should we abstract these states out for all buttons like this
.action-request {
position: relative;
overflow: hidden;
.fa-cog {
@include transition(all $tmg-f1 ease-in-out $tmg-f1);
@extend %t-icon4;
position: absolute;
top: ($baseline/2);
left: -($baseline);
visibility: hidden;
opacity: 0;
}
// state: submitting
&.is-submitting {
padding-left: ($baseline*2);
.fa-cog {
left: ($baseline*0.75);
visibility: visible;
opacity: 1;
}
}
// state: has an error
&.has-error {
padding-left: ($baseline*2);
background: $red;
border-color: $red-d1;
.fa-cog {
left: ($baseline*0.75);
visibility: visible;
opacity: 1;
}
}
}
}
.status-update {
.label {
@extend %cont-text-sr;
}
.value {
border-radius: ($baseline/4);
position: relative;
overflow: hidden;
padding: ($baseline/5) ($baseline/2);
background: $gray;
.status-indicator {
position: absolute;
top: 0;
left: 0;
display: block;
width: 100%;
height: ($baseline/4);
opacity: 0.4;
}
}
.value-formal,
.value-description {
border-radius: ($baseline/10);
display: inline-block;
vertical-align: middle;
color: $white;
}
.value-formal {
@extend %t-title5;
@extend %t-strong;
margin: ($baseline/2);
.icon {
margin-right: ($baseline/4);
}
}
.value-description {
@extend %t-copy-sub1;
position: relative;
color: $white;
opacity: 0.85;
}
}
// CASE: rights are not requested yet
&.is-unrequested {
.title {
@extend %cont-text-sr;
}
}
// CASE: status is pending
&.is-pending {
.status-update {
.value {
background: $orange;
}
.status-indicator {
background: $orange-d1;
}
}
}
// CASE: status is denied
&.is-denied {
.status-update {
.value {
background: $red-l1;
}
.status-indicator {
background: $red-s1;
}
}
}
}
// ====================
// Course/Library tabs
#course-index-tabs {
margin: 0;
font-size: 1.4rem;
li {
display: inline-block;
line-height: $baseline*2;
margin: 0 10px;
&.active {
border-bottom: 4px solid theme-color("primary");
}
&.active,
&:hover {
a {
color: $gray-d2;
}
}
a {
color: theme-color("primary");
cursor: pointer;
display: inline-block;
}
}
}
// ELEM: course listings
.courses-tab,
.archived-courses-tab,
.libraries-tab {
display: none;
&.active {
display: block;
}
}
.courses,
.libraries,
.archived-courses {
.title {
@extend %t-title6;
margin-bottom: $baseline;
border-bottom: 1px solid $gray-l3;
padding-bottom: ($baseline/2);
color: $gray-l2;
}
.title {
@extend %t-title6;
margin-bottom: $baseline;
border-bottom: 1px solid $gray-l3;
padding-bottom: ($baseline/2);
color: $gray-l2;
}
}
.list-courses {
border-radius: 3px;
border: 1px solid $gray-l2;
background: $white;
box-shadow: 0 1px 1px $shadow-l1;
li:last-child {
margin-bottom: 0;
}
}
// UI: course wrappers (needed for status messages)
.wrapper-course {
// CASE: has status
&.has-status {
.course-status {
box-sizing: border-box;
display: inline-block;
vertical-align: middle;
width: flex-grid(3, 9);
padding-right: ($baseline/2);
text-align: right;
.value {
.copy,
.icon {
display: inline-block;
vertical-align: middle;
}
.icon {
@extend %t-icon4;
margin-right: ($baseline/2);
}
.copy {
@extend %t-copy-sub1;
}
}
}
.status-message {
@extend %t-copy-sub1;
background-color: $gray-l5;
box-shadow: 0 2px 2px 0 $shadow inset;
padding: ($baseline*0.75) $baseline;
&.has-actions {
.copy,
.status-actions {
display: inline-block;
vertical-align: middle;
}
.copy {
width: 65%;
margin: 0 $baseline 0 0;
}
.status-actions {
width: 30%;
text-align: right;
.button {
@extend %btn-secondary-white;
padding: ($baseline/4) ($baseline/2);
}
.icon,
.button-copy {
display: inline-block;
vertical-align: middle;
}
.icon {
@extend %t-icon4;
margin-right: ($baseline/4);
}
.button-copy {
@extend %t-copy-sub1;
}
}
}
}
}
}
// UI: individual course listings
.course-item {
box-sizing: border-box;
width: flex-grid(9, 9);
position: relative;
border-bottom: 1px solid $gray-l2;
padding: $baseline;
// STATE: hover/focus
&:hover {
background: $paleYellow;
}
.course-link,
.course-actions {
box-sizing: border-box;
display: inline-block;
vertical-align: middle;
}
// encompassing course link
.course-link {
@extend %ui-depth2;
width: flex-grid(6, 9);
@include margin-right(flex-gutter());
}
// course title
.course-title {
@extend %t-title4;
@include margin(0, ($baseline*2), ($baseline/4), 0);
font-weight: 300;
}
// course metadata
.course-metadata {
@extend %t-copy-sub1;
@include transition(opacity $tmg-f1 ease-in-out 0);
color: $gray-d2;
.metadata-item {
display: inline-block;
& + .metadata-item::before {
content: "/";
margin-left: ($baseline/4);
margin-right: ($baseline/4);
color: $gray-l4;
}
.label {
@extend %cont-text-sr;
}
}
.extra-metadata {
margin-left: ($baseline/4);
}
}
.course-actions {
@extend %ui-depth3;
position: static;
width: flex-grid(3, 9);
@include text-align(right);
.action {
display: inline-block;
vertical-align: middle;
@include margin-right($baseline/2);
&:last-child {
@include margin-right(0);
}
}
.button {
@extend %t-action3;
}
// view live button
.view-button {
box-sizing: border-box;
padding: ($baseline/2);
}
// course re-run button
.action-rerun {
margin-right: $baseline;
}
}
// CASE: is processing
&.is-processing {
.course-status .value {
color: $gray-l2;
}
}
// CASE: has an error
&.has-error {
.course-status {
color: $red; // TODO: abstract this out to an error-based color variable
}
~ .status-message {
background: $red-l1; // TODO: abstract this out to an error-based color variable
color: $white;
}
}
// CASE: last course in listing
&:last-child {
border-bottom: none;
}
}
// ====================
// CASE: courses that are being processed
.courses-processing {
margin-bottom: ($baseline*2);
border-bottom: 1px solid $gray-l3;
padding-bottom: ($baseline*2);
// TODO: abstract this case out better with normal course listings
.list-courses {
border: none;
background: none;
box-shadow: none;
}
.wrapper-course {
@extend %ui-window;
position: relative;
}
.course-item {
border: none;
// STATE: hover/focus
&:hover {
background: inherit;
.course-title {
color: inherit;
}
}
}
// course details (replacement for course-link when a course cannot be linked)
.course-details {
@extend %ui-depth2;
display: inline-block;
vertical-align: middle;
width: flex-grid(6, 9);
margin-right: flex-gutter();
}
}
.optimization-form {
margin-bottom: $baseline;
label {
font-size: 1.4rem;
}
.form-actions {
margin-top: ($baseline/2);
}
}
// ====================
// ELEM: new user form
.wrapper-create-course {
// CASE: when form is animating
&.animate {
// STATE: shown
&.is-shown {
height: ($baseline*26);
// STATE: errors
&.has-errors {
height: ($baseline*33);
}
}
}
}
// ====================
// course listings
.create-course,
.create-library {
.row {
@include clearfix();
margin-bottom: ($baseline*0.75);
}
.column {
float: left;
width: 48%;
}
.column:first-child {
margin-right: 4%;
}
label {
@extend %t-title7;
@extend %t-strong;
display: block;
}
.new-course-org,
.new-course-number,
.new-course-name,
.new-course-run,
.new-library-org {
width: 100%;
}
.new-course-org,
.new-library-org {
padding: 10px;
}
.course-run-text-direction {
direction: ltr;
text-align: right;
}
.placeholder-text-direction {
direction: rtl;
}
.new-course-name {
@extend %t-title5;
@extend %t-light;
}
.new-course-save {
@include blue-button;
}
.new-course-cancel {
@include white-button;
}
.item-details {
padding-bottom: 0;
}
.wrap-error {
@include transition(all $tmg-f2 ease 0s);
height: 0;
overflow: hidden;
opacity: 0;
}
.wrap-error.is-shown {
height: 65px;
opacity: 1;
}
.message-status {
@extend %t-strong;
display: block;
margin-bottom: 0;
padding: ($baseline*0.5) ($baseline*1.5) 8px ($baseline*1.5);
}
}
}