Sha256: b8cbe0dd63f12f54f17905686f066a848d310b50eac8b88c7d60e24a25dde72c

Contents?: true

Size: 1 KB

Versions: 13

Compression:

Stored size: 1 KB

Contents

/**
 * Toggles the visibility of an HTML element (or elements),
 * when the trigger is activated.
 *
 * @param {HTMLElement} component trigger element
 * @returns {void}
 */
export default function createToggle(component) {
  const { toggle } = component.dataset

  if (!component.id) {
    // when component has no id, we enforce to have it one
    component.id = `toggle-${Math.random().toString(36).substring(7)}`
  }

  component.setAttribute("aria-controls", toggle);
  toggle.split(" ").forEach((id) => {
    const node = document.getElementById(id)

    if (node) {
      node.setAttribute("aria-labelledby", [node.getAttribute("aria-labelledby"), component.id].filter(Boolean).join(" "))
    }
  })

  component.addEventListener("click", () => {
    toggle.split(" ").forEach((id) => {
      const node = document.getElementById(id)

      if (node) {
        node.hidden = !node.hidden
        node.setAttribute("aria-expanded", !node.hidden);
      }
    });

    document.dispatchEvent(new Event("on:toggle"));
  })
}

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
decidim-core-0.29.1 app/packs/src/decidim/toggle.js
decidim-core-0.28.4 app/packs/src/decidim/toggle.js
decidim-core-0.29.0 app/packs/src/decidim/toggle.js
decidim-core-0.28.3 app/packs/src/decidim/toggle.js
decidim-core-0.29.0.rc4 app/packs/src/decidim/toggle.js
decidim-core-0.29.0.rc3 app/packs/src/decidim/toggle.js
decidim-core-0.29.0.rc2 app/packs/src/decidim/toggle.js
decidim-core-0.29.0.rc1 app/packs/src/decidim/toggle.js
decidim-core-0.28.2 app/packs/src/decidim/toggle.js
decidim-core-0.28.1 app/packs/src/decidim/toggle.js
decidim-core-0.28.0 app/packs/src/decidim/toggle.js
decidim-core-0.28.0.rc5 app/packs/src/decidim/toggle.js
decidim-core-0.28.0.rc4 app/packs/src/decidim/toggle.js