Sha256: a9041bdf71f20f0dd772e8ac688ce9f02a477db964ee157c11cafdb17a073b71

Contents?: true

Size: 1.65 KB

Versions: 4

Compression:

Stored size: 1.65 KB

Contents

/**
 * This file controls the behavior of the |File| and |Link| tabs in the
 * attachment form. It disables the |File| tab when a link is present and
 * vice versa.
 */

const getFileButton = (container) =>
  container.querySelector("button#trigger-file");
const getLinkButton = (container) =>
  container.querySelector("button#trigger-link");
const getLinkInput = (container) =>
  container.querySelector("input#attachment_link");
const getUploadsContainer = (container) =>
  container.querySelector("div[data-active-uploads]");

const hasUploads = (container) => container.querySelectorAll("div").length > 0;

const updateTabsState = (container) => {
  const fileButton = getFileButton(container);
  const linkButton = getLinkButton(container);
  const linkInput = getLinkInput(container);
  const uploadsContainer = getUploadsContainer(container);

  const disableFileButton = Boolean(linkInput?.value);
  const disableLinkButton = hasUploads(uploadsContainer);

  fileButton.disabled = disableFileButton;
  linkButton.disabled = disableLinkButton;
};

const initializeTabs = (container) => {
  const linkInput = getLinkInput(container);
  const uploadsContainer = getUploadsContainer(container);

  linkInput.addEventListener("change", () => {
    updateTabsState(container);
  });

  uploadsContainer.addEventListener("DOMSubtreeModified", () => {
    updateTabsState(container);
    console.log("DOMSubtreeModified");
  });

  updateTabsState(container);
};

document.addEventListener("DOMContentLoaded", () => {
  const tabs = document.querySelectorAll(
    "div[data-file-or-link-tabs-controller]"
  );

  tabs.forEach((container) => {
    initializeTabs(container);
  });
});

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
decidim-core-0.29.0.rc4 app/packs/src/decidim/attachments/file_or_link_tabs.js
decidim-core-0.29.0.rc3 app/packs/src/decidim/attachments/file_or_link_tabs.js
decidim-core-0.29.0.rc2 app/packs/src/decidim/attachments/file_or_link_tabs.js
decidim-core-0.29.0.rc1 app/packs/src/decidim/attachments/file_or_link_tabs.js