Loading editor/widgets/googlereviews/googlereviews.cpp +15 −14 Original line number Diff line number Diff line Loading @@ -72,13 +72,10 @@ namespace blogi { libhtmlpp::HtmlElement *script = new libhtmlpp::HtmlElement("script"); libhtmlpp::ScriptElement js; js.setScript(R"JS( (function(){ var cs = document.currentScript; var root = cs ? cs.previousElementSibling : null; if(!root) return; var uid = root.id; std::string jsCode = std::string("(function(){\n var root=document.getElementById('") + uid + std::string("');\n if(!root) return;\n var uid=root.id;\n") + R"JS( if(!document.getElementById(uid+'_css')){ var st = document.createElement('style'); st.id = uid+'_css'; Loading @@ -90,7 +87,7 @@ namespace blogi { '#'+uid+' .gr-avg{font-size:2.2em;font-weight:700;color:#222;line-height:1;}'+ '#'+uid+' .gr-avgstars{color:#ffb400;font-size:1.15em;margin:4px 0 2px;}'+ '#'+uid+' .gr-cnt{font-size:.82em;color:#888;}'+ '#'+uid+' .gr-wrap{position:relative;flex:1;overflow:hidden;}'+ '#'+uid+' .gr-wrap{position:relative;flex:1;}'+ '#'+uid+' .gr-vp{overflow:hidden;}'+ '#'+uid+' .gr-track{display:flex;transition:transform .4s ease;gap:16px;}'+ '#'+uid+' .gr-card{flex:0 0 calc(33.333% - 11px);max-width:calc(33.333% - 11px);background:#f9fafb;border-radius:14px;padding:16px;display:flex;flex-direction:row;gap:12px;border:1px solid rgba(148,163,184,.3);box-sizing:border-box;}'+ Loading Loading @@ -126,6 +123,9 @@ namespace blogi { for(var i=0;i<5;i++) s+=(i<n)?'★':'☆'; return s; } function escHtml(s){ return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); } function formatDate(ts){ if(!ts) return ''; var n=Number(ts); Loading Loading @@ -160,14 +160,15 @@ namespace blogi { var track=root.querySelector('.gr-track'); reviews.forEach(function(r){ var name=r.author_name||'Anonym'; var rawName=String(r.author_name||'Anonym'); var name=escHtml(rawName); var full=String(r.text||''); var isLong=full.length>100; var short=isLong?full.slice(0,100)+'…':full; var short=isLong?escHtml(full.slice(0,100))+'…':escHtml(full); var photoUrl=String(r.author_photo_url||''); var avatarHtml=photoUrl ? '<img class="gr-av gr-av-img" src="'+photoUrl+'" alt="'+name+'" loading="lazy">' : '<div class="gr-av" style="background:'+avColor(name)+'">'+name.charAt(0).toUpperCase()+'</div>'; ? '<img class="gr-av gr-av-img" src="'+escHtml(photoUrl)+'" alt="'+name+'" loading="lazy">' : '<div class="gr-av" style="background:'+avColor(rawName)+'">'+escHtml(rawName.charAt(0).toUpperCase())+'</div>'; var card=document.createElement('div'); card.className='gr-card'; card.innerHTML= Loading Loading @@ -214,8 +215,8 @@ namespace blogi { console.error('GoogleReviews widget:', e); root.textContent='Bewertungen konnten nicht geladen werden.'; }); })(); )JS"); })();)JS"; js.setScript(jsCode.c_str()); script->appendChild(js); el.appendChild(script); } Loading Loading
editor/widgets/googlereviews/googlereviews.cpp +15 −14 Original line number Diff line number Diff line Loading @@ -72,13 +72,10 @@ namespace blogi { libhtmlpp::HtmlElement *script = new libhtmlpp::HtmlElement("script"); libhtmlpp::ScriptElement js; js.setScript(R"JS( (function(){ var cs = document.currentScript; var root = cs ? cs.previousElementSibling : null; if(!root) return; var uid = root.id; std::string jsCode = std::string("(function(){\n var root=document.getElementById('") + uid + std::string("');\n if(!root) return;\n var uid=root.id;\n") + R"JS( if(!document.getElementById(uid+'_css')){ var st = document.createElement('style'); st.id = uid+'_css'; Loading @@ -90,7 +87,7 @@ namespace blogi { '#'+uid+' .gr-avg{font-size:2.2em;font-weight:700;color:#222;line-height:1;}'+ '#'+uid+' .gr-avgstars{color:#ffb400;font-size:1.15em;margin:4px 0 2px;}'+ '#'+uid+' .gr-cnt{font-size:.82em;color:#888;}'+ '#'+uid+' .gr-wrap{position:relative;flex:1;overflow:hidden;}'+ '#'+uid+' .gr-wrap{position:relative;flex:1;}'+ '#'+uid+' .gr-vp{overflow:hidden;}'+ '#'+uid+' .gr-track{display:flex;transition:transform .4s ease;gap:16px;}'+ '#'+uid+' .gr-card{flex:0 0 calc(33.333% - 11px);max-width:calc(33.333% - 11px);background:#f9fafb;border-radius:14px;padding:16px;display:flex;flex-direction:row;gap:12px;border:1px solid rgba(148,163,184,.3);box-sizing:border-box;}'+ Loading Loading @@ -126,6 +123,9 @@ namespace blogi { for(var i=0;i<5;i++) s+=(i<n)?'★':'☆'; return s; } function escHtml(s){ return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); } function formatDate(ts){ if(!ts) return ''; var n=Number(ts); Loading Loading @@ -160,14 +160,15 @@ namespace blogi { var track=root.querySelector('.gr-track'); reviews.forEach(function(r){ var name=r.author_name||'Anonym'; var rawName=String(r.author_name||'Anonym'); var name=escHtml(rawName); var full=String(r.text||''); var isLong=full.length>100; var short=isLong?full.slice(0,100)+'…':full; var short=isLong?escHtml(full.slice(0,100))+'…':escHtml(full); var photoUrl=String(r.author_photo_url||''); var avatarHtml=photoUrl ? '<img class="gr-av gr-av-img" src="'+photoUrl+'" alt="'+name+'" loading="lazy">' : '<div class="gr-av" style="background:'+avColor(name)+'">'+name.charAt(0).toUpperCase()+'</div>'; ? '<img class="gr-av gr-av-img" src="'+escHtml(photoUrl)+'" alt="'+name+'" loading="lazy">' : '<div class="gr-av" style="background:'+avColor(rawName)+'">'+escHtml(rawName.charAt(0).toUpperCase())+'</div>'; var card=document.createElement('div'); card.className='gr-card'; card.innerHTML= Loading Loading @@ -214,8 +215,8 @@ namespace blogi { console.error('GoogleReviews widget:', e); root.textContent='Bewertungen konnten nicht geladen werden.'; }); })(); )JS"); })();)JS"; js.setScript(jsCode.c_str()); script->appendChild(js); el.appendChild(script); } Loading