From bd262e000b935b563cd51bd437801f2182cf24ba Mon Sep 17 00:00:00 2001 From: DawoudSheraz Date: Tue, 4 Dec 2018 16:29:15 +0500 Subject: [PATCH] Update Mathjax version to include a11y --- cms/djangoapps/pipeline_js/js/xmodule.js | 2 +- cms/static/cms/js/require-config.js | 6 +- cms/static/cms/js/spec/main.js | 2 +- cms/static/cms/js/spec/main_squire.js | 2 +- .../common/js/discussion/mathjax_include.js | 10 +- common/static/common/js/discussion/utils.js | 1 - .../views/discussion_thread_show_view.js | 3 +- .../views/discussion_thread_view.js | 11 +- .../views/response_comment_show_view.js | 1 + .../discussion/views/thread_response_view.js | 4 +- common/templates/mathjax_include.html | 12 +- .../test/acceptance/pages/lms/discussion.py | 5 +- common/test/acceptance/pages/lms/problem.py | 39 +++ .../tests/discussion/test_discussion.py | 19 ++ .../acceptance/tests/lms/test_lms_problems.py | 222 ++++++++++++++++++ .../courseware/features/problems.feature | 20 +- lms/static/lms/js/spec/main.js | 2 +- 17 files changed, 333 insertions(+), 28 deletions(-) diff --git a/cms/djangoapps/pipeline_js/js/xmodule.js b/cms/djangoapps/pipeline_js/js/xmodule.js index 3acc0958e0..f27ead886d 100644 --- a/cms/djangoapps/pipeline_js/js/xmodule.js +++ b/cms/djangoapps/pipeline_js/js/xmodule.js @@ -18,7 +18,7 @@ define( window._ = _; $script( - '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js' + + 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js' + '?config=TeX-MML-AM_SVG&delayStartupUntil=configured', 'mathjax', function() { diff --git a/cms/static/cms/js/require-config.js b/cms/static/cms/js/require-config.js index 4b7e60f2ac..1cd6d04494 100644 --- a/cms/static/cms/js/require-config.js +++ b/cms/static/cms/js/require-config.js @@ -55,7 +55,9 @@ // the option as displayed in the context menu to false. // When upgrading to 2.6, check if this variable name changed. window.MathJax = { - menuSettings: {CHTMLpreview: false} + menuSettings: { + CHTMLpreview: false + } }; }; @@ -131,7 +133,7 @@ 'lang_edx': 'js/src/lang_edx', // externally hosted files - mathjax: '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len + mathjax: 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len 'youtube': [ // youtube URL does not end in '.js'. We add '?noext' to the path so // that require.js adds the '.js' to the query component of the URL, diff --git a/cms/static/cms/js/spec/main.js b/cms/static/cms/js/spec/main.js index 1f32ced8d6..f5aa089b04 100644 --- a/cms/static/cms/js/spec/main.js +++ b/cms/static/cms/js/spec/main.js @@ -69,7 +69,7 @@ 'domReady': 'xmodule_js/common_static/js/vendor/domReady', 'URI': 'xmodule_js/common_static/js/vendor/URI.min', 'mock-ajax': 'xmodule_js/common_static/js/vendor/mock-ajax', - mathjax: '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len + mathjax: 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len 'youtube': '//www.youtube.com/player_api?noext', 'js/src/ajax_prefix': 'xmodule_js/common_static/js/src/ajax_prefix', 'js/spec/test_utils': 'js/spec/test_utils' diff --git a/cms/static/cms/js/spec/main_squire.js b/cms/static/cms/js/spec/main_squire.js index 936aa39055..34ff4ace8f 100644 --- a/cms/static/cms/js/spec/main_squire.js +++ b/cms/static/cms/js/spec/main_squire.js @@ -48,7 +48,7 @@ 'draggabilly': 'xmodule_js/common_static/js/vendor/draggabilly', 'domReady': 'xmodule_js/common_static/js/vendor/domReady', 'URI': 'xmodule_js/common_static/js/vendor/URI.min', - mathjax: '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len + mathjax: 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len 'youtube': '//www.youtube.com/player_api?noext', 'js/src/ajax_prefix': 'xmodule_js/common_static/js/src/ajax_prefix' }, diff --git a/common/static/common/js/discussion/mathjax_include.js b/common/static/common/js/discussion/mathjax_include.js index a2e8f36898..a34223d378 100644 --- a/common/static/common/js/discussion/mathjax_include.js +++ b/common/static/common/js/discussion/mathjax_include.js @@ -42,6 +42,14 @@ if (typeof MathJax === 'undefined') { }); }; }; - vendorScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_SVG'; + // Automatic loading of Mathjax accessibility files + window.MathJax = { + menuSettings: { + collapsible: true, + autocollapse: true, + explorer: true + } + }; + vendorScript.src = 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-MML-AM_SVG'; document.body.appendChild(vendorScript); } diff --git a/common/static/common/js/discussion/utils.js b/common/static/common/js/discussion/utils.js index 576c062ec4..b55b87fa3e 100644 --- a/common/static/common/js/discussion/utils.js +++ b/common/static/common/js/discussion/utils.js @@ -482,7 +482,6 @@ this.postMathJaxProcessor(this.markdownWithHighlight(element.text())) ); - this.typesetMathJax(element); }; DiscussionUtil.typesetMathJax = function(element) { diff --git a/common/static/common/js/discussion/views/discussion_thread_show_view.js b/common/static/common/js/discussion/views/discussion_thread_show_view.js index f9b70fe672..51ca3aa3c1 100644 --- a/common/static/common/js/discussion/views/discussion_thread_show_view.js +++ b/common/static/common/js/discussion/views/discussion_thread_show_view.js @@ -59,13 +59,12 @@ this.renderAttrs(); this.$('span.timeago').timeago(); this.convertMath(); - this.$('.post-body'); - this.$('h1,h3'); return this; }; DiscussionThreadShowView.prototype.convertMath = function() { DiscussionUtil.convertMath(this.$('.post-body')); + DiscussionUtil.typesetMathJax(this.$('.post-body')); }; DiscussionThreadShowView.prototype.edit = function(event) { diff --git a/common/static/common/js/discussion/views/discussion_thread_view.js b/common/static/common/js/discussion/views/discussion_thread_view.js index 3346575328..4724793bb6 100644 --- a/common/static/common/js/discussion/views/discussion_thread_view.js +++ b/common/static/common/js/discussion/views/discussion_thread_view.js @@ -317,7 +317,9 @@ if (options.focusAddedResponse) { this.focusToTheAddedResponse(view.el); } - DiscussionUtil.typesetMathJax(view.$el.find('.js-response-list')); + // Typeset the response when initially loaded for any forum + DiscussionUtil.typesetMathJax(view.$el); + return view; }; DiscussionThreadView.prototype.renderAddResponseButton = function() { @@ -345,7 +347,7 @@ }; DiscussionThreadView.prototype.submitComment = function(event) { - var body, comment, url; + var body, comment, url, view; event.preventDefault(); url = this.model.urlFor('reply'); body = this.getWmdContent('reply-body'); @@ -365,7 +367,7 @@ user_id: window.user.get('id') }); comment.set('thread', this.model.get('thread')); - this.renderResponseToList(comment, '.js-response-list', { + view = this.renderResponseToList(comment, '.js-response-list', { focusAddedResponse: true }); this.model.addComment(); @@ -380,7 +382,8 @@ }, success: function(data) { comment.updateInfo(data.annotated_content_info); - return comment.set(data.content); + comment.set(data.content); + DiscussionUtil.typesetMathJax(view.$el.find('.response-body')); } }); }; diff --git a/common/static/common/js/discussion/views/response_comment_show_view.js b/common/static/common/js/discussion/views/response_comment_show_view.js index da66d28315..a84800ca79 100644 --- a/common/static/common/js/discussion/views/response_comment_show_view.js +++ b/common/static/common/js/discussion/views/response_comment_show_view.js @@ -72,6 +72,7 @@ ResponseCommentShowView.prototype.convertMath = function() { DiscussionUtil.convertMath(this.$el.find('.response-body')); + DiscussionUtil.typesetMathJax(this.$el.find('.response-body')); }; ResponseCommentShowView.prototype._delete = function(event) { diff --git a/common/static/common/js/discussion/views/thread_response_view.js b/common/static/common/js/discussion/views/thread_response_view.js index 3fb47e9650..78fd934ac6 100644 --- a/common/static/common/js/discussion/views/thread_response_view.js +++ b/common/static/common/js/discussion/views/thread_response_view.js @@ -82,7 +82,7 @@ ThreadResponseView.prototype.render = function() { this.$el.addClass('response_' + this.model.get('id')); - this.$el.html(this.renderTemplate()); + edx.HtmlUtils.setHtml(this.$el, edx.HtmlUtils.HTML(this.renderTemplate())); this.delegateEvents(); this.renderShowView(); this.renderAttrs(); @@ -309,6 +309,7 @@ event.preventDefault(); this.createShowView(); this.renderShowView(); + DiscussionUtil.typesetMathJax(this.$el.find('.response-body')); return this.showCommentForm(); }; @@ -342,6 +343,7 @@ }); self.createShowView(); self.renderShowView(); + DiscussionUtil.typesetMathJax(self.$el.find('.response-body')); return self.showCommentForm(); } }); diff --git a/common/templates/mathjax_include.html b/common/templates/mathjax_include.html index cbae907011..6a56217019 100644 --- a/common/templates/mathjax_include.html +++ b/common/templates/mathjax_include.html @@ -75,9 +75,19 @@ } + - + %endif diff --git a/common/test/acceptance/pages/lms/discussion.py b/common/test/acceptance/pages/lms/discussion.py index acab146da7..7790f9df25 100644 --- a/common/test/acceptance/pages/lms/discussion.py +++ b/common/test/acceptance/pages/lms/discussion.py @@ -727,10 +727,11 @@ class DiscussionTabHomePage(CoursePage, DiscussionPageMixin): self.wait_for_element_visibility(selector, "WMD preview pane has contents", timeout=10) return self.q(css=".wmd-preview").html[0] - def get_new_post_preview_text(self): + def get_new_post_preview_text(self, selector=".wmd-preview > div"): """ Get the rendered preview of the contents of the Discussions new post editor Waits for content to appear, as the preview is triggered on debounced/delayed onchange """ - self.wait_for_element_visibility(".wmd-preview > div", "WMD preview pane has contents", timeout=10) + self.scroll_to_element(selector) + self.wait_for_element_visibility(selector, "WMD preview pane has contents", timeout=10) return self.q(css=".wmd-preview").text[0] diff --git a/common/test/acceptance/pages/lms/problem.py b/common/test/acceptance/pages/lms/problem.py index 6ac1e14dc7..d696fc84f2 100644 --- a/common/test/acceptance/pages/lms/problem.py +++ b/common/test/acceptance/pages/lms/problem.py @@ -90,6 +90,21 @@ class ProblemPage(PageObject): description="MathJax rendered in problem body" ) + def verify_mathjax_rendered_in_preview(self): + """ + Check that MathJax has been rendered in formula problem preview + """ + + def mathjax_present(): + """ Returns True if MathJax css is present inside the preview """ + mathjax_container = self.q(css="div.problem div .MathJax_SVG") + return mathjax_container.visible and mathjax_container.present + + self.wait_for( + mathjax_present, + description="MathJax rendered in problem preview" + ) + def verify_mathjax_rendered_in_hint(self): """ Check that MathJax have been rendered in problem hint @@ -127,6 +142,13 @@ class ProblemPage(PageObject): self.wait_for_element_invisibility('.loading', 'wait for loading icon to disappear') self.wait_for_ajax() + @property + def get_numerical_input_value(self): + """ + Get the numerical problem input contents + """ + return self.q(css='div.problem div.inputtype input').text[0] + def click_submit(self): """ Click the Submit button. @@ -416,6 +438,23 @@ class ProblemPage(PageObject): """ return self.q(css="div.problem div.inputtype div.incorrect span.status").is_present() + def get_simpleprob_correctness(self): + """ + Returns the correctness status for a simple problem. + + Given a simple problem, the method returns the correctness status. + If there is no visible status, None is returned + """ + + if self.simpleprob_is_correct(): + return 'correct' + elif self.simpleprob_is_incorrect(): + return 'incorrect' + elif self.simpleprob_is_partially_correct(): + return 'partial' + else: + return None + def click_clarification(self, index=0): """ Click on an inline icon that can be included in problem text using an HTML element: diff --git a/common/test/acceptance/tests/discussion/test_discussion.py b/common/test/acceptance/tests/discussion/test_discussion.py index fae8bd228b..c3c1f56216 100644 --- a/common/test/acceptance/tests/discussion/test_discussion.py +++ b/common/test/acceptance/tests/discussion/test_discussion.py @@ -3,6 +3,7 @@ Tests for discussion pages """ import datetime +import time from unittest import skip from uuid import uuid4 @@ -961,6 +962,9 @@ class DiscussionEditorPreviewTest(UniqueCourseTest): self.page.visit() self.page.click_new_post_button() + # sleep/wait added to allow Major MathJax a11y files to load + time.sleep(5) + def test_text_rendering(self): """When I type plain text into the editor, it should be rendered as plain text in the preview box""" self.page.set_new_post_editor_value("Some plain text") @@ -999,6 +1003,21 @@ class DiscussionEditorPreviewTest(UniqueCourseTest): ) self.assertEqual(self.page.get_new_post_preview_text(), 'Text line 1\nText line 2') + def test_inline_mathjax_rendering_in_order(self): + """ + Tests the order of Post body content when inline Mathjax is used. + + With inline mathjax expressions, the text content doesn't break into new lines at the places of + mathjax expressions. + """ + self.page.set_new_post_editor_value( + 'Text line 1 \n' + '$e[n]=d_1$ \n' + 'Text line 2 \n' + '$e[n]=d_2$' + ) + self.assertEqual(self.page.get_new_post_preview_text('.wmd-preview > p'), 'Text line 1 Text line 2') + def test_mathjax_not_rendered_after_post_cancel(self): """ Tests that mathjax is not rendered when we cancel the post diff --git a/common/test/acceptance/tests/lms/test_lms_problems.py b/common/test/acceptance/tests/lms/test_lms_problems.py index b9c671c85f..a9711a75fb 100644 --- a/common/test/acceptance/tests/lms/test_lms_problems.py +++ b/common/test/acceptance/tests/lms/test_lms_problems.py @@ -5,6 +5,8 @@ Bok choy acceptance tests for problems in the LMS See also old lettuce tests in lms/djangoapps/courseware/features/problems.feature """ from textwrap import dedent +import time +import ddt from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.common.auto_auth import AutoAuthPage @@ -933,3 +935,223 @@ class ProblemMetaUngradedTest(ProblemsTest): problem_page = ProblemPage(self.browser) self.assertEqual(problem_page.problem_name, 'TEST PROBLEM') self.assertEqual(problem_page.problem_progress_graded_value, "1 point possible (ungraded)") + + +class FormulaProblemTest(ProblemsTest): + """ + Test Class to verify the formula problem on LMS. + """ + def setUp(self): + """ + Setup the test suite to verify various behaviors involving formula problem type. + + Given a course, setup a formula problem type and view it in courseware + Given the MathJax requirement for generating preview, wait for MathJax files to load + """ + super(FormulaProblemTest, self).setUp() + self.courseware_page.visit() + time.sleep(6) + + def get_problem(self): + """ + creating the formula response problem, with reset button enabled. + """ + xml = dedent(""" + + +

You can use this template as a guide to the OLX markup to use for math expression problems. Edit this component to replace the example with your own assessment.

+ + You can add an optional tip or note related to the prompt like this. Example: To test this example, the correct answer is R_1*R_2/R_3 + + +
+
+ """) + return XBlockFixtureDesc('problem', 'TEST PROBLEM', data=xml, metadata={'show_reset_button': True}) + + def test_reset_problem_after_incorrect_submission(self): + """ + Scenario: Verify that formula problem can be resetted after an incorrect submission. + + Given I am attempting a formula response problem type + When I input an incorrect answer + Then the answer preview is generated using MathJax + When I submit the problem + Then I can see incorrect status and a reset button + When I click reset, the input pane contents get clear + """ + problem_page = ProblemPage(self.browser) + problem_page.fill_answer_numerical('R_1*R_2') + problem_page.verify_mathjax_rendered_in_preview() + problem_page.click_submit() + self.assertFalse(problem_page.simpleprob_is_correct()) + self.assertTrue(problem_page.is_reset_button_present()) + problem_page.click_reset() + self.assertEqual(problem_page.get_numerical_input_value, '') + + def test_reset_button_not_rendered_after_correct_submission(self): + """ + Scenario: Verify that formula problem can not be resetted after an incorrect submission. + + Given I am attempting a formula response problem type + When I input a correct answer + Then I should be able to see the mathjax generated preview + When I submit the answer + Then the correct status is visible + And reset button is not rendered + """ + problem_page = ProblemPage(self.browser) + problem_page.fill_answer_numerical('R_1*R_2/R_3') + problem_page.verify_mathjax_rendered_in_preview() + problem_page.click_submit() + self.assertTrue(problem_page.simpleprob_is_correct()) + self.assertFalse(problem_page.is_reset_button_present()) + + def test_reset_problem_after_changing_correctness(self): + """ + Scenario: Verify that formula problem can be resetted after changing the correctness. + + Given I am attempting a formula problem type + When I answer it correctly + Then the correctness status should be visible + And reset button is not rendered + When I change my submission to incorrect + Then the reset button appears and is clickable + """ + problem_page = ProblemPage(self.browser) + problem_page.fill_answer_numerical('R_1*R_2/R_3') + problem_page.verify_mathjax_rendered_in_preview() + problem_page.click_submit() + self.assertTrue(problem_page.simpleprob_is_correct()) + self.assertFalse(problem_page.is_reset_button_present()) + problem_page.fill_answer_numerical('R_1/R_3') + problem_page.click_submit() + self.assertFalse(problem_page.simpleprob_is_correct()) + self.assertTrue(problem_page.is_reset_button_present()) + problem_page.click_reset() + self.assertEqual(problem_page.get_numerical_input_value, '') + + +@ddt.ddt +class FormulaProblemRandomizeTest(ProblemsTest): + """ + Test Class to verify the formula problem on LMS with Randomization enabled. + """ + + def setUp(self): + """ + Setup the test suite to verify various behaviors involving formula problem type. + + Given a course, setup a formula problem type and view it in courseware + Given the MathJax requirement for generating preview, wait for MathJax files to load + """ + super(FormulaProblemRandomizeTest, self).setUp() + self.courseware_page.visit() + time.sleep(6) + + def get_problem(self): + """ + creating the formula response problem. + """ + xml = dedent(""" + + +

You can use this template as a guide to the OLX markup to use for math expression problems. Edit this component to replace the example with your own assessment.

+ + You can add an optional tip or note related to the prompt like this. Example: To test this example, the correct answer is R_1*R_2/R_3 + + +
+
+ """) + + # rerandomize:always will show reset button, no matter the submission correctness + return XBlockFixtureDesc( + 'problem', 'TEST PROBLEM', data=xml, metadata={'show_reset_button': True, 'rerandomize': 'always'} + ) + + @ddt.data( + ('R_1*R_2', 'incorrect'), + ('R_1/R_3', 'incorrect'), + ('R_1*R_2/R_3', 'correct') + ) + @ddt.unpack + def test_reset_problem_after_submission(self, input_value, correctness): + """ + Scenario: Test that reset button works regardless the submission correctness status. + + Given I am attempting a formula problem type with randomization:always configuration + When I input the answer + Then I should be able to see the MathJax generated preview + When I submit the problem + Then I should be able to see the reset button + When reset button is clicked + Then the input pane contents should be clear + """ + problem_page = ProblemPage(self.browser) + problem_page.fill_answer_numerical(input_value) + problem_page.verify_mathjax_rendered_in_preview() + problem_page.click_submit() + self.assertEqual(problem_page.get_simpleprob_correctness(), correctness) + self.assertTrue(problem_page.is_reset_button_present()) + problem_page.click_reset() + self.assertEqual(problem_page.get_numerical_input_value, '') + + @ddt.data( + ('R_1*R_2', 'incorrect', '0/1 point (ungraded)', '0/1 point (ungraded)'), + ('R_1*R_2/R_3', 'correct', '1/1 point (ungraded)', '0/1 point (ungraded)'), + ('R_1/R_2', 'incorrect', '0/1 point (ungraded)', '0/1 point (ungraded)') + ) + @ddt.unpack + def test_score_reset_after_resetting_problem(self, input_value, correctness, score_before_reset, score_after_reset): + """ + Scenario: Test that score resets after the formula problem is resetted. + + Given I am attempting a formula problem type with randomization:always configuration + When I input the answer + Then I should be able to see the MathJax generated preview + When I submit the problem + Then I should be able to view the score that I received + And The reset button should be present and is clickable + When the reset button is clicked + Then the score resets to zero + """ + problem_page = ProblemPage(self.browser) + problem_page.fill_answer_numerical(input_value) + problem_page.verify_mathjax_rendered_in_preview() + problem_page.click_submit() + self.assertEqual(problem_page.get_simpleprob_correctness(), correctness) + self.assertIn(score_before_reset, problem_page.problem_progress_graded_value) + self.assertTrue(problem_page.is_reset_button_present()) + problem_page.click_reset() + self.assertIn(score_after_reset, problem_page.problem_progress_graded_value) + + @ddt.data( + ('R_1*R_2', 'incorrect', 'R_1*R_2/R_3'), + ('R_1*R_2/R_3', 'correct', 'R_1/R_3') + ) + @ddt.unpack + def test_reset_correctness_after_changing_answer(self, input_value, correctness, next_input): + """ + Scenario: Test that formula problem can be resetted after changing the answer. + + Given I am attempting a formula problem type with randomization:always configuration + When I input an answer + Then the mathjax generated preview should be visible + When I submit the problem, I can see the correctness status + When I only input another answer + Then the correctness status is no longer visible + And I am able to see the reset button + And when I click the reset button + Then input pane contents are cleared + """ + problem_page = ProblemPage(self.browser) + problem_page.fill_answer_numerical(input_value) + problem_page.verify_mathjax_rendered_in_preview() + problem_page.click_submit() + self.assertEqual(problem_page.get_simpleprob_correctness(), correctness) + problem_page.fill_answer_numerical(next_input) + self.assertIsNone(problem_page.get_simpleprob_correctness()) + self.assertTrue(problem_page.is_reset_button_present()) + problem_page.click_reset() + self.assertEqual(problem_page.get_numerical_input_value, '') diff --git a/lms/djangoapps/courseware/features/problems.feature b/lms/djangoapps/courseware/features/problems.feature index b2807056b8..6559e3097d 100644 --- a/lms/djangoapps/courseware/features/problems.feature +++ b/lms/djangoapps/courseware/features/problems.feature @@ -22,8 +22,8 @@ Feature: LMS.Answer problems | radio | correct | always | | radio | incorrect | always | | numerical | incorrect | always | - | formula | correct | always | - | formula | incorrect | always | + #| formula | correct | always | + #| formula | incorrect | always | | script | correct | always | | script | incorrect | always | | radio_text | correct | always | @@ -49,7 +49,7 @@ Feature: LMS.Answer problems #| radio | incorrect | never | #| string | incorrect | never | | numerical | incorrect | never | - | formula | incorrect | never | + #| formula | incorrect | never | # TE-572 failing intermittently #| script | incorrect | never | | radio_text | incorrect | never | @@ -69,7 +69,7 @@ Feature: LMS.Answer problems | radio | correct | never | #| string | correct | never | | numerical | correct | never | - | formula | correct | never | + #| formula | correct | never | | script | correct | never | | radio_text | correct | never | | checkbox_text | correct | never | @@ -129,8 +129,8 @@ Feature: LMS.Answer problems | radio | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | | numerical | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | | numerical | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | - | formula | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | - | formula | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | + #| formula | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | + #| formula | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | | script | correct | 2/2 points (ungraded) | 0/2 points (ungraded) | | script | incorrect | 0/2 points (ungraded) | 0/2 points (ungraded) | | image | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | @@ -155,8 +155,8 @@ Feature: LMS.Answer problems | radio | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | never | | numerical | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | never | | numerical | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | never | - | formula | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | never | - | formula | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | never | + #| formula | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | never | + #| formula | incorrect | 0/1 point (ungraded) | 0/1 point (ungraded) | never | | script | correct | 2/2 points (ungraded) | 0/2 points (ungraded) | never | | script | incorrect | 0/2 points (ungraded) | 0/2 points (ungraded) | never | | image | correct | 1/1 point (ungraded) | 0/1 point (ungraded) | never | @@ -189,8 +189,8 @@ Feature: LMS.Answer problems #| string | incorrect | correct | | numerical | correct | incorrect | | numerical | incorrect | correct | - | formula | correct | incorrect | - | formula | incorrect | correct | + #| formula | correct | incorrect | + #| formula | incorrect | correct | | script | correct | incorrect | | script | incorrect | correct | diff --git a/lms/static/lms/js/spec/main.js b/lms/static/lms/js/spec/main.js index a845786974..bf9a337837 100644 --- a/lms/static/lms/js/spec/main.js +++ b/lms/static/lms/js/spec/main.js @@ -56,7 +56,7 @@ 'squire': 'common/js/vendor/Squire', 'jasmine-imagediff': 'xmodule_js/common_static/js/vendor/jasmine-imagediff', 'domReady': 'xmodule_js/common_static/js/vendor/domReady', - mathjax: '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len + mathjax: 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len 'youtube': '//www.youtube.com/player_api?noext', 'js/src/ajax_prefix': 'xmodule_js/common_static/js/src/ajax_prefix', 'js/instructor_dashboard/student_admin': 'js/instructor_dashboard/student_admin',