Skip to content

Commit 4a247d5

Browse files
committed
Release v1.3.0
1 parent 2faebaf commit 4a247d5

File tree

3 files changed

+78
-47
lines changed

3 files changed

+78
-47
lines changed

changelog.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,10 @@
5757
## [1.2.1] - 2025-06-01
5858
### Hinzugefügt
5959
- Hinzufügen von Mouseover-Beschreibungen und erklärenden Tooltips zu mehreren Spalten in `index.html` und `ergebnisse.html`, um Berechnungsgrundlagen und Annahmen transparenter darzustellen.
60+
61+
# [1.3.0] - 2025-06-02
62+
### Geändert
63+
- Nettoeinkommen-Felder pro Block eingefügt: `netIncome1`, `netIncome2`, `netIncome3` in `index.html`.
64+
- Anpassung von `submitForm()` in `index.html`, um drei separate Nettoeinkommen zu übergeben.
65+
- Änderungen in `ergebnisse.html`/`umschalten.js`, sodass pro Szenario-Block das jeweilige Nettoeinkommen verwendet wird.
66+
- Umebennung der Block-Bereiche in passendere Namen

ergebnisse.html

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,13 @@ <h1>Ergebnisse</h1>
4242

4343
function calculateResultsFromParams() {
4444
const params = new URLSearchParams(window.location.search);
45-
const rawNet = params.get('netIncome')?.replace(/\./g, '').replace(/,/g, '.') || '0';
46-
const netIncome = parseFloat(rawNet) || 0;
45+
// Drei separate Nettoeinkommen einlesen
46+
const rawNet1 = params.get('netIncome1')?.replace(/\./g, '').replace(/,/g, '.') || '0';
47+
const rawNet2 = params.get('netIncome2')?.replace(/\./g, '').replace(/,/g, '.') || '0';
48+
const rawNet3 = params.get('netIncome3')?.replace(/\./g, '').replace(/,/g, '.') || '0';
49+
const netIncome1 = parseFloat(rawNet1) || 0;
50+
const netIncome2 = parseFloat(rawNet2) || 0;
51+
const netIncome3 = parseFloat(rawNet3) || 0;
4752
// Parse monthly fixed costs from URL parameters
4853
const rawFix = params.get('fixedCosts')?.replace(/\./g, '').replace(/,/g, '.') || '0';
4954
const fixedCosts = parseFloat(rawFix) || 0;
@@ -103,7 +108,9 @@ <h1>Ergebnisse</h1>
103108
+ '<th title="Totale Gesamtkosten = Gesamtbelastung gesamt (Laufzeit) + Kaufkosten Brutto" style="width: 170px; white-space: nowrap;">Totale Gesamtkosten</th>'
104109
+ '</tr>';
105110

106-
blocks.forEach(blk => {
111+
const incomes = [netIncome1, netIncome2, netIncome3];
112+
blocks.forEach((blk, index) => {
113+
const netIncome = incomes[index]; // Block-spezifisches Nettoeinkommen
107114
const R = netIncome * blk.maxRatePct / 100;
108115
const loan0 = calcLoan(R, blk.interestPct, terms[0]);
109116
const n0 = terms[0] * 12;

index.html

Lines changed: 61 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,21 @@ <h1>Potenzieller Immo-Kauf</h1>
1919

2020
<!-- Eingabensektion -->
2121
<section id="inputs">
22-
<h2>Eingaben</h2>
22+
<h2>Eingaben (Es müssen nicht nicht alle Szenarien ausgefüllt werden)</h2>
2323

24-
<!-- Nettoeinkommen -->
24+
25+
<!-- Block 1 -->
2526
<div class="block">
27+
<h3>Szenario 1 (Vergleich 1)</h3>
2628
<div class="form-row">
27-
<label for="net-income">Nettoeinkommen (€)</label>
29+
<label for="net-income1">Nettoeinkommen 1 (€)</label>
2830
<input
2931
type="text"
30-
id="net-income"
31-
name="netIncome"
32-
placeholder="z.B. 1.234,56"
32+
id="net-income1"
33+
name="netIncome1"
34+
placeholder="z.B. 1234 oder 1.234,56"
3335
/>
3436
</div>
35-
</div>
36-
37-
<!-- Block 1 -->
38-
<div class="block">
39-
<h3>Block 1</h3>
4037
<div class="form-row">
4138
<label for="max-rate1">Max. Rate 1 (40%)</label>
4239
<input
@@ -77,15 +74,24 @@ <h3>Block 1</h3>
7774
id="interest-rate1"
7875
name="interestRate1"
7976
step="0.01"
80-
placeholder="z.B. 3,00"
81-
value="3"
77+
placeholder="z.B. 3 oder 3,45"
78+
value=""
8279
/>
8380
</div>
8481
</div>
8582

8683
<!-- Block 2 -->
8784
<div class="block">
88-
<h3>Block 2</h3>
85+
<h3>Szenario 2 (Vergleich 2)</h3>
86+
<div class="form-row">
87+
<label for="net-income2">Nettoeinkommen 2 (€)</label>
88+
<input
89+
type="text"
90+
id="net-income2"
91+
name="netIncome2"
92+
placeholder="z.B. 1234 oder 1.234,56"
93+
/>
94+
</div>
8995
<div class="form-row">
9096
<label for="max-rate2">Max. Rate 2 (40%)</label>
9197
<input
@@ -126,15 +132,24 @@ <h3>Block 2</h3>
126132
id="interest-rate2"
127133
name="interestRate2"
128134
step="0.01"
129-
placeholder="z.B. 4,00"
130-
value="4"
135+
placeholder="z.B. 3 oder 3,45"
136+
value=""
131137
/>
132138
</div>
133139
</div>
134140

135141
<!-- Block 3 -->
136142
<div class="block">
137-
<h3>Block 3</h3>
143+
<h3>Szenario 3 (Vergleich 3)</h3>
144+
<div class="form-row">
145+
<label for="net-income3">Nettoeinkommen 3 (€)</label>
146+
<input
147+
type="text"
148+
id="net-income3"
149+
name="netIncome3"
150+
placeholder="z.B. 1234 oder 1.234,56"
151+
/>
152+
</div>
138153
<div class="form-row">
139154
<label for="max-rate3">Max. Rate 3 (40%)</label>
140155
<input
@@ -175,8 +190,8 @@ <h3>Block 3</h3>
175190
id="interest-rate3"
176191
name="interestRate3"
177192
step="0.01"
178-
placeholder="z.B. 5,00"
179-
value="5"
193+
placeholder="z.B. 3 oder 3,45"
194+
value=""
180195
/>
181196
</div>
182197
</div>
@@ -190,7 +205,7 @@ <h3>Kosten &amp; Laufzeiten</h3>
190205
type="number"
191206
id="monthly-fixed-costs"
192207
name="monthlyFixedCosts"
193-
placeholder="z.B. 1.234,56"
208+
placeholder="z.B. 1234 oder 1.234,56"
194209
step="0.01"
195210
/>
196211
</div>
@@ -272,29 +287,27 @@ <h2 id="results-toggle" style="cursor: pointer;">Ergebnisse</h2>
272287
<!-- Externe Skripte -->
273288
<script src="js/berechnungen.js"></script>
274289
<script>
275-
// Hilfsfunktion: Eingabe für Nettoeinkommen filtern
276-
function filterNetInput() {
277-
const input = document.getElementById('net-income');
278-
// Nur Ziffern, Punkt und Komma zulassen
290+
// Hilfsfunktion: Eingabe für Nettoeinkommen filtern (für alle 3 Felder)
291+
function filterNetInput(idx) {
292+
const input = document.getElementById('net-income' + idx);
279293
input.value = input.value.replace(/[^\d.,]/g, '');
280294
}
281295

282-
// Hilfsfunktion: Nettoeinkommen formatieren (Dezimal- und Tausendertrennzeichen)
283-
function formatNetIncome() {
284-
const input = document.getElementById('net-income');
296+
// Hilfsfunktion: Nettoeinkommen formatieren (Dezimal- und Tausendertrennzeichen) (für alle 3 Felder)
297+
function formatNetIncome(idx) {
298+
const input = document.getElementById('net-income' + idx);
285299
let raw = input.value.replace(/\./g, '').replace(/,/g, '.');
286300
let num = parseFloat(raw) || 0;
287-
// Format mit Tausenderpunkt und Komma
288301
const parts = num.toFixed(2).split('.');
289302
const integerPart = parts[0];
290303
const decimalPart = parts[1];
291304
input.value = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, '.') + ',' + decimalPart;
292305
}
293306

294-
// Funktion, um Slider- und Absolutwerte zu aktualisieren
295-
function updateSliderValue(sliderId, valueSpanId, absSpanId) {
307+
// Funktion, um Slider- und Absolutwerte zu aktualisieren (block-spezifisch)
308+
function updateSliderValue(sliderId, valueSpanId, absSpanId, netIncomeId) {
296309
const slider = document.getElementById(sliderId);
297-
const raw = document.getElementById('net-income').value.replace(/\./g, '').replace(/,/g, '.');
310+
const raw = document.getElementById(netIncomeId).value.replace(/\./g, '').replace(/,/g, '.');
298311
const net = parseFloat(raw) || 0;
299312
document.getElementById(valueSpanId).textContent = slider.value;
300313
const abs = (net * slider.value / 100).toFixed(2);
@@ -304,26 +317,27 @@ <h2 id="results-toggle" style="cursor: pointer;">Ergebnisse</h2>
304317

305318
// Register Slider-Events beim Laden
306319
document.addEventListener('DOMContentLoaded', function () {
307-
// Nettoeinkommen-Events
308-
const netIncomeInput = document.getElementById('net-income');
309-
netIncomeInput.addEventListener('input', function () {
310-
filterNetInput();
311-
updateValues();
312-
// Update all max-rate sliders' absolute value
313-
[1, 2, 3].forEach(i => {
314-
updateSliderValue(`max-rate${i}`, `max-rate${i}-value`, `max-rate${i}-abs`);
320+
// Nettoeinkommen-Events für alle 3 Felder
321+
[1, 2, 3].forEach(i => {
322+
const netIncomeInput = document.getElementById('net-income' + i);
323+
netIncomeInput.addEventListener('input', function () {
324+
filterNetInput(i);
325+
updateValues();
326+
updateSliderValue(`max-rate${i}`, `max-rate${i}-value`, `max-rate${i}-abs`, `net-income${i}`);
327+
});
328+
netIncomeInput.addEventListener('blur', function () {
329+
formatNetIncome(i);
315330
});
316331
});
317-
netIncomeInput.addEventListener('blur', formatNetIncome);
318332

319-
// Max-Rate-Slider
333+
// Max-Rate-Slider (je Block auf das passende Nettoeinkommen)
320334
[1, 2, 3].forEach(i => {
321335
const slider = document.getElementById(`max-rate${i}`);
322336
slider.addEventListener('input', () => {
323-
updateSliderValue(`max-rate${i}`, `max-rate${i}-value`, `max-rate${i}-abs`);
337+
updateSliderValue(`max-rate${i}`, `max-rate${i}-value`, `max-rate${i}-abs`, `net-income${i}`);
324338
});
325339
// Initial update
326-
updateSliderValue(`max-rate${i}`, `max-rate${i}-value`, `max-rate${i}-abs`);
340+
updateSliderValue(`max-rate${i}`, `max-rate${i}-value`, `max-rate${i}-abs`, `net-income${i}`);
327341
});
328342

329343
// Equity-Slider
@@ -348,7 +362,10 @@ <h2 id="results-toggle" style="cursor: pointer;">Ergebnisse</h2>
348362
// Formulareinsendung: Weiterleitung zu ergebnisse.html
349363
function submitForm() {
350364
const params = new URLSearchParams();
351-
params.set('netIncome', document.getElementById('net-income').value);
365+
// Drei separate Nettoeinkommen eintragen
366+
params.set('netIncome1', document.getElementById('net-income1').value);
367+
params.set('netIncome2', document.getElementById('net-income2').value);
368+
params.set('netIncome3', document.getElementById('net-income3').value);
352369
[1, 2, 3].forEach(i => {
353370
params.set(`maxRate${i}`, document.getElementById(`max-rate${i}`).value);
354371
params.set(`equity${i}`, document.getElementById(`equity-share${i}`).value);

0 commit comments

Comments
 (0)