* feat: Implement paste button * chore: improve docs and add tests for python API * fix: drive-by fix to use a better API for comparing XML * feat: track which XBlock something was copied from * feat: add tests * feat: enable import linter so content_staging's public API is respected * fix: error seen when trying to paste drag-and-drop-v2 blocks * fix: use strip_text=True consistently for XML comparisons * refactor: rename get_user_clipboard_status to get_user_clipboard * feat: Better error reporting when pasting in Studio * chore: convert new test suite to pytest assertions * refactor: push READY status check into the API per review suggestion * fix: use strip_text=True consistently for XML comparisons * fix: store "copied_from_block" as a string to avoid Reference field issues * fix: minor lint error * refactor: move data types to data.py per OEP-49
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""
|
|
Mixin class that provides authoring capabilities for XBlocks.
|
|
"""
|
|
|
|
|
|
import logging
|
|
|
|
from django.conf import settings
|
|
from web_fragments.fragment import Fragment
|
|
from xblock.core import XBlock, XBlockMixin
|
|
from xblock.fields import String, Scope
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
VISIBILITY_VIEW = 'visibility_view'
|
|
|
|
|
|
@XBlock.needs("i18n")
|
|
@XBlock.needs("mako")
|
|
class AuthoringMixin(XBlockMixin):
|
|
"""
|
|
Mixin class that provides authoring capabilities for XBlocks.
|
|
"""
|
|
def _get_studio_resource_url(self, relative_url):
|
|
"""
|
|
Returns the Studio URL to a static resource.
|
|
"""
|
|
return settings.STATIC_URL + relative_url
|
|
|
|
def visibility_view(self, _context=None):
|
|
"""
|
|
Render the view to manage an xblock's visibility settings in Studio.
|
|
Args:
|
|
_context: Not actively used for this view.
|
|
Returns:
|
|
(Fragment): An HTML fragment for editing the visibility of this XBlock.
|
|
"""
|
|
fragment = Fragment()
|
|
from cms.djangoapps.contentstore.utils import reverse_course_url
|
|
fragment.add_content(self.runtime.service(self, 'mako').render_template('visibility_editor.html', {
|
|
'xblock': self,
|
|
'manage_groups_url': reverse_course_url('group_configurations_list_handler', self.location.course_key),
|
|
}))
|
|
fragment.add_javascript_url(self._get_studio_resource_url('/js/xblock/authoring.js'))
|
|
fragment.initialize_js('VisibilityEditorInit')
|
|
return fragment
|
|
|
|
copied_from_block = String(
|
|
# Note: used by the content_staging app. This field is not needed in the LMS.
|
|
help="ID of the block that this one was copied from, if any. Used when copying and pasting blocks in Studio.",
|
|
scope=Scope.settings,
|
|
enforce_type=True,
|
|
)
|