PPM2: select
This commit is contained in:
1
Praktikum2/ppm2/static/css/style.css
Normal file
1
Praktikum2/ppm2/static/css/style.css
Normal file
@ -0,0 +1 @@
|
||||
body{font-family:"Open Sans",sans-serif;font-size:12pt;padding:0;margin:0;}.clSiteHeader{position:absolute;top:0;left:0;right:0;height:100px;line-height:100px;margin:0;padding:5px;font-size:40pt;text-align:center;text-shadow:black 3px 2px;font-family:"Open Sans",sans-serif;background-color:#084791;border:none;border-radius:60px;}.clSiteHeader a{text-decoration:none;color:white;}.clSiteHeader:hover{background-color:#0D71E4;cursor:pointer;}.clSiteHeader a:visited,a:active{color:white;text-decoration:none;}.clContent{position:absolute;top:150px;left:0;right:0;bottom:0;margin:0;padding:5px;background-repeat:no-repeat;background-position:bottom left;}.clContentHeader{position:absolute;top:20px;left:0;right:0;height:30px;line-height:30px;margin:0;padding:5px;font-size:18pt;text-align:center;}.clContentArea{position:absolute;top:80px;left:0;right:0;bottom:0px;margin:10px 0;margin-left:10px;padding:5px;background-attachment:#819FF7;}.clButtonArea{position:absolute;left:0;right:0;bottom:0;height:80px;line-height:80px;margin:0;padding:5px;text-align:center;background-color:#FFFFFF;}.clButtonArea a,input[type="submit"]{margin:0 5px;padding:3px 6px;font-size:14pt;text-decoration:none;border:2px solid;color:white;background-color:#084791;}.clButtonArea a:hover{color:white;background-color:#0D71E4;cursor:pointer;}.clButtonArea a:visited,a:active{color:white;}.clNavButton{display:inline-block;text-align:center;background-color:#084791;border:1px solid black;color:white;padding:15px 32px;text-decoration:none;font-size:16px;cursor:pointer;float:left;clear:left;width:20%;margin-left:38%;margin-right:30%;}.clNavButton:hover{background-color:#0D71E4;}#idList{table-layout:fixed;width:auto;border:2px solid;border-collapse:collapse;margin:auto;}#idList th{text-align:center;padding-left:5px;background-color:white;padding:3px;border:2px solid;}#idList td{padding:3px;border:2px solid;cursor:pointer;}#idForm .clContentArea{width:500px;margin:auto;}.selected{background-color:#0D71E4;color:white;}.clFormRow{position:relative;height:30px;margin-bottom:10px;}.clFormRow label{position:absolute;top:0;left:0;width:240px;text-align:center;}.clFormRow input{position:absolute;top:0;left:250px;width:250px;}.clFormRow select{position:absolute;top:0;left:250px;width:250px;}.clMenu{list-style-type:none;padding-left:0;margin-left:0;}h3{text-align:center;}
|
75
Praktikum2/ppm2/static/html/detail.html
Normal file
75
Praktikum2/ppm2/static/html/detail.html
Normal file
@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Praxisphasenmanager (PPM)
|
||||
</title>
|
||||
<meta charset="UTF-8" />
|
||||
<style type="text/css">
|
||||
@import url("/style.css");
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="idSiteHeader" class="clSiteHeader">
|
||||
<a href="/index" title="Zurück zur Startseite">Praxisphasenmanager (PPM)</a>
|
||||
</h1>
|
||||
|
||||
<form id="idForm" class="clContent" action="/save/?cat=${data['category']}" method="POST">
|
||||
<h2 id="idContentHeader" class="clContentHeader">
|
||||
${data['category']}: Ihre Daten
|
||||
</h2>
|
||||
<div id="idContentArea" class="clContentArea">
|
||||
<input type="hidden" value="${data['id']}" id="id" name="id" />
|
||||
|
||||
% if data['category'] != 'Angebote':
|
||||
% for field in data['content']:
|
||||
% if field!='id' and field!='Status':
|
||||
<div class="clFormRow">
|
||||
<label for="${field}">${field}</label>
|
||||
<input type="text" value=
|
||||
% if data['content'][field] != field:
|
||||
"${data['content'][field]}" id="${field}" name="${field}" />
|
||||
% else:
|
||||
"" id="${field}" name="${field}" />
|
||||
% endif
|
||||
</div>
|
||||
% endif
|
||||
% endfor
|
||||
% else:
|
||||
<input type="hidden" value="Angebot" id="Status" name="Status" />
|
||||
<input type="hidden" value="" id="Zeitraum" name="ZeitraumVon" />
|
||||
<input type="hidden" value="" id="Zeitraum" name="ZeitraumBis" />
|
||||
<input type="hidden" value="" id="Student" name="Student" />
|
||||
<input type="hidden" value="" id="Lehrender" name="Lehrender" />
|
||||
% for field in data['content']:
|
||||
% if field!='id' and field!='Status' and field!='ZeitraumVon' and field!='ZeitraumBis' and field!='Lehrender' and field!='Student':
|
||||
<div class="clFormRow">
|
||||
<label for="${field}">${field}</label>
|
||||
% if field!='Firma':
|
||||
<input type="text" value=
|
||||
% if data['content'][field] != field:
|
||||
"${data['content'][field]}" id="${field}" name="${field}" />
|
||||
% else:
|
||||
"" id="${field}" name="${field}" />
|
||||
% endif
|
||||
% else:
|
||||
<select name="Firma" form="idForm">
|
||||
% for option in data['Firmen']:
|
||||
<option value="${data['Firmen'][option]['Name']}">${data['Firmen'][option]['Name']}</option>
|
||||
% endfor
|
||||
</select>
|
||||
% endif
|
||||
</div>
|
||||
% endif
|
||||
% endfor
|
||||
% endif
|
||||
|
||||
<div id="idButtonArea" class="clButtonArea">
|
||||
<a href="/index" title="Zurück zur Startseite">Zurück zur Startseite</a>
|
||||
<a href="/category/?cat=${data['category']}" title="Zurueck zur Startseite">Zurück zur übersicht</a>
|
||||
<input type="submit" value="Speichern" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
66
Praktikum2/ppm2/static/html/detailChoice.html
Normal file
66
Praktikum2/ppm2/static/html/detailChoice.html
Normal file
@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Praxisphasenmanager (PPM)
|
||||
</title>
|
||||
<meta charset="UTF-8" />
|
||||
<style type="text/css">
|
||||
@import url("/style.css");
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="idSiteHeader" class="clSiteHeader">
|
||||
<a href="/index" title="Zurück zur Startseite">Praxisphasenmanager (PPM)</a>
|
||||
</h1>
|
||||
|
||||
<form id="idForm" class="clContent" action="/saveChoice" method="POST">
|
||||
<h2 id="idContentHeader" class="clContentHeader">
|
||||
Praxisphasenangebots Auswahl
|
||||
</h2>
|
||||
<div id="idContentArea" class="clContentArea">
|
||||
<input type="hidden" value="${data['id']}" id="id" name="id" />
|
||||
<input type="hidden" value="${data['Name']}" id="Name" name="Name" />
|
||||
<input type="hidden" value="${data['Firma']}" id="Firma" name="Firma" />
|
||||
<input type="hidden" value="${data['Beschreibung']}" id="Beschreibung" name="Beschreibung" />
|
||||
<input type="hidden" value="${data['Voraussetzungen']}" id="Voraussetzungen" name="Voraussetzungen" />
|
||||
<input type="hidden" value="${data['Firmenbetreuer']}" id="Firmenbetreuer" name="Firmenbetreuer" />
|
||||
<input type="hidden" value="aktuell" id="Status" name="Status" />
|
||||
|
||||
<div class="clFormRow">
|
||||
<label for="Student">Student</label>
|
||||
<select name="Student" form="idForm">
|
||||
% for option in data['Studenten']:
|
||||
<option value="${data['Studenten'][option]['id']}">${data['Studenten'][option]['Name']}</option>
|
||||
% endfor
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="clFormRow">
|
||||
<label for="Lehrender">Lehrender</label>
|
||||
<select name="Lehrender" form="idForm">
|
||||
% for option in data['Lehrender']:
|
||||
<option value="${data['Lehrender'][option]['id']}">${data['Lehrender'][option]['Name']}</option>
|
||||
% endfor
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="clFormRow">
|
||||
<label for="ZeitraumVon">Zeitraum: Von (D.M.Y)</label>
|
||||
<input type="text" value="" id="ZeitraumVon" name="ZeitraumVon" />
|
||||
</div>
|
||||
|
||||
<div class="clFormRow">
|
||||
<label for="ZeitraumBis">Zeitraum: Bis (D.M.Y)</label>
|
||||
<input type="text" value="" id="ZeitraumBis" name="ZeitraumBis" />
|
||||
</div>
|
||||
|
||||
<div id="idButtonArea" class="clButtonArea">
|
||||
<a href="/index" title="Zurück zur Startseite">Zurück zur Startseite</a>
|
||||
<a href="/choice" title="Zurück zur übersicht">Zurück zur übersicht</a>
|
||||
<input type="submit" value="Speichern" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
25
Praktikum2/ppm2/static/html/index.html
Normal file
25
Praktikum2/ppm2/static/html/index.html
Normal file
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Praxisphasenmanager (PPM)
|
||||
</title>
|
||||
<meta charset="UTF-8" />
|
||||
<style type="text/css">
|
||||
@import url("static/css/style.css");
|
||||
</style>
|
||||
<script type="text/javascript" src="/static/js/jquery-3.1.1.min.js"></script>
|
||||
<script type="text/javascript" src="/static/js/te.js"></script>
|
||||
<script type="text/javascript" src="/static/js/tm.js"></script>
|
||||
<script type="text/javascript" src="/static/js/ppm.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="idSiteHeader" class="clSiteHeader" data-action="index">
|
||||
<a title="Zurück zur Startseite">Praxisphasenmanager (PPM)</a>
|
||||
</h1>
|
||||
<div id="idContent" class="clContent">
|
||||
</div>
|
||||
</body>
|
||||
<footer>
|
||||
</footer>
|
||||
</html>
|
56
Praktikum2/ppm2/static/html/listChoice.html
Normal file
56
Praktikum2/ppm2/static/html/listChoice.html
Normal file
@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Praxisphasenmanager (PPM)
|
||||
</title>
|
||||
<meta charset="UTF-8" />
|
||||
<style type="text/css">
|
||||
@import url("/style.css");
|
||||
</style>
|
||||
<script src="/functionsChoice.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1 id="idSiteHeader" class="clSiteHeader">
|
||||
<a href="/index" title="Zurück zur Startseite">Praxisphasenmanager (PPM)</a>
|
||||
</h1>
|
||||
<div id="idContent" class="clContent">
|
||||
<h2 id="idContentHeader" class="clContentHeader">
|
||||
Übersicht Praxisphasen Auswahl
|
||||
</h2>
|
||||
<div id="idContentArea" class="clContentArea">
|
||||
|
||||
<table id="idList">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Firma</th>
|
||||
<th>Beschreibung</th>
|
||||
<th>Voraussetzungen</th>
|
||||
<th>Firmenbetreuer</th>
|
||||
</tr>
|
||||
% if data['content']!= None:
|
||||
% for entries in data['content']:
|
||||
<tr id=${entries}>
|
||||
<td id=${entries}>${data['content'][entries]['Name']}</td>
|
||||
<td id=${entries}>${data['content'][entries]['Firma']}</td>
|
||||
<td id=${entries}>${data['content'][entries]['Beschreibung']}</td>
|
||||
<td id=${entries}>${data['content'][entries]['Voraussetzungen']}</td>
|
||||
<td id=${entries}>${data['content'][entries]['Firmenbetreuer']}</td>
|
||||
</tr id=${entries}>
|
||||
% endfor
|
||||
|
||||
% endif
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="idButtonArea" class="clButtonArea">
|
||||
<a href="/index" class="clButton">Startseite</a>
|
||||
<a class="clButton" id="Annehmen">Annehmen</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<footer>
|
||||
</footer>
|
||||
</html>
|
146
Praktikum2/ppm2/static/html/listEval.html
Normal file
146
Praktikum2/ppm2/static/html/listEval.html
Normal file
@ -0,0 +1,146 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Praxisphasenmanager (PPM)
|
||||
</title>
|
||||
<meta charset="UTF-8" />
|
||||
<style type="text/css">
|
||||
@import url("/style.css");
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1 id="idSiteHeader" class="clSiteHeader">
|
||||
<a href="/index" title="Zurück zur Startseite">Praxisphasenmanager (PPM)</a>
|
||||
</h1>
|
||||
<div id="idContent" class="clContent">
|
||||
<h2 id="idContentHeader" class="clContentHeader">
|
||||
Übersicht: ${data['category']}
|
||||
</h2>
|
||||
<div id="idContentArea" class="clContentArea">
|
||||
% if data['category'] == 'Firmen':
|
||||
% for firmen in data:
|
||||
% if firmen != 'category':
|
||||
<h3>${firmen}</h3>
|
||||
<table id="idList">
|
||||
<tr>
|
||||
<th>Status</th>
|
||||
<th>Student</th>
|
||||
<th>Lehrender</th>
|
||||
<th>Zeitraum: Von</th>
|
||||
<th>Zeitraum: Bis</th>
|
||||
</tr>
|
||||
% for aktuell in data[firmen]['Angebote']['aktuell']:
|
||||
<tr>
|
||||
<td>Aktuell</td>
|
||||
<td>${data[firmen]['Angebote']['aktuell'][aktuell]['Student']}</td>
|
||||
<td>${data[firmen]['Angebote']['aktuell'][aktuell]['Lehrender']}</td>
|
||||
<td>${data[firmen]['Angebote']['aktuell'][aktuell]['ZeitraumVon']}</td>
|
||||
<td>${data[firmen]['Angebote']['aktuell'][aktuell]['ZeitraumBis']}</td>
|
||||
</tr>
|
||||
% endfor
|
||||
% for abgeschlossen in data[firmen]['Angebote']['abgeschlossen']:
|
||||
<tr>
|
||||
<td>Abgeschlossen</td>
|
||||
<td>${data[firmen]['Angebote']['abgeschlossen'][abgeschlossen]['Student']}</td>
|
||||
<td>${data[firmen]['Angebote']['abgeschlossen'][abgeschlossen]['Lehrender']}</td>
|
||||
<td>${data[firmen]['Angebote']['abgeschlossen'][abgeschlossen]['ZeitraumVon']}</td>
|
||||
<td>${data[firmen]['Angebote']['abgeschlossen'][abgeschlossen]['ZeitraumBis']}</td>
|
||||
</tr>
|
||||
% endfor
|
||||
</table>
|
||||
% endif
|
||||
% endfor
|
||||
% endif
|
||||
|
||||
% if data['category'] == 'Studenten':
|
||||
% for studenten in data:
|
||||
% if studenten != 'category':
|
||||
<h3>${studenten}</h3>
|
||||
<table id="idList">
|
||||
<tr>
|
||||
<th>Lehrender</th>
|
||||
<th>Firma</th>
|
||||
<th>Praxisphase</th>
|
||||
<th>Status</th>
|
||||
<th>Zeitraum: Von</th>
|
||||
<th>Zeitraum: Bis</th>
|
||||
</tr>
|
||||
% for angebote in data[studenten]['Angebote']['aktuell']:
|
||||
<tr>
|
||||
<td>${data[studenten]['Angebote']['aktuell'][angebote]['Lehrender']}</td>
|
||||
<td>${data[studenten]['Angebote']['aktuell'][angebote]['Firma']}</td>
|
||||
<td>${data[studenten]['Angebote']['aktuell'][angebote]['Praxisphase']}</td>
|
||||
<td>${data[studenten]['Angebote']['aktuell'][angebote]['Status']}</td>
|
||||
<td>${data[studenten]['Angebote']['aktuell'][angebote]['ZeitraumVon']}</td>
|
||||
<td>${data[studenten]['Angebote']['aktuell'][angebote]['ZeitraumBis']}</td>
|
||||
</tr>
|
||||
% endfor
|
||||
% for angebote in data[studenten]['Angebote']['abgeschlossen']:
|
||||
<tr>
|
||||
<td>${data[studenten]['Angebote']['abgeschlossen'][angebote]['Lehrender']}</td>
|
||||
<td>${data[studenten]['Angebote']['abgeschlossen'][angebote]['Firma']}</td>
|
||||
<td>${data[studenten]['Angebote']['abgeschlossen'][angebote]['Praxisphase']}</td>
|
||||
<td>${data[studenten]['Angebote']['abgeschlossen'][angebote]['Status']}</td>
|
||||
<td>${data[studenten]['Angebote']['abgeschlossen'][angebote]['ZeitraumVon']}</td>
|
||||
<td>${data[studenten]['Angebote']['abgeschlossen'][angebote]['ZeitraumBis']}</td>
|
||||
</tr>
|
||||
% endfor
|
||||
|
||||
|
||||
</table>
|
||||
% endif
|
||||
% endfor
|
||||
% endif
|
||||
|
||||
% if data['category'] == 'Lehrender':
|
||||
% for Lehrender in data:
|
||||
% if Lehrender != 'category':
|
||||
<h3>${Lehrender}</h3>
|
||||
<table id="idList">
|
||||
<tr>
|
||||
<th>Student</th>
|
||||
<th>Firma</th>
|
||||
<th>Praxisphase</th>
|
||||
<th>Status</th>
|
||||
<th>Zeitraum: Von</th>
|
||||
<th>Zeitraum: Bis</th>
|
||||
</tr>
|
||||
% if data[Lehrender] != NULL:
|
||||
% for angebote in data[Lehrender]['Angebote']['aktuell']:
|
||||
<tr>
|
||||
<td>${data[Lehrender]['Angebote']['aktuell'][angebote]['Student']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['aktuell'][angebote]['Firma']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['aktuell'][angebote]['Praxisphase']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['aktuell'][angebote]['Status']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['aktuell'][angebote]['ZeitraumVon']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['aktuell'][angebote]['ZeitraumBis']}</td>
|
||||
</tr>
|
||||
% endfor
|
||||
% for angebote in data[Lehrender]['Angebote']['abgeschlossen']:
|
||||
<tr>
|
||||
<td>${data[Lehrender]['Angebote']['abgeschlossen'][angebote]['Student']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['abgeschlossen'][angebote]['Firma']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['abgeschlossen'][angebote]['Praxisphase']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['abgeschlossen'][angebote]['Status']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['abgeschlossen'][angebote]['ZeitraumVon']}</td>
|
||||
<td>${data[Lehrender]['Angebote']['abgeschlossen'][angebote]['ZeitraumBis']}</td>
|
||||
</tr>
|
||||
% endfor
|
||||
% endif
|
||||
</table>
|
||||
% endif
|
||||
% endfor
|
||||
% endif
|
||||
</div>
|
||||
|
||||
<div id="idButtonArea" class="clButtonArea">
|
||||
<a href="/index" class="clButton">Startseite</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<footer>
|
||||
<!--<script src="/functions.js" type="text/javascript"></script>-->
|
||||
</footer>
|
||||
</html>
|
4
Praktikum2/ppm2/static/js/jquery-3.1.1.min.js
vendored
Normal file
4
Praktikum2/ppm2/static/js/jquery-3.1.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
164
Praktikum2/ppm2/static/js/ppm.js
Normal file
164
Praktikum2/ppm2/static/js/ppm.js
Normal file
@ -0,0 +1,164 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// PPM - Hauptfunktion
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
class PPM
|
||||
{
|
||||
constructor ()
|
||||
{
|
||||
this.BodyDataAction();
|
||||
|
||||
this.TemplateManager_o = new TemplateManager_cl();
|
||||
this.TemplateManager_o;
|
||||
|
||||
console.log("PPM LOADED");
|
||||
}
|
||||
|
||||
BodyDataAction ()
|
||||
{
|
||||
$('body').on('click', '[data-action]', function() {
|
||||
var action = $(this).data('action');
|
||||
|
||||
PPM_o.Menu(action);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
BodyTableSelect ()
|
||||
{
|
||||
$('#idList tr').click(function(){
|
||||
$(".selected").removeClass('selected');
|
||||
$(this).addClass('selected');
|
||||
this.selectedId = $(this).attr('id');
|
||||
console.log("SELECT ID: ", this.selectedId);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
Menu (message)
|
||||
{
|
||||
var selectedId = $(".selected").attr('id');
|
||||
switch (message)
|
||||
{
|
||||
case 'index':
|
||||
|
||||
this.LoadContent('/category/', 'index.tpl');
|
||||
break;
|
||||
|
||||
case 'categoryStudenten':
|
||||
|
||||
this.LoadContent('/category/?cat=Studenten', 'list.tpl');
|
||||
break
|
||||
|
||||
case 'categoryLehrender':
|
||||
|
||||
this.LoadContent('/category/?cat=Lehrender', 'list.tpl');
|
||||
break
|
||||
|
||||
case 'categoryFirmen':
|
||||
|
||||
this.LoadContent('/category/?cat=Firmen', 'list.tpl');
|
||||
break
|
||||
|
||||
case 'choice':
|
||||
|
||||
this.LoadContent('/choice', 'listChoice.tpl');
|
||||
break
|
||||
|
||||
case 'evalStudenten':
|
||||
|
||||
this.LoadContent('/eval/?cat=Studenten', 'listEval.tpl');
|
||||
break
|
||||
|
||||
case 'evalLehrender':
|
||||
|
||||
this.LoadContent('/eval/?cat=Lehrender', 'listEval.tpl');
|
||||
break
|
||||
|
||||
case 'evalFirmen':
|
||||
|
||||
this.LoadContent('/eval/?cat=Firmen', 'listEval.tpl');
|
||||
break
|
||||
|
||||
case 'NewStudenten':
|
||||
|
||||
console.log("NewStudenten");
|
||||
break
|
||||
|
||||
case 'NewLehrender':
|
||||
|
||||
console.log("NewLehrender");
|
||||
break
|
||||
|
||||
case 'NewFirmen':
|
||||
|
||||
console.log("NewFirmen");
|
||||
break
|
||||
|
||||
case 'ModifyStudenten':
|
||||
console.log("ModifyStudenten: ", selectedId);
|
||||
break
|
||||
|
||||
case 'ModifyLehrenden':
|
||||
|
||||
console.log("ModifyLehrenden", selectedId);
|
||||
break
|
||||
|
||||
case 'ModifyFirmen':
|
||||
|
||||
console.log("ModifyFirmen", selectedId);
|
||||
break
|
||||
|
||||
case 'DeleteStudenten':
|
||||
|
||||
console.log("DeleteStudenten", selectedId);
|
||||
break
|
||||
|
||||
case 'DeleteLehrenden':
|
||||
|
||||
console.log("DeleteLehrenden", selectedId);
|
||||
break
|
||||
|
||||
case 'DeleteFirmen':
|
||||
|
||||
console.log("DeleteFirmen", selectedId);
|
||||
break
|
||||
|
||||
default:
|
||||
|
||||
alert ('[PPM] Unbekannte Anfrage: ' + message);
|
||||
}
|
||||
}
|
||||
|
||||
LoadContent ( path, template )
|
||||
{
|
||||
$.ajax({
|
||||
dataType: "json",
|
||||
url: path,
|
||||
type: 'GET',
|
||||
context: this
|
||||
})
|
||||
.done(function (json) {
|
||||
//console.log("JSON: ", json);
|
||||
|
||||
var result = this.TemplateManager_o.execute_px( template, json );
|
||||
//console.log("RESULT: ", result);
|
||||
|
||||
//$( ".clContent" ).replaceWith(result);
|
||||
$( ".clContent" ).empty();
|
||||
$( ".clContent" ).append(result);
|
||||
this.BodyTableSelect();
|
||||
console.log("TM DONE");
|
||||
})
|
||||
.fail(function(jqXHR_opl, textStatus_spl) {
|
||||
alert( "[PPM] Fehler bei Anforderung: " + textStatus_spl );
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$(function() {
|
||||
console.log("ONLOAD");
|
||||
PPM_o = new PPM();
|
||||
PPM_o.Menu("index");
|
||||
});
|
266
Praktikum2/ppm2/static/js/te.js
Normal file
266
Praktikum2/ppm2/static/js/te.js
Normal file
@ -0,0 +1,266 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// Template-Engine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
'use strict'
|
||||
|
||||
class Generator_cl {
|
||||
constructor () {
|
||||
this.reset_px();
|
||||
}
|
||||
reset_px () {
|
||||
this.code_a = ['var result_a = [];\n'];
|
||||
}
|
||||
write_px (text_spl) {
|
||||
// Escape-Zeichen bei Strings ergänzen
|
||||
var text_s = text_spl.replace(/"/g, '\\"');
|
||||
text_s = text_s.replace(/'/g, "\\'");
|
||||
this.code_a.push('result_a.push("' + text_s + '");\n');
|
||||
}
|
||||
code_px (code_spl) {
|
||||
if (code_spl.startsWith('if')) {
|
||||
this.code_a.push('if (' + code_spl.substr(2) + ') {\n');
|
||||
} else if (code_spl.startsWith('else')) {
|
||||
this.code_a.push('} else {\n');
|
||||
} else if (code_spl.startsWith('endif')) {
|
||||
this.code_a.push('}\n');
|
||||
} else if (code_spl.startsWith('for')) {
|
||||
this.code_a.push('for (' + code_spl.substr(3) + ') {\n');
|
||||
} else if (code_spl.startsWith('endfor')) {
|
||||
this.code_a.push('}\n');
|
||||
} else {
|
||||
this.code_a.push(code_spl + '\n');
|
||||
}
|
||||
}
|
||||
substitute_px (subst_spl) {
|
||||
let value_s = subst_spl == null ? '' : String(subst_spl);
|
||||
this.code_a.push('result_a.push(' + value_s + ');\n');
|
||||
}
|
||||
generate_px () {
|
||||
var result_s = this.code_a.join('') + ' return result_a.join("");';
|
||||
var f_o = new Function ('context', result_s);
|
||||
return f_o;
|
||||
}
|
||||
}
|
||||
|
||||
class TemplateCompiler_cl {
|
||||
constructor () {
|
||||
this.gen_o = new Generator_cl();
|
||||
this.reset_px();
|
||||
}
|
||||
reset_px () {
|
||||
this.gen_o.reset_px();
|
||||
this.preservePreWS_b = false;
|
||||
this.preservePostWS_b = false;
|
||||
}
|
||||
setPreWS_px (on_bpl) {
|
||||
if ((on_bpl == undefined) || (on_bpl == false)) {
|
||||
this.preservePreWS_b = false;
|
||||
} else {
|
||||
this.preservePreWS_b = true;
|
||||
}
|
||||
}
|
||||
setPostWS_px (on_bpl) {
|
||||
if ((on_bpl == undefined) || (on_bpl == false)) {
|
||||
this.preservePostWS_b = false;
|
||||
} else {
|
||||
this.preservePostWS_b = true;
|
||||
}
|
||||
}
|
||||
compile_px (source_spl) {
|
||||
var state_i = 0;
|
||||
var pos_i = 0;
|
||||
var len_i = source_spl.length;
|
||||
var text_s = '';
|
||||
var code_s = '';
|
||||
var subst_s = '';
|
||||
this.gen_o.reset_px();
|
||||
|
||||
var doubletest_f = function (char_spl) {
|
||||
var status_b = false;
|
||||
if ((pos_i + 1) < len_i) {
|
||||
if ((source_spl[pos_i] == char_spl) && (source_spl[pos_i+1] == char_spl)) {
|
||||
status_b = true;
|
||||
}
|
||||
}
|
||||
return status_b;
|
||||
}
|
||||
|
||||
while (pos_i < len_i) {
|
||||
switch (state_i) {
|
||||
case 0:
|
||||
// outside
|
||||
if (source_spl[pos_i] == '@') { // ECMA 5!
|
||||
if (doubletest_f('@') == false) {
|
||||
state_i = 2;
|
||||
code_s = '';
|
||||
} else {
|
||||
// als normales Zeichen verarbeiten, ein Zeichen überlesen
|
||||
state_i = 1;
|
||||
text_s = '@';
|
||||
pos_i++;
|
||||
}
|
||||
} else if (source_spl[pos_i] == '#') {
|
||||
if (doubletest_f('#') == false) {
|
||||
state_i = 3;
|
||||
subst_s = '';
|
||||
} else {
|
||||
// als normales Zeichen verarbeiten, ein Zeichen überlesen
|
||||
state_i = 1;
|
||||
text_s = '#';
|
||||
pos_i++;
|
||||
}
|
||||
} else if ((source_spl[pos_i] == ' ') || (source_spl[pos_i] == '\t')) {
|
||||
state_i = 4;
|
||||
text_s = '';
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
} else {
|
||||
state_i = 1;
|
||||
text_s = '';
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
// inText
|
||||
if (source_spl[pos_i] == '@') {
|
||||
if (doubletest_f('@') == false) {
|
||||
// Textende, neuer Code
|
||||
state_i = 0;
|
||||
this.gen_o.write_px(text_s);
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
} else {
|
||||
// als normales Zeichen verarbeiten, ein Zeichen überlesen
|
||||
text_s += '@';
|
||||
pos_i++;
|
||||
}
|
||||
} else if (source_spl[pos_i] == '#') {
|
||||
if (doubletest_f('#') == false) {
|
||||
// Textende, neue Substitution
|
||||
state_i = 0;
|
||||
this.gen_o.write_px(text_s);
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
// Textende, neuer Code
|
||||
} else {
|
||||
// als normales Zeichen verarbeiten, ein Zeichen überlesen
|
||||
text_s += '#';
|
||||
pos_i++;
|
||||
}
|
||||
} else if ((source_spl[pos_i] == ' ') || (source_spl[pos_i] == '\t')) {
|
||||
// Textende
|
||||
state_i = 0;
|
||||
this.gen_o.write_px(text_s);
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
} else {
|
||||
// sammeln
|
||||
if ((source_spl[pos_i] != '\n') && (source_spl[pos_i] != '\r')) {
|
||||
text_s += source_spl[pos_i];
|
||||
} else if (source_spl[pos_i] == '\n') {
|
||||
text_s += '\\n';
|
||||
} else {
|
||||
text_s += '\\r';
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
// inCode
|
||||
if (source_spl[pos_i] == '@') {
|
||||
if (doubletest_f('@') == false) {
|
||||
// zu Ende, erzeugen
|
||||
this.gen_o.code_px(code_s);
|
||||
state_i = 5; //0
|
||||
} else {
|
||||
// als normales Zeichen verarbeiten, ein Zeichen überlesen
|
||||
code_s += '@';
|
||||
pos_i++;
|
||||
}
|
||||
} else {
|
||||
// sammeln
|
||||
code_s += source_spl[pos_i];
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
// inSubst
|
||||
// Verdopplung # hier nicht zulässig!
|
||||
if (source_spl[pos_i] == '#') {
|
||||
// zu Ende, erzeugen
|
||||
this.gen_o.substitute_px(subst_s);
|
||||
state_i = 0;
|
||||
} else {
|
||||
// sammeln
|
||||
subst_s += source_spl[pos_i];
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
// pre-code-whitespace
|
||||
switch (source_spl[pos_i]) {
|
||||
case ' ':
|
||||
case '\t':
|
||||
// sammeln
|
||||
text_s += source_spl[pos_i];
|
||||
break;
|
||||
default:
|
||||
state_i = 0;
|
||||
if (source_spl[pos_i] != '@') {
|
||||
this.gen_o.write_px(text_s);
|
||||
} else {
|
||||
if (doubletest_f('@') == false) {
|
||||
// Whitespace vor Code-Beginn erkannt
|
||||
if (this.preservePreWS_b == true) {
|
||||
// trotzdem ausgeben
|
||||
this.gen_o.write_px(text_s);
|
||||
}
|
||||
} // ansonsten wie normales Zeichen behandeln
|
||||
}
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
// post-code-whitespace
|
||||
switch (source_spl[pos_i]) {
|
||||
case '\n':
|
||||
text_s += '\\n';
|
||||
state_i = 0;
|
||||
break;
|
||||
case '\r':
|
||||
text_s += '\\r';
|
||||
state_i = 0;
|
||||
break;
|
||||
case ' ':
|
||||
case '\t':
|
||||
// ggf. sammeln
|
||||
text_s += source_spl[pos_i];
|
||||
break;
|
||||
default:
|
||||
// Whitespace nach Code erkannt
|
||||
if (this.preservePostWS_b == true) {
|
||||
// trotzdem ausgeben
|
||||
this.gen_o.write_px(text_s);
|
||||
}
|
||||
state_i = 0;
|
||||
pos_i--; // Zeichen erneut verarbeiten
|
||||
}
|
||||
break;
|
||||
}
|
||||
pos_i++;
|
||||
}
|
||||
// welcher Zustand liegt abschließend vor?
|
||||
if (state_i == 1) {
|
||||
this.gen_o.write_px(text_s);
|
||||
} else if (state_i == 2) {
|
||||
this.gen_o.code_px(code_s);
|
||||
} else if (state_i == 3) {
|
||||
this.gen_o.substitute_px(subst_s);
|
||||
} else if (state_i == 4) {
|
||||
if (this.preservePreWS_b == true) {
|
||||
this.gen_o.write_px(text_s);
|
||||
}
|
||||
} else if (state_i == 5) {
|
||||
if (this.preservePostWS_b == true) {
|
||||
this.gen_o.write_px(text_s);
|
||||
}
|
||||
}
|
||||
|
||||
return this.gen_o.generate_px();
|
||||
}
|
||||
}
|
||||
// EOF
|
61
Praktikum2/ppm2/static/js/tm.js
Normal file
61
Praktikum2/ppm2/static/js/tm.js
Normal file
@ -0,0 +1,61 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// Template-Manager
|
||||
// - Laden und Bereitstellen von Template-Quellen
|
||||
//------------------------------------------------------------------------------
|
||||
// depends-on:
|
||||
// jquery
|
||||
// te
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
'use strict'
|
||||
|
||||
class TemplateManager_cl {
|
||||
constructor () {
|
||||
this.templates_o = {};
|
||||
this.compiled_o = {};
|
||||
this.teCompiler_o = new TemplateCompiler_cl();
|
||||
// Templates als Ressource anfordern und speichern
|
||||
var path_s = "/templates/";
|
||||
$.ajax({
|
||||
dataType: "json",
|
||||
url: path_s,
|
||||
type: 'GET',
|
||||
context: this
|
||||
})
|
||||
.done(function (data_opl) {
|
||||
this.templates_o = data_opl['templates'];
|
||||
})
|
||||
.fail(function(jqXHR_opl, textStatus_spl) {
|
||||
alert( "[tm] Fehler bei Anforderung: " + textStatus_spl );
|
||||
});
|
||||
}
|
||||
get_px (name_spl) {
|
||||
alert (name_spl);
|
||||
alert (this.templates_o);
|
||||
if (name_spl in this.templates_o) {
|
||||
return this.templates_o[name_spl];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
execute_px (name_spl, data_opl) {
|
||||
var compiled_o = null;
|
||||
if (name_spl in this.compiled_o) {
|
||||
compiled_o = this.compiled_o[name_spl];
|
||||
} else {
|
||||
// Übersetzen und ausführen
|
||||
if (name_spl in this.templates_o) {
|
||||
this.teCompiler_o.reset_px();
|
||||
compiled_o = this.teCompiler_o.compile_px(this.templates_o[name_spl]);
|
||||
this.compiled_o[name_spl] = compiled_o;
|
||||
}
|
||||
}
|
||||
if (compiled_o != null) {
|
||||
return compiled_o(data_opl);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// EOF
|
Reference in New Issue
Block a user