beta This component version is ready to be used but is still in active development.

Tree block

A collapsable tree list suited for list displays or deep navigation structures.

github location npm version



Usage

There are several paramaters availabl when using the Nunjucks template:

  • expanded: true Control if the entire tree is expanded/collpased
  • sublist if an object of titles the item will be shown as a group
  • artiveTrail: true Highlights a tree as an active path and if it is a sublist, opens it

Variants

Nunjucks syntax

Depending on your environment you'll want to use render or include. As a rule of thumb: server-side use include, precompiled browser use render. If you're using vf-eleventy you should use include.

Using include

You'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include is an abstraction of render and provides some additional portability.


{% set context fromYourYamlFile %}
- or -
{% set context = {
  "component-type": "block",
  "tree_example_href": "JavaScript:Void(0);",
  "button_hidden_open_text": "Open Tree",
  "button_hidden_close_text": "Close Tree",
  "expanded": true,
  "vf_tree_list": [
    {
      "title": "Course Overview",
      "sublist": false
    },
    {
      "title": "What is bioinformatics?",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "The role of public databases",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "What makes a good bioinformatics database?",
      "expanded": true,
      "selected": true,
      "artiveTrail": true,
      "sublist": [
        {
          "title": "Primary and secondary databases"
        },
        {
          "title": "Describing data consistently"
        },
        {
          "title": "Minimum information standards"
        },
        {
          "title": "Controlled vocabularies",
          "sublist": [
            {
              "title": "Non-heirarchial list",
              "artiveTrail": true
            },
            {
              "title": "Taxonomy"
            },
            {
              "title": "Thesaurus"
            },
            {
              "title": "Gene Ontology"
            }
          ]
        }
      ]
    },
    {
      "title": "Tips on managing and sharing data?",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Where do I submit my data?",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Using ontologies to provide controlled vocabularies",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Summary",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Get help and support",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    }
  ]
}
 %}
{% include "../path_to/vf-tree/vf-tree.njk" %}
                

Using render

This approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include is not be available.

{% render '@vf-tree', {
  "component-type": "block",
  "tree_example_href": "JavaScript:Void(0);",
  "button_hidden_open_text": "Open Tree",
  "button_hidden_close_text": "Close Tree",
  "expanded": true,
  "vf_tree_list": [
    {
      "title": "Course Overview",
      "sublist": false
    },
    {
      "title": "What is bioinformatics?",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "The role of public databases",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "What makes a good bioinformatics database?",
      "expanded": true,
      "selected": true,
      "artiveTrail": true,
      "sublist": [
        {
          "title": "Primary and secondary databases"
        },
        {
          "title": "Describing data consistently"
        },
        {
          "title": "Minimum information standards"
        },
        {
          "title": "Controlled vocabularies",
          "sublist": [
            {
              "title": "Non-heirarchial list",
              "artiveTrail": true
            },
            {
              "title": "Taxonomy"
            },
            {
              "title": "Thesaurus"
            },
            {
              "title": "Gene Ontology"
            }
          ]
        }
      ]
    },
    {
      "title": "Tips on managing and sharing data?",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Where do I submit my data?",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Using ontologies to provide controlled vocabularies",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Summary",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    },
    {
      "title": "Get help and support",
      "expanded": false,
      "sublist": [
        {
          "title": "Subitems"
        }
      ]
    }
  ]
} %}
                
HTML
<div class="vf-tree" data-vf-js-tree aria-expanded="true" data-vf-js-button-hidden-open-text="Open Tree" data-vf-js-button-hidden-close-text="Close Tree">
  <div class="vf-tree__inner">

    <ul class="vf-tree__list  vf-tree__list--1 | vf-list" aria-role="tree">
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
        <a href="JavaScript:Void(0);" class="vf-tree__link">Course Overview </a>
      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">What is bioinformatics? <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">The role of public databases <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
      <li class="vf-tree__item vf-tree__item--selected | vf-tree__item--expanded" data-vf-js-tree--collapsed="false" data-vf-js-tree aria-role="treeitem" aria-expanded="true">
        <a href="JavaScript:Void(0);" class="vf-tree__link" aria-current="page">What makes a good bioinformatics database? <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Primary and secondary databases </a>
          </li>
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Describing data consistently </a>
          </li>
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Minimum information standards </a>
          </li>
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Controlled vocabularies <button class="vf-button vf-tree__button" data-vf-js-tree--button>
                <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
                  Open Tree
                </p>
                <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                  <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
                </svg>
              </button>
            </a>
            <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--3 | vf-list" aria-role="group">
              <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
                <a href="JavaScript:Void(0);" class="vf-tree__link" aria-current="page">Non-heirarchial list </a>
              </li>
              <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
                <a href="JavaScript:Void(0);" class="vf-tree__link">Taxonomy </a>
              </li>
              <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
                <a href="JavaScript:Void(0);" class="vf-tree__link">Thesaurus </a>
              </li>
              <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
                <a href="JavaScript:Void(0);" class="vf-tree__link">Gene Ontology </a>
              </li>
            </ul>

          </li>
        </ul>

      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">Tips on managing and sharing data? <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">Where do I submit my data? <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">Using ontologies to provide controlled vocabularies <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">Summary <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
      <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="false">
        <a href="JavaScript:Void(0);" class="vf-tree__link">Get help and support <button class="vf-button vf-tree__button" data-vf-js-tree--button>
            <p data-vf-js-tree-button-hidden-text class="vf-u-sr-only">
              Open Tree
            </p>
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <path d="M19.5,12a2.3,2.3,0,0,1-.78,1.729L7.568,23.54a1.847,1.847,0,0,1-2.439-2.773l9.752-8.579a.25.25,0,0,0,0-.376L5.129,3.233A1.847,1.847,0,0,1,7.568.46l11.148,9.808A2.31,2.31,0,0,1,19.5,12Z" />
            </svg>
          </button>
        </a>
        <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--2 | vf-list" aria-role="group">
          <li class="vf-tree__item" data-vf-js-tree--collapsed="true" data-vf-js-tree aria-role="treeitem" aria-expanded="">
            <a href="JavaScript:Void(0);" class="vf-tree__link">Subitems </a>
          </li>
        </ul>

      </li>
    </ul>


  </div>
</div>
              

Examples

Installation info

This repository is distributed with npm. After installing npm, you can install vf-tree with this command.

$ yarn add --dev @visual-framework/vf-tree

Changelog

Changelog

1.1.13

  • Documentation updates
  • New release

1.1.12

  • Update milestones and roadmap.

1.1.11

  • Add ELIXIR banner to example EMBL-EBI page.
  • https://stable.visual-framework.dev/patterns/boilerplate-generic-embl-ebi/
  • https://github.com/visual-framework/vf-core/pull/1615

1.1.7

  • Fixed issue of overlapping menu on VF components site
  • https://github.com/visual-framework/vf-core/issues/1518

1.1.6

  • dependency bump

1.1.2

  • Implements updated vf-search markup.
  • Changes a few pages on how it works with nunjucks and markdown.

1.1.0

  • updates Design Tokens homepage.
  • adds neutral colour tokens
  • adds 'status banners' for components in the documentation page.
  • Adds the form options as their own set of components in the list.
  • https://github.com/visual-framework/vf-core/pull/1390/files
  • Updates to use 11ty 0.12.1
  • https://github.com/visual-framework/vf-core/pull/1435

1.0.24

  • changes the vf-intro so it's a white background, removes the padding.
  • changes the links in vf-intro to be the 'correct' buttons.

1.0.23

  • small change to cards on homepage

1.0.18

  • dependency bump

1.0.17

  • dependency bump

1.0.16

  • dependency bump

1.0.13

  • dependency bump
  • adds roamap and consultation docs

1.0.12

  • design token documenation now lives in the component libary

1.0.7

  • adds updates blog

1.0.6

  • begin to make more pattern/boilerplate guidance
  • minor templating updates

1.0.5

  • dependency bump

1.0.4

  • uses vf-favicon
  • adds meta attributes

1.0.3

  • run vf-component-assets:everything on local dev
  • remove reference to removed /css/app.css

1.0.2

  • Add 404
  • Fix component CSS generation

1.0.1

  • Also generate per-component CSS with vf-css:generate-component-css

1.0.0

  • Initial release to be used with vf-core 2.2.0

Assets



File system location: components/vf-tree

Find an issue on this page? Propose a change or discuss it.