<!--
Copyright (C) 2017 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<link rel="import" href="../base-url-behavior/base-url-behavior.html">
<link rel="import" href="../gr-url-encoding-behavior.html">
<script>
(function(window) {
  'use strict';

  window.Gerrit = window.Gerrit || {};

  /** @polymerBehavior Gerrit.ListViewBehavior */
  Gerrit.ListViewBehavior = [{
    computeLoadingClass(loading) {
      return loading ? 'loading' : '';
    },

    computeShownItems(items) {
      return items.slice(0, 25);
    },

    getUrl(path, item) {
      return this.getBaseUrl() + path + this.encodeURL(item, true);
    },

    /**
     * @param {Object} params
     * @return {string}
     */
    getFilterValue(params) {
      if (!params) { return ''; }
      return params.filter || '';
    },

    /**
     * @param {Object} params
     * @return {number}
     */
    getOffsetValue(params) {
      if (params && params.offset) {
        return params.offset;
      }
      return 0;
    },
  },
    Gerrit.BaseUrlBehavior,
    Gerrit.URLEncodingBehavior,
  ];
})(window);
</script>
