Make XBlockToXModuleShim use json-init-args to record the XModule constructor to shim to
This commit is contained in:
@@ -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) : {};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<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
|
||||
|
||||
Reference in New Issue
Block a user