Admin UI: collapsible tool categories + per-card minimize + expand/collapse-all + AskTam.net footer (fixes Tools-tab lag at 300+ tools)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q8t9GEyyLZbUQu26na1JQg
This commit is contained in:
+89
-2
@@ -26,6 +26,91 @@ function updateCards(form){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---- Collapsible categories + per-card minimize (keeps the Tools tab light) ---- */
|
||||||
|
var LSKEY='asktamMcpCatCollapsed';
|
||||||
|
function loadState(){try{return JSON.parse(localStorage.getItem(LSKEY)||'{}')||{};}catch(e){return {};}}
|
||||||
|
function saveState(m){try{localStorage.setItem(LSKEY,JSON.stringify(m));}catch(e){}}
|
||||||
|
|
||||||
|
function initCollapsibleTools(){
|
||||||
|
var form=document.getElementById('asktam-mcp-tools-form');
|
||||||
|
if(!form)return;
|
||||||
|
var firstVisit=!localStorage.getItem(LSKEY);
|
||||||
|
var state=loadState();
|
||||||
|
var cats=form.querySelectorAll('.asktam-mcp-category');
|
||||||
|
|
||||||
|
function setAll(collapsed){
|
||||||
|
cats.forEach(function(cat){
|
||||||
|
cat.classList.toggle('is-collapsed',collapsed);
|
||||||
|
state[cat.getAttribute('data-category')||'']=collapsed;
|
||||||
|
});
|
||||||
|
saveState(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Global expand / collapse controls
|
||||||
|
var bulk=form.querySelector('.asktam-mcp-bulk-actions');
|
||||||
|
if(bulk && !bulk.querySelector('.asktam-mcp-expand-all')){
|
||||||
|
var wrap=document.createElement('span');
|
||||||
|
wrap.className='asktam-mcp-collapse-tools';
|
||||||
|
var exp=document.createElement('button');exp.type='button';exp.className='button asktam-mcp-expand-all';exp.textContent='Expand all';
|
||||||
|
var col=document.createElement('button');col.type='button';col.className='button asktam-mcp-collapse-all';col.textContent='Collapse all';
|
||||||
|
wrap.appendChild(exp);wrap.appendChild(col);
|
||||||
|
var save=bulk.querySelector('.asktam-mcp-bulk-save');
|
||||||
|
if(save)bulk.insertBefore(wrap,save);else bulk.appendChild(wrap);
|
||||||
|
exp.addEventListener('click',function(){setAll(false);});
|
||||||
|
col.addEventListener('click',function(){setAll(true);});
|
||||||
|
}
|
||||||
|
|
||||||
|
cats.forEach(function(cat){
|
||||||
|
var id=cat.getAttribute('data-category')||'';
|
||||||
|
var header=cat.querySelector('.asktam-mcp-category-header');
|
||||||
|
if(header && !header.querySelector('.asktam-mcp-cat-caret')){
|
||||||
|
var caret=document.createElement('span');
|
||||||
|
caret.className='asktam-mcp-cat-caret';
|
||||||
|
caret.setAttribute('aria-hidden','true');
|
||||||
|
caret.textContent='▾';
|
||||||
|
header.insertBefore(caret,header.firstChild);
|
||||||
|
}
|
||||||
|
// Default: collapsed (keeps the page from rendering hundreds of cards at once)
|
||||||
|
var collapsed=(id in state)?!!state[id]:true;
|
||||||
|
cat.classList.toggle('is-collapsed',collapsed);
|
||||||
|
if(header && !header.dataset.collBound){
|
||||||
|
header.dataset.collBound='1';
|
||||||
|
header.addEventListener('click',function(e){
|
||||||
|
if(e.target.closest('.asktam-mcp-category-actions'))return; // let All/None work
|
||||||
|
var now=!cat.classList.contains('is-collapsed');
|
||||||
|
cat.classList.toggle('is-collapsed',now);
|
||||||
|
state[id]=now;saveState(state);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(firstVisit){cats.forEach(function(cat){state[cat.getAttribute('data-category')||'']=true;});saveState(state);}
|
||||||
|
|
||||||
|
// Per-card minimize (hides description + slug for that one tool)
|
||||||
|
form.querySelectorAll('.asktam-mcp-tool-card').forEach(function(card){
|
||||||
|
if(card.querySelector('.asktam-mcp-card-min'))return;
|
||||||
|
var b=document.createElement('button');
|
||||||
|
b.type='button';
|
||||||
|
b.className='asktam-mcp-card-min';
|
||||||
|
b.setAttribute('aria-label','Minimize tool');
|
||||||
|
b.textContent='–';
|
||||||
|
b.addEventListener('click',function(e){
|
||||||
|
e.preventDefault();e.stopPropagation(); // don't toggle the tool's checkbox
|
||||||
|
var min=card.classList.toggle('is-min');
|
||||||
|
b.textContent=min?'+':'–';
|
||||||
|
});
|
||||||
|
card.appendChild(b);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function initFooter(){
|
||||||
|
var admin=document.querySelector('.asktam-mcp-admin');
|
||||||
|
if(!admin||admin.querySelector('.asktam-mcp-footer'))return;
|
||||||
|
var f=document.createElement('div');
|
||||||
|
f.className='asktam-mcp-footer';
|
||||||
|
f.innerHTML='Built by <a href="https://asktam.net" target="_blank" rel="noopener">AskTam.net</a>';
|
||||||
|
admin.appendChild(f);
|
||||||
|
}
|
||||||
|
|
||||||
function setBlock(codeId,copyId,text){
|
function setBlock(codeId,copyId,text){
|
||||||
var c=document.getElementById(codeId);
|
var c=document.getElementById(codeId);
|
||||||
var t=document.getElementById(copyId);
|
var t=document.getElementById(copyId);
|
||||||
@@ -101,9 +186,11 @@ function initCopyButtons(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function boot(){initToolsForm();initCollapsibleTools();initConnectionConfigs();initCopyButtons();initFooter();}
|
||||||
|
|
||||||
if(document.readyState==='loading'){
|
if(document.readyState==='loading'){
|
||||||
document.addEventListener('DOMContentLoaded',function(){initToolsForm();initConnectionConfigs();initCopyButtons();});
|
document.addEventListener('DOMContentLoaded',boot);
|
||||||
}else{
|
}else{
|
||||||
initToolsForm();initConnectionConfigs();initCopyButtons();
|
boot();
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user