This allows course authors to choose between two difference licenses for their course content: All Rights Reserved, or Creative Commons. In the backend, XBlocks that wish to allow custom licenses need only inherit from LicenseMixin, which adds a `license` field as a string. License information is displayed in the Studio editor view, and just below the rendered XBlock in the LMS. In addition, if the course block itself has a custom license set, this license will display just below the main body of the page on courseware pages. This entire feature is gated behind the LICENSING feature flag.
235 lines
8.3 KiB
HTML
235 lines
8.3 KiB
HTML
<%! from django.utils.translation import ugettext as _ %>
|
|
<%! from django.template.defaultfilters import escapejs %>
|
|
<%! from microsite_configuration import page_title_breadcrumbs %>
|
|
<%! from edxnotes.helpers import is_feature_enabled as is_edxnotes_enabled %>
|
|
<%inherit file="/main.html" />
|
|
<%namespace name='static' file='/static_content.html'/>
|
|
<%def name="course_name()">
|
|
<% return _("{course_number} Courseware").format(course_number=course.display_number_with_default) %>
|
|
</%def>
|
|
|
|
<%block name="bodyclass">courseware ${course.css_class or ''}</%block>
|
|
<%block name="title"><title>
|
|
% if section_title:
|
|
${page_title_breadcrumbs(section_title, course_name())}
|
|
% else:
|
|
${page_title_breadcrumbs(course_name())}
|
|
%endif
|
|
</title></%block>
|
|
|
|
<%block name="header_extras">
|
|
% for template_name in ["image-modal"]:
|
|
<script type="text/template" id="${template_name}-tpl">
|
|
<%static:include path="js/${template_name}.underscore" />
|
|
</script>
|
|
% endfor
|
|
|
|
% for template_name in ["course_search_item", "course_search_results", "search_loading", "search_error"]:
|
|
<script type="text/template" id="${template_name}-tpl">
|
|
<%static:include path="search/${template_name}.underscore" />
|
|
</script>
|
|
% endfor
|
|
|
|
</%block>
|
|
|
|
<%block name="headextra">
|
|
<%static:css group='style-course-vendor'/>
|
|
<%static:css group='style-course'/>
|
|
## Utility: Notes
|
|
% if is_edxnotes_enabled(course):
|
|
<%static:css group='style-student-notes'/>
|
|
% endif
|
|
|
|
<%block name="nav_skip">${"#seq_content" if section_title else "#course-content"}</%block>
|
|
|
|
<%include file="../discussion/_js_head_dependencies.html" />
|
|
|
|
% if show_chat:
|
|
<link rel="stylesheet" href="${static.url('css/vendor/ui-lightness/jquery-ui-1.8.22.custom.css')}" />
|
|
## It'd be better to have this in a place like lms/css/vendor/candy,
|
|
## but the candy_res/ folder contains images and other junk, and it
|
|
## all needs to stay together for the Candy.js plugin to work.
|
|
<link rel="stylesheet" href="${static.url('candy_res/candy_full.css')}" />
|
|
% endif
|
|
${fragment.head_html()}
|
|
</%block>
|
|
|
|
<%block name="js_extra">
|
|
<script type="text/javascript" src="${static.url('js/vendor/jquery.scrollTo-1.4.2-min.js')}"></script>
|
|
<script type="text/javascript" src="${static.url('js/vendor/flot/jquery.flot.js')}"></script>
|
|
|
|
## codemirror
|
|
<script type="text/javascript" src="${static.url('js/vendor/codemirror-compressed.js')}"></script>
|
|
|
|
<%static:js group='courseware'/>
|
|
<%static:js group='discussion'/>
|
|
|
|
<%include file="../discussion/_js_body_dependencies.html" />
|
|
% if staff_access:
|
|
<%include file="xqa_interface.html"/>
|
|
% endif
|
|
|
|
<script type="text/javascript">
|
|
var $$course_id = "${course.id | escapejs}";
|
|
|
|
$(function(){
|
|
$(".ui-accordion-header a, .ui-accordion-content .subtitle").each(function() {
|
|
var elemText = $(this).text().replace(/^\s+|\s+$/g,''); // Strip leading and trailing whitespace
|
|
var wordArray = elemText.split(" ");
|
|
var finalTitle = "";
|
|
if (wordArray.length > 0) {
|
|
for (i=0;i<=wordArray.length-1;i++) {
|
|
finalTitle += wordArray[i];
|
|
if (i == (wordArray.length-2)) {
|
|
finalTitle += " ";
|
|
} else if (i == (wordArray.length-1)) {
|
|
// Do nothing
|
|
} else {
|
|
finalTitle += " ";
|
|
}
|
|
}
|
|
}
|
|
$(this).html(finalTitle);
|
|
});
|
|
});
|
|
</script>
|
|
|
|
% if show_chat:
|
|
<script type="text/javascript" src="${static.url('js/vendor/candy_libs/libs.min.js')}"></script>
|
|
<script type="text/javascript" src="${static.url('js/vendor/candy.min.js')}"></script>
|
|
|
|
<script type="text/javascript">
|
|
// initialize the Candy.js plugin
|
|
$(document).ready(function() {
|
|
Candy.init("http://${chat['domain']}:5280/http-bind/", {
|
|
core: { debug: true, autojoin: ["${chat['room']}@conference.${chat['domain']}"] },
|
|
view: { resources: "${static.url('candy_res/')}"}
|
|
});
|
|
Candy.Core.connect("${chat['username']}", "${chat['password']}");
|
|
|
|
// show/hide the chat widget
|
|
$('#chat-toggle').click(function() {
|
|
var toggle = $(this);
|
|
if (toggle.hasClass('closed')) {
|
|
$('#chat-block').show().animate({height: '400px'}, 'slow', function() {
|
|
$('#chat-open').hide();
|
|
$('#chat-close').show();
|
|
});
|
|
} else {
|
|
$('#chat-block').animate({height: '0px'}, 'slow', function() {
|
|
$('#chat-open').show();
|
|
$('#chat-close').hide();
|
|
$(this).hide(); // do this at the very end
|
|
});
|
|
}
|
|
toggle.toggleClass('closed');
|
|
});
|
|
});
|
|
</script>
|
|
% endif
|
|
|
|
${fragment.foot_html()}
|
|
|
|
</%block>
|
|
|
|
<%include file="/dashboard/_dashboard_prompt_midcourse_reverify.html" />
|
|
% if default_tab:
|
|
<%include file="/courseware/course_navigation.html" />
|
|
% else:
|
|
<%include file="/courseware/course_navigation.html" args="active_page='courseware'" />
|
|
% endif
|
|
|
|
<div class="container">
|
|
<div class="course-wrapper">
|
|
|
|
% if disable_accordion is UNDEFINED or not disable_accordion:
|
|
<div class="course-index" role="navigation">
|
|
<header id="open_close_accordion">
|
|
<a href="#">${_("close")}</a>
|
|
</header>
|
|
|
|
% if settings.FEATURES.get('ENABLE_COURSEWARE_SEARCH'):
|
|
<div id="courseware-search-bar" class="search-bar courseware-search-bar" role="search" aria-label="Course">
|
|
<form>
|
|
<label for="course-search-input" class="sr">${_('Course Search')}</label>
|
|
<div class="search-field-wrapper">
|
|
<input id="course-search-input" type="text" class="search-field"/>
|
|
<button type="submit" class="search-button">
|
|
${_('search')} <i class="icon fa fa-search" aria-hidden="true"></i>
|
|
</button>
|
|
<button type="button" class="cancel-button" aria-label="${_('Clear search')}">
|
|
<i class="icon fa fa-remove" aria-hidden="true"></i>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
% endif
|
|
|
|
<div id="accordion" style="display: none">
|
|
<nav aria-label="${_('Course Navigation')}">
|
|
% if accordion.strip():
|
|
${accordion}
|
|
% else:
|
|
<div class="chapter">${_("No content has been added to this course")}</div>
|
|
% endif
|
|
</nav>
|
|
</div>
|
|
|
|
</div>
|
|
% endif
|
|
<section class="course-content" id="course-content" role="main" aria-label=“Content”>
|
|
% if getattr(course, 'entrance_exam_enabled') and \
|
|
getattr(course, 'entrance_exam_minimum_score_pct') and \
|
|
entrance_exam_current_score is not UNDEFINED:
|
|
% if not entrance_exam_passed:
|
|
<p class="sequential-status-message">
|
|
${_('To access course materials, you must score {required_score}% or higher on this \
|
|
exam. Your current score is {current_score}%.').format(
|
|
required_score=int(course.entrance_exam_minimum_score_pct * 100),
|
|
current_score=int(entrance_exam_current_score * 100)
|
|
)}
|
|
</p>
|
|
% else:
|
|
<p class="sequential-status-message">
|
|
${_('Your score is {current_score}%. You have passed the entrance exam.').format(
|
|
current_score=int(entrance_exam_current_score * 100)
|
|
)}
|
|
</p>
|
|
% endif
|
|
% endif
|
|
|
|
${fragment.body_html()}
|
|
</section>
|
|
% if settings.FEATURES.get('ENABLE_COURSEWARE_SEARCH'):
|
|
<section id="courseware-search-results" class="search-results courseware-search-results" data-course-id="${course.id}">
|
|
</section>
|
|
% endif
|
|
</div>
|
|
</div>
|
|
<div class="container-footer">
|
|
% if settings.FEATURES.get("LICENSING", False) and getattr(course, "license", None):
|
|
<div class="course-license">
|
|
<%include file="../license.html" args="license=course.license" />
|
|
</div>
|
|
% endif
|
|
</div>
|
|
|
|
<nav class="nav-utilities ${"has-utility-calculator" if course.show_calculator else ""}" aria-label="${_('Course Utilities')}">
|
|
## Utility: Chat
|
|
% if show_chat:
|
|
<%include file="/chat/toggle_chat.html" />
|
|
% endif
|
|
|
|
## Utility: Notes
|
|
% if is_edxnotes_enabled(course):
|
|
<%include file="/edxnotes/toggle_notes.html" args="course=course"/>
|
|
% endif
|
|
|
|
## Utility: Calc
|
|
% if course.show_calculator:
|
|
<%include file="/calculator/toggle_calculator.html" />
|
|
% endif
|
|
</nav>
|
|
|
|
<%include file="../modal/accessible_confirm.html" />
|