diff --git a/common/lib/xmodule/xmodule/foldit_module.py b/common/lib/xmodule/xmodule/foldit_module.py index b80f54a41c..6cbf22980b 100644 --- a/common/lib/xmodule/xmodule/foldit_module.py +++ b/common/lib/xmodule/xmodule/foldit_module.py @@ -11,14 +11,27 @@ from xmodule.xml_module import XmlDescriptor log = logging.getLogger(__name__) class FolditModule(XModule): + + css = {'scss': [resource_string(__name__, 'css/foldit/leadeboard.scss')]} + def __init__(self, system, location, definition, descriptor, instance_state=None, shared_state=None, **kwargs): XModule.__init__(self, system, location, definition, descriptor, instance_state, shared_state, **kwargs) - # ooh look--I'm lazy, so hardcoding the 7.00x required level. - # If we need it generalized, can pull from the xml later - self.required_level = 4 - self.required_sublevel = 5 + """ + + Example: + + """ + req_level = self.metadata.get("required_level") + req_sublevel = self.metadata.get("required_sublevel") + + # default to what Spring_7012x uses + self.required_level = req_level if req_level else 4 + self.required_sublevel = req_sublevel if req_sublevel else 5 def parse_due_date(): """ @@ -83,16 +96,47 @@ class FolditModule(XModule): self.required_level, self.required_sublevel) + showbasic = (self.metadata.get("show_basic_score") == "true") + showleader = (self.metadata.get("show_leaderboard") == "true") context = { 'due': self.due_str, 'success': self.is_complete(), 'goal_level': goal_level, 'completed': self.completed_puzzles(), 'top_scores': self.puzzle_leaders(), + 'show_basic': showbasic, + 'show_leader': showleader, + 'folditbasic': self.get_basicpuzzles_html(), + 'folditchallenge': self.get_challenge_html() } return self.system.render_template('foldit.html', context) + def get_basicpuzzles_html(self): + """ + Render html for the basic puzzle section. + """ + goal_level = '{0}-{1}'.format( + self.required_level, + self.required_sublevel) + + context = { + 'due': self.due_str, + 'success': self.is_complete(), + 'goal_level': goal_level, + 'completed': self.completed_puzzles(), + } + return self.system.render_template('folditbasic.html', context) + + def get_challenge_html(self): + """ + Render html for challenge (i.e., the leaderboard) + """ + + context = { + 'top_scores': self.puzzle_leaders()} + + return self.system.render_template('folditchallenge.html', context) def get_score(self): """ @@ -109,7 +153,7 @@ class FolditModule(XModule): class FolditDescriptor(XmlDescriptor, EditingDescriptor): """ - Module for adding open ended response questions to courses + Module for adding Foldit problems to courses """ mako_template = "widgets/html-edit.html" module_class = FolditModule @@ -129,6 +173,6 @@ class FolditDescriptor(XmlDescriptor, EditingDescriptor): @classmethod def definition_from_xml(cls, xml_object, system): """ - For now, don't need anything from the xml + Get the xml_object's attributes. """ - return {} + return {'metadata': xml_object.attrib} diff --git a/lms/templates/foldit.html b/lms/templates/foldit.html index 2460e25f8e..2a8271cc62 100644 --- a/lms/templates/foldit.html +++ b/lms/templates/foldit.html @@ -1,45 +1,12 @@
-

Due: ${due} - -

-Status: -% if success: -You have successfully gotten to level ${goal_level}. -% else: -You have not yet gotten to level ${goal_level}. -% endif -

- -

Completed puzzles

- - - - - - - % for puzzle in completed: - - - - - % endfor -
LevelSubmitted
${'{0}-{1}'.format(puzzle['set'], puzzle['subset'])}${puzzle['created'].strftime('%Y-%m-%d %H:%M')}
- -
-

Puzzle Leaderboard

+ % if show_basic: + ${folditbasic} + % endif - - - - - - % for pair in top_scores: - - - - - % endfor -
UserScore
${pair[0]}${pair[1]}
+ + % if show_leader: + ${folditchallenge} + % endif