From b50876fc32bfbb222a7c85820a9a8555a843676c Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Fri, 27 Mar 2015 14:03:46 -0400 Subject: [PATCH] Make XBlockToXModuleShim use json-init-args to record the XModule constructor to shim to --- common/djangoapps/xmodule_modifiers.py | 8 ++++++-- common/lib/xmodule/xmodule/js/src/poll/poll_main.js | 2 +- common/lib/xmodule/xmodule/js/src/xmodule.js | 12 +++++++++--- common/lib/xmodule/xmodule/x_module.py | 3 ++- common/static/js/xblock/core.js | 2 +- common/templates/xblock_wrapper.html | 4 ++-- .../courseware/tests/test_module_render.py | 2 +- 7 files changed, 22 insertions(+), 11 deletions(-) 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 @@
% if js_init_parameters: - % endif - ${content} + ${content}
diff --git a/lms/djangoapps/courseware/tests/test_module_render.py b/lms/djangoapps/courseware/tests/test_module_render.py index d4d4ccc2b5..c803611e88 100644 --- a/lms/djangoapps/courseware/tests/test_module_render.py +++ b/lms/djangoapps/courseware/tests/test_module_render.py @@ -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