Textsystem: Bis-Strich mit Leerzeichen (Zahl – Zahl) per Agent-Sweep
562 Ersetzungen in 50 Dateien: Halbgeviertstrich zwischen zwei Ziffern (= "bis"-Bereich) bekommt Leerzeichen davor/danach (3–4 -> 3 – 4). Regex /([0-9])\s*–\s*(?=[0-9])/ auf Rohtext (format-erhaltend, CRLF/Einrueckung unveraendert), Bindestriche in Woertern und Minuszeichen unangetastet, alle JSON weiter gueltig. Energiemanager-Zeitbloecke sind Display-Labels (kein Logik-Key) -> safe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
const { chromium } = require('@playwright/test');
|
||||
(async () => {
|
||||
const browser = await chromium.launch();
|
||||
const out = {};
|
||||
|
||||
// 1) modul-weltkueche: Lehrplan-Bezug jetzt vorhanden?
|
||||
{
|
||||
const page = await browser.newPage();
|
||||
await page.goto('https://geograsim.at/modul-weltkueche', { waitUntil: 'domcontentloaded' });
|
||||
await page.waitForTimeout(1000);
|
||||
out.modulWeltkueche = await page.evaluate(() => ({
|
||||
kompetenzTitles: [...document.querySelectorAll('.md-kompetenz-title')].map(e=>e.textContent.trim()),
|
||||
anchorCount: document.querySelectorAll('.md-anchor').length,
|
||||
showsEmpty: document.body.textContent.includes('Noch keine Kompetenzen zugeordnet'),
|
||||
}));
|
||||
await page.close();
|
||||
}
|
||||
|
||||
// 2) Weltküche-Sim: Artikel + Ukraine-Feedback
|
||||
{
|
||||
const page = await browser.newPage();
|
||||
const errs=[]; page.on('pageerror',e=>errs.push(e.message));
|
||||
await page.goto('https://geograsim.at/sims/weltkueche/game.html', { waitUntil:'domcontentloaded' });
|
||||
await page.waitForTimeout(2000);
|
||||
out.weltkueche = await page.evaluate(async () => {
|
||||
try {
|
||||
if (!DISHES.length) await loadWeltkuecheData();
|
||||
const dish = DISHES.find(d=>d.id==='tiroler-groestl'); current={dish};
|
||||
buildTaskFor('kartoffel');
|
||||
return {
|
||||
kartoffelArt: ING.kartoffel.art,
|
||||
badArticles: Object.entries(ING).filter(([k,v])=>!['der','die','das'].includes(v&&v.art)).map(([k])=>k),
|
||||
wrongUA: explainChoice('kartoffel','ukraine',false).text,
|
||||
};
|
||||
} catch(e){ return { error:String(e) }; }
|
||||
});
|
||||
out.weltkueche.pageErrors = errs;
|
||||
await page.close();
|
||||
}
|
||||
|
||||
// 3) teacher.html: lädt + neue Funktionen da (direkter Link, den das Produkt nutzt)
|
||||
{
|
||||
const page = await browser.newPage();
|
||||
const errs=[]; page.on('pageerror',e=>errs.push(e.message));
|
||||
// teacher.html leitet ohne Login auf login.html um — Navigation abfangen, sofort auswerten
|
||||
await page.route('**/login.html', r=>r.abort());
|
||||
await page.goto('https://geograsim.at/teacher.html', { waitUntil:'domcontentloaded' }).catch(()=>{});
|
||||
await page.waitForTimeout(1500);
|
||||
out.teacher = await page.evaluate(() => ({
|
||||
hasRenderGesamt: typeof renderLiveGesamt === 'function',
|
||||
hasQualityBar: typeof _liveQualityBar === 'function',
|
||||
qualitySample: (typeof _liveQualityBar==='function') ? _liveQualityBar(8,2) : null,
|
||||
tabLabels: [...document.querySelectorAll('#tab-bar .tab')].map(t=>t.textContent.trim()),
|
||||
})).catch(e=>({evalError:String(e)}));
|
||||
out.teacher.pageErrors = errs;
|
||||
await page.close();
|
||||
}
|
||||
|
||||
// 4) Tourismusregion passstrasse Karte
|
||||
{
|
||||
const page = await browser.newPage();
|
||||
const mc = await page.request.get('https://geograsim.at/sims/tourismusregion/js/maps-custom.json');
|
||||
const j = await mc.json();
|
||||
out.tourismus = {
|
||||
keys: Object.keys(j),
|
||||
passBergaufPoints: j.passstrasse?.routes?.bergauf?.length ?? null,
|
||||
passSlots: (j.passstrasse?.slots||[]).length,
|
||||
};
|
||||
await page.close();
|
||||
}
|
||||
|
||||
console.log(JSON.stringify(out, null, 2));
|
||||
await browser.close();
|
||||
})();
|
||||
Reference in New Issue
Block a user