{{!-- 
  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 data-id="policyTypeTab">
		<ul class="nav nav-tabs tabs clearfix">
		{{#showRowLevelTab .}}
			<li data-tab="rowLevelFilter" class=""><a data-toggle="tab"
				href="#rowLevelFilter">Row Level Filter</a></li>
		{{/showRowLevelTab}}
		
		{{#showMaskingTab .}}
			<li data-tab="masking" class=""><a data-toggle="tab"
				href="#masking">Masking</a></li>
		{{/showMaskingTab}}
		{{#if isRenderAccessTab}}
			<li data-tab="access" class="active"><a data-toggle="tab"
				href="#access">Access</a></li>
		{{/if}}		
		</ul>
</div>
<h3 class="wrap-header bold"> {{tt 'lbl.listOfPolicies'}} : {{rangerService.attributes.displayName}} </h3>
<div class="wrap non-collapsible m-height ">
	<div>
        <div class="row-fluid margin-bottom-11">
            <div class="span9">
                <div class="visual_search"></div>
            </div>
            <div class="span1">
                <i class="icon-info-sign searchInfo margin-left-min-30" title="Search Filter Hints" data-id="searchInfo"> </i>
            </div>
            <div class="span2">
                <div class="clearfix btn-right">
                    {{#if isAddNewPolicyButtonShow}}
                            <a data-js="addNewPolicy" href="#!/service/{{rangerService.id}}/policies/create/{{this.rangerPolicyType}}" class="btn btn-primary " type="button">{{tt 'lbl.addNewPolicy'}} </a>
                    {{/if}}
                </div>
            </div>
        </div>
                <div data-id="r_table"></div>
	</div>
</div>

