From c81916abc17530cfc103cf1c7057cfa77ac6bb77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Ctanveer65=E2=80=9D?= Date: Fri, 2 Feb 2024 17:06:16 +0500 Subject: [PATCH 01/11] update style --- .../templates/indigo/lms/static/sass/extra/_header.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tutorindigo/templates/indigo/lms/static/sass/extra/_header.scss b/tutorindigo/templates/indigo/lms/static/sass/extra/_header.scss index 4b21aff45..9d25586b8 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/extra/_header.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/extra/_header.scss @@ -77,6 +77,9 @@ header.global-header { display: inline-block; vertical-align: top; } + .username { + font: -webkit-control; + } } .dropdown-user-menu { position: absolute; From 920ae374b7292f0441c45f6dfabb5eb8aaa2127e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Ctanveer65=E2=80=9D?= Date: Tue, 26 Mar 2024 14:05:44 +0500 Subject: [PATCH 02/11] feat: style program and cirtificate --- .gitignore | 1 + .../indigo/lms/static/images/profile.svg | 2 +- .../sass/certificates/_certificate.scss | 40 ++ .../lms/static/sass/courseware/_about.scss | 17 +- .../static/sass/courseware/_bookmarks.scss | 8 +- .../lms/static/sass/courseware/_discover.scss | 4 +- .../lms/static/sass/dashbord/_dashbord.scss | 6 +- .../indigo/lms/static/sass/extra/_footer.scss | 4 +- .../indigo/lms/static/sass/home/_home.scss | 4 +- .../sass/partials/lms/theme/_extras.scss | 4 +- .../lms/static/sass/programs/_programs.scss | 419 ++++++++++++++++++ .../certificates/accomplishment-base.html | 65 +++ .../templates/courseware/course_about.html | 2 +- .../learner_dashboard/programs_fragment.html | 42 ++ .../lms/templates/static_templates/about.html | 2 +- 15 files changed, 600 insertions(+), 20 deletions(-) create mode 100644 tutorindigo/templates/indigo/lms/static/sass/certificates/_certificate.scss create mode 100644 tutorindigo/templates/indigo/lms/static/sass/programs/_programs.scss create mode 100644 tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html create mode 100644 tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html diff --git a/.gitignore b/.gitignore index f6a874f21..0c5da68d5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ __pycache__ *.egg-info/ /build/ /dist/ +.DS_Store diff --git a/tutorindigo/templates/indigo/lms/static/images/profile.svg b/tutorindigo/templates/indigo/lms/static/images/profile.svg index 5f4befb56..c050138d5 100644 --- a/tutorindigo/templates/indigo/lms/static/images/profile.svg +++ b/tutorindigo/templates/indigo/lms/static/images/profile.svg @@ -2,7 +2,7 @@ - + diff --git a/tutorindigo/templates/indigo/lms/static/sass/certificates/_certificate.scss b/tutorindigo/templates/indigo/lms/static/sass/certificates/_certificate.scss new file mode 100644 index 000000000..ec60d6d66 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/sass/certificates/_certificate.scss @@ -0,0 +1,40 @@ +// Include custom cirtificate + +body.certificate { + .wrapper-header { + padding: 0; + } + .accomplishment-metadata { + .recipient-img { + display: none; + } + .recipient-name, .recipient-username { + margin: 0; + } + } + .layout-accomplishment { + .wrapper-introduction { + padding: 0; + } + } + .wrapper-about { + padding: 20px 0 0 !important; + } + .header-app, .banner-user, .introduction, .wrapper-accomplishment-metadata, .wrapper-accomplishment-rendering, .introduction, aside.about { + display: block; + max-width: 1090px !important; + margin: 0 auto; + padding: 0 15px !important; + box-sizing: border-box; + .header-app-title { + text-align: left; + a { + display: inline-block; + vertical-align: top; + width: 45px; + margin: 10px 0; + } + } + } +} + diff --git a/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss b/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss index 982e6ba78..31dbe0823 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss @@ -42,7 +42,7 @@ } .org { display: block; - color: #6B7280; + color: #515661; font-size: 16px; line-height: 22px; } @@ -136,6 +136,17 @@ opacity: .8; } } + span.closed { + background: $primary-light; + border-radius: 6px; + color: #9CA3AF; + font-size: 16px; + line-height: 24px; + padding: 16px; + font-weight: 500; + display: inline-block; + vertical-align: top; + } } .about-content { display: flex; @@ -164,7 +175,7 @@ } .about, .prerequisites, .course-staff, .faq { font: 16px/20px $font-family-title; - color: #6B7280; + color: #515661; border-radius: 8px; border: 1px solid $primary-light; border-left: 14px solid $primary-light; @@ -335,7 +346,7 @@ float: none; font-size: 12px; line-height: 24px; - color: #6B7280; + color: #515661; display: block; font-weight: normal; font-family: $font-family-title; diff --git a/tutorindigo/templates/indigo/lms/static/sass/courseware/_bookmarks.scss b/tutorindigo/templates/indigo/lms/static/sass/courseware/_bookmarks.scss index b242a999e..89801370f 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/courseware/_bookmarks.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/courseware/_bookmarks.scss @@ -35,7 +35,7 @@ .breadcrumbs { font-weight: 500; font-size: 14px; - color: #6B7280; + color: #515661; } } .courseware-results.search-result { @@ -46,7 +46,7 @@ border: none; border-radius: 8px; padding: 20px; - color: #6B7280; + color: #515661; font-size: 14px; max-width: 540px; margin: 0 auto; @@ -152,7 +152,7 @@ font-size: 30px; padding: 0; background: none !important; - color: #6B7280 !important; + color: #515661 !important; line-height: 30px; } .current-page, .page-number-input, .total-pages { @@ -163,6 +163,6 @@ } .page-divider { font-weight: bold; - color: #6B7280; + color: #515661; } } diff --git a/tutorindigo/templates/indigo/lms/static/sass/courseware/_discover.scss b/tutorindigo/templates/indigo/lms/static/sass/courseware/_discover.scss index cf991fb2c..bf801239a 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/courseware/_discover.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/courseware/_discover.scss @@ -107,7 +107,7 @@ border-top: 1px solid #ECF0F4; padding: 10px 20px; margin: 0 -20px; - color: #6B7280; + color: #515661; font-size: 14px; line-height: 20px; svg { @@ -229,7 +229,7 @@ min-height: auto; width: 100%; float: none; - color: #6B7280; + color: #515661; } } } diff --git a/tutorindigo/templates/indigo/lms/static/sass/dashbord/_dashbord.scss b/tutorindigo/templates/indigo/lms/static/sass/dashbord/_dashbord.scss index 237f05191..60f4c21a4 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/dashbord/_dashbord.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/dashbord/_dashbord.scss @@ -58,7 +58,7 @@ .course-heading-area { margin: 0 0 20px; font-size: 14px; - color: #6B7280; + color: #515661; @include media-breakpoint-up(md) { margin: 0 0 30px; font-size: 16px; @@ -326,7 +326,7 @@ border-top: 1px solid #ECF0F4; padding: 10px 20px; margin: 0 -20px; - color: #6B7280; + color: #515661; font-size: 14px; line-height: 20px; svg { @@ -365,7 +365,7 @@ .inner-wrapper { text-align: center; font-size: 14px; - color: #6B7280; + color: #515661; img { margin: 0 0 20px; } diff --git a/tutorindigo/templates/indigo/lms/static/sass/extra/_footer.scss b/tutorindigo/templates/indigo/lms/static/sass/extra/_footer.scss index 6ae66b2ce..2a41e86f7 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/extra/_footer.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/extra/_footer.scss @@ -45,7 +45,7 @@ footer.tutor-container { position: relative; font-size: 12px; line-height: 18px; - color: #6B7280; + color: #515661; &:first-child { padding-left: 0; } @@ -59,7 +59,7 @@ footer.tutor-container { width: 1px; height: 29px; margin: -14px 0 0; - background: #6B7280;; + background: #515661;; } } } diff --git a/tutorindigo/templates/indigo/lms/static/sass/home/_home.scss b/tutorindigo/templates/indigo/lms/static/sass/home/_home.scss index f7bf44ad7..b25a422d8 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/home/_home.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/home/_home.scss @@ -61,7 +61,7 @@ section.home { p { font-size: 16px; line-height: 20px; - color: #6B7280; + color: #515661; font-style: normal; margin: 0; } @@ -130,4 +130,4 @@ section.home { } } } -} \ No newline at end of file +} diff --git a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss index 80f0ba6f2..3b2173c69 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss @@ -253,7 +253,7 @@ nav.wrapper-preview-menu { padding: 30px 0; font-size: 16px; line-height: 24px; - color: #6B7280; + color: #515661; h1 { font-size: 24px; font-weight: 700; @@ -289,6 +289,8 @@ nav.wrapper-preview-menu { @import '../../../courseware/about'; @import '../../../courseware/bookmarks'; @import '../../../home/home'; +@import '../../../programs/programs'; +@import '../../../certificates/certificate'; diff --git a/tutorindigo/templates/indigo/lms/static/sass/programs/_programs.scss b/tutorindigo/templates/indigo/lms/static/sass/programs/_programs.scss new file mode 100644 index 000000000..5a0134801 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/sass/programs/_programs.scss @@ -0,0 +1,419 @@ +// Include custom programs page + +.program-list-wrapper { + color: #111827; + padding: 20px 15px; + @include media-breakpoint-up(md) { + padding: 40px 15px; + } + &:after { + clear: both; + content: ""; + display: block; + } + .program-list-container { + float: none; + width: 100%; + max-width: 100%; + @include media-breakpoint-up(lg) { + float: left; + width: calc(100% - 28% - 40px); + margin: 0 40px 0 0; + } + .js-program-list-header { + h2 { + font-size: 24px; + font-weight: 700; + margin: 0 0 30px; + color: #111827; + text-transform: capitalize; + } + } + .program-cards-container { + margin: 0 -5px; + letter-spacing: -.32em; + .program-card { + border: none; + border-radius: 8px; + margin: 0 5px 10px; + overflow: hidden; + width: calc(50% - 10px); + letter-spacing: normal; + box-shadow: 0px 0px 0px 1px rgba(0,0,0,0.05); + display: inline-block; + .text-section { + position: static; + padding: 15px; + h3 { + font-size: 14px; + line-height: 20px; + font-weight: 500; + color: #292C2E; + margin: 0 0 5px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-height: 10px; + } + .meta-info { + z-index: 3; + background: #ffff; + display: block; + padding: 2px 12px; + border-radius: 6px; + font-size: 14px; + line-height: 20px; + font-weight: 500; + color: #292C2E; + width: auto; + top: 15px; + left: 15px; + .col { + display: inline-block; + vertical-align: top; + width: auto; + padding: 0 !important; + max-width: 100%; + } + } + } + .status-text { + display: block; + padding: 0 15px 10px; + .number-status, .number-circle { + display: inline-block; + vertical-align: top; + width: auto; + background: $primary-light; + margin: 0 10px 10px 0; + border-radius: 5px; + color: #15376D; + padding: 17px 0; + font: 10px/18px $font-family-title; + text-align: center; + display: block; + min-width: 80px; + } + .number-circle { + height: auto; + width: 100%; + margin: 0 0 5px; + font-weight: 600; + background: none !important; + padding: 0; + font-size: 14px; + } + } + .card-link { + opacity: 1; + .banner-image-container { + background: $primary; + picture { + display: block; + } + .banner-image { + position: static; + transform: none; + width: 100%; + object-fit: cover; + } + } + } + } + .progress-container { + display: none; + } + } + } + .sidebar { + max-width: 100%; + float: none; + width: 100%; + padding: 20px 0 0; + @include media-breakpoint-up(lg) { + width: 28%; + float: left; + padding-top: 58px; + } + .program-advertise { + border-radius: 5px; + background: $primary-light; + padding: 15px; + border: none; + display: block; + text-align: center; + p { + margin: 0 0 10px; + text-align: left; + font-size: 14px; + font-weight: 500; + } + a.btn { + background: $primary; + border-radius: 6px; + font-size: 14px; + line-height: 18px; + font-weight: 500; + padding: 9px 11px; + } + } + } + .program-cards-container { + margin: 0; + padding: 0; + } + .empty-programs-message { + box-shadow: 0px 0px 0px 1px rgba(0,0,0,0.05); + border: none; + border-radius: 8px; + padding: 20px; + text-align: center; + background: white; + letter-spacing: normal; + h2 { + color: #111827; + font-size: 16px; + font-weight: 700; + line-height: 24px; + margin: 0 0 12px; + @include media-breakpoint-up(md) { + font-size: 18px; + line-height: 30px; + margin: 0 0 20px; + } + } + a.btn { + background: $primary; + border-radius: 6px; + font-size: 14px; + line-height: 18px; + font-weight: 500; + padding: 9px 11px; + } + } +} +.program-details-wrapper { + max-width: 1090px; + margin: 0 auto; + padding: 30px 15px 10px; + @include media-breakpoint-up(md) { + padding: 40px 15px; + } + .program-details-header { + padding: 0 0 20px; + background: none; + .authoring-organizations { + display: none; + } + .meta-info.grid-container { + width: 100%; + overflow: hidden; + .xseries { + float: right; + width: 100%; + @include media-breakpoint-up(md) { + width: 32%; + } + @include media-breakpoint-up(lg) { + width: 24%; + } + svg { + width: 150px; + } + } + h2.program-title { + float: left; + width: 100%; + font-size: 24px; + font-weight: 700; + margin: 0; + text-transform: capitalize; + @include media-breakpoint-up(md) { + width: calc(100% - 32% - 40px); + } + } + } + } + .col-12.flex-column { + padding: 0 !important; + display: block !important; + overflow: hidden; + .program-details-content { + padding: 0; + width: 100%; + float: left; + max-width: 100%; + @include media-breakpoint-up(md) { + max-width: calc(100% - 32% - 40px); + } + .program-heading { + background: $primary-light; + border-radius: 16px; + padding: 15px 20px; + margin: 0 0 30px; + h3 { + color: #292C2E !important; + font: 600 16px/20px $font-family-title; + margin: 0 0 10px; + } + .program-heading-message { + font-size: 12px; + line-height: 16px; + color: #70787E; + } + } + .course-list-headings { + .remaining-group, .in-progress-group, .completed-group { + margin: 0 0 15px; + h4, h5 { + text-align: left; + font-size: 16px; + color: #111827; + font-weight: 600; + font: 600 16px/22px $font-family-title; + margin: 0 0 10px; + padding: 0; + border: none; + a { + color: #111827; + } + } + .course-list { + margin: 0; + } + .program-course-card, .motivating-section { + border: 1px solid #F2F7F8; + border-left: 8px solid #F2F7F8; + border-radius: 8px; + padding: 15px; + margin: 0 0 15px; + font-size: 12px; + line-height: 16px; + color: #70787E; + background: none !important; + .section:empty { + display: none; + } + a.btn-brand, button.btn-brand { + background: $primary; + border-color: $primary; + height: auto; + display: inline-block; + padding: 5px 10px; + border-radius: 6px; + font-size: 14px; + font-weight: 500; + line-height: 20px; + margin: 10px 0 0; + } + .motivating-message { + margin: 0; + } + .certificate-status { + margin: 0; + padding: 0; + } + .course-text { + .run-period { + font-size: 12px; + line-height: 16px; + color: #0F8B8D; + } + } + } + } + } + } + .program-sidebar { + float: right; + margin: 0 !important; + max-width: 100%; + width: 100%; + padding: 0; + @include media-breakpoint-up(md) { + max-width: 32%; + margin: 0 0 0 40px !important; + } + @include media-breakpoint-up(lg) { + max-width: 24%; + } + } + } + .program-sidebar { + .aside { + background: $primary-light; + border-radius: 6px; + padding: 15px; + margin: 0 0 20px; + text-align: left; + width: 100%; + font-size: 12px; + color: #515661; + p.motivating-message { + margin: 0; + } + &:empty { + display: none; + } + h2 { + text-align: left; + font-size: 16px; + color: #111827; + font-weight: 600; + font: 600 16px/22px $font-family-title; + margin: 0 0 10px; + padding: 0; + border: none; + } + .progress-circle-wrapper { + width: 200px; + height: 200px; + margin: -20px auto -11px; + svg { + width: 200px; + height: 200px; + } + .progress-circle { + .complete { + stroke: $primary; + } + } + } + .progress-label { + top: 82px; + font-size: 12px; + font-weight: 600; + color: #111827; + } + .numbers { + font-size: 12px; + color: #111827; + .complete { + color: #111827; + } + } + .certificate-list { + list-style: none; + margin: 0 0 -15px; + padding: 0; + li { + padding: 0 0 15px; + display: block; + text-align: center; + .image-link { + display: block; + width: 120px; + margin: 0 auto 10px; + } + .certificate-link { + font-size: 12px; + line-height: 18px; + font-weight: 600; + color: #111827; + margin: 0; + } + } + } + } + } +} diff --git a/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html b/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html new file mode 100644 index 000000000..77aed10b9 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html @@ -0,0 +1,65 @@ +<%page expression_filter="h"/> +<%namespace name='static' file='/static_content.html'/> +<%! from django.utils.translation import gettext as _%> + +<% +# set doc language direction +from django.utils.translation import get_language_bidi +dir_rtl = 'rtl' if get_language_bidi() else 'ltr' +course_mode_class = course_mode if course_mode else '' +%> + + + + + + + + % if facebook_share_enabled: + ## OG (Open Graph) url, title, type, image and description added below to give social media info to display + ## (https://developers.facebook.com/docs/opengraph/howtos/maximizing-distribution-media-content#tags) + + + + + + %endif + ${document_title} + + <%static:css group='style-certificates'/> + <%static:css group='style-main-v1'/> + + <% ga_4_id = static.get_value("GOOGLE_ANALYTICS_4_ID", settings.GOOGLE_ANALYTICS_4_ID) %> + % if ga_4_id: + + + % endif + + + + +
+ + <%include file="_accomplishment-header.html" /> + +
+ + ${self.body()} + +
+ + <%include file="../footer.html" /> +
+ + <%include file="_assets-secondary.html" /> + %if badge: + <%include file="_badges-modal.html" /> + %endif + + \ No newline at end of file diff --git a/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html b/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html index f231ec2a0..3f3e997cb 100644 --- a/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html +++ b/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html @@ -105,7 +105,7 @@

## because AnonymousUsers cause can_enroll for shib courses to be False, but we need them to be able to click ## so that they can register and become a real user that can enroll. % elif not is_shib_course and not can_enroll: - ${_("Enrollment is Closed")} + ${_("Enrollment is Closed")} %elif allow_anonymous: %if show_courseware_link: diff --git a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html new file mode 100644 index 000000000..95d897447 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html @@ -0,0 +1,42 @@ +## mako + +<%page expression_filter="h"/> + +<%namespace name='static' file='../static_content.html'/> +<%! +from openedx.core.djangolib.js_utils import ( + dump_js_escaped_json, js_escaped_string +) +%> + +% if mobile_only: +
+
+
+
+ +
+% else: +
+
+
+
+
+ +
+% endif + +<%block name="js_extra"> +<%static:webpack entry="ProgramListFactory"> +ProgramListFactory({ + marketingUrl: '${marketing_url | n, js_escaped_string}', + programsData: ${programs | n, dump_js_escaped_json}, + programsSubscriptionData: ${programs_subscription_data | n, dump_js_escaped_json}, + subscriptionUpsellData: ${subscription_upsell_data | n, dump_js_escaped_json}, + userProgress: ${progress | n, dump_js_escaped_json}, + userPreferences: ${user_preferences | n, dump_js_escaped_json}, + isUserB2CSubscriptionsEnabled: ${is_user_b2c_subscriptions_enabled | n, dump_js_escaped_json}, + mobileOnly: ${mobile_only | n, dump_js_escaped_json} +}); + + diff --git a/tutorindigo/templates/indigo/lms/templates/static_templates/about.html b/tutorindigo/templates/indigo/lms/templates/static_templates/about.html index 40a54fc18..49a9dd80b 100644 --- a/tutorindigo/templates/indigo/lms/templates/static_templates/about.html +++ b/tutorindigo/templates/indigo/lms/templates/static_templates/about.html @@ -8,7 +8,7 @@

- <%block name="pageheader">${page_header or _("About")} + <%block name="pageheader">${page_header or _("About Us")}

<%block name="pagecontent">${page_content or _("This page left intentionally blank. Feel free to add your own content.")} From 7eb29895f3ac0c82914fc71b5f1fd131fe8144c4 Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Mon, 18 Mar 2024 16:51:30 +0500 Subject: [PATCH 03/11] feat: change color and font of studio --- .../sass/partials/cms/theme/_extras.scss | 5 + .../sass/partials/cms/theme/_fonts.scss | 1 + .../partials/cms/theme/_variables-v1.scss | 292 ++++++++++++++++++ .../sass/partials/cms/theme/_variables.scss | 20 ++ 4 files changed, 318 insertions(+) create mode 100644 tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_extras.scss create mode 100644 tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_fonts.scss create mode 100644 tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables-v1.scss create mode 100644 tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss diff --git a/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_extras.scss b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_extras.scss new file mode 100644 index 000000000..bee7047e9 --- /dev/null +++ b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_extras.scss @@ -0,0 +1,5 @@ +@import "fonts"; + +#main{ + background-color: $secondary; +} diff --git a/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_fonts.scss b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_fonts.scss new file mode 100644 index 000000000..b7005296e --- /dev/null +++ b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_fonts.scss @@ -0,0 +1 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); diff --git a/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables-v1.scss b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables-v1.scss new file mode 100644 index 000000000..0acf71700 --- /dev/null +++ b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables-v1.scss @@ -0,0 +1,292 @@ + +$baseline: 20px; + +// +Paths +// ==================== +$static-path: '..' !default; + +@import "fonts"; + +// +Grid +// ==================== +$gw-column: ($baseline*3); +$gw-gutter: $baseline; +$fg-column: $gw-column; +$fg-gutter: $gw-gutter; +$fg-max-columns: 12; +$fg-max-width: 1280px; +$fg-min-width: 900px; + +// +Fonts +// ==================== +$f-sans-serif: 'Inter', 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif; +$f-monospace: 'Bitstream Vera Sans Mono', Consolas, Courier, monospace; + +// +Colors - Utility +// ==================== +$transparent: rgba(0, 0, 0, 0) !default; // used when color value is needed for UI width/transitions but element is transparent + +// +Colors - UXPL new pattern library colors +// ==================== +$uxpl-blue-hover-active: #065683 !default; // wcag2a compliant +$uxpl-light-blue-base: rgb(242, 248, 251) !default; + +$uxpl-green-base: rgb(21, 55, 109) !default; // wcag2a compliant +$uxpl-green-hover-active: lighten($uxpl-green-base, 8%) !default; // wcag2a compliant +$uxpl-green-dark-hover-active: lighten($uxpl-green-base, 8%) !default; + +$uxpl-pink-base: rgb(194, 56, 125) !default; // wcag2a compliant +$uxpl-pink-hover-active: lighten($uxpl-pink-base, 7%) !default; // wcag2a compliant + +$uxpl-grayscale-x-back: rgb(245, 245, 245) !default; // UXPL grayscale, x-back + +$uxpl-primary-accent: rgb(14, 166, 236) !default; + +// +Colors - Primary +// ==================== +$black: rgb(0, 0, 0) !default; +$black-t0: rgba($black, 0.125) !default; +$black-t1: rgba($black, 0.25) !default; +$black-t2: rgba($black, 0.5) !default; +$black-t3: rgba($black, 0.75) !default; +$black-t4: rgba($black, 0.85) !default; + +$white: rgb(255, 255, 255) !default; +$white-t0: rgba($white, 0.125) !default; +$white-t1: rgba($white, 0.25) !default; +$white-t2: rgba($white, 0.5) !default; +$white-t3: rgba($white, 0.75) !default; + +$gray: rgb(127, 127, 127) !default; +$gray-l1: tint($gray, 20%) !default; +$gray-l2: tint($gray, 40%) !default; +$gray-l3: tint($gray, 60%) !default; +$gray-l4: tint($gray, 80%) !default; +$gray-l5: tint($gray, 90%) !default; +$gray-l6: tint($gray, 95%) !default; +$gray-l7: tint($gray, 99%) !default; +$gray-d1: shade($gray, 20%) !default; +$gray-d2: shade($gray, 40%) !default; +$gray-d3: shade($gray, 60%) !default; +$gray-d4: shade($gray, 80%) !default; +$gray-u1: #ecf0f1; + + +// These define button styles similar to LMS +// The goal here is consistency (until we can overhaul all of this...) +$btn-lms-border: #d2c9c9 !default; +$btn-lms-background: #f1f1f1 !default; +$btn-lms-gradient: #d9d1d1 !default; +$btn-lms-shadow: #fcfbfb !default; +$btn-lms-shadow-hover: #fefefe !default; +$btn-lms-background-hover: #e4e4e4 !default; +$btn-lms-gradient-hover: #d1c9c9 !default; +$btn-lms-shadow-active: #cac2c2 !default; + +$blue: rgb(0, 159, 230) !default; +$blue-l1: tint($blue, 20%) !default; +$blue-l2: tint($blue, 40%) !default; +$blue-l3: tint($blue, 60%) !default; +$blue-l4: tint($blue, 80%) !default; +$blue-l5: tint($blue, 90%) !default; +$blue-d1: shade($blue, 20%) !default; +$blue-d2: shade($blue, 40%) !default; +$blue-d3: shade($blue, 60%) !default; +$blue-d4: shade($blue, 80%) !default; +$blue-s1: saturate($blue, 15%) !default; +$blue-s2: saturate($blue, 30%) !default; +$blue-s3: saturate($blue, 45%) !default; +$blue-u1: desaturate($blue, 15%) !default; +$blue-u2: desaturate($blue, 30%) !default; +$blue-u3: desaturate($blue, 45%) !default; +$blue-t0: rgba($blue, 0.125) !default; +$blue-t1: rgba($blue, 0.25) !default; +$blue-t2: rgba($blue, 0.5) !default; +$blue-t3: rgba($blue, 0.75) !default; + +$pink: rgb(183, 37, 103) !default; // #b72567; +$pink-l1: tint($pink, 20%) !default; +$pink-l2: tint($pink, 40%) !default; +$pink-l3: tint($pink, 60%) !default; +$pink-l4: tint($pink, 80%) !default; +$pink-l5: tint($pink, 90%) !default; +$pink-d1: shade($pink, 20%) !default; +$pink-d2: shade($pink, 40%) !default; +$pink-d3: shade($pink, 60%) !default; +$pink-d4: shade($pink, 80%) !default; +$pink-s1: saturate($pink, 15%) !default; +$pink-s2: saturate($pink, 30%) !default; +$pink-s3: saturate($pink, 45%) !default; +$pink-u1: desaturate($pink, 15%) !default; +$pink-u2: desaturate($pink, 30%) !default; +$pink-u3: desaturate($pink, 45%) !default; + +$red: rgb(178, 6, 16) !default; // #b20610; +$red-l1: tint($red, 20%) !default; +$red-l2: tint($red, 40%) !default; +$red-l3: tint($red, 60%) !default; +$red-l4: tint($red, 80%) !default; +$red-l5: tint($red, 90%) !default; +$red-d1: shade($red, 20%) !default; +$red-d2: shade($red, 40%) !default; +$red-d3: shade($red, 60%) !default; +$red-d4: shade($red, 80%) !default; +$red-s1: saturate($red, 15%) !default; +$red-s2: saturate($red, 30%) !default; +$red-s3: saturate($red, 45%) !default; +$red-u1: desaturate($red, 15%) !default; +$red-u2: desaturate($red, 30%) !default; +$red-u3: desaturate($red, 45%) !default; + +$green: rgb(37, 184, 90) !default; // #25b85a +$green-l1: tint($green, 20%) !default; +$green-l2: tint($green, 40%) !default; +$green-l3: tint($green, 60%) !default; +$green-l4: tint($green, 80%) !default; +$green-l5: tint($green, 90%) !default; +$green-d1: shade($green, 20%) !default; +$green-d2: shade($green, 40%) !default; +$green-d3: shade($green, 60%) !default; +$green-d4: shade($green, 80%) !default; +$green-s1: saturate($green, 15%) !default; +$green-s2: saturate($green, 30%) !default; +$green-s3: saturate($green, 45%) !default; +$green-u1: desaturate($green, 15%) !default; +$green-u2: desaturate($green, 30%) !default; +$green-u3: desaturate($green, 45%) !default; + +$yellow: rgb(237, 189, 60) !default; +$yellow-l1: tint($yellow, 20%) !default; +$yellow-l2: tint($yellow, 40%) !default; +$yellow-l3: tint($yellow, 60%) !default; +$yellow-l4: tint($yellow, 80%) !default; +$yellow-l5: tint($yellow, 90%) !default; +$yellow-d1: shade($yellow, 20%) !default; +$yellow-d2: shade($yellow, 40%) !default; +$yellow-d3: shade($yellow, 60%) !default; +$yellow-d4: shade($yellow, 80%) !default; +$yellow-s1: saturate($yellow, 15%) !default; +$yellow-s2: saturate($yellow, 30%) !default; +$yellow-s3: saturate($yellow, 45%) !default; +$yellow-u1: desaturate($yellow, 15%) !default; +$yellow-u2: desaturate($yellow, 30%) !default; +$yellow-u3: desaturate($yellow, 45%) !default; + +$orange: rgb(237, 189, 60) !default; +$orange-l1: tint($orange, 20%) !default; +$orange-l2: tint($orange, 40%) !default; +$orange-l3: tint($orange, 60%) !default; +$orange-l4: tint($orange, 80%) !default; +$orange-l5: tint($orange, 90%) !default; +$orange-d1: shade($orange, 20%) !default; +$orange-d2: shade($orange, 40%) !default; +$orange-d3: shade($orange, 60%) !default; +$orange-d4: shade($orange, 80%) !default; +$orange-s1: saturate($orange, 15%) !default; +$orange-s2: saturate($orange, 30%) !default; +$orange-s3: saturate($orange, 45%) !default; +$orange-u1: desaturate($orange, 15%) !default; +$orange-u2: desaturate($orange, 30%) !default; +$orange-u3: desaturate($orange, 45%) !default; + +// +Colors - Shadows +// ==================== +$shadow: rgba($black, 0.2) !default; +$shadow-l1: rgba($black, 0.1) !default; +$shadow-l2: rgba($black, 0.05) !default; +$shadow-d1: rgba($black, 0.4) !default; +$shadow-d2: rgba($black, 0.6) !default; + +// +Colors - Application +// ==================== +$color-draft: $gray-l3 !default; +$color-live: $blue !default; +$color-ready: $green !default; +$color-warning: $orange-l2 !default; +$color-error: $red-l2 !default; +$color-staff-only: $black !default; +$color-gated: $black !default; + +$color-heading-base: $gray-d2 !default; +$color-copy-base: $gray-d2 !default; +$color-copy-emphasized: $gray-d2 !default; + +// +Timing +// ==================== +// used for animation/transition mixin syncing +$tmg-s3: 3s; +$tmg-s2: 2s; +$tmg-s1: 1s; +$tmg-avg: 0.75s; +$tmg-f1: 0.5s; +$tmg-f2: 0.25s; +$tmg-f3: 0.125s; + +// +Archetype UI +// ==================== +$ui-action-primary-color: $blue-u2 !default; +$ui-action-primary-color-focus: $blue-s1 !default; + +$ui-link-color: $blue-u2 !default; +$ui-link-color-focus: $blue-s1 !default; +$link-color: $ui-link-color; + +// +Specific UI +// ==================== +$ui-notification-height: ($baseline*10); +$ui-update-color: $blue-l4 !default; + +// +Deprecated +// ==================== +// do not use, future clean up will use updated styles +$lighter-base-font-color: rgb(100, 100, 100) !default; +$offBlack: #3c3c3c !default; +$green: #108614 !default; +$lightGrey: #edf1f5 !default; +$mediumGrey: #b0b6c2 !default; +$darkGrey: #8891a1 !default; +$extraDarkGrey: #3d4043 !default; +$paleYellow: #fffcf1 !default; +$yellow: rgb(255, 254, 223) !default; +$green: rgb(37, 184, 90) !default; +$brightGreen: rgb(22, 202, 87) !default; +$disabledGreen: rgb(124, 206, 153) !default; +$darkGreen: rgb(52, 133, 76) !default; +$lightBluishGrey: rgb(197, 207, 223) !default; +$lightBluishGrey2: rgb(213, 220, 228) !default; +$error-red: rgb(253, 87, 87) !default; + + +//carryover from LMS for xmodules +$sidebar-color: rgb(246, 246, 246) !default; + +// type +$body-line-height: golden-ratio(0.875em, 1); + +// carried over from LMS for xmodules +$action-primary-active-bg: #1aa1de !default; // $m-blue +$very-light-text: $white !default; + +$color-background-alternate: rgb(242, 248, 251) !default; + +// ---------------------------- +// #COLORS- Bootstrap-style +// ---------------------------- + +$state-success-text: $black !default; +$state-success-bg: #dff0d8 !default; +$state-success-border: darken($state-success-bg, 5%) !default; + +$state-info-text: $black !default; +$state-info-bg: #d9edf7 !default; +$state-info-border: darken($state-info-bg, 7%) !default; + +$state-warning-text: $black !default; +$state-warning-bg: #fcf8e3 !default; +$state-warning-border: darken($state-warning-bg, 5%) !default; + +$state-danger-text: $black !default; +$state-danger-bg: #f2dede !default; +$state-danger-border: darken($state-danger-bg, 5%) !default; + +$text-dark-black-blue: #2c3e50; \ No newline at end of file diff --git a/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss new file mode 100644 index 000000000..888b6611a --- /dev/null +++ b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss @@ -0,0 +1,20 @@ +$primary: {{ INDIGO_PRIMARY_COLOR }}; +$secondary: #F2F7F8; + +$blue: $primary !default; +$m-blue-d1: mix(white, $primary, 5%) !default; +$m-blue-d2: mix(white, $primary, 15%) !default; +$m-blue-d3: $primary !default; +$m-blue-d4: mix(rgb(74, 137, 245), $primary, 20%) !default; +$m-blue-d5: mix(rgb(56, 148, 252), $primary, 30%) !default; +$m-blue-d6: mix(rgb(42, 134, 226), $primary, 40%) !default; + +$uxpl-blue-hover-active: lighten($primary, 7%) !default; + +$serif: 'Inter'; +$f-sans-serif: 'Inter', 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif; +$font-family-title: 'Inter'; +$font-family-sans-serif: 'Inter', 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif; + +// Initialize the Open edX Bootstrap theme +@import 'edx-bootstrap/sass/open-edx/theme'; From e9e57ebe013a52a037d906a74382a7ab1540b7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Ctanveer65=E2=80=9D?= Date: Wed, 27 Mar 2024 10:05:38 +0500 Subject: [PATCH 04/11] feat: updates comments --- .../indigo/lms/templates/certificates/accomplishment-base.html | 1 + .../lms/templates/learner_dashboard/programs_fragment.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html b/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html index 77aed10b9..2a04e6913 100644 --- a/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html +++ b/tutorindigo/templates/indigo/lms/templates/certificates/accomplishment-base.html @@ -27,6 +27,7 @@ ${document_title} <%static:css group='style-certificates'/> + <%static:css group='style-main-v1'/> <% ga_4_id = static.get_value("GOOGLE_ANALYTICS_4_ID", settings.GOOGLE_ANALYTICS_4_ID) %> diff --git a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html index 95d897447..dd3e94bcb 100644 --- a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html +++ b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html @@ -8,7 +8,7 @@ dump_js_escaped_json, js_escaped_string ) %> - + % if mobile_only:

From 4e96eda1f227ec10aab329a7188950bf234b10c5 Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Wed, 27 Mar 2024 10:03:37 +0500 Subject: [PATCH 05/11] feat: add custom header and footer for custom header and footerr --- tutorindigo/plugin.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tutorindigo/plugin.py b/tutorindigo/plugin.py index 090a69faf..780e8eb14 100644 --- a/tutorindigo/plugin.py +++ b/tutorindigo/plugin.py @@ -133,5 +133,21 @@ def _override_openedx_docker_image( RUN npm install '@edx/frontend-component-footer@npm:@edly-io/indigo-frontend-component-footer@^1.0.0' """, ), + ( + "mfe-dockerfile-post-npm-install-profile", + """ +RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^1.0.0' +RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^1.0.0' +RUN npm install '@edx/frontend-component-footer@npm:@edly-io/indigo-frontend-component-footer@^1.0.0' +""", + ), + ( + "mfe-dockerfile-post-npm-install-account", + """ +RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^1.0.0' +RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^1.0.0' +RUN npm install '@edx/frontend-component-footer@npm:@edly-io/indigo-frontend-component-footer@^1.0.0' +""", + ) ] ) From c9016cc8df9d53f8176d2cbb164e3cc71220c370 Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Thu, 23 May 2024 09:42:00 +0500 Subject: [PATCH 06/11] fix: add fallback image for course detail page --- .../templates/indigo/lms/templates/courseware/course_about.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html b/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html index 3f3e997cb..fc9fd9d7d 100644 --- a/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html +++ b/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html @@ -71,7 +71,7 @@ %else:
- +
% endif From 9e9abeb2a862f13e2352e7c2e0dbd287542ade94 Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Thu, 16 May 2024 18:48:45 +0500 Subject: [PATCH 07/11] fix: change no_course_image.png for light and dark theme --- .../lms/static/images/no_course_image.png | Bin 3269 -> 62306 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tutorindigo/templates/indigo/lms/static/images/no_course_image.png b/tutorindigo/templates/indigo/lms/static/images/no_course_image.png index a1568b7a6765066833be6a49d6941f68a25555a1..e520f07875f51e131d87e1c8b44ebfae381d2315 100644 GIT binary patch literal 62306 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 From 2615334ea6d4a51e9482a85bd429888a71ca8f4d Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Tue, 28 May 2024 16:15:05 +0500 Subject: [PATCH 08/11] fix: update comments --- .gitignore | 1 - .../indigo/lms/templates/course.html | 1 + .../templates/courseware/course_about.html | 1 + .../discovery/course_card.underscore | 1 + .../learner_dashboard/program_card.underscore | 70 +++++++++++++++++++ .../lms/templates/static_templates/about.html | 2 +- .../templates/static_templates/contact.html | 2 +- 7 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore diff --git a/.gitignore b/.gitignore index 0c5da68d5..f6a874f21 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ __pycache__ *.egg-info/ /build/ /dist/ -.DS_Store diff --git a/tutorindigo/templates/indigo/lms/templates/course.html b/tutorindigo/templates/indigo/lms/templates/course.html index 4bc826b74..dcfc96275 100644 --- a/tutorindigo/templates/indigo/lms/templates/course.html +++ b/tutorindigo/templates/indigo/lms/templates/course.html @@ -8,6 +8,7 @@
+ ${course.display_name_with_default} ${course.display_number_with_default}
diff --git a/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html b/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html index fc9fd9d7d..48f1a59d6 100644 --- a/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html +++ b/tutorindigo/templates/indigo/lms/templates/courseware/course_about.html @@ -71,6 +71,7 @@ %else:
+
diff --git a/tutorindigo/templates/indigo/lms/templates/discovery/course_card.underscore b/tutorindigo/templates/indigo/lms/templates/discovery/course_card.underscore index c98e1414f..d3be84f72 100644 --- a/tutorindigo/templates/indigo/lms/templates/discovery/course_card.underscore +++ b/tutorindigo/templates/indigo/lms/templates/discovery/course_card.underscore @@ -1,6 +1,7 @@
+ <%- content.display_name %> <%- content.number %>
diff --git a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore new file mode 100644 index 000000000..e88d8256c --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore @@ -0,0 +1,70 @@ +
+

<%- gettext(title) %>

+
+
<%- orgList %>
+
+ <%- gettext(type) %> + +
+
+
+<% if (progress) { %> +
+
+
<%- progress.completed %>
+ + <%- ngettext('Course', 'Courses', progress.completed) %> + + <%- gettext('Completed') %> +
+ +
+
<%- progress.in_progress %>
+ + <%- ngettext('Course', 'Courses', progress.in_progress) %> + + <%- gettext('In Progress') %> +
+ +
+
<%- progress.not_started %>
+ + <%- ngettext('Course', 'Courses', progress.not_started) %> + + <%- gettext('Remaining') %> +
+
+<% } %> +<% if (progress) { %> +
+
+ <% _.times(progress.completed, function() { %> +
+ <% }) %> + <% _.times(progress.in_progress, function() { %> +
+ <% }) %> + <% _.times(progress.not_started, function() { %> +
+ <% }) %> +
+
+<% } %> +
+ + +<% if (isSubscribed) { %> +
+ <%- gettext('Subscribed') %> +
+<% } %> diff --git a/tutorindigo/templates/indigo/lms/templates/static_templates/about.html b/tutorindigo/templates/indigo/lms/templates/static_templates/about.html index 49a9dd80b..40a54fc18 100644 --- a/tutorindigo/templates/indigo/lms/templates/static_templates/about.html +++ b/tutorindigo/templates/indigo/lms/templates/static_templates/about.html @@ -8,7 +8,7 @@

- <%block name="pageheader">${page_header or _("About Us")} + <%block name="pageheader">${page_header or _("About")}

<%block name="pagecontent">${page_content or _("This page left intentionally blank. Feel free to add your own content.")} diff --git a/tutorindigo/templates/indigo/lms/templates/static_templates/contact.html b/tutorindigo/templates/indigo/lms/templates/static_templates/contact.html index 680008d46..8c99d6a6c 100644 --- a/tutorindigo/templates/indigo/lms/templates/static_templates/contact.html +++ b/tutorindigo/templates/indigo/lms/templates/static_templates/contact.html @@ -8,7 +8,7 @@

- <%block name="pageheader">${page_header or _("Contact Us")} + <%block name="pageheader">${page_header or _("Contact")}

<%block name="pagecontent">${page_content or _("This page left intentionally blank. Feel free to add your own content.")} From 70ccabc7ec5526fe5a882432945fa8aa519bf1ca Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Tue, 28 May 2024 16:20:37 +0500 Subject: [PATCH 09/11] chore: reformatting --- tutorindigo/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorindigo/plugin.py b/tutorindigo/plugin.py index 780e8eb14..6ce6324aa 100644 --- a/tutorindigo/plugin.py +++ b/tutorindigo/plugin.py @@ -148,6 +148,6 @@ def _override_openedx_docker_image( RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^1.0.0' RUN npm install '@edx/frontend-component-footer@npm:@edly-io/indigo-frontend-component-footer@^1.0.0' """, - ) + ), ] ) From f0fe80f06b8e325a7bbaed1a1d4f6a9f0ab2aa74 Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Wed, 5 Jun 2024 15:01:14 +0500 Subject: [PATCH 10/11] fix: update picture tag fallback image --- .../lms/templates/learner_dashboard/program_card.underscore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore index e88d8256c..1a7c142a6 100644 --- a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore +++ b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore @@ -59,7 +59,7 @@ - +

From bdcc52467c6000930b5ce1875deb04334e313225 Mon Sep 17 00:00:00 2001 From: hinakhadim Date: Wed, 5 Jun 2024 15:24:01 +0500 Subject: [PATCH 11/11] fix: course about page image issue --- .../lms/static/sass/courseware/_about.scss | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss b/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss index 31dbe0823..3a5efba39 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss @@ -74,21 +74,13 @@ border: none; &:after { position: absolute; - left: -35px; - top: -25px; - width: 100%; - height: 100%; + left: 1px; + top: 1px; + width: calc(100% - 2px); + height: calc(100% - 2px); content: ""; border-radius: 8px; - background: $primary-light; - display: none; - @include media-breakpoint-up(md) { - display: block; - } - @include media-breakpoint-up(lg) { - left: -57px; - top: -44px; - } + border: 1px solid $primary-light; } } }