The content library tests were failing to locate templates when rendering XBlocks, but since these tests are skipped in CI, the issue went undetected. This fix is marked temporary because a proper fix involves adding lms/templates to the cms.envs.test MAKO_TEMPLATE_DIRS_BASE list. This was tried, and caused unrelated tests to fail, and so we took this approach instead. See PR for full details.
123 lines
4.9 KiB
HTML
123 lines
4.9 KiB
HTML
<!--
|
|
common/test/video.html
|
|
Placeholder template for openedx content_library tests -->
|
|
<%page expression_filter="h"/>
|
|
|
|
<%!
|
|
from django.utils.translation import ugettext as _
|
|
from openedx.core.djangolib.js_utils import (
|
|
dump_js_escaped_json, js_escaped_string
|
|
)
|
|
%>
|
|
% if display_name is not UNDEFINED and display_name is not None:
|
|
<h3 class="hd hd-2">${display_name}</h3>
|
|
% endif
|
|
|
|
<div
|
|
id="video_${id}"
|
|
class="video closed"
|
|
data-metadata='${metadata}'
|
|
data-bumper-metadata='${bumper_metadata}'
|
|
data-autoadvance-enabled="${autoadvance_enabled}"
|
|
data-poster='${poster}'
|
|
tabindex="-1"
|
|
>
|
|
<div class="focus_grabber first"></div>
|
|
|
|
<div class="tc-wrapper">
|
|
<div class="video-wrapper">
|
|
<span tabindex="0" class="spinner" aria-hidden="false" aria-label="${_('Loading video player')}"></span>
|
|
<span tabindex="-1" class="btn-play fa fa-youtube-play fa-2x is-hidden" aria-hidden="true" aria-label="${_('Play video')}"></span>
|
|
<div class="video-player-pre"></div>
|
|
<div class="video-player">
|
|
<div id="${id}"></div>
|
|
<h4 class="hd hd-4 video-error is-hidden">${_('No playable video sources found.')}</h4>
|
|
<h4 class="hd hd-4 video-hls-error is-hidden">
|
|
${_('Your browser does not support this video format. Try using a different browser.')}
|
|
</h4>
|
|
</div>
|
|
<div class="video-player-post"></div>
|
|
<div class="closed-captions"></div>
|
|
<div class="video-controls is-hidden">
|
|
<div>
|
|
<div class="vcr"><div class="vidtime">0:00 / 0:00</div></div>
|
|
<div class="secondary-controls"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="focus_grabber last"></div>
|
|
|
|
% if download_video_link or track or handout or branding_info:
|
|
<h3 class="hd hd-4 downloads-heading sr" id="video-download-transcripts_${id}">${_('Downloads and transcripts')}</h3>
|
|
<div class="wrapper-downloads" role="region" aria-labelledby="video-download-transcripts_${id}">
|
|
% if download_video_link:
|
|
<div class="wrapper-download-video">
|
|
<h4 class="hd hd-5">${_('Video')}</h4>
|
|
<a class="btn-link video-sources video-download-button" href="${download_video_link}">
|
|
${_('Download video file')}
|
|
</a>
|
|
</div>
|
|
% endif
|
|
% if track:
|
|
<div class="wrapper-download-transcripts">
|
|
<h4 class="hd hd-5">${_('Transcripts')}</h4>
|
|
% if transcript_download_format:
|
|
<ul class="list-download-transcripts">
|
|
% for item in transcript_download_formats_list:
|
|
<li class="transcript-option">
|
|
<% dname = _("Download {file}").format(file=item['display_name']) %>
|
|
<a class="btn btn-link" href="${track}" data-value="${item['value']}">${dname}</a>
|
|
</li>
|
|
% endfor
|
|
</ul>
|
|
% else:
|
|
<a class="btn-link external-track" href="${track}">${_('Download transcript')}</a>
|
|
% endif
|
|
</div>
|
|
% endif
|
|
% if handout:
|
|
<div class="wrapper-handouts">
|
|
<h4 class="hd hd-5">${_('Handouts')}</h4>
|
|
<a class="btn-link" href="${handout}">${_('Download Handout')}</a>
|
|
</div>
|
|
% endif
|
|
% if branding_info:
|
|
<div class="branding">
|
|
<span class="host-tag">${branding_info['logo_tag']}</span>
|
|
<a href="${branding_info['url']}"><img class="brand-logo" src="${branding_info['logo_src']}" alt="${branding_info['logo_tag']}" /></a>
|
|
</div>
|
|
% endif
|
|
</div>
|
|
% endif
|
|
</div>
|
|
% if cdn_eval:
|
|
<script>
|
|
//TODO: refactor this js into a separate file.
|
|
function sendPerformanceBeacon(id, expgroup, value, event_name) {
|
|
var data = {event: event_name, id: id, expgroup: expgroup, value: value, page: "html5vid"};
|
|
$.ajax({method: "POST", url: "/performance", data: data});
|
|
}
|
|
var cdnStartTime;
|
|
var salt = Math.floor((1 + Math.random()) * 0x100000).toString(36);
|
|
var id = "${id | n, js_escaped_string}";
|
|
function initializeCDNExperiment() {
|
|
sendPerformanceBeacon(id + "_" + salt, ${cdn_exp_group | n, dump_js_escaped_json}, "", "load");
|
|
cdnStartTime = Date.now();
|
|
$.each(['loadstart', 'abort', 'error', 'stalled', 'loadedmetadata',
|
|
'loadeddata', 'canplay', 'canplaythrough', 'seeked'],
|
|
function(index, eventName) {
|
|
$("#video_" + id).bind("html5:" + eventName, null, function() {
|
|
timeElapsed = Date.now() - cdnStartTime;
|
|
sendPerformanceBeacon(id + "_" + salt, ${cdn_exp_group | n, dump_js_escaped_json}, timeElapsed, eventName);
|
|
});
|
|
});
|
|
}
|
|
$("#video_" + id).bind("initialize", null, initializeCDNExperiment);
|
|
if ($("#video_" + id).hasClass("is-initialized")) {
|
|
initializeCDNExperiment();
|
|
}
|
|
</script>
|
|
% endif;
|