diff --git a/cms/envs/bok_choy.env.json b/cms/envs/bok_choy.env.json index 52fc884202..ce0d95e8d3 100644 --- a/cms/envs/bok_choy.env.json +++ b/cms/envs/bok_choy.env.json @@ -76,7 +76,8 @@ "PREVIEW_LMS_BASE": "localhost:8003", "ALLOW_ALL_ADVANCED_COMPONENTS": true, "ENABLE_CONTENT_LIBRARIES": true, - "ENABLE_SPECIAL_EXAMS": true + "ENABLE_SPECIAL_EXAMS": true, + "SHOW_LANGUAGE_SELECTOR": true }, "FEEDBACK_SUBMISSION_EMAIL": "", "GITHUB_REPO_ROOT": "** OVERRIDDEN **", diff --git a/cms/envs/common.py b/cms/envs/common.py index 997a8b8381..03a275ebab 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -190,6 +190,9 @@ FEATURES = { 'ENABLE_SPECIAL_EXAMS': False, 'ORGANIZATIONS_APP': False, + + # Show Language selector + 'SHOW_LANGUAGE_SELECTOR': False, } ENABLE_JASMINE = False @@ -328,6 +331,9 @@ MIDDLEWARE_CLASSES = ( 'django.contrib.messages.middleware.MessageMiddleware', 'track.middleware.TrackMiddleware', + # This is used to set or update the user language preferences. + 'lang_pref.middleware.LanguagePreferenceMiddleware', + # Allows us to dark-launch particular languages 'dark_lang.middleware.DarkLangMiddleware', @@ -1111,6 +1117,8 @@ OAUTH_OIDC_ISSUER = 'https://www.example.com/oauth2' # 5 minute expiration time for JWT id tokens issued for external API requests. OAUTH_ID_TOKEN_EXPIRATION = 5 * 60 +USERNAME_PATTERN = r'(?P[\w.@+-]+)' + # Partner support link for CMS footer PARTNER_SUPPORT_EMAIL = '' diff --git a/cms/static/cms/js/require-config.js b/cms/static/cms/js/require-config.js index 167ed76174..190ae8ebe9 100644 --- a/cms/static/cms/js/require-config.js +++ b/cms/static/cms/js/require-config.js @@ -87,6 +87,7 @@ "ova": 'js/vendor/ova/ova', "catch": 'js/vendor/ova/catch/js/catch', "handlebars": 'js/vendor/ova/catch/js/handlebars-1.1.2', + "lang_edx": "js/src/lang_edx", // end of Annotation tool files // externally hosted files @@ -196,6 +197,9 @@ "tinymce": { exports: "tinymce" }, + "lang_edx": { + deps: ["jquery"] + }, "mathjax": { exports: "MathJax", init: function() { diff --git a/cms/static/js/factories/base.js b/cms/static/js/factories/base.js index b33a8123fa..305705dea1 100644 --- a/cms/static/js/factories/base.js +++ b/cms/static/js/factories/base.js @@ -1,2 +1,2 @@ define(['js/base', 'coffee/src/main', 'js/src/logger', 'datepair', 'accessibility', -'ieshim', 'tooltip_manager']); +'ieshim', 'tooltip_manager', 'lang_edx']); diff --git a/cms/static/sass/elements/_header.scss b/cms/static/sass/elements/_header.scss index e538dfd920..386e30ee14 100644 --- a/cms/static/sass/elements/_header.scss +++ b/cms/static/sass/elements/_header.scss @@ -43,8 +43,19 @@ vertical-align: middle; } + .user-language-selector { + width: 120px; + display: inline-block; + margin: 0 10px 0 5px; + vertical-align: sub; + + .language-selector { + width: 120px; + } + } + .nav-account { - width: 100%; + width: auto; } // basic layout - nav items @@ -208,6 +219,13 @@ } } } + + .settings-language-form { + margin-top: 4px; + .language-selector { + width: 130px; + } + } } // ==================== @@ -229,11 +247,11 @@ .is-signedin { .wrapper-l { - width: flex-grid(9,12); + width: flex-grid(8,12); } .wrapper-r { - width: flex-grid(3,12); + width: flex-grid(4,12); } .branding { @@ -253,11 +271,11 @@ .wrapper-header { .wrapper-l { - width: flex-grid(9,12); + width: flex-grid(8,12); } .wrapper-r { - width: flex-grid(3,12); + width: flex-grid(4,12); } .branding { diff --git a/cms/templates/widgets/header.html b/cms/templates/widgets/header.html index 6f229fe86a..2cfa82bcc6 100644 --- a/cms/templates/widgets/header.html +++ b/cms/templates/widgets/header.html @@ -6,7 +6,6 @@ from contentstore.context_processors import doc_url %> <%page args="online_help_token"/> -
+ % if static.show_language_selector(): + <% languages = static.get_released_languages() %> + % if len(languages) > 1: + + % endif + % endif % if user.is_authenticated(): + % if static.show_language_selector(): + <% languages = static.get_released_languages() %> + % if len(languages) > 1: +
    +
  1. +
    + + % if user.is_authenticated(): + + % else: + + % endif + +
    +
  2. +
+ % endif + % endif + % if course: