{{!-- 
  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.
--}}
<h3 class="wrap-header bold"> {{tt 'lbl.listOfPolicies'}} : {{assetModel.attributes.name}} </h3>
<div class="wrap non-collapsible m-height ">
	<div>
		<div class="span9">
			<div class="visual_search"></div>
		</div>
		<div class="clearfix">
			<a href="#!/hbase/{{assetId}}/policy/create" class="btn btn-primary btn-right" type="button"> {{tt 'lbl.addNewPolicy'}} </a>
		{{#if isSysAdmin}}
			{{#if version}}	
				<a href="javascript:void(0);" data-js="export" class="btn btn-black btn-right">{{tt 'lbl.exports'}}</a> 
			{{/if}}	
		{{/if}}	
			<div data-id="r_filter" class="wrap-filter pull-left"></div>
		</div>
		
		<div data-id="r_tableList" class="clickable">
		</div>
	</div>

	<!-- <div class="span3" style="margin-top:39px">
		<div id="policyDetail"></div>
	</div> -->
</div>

