PPM2: select
This commit is contained in:
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