<!--

  This in an HTML Import-able file that contains the definition
  of the following elements:

    <fuzzer-filter-sk>

  This element encapsulates the filtering mechanism for the fuzzer ui.

  To use this file import it:

    <link href="/res/imp/fuzzer-filter-sk.html" rel="import" />

  Usage:

    <fuzzer-filter-sk></fuzzer-filter-sk>

  Properties:
    include - An Array of strings that should be a part of the "include" filter.
        This is sorted via sk.sortStrings.
    exclude - An Array of strings that should be a part of the "exclude" filter.
        This is sorted via sk.sortStrings.

  Methods:
    None.

  Events:
    None.
-->

<link rel="import" href="/res/imp/bower_components/paper-input/paper-input.html">
<link rel="import" href="/res/common/imp/url-params-sk.html">
<link rel="import" href="/res/common/imp/select-status-sk.html">

<dom-module id="fuzzer-filter-sk">
  <template>
  <style>
  #wrapper {
    padding: 5px;
  }

  .selector {
    max-width:240px;
    display:inline-block;
  }

  option {
    min-width: 200px;
  }
  </style>

    <url-param-sk name="include" value="{{_include}}" multi></url-param-sk>
    <url-param-sk name="exclude" value="{{_exclude}}" multi></url-param-sk>
    <url-param-sk name="architecture" value="{{_architecture}}" multi></url-param-sk>

    <div id="wrapper">
      <div class="selector">
        <div>Include</div>
        <select id="include" size="9" multiple>
        <!-- These are from result.go, arranged in order by estimated usefullness.-->
          <option value="ASAN_global-buffer-overflow">ASAN_global-buffer-overflow</option>
          <option value="ASAN_heap-buffer-overflow">ASAN_heap-buffer-overflow</option>
          <option value="ASAN_stack-buffer-overflow">ASAN_stack-buffer-overflow</option>
          <option value="ASAN_heap-use-after-free">ASAN_heap-use-after-free</option>

          <option value="Other">Other</option>
          <option value="SKAbortHit">SKAbortHit</option>
          <option value="BadAlloc">BadAlloc</option>
          <option value="TerminatedGracefully">TerminatedGracefully</option>
          <option value="ClangCrashed">ClangCrashed</option>
          <option value="ASANCrashed">ASANCrashed</option>
          <option value="NoStackTrace">NoStackTrace</option>
          <option value="TimedOut">TimedOut</option>
        </select>
        <select-status-sk id="includestatus" values="{{_include}}" clear></select-status-sk>
      </div>


      <div class="selector">
        <div>Exclude</div>
        <select id="exclude" size="9" multiple>
        <!-- These are from result.go, arranged in order by estimated usefullness.-->
          <option value="ASAN_global-buffer-overflow">ASAN_global-buffer-overflow</option>
          <option value="ASAN_heap-buffer-overflow">ASAN_heap-buffer-overflow</option>
          <option value="ASAN_stack-buffer-overflow">ASAN_stack-buffer-overflow</option>
          <option value="ASAN_heap-use-after-free">ASAN_heap-use-after-free</option>

          <option value="Other">Other</option>
          <option value="SKAbortHit">SKAbortHit</option>
          <option value="BadAlloc">BadAlloc</option>
          <option value="TerminatedGracefully">TerminatedGracefully</option>
          <option value="ClangCrashed">ClangCrashed</option>
          <option value="ASANCrashed">ASANCrashed</option>
          <option value="NoStackTrace">NoStackTrace</option>
          <option value="TimedOut">TimedOut</option>
        </select>
        <select-status-sk id="excludestatus" values="{{_exclude}}" clear></select-status-sk>
      </div>

      <div class="selector">
        <div>OS/Architecture</div>
        <select id="architecture" size="3" multiple>
          <option value="linux_x64">Linux x64</option>
        </select>
        <select-status-sk id="architecturestatus" values="{{_architecture}}" clear></select-status-sk>
      </div>
    </div>

  </template>

  <script>
    Polymer({
      is: "fuzzer-filter-sk",

      properties: {
        // We want the child elements (url-param and multi-select) to be able to be bound together.
        // However, we don't want anything the parent element does to mess up the filters.
        // Using the standard "readOnly":true allows the latter, but doesn't allow the child
        // elements to bind, so we add in this computed element which returns the
        // (sorted) elements.
        architecture: {
          type: String,
          computed: "_sort(_architecture)",
          notify: true,
        },
        exclude: {
          type: Array,
          computed: "_sort(_exclude)",
          notify: true,
        },
        include: {
          type: Array,
          computed: "_sort(_include)",
          notify: true,
        },
        _architecture: {
          type: String,
        },
        _exclude: {
          type: Array,
          // no default value to avoid clobbering default value in the url parameters
        },
        _include: {
          type: Array,
          // no default value to avoid clobbering default value in the url parameters
        },
      },

      attached: function() {
        this.$.includestatus.setTarget(this.$.include);
        this.$.excludestatus.setTarget(this.$.exclude);
        this.$.architecturestatus.setTarget(this.$.architecture);
      },

      _sort: function(val) {
        if (!val) {
          return [];
        }
        return val.sort();
      },

    });
  </script>
</dom-module>
