{"version":3,"sources":["collapsiblock.min.js"],"names":["Drupal","cookies","once","Collapsiblock","behaviors","collapsiblock","attach","context","settings","_step","cookieString","get","cookieData","JSON","parse","active_pages","slide_speed","cookieLifetime","cookie_lifetime","_iterator","_createForOfIteratorHelper","s","n","done","slideSpeed","value","titleElements","children","length","titleElement","querySelectorAll","status","parseInt","dataset","collapsiblockAction","useCookie","targetElement","nextElementSibling","hasAttribute","id","split","pop","innerHTML","addEventListener","classList","contains","remove","duration","setAttribute","SlideElement","up","path","cookieOptions","parseFloat","set","stringify","undefined","allowCollapseActivePages","numberActiveMenuItems","add","err","e","f","window","style"],"mappings":"gpCAAA,SAAEA,EAAQC,EAASC,GAEjBF,EAAOG,cAAgBH,EAAOG,eAAiB,GAE/CH,EAAOI,UAAUC,cAAgB,CAC/BC,OAAQ,SAACC,EAASC,GAEhB,IAF6BC,EAEvBC,EAAeT,EAAQU,IAAI,iBAPtCC,EAASX,EAAkBY,KAAAC,MAAAJ,GAAA,GAEnBP,EAAuBA,EAAPE,cAAvBU,aAEOX,EAAUC,SAAjBG,EAAiCH,cAAAW,YAAA,IACvBC,EAACV,EAASC,cAAaU,gBAAAC,EAAAC,2BAGZV,EAAAA,gBAA0BA,SAAAA,iBAA3C,yBAH6B,IAK7B,IAAAS,EAAAE,MAAAZ,EAAAU,EAAAG,KAAAC,OAL6B,WAAA,IAKvBC,EALuBf,EAAAgB,MAQ7B,GAA2B,IAArBC,EAAaC,SAAQC,QAKpBC,EAAaF,SAASC,SAAWC,EAAaC,iBAAiB,oBAAoBF,OAb7D,OAoB3B,IAAMG,EAASC,SAASH,EAAaI,QAAQC,qBAC7C,GAVA,IAAAH,EACA,OAgBA,IAHA,IAPAI,EAAA,IAAAJ,GAAA,IAAAA,EASIK,EAAgBP,EAAaQ,mBAC1BD,GAAiBA,EAAcE,aAAa,uBARnDF,EAAeJ,EAASH,mBAaxB,IAVCO,EAWC,OAGF,IAAMG,EAAKV,EAAaU,GAAGC,MAAM,KAAKC,MAsDtC,GArDAZ,EAVOO,UAAa,yBAAIG,EAA2B,mBAAuBV,EAAAa,UAAA,YAW1EN,EAVEA,UAAgBA,IAAAA,CAAAA,yBAelBP,EAVEc,iBAAA,QAAA,WACDd,EAAAe,UAAAC,SAAA,gCAWGhB,EAAae,UAAUE,OAAO,+BATlCV,EAAWP,UAAgBW,OAAM,iCACjCX,aAAaa,KAAAA,EAAY,CAAAK,SAAAvB,IACzBY,EAAcQ,aAAc,iBAAC,GAE7BR,EAAAY,aAAA,eAAA,GAERb,IAUcvB,EAAW2B,GAAM,KAInBV,EAVAO,UAAcQ,IAAUE,+BAWxBV,EAVYQ,UAAMR,IAAAA,iCAWlBa,aAX2CC,GAAE1B,EAAAA,CAAAA,SAAAA,IAY7CK,EAZAmB,aAAA,iBAAA,GAaAZ,EAZYY,aAAZ,eAA0B,GActBb,IAXJvB,EAAIuB,GAAW,IAiBjB,IAXEC,EAAcQ,CAYdO,KAXAF,eAAgBb,KAAAA,SAEhBA,IAcAgB,EAAa,QAAcC,WAAWpC,IAIxChB,EAXAqD,IAAA,gBAAAzC,KAAA0C,UAAA3C,GAAAwC,KAWA,IAAAnD,GAnCF,IAAA8B,QAAAyB,IAAA5C,EAAA2B,IAsCAJ,GAAA,IAAAvB,EAAA2B,GAAA,CAGR,GAAA,EADAH,EAAAN,iBAAA,eAAAF,SACA6B,GAKArB,EAAAQ,UAAAC,SAAA,6BAYoF,EAArET,EAAcN,iBAAiB,6BAA6BF,OAG/D,OAdJC,EAAemB,aACH,iBAAUpC,GAGpBwB,EAAMsB,aAAqB,eAAiB5B,GAa5CD,EATEe,UAAAe,IAAA,+BAUFvB,EATEQ,UAAAe,IAAA,iCAUFvB,EATKA,MAAcQ,QAAUC,OAU7BhB,EAREA,aAAamB,iBAAa,GAS5BZ,EAREA,aAAcY,eAAa,KAnGI3C,GALR,MAAAuD,GAAAzC,EAAA0C,EAAAD,GAAA,QAAAzC,EAAA2C,OALnC,CA2HG9D,OAAQ+D,OARD3B,QAAc4B","file":"collapsiblock.min.js","sourcesContent":["((Drupal, cookies, once) => {\n\n Drupal.Collapsiblock = Drupal.Collapsiblock || {}\n\n Drupal.behaviors.collapsiblock = {\n attach: (context, settings) => {\n\n const cookieString = cookies.get('collapsiblock')\n let cookieData = cookieString ? JSON.parse(cookieString) : {}\n const allowCollapseActivePages = settings.collapsiblock.active_pages\n const slideSpeed = parseInt(settings.collapsiblock.slide_speed, 10)\n const cookieLifetime = settings.collapsiblock.cookie_lifetime\n\n const titleElements = once('collapsiblock', document.querySelectorAll('.collapsiblockTitle'))\n\n for (const titleElement of titleElements) {\n // Only add the button if one or more of the children are visible.\n if (titleElement.children.length === 0\n || titleElement.children.length === titleElement.querySelectorAll('.visually-hidden').length) {\n continue\n }\n\n // Status values: 1 = not collapsible, 2 = collapsible and expanded,\n // 3 = collapsible and collapsed, 4 = always collapsed,\n // 5 = always expanded\n const status = parseInt(titleElement.dataset.collapsiblockAction)\n if (status === 1) {\n continue\n }\n\n const useCookie = (status === 2 || status === 3)\n\n let targetElement = titleElement.nextElementSibling\n while (targetElement && targetElement.hasAttribute('data-contextual-id')) {\n targetElement = targetElement.nextElementSibling\n }\n\n // If there's no block body, escape this iteration.\n if (!targetElement) {\n continue\n }\n\n const id = titleElement.id.split('-').pop()\n titleElement.innerHTML = '<button id=\"#collapse-' + id + '\" role=\"link\" />' + titleElement.innerHTML + '</button>'\n targetElement.classList.add(['collapsiblockContent'])\n\n /**\n * Click event\n */\n titleElement.addEventListener('click', () => {\n if (titleElement.classList.contains('collapsiblockTitleCollapsed')) {\n titleElement.classList.remove('collapsiblockTitleCollapsed')\n targetElement.classList.remove('collapsiblockContentCollapsed')\n SlideElement.down(targetElement, { duration: slideSpeed })\n titleElement.setAttribute('aria-expanded', true)\n targetElement.setAttribute('aria-hidden', false)\n\n if (useCookie) {\n cookieData[id] = 1\n }\n }\n else {\n titleElement.classList.add('collapsiblockTitleCollapsed')\n targetElement.classList.add('collapsiblockContentCollapsed')\n SlideElement.up(targetElement, { duration: slideSpeed })\n titleElement.setAttribute('aria-expanded', false)\n targetElement.setAttribute('aria-hidden', true)\n\n if (useCookie) {\n cookieData[id] = 0\n }\n }\n\n // Mount cookie options.\n let cookieOptions = {\n path: drupalSettings.path.baseUrl\n }\n\n // Add cookie expiration time if it's setted on config.\n if (cookieLifetime) {\n cookieOptions['expires'] = parseFloat(cookieLifetime)\n }\n\n // Stringify the object in JSON format for saving in the cookie.\n cookies.set('collapsiblock', JSON.stringify(cookieData), cookieOptions)\n })\n\n /**\n * Initial state.\n *\n * Collapse if any of the following criteria are met:\n * - Blocks are always collapsed.\n * - Blocks are collapsed by default and there's no cookie data.\n * - Block is allowed to use cookie data and cookie says it should\n * be collapsed.\n */\n if (status === 4\n || (status === 3 && cookieData[id] === undefined)\n || (useCookie && cookieData[id] === 0)) {\n\n const numberActiveMenuItems = targetElement.querySelectorAll('a.is-active').length\n if ((numberActiveMenuItems > 0 && !allowCollapseActivePages)\n // Allow block content to assign class\n // 'collapsiblock-force-open' to it's content to force itself\n // to stay open. E.g. useful if block contains a form that was\n // just ajaxly updated and should be visible\n || targetElement.classList.contains('collapsiblock-force-open')\n || targetElement.querySelectorAll('.collapsiblock-force-open').length > 0) {\n titleElement.setAttribute('aria-expanded', true)\n targetElement.setAttribute('aria-hidden', false)\n continue\n }\n\n titleElement.classList.add('collapsiblockTitleCollapsed')\n targetElement.classList.add('collapsiblockContentCollapsed')\n targetElement.style.display = 'none'\n titleElement.setAttribute('aria-expanded', false)\n targetElement.setAttribute('aria-hidden', true)\n }\n }\n\n }\n }\n})(Drupal, window.Cookies, once)\n"]}