Something went wrong on our end
Select Git revision
lecture.html
Forked from
Video AG Infrastruktur / website
192 commits behind, 6 commits ahead of the upstream repository.
-
Andreas Valder authoredAndreas Valder authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
lecture.html 5.58 KiB
{% from 'macros.html' import player %}
{% from 'macros.html' import video_download_btn %}
{% from 'macros.html' import video_embed_btn %}
{% from 'macros.html' import vtttime %}
{% from 'macros.html' import moderator_editor %}
{% from 'macros.html' import moderator_editor_time %}
{% from 'macros.html' import moderator_delete %}
{% from 'macros.html' import moderator_checkbox %}
{% set page_border = 1 -%}
{% extends "base.html" %}
{% block title %}- {{ course.title }}: {{ lecture.title}}{% endblock %}
{% block header %}
{{ super() }}
<meta property="og:image" content="{{ config.VIDEOPREFIX }}/thumbnail/l_{{lecture.id}}.jpg" />
<meta property="og:title" content="{{ course.title }}: {{ lecture.title}}" />
<meta property="og:description" content="{{ lecture.comment }}" />
{% endblock %}
{% block content %}
<div class="card m-1">
<div class="card-header">
<span class="card-title"><strong><a href="{{url_for('course', handle=course.handle)}}#lecture-{{lecture.id}}">{{ course.title }}</a></strong>: {{ lecture.title}}</span>
</div>
<div class="card-body">
<div class="row" style="padding: 0px;">
<div class="col-12" style="padding-bottom: 5px;">
<a href="{{url_for('course', handle=course.handle)}}#lecture-{{lecture.id}}" class="btn btn-secondary" ><span class="fa fa-chevron-circle-left" aria-hidden="true"></span> Zur Veranstaltungsseite</a>
<ul class="list-inline float-right">
<li class="list-inline-item">{{ video_embed_btn(lecture.id, course=course.handle) }}</li>
<li class="dropdown list-inline-item">{{ video_download_btn(videos) }}</li>
</ul>
</div>
</div>
<div class="row">
<div class="col-12" style="padding: 0px">
{{ player(lecture, videos, get_flashed_messages(category_filter=['player']), seek=seek) }}
</div>
<div class="col-xs-12" style="padding-top: 20px">
<p>{{ moderator_editor(['lectures',lecture.id,'comment'], lecture.comment) }}</p>
</div>
<div class="col-xs-12 table-responsive" style="padding-top: 10px;">
<p>Kapitel:
<button class="btn btn-secondary" id="hintnewchapter">{% if ismod() %}Neues Kapitel{% else %}Kapitelmarker vorschlagen{% endif %}</button>
</p>
<table class="table table-hover">
<tr>
<th style="width: 130px;">Start</th>
<th>Kapitel</th>
{% if ismod() %}
<th>Sichtbar</th>
<th></th>
{% endif %}
</tr>
{% for c in chapters|sort(attribute='time') %}
<tr>
<td>
<a class="chapterlink" href="{{url_for('lecture', course=course.handle, id=lecture.id, t=c['time'])}}" data-seek-time="{{c['time']}}">{{ c.time|time_offset }}</a>
<br>
{% if ismod() %}
{{ moderator_editor(['chapters',c.id,'time'],c['time'],true) }}
{% endif %}
</td>
<td>{{ moderator_editor(['chapters',c.id,'text'],c['text']|e) }}</td>
{% if ismod() %}
<td>{{ moderator_checkbox(['chapters',c.id,'visible'], c.visible) }}</td>
<td>{{ moderator_delete(['chapters',c.id,'deleted']) }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{% if ismod() %}
<div class="card m-1">
<div class="card-header">
<a data-toggle="collapse" href="#statscard" class="plotlyresize"><span class="card-title">Statistiken</span></a>
</div>
<div class="ard-body collapse out card-collapse" id="statscard">
<div class="row m-1">
<div class="col-6 col-xs-12">
<p class="text-center">Zuschauer pro Tag</p>
<div class="plot-view" data-url="{{url_for('stats_viewsperday', req="lecture", param=lecture.id)}}"></div>
</div>
<div class="col-6 col-xs-12">
<p class="text-center">Zuschauer im Livestream</p>
<div class="plot-view" data-url="{{url_for('stats_generic', req="live_views", param=lecture.id)}}" data-reload="60000"></div>
</div>
</div>
</div>
</div>
{% endif %}
<script>
function hintchapterclick (src) {
$.ajax({
method: "GET",
url: $(src).data('url'),
data: $(src).serialize(),
success: function(data)
{
{% if not ismod() %}
alert("Kapitelmarker vorgeschlagen. Danke!");
{% else %}
window.location.reload();
{% endif %}
$('#hintnewchapter').click();
}
});
return false;
}
$(function() {
$( "#hintnewchapter" ).popover(
{
html:true,
title:'Kapitelmarkierung vorschlagen',
placement: 'bottom',
container: 'body',
content: function() {
var zeropad = function (num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
};
var timestamp = videojs('videoplayer').currentTime()
var h = zeropad( Math.trunc(timestamp/3600),2);
var m = zeropad( Math.trunc((timestamp%3600)/60),2);
var s = zeropad( Math.trunc(timestamp%60),2);
var timeasstring = h+':'+m+':'+s;
return '<form method="post" data-url="{{ url_for('suggest_chapter', lectureid=lecture.id) }}" onSubmit="return hintchapterclick(this);"><input class="form-control" placeholder="00:00.000" name="time" type="text" value="'+timeasstring+'"><br><input class="form-control" placeholder="Kapitel" name="text" type="text"><br><input type="submit" class="btn btn-secondary" value="{% if ismod() %}Hinzufügen{% else %}Vorschlagen{% endif %}"></form>';
}
})
});
$(document).ready(function() {
$("a.reloadonclose").click(function () {
var popup = window.open(this.href, this.target);
if (!popup)
return true;
var popup_check = setInterval(function() {
if (popup.closed) {
clearInterval(popup_check);
location.reload();
};
}, 500);
return false;
});
$("a.chapterlink").click(function () {
videojs('videoplayer').currentTime($(this).data("seek-time"));
return false;
});
});
</script>
{% endblock %}