Commit 97d21010 authored by jan.koester's avatar jan.koester
Browse files

testt

parent 02818d44
Loading
Loading
Loading
Loading
+46 −10
Changes for plugins/survey/survey.cpp: 46 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -3511,6 +3511,13 @@ namespace blogi {
                 << ".se-img-row{display:grid;grid-template-columns:1fr 100px 80px;gap:8px;margin-top:8px;align-items:end;}"
                 << ".se-img-row label{display:block;font-size:.85em;color:var(--blogi-text-muted,#666);margin-bottom:2px;}"
                 << ".se-img-row input{width:100%;padding:4px 6px;border:1px solid var(--blogi-border,#ddd);border-radius:4px;background:var(--blogi-surface,#fff);color:var(--blogi-text,#333);box-sizing:border-box;}"
                 << ".se-opt-row.se-opt-row-icon{grid-template-columns:1fr 1fr 1fr 1fr 30px;}"
                 << ".se-opt-icon-wrap{display:flex;gap:4px;align-items:center;min-width:0;}"
                 << ".se-opt-icon-wrap input{flex:1;min-width:0;padding:4px 6px;border:1px solid var(--blogi-border,#ddd);border-radius:4px;font-size:.85em;background:var(--blogi-surface,#fff);color:var(--blogi-text,#333);}"
                 << ".se-upload-wrap{display:flex;align-items:center;gap:8px;padding:8px 0;margin-bottom:8px;border-bottom:1px solid var(--blogi-border,#555);}"
                 << ".se-upload-btn{padding:6px 14px;background:var(--blogi-accent,#2da82d);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:.85em;}"
                 << ".se-upload-btn:hover{opacity:.85;}"
                 << ".se-upload-status{font-size:.82em;color:var(--blogi-text-muted,#aaa);}"
                 << "</style>";

            // Editor JS
@@ -3637,7 +3644,8 @@ namespace blogi {
                 << "h+='<div class=\"se-opts\"><h4>Optionen</h4>';"
                 << "var opts=q.options||[];"
                 << "for(var j=0;j<opts.length;j++){"
                 << "h+='<div class=\"se-opt-row\">';"
                 << "var isIcon=q.type==='icon';"
                 << "h+='<div class=\"se-opt-row'+(isIcon?' se-opt-row-icon':'')+'\">';"
                 << "h+='<input placeholder=\"value\" value=\"'+esc(opts[j].value||'')+'\"/>';"
                 << "h+='<input placeholder=\"label\" value=\"'+esc(opts[j].label||'')+'\"/>';"
                 << "var excArr=(opts[j].excludes||'').split(',').filter(function(s){return s.trim();});"
@@ -3649,11 +3657,13 @@ namespace blogi {
                 << "var lbl=allQs[k].id.substring(0,8)+(allQs[k].text?' - '+allQs[k].text.substring(0,20):'');"
                 << "h+='<option value=\"'+esc(allQs[k].id)+'\"'+sel+'>'+esc(lbl)+'</option>';}"
                 << "h+='</select>';"
                 << "if(q.type==='icon'){"
                 << "if(isIcon){"
                 << "var icoUrl=opts[j].icon||'';"
                 << "h+='<div class=\"se-opt-icon-wrap\">';"
                 << "if(icoUrl)h+='<img src=\"'+esc(icoUrl)+'\" class=\"se-opt-preview\" alt=\"\"/>';"
                 << "h+='<input class=\"se-opt-icon\" placeholder=\"icon URL\" value=\"'+esc(icoUrl)+'\" style=\"flex:2\"/>';"
                 << "h+='<button class=\"se-pick-icon\" type=\"button\" title=\"Media\">&#128247;</button>';}"
                 << "h+='<input class=\"se-opt-icon\" placeholder=\"Icon URL\" value=\"'+esc(icoUrl)+'\"/>';"
                 << "h+='<button class=\"se-pick-icon\" type=\"button\" title=\"Bild ausw\\u00e4hlen\">&#128247;</button>';"
                 << "h+='</div>';}"
                 << "h+='<button class=\"se-opt-del\">&times;</button></div>';}"
                 << "h+='<button class=\"se-add-opt\">+ Option</button></div>';}"
                 << "h+='</div>';return h;}"
@@ -3720,13 +3730,38 @@ namespace blogi {
                 << "loadAlbumMedia(ab.getAttribute('data-id'),ab.getAttribute('data-name'),targetInput,ov,navEl,contentEl);};});}"
                 << ""
                 << "function loadAlbumMedia(albumId,albumName,targetInput,ov,navEl,contentEl){"
                 << "navEl.innerHTML='<button type=\"button\" style=\"padding:4px 10px;background:#555;color:#fff;border:none;border-radius:6px;cursor:pointer;\">&larr; Zurück</button> <strong>'+esc(albumName)+'</strong>';"
                 << "navEl.innerHTML='<button type=\"button\" style=\"padding:4px 10px;background:#555;color:#fff;border:none;border-radius:6px;cursor:pointer;\">&larr; Zur\xc3\xbcck</button> <strong>'+esc(albumName)+'</strong>';"
                 << "navEl.querySelector('button').onclick=function(){ov.remove();openMediaPicker(targetInput);};"
                 << "contentEl.textContent='Laden...';"
                 << "contentEl.innerHTML='<div class=\"se-upload-wrap\">'+"
                 << "'<button type=\"button\" class=\"se-upload-btn\">&#128228; Hochladen</button>'+"
                 << "'<input type=\"file\" accept=\"image/*\" style=\"display:none\"/>'+"
                 << "'<span class=\"se-upload-status\"></span>'+"
                 << "'</div><div class=\"se-media-list\">Laden...</div>';"
                 << "var uploadBtn=contentEl.querySelector('.se-upload-btn');"
                 << "var uploadInput=contentEl.querySelector('input[type=file]');"
                 << "var uploadStatus=contentEl.querySelector('.se-upload-status');"
                 << "var mediaListEl=contentEl.querySelector('.se-media-list');"
                 << "uploadBtn.onclick=function(){uploadInput.click();};"
                 << "uploadInput.onchange=function(){"
                 << "var file=uploadInput.files[0];if(!file)return;"
                 << "uploadStatus.textContent='Lade hoch...';"
                 << "var reader=new FileReader();"
                 << "reader.onload=function(e){"
                 << "apiCall([{command:'media_upload',album_id:albumId,filename:file.name,data:e.target.result}],function(err,res){"
                 << "uploadInput.value='';"
                 << "if(err||!res){uploadStatus.textContent='Fehler beim Upload';return;}"
                 << "var r=res[0];"
                 << "if(r&&r.status==='success'&&r.media){"
                 << "targetInput.value=r.media.url+'?w=64&h=64';"
                 << "uploadStatus.textContent='';"
                 << "ov.remove();readForm();render();"
                 << "}else{uploadStatus.textContent='Fehler: '+(r&&r.message?r.message:'Unbekannt');}});};"
                 << "reader.readAsDataURL(file);};"
                 << "function renderMediaGrid(){"
                 << "apiCall([{command:'media_list_media',album_id:albumId}],function(err,res){"
                 << "if(err||!res){contentEl.textContent='Fehler';return;}"
                 << "if(err||!res){mediaListEl.textContent='Fehler';return;}"
                 << "var ml=null;for(var i=0;i<res.length;i++){if(res[i]&&res[i].media){ml=res[i].media;break;}}"
                 << "if(!ml||ml.length===0){contentEl.textContent='Leer';return;}"
                 << "if(!ml||ml.length===0){mediaListEl.textContent='Leer';return;}"
                 << "var h='<div style=\"display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px;\">';"
                 << "for(var i=0;i<ml.length;i++){var m=ml[i];"
                 << "if(i===0)ensureSizesRegistered(m.id);"
@@ -3735,12 +3770,13 @@ namespace blogi {
                 << "if(m.kind==='image')h+='<img src=\"'+esc(thumb)+'\" loading=\"lazy\" style=\"width:100%;height:70px;object-fit:cover;border-radius:4px;\"/>';"
                 << "else h+='<div style=\"height:70px;display:flex;align-items:center;justify-content:center;font-size:2em;\">&#128196;</div>';"
                 << "h+='<div style=\"font-size:.7em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">'+esc(m.filename)+'</div></div>';}"
                 << "h+='</div>';contentEl.innerHTML=h;"
                 << "contentEl.onclick=function(ev){"
                 << "h+='</div>';mediaListEl.innerHTML=h;"
                 << "mediaListEl.onclick=function(ev){"
                 << "var it=ev.target.closest('.se-mb-item');if(!it)return;"
                 << "var murl=it.getAttribute('data-url');"
                 << "targetInput.value=murl+'?w=64&h=64';"
                 << "ov.remove();};});}"
                 << "renderMediaGrid();}"
                 << ""
                 << "render();"
                 << "})();"