{"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"]}