PPM2: select

This commit is contained in:
darthsandmann
2016-12-12 22:20:21 +01:00
parent f0db62320a
commit 1b35f02647
141 changed files with 3986 additions and 1313 deletions

View 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;}

View 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&uumlck 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&uumlck zur Startseite">Zur&uumlck zur Startseite</a>
<a href="/category/?cat=${data['category']}" title="Zurueck zur Startseite">Zur&uumlck zur &uumlbersicht</a>
<input type="submit" value="Speichern" />
</div>
</div>
</form>
</body>
</html>

View 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&uumlck 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&uumlck zur Startseite">Zur&uumlck zur Startseite</a>
<a href="/choice" title="Zur&uumlck zur &uumlbersicht">Zur&uumlck zur &uumlbersicht</a>
<input type="submit" value="Speichern" />
</div>
</div>
</form>
</body>
</html>

View 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&uumlck zur Startseite">Praxisphasenmanager (PPM)</a>
</h1>
<div id="idContent" class="clContent">
</div>
</body>
<footer>
</footer>
</html>

View 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&uumlck zur Startseite">Praxisphasenmanager (PPM)</a>
</h1>
<div id="idContent" class="clContent">
<h2 id="idContentHeader" class="clContentHeader">
&Uumlbersicht 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>

View 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&uumlck zur Startseite">Praxisphasenmanager (PPM)</a>
</h1>
<div id="idContent" class="clContent">
<h2 id="idContentHeader" class="clContentHeader">
&Uumlbersicht: ${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>

File diff suppressed because one or more lines are too long

View 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");
});

View 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

View 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