feat: [FC-0070] add events and style for rendering Split xblock in chromeless template (#35813)
This feature introduces functionalities to improve XBlock interactions within iframes: * Add styles that adopt default styles for Split Test which renders chromless template via iframe in MFE Authoring. * When the isIframeEmbed option is enabled, the XBlock sends a postMessage to the parent window. When sending such a message, the standard link transition is cancelled and the transition is carried out in MFE Authoring.
This commit is contained in:
@@ -82,6 +82,22 @@ def is_unit(xblock, parent_xblock=None):
|
||||
return False
|
||||
|
||||
|
||||
def is_library_content(xblock):
|
||||
"""
|
||||
Returns true if the specified xblock is library content.
|
||||
"""
|
||||
return xblock.category == 'library_content'
|
||||
|
||||
|
||||
def get_parent_if_split_test(xblock):
|
||||
"""
|
||||
Returns the parent of the specified xblock if it is a split test, otherwise returns None.
|
||||
"""
|
||||
parent_xblock = get_parent_xblock(xblock)
|
||||
if parent_xblock and parent_xblock.category == 'split_test':
|
||||
return parent_xblock
|
||||
|
||||
|
||||
def xblock_has_own_studio_page(xblock, parent_xblock=None):
|
||||
"""
|
||||
Returns true if the specified xblock has an associated Studio page. Most xblocks do
|
||||
|
||||
@@ -25,7 +25,11 @@ from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.student.auth import has_course_author_access
|
||||
from common.djangoapps.xblock_django.api import authorable_xblocks, disabled_xblocks
|
||||
from common.djangoapps.xblock_django.models import XBlockStudioConfigurationFlag
|
||||
from cms.djangoapps.contentstore.helpers import is_unit
|
||||
from cms.djangoapps.contentstore.helpers import (
|
||||
get_parent_if_split_test,
|
||||
is_unit,
|
||||
is_library_content,
|
||||
)
|
||||
from cms.djangoapps.contentstore.toggles import (
|
||||
libraries_v1_enabled,
|
||||
libraries_v2_enabled,
|
||||
@@ -148,11 +152,12 @@ def container_handler(request, usage_key_string): # pylint: disable=too-many-st
|
||||
except ItemNotFoundError:
|
||||
return HttpResponseBadRequest()
|
||||
|
||||
is_unit_page = is_unit(xblock)
|
||||
unit = xblock if is_unit_page else None
|
||||
if use_new_unit_page(course.id):
|
||||
if is_unit(xblock) or is_library_content(xblock):
|
||||
return redirect(get_unit_url(course.id, xblock.location))
|
||||
|
||||
if is_unit_page and use_new_unit_page(course.id):
|
||||
return redirect(get_unit_url(course.id, unit.location))
|
||||
if split_xblock := get_parent_if_split_test(xblock):
|
||||
return redirect(get_unit_url(course.id, split_xblock.location))
|
||||
|
||||
container_handler_context = get_container_handler_context(request, usage_key, course, xblock)
|
||||
container_handler_context.update({
|
||||
|
||||
@@ -611,6 +611,7 @@ def _create_block(request):
|
||||
modulestore().update_item(created_block, request.user.id)
|
||||
response["upstreamRef"] = upstream_ref
|
||||
response["static_file_notices"] = asdict(static_file_notices)
|
||||
response["parent_locator"] = parent_locator
|
||||
|
||||
return JsonResponse(response)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user