From 43436a953c96be37ddb385d265d4f88b8fc417e0 Mon Sep 17 00:00:00 2001 From: Jonathan Piacenti Date: Wed, 14 Oct 2015 16:53:46 -0500 Subject: [PATCH] Make 'next' button text customizable in Mentoring Steps. --- .../public/js/mentoring_with_steps.js | 8 +++++ problem_builder/public/js/step.js | 4 +++ problem_builder/step.py | 8 ++++- problem_builder/templates/html/step.html | 2 +- .../tests/integration/test_step_builder.py | 15 +++++++++ .../xml_templates/step_builder_next.xml | 31 +++++++++++++++++++ 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 problem_builder/tests/integration/xml_templates/step_builder_next.xml diff --git a/problem_builder/public/js/mentoring_with_steps.js b/problem_builder/public/js/mentoring_with_steps.js index ba5d1235..cc64b15d 100644 --- a/problem_builder/public/js/mentoring_with_steps.js +++ b/problem_builder/public/js/mentoring_with_steps.js @@ -175,8 +175,14 @@ function MentoringWithStepsBlock(runtime, element) { reviewTipsDOM.empty().hide(); } + function updateNextLabel() { + var step = steps[activeStep]; + nextDOM.attr('value', step.getStepLabel()); + } + function updateDisplay() { cleanAll(); + if (atReviewStep()) { // Tell supporting runtimes to enable navigation between units; // user is currently not in the middle of an attempt @@ -188,6 +194,7 @@ function MentoringWithStepsBlock(runtime, element) { } else { showActiveStep(); validateXBlock(); + updateNextLabel(); nextDOM.attr('disabled', 'disabled'); if (isLastStep() && reviewStep) { reviewDOM.attr('disabled', 'disabled'); @@ -243,6 +250,7 @@ function MentoringWithStepsBlock(runtime, element) { activeStep = stepIndex; cleanAll(); showActiveStep(); + updateNextLabel(); if (isLastStep()) { reviewDOM.show(); diff --git a/problem_builder/public/js/step.js b/problem_builder/public/js/step.js index 0c9eb9b6..3751393e 100644 --- a/problem_builder/public/js/step.js +++ b/problem_builder/public/js/step.js @@ -81,6 +81,10 @@ function MentoringStepBlock(runtime, element) { callIfExists(child, 'handleReview', result); } } + }, + + getStepLabel: function() { + return $('.sb-step', element).data('next-button-label'); } }; diff --git a/problem_builder/step.py b/problem_builder/step.py index 85030617..77b1bd8c 100644 --- a/problem_builder/step.py +++ b/problem_builder/step.py @@ -99,7 +99,13 @@ class MentoringStepBlock( scope=Scope.user_state ) - editable_fields = ('display_name', 'show_title',) + next_button_label = String( + display_name=_("Next Button Label"), + help=_("Customize the text of the 'Next' button."), + default=_("Next Step") + ) + + editable_fields = ('display_name', 'show_title', 'next_button_label') @lazy def siblings(self): diff --git a/problem_builder/templates/html/step.html b/problem_builder/templates/html/step.html index 1cb86b08..8fd325d4 100644 --- a/problem_builder/templates/html/step.html +++ b/problem_builder/templates/html/step.html @@ -1,4 +1,4 @@ -
+
{% if show_title %}

diff --git a/problem_builder/tests/integration/test_step_builder.py b/problem_builder/tests/integration/test_step_builder.py index a2a59399..999d2678 100644 --- a/problem_builder/tests/integration/test_step_builder.py +++ b/problem_builder/tests/integration/test_step_builder.py @@ -215,6 +215,21 @@ def extended_feedback_checks(self, step_builder, controls, expected_results): None, step_builder, controls, extended_feedback=True, alternative_review=True ) + def test_next_label(self): + step_builder, controls = self.load_assessment_scenario("step_builder_next.xml") + self.expect_question_visible(None, step_builder) + self.assertEqual(controls.next_question.get_attribute('value'), "Next Challenge") + self.freeform_answer(None, step_builder, controls, 'This is the answer', CORRECT) + self.expect_question_visible(None, step_builder) + self.assertEqual(controls.next_question.get_attribute('value'), "Next Item") + self.single_choice_question(None, step_builder, controls, 'Maybe not', INCORRECT) + self.rating_question(None, step_builder, controls, "5 - Extremely good", CORRECT, last=True) + + # Check extended feedback loads the labels correctly. + step_builder.find_elements_by_css_selector('.correct-list li a')[0].click() + self.expect_question_visible(None, step_builder) + self.assertEqual(controls.next_question.get_attribute('value'), "Next Challenge") + @data( {"max_attempts": 0, "extended_feedback": False}, # Unlimited attempts, no extended feedback {"max_attempts": 1, "extended_feedback": True}, # Limited attempts, extended feedback diff --git a/problem_builder/tests/integration/xml_templates/step_builder_next.xml b/problem_builder/tests/integration/xml_templates/step_builder_next.xml new file mode 100644 index 00000000..c3ebd929 --- /dev/null +++ b/problem_builder/tests/integration/xml_templates/step_builder_next.xml @@ -0,0 +1,31 @@ + + + + + + + + + Yes + Maybe not + I don't understand + + Great! + Ah, damn. +
Really?
+
+
+ + + + I don't want to rate it + I love good grades. + Will do better next time... + Your loss! + + + + + +