Giter VIP home page Giter VIP logo

tutor-indigo's People

Contributors

codewithemad avatar danyal-faheem avatar gondaljutt avatar hinakhadim avatar insad avatar kdmccormick avatar misilot avatar ogulkokan avatar regisb avatar tanveer65 avatar waveywhite avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

tutor-indigo's Issues

No such command: "render"

Im trying to run tutor config render ... but its says command does not exist. On version

tutor, version 3.6.0

Im guessing the README its outdated right?

When plugin is removed should it clean up it's build directory artficats

For example if you do the following

pip install tutor-indigo
tutor plugins enable indigo
tutor config save

the indigo folder is created at $TUTOR_ROOT/env/build/openedx/themes and persists after running.

tutor plugins disable indigo
tutor config save

Should it, or should it be removed?

Wrong footer links (and copyright)

Expected behavior

Footer includes seven (7) links, namely About, Blog, Contact, Donate, Terms of Service & Honor Code, Privacy Policy, Take free online courses at edX.org. All links must be working.

Actual behavior

Actual links are:

About Us Blog Donate Terms of Sevice Privacy Policy Help Contact Us

This is at https://redwood.demo.edly.io/

Screenshot 2024-05-17 at 10 58 45 AM

Steps to reproduce

Go to https://redwood.demo.edly.io/

Scroll down.

Additional information

TC_LEARNER_48 also fails, as copyright notice also does not match. Supposed to be “All rights reserved except where noted. edX, Open edX and their respective logos are registered trademarks of edX Inc.” and instead it's "Copyrights ©2024. All Rights Reserved."

Learning MFE header text is smushed onto one line

Screenshots

Seems like the header text either needs to be broken into two lines, or it needs some padding tweaks that it looks better on one line.

Without tutor-indigo installed:

image

With tutor-indigo installed

image

Reproduction

Simply install indigo, enable it, rebuild the MFE image, start Tutor, and navigate to a course.

This does not seem to be impacting Quince. I believe it only impacts Nightly. I tested both tutor local and tutor dev. I did not try mounting frontend-app-learning.

System info:

(venv-tutor) ~/overhangio/tutor 🍀 lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.4 LTS
Release:	22.04
Codename:	jammy

(venv-tutor) ~/overhangio/tutor 🍀 tutor plugins list -e
NAME  	STATUS   	VERSION
indigo	✅ enabled	17.3.0
mfe   	✅ enabled	17.0.0

Both indigo and mfe are installed from a local git-clone at the tip of their nightly branches.

When forking Indigo, it appends -indigio multiple times

Hello,

When I have both indigo and our nla-theme enabled tutor tries to append indigo twice to the image name.

NLA Theme: https://github.com/newliteraciesalliance/tutor-nla-theme/tree/nla-v17

tutor launch dev results in

[+] Stopping 3/0
 ✔ Container tutor_local-mysql-1        Stopped                                                                                                                                                                  0.0s
 ✔ Container tutor_local-mongodb-1      Stopped                                                                                                                                                                  0.0s
 ✔ Container tutor_local-permissions-1  Stopped                                                                                                                                                                  0.0s
docker compose -f '/Users/user/Library/Application Support/tutor/env/local/docker-compose.yml' -f '/Users/user/Library/Application Support/tutor/env/dev/docker-compose.yml' --project-name tutor_dev up --remove-orphans -d
[+] Running 1/1
 ✘ mfe Error                                                                                                                                                                                                     0.6s
Error response from daemon: manifest for overhangio/openedx-mfe:17.0.0-indigo-indigo not found: manifest unknown: manifest unknown
Error: Command failed with status 18: docker compose -f /Users/user/Library/Application Support/tutor/env/local/docker-compose.yml -f /Users/user/Library/Application Support/tutor/env/dev/docker-compose.yml --project-name tutor_dev up --remove-orphans -d

If I disable one of them, it's able to start up and run.

Social media links contain broken text

I'm not sure if this is an issue with this theme specifically, but the social media buttons on the right side of a course's "About" page show some weird behavior. This is what happens when I click the Twitter button on https://demo.openedx.overhang.io/courses/course-v1:edX+DemoX+Demo_Course/about

image

I've been trying to find the place where this message originates, but it's a bit weird. I only found it in the edx-platform repository at ./themes/stanford-style/lms/templates/courseware/course_about_sidebar_header.html, but that file doesn't include the Facebook button that I also see in the indigo theme, so I guess that that's not the sidebar template that's actually used by the indigo theme.

On a side note: it's not super clear to me what this theme depends on. In other words: if I don't override a file in the theme, which file is used? If you can help me answer this question I'll gladly open this issue in the parent theme instead of this repository :)

The theme `*.scss` files are all ignored

All scss files that ship with this theme (including "_extras.scss") are not rendered in the Tutor project environment. That's because they are located in a "partials" folder which is explicitly ignored by Tutor: https://github.com/overhangio/tutor/blob/669f8363283c5351ff39007e06df42dd1c48b2c7/tutor/env.py#L75

This issue was detected in this conversation: #23 (comment)

The proper solution would probably be to move the files from the "partials" folder and put them directly in the "indigo" directory. I need to check whether this would be working.

Customizing fonts

Hi. I'm using tutor with openedx olive. As stated in the tutor documentation I used this theme as a base for making my own custom theme. I successfully changed the logo but the font is partially changed. In some sections I see my own font and in some other sections (usually buttons and pages other than the homepage) I still see the default font.

To change the font, I followed these steps:

  1. added custom fonts to a directory within the theme directory
  2. added fonts using font-face in lms/static/sass/partials/lms/theme/_fonts.scss
  3. updated font-family-title, serif and f-sans-serif in _variables.scss

So where is the other font coming from? Is it from edx-boostrap that's imported in _variables.scss? Assuming this is the issue, I forked edx-bootstrap and changed the fonts there as well. Then I added my own bootstrap (using github link not npm package yet) in openedx-platform package.json file. But now when I want to replace edx-bootstrap with my own bootstrap in the _variables.scss file, when building the image, I get errors saying my bootstrap does not exist and is not found. So does tutor (indigo) has it's own package.json or something like this? Is there any other way for adding a package to package.json file except adding it to openedx-platform and building the image? Is there any other way of changing fonts globally?

Old screenshot on README

The UI has undergone numerous changes since Quince, but the screenshot still depicts an older version.

Use django templates

Hi there!

I am trying to use this plugin as a starting point for my own theme plugin.
I have my own templates (for lms), so what I did was to copy them inside templates/indigo/lms/templates.
The issue is that after installing and enabling the plugin, when I do tutor config save I get this error: jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'load'.
That is because I have Django templates with {% load i18n %} declarations and some others.

So my question is: It is possible to use Django templates in my tutor theme plugin?

I saw here a possible workaround, that is use {% raw %} and {% endraw %} tags .
I don't know if this is the right way to use Django templates or if I am missing some configuration.

Regards!!

sass.CompileError: Error invalid CSS after "$primary:"

Description
When following the instructions on the tutor manual page: https://docs.tutor.overhang.io/tutorials/theming.html#theming I run into a problem when running the command: tutor images build openedx
I get an error in step 80/86. The error is:

Compiling lms sass assets from theme /openedx/themes/indigo...
Traceback (most recent call last):
  File "/openedx/bin/openedx-assets", line 218, in <module>
    main()
  File "/openedx/bin/openedx-assets", line 89, in main
    args.func(args)
  File "/openedx/bin/openedx-assets", line 153, in run_themes
    assets._compile_sass(system, Path(theme_path), False, False, [])
  File "/openedx/edx-platform/pavelib/assets.py", line 558, in _compile_sass
    sass.compile(
  File "/openedx/venv/lib/python3.8/site-packages/sass.py", line 644, in compile
    raise CompileError(v)
sass.CompileError: b'Error: Invalid CSS after "$primary:": expected 1 selector or at-rule, was "NDIGO_PRIMARY_C..."\n        on line 1 of 
../themes/indigo/lms/static/sass/partials/lms/theme/_variables.scss\n>> $primary: {{ INDIGO_PRIMARY_COLOR }};\n   ---------^\n'
The command '/bin/sh -c openedx-assets themes     && openedx-assets collect --settings=tutor.assets     && rdfind -makesymlinks true -followsymlinks true /openedx/staticfiles/' returned a non-zero code: 1

This is the contents of the file in a text editor:

$primary: {{ INDIGO_PRIMARY_COLOR }};

// Theme fonts
$font-family-title: Plex;
$serif: Crimson;
$f-sans-serif: Crimson, 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif;

// Initialize the Open edX Bootstrap theme
@import 'edx-bootstrap/sass/open-edx/theme';

As I said, I have followed the instructions on the tutor manual page.

Expected behavior
The command tutor images build openedx succeeds in building the containers.

Actual behavior
A sass.CompileError is thrown in step 80/86 when running the command tutor images build openedx

If using a custom theme Powered By Logos do no render

On the apps MFE pages

Go to course details if you enroll or view an open course, the Runs on Tutor and Powered by Open edX logos are tied to the tutor theme and not a custom one that has been forked, and the images do not render.

Example from: https://apps.test.online.newliteraciesalliance.org/learning/course/course-v1:NLA+IL1015+20_21/home

image
<div class="footer-top"><div class="powered-area"><ul class="logo-list"><li>Powered by</li><li><a href="https://docs.tutor.overhang.io" rel="noreferrer" target="_blank"><img src="https://test.online.newliteraciesalliance.org/static/indigo/images/tutor-logo.png" alt="Runs on Tutor" width="57" class=""></a></li><li><a href="https://open.edx.org" rel="noreferrer" target="_blank"><img src="https://test.online.newliteraciesalliance.org/static/indigo/images/openedx-logo.png" alt="Powered by Open edX" width="79" class=""></a></li></ul></div></div><span class="copyright-site">Copyrights ©2023. All Rights Reserved.</span>

Override or Create New Stylesheet in Indigo Theme

Hi I am new to open edx platform, Want to override or create my own stylesheet in the indigo theme that I clone here GitHub - overhangio/tutor-indigo: An elegant, customizable theme for Open edX and I follow the instructions, I also try to edit the _extras.scss in here and do the local images build openedx followed by tutor local start -d \tutor\env\build\openedx\themes\indigo\lms\static\sass\partials\lms\theme but still has no effect, and every time that I use tutor config save the style that I set or change in the _extras.scss always erase, can someone help me to edit the styles ?

image

image

thank you

Error during tutor images build

Hi,

I am trying to change the logo of indigo theme but I am having issues when running tutor images build openedx to apply the changes.

What I had done so far:

  1. Updated tutor to latest version
  2. Updated indigo theme to latest version
  3. Uninstall docker and docker compose completely then reinstall latest version

Error:

 => ERROR [production 28/30] RUN openedx-assets themes     && openedx-assets collect --settings=tutor.assets     && rdfind -makesymlinks true -foll  113.0s
------
 > [production 28/30] RUN openedx-assets themes     && openedx-assets collect --settings=tutor.assets     && rdfind -makesymlinks true -followsymlinks true /openedx/staticfiles/:
8.200 Compiling lms sass assets from theme /openedx/themes/branded...
8.200 Compiling Sass: lms/static/sass -> /openedx/themes/branded/lms/static/css
8.200     with Sass lookup path: common/static
8.200     with Sass lookup path: common/static/sass
8.200     with Sass lookup path: node_modules/@edx
8.200     with Sass lookup path: node_modules
8.200     with Sass lookup path: /openedx/themes/branded/lms/static/sass/partials
8.200     with Sass lookup path: lms/static/sass/partials
8.200     with Sass lookup path: lms/static/sass
8.200 rtlcss /openedx/themes/branded/lms/static/css/bootstrap/lms-main.css /openedx/themes/branded/lms/static/css/bootstrap/lms-main-rtl.css
8.319 rtlcss: Warning! No config present, using defaults.
8.482 Saving: /openedx/themes/branded/lms/static/css/bootstrap/lms-main-rtl.css
8.726 rtlcss /openedx/themes/branded/lms/static/css/discussion/lms-discussion-bootstrap.css /openedx/themes/branded/lms/static/css/discussion/lms-discussion-bootstrap-rtl.css
8.848 rtlcss: Warning! No config present, using defaults.
8.978 Saving: /openedx/themes/branded/lms/static/css/discussion/lms-discussion-bootstrap-rtl.css
18.09 Compiling Sass: /openedx/themes/branded/lms/static/sass -> /openedx/themes/branded/lms/static/css
18.09     with Sass lookup path: common/static
18.09     with Sass lookup path: common/static/sass
18.09     with Sass lookup path: node_modules/@edx
18.09     with Sass lookup path: node_modules
18.09     with Sass lookup path: /openedx/themes/branded/lms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass
18.09  Sass dir '/openedx/themes/branded/lms/static/certificates/sass' does not exists, skipping sass compilation for '/openedx/themes/branded'
18.09 Compiling Sass: xmodule/assets -> /openedx/themes/branded/lms/static/css
18.09     with Sass lookup path: common/static
18.09     with Sass lookup path: common/static/sass
18.09     with Sass lookup path: node_modules/@edx
18.09     with Sass lookup path: node_modules
18.09     with Sass lookup path: /openedx/themes/branded/lms/static/sass/partials
18.09     with Sass lookup path: /openedx/themes/branded/cms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass/partials
18.09     with Sass lookup path: cms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass
18.09     with Sass lookup path: cms/static/sass
18.09 Compiling cms sass assets from theme /openedx/themes/branded...
18.09 Compiling Sass: xmodule/assets -> /openedx/themes/branded/cms/static/css
18.09     with Sass lookup path: common/static
18.09     with Sass lookup path: common/static/sass
18.09     with Sass lookup path: node_modules/@edx
18.09     with Sass lookup path: node_modules
18.09     with Sass lookup path: /openedx/themes/branded/lms/static/sass/partials
18.09     with Sass lookup path: /openedx/themes/branded/cms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass/partials
18.09     with Sass lookup path: cms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass
18.09     with Sass lookup path: cms/static/sass
18.09 Compiling lms sass assets from theme /openedx/themes/indigo...
18.09 Compiling Sass: lms/static/sass -> /openedx/themes/indigo/lms/static/css
18.09     with Sass lookup path: common/static
18.09     with Sass lookup path: common/static/sass
18.09     with Sass lookup path: node_modules/@edx
18.09     with Sass lookup path: node_modules
18.09     with Sass lookup path: /openedx/themes/indigo/lms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass/partials
18.09     with Sass lookup path: lms/static/sass
18.09 rtlcss /openedx/themes/indigo/lms/static/css/bootstrap/lms-main.css /openedx/themes/indigo/lms/static/css/bootstrap/lms-main-rtl.css
18.21 rtlcss: Warning! No config present, using defaults.
18.36 Saving: /openedx/themes/indigo/lms/static/css/bootstrap/lms-main-rtl.css
18.59 rtlcss /openedx/themes/indigo/lms/static/css/discussion/lms-discussion-bootstrap.css /openedx/themes/indigo/lms/static/css/discussion/lms-discussion-bootstrap-rtl.css
18.71 rtlcss: Warning! No config present, using defaults.
18.87 Saving: /openedx/themes/indigo/lms/static/css/discussion/lms-discussion-bootstrap-rtl.css
23.30 Compiling Sass: /openedx/themes/indigo/lms/static/sass -> /openedx/themes/indigo/lms/static/css
23.30     with Sass lookup path: common/static
23.30     with Sass lookup path: common/static/sass
23.30     with Sass lookup path: node_modules/@edx
23.30     with Sass lookup path: node_modules
23.30     with Sass lookup path: /openedx/themes/indigo/lms/static/sass/partials
23.30     with Sass lookup path: lms/static/sass/partials
23.30     with Sass lookup path: lms/static/sass
23.30 Compiling Sass: /openedx/themes/indigo/lms/static/certificates/sass -> /openedx/themes/indigo/lms/static/certificates/css
23.30     with Sass lookup path: common/static
23.30     with Sass lookup path: common/static/sass
23.30     with Sass lookup path: node_modules/@edx
23.30     with Sass lookup path: node_modules
23.30     with Sass lookup path: /openedx/themes/indigo/lms/static/sass/partials
23.30     with Sass lookup path: /openedx/themes/indigo/lms/static/sass
23.30 Compiling Sass: xmodule/assets -> /openedx/themes/indigo/lms/static/css
23.30     with Sass lookup path: common/static
23.30     with Sass lookup path: common/static/sass
23.30     with Sass lookup path: node_modules/@edx
23.30     with Sass lookup path: node_modules
23.30     with Sass lookup path: /openedx/themes/indigo/lms/static/sass/partials
23.30     with Sass lookup path: /openedx/themes/indigo/cms/static/sass/partials
23.30     with Sass lookup path: lms/static/sass/partials
23.30     with Sass lookup path: cms/static/sass/partials
23.30     with Sass lookup path: lms/static/sass
23.30     with Sass lookup path: cms/static/sass
23.30 Compiling cms sass assets from theme /openedx/themes/indigo...
23.30 Compiling Sass: cms/static/sass -> /openedx/themes/indigo/cms/static/css
23.30     with Sass lookup path: common/static
23.30     with Sass lookup path: common/static/sass
23.30     with Sass lookup path: node_modules/@edx
23.30     with Sass lookup path: node_modules
23.30     with Sass lookup path: lms/static/sass/partials
23.30     with Sass lookup path: /openedx/themes/indigo/cms/static/sass/partials
23.30     with Sass lookup path: cms/static/sass/partials
23.30     with Sass lookup path: cms/static/sass
23.30 rtlcss /openedx/themes/indigo/cms/static/css/bootstrap/studio-main.css /openedx/themes/indigo/cms/static/css/bootstrap/studio-main-rtl.css
23.44 rtlcss: Warning! No config present, using defaults.
23.56 Saving: /openedx/themes/indigo/cms/static/css/bootstrap/studio-main-rtl.css
24.36 Compiling Sass: /openedx/themes/indigo/cms/static/sass -> /openedx/themes/indigo/cms/static/css
24.36     with Sass lookup path: common/static
24.36     with Sass lookup path: common/static/sass
24.36     with Sass lookup path: node_modules/@edx
24.36     with Sass lookup path: node_modules
24.36     with Sass lookup path: lms/static/sass/partials
24.36     with Sass lookup path: /openedx/themes/indigo/cms/static/sass/partials
24.36     with Sass lookup path: cms/static/sass/partials
24.36     with Sass lookup path: cms/static/sass
24.36 Compiling Sass: xmodule/assets -> /openedx/themes/indigo/cms/static/css
24.36     with Sass lookup path: common/static
24.36     with Sass lookup path: common/static/sass
24.36     with Sass lookup path: node_modules/@edx
24.36     with Sass lookup path: node_modules
24.36     with Sass lookup path: /openedx/themes/indigo/lms/static/sass/partials
24.36     with Sass lookup path: /openedx/themes/indigo/cms/static/sass/partials
24.36     with Sass lookup path: lms/static/sass/partials
24.36     with Sass lookup path: cms/static/sass/partials
24.36     with Sass lookup path: lms/static/sass
24.36     with Sass lookup path: cms/static/sass
24.76 python manage.py lms --settings=tutor.assets collectstatic --noinput > /dev/null
109.2 Traceback (most recent call last):
109.2   File "manage.py", line 106, in <module>
109.2     execute_from_command_line([sys.argv[0]] + django_args)
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
109.2     utility.execute()
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 436, in execute
109.2     self.fetch_command(subcommand).run_from_argv(self.argv)
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/core/management/base.py", line 412, in run_from_argv
109.2     self.execute(*args, **cmd_options)
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/core/management/base.py", line 458, in execute
109.2     output = self.handle(*args, **options)
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 209, in handle
109.2     collected = self.collect()
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 148, in collect
109.2     for original_path, processed_path, processed in processor:
109.2   File "/openedx/venv/lib/python3.8/site-packages/require/storage.py", line 175, in post_process
109.2     for path in super_class.post_process(paths, dry_run, **options):
109.2   File "/openedx/edx-platform/openedx/core/djangoapps/theming/storage.py", line 293, in post_process
109.2     yield from super_class.post_process(paths.copy(), dry_run, **options)
109.2   File "/openedx/venv/lib/python3.8/site-packages/pipeline/storage.py", line 42, in post_process
109.2     yield from super_class.post_process(
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 488, in post_process
109.2     yield from super().post_process(*args, **kwargs)
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 301, in post_process
109.2     for name, hashed_name, processed, _ in self._post_process(
109.2   File "/openedx/venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 364, in _post_process
109.2     content = original_file.read().decode("utf-8")
109.2 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9b in position 963561: invalid start byte
110.3 Traceback (most recent call last):
110.3   File "/openedx/bin/openedx-assets", line 218, in <module>
110.3     main()
110.3   File "/openedx/bin/openedx-assets", line 89, in main
110.3     args.func(args)
110.3   File "/openedx/bin/openedx-assets", line 157, in run_collect
110.3     assets.collect_assets(args.systems, args.settings)
110.3   File "/openedx/edx-platform/pavelib/assets.py", line 606, in collect_assets
110.3     sh(django_cmd(sys, settings, "collectstatic --noinput {logfile_str}".format(
110.3   File "/openedx/venv/lib/python3.8/site-packages/paver/shell.py", line 60, in sh
110.3     return dry(command, runpipe)
110.3   File "/openedx/venv/lib/python3.8/site-packages/paver/easy.py", line 15, in dry
110.3     return func(*args, **kw)
110.3   File "/openedx/venv/lib/python3.8/site-packages/paver/shell.py", line 55, in runpipe
110.3     raise BuildFailure("Subprocess return code: %d" % p.returncode)
110.3 paver.tasks.BuildFailure: Subprocess return code: 1
------
Dockerfile:215
--------------------
 214 |     COPY --chown=app:app ./themes/ /openedx/themes/
 215 | >>> RUN openedx-assets themes \
 216 | >>>     && openedx-assets collect --settings=tutor.assets \
 217 | >>>     # De-duplicate static assets with symlinks
 218 | >>>     && rdfind -makesymlinks true -followsymlinks true /openedx/staticfiles/
 219 |
--------------------
ERROR: failed to solve: process "/bin/sh -c openedx-assets themes     && openedx-assets collect --settings=tutor.assets     && rdfind -makesymlinks true -followsymlinks true /openedx/staticfiles/" did not complete successfully: exit code: 1
Error: Command failed with status 1: docker buildx build --tag=docker.io/overhangio/openedx:17.0.2-indigo --output=type=docker --cache-from=type=registry,ref=docker.io/overhangio/openedx:17.0.2-indigo-cache /home/linux/.local/share/tutor/env/build/openedx

Thank you!

Best Method for customizing this theme

Currently the directions just state

This plugin can serve as a starting point to create your own themes. Just fork this repository and modify the files as you see fit.

And this used to work great when it wasn't plugin based, since I could use the Makefile to push the theme files into where they needed to go. With the change to plugin, can you elaborate on the recommended steps for actually forking and than customizing it so we can utilize with our project?

Thanks!

Preview-menu is hidden by other UI elements when using Indigo

Hey,

As discussed here there's an issue for staff/admin users that Indigo hides the dropdown menu to view courses as learner or specific learners (etc) behind the global header. This can be fixed by removing position: fixed and change overflow: visible to overflow: hidden in _extras.scss

install error

image
When I finish installing indigo and then run tutor images build openedx, this error is reported. I have never seen this SCSS variable. How do I solve it

Unit navigation bar shows empty scroll bar on some screen sizes

Hey, I have a minimally-adjusted fork of this theme for my project, and I was wondering if you recognize this issue. I can't imagine I caused it, so I can make an upstream PR if necessary:

Here's the issue in our tracker:

https://code.greenhost.net/totem/indigo-totem/-/issues/13

The problem is that when you reduce the width of your screen, at some point a horizontal scroll bar goes over the "unit" navigation bar that's shown above the course content. The negative result of this is that you can't see which unit you are at right now anymore. The link above provides some useful screenshots.

It seems like the problem can be solved by removing the overflow-x: scroll attribute from the object .xmodule_display.xmodule_SequenceModule .sequence-nav .sequence-list-wrapper

Courses footer is showing default links

First, thank you for releasing this theme - the timing was perfect for us.

We edited the config.yml file appropriately, rendered, and deployed. Upon verifying if the site looked correct, we noticed that the the links at /courses/<name>/course/ were showing the default links.

I'm not sure the best way to resolve this, but I have a patch which worked for us. I'll open a PR with it.

Let the platform decide where to take the user

Hi.
I don't think that this is not a big issue but we should let the platform decide where to take the user since we can change the login. I believe checking for should_redirect_to_authn_mfe is happening in the edx-platform and there's no need for that

% if should_redirect_to_authn_mfe:
<div class="mobile-nav-item hidden-mobile nav-item">
<a class="register-btn btn" href="${settings.AUTHN_MICROFRONTEND_URL}/register${login_query()}">${_("Register for free")}</a>
</div>
% else:
<div class="mobile-nav-item hidden-mobile nav-item">
<a class="register-btn btn" href="/register${login_query()}">${_("Register for free")}</a>
</div>
% endif
% endif
% if should_redirect_to_authn_mfe:
<div class="mobile-nav-item hidden-mobile nav-item">
<a class="sign-in-btn btn" href="${settings.AUTHN_MICROFRONTEND_URL}/login${login_query()}">${_("Sign in")}</a>
</div>
% else:
<div class="mobile-nav-item hidden-mobile nav-item">
<a class="sign-in-btn btn" href="/login${login_query()}">${_("Sign in")}</a>
</div>
% endif

for example, if you set THIRD_PARTY_AUTH_HINT to your tpa slug, /login will take you to that page, instead of login in authn MFE.

`Unterminated control keyword: 'if'` causes footer rendering to fail

Unterminated control keyword: 'if' in file '/openedx/themes/indigo/lms/templates/footer.html' at line: 29 char: 1

Steps to reproduce:
setup dev environment
delete env/build/openedx/themes/indigo
tutor config save
which regenerates the theme in the env

try loading http://local.edly.io:8000/

Environment:


Request Method: GET
Request URL: http://local.edly.io:8000/

Django Version: 4.2.8
Python Version: 3.8.18
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.humanize',
 'django.contrib.messages',
 'django.contrib.redirects',
 'django.contrib.sessions',
 'django.contrib.sites',
 'openedx.core.djangoapps.staticfiles.apps.EdxPlatformStaticFilesConfig',
 'django_celery_results',
 'openedx.core.djangoapps.common_initialization.apps.CommonInitializationConfig',
 'lms.djangoapps.lms_initialization.apps.LMSInitializationConfig',
 'openedx.core.djangoapps.common_views',
 'simple_history',
 'config_models',
 'openedx.core.djangoapps.config_model_utils',
 'waffle',
 'openedx.core.djangoapps.service_status',
 'common.djangoapps.status',
 'common.djangoapps.edxmako.apps.EdxMakoConfig',
 'pipeline',
 'common.djangoapps.static_replace',
 'webpack_loader',
 'web_fragments',
 'openedx.core.djangoapps.plugin_api',
 'openedx.core.djangoapps.contentserver',
 'openedx.core.djangoapps.site_configuration',
 'openedx.core.djangoapps.video_config',
 'openedx.core.djangoapps.video_pipeline',
 'lms.djangoapps.courseware',
 'common.djangoapps.student.apps.StudentConfig',
 'common.djangoapps.split_modulestore_django.apps.SplitModulestoreDjangoBackendAppConfig',
 'lms.djangoapps.static_template_view',
 'lms.djangoapps.staticbook',
 'common.djangoapps.track',
 'eventtracking.django.apps.EventTrackingConfig',
 'common.djangoapps.util',
 'lms.djangoapps.certificates.apps.CertificatesConfig',
 'lms.djangoapps.instructor_task',
 'openedx.core.djangoapps.course_groups',
 'lms.djangoapps.bulk_email',
 'lms.djangoapps.branding',
 'lms.djangoapps.course_home_api',
 'lms.djangoapps.user_tours',
 'openedx.core.djangoapps.xblock.apps.LmsXBlockAppConfig',
 'lms.djangoapps.support',
 'oauth2_provider',
 'openedx.core.djangoapps.oauth_dispatch.apps.OAuthDispatchAppConfig',
 'common.djangoapps.third_party_auth',
 'openedx.core.djangoapps.system_wide_roles',
 'openedx.core.djangoapps.auth_exchange',
 'wiki',
 'django_notify',
 'lms.djangoapps.course_wiki',
 'mptt',
 'sekizai',
 'wiki.plugins.links',
 'lms.djangoapps.course_wiki.plugins.markdownedx',
 'django.contrib.admin',
 'lms.djangoapps.debug',
 'openedx.core.djangoapps.util.apps.UtilConfig',
 'openedx.core.djangoapps.django_comment_common',
 'lms.djangoapps.edxnotes',
 'splash',
 'rest_framework',
 'openedx.core.djangoapps.user_api',
 'common.djangoapps.course_modes.apps.CourseModesConfig',
 'openedx.core.djangoapps.enrollments.apps.EnrollmentsConfig',
 'common.djangoapps.entitlements.apps.EntitlementsConfig',
 'lms.djangoapps.bulk_enroll',
 'lms.djangoapps.verify_student.apps.VerifyStudentConfig',
 'openedx.core.djangoapps.dark_lang',
 'lms.djangoapps.rss_proxy',
 'openedx.core.djangoapps.embargo',
 'common.djangoapps.course_action_state',
 'django_countries',
 'lms.djangoapps.mobile_api.apps.MobileApiConfig',
 'social_django',
 'lms.djangoapps.survey.apps.SurveyConfig',
 'lms.djangoapps.lms_xblock.apps.LMSXBlockConfig',
 'submissions',
 'openassessment',
 'openassessment.assessment',
 'openassessment.fileupload',
 'openassessment.staffgrader',
 'openassessment.workflow',
 'openassessment.xblock',
 'edxval',
 'openedx.core.djangoapps.content.course_overviews.apps.CourseOverviewsConfig',
 'openedx.core.djangoapps.content.block_structure.apps.BlockStructureConfig',
 'lms.djangoapps.course_blocks',
 'lms.djangoapps.mailing',
 'corsheaders',
 'openedx.core.djangoapps.cors_csrf',
 'lms.djangoapps.commerce.apps.CommerceConfig',
 'openedx.core.djangoapps.credit.apps.CreditConfig',
 'lms.djangoapps.teams',
 'common.djangoapps.xblock_django',
 'openedx.core.djangoapps.programs.apps.ProgramsConfig',
 'openedx.core.djangoapps.catalog',
 'sorl.thumbnail',
 'milestones',
 'lms.djangoapps.gating.apps.GatingConfig',
 'statici18n',
 'openedx.core.djangoapps.api_admin',
 'openedx.core.djangoapps.verified_track_content',
 'lms.djangoapps.learner_dashboard',
 'lms.djangoapps.badges.apps.BadgesConfig',
 'django_sites_extensions',
 'lms.djangoapps.email_marketing.apps.EmailMarketingConfig',
 'release_util',
 'rules.apps.AutodiscoverRulesConfig',
 'bridgekeeper',
 'celery_utils',
 'openedx.core.djangoapps.crawlers',
 'common.djangoapps.database_fixups',
 'openedx.core.djangoapps.waffle_utils',
 'lms.djangoapps.course_goals.apps.CourseGoalsConfig',
 'openedx_tagging.core.tagging.apps.TaggingConfig',
 'openedx.core.djangoapps.content_tagging',
 'openedx.features.calendar_sync',
 'openedx.features.course_bookmarks',
 'openedx.features.course_experience',
 'openedx.features.enterprise_support.apps.EnterpriseSupportConfig',
 'openedx.features.learner_profile',
 'openedx.features.course_duration_limits',
 'openedx.features.content_type_gating',
 'openedx.features.discounts',
 'openedx.features.effort_estimation',
 'openedx.features.name_affirmation_api.apps.NameAffirmationApiConfig',
 'lms.djangoapps.experiments',
 'django_filters',
 'drf_yasg',
 'csrf.apps.CsrfAppConfig',
 'xss_utils',
 'openedx.core.djangoapps.heartbeat',
 'openedx.core.djangoapps.course_date_signals',
 'openedx.core.djangoapps.external_user_ids',
 'openedx.core.djangoapps.demographics',
 'openedx.core.djangoapps.schedules',
 'rest_framework_jwt',
 'openedx.core.djangoapps.content.learning_sequences.apps.LearningSequencesConfig',
 'organizations',
 'lms.djangoapps.bulk_user_retirement',
 'openedx.core.djangoapps.agreements',
 'openedx.features.survey_report',
 'edx_django_utils.user',
 'pylti1p3.contrib.django.lti1p3_tool_config',
 'edx_ace',
 'blockstore.apps.bundles',
 'lms.djangoapps.mfe_config_api',
 'openedx.core.djangoapps.notifications',
 'edx_sga',
 'enterprise',
 'consent',
 'integrated_channels.integrated_channel',
 'integrated_channels.degreed',
 'integrated_channels.degreed2',
 'integrated_channels.sap_success_factors',
 'integrated_channels.cornerstone',
 'integrated_channels.xapi',
 'integrated_channels.blackboard',
 'integrated_channels.canvas',
 'integrated_channels.moodle',
 'django_object_actions',
 'openedx.core.djangoapps.ace_common.apps.AceCommonConfig',
 'openedx.features.announcements.apps.AnnouncementsConfig',
 'openedx.core.djangoapps.bookmarks.apps.BookmarksConfig',
 'openedx.core.djangoapps.content_libraries.apps.ContentLibrariesConfig',
 'openedx.core.djangoapps.course_apps.apps.CourseAppsConfig',
 'openedx.core.djangoapps.course_live.apps.CourseLiveConfig',
 'openedx.core.djangoapps.courseware_api.apps.CoursewareAPIConfig',
 'openedx.core.djangoapps.credentials.apps.CredentialsConfig',
 'lms.djangoapps.discussion.apps.DiscussionConfig',
 'openedx.core.djangoapps.discussions.apps.DiscussionsConfig',
 'lms.djangoapps.grades.apps.GradesConfig',
 'lms.djangoapps.instructor.apps.InstructorConfig',
 'openedx.core.djangoapps.password_policy.apps.PasswordPolicyConfig',
 'openedx.core.djangoapps.plugins.apps.PluginsConfig',
 'lms.djangoapps.program_enrollments.apps.ProgramEnrollmentsConfig',
 'openedx.core.djangoapps.theming.apps.ThemingConfig',
 'openedx.core.djangoapps.user_authn.apps.UserAuthnConfig',
 'openedx.core.djangoapps.zendesk_proxy.apps.ZendeskProxyConfig',
 'lti_consumer.apps.LTIConsumerApp',
 'super_csv.apps.SuperCSVConfig',
 'completion.apps.CompletionAppConfig',
 'bulk_grades.apps.BulkGradesConfig',
 'edx_proctoring.apps.EdxProctoringConfig',
 'edx_when.apps.EdxWhenConfig',
 'edx_toggles.apps.TogglesConfig',
 'edx_name_affirmation.apps.EdxNameAffirmationConfig',
 'debug_toolbar']
Installed Middleware:
['openedx.core.lib.x_forwarded_for.middleware.XForwardedForMiddleware',
 'edx_django_utils.security.csp.middleware.content_security_policy_middleware',
 'crum.CurrentRequestUserMiddleware',
 'edx_django_utils.cache.middleware.RequestCacheMiddleware',
 'edx_django_utils.monitoring.CachedCustomMonitoringMiddleware',
 'edx_django_utils.monitoring.CodeOwnerMonitoringMiddleware',
 'edx_django_utils.monitoring.CookieMonitoringMiddleware',
 'edx_django_utils.monitoring.DeploymentMonitoringMiddleware',
 'openedx.core.djangoapps.cookie_metadata.middleware.CookieNameChange',
 'openedx.core.lib.request_utils.IgnoredErrorMiddleware',
 'lms.djangoapps.mobile_api.middleware.AppVersionUpgrade',
 'openedx.core.djangoapps.header_control.middleware.HeaderControlMiddleware',
 'lms.djangoapps.discussion.django_comment_client.middleware.AjaxExceptionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sites.middleware.CurrentSiteMiddleware',
 'edx_rest_framework_extensions.auth.jwt.middleware.JwtAuthCookieMiddleware',
 'django_sites_extensions.middleware.RedirectMiddleware',
 'openedx.core.djangoapps.safe_sessions.middleware.SafeSessionMiddleware',
 'openedx.core.djangoapps.cache_toolbox.middleware.CacheBackedAuthenticationMiddleware',
 'common.djangoapps.student.middleware.UserStandingMiddleware',
 'openedx.core.djangoapps.contentserver.middleware.StaticContentServer',
 'openedx.core.djangoapps.user_api.middleware.UserTagsEventContextMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'common.djangoapps.track.middleware.TrackMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'openedx.core.djangoapps.cors_csrf.middleware.CorsCSRFMiddleware',
 'openedx.core.djangoapps.cors_csrf.middleware.CsrfCrossDomainCookieMiddleware',
 'splash.middleware.SplashMiddleware',
 'openedx.core.djangoapps.geoinfo.middleware.CountryMiddleware',
 'openedx.core.djangoapps.embargo.middleware.EmbargoMiddleware',
 'enterprise.middleware.EnterpriseLanguagePreferenceMiddleware',
 'openedx.core.djangoapps.lang_pref.middleware.LanguagePreferenceMiddleware',
 'openedx.core.djangoapps.dark_lang.middleware.DarkLangMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'lms.djangoapps.discussion.django_comment_client.utils.ViewNameMiddleware',
 'codejail.django_integration.ConfigureCodeJailMiddleware',
 'openedx.core.djangoapps.session_inactivity_timeout.middleware.SessionInactivityTimeout',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'lms.djangoapps.courseware.middleware.CacheCourseIdMiddleware',
 'lms.djangoapps.courseware.middleware.RedirectMiddleware',
 'lms.djangoapps.course_wiki.middleware.WikiAccessMiddleware',
 'openedx.core.djangoapps.theming.middleware.CurrentSiteThemeMiddleware',
 'waffle.middleware.WaffleMiddleware',
 'edx_django_utils.cache.middleware.TieredCacheMiddleware',
 'edx_rest_framework_extensions.middleware.RequestCustomAttributesMiddleware',
 'edx_rest_framework_extensions.auth.jwt.middleware.EnsureJWTAuthSettingsMiddleware',
 'simple_history.middleware.HistoryRequestMiddleware',
 'openedx.core.djangoapps.site_configuration.middleware.SessionCookieDomainOverrideMiddleware',
 'lms.djangoapps.discussion.django_comment_client.utils.QueryCountDebugMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware',
 'common.djangoapps.third_party_auth.middleware.ExceptionMiddleware']



Traceback (most recent call last):
  File "/openedx/venv/lib/python3.8/site-packages/mako/lookup.py", line 241, in get_template
    return self._check(uri, self._collection[uri])

During handling of the above exception ('indigo/lms/templates/footer.html'), another exception occurred:
  File "/openedx/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/openedx/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 134, in _wrapper_view
    response = view_func(request, *args, **kwargs)
  File "/openedx/edx-platform/common/djangoapps/util/cache.py", line 83, in wrapper
    response = view_func(request, *args, **kwargs)
  File "/openedx/edx-platform/lms/djangoapps/branding/views.py", line 70, in index
    return student_views.index(request, user=request.user)
  File "/openedx/edx-platform/common/djangoapps/student/views/management.py", line 171, in index
    return render_to_response('index.html', context)
  File "/openedx/edx-platform/common/djangoapps/edxmako/shortcuts.py", line 188, in render_to_response
    return HttpResponse(render_to_string(template_name, dictionary, namespace, request), **kwargs)
  File "/openedx/edx-platform/common/djangoapps/edxmako/shortcuts.py", line 178, in render_to_string
    return template.render(dictionary, request)
  File "/openedx/edx-platform/common/djangoapps/edxmako/template.py", line 82, in render
    return self.mako_template.render_unicode(**context_dictionary)
  File "/openedx/venv/lib/python3.8/site-packages/mako/template.py", line 444, in render_unicode
    return runtime._render(
  File "/openedx/venv/lib/python3.8/site-packages/mako/runtime.py", line 874, in _render
    _render_context(
  File "/openedx/venv/lib/python3.8/site-packages/mako/runtime.py", line 916, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/openedx/venv/lib/python3.8/site-packages/mako/runtime.py", line 943, in _exec_template
    callable_(context, *args, **kwargs)
  File "/tmp/mako_lms/1ff981c2157d500713c1ce6bf7fdbce2/main.html.py", line 394, in render_body
    runtime._include_file(context, (static.get_template_path('footer.html')), _template_uri)
  File "/openedx/venv/lib/python3.8/site-packages/mako/runtime.py", line 780, in _include_file
    template = _lookup_template(context, uri, calling_uri)
  File "/openedx/venv/lib/python3.8/site-packages/mako/runtime.py", line 837, in _lookup_template
    return lookup.get_template(uri)
  File "/openedx/edx-platform/common/djangoapps/edxmako/paths.py", line 99, in get_template
    template = super().get_template(get_template_path_with_theme(uri))
  File "/openedx/venv/lib/python3.8/site-packages/mako/lookup.py", line 252, in get_template
    return self._load(srcfile, uri)
  File "/openedx/venv/lib/python3.8/site-packages/mako/lookup.py", line 313, in _load
    self._collection[uri] = template = Template(
  File "/openedx/venv/lib/python3.8/site-packages/mako/template.py", line 317, in __init__
    module = self._compile_from_file(path, filename)
  File "/openedx/venv/lib/python3.8/site-packages/mako/template.py", line 378, in _compile_from_file
    _compile_module_file(
  File "/openedx/venv/lib/python3.8/site-packages/mako/template.py", line 691, in _compile_module_file
    source, lexer = _compile(
  File "/openedx/venv/lib/python3.8/site-packages/mako/template.py", line 657, in _compile
    node = lexer.parse()
  File "/openedx/venv/lib/python3.8/site-packages/mako/lexer.py", line 264, in parse
    raise exceptions.SyntaxException(

Exception Type: SyntaxException at /
Exception Value: Unterminated control keyword: 'if' in file '/openedx/themes/indigo/lms/templates/footer.html' at line: 29 char: 1

Spacing error

I believe there's an error where the spacing is inconsistent after every 4th class added. See screenshots here:

https://discuss.overhang.io/t/indigo-theme-spacing-error/1752

(FWIW spacing is consistent when not using Indigo and just using the Open edX default theme. Also I'm using Koa not Lilac)

I would also note that if I'm signed in and go to the "Discover New" page (i.e. lms.com/courses), the spacing is consistent. It's only when signed out and going to the main website landing page that this is inconsistent (which is of course a problem for the site looking good for new visitors)

How to customize the template

Hello all,

First, thank you for your huge effort. I'm new to Open Edx and I want to know how to customize the pages for example the main page?
Is it necessary to build the image each time I change something in the template or the sass files?
Also, I have a question about how to access the front-end components?

No .scss styling for CMS

There is no sass/partials/cms/theme/ directory with .scss files for overriding styling for studio in the /cms/static/ directory unlike LMS

Even if you add the overriding *.scss files for CMS manually in the sass/partial/cms/theme/ directory, they are ignored as once in LMS. The LMS issue got resolved #24 but the CMS issue still persists.

For now overriding styling for CMS is not as convenient as LMS. By resolving this issue, developers will be able to style CMS as they do LMS.

It's not clear how to implement a new theme

I lost a couple hours today brute forcing combinations of tutor commands to try and find the correct way to get changes to appear near-immediately within a tutor instance (I'm not sure why sometimes they took a few minutes after launch before they were reflected, but perhaps it was a Google Chrome cache issue.)

I finally landed on the following set of commands to explicitly apply changes after they were made from within the theme folder:

tutor config save
tutor images build openedx
tutor local launch

Please update the Configuration or Customization sections of the documentation to explicitly state this is the correct way to apply new changes to the theme.

Also the documentation of "This plugin can serve as a starting point to create your own themes. Just fork this repository and modify the files as you see fit." is incomplete to the point of incorrectness. But I was able to follow the steps from here to create my own-named theme (so I could confirm it's what was actually being used). It'd be good if you could extract the important bits from those steps and add them to the documentation too.

Sidebar navigation, discussions, or notifications take over half the width of the page when Indigo theme is used

Description

This issue was reported as part of Redwood release testing. Because the indigo theme is enabled by default since Quince release for all Tutor deployments, this issue is considered a major problem for Open edX.

The original issue found during release testing - openedx/frontend-app-learning#1401

Please find more info about a possible technical solution in the comment: openedx/frontend-app-learning#1401 (comment)

Steps to Reproduce

  1. Login to an instance using the Indigo theme as an admin user to ensure the courseware.enable_navigation_sidebar waffle flag is enabled
  2. Navigate to an in-course experience page
  3. With the sidebar navigation expanded, view the page

Expected Behavior

  1. The sidebar navigation when expanded takes up much less than half of the page horizontally (see attached image from an in-course experience page using the Open edX theme)
  2. There is a reasonable amount of blank space on either side of the course content/sidebar content

Default Open edX theme:

image

Actual Behavior

  1. The sidebar navigation when expanded takes up half of the page horizontally (see attached image from an in-course experience page using the Indigo theme)
  2. There is a lot of extra blank space on either side of the course content/sidebar content

Full HD:

image

Wide screen:

image

Faint unexpected rectangle in the course about page

Expected behavior

Not 100% sure - this might actually be a design choice rather than a bug.

Actual behavior

There's a light-colored rounded rectangle behind and offset from the course image. I'm not 100% sure that's intentional - not sure whether it's supposed to be there or directly behind the image.

Screenshot 2024-05-17 at 9 47 22 AM

Steps to reproduce

Just visit any About page.

Additional information

In ones without an image you get a blank square in front of the rectangle.

Screenshot 2024-05-17 at 9 48 06 AM

Original issue: openedx/wg-build-test-release#345

I'm opening this issue to confirm whether this is a design choice or a bug. I'm unfamiliar with the indigo theme, so I can't say for sure.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.