quake 0.5.0

Simple knowledge management tool for geek.
function from_quake_references_to_network(data) {
  let category_index = [];
  let nodes = [];
  let links = [];

  for (let key of Object.keys(data)) {
    let node = data[key];

    if (!category_index.includes(node.source_type)) {
      category_index.push(node.source_type);
    }
    nodes.push({
      id: parseInt(node.source_id),
      name: node.source_title,
      category: category_index.indexOf(node.source_type)
    });

    for (let ref of node.references) {
      if (!category_index.includes(ref.entry_type)) {
        category_index.push(ref.entry_type);
      }

      nodes.push({
        id: parseInt(ref.entry_id),
        name: ref.entry_title,
        category: category_index.indexOf(ref.entry_type)
      })

      links.push({source: parseInt(node.source_id) + "", target: parseInt(ref.entry_id) + ""});
    }
  }

  let categories = [];
  for (let category of category_index) {
    categories.push({name: category})
  }
  return {
    nodes,
    links,
    categories
  }
}

const tl_show_network = async (context, commands) => {
  const el = document.createElement('graph-network');

  let response = await fetch("/reference/quake_book");
  let data = from_quake_references_to_network(await response.json());
  el.data = data;

  return el;
}

Quake.flows['tl_show_network'] = tl_show_network;