178 lines
5.4 KiB
HTML
178 lines
5.4 KiB
HTML
## The hinter module passes in a field called ${op}, which determines which
|
|
## sub-function to render.
|
|
|
|
|
|
<%def name="get_hint()">
|
|
% if len(hints) > 0:
|
|
<h4> Hints from students who made similar mistakes: </h4>
|
|
<ul>
|
|
% for hint in hints:
|
|
<li> ${hint} </li>
|
|
% endfor
|
|
</ul>
|
|
% endif
|
|
</%def>
|
|
|
|
<%def name="get_feedback()">
|
|
<%
|
|
def unspace(in_str):
|
|
"""
|
|
HTML id's can't have spaces in them. This little function
|
|
removes spaces.
|
|
"""
|
|
return ''.join(in_str.split())
|
|
|
|
# Make a list of all hints shown. (This is fed back to the site as pk_list.)
|
|
# At the same time, determine whether any hints were shown at all.
|
|
# If the user never saw hints, don't ask him to vote.
|
|
import json
|
|
hints_exist = False
|
|
pk_list = []
|
|
for answer, pk_dict in answer_to_hints.items():
|
|
if len(pk_dict) > 0:
|
|
hints_exist = True
|
|
for pk, hint_text in pk_dict.items():
|
|
pk_list.append([answer, pk])
|
|
json_pk_list = json.dumps(pk_list)
|
|
%>
|
|
|
|
<!-- Tells coffeescript whether there are hints to show. -->
|
|
<span id="hints-exist" style="display:none">${hints_exist}</span>
|
|
<div class="wizard-viewbox"><div class="wizard-container">
|
|
<div class="wizard-view" id="p1">
|
|
<p>
|
|
<em> Optional. </em> Help us improve our hints! Which hint was most helpful to you?
|
|
</p>
|
|
|
|
<div id="pk-list" data-pk-list='${json_pk_list}' style="display:none"> </div>
|
|
|
|
% for answer, pk_dict in answer_to_hints.items():
|
|
% for hint_pk, hint_text in pk_dict.items():
|
|
<p>
|
|
<input class="vote" data-answer="${answer}" data-hintno="${hint_pk}" type="button" value="Vote">
|
|
${hint_text}
|
|
</p>
|
|
% endfor
|
|
% endfor
|
|
|
|
<p>
|
|
Don't like any of the hints above?
|
|
<a class="wizard-link" dest="p2" href="javascript: void(0);">
|
|
Write your own!
|
|
</a></p>
|
|
</div>
|
|
|
|
<div class="wizard-view" id="p2">
|
|
% if hints_exist:
|
|
<p>
|
|
Choose the incorrect answer for which you want to write a hint:
|
|
</p>
|
|
% else:
|
|
<p>
|
|
<em>Optional.</em> Help other students by submitting a hint! Pick one of your previous
|
|
answers for which you would like to write a hint:
|
|
</p>
|
|
% endif
|
|
% for answer in user_submissions:
|
|
<a class="answer-choice" href="javascript: void(0)" value="${answer}">${answer}</a><br />
|
|
% endfor
|
|
% if hints_exist:
|
|
<p class="bottom">
|
|
<a href="javascript: void(0);" class="wizard-link" dest="p1"> Back </a>
|
|
</p>
|
|
% endif
|
|
|
|
</div>
|
|
|
|
<div class="wizard-view" id="p3">
|
|
|
|
<p>
|
|
Write a hint for other students who get the wrong answer of <span id="blank-answer"></span>.
|
|
</p>
|
|
<p>Read about <a class="expand" data-target="goodhint" href="javascript:void(0);">what makes a good hint</a>.</p>
|
|
|
|
<textarea cols="50" class="custom-hint" data-answer="${answer}" style="height: 200px">
|
|
Write your hint here. Please don't give away the correct answer.
|
|
</textarea>
|
|
<br /><br />
|
|
<input class="submit-hint" data-answer="${answer}" type="button" value="Submit">
|
|
<div id="goodhint" style="display:none">
|
|
<h4>What makes a good hint?</h4>
|
|
|
|
<p>It depends on the type of problem you ran into. For stupid errors --
|
|
an arithmetic error or similar -- simply letting the student you'll be
|
|
helping to check their signs is sufficient.</p>
|
|
|
|
<p>For deeper errors of understanding, the best hints allow students to
|
|
discover a contradiction in how they are thinking about the
|
|
problem. An example that clearly demonstrates inconsistency or
|
|
<a href="http://en.wikipedia.org/wiki/Cognitive_dissonance" target="_blank"> cognitive dissonace </a>
|
|
is ideal, although in most cases, not possible.</p>
|
|
|
|
<p>
|
|
Good hints either:
|
|
<ul>
|
|
<li> Point out the specific misunderstanding your classmate might have </li>
|
|
<li> Point to concepts or theories where your classmates might have a
|
|
misunderstanding </li>
|
|
<li> Show simpler, analogous examples. </li>
|
|
<li> Provide references to relevant parts of the text </li>
|
|
</ul>
|
|
</p>
|
|
|
|
<p>Still, remember even a crude hint -- virtually anything short of
|
|
giving away the answer -- is better than no hint.</p>
|
|
|
|
<p>
|
|
<a href="http://www.apa.org/education/k12/misconceptions.aspx?item=2" target="_blank">Learn even more</a>
|
|
</p>
|
|
</div>
|
|
<p class="bottom">
|
|
<a href="javascript: void(0);" class="wizard-link" dest="p2"> Back </a>
|
|
</p>
|
|
</div>
|
|
<!-- Close wizard contaner and wizard viewbox. -->
|
|
</div></div>
|
|
|
|
|
|
</%def>
|
|
|
|
<%def name="show_votes()">
|
|
% if hint_and_votes is UNDEFINED:
|
|
Sorry, but you've already voted!
|
|
% else:
|
|
Thank you for voting!
|
|
<br />
|
|
% for hint, votes in hint_and_votes:
|
|
<span style="color:green"> ${votes} votes. </span>
|
|
${hint}
|
|
<br />
|
|
% endfor
|
|
% endif
|
|
</%def>
|
|
|
|
<%def name="simple_message()">
|
|
${message}
|
|
</%def>
|
|
|
|
% if op == "get_hint":
|
|
${get_hint()}
|
|
% endif
|
|
|
|
% if op == "get_feedback":
|
|
${get_feedback()}
|
|
% endif
|
|
|
|
% if op == "submit_hint":
|
|
${simple_message()}
|
|
% endif
|
|
|
|
% if op == "error":
|
|
${error}
|
|
% endif
|
|
|
|
% if op == "vote":
|
|
${show_votes()}
|
|
% endif
|
|
|