diff --git a/common/djangoapps/xmodule_modifiers.py b/common/djangoapps/xmodule_modifiers.py index f82a194e93..160e3e5fb3 100644 --- a/common/djangoapps/xmodule_modifiers.py +++ b/common/djangoapps/xmodule_modifiers.py @@ -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 diff --git a/common/lib/xmodule/xmodule/js/src/poll/poll_main.js b/common/lib/xmodule/xmodule/js/src/poll/poll_main.js index 3b61f5744f..13542899b4 100644 --- a/common/lib/xmodule/xmodule/js/src/poll/poll_main.js +++ b/common/lib/xmodule/xmodule/js/src/poll/poll_main.js @@ -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; diff --git a/common/lib/xmodule/xmodule/js/src/xmodule.js b/common/lib/xmodule/xmodule/js/src/xmodule.js index 7676f33da5..be3f911e4d 100644 --- a/common/lib/xmodule/xmodule/js/src/xmodule.js +++ b/common/lib/xmodule/xmodule/js/src/xmodule.js @@ -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; diff --git a/common/lib/xmodule/xmodule/x_module.py b/common/lib/xmodule/xmodule/x_module.py index 3d01be6a71..6bcc147c89 100644 --- a/common/lib/xmodule/xmodule/x_module.py +++ b/common/lib/xmodule/xmodule/x_module.py @@ -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): diff --git a/common/static/js/xblock/core.js b/common/static/js/xblock/core.js index 99b2ae0489..1c6632c71d 100644 --- a/common/static/js/xblock/core.js +++ b/common/static/js/xblock/core.js @@ -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) : {}; } diff --git a/common/templates/xblock_wrapper.html b/common/templates/xblock_wrapper.html index 41951dc61c..998d00a90a 100644 --- a/common/templates/xblock_wrapper.html +++ b/common/templates/xblock_wrapper.html @@ -1,8 +1,8 @@