diff --git a/index.html b/index.html
index 1220910..7d0150b 100644
--- a/index.html
+++ b/index.html
@@ -90,8 +90,9 @@ tr:hover td{background:var(--cyan-50)}
.modal .meta-row .fld{font-size:13px;color:var(--gray-500)}
.modal .meta-row .fld strong{display:block;font-size:14px;color:var(--ink);margin-top:2px}
.modal .docs{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
-.modal .docs .doc-chip{background:var(--gray-100);padding:6px 12px;border-radius:6px;font-size:13px;display:flex;align-items:center;gap:6px}
+.modal .docs .doc-chip{background:var(--gray-100);padding:6px 12px;border-radius:6px;font-size:13px;display:flex;align-items:center;gap:6px;border:1px solid transparent;transition:.15s}
.modal .docs .doc-chip button{background:none;border:none;cursor:pointer;color:var(--red);font-size:14px;line-height:1}
+.doc-chip:hover{background:var(--cyan-50);color:var(--ink);border-color:var(--cyan)}
.file-upload{border:2px dashed var(--gray-200);border-radius:8px;padding:20px;text-align:center;color:var(--gray-500);cursor:pointer;margin-bottom:12px;font-size:14px;transition:.15s}
.file-upload:hover{border-color:var(--cyan);color:var(--cyan)}
.file-upload .icon{font-size:28px;display:block;margin-bottom:4px}
@@ -592,8 +593,9 @@ function openEdit(id){
// Generate file list from saved file metadata
const savedFiles = JSON.parse(localStorage.getItem('samruk_files_'+e.id) || '[]')
const fileList = savedFiles.map((f,i) => `
- 📄 ${f.name} (${(f.size/1024).toFixed(0)} КБ)
- `).join('')
+
+ 📄 ${f.name} (${(f.size/1024).toFixed(0)} КБ)
+ `).join('')
document.getElementById('editModalContent').innerHTML = `
@@ -660,30 +662,67 @@ function saveEdit(id){
const newProgress = parseInt(document.getElementById('editProgress').value)
const comment = document.getElementById('editComment').value.trim()
- // Save files from input
+ // Save files as data URLs
const fileInput = document.getElementById('editFileInput')
- if(fileInput.files.length > 0){
- const existing = JSON.parse(localStorage.getItem('samruk_files_'+id) || '[]')
- for(const f of fileInput.files){
- existing.push({name: f.name, size: f.size, type: f.type, date: new Date().toLocaleDateString()})
- }
- localStorage.setItem('samruk_files_'+id, JSON.stringify(existing))
+ const MAX_SIZE = 4 * 1024 * 1024 // 4 MB limit per file for localStorage
+
+ function finalizeSave(){
+ const now = new Date().toLocaleDateString()
+ e.h.push(`${now} — ${currentUser.name}: статус ${statusMap[newStatus]}, прогресс ${newProgress}%${comment?' — комм.: '+comment:''}`)
+ e.s = newStatus
+ e.p = newProgress
+ if(newStatus === 'done' && e.done === '—') e.done = now
+ localStorage.setItem('samruk_edits_'+id, JSON.stringify({comment, editedBy: currentUser.name, editedAt: now}))
+ saveState()
+ closeEditModal()
+ renderAll()
+ renderNotifs()
}
- // Add history entry
- const now = new Date().toLocaleDateString()
- e.h.push(`${now} — ${currentUser.name}: статус ${statusMap[newStatus]}, прогресс ${newProgress}%${comment?' — комм.: '+comment:''}`)
+ if(fileInput.files.length > 0){
+ const existing = JSON.parse(localStorage.getItem('samruk_files_'+id) || '[]')
+ let processed = 0
+ let skipped = 0
+ for(const f of fileInput.files){
+ if(f.size > MAX_SIZE){
+ skipped++
+ if(++processed === fileInput.files.length){
+ if(skipped) alert(`⚠️ ${skipped} файл(ов) > 4 МБ пропущены — слишком велики для локального хранения.`)
+ finalizeSave()
+ }
+ continue
+ }
+ const reader = new FileReader()
+ reader.onload = function(ev){
+ existing.push({name: f.name, size: f.size, type: f.type, date: new Date().toLocaleDateString(), data: ev.target.result})
+ processed++
+ if(processed === fileInput.files.length){
+ try {
+ localStorage.setItem('samruk_files_'+id, JSON.stringify(existing))
+ } catch(e) {
+ alert('⚠️ Хранилище браузера переполнено. Удалите старые файлы.')
+ }
+ if(skipped) alert(`⚠️ ${skipped} файл(ов) > 4 МБ пропущены.`)
+ finalizeSave()
+ }
+ }
+ reader.readAsDataURL(f)
+ }
+ } else {
+ finalizeSave()
+ }
+}
- e.s = newStatus
- e.p = newProgress
- if(newStatus === 'done' && e.done === '—') e.done = now
-
- // Save edits
- localStorage.setItem('samruk_edits_'+id, JSON.stringify({comment, editedBy: currentUser.name, editedAt: now}))
- saveState()
- closeEditModal()
- renderAll()
- renderNotifs()
+function downloadFile(eventId, fileIdx){
+ const files = JSON.parse(localStorage.getItem('samruk_files_'+eventId) || '[]')
+ const f = files[fileIdx]
+ if(!f || !f.data) return
+ const a = document.createElement('a')
+ a.href = f.data
+ a.download = f.name
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
}
function removeFile(eventId, fileIdx){