Commit 0014d83c by muhammad-ammar

* remove <solution> from inputtypes

* update defaults templates

TNL-4822 FEDX-208
parent d7a5d32b
...@@ -36,7 +36,7 @@ class TemplateTests(ModuleStoreTestCase): ...@@ -36,7 +36,7 @@ class TemplateTests(ModuleStoreTestCase):
self.assertIn('markdown', dropdown['metadata']) self.assertIn('markdown', dropdown['metadata'])
self.assertIn('data', dropdown) self.assertIn('data', dropdown)
self.assertRegexpMatches(dropdown['metadata']['markdown'], r'^Dropdown.*') self.assertRegexpMatches(dropdown['metadata']['markdown'], r'^Dropdown.*')
self.assertRegexpMatches(dropdown['data'], r'<problem>\s*<p>Dropdown.*') self.assertRegexpMatches(dropdown['data'], r'<problem>\s*<optionresponse>\s*<p>Dropdown.*')
def test_get_some_templates(self): def test_get_some_templates(self):
self.assertEqual(len(SequenceDescriptor.templates()), 0) self.assertEqual(len(SequenceDescriptor.templates()), 0)
......
...@@ -846,7 +846,7 @@ class LoncapaProblem(object): ...@@ -846,7 +846,7 @@ class LoncapaProblem(object):
answer_id = 1 answer_id = 1
input_tags = inputtypes.registry.registered_tags() input_tags = inputtypes.registry.registered_tags()
inputfields = tree.xpath( inputfields = tree.xpath(
"|".join(['//' + response.tag + '[@id=$id]//' + x for x in input_tags + solution_tags]), "|".join(['//' + response.tag + '[@id=$id]//' + x for x in input_tags]),
id=response_id_str id=response_id_str
) )
......
...@@ -218,7 +218,7 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -218,7 +218,7 @@ describe 'MarkdownEditingDescriptor', ->
One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make. One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.
What Apple device competed with the portable CD player? >>What Apple device competed with the portable CD player?<<
( ) The iPad ( ) The iPad
( ) Napster ( ) Napster
(x) The iPod (x) The iPod
...@@ -231,28 +231,25 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -231,28 +231,25 @@ describe 'MarkdownEditingDescriptor', ->
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""<problem>
<multiplechoiceresponse> <multiplechoiceresponse>
<p>A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.</p> <p>A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.</p>
<p>One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.</p> <p>One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.</p>
<p>What Apple device competed with the portable CD player?</p> <label>What Apple device competed with the portable CD player?</label>
<choicegroup type="MultipleChoice"> <choicegroup label="What Apple device competed with the portable CD player?" type="MultipleChoice">
<choice correct="false">The iPad</choice> <choice correct="false">The iPad</choice>
<choice correct="false">Napster</choice> <choice correct="false">Napster</choice>
<choice correct="true">The iPod</choice> <choice correct="true">The iPod</choice>
<choice correct="false">The vegetable peeler</choice> <choice correct="false">The vegetable peeler</choice>
<choice correct="false">Android</choice> <choice correct="false">Android</choice>
<choice correct="false">The Beatles</choice> <choice correct="false">The Beatles</choice>
</choicegroup> </choicegroup>
</multiplechoiceresponse> <solution>
<div class="detailed-solution">
<solution> <p>Explanation</p>
<div class="detailed-solution"> <p>The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.</p>
<p>Explanation</p> </div>
</solution>
<p>The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.</p> </multiplechoiceresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'converts multiple choice shuffle to xml', -> it 'converts multiple choice shuffle to xml', ->
data = MarkdownEditingDescriptor.markdownToXml("""A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets. data = MarkdownEditingDescriptor.markdownToXml("""A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.
...@@ -271,29 +268,27 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -271,29 +268,27 @@ describe 'MarkdownEditingDescriptor', ->
The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks. The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<multiplechoiceresponse> <problem>
<p>A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.</p> <multiplechoiceresponse>
<p>One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.</p> <p>A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.</p>
<p>What Apple device competed with the portable CD player?</p> <p>One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.</p>
<choicegroup type="MultipleChoice" shuffle="true"> <p>What Apple device competed with the portable CD player?</p>
<choice correct="true" fixed="true">The iPad</choice> <choicegroup type="MultipleChoice" shuffle="true">
<choice correct="false" fixed="true">Napster</choice> <choice correct="true" fixed="true">The iPad</choice>
<choice correct="false">The iPod</choice> <choice correct="false" fixed="true">Napster</choice>
<choice correct="false">The vegetable peeler</choice> <choice correct="false">The iPod</choice>
<choice correct="false">Android</choice> <choice correct="false">The vegetable peeler</choice>
<choice correct="false" fixed="true">The Beatles</choice> <choice correct="false">Android</choice>
</choicegroup> <choice correct="false" fixed="true">The Beatles</choice>
</multiplechoiceresponse> </choicegroup>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.</p>
</div>
<p>The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.</p> </solution>
</multiplechoiceresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'converts a series of multiplechoice to xml', -> it 'converts a series of multiplechoice to xml', ->
...@@ -363,22 +358,20 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -363,22 +358,20 @@ describe 'MarkdownEditingDescriptor', ->
Multiple Choice also allows students to select from a variety of pre-written responses, although the format makes it easier for students to read very long response options. Optionresponse also differs slightly because students are more likely to think of an answer and then search for it rather than relying purely on recognition to answer the question. Multiple Choice also allows students to select from a variety of pre-written responses, although the format makes it easier for students to read very long response options. Optionresponse also differs slightly because students are more likely to think of an answer and then search for it rather than relying purely on recognition to answer the question.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<optionresponse> <problem>
<p>OptionResponse gives a limited set of options for students to respond with, and presents those options in a format that encourages them to search for a specific answer rather than being immediately presented with options from which to recognize the correct answer.</p> <optionresponse>
<p>The answer options and the identification of the correct answer is defined in the <b>optioninput</b> tag.</p> <p>OptionResponse gives a limited set of options for students to respond with, and presents those options in a format that encourages them to search for a specific answer rather than being immediately presented with options from which to recognize the correct answer.</p>
<p>Translation between Option Response and __________ is extremely straightforward:</p> <p>The answer options and the identification of the correct answer is defined in the <b>optioninput</b> tag.</p>
<optioninput options="('Multiple Choice','String Response','Numerical Response','External Response','Image Response')" correct="Multiple Choice"/> <p>Translation between Option Response and __________ is extremely straightforward:</p>
</optionresponse> <optioninput options="('Multiple Choice','String Response','Numerical Response','External Response','Image Response')" correct="Multiple Choice"/>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>Multiple Choice also allows students to select from a variety of pre-written responses, although the format makes it easier for students to read very long response options. Optionresponse also differs slightly because students are more likely to think of an answer and then search for it rather than relying purely on recognition to answer the question.</p>
</div>
<p>Multiple Choice also allows students to select from a variety of pre-written responses, although the format makes it easier for students to read very long response options. Optionresponse also differs slightly because students are more likely to think of an answer and then search for it rather than relying purely on recognition to answer the question.</p> </solution>
</optionresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'converts StringResponse to xml', -> it 'converts StringResponse to xml', ->
data = MarkdownEditingDescriptor.markdownToXml("""A string response problem accepts a line of text input from the student, and evaluates the input for correctness based on an expected answer within each input box. data = MarkdownEditingDescriptor.markdownToXml("""A string response problem accepts a line of text input from the student, and evaluates the input for correctness based on an expected answer within each input box.
...@@ -392,22 +385,20 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -392,22 +385,20 @@ describe 'MarkdownEditingDescriptor', ->
Lansing is the capital of Michigan, although it is not Michgan's largest city, or even the seat of the county in which it resides. Lansing is the capital of Michigan, although it is not Michgan's largest city, or even the seat of the county in which it resides.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<stringresponse answer="Michigan" type="ci"> <problem>
<p>A string response problem accepts a line of text input from the student, and evaluates the input for correctness based on an expected answer within each input box.</p> <stringresponse answer="Michigan" type="ci">
<p>The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.</p> <p>A string response problem accepts a line of text input from the student, and evaluates the input for correctness based on an expected answer within each input box.</p>
<p>Which US state has Lansing as its capital?</p> <p>The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.</p>
<textline size="20"/> <p>Which US state has Lansing as its capital?</p>
</stringresponse> <textline size="20"/>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>Lansing is the capital of Michigan, although it is not Michgan's largest city, or even the seat of the county in which it resides.</p>
</div>
<p>Lansing is the capital of Michigan, although it is not Michgan's largest city, or even the seat of the county in which it resides.</p> </solution>
</stringresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'converts StringResponse with regular expression to xml', -> it 'converts StringResponse with regular expression to xml', ->
data = MarkdownEditingDescriptor.markdownToXml("""Who lead the civil right movement in the United States of America? data = MarkdownEditingDescriptor.markdownToXml("""Who lead the civil right movement in the United States of America?
...@@ -417,20 +408,18 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -417,20 +408,18 @@ describe 'MarkdownEditingDescriptor', ->
Test Explanation. Test Explanation.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<stringresponse answer="w*.?s*Luther Kings*.*" type="ci regexp"> <problem>
<p>Who lead the civil right movement in the United States of America?</p> <stringresponse answer="w*.?s*Luther Kings*.*" type="ci regexp">
<textline size="20"/> <p>Who lead the civil right movement in the United States of America?</p>
</stringresponse> <textline size="20"/>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>Test Explanation.</p>
</div>
<p>Test Explanation.</p> </solution>
</stringresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'converts StringResponse with multiple answers to xml', -> it 'converts StringResponse with multiple answers to xml', ->
data = MarkdownEditingDescriptor.markdownToXml("""Who lead the civil right movement in the United States of America? data = MarkdownEditingDescriptor.markdownToXml("""Who lead the civil right movement in the United States of America?
...@@ -443,23 +432,21 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -443,23 +432,21 @@ describe 'MarkdownEditingDescriptor', ->
Test Explanation. Test Explanation.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<stringresponse answer="Dr. Martin Luther King Jr." type="ci"> <problem>
<p>Who lead the civil right movement in the United States of America?</p> <stringresponse answer="Dr. Martin Luther King Jr." type="ci">
<additional_answer answer="Doctor Martin Luther King Junior"/> <p>Who lead the civil right movement in the United States of America?</p>
<additional_answer answer="Martin Luther King"/> <additional_answer answer="Doctor Martin Luther King Junior"/>
<additional_answer answer="Martin Luther King Junior"/> <additional_answer answer="Martin Luther King"/>
<textline size="20"/> <additional_answer answer="Martin Luther King Junior"/>
</stringresponse> <textline size="20"/>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>Test Explanation.</p>
</div>
<p>Test Explanation.</p> </solution>
</stringresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'converts StringResponse with multiple answers and regular expressions to xml', -> it 'converts StringResponse with multiple answers and regular expressions to xml', ->
data = MarkdownEditingDescriptor.markdownToXml("""Write a number from 1 to 4. data = MarkdownEditingDescriptor.markdownToXml("""Write a number from 1 to 4.
...@@ -472,23 +459,21 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -472,23 +459,21 @@ describe 'MarkdownEditingDescriptor', ->
Test Explanation. Test Explanation.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<stringresponse answer="^One$" type="ci regexp"> <problem>
<p>Write a number from 1 to 4.</p> <stringresponse answer="^One$" type="ci regexp">
<additional_answer answer="two"/> <p>Write a number from 1 to 4.</p>
<additional_answer answer="^thre+"/> <additional_answer answer="two"/>
<additional_answer answer="^4|Four$"/> <additional_answer answer="^thre+"/>
<textline size="20"/> <additional_answer answer="^4|Four$"/>
</stringresponse> <textline size="20"/>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>Test Explanation.</p>
</div>
<p>Test Explanation.</p> </solution>
</stringresponse>
</div>
</solution>
</problem>""") </problem>""")
# test labels # test labels
it 'converts markdown labels to label attributes', -> it 'converts markdown labels to label attributes', ->
...@@ -499,20 +484,18 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -499,20 +484,18 @@ describe 'MarkdownEditingDescriptor', ->
Test Explanation. Test Explanation.
[Explanation] [Explanation]
""") """)
expect(data).toXMLEqual("""<problem> expect(data).toXMLEqual("""
<stringresponse answer="w*.?s*Luther Kings*.*" type="ci regexp"> <problem>
<label>Who lead the civil right movement in the United States of America?</label> <stringresponse answer="w*.?s*Luther Kings*.*" type="ci regexp">
<textline label="Who lead the civil right movement in the United States of America?" size="20"/> <label>Who lead the civil right movement in the United States of America?</label>
</stringresponse> <textline label="Who lead the civil right movement in the United States of America?" size="20"/>
<solution>
<solution> <div class="detailed-solution">
<div class="detailed-solution"> <p>Explanation</p>
<p>Explanation</p> <p>Test Explanation.</p>
</div>
<p>Test Explanation.</p> </solution>
</stringresponse>
</div>
</solution>
</problem>""") </problem>""")
it 'handles multiple questions with labels', -> it 'handles multiple questions with labels', ->
data = MarkdownEditingDescriptor.markdownToXml(""" data = MarkdownEditingDescriptor.markdownToXml("""
...@@ -766,52 +749,46 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -766,52 +749,46 @@ describe 'MarkdownEditingDescriptor', ->
""") """)
expect(data).toXMLEqual(""" expect(data).toXMLEqual("""
<problem> <problem>
<multiplechoiceresponse> <multiplechoiceresponse>
<p>Multiple choice problems allow learners to select only one option. Learners can see all the options along with the problem text.</p> <p>Multiple choice problems allow learners to select only one option. Learners can see all the options along with the problem text.</p>
<label>Which of the following countries has the largest population?</label> <label>Which of the following countries has the largest population?</label>
<choicegroup label="Which of the following countries has the largest population?" type="MultipleChoice"> <choicegroup label="Which of the following countries has the largest population?" type="MultipleChoice">
<choice correct="false">Brazil <choicehint>timely feedback -- explain why an almost correct answer is wrong</choicehint> <choice correct="false">Brazil <choicehint>timely feedback -- explain why an almost correct answer is wrong</choicehint>
</choice> </choice>
<choice correct="false">Germany</choice> <choice correct="false">Germany</choice>
<choice correct="true">Indonesia</choice> <choice correct="true">Indonesia</choice>
<choice correct="false">Russia</choice> <choice correct="false">Russia</choice>
</choicegroup> </choicegroup>
</multiplechoiceresponse> <solution>
<div class="detailed-solution">
<solution> <p>Explanation</p>
<div class="detailed-solution"> <p>According to September 2014 estimates:</p>
<p>Explanation</p> <p>The population of Indonesia is approximately 250 million.</p>
<p>The population of Brazil is approximately 200 million.</p>
<p>According to September 2014 estimates:</p> <p>The population of Russia is approximately 146 million.</p>
<p>The population of Indonesia is approximately 250 million.</p> <p>The population of Germany is approximately 81 million.</p>
<p>The population of Brazil is approximately 200 million.</p> </div>
<p>The population of Russia is approximately 146 million.</p> </solution>
<p>The population of Germany is approximately 81 million.</p> </multiplechoiceresponse>
</div> <choiceresponse>
</solution> <p>Checkbox problems allow learners to select multiple options. Learners can see all the options along with the problem text.</p>
<label>The following languages are in the Indo-European family:</label>
<choiceresponse> <checkboxgroup label="The following languages are in the Indo-European family:">
<p>Checkbox problems allow learners to select multiple options. Learners can see all the options along with the problem text.</p> <choice correct="true">Urdu</choice>
<label>The following languages are in the Indo-European family:</label> <choice correct="false">Finnish</choice>
<checkboxgroup label="The following languages are in the Indo-European family:"> <choice correct="true">Marathi</choice>
<choice correct="true">Urdu</choice> <choice correct="true">French</choice>
<choice correct="false">Finnish</choice> <choice correct="false">Hungarian</choice>
<choice correct="true">Marathi</choice> </checkboxgroup>
<choice correct="true">French</choice> <p>Note: Make sure you select all of the correct options—there may be more than one!</p>
<choice correct="false">Hungarian</choice> <solution>
</checkboxgroup> <div class="detailed-solution">
<p>Note: Make sure you select all of the correct options—there may be more than one!</p> <p>Explanation</p>
</choiceresponse> <p>Urdu, Marathi, and French are all Indo-European languages, while Finnish and Hungarian are in the Uralic family.</p>
</div>
<solution> </solution>
<div class="detailed-solution"> </choiceresponse>
<p>Explanation</p>
<p>Urdu, Marathi, and French are all Indo-European languages, while Finnish and Hungarian are in the Uralic family.</p>
</div>
</solution>
</problem> </problem>
""") """)
...@@ -837,31 +814,28 @@ describe 'MarkdownEditingDescriptor', -> ...@@ -837,31 +814,28 @@ describe 'MarkdownEditingDescriptor', ->
""") """)
expect(data).toXMLEqual(""" expect(data).toXMLEqual("""
<problem> <problem>
<p>Multiple choice problems allow learners to select only one option. Learners can see all the options along with the problem text.</p> <p>Multiple choice problems allow learners to select only one option. Learners can see all the options along with the problem text.</p>
<multiplechoiceresponse> <multiplechoiceresponse>
<label>Which of the following countries has the largest population?</label> <label>Which of the following countries has the largest population?</label>
<choicegroup label="Which of the following countries has the largest population?" type="MultipleChoice"> <choicegroup label="Which of the following countries has the largest population?" type="MultipleChoice">
<choice correct="false">Brazil <choicehint>timely feedback -- explain why an almost correct answer is wrong</choicehint> <choice correct="false">Brazil <choicehint>timely feedback -- explain why an almost correct answer is wrong</choicehint>
</choice> </choice>
<choice correct="false">Germany</choice> <choice correct="false">Germany</choice>
<choice correct="true">Indonesia</choice> <choice correct="true">Indonesia</choice>
<choice correct="false">Russia</choice> <choice correct="false">Russia</choice>
</choicegroup> </choicegroup>
</multiplechoiceresponse> <solution>
<div class="detailed-solution">
<solution> <p>Explanation</p>
<div class="detailed-solution"> <p>According to September 2014 estimates:</p>
<p>Explanation</p> <p>The population of Indonesia is approximately 250 million.</p>
<p>The population of Brazil is approximately 200 million.</p>
<p>According to September 2014 estimates:</p> <p>The population of Russia is approximately 146 million.</p>
<p>The population of Indonesia is approximately 250 million.</p> <p>The population of Germany is approximately 81 million.</p>
<p>The population of Brazil is approximately 200 million.</p> </div>
<p>The population of Russia is approximately 146 million.</p> </solution>
<p>The population of Germany is approximately 81 million.</p> </multiplechoiceresponse>
</div>
</solution>
</problem> </problem>
""") """)
......
...@@ -582,10 +582,6 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor ...@@ -582,10 +582,6 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor
// make selector to search responsetypes in xml // make selector to search responsetypes in xml
var responseTypesSelector = responseTypes.join(', '); var responseTypesSelector = responseTypes.join(', ');
// these will be placed at outside the end of responsetype
var independentTagNames = ['solution'];
var independentTagNodes = [];
// make temporary xml // make temporary xml
// safe-lint: disable=javascript-concat-html // safe-lint: disable=javascript-concat-html
var $xml = $($.parseXML('<prob>' + xml + '</prob>')); var $xml = $($.parseXML('<prob>' + xml + '</prob>'));
...@@ -609,11 +605,6 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor ...@@ -609,11 +605,6 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor
child = $('<label>' + child.textContent + '</label>')[0]; child = $('<label>' + child.textContent + '</label>')[0];
} }
if (_.contains(independentTagNames, child.nodeName)) {
independentTagNodes.push(child)
return;
}
if (beforeInputtype) { if (beforeInputtype) {
// safe-lint: disable=javascript-jquery-insert-into-target // safe-lint: disable=javascript-jquery-insert-into-target
responseType[0].insertBefore(child, inputtype); responseType[0].insertBefore(child, inputtype);
...@@ -623,10 +614,7 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor ...@@ -623,10 +614,7 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor
}) })
var serializer = new XMLSerializer(); var serializer = new XMLSerializer();
// combine responsetype and independent tags xml = serializer.serializeToString(responseType[0]);
xml = serializer.serializeToString(responseType[0]) + '\n\n' + _.map(independentTagNodes, function(node){
return serializer.serializeToString(node)
}).join('\n\n');
// remove xmlns attribute added by the serializer // remove xmlns attribute added by the serializer
xml = xml.replace(/\sxmlns=['"].*?['"]/gi, ''); xml = xml.replace(/\sxmlns=['"].*?['"]/gi, '');
......
...@@ -3,7 +3,7 @@ metadata: ...@@ -3,7 +3,7 @@ metadata:
display_name: Checkboxes display_name: Checkboxes
markdown: | markdown: |
Checkbox problems allow learners to select multiple options. Learners can see all the options along with the problem text. Checkbox problems allow learners to select multiple options. Learners can see all the options along with the problem text.
When you add the problem, be sure to select Settings to specify a Display Name and other values that apply. When you add the problem, be sure to select Settings to specify a Display Name and other values that apply.
You can use the following example problem as a model. You can use the following example problem as a model.
...@@ -21,27 +21,26 @@ metadata: ...@@ -21,27 +21,26 @@ metadata:
Urdu, Marathi, and French are all Indo-European languages, while Finnish and Hungarian are in the Uralic family. Urdu, Marathi, and French are all Indo-European languages, while Finnish and Hungarian are in the Uralic family.
[explanation] [explanation]
data: | data: |
<problem> <problem>
<p>Checkbox problems allow learners to select multiple options. Learners can see all the options along with the problem text.</p> <choiceresponse>
<p>When you add the component, be sure to select <strong>Settings</strong> <p>Checkbox problems allow learners to select multiple options. Learners can see all the options along with the problem text.</p>
to specify a <strong>Display Name</strong> and other values that apply.</p> <p>When you add the problem, be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>You can use the following example problem as a model.</p> <p>You can use the following example problem as a model.</p>
<p>The following languages are in the Indo-European family:</p> <label>The following languages are in the Indo-European family:</label>
<choiceresponse> <checkboxgroup label="The following languages are in the Indo-European family:">
<checkboxgroup> <choice correct="true">Urdu</choice>
<choice correct="true" name="urdu">Urdu</choice> <choice correct="false">Finnish</choice>
<choice correct="false" name="finnish">Finnish</choice> <choice correct="true">Marathi</choice>
<choice correct="true" name="marathi">Marathi</choice> <choice correct="true">French</choice>
<choice correct="true" name="french">French</choice> <choice correct="false">Hungarian</choice>
<choice correct="false" name="hungarian">Hungarian</choice> </checkboxgroup>
</checkboxgroup> <p>Note: Make sure you select all of the correct options—there may be more than one!</p>
</choiceresponse> <solution>
<p><strong>Note</strong>: Make sure you select all of the correct options—there may be more than one!</p> <div class="detailed-solution">
<solution> <p>Explanation</p>
<div class="detailed-solution"> <p>Urdu, Marathi, and French are all Indo-European languages, while Finnish and Hungarian are in the Uralic family.</p>
<p>Explanation</p> </div>
<p>Urdu, Marathi, and French are all Indo-European languages, while Finnish and Hungarian are in the Uralic family.</p> </solution>
</div> </choiceresponse>
</solution> </problem>
</problem>
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
metadata: metadata:
display_name: Checkboxes with Hints and Feedback display_name: Checkboxes with Hints and Feedback
markdown: | markdown: |
You can provide feedback for each option in a checkbox problem, with distinct feedback depending on whether or not the learner selects that option. You can provide feedback for each option in a checkbox problem, with distinct feedback depending on whether or not the learner selects that option.
You can also provide compound feedback for a specific combination of answers. For example, if you have three possible answers in the problem, you can configure specific feedback for when a learner selects each combination of possible answers. You can also provide compound feedback for a specific combination of answers. For example, if you have three possible answers in the problem, you can configure specific feedback for when a learner selects each combination of possible answers.
...@@ -28,42 +28,39 @@ metadata: ...@@ -28,42 +28,39 @@ metadata:
||A fruit contains seeds of the plant.|| ||A fruit contains seeds of the plant.||
hinted: true hinted: true
data: | data: |
<problem> <problem>
<choiceresponse>
<p>You can provide feedback for each option in a checkbox problem, with distinct feedback depending on whether or not the learner selects that option.</p> <p>You can provide feedback for each option in a checkbox problem, with distinct feedback depending on whether or not the learner selects that option.</p>
<p>You can also provide compound feedback for a specific combination of answers. For example, if you have three possible answers in the problem, you can configure specific feedback for when a learner selects each combination of possible answers.</p>
<p>You can also provide compound feedback for a specific combination of answers. For example, if you have three possible answers in the problem, you can configure specific feedback for when a learner selects each combination of possible answers.</p> <p>You can also add hints for learners.</p>
<p>Be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>You can also add hints for learners.</p> <p>Use the following example problem as a model.</p>
<label>Which of the following is a fruit? Check all that apply.</label>
<checkboxgroup label="Which of the following is a fruit? Check all that apply.">
<choice correct="true">apple
<choicehint selected="true">You are correct that an apple is a fruit because it is the fertilized ovary that comes from an apple tree and contains seeds.</choicehint>
<choicehint selected="false">Remember that an apple is also a fruit.</choicehint>
</choice>
<choice correct="true">pumpkin
<choicehint selected="true">You are correct that a pumpkin is a fruit because it is the fertilized ovary of a squash plant and contains seeds.</choicehint>
<choicehint selected="false">Remember that a pumpkin is also a fruit.</choicehint>
</choice>
<choice correct="false">potato
<choicehint selected="true">A potato is a vegetable, not a fruit, because it does not come from a flower and does not contain seeds.</choicehint>
<choicehint selected="false">You are correct that a potato is a vegetable because it is an edible part of a plant in tuber form.</choicehint>
</choice>
<choice correct="true">tomato
<choicehint selected="true">You are correct that a tomato is a fruit because it is the fertilized ovary of a tomato plant and contains seeds.</choicehint>
<choicehint selected="false">Many people mistakenly think a tomato is a vegetable. However, because a tomato is the fertilized ovary of a tomato plant and contains seeds, it is a fruit.</choicehint>
</choice>
<compoundhint value="A B D">An apple, pumpkin, and tomato are all fruits as they all are fertilized ovaries of a plant and contain seeds.</compoundhint>
<compoundhint value="A B C D">You are correct that an apple, pumpkin, and tomato are all fruits as they all are fertilized ovaries of a plant and contain seeds. However, a potato is not a fruit as it is an edible part of a plant in tuber form and is a vegetable.</compoundhint>
</checkboxgroup>
</choiceresponse>
<p>Use the following example problem as a model.</p> <demandhint>
<hint>A fruit is the fertilized ovary from a flower.</hint>
<p>Which of the following is a fruit? Check all that apply.</p> <hint>A fruit contains seeds of the plant.</hint>
<choiceresponse> </demandhint>
<checkboxgroup> </problem>
<choice correct="true">apple
<choicehint selected="true">You are correct that an apple is a fruit because it is the fertilized ovary that comes from an apple tree and contains seeds.</choicehint>
<choicehint selected="false">Remember that an apple is also a fruit.</choicehint>
</choice>
<choice correct="true">pumpkin
<choicehint selected="true">You are correct that a pumpkin is a fruit because it is the fertilized ovary of a squash plant and contains seeds.</choicehint>
<choicehint selected="false">Remember that a pumpkin is also a fruit.</choicehint>
</choice>
<choice correct="false">potato
<choicehint selected="true">A potato is a vegetable, not a fruit, because it does not come from a flower and does not contain seeds.</choicehint>
<choicehint selected="false">You are correct that a potato is a vegetable because it is an edible part of a plant in tuber form.</choicehint>
</choice>
<choice correct="true">tomato
<choicehint selected="true">You are correct that a tomato is a fruit because it is the fertilized ovary of a tomato plant and contains seeds.</choicehint>
<choicehint selected="false">Many people mistakenly think a tomato is a vegetable. However, because a tomato is the fertilized ovary of a tomato plant and contains seeds, it a fruit.</choicehint>
</choice>
<compoundhint value="A B D">An apple, pumpkin, and tomato are all fruits as they all are fertilized ovaries of a plant and contain seeds.</compoundhint>
<compoundhint value="A B C D">You are correct that an apple, pumpkin, and tomato are all fruits as they all are fertilized ovaries of a plant and contain seeds. However, a potato is not a fruit as it is an edible part of a plant in tuber form and is classified as a vegetable.</compoundhint>
</checkboxgroup>
</choiceresponse>
<demandhint>
<hint>A fruit is the fertilized ovary from a flower.</hint>
<hint>A fruit contains seeds of the plant.</hint>
</demandhint>
</problem>
...@@ -5,27 +5,28 @@ metadata: ...@@ -5,27 +5,28 @@ metadata:
data: | data: |
<problem> <problem>
<p> <p>
Circuit schematic problems allow students to create virtual circuits by Circuit schematic problems allow students to create virtual circuits by
arranging elements such as voltage sources, capacitors, resistors, and arranging elements such as voltage sources, capacitors, resistors, and
MOSFETs on an interactive grid. The system evaluates a DC, AC, or MOSFETs on an interactive grid. The system evaluates a DC, AC, or
transient analysis of the circuit. transient analysis of the circuit.
</p> </p>
<p> <p>
For more information, see For more information, see
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/circuit_schematic_builder.html" target="_blank"> <a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/circuit_schematic_builder.html" target="_blank">
Circuit Schematic Builder Problem</a> in <i>Building and Running an edX Course</i>. Circuit Schematic Builder Problem</a> in <i>Building and Running an edX Course</i>.
</p> </p>
<p> <p>
When you add the problem, be sure to select <strong>Settings</strong> When you add the problem, be sure to select <strong>Settings</strong>
to specify a <strong>Display Name</strong> and other values that apply. to specify a <strong>Display Name</strong> and other values that apply.
</p> </p>
<p>You can use the following example problems as models.</p> <p>You can use the following example problems as models.</p>
<p>Make a voltage divider that splits the provided voltage evenly.</p>
<schematicresponse> <schematicresponse>
<center> <label>Make a voltage divider that splits the provided voltage evenly.</label>
<schematic height="500" width="600" parts="g,r" analyses="dc" <center>
initial_value="[[&quot;v&quot;,[168,144,0],{&quot;value&quot;:&quot;dc(1)&quot;,&quot;_json_&quot;:0},[&quot;1&quot;,&quot;0&quot;]],[&quot;r&quot;,[296,120,0],{&quot;r&quot;:&quot;1&quot;,&quot;_json_&quot;:1},[&quot;1&quot;,&quot;output&quot;]],[&quot;L&quot;,[296,168,3],{&quot;label&quot;:&quot;output&quot;,&quot;_json_&quot;:2},[&quot;output&quot;]],[&quot;w&quot;,[296,216,168,216]],[&quot;w&quot;,[168,216,168,192]],[&quot;w&quot;,[168,144,168,120]],[&quot;w&quot;,[168,120,296,120]],[&quot;g&quot;,[168,216,0],{&quot;_json_&quot;:7},[&quot;0&quot;]],[&quot;view&quot;,-67.49999999999994,-78.49999999999994,1.6000000000000003,&quot;50&quot;,&quot;10&quot;,&quot;1G&quot;,null,&quot;100&quot;,&quot;1&quot;,&quot;1000&quot;]]"/> <schematic height="500" width="600" parts="g,r" analyses="dc"
</center> initial_value="[[&quot;v&quot;,[168,144,0],{&quot;value&quot;:&quot;dc(1)&quot;,&quot;_json_&quot;:0},[&quot;1&quot;,&quot;0&quot;]],[&quot;r&quot;,[296,120,0],{&quot;r&quot;:&quot;1&quot;,&quot;_json_&quot;:1},[&quot;1&quot;,&quot;output&quot;]],[&quot;L&quot;,[296,168,3],{&quot;label&quot;:&quot;output&quot;,&quot;_json_&quot;:2},[&quot;output&quot;]],[&quot;w&quot;,[296,216,168,216]],[&quot;w&quot;,[168,216,168,192]],[&quot;w&quot;,[168,144,168,120]],[&quot;w&quot;,[168,120,296,120]],[&quot;g&quot;,[168,216,0],{&quot;_json_&quot;:7},[&quot;0&quot;]],[&quot;view&quot;,-67.49999999999994,-78.49999999999994,1.6000000000000003,&quot;50&quot;,&quot;10&quot;,&quot;1G&quot;,null,&quot;100&quot;,&quot;1&quot;,&quot;1000&quot;]]"/>
</center>
<answer type="loncapa/python"> <answer type="loncapa/python">
dc_value = "dc analysis not found" dc_value = "dc analysis not found"
for response in submission[0]: for response in submission[0]:
...@@ -38,14 +39,26 @@ data: | ...@@ -38,14 +39,26 @@ data: |
else: else:
correct = ['incorrect'] correct = ['incorrect']
</answer> </answer>
</schematicresponse> <solution>
<p>Make a high-pass filter.</p> <div class="detailed-solution">
<schematicresponse> <p>Explanation</p>
<center> <p>
<schematic height="500" width="600" parts="g,r,s,c" analyses="ac" You can form a voltage divider that evenly divides the input
submit_analyses="{&quot;ac&quot;:[[&quot;NodeA&quot;,1,9]]}" voltage with two identically valued resistors, with the sampled
initial_value="[[&quot;v&quot;,[160,152,0],{&quot;name&quot;:&quot;v1&quot;,&quot;value&quot;:&quot;sin(0,1,1,0,0)&quot;,&quot;_json_&quot;:0},[&quot;1&quot;,&quot;0&quot;]],[&quot;w&quot;,[160,200,240,200]],[&quot;g&quot;,[160,200,0],{&quot;_json_&quot;:2},[&quot;0&quot;]],[&quot;L&quot;,[240,152,3],{&quot;label&quot;:&quot;NodeA&quot;,&quot;_json_&quot;:3},[&quot;NodeA&quot;]],[&quot;s&quot;,[240,152,0],{&quot;color&quot;:&quot;cyan&quot;,&quot;offset&quot;:&quot;0&quot;,&quot;_json_&quot;:4},[&quot;NodeA&quot;]],[&quot;view&quot;,64.55878906250004,54.114697265625054,2.5000000000000004,&quot;50&quot;,&quot;10&quot;,&quot;1G&quot;,null,&quot;100&quot;,&quot;1&quot;,&quot;1000&quot;]]"/> voltage taken in between the two.
</center> </p>
<p><img src="/static/images/voltage_divider.png" alt=""/></p>
</div>
</solution>
</schematicresponse>
<schematicresponse>
<label>Make a high-pass filter.</label>
<center>
<schematic height="500" width="600" parts="g,r,s,c" analyses="ac"
submit_analyses="{&quot;ac&quot;:[[&quot;NodeA&quot;,1,9]]}"
initial_value="[[&quot;v&quot;,[160,152,0],{&quot;name&quot;:&quot;v1&quot;,&quot;value&quot;:&quot;sin(0,1,1,0,0)&quot;,&quot;_json_&quot;:0},[&quot;1&quot;,&quot;0&quot;]],[&quot;w&quot;,[160,200,240,200]],[&quot;g&quot;,[160,200,0],{&quot;_json_&quot;:2},[&quot;0&quot;]],[&quot;L&quot;,[240,152,3],{&quot;label&quot;:&quot;NodeA&quot;,&quot;_json_&quot;:3},[&quot;NodeA&quot;]],[&quot;s&quot;,[240,152,0],{&quot;color&quot;:&quot;cyan&quot;,&quot;offset&quot;:&quot;0&quot;,&quot;_json_&quot;:4},[&quot;NodeA&quot;]],[&quot;view&quot;,64.55878906250004,54.114697265625054,2.5000000000000004,&quot;50&quot;,&quot;10&quot;,&quot;1G&quot;,null,&quot;100&quot;,&quot;1&quot;,&quot;1000&quot;]]"/>
</center>
<answer type="loncapa/python"> <answer type="loncapa/python">
ac_values = None ac_values = None
for response in submission[0]: for response in submission[0]:
...@@ -60,24 +73,17 @@ data: | ...@@ -60,24 +73,17 @@ data: |
else: else:
correct = ['incorrect'] correct = ['incorrect']
</answer> </answer>
</schematicresponse> <solution>
<div class="detailed-solution">
<solution> <p>Explanation</p>
<div class="detailed-solution"> <p>
<p>Explanation</p> You can form a simple high-pass filter without any further
<p> constraints by simply putting a resistor in series with a
You can form a voltage divider that evenly divides the input capacitor. The actual values of the components do not really
voltage with two identically valued resistors, with the sampled matter in this problem.
voltage taken in between the two. </p>
</p> <p><img src="/static/images/high_pass_filter.png" alt=""/></p>
<p><img src="/static/images/voltage_divider.png" alt=""/></p> </div>
<p> </solution>
You can form a simple high-pass filter without any further </schematicresponse>
constraints by simply putting a resistor in series with a
capacitor. The actual values of the components do not really
matter in this problem.
</p>
<p><img src="/static/images/high_pass_filter.png" alt=""/></p>
</div>
</solution>
</problem> </problem>
...@@ -4,33 +4,54 @@ metadata: ...@@ -4,33 +4,54 @@ metadata:
markdown: !!null markdown: !!null
data: | data: |
<problem> <problem>
<p> <p>
In custom Python-evaluated input (also called "write-your-own-grader" In custom Python-evaluated input (also called "write-your-own-grader"
problems), the grader uses a Python script that you create and embed in problems), the grader uses a Python script that you create and embed in
the problem to evaluate a learner's response or provide hints. These the problem to evaluate a learner's response or provide hints. These
problems can be any type. Numerical input and text input problems are problems can be any type. Numerical input and text input problems are
the most common write-your-own-grader problems. the most common write-your-own-grader problems.
</p> </p>
<p> <p>
You can use script tag format or answer tag format to create these problems. You can use script tag format or answer tag format to create these problems.
</p> </p>
<p> <p>
You can create custom Python-evaluated input problems that provide You can create custom Python-evaluated input problems that provide
partial credit or that randomize variables in the Python code. You can partial credit or that randomize variables in the Python code. You can
also add images to the solution by using an HTML "img" tag. Note that also add images to the solution by using an HTML "img" tag. Note that
the "img" tag must be between the "div" tags that are inside the the "img" tag must be between the "div" tags that are inside the
"solution" tags, and that learners do not see these images until they "solution" tags, and that learners do not see these images until they
click the "Show Answer" button. click the "Show Answer" button.
</p> </p>
<p> For more information, see <a <p>
href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/custom_python.html" target="_blank"> For more information, see <a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/custom_python.html" target="_blank">
Write-Your-Own-Grader Problem</a> in <i>Building and Running an edX Course</i>. Write-Your-Own-Grader Problem</a> in <i>Building and Running an edX Course</i>.
</p> </p>
<p>When you add the problem, be sure to select <strong>Settings</strong> <p>
to specify a <strong>Display Name</strong> and other values that apply.</p> When you add the problem, be sure to select <strong>Settings</strong>
<p>You can use the following example problem as a model.</p> to specify a <strong>Display Name</strong> and other values that apply.
<hr /> </p>
<p>You can use the following example problem as a model.</p>
<hr/>
<customresponse cfn="test_add_to_ten">
<script type="loncapa/python">
def test_add_to_ten(expect, ans):
return test_add(10, ans)
</script>
<label>Enter two integers that sum to 10.</label>
<textline size="40" correct_answer="3" label="Integer #1"/><br/>
<textline size="40" correct_answer="7" label="Integer #2"/>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Any set of integers on the line \(y = 10 - x\) satisfy these constraints.</p>
</div>
</solution>
</customresponse>
<customresponse cfn="test_add" expect="20">
<script type="loncapa/python"> <script type="loncapa/python">
def test_add(expect, ans): def test_add(expect, ans):
...@@ -41,29 +62,20 @@ data: | ...@@ -41,29 +62,20 @@ data: |
except ValueError: except ValueError:
return False return False
def test_add_to_ten(expect, ans):
return test_add(10, ans)
</script> </script>
<p>Enter two integers that sum to 10.</p> <label>Enter two integers that sum to 20.</label>
<customresponse cfn="test_add_to_ten"> <textline size="40" correct_answer="11" label="Integer #1"/><br/>
<textline size="40" correct_answer="3" label="Integer #1"/><br/> <textline size="40" correct_answer="9" label="Integer #2"/>
<textline size="40" correct_answer="7" label="Integer #2"/> <solution>
</customresponse> <div class="detailed-solution">
<p>Enter two integers that sum to 20.</p> <p>Explanation</p>
<customresponse cfn="test_add" expect="20"> <p>Any set of integers on the line \(y = 20 - x\) satisfy these constraints.</p>
<textline size="40" correct_answer="11" label="Integer #1"/><br/> <p>To add an image to the solution, use an HTML "img" tag. Make sure to include alt text.</p>
<textline size="40" correct_answer="9" label="Integer #2"/> <img src="/static/images/placeholder-image.png" width="400"
alt="Description of image, with a primary goal of explaining its
relevance to the problem or concept being illustrated for someone
who is unable to see the image."/>
</div>
</solution>
</customresponse> </customresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Any set of integers on the line \(y = 10 - x\) and \(y = 20 - x\) satisfy these constraints.</p>
<p>To add an image to the solution, use an HTML "img" tag. Make sure to include alt text.</p>
<img src="/static/images/placeholder-image.png" width="400"
alt="Description of image, with a primary goal of explaining its
relevance to the problem or concept being illustrated for someone
who is unable to see the image."/>
</div>
</solution>
</problem> </problem>
...@@ -5,21 +5,22 @@ metadata: ...@@ -5,21 +5,22 @@ metadata:
showanswer: never showanswer: never
data: | data: |
<problem> <problem>
<p>In drag and drop problems, students respond to a question by dragging text or objects to a specific location on an image.</p>
<p> <p>
In drag and drop problems, students respond to a question by dragging text or objects to a specific location on an image. For more information, see
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/drag_and_drop_deprecated.html" target="_blank">
Drag and Drop Problem (Deprecated)</a> in <i>Building and Running an edX Course</i>.
</p> </p>
<p> <p>
For more information, see When you add the problem, be sure to select <strong>Settings</strong>
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/drag_and_drop_deprecated.html" target="_blank"> to specify a <strong>Display Name</strong> and other values that apply.
Drag and Drop Problem (Deprecated)</a> in <i>Building and Running an edX Course</i>.</p> </p>
<p>When you add the problem, be sure to select <strong>Settings</strong>
to specify a <strong>Display Name</strong> and other values that apply.</p>
<p>You can use the following example problems as models.</p> <p>You can use the following example problems as models.</p>
<hr /> <hr/>
<customresponse> <customresponse>
<h3>Simple Drag and Drop</h3> <h3>Simple Drag and Drop</h3>
<p>Drag each word in the scrollbar to the bucket that matches the number of letters in the word.</p> <p>Drag each word in the scrollbar to the bucket that matches the number of letters in the word.</p>
<drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/L9_buckets.png"> <drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/L9_buckets.png">
<draggable id="1" label="a"/> <draggable id="1" label="a"/>
<draggable id="2" label="bog"/> <draggable id="2" label="bog"/>
<draggable id="3" label="droll"/> <draggable id="3" label="droll"/>
...@@ -31,7 +32,7 @@ data: | ...@@ -31,7 +32,7 @@ data: |
<draggable id="9" label="tap"/> <draggable id="9" label="tap"/>
<draggable id="10" label="strop"/> <draggable id="10" label="strop"/>
<draggable id="11" label="few"/> <draggable id="11" label="few"/>
</drag_and_drop_input> </drag_and_drop_input>
<answer type="loncapa/python"> <answer type="loncapa/python">
correct_answer = { correct_answer = {
'1': [[70, 150], 121], '1': [[70, 150], 121],
...@@ -50,14 +51,14 @@ data: | ...@@ -50,14 +51,14 @@ data: |
else: else:
correct = ['incorrect'] correct = ['incorrect']
</answer> </answer>
</customresponse> </customresponse>
<customresponse> <customresponse>
<h3>Drag and Drop with Outline</h3> <h3>Drag and Drop with Outline</h3>
<p>Label the hydrogen atoms connected with the left carbon atom.</p> <p>Label the hydrogen atoms connected with the left carbon atom.</p>
<drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/ethglycol.jpg" target_outline="true" one_per_target="true" no_labels="true" label_bg_color="rgb(222, 139, 238)"> <drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/ethglycol.jpg" target_outline="true" one_per_target="true" no_labels="true" label_bg_color="rgb(222, 139, 238)">
<draggable id="1" label="Hydrogen" /> <draggable id="1" label="Hydrogen" />
<draggable id="2" label="Hydrogen" /> <draggable id="2" label="Hydrogen" />
<target id="t1_o" x="10" y="67" w="100" h="100"/> <target id="t1_o" x="10" y="67" w="100" h="100"/>
<target id="t2" x="133" y="3" w="70" h="70"/> <target id="t2" x="133" y="3" w="70" h="70"/>
<target id="t3" x="2" y="384" w="70" h="70"/> <target id="t3" x="2" y="384" w="70" h="70"/>
......
...@@ -3,54 +3,52 @@ metadata: ...@@ -3,54 +3,52 @@ metadata:
display_name: Math Expression Input display_name: Math Expression Input
markdown: !!null markdown: !!null
data: | data: |
<problem> <problem>
<p> <p>
In math expression input problems, learners enter text that represents a In math expression input problems, learners enter text that represents a
mathematical expression into a field, and text is converted to a symbolic mathematical expression into a field, and text is converted to a symbolic
expression that appears below that field. You can refer learners to expression that appears below that field. You can refer learners to
<a href="http://edx.readthedocs.io/projects/edx-guide-for-students/en/latest/completing_assignments/SFD_mathformatting.html" target="_blank"> <a href="http://edx.readthedocs.io/projects/edx-guide-for-students/en/latest/completing_assignments/SFD_mathformatting.html" target="_blank">
Entering Mathematical and Scientific Expressions</a> in the <i>EdX Learner's Entering Mathematical and Scientific Expressions</a> in the <i>EdX Learner's
Guide</i> for information about how to enter text into the field. Guide</i> for information about how to enter text into the field.
</p> </p>
<p> <p>
Math expression problems can include unknown variables and relatively Math expression problems can include unknown variables and relatively
complicated symbolic expressions. The grader uses a numerical sampling to complicated symbolic expressions. The grader uses a numerical sampling to
determine whether the student’s response matches your math expression, to a determine whether the student’s response matches your math expression, to a
specified numerical tolerance. You must specify the allowed variables in the specified numerical tolerance. You must specify the allowed variables in the
expression as well as the range of values for each variable. expression as well as the range of values for each variable.
</p> </p>
<p> <p>
To create these problems, you use MathJax to change your plain text into To create these problems, you use MathJax to change your plain text into
"beautiful math." For more information about how to use MathJax in Studio, "beautiful math." For more information about how to use MathJax in Studio,
see <a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/mathjax.html" target="_blank"> see <a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/mathjax.html" target="_blank">
A Brief Introduction to MathJax in Studio</a> in <i>Building and Running an edx A Brief Introduction to MathJax in Studio</a> in <i>Building and Running an edx
Course</i>. Course</i>.
</p> </p>
<p>When you add the problem, be sure to select <strong>Settings</strong> <p>
to specify a <strong>Display Name</strong> and other values that apply.</p> When you add the problem, be sure to select <strong>Settings</strong>
<p>You can use the following example problems as models.</p> to specify a <strong>Display Name</strong> and other values that apply.
</p>
<p>You can use the following example problems as models.</p>
<p>Write an expression for the product of \( R_1\), \( R_2\), and <formularesponse type="ci" samples="R_1,R_2,R_3@1,2,3:3,4,5#10" answer="$VoVi">
the inverse of \( R_3\) .</p> <label>Write an expression for the product of \( R_1\), \( R_2\), and the inverse of \( R_3\).</label>
<formularesponse type="ci" samples="R_1,R_2,R_3@1,2,3:3,4,5#10" answer="$VoVi"> <responseparam type="tolerance" default="0.00001"/>
<responseparam type="tolerance" default="0.00001"/> <formulaequationinput size="40" label="Enter the equation"/>
<formulaequationinput size="40" label="Enter the equation"/> </formularesponse>
</formularesponse>
<script type="loncapa/python"> <script type="loncapa/python">
VoVi = "(R_1*R_2)/R_3" VoVi = "(R_1*R_2)/R_3"
</script> </script>
<p>Let \( x\) be a variable, and let \( n\) be an arbitrary constant. <script type="loncapa/python">
What is the derivative of \( x^n\)?</p> derivative = "n*x^(n-1)"
</script>
<script type="loncapa/python"> <formularesponse type="ci" samples="x,n@1,2:3,4#10" answer="$derivative">
derivative = "n*x^(n-1)" <label>Let \( x\) be a variable, and let \( n\) be an arbitrary constant. What is the derivative of \( x^n\)?</label>
</script> <responseparam type="tolerance" default="0.00001"/>
<formulaequationinput size="40" label="Enter the equation"/>
<formularesponse type="ci" samples="x,n@1,2:3,4#10" answer="$derivative"> </formularesponse>
<responseparam type="tolerance" default="0.00001"/> </problem>
<formulaequationinput size="40" label="Enter the equation"/>
</formularesponse>
</problem>
...@@ -2,34 +2,29 @@ ...@@ -2,34 +2,29 @@
metadata: metadata:
display_name: Image Mapped Input display_name: Image Mapped Input
markdown: !!null markdown: !!null
data: | data: |
<problem> <problem>
<p> <p>
In an image mapped input problem, also known as a "pointing on a picture" In an image mapped input problem, also known as a "pointing on a picture" problem, students click inside a defined region in an image. You define this region by including coordinates in the body of the problem. You can define one rectangular region,
problem, students click inside a defined region in an image. You define this multiple rectangular regions, or one non-rectangular region. For more information, see
region by including coordinates in the body of the problem. You can define <a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/image_mapped_input.html" target="_blank">Image Mapped Input Problem</a>
one rectangular region, multiple rectangular regions, or one non-rectangular in
region. For more information, see <i>Building and Running an edx Course</i>.
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/image_mapped_input.html" target="_blank">Image Mapped Input </p>
Problem</a> in <i>Building and Running an edx Course</i>. <p>When you add the problem, be sure to select
</p> <strong>Settings</strong>
<p>When you add the problem, be sure to select <strong>Settings</strong> to specify a
to specify a <strong>Display Name</strong> and other values that apply.</p> <strong>Display Name</strong>
<p>You can use the following example problem as a model.</p> and other values that apply.</p>
<p>You can use the following example problem as a model.</p>
<p>What country is home to the Great Pyramid of Giza as well as the cities <imageresponse>
of Cairo and Memphis? Click the country on the map below.</p> <label>What country is home to the Great Pyramid of Giza as well as the cities of Cairo and Memphis? Click the country on the map below.</label>
<imageresponse> <imageinput src="https://studio.edx.org/c4x/edX/DemoX/asset/Africa.png" width="600" height="638" rectangle="(338,98)-(412,168)" alt="Map of Africa"/>
<imageinput src="https://studio.edx.org/c4x/edX/DemoX/asset/Africa.png" <solution>
width="600" height="638" rectangle="(338,98)-(412,168)" alt="Map of <div class="detailed-solution">
Africa"/> <p>Explanation</p>
</imageresponse> <p>Egypt is home to not only the Pyramids, Cairo, and Memphis, but also the Sphinx and the ancient Royal Library of Alexandria.</p>
<solution> </div>
<div class="detailed-solution"> </solution>
<p>Explanation</p> </imageresponse>
<p>Egypt is home to not only the Pyramids, Cairo, and Memphis, but also </problem>
the Sphinx and the ancient Royal Library of Alexandria.</p>
</div>
</solution>
</problem>
...@@ -5,31 +5,36 @@ metadata: ...@@ -5,31 +5,36 @@ metadata:
showanswer: never showanswer: never
data: | data: |
<problem> <problem>
<p> <p>
In these problems (also called custom JavaScript problems or JS Input In these problems (also called custom JavaScript problems or JS Input
problems), you add a problem or tool that uses JavaScript in Studio. problems), you add a problem or tool that uses JavaScript in Studio.
Studio embeds the problem in an IFrame so that your students can Studio embeds the problem in an IFrame so that your students can
interact with it in the LMS. You can grade your students' work using interact with it in the LMS. You can grade your students' work using
JavaScript and some basic Python, and the grading is integrated into the JavaScript and some basic Python, and the grading is integrated into the
edX grading system. edX grading system.
</p> </p>
<p> <p>
The JS Input problem that you create must use HTML, JavaScript, and The JS Input problem that you create must use HTML, JavaScript, and
cascading style sheets (CSS). You can use any application creation tool, cascading style sheets (CSS). You can use any application creation tool,
such as the Google Web Toolkit (GWT), to create your JS Input problem. such as the Google Web Toolkit (GWT), to create your JS Input problem.
</p> </p>
<p> <p>
For more information, see For more information, see
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/custom_javascript.html" target="_blank"> <a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/custom_javascript.html" target="_blank">
Custom JavaScript Problem</a> in <i>Building and Running an edX Course</i>. Custom JavaScript Problem</a> in <i>Building and Running an edX Course</i>.
</p> </p>
<p>JavaScript developers can also see <p>
<a href="http://edx.readthedocs.io/projects/edx-developer-guide/en/latest/extending_platform/javascript.html" target="_blank"> JavaScript developers can also see
Custom JavaScript Applications</a> in the <i>EdX Developer's Guide</i>.</p> <a href="http://edx.readthedocs.io/projects/edx-developer-guide/en/latest/extending_platform/javascript.html" target="_blank">
<p>When you add the problem, be sure to select <strong>Settings</strong> Custom JavaScript Applications</a> in the <i>EdX Developer's Guide</i>.
to specify a <strong>Display Name</strong> and other values that apply.</p> </p>
<p>You can use the following example problem as a model.</p> <p>
When you add the problem, be sure to select <strong>Settings</strong>
to specify a <strong>Display Name</strong> and other values that apply.
</p>
<p>You can use the following example problem as a model.</p>
<customresponse cfn="vglcfn">
<script type="loncapa/python"> <script type="loncapa/python">
<![CDATA[ <![CDATA[
import json import json
...@@ -53,16 +58,14 @@ data: | ...@@ -53,16 +58,14 @@ data: |
''' '''
]]> ]]>
</script> </script>
<p>In the following image, click the objects until the cone is yellow <label>In the following image, click the objects until the cone is yellow and the cube is blue.</label>
and the cube is blue.</p> <jsinput gradefn="WebGLDemo.getGrade"
<customresponse cfn="vglcfn"> get_statefn="WebGLDemo.getState"
<jsinput gradefn="WebGLDemo.getGrade" set_statefn="WebGLDemo.setState"
get_statefn="WebGLDemo.getState" initial_state='{"selectedObjects":{"cube":true,"cylinder":false}}'
set_statefn="WebGLDemo.setState" width="400"
initial_state='{"selectedObjects":{"cube":true,"cylinder":false}}' height="400"
width="400" html_file="https://studio.edx.org/c4x/edX/DemoX/asset/webGLDemo.html"
height="400" sop="false"/>
html_file="https://studio.edx.org/c4x/edX/DemoX/asset/webGLDemo.html" </customresponse>
sop="false"/>
</customresponse>
</problem> </problem>
...@@ -88,37 +88,41 @@ metadata: ...@@ -88,37 +88,41 @@ metadata:
data: | data: |
<?xml version="1.0"?> <?xml version="1.0"?>
<problem showanswer="closed" rerandomize="never" weight="10" display_name="lec1_Q2"> <problem>
<p>If you have a problem that is already written in LaTeX, you can use this problem type to <p>
easily convert your code into XML. After you paste your code into the LaTeX editor, If you have a problem that is already written in LaTeX, you can use this problem type to
you only need to make a few minor adjustments.</p> easily convert your code into XML. After you paste your code into the LaTeX editor,
<p>For more information, see you only need to make a few minor adjustments.
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/problem_in_latex.html" target="_blank"> </p>
Problem Written in LaTeX</a> in <i>Building and Running an edX Course</i>.</p> <p>
For more information, see
<a href="http://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/problem_in_latex.html" target="_blank">
Problem Written in LaTeX</a> in <i>Building and Running an edX Course</i>.
</p>
<p>You can use the following example problems as models.</p> <p>You can use the following example problems as models.</p>
<p><strong>Example Option Problem</strong></p> <p><strong>Example Option Problem</strong></p>
<p>Which of the following countries celebrates its independence on August 15?</p> <br/>
<br/> <optionresponse>
<optionresponse> <label>Which of the following countries celebrates its independence on August 15?</label>
<optioninput options="('India','Spain','China','Bermuda')" correct="India"></optioninput> <optioninput options="('India','Spain','China','Bermuda')" correct="India"></optioninput>
</optionresponse>
<solution> <solution>
<div class="detailed-solution"> <div class="detailed-solution">
<p>Explanation</p> <p>Explanation</p>
<p>India became an independent nation on August 15, 1947.</p> <p>India became an independent nation on August 15, 1947.</p>
</div> </div>
</solution> </solution>
<br/> </optionresponse>
<p><strong>Example Multiple Choice Problem</strong></p> <br/>
<p>Which of the following countries has the largest population?</p>
<multiplechoiceresponse> <p><strong>Example Multiple Choice Problem</strong></p>
<choicegroup type="MultipleChoice"> <multiplechoiceresponse>
<choice correct="false" name="brazil">Brazil</choice> <label>Which of the following countries has the largest population?</label>
<choice correct="false" name="germany">Germany</choice> <choicegroup type="MultipleChoice">
<choice correct="true" name="indonesia">Indonesia</choice> <choice correct="false" name="brazil">Brazil</choice>
<choice correct="false" name="russia">Russia</choice> <choice correct="false" name="germany">Germany</choice>
</choicegroup> <choice correct="true" name="indonesia">Indonesia</choice>
</multiplechoiceresponse> <choice correct="false" name="russia">Russia</choice>
</choicegroup>
<solution> <solution>
<div class="detailed-solution"> <div class="detailed-solution">
<p>Explanation</p> <p>Explanation</p>
...@@ -129,38 +133,61 @@ data: | ...@@ -129,38 +133,61 @@ data: |
<p>The population of Germany is approximately 81 million.</p> <p>The population of Germany is approximately 81 million.</p>
</div> </div>
</solution> </solution>
<br/> </multiplechoiceresponse>
<p><strong>Example Math Expression Problem</strong></p> <br/>
<p>What is Einstein's equation for the energy equivalent of a mass [mathjaxinline]m[/mathjaxinline]?</p>
<symbolicresponse expect="m*c^2"> <p><strong>Example Math Expression Problem</strong></p>
<textline size="90" correct_answer="m*c^2" math="1"/> <symbolicresponse expect="m*c^2">
</symbolicresponse> <label>What is Einstein's equation for the energy equivalent of a mass [mathjaxinline]m[/mathjaxinline]?</label>
<br/> <textline size="90" correct_answer="m*c^2" math="1"/>
<p><strong>Example Numerical Problem</strong></p> </symbolicresponse>
<p>Estimate the energy savings (in J/y) if all the people ([mathjaxinline]3\times 10^8[/mathjaxinline]) in the U.&#xA0;S. switched from U.&#xA0;S. code to low-flow shower heads.</p> <br/>
<p style="display:inline">Energy saved = </p>
<numericalresponse inline="1" answer="0.52"> <p><strong>Example Numerical Problem</strong></p>
<textline inline="1"> <numericalresponse inline="1" answer="0.52">
<responseparam type="tolerance" default="0.02"/> <label>Estimate the energy savings (in J/y) if all the people ([mathjaxinline]3\times 10^8[/mathjaxinline]) in the U.&#xA0;S. switched from U.&#xA0;S. code to low-flow shower heads.</label>
</textline> <p style="display:inline">Energy saved = </p>
<p style="display:inline">&#xA0;EJ/year</p> <textline inline="1">
</numericalresponse> <responseparam type="tolerance" default="0.02"/>
<br/> </textline>
<p><strong>Example Fill-in-the-Blank Problem</strong></p> <p style="display:inline">&#xA0;EJ/year</p>
<p>What was the first post-secondary school in China to allow both male and female students?</p> </numericalresponse>
<stringresponse answer="Nanjing Higher Normal Institute" type="ci" > <br/>
<additional_answer>National Central University</additional_answer>
<additional_answer>Nanjing University</additional_answer> <p><strong>Example Fill-in-the-Blank Problem</strong></p>
<textline label="What was the first post-secondary school in China to allow both male and female students?" size="40"/> <stringresponse answer="Nanjing Higher Normal Institute" type="ci" >
</stringresponse> <label>What was the first post-secondary school in China to allow both male and female students?</label>
<additional_answer>National Central University</additional_answer>
<additional_answer>Nanjing University</additional_answer>
<textline label="What was the first post-secondary school in China to allow both male and female students?" size="40"/>
<solution> <solution>
<div class="detailed-solution"> <div class="detailed-solution">
<p>Explanation</p> <p>Explanation</p>
<p>Nanjing Higher Normal Institute first admitted female students in 1920.</p> <p>Nanjing Higher Normal Institute first admitted female students in 1920.</p>
</div> </div>
</solution> </solution>
<br/> </stringresponse>
<p><strong>Example Custom Python-Evaluated Input Problem</strong></p> <br/>
<p><strong>Example Custom Python-Evaluated Input Problem</strong></p>
<customresponse cfn="test_add_to_ten">
<script type="loncapa/python">
def test_add_to_ten(expect, ans):
return test_add(10, ans)
</script>
<label>Enter two integers that sum to 10.</label>
<textline size="40" correct_answer="3" label="Integer #1"/><br/>
<textline size="40" correct_answer="7" label="Integer #2"/>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Any set of integers on the line \(y = 10 - x\) satisfy these constraints.</p>
</div>
</solution>
</customresponse>
<customresponse cfn="test_add" expect="20">
<script type="loncapa/python"> <script type="loncapa/python">
def test_add(expect, ans): def test_add(expect, ans):
try: try:
...@@ -169,37 +196,30 @@ data: | ...@@ -169,37 +196,30 @@ data: |
return (a1+a2) == int(expect) return (a1+a2) == int(expect)
except ValueError: except ValueError:
return False return False
def test_add_to_ten(expect, ans):
return test_add(10, ans)
</script> </script>
<p>Enter two integers that sum to 10.</p> <label>Enter two integers that sum to 20.</label>
<customresponse cfn="test_add_to_ten"> <textline size="40" correct_answer="11" label="Integer #1"/><br/>
<textline size="40" correct_answer="3" label="Integer #1"/><br/> <textline size="40" correct_answer="9" label="Integer #2"/>
<textline size="40" correct_answer="7" label="Integer #2"/> <solution>
</customresponse> <div class="detailed-solution">
<p>Enter two integers that sum to 20.</p> <p>Explanation</p>
<customresponse cfn="test_add" expect="20"> <p>Any set of integers on the line \(y = 20 - x\) satisfy these constraints.</p>
<textline size="40" correct_answer="11" label="Integer #1"/><br/> <p>To add an image to the solution, use an HTML "img" tag. Make sure to include alt text.</p>
<textline size="40" correct_answer="9" label="Integer #2"/> <img src="/static/images/placeholder-image.png" width="400" alt="Description of image"/>
</customresponse> </div>
<solution> </solution>
<div class="detailed-solution"> </customresponse>
<p>Explanation</p>
<p>Any set of integers on the line \(y = 10 - x\) and \(y = 20 - x\) satisfy these constraints.</p>
<p>To add an image to the solution, use an HTML "img" tag. Make sure to include alt text.</p>
<img src="/static/images/placeholder-image.png" width="400" alt="Description of image"/>
</div>
</solution>
<br/> <br/>
<p><strong>Example Image Mapped Input Problem</strong></p> <p><strong>Example Image Mapped Input Problem</strong></p>
<p>What country is home to the Great Pyramid of Giza as well as the cities <imageresponse>
of Cairo and Memphis? Click the country on the map below.</p> <label>
<imageresponse> What country is home to the Great Pyramid of Giza as well as the cities
<imageinput src="https://studio.edx.org/c4x/edX/DemoX/asset/Africa.png" of Cairo and Memphis? Click the country on the map below.
width="600" height="638" rectangle="(338,98)-(412,168)" alt="Map of </label>
Africa"/> <imageinput src="https://studio.edx.org/c4x/edX/DemoX/asset/Africa.png"
</imageresponse> width="600" height="638" rectangle="(338,98)-(412,168)" alt="Map of
Africa"/>
<solution> <solution>
<div class="detailed-solution"> <div class="detailed-solution">
<p>Explanation</p> <p>Explanation</p>
...@@ -207,22 +227,24 @@ data: | ...@@ -207,22 +227,24 @@ data: |
the Sphinx and the ancient Royal Library of Alexandria.</p> the Sphinx and the ancient Royal Library of Alexandria.</p>
</div> </div>
</solution> </solution>
<br/> </imageresponse>
<p><strong>Example Hidden Explanation</strong></p> <br/>
<p>You can provide additional information that only appears at certain times by including a "showhide" flag. </p>
<p> <p><strong>Example Hidden Explanation</strong></p>
<table class="wikitable collapsible collapsed"> <p>You can provide additional information that only appears at certain times by including a "showhide" flag. </p>
<tbody> <p>
<tr> <table class="wikitable collapsible collapsed">
<th> More Information [<a href="javascript:$('#sh1').toggle()" id="sh1l">show</a>]</th> <tbody>
</tr> <tr>
<tr id="sh1" style="display:none"> <th> More Information [<a href="javascript:$('#sh1').toggle()" id="sh1l">show</a>]</th>
<td> </tr>
<p>This is a hidden explanation. It can contain equations, such as [mathjaxinline]\alpha = \frac{2}{\sqrt {1+\gamma }}[/mathjaxinline]. </p> <tr id="sh1" style="display:none">
<p>This is additional text after the hidden explanation. </p> <td>
</td> <p>This is a hidden explanation. It can contain equations, such as [mathjaxinline]\alpha = \frac{2}{\sqrt {1+\gamma }}[/mathjaxinline]. </p>
</tr> <p>This is additional text after the hidden explanation. </p>
</tbody> </td>
</table> </tr>
</p> </tbody>
</table>
</p>
</problem> </problem>
...@@ -22,32 +22,30 @@ metadata: ...@@ -22,32 +22,30 @@ metadata:
The population of Germany is approximately 81 million. The population of Germany is approximately 81 million.
[explanation] [explanation]
data: | data: |
<problem> <problem>
<p>Multiple choice problems allow learners to select only one option. <multiplechoiceresponse>
Learners can see all the options along with the problem text.</p> <p>Multiple choice problems allow learners to select only one option. Learners can see all the options along with the problem text.</p>
<p>When you add the problem, be sure to select <strong>Settings</strong> <p>When you add the problem, be sure to select Settings to specify a Display Name and other values that apply.</p>
to specify a <strong>Display Name</strong> and other values that apply.</p> <p>You can use the following example problem as a model.</p>
<p>You can use the following example problem as a model.</p> <label>Which of the following countries has the largest population?</label>
<p>Which of the following countries has the largest population?</p> <choicegroup label="Which of the following countries has the largest population?" type="MultipleChoice">
<multiplechoiceresponse> <choice correct="false">Brazil
<choicegroup type="MultipleChoice"> <choicehint>timely feedback -- explain why an almost correct answer is wrong</choicehint>
<choice correct="false" name="brazil">Brazil </choice>
<choicehint>timely feedback -- explain why an almost correct answer is wrong</choicehint> <choice correct="false">Germany</choice>
</choice> <choice correct="true">Indonesia</choice>
<choice correct="false" name="germany">Germany</choice> <choice correct="false">Russia</choice>
<choice correct="true" name="indonesia">Indonesia</choice> </choicegroup>
<choice correct="false" name="russia">Russia</choice> <solution>
</choicegroup> <div class="detailed-solution">
</multiplechoiceresponse> <p>Explanation</p>
<solution> <p>According to September 2014 estimates:</p>
<div class="detailed-solution"> <p>The population of Indonesia is approximately 250 million.</p>
<p>Explanation</p> <p>The population of Brazil is approximately 200 million.</p>
<p>According to September 2014 estimates:</p> <p>The population of Russia is approximately 146 million.</p>
<p>The population of Indonesia is approximately 250 million.</p> <p>The population of Germany is approximately 81 million.</p>
<p>The population of Brazil is approximately 200 million.</p> </div>
<p>The population of Russia is approximately 146 million.</p> </solution>
<p>The population of Germany is approximately 81 million.</p> </multiplechoiceresponse>
</div> </problem>
</solution>
</problem>
\ No newline at end of file
...@@ -21,26 +21,32 @@ metadata: ...@@ -21,26 +21,32 @@ metadata:
||A fruit contains seeds of the plant.|| ||A fruit contains seeds of the plant.||
hinted: true hinted: true
data: | data: |
<problem> <problem>
<multiplechoiceresponse>
<p>You can provide feedback for each option in a multiple choice problem.</p> <p>You can provide feedback for each option in a multiple choice problem.</p>
<p>You can also add hints for learners.</p>
<p>You can also add hints for learners.</p> <p>Be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>Use the following example problem as a model.</p>
<p>Use the following example problem as a model.</p> <label>Which of the following is a vegetable?</label>
<choicegroup label="Which of the following is a vegetable?" type="MultipleChoice">
<p>Which of the following is a vegetable?</p> <choice correct="false">apple
<multiplechoiceresponse> <choicehint>An apple is the fertilized ovary that comes from an apple tree and contains seeds, meaning it is a fruit.</choicehint>
<choicegroup type="MultipleChoice"> </choice>
<choice correct="false">apple <choicehint>An apple is the fertilized ovary that comes from an apple tree and contains seeds, meaning it is a fruit.</choicehint></choice> <choice correct="false">pumpkin
<choice correct="false">pumpkin <choicehint>A pumpkin is the fertilized ovary of a squash plant and contains seeds, meaning it is a fruit.</choicehint></choice> <choicehint>A pumpkin is the fertilized ovary of a squash plant and contains seeds, meaning it is a fruit.</choicehint>
<choice correct="true">potato <choicehint>A potato is an edible part of a plant in tuber form and is a vegetable.</choicehint></choice> </choice>
<choice correct="false">tomato <choicehint>Many people mistakenly think a tomato is a vegetable. However, because a tomato is the fertilized ovary of a tomato plant and contains seeds, it is a fruit.</choicehint></choice> <choice correct="true">potato
</choicegroup> <choicehint>A potato is an edible part of a plant in tuber form and is a vegetable.</choicehint>
</multiplechoiceresponse> </choice>
<demandhint> <choice correct="false">tomato
<hint>A fruit is the fertilized ovary from a flower.</hint> <choicehint>Many people mistakenly think a tomato is a vegetable. However, because a tomato is the fertilized ovary of a tomato plant and contains seeds, it is a fruit.</choicehint>
<hint>A fruit contains seeds of the plant.</hint> </choice>
</demandhint> </choicegroup>
</problem> </multiplechoiceresponse>
<demandhint>
<hint>A fruit is the fertilized ovary from a flower.</hint>
<hint>A fruit contains seeds of the plant.</hint>
</demandhint>
</problem>
...@@ -15,44 +15,46 @@ metadata: ...@@ -15,44 +15,46 @@ metadata:
= 9.3*10^7 = 9.3*10^7
or= 9.296*10^7 or= 9.296*10^7
[explanation]
The sun is 93,000,000, or 9.3*10^7, miles away from Earth.
[explanation]
---
>>The square of what number is -100?<< >>The square of what number is -100?<<
= 10*i = 10*i
[explanation] [explanation]
The sun is 93,000,000, or 9.3*10^7, miles away from Earth.
-100 is the square of 10 times the imaginary number, i. -100 is the square of 10 times the imaginary number, i.
[explanation] [explanation]
data: | data: |
<problem> <problem>
<numericalresponse answer="9.3*10^7">
<p>In a numerical input problem, learners enter numbers or a specific and <p>In a numerical input problem, learners enter numbers or a specific and relatively simple mathematical expression. Learners enter the response in plain text, and the system then converts the text to a symbolic expression that learners can see below the response field.</p>
relatively simple mathematical expression. Learners enter the response in <p>The system can handle several types of characters, including basic operators, fractions, exponents, and common constants such as i. You can refer learners to
plain text, and the system then converts the text to a symbolic expression <a href="http://edx.readthedocs.io/projects/edx-guide-for-students/en/latest/completing_assignments/SFD_mathformatting.html#math-formatting" target="_blank">Entering Mathematical and Scientific Expressions</a>in the<i> EdX Learner's Guide</i>
that learners can see below the response field.</p> for information about how to enter text into the field.</p>
<p>When you add the problem, be sure to select <strong>Settings</strong> to specify a <strong>Display Name</strong> and other values that apply.</p>
<p>The system can handle several types of characters, including basic <p>You can use the following example problems as models.</p>
operators, fractions, exponents, and common constants such as i. You can <label>How many miles away from Earth is the sun? Use scientific notation to answer.</label>
refer learners to <formulaequationinput label="How many million miles are between Earth and the sun? Use scientific notation to answer."/>
<a href="http://edx.readthedocs.io/projects/edx-guide-for-students/en/latest/completing_assignments/SFD_mathformatting.html#math-formatting" target="_blank">Entering Mathematical and Scientific Expressions</a> in the <i>EdX Learner's Guide</i> for information about how to enter text into the field.</p> <solution>
<p>When you add the problem, be sure to select <strong>Settings</strong> <div class="detailed-solution">
to specify a <strong>Display Name</strong> and other values that apply.</p> <p>Explanation</p>
<p>The sun is 93,000,000, or 9.3*10^7, miles away from Earth.</p>
<p>You can use the following example problems as models.</p> </div>
<p>How many miles away from Earth is the sun? Use scientific notation to answer.</p> </solution>
<numericalresponse answer="9.3*10^7"> </numericalresponse>
<formulaequationinput label="How many million miles are between Earth and the sun? Use scientific notation to answer." />
</numericalresponse> <numericalresponse answer="10*i">
<label>The square of what number is -100?</label>
<p>The square of what number is -100?</p> <formulaequationinput label="The square of what number is -100?"/>
<numericalresponse answer="10*i"> <solution>
<formulaequationinput label="The square of what number is -100?" /> <div class="detailed-solution">
</numericalresponse> <p>Explanation</p>
<solution> <p>-100 is the square of 10 times the imaginary number, i.</p>
<div class="detailed-solution"> </div>
<p>Explanation</p> </solution>
<p>The sun is 93,000,000, or 9.3*10^7, miles away from Earth.</p> </numericalresponse>
<p>-100 is the square of 10 times the imaginary number, i.</p> </problem>
</div>
</solution>
</problem>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
metadata: metadata:
display_name: Numerical Input with Hints and Feedback display_name: Numerical Input with Hints and Feedback
markdown: | markdown: |
You can provide feedback for correct answers in numerical input problems. You cannot provide feedback for incorrect answers. You can provide feedback for correct answers in numerical input problems. You cannot provide feedback for incorrect answers.
Use feedback for the correct answer to reinforce the process for arriving at the numerical value. Use feedback for the correct answer to reinforce the process for arriving at the numerical value.
...@@ -25,30 +25,27 @@ metadata: ...@@ -25,30 +25,27 @@ metadata:
[explanation] [explanation]
hinted: true hinted: true
data: | data: |
<problem> <problem>
<numericalresponse answer="4">
<p>You can provide feedback for correct answers in numerical input problems. You cannot provide feedback for incorrect answers.</p> <p>You can provide feedback for correct answers in numerical input problems. You cannot provide feedback for incorrect answers.</p>
<p>Use feedback for the correct answer to reinforce the process for arriving at the numerical value.</p>
<p>Use feedback for the correct answer to reinforce the process for arriving at the numerical value.</p> <p>You can also add hints for learners.</p>
<p>Be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>Use the following example problem as a model.</p> <p>Use the following example problem as a model.</p>
<label>What is the arithmetic mean for the following set of numbers? (1, 5, 6, 3, 5)</label>
<p>What is the arithmetic mean for the following set of numbers? (1, 5, 6, 3, 5)</p> <formulaequationinput label="What is the arithmetic mean for the following set of numbers? (1, 5, 6, 3, 5)"/>
<numericalresponse answer="4"> <correcthint>The mean for this set of numbers is 20 / 5, which equals 4.</correcthint>
<formulaequationinput label="What is the arithmetic mean for the following set of numbers? (1, 5, 6, 3, 5)" /> <solution>
<correcthint>The mean for this set of numbers is 20 / 5, which equals 4.</correcthint> <div class="detailed-solution">
</numericalresponse> <p>Explanation</p>
<p>The mean is calculated by summing the set of numbers and dividing by n. In this case: (1 + 5 + 6 + 3 + 5) / 5 = 20 / 5 = 4.</p>
<solution> </div>
<div class="detailed-solution"> </solution>
<p>Explanation</p> </numericalresponse>
<p>The mean is calculated by summing the set of numbers and dividing by n. In this case: (1 + 5 + 6 + 3 + 5) / 5 = 20 / 5 = 4.</p>
</div> <demandhint>
</solution> <hint>The mean is calculated by summing the set of numbers and dividing by n.</hint>
<hint>n is the count of items in the set.</hint>
<demandhint> </demandhint>
<hint>The mean is calculated by summing the set of numbers and dividing by n.</hint> </problem>
<hint>n is the count of items in the set.</hint>
</demandhint>
</problem>
\ No newline at end of file
...@@ -8,29 +8,26 @@ metadata: ...@@ -8,29 +8,26 @@ metadata:
You can use the following example problem as a model. You can use the following example problem as a model.
>>Which of the following countries celebrates its independence on August 15?<< >>Which of the following countries celebrates its independence on August 15?<<
[[(India), Spain, China, Bermuda]] [[(India), Spain, China, Bermuda]]
[explanation]
India became an independent nation on August 15, 1947.
[explanation]
data: |
<problem>
<p>Dropdown problems allow learners to select only one option from a list of options.</p>
<p>When you add the problem, be sure to select <strong>Settings</strong>
to specify a <strong>Display Name</strong> and other values that apply.</p>
<p>You can use the following example problem as a model.</p>
<p>Which of the following countries celebrates its independence on August 15?</p>
<br/>
<optionresponse>
<optioninput options="('India','Spain','China','Bermuda')" correct="India"></optioninput>
</optionresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>India became an independent nation on August 15, 1947.</p>
</div>
</solution>
</problem>
[explanation]
India became an independent nation on August 15, 1947.
[explanation]
data: |
<problem>
<optionresponse>
<p>Dropdown problems allow learners to select only one option from a list of options.</p>
<p>When you add the problem, be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>You can use the following example problem as a model.</p>
<label>Which of the following countries celebrates its independence on August 15?</label>
<optioninput label="Which of the following countries celebrates its independence on August 15?" options="('India','Spain','China','Bermuda')" correct="India"/>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>India became an independent nation on August 15, 1947.</p>
</div>
</solution>
</optionresponse>
</problem>
...@@ -24,28 +24,32 @@ metadata: ...@@ -24,28 +24,32 @@ metadata:
||A fruit contains seeds of the plant.|| ||A fruit contains seeds of the plant.||
hinted: true hinted: true
data: | data: |
<problem> <problem>
<optionresponse>
<p>You can provide feedback for each available option in a dropdown problem.</p> <p>You can provide feedback for each available option in a dropdown problem.</p>
<p>You can also add hints for learners.</p>
<p>You can also add hints for learners.</p> <p>Be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>Use the following example problem as a model.</p>
<p>Use the following example problem as a model.</p> <label>A/an ________ is a vegetable.</label>
<optioninput label=" A/an ________ is a vegetable.">
<p> A/an ________ is a vegetable.</p> <option correct="False">apple
<br/> <optionhint>An apple is the fertilized ovary that comes from an apple tree and contains seeds, meaning it is a fruit.</optionhint>
<optionresponse> </option>
<optioninput> <option correct="False">pumpkin
<option correct="False">apple <optionhint>An apple is the fertilized ovary that comes from an apple tree and contains seeds, meaning it is a fruit.</optionhint></option> <optionhint>A pumpkin is the fertilized ovary of a squash plant and contains seeds, meaning it is a fruit.</optionhint>
<option correct="False">pumpkin <optionhint>A pumpkin is the fertilized ovary of a squash plant and contains seeds, meaning it is a fruit.</optionhint></option> </option>
<option correct="True">potato <optionhint>A potato is an edible part of a plant in tuber form and is a vegetable.</optionhint></option> <option correct="True">potato
<option correct="False">tomato <optionhint>Many people mistakenly think a tomato is a vegetable. However, because a tomato is the fertilized ovary of a tomato plant and contains seeds, it is a fruit.</optionhint></option> <optionhint>A potato is an edible part of a plant in tuber form and is a vegetable.</optionhint>
</optioninput> </option>
</optionresponse> <option correct="False">tomato
<optionhint>Many people mistakenly think a tomato is a vegetable. However, because a tomato is the fertilized ovary of a tomato plant and contains seeds, it is a fruit.</optionhint>
<demandhint> </option>
<hint>A fruit is the fertilized ovary from a flower.</hint> </optioninput>
<hint>A fruit contains seeds of the plant.</hint> </optionresponse>
</demandhint>
</problem> <demandhint>
<hint>A fruit is the fertilized ovary from a flower.</hint>
<hint>A fruit contains seeds of the plant.</hint>
</demandhint>
</problem>
...@@ -4,13 +4,12 @@ metadata: ...@@ -4,13 +4,12 @@ metadata:
markdown: !!null markdown: !!null
data: | data: |
<problem> <problem>
<text> <text>
<p> <p><h4>Problem With Adaptive Hint</h4></p>
<h4>Problem With Adaptive Hint</h4> <p>This problem demonstrates a question with hints, based on using the <tt class="tt">hintfn</tt> method. </p>
</p>
<p> <customresponse cfn="test_str" expect="python">
This problem demonstrates a question with hints, based on using the <tt class="tt">hintfn</tt> method. </p> <script type="text/python" system_path="python_lib">
<script type="text/python" system_path="python_lib">
def test_str(expect, ans): def test_str(expect, ans):
print expect, ans print expect, ans
ans = ans.strip("'") ans = ans.strip("'")
...@@ -36,12 +35,9 @@ data: | ...@@ -36,12 +35,9 @@ data: |
hint = "&lt;font color='blue'&gt;Hint: {0}&lt;/font&gt;".format(hint) hint = "&lt;font color='blue'&gt;Hint: {0}&lt;/font&gt;".format(hint)
new_cmap.set_hint_and_mode(aid,hint,'always') new_cmap.set_hint_and_mode(aid,hint,'always')
</script> </script>
<label> <label>What is the best programming language that exists today? You may enter your answer in upper or lower case, with or without quotes.</label>
What is the best programming language that exists today? You may enter your answer in upper or lower case, with or without quotes. <textline correct_answer="python"/>
<customresponse cfn="test_str" expect="python"> <hintgroup hintfn="hint_fn"/>
<textline correct_answer="python"/> </customresponse>
<hintgroup hintfn="hint_fn"/> </text>
</customresponse>
</label>
</text>
</problem> </problem>
...@@ -49,12 +49,11 @@ metadata: ...@@ -49,12 +49,11 @@ metadata:
markdown: !!null markdown: !!null
data: | data: |
<problem> <problem>
<text> <text>
<p> <p><h4>Problem With Adaptive Hint</h4></p>
<h4>Problem With Adaptive Hint</h4> <p>This problem demonstrates a question with hints, based on using the <tt class="tt">hintfn</tt> method.</p>
</p>
<p> <customresponse cfn="test_str" expect="python">
This problem demonstrates a question with hints, based on using the <tt class="tt">hintfn</tt> method. </p>
<script type="text/python" system_path="python_lib"> <script type="text/python" system_path="python_lib">
def test_str(expect, ans): def test_str(expect, ans):
print expect, ans print expect, ans
...@@ -81,12 +80,9 @@ data: | ...@@ -81,12 +80,9 @@ data: |
hint = "&lt;font color='blue'&gt;Hint: {0}&lt;/font&gt;".format(hint) hint = "&lt;font color='blue'&gt;Hint: {0}&lt;/font&gt;".format(hint)
new_cmap.set_hint_and_mode(aid,hint,'always') new_cmap.set_hint_and_mode(aid,hint,'always')
</script> </script>
<label> <label>What is the best programming language that exists today? You may enter your answer in upper or lower case, with or without quotes.</label>
What is the best programming language that exists today? You may enter your answer in upper or lower case, with or without quotes. <textline correct_answer="python"/>
<customresponse cfn="test_str" expect="python"> <hintgroup hintfn="hint_fn"/>
<textline correct_answer="python"/> </customresponse>
<hintgroup hintfn="hint_fn"/> </text>
</customresponse>
</label>
</text>
</problem> </problem>
...@@ -3,7 +3,7 @@ metadata: ...@@ -3,7 +3,7 @@ metadata:
display_name: Text Input display_name: Text Input
markdown: | markdown: |
In text input problems, also known as "fill-in-the-blank" problems, learners enter text into a response field. The text can include letters and characters such as punctuation marks. The text that the learner enters must match your specified answer text exactly. You can specify more than one correct answer. Learners must enter a response that matches one of the correct answers exactly. In text input problems, also known as "fill-in-the-blank" problems, learners enter text into a response field. The text can include letters and characters such as punctuation marks. The text that the learner enters must match your specified answer text exactly. You can specify more than one correct answer. Learners must enter a response that matches one of the correct answers exactly.
When you add the problem, be sure to select Settings to specify a Display Name and other values that apply. When you add the problem, be sure to select Settings to specify a Display Name and other values that apply.
You can use the following example problem as a model. You can use the following example problem as a model.
...@@ -18,26 +18,21 @@ metadata: ...@@ -18,26 +18,21 @@ metadata:
Nanjing Higher Normal Institute first admitted female students in 1920. Nanjing Higher Normal Institute first admitted female students in 1920.
[explanation] [explanation]
data: | data: |
<problem> <problem>
<p>In text input problems, also known as "fill-in-the-blank" problems, <stringresponse answer="Nanjing Higher Normal Institute" type="ci">
learners enter text into a response field. The text that the learner enters <p>In text input problems, also known as "fill-in-the-blank" problems, learners enter text into a response field. The text that the learner enters must match your specified answer text exactly. You can specify more than one correct answer. Learners must enter a response that matches one of the correct answers exactly.</p>
must match your specified answer text exactly. You can specify more than <p>When you add the problem, be sure to select <strong>Settings</strong> to specify a <strong>Display Name</strong> and other values that apply.</p>
one correct answer. Learners must enter a response that matches one of the <p>You can use the following example problem as a model.</p>
correct answers exactly.</p> <label>What was the first post-secondary school in China to allow both male and female students?</label>
<p>When you add the problem, be sure to select <strong>Settings</strong> <additional_answer>National Central University</additional_answer>
to specify a <strong>Display Name</strong> and other values that apply.</p> <additional_answer>Nanjing University</additional_answer>
<p> You can use the following example problem as a model.</p> <textline label="What was the first post-secondary school in China to allow both male and female students?" size="40"/>
<p>What was the first post-secondary school in China to allow both male and female students?</p> <solution>
<stringresponse answer="Nanjing Higher Normal Institute" type="ci" > <div class="detailed-solution">
<additional_answer>National Central University</additional_answer> <p>Explanation</p>
<additional_answer>Nanjing University</additional_answer> <p>Nanjing Higher Normal Institute first admitted female students in 1920.</p>
<textline label="What was the first post-secondary school in China to allow both male and female students?" size="40"/> </div>
</stringresponse> </solution>
<solution> </stringresponse>
<div class="detailed-solution"> </problem>
<p>Explanation</p>
<p>Nanjing Higher Normal Institute first admitted female students in 1920.</p>
</div>
</solution>
</problem>
--- ---
metadata: metadata:
display_name: Text Input with Hints and Feedback display_name: Text Input with Hints and Feedback
markdown: | markdown: |
You can provide feedback for the correct answer in text input problems, as well as for specific incorrect answers. You can provide feedback for the correct answer in text input problems, as well as for specific incorrect answers.
...@@ -24,31 +24,21 @@ metadata: ...@@ -24,31 +24,21 @@ metadata:
||Consider all 50 states, not just the continental United States.|| ||Consider all 50 states, not just the continental United States.||
hinted: true hinted: true
data: | data: |
<problem> <problem>
<stringresponse answer="Alaska" type="ci">
<p>You can provide feedback for the correct answer in text input problems, as well as for specific incorrect answers.</p> <p>You can provide feedback for the correct answer in text input problems, as well as for specific incorrect answers.</p>
<p>Use feedback on expected incorrect answers to address common misconceptions and to provide guidance on how to arrive at the correct answer.</p>
<p>Use feedback on expected incorrect answers to address common misconceptions and to provide guidance on how to arrive at the correct answer.</p> <p>Be sure to select Settings to specify a Display Name and other values that apply.</p>
<p>Use the following example problem as a model.</p>
<p>Use the following example problem as a model.</p> <label>Which U.S. state has the largest land area?</label>
<correcthint>Alaska is 576,400 square miles, more than double the land area of the second largest state, Texas.</correcthint>
<p>Which U.S. state has the largest land area?</p> <stringequalhint answer="Texas">While many people think Texas is the largest state, it is actually the second largest, with 261,797 square miles.</stringequalhint>
<stringequalhint answer="California">California is the third largest state, with 155,959 square miles.</stringequalhint>
<stringresponse answer="Alaska" type="ci" > <textline label="Which U.S. state has the largest land area?" size="20"/>
</stringresponse>
<correcthint>Alaska is 576,400 square miles, more than double the land area of the second largest state, Texas.</correcthint> <demandhint>
<hint>Consider the square miles, not population.</hint>
<stringequalhint answer="Texas">While many people think Texas is the largest state, it is actually the second largest, with 261,797 square miles.</stringequalhint> <hint>Consider all 50 states, not just the continental United States.</hint>
</demandhint>
<stringequalhint answer="California">California is the third largest state, with 155,959 square miles.</stringequalhint> </problem>
<textline label="Which U.S. state has the largest land area?" size="20"/>
</stringresponse>
<demandhint>
<hint>Consider the square miles, not population.</hint>
<hint>Consider all 50 states, not just the continental United States.</hint>
</demandhint>
</problem>
...@@ -12,9 +12,7 @@ from openedx.core.djangolib.markup import HTML ...@@ -12,9 +12,7 @@ from openedx.core.djangolib.markup import HTML
<div class="problem-progress"></div> <div class="problem-progress"></div>
<div class="problem"> <div class="problem">
<div aria-live="polite"> ${ HTML(problem['html']) }
${ HTML(problem['html']) }
</div>
<div class="action"> <div class="action">
<input type="hidden" name="problem_id" value="${ problem['name'] }" /> <input type="hidden" name="problem_id" value="${ problem['name'] }" />
% if demand_hint_possible: % if demand_hint_possible:
......
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