port to new django, AI automated

This commit is contained in:
2026-03-30 22:35:36 +02:00
parent e2d166e437
commit 372da3caa9
215 changed files with 9283 additions and 2981 deletions

View File

@@ -1,133 +1,130 @@
{% extends "website/base.html" %} {% load sekizai_tags staticfiles %}
{% extends "website/base.html" %} {% load sekizai_tags static %} {% 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);
}
{% 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;
}
.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 0.2s;
-moz-transition: color 0.2s;
-ms-transition: color 0.2s;
transition: color 0.2s;
}
a.inverse_color:hover {
color: #1187d8;
}
</style>
{% endaddtoblock %}
<div class="container">
<div class="row">
<div class="row">
<div class="span8">
<h2>Repertoire</h2>
<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>
<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: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"
/>
<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>
<a
class="inverse_color"
href="{% url 'scoremanager:repertoire_toc' %}"
>
Inhaltsverzeichnis herunterladen
</a>
</li>
<li>
<a class="inverse_color" href="{% url 'scoremanager.pdf_views.repertoire_pdf' %}">Repertoire herunterladen</a>
<a
class="inverse_color"
href="{% url 'scoremanager:repertoire_pdf' %}"
>Repertoire herunterladen</a
>
</li>
{% if perms.scoremanager.manage_scores %}
<li>
<a class="inverse_color" href="{% url 'scoremanager.views.manage_repertoire' %}">
<a
class="inverse_color"
href="{% url 'scoremanager:manage_repertoire' %}"
>
Repertoire verwalten
</a>
</li>
{% endif %}
</ul>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}

View File

@@ -1,284 +1,282 @@
{% extends "website/base.html" %} {% load sekizai_tags staticfiles %}
{% extends "website/base.html" %} {% load sekizai_tags static %} {% 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, 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;
}
}
{% block content %}
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;
}
{% addtoblock "js" strip %} <script src="{{STATIC_URL}}js/jquery-ui-1.12.1.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.12.1.min.css" type="text/css" media="screen" /> {% endaddtoblock %}
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;
}
{% 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 > li {
border-radius: 17px;
background-color: #dff0d8;
padding: 10px;
box-shadow: inset 0 1px 0 #fff;
}
.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 .title {
font-weight: bold;
font-size: 1.1em;
}
.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>
.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: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 %}
{% 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>
<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>
<button id="saveButton" class="btn btn-primary" disabled="true">Speichern</button>
<input
class="search pieceSearch"
type="text"
placeholder="Suchen"
/>
<ul id="allPieces" class="piecelist list">
{% for piece in allPieces %}
<li data-pieceid="{{piece.pk}}"{% if piece.repertoire_nr %} 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>
</div>
</div>
<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 %}
{% endblock %}

View File

@@ -1,6 +1,6 @@
{% extends "website/base.html" %}
{% load sekizai_tags staticfiles %}
{% load sekizai_tags static %}
{% block content %}
@@ -72,7 +72,7 @@
}
#section2 {
background: url("{{STATIC_URL}}img/backgrounds/aqua.jpg") no-repeat scroll 0% 0% / cover transparent;
background: url("{{STATIC_URL}}/img/backgrounds/aqua.jpg") no-repeat scroll 0% 0% / cover transparent;
display: block;
padding-top:50px;
padding-bottom:20px;
@@ -107,7 +107,7 @@
$("a.score-label").click( function() {
var id = $(this).data("id");
$.ajax( {
url: "{% url 'scoremanager.views.score_user_mapping_save' %}",
url: "{% url 'scoremanager:score_user_mapping_save' %}",
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: ' { "myScore" : ' + id + ' } ',
@@ -120,7 +120,7 @@
$(".delete-button").click(function() {
var id = $(this).data("id");
var scoreUrl = "{% url 'scoremanager.views.score' '4242' %}"
var scoreUrl = "{% url 'scoremanager:score' '4242' %}"
if (confirm('Diesen Notensatz wirklich löschen?')) {
$.ajax( {
@@ -141,7 +141,7 @@
"pieceId": "{{ piece.id }}" };
$.ajax( {
url: "{% url 'scoremanager.views.youtube_link' %}",
url: "{% url 'scoremanager:youtube_link' %}",
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data),
@@ -154,7 +154,7 @@
$(".youtubeDeleteButton").click( function() {
var id = $(this).data("id");
$.ajax( {
url: "{% url 'scoremanager.views.youtube_link' %}",
url: "{% url 'scoremanager:youtube_link' %}",
type: 'DELETE',
contentType: 'application/json; charset=utf-8',
data: ' { "linkid" : ' + id + ' } ',
@@ -178,7 +178,7 @@
<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>
<img class="piece-pic img-responsive" src="{% url 'scoremanager:score' pictureScore.id %}"> </img>
</a>
{% endif %}
@@ -307,4 +307,4 @@
</div>
</div>
</div>
{% endblock %}
{% endblock %}