// stand.js (stand_js.txt) // @version 1.2.1f // @copyright 2022, 2025, Friedrich Wichmann // Javascript Code für Standbesetzungsumfragen 'use strict'; const VERSIONjs="1.2.1f"; var st_nopts = 3; var st_test = 0; var st_opton = [1, 1, 1, 1, 1, 1, 1, 1, 1, ]; var st_nr = 0; var st_nr2 = 0; /* Initialisierung mit den Daten aus Datenbank und Setup */ function initStand(jsonres) { st_nr = jsonres.nr; st_nr2 = jsonres.nr2; let frm = initStand2(jsonres, false); if (st_nr2 && jsonres.inf2) { /* zwei Tabellen */ let frm2 = initStand2(jsonres, true); if (frm2) { var nrin = document.querySelector("#st2-plan-1 input[name='st-nr-in']"); nrin.setAttribute("value", st_nr); frm2.submit(); } } else /* nur eine Tabelle */ { if (frm) frm.submit(); } } function initStand2(jsonres, btwo) { let nopts = (btwo) ? jsonres.inf2.nopts : jsonres.inf.nopts; let stnr = (btwo) ? jsonres.nr2 : jsonres.nr; let stwo = (btwo) ? "st2" : "st"; let jsonarr = jsonres.a; let len1 = (jsonarr) ? jsonarr.length : "undefined"; st_nopts = (nopts && nopts > 0 && nopts < 10) ? nopts : 3; dlog("initStand stnr="+stnr+"/"+st_nr+"/"+st_nr2+" nopts="+st_nopts+" len="+len1+" btwo="+btwo+" "+VERSIONjs); st_test = (stnr==99); if (jsonarr == undefined) { return null; } initStandInfos((btwo) ? jsonres.inf2 : jsonres.inf, stwo); let frm = initStandTable(stnr, jsonarr, jsonres.inpo, stwo); dlog(jsonres); return frm; } /* Initialisierung der Standtabelle mit den Daten aus Datenbank und Setup */ function initStandTable(standnr, jsonarr, inpo, stwo) { if (jsonarr.length) { /* Extraausgabe von Name und Kommentar von Eintrag [0] */ var s1 = document.querySelector("#"+stwo+"-res-1"); if (s1) { s1.innerHTML = ""+jsonarr[0].name+" ("+jsonres[0].kommentar+")"; dlog("stand[0] name="+jsonarr[0].name+" kommentar="+jsonres[0].kommentar); } else dlog("querySelector #"+stwo+"-res-1 ohne Ergebnis (ok)"); } /* Standnummer prüfen */ var form1 = document.querySelector("#"+stwo+"-plan-1"); var nrin = document.querySelector("#"+stwo+"-plan-1 input[name='"+stwo+"-nr-in']"); if (nrin) { var stnrdb = -1; for (i = 0; i < jsonarr.length; i++) { stnrdb = jsonarr[i].nr; if (stnrdb == standnr) { break; } } if (standnr != -1) { nrin.setAttribute("value", standnr); } if (stnrdb != standnr && !inpo) { /* * Beim ersten Zugriff mit GET sind noch keine Datenbankabfragen möglich, * weil die POST-Parameter fehlen. Deshalb Rückgabe form1 mit st-nr-in und * optional st2-nr-in für die Abfrage der Daten mit POST. * Dabei wird inpo gesetzt, damit dies sich nicht rekursiv wiederholt. */ dlog("init Attribut 'value' von "+nrin.name+" auf "+standnr+" gesetzt" +" (stnrdb "+stnrdb+" inpo "+inpo+") (brauche POST)"); let frm = form1; return frm; } dlog("init Attribut 'value' von "+nrin.name+" auf "+standnr+" gesetzt" +" (stnrdb "+stnrdb+" inpo "+inpo+" st_nr="+st_nr+" st_nr2="+st_nr2+")"); } else { dlog("querySelector für "+stwo+"-nr-in ohne Ergebnis"); return null; } /* Standdatum setzen */ /* Datenbankeinträge in neue Tabellenzeilen übertragen */ var tab1 = document.querySelector("#"+stwo+"-tab-tb1"); if (!tab1) dlog("querySelector #"+stwo+"-tab-tb1 ohne Ergebnis"); var j = 0; for (var i=0; iEdit */ var tb4e = document.createElement("button"); tb4e.type = "button"; tb4e.id = stwo+"-x-edt-" + i; tb4e.classList.add("st-b-edt"); tb4e.appendChild(tx4e); td4.appendChild(tb4e); var tx4l = document.createTextNode("Löschen"); /* */ var tb4l = document.createElement("button"); tb4l.type = "submit"; tb4l.id = stwo+"-x-del-" + i; tb4l.classList.add("st-b-del"); tb4l.appendChild(tx4l); td4.appendChild(tb4l); trow.appendChild(td4); tab1.appendChild(trow); } /* Initialisierung Standinformationen */ function initStandInfos(jsoninf, stwo) { var sp1 = document.querySelector("#"+stwo+"-wann"); if (sp1 && jsoninf.wann) { sp1.innerHTML = jsoninf.wann; } for (var col = 1; col <= st_nopts; col++) { var th1 = document.querySelector("#"+stwo+"-col"+col+"-th"); if (th1 && jsoninf.opt && jsoninf.opt[col-1]) { var tx1 = jsoninf.opt[col-1]; th1.innerHTML = tx1; st_opton[col-1] = 1; if (tx1.length == 0 || tx1 == "-") { th1.classList.add("st-optoff"); st_opton[col-1] = 0; var td2 = document.querySelector("#"+stwo+"-col"+col+"-td-n"); var td3 = document.querySelector("#"+stwo+"-col"+col+"-td-b"); if (td2) td2.classList.add("st-optoff"); if (td3) td3.classList.add("st-optoff"); } } } } /* Optionszahlenwert in Ausgabe-Zeichen umwandeln */ function toOptChar(iOpt) { if (iOpt==1) return "⊕"; if (iOpt==2) return "??"; return "⊖"; } /* Optionszeichen in Zahlenwert umwandeln */ function toOptInt(ch) { if (ch=='j' || ch=='⊕') return 1; if (ch=='v' || ch=='??') return 2; return 0; } /* Optionszahlenwert in Id (j/v/n) umwandeln */ function toOptId(iOpt) { if (iOpt==1) return 'j'; if (iOpt==2) return 'v'; return 'n'; } /* Eventhandler für Optionsknopf-Klick */ function standClick(bid, iopt, swi) { dlog("click id=" + bid + " iopt=" + iopt + " swi=" + swi); let ld = bid.indexOf('-'); let stwo = (ld > 0) ? bid.substr(0, ld) : "st"; for (var i=0; i<=2; i++) { var tb = document.querySelector("#"+stwo+"-opt"+iopt+"-n-"+toOptId(i)); if (!tb) { dlog("click id=#"+stwo+"-opt"+iopt+"-n-"+toOptId(i)+" not found"); continue; } if (i == swi) { tb.hidden="1"; let e = tb.nextSibling; if (e && e.nodeType == Node.TEXT_NODE) { e.textContent = toOptChar(i) + e.textContent; } else { var tx = document.createTextNode(toOptChar(i)); var tp = tb.parentElement; e = tp.appendChild(tx); } e.class = "st-click-t"; } else { tb.hidden=null; var e = tb.nextSibling; if (e && e.class == "st-click-t" && e.textContent.charAt(0) == toOptChar(i).charAt(0)) { e.textContent = e.textContent.substr( (i==2) ? 2 : 1); } } var tp = tb.parentElement; while (tp && tp.tagName != "TD") { tp = tp.parentElement; } if (tp) { tp.classList.remove('st-opt-j', 'st-opt-v', 'st-opt-n'); if (swi==0) tp.classList.add('st-opt-n'); if (swi==1) tp.classList.add('st-opt-j'); if (swi==2) tp.classList.add('st-opt-v'); } } } /* Eventhandler für Standumfrage 1/2 */ function standClick2(bid) { var bt1 = document.querySelector("#st-b-tst-1"); var bt2 = document.querySelector("#st-b-tst-2"); var chk = (bt1 && bt1.disabled) ? 1 : (bt2 && bt2.disabled) ? 2 : 0; dlog("click id=" + bid + " chk="+chk); if (chk == 2) { bt1.disabled = "1"; bt2.disabled = ""; /* TODO: Fügt Teile mehrfach ein... */ initStand(jsonresult, true); } else if (chk == 1) { bt1.disabled = ""; bt2.disabled = "1"; /* TODO: Fügt Teile mehrfach ein... */ initStand(jsonresult, false); } } /* Eventhandler für Edit-/Leer-Knopf-Klick */ function standEditOp(bid, nopts) { dlog("click id=" + bid); let ld = bid.indexOf('-'); let stwo = (ld > 0) ? bid.substr(0, ld) : "st"; let lx = bid.indexOf("x-edt-"); var row = (lx > 0) ? bid.substr(lx+6) : 'n'; let my_nopts = (nopts && nopts > 0 && nopts < 10) ? nopts : 3; var leer = (row == 'n'); /* Name leer/übertragen */ var tda = document.querySelector("#"+stwo+"-cola-td-"+row); var inp = document.querySelector("input[name='"+stwo+"-cola-in']"); if (leer && inp) { inp.value = ''; } else if (tda && inp) { var nam = tda.textContent; inp.value = nam; } /* Optionen init/übertragen */ for (var col = 1; col <= my_nopts; col++) { var tdo = document.querySelector("#"+stwo+"-col"+col+"-td-"+row); if (tdo && leer) { dlog("click id=" + bid + " col=" + col + " row=" + row); tdo.classList.remove('st-opt-j', 'st-opt-v', 'st-opt-n'); for (var i=0; i<=2; i++) { var tb = document.querySelector("#"+stwo+"-opt"+col+"-n-"+toOptId(i)); if (!tb) { dlog("click id=#"+stwo+"-opt"+col+"-n-"+toOptId(i)+" not found"); continue; } tb.hidden=null; var e = tb.nextSibling; if (e && e.class == "st-click-t" && e.textContent.charAt(0) == toOptChar(i).charAt(0)) { e.textContent = e.textContent.substr( (i==2) ? 2 : 1); } } } else if (tdo) { var opid = stwo+"-opt"+col+"-n-"+toOptId(col); var swi = toOptInt(tdo.textContent); dlog("click id=" + bid + " col=" + col + " tdo=" + tdo.textContent + " swi=" + swi + " opid=" + opid); standClick(opid, col, swi); } } /* Kommentar leer/übertragen */ var tdb = document.querySelector("#"+stwo+"-colb-td-"+row); var inb = document.querySelector("input[name='"+stwo+"-colb-in']"); if (leer && inb) { inb.value = ''; } else if (tdb && inb) { var komm = tdb.textContent; inb.value = komm; } } /* Eventhandler für Formularoperationen */ function standSubmitOp(bid, op, nopts, nr, nr2) { dlog("standSubmitOp bid="+bid+" op="+op+" nopts="+nopts); /* Operation eintragen */ let ld = bid.indexOf('-'); let stwo = (ld > 0) ? bid.substr(0, ld) : "st"; var nrin = document.querySelector("#" + stwo + "-plan-1 input[name='st-nr-in']"); var nrin2 = document.querySelector("#" + stwo + "-plan-1 input[name='st2-nr-in']"); if (nrin) { nrin.setAttribute("value", nr); } if (nrin2) { nrin2.setAttribute("value", nr2); } var nrop = document.querySelector("#" + stwo + "-plan-1 input[name='st-nr-op']"); if (nrop) { nrop.setAttribute("value", (stwo == "st") ? nr : nr2); dlog("standSubmitOp "+nrop.name+" auf "+nrop.value+" gesetzt; "+ "nrin="+nrin.value+"/"+nr+" nrin2="+nrin2.value+"/"+nr2+" stwo="+stwo); } let my_nopts = (nopts && nopts > 0 && nopts < 10) ? nopts : 3; let tdo = document.querySelector("input[name='"+stwo+"-do']"); if (tdo) { tdo.value = op; } /* ggf. Name übertragen */ if (op == "33D") { let lx = bid.indexOf("x-del-"); let i = (lx > 0) ? bid.substr(lx+6) : ''; var tda = document.querySelector("#"+stwo+"-cola-td-"+i); var inp = document.querySelector("input[name='"+stwo+"-cola-in']"); if (tda && inp) { var nam = tda.textContent; inp.value = nam; } dlog("standSubmitOp nam="+nam); } /* Optionen eintragen */ for (var col=1; col<=my_nopts; col++) { var td = document.querySelector("#"+stwo+"-col"+col+"-td-n"); var ov = 0; if (td) { if (td.classList.contains("st-opt-n")) ov = 0; else if (td.classList.contains("st-opt-j")) ov = 1; else /* td.classList.contains("st-opt-v") */ ov = 2; } var tinp = document.querySelector("input[name='"+stwo+"-opt"+col+"-n']"); if (tinp) { tinp.value = ov; dlog("standSubmitOp name="+tinp.name+" ov="+ov+" op="+op+" nopts="+nopts+" col="+col); } } /* Für lokale Version Servlet-Pfad benutzen */ /*if (location.hostname == "localhost" && op!="") { if (location.pathname.indexOf("/servlet/") < 0) { var href = "http://"+location.host+"/servlet/StandServlet"+location.pathname; location.href = href; } }*/ }