diff --git a/common/lib/xmodule/setup.py b/common/lib/xmodule/setup.py index 8deb2a7ce5..86636ef05a 100644 --- a/common/lib/xmodule/setup.py +++ b/common/lib/xmodule/setup.py @@ -36,7 +36,7 @@ setup( "videodev = xmodule.backcompat_module:TranslateCustomTagDescriptor", "videosequence = xmodule.seq_module:SequenceDescriptor", "discussion = xmodule.discussion_module:DiscussionDescriptor", - "gst = xmodule.gst_module:GSTDescriptor", + "graphical_slider_tool = xmodule.gst_module:GraphicalSliderToolDescriptor", ] } ) diff --git a/common/lib/xmodule/xmodule/gst_module.py b/common/lib/xmodule/xmodule/gst_module.py index f5b2095d95..d90bc46e6e 100644 --- a/common/lib/xmodule/xmodule/gst_module.py +++ b/common/lib/xmodule/xmodule/gst_module.py @@ -1,6 +1,6 @@ """ -GST (Graphical-Slider-Tool) module is ungraded xmodule used by students to -understand functional dependencies +Graphical slider tool module is ungraded xmodule used by students to +understand functional dependencies. """ # import json @@ -15,11 +15,12 @@ from xmodule.progress import Progress from xmodule.exceptions import NotFoundError from pkg_resources import resource_string from xmodule.raw_module import RawDescriptor +from xmodule.stringify import stringify_children # log = logging.getLogger("mitx.common.lib.seq_module") -class GSTModule(XModule): +class GraphicalSliderToolModule(XModule): ''' Graphical-Slider-Tool Module ''' # js = {'js': [resource_string(__name__, 'js/src/gst/gst.js')]} @@ -34,92 +35,92 @@ class GSTModule(XModule): Sample file: - -

Plot...

- - - - - - - - -
+ + + + + Graphic slider tool html. Can include + 'number', 'slider' and plot tags. They will be replaced + by proper number, slider and plot widgets. + + + + + + + + + + + + + -10, 1, 10 + + 1 + 1 + + + + + + """ XModule.__init__(self, system, location, definition, descriptor, instance_state, shared_state, **kwargs) - # import ipdb; ipdb.set_trace() - # self.rendered = False def get_html(self): - self.render() + params = { + 'main_html': self.definition['render'].strip(), + 'element_id': self.location.html_id(), + 'element_class': self.location.category + } + self.content = (self.system.render_template( + 'graphical_slider_tool.html', params)) return self.content - def render(self): - # import ipdb; ipdb.set_trace() - # if self.rendered: - return - ## Returns a set of all types of all sub-children - # contents = [] - # # import ipdb; ipdb.set_trace() - # for child in self.get_display_items(): - # progress = child.get_progress() - # childinfo = { - # 'gst': child.get_html(), - # 'plot': "\n".join( - # grand_child.display_name.strip() - # for grand_child in child.get_children() - # if 'display_name' in grand_child.metadata - # ), - # # 'progress_status': Progress.to_js_status_str(progress), - # 'progress_detail': Progress.to_js_detail_str(progress), - # 'type': child.get_icon_class(), - # } - # # if childinfo['title']=='': - # # childinfo['title'] = child.metadata.get('display_name','') - # contents.append(childinfo) - # params = {'items': contents, - # 'element_id': self.location.html_id(), - # 'item_id': self.id, - # 'position': self.position, - # 'tag': self.location.category - # } - params= {} - self.content = self.system.render_template('gst_module.html', params) - # self.rendered = True - - -# class GSTDescriptor(RawDescriptor): -class GSTDescriptor(MakoModuleDescriptor, XmlDescriptor): - mako_template = "widgets/html-edit.html" - module_class = GSTModule - template_dir_name = 'gst' +class GraphicalSliderToolDescriptor(MakoModuleDescriptor, XmlDescriptor): + module_class = GraphicalSliderToolModule + template_dir_name = 'graphical_slider_tool' @classmethod def definition_from_xml(cls, xml_object, system): """ Pull out the data into dictionary. + Args: + xml_object: xml from file. + Returns: - { - 'def1': 'def1-some-html', - 'def2': 'def2-some-html' - } + dict """ - # import ipdb; ipdb.set_trace() - children = [] - for child in xml_object: - try: - children.append(system.process_xml(etree.tostring(child)).location.url()) - except: - log.exception("Unable to load child when parsing GST. Continuing...") - continue - return {'children': children} + # check for presense of required tags in xml + expected_children_level_0 = ['render', 'configuration'] + for child in expected_children_level_0: + if len(xml_object.xpath(child)) != 1: + raise ValueError("Self a\ssessment definition must include \ + exactly one '{0}' tag".format(child)) + expected_children_level_1 = ['plot'] + for child in expected_children_level_1: + if len(xml_object.xpath('configuration')[0].xpath(child)) != 1: + raise ValueError("Self a\ssessment definition must include \ + exactly one '{0}' tag".format(child)) + # finished + + def parse(k): + """Assumes that xml_object has child k""" + return stringify_children(xml_object.xpath(k)[0]) + + return { + 'render': parse('render'), + 'configuration': xml_object.xpath('configuration')[0], + } def definition_to_xml(self, resource_fs): - '''Return an xml element representing this definition.''' + '''Return an xml element representing this definition. + Not implemented''' # import ipdb; ipdb.set_trace() xml_object = etree.Element('gst') @@ -133,10 +134,3 @@ class GSTDescriptor(MakoModuleDescriptor, XmlDescriptor): add_child(child) return xml_object - - - # def __init__(self, system, definition, **kwargs): - # '''Render and save the template for this descriptor instance''' - # # import ipdb; ipdb.set_trace() - # super(GSTDescriptor, self).__init__(system, definition, **kwargs) - # self.rendered_html = self.render_template(system, definition['data']) \ No newline at end of file