feat: stale 전체 재갱신 시 화면 클리어 대신 기존 유지+백그라운드 swap
5분 stale 재갱신이 resetShellLook()로 전탭을 스피너로 비우던 것 제거 → 기존 내용 유지한 채 fetch, 완료 시 교체. 로딩 표시는 새로고침(↻) 아이콘 스핀으로만(내용 그대로 보임). 실패 시 기존 내용 유지+에러 토스트. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6425,10 +6425,12 @@ def render_html() -> str:
|
|||||||
'window.__behive_chart_mode=chartMode;'
|
'window.__behive_chart_mode=chartMode;'
|
||||||
'window.__behive_adr_days=adrDays;'
|
'window.__behive_adr_days=adrDays;'
|
||||||
'function load(owner,fresh){'
|
'function load(owner,fresh){'
|
||||||
# 5분 이상 stale 상태에서 들어오면 모든 탭을 새로 채워야 하니 owner 부분 fetch도 전체로 승격.
|
# 5분 이상 stale 면 전체로 승격하되, 화면은 클리어하지 않고 기존 내용 유지 → fetch 완료 시 교체(swap).
|
||||||
'if(lastLoadAt&&(Date.now()-lastLoadAt)>STALE_MS){resetShellLook();owner=null;}'
|
'if(lastLoadAt&&(Date.now()-lastLoadAt)>STALE_MS){owner=null;}'
|
||||||
'var key=owner||"all";'
|
'var key=owner||"all";'
|
||||||
'if(!fresh&&inFlight[key])return inFlight[key];'
|
'if(!fresh&&inFlight[key])return inFlight[key];'
|
||||||
|
# 로딩 표시는 새로고침 아이콘 스핀으로만 (내용은 그대로 보임).
|
||||||
|
'var rb=document.querySelector("a.refresh");if(rb)rb.classList.add("spinning");'
|
||||||
'var qs=[];if(owner)qs.push("owner="+encodeURIComponent(owner));if(fresh)qs.push("fresh=1");'
|
'var qs=[];if(owner)qs.push("owner="+encodeURIComponent(owner));if(fresh)qs.push("fresh=1");'
|
||||||
'var cd=chartDays();if(cd!==null)qs.push("chart_days="+cd);'
|
'var cd=chartDays();if(cd!==null)qs.push("chart_days="+cd);'
|
||||||
'var cu=chartUnit();if(cu!==null)qs.push("chart_unit="+cu);'
|
'var cu=chartUnit();if(cu!==null)qs.push("chart_unit="+cu);'
|
||||||
@@ -6439,7 +6441,7 @@ def render_html() -> str:
|
|||||||
'.then(function(r){if(!r.ok)throw new Error("HTTP "+r.status);return r.json();})'
|
'.then(function(r){if(!r.ok)throw new Error("HTTP "+r.status);return r.json();})'
|
||||||
'.then(function(j){apply(j);lastLoadAt=Date.now();})'
|
'.then(function(j){apply(j);lastLoadAt=Date.now();})'
|
||||||
'.catch(function(){failVisible("갱신 실패 — 다시 시도해주세요");});'
|
'.catch(function(){failVisible("갱신 실패 — 다시 시도해주세요");});'
|
||||||
'var done=function(){if(!fresh)delete inFlight[key];};'
|
'var done=function(){if(!fresh)delete inFlight[key];if(rb&&!Object.keys(inFlight).length)rb.classList.remove("spinning");};'
|
||||||
'pr.finally?pr.finally(done):pr.then(done,done);'
|
'pr.finally?pr.finally(done):pr.then(done,done);'
|
||||||
'if(!fresh)inFlight[key]=pr;'
|
'if(!fresh)inFlight[key]=pr;'
|
||||||
'return pr;'
|
'return pr;'
|
||||||
|
|||||||
Reference in New Issue
Block a user