Commit 8bc35e10 by Xavier Antoviaque

Add support for custom message displayed upon quizz completion

parent 067a241a
...@@ -32,17 +32,27 @@ class MentoringBlock(XBlock): ...@@ -32,17 +32,27 @@ class MentoringBlock(XBlock):
prompt = String(help="Initial text displayed with the text input", default='Your answer?', scope=Scope.content) prompt = String(help="Initial text displayed with the text input", default='Your answer?', scope=Scope.content)
attempted = Boolean(help="Has the student attempted this mentoring step?", default=False, scope=Scope.user_state) attempted = Boolean(help="Has the student attempted this mentoring step?", default=False, scope=Scope.user_state)
completed = Boolean(help="Has the student completed this mentoring step?", default=False, scope=Scope.user_state) completed = Boolean(help="Has the student completed this mentoring step?", default=False, scope=Scope.user_state)
completed_message = String(help="Message to display upon completion", scope=Scope.content, default="")
has_children = True has_children = True
def get_children_fragment(self, context): @classmethod
fragment = Fragment() def parse_xml(cls, node, runtime, keys):
named_child_frags = [] block = runtime.construct_xblock_from_class(cls, keys)
for child_id in self.children: # pylint: disable=E1101
child = self.runtime.get_block(child_id) for child in node:
frag = self.runtime.render_child(child, "mentoring_view", context) if child.tag == 'message':
fragment.add_frag_resources(frag) if child.get('type') == 'completed':
named_child_frags.append((child.name, frag)) block.completed_message = child.text
return fragment, named_child_frags else:
raise ValueError, u'Invalid value for message type: `{}`'.format(child.get('type'))
else:
block.runtime.add_node_as_child(block, child)
for name, value in node.items():
if name in block.fields:
setattr(block, name, value)
return block
def student_view(self, context): def student_view(self, context):
""" """
...@@ -70,6 +80,16 @@ class MentoringBlock(XBlock): ...@@ -70,6 +80,16 @@ class MentoringBlock(XBlock):
return fragment return fragment
def get_children_fragment(self, context):
fragment = Fragment()
named_child_frags = []
for child_id in self.children: # pylint: disable=E1101
child = self.runtime.get_block(child_id)
frag = self.runtime.render_child(child, "mentoring_view", context)
fragment.add_frag_resources(frag)
named_child_frags.append((child.name, frag))
return fragment, named_child_frags
@XBlock.json_handler @XBlock.json_handler
def submit(self, submissions, suffix=''): def submit(self, submissions, suffix=''):
log.info(u'Received submissions: {}'.format(submissions)) log.info(u'Received submissions: {}'.format(submissions))
...@@ -87,10 +107,15 @@ class MentoringBlock(XBlock): ...@@ -87,10 +107,15 @@ class MentoringBlock(XBlock):
completed = completed and child_result['completed'] completed = completed and child_result['completed']
self.completed = bool(completed) self.completed = bool(completed)
if self.completed:
message = self.completed_message
else:
message = ''
return { return {
'submitResults': submit_results, 'submitResults': submit_results,
'completed': self.completed, 'completed': self.completed,
'message': message,
} }
def studio_view(self, context): def studio_view(self, context):
......
...@@ -15,7 +15,7 @@ function MentoringBlock(runtime, element) { ...@@ -15,7 +15,7 @@ function MentoringBlock(runtime, element) {
} }
function handleSubmitResults(results) { function handleSubmitResults(results) {
$('.quizz-tips', element).empty(); $('.messages', element).empty();
$.each(results.submitResults || [], function(index, submitResult) { $.each(results.submitResults || [], function(index, submitResult) {
var input = submitResult[0], var input = submitResult[0],
...@@ -25,6 +25,9 @@ function MentoringBlock(runtime, element) { ...@@ -25,6 +25,9 @@ function MentoringBlock(runtime, element) {
$('.progress', element).data('completed', results.completed ? 'True' : 'False') $('.progress', element).data('completed', results.completed ? 'True' : 'False')
renderProgress(); renderProgress();
// Messages should only be displayed upon hitting 'submit', not on page reload
$('.messages', element).append(results.message);
} }
$(element).find('.submit').bind('click', function() { $(element).find('.submit').bind('click', function() {
......
...@@ -10,7 +10,7 @@ function QuizzBlock(runtime, element) { ...@@ -10,7 +10,7 @@ function QuizzBlock(runtime, element) {
} }
}, },
handleSubmit: function(result) { handleSubmit: function(result) {
var tipsDom = $(element).parent().find('.quizz-tips'), var tipsDom = $(element).parent().find('.messages'),
tipHtml = (result || {}).tip || ''; tipHtml = (result || {}).tip || '';
if(tipHtml) { if(tipHtml) {
......
...@@ -6,5 +6,5 @@ ...@@ -6,5 +6,5 @@
<span class="progress" data-completed="{{ self.completed }}"> <span class="progress" data-completed="{{ self.completed }}">
<span class='indicator'></span> <span class='indicator'></span>
</span> </span>
<div class="quizz-tips"></div> <div class="messages"></div>
</div> </div>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment