FOERBICO_und_rpi-virtuell/docs/mvp-kuratierungstool.html

1251 lines
No EOL
52 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>KI-Artikel Kuratierungstool - MVP</title>
<style>
:root {
--primary-color: #2c3e50;
--secondary-color: #3498db;
--success-color: #27ae60;
--warning-color: #f39c12;
--danger-color: #e74c3c;
--light-bg: #ecf0f1;
--border-radius: 8px;
--shadow: 0 2px 10px rgba(0,0,0,0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: var(--primary-color);
background-color: #f8f9fa;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
/* Header */
.app-header {
background: white;
border-radius: var(--border-radius);
box-shadow: var(--shadow);
margin-bottom: 30px;
padding: 20px;
}
.header-top {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.app-title {
color: var(--primary-color);
font-size: 1.8em;
font-weight: bold;
}
.quality-indicator {
text-align: center;
padding: 10px;
background: var(--light-bg);
border-radius: var(--border-radius);
min-width: 120px;
}
.score-value {
font-size: 2em;
font-weight: bold;
color: var(--secondary-color);
display: block;
}
.score-label {
font-size: 0.9em;
color: #666;
}
/* Progress Indicator */
.progress-indicator {
margin-bottom: 20px;
}
.progress-steps {
display: flex;
justify-content: space-between;
position: relative;
}
.progress-steps::before {
content: '';
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 2px;
background: #ddd;
z-index: 1;
}
.step {
background: white;
padding: 8px 15px;
border-radius: var(--border-radius);
border: 2px solid #ddd;
position: relative;
z-index: 2;
font-size: 0.9em;
cursor: pointer;
transition: all 0.3s ease;
}
.step.completed {
background: var(--success-color);
color: white;
border-color: var(--success-color);
}
.step.active {
background: var(--secondary-color);
color: white;
border-color: var(--secondary-color);
}
/* Navigation */
.header-nav {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.nav-btn {
padding: 10px 20px;
background: var(--light-bg);
border: none;
border-radius: var(--border-radius);
cursor: pointer;
transition: all 0.3s ease;
font-size: 0.9em;
}
.nav-btn:hover {
background: var(--secondary-color);
color: white;
}
.nav-btn.active {
background: var(--secondary-color);
color: white;
}
/* Main Content */
.main-content {
background: white;
border-radius: var(--border-radius);
box-shadow: var(--shadow);
padding: 30px;
}
.section {
display: none;
}
.section.active {
display: block;
}
.section-title {
color: var(--primary-color);
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid var(--light-bg);
}
/* Form Styles */
.form-group {
margin-bottom: 20px;
}
.form-label {
display: block;
margin-bottom: 5px;
font-weight: 500;
color: var(--primary-color);
}
.form-control {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: var(--border-radius);
font-size: 1em;
transition: border-color 0.3s ease;
}
.form-control:focus {
outline: none;
border-color: var(--secondary-color);
box-shadow: 0 0 5px rgba(52, 152, 219, 0.3);
}
.checkbox-group {
display: flex;
flex-wrap: wrap;
gap: 15px;
}
.checkbox-item {
display: flex;
align-items: center;
gap: 5px;
}
.checkbox-item input[type="checkbox"] {
margin: 0;
}
/* Quality Dimensions */
.quality-dimensions {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
margin: 20px 0;
}
.dimension-card {
background: var(--light-bg);
border-radius: var(--border-radius);
padding: 20px;
border: 2px solid transparent;
transition: all 0.3s ease;
}
.dimension-card:hover {
border-color: var(--secondary-color);
}
.dimension-title {
color: var(--primary-color);
margin-bottom: 15px;
font-size: 1.2em;
font-weight: bold;
}
.dimension-score {
text-align: right;
font-size: 1.5em;
font-weight: bold;
color: var(--secondary-color);
}
.criteria-list {
list-style: none;
padding: 0;
}
.criteria-list li {
margin-bottom: 10px;
display: flex;
align-items: center;
gap: 10px;
}
.criteria-list input[type="range"] {
flex: 1;
}
.criteria-value {
min-width: 40px;
text-align: center;
font-weight: bold;
}
/* Buttons */
.btn {
padding: 12px 24px;
border: none;
border-radius: var(--border-radius);
cursor: pointer;
font-size: 1em;
transition: all 0.3s ease;
margin: 5px;
}
.btn-primary {
background: var(--secondary-color);
color: white;
}
.btn-primary:hover {
background: #2980b9;
}
.btn-success {
background: var(--success-color);
color: white;
}
.btn-success:hover {
background: #229954;
}
.btn-outline {
background: transparent;
border: 2px solid var(--secondary-color);
color: var(--secondary-color);
}
.btn-outline:hover {
background: var(--secondary-color);
color: white;
}
/* Results */
.results-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin: 20px 0;
}
.result-card {
background: var(--light-bg);
padding: 20px;
border-radius: var(--border-radius);
text-align: center;
}
.result-score {
font-size: 2em;
font-weight: bold;
margin-bottom: 10px;
}
.result-label {
color: #666;
font-size: 0.9em;
}
/* Export Section */
.export-options {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 15px;
}
.export-card {
background: var(--light-bg);
padding: 20px;
border-radius: var(--border-radius);
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
}
.export-card:hover {
background: var(--secondary-color);
color: white;
transform: translateY(-2px);
}
.export-icon {
font-size: 2em;
margin-bottom: 10px;
}
/* Bot Assistant */
.bot-assistant {
position: fixed;
bottom: 20px;
right: 20px;
width: 300px;
background: white;
border-radius: var(--border-radius);
box-shadow: var(--shadow);
padding: 15px;
display: none;
z-index: 1000;
}
.bot-assistant.active {
display: block;
}
.bot-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.bot-message {
background: var(--light-bg);
padding: 10px;
border-radius: var(--border-radius);
margin-bottom: 10px;
font-size: 0.9em;
}
.bot-toggle {
position: fixed;
bottom: 20px;
right: 20px;
width: 60px;
height: 60px;
background: var(--secondary-color);
color: white;
border: none;
border-radius: 50%;
font-size: 1.5em;
cursor: pointer;
box-shadow: var(--shadow);
transition: all 0.3s ease;
}
.bot-toggle:hover {
background: #2980b9;
transform: scale(1.1);
}
/* Responsive */
@media (max-width: 768px) {
.container {
padding: 10px;
}
.header-top {
flex-direction: column;
gap: 15px;
}
.progress-steps {
flex-direction: column;
gap: 10px;
}
.progress-steps::before {
display: none;
}
.header-nav {
justify-content: center;
}
.quality-dimensions {
grid-template-columns: 1fr;
}
}
/* Animation */
.fade-in {
animation: fadeIn 0.5s ease-in;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<div class="container">
<!-- Header -->
<header class="app-header">
<div class="header-top">
<h1 class="app-title">🎓 KI-Artikel Kuratierungstool</h1>
<div class="quality-indicator">
<span class="score-value" id="overallQualityScore">--</span>
<span class="score-label">Gesamtqualität</span>
</div>
</div>
<div class="progress-indicator">
<div class="progress-steps">
<div class="step completed" data-step="settings">Einstellungen</div>
<div class="step" data-step="metadata">Metadaten</div>
<div class="step" data-step="criteria">Kriterien</div>
<div class="step" data-step="analysis">Analyse</div>
<div class="step" data-step="results">Ergebnisse</div>
</div>
</div>
<nav class="header-nav">
<button class="nav-btn active" data-section="settings">Grundeinstellungen</button>
<button class="nav-btn" data-section="metadata">Metadaten</button>
<button class="nav-btn" data-section="criteria">Bewertungskriterien</button>
<button class="nav-btn" data-section="analysis">Qualitätsanalyse</button>
<button class="nav-btn" data-section="results">Ergebnisse & Export</button>
</nav>
</header>
<!-- Main Content -->
<main class="main-content">
<!-- Section 1: Grundeinstellungen & Zielgruppendifferenzierung -->
<section class="section active fade-in" id="settings">
<h2 class="section-title">📋 Schritt 1: Grundeinstellungen & Zielgruppendifferenzierung</h2>
<div class="form-group">
<label class="form-label">Bildungsstufe auswählen:</label>
<div class="checkbox-group">
<div class="checkbox-item">
<input type="checkbox" id="elementar" name="bildungsstufe" value="elementar">
<label for="elementar">Elementar</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="primar" name="bildungsstufe" value="primar">
<label for="primar">Primar</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="sekundar1" name="bildungsstufe" value="sekundar1">
<label for="sekundar1">Sekundar I</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="sekundar2" name="bildungsstufe" value="sekundar2">
<label for="sekundar2">Sekundar II</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="tertiaer" name="bildungsstufe" value="tertiaer">
<label for="tertiaer">Tertiär</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="erwachsenenbildung" name="bildungsstufe" value="erwachsenenbildung">
<label for="erwachsenenbildung">Erwachsenenbildung</label>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">Religionspädagogischer Kontext:</label>
<select class="form-control" id="religionskontext">
<option value="">Bitte auswählen...</option>
<option value="konfessionell">Konfessionell</option>
<option value="ueberkonfessionell">Überkonfessionell</option>
<option value="interreligioes">Interreligiös</option>
<option value="werteorientiert">Werteorientiert/Ethik</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Medientyp:</label>
<div class="checkbox-group">
<div class="checkbox-item">
<input type="checkbox" id="text" name="medientyp" value="text">
<label for="text">📄 Text/Aufsatz</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="video" name="medientyp" value="video">
<label for="video">🎥 Video</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="audio" name="medientyp" value="audio">
<label for="audio">🎵 Audio</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="interaktiv" name="medientyp" value="interaktiv">
<label for="interaktiv">⚡ Interaktiv</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="arbeitsmaterial" name="medientyp" value="arbeitsmaterial">
<label for="arbeitsmaterial">📋 Arbeitsmaterial</label>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">Multiplikatorenebene:</label>
<select class="form-control" id="multiplikatorenebene">
<option value="">Bitte auswählen...</option>
<option value="praktiker">Praktiker:innen</option>
<option value="fortbildende">Fortbildende</option>
<option value="fortbildner-fortbildende">Fortbildner für Fortbildende</option>
</select>
</div>
<button class="btn btn-primary" onclick="nextSection('metadata')">Weiter zu Metadaten →</button>
</section>
<!-- Section 2: Metadaten & Erschließung -->
<section class="section fade-in" id="metadata">
<h2 class="section-title">📊 Schritt 2: Metadaten & Erschließung</h2>
<div class="form-group">
<label class="form-label">Titel des Materials:</label>
<input type="text" class="form-control" id="material-titel" placeholder="Titel eingeben...">
</div>
<div class="form-group">
<label class="form-label">Autor:in/Herausgeber:</label>
<input type="text" class="form-control" id="material-autor" placeholder="Autor:in eingeben...">
</div>
<div class="form-group">
<label class="form-label">URL/DOI:</label>
<input type="url" class="form-control" id="material-url" placeholder="https://...">
</div>
<div class="form-group">
<label class="form-label">Fachbereiche:</label>
<div class="checkbox-group">
<div class="checkbox-item">
<input type="checkbox" id="theologie" name="fachbereich" value="theologie">
<label for="theologie">Theologie</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="religionspaedagogik" name="fachbereich" value="religionspaedagogik">
<label for="religionspaedagogik">Religionspädagogik</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="ethik" name="fachbereich" value="ethik">
<label for="ethik">Ethik</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="philosophie" name="fachbereich" value="philosophie">
<label for="philosophie">Philosophie</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="paedagogik" name="fachbereich" value="paedagogik">
<label for="paedagogik">Pädagogik</label>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">Schlagworte (durch Kommas getrennt):</label>
<textarea class="form-control" id="schlagworte" rows="3" placeholder="KI, Bildung, Religionspädagogik, Qualitätssicherung..."></textarea>
</div>
<div class="form-group">
<label class="form-label">Kurzbeschreibung/Abstract:</label>
<textarea class="form-control" id="abstract" rows="4" placeholder="Kurze Beschreibung des Materials..."></textarea>
</div>
<div style="display: flex; gap: 10px;">
<button class="btn btn-outline" onclick="previousSection('settings')">← Zurück</button>
<button class="btn btn-primary" onclick="nextSection('criteria')">Weiter zu Kriterien →</button>
</div>
</section>
<!-- Section 3: Qualitätskriterien & Gewichtung -->
<section class="section fade-in" id="criteria">
<h2 class="section-title">⚖️ Schritt 3: Qualitätskriterien & Gewichtung</h2>
<div class="quality-dimensions">
<!-- Dimension 1: Rechtliche Qualität -->
<div class="dimension-card">
<div class="dimension-title">⚖️ Rechtliche Qualität</div>
<div class="dimension-score"><span id="legal-score">0</span>/100</div>
<ul class="criteria-list">
<li>
<label>TULLU-Regel erfüllt:</label>
<input type="range" min="0" max="100" value="0" id="tullu-range">
<span class="criteria-value" id="tullu-value">0</span>
</li>
<li>
<label>CC-Lizenz vorhanden:</label>
<input type="range" min="0" max="100" value="0" id="cc-range">
<span class="criteria-value" id="cc-value">0</span>
</li>
<li>
<label>KI-Content gekennzeichnet:</label>
<input type="range" min="0" max="100" value="0" id="ki-range">
<span class="criteria-value" id="ki-value">0</span>
</li>
<li>
<label>Urheberrecht geklärt:</label>
<input type="range" min="0" max="100" value="0" id="urheberrecht-range">
<span class="criteria-value" id="urheberrecht-value">0</span>
</li>
</ul>
</div>
<!-- Dimension 2: Technische Qualität -->
<div class="dimension-card">
<div class="dimension-title">🔧 Technische Qualität</div>
<div class="dimension-score"><span id="technical-score">0</span>/100</div>
<ul class="criteria-list">
<li>
<label>Offene Dateiformate:</label>
<input type="range" min="0" max="100" value="0" id="formats-range">
<span class="criteria-value" id="formats-value">0</span>
</li>
<li>
<label>Barrierefreiheit (WCAG):</label>
<input type="range" min="0" max="100" value="0" id="accessibility-range">
<span class="criteria-value" id="accessibility-value">0</span>
</li>
<li>
<label>Metadaten-Qualität:</label>
<input type="range" min="0" max="100" value="0" id="metadata-range">
<span class="criteria-value" id="metadata-value">0</span>
</li>
<li>
<label>Geräte-Kompatibilität:</label>
<input type="range" min="0" max="100" value="0" id="compatibility-range">
<span class="criteria-value" id="compatibility-value">0</span>
</li>
</ul>
</div>
<!-- Dimension 3: Pädagogische Qualität -->
<div class="dimension-card">
<div class="dimension-title">📚 Pädagogische Qualität</div>
<div class="dimension-score"><span id="pedagogical-score">0</span>/100</div>
<ul class="criteria-list">
<li>
<label>Fachwissenschaftliche Fundierung:</label>
<input type="range" min="0" max="100" value="0" id="scientific-range">
<span class="criteria-value" id="scientific-value">0</span>
</li>
<li>
<label>Zielgruppenorientierung:</label>
<input type="range" min="0" max="100" value="0" id="target-range">
<span class="criteria-value" id="target-value">0</span>
</li>
<li>
<label>Kompetenzorientierung:</label>
<input type="range" min="0" max="100" value="0" id="competence-range">
<span class="criteria-value" id="competence-value">0</span>
</li>
<li>
<label>Interaktion & Transfer:</label>
<input type="range" min="0" max="100" value="0" id="interaction-range">
<span class="criteria-value" id="interaction-value">0</span>
</li>
</ul>
</div>
<!-- Dimension 4: Religionspädagogische Qualität -->
<div class="dimension-card">
<div class="dimension-title">✝️ Religionspädagogische Qualität</div>
<div class="dimension-score"><span id="religious-score">0</span>/100</div>
<ul class="criteria-list">
<li>
<label>Elementarisierung:</label>
<input type="range" min="0" max="100" value="0" id="elementarisierung-range">
<span class="criteria-value" id="elementarisierung-value">0</span>
</li>
<li>
<label>Korrelation (Lebenswelt):</label>
<input type="range" min="0" max="100" value="0" id="korrelation-range">
<span class="criteria-value" id="korrelation-value">0</span>
</li>
<li>
<label>Subjektorientierung:</label>
<input type="range" min="0" max="100" value="0" id="subjektorientierung-range">
<span class="criteria-value" id="subjektorientierung-value">0</span>
</li>
<li>
<label>Pluralitätssensibilität:</label>
<input type="range" min="0" max="100" value="0" id="pluralitaet-range">
<span class="criteria-value" id="pluralitaet-value">0</span>
</li>
</ul>
</div>
</div>
<div style="display: flex; gap: 10px;">
<button class="btn btn-outline" onclick="previousSection('metadata')">← Zurück</button>
<button class="btn btn-primary" onclick="nextSection('analysis')">Weiter zur Analyse →</button>
</div>
</section>
<!-- Section 4: Qualitätsanalyse & KI-Bewertung -->
<section class="section fade-in" id="analysis">
<h2 class="section-title">🔍 Schritt 4: Qualitätsanalyse & KI-Bewertung</h2>
<div class="form-group">
<label class="form-label">Material-Input:</label>
<textarea class="form-control" id="material-input" rows="6" placeholder="Fügen Sie hier den Text des zu bewertenden Materials ein oder geben Sie zusätzliche Informationen an..."></textarea>
</div>
<div class="form-group">
<label class="form-label">KI-Analyse-Optionen:</label>
<div class="checkbox-group">
<div class="checkbox-item">
<input type="checkbox" id="populismus-analyse" name="ai-analyse" value="populismus">
<label for="populismus-analyse">Populismus-Analyse</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="bias-erkennung" name="ai-analyse" value="bias">
<label for="bias-erkennung">Bias-Erkennung</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="barrierefreiheit" name="ai-analyse" value="accessibility">
<label for="barrierefreiheit">Barrierefreiheitsprüfung</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="antisemitismus" name="ai-analyse" value="antisemitism">
<label for="antisemitismus">Antisemitismus-Screening</label>
</div>
<div class="checkbox-item">
<input type="checkbox" id="rassismus" name="ai-analyse" value="racism">
<label for="rassismus">Rassismus-Screening</label>
</div>
</div>
</div>
<div class="form-group">
<button class="btn btn-success" onclick="performAnalysis()">🤖 KI-Analyse starten</button>
</div>
<div id="analysis-results" style="display: none;">
<h3>Analyse-Ergebnisse:</h3>
<div id="analysis-output" class="form-group">
<textarea class="form-control" rows="8" readonly placeholder="Analyse-Ergebnisse werden hier angezeigt..."></textarea>
</div>
</div>
<div style="display: flex; gap: 10px;">
<button class="btn btn-outline" onclick="previousSection('criteria')">← Zurück</button>
<button class="btn btn-primary" onclick="nextSection('results')">Weiter zu Ergebnissen →</button>
</div>
</section>
<!-- Section 5: Bewertungsergebnisse & Export -->
<section class="section fade-in" id="results">
<h2 class="section-title">📊 Schritt 5: Bewertungsergebnisse & Export</h2>
<div class="results-grid">
<div class="result-card">
<div class="result-score" style="color: var(--danger-color);" id="result-legal">--</div>
<div class="result-label">Rechtliche Qualität</div>
</div>
<div class="result-card">
<div class="result-score" style="color: var(--warning-color);" id="result-technical">--</div>
<div class="result-label">Technische Qualität</div>
</div>
<div class="result-card">
<div class="result-score" style="color: var(--secondary-color);" id="result-pedagogical">--</div>
<div class="result-label">Pädagogische Qualität</div>
</div>
<div class="result-card">
<div class="result-score" style="color: var(--success-color);" id="result-religious">--</div>
<div class="result-label">Religionspädagogische Qualität</div>
</div>
</div>
<div class="form-group">
<h3>Handlungsempfehlungen:</h3>
<div id="recommendations" class="form-group">
<textarea class="form-control" rows="6" readonly placeholder="Basierend auf der Bewertung werden hier Empfehlungen angezeigt..."></textarea>
</div>
</div>
<div class="form-group">
<h3>Export-Optionen:</h3>
<div class="export-options">
<div class="export-card" onclick="exportPrompt()">
<div class="export-icon">📋</div>
<strong>KI-Bewertungs-Prompt</strong>
<p>Für ChatGPT, Claude & Co.</p>
</div>
<div class="export-card" onclick="exportMetadata()">
<div class="export-icon">📊</div>
<strong>Metadaten (JSON)</strong>
<p>Strukturierte Daten</p>
</div>
<div class="export-card" onclick="exportReport()">
<div class="export-icon">📄</div>
<strong>Qualitätsbericht</strong>
<p>PDF-Dokument</p>
</div>
<div class="export-card" onclick="exportMaterialpool()">
<div class="export-icon">📝</div>
<strong>Materialpool-Eintrag</strong>
<p>rpi-virtuell Format</p>
</div>
</div>
</div>
<div style="display: flex; gap: 10px;">
<button class="btn btn-outline" onclick="previousSection('analysis')">← Zurück</button>
<button class="btn btn-success" onclick="resetTool()">🔄 Neue Bewertung starten</button>
</div>
</section>
</main>
<!-- Bot Assistant -->
<div class="bot-assistant" id="botAssistant">
<div class="bot-header">
<strong>🤖 Religionspädagogischer Assistent</strong>
<button onclick="toggleBot()" style="background: none; border: none; font-size: 1.2em; cursor: pointer;"></button>
</div>
<div class="bot-message" id="botMessage">
Willkommen! Für wen kuratieren Sie das Material heute?
</div>
<div>
<input type="text" class="form-control" placeholder="Ihre Antwort..." style="margin-bottom: 10px;">
<button class="btn btn-primary" style="width: 100%; padding: 8px;">Antworten</button>
</div>
</div>
<button class="bot-toggle" onclick="toggleBot()" id="botToggle">🤖</button>
</div>
<script>
// Globale Variablen
let currentSection = 'settings';
let qualityScores = {
legal: 0,
technical: 0,
pedagogical: 0,
religious: 0
};
// Event Listeners für Navigation
document.addEventListener('DOMContentLoaded', function() {
// Navigation Buttons
document.querySelectorAll('.nav-btn').forEach(btn => {
btn.addEventListener('click', function() {
const section = this.getAttribute('data-section');
showSection(section);
});
});
// Range Slider Updates
document.querySelectorAll('input[type="range"]').forEach(slider => {
slider.addEventListener('input', updateCriteriaValues);
});
// Initial Update
updateCriteriaValues();
});
// Section Navigation
function showSection(sectionId) {
// Hide all sections
document.querySelectorAll('.section').forEach(section => {
section.classList.remove('active');
});
// Show target section
document.getElementById(sectionId).classList.add('active');
document.getElementById(sectionId).classList.add('fade-in');
// Update navigation
document.querySelectorAll('.nav-btn').forEach(btn => {
btn.classList.remove('active');
});
document.querySelector(`[data-section="${sectionId}"]`).classList.add('active');
// Update progress
updateProgress(sectionId);
currentSection = sectionId;
}
function nextSection(sectionId) {
showSection(sectionId);
}
function previousSection(sectionId) {
showSection(sectionId);
}
// Progress Update
function updateProgress(currentStep) {
const steps = ['settings', 'metadata', 'criteria', 'analysis', 'results'];
const currentIndex = steps.indexOf(currentStep);
document.querySelectorAll('.step').forEach((step, index) => {
step.classList.remove('active', 'completed');
if (index < currentIndex) {
step.classList.add('completed');
} else if (index === currentIndex) {
step.classList.add('active');
}
});
}
// Criteria Values Update
function updateCriteriaValues() {
// Update individual criteria values
document.querySelectorAll('input[type="range"]').forEach(slider => {
const valueSpan = document.getElementById(slider.id.replace('-range', '-value'));
if (valueSpan) {
valueSpan.textContent = slider.value;
}
});
// Calculate dimension scores
const legalScores = ['tullu-range', 'cc-range', 'ki-range', 'urheberrecht-range'];
const technicalScores = ['formats-range', 'accessibility-range', 'metadata-range', 'compatibility-range'];
const pedagogicalScores = ['scientific-range', 'target-range', 'competence-range', 'interaction-range'];
const religiousScores = ['elementarisierung-range', 'korrelation-range', 'subjektorientierung-range', 'pluralitaet-range'];
qualityScores.legal = calculateDimensionScore(legalScores);
qualityScores.technical = calculateDimensionScore(technicalScores);
qualityScores.pedagogical = calculateDimensionScore(pedagogicalScores);
qualityScores.religious = calculateDimensionScore(religiousScores);
// Update dimension displays
document.getElementById('legal-score').textContent = qualityScores.legal;
document.getElementById('technical-score').textContent = qualityScores.technical;
document.getElementById('pedagogical-score').textContent = qualityScores.pedagogical;
document.getElementById('religious-score').textContent = qualityScores.religious;
// Update overall score
const overallScore = Math.round((qualityScores.legal + qualityScores.technical + qualityScores.pedagogical + qualityScores.religious) / 4);
document.getElementById('overallQualityScore').textContent = overallScore;
// Update results section
document.getElementById('result-legal').textContent = qualityScores.legal;
document.getElementById('result-technical').textContent = qualityScores.technical;
document.getElementById('result-pedagogical').textContent = qualityScores.pedagogical;
document.getElementById('result-religious').textContent = qualityScores.religious;
// Generate recommendations
generateRecommendations();
}
function calculateDimensionScore(rangeIds) {
let total = 0;
let count = 0;
rangeIds.forEach(id => {
const element = document.getElementById(id);
if (element) {
total += parseInt(element.value);
count++;
}
});
return count > 0 ? Math.round(total / count) : 0;
}
// AI Analysis
function performAnalysis() {
const materialInput = document.getElementById('material-input').value;
const selectedAnalyses = document.querySelectorAll('input[name="ai-analyse"]:checked');
if (!materialInput.trim()) {
alert('Bitte geben Sie Material-Text ein für die Analyse.');
return;
}
// Show results section
document.getElementById('analysis-results').style.display = 'block';
// Simulate AI analysis
let analysisText = "=== KI-ANALYSE ERGEBNISSE ===\n\n";
analysisText += `Analysierter Text: ${materialInput.substring(0, 100)}...\n\n`;
selectedAnalyses.forEach(checkbox => {
const analysis = checkbox.value;
switch(analysis) {
case 'populismus':
analysisText += "🔍 POPULISMUS-ANALYSE:\n";
analysisText += "- Keine populistischen Strukturmerkmale erkannt\n";
analysisText += "- Argumentationsweise ist differenziert\n\n";
break;
case 'bias':
analysisText += "⚖️ BIAS-ERKENNUNG:\n";
analysisText += "- Geringe kulturelle Verzerrungen festgestellt\n";
analysisText += "- Empfehlung: Perspektivenvielfalt erweitern\n\n";
break;
case 'accessibility':
analysisText += "♿ BARRIEREFREIHEIT:\n";
analysisText += "- Alt-Texte für Bilder fehlen\n";
analysisText += "- Kontrast-Verhältnisse prüfen\n\n";
break;
case 'antisemitism':
analysisText += "✡️ ANTISEMITISMUS-SCREENING:\n";
analysisText += "- Keine antisemitischen Inhalte erkannt\n";
analysisText += "- Historische Darstellung sensibel\n\n";
break;
case 'racism':
analysisText += "🤝 RASSISMUS-SCREENING:\n";
analysisText += "- Material ist diskriminierungsfrei\n";
analysisText += "- Diversitätssensible Sprache verwendet\n\n";
break;
}
});
document.querySelector('#analysis-output textarea').value = analysisText;
}
// Recommendations
function generateRecommendations() {
let recommendations = "=== HANDLUNGSEMPFEHLUNGEN ===\n\n";
if (qualityScores.legal < 50) {
recommendations += "⚖️ RECHTLICHE QUALITÄT (Priorität: HOCH):\n";
recommendations += "- TULLU-Regel vollständig implementieren\n";
recommendations += "- Creative Commons Lizenz hinzufügen\n";
recommendations += "- KI-generierte Inhalte kennzeichnen\n\n";
}
if (qualityScores.technical < 50) {
recommendations += "🔧 TECHNISCHE QUALITÄT (Priorität: MITTEL):\n";
recommendations += "- Auf offene Dateiformate umstellen (.odt, .svg)\n";
recommendations += "- Barrierefreiheits-Standards implementieren\n";
recommendations += "- Metadaten-Qualität verbessern\n\n";
}
if (qualityScores.pedagogical < 50) {
recommendations += "📚 PÄDAGOGISCHE QUALITÄT (Priorität: HOCH):\n";
recommendations += "- Fachwissenschaftliche Referenzen ergänzen\n";
recommendations += "- Zielgruppen-Anpassung überprüfen\n";
recommendations += "- Kompetenzorientierung stärken\n\n";
}
if (qualityScores.religious < 50) {
recommendations += "✝️ RELIGIONSPÄDAGOGISCHE QUALITÄT (Priorität: HOCH):\n";
recommendations += "- Elementarisierung verbessern\n";
recommendations += "- Lebensweltbezug stärken\n";
recommendations += "- Pluralitätssensibilität erhöhen\n\n";
}
const overallScore = Math.round((qualityScores.legal + qualityScores.technical + qualityScores.pedagogical + qualityScores.religious) / 4);
if (overallScore >= 80) {
recommendations += "🎉 GLÜCKWUNSCH! Ihr Material erfüllt hohe Qualitätsstandards.\n";
recommendations += "Empfehlung: Material für Community-Sharing freigeben.";
} else if (overallScore >= 60) {
recommendations += "✅ Gute Qualität erreicht! Kleinere Verbesserungen empfohlen.\n";
recommendations += "Das Material ist grundsätzlich verwendbar.";
} else {
recommendations += "⚠️ Erheblicher Verbesserungsbedarf erkannt.\n";
recommendations += "Bitte arbeiten Sie die oben genannten Punkte ab.";
}
document.querySelector('#recommendations textarea').value = recommendations;
}
// Export Functions
function exportPrompt() {
const materialData = collectMaterialData();
let prompt = `# KI-Bewertungs-Prompt für Bildungsmaterial\n\n`;
prompt += `Bewerte folgendes Bildungsmaterial nach den FOERBICO 4-Dimensionen-Qualitätsstandards:\n\n`;
prompt += `## Material-Informationen:\n`;
prompt += `- Titel: ${materialData.titel}\n`;
prompt += `- Autor:in: ${materialData.autor}\n`;
prompt += `- URL: ${materialData.url}\n`;
prompt += `- Bildungsstufe: ${materialData.bildungsstufe}\n`;
prompt += `- Religionskontext: ${materialData.religionskontext}\n\n`;
prompt += `## Bewertungsdimensionen (je 0-100 Punkte):\n`;
prompt += `1. Rechtliche Qualität (TULLU, CC-Lizenz, KI-Kennzeichnung)\n`;
prompt += `2. Technische Qualität (Formate, Barrierefreiheit, Metadaten)\n`;
prompt += `3. Pädagogische Qualität (Fundierung, Zielgruppe, Kompetenz)\n`;
prompt += `4. Religionspädagogische Qualität (Elementarisierung, Korrelation, Subjektorientierung, Pluralität)\n\n`;
prompt += `## Material-Text:\n${document.getElementById('material-input').value}\n\n`;
prompt += `Gib eine detaillierte Bewertung mit Punktzahl pro Dimension und Verbesserungsvorschlägen.`;
downloadText(prompt, 'bewertungs-prompt.txt');
}
function exportMetadata() {
const materialData = collectMaterialData();
const metadata = {
title: materialData.titel,
author: materialData.autor,
url: materialData.url,
educationLevel: materialData.bildungsstufe,
religiousContext: materialData.religionskontext,
mediaType: materialData.medientyp,
keywords: materialData.schlagworte.split(',').map(k => k.trim()),
abstract: materialData.abstract,
qualityScores: qualityScores,
overallScore: Math.round((qualityScores.legal + qualityScores.technical + qualityScores.pedagogical + qualityScores.religious) / 4),
timestamp: new Date().toISOString(),
foerbicoCompliant: true
};
downloadText(JSON.stringify(metadata, null, 2), 'material-metadaten.json');
}
function exportReport() {
alert('PDF-Export wird in der finalen Version verfügbar sein.');
}
function exportMaterialpool() {
const materialData = collectMaterialData();
let entry = `# rpi-virtuell Materialpool-Eintrag\n\n`;
entry += `**Titel:** ${materialData.titel}\n`;
entry += `**Autor:in:** ${materialData.autor}\n`;
entry += `**URL:** ${materialData.url}\n`;
entry += `**Bildungsstufe:** ${materialData.bildungsstufe}\n`;
entry += `**Fachbereich:** Religionspädagogik\n`;
entry += `**Schlagworte:** ${materialData.schlagworte}\n\n`;
entry += `**Beschreibung:**\n${materialData.abstract}\n\n`;
entry += `**FOERBICO-Qualitätsbewertung:**\n`;
entry += `- Rechtlich: ${qualityScores.legal}/100\n`;
entry += `- Technisch: ${qualityScores.technical}/100\n`;
entry += `- Pädagogisch: ${qualityScores.pedagogical}/100\n`;
entry += `- Religionspädagogisch: ${qualityScores.religious}/100\n\n`;
entry += `**Gesamtqualität:** ${Math.round((qualityScores.legal + qualityScores.technical + qualityScores.pedagogical + qualityScores.religious) / 4)}/100\n\n`;
entry += `*Kuratiert mit KI-Artikel Kuratierungstool v1.0*`;
downloadText(entry, 'materialpool-eintrag.md');
}
// Helper Functions
function collectMaterialData() {
return {
titel: document.getElementById('material-titel').value,
autor: document.getElementById('material-autor').value,
url: document.getElementById('material-url').value,
bildungsstufe: Array.from(document.querySelectorAll('input[name="bildungsstufe"]:checked')).map(cb => cb.value).join(', '),
religionskontext: document.getElementById('religionskontext').value,
medientyp: Array.from(document.querySelectorAll('input[name="medientyp"]:checked')).map(cb => cb.value).join(', '),
schlagworte: document.getElementById('schlagworte').value,
abstract: document.getElementById('abstract').value
};
}
function downloadText(text, filename) {
const element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function resetTool() {
if (confirm('Möchten Sie wirklich eine neue Bewertung starten? Alle Eingaben werden zurückgesetzt.')) {
location.reload();
}
}
// Bot Assistant
function toggleBot() {
const bot = document.getElementById('botAssistant');
const toggle = document.getElementById('botToggle');
if (bot.classList.contains('active')) {
bot.classList.remove('active');
toggle.style.display = 'block';
} else {
bot.classList.add('active');
toggle.style.display = 'none';
updateBotMessage();
}
}
function updateBotMessage() {
const messages = [
"Für wen kuratieren Sie das Material?",
"Welcher religionspädagogische Kontext ist relevant?",
"Auf welche Qualitätsdimension legen Sie besonderen Wert?",
"Benötigen Sie Hilfe bei der Bewertung?",
"Möchten Sie Community-Feedback einholen?"
];
const randomMessage = messages[Math.floor(Math.random() * messages.length)];
document.getElementById('botMessage').textContent = randomMessage;
}
</script>
</body>
</html>