Scoremanager: pdf_views
This commit is contained in:
committed by
Martin Bauer
parent
7ad5ec21fc
commit
5a3d739a9b
133
scoremanager/templates/scoremanager/list_repertoire.html
Normal file
133
scoremanager/templates/scoremanager/list_repertoire.html
Normal file
@@ -0,0 +1,133 @@
|
||||
{% extends "website/base.html" %} {% load sekizai_tags staticfiles %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% addtoblock "css" %}
|
||||
<style>
|
||||
.pic-with-border {
|
||||
border: 7px solid rgb(255, 255, 255);
|
||||
border-radius: 5px;
|
||||
box-shadow: 1px 1px 2px 0px rgb(207, 207, 207);
|
||||
}
|
||||
.box {
|
||||
padding-bottom: 30px;
|
||||
overflow: hidden;
|
||||
margin-bottom: 30px;
|
||||
border-bottom: 1px solid rgb(216, 216, 216);
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
margin: 0px;
|
||||
padding: 40px 19px 40px 28px;
|
||||
background: none repeat scroll 0% 0% rgb(255, 255, 255);
|
||||
border-radius: 4px;
|
||||
box-shadow: 1px 1px 2px 0px rgb(207, 207, 207);
|
||||
float: right;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.sidebar_menu {
|
||||
margin: 0px;
|
||||
padding-top: 30px;
|
||||
padding-left: 10px;
|
||||
list-style: none outside none;
|
||||
}
|
||||
.sidebar_menu ul{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.sidebar .sidebar_menu li {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
a.inverse_color {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
-webkit-transition: color .2s;
|
||||
-moz-transition: color .2s;
|
||||
-ms-transition: color .2s;
|
||||
transition: color .2s;
|
||||
}
|
||||
a.inverse_color:hover {
|
||||
color: #1187D8;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
{% endaddtoblock %}
|
||||
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="span8" >
|
||||
|
||||
<h2>Repertoire</h2>
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> # </th>
|
||||
<th> Stück </th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for piece in repertoire %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ piece.repertoire_nr }}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<a class="inverse_color" href="{% url 'scoremanager.views.piece_view' piece.pk %}">
|
||||
{{ piece.title }}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{ piece.booklocation }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="span3 offset1 sidebar">
|
||||
<div class="box">
|
||||
<h4>Notenverwaltung</h4>
|
||||
|
||||
<img class="pic-with-border" src="{{STATIC_URL}}/img/scoreSheet.jpg" />
|
||||
|
||||
<ul class="sidebar_menu">
|
||||
<ul>
|
||||
<li>
|
||||
<a class="inverse_color" href="{% url 'scoremanager.pdf_views.repertoire_toc' %}"> Inhaltsverzeichnis herunterladen </a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a class="inverse_color" href="{% url 'scoremanager.pdf_views.repertoire_pdf' %}">Repertoire herunterladen</a>
|
||||
</li>
|
||||
{% if perms.scoremanager.manage_scores %}
|
||||
<li>
|
||||
<a class="inverse_color" href="{% url 'scoremanager.views.manage_repertoire' %}">
|
||||
Repertoire verwalten
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
284
scoremanager/templates/scoremanager/manage_repertoire.html
Normal file
284
scoremanager/templates/scoremanager/manage_repertoire.html
Normal file
@@ -0,0 +1,284 @@
|
||||
{% extends "website/base.html" %} {% load sekizai_tags staticfiles %}
|
||||
|
||||
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
||||
{% addtoblock "js" strip %} <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> {% endaddtoblock %}
|
||||
{% addtoblock "js" strip %} <script src="{{STATIC_URL}}/js/List.js"></script> {% endaddtoblock %}
|
||||
{% addtoblock "js" strip %} <script src="{{STATIC_URL}}/js/List.pagination.js"></script> {% endaddtoblock %}
|
||||
|
||||
{% addtoblock "css" strip %} <link rel="stylesheet" href="{{STATIC_URL}}/css/jquery-ui-1.8.21.custom.css" type="text/css" media="screen" /> {% endaddtoblock %}
|
||||
|
||||
|
||||
|
||||
{% addtoblock "css" %}
|
||||
<style>
|
||||
.piecelist {
|
||||
position: relative;
|
||||
padding: 45px 15px 15px;
|
||||
margin: 0 -15px 15px;
|
||||
background-color: #fafafa;
|
||||
box-shadow: inset 0 3px 6px rgba(0,0,0,.05);
|
||||
border-color: #e5e5e5 #eee #eee;
|
||||
border-style: solid;
|
||||
border-width: 1px 0;
|
||||
min-height: 500px;
|
||||
}
|
||||
|
||||
.piecelist:after {
|
||||
content: "Stückliste";
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
color: #bbb;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.piecelist + .highlight {
|
||||
margin: -15px -15px 15px;
|
||||
border-radius: 0;
|
||||
border-width: 0 0 1px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.piecelist {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
background-color: #fff;
|
||||
border-width: 1px;
|
||||
border-color: #ddd;
|
||||
border-radius: 4px 4px 0 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
.piecelist + .highlight {
|
||||
margin-top: -16px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
border-width: 1px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
input[type='text'].pieceSearch {
|
||||
float: right;
|
||||
z-index: 2;
|
||||
margin-top: 15px;
|
||||
margin-right: 15px;
|
||||
font-size: 0.8em;
|
||||
height: 12px;
|
||||
width: 165px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ul.piecelist{
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
ol.piecelist {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom:0;
|
||||
margin-left: 0px; /* Since 'ul,ol{}' setting in line 108 affects this selector, 'margin-left' is redefined. */
|
||||
list-style-position: inside; /* This will place the number on top and inside of the current color of li */
|
||||
}
|
||||
|
||||
.piecelist .item {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
height: 30px;
|
||||
display: inline-block;
|
||||
vertical-align:text-top;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.piecelist .item img {
|
||||
height: 40px;
|
||||
float:left;
|
||||
}
|
||||
|
||||
.piecelist > li {
|
||||
border-radius: 17px;
|
||||
background-color: #dff0d8;
|
||||
padding:10px;
|
||||
box-shadow: inset 0 1px 0 #fff;
|
||||
}
|
||||
|
||||
.piecelist .title {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
|
||||
}
|
||||
|
||||
.piecelist .composer {
|
||||
font-style: italic;
|
||||
font-size: 0.8em;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.piecelist .bookLocation {
|
||||
font-style: italic;
|
||||
font-size: 0.8em;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.piecelist li span {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
min-height: 30px;
|
||||
}
|
||||
.pagination li {
|
||||
display:inline-block;
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
#saveButton {
|
||||
float: right;
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
{% endaddtoblock %}
|
||||
|
||||
{% addtoblock "js" %}
|
||||
<script>
|
||||
|
||||
$(function() {
|
||||
$( "#allPieces li" ).draggable({
|
||||
connectToSortable: "#repertoire" ,
|
||||
appendTo: "parent",
|
||||
helper: function(){
|
||||
return $(this).clone().width($(this).width());
|
||||
}
|
||||
});
|
||||
|
||||
$( "#allPieces li.in-repertoire" ).draggable("disable");
|
||||
|
||||
$( "#repertoire" ).sortable( {
|
||||
receive: function(ev, ui) {
|
||||
$(ui.item).draggable("disable");
|
||||
$('#saveButton').removeAttr('disabled');
|
||||
},
|
||||
update: function( event, ui ) {
|
||||
$('#saveButton').removeAttr('disabled');
|
||||
}
|
||||
}).disableSelection();
|
||||
|
||||
$("#allPieces").droppable({
|
||||
accept: "#repertoire li",
|
||||
hoverClass: "ui-state-hover",
|
||||
drop: function(ev, ui) {
|
||||
var id = $(ui.draggable).data("pieceid");
|
||||
$("#allPieces li[data-pieceid=" + id + "]" ).draggable("enable")
|
||||
ui.draggable.remove();
|
||||
$('#saveButton').removeAttr('disabled');
|
||||
}
|
||||
});
|
||||
|
||||
$( "#saveButton").click( function() {
|
||||
var result = {};
|
||||
$("#repertoire li").each( function(index,value) {
|
||||
var id = parseInt( $(this).data("pieceid") );
|
||||
result[id] = index +1;
|
||||
});
|
||||
$.ajax({
|
||||
url: "{% url 'scoremanager.views.manage_repertoire_ajax_save' %} " ,
|
||||
type: 'POST',
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data: JSON.stringify(result),
|
||||
dataType: 'text',
|
||||
success: function(result) {
|
||||
$('#saveButton').attr('disabled','disabled');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var options = {
|
||||
valueNames : [ 'title', 'composer' ],
|
||||
page : 5,
|
||||
plugins : [ ListPagination({ paginationClass: 'paginationListMarker'}) ]
|
||||
};
|
||||
var pieceList = new List('allPiecesList', options);
|
||||
});
|
||||
|
||||
</script>
|
||||
{% endaddtoblock %}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h2>Repertoire Manager</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="span6" id="allPiecesList">
|
||||
<h4>Alle Stücke</h4>
|
||||
|
||||
|
||||
<input class="search pieceSearch" type="text" placeholder="Suchen" />
|
||||
|
||||
<ul id="allPieces" class="piecelist list">
|
||||
{% for piece in allPieces %}
|
||||
<li data-pieceid="{{piece.pk}}" {% if not piece.repertoire_nr %} {% else %}class="in-repertoire"{% endif %}>
|
||||
<p class="item">
|
||||
<img src="{{STATIC_URL}}/img/score-icon.png" />
|
||||
<span class="title"> {{ piece.title }} </span>
|
||||
<br/>
|
||||
<span class="composer">{{ piece.composer}} </span>
|
||||
{% if piece.booklocation %} <span class="bookLocation"> ( {{piece.booklocation}} ) </span> {% endif %}
|
||||
|
||||
</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<div class="pagination">
|
||||
<ul class="paginationListMarker"></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="span6">
|
||||
|
||||
<h4>Repertoire</h4>
|
||||
|
||||
<ol id="repertoire" class="piecelist" >
|
||||
{% for piece in repertoire %}
|
||||
<li data-pieceid="{{piece.pk}}">
|
||||
<p class="item">
|
||||
<img src="{{STATIC_URL}}/img/score-icon.png" />
|
||||
|
||||
<span class="title"> {{ piece.title }} </span>
|
||||
<br/>
|
||||
<span class="composer">{{ piece.composer}} </span>
|
||||
{% if piece.booklocation %} <span class="bookLocation"> ( {{piece.booklocation}} ) </span> {% endif %}
|
||||
|
||||
</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
|
||||
|
||||
<button id="saveButton" class="btn btn-primary" disabled="true">Speichern</button>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
310
scoremanager/templates/scoremanager/piece_view.html
Normal file
310
scoremanager/templates/scoremanager/piece_view.html
Normal file
@@ -0,0 +1,310 @@
|
||||
{% extends "website/base.html" %}
|
||||
|
||||
{% load sekizai_tags staticfiles %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% addtoblock "css" %}
|
||||
<style>
|
||||
.piece-pic {
|
||||
border: 7px solid rgb(255, 255, 255);
|
||||
border-radius: 5px;
|
||||
box-shadow: 1px 1px 2px 1px rgb(207, 207, 207);
|
||||
margin-top:10px;
|
||||
margin-bottom:20px;
|
||||
}
|
||||
.sidebar {
|
||||
margin: 10px 0px 0px 0px;
|
||||
padding: 40px 19px 20px 28px;
|
||||
background: none repeat scroll 0% 0% rgb(255, 255, 255);
|
||||
border-radius: 4px;
|
||||
box-shadow: 0px 1px 3px 1px rgb(207, 207, 207);
|
||||
float: right;
|
||||
}
|
||||
.error {
|
||||
color: red;
|
||||
margin:15px;
|
||||
}
|
||||
.upload_form {
|
||||
margin-top:15px;
|
||||
}
|
||||
.upload-area {
|
||||
margin: 15px;
|
||||
}
|
||||
.help-text {
|
||||
font-size: 0.9em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.embed-container {
|
||||
position: relative;
|
||||
padding-bottom: 56.25%; /* 16/9 ratio */
|
||||
padding-top: 30px; /* IE6 workaround*/
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.embed-container iframe,
|
||||
.embed-container object,
|
||||
.embed-container embed {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.youtubeWrapper {
|
||||
width: 30%;
|
||||
float: left;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
margin-left: 20px;
|
||||
|
||||
}
|
||||
.youtubeCaption {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
#section1 {
|
||||
|
||||
padding-bottom:50px;
|
||||
}
|
||||
|
||||
#section2 {
|
||||
background: url("{{STATIC_URL}}/img/backgrounds/aqua.jpg") no-repeat scroll 0% 0% / cover transparent;
|
||||
display: block;
|
||||
padding-top:50px;
|
||||
padding-bottom:20px;
|
||||
}
|
||||
|
||||
#section2 h4 {
|
||||
font-size: 38px;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 25px;
|
||||
line-height: 38px;
|
||||
text-align: center;
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
#section2 .upload {
|
||||
text-align: center;
|
||||
display:block;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
{% endaddtoblock %}
|
||||
|
||||
|
||||
{% addtoblock "js" %}
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$(".upload_form input:file").change(function (){
|
||||
$(".upload_form").submit();
|
||||
});
|
||||
|
||||
$("a.score-label").click( function() {
|
||||
var id = $(this).data("id");
|
||||
$.ajax( {
|
||||
url: "{% url 'scoremanager.views.score_user_mapping_save' %}",
|
||||
type: 'POST',
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data: ' { "myScore" : ' + id + ' } ',
|
||||
dataType: 'text',
|
||||
success: function(result) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".delete-button").click(function() {
|
||||
var id = $(this).data("id");
|
||||
var scoreUrl = "{% url 'scoremanager.views.score' '4242' %}"
|
||||
|
||||
if (confirm('Diesen Notensatz wirklich löschen?')) {
|
||||
$.ajax( {
|
||||
url: scoreUrl.replace( '4242', id.toString() ),
|
||||
type: 'DELETE',
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
success: function(result) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#youtubeLinkInput").keypress(function(e){
|
||||
if (e.keyCode != 13) { return }
|
||||
e.preventDefault();
|
||||
var data = { "link": this.value,
|
||||
"pieceId": "{{ piece.id }}" };
|
||||
|
||||
$.ajax( {
|
||||
url: "{% url 'scoremanager.views.youtube_link' %}",
|
||||
type: 'POST',
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data: JSON.stringify(data),
|
||||
success: function(result) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".youtubeDeleteButton").click( function() {
|
||||
var id = $(this).data("id");
|
||||
$.ajax( {
|
||||
url: "{% url 'scoremanager.views.youtube_link' %}",
|
||||
type: 'DELETE',
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data: ' { "linkid" : ' + id + ' } ',
|
||||
dataType: 'text',
|
||||
success: function(result) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endaddtoblock %}
|
||||
|
||||
<div id="section1">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
|
||||
|
||||
<h2>{{ piece.title }}</h2>
|
||||
<div class="span7">
|
||||
{% if pictureScore %}
|
||||
<a href="{{MEDIA_URL}}/{{pictureScore.file}}">
|
||||
<img class="piece-pic img-responsive" src="{% url 'scoremanager.views.score' pictureScore.id %}"> </img>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<h3>Info</h3>
|
||||
<table class="table table-striped">
|
||||
{% if piece.composer %}
|
||||
<tr>
|
||||
<td>Komponist:</td>
|
||||
<td>{{piece.composer}} </td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if piece.booklocation %}
|
||||
<tr>
|
||||
<td>Buch: </td>
|
||||
<td>{{piece.booklocation }} </td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
{% if piece.scores.all|length > 0 %}
|
||||
<h3>Alle Noten</h3>
|
||||
<table class="table table-striped">
|
||||
{% for score in piece.scores.all %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{MEDIA_URL}}/{{score.file}}">
|
||||
{{ score.score_type }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if score == activeScore %}
|
||||
<span data-id="{{score.id}}" class="label label-success score-label">Meine Noten</span>
|
||||
{% else %}
|
||||
<a data-id="{{score.id}}" class="btn btn-mini score-label">Meine Noten</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if score.uploaded_by == request.user or perms.scoremanager.manage_scores %}
|
||||
<a class="btn btn-mini btn-danger delete-button" data-id="{{score.id}}">Löschen</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if piece.recordings.all|length > 0 %}
|
||||
<h3>Aufnahmen</h3>
|
||||
<ul>
|
||||
{% for recording in piece.recordings.all %}
|
||||
<li>
|
||||
<a href="{{MEDIA_URL}}/{{ recording.file }}">
|
||||
{{ recording.artist }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="span4 sidebar offset1">
|
||||
|
||||
<h4>Upload</h4>
|
||||
|
||||
<div class="upload-area">
|
||||
<div class="help-text">
|
||||
Hier kann jeder Noten oder Aufnahmen hochladen. Der Dateiname wird als Interpret (für Aufnahmen) bzw. Stimme (für Noten)
|
||||
verwendet. Zip Dateien, die MP3s und/oder PDFs enthalten funktionieren auch.
|
||||
</div>
|
||||
<form class="upload_form" method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{% if form.file.errors|length > 0 %}
|
||||
<div class="error">Problem beim Upload. Erlaubte Dateien: mp3,pdf und zip</div>
|
||||
{% endif %}
|
||||
{{ form.file }}
|
||||
<input type="submit" class="hidden" value="Ok"></input>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id='section2'>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="span12">
|
||||
|
||||
<h4>
|
||||
Youtube<br>
|
||||
</h4>
|
||||
|
||||
<div class="upload">
|
||||
<input id="youtubeLinkInput" type="text" placeholder="Hier Youtube Link reinkopieren"></input>
|
||||
</div>
|
||||
|
||||
{% if piece.youtubeLinks.all|length > 0 %}
|
||||
<div>
|
||||
{% for youtubeLink in piece.youtubeLinks.all %}
|
||||
<div class="youtubeWrapper">
|
||||
{{ youtubeLink.embed_html }}
|
||||
|
||||
{% if youtubeLink.uploaded_by == request.user or perms.scoremanager.manage_scores %}
|
||||
<div class="youtubeCaption">
|
||||
<button class="btn btn-mini btn-danger youtubeDeleteButton" data-id="{{youtubeLink.id}}">
|
||||
Löschen
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user