feat: default quicklinks, static PDF downloads, improved app icon

This commit is contained in:
Simon
2026-04-22 22:49:35 +02:00
parent 6b54e3c813
commit 62ebc53875
10 changed files with 31 additions and 11 deletions
+24 -4
View File
@@ -622,6 +622,7 @@ main {
.ql-del { position: absolute; top: 3px; right: 4px; font-size: 10px; color: var(--text-subtle); display: none; border: none; background: none; cursor: pointer; line-height: 1; }
.ql-item:hover .ql-del { display: block; }
.ql-del:hover { color: var(--red); }
.ql-item--soon { opacity: .4; cursor: not-allowed; pointer-events: none; }
/* ── EMPTY STATE ─────────────────────────────────────────── */
@@ -1418,8 +1419,12 @@ footer {
<button class="add-btn" id="btn-add-ql" style="display:none" onclick="openModal('quicklinks')">+ Link</button>
</div>
<div class="card-body"><div class="ql-grid" id="ql-grid">
<a class="ql-item" href="https://www.ifb-schulen.de" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="building-2" aria-hidden="true"></i></span>IFB Website</a>
<a class="ql-item" href="https://www.bib-info.de" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="book-open" aria-hidden="true"></i></span>Bibliothek</a>
<span class="ql-item ql-item--soon" title="Demnächst verfügbar"><span class="ql-icon"><i data-lucide="award" aria-hidden="true"></i></span>Notenportal</span>
<a class="ql-item" href="https://github.com/lulinretrograde/ifb-schulapp" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="github" aria-hidden="true"></i></span>Quellcode</a>
<a class="ql-item" href="https://ifb-rosenheim.de/" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="building-2" aria-hidden="true"></i></span>IFB-Website</a>
<a class="ql-item" href="https://webentwicklerkurs.de/" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="globe" aria-hidden="true"></i></span>Webentwicklerkurs</a>
<a class="ql-item" href="https://pythonentwicklerkurs.de/" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="terminal" aria-hidden="true"></i></span>Pythonentwicklerkurs</a>
<a class="ql-item" href="https://kientwicklerkurs.de/" target="_blank" rel="noopener"><span class="ql-icon"><i data-lucide="bot" aria-hidden="true"></i></span>KI-Entwicklerkurs</a>
</div></div>
</div>
@@ -2978,8 +2983,22 @@ async function delTeacherGrade(id){
async function loadStudentMaterials(){
const mats=await api('GET','teacher/materials/class/info1');
const el=document.getElementById('list-student-materials');
if(!mats||mats.error||!mats.length){el.innerHTML='<div class="empty">Keine Materialien vorhanden</div>';return;}
el.innerHTML=mats.map(m=>`<div class="file-item">
const staticItems=`<div class="file-item">
<div class="file-icon">📕</div>
<div class="file-info">
<div class="file-name">Stundenplan ab 02.03.26</div>
<div class="file-meta">PDF · Allgemein</div>
</div>
<a class="file-dl" href="/downloads/Stundenplan_ab_02_03_26.pdf" download="Stundenplan_ab_02_03_26.pdf">↓ Laden</a>
</div><div class="file-item">
<div class="file-icon">📕</div>
<div class="file-info">
<div class="file-name">Klausurenplan ab 06.03.26</div>
<div class="file-meta">PDF · Allgemein</div>
</div>
<a class="file-dl" href="/downloads/Klausurenplan_ab_06_03_26.pdf" download="Klausurenplan_ab_06_03_26.pdf">↓ Laden</a>
</div>`;
const dynItems=(!mats||mats.error||!mats.length)?'':mats.map(m=>`<div class="file-item">
<div class="file-icon">${fileIcon(m.mime_type)}</div>
<div class="file-info">
<div class="file-name">${esc(m.title)}</div>
@@ -2987,6 +3006,7 @@ async function loadStudentMaterials(){
</div>
<button class="file-dl" onclick="window.location.href='/api/teacher/materials/${m.id}/download'">↓ Laden</button>
</div>`).join('');
el.innerHTML=staticItems+dynItems;
}
async function loadStudentAnnouncements(){