mirror of
https://github.com/multipleof4/sune.git
synced 2026-01-14 08:38:00 +00:00
Update index.html via Sune
This commit is contained in:
@@ -165,7 +165,7 @@ const state=window.state={messages:[],busy:false,controller:null,currentThreadId
|
||||
const getModelShort=m=>{const mm=m||SUNE.model||'';return mm.includes('/')?mm.split('/').pop():mm}
|
||||
const resolveSuneSrc=src=>{if(!src)return null;if(src.startsWith('gh://')){const path=src.substring(5),parts=path.split('/');if(parts.length<3)return null;const[owner,repo,...filePathParts]=parts;return`https://raw.githubusercontent.com/${owner}/${repo}/main/${filePathParts.join('/')}`}return src}
|
||||
const processSuneIncludes=async(html,depth=0)=>{if(depth>5)return'<!-- Sune include depth limit reached -->';if(!html)return'';const includeRegex=/<sune\s+src=['"]([^'"]+)['"]\s*\/>/gi;const matches=[...html.matchAll(includeRegex)];if(matches.length===0)return html;const replacements=await Promise.all(matches.map(async match=>{const[tag,rawSrc]=match;const fetchUrl=resolveSuneSrc(rawSrc);if(!fetchUrl)return{tag,content:`<!-- Sune Include Error: Invalid src "${esc(rawSrc)}" -->`};try{const response=await fetch(fetchUrl);if(!response.ok)throw new Error(`HTTP ${response.status}`);const suneData=await response.json();const suneObj=Array.isArray(suneData)?suneData[0]:suneData;const combinedHtml=[suneObj?.settings?.html||'',suneObj?.settings?.extension_html||''].join('\n');const processedContent=await processSuneIncludes(combinedHtml,depth+1);return{tag,content:processedContent}}catch(error){return{tag,content:`<!-- Sune Include Error: Failed to fetch/parse ${esc(fetchUrl)}. ${esc(error.message)} -->`}}}));let resultHtml=html;for(const{tag,content}of replacements){resultHtml=resultHtml.replace(tag,content)}return resultHtml}
|
||||
const renderSuneHTML=async()=>{const baseHtml=[SUNE.html,SUNE.extension_html].map(x=>(x||'').trim()).join('\n');const finalHtml=await processSuneIncludes(baseHtml);const container=el.suneHtml;container.innerHTML='';container.classList.toggle('hidden',!finalHtml.trim());if(!finalHtml.trim())return;container.insertAdjacentHTML('afterbegin',finalHtml);container.querySelectorAll('script').forEach(s=>{if(s.type&&s.type!=='text/javascript')return;const newScript=document.createElement('script');[...s.attributes].forEach(a=>newScript.setAttribute(a.name,a.value));newScript.text=s.text;s.replaceWith(newScript)})}
|
||||
const renderSuneHTML=async()=>{const baseHtml=[SUNE.html,SUNE.extension_html].map(x=>(x||'').trim()).join('\n');const finalHtml=await processSuneIncludes(baseHtml);const container=el.suneHtml;container.innerHTML='';container.classList.toggle('hidden',!finalHtml.trim());if(!finalHtml.trim())return;container.insertAdjacentHTML('afterbegin',finalHtml);const scripts=[];container.querySelectorAll('script').forEach(s=>{if(!s.type||s.type==='text/javascript'){scripts.push(s.textContent);s.remove()}});if(scripts.length)setTimeout(()=>scripts.forEach(code=>{try{new Function(code)()}catch(e){console.error('Sune script error:',e)}}),0)}
|
||||
const reflectActiveSune=async()=>{const a=SUNE.active;el.suneBtnTop.title=`Settings — ${a.name}`;el.suneBtnTop.innerHTML=a.avatar?`<img src="${esc(a.avatar)}" alt="" class="h-8 w-8 rounded-full object-cover"/>`:'✺';await renderSuneHTML();icons()}
|
||||
const suneRow=a=>`<div class="relative flex items-center gap-2 px-3 py-2 ${a.pinned?'bg-yellow-50':''}"><button data-sune-id="${a.id}" class="flex-1 text-left flex items-center gap-2 ${a.id===SUNE.id?'font-medium':''}">${a.avatar?`<img src="${esc(a.avatar)}" alt="" class="h-6 w-6 rounded-full object-cover"/>`:`<span class="h-6 w-6 rounded-full bg-gray-200 flex items-center justify-center">✺</span>`}<span class="truncate">${a.pinned?'📌 ':''}${esc(a.name)}</span></button><button data-sune-menu="${a.id}" class="h-8 w-8 rounded hover:bg-gray-100 flex items-center justify-center" title="More"><i data-lucide="more-horizontal" class="h-4 w-4"></i></button></div>`
|
||||
const renderSidebar=()=>{const list=[...SUNE.list].sort((a,b)=>(b.pinned-a.pinned));el.suneList.innerHTML=list.map(suneRow).join('');icons()}
|
||||
|
||||
Reference in New Issue
Block a user