diff --git a/cms/djangoapps/contentstore/views/item.py b/cms/djangoapps/contentstore/views/item.py index df448141fde1..663f9c6b048c 100644 --- a/cms/djangoapps/contentstore/views/item.py +++ b/cms/djangoapps/contentstore/views/item.py @@ -2,6 +2,7 @@ from __future__ import absolute_import import hashlib +import json import logging from collections import OrderedDict from datetime import datetime @@ -268,7 +269,9 @@ def xblock_view_handler(request, usage_key_string, view_name): if 'application/json' in accept_header: store = modulestore() xblock = store.get_item(usage_key) - container_views = ['container_preview', 'reorderable_container_child_preview', 'container_child_preview'] + container_views = [ + 'container_preview', 'reorderable_container_child_preview', 'library_container_child_preview' + ] # wrap the generated fragment in the xmodule_editor div so that the javascript # can bind to it correctly @@ -324,6 +327,7 @@ def xblock_view_handler(request, usage_key_string, view_name): ) force_render = request.GET.get('force_render', None) + can_edit_visibility = request.GET.get('can_edit_visibility', None) # Set up the context to be passed to each XBlock's render method. context = { @@ -336,6 +340,9 @@ def xblock_view_handler(request, usage_key_string, view_name): 'force_render': force_render, } + if can_edit_visibility is not None: + context['can_edit_visibility'] = json.loads(can_edit_visibility) + fragment = get_preview_fragment(request, xblock, context) # Note that the container view recursively adds headers into the preview fragment, diff --git a/cms/static/js/views/paged_container.js b/cms/static/js/views/paged_container.js index 31df130c2b1e..02a4ed068cb7 100644 --- a/cms/static/js/views/paged_container.js +++ b/cms/static/js/views/paged_container.js @@ -73,7 +73,7 @@ define(['jquery', 'underscore', 'common/js/components/utils/view_utils', 'js/vie }; }, - new_child_view: 'container_child_preview', + new_child_view: 'library_container_child_preview', render: function(options) { options = options || {}; diff --git a/cms/static/js/views/pages/container.js b/cms/static/js/views/pages/container.js index 73ee99d834bd..1b6551bd6463 100644 --- a/cms/static/js/views/pages/container.js +++ b/cms/static/js/views/pages/container.js @@ -298,11 +298,11 @@ define(['jquery', 'underscore', 'gettext', 'js/views/pages/base_page', 'common/j * Refresh an xblock element inline on the page, using the specified xblockInfo. * Note that the element is removed and replaced with the newly rendered xblock. * @param xblockElement The xblock element to be refreshed. - * @param block_added Specifies if a block has been added, rather than just needs + * @param blockAdded Specifies if a block has been added, rather than just needs * refreshing. * @returns {jQuery promise} A promise representing the complete operation. */ - refreshChildXBlock: function(xblockElement, block_added, is_duplicate) { + refreshChildXBlock: function(xblockElement, blockAdded, isDuplicate, renderParameters) { var self = this, xblockInfo, TemporaryXBlockView, @@ -327,8 +327,9 @@ define(['jquery', 'underscore', 'gettext', 'js/views/pages/base_page', 'common/j el: xblockElement }); return temporaryView.render({ + data: renderParameters || {}, success: function() { - self.onXBlockRefresh(temporaryView, block_added, is_duplicate); + self.onXBlockRefresh(temporaryView, blockAdded, isDuplicate); temporaryView.unbind(); // Remove the temporary view }, initRuntimeData: this diff --git a/cms/static/js/views/pages/paged_container.js b/cms/static/js/views/pages/paged_container.js index b8317d5fcc90..80996ef3a28e 100644 --- a/cms/static/js/views/pages/paged_container.js +++ b/cms/static/js/views/pages/paged_container.js @@ -28,11 +28,13 @@ define(['jquery', 'underscore', 'gettext', 'js/views/pages/container', 'js/views refreshXBlock: function(element, block_added, is_duplicate) { var xblockElement = this.findXBlockElement(element), - rootLocator = this.xblockView.model.id; + rootLocator = this.xblockView.model.id, + renderParameters; if (xblockElement.length === 0 || xblockElement.data('locator') === rootLocator) { this.render({refresh: true, block_added: block_added}); } else { - this.refreshChildXBlock(xblockElement, block_added, is_duplicate); + renderParameters = {can_edit_visibility: false}; + this.refreshChildXBlock(xblockElement, block_added, is_duplicate, renderParameters); } }, diff --git a/cms/static/js/views/xblock.js b/cms/static/js/views/xblock.js index b90554b866e7..605718c0a56e 100644 --- a/cms/static/js/views/xblock.js +++ b/cms/static/js/views/xblock.js @@ -18,11 +18,13 @@ define(['jquery', 'underscore', 'common/js/components/utils/view_utils', 'js/vie var self = this, view = this.view, xblockInfo = this.model, - xblockUrl = xblockInfo.url(); + xblockUrl = xblockInfo.url(), + data = options === 'undefined' ? {} : options.data; return $.ajax({ url: decodeURIComponent(xblockUrl) + '/' + view, type: 'GET', cache: false, + data: data, headers: {Accept: 'application/json'}, success: function(fragment) { self.handleXBlockFragment(fragment, options);