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