8463fc3ab1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q8t9GEyyLZbUQu26na1JQg
195 lines
8.6 KiB
JavaScript
195 lines
8.6 KiB
JavaScript
/* AskTam MCP Admin JS */
|
||
(function(){
|
||
'use strict';
|
||
|
||
function initToolsForm(){
|
||
var form=document.getElementById('asktam-mcp-tools-form');
|
||
if(!form)return;
|
||
var en=form.querySelector('.asktam-mcp-enable-all');
|
||
var dis=form.querySelector('.asktam-mcp-disable-all');
|
||
if(en)en.addEventListener('click',function(){form.querySelectorAll('input[type="checkbox"]').forEach(function(cb){cb.checked=true;});updateCards(form);});
|
||
if(dis)dis.addEventListener('click',function(){form.querySelectorAll('input[type="checkbox"]').forEach(function(cb){cb.checked=false;});updateCards(form);});
|
||
form.querySelectorAll('.asktam-mcp-category').forEach(function(cat){
|
||
var ce=cat.querySelector('.asktam-mcp-cat-enable-all');
|
||
var cd=cat.querySelector('.asktam-mcp-cat-disable-all');
|
||
if(ce)ce.addEventListener('click',function(){cat.querySelectorAll('input[type="checkbox"]').forEach(function(cb){cb.checked=true;});updateCards(form);});
|
||
if(cd)cd.addEventListener('click',function(){cat.querySelectorAll('input[type="checkbox"]').forEach(function(cb){cb.checked=false;});updateCards(form);});
|
||
});
|
||
form.addEventListener('change',function(e){if(e.target.type==='checkbox')updateCards(form);});
|
||
}
|
||
|
||
function updateCards(form){
|
||
form.querySelectorAll('.asktam-mcp-tool-card').forEach(function(card){
|
||
var cb=card.querySelector('input[type="checkbox"]');
|
||
card.classList.toggle('is-enabled',cb.checked);
|
||
card.classList.toggle('is-disabled',!cb.checked);
|
||
});
|
||
}
|
||
|
||
/* ---- Collapsible categories + per-card minimize. Default EXPANDED; collapse is opt-in. ---- */
|
||
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 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 EXPANDED; only collapse if the user previously collapsed this category.
|
||
var collapsed=(id in state)?!!state[id]:false;
|
||
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);
|
||
});
|
||
}
|
||
});
|
||
|
||
// 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){
|
||
var c=document.getElementById(codeId);
|
||
var t=document.getElementById(copyId);
|
||
if(c)c.textContent=text;
|
||
if(t)t.value=text;
|
||
}
|
||
|
||
function initConnectionConfigs(){
|
||
var btn=document.getElementById('asktam-generate-configs');
|
||
if(!btn)return;
|
||
btn.addEventListener('click',function(){
|
||
var keyInput=document.getElementById('asktam-api-key-input');
|
||
if(!keyInput||!keyInput.value.trim()){alert('Please enter your API key.');return;}
|
||
var apiKey=keyInput.value.trim();
|
||
var endpoint=(typeof asktamMcpAdmin!=='undefined')?asktamMcpAdmin.sseEndpoint:'';
|
||
var bearer='Bearer '+apiKey;
|
||
|
||
var configsDiv=document.getElementById('asktam-http-configs');
|
||
if(configsDiv)configsDiv.style.display='';
|
||
|
||
// claude.ai custom connector format
|
||
var claudeAiJson=JSON.stringify({
|
||
mcpServers:{wordpress:{url:endpoint,headers:{Authorization:bearer}}}
|
||
},null,2);
|
||
setBlock('asktam-claude-ai-code','asktam-claude-ai-copy',claudeAiJson);
|
||
|
||
// Claude Desktop claude_desktop_config.json
|
||
var desktopJson=JSON.stringify({
|
||
mcpServers:{wordpress:{url:endpoint,headers:{Authorization:bearer}}}
|
||
},null,2);
|
||
setBlock('asktam-desktop-code','asktam-desktop-copy',desktopJson);
|
||
|
||
// Cursor .cursor/mcp.json
|
||
var cursorJson=JSON.stringify({
|
||
mcpServers:{wordpress:{url:endpoint,headers:{Authorization:bearer}}}
|
||
},null,2);
|
||
setBlock('asktam-cursor-code','asktam-cursor-copy',cursorJson);
|
||
|
||
// Windsurf
|
||
var windsurfJson=JSON.stringify({
|
||
mcpServers:{wordpress:{serverUrl:endpoint,headers:{Authorization:bearer}}}
|
||
},null,2);
|
||
setBlock('asktam-windsurf-code','asktam-windsurf-copy',windsurfJson);
|
||
|
||
// npx mcp-remote
|
||
var remoteJson=JSON.stringify({
|
||
mcpServers:{wordpress:{command:'npx',args:['-y','mcp-remote',endpoint,'--header','Authorization: '+bearer]}}
|
||
},null,2);
|
||
setBlock('asktam-remote-code','asktam-remote-copy',remoteJson);
|
||
});
|
||
}
|
||
|
||
function copyToClipboard(text){
|
||
if(navigator.clipboard&&navigator.clipboard.writeText)return navigator.clipboard.writeText(text);
|
||
return new Promise(function(resolve){
|
||
var ta=document.createElement('textarea');ta.value=text;ta.style.position='fixed';ta.style.opacity='0';
|
||
document.body.appendChild(ta);ta.select();document.execCommand('copy');document.body.removeChild(ta);resolve();
|
||
});
|
||
}
|
||
|
||
function initCopyButtons(){
|
||
document.querySelectorAll('.asktam-mcp-copy-btn').forEach(function(btn){
|
||
btn.addEventListener('click',function(){
|
||
var id=this.getAttribute('data-target');
|
||
var src=document.getElementById(id);
|
||
if(!src)return;
|
||
var copied=(typeof asktamMcpAdmin!=='undefined'&&asktamMcpAdmin.copied)?asktamMcpAdmin.copied:'Copied!';
|
||
copyToClipboard(src.value).then(function(){
|
||
var orig=btn.textContent;btn.textContent=copied;
|
||
setTimeout(function(){btn.textContent=orig;},2000);
|
||
});
|
||
});
|
||
});
|
||
}
|
||
|
||
function boot(){initToolsForm();initCollapsibleTools();initConnectionConfigs();initCopyButtons();initFooter();}
|
||
|
||
if(document.readyState==='loading'){
|
||
document.addEventListener('DOMContentLoaded',boot);
|
||
}else{
|
||
boot();
|
||
}
|
||
})();
|