From bae90ab16d86f89579b3d306beb9cb092a1dc2ab Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Thu, 28 Jun 2012 08:56:18 -0400 Subject: [PATCH] Make custom tags work in the LMS --- common/lib/xmodule/setup.py | 12 +++++++++--- common/lib/xmodule/template_module.py | 21 ++++++++++----------- common/lib/xmodule/translation_module.py | 17 +++++++++++++++++ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/common/lib/xmodule/setup.py b/common/lib/xmodule/setup.py index a9f4e1f4dc..38509f182a 100644 --- a/common/lib/xmodule/setup.py +++ b/common/lib/xmodule/setup.py @@ -13,15 +13,21 @@ setup( # for a description of entry_points entry_points={ 'xmodule.v1': [ + "book = xmodule.translation_module:TranslateCustomTagDescriptor", "chapter = xmodule.seq_module:SequenceDescriptor", "course = xmodule.seq_module:SequenceDescriptor", + "customtag = xmodule.template_module:CustomTagDescriptor", + "discuss = xmodule.translation_module:TranslateCustomTagDescriptor", "html = xmodule.html_module:HtmlDescriptor", - "section = xmodule.translation_module:SemanticSectionDescriptor", - "sequential = xmodule.seq_module:SequenceDescriptor", - "vertical = xmodule.vertical_module:VerticalDescriptor", + "image = xmodule.translation_module:TranslateCustomTagDescriptor", "problem = xmodule.capa_module:CapaDescriptor", "problemset = xmodule.seq_module:SequenceDescriptor", + "section = xmodule.translation_module:SemanticSectionDescriptor", + "sequential = xmodule.seq_module:SequenceDescriptor", + "slides = xmodule.translation_module:TranslateCustomTagDescriptor", + "vertical = xmodule.vertical_module:VerticalDescriptor", "video = xmodule.video_module:VideoDescriptor", + "videodev = xmodule.translation_module:TranslateCustomTagDescriptor", "videosequence = xmodule.seq_module:SequenceDescriptor", ] } diff --git a/common/lib/xmodule/template_module.py b/common/lib/xmodule/template_module.py index ae276737e6..52c05616cf 100644 --- a/common/lib/xmodule/template_module.py +++ b/common/lib/xmodule/template_module.py @@ -1,14 +1,9 @@ -import json - -from x_module import XModule, XModuleDescriptor +from xmodule.x_module import XModule +from xmodule.raw_module import RawDescriptor from lxml import etree -class ModuleDescriptor(XModuleDescriptor): - pass - - -class Module(XModule): +class CustomTagModule(XModule): """ This module supports tags of the form @@ -34,9 +29,13 @@ class Module(XModule): def get_html(self): return self.html - def __init__(self, system, xml, item_id, instance_state=None, shared_state=None): - XModule.__init__(self, system, xml, item_id, instance_state, shared_state) - xmltree = etree.fromstring(xml) + 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']) filename = xmltree.find('impl').text params = dict(xmltree.items()) self.html = self.system.render_template(filename, params, namespace='custom_tags') + + +class CustomTagDescriptor(RawDescriptor): + module_class = CustomTagModule diff --git a/common/lib/xmodule/translation_module.py b/common/lib/xmodule/translation_module.py index f5c8bc2fbc..6c358d4eaa 100644 --- a/common/lib/xmodule/translation_module.py +++ b/common/lib/xmodule/translation_module.py @@ -65,3 +65,20 @@ class SemanticSectionDescriptor(XModuleDescriptor): else: xml_object.tag = 'sequence' return system.process_xml(etree.tostring(xml_object)) + + +class TranslateCustomTagDescriptor(XModuleDescriptor): + @classmethod + def from_xml(cls, xml_data, system, org=None, course=None): + """ + Transforms the xml_data from <$custom_tag attr="" attr=""/> to + $custom_tag + """ + + xml_object = etree.fromstring(xml_data) + tag = xml_object.tag + xml_object.tag = 'customtag' + impl = etree.SubElement(xml_object, 'impl') + impl.text = tag + + return system.process_xml(etree.tostring(xml_object))