%PDF- %PDF-
| Direktori : /backups/router/usr/local/opnsense/mvc/app/views/OPNsense/Diagnostics/ |
| Current File : //backups/router/usr/local/opnsense/mvc/app/views/OPNsense/Diagnostics/treeview.volt |
{#
# Copyright (c) 2020-2024 Deciso B.V.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or withoutmodification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#}
<script>
$( document ).ready(function() {
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
$(".tab-icon").removeClass("fa-refresh");
if ($("#"+e.target.id).data('tree-target') !== undefined) {
$("#"+e.target.id).unbind('click').click(function(){
ajaxGet($("#"+e.target.id).data('tree-endpoint'), {}, function (data, status) {
if (status == "success") {
update_tree(data, "#" + $("#"+e.target.id).data('tree-target'));
}
});
});
if (!$("#"+e.target.id).hasClass("event-hooked")) {
$("#"+e.target.id).addClass("event-hooked")
$("#"+e.target.id).click();
}
$("#"+e.target.id).find(".tab-icon").addClass("fa-refresh");
}
$(window).trigger('resize');
});
/**
* resize tree height
*/
$(window).on('resize', function() {
let new_height = $(".page-foot").offset().top -
($(".page-content-head").offset().top + $(".page-content-head").height()) - 160;
$(".treewidget").height(new_height);
$(".treewidget").css('max-height', new_height + 'px');
});
/**
* hook delayed live-search tree view
*/
$(".tree_search").keyup(tree_delayed_live_search);
// update history on tab state and implement navigation
let selected_tab = window.location.hash != "" ? window.location.hash : "#{{default_tab}}";
$('a[href="' +selected_tab + '"]').click();
$('.nav-tabs a').on('shown.bs.tab', function (e) {
history.pushState(null, null, e.target.hash);
});
$(window).on('hashchange', function(e) {
$('a[href="' + window.location.hash + '"]').click()
});
});
</script>
<style>
#treeview .bootstrap-dialog-body {
overflow-x: auto;
}
#treeview .modal-dialog,
#treeview .modal-content {
height: 80%;
}
#treeview .modal-body {
height: calc(100% - 120px);
overflow-y: scroll;
}
@media (min-width: 768px) {
#treeview .modal-dialog {
width: 90%;
}
}
#treeview .searchbox {
margin: 8px;
}
#treeview .node-selected {
font-weight: bolder;
}
</style>
<ul class="nav nav-tabs" data-tabs="tabs" id="maintabs">
{% for tab in tabs %}
<li>
<a data-toggle="tab" href="#{{tab['name']}}" id="{{tab['name']}}_tab"
data-tree-target="{{tab['name']}}Tree"
data-tree-endpoint="{{tab['endpoint']}}">
{{tab['caption']}} <i class="fa tab-icon "></i>
</a>
</li>
{% endfor %}
</ul>
<div class="tab-content content-box" id="treeview">
{% for tab in tabs %}
<div id="{{tab['name']}}" class="tab-pane fade in active">
<div class="row">
<section class="col-xs-12">
<div class="content-box">
<div class="searchbox">
<input
id="{{tab['name']}}Search"
type="text"
for="{{tab['name']}}Tree"
class="tree_search"
placeholder="{{ lang._('search')}}"
></input>
</div>
<div class="treewidget" style="padding: 8px; overflow-y: scroll; height:400px;" id="{{tab['name']}}Tree"></div>
</div>
</section>
</div>
</div>
{% endfor %}
</div>