-
Notifications
You must be signed in to change notification settings - Fork 0
/
slideToggle.min.js
12 lines (8 loc) · 1.7 KB
/
slideToggle.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/*-------------------------------------------------
jQuery's slideToggle in pure JS
[#] Author: HT (@ht-devx)
[#] Version: 1.0.0
[#] Last updated: 2024-06-13 8:14PM [GMT-7]
github.com/ht-devx/slideToggle
-------------------------------------------------*/
window.slideToggle=function(e){let t=e=>{let t=e.trigger,l=e.content;if([t,l].every(e=>void 0!==e)){let s=({}).toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase(),a=({}).toString.call(l).match(/\s([a-zA-Z]+)/)[1].toLowerCase();if("null"==s||"null"==a)"null"==s&&console.warn("[trigger] selector does not exist."),"null"==a&&console.warn("[content] selector does not exist.");else{let i;if("string"!==s&&"html"==s.slice(0,4)&&"element"==s.slice(-7))i=t;else{let n;i=document.querySelector(t)||null}let o;if("string"!==s&&"html"==s.slice(0,4)&&"element"==s.slice(-7))o=l;else{let c;o=document.querySelector(l)||null}if(o){if(Array.from(o.childNodes)?.forEach(e=>{if(3===e.nodeType&&e.data.trim().length&&e.parentNode&&!e.parentNode.matches("span")){let t=document.createElement("span");e.before(t),t.appendChild(e)}}),o.classList.add("slidetoggle-content"),!o.querySelector(".slidetoggle-outer")){let r=document.createElement("div");r.classList.add("slidetoggle-outer"),o.prepend(r);let d=document.createElement("div");d.classList.add("slidetoggle-inner"),r.append(d),o.querySelectorAll(":scope > *:not(.slidetoggle-outer)")?.forEach(e=>{d.append(e)})}i&&i.addEventListener("click",()=>{i.matches(".active")?i.classList.remove("active"):i.classList.add("active"),o&&(o.matches(".active")?o.classList.remove("active"):o.classList.add("active"))})}}}};"loading"==document.readyState?document.addEventListener("DOMContentLoaded",()=>t(e)):t(e)};