<%! from django.utils.translation import ugettext as _ from contentstore.views.helpers import xblock_studio_url import json %> <% xblock_url = xblock_studio_url(xblock) show_inline = xblock.has_children and not xblock_url section_class = "level-nesting" if show_inline else "level-element" collapsible_class = "is-collapsible" if xblock.has_children else "" label = xblock.display_name or xblock.scope_ids.block_type messages = json.dumps(xblock.validate().to_json()) %> <%namespace name='static' file='static_content.html'/> <%block name="header_extras"> <script type="text/template" id="xblock-validation-messages-tpl"> <%static:include path="js/xblock-validation-messages.underscore" /> </script> </%block> <script type='text/javascript'> require(["js/views/xblock_validation", "js/models/xblock_validation"], function (XBlockValidationView, XBlockValidationModel) { var validationMessages = ${messages}; % if xblock_url and not is_root: validationMessages.showSummaryOnly = true; % endif var model = new XBlockValidationModel(validationMessages, {parse: true}); if (!model.get("empty")) { var validationEle = $('div.xblock-validation-messages[data-locator="${xblock.location | h}"]'); var viewOptions = { el: validationEle, model: model }; % if is_root: viewOptions.root = true; % endif var view = new XBlockValidationView(viewOptions); view.render(); } }); </script> % if not is_root: % if is_reorderable: <li class="studio-xblock-wrapper is-draggable" data-locator="${xblock.location | h}" data-course-key="${xblock.location.course_key | h}"> % else: <div class="studio-xblock-wrapper" data-locator="${xblock.location | h}" data-course-key="${xblock.location.course_key | h}"> % endif <section class="wrapper-xblock ${section_class} ${collapsible_class}"> % endif <header class="xblock-header xblock-header-${xblock.category}"> <div class="xblock-header-primary"> <div class="header-details"> % if show_inline: <a href="#" data-tooltip="${_('Expand or Collapse')}" class="action expand-collapse collapse"> <i class="icon-caret-down ui-toggle-expansion"></i> <span class="sr">${_('Expand or Collapse')}</span> </a> % endif <span class="xblock-display-name">${label | h}</span> </div> <div class="header-actions"> <ul class="actions-list"> % if not is_root: % if not show_inline: <li class="action-item action-edit"> <a href="#" class="edit-button action-button"> <i class="icon-pencil"></i> <span class="action-button-text">${_("Edit")}</span> </a> </li> <li class="action-item action-duplicate"> <a href="#" data-tooltip="${_("Duplicate")}" class="duplicate-button action-button"> <i class="icon-copy"></i> <span class="sr">${_("Duplicate")}</span> </a> </li> % endif <li class="action-item action-delete"> <a href="#" data-tooltip="${_("Delete")}" class="delete-button action-button"> <i class="icon-trash"></i> <span class="sr">${_("Delete")}</span> </a> </li> % if is_reorderable: <li class="action-item action-drag"> <span data-tooltip="${_('Drag to reorder')}" class="drag-handle action"></span> </li> % endif % endif </ul> </div> </div> % if not is_root: <div class="wrapper-xblock-message xblock-validation-messages" data-locator="${xblock.location | h}"/> % if xblock_url: <div class="xblock-header-secondary"> <div class="meta-info">${_('This block contains multiple components.')}</div> <ul class="actions-list"> <li class="action-item action-view"> <a href="${xblock_url}" class="action-button"> ## Translators: this is a verb describing the action of viewing more details <span class="action-button-text">${_('View')}</span> <i class="icon-arrow-right"></i> </a> </li> </ul> </div> % endif % endif </header> % if is_root: <div class="wrapper-xblock-message xblock-validation-messages" data-locator="${xblock.location | h}"/> % endif % if is_root or not xblock_url: <article class="xblock-render"> ${content} </article> % else: <div class="xblock-message-area"> ${content} % endif % if not is_root: </section> % if is_reorderable: </li> % else: </div> % endif % endif