27 lines
2.4 KiB
JavaScript
27 lines
2.4 KiB
JavaScript
/* Local lightweight Bootstrap-compatible bundle: Collapse + Tab only. */
|
|
(function(){
|
|
if(!window.CSS) window.CSS={};
|
|
if(!CSS.escape){CSS.escape=function(v){return String(v).replace(/[^a-zA-Z0-9_\-]/g,function(ch){return '\\'+ch;});};}
|
|
function qsa(sel,root){return Array.prototype.slice.call((root||document).querySelectorAll(sel));}
|
|
function event(name){try{return new Event(name,{bubbles:true});}catch(e){var ev=document.createEvent('Event');ev.initEvent(name,true,true);return ev;}}
|
|
class Collapse{
|
|
constructor(el,opts){this._el=el;this._opts=opts||{};}
|
|
show(){this._el.classList.add('show');this._el.dispatchEvent(event('shown.bs.collapse'));this._sync(true);}
|
|
hide(){this._el.classList.remove('show');this._el.dispatchEvent(event('hidden.bs.collapse'));this._sync(false);}
|
|
toggle(){this._el.classList.contains('show')?this.hide():this.show();}
|
|
_sync(open){qsa('[data-bs-target="#'+this._el.id+'"]',document).forEach(function(btn){btn.classList.toggle('collapsed',!open);btn.setAttribute('aria-expanded',open?'true':'false');});}
|
|
static getOrCreateInstance(el,opts){if(!el.__bgCollapse) el.__bgCollapse=new Collapse(el,opts);return el.__bgCollapse;}
|
|
}
|
|
class Tab{
|
|
constructor(el){this._el=el;}
|
|
show(){var target=this._el.getAttribute('data-bs-target')||this._el.getAttribute('href'); if(!target) return; var pane=document.querySelector(target); if(!pane) return; var nav=this._el.closest('.nav')||document; qsa('[data-bs-toggle="tab"]',nav).forEach(function(t){t.classList.remove('active');t.setAttribute('aria-selected','false');}); this._el.classList.add('active');this._el.setAttribute('aria-selected','true'); var content=pane.parentElement; qsa('.tab-pane',content).forEach(function(p){p.classList.remove('active','show');}); pane.classList.add('active','show'); this._el.dispatchEvent(event('shown.bs.tab'));}
|
|
static getOrCreateInstance(el){if(!el.__bgTab) el.__bgTab=new Tab(el);return el.__bgTab;}
|
|
}
|
|
document.addEventListener('click',function(e){
|
|
var c=e.target.closest('[data-bs-toggle="collapse"]');
|
|
if(c){var sel=c.getAttribute('data-bs-target')||c.getAttribute('href'); if(sel){var el=document.querySelector(sel); if(el){e.preventDefault(); Collapse.getOrCreateInstance(el).toggle();}}}
|
|
var t=e.target.closest('[data-bs-toggle="tab"]');
|
|
if(t){e.preventDefault(); Tab.getOrCreateInstance(t).show();}
|
|
});
|
|
window.bootstrap={Collapse:Collapse,Tab:Tab};
|
|
})();
|