34 lines
1.3 KiB
XML
34 lines
1.3 KiB
XML
<problem display_name="Custom Javascript Display and Grading" markdown="null">
|
|
<script type="loncapa/python">
|
|
import json
|
|
def vglcfn(e, ans):
|
|
'''
|
|
par is a dictionary containing two keys, "answer" and "state"
|
|
The value of answer is the JSON string returned by getGrade
|
|
The value of state is the JSON string returned by getState
|
|
'''
|
|
par = json.loads(ans)
|
|
# We can use either the value of the answer key to grade
|
|
answer = json.loads(par["answer"])
|
|
return answer["cylinder"] and not answer["cube"]
|
|
'''
|
|
# Or we could use the value of the state key
|
|
state = json.loads(par["state"])
|
|
selectedObjects = state["selectedObjects"]
|
|
return selectedObjects["cylinder"] and not selectedObjects["cube"]
|
|
'''
|
|
</script>
|
|
<p>
|
|
The shapes below can be selected (yellow) or unselected (cyan).
|
|
Clicking on them repeatedly will cycle through these two states.
|
|
</p>
|
|
<p>
|
|
If the cone is selected (and not the cube), a correct answer will be
|
|
generated after pressing "Check". Clicking on either "Check" or "Save"
|
|
will register the current state.
|
|
</p>
|
|
<customresponse cfn="vglcfn">
|
|
<jsinput gradefn="WebGLDemo.getGrade" get_statefn="WebGLDemo.getState" set_statefn="WebGLDemo.setState" width="400" height="400" html_file="https://studio.edx.org/c4x/edX/DemoX/asset/webGLDemo.html" sop="false"/>
|
|
</customresponse>
|
|
</problem>
|