datavzrd 2.64.0

A tool to create visual HTML reports from collections of CSV/TSV tables
import $ from "jquery";

export function createLinkHtml(columns, link_urls, value, shown_value, row) {
  if (link_urls.length == 1) {
    let link = link_urls[0].link.url.replaceAll("{value}", value);
    for (const column of columns) {
      link = link.replaceAll(`{${column}}`, row[column]);
    }
    if (link_urls[0].link["new-window"]) {
      return `<a href="${link}" target="_blank" rel="noopener noreferrer" >${shown_value}</a>`;
    } else {
      return `<a href="${link}">${shown_value}</a>`;
    }
  } else {
    let links = "";
    for (let l of link_urls) {
      let link = l.link.url.replaceAll("{value}", value);
      for (const column of columns) {
        link = link.replaceAll(`{${column}}`, row[column]);
      }
      if (l.link["new-window"]) {
        links = `${links}<a class="dropdown-item" href="${link}" target='_blank' rel="noopener noreferrer" >${l.name}</a>`;
      } else {
        links = `${links}<a class="dropdown-item" href="${link}" >${l.name}</a>`;
      }
    }
    return `
              <div class="linkout-raw-value">${shown_value}</div>
              <div class="btn-group linkout-group">
                <button class="btn btn-outline-secondary btn-table btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                  ${shown_value}
                </button>
                <div class="dropdown-menu">
                  ${links}
                </div>
              </div>
            `;
  }
}

export function linkUrlColumn(
  columns,
  title,
  link_urls,
  custom_content,
  columnIndexMap,
) {
  let index = columnIndexMap[title];
  let table_rows = $("#table").bootstrapTable("getData");
  $(`table > tbody > tr td:nth-child(${index})`).each(function () {
    let row = this.parentElement.dataset.index;
    let value = table_rows[row][title];
    let shown_value = value;
    if (custom_content) {
      shown_value = window[custom_content](value, table_rows[row]);
    }
    this.innerHTML = createLinkHtml(
      columns,
      link_urls,
      value,
      shown_value,
      table_rows[row],
    );
    row++;
  });
}

export function linkDetailUrlColumn(row, div, link_urls, columns) {
  var custom_content = link_urls["custom-content"];
  var value = row[link_urls["title"]];
  var shown_value = value;
  if (custom_content) {
    shown_value = window[custom_content](value, row);
  }
  $(`${div}`)[0].innerHTML = createLinkHtml(
    columns,
    link_urls["links"],
    value,
    shown_value,
    row,
  );
}