<!DOCTYPE html>
<html id="library-documentation-top" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="Generator" content="">
<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64, ">
<link rel="stylesheet" type="text/css" href="libdoc.css" media="all">
<link rel="stylesheet" type="text/css" href="pygments.css" media="all">
<link rel="stylesheet" type="text/css" href="print.css" media="print">
<link rel="stylesheet" type="text/css" href="../common/js_disabled.css" media="all">
<link rel="stylesheet" type="text/css" href="doc_formatting.css" media="all">
<script type="text/javascript" src="../common/storage.js"></script>
<script type="text/javascript" src="../rebot/util.js"></script> <!-- TODO: Should util.js be moved under common? -->
<script type="text/javascript" src="../lib/jquery.min.js"></script>
<script type="text/javascript" src="../lib/jquery.tmpl.min.js"></script>
<script type="text/javascript" src="../lib/jquery.highlight.min.js"></script>
<!-- JS MODEL --><script type="text/javascript" src="../testdata/libdoc.js"></script>
<title></title>
</head>
<body>

<div id="javascript-disabled">
  <h1>Opening library documentation failed</h1>
  <ul>
    <li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
    <li>Make sure you are using a <b>modern enough browser</b>. If using Internet Explorer, version 11 is required.</li>
    <li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
  </ul>
</div>

<script type="text/javascript">
    // Not using jQuery here for speed and to support ancient browsers.
    document.getElementById('javascript-disabled').style.display = 'none';
    window.addEventListener("hashchange", function() {
      document.getElementsByClassName("hamburger-menu")[0].checked = false;
    }, false);
    window.addEventListener("hashchange", function() {
        if (window.location.hash.indexOf('#type-') == 0) {
            const hash = '#type-modal-' + decodeURI(window.location.hash.slice(6));
            const typeDoc = document.querySelector(".data-types").querySelector(hash);
            if (typeDoc) {
              showModal(typeDoc);
            }
        }
    }, false);
</script>

<script type="text/javascript">

    $(document).ready(function() {
        parseTemplates();
        document.title = libdoc.name;
        storage.init('libdoc');
        setTheme();
        renderTemplate('base', libdoc, $('body'));
        if (libdoc.inits.length) {
            libdoc.typedocs.map(function(type) {
                var index = type.usages.indexOf('__init__');
                if (index != -1) type.usages[index] = 'Importing';
            });
            renderTemplate('importing', libdoc);
        }
        renderTemplate('shortcuts', libdoc);
        renderTemplate('keyword-shortcuts', libdoc);
        renderTemplate('keywords', libdoc);
        renderTemplate('data-types', libdoc);
        renderTemplate('footer', libdoc);
        const params = util.parseQueryString(window.location.search.slice(1));
        let selectedTag = "";
        if ("tag" in params) {
            selectedTag = params["tag"];
            tagSearch(selectedTag, window.location.hash);
        }
        if (libdoc.tags.length) {
          libdoc.selectedTag = selectedTag;
          renderTemplate('tags-shortcuts', libdoc);
        }
        scrollToHash();
        setTimeout(function() {
          document.getElementById("keyword-statistics-header").innerText = '' + libdoc.keywords.length;
          if (storage.get('keyword-wall') === 'open') {
            openKeywordWall();
          }
      }, 0);
        createModal();
    });

    function setTheme(theme) {
        document.documentElement.setAttribute('data-theme', theme || getTheme());
    }

    function getTheme() {
        if (libdoc['theme']) {
            return libdoc['theme'];
        } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
            return 'dark';
        } else {
            return 'light;'
        }
    }

    function parseTemplates() {
        $('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
            $.template(elem.id, elem.text);
        });
    }

    function renderTemplate(name, arguments, container) {
      if (!container) {
          container = $('#' + name + '-container');
          container.empty();
      }
      if (!arguments.search) {
          arguments.search = false;
      }
      $.tmpl(name + '-template', arguments).appendTo(container);
    }

    function scrollToHash() {
        if (window.location.hash) {
            var hash = window.location.hash.substring(1);
            var id = decodeURIComponent(hash);
            document.getElementById(id).scrollIntoView();
        }
    }

    function tagSearch(tag, hash) {
      document.getElementsByClassName('search-input')[0].value = '';
      const include = {tags: true, tagsExact: true};
      const url = window.location.pathname + "?tag=" + tag + (hash || "");
      markMatches(tag, include);
      highlightMatches(tag, include);
      history.replaceState && history.replaceState(null, '', url);
      document.getElementById('keyword-shortcuts-container').scrollTop = 0;
    }

    function clearTagSearch() {
      document.getElementsByClassName('search-input')[0].value = '';
      history.replaceState && history.replaceState(null, '', window.location.pathname);
      resetKeywords();
    }

    function closeMenu() {
      document.getElementById('hamburger-menu-input').checked = false;
    }

    function markMatches(pattern, include, givenSearchTime, callback) {
       if (givenSearchTime && givenSearchTime !== searchTime) {
         return;
       }
        let patternRegexp = util.regexpEscape(pattern);
        if (include.tagsExact) {
            patternRegexp = '^' + patternRegexp + '$';
        }
        let regexp = new RegExp(patternRegexp, 'i');
        let test = regexp.test.bind(regexp);
        let result = {};
        let keywordMatchCount = 0;
        result.keywords = util.map(libdoc.keywords, function (kw) {
            kw = $.extend({}, kw);
            kw.hidden =  !(include.name && test(kw.name)) &&
                         !(include.args && test(kw.args)) &&
                          !(include.doc && test($(kw.doc).text())) &&
                          !(include.tags && util.any(util.map(kw.tags, test)));
            if (!kw.hidden)
                keywordMatchCount++;
            return kw;
        });
        renderTemplate('keyword-shortcuts', result);
        renderTemplate('keywords', result);
        if (libdoc.tags.length) {
          libdoc.selectedTag = include.tagsExact ? pattern : "";
          renderTemplate('tags-shortcuts', libdoc);
        }
        document.getElementById("keyword-statistics-header").innerText = keywordMatchCount + ' / ' + result.keywords.length;
        if (keywordMatchCount === 0)
            $('#keywords-container').find('table').empty();
        if (callback) {
          requestAnimationFrame(callback);
        }
    }

    function highlightMatches(string, include, givenSearchTime) {
       if (givenSearchTime && givenSearchTime !== searchTime) {
         return;
       }
        const shortcuts = $('#shortcuts-container').find('.match');
        const keywords = $('#keywords-container').find('.match');
        if (include.name) {
            shortcuts.highlight(string);
            keywords.find('.kw').highlight(string);
        }
        if (include.args) {
            keywords.find('.args').highlight(string);
        }
        if (include.doc) {
            keywords.find('.doc').highlight(string);
        }
        if (include.tags) {
            var matches = keywords.find('.tags').find('a').add(
                    $('#tags-shortcuts-container').find('a'));
            if (include.tagsExact) {
                matches = matches.filter(function (index, tag) {
                    return $(tag).text().toUpperCase() === string.toUpperCase();
                });
            }
            matches.highlight(string);
        }
    }

    function clearSearch() {
      document.getElementsByClassName('search-input')[0].value = '';
      const tagsSelect = document.getElementById('tags-shortcuts-container');
      if (tagsSelect) {
        tagsSelect.selectedIndex = 0;
      }
      resetKeywords();
    }

    let searchTime = 0;

    function searching() {
      searchTime = Date.now();
      const value = document.getElementsByClassName('search-input')[0].value;
      const include = {name: true,
                       args: true,
                       doc: true,
                       tags: true};
      if (value) {
        requestAnimationFrame(function () {
          markMatches(value, include, searchTime,
                  function () {
                    highlightMatches(value, include, searchTime);
                    document.getElementById('keyword-shortcuts-container').scrollTop = 0;
                  }
          );
        });
      } else {
          resetKeywords();
      }
    }

    function toggleShortcuts() {
      const shortcuts = document.getElementsByClassName("shortcuts")[0];
      if (shortcuts.classList.contains("keyword-wall")) {
        closeKeywordWall();
      } else {
        openKeywordWall();
      }
    }

    function openKeywordWall() {
      const shortcuts = document.getElementsByClassName("shortcuts")[0];
      shortcuts.classList.add("keyword-wall");
      storage.set("keyword-wall", 'open');
      const button = document.getElementById("toggle-keyword-shortcuts")
      button.innerText = '-';
    }

    function closeKeywordWall() {
      const shortcuts = document.getElementsByClassName("shortcuts")[0];
      shortcuts.classList.remove("keyword-wall");
      storage.set("keyword-wall", 'close');
      const button = document.getElementById("toggle-keyword-shortcuts")
      button.innerText = '+';
    }

    function resetKeywords() {
        renderTemplate('keyword-shortcuts', libdoc);
        renderTemplate('keywords', libdoc);
        renderTemplate('data-types', libdoc);
        if (libdoc.tags.length) {
            renderTemplate('tags', libdoc);
        }
        document.getElementById("keyword-statistics-header").innerText = ''+libdoc.keywords.length;
        if (libdoc.typedocs.length) {
            document.getElementById("type-statistics-header").innerText = '' + libdoc.typedocs.length;
        }
        history.replaceState && history.replaceState(null, '', location.pathname);
    }

    function createModal() {
        const modalBackground = document.createElement('div');
        modalBackground.id = 'modal-background';
        modalBackground.classList.add('modal-background');
        modalBackground.addEventListener('click', ({ target }) => {
            if (target.id === 'modal-background') hideModal()
        })

        const modalCloseButton = document.createElement('button');
        modalCloseButton.innerHTML = `<svg xmlns="
      http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="2em" height="2em" className="block" data-v-2754030d="" data-v-512b0344="">
              <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"
                    data-v-2754030d="" fill="var(--text-color)"></path></svg>`;
        modalCloseButton.classList.add('modal-close-button');
        const modalCloseButtonContainer = document.createElement('div');
        modalCloseButtonContainer.classList.add('modal-close-button-container');
        modalCloseButtonContainer.appendChild(modalCloseButton);
        modalCloseButton.addEventListener('click', () => {
            hideModal()
        })
        modalBackground.appendChild(modalCloseButtonContainer);
        modalCloseButtonContainer.addEventListener('click', () => {
            hideModal()
        })

        const modal = document.createElement('div');
        modal.id = 'modal';
        modal.classList.add('modal');
        modal.addEventListener('click', ({ target }) => {
            if (target.tagName.toUpperCase() === 'A') hideModal()
        })


        const modalContent = document.createElement('div');
        modalContent.id = 'modal-content';
        modalContent.classList.add('modal-content');
        modal.appendChild(modalContent);

        modalBackground.appendChild(modal);
        document.body.appendChild(modalBackground);
        document.addEventListener('keydown', ({ key }) => {
            if (key === 'Escape') hideModal()
        })
    }
    function showModal(content) {
        const modalBackground = document.getElementById('modal-background');
        const modal = document.getElementById('modal');
        const modalContent = document.getElementById('modal-content');
        modalBackground.classList.add('visible');
        modal.classList.add('visible');
        modalContent.appendChild(content.cloneNode(true));
        document.body.style.overflow = 'hidden';
    }
    function hideModal() {
        const modalBackground = document.getElementById('modal-background');
        const modal = document.getElementById('modal');
        const modalContent = document.getElementById('modal-content');

        modalBackground.classList.remove('visible');
        modal.classList.remove('visible');
        document.body.style.overflow = 'auto';
        if (window.location.hash.indexOf('#type-') == 0)
            history.pushState("", document.title, window.location.pathname);
        // modal is hidden with a fading transition, timeout prevents premature emptying of modal
        setTimeout(() => {
            modalContent.innerHTML = '';
        }, 200);
    }

    // http://stackoverflow.com/a/18484799
    var delay = (function () {
        var timer = 0;
        return function(callback, ms) {
            clearTimeout(timer);
            timer = setTimeout(callback, ms);
        };
    })();
</script>

<script type="text/x-jquery-tmpl" id="base-template">
  <div class="base-container">
    <input id="hamburger-menu-input" class="hamburger-menu" type="checkbox" />
    <span class="hamburger-menu hamburger-menu-1"></span>
    <span class="hamburger-menu hamburger-menu-2"></span>
    <span class="hamburger-menu hamburger-menu-3"></span>
    <div class="libdoc-overview"><div id="shortcuts-container"></div></div>
    <div class="libdoc-details">
      <table class="metadata">
          {{if version}}<tr><th>Library version:</th><td>${version}</td></tr>{{/if}}
          {{if scope}}<tr><th>Library scope:</th><td>${scope}</td></tr>{{/if}}
      </table>
      <div id="introduction-container">
          <h2 id="Introduction">Introduction</h2>
          <div class="doc">{{html doc}}</div>
      </div>
      <div id="importing-container"></div>
      <div id="keywords-container"></div>
      <div id="data-types-container"></div>
      <div id="footer-container"></div>
    </div>
    <a class="libdoc-title" href="#library-documentation-top">
          <h1>${name}</h1>
          <svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   viewBox="0 0 202.4325 202.34125"
   height="42"
   width="42"
   xml:space="preserve"
   version="1.1"><metadata
     id="metadata8"><rdf:RDF><cc:Work
         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
     id="defs6"><clipPath
       id="clipPath16"
       clipPathUnits="userSpaceOnUse"><path
         id="path18"
         d="m 0,161.873 161.946,0 L 161.946,0 0,0 0,161.873 Z" /></clipPath></defs><g
     transform="matrix(1.25,0,0,-1.25,0,202.34125)"
     id="g10"><g
       id="g12"><g
         clip-path="url(#clipPath16)"
         id="g14"><g
           transform="translate(52.4477,88.1268)"
           id="g20"><path
             id="robot-svg-path"
             d="m 0,0 c 0,7.6 6.179,13.779 13.77,13.779 7.6,0 13.779,-6.179 13.779,-13.779 0,-2.769 -2.238,-5.007 -4.998,-5.007 -2.761,0 -4.999,2.238 -4.999,5.007 0,2.078 -1.695,3.765 -3.782,3.765 C 11.693,3.765 9.997,2.078 9.997,0 9.997,-2.769 7.76,-5.007 4.999,-5.007 2.238,-5.007 0,-2.769 0,0 m 57.05,-23.153 c 0,-2.771 -2.237,-5.007 -4.998,-5.007 l -46.378,0 c -2.761,0 -4.999,2.236 -4.999,5.007 0,2.769 2.238,5.007 4.999,5.007 l 46.378,0 c 2.761,0 4.998,-2.238 4.998,-5.007 M 35.379,-2.805 c -1.545,2.291 -0.941,5.398 1.35,6.943 l 11.594,7.83 c 2.273,1.58 5.398,0.941 6.943,-1.332 1.545,-2.29 0.941,-5.398 -1.35,-6.943 l -11.594,-7.83 c -0.852,-0.586 -1.829,-0.87 -2.788,-0.87 -1.607,0 -3.187,0.781 -4.155,2.202 m 31.748,-30.786 c 0,-0.945 -0.376,-1.852 -1.045,-2.522 l -8.617,-8.617 c -0.669,-0.668 -1.576,-1.045 -2.523,-1.045 l -52.833,0 c -0.947,0 -1.854,0.377 -2.523,1.045 l -8.617,8.617 c -0.669,0.67 -1.045,1.577 -1.045,2.522 l 0,52.799 c 0,0.947 0.376,1.854 1.045,2.522 l 8.617,8.619 c 0.669,0.668 1.576,1.044 2.523,1.044 l 52.833,0 c 0.947,0 1.854,-0.376 2.523,-1.044 l 8.617,-8.619 c 0.669,-0.668 1.045,-1.575 1.045,-2.522 l 0,-52.799 z m 7.334,61.086 -11.25,11.25 c -1.705,1.705 -4.018,2.663 -6.428,2.663 l -56.523,0 c -2.412,0 -4.725,-0.959 -6.43,-2.665 L -17.412,27.494 c -1.704,-1.705 -2.661,-4.016 -2.661,-6.427 l 0,-56.515 c 0,-2.411 0.958,-4.725 2.663,-6.428 l 11.25,-11.25 c 1.705,-1.705 4.017,-2.662 6.428,-2.662 l 56.515,0 c 2.41,0 4.723,0.957 6.428,2.662 l 11.25,11.25 c 1.705,1.703 2.663,4.017 2.663,6.428 l 0,56.514 c 0,2.412 -0.958,4.724 -2.663,6.429" /></g></g></g></g></svg>
    </a>
  </div>
</script>

<script type="text/x-jquery-tmpl" id="importing-template">
    <h2 id="Importing">Importing</h2>
    <div class="keywords">
        {{each inits}}
        <div class="kw-row">
          <div class="kw-overview">
          {{if args.length}}
              <div class="args">
                <h4>Arguments</h4>
                <div class="arguments-list-container">
                  <div class="arguments-list">
                  {{each args}}
                    {{tmpl($value) 'argument-template'}}
                  {{/each}}
                  </div>
                </div>
              </div>
          {{/if}}
          {{if $value.doc}}
            <div class="kw-docs">
              <h4>Documentation</h4>
              <div class="kwdoc doc">{{html $value.doc}}</div>
            </div>
          {{/if}}
        </div>
        {{/each}}
    </div>
</script>

<script type="text/x-jquery-tmpl" id="shortcuts-template">
    <div class="keywords-overview">
      <div class="keyword-search-box">
        <input placeholder="Search" type="text" class="search-input" onkeydown="delay(searching, 150)"/>
        <button class="clear-search" onclick="clearSearch()">&#10005;</button>
      </div>
      {{if tags.length}}
      <select id="tags-shortcuts-container" onchange="location = this.value;">
      </select>
      {{/if}}
      <div class="keywords-overview-header-row">
      <h4>Keywords (<span id="keyword-statistics-header"></span>)
      </h4>
      <button id="toggle-keyword-shortcuts" onclick="toggleShortcuts()">+</button>
      </div>
      <ul class="shortcuts" id="keyword-shortcuts-container">
      </ul>
    </div>
</script>

<script type="text/x-jquery-tmpl" id="keyword-shortcuts-template">
    {{each keywords}}
    {{if !$value.hidden}}
    <li>
    <a href="#${encodeURIComponent($value.name)}"
       onclick="closeMenu()"
       class="match"
       title="${$value.shortdoc}">${$value.name}</a>
    </li>
    {{/if}}
    {{/each}}
    {{each keywords}}
    {{if $value.hidden}}
    <li>
    <a href="#${encodeURIComponent($value.name)}"
       onclick="closeMenu()"
       class="no-match"
       title="${$value.shortdoc}">${$value.name}</a>
    </li>
    {{/if}}
    {{/each}}
</script>


<script type="text/x-jquery-tmpl" id="tags-shortcuts-template">
  <option value="javascript:clearTagSearch()" {{if selectedTag === ""}}selected{{/if}}>- Show all tags -</option>
  {{each tags}}
    <option value="javascript:tagSearch('${$value}')" {{if selectedTag === $value}}selected{{/if}}>${$value}</a>
    </option>
  {{/each}}
</script>

<script type="text/x-jquery-tmpl" id="keywords-template">
    <h2 id="Keywords">Keywords</h2>
    <div class="keywords">
        {{each keywords}}
        {{if !$value.hidden}}
            {{tmpl($value) 'keyword-template'}}
        {{/if}}
        {{/each}}
        {{each keywords}}
        {{if $value.hidden}}
            {{tmpl($value) 'keyword-template'}}
        {{/if}}
        {{/each}}
    </div>
</script>

<script type="text/x-jquery-tmpl" id="keyword-template">
    <div class="keyword-container {{if hidden}}no-{{/if}}match" id="${name}">
       <div class="keyword-name">
            <h2>
            <a class="kw-name" href="#${encodeURIComponent(name)}"
               title="Link to this keyword">${name}</a>
            </h2>
       </div>
       <div class="keyword-content">
          <div class="kw-overview">
            {{if args.length}}
              <div class="args">
                <h4>Arguments</h4>
                <div class="arguments-list-container">
                  <div class="arguments-list">
                  {{each args}}
                    {{tmpl($value) 'argument-template'}}
                  {{/each}}
                  </div>
                </div>
              </div>
            {{/if}}
            {{if returnType}}
            <div class="return-type">
              <h4>Return Type</h4>
              <span class="arg-type">
              {{tmpl(returnType) 'type-info-template'}}
              </span>
            </div>
            {{/if}}
            {{if libdoc.tags.length && tags.length}}
              <div class="tags">
                <h4>Tags</h4>
                <span class="kw-tags">
                {{each tags}}
                  <a href="javascript:tagSearch('${$value}')"
                    title="Show keywords with this tag">${$value}</a>{{if $index < tags.length-1}},<br>{{/if}}
                {{/each}}
                </span>
              </div>
            {{/if}}
          </div>
          {{if doc}}
            <div class="kw-docs">
              <h4>Documentation</h4>
              <div class="kwdoc doc">{{html doc}}</div>
            </div>
          {{/if}}
       </div>
    </div>
</script>

<script type="text/x-jquery-tmpl" id="argument-template">
<span class="arg-name {{if required}}arg-required{{else}}arg-optional{{/if}}" title="Argument name">
{{if kind === 'VAR_POSITIONAL'}}<span class="arg-kind" title="Variable number of arguments">*</span>{{/if}}
{{if kind === 'VAR_NAMED'}}<span class="arg-kind" title="Variable number of named arguments">**</span>{{/if}}
{{if kind === 'NAMED_ONLY'}}<span class="arg-kind" title="Named only argument">&#x1F3F7;</span>{{/if}}
{{if kind === 'POSITIONAL_ONLY'}}<span class="arg-kind" title="Positional only argument">&#x27F6;</span>{{/if}}
${name}
</span>

{{if defaultValue !== null}}
  <div class="arg-default-container">
    <span class="arg-default-eq">=</span>
    <span class="arg-default-value" title="Default value that is used if no value is given">${defaultValue}</span>
  </div>
{{/if}}

{{if type}}
  <span class="arg-type">
      {{tmpl(type) 'type-info-template'}}
  </span>
{{/if}}
</script>

<script type="text/x-jquery-tmpl" id="type-info-template">
  <!-- Store last index to variable. Checking it the 'each' loop didn't work. -->
  ${$item.lastIndex=nested.length-1, ""}
  {{if union}}
    {{each nested}}
      {{tmpl($value) 'type-info-template'}}
      {{if $index < $item.lastIndex}}|{{/if}}
    {{/each}}
  {{else}}
    {{if typedoc}}
      <a style="cursor: pointer;" class="type" title="Click to show type information" onclick="showModal(document.querySelector('#type-modal-${typedoc}'))">${name}</a>
    {{else}}
      <span class="type">${name}</span>
    {{/if}}
    {{if nested.length}}
      [
      {{each nested}}
        {{tmpl($value) 'type-info-template'}}
        {{if $index < $item.lastIndex}},{{/if}}
      {{/each}}
      ]
    {{/if}}
  {{/if}}
</script>

<script type="text/x-jquery-tmpl" id="data-types-template">
  {{if typedocs.length}}
    <h2 id="Data types">Data types</h2>
    <div class="data-types">
      {{each typedocs}}
        {{tmpl($value) 'data-type-template'}}
      {{/each}}
    </div>
  {{/if}}
</script>

<script type="text/x-jquery-tmpl" id="data-type-template">
    <div class="data-type-container {{if hidden}}no-{{/if}}match" id="type-modal-${name}">
       <div class="data-type-name">
            <h2>${name} (${type})</h2>
       </div>
       <div class="data-type-content">
          {{if doc}}
            <div class="dt-docs">
              <h4>Documentation</h4>
              <div class="dtdoc doc">{{html doc}}</div>
            </div>
          {{/if}}
          {{if members}}
            <div class="dt-members">
              <h4>Allowed Values</h4>
              <ul class="enum-type-members">
                {{each members}}
                <li>
                  <span class="enum-member">${$value.name}</span>
                  {{if accepts.indexOf("integer") != -1}}
                    &nbsp; (<span class="enum-member">${$value.value}</span>)
                  {{/if}}
                </li>
                {{/each}}
              </ul>
            </div>
          {{else items}}
            <div class="dt-items">
              <h4>Dictionary Structure</h4>
                <div class="typed-dict-annotation">
                <span class="typed-dict-item"
                >{{{each items}}<br><span
                  {{if required !== null}}
                    class="td-item {{if required}}required-key{{else}}optional-key{{/if}}"
                    title="{{if required}}required-key{{else}}optional-key{{/if}}"
                  {{else}}
                    class="td-item"
                  {{/if}}
                 >'${key}': </span>
                   <span class="td-type">&lt;${type}&gt;</span>{{/each}}<br>}</span>
                </div>
            </div>
          {{/if}}
          {{if accepts.length}}
            <div class="dt-docs">
              <h4>Converted Types</h4>
              <ul class="dt-usages-list">
              {{each accepts}}
                <li>${$value}</li>
              {{/each}}
              </ul>
            </div>
          {{/if}}
          {{if usages.length}}
            <div class="dt-usages">
              <h4>Usages</h4>
              <ul class="dt-usages-list">
                {{each usages}}
                  <li><a href="#${encodeURIComponent($value)}">${$value}</a></li>
                {{/each}}
              </ul>
            </div>
          {{/if}}
       </div>
    </div>
</script>

<script type="text/x-jquery-tmpl" id="footer-template">
    <p class="footer">
        Generated by <a href="http://robotframework.org/robotframework/#built-in-tools">Libdoc</a> on ${generated}.
    </p>
</script>

</body>
</html>
