Tree github location npm version

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

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 (exampe), 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);",
  "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,
      "artiveTrail": true,
      "sublist": [
        {
          "title": "Primary and secondary databases"
        },
        {
          "title": "Describing data consistently"
        },
        {
          "title": "Minimum information standards"
        },
        {
          "title": "Controlled vocabularies",
          "expanded": true,
          "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);",
  "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,
      "artiveTrail": true,
      "sublist": [
        {
          "title": "Primary and secondary databases"
        },
        {
          "title": "Describing data consistently"
        },
        {
          "title": "Minimum information standards"
        },
        {
          "title": "Controlled vocabularies",
          "expanded": true,
          "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">
  <div class="vf-tree__inner">
    <span class="vf-show-hide">
      <button class="vf-button | vf-show-hide__button" data-vf-js-tree--button>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
          <title>navigation-left-2</title>
          <path d="M11.751,23.739a1.44,1.44,0,0,0,.36-2L5.528,12.272a.48.48,0,0,1,0-.549L12.111,2.26A1.44,1.44,0,0,0,9.746.616L3.164,10.079a3.372,3.372,0,0,0,0,3.837l6.582,9.463A1.44,1.44,0,0,0,11.751,23.739Z" />
          <path d="M16.473.89,9.889,10.353a2.892,2.892,0,0,0,0,3.289l6.584,9.464a.961.961,0,0,0,.788.411h3.213a.96.96,0,0,0,.788-1.508l-6.583-9.463a.965.965,0,0,1,0-1.1l6.583-9.464A.96.96,0,0,0,20.474.478H17.261A.96.96,0,0,0,16.473.89Z" />
        </svg>
      </button>
    </span>

    <ul class="vf-tree__list | vf-list" aria-role="tree">
      <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?</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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?</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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 | 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">Controlled vocabularies</a>
              <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
                <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                  <title>arrow-right-1</title>
                  <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>
              <ul class="vf-tree__list vf-tree__list--additional vf-tree__list--3 | vf-list" aria-role="group">
                <li class="vf-tree__item vf-tree__item--selected" 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?</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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?</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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</a>
          <button href="JavaScript:Void(0);" class="vf-button vf-tree__button" data-vf-js-tree--button>
            <svg id="Bold" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
              <title>arrow-right-1</title>
              <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>
          <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>

    </ul>
  </div>
</div>
              

Usage

There are several paramaters availabl when using the Nunjucks template:

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.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.