diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d6a7f1b..ae8468af7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,11 @@ instructions, because git commits are used to generate release notes: + +## v19.0.0 (2024-12-11) + +- 💥[Feature] Upgrade to Sumac (by @hinakhadim) + ## v18.3.0 (2024-12-11) diff --git a/README.rst b/README.rst index 5868f50f2..1d53d7c24 100644 --- a/README.rst +++ b/README.rst @@ -86,11 +86,11 @@ Overriding the default "about", "contact", etc. static pages By default, the ``/about`` and ``/contact`` pages contain a simple line of text: "This page left intentionally blank. Feel free to add your own content". This is of course unusable in production. In the following, we detail how to override just any of the static templates used in Open edX. -The static templates used by Open edX to render those pages are all stored in the `edx-platform/lms/templates/static_templates `__ folder. To override those templates, you should add your own in the following folder:: +The static templates used by Open edX to render those pages are all stored in the `edx-platform/lms/templates/static_templates `__ folder. To override those templates, you should add your own in the following folder:: ls tutorindigo/templates/indigo/lms/templates/static_templates" -For instance, edit the "donate.html" file in this directory. We can derive the content of this file from the contents of the `donate.html `__ static template in edx-platform: +For instance, edit the "donate.html" file in this directory. We can derive the content of this file from the contents of the `donate.html `__ static template in edx-platform: .. code-block:: mako diff --git a/setup.py b/setup.py index 6cdca5a7e..2a27cb9bd 100644 --- a/setup.py +++ b/setup.py @@ -45,8 +45,8 @@ def load_about(): packages=find_packages(exclude=["tests*"]), include_package_data=True, python_requires=">=3.9", - install_requires=["tutor>=18.0.0,<19.0.0", "tutor-mfe>=18.0.0,<19.0.0"], - extras_require={"dev": "tutor[dev]>=18.0.0,<19.0.0"}, + install_requires=["tutor>=19.0.0,<20.0.0", "tutor-mfe>=19.0.0,<20.0.0"], + extras_require={"dev": "tutor[dev]>=19.0.0,<20.0.0"}, entry_points={"tutor.plugin.v1": ["indigo = tutorindigo.plugin"]}, classifiers=[ "Development Status :: 5 - Production/Stable", diff --git a/tutorindigo/__about__.py b/tutorindigo/__about__.py index 22ed76922..0122a6fac 100644 --- a/tutorindigo/__about__.py +++ b/tutorindigo/__about__.py @@ -1 +1 @@ -__version__ = "18.3.0" +__version__ = "19.0.0" diff --git a/tutorindigo/templates/indigo/env.config.jsx b/tutorindigo/patches/mfe-env-config-buildtime-definitions similarity index 75% rename from tutorindigo/templates/indigo/env.config.jsx rename to tutorindigo/patches/mfe-env-config-buildtime-definitions index ca3b70448..96bf159bf 100644 --- a/tutorindigo/templates/indigo/env.config.jsx +++ b/tutorindigo/patches/mfe-env-config-buildtime-definitions @@ -1,9 +1,4 @@ -import React, { useEffect } from 'react'; -import Cookies from 'universal-cookie'; -import Footer from '@edly-io/indigo-frontend-component-footer'; -import { getConfig } from '@edx/frontend-platform'; -import { DIRECT_PLUGIN, PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; let themeCookie = 'indigo-toggle-dark'; let themeCookieExpiry = 90; // days @@ -70,35 +65,3 @@ const AddDarkTheme = () => { return (
); }; - -const themePluginSlot = { - keepDefault: false, - plugins: [ - { - op: PLUGIN_OPERATIONS.Insert, - widget: { - id: 'default_contents', - type: DIRECT_PLUGIN, - priority: 1, - RenderWidget:
, - }, - }, - { - op: PLUGIN_OPERATIONS.Insert, - widget: { - id: 'read_theme_cookie', - type: DIRECT_PLUGIN, - priority: 2, - RenderWidget: AddDarkTheme, - }, - }, - ], -}; - -const config = { - pluginSlots: { - footer_slot: themePluginSlot, - }, -}; - -export default config; diff --git a/tutorindigo/patches/mfe-env-config-buildtime-imports b/tutorindigo/patches/mfe-env-config-buildtime-imports new file mode 100644 index 000000000..911c11c73 --- /dev/null +++ b/tutorindigo/patches/mfe-env-config-buildtime-imports @@ -0,0 +1,4 @@ +import React, { useEffect } from 'react'; +import Cookies from 'universal-cookie'; + +import { getConfig } from '@edx/frontend-platform'; diff --git a/tutorindigo/patches/mfe-env-config-runtime-definitions b/tutorindigo/patches/mfe-env-config-runtime-definitions new file mode 100644 index 000000000..2204c7301 --- /dev/null +++ b/tutorindigo/patches/mfe-env-config-runtime-definitions @@ -0,0 +1,2 @@ + +const { default: IndigoFooter } = await import('@edly-io/indigo-frontend-component-footer'); diff --git a/tutorindigo/plugin.py b/tutorindigo/plugin.py index 1a3311dd4..19aea2651 100644 --- a/tutorindigo/plugin.py +++ b/tutorindigo/plugin.py @@ -1,10 +1,12 @@ from __future__ import annotations import os +from glob import glob import typing as t import importlib_resources from tutor import hooks +from tutormfe.hooks import PLUGIN_SLOTS from tutor.__about__ import __version_suffix__ from .__about__ import __version__ @@ -102,68 +104,37 @@ def _override_openedx_docker_image( hooks.Filters.CONFIG_OVERRIDES.add_items(list(config["overrides"].items())) +# MFEs that are styled using Indigo +indigo_styled_mfes = [ + "learning", + "learner-dashboard", + "profile", + "account", + "discussions", +] + hooks.Filters.ENV_PATCHES.add_items( [ - # MFE will install header version 3.0.x and will include indigo-footer as a - # separate package for use in env.config.jsx ( - "mfe-dockerfile-post-npm-install-learning", + f"mfe-dockerfile-post-npm-install-{mfe}", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' -RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' + RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 +RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.2.2' +RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.2.2' -COPY indigo/env.config.jsx /openedx/app/ -""", - ), - ( - "mfe-dockerfile-post-npm-install-authn", - """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' """, - ), - # Tutor-Indigo v2.1 targets the styling updates in discussions and learner-dashboard MFE - # brand-openedx is related to styling updates while others are for header and footer updates - ( - "mfe-dockerfile-post-npm-install-discussions", - """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' -RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' -RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 - -COPY indigo/env.config.jsx /openedx/app/ -""", - ), - ( - "mfe-dockerfile-post-npm-install-learner-dashboard", - """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' -RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 - -COPY indigo/env.config.jsx /openedx/app/ -""", - ), - ( - "mfe-dockerfile-post-npm-install-profile", - """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' -RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' -RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 + ) + for mfe in indigo_styled_mfes + ] +) -COPY indigo/env.config.jsx /openedx/app/ -""", - ), - ( - "mfe-dockerfile-post-npm-install-account", - """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' -RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' -RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 -COPY indigo/env.config.jsx /openedx/app/ -""", - ), - ] +hooks.Filters.ENV_PATCHES.add_item( + ( + "mfe-dockerfile-post-npm-install-authn", + "RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.2.2'", + ) ) # Include js file in lms main.html, main_django.html, and certificate.html @@ -204,3 +175,47 @@ def _override_openedx_docker_image( ), ] ) + + +# Apply patches from tutor-indigo +for path in glob( + os.path.join( + str(importlib_resources.files("tutorindigo") / "patches"), + "*", + ) +): + with open(path, encoding="utf-8") as patch_file: + hooks.Filters.ENV_PATCHES.add_item((os.path.basename(path), patch_file.read())) + + +for mfe in indigo_styled_mfes: + PLUGIN_SLOTS.add_item( + ( + mfe, + "footer_slot", + """ + { + op: PLUGIN_OPERATIONS.Hide, + widgetId: 'default_contents', + }, + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'default_contents', + type: DIRECT_PLUGIN, + priority: 1, + RenderWidget: , + }, + }, + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'read_theme_cookie', + type: DIRECT_PLUGIN, + priority: 2, + RenderWidget: AddDarkTheme, + }, + }, + """, + ), + ) diff --git a/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss b/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss index e5732d2be..ae727313c 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/courseware/_about.scss @@ -84,6 +84,9 @@ border-radius: 8px; border: 1px solid $primary-light; } + .play-intro{ + z-index: 10; + } } } } diff --git a/tutorindigo/templates/indigo/lms/static/sass/xblock/_xblock.scss b/tutorindigo/templates/indigo/lms/static/sass/xblock/_xblock.scss index a5f13dbcd..d1b6120ac 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/xblock/_xblock.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/xblock/_xblock.scss @@ -464,6 +464,20 @@ } + #feedback-container{ + background: $body-bg-d; + border: 1px solid $text-color-d; + p{ + color: $text-color-d; + } + } + + .emoji-button{ + background-color: $body-bg-d; + } + .xblock.xmodule_display.xmodule_HtmlBlock .blue-text{color: $primary;} + + .edx-notes-wrapper{ .annotator-hl{ background: orange; diff --git a/tutorindigo/templates/indigo/lms/templates/courseware/courses.html b/tutorindigo/templates/indigo/lms/templates/courseware/courses.html index 4eaf3faea..a95151a5d 100644 --- a/tutorindigo/templates/indigo/lms/templates/courseware/courses.html +++ b/tutorindigo/templates/indigo/lms/templates/courseware/courses.html @@ -25,7 +25,8 @@ ${course_discovery_meanings | n, dump_js_escaped_json}, getParameterByName('search_query'), "${user_language | n, js_escaped_string}", - "${user_timezone | n, js_escaped_string}" + "${user_timezone | n, js_escaped_string}", + ${set_default_filter | n, dump_js_escaped_json} ); 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 6aeafb29c..67c9ddd24 100644 --- a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore +++ b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/program_card.underscore @@ -63,8 +63,3 @@
-<% if (isSubscribed) { %> -
- <%- gettext('Subscribed') %> -
-<% } %> 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 dd3e94bcb..2c7eb2b4d 100644 --- a/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html +++ b/tutorindigo/templates/indigo/lms/templates/learner_dashboard/programs_fragment.html @@ -31,11 +31,8 @@ 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} });