From 70442718f79a632e6babf1eccb71668ac5e50135 Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Wed, 3 Sep 2025 08:48:32 -0700 Subject: [PATCH] Update index.html via Sune --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index aab4333..6a666ce 100644 --- a/index.html +++ b/index.html @@ -163,7 +163,7 @@ if(!sunes.length){const def=SUNE.create({name:'Default'});SUNE.setActive(def.id) const state=window.state={messages:[],busy:false,controller:null,currentThreadId:null,abortRequested:false,attachments:[],stream:{rid:null,bubble:null,meta:null,text:'',done:false}} 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'';if(!html)return'';const includeRegex=/]*)\/>/gi;const matches=[...html.matchAll(includeRegex)];if(matches.length===0)return html;const replacements=await Promise.all(matches.map(async match=>{const[tag,rawSrc,attrs]=match;if(/\s+private\b/.test(attrs))return{tag,content:''};const fetchUrl=resolveSuneSrc(rawSrc);if(!fetchUrl)return{tag,content:``};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:``}}}));let resultHtml=html;for(const{tag,content}of replacements){resultHtml=resultHtml.replace(tag,content)}return resultHtml} +const processSuneIncludes=async(html,depth=0)=>{if(depth>5)return'';if(!html)return'';const c=document.createElement('div');c.innerHTML=html;for(const n of c.querySelectorAll('sune')){const src=n.getAttribute('src');if(!src)continue;if(n.hasAttribute('private')){n.remove();continue}const url=resolveSuneSrc(src);if(!url){n.replaceWith(document.createComment(` Sune Include Error: Invalid src "${esc(src)}" `));continue}try{const r=await fetch(url);if(!r.ok)throw new Error(`HTTP ${r.status}`);const d=await r.json(),o=Array.isArray(d)?d[0]:d,h=[o?.settings?.html||'',o?.settings?.extension_html||''].join('\n'),p=await processSuneIncludes(h,depth+1),f=document.createElement('div');f.innerHTML=p;n.replaceWith(...f.childNodes)}catch(e){n.replaceWith(document.createComment(` Sune Include Error: Failed to fetch/parse ${esc(url)}. ${esc(e.message)} `))}}return c.innerHTML} 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?``:'✺';await renderSuneHTML();icons()} const suneRow=a=>`
`