<!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);
</script>

<script type="text/javascript">

    function linkArgs(container, dataTypes, usageName) {
      container.forEach(function(keyword) {
        let user = usageName || keyword.name
          keyword.args.forEach(function (arg) {
            arg.linked = arg.types.filter(function(value) {
              return dataTypes.filter(function (dataType) {
                 if (dataType.name === value) {
                   if (dataType.usage.indexOf(user) === -1) {
                    dataType.usage.push(user);
                   }
                   return true;
                 }
                 return false;
              })[0];
            });
          })
        }
      );
    }

    $(document).ready(function() {
        parseTemplates();
        document.title = libdoc.name;
        storage.init('libdoc');
        libdoc.dataTypes = libdoc.dataTypes.enums.concat(libdoc.dataTypes.typedDicts);
        libdoc.dataTypes = libdoc.dataTypes.map(function(dt) {
          dt.usage = [];
          return dt;
        })
        libdoc.dataTypes.sort(compare)
        linkArgs(libdoc.inits, libdoc.dataTypes, "Importing");
        linkArgs(libdoc.keywords, libdoc.dataTypes);
        renderTemplate('base', libdoc, $('body'));
        if (libdoc.inits.length) {
            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);
    });

     function compare( a, b ) {
      if ( a.name < b.name ){
        return -1;
      }
      if ( a.name > b.name ){
        return 1;
      }
      return 0;
    }

    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).replace('+', ' ');
            window.location.hash = '';
            window.location.hash = hash;
        }
    }

    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.dataTypes.length) {
          document.getElementById("type-statistics-header").innerText = '' + libdoc.dataTypes.length;
        }
        history.replaceState && history.replaceState(null, '', location.pathname);
    }

    // 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 libdoc.tags.length && tags.length}}
              <div class="tags">
                <h4>Tags</h4>
                {{each tags}}
                  <a href="javascript:tagSearch('${$value}')"
                    title="Show keywords with this tag">${$value}</a>{{if $index < tags.length-1}},<br>{{/if}}
                {{/each}}
              </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 types.length}}
  <span class="arg-type" title="Argument '${name}' will be converter to type ${types}">
    ${( $data.linked = linked ),''}
    {{each types}}&lt;{{if $data.linked.indexOf($value) > -1}}<a class="type" href="#${$value}">${$value}</a>{{else}}<span class="type">${$value}</span>{{/if}}&gt;<span class="or"></span>{{/each}}
  </span>
{{/if}}
</script>


<script type="text/x-jquery-tmpl" id="data-types-template">
    {{if dataTypes.length}}
    <h2 id="Data types">Data types</h2>
    <div class="data-types">
        {{each dataTypes}}
        {{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="${name}">
       <div class="data-type-name">
            <h2>Type:
            <a class="dt-name" href="#${encodeURIComponent(name)}"
               title="Link to this data type">${name}</a>
            </h2>
       </div>
       <div class="data-type-content">
          {{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>
                </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 doc}}
            <div class="dt-docs">
              <h4>Documentation</h4>
              <div class="dtdoc doc">{{html doc}}</div>
            </div>
          {{/if}}
          {{if usage}}
            <div class="dt-usage">
              <h4>Used in</h4>
              <ul class="dt-usage-list">
                {{each usage}}
                <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>
