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,
css_classes = [
'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)):
......@@ -90,7 +94,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer,
css_classes.append('xmodule_' + markupsafe.escape(class_name))
data['type'] = block.js_module_name
shim_xmodule_js(frag)
shim_xmodule_js(block, frag)
if frag.js_init_fn:
data['init'] = frag.js_init_fn
......
......@@ -273,7 +273,7 @@ function PollMain(el) {
if (
(tempEl.tagName.toLowerCase() === 'div') &&
($(tempEl).hasClass('xmodule_WrapperModule') === true)
($(tempEl).data('block-type') === 'wrapper')
) {
_this.wrapperSectionEl = tempEl;
......
......@@ -58,14 +58,20 @@
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)
* from the supplied element, which should have a data-type attribute
* specifying the class to load
*/
var moduleType = $(element).data('type'),
module;
var moduleType, module;
if (initArgs) {
moduleType = initArgs['xmodule-type'];
}
if (!moduleType) {
moduleType = $(element).data('type');
}
if (moduleType === 'None') {
return;
......
......@@ -237,12 +237,13 @@ class HTMLSnippet(object):
.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`
"""
if not fragment.js_init_fn:
fragment.initialize_js('XBlockToXModuleShim')
fragment.json_init_args = {'xmodule-type': block.js_module_name}
class XModuleMixin(XBlockMixin):
......
......@@ -32,7 +32,7 @@
}
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) : {};
}
......
<div class="${' '.join(classes) | n}" ${data_attributes}>
% 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}
</script>
% endif
${content}
${content}
</div>
......@@ -432,7 +432,7 @@ class TestHandleXBlockCallback(ModuleStoreTestCase, LoginEnrollmentTestCase):
for section in expected:
self.assertIn(section, content)
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
......
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