Commit b50876fc by Calen Pennington

Make XBlockToXModuleShim use json-init-args to record the XModule constructor to shim to

parent 1f17538d
...@@ -77,7 +77,11 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer, ...@@ -77,7 +77,11 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer,
css_classes = [ css_classes = [
'xblock', 'xblock',
'xblock-{}'.format(markupsafe.escape(view)) 'xblock-{}'.format(markupsafe.escape(view)),
'xblock-{}-{}'.format(
markupsafe.escape(view),
markupsafe.escape(block.scope_ids.block_type),
)
] ]
if isinstance(block, (XModule, XModuleDescriptor)): if isinstance(block, (XModule, XModuleDescriptor)):
...@@ -90,7 +94,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer, ...@@ -90,7 +94,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer,
css_classes.append('xmodule_' + markupsafe.escape(class_name)) css_classes.append('xmodule_' + markupsafe.escape(class_name))
data['type'] = block.js_module_name data['type'] = block.js_module_name
shim_xmodule_js(frag) shim_xmodule_js(block, frag)
if frag.js_init_fn: if frag.js_init_fn:
data['init'] = frag.js_init_fn data['init'] = frag.js_init_fn
......
...@@ -273,7 +273,7 @@ function PollMain(el) { ...@@ -273,7 +273,7 @@ function PollMain(el) {
if ( if (
(tempEl.tagName.toLowerCase() === 'div') && (tempEl.tagName.toLowerCase() === 'div') &&
($(tempEl).hasClass('xmodule_WrapperModule') === true) ($(tempEl).data('block-type') === 'wrapper')
) { ) {
_this.wrapperSectionEl = tempEl; _this.wrapperSectionEl = tempEl;
......
...@@ -58,14 +58,20 @@ ...@@ -58,14 +58,20 @@
return Descriptor; return Descriptor;
}()); }());
this.XBlockToXModuleShim = function (runtime, element) { this.XBlockToXModuleShim = function (runtime, element, initArgs) {
/* /*
* Load a single module (either an edit module or a display module) * Load a single module (either an edit module or a display module)
* from the supplied element, which should have a data-type attribute * from the supplied element, which should have a data-type attribute
* specifying the class to load * specifying the class to load
*/ */
var moduleType = $(element).data('type'), var moduleType, module;
module;
if (initArgs) {
moduleType = initArgs['xmodule-type'];
}
if (!moduleType) {
moduleType = $(element).data('type');
}
if (moduleType === 'None') { if (moduleType === 'None') {
return; return;
......
...@@ -237,12 +237,13 @@ class HTMLSnippet(object): ...@@ -237,12 +237,13 @@ class HTMLSnippet(object):
.format(self.__class__)) .format(self.__class__))
def shim_xmodule_js(fragment): def shim_xmodule_js(block, fragment):
""" """
Set up the XBlock -> XModule shim on the supplied :class:`xblock.fragment.Fragment` Set up the XBlock -> XModule shim on the supplied :class:`xblock.fragment.Fragment`
""" """
if not fragment.js_init_fn: if not fragment.js_init_fn:
fragment.initialize_js('XBlockToXModuleShim') fragment.initialize_js('XBlockToXModuleShim')
fragment.json_init_args = {'xmodule-type': block.js_module_name}
class XModuleMixin(XBlockMixin): class XModuleMixin(XBlockMixin):
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
} }
function initArgs(element) { function initArgs(element) {
var initargs = $('.xblock_json_init_args', element).text(); var initargs = $(element).children('.xblock-json-init-args').remove().text();
return initargs ? JSON.parse(initargs) : {}; return initargs ? JSON.parse(initargs) : {};
} }
......
<div class="${' '.join(classes) | n}" ${data_attributes}> <div class="${' '.join(classes) | n}" ${data_attributes}>
% if js_init_parameters: % if js_init_parameters:
<script type="json/xblock-args" class="xblock_json_init_args"> <script type="json/xblock-args" class="xblock-json-init-args">
${js_init_parameters} ${js_init_parameters}
</script> </script>
% endif % endif
${content} ${content}
</div> </div>
...@@ -432,7 +432,7 @@ class TestHandleXBlockCallback(ModuleStoreTestCase, LoginEnrollmentTestCase): ...@@ -432,7 +432,7 @@ class TestHandleXBlockCallback(ModuleStoreTestCase, LoginEnrollmentTestCase):
for section in expected: for section in expected:
self.assertIn(section, content) self.assertIn(section, content)
doc = PyQuery(content['html']) doc = PyQuery(content['html'])
self.assertEquals(len(doc('div.xblock.xblock-student_view')), 1) self.assertEquals(len(doc('div.xblock-student_view-videosequence')), 1)
@ddt.ddt @ddt.ddt
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment