<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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.
-->
<div class="paletteItemsFooter">
    <div ng-if="searchedItems.length === 0" class="icon no-match">
        <span>&oslash;</span>
    </div>
    <small class="help-block text-sm palette-footer-message" ng-class="{ 'no-match': searchedItems.length === 0 }">
        <span ng-if="search">
          <span ng-if="searchedItems.length === 0">
            <span ng-if="!skippingFilters && itemsBeforeActiveFilters.length > itemsAfterActiveFilters.length">
                    <strong>{{ itemsBeforeActiveFilters.length - itemsAfterActiveFilters.length }} 
                        <ng-pluralize count="itemsBeforeActiveFilters.length" when="{ '1': 'item', 'other': 'items' }"></<ng-pluralize></strong> 
                    matching search but excluded by filters. 
                    <button class="btn btn-outline btn-info" ng-click="disableFilters()">Clear filters</button>
            </span>
            <span ng-if="skippingFilters || itemsBeforeActiveFilters.length === 0">
                    No matches for <code>{{ search }}</code>.
            </span>
          </span>
          <span ng-if="searchedItems.length > 0">
            <span ng-if="skippingFilters">
                    <strong>No matches with selected filters.</strong><br/>
                    Showing matches ignoring filters.
            </span>
            <span ng-if="!skippingFilters && itemsBeforeActiveFilters.length > itemsAfterActiveFilters.length">
                    <strong>{{ itemsBeforeActiveFilters.length - itemsAfterActiveFilters.length }} more 
                        <ng-pluralize count="itemsBeforeActiveFilters.length" when="{ '1': 'item', 'other': 'items' }"></<ng-pluralize></strong> 
                    matching search but excluded by filters.
                    <button class="btn btn-outline btn-info" ng-click="disableFilters()">Clear filters</button>
            </span>
          </span>
        </span>
        <span ng-if="!search">
            <span ng-if="itemsBeforeActiveFilters.length == 0">
                <strong>Nothing available.</strong>
            </span>
            <span ng-if="skippingFilters && searchedItems.length > 0">
                    <strong>Nothing available in selected filters.</strong><br/>
                    Ignoring filters.
            </span>
            <span ng-if="!skippingFilters && itemsBeforeActiveFilters.length > itemsAfterActiveFilters.length">
                    <strong>{{ itemsBeforeActiveFilters.length - itemsAfterActiveFilters.length }} more 
                        <ng-pluralize count="itemsBeforeActiveFilters.length" when="{ '1': 'item', 'other': 'items' }"></<ng-pluralize></strong> 
                    excluded by filters. 
                    <button class="btn btn-outline btn-info" ng-click="disableFilters()">Clear filters</button>
            </span>
        </span>
        
    </small>
</div>
