Commit f8d3a024 by Dhaval Adjodah

survey module in progress.

parent 2f95a8e1
......@@ -32,6 +32,7 @@ setup(
"slides = xmodule.backcompat_module:TranslateCustomTagDescriptor",
"vertical = xmodule.vertical_module:VerticalDescriptor",
"video = xmodule.video_module:VideoDescriptor",
"survey = xmodule.survey_module:SurveyDescriptor",
"videodev = xmodule.backcompat_module:TranslateCustomTagDescriptor",
"videosequence = xmodule.seq_module:SequenceDescriptor",
]
......
import json
import logging
from lxml import etree
from xmodule.x_module import XModule
from xmodule.raw_module import RawDescriptor
log = logging.getLogger(__name__)
class SurveyModule(XModule):
video_time = 0
icon_class = 'video'
# js = {'coffee': [resource_string(__name__, 'js/src/capa/display.coffee')],
# 'js': [resource_string(__name__, 'js/src/capa/imageinput.js'),
# resource_string(__name__, 'js/src/capa/schematic.js')]}
# js_module_name = "Problem"
# css = {'scss': [resource_string(__name__, 'css/capa/display.scss')]}
def __init__(self, system, location, definition, instance_state=None, shared_state=None, **kwargs):
XModule.__init__(self, system, location, definition, instance_state, shared_state, **kwargs)
xmltree = etree.fromstring(self.definition['data'])
self.name = xmltree.get('title')
#getting a list of questions for each survey element:
self.question_list = []
for item in list(xmltree):
# self.question_list.append[{'type':item.get('type'),'question_name':item.get('question_name'),'label':item.get('label')}]
dic = {'type':item.get('type'),'question_name':item.get('question_name'),'label':item.get('label')}
self.question_list.append(dic)
# <section format="Video" name="Welcome">
# <video youtube="0.75:izygArpw-Qo,1.0:p2Q6BrNhdh8,1.25:1EeWXzPdhSA,1.50:rABDYkeK0x8"/>
# </section>
def get_html(self):
return self.system.render_template('problem_ajax.html', {
'element_id': self.location.html_id(),
'id': self.id,
'ajax_url': self.system.ajax_url,
})
def handle_ajax(self, dispatch, get):
# log.debug(u"GET {0}".format(get))
# log.debug(u"DISPATCH {0}".format(dispatch))
# if dispatch == 'goto_position':
# self.position = int(float(get['position']))
# log.info(u"NEW POSITION {0}".format(self.position))
# return json.dumps({'success':True})
# raise Http404()
print "poop"
print dispatch
print get
# def get_progress(self):
# ''' TODO (vshnayder): Get and save duration of youtube video, then return
# fraction watched.
# (Be careful to notice when video link changes and update)
# For now, we have no way of knowing if the video has even been watched, so
# just return None.
# '''
# return None
# def get_instance_state(self):
# return self.state
def survey_question_list(self):
return self.question_list
#dirty test:
def survey_context(self):
self.context = {'took_survey' : False,
'survey_list' : self.survey_question_list(),
'survey_name' : self.name}
return self.context
def get_html(self):
return self.system.render_template('survey.html', self.survey_context())
class SurveyDescriptor(RawDescriptor):
module_class = SurveyModule
<%namespace name="survey_fields" file="survey_fields.html"/>
<h2 class="survey-header">
${ survey_name }
</h2>
<section class="survey" class="main-content">
<form id="survey_form">
%if not took_survey:
${survey_fields.body(survey_list)}
%else:
<p>Thank you for your help! You can only take the survey once, and we already have your submission.</p>
%endif
<input type="submit" id="" value="Submit Survey" />
</form>
</section>
<%page args="survey_list, **kwargs"/>
<%def name="survey_radio(question_name, label, choices)">
<li class="survey_radio">
<h2>${label}</h2>
<ul>
%for choice in choices:
<li>
<label>
<input type="radio" name="${question_name}" value="${choice}" align="BASELINE"/>${choice}
</label>
</li>
%endfor
</ul>
</li>
</%def>
<%def name="survey_select_many(question_name, label, choices)">
<li class="survey_select_many">
<h2>${label}</h2>
<ul>
%for choice in choices:
<li>
<label>
<input type="checkbox" name="${question_name}" value="${choice}" align="BASELINE"/>${choice}
</label>
</li>
%endfor
</ul>
</li>
</%def>
<%def name="survey_checkbox(question_name, label)">
<li class="survey_checkbox">
<label><input type="checkbox" name="${question_name}" value="true"/> ${label}</label>
</li>
</%def>
<%def name="survey_short_field(question_name, label)">
<li class="survey_short_field">
<label>${label}</label>
<input type="text" name="${question_name}"/>
</li>
</%def>
<%def name="survey_medium_field(question_name, label)">
<li class="survey_medium_field">
<label>${label}</label>
<textarea name="${question_name}"></textarea>
</li>
</%def>
<ul>
%for survey_question in survey_list:
%if survey_question['type'] == 'radio':
${survey_radio(survey_question['question_name'], survey_question['label'], survey_question['choices']) }
%elif survey_question['type'] == 'select_many':
${survey_select_many(survey_question['question_name'], survey_question['label'], survey_question['choices']) }
%elif survey_question['type'] == 'checkbox':
${survey_checkbox(survey_question['question_name'], survey_question['label']) }
%elif survey_question['type'] == 'short_field':
${survey_short_field(survey_question['question_name'], survey_question['label']) }
%elif survey_question['type'] == 'medium_field':
${survey_medium_field(survey_question['question_name'], survey_question['label']) }
%endif
%endfor
</ul>
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