Loading plugins/survey/survey.cpp +46 −10 Changes for plugins/survey/survey.cpp: 46 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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();});" Loading @@ -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\">📷</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\">📷</button>';" << "h+='</div>';}" << "h+='<button class=\"se-opt-del\">×</button></div>';}" << "h+='<button class=\"se-add-opt\">+ Option</button></div>';}" << "h+='</div>';return h;}" Loading Loading @@ -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;\">← 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;\">← 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\">📤 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);" Loading @@ -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;\">📄</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();" << "})();" Loading Loading
plugins/survey/survey.cpp +46 −10 Changes for plugins/survey/survey.cpp: 46 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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();});" Loading @@ -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\">📷</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\">📷</button>';" << "h+='</div>';}" << "h+='<button class=\"se-opt-del\">×</button></div>';}" << "h+='<button class=\"se-add-opt\">+ Option</button></div>';}" << "h+='</div>';return h;}" Loading Loading @@ -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;\">← 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;\">← 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\">📤 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);" Loading @@ -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;\">📄</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();" << "})();" Loading