Commit e39b9718 by Stephen Sanchez

Fixing javascript to mock out workflow

parent 867d9373
from django.template import Context
from django.template.loader import get_template
class AssessmentBlock(object): class AssessmentBlock(object):
assessment_type = None assessment_type = None
name = '' name = ''
...@@ -18,6 +22,10 @@ class AssessmentBlock(object): ...@@ -18,6 +22,10 @@ class AssessmentBlock(object):
"must_grade": self.must_grade, "must_grade": self.must_grade,
"must_be_graded_by": self.must_be_graded_by, "must_be_graded_by": self.must_be_graded_by,
"navigation_text": self.navigation_text, "navigation_text": self.navigation_text,
"path": self.path,
"title": self.title "title": self.title
} }
def render(self, context_dict):
template = get_template(self.path)
context = Context(context_dict)
return template.render(context)
\ No newline at end of file
"""An XBlock where students can read a question and compose their response""" """An XBlock where students can read a question and compose their response"""
import datetime import datetime
import json
from django.template.context import Context from django.template.context import Context
from django.template.loader import get_template from django.template.loader import get_template
import pkg_resources
from webob import Response
from xblock.core import XBlock from xblock.core import XBlock
from xblock.fields import List, Scope, String from xblock.fields import List, Scope, String
from xblock.fragment import Fragment from xblock.fragment import Fragment
from openassessment.xblock.peer_assessment_block import PeerAssessmentBlock from openassessment.xblock.peer_assessment_block import PeerAssessmentBlock
from openassessment.xblock.submission_block import SubmissionBlock from openassessment.xblock.submission_block import SubmissionBlock
from openassessment.xblock.utils import load
from scenario_parser import ScenarioParser from scenario_parser import ScenarioParser
...@@ -120,6 +122,10 @@ DEFAULT_ASSESSMENT_MODULES = [ ...@@ -120,6 +122,10 @@ DEFAULT_ASSESSMENT_MODULES = [
DEFAULT_PEER_ASSESSMENT, DEFAULT_PEER_ASSESSMENT,
] ]
def load(path):
"""Handy helper for getting resources from our kit."""
data = pkg_resources.resource_string(__name__, path)
return data.decode("utf8")
class OpenAssessmentBlock(XBlock): class OpenAssessmentBlock(XBlock):
"""Displays a question and gives an area where students can compose a response.""" """Displays a question and gives an area where students can compose a response."""
...@@ -224,12 +230,30 @@ class OpenAssessmentBlock(XBlock): ...@@ -224,12 +230,30 @@ class OpenAssessmentBlock(XBlock):
frag.initialize_js('OpenAssessmentBlock') frag.initialize_js('OpenAssessmentBlock')
return frag return frag
@XBlock.handler
def render_assessment(self, data, suffix=''):
"""Render an Assessment Module's HTML
Given the name of an assessment module, find it in the list of
configured modules, and ask for its rendered HTML.
"""
body = json.loads(data.body)
context_dict = {
"xblock_trace": self._get_xblock_trace(),
"rubric_instructions": self.rubric_instructions,
"rubric_criteria": self.rubric_criteria,
}
assessment = self._get_assessment_module(body['assessment'])
if assessment:
return Response(assessment.render(context_dict), content_type='application/html', charset="UTF-8")
@XBlock.json_handler @XBlock.json_handler
def assess(self, data, suffix=''): def assess(self, data, suffix=''):
# TODO Pass name through the handler. # TODO Pass name through the handler.
assessment = self._get_assessment_module('peer-assessment') assessment = self._get_assessment_module('peer-assessment')
if assessment: if assessment:
assessment.assess( return assessment.assess(
self._get_student_item_dict(), self._get_student_item_dict(),
self.rubric_criteria, self.rubric_criteria,
data data
......
from django.template import Context
from django.template.loader import get_template
from xblock.fragment import Fragment
from openassessment.peer import api as peer_api from openassessment.peer import api as peer_api
from openassessment.peer.api import PeerAssessmentWorkflowError from openassessment.peer.api import PeerAssessmentWorkflowError
from openassessment.xblock.assessment_block import AssessmentBlock from openassessment.xblock.assessment_block import AssessmentBlock
from openassessment.xblock.utils import load
class PeerAssessmentBlock(AssessmentBlock): class PeerAssessmentBlock(AssessmentBlock):
assessment_type = "peer-assessment" assessment_type = "peer-assessment"
path = "static/html/oa_peer_assessment.html"
title = "Assess Peers' Responses" title = "Assess Peers' Responses"
navigation_text = "Your assessment(s) of peer responses" navigation_text = "Your assessment(s) of peer responses"
path = "static/html/oa_peer_assessment.html"
@classmethod @classmethod
def assess(cls, student_item_dict, rubric_criteria, data): def assess(cls, student_item_dict, rubric_criteria, data):
...@@ -56,12 +50,3 @@ class PeerAssessmentBlock(AssessmentBlock): ...@@ -56,12 +50,3 @@ class PeerAssessmentBlock(AssessmentBlock):
# TODO: Log? # TODO: Log?
pass pass
return peer_submission return peer_submission
def render(self, context_dict):
template = get_template("static/html/oa_peer_assessment.html")
context = Context(context_dict)
frag = Fragment(template.render(context))
frag.add_css(load("static/css/openassessment.css"))
frag.add_javascript(load("static/js/src/oa_assessment.js"))
frag.initialize_js('PeerAssessment')
return frag
\ No newline at end of file
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</div> </div>
<div class="step__content"> <div class="step__content">
<form id="response__submission" class="response__submission" method="post"> <form id="response__submission" class="response__submission">
<ol class="list list--fields"> <ol class="list list--fields">
<li class="field field--textarea submission__answer" id="submission__answer"> <li class="field field--textarea submission__answer" id="submission__answer">
<label for="submission__answer__value">Please provide your response to the above question</label> <label for="submission__answer__value">Please provide your response to the above question</label>
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
<div class="step__actions"> <div class="step__actions">
<ul class="list list--actions"> <ul class="list list--actions">
<li class="list--actions__item"> <li class="list--actions__item">
<a aria-role="button" id="step--response__submit" class="action action--submit step--response__submit">Submit your response &amp; move forward</a> <a aria-role="button" href="#" id="step--response__submit" class="action action--submit step--response__submit">Submit your response &amp; move forward</a>
</li> </li>
</ul> </ul>
</div> </div>
......
<!-- START OpenAssessmentBlock HTML -->
<div class="openassessment_block" id="openassessment_block_${xblock_trace[0]}">
<div id="peer_submission_uuid" hidden="true">${peer_submission["uuid"]}</div>
<p>${peer_submission["answer"]}</p>
<p class="openassessment_prompt"
id="openassessment_rubric_instructions_${xblock_trace[0]}">${rubric_instructions}</p>
% for crit in rubric_criteria:
<div>
<p class="openassessment_prompt">${crit["instructions"]}</p>
% for o in crit['options']:
<div>
<input name="${crit['name']}" type="radio" value="${o[0]}">${o[1]}: ${o[2]}</input>
</div>
% endfor
</div>
% endfor
<input type="button"
class="openassessment_submit" id="openassessment_submit_${xblock_trace[0]}" value="Submit" />
</div>
<div class="openassessment_response_status_block" id="openassessment_response_status_block_${xblock_trace[0]}">
This message should be invisible; please upgrade your browser.
</div>
<!-- END OpenAssessmentBlock HTML -->
<!-- START OpenAssessmentBlock HTML -->
<div class="openassessment_block" id="openassessment_block_${xblock_trace[0]}">
<p class="openassessment_prompt" id="openassessment_question_${xblock_trace[0]}">${question}</p>
<textarea class="openassessment_submission" id="openassessment_submission_${xblock_trace[0]}">Compose your response here</textarea>
<input type="button" class="openassessment_submit" id="openassessment_submit_${xblock_trace[0]}" value="Submit" />
</div>
<div class="openassessment_response_status_block" id=openassessment_response_status_block_${xblock_trace[0]}">
This message should be invisible; please upgrade your browser.
</div>
<!-- END OpenAssessmentBlock HTML -->
/* START Javascript for OpenassessmentComposeXBlock. */ /* START Javascript for OpenassessmentXBlock. */
function OpenAssessmentBlock(runtime, element) { function OpenAssessmentBlock(runtime, element) {
var handlerUrl = runtime.handlerUrl(element, 'submit'); var handlerUrl = runtime.handlerUrl(element, 'submit');
var success_msg = '<p class="success">Your submission has been received, thank you!</p>'; var renderUrl = runtime.handlerUrl(element, 'render_assessment');
var failure_msg = '<p class="failure">An error occurred with your submission</p>';
var click_msg = '<p class="clickhere">(click here to dismiss this message)</p>';
/* Sample Debug Console: http://localhost:8000/submissions/Joe_Bloggs/TestCourse/u_3 */ /* Sample Debug Console: http://localhost:8000/submissions/Joe_Bloggs/TestCourse/u_3 */
$('.action action--submit step--response__submit', element).click(function(eventObject) {
/*
Peer Assessment Functions
*/
function prepare_assessment_post(element) {
var selector = $("input[type=radio]:checked", element);
var values = [];
for (i=0; i<selector.length; i++) {
values[i] = selector[i].value;
}
return {"submission_uuid":$("div#peer_submission_uuid")[0].innerText, "points_earned":values};
}
$('.openassessment_submit', element).click(function(eventObject) {
$.ajax({
type: "POST",
url: handlerUrl,
/* data: JSON.stringify({"submission": $('.openassessment_submission', element).val()}), */
data: JSON.stringify(prepare_assessment_post(element)),
success: function(data) {
$.ajax({
type: "POST",
url: renderUrl,
data: JSON.stringify({"assessment": "peer-assessment"}),
success: function(data) {
$('#peer-assessment', element).replaceWith(data);
}
});
$.ajax({
type: "POST",
url: renderUrl,
data: JSON.stringify({"assessment": "self-assessment"}),
success: function(data) {
$('#self-assessment', element).replaceWith(data);
}
});
}
});
});
$(function ($) {
/* Here's where you'd do things on page load. */
$.ajax({
type: "POST",
url: renderUrl,
data: JSON.stringify({"assessment": "submission"}),
success: function(data) {
$('#submission', element).replaceWith(data);
/*
Submission Functions
*/
$('#step--response__submit', element).click(function(eventObject) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: handlerUrl, url: handlerUrl,
data: JSON.stringify({"submission": $('.openassessment_submission', element).val()}), data: JSON.stringify({"submission": $('#submission__answer__value', element).val()}),
success: displayStatus success: function(data) {
alert("Success?")
$.ajax({
type: "POST",
url: renderUrl,
data: JSON.stringify({"assessment": "submission"}),
success: function(data) {
$('#submission', element).replaceWith(data);
}
});
$.ajax({
type: "POST",
url: renderUrl,
data: JSON.stringify({"assessment": "peer-assessment"}),
success: function(data) {
$('#peer-assessment', element).replaceWith(data);
}
});
},
fail: function(data) {alert("FAIL!!")}
});
});
}
}); });
}); });
} }
/* END Javascript for OpenassessmentComposeXBlock. */ /* END Javascript for OpenassessmentXBlock. */
import pkg_resources
def load(path):
"""Handy helper for getting resources from our kit."""
data = pkg_resources.resource_string(__name__, path)
return data.decode("utf8")
\ No newline at end of file
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