From 4922ab33c0d329ad9df94f1ec835cc588265a982 Mon Sep 17 00:00:00 2001 From: Victor Shnayder Date: Mon, 12 Nov 2012 12:43:55 -0500 Subject: [PATCH] hook up reset button --- .../js/src/selfassessment/display.coffee | 36 ++++++++++++++++--- .../xmodule/xmodule/self_assessment_module.py | 11 ++++-- lms/templates/self_assessment_prompt.html | 3 +- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/selfassessment/display.coffee b/common/lib/xmodule/xmodule/js/src/selfassessment/display.coffee index dbfd047a11..0006dbf3bf 100644 --- a/common/lib/xmodule/xmodule/js/src/selfassessment/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/selfassessment/display.coffee @@ -4,6 +4,7 @@ class @SelfAssessment @id = @el.data('id') @ajax_url = @el.data('ajax-url') @state = @el.data('state') + allow_reset = @el.data('allow_reset') # valid states: 'initial', 'assessing', 'request_hint', 'done' # Where to put the rubric once we load it @@ -14,17 +15,24 @@ class @SelfAssessment @hint_wrapper = @$('.hint-wrapper') @message_wrapper = @$('.message-wrapper') @check_button = @$('.submit-button') + @reset_button = @$('.reset-button') + @reset_button.click @reset @find_assessment_elements() @find_hint_elements() - @bind() + if allow_reset + @reset_button.show() + else + @reset_button.hide() + + @rebind() # locally scoped jquery. $: (selector) -> $(selector, @el) - bind: () => + rebind: () => # rebind to the appropriate function for the current state @check_button.unbind('click') if @state == 'initial' @@ -51,7 +59,7 @@ class @SelfAssessment @rubric_wrapper.html(response.rubric_html) @state = 'assessing' @find_assessment_elements() - @bind() + @rebind() else @errors_area.html(response.message) else @@ -66,7 +74,7 @@ class @SelfAssessment @hint_wrapper.html(response.hint_html) @state = 'request_hint' @find_hint_elements() - @bind() + @rebind() else @errors_area.html(response.message) else @@ -82,9 +90,27 @@ class @SelfAssessment if response.success @message_wrapper.html(response.message_html) @state = 'done' - @bind() + @rebind() + if response.allow_reset + @reset_button.show() else @errors_area.html(response.message) else @errors_area.html('Problem state got out of sync. Try reloading the page.') + + reset: (event) => + event.preventDefault() + if @state == 'done' + $.postWithPrefix "#{@ajax_url}/reset", {}, (response) => + if response.success + @rubric_wrapper.html('') + @hint_wrapper.html('') + @message_wrapper.html('') + @state = 'initial' + @rebind() + @reset_button.hide() + else + @errors_area.html(response.message) + else + @errors_area.html('Problem state got out of sync. Try reloading the page.') diff --git a/common/lib/xmodule/xmodule/self_assessment_module.py b/common/lib/xmodule/xmodule/self_assessment_module.py index 80f88dec31..f208cd9c7e 100644 --- a/common/lib/xmodule/xmodule/self_assessment_module.py +++ b/common/lib/xmodule/xmodule/self_assessment_module.py @@ -121,6 +121,7 @@ class SelfAssessmentModule(XModule): #set context variables and render template previous_answer = self.student_answers[-1] if self.student_answers else '' + allow_reset = self.state == self.DONE and self.attempts < self.max_attempts context = { 'prompt': self.prompt, 'previous_answer': previous_answer, @@ -129,6 +130,7 @@ class SelfAssessmentModule(XModule): 'initial_hint': self.get_hint_html(), 'initial_message': self.get_message_html(), 'state': self.state, + 'allow_reset': allow_reset, } html = self.system.render_template('self_assessment_prompt.html', context) @@ -297,7 +299,8 @@ class SelfAssessmentModule(XModule): Save the hint. Returns a dict { 'success': bool, 'message_html': message_html, - 'error': error-msg}, + 'error': error-msg, + 'allow_reset': bool}, with the error key only present if success is False and message_html only if True. ''' @@ -325,7 +328,8 @@ class SelfAssessmentModule(XModule): self.system.track_function('save_hint', event_info) return {'success': True, - 'message_html': self.get_message_html()} + 'message_html': self.get_message_html(), + 'allow_reset': self.attempts < self.max_attempts} def reset(self, get): @@ -335,8 +339,9 @@ class SelfAssessmentModule(XModule): Returns {'success': bool, 'error': msg} (error only present if not success) """ - if self.state != DONE: + if self.state != self.DONE: return self.out_of_sync_error(get) + if self.attempts > self.max_attempts: return { 'success': False, diff --git a/lms/templates/self_assessment_prompt.html b/lms/templates/self_assessment_prompt.html index f7ad908e72..898de81f3f 100644 --- a/lms/templates/self_assessment_prompt.html +++ b/lms/templates/self_assessment_prompt.html @@ -1,5 +1,5 @@
+ data-id="${id}" data-state="${state}" data-allow_reset="${allow_reset}">
${prompt} @@ -16,4 +16,5 @@
${initial_message}
+