* add module_from_xml param to I4xSystem * use it to implement xmodule.get_children() * fix a few comments here and there * Render-time progress display for seq and vertical modules. - Computes fraction of subproblems done. * Pass problem state back to js during ajax calls. * general cleanup in capa_module.py * add progress_changed and progress fields to json returned from each ajax handler * Coffeescript changes to hook up sequence tracking of problem progress * net result: sequence 'a' tags now have a progress class * properly set css class on initial load * fire event when progress changes after ajax calls * also save state in 'progress' property of problems-wrapper tag * event handler finds those tags, computes updated progress
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import json
|
|
|
|
from x_module import XModule, XModuleDescriptor
|
|
from xmodule.progress import Progress
|
|
from lxml import etree
|
|
|
|
class ModuleDescriptor(XModuleDescriptor):
|
|
pass
|
|
|
|
class Module(XModule):
|
|
''' Layout module for laying out submodules vertically.'''
|
|
id_attribute = 'id'
|
|
|
|
def get_state(self):
|
|
return json.dumps({ })
|
|
|
|
@classmethod
|
|
def get_xml_tags(c):
|
|
return ["vertical", "problemset"]
|
|
|
|
def get_html(self):
|
|
return self.system.render_template('vert_module.html', {
|
|
'items': self.contents
|
|
})
|
|
|
|
def get_progress(self):
|
|
# TODO: Cache progress or children array?
|
|
children = self.get_children()
|
|
progresses = [child.get_progress() for child in children]
|
|
progress = reduce(Progress.add_counts, progresses)
|
|
return progress
|
|
|
|
def __init__(self, system, xml, item_id, state=None):
|
|
XModule.__init__(self, system, xml, item_id, state)
|
|
xmltree=etree.fromstring(xml)
|
|
self.contents=[(e.get("name"),self.render_function(e)) \
|
|
for e in xmltree]
|