PageSourceSearch

https://eifel-gold.netlify.app/scripts.js

js eifel-gold.netlify.app collected 2026-10-03 10:41:21 UTC 11,222 bytes, 358 lines download raw bytes

1//Globale Variablen für Checkbox "PDF erstellen"
2var pdf = false;
3
4//Array mit Arbeitsanweisungen als Objekte
5var zuchtkalender = [
6  {
7    Offset: 0,
8    Stadium: "",
9    Taetigkeit: "Sammelbrutableger erstellen",
10    Bemerkung:
11      "Aus starken Wirtschaftsvölkern werden 1-2 bienenbesetzte Brutwaben als Pflegebienen für den Zuchtstoff entnommen. Mit 8-10 solcher Waben wird ein Sammelbrutableger gebildet. Er sollte mit genügend Futter versorgt sein.",
12    showInShort: true,
13  },
14  {
15    Offset: 7,
16    Stadium: "Tag 1: Stift stehend",
17    Taetigkeit: "Leerwabe einhängen",
18    Bemerkung:
19      "Eine Leerwabe in das Brutnest des Volkes einhängen, von dem der Zuchtstoff für die Zuchtserie verwendet werden soll. Die Königin bestiftet diese Leerwabe und nach 3 Tagen stehen jüngste Maden zur Verfügung. Alternative: Nicot-Copularve einhängen und Königin in Copularve einsperren.",
20    showInShort: true,
21  },
22  {
23    Offset: 8,
24    Stadium: "Tag 2: Stift hängend",
25    Taetigkeit: "",
26    Bemerkung: "",
27    showInShort: false,
28  },
29  {
30    Offset: 9,
31    Stadium: "Tag 3: Stift liegend",
32    Taetigkeit: "Nachschaffungszellen brechen",
33    Bemerkung:
34      "Es müssen ALLE Nachschaffungszellen gefunden und entfernt werden. Das Volk muss hoffnungslos weisellos sein.",
35    showInShort: true,
36  },
37  {
38    Offset: 10,
39    Stadium: "Tag 4:<br>Rundmade/Larve<br>1. Häutung",
40    Taetigkeit: "Umlarven",
41    Bemerkung:
42      "Der Zuchtstoff wird nun dem Sammelableger zur Aufzucht angeboten. Hierzu wird die Leerwabe, die am <span id='Leerwabe'></span> in das Zuchtvolk eingehangen wurde, wieder entnommen und die Maden in Weiselbecher umgelarvt (alternativ hierzu z.B. Zellen schneiden bzw. bestiftete Nicot-Becher aus Copularve auf die Trägerleiste geben und Königin wieder freilassen). Bei mangelnden Trachtverhältnissen nun regelmäßig mit Zuckerwasser 1:1 in kleinen Gaben füttern.",
43    showInShort: true,
44  },
45  {
46    Offset: 11,
47    Stadium: "Tag 5:<br>Rundmade/Larve<br>2. Häutung",
48    Taetigkeit: "Annahmekontrolle",
49    Bemerkung:
50      "Nach 1 Tag wird die Annahme der Weiselzellen kontrolliert (Ausbau, Fütterung).",
51    showInShort: true,
52  },
53  {
54    Offset: 12,
55    Stadium: "Tag 6:<br>Rundmade/Larve<br>3. Häutung",
56    Taetigkeit: "",
57    Bemerkung: "",
58    showInShort: false,
59  },
60  {
61    Offset: 13,
62    Stadium: "Tag 7:<br>Rundmade/Larve",
63    Taetigkeit: "",
64    Bemerkung: "",
65    showInShort: false,
66  },
67  {
68    Offset: 14,
69    Stadium:
70      "Tag 8:<br>Rundmade wird zu Streckmade<br>4. Häutung<br>Verdeckelung",
71    Taetigkeit: "",
72    Bemerkung: "",
73    showInShort: false,
74  },
75  {
76    Offset: 15,
77    Stadium: "	Tag 9:<br>Streckmade",
78    Taetigkeit: "Verschulung<br>1. Möglichkeit",
79    Bemerkung:
80      "Kurz nach der Verdeckelung besteht die erste Möglichkeit die Weiselzelle zu verschulen.",
81    showInShort: true,
82  },
83  {
84    Offset: 16,
85    Stadium: "Tag 10:<br>Vorpuppe<br>5. Häutung",
86    Taetigkeit: "",
87    Bemerkung: "Absolute Ruhe, sehr empfindlich gegen Erschütterungen",
88    showInShort: false,
89  },
90  {
91    Offset: 17,
92    Stadium: "Tag 11:<br>Puppe",
93    Taetigkeit: "",
94    Bemerkung: "Absolute Ruhe, sehr empfindlich gegen Erschütterungen",
95    showInShort: false,
96  },
97  {
98    Offset: 18,
99    Stadium: "Tag 12:<br>Puppe",
100    Taetigkeit: "",
101    Bemerkung: "",
102    showInShort: false,
103  },
104  {
105    Offset: 19,
106    Stadium: "Tag 13:<br>Puppe",
107    Taetigkeit: "",
108    Bemerkung: "",
109    showInShort: false,
110  },
111  {
112    Offset: 20,
113    Stadium: "Tag 14:<br>Puppe",
114    Taetigkeit: "",
115    Bemerkung: "",
116    showInShort: false,
117  },
118  {
119    Offset: 21,
120    Stadium: "Tag 15:<br>Puppe<br>6. Häutung",
121    Taetigkeit: "Verschulung<br>2. Möglichkeit",
122    Bemerkung:
123      "Falls noch nicht geschehen ist jetzt der letztmögliche Zeitpunkt die Weiselzelle zu verschulen. Schlüpft auch nur eine Königin vorzeitig werden alle anderen Königinnen sonst abgetötet.",
124    showInShort: true,
125  },
126  {
127    Offset: 22,
128    Stadium: "Tag 16:<br>Schlupf",
129    Taetigkeit: "Aus Käfig befreien, leere Weiselzelle entfernen",
130    Bemerkung: "3 - 5 - 8, Königin ist gemacht!",
131    showInShort: true,
132  },
133];
134
135//Eventlistener
136document
137  .getElementById("btn_erstellen")
138  .addEventListener("click", Zuchtkalender_erstellen);
139document.getElementById("PDF").addEventListener("click", togglePDF);
140
141function Zuchtkalender_erstellen() {
142  //Variablen aus DOM einlesen
143
144  //Bei fehlendem Datum Alarm ausgeben
145  try {
146    var termin = new Date(document.getElementById("termin").value);
147
148    if (termin == "Invalid Date") {
149      throw "Datumsfehler";
150    }
151  } catch (Datumsfehler) {
152    alert("Bitte ein Datum eingeben");
153    return; //bricht die Funktion ab
154  }
155
156  //Schalter für kurzen oder ausführlichen Zuchtkalender
157  var form = document.getElementById("Umfang");
158  var umfang = form.elements["Umfang"].value;
159
160  //eingegebenes Datum umrechnen auf den Starttermin, je nach Fixdatum
161  var terminart = document.getElementById("terminart").value;
162  switch (terminart) {
163    case "Zuchtbeginn":
164      termin.setDate(termin.getDate() - 0);
165      break;
166    case "Umlarftermin":
167      termin.setDate(termin.getDate() - 10);
168      break;
169    case "Schlupftermin":
170      termin.setDate(termin.getDate() - 22);
171      break;
172  }
173
174  //Optionen für Datumsanzeige
175  var options = {
176    weekday: "long",
177    year: "numeric",
178    month: "long",
179    day: "numeric",
180  };
181
182  //Lösche evtl. alte Tabellencontainer aus vorherigen Berechnungen
183  if (document.getElementById("Tabellencontainer")) {
184    var clear = document.getElementById("Tabellencontainer");
185    clear.parentNode.removeChild(clear);
186  }
187
188  //Erstelle Tabelle
189  var container = document.createElement("div");
190  container.classList.add("container");
191  container.classList.add("justify-content-center");
192  container.classList.add("table-responsive");
193  container.setAttribute("id", "Tabellencontainer");
194
195  var tabelle = document.createElement("table");
196  tabelle.classList.add("table");
197  tabelle.classList.add("table-sm");
198  tabelle.classList.add("table-bordered");
199  tabelle.setAttribute("id", "Tabelle");
200
201  var tabellenkopf = document.createElement("thead");
202  var kopfzeile = document.createElement("tr");
203  tabellenkopf.classList.add("thead-light");
204  tabellenkopf.classList.add("sticky-top");
205  tabelle.appendChild(tabellenkopf);
206  tabellenkopf.appendChild(kopfzeile);
207
208  var tabellenbody = document.createElement("tbody");
209
210  if (umfang == "kurz") {
211    //Tabellenkopf für kurzen Zuchtkalender erstellen
212    beschrifteHead(["Datum", "Tätigkeit"], kopfzeile);
213
214    zuchtkalender.forEach((element) => {
215      if (element.showInShort == true) {
216        let row = document.createElement("tr");
217
218        let terminZelle = document.createElement("td");
219        let taetigkeitZelle = document.createElement("td");
220
221        let zeilentermin = new Date(termin.toUTCString());
222        zeilentermin.setDate(termin.getDate() + element.Offset);
223        let inhaltTerminzelle = document.createTextNode(
224          zeilentermin.toLocaleString("de-DE", options)
225        );
226
227        terminZelle.appendChild(inhaltTerminzelle);
228        taetigkeitZelle.innerHTML = element.Taetigkeit;
229
230        row.appendChild(terminZelle);
231        row.appendChild(taetigkeitZelle);
232        tabellenbody.appendChild(row);
233      }
234    });
235  } else {
236    //Tabellenkopf für langen Zuchtkalender erstellen
237    beschrifteHead(["Datum", "Tätigkeit", "Stadium", "Bemerkungen"], kopfzeile);
238
239    zuchtkalender.forEach((element) => {
240      let row = document.createElement("tr");
241
242      let terminZelle = document.createElement("td");
243      let taetigkeitZelle = document.createElement("td");
244      let stadiumZelle = document.createElement("td");
245      let bemerkungZelle = document.createElement("td");
246
247      let zeilentermin = new Date(termin.toUTCString());
248      zeilentermin.setDate(termin.getDate() + element.Offset);
249      let inhaltTerminzelle = document.createTextNode(
250        zeilentermin.toLocaleString("de-DE", options)
251      );
252
253      terminZelle.appendChild(inhaltTerminzelle);
254
255      bemerkungZelle.innerHTML = element.Bemerkung;
256      stadiumZelle.innerHTML = element.Stadium;
257      taetigkeitZelle.innerHTML = element.Taetigkeit;
258      row.appendChild(terminZelle);
259      row.appendChild(taetigkeitZelle);
260      row.appendChild(stadiumZelle);
261      row.appendChild(bemerkungZelle);
262      tabellenbody.appendChild(row);
263    });
264  }
265
266  tabelle.appendChild(tabellenbody);
267
268  container.appendChild(tabelle);
269  document.getElementById("auswahl").appendChild(container);
270  //Umhängetermin nachträglich in SPAN einfügen
271  let umhaengetermin = new Date(termin.setDate(termin.getDate() + 7));
272  document.getElementById("Leerwabe").innerHTML = umhaengetermin.toLocaleString(
273    "de-DE",
274    options
275  );
276  //Aufruf PDF-Funktion
277  if (pdf) makePDF();
278}
279
280//Nach Eingabe der Parameter kann Auswahlmenü ausgeblendet werden
281function toggleAuswahlVisibility() {
282  let auswahl = document.getElementById("auswahl");
283  auswahl.classList.toggle("invisible");
284}
285
286//Schaltet die Variable PDF zwischen true und false hin und her
287function togglePDF() {
288  pdf = !pdf;
289}
290
291function makePDF() {
292  console.log("PDF-Funktion aufgerufen");
293  var doc = new jsPDF();
294  //Schriften: Helvetica, courier, times, ZapfDingbats, Symbol
295
296  doc.addFont("Savoye");
297  doc.setFont("Savoye");
298
299  let tabelle = document.getElementById("Tabelle").innerHTML;
300
301  let textOptions = {
302    maxWidth: 180,
303    angle: 0,
304    charSpace: 0,
305    lineHeightFactor: 1.15,
306    renderingMode: "fill",
307    /*Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, 
308      invisible, fillAndAddForClipping, strokeAndAddPathForClipping, 
309      fillThenStrokeAndAddToPathForClipping, addToPathForClipping.*/
310  };
311
312  /*bis zu vier Parameter, Kommagetrennt können eingegeben werden CMYK.
313   * ! Farbpalette unter http://www.farb-tabelle.de/de/farbtabelle.htm
314   * Kopfdeko in PDF*/
315
316  // !TODO - Schrift Savoye funktioniert aktuell nicht, daher Auskommentierung des Deko-Schriftzuges
317  /*   doc.setTextColor("gold");
318  doc.setFontSize(20);
319  doc.text(10, 30, "Imkerei Eifel-Gold", null, 30);
320  doc.text(165, 10, "Imkerei Eifel-Gold", null, -30); */
321
322  //Überschrift
323  doc.setFont("helvetica");
324  doc.setTextColor("black");
325  doc.setFontSize(24);
326  doc.text("Zuchtkalender", 80, 20);
327  doc.setFontSize(14);
328  doc.setTextColor("gray");
329  doc.text("für Bienenköniginnen", 83, 27, textOptions);
330
331  //Tabelle mit library autotable, Details: https://github.com/simonbengtsson/jsPDF-AutoTable
332  doc.autoTable({
333    html: "#Tabelle",
334    startY: 40,
335    styles: { minCellWidth: 33, fontSize: 8 },
336  });
337  //Google-Bewertung
338
339  //Footer
340  doc.setFontSize(10);
341  doc.text(
342    "Die Imkerei Eifel-Gold wünscht in viel Erfolg bei der Königinnenzucht!",
343    55,
344    285
345  );
346
347  //Speichern der Datei
348  doc.save("Zuchtkalender.pdf");
349}
350
351//Tabellenkopf wird anhand von übergebenem Array mit Spaltenüberschriften gefüllt, header gibt das DOM-Element an
352function beschrifteHead(headings_array, header) {
353  headings_array.forEach((element) => {
354    let head = document.createElement("th");
355    head.innerText = element;
356    header.appendChild(head);
357  });
358}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.