Merge branch 'bootstrap5' into dev

This commit is contained in:
Matteo Biscosi 2021-05-18 11:40:37 +02:00
commit 33d06f57f2
252 changed files with 60805 additions and 30259 deletions

View file

@ -34,9 +34,9 @@ print(
print[[
<H3>]] print(i18n("dhcp.dhcp")) print[[</H3>
<form id="table-dhcp-form" method="post" data-toggle="validator">
<form id="table-dhcp-form" method="post" data-bs-toggle="validator">
<div id="table-dhcp"></div>
<div class='text-right'>
<div class='text-end'>
<button id="dhcp-save" class="btn btn-primary mb-1" onclick="if($(this).hasClass('disabled')) return false;" type="submit">]] print(i18n("save_settings")) print[[</button>
</div>
</form>
@ -51,7 +51,7 @@ print[[
title: "",
forceTable: true,
buttons: [
'<a id="addRangeBtn" onclick="addDhcpRow()" role="button" class="add-on btn" data-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>'
'<a id="addRangeBtn" onclick="addDhcpRow()" role="button" class="add-on btn" data-bs-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>'
], columns: [
{
title: "]] print(i18n("nedge.dhcp_first_ip")) print[[",
@ -102,7 +102,7 @@ print[[
var name = "input_id_" + input_id;
input_id++;
var container = $("<div class='form-group has-feedback' style='margin-bottom:0'></div>");
var container = $("<div class='form-group mb-3 has-feedback' style='margin-bottom:0'></div>");
var input = $("<input class='form-control' data-ipaddress='ipaddress' required>")
.attr("name", name)

View file

@ -62,8 +62,8 @@ elseif _POST["action"] == "update" then
local list_name = _POST["list_name"]
lists_utils.updateList(list_name)
print('<div class="alert alert-success alert-dismissable"><a href="" class="close" data-dismiss="alert" aria-label="close">&times;</a>'..
i18n('category_lists.list_will_be_updated', {name=list_name}) .. '</div>')
print('<div class="alert alert-success alert-dismissable">'..
i18n('category_lists.list_will_be_updated', {name=list_name}) .. '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
end
print[[
@ -82,30 +82,30 @@ print[[
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">]] print(i18n("category_lists.edit_list")) print[[</h5>
<button type="button" class="close" data-dismiss="modal">&times;</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form id="edit-list-form" method="post" data-toggle="validator">
<form id="edit-list-form" method="post" data-bs-toggle="validator">
<div class="modal-body">
<div class="container-fluid">
<input type="hidden" name="csrf" value="]] print(ntop.getRandomCSRFValue()) print[[" />
<input type="hidden" name="currentPage" value="]] print(currentPage) print [[" />
<input type="hidden" name="action" value="edit" />
<div class="row form-group has-feedback">
<div class="row form-group mb-3 has-feedback">
<div class="col col-md-12">
<label class="form-label">]] print(i18n("name")) print[[</label>
<input name="list_name" id="form-edit-name" class="form-control" type="text" readonly />
</div>
</div>
<div class="row form-group has-feedback">
<div class="row form-group mb-3 has-feedback">
<div class="col col-md-12">
<label class="form-label">]] print(i18n("flow_details.url")) print[[</label>
<input name="url" class="form-control" type="text" readonly />
</div>
</div>
<div class="row form-group">
<div class="row form-group mb-3">
<div class="col col-md-12">
<label class="form-label">]] print(i18n("category_lists.enabled")) print[[: </label>
<div class="custom-control custom-switch d-inline">
@ -115,10 +115,10 @@ print[[
</div>
</div>
<div class="row form-group">
<div class="row form-group mb-3">
<div class="col col-md-6">
<label class="form-label">]] print(i18n("category")) print[[</label>
<select name="category" class="form-control" readonly disabled="disabled">]]
<select name="category" class="form-select" readonly disabled="disabled">]]
for cat_name, cat_id in pairsByKeys(interface.getnDPICategories()) do
print(string.format([[<option value="cat_%s">%s</option>]], cat_id, getCategoryLabel(cat_name)))
@ -128,7 +128,7 @@ print[[
</div>
<div class="col col-md-6">
<label class="form-label">]] print(i18n("category_lists.update_frequency")) print[[</label>
<select name="list_update" class="form-control">
<select name="list_update" class="form-select">
<option value="86400">]] print(i18n("alerts_thresholds_config.daily")) print[[</option>
<option value="3600">]] print(i18n("alerts_thresholds_config.hourly")) print[[</option>
<option value="0">]] print(i18n("alerts_thresholds_config.manual")) print[[</option>
@ -138,7 +138,7 @@ print[[
</div>
</div>
<div class='modal-footer'>
<div class="form-group">
<div class="form-group mb-3">
<button type="submit" class="btn btn-primary btn-block">]] print(i18n("category_lists.edit_list")) print[[</button>
</div>
</div>

View file

@ -21,7 +21,7 @@ sendHTTPContentTypeHeader('application/json')
local function getListStatusLabel(list)
if not list.enabled then
return '<span class="badge badge-danger">'.. i18n("nedge.status_disabled") ..'</span>'
return '<span class="badge bg-danger">'.. i18n("nedge.status_disabled") ..'</span>'
end
if list.status.last_error then
@ -33,10 +33,10 @@ local function getListStatusLabel(list)
info_msg = list.status.last_error
end
return '<span title="'.. info_msg ..'" class="badge badge-danger">'.. i18n("error") .. info ..'</span>'
return '<span title="'.. info_msg ..'" class="badge bg-danger">'.. i18n("error") .. info ..'</span>'
end
return '<span class="badge badge-success">'.. i18n("category_lists.enabled") ..'</span>'
return '<span class="badge bg-success">'.. i18n("category_lists.enabled") ..'</span>'
end
-- ################################################

View file

@ -144,7 +144,7 @@ for app, _ in pairsByValues(sorter, sOrder) do
record["column_application_hosts"] = makeApplicationHostsList(app["app_name"])
record["column_is_custom"] = ntop.isCustomApplication(tonumber(app["app_id"]))
cat_select_dropdown = '<select class="form-control" style="width:320px;" name="proto_' .. app["app_id"] .. '">'
cat_select_dropdown = '<select class="form-select" style="width:320px;" name="proto_' .. app["app_id"] .. '">'
local current_id = tostring(app["cat"]["id"])
for cat_name, cat_id in pairsByKeys(categories, asc_insensitive) do

View file

@ -112,11 +112,11 @@ else
end
print (" \"column_group\" : \"" .. group_label .. "\", ")
print (" \"column_edit\" : \"<a href='#password_dialog' class='btn btn-sm btn-info' data-toggle='modal' onclick='return(reset_pwd_dialog(\\\"".. js_key.."\\\"));'><i class='fas fa-edit'></i></a> ")
print (" \"column_edit\" : \"<a href='#password_dialog' class='btn btn-sm btn-info' data-bs-toggle='modal' onclick='return(reset_pwd_dialog(\\\"".. js_key.."\\\"));'><i class='fas fa-edit'></i></a> ")
local can_be_deleted = (key ~= "admin" and key ~= logged_user)
print ("<a href='#delete_user_dialog' role='button' class='add-on btn btn-sm btn-danger ".. (not can_be_deleted and 'disabled' or '') .."' data-toggle='modal' id='delete_btn_" .. key .. "'><i class='fas fa-trash'></i></a><script> $('#delete_btn_" .. js_key .. "').on('mouseenter', function() { delete_user_alert.warning('" .. i18n("manage_users.confirm_delete_user", {user=key}) .. "'); $('#delete_dialog_username').val('" .. key .. "'); }); </script>")
print ("<a href='#delete_user_dialog' role='button' class='add-on btn btn-sm btn-danger ".. (not can_be_deleted and 'disabled' or '') .."' data-bs-toggle='modal' id='delete_btn_" .. key .. "'><i class='fas fa-trash'></i></a><script> $('#delete_btn_" .. js_key .. "').on('mouseenter', function() { delete_user_alert.warning('" .. i18n("manage_users.confirm_delete_user", {user=key}) .. "'); $('#delete_dialog_username').val('" .. key .. "'); }); </script>")
print ("\"}")
num = num + 1

View file

@ -201,14 +201,14 @@ elseif (_POST["member"] ~= nil) and (_POST["pool"] ~= nil) then
end
function printPoolNameField(pool_id_str)
print[[<div class="form-group has-feedback" style="margin-bottom:0;">]]
print[[<div class="form-group mb-3 has-feedback" style="margin-bottom:0;">]]
print[[<input name="pool_' + ]] print(pool_id_str) print[[ + '" class="form-control" spellcheck="false" data-unique="unique" placeholder="]] print(i18n("host_pools.specify_pool_name")) print[[" required/>]]
print[[<div class="help-block with-errors" style="margin-bottom:0;"></div>]]
print[[</div>]]
end
function printMemberAddressField(member_str, origin_value_str)
print[[<div class="form-group has-feedback" style="margin-bottom:0;">]]
print[[<div class="form-group mb-3 has-feedback" style="margin-bottom:0;">]]
print[[<input name="member_' + ]] print(member_str) print[[ + '" class="form-control" spellcheck="false" data-address="address" data-member="member" placeholder="]] print(i18n("host_pools.specify_member_address")) print[["]]
if not isEmptyString(origin_value_str) then
print[[ data-origin-value="' + ]] print(origin_value_str) print[[ + '"]]
@ -219,8 +219,8 @@ function printMemberAddressField(member_str, origin_value_str)
end
function printMemberVlanField(member_str)
print[[<div class="form-group has-feedback" style="margin-bottom:0;">]]
print[[<input name="member_' + ]] print(member_str) print[[ + '_vlan" class="form-control text-right" data-member="member" style="width:5em; padding-right:1em; margin: 0 auto;" type="number" min="0" value="0" required/>]]
print[[<div class="form-group mb-3 has-feedback" style="margin-bottom:0;">]]
print[[<input name="member_' + ]] print(member_str) print[[ + '_vlan" class="form-control text-end" data-member="member" style="width:5em; padding-right:1em; margin: 0 auto;" type="number" min="0" value="0" required/>]]
print[[<div class="help-block with-errors" style="margin-bottom:0;"></div>]]
print[[</div>]]
end
@ -268,15 +268,15 @@ local ifstats = interface.getStats()
print [[
<ul id="hostPoolsNav" class="nav nav-tabs" role="tablist">
<li class="nav-item"><a class="nav-link" data-toggle="tab" role="tab" href="#manage">]] print(i18n("host_pools.manage_pools")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" role="tab" href="#create">]] print(i18n("host_pools.create_pools")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" role="tab" href="#manage">]] print(i18n("host_pools.manage_pools")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" role="tab" href="#create">]] print(i18n("host_pools.create_pools")) print[[</a></li>
</ul>
<div class="tab-content">
<div id="manage" class="tab-pane">
<br/><table><tbody><tr>
]]
print('<td style="white-space:nowrap; padding-right:1em;">') print(i18n("host_pools.pool")) print(': <select id="pool_selector" class="form-control pool-selector" style="display:inline; width:14em;" onchange="document.location.href=\'?ifid=') print(ifId.."") print('&page=pools&pool=\' + $(this).val() + \'#manage\';">')
print('<td style="white-space:nowrap; padding-right:1em;">') print(i18n("host_pools.pool")) print(': <select id="pool_selector" class="form-select pool-selector" style="display:inline; width:14em;" onchange="document.location.href=\'?ifid=') print(ifId.."") print('&page=pools&pool=\' + $(this).val() + \'#manage\';">')
print(graph_utils.poolDropdown(ifId, selected_pool.id, {[host_pools_utils.DEFAULT_POOL_ID]=true}))
print('</select>')
@ -341,9 +341,8 @@ end
for _, msg in ipairs(pool_add_warnings) do
print([[
<div class="alert alert-warning alert-dismissible" style="margin-top:2em; margin-bottom:0em;">
<button type="button" class="close" data-dismiss="alert" aria-label="]]..i18n("close")..[[">
<span aria-hidden="true">&times;</span>
</button><b>]]..i18n("warning")..[[</b>: ]]..msg..[[
<b>]]..i18n("warning")..[[</b>: ]]..msg..[[
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>]])
end
@ -382,7 +381,7 @@ print[[
<input type="hidden" name="download" value="true" />
<button type="submit" class="btn btn-secondary"><span>]] print(i18n("host_pools.config_export")) print[[</span></button>
</form>
<button id="import-modal-btn" data-toggle="modal" data-target="#import-modal" class="btn btn-secondary"><span>]] print(i18n("host_pools.config_import")) print[[</span></button>
<button id="import-modal-btn" data-bs-toggle="modal" data-target="#import-modal" class="btn btn-secondary"><span>]] print(i18n("host_pools.config_import")) print[[</span></button>
</div>
<br/><br/>]]
@ -458,7 +457,7 @@ print(
action = "changeMemberPool(change_member_id)",
title = i18n("host_pools.change_member_pool"),
message = i18n("host_pools.select_new_pool", {member='<span id="change_member_pool_dialog_member"></span>'}) ..
'<br><br><select class="form-control" id="changed_host_pool" style="width:15em;">'..
'<br><br><select class="form-select" id="changed_host_pool" style="width:15em;">'..
graph_utils.poolDropdown(ifId, "", {[selected_pool.id]=true, [host_pools_utils.DEFAULT_POOL_ID]=true})..
'</select>',
custom_alert_class = "",
@ -791,7 +790,7 @@ print [[/lua/get_host_pools.lua?ifid=]] print(ifId.."") print[[&pool=]] print(se
hidePerPage: true,
buttons: [
'<a id="addPoolMemberBtn" onclick="addPoolMember()" role="button" class="add-on btn" data-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>'
'<a id="addPoolMemberBtn" onclick="addPoolMember()" role="button" class="add-on btn" data-bs-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>'
], columns: [
{
title: "]] print(i18n("host_pools.member_address")) print[[",
@ -1082,7 +1081,7 @@ print [[/lua/get_host_pools.lua?ifid=]] print(ifId.."") print[[",
perPage: ]] print(perPagePools) print[[,
buttons: [
'<a id="addNewPoolBtn" onclick="addPool()" role="button" class="add-on btn" data-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>'
'<a id="addNewPoolBtn" onclick="addPool()" role="button" class="add-on btn" data-bs-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>'
], columns: [
{
field: "column_pool_id",

View file

@ -127,9 +127,9 @@ if auth.has_capability(auth.capabilities.preferences) then
prefs = ntop.getPrefs()
if not isEmptyString(message_info) then
print[[<div class="alert ]] print(message_severity) print[[" role="alert">]]
print[[<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>]]
print[[<div class="alert alert-dismissable ]] print(message_severity) print[[" role="alert">]]
print(message_info)
print[[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]]
print[[</div>]]
end

View file

@ -320,7 +320,7 @@ end
local base_url = build_query_url({'status', 'page', 'epoch_begin', 'epoch_end'})
local extra_range_buttons = [[
<div class='d-flex align-items-center mx-1'>
<div class='d-flex align-items-center me-1'>
<div class="btn-group" role="group">
<a href=']] .. base_url .. [[&status=historical&page=]].. page ..[[' class="btn btn-sm ]].. ternary(status == "historical", "btn-outline-primary active", "btn-outline-secondary") ..[[">]] .. i18n("show_alerts.past") .. [[</a>
<a href=']] .. base_url .. [[&status=engaged&page=]].. page ..[[' class="btn btn-sm ]].. ternary(status ~= "historical", "btn-outline-primary active", "btn-outline-secondary") ..[[">]] .. i18n("show_alerts.engaged") .. ternary(num_alerts_engaged_cur_entity > 0, string.format('<span class="badge badge-pill badge-secondary" style="float:right;margin-bottom:-10px;">%u</span>', num_alerts_engaged_cur_entity), "") .. [[</a>

View file

@ -213,7 +213,7 @@ if(application ~= nil) then
application_filter = '<span class="fas fa-filter"></span>'
end
local dt_buttons = "['<div class=\"btn-group\"><button class=\"btn btn-link dropdown-toggle\" data-toggle=\"dropdown\">"..i18n("flows_page.applications").. " " .. application_filter .. "<span class=\"caret\"></span></button> <ul class=\"dropdown-menu\" role=\"menu\" >"
local dt_buttons = "['<div class=\"btn-group\"><button class=\"btn btn-link dropdown-toggle\" data-bs-toggle=\"dropdown\">"..i18n("flows_page.applications").. " " .. application_filter .. "<span class=\"caret\"></span></button> <ul class=\"dropdown-menu\" role=\"menu\" >"
dt_buttons = dt_buttons..'<li><a class="dropdown-item" href="'..nav_url..'&page=flows">'..i18n("flows_page.all_proto")..'</a></li>'
local ndpi_stats = interface.getASInfo(asn)
@ -229,7 +229,7 @@ end
dt_buttons = dt_buttons .. "</ul>"
-- Hosts type dropdown
dt_buttons = dt_buttons .. '<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">' .. i18n("flows_page.hosts") .. '<span class="caret"></span></button><ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">'
dt_buttons = dt_buttons .. '<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">' .. i18n("flows_page.hosts") .. '<span class="caret"></span></button><ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">'
local flowhosts_type_params = table.clone(page_params)
flowhosts_type_params["flowhosts_type"] = nil
@ -245,7 +245,7 @@ dt_buttons = dt_buttons .. formatDropdownEntries({
dt_buttons = dt_buttons .. "</ul>"
-- IP version dropdown
dt_buttons = dt_buttons .. '<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">' .. i18n("flows_page.ip_version") .. '<span class="caret"></span></button><ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">'
dt_buttons = dt_buttons .. '<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">' .. i18n("flows_page.ip_version") .. '<span class="caret"></span></button><ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">'
local flowhosts_type_params = table.clone(page_params)
flowhosts_type_params["ipversion"] = nil

View file

@ -56,7 +56,7 @@ print [[
<div class="container">
<form id="form_add_user" role="form" data-toggle="validator" class="form-signin" onsubmit="return makeUsernameLowercase();" action="]] print(ntop.getHttpPrefix()) print[[/lua/authorize_captive.lua]]
<form id="form_add_user" role="form" data-bs-toggle="validator" class="form-signin" onsubmit="return makeUsernameLowercase();" action="]] print(ntop.getHttpPrefix()) print[[/lua/authorize_captive.lua]]
local r = _GET["referer"]
@ -79,7 +79,7 @@ end
print[[" method="POST">
<h2 class="form-signin-heading" style="font-weight: bold;">]] print(info["product"]) print [[ Access Portal</h2>
<div class="form-group has-feedback">
<div class="form-group mb-3 has-feedback">
<input type="hidden" class="form-control" name="username">
<input type="text" class="form-control" name="_username" placeholder="]] print(i18n("login.username")) print[[" pattern="^[\w\.%]{1,}$" required>
<input type="password" class="form-control" name="password" placeholder="]] print(i18n("login.password")) print[[" pattern="]] print(getPasswordInputPattern()) print[[" required>

View file

@ -80,20 +80,20 @@ print [[
<div class="container">
<form role="form" data-toggle="validator" class="form-signin" method="POST">
<form role="form" data-bs-toggle="validator" class="form-signin" method="POST">
<h2 class="form-signin-heading" style="font-weight: bold;">]] print(i18n("login.change_password")) print[[</h2>
<p>]] print(i18n("login.must_change_password")) print[[</p>
]]
if error_msg ~= nil then
print[[<div class="alert alert-danger alert-dismissable">
<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
]] print(error_msg) print[[.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>]]
end
print[[
<div class="form-group has-feedback">
<div class="form-group mb-3 has-feedback">
<input type="hidden" name="csrf" value="]] print(ntop.getRandomCSRFValue()) print[[" />
<input type="password" class="form-control" name="new_password" placeholder="]] print(i18n("login.password")) print[[" pattern="]] print(getPasswordInputPattern()) print[[" required>
<input type="password" class="form-control" name="confirm_password" placeholder="]] print(i18n("login.confirm_password")) print[[" pattern="]] print(getPasswordInputPattern()) print[[" required>
@ -102,12 +102,10 @@ print[[
]]
print[[
<label for="user_language">]] print(i18n("language")) print[[</label>
<label class='form-label' for="user_language">]] print(i18n("language")) print[[</label>
<div class="input-group mb-6">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-language" aria-hidden="true"></i></span>
</div>
<select id="user_language" name="user_language" class="form-control">]]
<select id="user_language" name="user_language" class="form-select">]]
for _, lang in ipairs(locales_utils.getAvailableLocales()) do
print('<option value="'..lang["code"]..'">'..i18n("locales." .. lang["code"])..'</option>')

View file

@ -132,7 +132,7 @@ elseif discovered["status"]["code"] == "OK" then -- everything is ok
buttons: []]
-- Manufacturer filter
print('\'<div class="btn-group float-right"><div class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..
print('\'<div class="btn-group float-right"><div class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..
i18n("mac_stats.manufacturer") .. ternary(not isEmptyString(manuf_filter), '<span class="fas fa-filter"></span>', '') ..
'<span class="caret"></span></div> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')
@ -153,7 +153,7 @@ elseif discovered["status"]["code"] == "OK" then -- everything is ok
-- Device Type filter
-- table.clone needed to modify some parameters while keeping the original unchanged
local type_params = table.clone(page_params)
print('\'<div class="btn-group"><div class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..
print('\'<div class="btn-group"><div class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..
i18n("details.device_type") .. ternary(not isEmptyString(devtype_filter), '<span class="fas fa-filter"></span>', '') ..
'<span class="caret"></span></div> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')
@ -172,7 +172,7 @@ elseif discovered["status"]["code"] == "OK" then -- everything is ok
-- OS filter
-- table.clone needed to modify some parameters while keeping the original unchanged
local os_params = table.clone(page_params)
print('\'<div class="btn-group"><div class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..
print('\'<div class="btn-group"><div class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..
i18n("os") .. ternary(not isEmptyString(os_filter), '<span class="fas fa-filter"></span>', '') ..
'<span class="caret"></span></div> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')

View file

@ -40,19 +40,19 @@ print [[
<b>]] print(i18n("export_data.hosts")) print[[:</b>
<br>
<div class="form-group form-inline">
<div class="btn-group btn-group-toggle" data-toggle="buttons" id="export_hosts_buttons" name="export_hosts_buttons">
<div class="form-group mb-3 form-inline">
<div class="btn-group btn-group-toggle" data-bs-toggle="buttons" id="export_hosts_buttons" name="export_hosts_buttons">
<label class="btn btn-secondary active">
<input type="radio" id="all_hosts" name="mode" value="all" autocomplete="off" data-toggle="toggle" checked="checked">]] print(i18n("export_data.all_hosts")) print[[
<input type="radio" id="all_hosts" name="mode" value="all" autocomplete="off" data-bs-toggle="toggle" checked="checked">]] print(i18n("export_data.all_hosts")) print[[
</label>
<label class="btn btn-secondary">
<input type="radio" id="local_hosts" name="mode" value="local" autocomplete="off" data-toggle=" toggle">]] print(i18n("export_data.local_hosts")) print[[
<input type="radio" id="local_hosts" name="mode" value="local" autocomplete="off" data-bs-toggle=" toggle">]] print(i18n("export_data.local_hosts")) print[[
</label>
<label class="btn btn-secondary">
<input type="radio" id="remote_hosts" name="mode" value="remote" autocomplete="off" data-toggle=" toggle">]] print(i18n("export_data.remote_hosts")) print[[
<input type="radio" id="remote_hosts" name="mode" value="remote" autocomplete="off" data-bs-toggle=" toggle">]] print(i18n("export_data.remote_hosts")) print[[
</label>
<label class="btn btn-secondary">
<input type="radio" id="single_host" name="mode" value="filtered" autocomplete="off" data-toggle=" toggle">]] print(i18n("export_data.single")) print[[
<input type="radio" id="single_host" name="mode" value="filtered" autocomplete="off" data-bs-toggle=" toggle">]] print(i18n("export_data.single")) print[[
</label>
</div>

View file

@ -508,7 +508,7 @@ local function printAddCustomHostRule(full_url)
local short_url = categories_utils.getSuggestedHostName(full_url)
-- Fill the category dropdown
local cat_select_dropdown = '<select id="flow_target_category" class="form-control">'
local cat_select_dropdown = '<select id="flow_target_category" class="form-select">'
for cat_name, cat_id in pairsByKeys(categories, asc_insensitive) do
cat_select_dropdown = cat_select_dropdown .. [[<option value="cat_]] ..cat_id .. [[">]] .. (i18n("ndpi_categories." .. cat_name) or cat_name) .. [[</option>]]
@ -516,7 +516,7 @@ local function printAddCustomHostRule(full_url)
cat_select_dropdown = cat_select_dropdown .. "</select>"
-- Fill the application dropdown
local app_select_dropdown = '<select id="flow_target_app" class="form-control" style="display:none">'
local app_select_dropdown = '<select id="flow_target_app" class="form-select" style="display:none">'
for proto_name, proto_id in pairsByKeys(protocols, asc_insensitive) do
app_select_dropdown = app_select_dropdown .. [[<option value="]] ..proto_id .. [[">]] .. proto_name .. [[</option>]]
@ -541,7 +541,7 @@ local function printAddCustomHostRule(full_url)
local rule_type_selection = ""
if protos_utils.hasProtosFile() then
rule_type_selection = i18n("flow_details.rule_type")..":"..[[<br><select id="new_rule_type" onchange="new_rule_dropdown_select(this)" class="form-control">
rule_type_selection = i18n("flow_details.rule_type")..":"..[[<br><select id="new_rule_type" onchange="new_rule_dropdown_select(this)" class="form-select">
<option value="application">]]..i18n("application")..[[</option>
<option value="category" selected>]]..i18n("category")..[[</option>
</select><br>]]
@ -1135,16 +1135,16 @@ else
end
if(flow["protos.tls.client_alpn"] ~= nil) then
print('<tr><th width=30%><a href="https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation" data-toggle="tooltip" title="ALPN">TLS ALPN</A></th><td colspan=2>'..page_utils.safe_html(flow["protos.tls.client_alpn"])..'</td></tr>\n')
print('<tr><th width=30%><a href="https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation" data-bs-toggle="tooltip" title="ALPN">TLS ALPN</A></th><td colspan=2>'..page_utils.safe_html(flow["protos.tls.client_alpn"])..'</td></tr>\n')
end
if(flow["protos.tls.client_tls_supported_versions"] ~= nil) then
print('<tr><th width=30%><a href="https://tools.ietf.org/html/rfc7301" data-toggle="tooltip">'.. i18n("flow_details.client_tls_supported_versions") ..'</A></th><td colspan=2>'..page_utils.safe_html(flow["protos.tls.client_tls_supported_versions"])..'</td></tr>\n')
print('<tr><th width=30%><a href="https://tools.ietf.org/html/rfc7301" data-bs-toggle="tooltip">'.. i18n("flow_details.client_tls_supported_versions") ..'</A></th><td colspan=2>'..page_utils.safe_html(flow["protos.tls.client_tls_supported_versions"])..'</td></tr>\n')
end
if((flow["tcp.max_thpt.cli2srv"] ~= nil) and (flow["tcp.max_thpt.cli2srv"] > 0)) then
print("<tr><th width=30%>"..
'<a href="https://en.wikipedia.org/wiki/TCP_tuning" data-toggle="tooltip" target=\"_blank\" title="'..i18n("flow_details.computed_as_tcp_window_size_rtt")..'">'..
'<a href="https://en.wikipedia.org/wiki/TCP_tuning" data-bs-toggle="tooltip" target=\"_blank\" title="'..i18n("flow_details.computed_as_tcp_window_size_rtt")..'">'..
i18n("flow_details.max_estimated_tcp_throughput").."</a> <i class=\"fas fa-external-link-alt\"></i><td nowrap> "..i18n("client").." <i class=\"fas fa-arrow-right\"></i> "..i18n("server")..": ")
print(bitsToSize(flow["tcp.max_thpt.cli2srv"]))
print("</td><td> "..i18n("client").." <i class=\"fas fa-arrow-left\"></i> "..i18n("server")..": ")
@ -1433,7 +1433,7 @@ else
end
if(flow["profile"] ~= nil) then
print("<tr><th width=30%><A HREF=\"".. ntop.getHttpPrefix() .."/lua/pro/admin/edit_profiles.lua\">"..i18n("flow_details.profile_name").."</A></th><td colspan=2><span class='badge badge-primary'>"..flow["profile"].."</span></td></tr>\n")
print("<tr><th width=30%><A HREF=\"".. ntop.getHttpPrefix() .."/lua/pro/admin/edit_profiles.lua\">"..i18n("flow_details.profile_name").."</A></th><td colspan=2><span class='badge bg-primary'>"..flow["profile"].."</span></td></tr>\n")
end
if(flow.src_as or flow.dst_as) then

View file

@ -177,7 +177,7 @@ if table.len(page_params) > 0 then
<div class="up">
<i class="fas fa-arrow-up" data-original-title="" title=""></i>
<span id="upload-filter-traffic-chart" class="line">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span>
<div class='d-inline-block text-right' style='width: 11ch'>
<div class='d-inline-block text-end' style='width: 11ch'>
<span id="upload-filter-traffic-value">0 kbit/s</span> |
</div>
<span id="filtered-flows-tot-bytes">]] print(i18n("flows_page.tot_bytes")) print[[</span>
@ -186,7 +186,7 @@ if table.len(page_params) > 0 then
<div class="down">
<i class="fas fa-arrow-down" data-original-title="" title=""></i>
<span id="download-filter-traffic-chart" class="line">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span>
<div class='d-inline-block text-right' style='width: 11ch'>
<div class='d-inline-block text-end' style='width: 11ch'>
<span id="download-filter-traffic-value">0 kbit/s</span> |
</div>
<span id="filtered-flows-tot-throughput">]] print(i18n("flows_page.tot_throughput")) print[[</span>

View file

@ -94,7 +94,7 @@ for key in pairsByValues(sort_to_key, sOrder) do
local column_info = "<a href='"
..ntop.getHttpPrefix().."/lua/flows_stats.lua?container="..key.."'>"
.."<span class='badge badge-info'>"..i18n("flows").."</span>"
.."<span class='badge bg-info'>"..i18n("flows").."</span>"
.."</a>"
local chart = "-"

View file

@ -181,10 +181,10 @@ else
flow["PROTOCOL"] = base.."&protocol=&port=&host=&l4proto="..flow["PROTOCOL"].."'>"..pname.."</A>"
flow["L7_PROTO"] = base.."&port=&host=&l4proto=&protocol="..flow["L7_PROTO"].."'>"..getApplicationLabel(interface.getnDPIProtoName(tonumber(flow["L7_PROTO"]))).."</A>"
flow["FLOW_URL"] = base.."&row_id="..flow["idx"].."&version="..ip_version.."'><span class='badge badge-info'>Info</span></A>"
flow["FLOW_URL"] = base.."&row_id="..flow["idx"].."&version="..ip_version.."'><span class='badge bg-info'>Info</span></A>"
if flow["PROFILE"] ~= nil and flow["PROFILE"] ~="" then
flow["INFO"] = "<span class='badge badge-primary'>"..flow["PROFILE"].."</span>&nbsp;"..flow["INFO"]
flow["INFO"] = "<span class='badge bg-primary'>"..flow["PROFILE"].."</span>&nbsp;"..flow["INFO"]
end
else

View file

@ -95,7 +95,7 @@ for key, value in ipairs(flows_stats) do
info = string.format("<i>%s</i>", info)
end
info = shortenString(info)
flows_stats[key]["info"] = "<span data-toggle='tooltip' title='"..alt_info.."'>"..info.."</span>"
flows_stats[key]["info"] = "<span data-bs-toggle='tooltip' title='"..alt_info.."'>"..info.."</span>"
end

View file

@ -64,11 +64,11 @@ end
local function status2label(status)
if status == "running" then
return([[<span class="badge badge-success">]] .. i18n("running") .. [[</span>]])
return([[<span class="badge bg-success">]] .. i18n("running") .. [[</span>]])
elseif status == "queued" then
return([[<span class="badge badge-warning">]] .. i18n("internals.queued") .. [[</span>]])
return([[<span class="badge bg-warning">]] .. i18n("internals.queued") .. [[</span>]])
elseif status == "sleeping" then
return([[<span class="badge badge-secondary">]] .. i18n("internals.sleeping") .. [[</span>]])
return([[<span class="badge bg-secondary">]] .. i18n("internals.sleeping") .. [[</span>]])
else
return("")
end
@ -304,7 +304,7 @@ for key in pairsByValues(sort_to_key, sOrder) do
activity_desc = ""
end
-- local activity_name = string.format("<span id='%s' data-toggle='popover' data-trigger='hover' data-placement='top' title='%s' data-content='%s'>%s</span><script>$('#%s').popover('hide');$('#%s').popover({placement : 'top', trigger : 'hover'});</script>", activity_id, script_stats.script, i18n("periodic_activities_descr."..script_stats.script), script_stats.script, activity_id, activity_id)
-- local activity_name = string.format("<span id='%s' data-bs-toggle='popover' data-trigger='hover' data-placement='top' title='%s' data-content='%s'>%s</span><script>$('#%s').popover('hide');$('#%s').popover({placement : 'top', trigger : 'hover'});</script>", activity_id, script_stats.script, i18n("periodic_activities_descr."..script_stats.script), script_stats.script, activity_id, activity_id)
local activity_name = string.format("<span id='%s' title='%s'>%s</span>", activity_id, i18n("periodic_activities_descr."..script_stats.script), script_stats.script)
record["column_periodic_activity_name"] = warn .. activity_name .. activity_desc

View file

@ -93,7 +93,7 @@ for key in pairsByValues(sort_to_key, sOrder) do
local column_info = "<a href='"
..ntop.getHttpPrefix().."/lua/flows_stats.lua?pod="..key.."'>"
.."<span class='badge badge-info'>"..i18n("flows").."</span>"
.."<span class='badge bg-info'>"..i18n("flows").."</span>"
.."</a>"
local chart = "-"

View file

@ -136,7 +136,7 @@ local function scoreBreakdown(what)
score_category_network = (score_category_network*100)/tot
score_category_security = 100 - score_category_network
print('<span class="progress w-100 ml-1"><span class="progress-bar bg-warning" style="width: '..score_category_network..'%;">'.. i18n("flow_details.score_category_network"))
print('<span class="progress w-100 ms-1"><span class="progress-bar bg-warning" style="width: '..score_category_network..'%;">'.. i18n("flow_details.score_category_network"))
print('</span><span class="progress-bar bg-info" style="width: ' .. score_category_security .. '%;">' .. i18n("flow_details.score_category_security") .. '</span></span>\n')
else
print("&nbsp;")
@ -257,8 +257,8 @@ else
interface.resetHostStats(hostkey, true)
elseif interface.resetHostStats(hostkey) then
print("<div class=\"alert alert alert-success\">")
print[[<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>]]
print(i18n("host_details.reset_stats_in_progress"))
print[[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]]
print("</div>")
end
end
@ -467,7 +467,7 @@ else
active = page == "periodicity_map",
page_name = "periodicity_map",
url = periodicity_map_link,
label = "<i class=\"fas fa-lg fa-clock\"></i> <span style='position: absolute; top: 0' class=\"badge badge-pill badge-secondary\">"..num_periodicity.."</span>",
label = "<i class=\"fas fa-lg fa-clock\"></i> <span style='position: absolute; top: 0' class=\"badge bg-pill bg-secondary\">"..num_periodicity.."</span>",
},
{
hidden = not service_map_available,
@ -597,15 +597,15 @@ if((page == "overview") or (page == nil)) then
print(format_utils.formatFullAddressCategory(host))
if(host.services) then
if(host.services.dhcp) then print(' <span class="badge badge-info">'..i18n("details.label_dhcp_server")..'</span>') end
if(host.services.dns) then print(' <span class="badge badge-info">'..i18n("details.label_dns_server")..'</span>') end
if(host.services.smtp) then print(' <span class="badge badge-info">'..i18n("details.label_smtp_server")..'</span>') end
if(host.services.ntp) then print(' <span class="badge badge-info">'..i18n("details.label_ntp_server")..'</span>') end
if(host.services.dhcp) then print(' <span class="badge bg-info">'..i18n("details.label_dhcp_server")..'</span>') end
if(host.services.dns) then print(' <span class="badge bg-info">'..i18n("details.label_dns_server")..'</span>') end
if(host.services.smtp) then print(' <span class="badge bg-info">'..i18n("details.label_smtp_server")..'</span>') end
if(host.services.ntp) then print(' <span class="badge bg-info">'..i18n("details.label_ntp_server")..'</span>') end
end
if(host["dhcp_server"] == true) then print(' <span class="badge badge-info">'..i18n("details.label_dhcp_server")..'</span>') end
if(host["systemhost"] == true) then print(' <span class="badge badge-info"><i class=\"fas fa-flag\" title=\"'..i18n("details.label_system_ip")..'\"></i></span>') end
if(host["is_blacklisted"] == true) then print(' <span class="badge badge-danger">'..i18n("details.label_blacklisted_host")..'</span>') end
if(host["dhcp_server"] == true) then print(' <span class="badge bg-info">'..i18n("details.label_dhcp_server")..'</span>') end
if(host["systemhost"] == true) then print(' <span class="badge bg-info"><i class=\"fas fa-flag\" title=\"'..i18n("details.label_system_ip")..'\"></i></span>') end
if(host["is_blacklisted"] == true) then print(' <span class="badge bg-danger">'..i18n("details.label_blacklisted_host")..'</span>') end
if((host["privatehost"] == false) and (host["is_multicast"] == false) and (host["is_broadcast"] == false)) then
print(' <A HREF="https://www.virustotal.com/gui/ip-address/'.. host["ip"] ..'/detection" target=_blank><img width="100" height="20" src=\"'
..ntop.getHttpPrefix()..'/img/virustotal.svg\"></A> <i class=\"fas fa-external-link-alt\"></i>')
@ -634,7 +634,7 @@ if isScoreEnabled() then
print("<tr>")
print("<td>")
print("<div class='d-flex align-items-center'>")
print("<span id='score_as_client'>".. (host["score.as_client"] or 0) .."</span> <span class='ml-1' id='client_score_trend'></span>")
print("<span id='score_as_client'>".. (host["score.as_client"] or 0) .."</span> <span class='ms-1' id='client_score_trend'></span>")
if c then
scoreBreakdown(c)
end
@ -643,7 +643,7 @@ if isScoreEnabled() then
print("<td>")
print("<div class='d-flex align-items-center'>")
print("<span id='score_as_server'>".. (host["score.as_server"] or 0).."</span><span class='ml-1' id='server_score_trend'></span>")
print("<span id='score_as_server'>".. (host["score.as_server"] or 0).."</span><span class='ms-1' id='server_score_trend'></span>")
if s then
scoreBreakdown(s)
end
@ -948,7 +948,7 @@ end
local totr = 0 for key, value in pairs(host["pktStats.recv"]["size"]) do totr = totr + value end
if((tots > 0) or (totr > 0)) then
print('<tr><th class="text-left">'..i18n("packets_page.sent_vs_rcvd_distribution")..'</th>')
print('<tr><th class="text-start">'..i18n("packets_page.sent_vs_rcvd_distribution")..'</th>')
if(tots > 0) then
print('<td colspan=1><div class="pie-chart" id="sizeSentDistro"></div></td>')
else
@ -967,14 +967,14 @@ end
local has_arp_distro = (not isEmptyString(host["mac"])) and (host["mac"] ~= "00:00:00:00:00:00")
if(has_tcp_distro and has_arp_distro) then
print('<tr><th class="text-left">'..i18n("packets_page.tcp_flags_vs_arp_distribution")..'</th><td colspan=1><div class="pie-chart" id="flagsDistro"></div></td><td colspan=1><div class="pie-chart" id="arpDistro"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("packets_page.tcp_flags_vs_arp_distribution")..'</th><td colspan=1><div class="pie-chart" id="flagsDistro"></div></td><td colspan=1><div class="pie-chart" id="arpDistro"></div></td></tr>')
else
if (has_tcp_distro) then
print('<tr><th class="text-left">'..i18n("packets_page.tcp_flags_distribution")..'</th><td colspan=5><div class="pie-chart" id="flagsDistro"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("packets_page.tcp_flags_distribution")..'</th><td colspan=5><div class="pie-chart" id="flagsDistro"></div></td></tr>')
end
if (has_arp_distro) then
if (macinfo ~= nil) and (macinfo["arp_requests.sent"] + macinfo["arp_requests.rcvd"] + macinfo["arp_replies.sent"] + macinfo["arp_replies.rcvd"] > 0) then
print('<tr><th class="text-left">'..i18n("packets_page.arp_distribution")..'</th><td colspan=5><div class="pie-chart" id="arpDistro"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("packets_page.arp_distribution")..'</th><td colspan=5><div class="pie-chart" id="arpDistro"></div></td></tr>')
end
end
end
@ -1015,8 +1015,8 @@ print [[/lua/get_arp_data.lua', { ifid: "]] print(ifId.."") print ('", '..hostin
elseif((page == "DSCP")) then
print('<table class="table table-bordered table-striped">\n')
print('<tr><th class="text-left">'..i18n("dscp_page.statistics_sent")..'</th><td colspan=5><div class="pie-chart" id="dscpPrecedenceSent"></div></td></tr>')
print('<tr><th class="text-left">'..i18n("dscp_page.statistics_received")..'</th><td colspan=5><div class="pie-chart" id="dscpPrecedenceReceived"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("dscp_page.statistics_sent")..'</th><td colspan=5><div class="pie-chart" id="dscpPrecedenceSent"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("dscp_page.statistics_received")..'</th><td colspan=5><div class="pie-chart" id="dscpPrecedenceReceived"></div></td></tr>')
print [[
</table>
@ -1034,13 +1034,13 @@ print [[/lua/get_arp_data.lua', { ifid: "]] print(ifId.."") print ('", '..hostin
elseif((page == "ports")) then
print('<table class="table table-bordered table-striped">\n')
if(host.cardinality) then
print('<tr><th class="text-left">'..i18n("ports_page.num_contacted_ports")..'</th>')
print('<th class="text-left">'..i18n("ports_page.num_contacted_ports_as_client")..'</th><td><span id="num_contacted_ports_as_client">'.. formatValue(host.cardinality.num_contacted_ports_as_client) ..'</span> <span id="num_contacted_ports_as_client_trend"></span></td>')
print('<th class="text-left">'..i18n("ports_page.num_host_contacted_ports_as_server")..'</th><td><span id="num_host_contacted_ports_as_server">'.. formatValue(host.cardinality.num_host_contacted_ports_as_server) ..'</span> <span id="num_host_contacted_ports_as_server_trend"></span></td>')
print('<tr><th class="text-start">'..i18n("ports_page.num_contacted_ports")..'</th>')
print('<th class="text-start">'..i18n("ports_page.num_contacted_ports_as_client")..'</th><td><span id="num_contacted_ports_as_client">'.. formatValue(host.cardinality.num_contacted_ports_as_client) ..'</span> <span id="num_contacted_ports_as_client_trend"></span></td>')
print('<th class="text-start">'..i18n("ports_page.num_host_contacted_ports_as_server")..'</th><td><span id="num_host_contacted_ports_as_server">'.. formatValue(host.cardinality.num_host_contacted_ports_as_server) ..'</span> <span id="num_host_contacted_ports_as_server_trend"></span></td>')
print('</tr>')
end
print('<tr><th class="text-left">'..i18n("ports_page.client_ports")..'</th><td colspan=5><div class="pie-chart" id="clientPortsDistro"></div></td></tr>')
print('<tr><th class="text-left">'..i18n("ports_page.server_ports")..'</th><td colspan=5><div class="pie-chart" id="serverPortsDistro"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("ports_page.client_ports")..'</th><td colspan=5><div class="pie-chart" id="clientPortsDistro"></div></td></tr>')
print('<tr><th class="text-start">'..i18n("ports_page.server_ports")..'</th><td colspan=5><div class="pie-chart" id="serverPortsDistro"></div></td></tr>')
print [[
</table>
@ -1211,16 +1211,16 @@ end
<table class="table table-bordered table-striped">]]
if(host.cardinality) then
print('<tr><th colspan="2" class="text-left">'..i18n("traffic_page.hosts_contacts_cardinality")..'</th>')
print('<th class="text-left">'..i18n("traffic_page.num_contacted_hosts_as_client")..'</th><td><span id="num_contacted_hosts_as_client">'
print('<tr><th colspan="2" class="text-start">'..i18n("traffic_page.hosts_contacts_cardinality")..'</th>')
print('<th class="text-start">'..i18n("traffic_page.num_contacted_hosts_as_client")..'</th><td><span id="num_contacted_hosts_as_client">'
.. formatValue(host.cardinality.num_contacted_hosts_as_client) ..'</span> <span id="num_contacted_hosts_as_client_trend"></span></td>')
print('<th class="text-left">'..i18n("traffic_page.num_host_contacts_as_server")..'</th><td><span id="num_host_contacts_as_server">'..
print('<th class="text-start">'..i18n("traffic_page.num_host_contacts_as_server")..'</th><td><span id="num_host_contacts_as_server">'..
formatValue(host.cardinality.num_host_contacts_as_server) ..'</span> <span id="num_host_contacts_as_server_trend"></span></td>')
print('</tr>')
end
print [[
<tr><th colspan="2" class="text-left">]] print(i18n("traffic_page.l4_proto_overview"))
<tr><th colspan="2" class="text-start">]] print(i18n("traffic_page.l4_proto_overview"))
print[[</th><td colspan=4><div class="pie-chart" id="topApplicationProtocols"></div></td></tr>
</div>
@ -1256,9 +1256,9 @@ print [[/lua/host_l4_stats.lua', { ifid: "]] print(ifId.."") print('", '..hostin
end
t = sent+rcvd
historicalProtoHostHref(ifId, host, l4_keys[id][3], nil, nil)
print("</th><td class=\"text-right\">" .. bytesToSize(sent) .. "</td><td class=\"text-right\">" .. bytesToSize(rcvd) .. "</td><td>")
print("</th><td class=\"text-end\">" .. bytesToSize(sent) .. "</td><td class=\"text-end\">" .. bytesToSize(rcvd) .. "</td><td>")
graph_utils.breakdownBar(sent, i18n("sent"), rcvd, i18n("traffic_page.rcvd"), 0, 100)
print("</td><td class=\"text-right\">" .. bytesToSize(t).. "</td><td class=\"text-right\">" .. round((t * 100)/total, 2).. " %</td></tr>\n")
print("</td><td class=\"text-end\">" .. bytesToSize(t).. "</td><td class=\"text-end\">" .. round((t * 100)/total, 2).. " %</td></tr>\n")
end
end
print("</table></tr>\n")
@ -1305,8 +1305,8 @@ elseif((page == "ndpi")) then
<div class='card card-shadow'>
<div class='card-header'>
<ul id="ndpiNav" class="nav nav-tabs card-header-tabs" role="tablist">
<li class="nav-item active"><a class="nav-link active" data-toggle="tab" role="tab" href="#applications" active>]] print(i18n("applications")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" role="tab" href="#categories">]] print(i18n("categories")) print[[</a></li>
<li class="nav-item active"><a class="nav-link active" data-bs-toggle="tab" role="tab" href="#applications" active>]] print(i18n("applications")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" role="tab" href="#categories">]] print(i18n("categories")) print[[</a></li>
</ul>
</div>
<div class="tab-content card-body">
@ -1315,7 +1315,7 @@ elseif((page == "ndpi")) then
<table class="table table-bordered mt-1 table-striped">]]
if(host.cardinality) then
print('<tr><th class="text-left" colspan=2>'..i18n("ndpi_page.num_contacted_services_as_client")..'</th>')
print('<tr><th class="text-start" colspan=2>'..i18n("ndpi_page.num_contacted_services_as_client")..'</th>')
print('<td align=right><span id="num_contacted_services_as_client">'.. formatValue(host.cardinality.num_contacted_services_as_client))
print('</span> <span id="num_contacted_services_as_client_trend"></span></td><td>'..i18n("ndpi_page.num_contacted_services_as_client_descr")..'</td></tr>')
end
@ -1324,7 +1324,7 @@ elseif((page == "ndpi")) then
if ntop.isPro() and host["custom_apps"] then
print[[
<tr>
<th class="text-left">]] print(i18n("ndpi_page.overview", {what = i18n("ndpi_page.custom_applications")})) print [[</th>
<th class="text-start">]] print(i18n("ndpi_page.overview", {what = i18n("ndpi_page.custom_applications")})) print [[</th>
<td colspan=5><div class="pie-chart" id="topCustomApps"></div></td>
</tr>
]]
@ -1332,7 +1332,7 @@ elseif((page == "ndpi")) then
print[[
<tr>
<th class="text-left" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("applications")})) print[[</th>
<th class="text-start" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("applications")})) print[[</th>
<td><div class="pie-chart" id="topApplicationProtocols"></div></td>
<td colspan=2><div class="pie-chart" id="topApplicationBreeds"></div></td>
</tr>
@ -1345,7 +1345,7 @@ elseif((page == "ndpi")) then
end
print('<div class="dt-toolbar btn-toolbar float-right">')
print('<div class="btn-group float-right"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">Direction ' .. direction_filter .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="direction_dropdown">')
print('<div class="btn-group float-right"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">Direction ' .. direction_filter .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="direction_dropdown">')
print('<li>'..hostinfo2detailshref(host, {page = "ndpi"}, i18n("all"))..'</li>')
print('<li>'..hostinfo2detailshref(host, {page = "ndpi", direction = "sent"}, i18n("ndpi_page.sent_only"))..'</li>')
print('<li>'..hostinfo2detailshref(host, {page = "ndpi", direction = "recv"}, i18n("ndpi_page.received_only"))..'</li>')
@ -1370,7 +1370,7 @@ elseif((page == "ndpi")) then
<div class='table-sm-responsive'>
<table class="table table-bordered table-striped">
<tr>
<th class="text-left" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("categories")})) print[[</th>
<th class="text-start" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("categories")})) print[[</th>
<td colspan=2><div class="pie-chart" id="topApplicationCategories"></div></td>
</tr>
</table>
@ -1492,16 +1492,16 @@ elseif(page == "dns") then
if(host["dns"] ~= nil) then
print("<tr><th>"..i18n("dns_page.dns_breakdown").."</th><th>"..i18n("dns_page.queries").."</th><th>"..i18n("dns_page.positive_replies").."</th><th>"..i18n("dns_page.error_replies").."</th><th colspan=2>"..i18n("dns_page.reply_breakdown").."</th></tr>")
print("<tr><th>"..i18n("sent").."</th><td class=\"text-right\"><span id=dns_sent_num_queries>".. formatValue(host["dns"]["sent"]["num_queries"]) .."</span> <span id=trend_sent_num_queries></span></td>")
print("<tr><th>"..i18n("sent").."</th><td class=\"text-end\"><span id=dns_sent_num_queries>".. formatValue(host["dns"]["sent"]["num_queries"]) .."</span> <span id=trend_sent_num_queries></span></td>")
print("<td class=\"text-right\"><span id=dns_sent_num_replies_ok>".. formatValue(host["dns"]["sent"]["num_replies_ok"]) .."</span> <span id=trend_sent_num_replies_ok></span></td>")
print("<td class=\"text-right\"><span id=dns_sent_num_replies_error>".. formatValue(host["dns"]["sent"]["num_replies_error"]) .."</span> <span id=trend_sent_num_replies_error></span></td><td colspan=2>")
print("<td class=\"text-end\"><span id=dns_sent_num_replies_ok>".. formatValue(host["dns"]["sent"]["num_replies_ok"]) .."</span> <span id=trend_sent_num_replies_ok></span></td>")
print("<td class=\"text-end\"><span id=dns_sent_num_replies_error>".. formatValue(host["dns"]["sent"]["num_replies_error"]) .."</span> <span id=trend_sent_num_replies_error></span></td><td colspan=2>")
graph_utils.breakdownBar(host["dns"]["sent"]["num_replies_ok"], "OK", host["dns"]["sent"]["num_replies_error"], "Error", 0, 100)
print("</td></tr>")
print("<tr><th>"..i18n("dns_page.rcvd").."</th><td class=\"text-right\"><span id=dns_rcvd_num_queries>".. formatValue(host["dns"]["rcvd"]["num_queries"]) .."</span> <span id=trend_rcvd_num_queries></span></td>")
print("<td class=\"text-right\"><span id=dns_rcvd_num_replies_ok>".. formatValue(host["dns"]["rcvd"]["num_replies_ok"]) .."</span> <span id=trend_rcvd_num_replies_ok></span></td>")
print("<td class=\"text-right\"><span id=dns_rcvd_num_replies_error>".. formatValue(host["dns"]["rcvd"]["num_replies_error"]) .."</span> <span id=trend_rcvd_num_replies_error></span></td><td colspan=2>")
print("<tr><th>"..i18n("dns_page.rcvd").."</th><td class=\"text-end\"><span id=dns_rcvd_num_queries>".. formatValue(host["dns"]["rcvd"]["num_queries"]) .."</span> <span id=trend_rcvd_num_queries></span></td>")
print("<td class=\"text-end\"><span id=dns_rcvd_num_replies_ok>".. formatValue(host["dns"]["rcvd"]["num_replies_ok"]) .."</span> <span id=trend_rcvd_num_replies_ok></span></td>")
print("<td class=\"text-end\"><span id=dns_rcvd_num_replies_error>".. formatValue(host["dns"]["rcvd"]["num_replies_error"]) .."</span> <span id=trend_rcvd_num_replies_error></span></td><td colspan=2>")
graph_utils.breakdownBar(host["dns"]["rcvd"]["num_replies_ok"], "OK", host["dns"]["rcvd"]["num_replies_error"], "Error", 50, 100)
print("</td></tr>")
@ -1889,11 +1889,9 @@ elseif page == "geomap" then
print ([[
<div class="row">
<div class='col-md-12 col-lg-12 col-xs-12 mb-4'>
<div id='geomap-alert' style="display: none" role="alert" class='alert alert-danger'>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<div id='geomap-alert' style="display: none" role="alert" class='alert alert-danger alert-dismissible'>
<span id='error-message'></span>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<div class="d-flex justify-content-center align-items-center" style="height: 720px" id="map-canvas">
<div class="spinner-border text-primary" role="status">
@ -1978,7 +1976,7 @@ if(num > 0) then
url = url .. getFlag(info["country"]).." "
end
-- print(v.."<br>")
print("<tr><th>"..url.."</th><td class=\"text-right\">" .. formatValue(v) .. "</td></tr>\n")
print("<tr><th>"..url.."</th><td class=\"text-end\">" .. formatValue(v) .. "</td></tr>\n")
end
print("</table></td>\n")
end
@ -2006,7 +2004,7 @@ if(num > 0) then
if(info ~= nil) then
url = url ..getFlag(info["country"]).." "
end
print("<tr><th>"..url.."</th><td class=\"text-right\">" .. formatValue(v) .. "</td></tr>\n")
print("<tr><th>"..url.."</th><td class=\"text-end\">" .. formatValue(v) .. "</td></tr>\n")
end
print("</table></td>\n")
end

View file

@ -75,13 +75,13 @@ end
local total = total_sent + total_recv
print("<tr><td>Total</td><td class=\"text-right\">".. secondsToTime(host["total_activity_time"]) .."</td><td class=\"text-right\">" .. bytesToSize(total_sent) .. "</td><td class=\"text-right\">" .. bytesToSize(total_recv) .. "</td>")
print("<tr><td>Total</td><td class=\"text-end\">".. secondsToTime(host["total_activity_time"]) .."</td><td class=\"text-end\">" .. bytesToSize(total_sent) .. "</td><td class=\"text-end\">" .. bytesToSize(total_recv) .. "</td>")
print("<td>")
graph_utils.breakdownBar(total_sent, i18n("ndpi_page.sent"), total_recv, i18n("ndpi_page.rcvd"), 0, 100)
print("</td>\n")
print("<td colspan=2 class=\"text-right\">" .. bytesToSize(total).. "</td></tr>\n")
print("<td colspan=2 class=\"text-end\">" .. bytesToSize(total).. "</td></tr>\n")
for _k in pairsByKeys(vals , desc) do
k = vals[_k]
@ -101,13 +101,13 @@ for _k in pairsByKeys(vals , desc) do
historicalProtoHostHref(getInterfaceId(ifname), host, nil, protos[k], nil)
print('</td>')
print("<td class=\"text-right\">" .. secondsToTime(host["ndpi"][k]["duration"]) .. "</td>")
print("<td class=\"text-right\">" .. bytesToSize(host["ndpi"][k]["bytes.sent"]) .. "</td><td class=\"text-right\">" .. bytesToSize(host["ndpi"][k]["bytes.rcvd"]) .. "</td>")
print("<td class=\"text-end\">" .. secondsToTime(host["ndpi"][k]["duration"]) .. "</td>")
print("<td class=\"text-end\">" .. bytesToSize(host["ndpi"][k]["bytes.sent"]) .. "</td><td class=\"text-end\">" .. bytesToSize(host["ndpi"][k]["bytes.rcvd"]) .. "</td>")
print("<td>")
graph_utils.breakdownBar(host["ndpi"][k]["bytes.sent"], i18n("ndpi_page.sent"), host["ndpi"][k]["bytes.rcvd"], i18n("ndpi_page.rcvd"), 0, 100)
print("</td>\n")
print("<td class=\"text-right\">" .. bytesToSize(t).. "</td><td class=\"text-right\">" .. round((t * 100)/total, 2).. " %</td></tr>\n")
print("<td class=\"text-end\">" .. bytesToSize(t).. "</td><td class=\"text-end\">" .. round((t * 100)/total, 2).. " %</td></tr>\n")
end
end

View file

@ -34,7 +34,7 @@ for k, v in pairs(host["ndpi_categories"]) do
total = total + v["bytes"]
end
print("<tr><td colspan=2>Total</td><td class=\"text-right\">".. secondsToTime(host["total_activity_time"]) .."</td><td colspan=2 class=\"text-right\">" .. bytesToSize(total).. "</td></tr>\n")
print("<tr><td colspan=2>Total</td><td class=\"text-end\">".. secondsToTime(host["total_activity_time"]) .."</td><td colspan=2 class=\"text-end\">" .. bytesToSize(total).. "</td></tr>\n")
for k, v in pairsByKeys(host["ndpi_categories"], desc) do
print("<tr><td>")
@ -55,8 +55,8 @@ for k, v in pairsByKeys(host["ndpi_categories"], desc) do
print(categories_utils.get_category_protocols_list(v.category))
print("</td>")
print("<td class=\"text-right\">" .. secondsToTime(v["duration"]) .. "</td>")
print("<td class=\"text-end\">" .. secondsToTime(v["duration"]) .. "</td>")
print("<td class=\"text-right\">" .. bytesToSize(t).. "</td><td class=\"text-right\">" .. round((t * 100)/total, 2).. " %</td></tr>\n")
print("<td class=\"text-end\">" .. bytesToSize(t).. "</td><td class=\"text-end\">" .. round((t * 100)/total, 2).. " %</td></tr>\n")
end

View file

@ -29,10 +29,8 @@ if (num > 0) then
page_utils.print_page_title(i18n("geo_map.hosts_geomap"))
print([[
<div id='geomap-alert' style="display: none" role="alert" class='alert alert-danger'>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<span id='error-message'></span>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<div class="d-flex justify-content-center align-items-center" style="height: 720px" id="map-canvas">
<div class="spinner-border text-primary" role="status">

View file

@ -29,7 +29,7 @@ local function generate_map_url(map, map_url, query, icon)
local map_available = table.len(map) > 0
if (map_available) then
url = "<a class='ml-1' href='"..ntop.getHttpPrefix().."/lua/pro/enterprise/"..map_url.."?" .. query .. "'><i class='".. icon .."'></i></a>"
url = "<a class='ms-1' href='"..ntop.getHttpPrefix().."/lua/pro/enterprise/"..map_url.."?" .. query .. "'><i class='".. icon .."'></i></a>"
end
end
@ -223,16 +223,16 @@ if (_GET["page"] ~= "historical") then
print [[
<div class='card'><div class='card-header'>
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item" class="active"><a class="nav-link active" data-toggle="tab" href="#home">]] print(i18n("hosts_stats.hosts")) print[[</a></li>
<li class="nav-item" class="active"><a class="nav-link active" data-bs-toggle="tab" href="#home">]] print(i18n("hosts_stats.hosts")) print[[</a></li>
]]
if(asn ~= "0") then
print [[
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#asinfo">]] print(i18n("hosts_stats.as_info")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#aspath">]] print(i18n("hosts_stats.as_path")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#geoloc">]] print(i18n("hosts_stats.as_geolocation")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#prefix">]] print(i18n("hosts_stats.as_prefixes")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" href="#bgp">]] print(i18n("hosts_stats.bgp_updates")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#asinfo">]] print(i18n("hosts_stats.as_info")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#aspath">]] print(i18n("hosts_stats.as_path")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#geoloc">]] print(i18n("hosts_stats.as_geolocation")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#prefix">]] print(i18n("hosts_stats.as_prefixes")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#bgp">]] print(i18n("hosts_stats.bgp_updates")) print[[</a></li>
]]
end
end
@ -371,7 +371,7 @@ if (_GET["page"] ~= "historical") then
-- table.clone needed to modify some parameters while keeping the original unchanged
local hosts_filter_params = table.clone(page_params)
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..i18n("hosts_stats.filter_hosts")..hosts_filter..'<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;"><li"><a class="dropdown-item" href="')
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..i18n("hosts_stats.filter_hosts")..hosts_filter..'<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;"><li"><a class="dropdown-item" href="')
hosts_filter_params.mode = nil
hosts_filter_params.pool = nil
@ -644,7 +644,7 @@ print[[
loaded_widgets[widget] = true;
}
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
$('a[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href") // activated tab
load_widget(target);
});

View file

@ -48,7 +48,7 @@ print([[</p>
<i class='fas fa-arrow-left'></i> ]].. i18n("error_page.go_back").. [[
</a>
</div>
<div class='col p-2 text-left d-flex justify-content-center align-items-center'>
<div class='col p-2 text-start d-flex justify-content-center align-items-center'>
<i class="fas fa-exclamation-triangle bigger-icon"></i>
</div>
</div>

View file

@ -94,7 +94,7 @@ function inline_input_form(name, placeholder, tooltip, value, can_edit, input_op
if(value ~= nil) then print(value.."") end
print[[">]]
if (measure_unit) then
print([[<span class='ml-1 align-middle'>]].. i18n(measure_unit) ..[[</span>]])
print([[<span class='ms-1 align-middle'>]].. i18n(measure_unit) ..[[</span>]])
end
else
if(value ~= nil) then print(value) end
@ -102,7 +102,7 @@ function inline_input_form(name, placeholder, tooltip, value, can_edit, input_op
end
function inline_select_form(name, keys, values, curval)
print[[<select class="form-control" style="width:12em; display:inline;" name="]] print(name) print[[">]]
print[[<select class="form-select" style="width:12em; display:inline;" name="]] print(name) print[[">]]
for idx, k in ipairs(keys) do
local v = values[idx]
print[[<option value="]] print(v) print[[" ]]
@ -737,7 +737,7 @@ print[[
print("<td width=20% colspan=3><span id=if_drops>")
if(ifstats.stats.drops > 0) then
print('<span class="badge badge-danger">')
print('<span class="badge bg-danger">')
end
print(formatValue(ifstats.stats.drops).. " " .. label)
@ -871,7 +871,7 @@ print[[
local span_danger = ""
if not export_drops then
elseif export_drops > 0 then
span_danger = ' class="badge badge-danger"'
span_danger = ' class="badge bg-danger"'
end
print("<td><span id=exported_flows_drops "..span_danger..">"..formatValue(export_drops).."</span>&nbsp;")
@ -989,7 +989,7 @@ print[[
print("<tr><th nowrap>"..i18n("if_stats_overview.nf_queue_total").."</th>")
local span_class = ''
if st.nfq.queue_pct > 80 then
span_class = "class='badge badge-danger'"
span_class = "class='badge bg-danger'"
end
print("<td width=20%><span id=nfq_queue_total "..span_class..">"..string.format("%s [%s %%]", formatValue(st.nfq.queue_total), formatValue(st.nfq.queue_pct)).." </span> <span id=nfq_queue_total_trend></span></td>")
print("<th nowrap>"..i18n("if_stats_overview.nf_handle_packet_failed").."</th>")
@ -1090,11 +1090,11 @@ elseif((page == "packets")) then
print("<tr " .. nedge_hidden .. "></th><th>" .. i18n("packets_page.lost") .. "</th><td align=right><span id=pkt_lost>".. formatPackets(ifstats.tcpPacketStats.lost) .."</span> <span id=pkt_lost_trend></span></td></tr>\n")
if(ifstats.type ~= "zmq") then
print [[<tr ]] print(nedge_hidden) print[[><th class="text-left">]] print(i18n("packets_page.size_distribution")) print [[</th><td colspan=5><div class="pie-chart" id="sizeDistro"></div></td></tr>]]
print [[<tr ]] print(nedge_hidden) print[[><th class="text-start">]] print(i18n("packets_page.size_distribution")) print [[</th><td colspan=5><div class="pie-chart" id="sizeDistro"></div></td></tr>]]
end
print[[
<tr ]] print(nedge_hidden) print[[><th class="text-left">]] print(i18n("packets_page.version_vs_flags_distribution")) print[[</th>
<tr ]] print(nedge_hidden) print[[><th class="text-start">]] print(i18n("packets_page.version_vs_flags_distribution")) print[[</th>
<td colspan=1><div class="pie-chart" id="ipverDistro"></div></td><td colspan=1><div class="pie-chart" id="flagsDistro"></div></td></tr>
</table>
@ -1127,7 +1127,7 @@ elseif(page == "DSCP") then
print [[
<table id="dscp_table" class="table table-bordered table-striped tablesorter">
<tr>
<th class="text-left">]] print(i18n("dscp_page.statistics")) print [[</th>
<th class="text-start">]] print(i18n("dscp_page.statistics")) print [[</th>
<td colspan=4><div class="pie-chart" id="dscpGroups"></td>
</tr>
</table>
@ -1142,8 +1142,8 @@ print[[
<div class='card'>
<div class='card-header'>
<ul id="ndpiNav" class="nav nav-tabs card-header-tabs" role="tablist">
<li class="nav-item active"><a class="nav-link active" data-toggle="tab" role="tab" href="#applications" active>]] print(i18n("applications")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" role="tab" href="#categories">]] print(i18n("categories")) print[[</a></li>
<li class="nav-item active"><a class="nav-link active" data-bs-toggle="tab" role="tab" href="#applications" active>]] print(i18n("applications")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" role="tab" href="#categories">]] print(i18n("categories")) print[[</a></li>
</ul>
</div>
<div class='card-body tab-content'>
@ -1155,7 +1155,7 @@ print[[
if ntop.isPro() and ifstats["custom_apps"] then
print[[
<tr>
<th class="text-left">]] print(i18n("ndpi_page.overview", {what = i18n("ndpi_page.custom_applications")})) print [[</th>
<th class="text-start">]] print(i18n("ndpi_page.overview", {what = i18n("ndpi_page.custom_applications")})) print [[</th>
<td colspan=5><div class="pie-chart" id="topCustomApps"></td>
</tr>
]]
@ -1163,12 +1163,12 @@ print[[
print[[
<tr>
<th class="text-left">]] print(i18n("ndpi_page.overview", {what = i18n("applications")})) print [[</th>
<th class="text-start">]] print(i18n("ndpi_page.overview", {what = i18n("applications")})) print [[</th>
<td colspan=3><div class="pie-chart" id="topApplicationProtocols"></td>
<td colspan=2><div class="pie-chart" id="topApplicationBreeds"></td>
</tr>
<tr>
<th class="text-left">]] print(i18n("ndpi_page.live_flows_count")) print [[</th>
<th class="text-start">]] print(i18n("ndpi_page.live_flows_count")) print [[</th>
<td colspan=3><div class="pie-chart" id="topFlowsCount"></td>
<td colspan=2><div class="pie-chart" id="topTCPFlowsStats">
<br><small><b>]] print(i18n("ndpi_page.note")) print [[ :</b>]] print(i18n("ndpi_page.note_live_flows_chart")) print [[
@ -1189,7 +1189,7 @@ print[[
<div id="categories" class="tab-pane">
<table class="table table-bordered table-striped">
<tr>
<th class="text-left">]] print(i18n("ndpi_page.overview", {what = i18n("categories")})) print [[</th>
<th class="text-start">]] print(i18n("ndpi_page.overview", {what = i18n("categories")})) print [[</th>
<td colspan=5><div class="pie-chart" id="topApplicationCategories"></td>
</tr>
</table>
@ -1289,8 +1289,8 @@ print[[
<div class='card'>
<div class='card-header'>
<ul id="icmp_nav" class="nav nav-tabs card-header-tabs" role="tablist">
<li class="nav-item active"><a class="nav-link active" data-toggle="tab" role="tab" href="#icmp" active>]] print(i18n("icmpv4")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-toggle="tab" role="tab" href="#icmpv6">]] print(i18n("icmpv6")) print[[</a></li>
<li class="nav-item active"><a class="nav-link active" data-bs-toggle="tab" role="tab" href="#icmp" active>]] print(i18n("icmpv4")) print[[</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" role="tab" href="#icmpv6">]] print(i18n("icmpv6")) print[[</a></li>
</ul>
</div>
<div class="card-body tab-content">
@ -1463,7 +1463,7 @@ print [[
elseif(page == "traffic_recording" and has_traffic_recording_page) then
if not dismiss_recording_providers_reminder then
print('<div id="traffic-recording-providers-detected" class="alert alert-info alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-label="close">&times;</button>'..i18n('traffic_recording.msg_external_providers_detected', {url = ntop.getHttpPrefix().."/lua/if_stats.lua?page=config"})..'</div>')
print('<div id="traffic-recording-providers-detected" class="alert alert-info alert-dismissable">'..i18n('traffic_recording.msg_external_providers_detected', {url = ntop.getHttpPrefix().."/lua/if_stats.lua?page=config"})..'<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
print [[
<script>
@ -1801,7 +1801,7 @@ function toggle_mirrored_traffic_function_off(){
<small>
<details class='mt-2'>
<summary>
<span data-toggle="tooltip" data-placement="right" title=']].. i18n("click_to_expand") ..[['>
<span data-bs-toggle="tooltip" data-placement="right" title=']].. i18n("click_to_expand") ..[['>
]]..i18n("notes")..[[ <i class='fas fa-question-circle '></i>
</span>
</summary>
@ -1886,7 +1886,7 @@ function toggle_mirrored_traffic_function_off(){
<tr>
<th>]] print(i18n("if_stats_config.companion_interface")) print[[</th>
<td>
<select name="companion_interface" class="form-control" style="width:36em; display:inline;">]]
<select name="companion_interface" class="form-select" style="width:36em; display:inline;">]]
for _, companion in ipairs(companions) do
local companion_id = companion["ifid"]
@ -1917,7 +1917,7 @@ function toggle_mirrored_traffic_function_off(){
<tr>
<th>]] print(i18n("traffic_recording.traffic_recording_provider")) print[[</th>
<td>
<select name="traffic_recording_provider" class="form-control" style="width:36em; display:inline;">]]
<select name="traffic_recording_provider" class="form-select" style="width:36em; display:inline;">]]
for _, provider in pairs(providers) do
local label = string.format("%s", provider["name"])
@ -1978,7 +1978,7 @@ function toggle_mirrored_traffic_function_off(){
<tr>
<th>]] print(i18n("prefs.dynamic_interfaces_creation_title")) print[[</th>
<td>
<select name="disaggregation_criterion" class="form-control" style="width:36em; display:inline;">]]
<select name="disaggregation_criterion" class="form-select" style="width:36em; display:inline;">]]
for k, value in ipairs(values) do
local label = labels[k]
@ -1993,7 +1993,7 @@ function toggle_mirrored_traffic_function_off(){
<small>
<details class='mt-2'>
<summary>
<span data-toggle="tooltip" data-placement="right" title=']].. i18n("click_to_expand") ..[['>
<span data-bs-toggle="tooltip" data-placement="right" title=']].. i18n("click_to_expand") ..[['>
]]..i18n("notes")..[[ <i class='fas fa-question-circle '></i>
</span>
</summary>
@ -2030,7 +2030,7 @@ function toggle_mirrored_traffic_function_off(){
print [[<tr>
<th>
]] print(i18n("if_stats_config.show_dyn_iface_traffic")) print[[
<i class='fas fa-question-circle ' data-toggle="tooltip" data-placement="top" title=']] print(i18n("if_stats_config.show_dyn_iface_traffic_note")) print[['></i>
<i class='fas fa-question-circle ' data-bs-toggle="tooltip" data-placement="top" title=']] print(i18n("if_stats_config.show_dyn_iface_traffic_note")) print[['></i>
</th>
<td>]]
@ -2089,7 +2089,7 @@ elseif(page == "snmp_bind") then
<tr>
<th>]] print(i18n("snmp.snmp_device")) print[[</th>
<td>
<select class="form-control" style="width:30em; display:inline;" id="snmp_bind_device" name="ip">
<select class="form-select" style="width:30em; display:inline;" id="snmp_bind_device" name="ip">
<option]] if isEmptyString(snmp_host) then print(" selected") end print[[ value="">Not Bound</option>
]]
@ -2115,7 +2115,7 @@ elseif(page == "snmp_bind") then
<tr>
<th>]] print(i18n("snmp.snmp_interface")) print[[</th>
<td>
<select class="form-control" style="width:30em; display:inline;" id="snmp_bind_interface" name="snmp_port_idx">]]
<select class="form-select" style="width:30em; display:inline;" id="snmp_bind_interface" name="snmp_port_idx">]]
if not isEmptyString(snmp_interface) then
-- This is neeeded to initialized ays form fields
@ -2374,9 +2374,9 @@ if have_nedge and ifstats.type == "netfilter" and ifstats.netfilter then
print[[
if(rsp.netfilter.nfq.queue_pct > 80) {
$('#nfq_queue_total').addClass("badge badge-danger");
$('#nfq_queue_total').addClass("badge bg-danger");
} else {
$('#nfq_queue_total').removeClass("badge badge-danger");
$('#nfq_queue_total').removeClass("badge bg-danger");
}
$('#nfq_queue_total').html(NtopUtils.fint(rsp.netfilter.nfq.queue_total) + " [" + NtopUtils.fint(rsp.netfilter.nfq.queue_pct) + " %]");
$('#nfq_queue_total_trend').html(NtopUtils.get_trend(rsp.netfilter.nfq.queue_total, last_nfq_queue_total));
@ -2437,7 +2437,7 @@ print [[
}
if(rsp.drops > 0) {
drops = '<span class="badge badge-danger">';
drops = '<span class="badge bg-danger">';
}
drops = drops + NtopUtils.addCommas(rsp.drops)+" Pkts";
@ -2449,14 +2449,14 @@ print [[
$('#exported_flows_rate').html(NtopUtils.fflows(rsp.flow_export_rate));
if(rsp.flow_export_drops > 0) {
$('#exported_flows_drops')
.addClass("badge badge-danger")
.addClass("badge bg-danger")
.html(NtopUtils.fint(rsp.flow_export_drops));
if(rsp.flow_export_count > 0) {
$('#exported_flows_drops_pct')
.addClass("badge badge-danger")
.addClass("badge bg-danger")
.html("[" + NtopUtils.fpercent(rsp.flow_export_drops / (rsp.flow_export_count + rsp.flow_export_drops + 1) * 100) + "]");
} else {
$('#exported_flows_drops_pct').addClass("badge badge-danger").html("[100%]");
$('#exported_flows_drops_pct').addClass("badge bg-danger").html("[100%]");
}
} else {
$('#exported_flows_drops').removeClass().html("0");

View file

@ -104,7 +104,7 @@ for _k in pairsByKeys(vals, asc) do
if(not(json_format)) then
if(k ~= "ARP") then print(" <A class='btn btn-sm bt-info' HREF=\""..ntop.getHttpPrefix().."/lua/flows_stats.lua?application="..k.."\"><i class=\"fas fa-search-plus\"></i></A>") end
print("</th><td class=\"text-right\" style=\"width: 20%;\">" ..bytesToSize(t).. "</td>")
print("</th><td class=\"text-end\" style=\"width: 20%;\">" ..bytesToSize(t).. "</td>")
print("<td ><span style=\"width: 60%; float: left;\">")
graph_utils.percentageBar(total, t, "") -- k
-- print("</td>\n")

View file

@ -69,7 +69,7 @@ for k, v in pairsByKeys(ifstats["ndpi_categories"], asc) do
print('<td style="width: 50%;">')
print(categories_utils.get_category_protocols_list(v.category))
print("</td>")
print("<td class=\"text-right\" style=\"width: 10%;\">" ..bytesToSize(t).. "</td>")
print("<td class=\"text-end\" style=\"width: 10%;\">" ..bytesToSize(t).. "</td>")
print("<td ><span style=\"width: 60%; float: left;\">")
graph_utils.percentageBar(total, t, "") -- k
-- print("</td>\n")

View file

@ -12,9 +12,7 @@ print [[
<div class="modal-content">
<div class="modal-header">
<h5 class='modal-title' id="add_user_dialog_label">]]print(add_user_msg)print[[</h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
<span aria-hidden="true">&times;</span>
</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
@ -23,62 +21,54 @@ print [[
<script type="text/javascript">
add_user_alert = function() {}
add_user_alert.error = function(message, no_close) { $('#add_user_alert_placeholder').html('<div class="alert alert-danger">' + (no_close ? '' : '<button type="button" class="close" data-dismiss="alert">x</button>') + message + '</div>');
add_user_alert.error = function(message, no_close) { $('#add_user_alert_placeholder').html('<div class="alert alert-danger">' + message + (no_close ? '' : '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>') + '</div>');
}
add_user_alert.success = function(message) { $('#add_user_alert_placeholder').html('<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">x</button>' + message + '</div>'); }
add_user_alert.success = function(message) { $('#add_user_alert_placeholder').html('<div class="alert alert-success">' + message + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>'); }
</script>
<form data-toggle="validator" id="form_add_user" method="post" action="]] print(ntop.getHttpPrefix()) print[[/lua/rest/v1/add/ntopng/user.lua" accept-charset="UTF-8">
<form data-bs-toggle="validator" id="form_add_user" method="post" action="]] print(ntop.getHttpPrefix()) print[[/lua/rest/v1/add/ntopng/user.lua" accept-charset="UTF-8">
]]
print('<input name="csrf" type="hidden" value="'..ntop.getRandomCSRFValue()..'" />\n')
print [[
<div class="form-group">
<div class="form-group mb-3">
<label for="username_input">]] print(i18n("login.username")) print[[</label>
<div class="input-group mb-6">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user-circle" aria-hidden="true"></i></span>
</div>
<input id="username_input" type="text" name="username" value="" class="form-control" pattern="^[\w]{1,}$" required>
</div>
</div>
<div class="form-group">
<div class="form-group mb-3">
<label for="full_name_input">]] print(i18n("users.full_name")) print[[</label>
<div class="input-group mb-6">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user" aria-hidden="true"></i></span>
</div>
<input id="full_name_input" type="text" name="full_name" value="" class="form-control">
</div>
</div>
<div class="form-group">
<div class="form-group mb-3">
<label for="password_input">]] print(i18n("login.password")) print[[</label>
<div class="input-group mb-6">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-lock"></i></span>
</div>
<input id="password_input" type="password" name="password" value="" class="form-control" pattern="]] print(getPasswordInputPattern()) print[[" required>
</div>
</div>
<div class="form-group">
<div class="form-group mb-3">
<label for="confirm_password_input">]] print(i18n("login.confirm_password")) print[[</label>
<div class="input-group mb-6">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-lock"></i></span>
</div>
<input id="confirm_password_input" type="password" name="confirm_password" value="" class="form-control" pattern="]] print(getPasswordInputPattern()) print[[" required>
</div>
</div>
<div class="form-group">
<div class="form-group mb-3">
<label for="user_role">]] print(i18n("manage_users.user_role")) print[[</label>
<div class="input-group mb-6">
<select id="user_role" name="user_role" class="form-control" style="width:100%;">
<select id="user_role" name="user_role" class="form-select" style="width:100%;">
<option value="unprivileged">]] print(i18n("manage_users.non_privileged_user")) print[[</option>
<option value="administrator">]] print(i18n("manage_users.administrator")) print[[</option>
</select>
@ -87,10 +77,10 @@ print [[
<div id="unprivileged_input">
<div class="form-group">
<div class="form-group mb-3">
<label for="allowed_interface_input">]] print(i18n("manage_users.allowed_interface")) print[[</label>
<div class="input-group mb-6">
<select id="allowed_interface_input" name="allowed_interface" class="form-control ">
<select id="allowed_interface_input" name="allowed_interface" class="form-select ">
<option value="">]] print(i18n("manage_users.any_interface")) print[[</option>
]]
@ -102,7 +92,7 @@ print [[
</div>
</div>
<div class="form-group">
<div class="form-group mb-3">
<label for="allowed_networks_input">]] print(i18n("manage_users.allowed_networks")) print[[</label>
<div class="input-group mb-6">
<input id="allowed_networks_input" type="text" name="allowed_networks" value="" class="form-control">
@ -110,7 +100,7 @@ print [[
</div>
</div>
<div class="form-group">
<div class="form-group mb-3">
<div class="form-check">]]
print(template.gen("on_off_switch.html", {
@ -135,14 +125,12 @@ print [[
]]
print[[
<div class="form-group">
<div class="form-group mb-3">
<label for="user_language">]] print(i18n("language")) print[[</label>
<div class="input-group mb-6">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-language" aria-hidden="true"></i></span>
</div>
<select id="user_language" name="user_language" class="form-control">]]
<div class="input-group mb-3">
<span class="input-group-text"><i class="fas fa-language" aria-hidden="true"></i></span>
<select id="user_language" name="user_language" class="form-select">]]
for _, lang in ipairs(locales_utils.getAvailableLocales()) do
print('<option value="'..lang["code"]..'">'..i18n("locales." .. lang["code"])..'</option>')

View file

@ -4,7 +4,7 @@ print [[
<div class="modal-content">
<div class="modal-header">
<h5 class='modal-title' id="delete_user_dialog_label">]] print(i18n("users.delete_user")) print[[ <span class="password_dialog_title"></span></h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
@ -13,9 +13,9 @@ print [[
<script>
delete_user_alert = function() {}
delete_user_alert.error = function(message) { $('#delete_user_alert_placeholder').html('<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">x</button>' + message + '</div>');
delete_user_alert.error = function(message) { $('#delete_user_alert_placeholder').html('<div class="alert alert-dismissable alert-danger">' + message + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>');
}
delete_user_alert.success = function(message) { $('#delete_user_alert_placeholder').html('<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">x</button>' + message + '</div>'); }
delete_user_alert.success = function(message) { $('#delete_user_alert_placeholder').html('<div class="alert alert-dismissable alert-success">' + message + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>'); }
delete_user_alert.warning = function(message) { $('#delete_user_alert_placeholder').html('<div class="alert alert-warning">' + message + '</div>'); }
</script>

View file

@ -194,20 +194,20 @@ print[[
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">]] print(i18n("custom_categories.add_custom_app")) print[[</h5>
<button type="button" class="close" data-dismiss="modal">&times;</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form id="add-application-form" method="post" data-toggle="validator" onsubmit="return addApplication()">
<form id="add-application-form" method="post" data-bs-toggle="validator" onsubmit="return addApplication()">
<div class="modal-body">
<input type="hidden" name="csrf" value="]] print(ntop.getRandomCSRFValue()) print[[" />
<input type="hidden" name="action" value="add">
<input id="new-custom_hosts" type="hidden" name="custom_hosts">
<div class="form-group has-feedback">
<div class="form-group mb-3 has-feedback">
<label class="form-label">]] print(i18n("custom_categories.application_name")) print[[</label>
<input id="new-application" type="text" name="new_application" class="form-control" required>
</div>
<div class="form-group has-feedback">
<div class="form-group mb-3 has-feedback">
<label class="form-label">]] print(i18n("custom_categories.custom_hosts")) print[[</label>
]] print(makeApplicationEditor("new-application-hosts-list", true)) print[[
</div>
@ -273,7 +273,7 @@ print[[
</td>
</tr>
</table>
<form id="protos_cat_form" class="w-100 text-right" style="margin-bottom: 0px;" method="post">
<form id="protos_cat_form" class="w-100 text-end" style="margin-bottom: 0px;" method="post">
<input type="hidden" name="csrf" value="]] print(ntop.getRandomCSRFValue()) print[[">
<div id="table-edit-ndpi-applications"></div>
<button class="btn btn-primary" style="margin-right:1em; margin-left: auto" disabled="disabled" type="submit">]] print(i18n("save_settings")) print[[</button>
@ -321,7 +321,7 @@ print[[
buttons: [ ]]
if has_protos_file then
print[['<a id="addApplication" onclick="showAddApplicationDialog()" role="button" class="add-on btn float-right" data-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>',]]
print[['<a id="addApplication" onclick="showAddApplicationDialog()" role="button" class="add-on btn float-right" data-bs-toggle="modal"><i class="fas fa-plus" aria-hidden="true"></i></a>',]]
end
if isEmptyString(proto_filter) then

View file

@ -123,7 +123,7 @@ local function printDeviceProtocolsPage()
<td style="white-space:nowrap; padding-right:1em;">]]
-- Device type selector
print(i18n("details.device_type")) print(': <select id="device_type_selector" class="form-control device-type-selector" style="display:inline; width: 200px" onchange="document.location.href=\'?page=device_protocols&l7proto=') print(proto_filter) print('&device_type=\' + $(this).val()">')
print(i18n("details.device_type")) print(': <select id="device_type_selector" class="form-select device-type-selector" style="display:inline; width: 200px" onchange="document.location.href=\'?page=device_protocols&l7proto=') print(proto_filter) print('&device_type=\' + $(this).val()">')
discover.printDeviceTypeSelectorOptions(device_type, false)
print[[</select></td><td style="width:100%"></td>]]
@ -192,12 +192,11 @@ local function printDeviceProtocolsPage()
if is_nedge and (ntop.getPref("ntopng.prefs.device_protocols_policing") ~= "1") then
print([[
<div class="alert alert-warning alert-dismissible" style="margin-top:2em; margin-bottom:0em;">
<button type="button" class="close" data-dismiss="alert" aria-label="]]..i18n("close")..[[">
<span aria-hidden="true">&times;</span>
</button><b>]]..i18n("warning")..[[</b>: ]].. i18n("nedge.device_protocols_blocked_warning", {
<b>]]..i18n("warning")..[[</b>: ]].. i18n("nedge.device_protocols_blocked_warning", {
device_protocols_policies = '<a href="'.. ntop.getHttpPrefix() ..
'/lua/pro/nedge/admin/nf_edit_user.lua?page=settings">'.. i18n("nedge.enable_device_protocols_policies") .. '</a>',
}) ..[[
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div><br>]])
end
@ -303,7 +302,7 @@ local function printDeviceProtocolsPage()
buttons: []]
-- 'Filter Policies' button
print('\'<div class="btn-group float-right"><div class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..
print('\'<div class="btn-group float-right"><div class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..
i18n("nedge.filter_policies") .. ternary(not isEmptyString(policy_filter), '<span class="fas fa-filter"></span>', '') ..
'<span class="caret"></span></div> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')

View file

@ -35,7 +35,7 @@ print ([[
<footer id="n-footer">
<div class="container-fluid">
<div class="row mt-2">
<div class="col-12 col-md-4 pl-md-0 text-center text-md-left">
<div class="col-12 col-md-4 pl-md-0 text-center text-md-start">
<small>
<a href="https://www.ntop.org/products/traffic-analysis/ntop/" target="_blank">
]] .. getNtopngRelease(info) ..[[
@ -47,7 +47,7 @@ print ([[
]])
print [[
</div>
<div class="col-12 col-md-4 text-center text-md-right pr-md-0">
<div class="col-12 col-md-4 text-center text-md-end pr-md-0">
<small>
<i class="fas fa-clock" title="]] print(i18n("about.server_time")) print[["></i> <div class="d-inline-block" id='network-clock'></div> | ]] print(i18n("about.uptime")) print[[: <div class="d-inline-block" id='network-uptime'></div>
</small>
@ -58,7 +58,7 @@ print [[
]]
else -- info.oem
print[[<div class="col-12 text-right">
print[[<div class="col-12 text-end">
<small>
<i class="fas fa-clock"></i> <div class="d-inline-block" id='network-clock' title="]] print(i18n("about.server_time")) print[["></div> | ]] print(i18n("about.uptime")) print[[: <div class="d-inline-block" id='network-uptime'></div>
</small>
@ -334,12 +334,12 @@ print[[
if (rsp.system_host_stats.cpu_load !== undefined) $('#cpu-load-pct').html(NtopUtils.ffloat(rsp.system_host_stats.cpu_load));
if(rsp.out_of_maintenance) {
msg += "<a href=\"https://www.ntop.org/support/faq/how-can-i-renew-maintenance-for-commercial-products/\" target=\"_blank\"><span class=\"badge badge-warning\">]] print(i18n("about.maintenance_expired", {product=info["product"]})) print[[ <i class=\"fas fa-external-link-alt\"></i></span></a> ";
msg += "<a href=\"https://www.ntop.org/support/faq/how-can-i-renew-maintenance-for-commercial-products/\" target=\"_blank\"><span class=\"badge bg-warning\">]] print(i18n("about.maintenance_expired", {product=info["product"]})) print[[ <i class=\"fas fa-external-link-alt\"></i></span></a> ";
}
if(rsp.degraded_performance) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/system_interfaces_stats.lua?page=internals&tab=periodic_activities&periodic_script_issue=any_issue\">"
msg += "<span class=\"badge badge-warning\"><i class=\"fas fa-exclamation-triangle\" title=\"]] print(i18n("internals.degraded_performance")) print[[\"></i></span></a>";
msg += "<span class=\"badge bg-warning\"><i class=\"fas fa-exclamation-triangle\" title=\"]] print(i18n("internals.degraded_performance")) print[[\"></i></span></a>";
}
if ((rsp.engaged_alerts > 0 || rsp.alerted_flows > 0) && ]] print(ternary(hasAllowedNetworksSet(), "false", "true")) print[[) {
@ -348,17 +348,17 @@ print[[
if(rsp.engaged_alerts > 0) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/alert_stats.lua?ifid=]] print(tostring(ifid)) print[[\">"
msg += "<span class=\"badge badge-danger\"><i class=\"fas fa-exclamation-triangle\"></i> "+NtopUtils.addCommas(rsp.engaged_alerts)+"</span></a>";
msg += "<span class=\"badge bg-danger\"><i class=\"fas fa-exclamation-triangle\"></i> "+NtopUtils.addCommas(rsp.engaged_alerts)+"</span></a>";
}
if(rsp.alerted_flows_warning > 0 && !(systemInterfaceEnabled)) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/flows_stats.lua?alert_type_severity=warning\">"
msg += "<span class=\"badge badge-warning\">"+NtopUtils.addCommas(rsp.alerted_flows_warning)+ " <i class=\"fas fa-stream\"></i> ]] print[[ <i class=\"fas fa-exclamation-triangle\"></i></span></a>";
msg += "<span class=\"badge bg-warning\">"+NtopUtils.addCommas(rsp.alerted_flows_warning)+ " <i class=\"fas fa-stream\"></i> ]] print[[ <i class=\"fas fa-exclamation-triangle\"></i></span></a>";
}
if(rsp.alerted_flows_error > 0 && !(systemInterfaceEnabled)) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/flows_stats.lua?alert_type_severity=error_or_higher\">"
msg += "<span class=\"badge badge-danger\">"+NtopUtils.addCommas(rsp.alerted_flows_error)+ " <i class=\"fas fa-stream\"></i> ]] print[[ <i class=\"fas fa-exclamation-triangle\"></i></span></a>";
msg += "<span class=\"badge bg-danger\">"+NtopUtils.addCommas(rsp.alerted_flows_error)+ " <i class=\"fas fa-stream\"></i> ]] print[[ <i class=\"fas fa-exclamation-triangle\"></i></span></a>";
}
}
@ -368,7 +368,7 @@ print[[
if(rsp.ts_alerts && rsp.ts_alerts.influxdb && (!systemInterfaceEnabled)) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/plugins/influxdb_stats.lua?ifid=]] print(tostring(ifid)) print[[&page=alerts#tab-table-engaged-alerts\">"
msg += "<span class=\"badge badge-danger\"><i class=\"fas fa-database\"></i></span></a>";
msg += "<span class=\"badge bg-danger\"><i class=\"fas fa-database\"></i></span></a>";
}
var alarm_threshold_low = 60; /* 60% */
@ -377,7 +377,7 @@ print[[
if(rsp.num_local_hosts > 0 && (!systemInterfaceEnabled)) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/hosts_stats.lua?mode=local\">";
msg += "<span title=\"]] print(i18n("local_hosts")) print[[\" class=\"badge badge-success\">";
msg += "<span title=\"]] print(i18n("local_hosts")) print[[\" class=\"badge bg-success\">";
msg += NtopUtils.addCommas(rsp.num_local_hosts)+" <i class=\"fas fa-laptop\" aria-hidden=\"true\"></i></span></a>";
checkMigrationMessage(rsp);
@ -389,15 +389,15 @@ print[[
var remote_hosts_label = "]] print(i18n("remote_hosts")) print[[";
if (rsp.hosts_pctg < alarm_threshold_low && !systemInterfaceEnabled) {
msg += "<span title=\"" + remote_hosts_label +"\" class=\"badge badge-secondary\">";
msg += "<span title=\"" + remote_hosts_label +"\" class=\"badge bg-secondary\">";
}
else if (rsp.hosts_pctg < alarm_threshold_high && !systemInterfaceEnabled) {
alert = 1;
msg += "<span title=\"" + remote_hosts_label +"\" class=\"badge badge-warning\">";
msg += "<span title=\"" + remote_hosts_label +"\" class=\"badge bg-warning\">";
}
else {
alert = 1;
msg += "<span title=\"" + remote_hosts_label +"\" class=\"badge badge-danger\">";
msg += "<span title=\"" + remote_hosts_label +"\" class=\"badge bg-danger\">";
}
msg += NtopUtils.addCommas(num_remote_hosts)+" <i class=\"fas fa-laptop\" aria-hidden=\"true\"></i></span></a>";
@ -408,15 +408,15 @@ print[[
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/macs_stats.lua?devices_mode=source_macs_only\">";
if (rsp.macs_pctg < alarm_threshold_low) {
msg += "<span title=\"" + macs_label +"\" class=\"badge badge-secondary\">";
msg += "<span title=\"" + macs_label +"\" class=\"badge bg-secondary\">";
}
else if(rsp.macs_pctg < alarm_threshold_high) {
alert = 1;
msg += "<span title=\"" + macs_label +"\" class=\"badge badge-warning\">";
msg += "<span title=\"" + macs_label +"\" class=\"badge bg-warning\">";
}
else {
alert = 1;
msg += "<span title=\"" + macs_label +"\" class=\"badge badge-danger\">";
msg += "<span title=\"" + macs_label +"\" class=\"badge bg-danger\">";
}
msg += NtopUtils.addCommas(rsp.num_devices)+" <i class=\"fas fa-ethernet\"></i></span></a>";
@ -426,15 +426,15 @@ print[[
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/flows_stats.lua\">";
if (rsp.flows_pctg < alarm_threshold_low) {
msg += "<span class=\"badge badge-secondary\">";
msg += "<span class=\"badge bg-secondary\">";
}
else if(rsp.flows_pctg < alarm_threshold_high) {
alert = 1;
msg += "<span class=\"badge badge-warning\">";
msg += "<span class=\"badge bg-warning\">";
}
else {
alert = 1;
msg += "<span class=\"badge badge-danger\">";
msg += "<span class=\"badge bg-danger\">";
}
msg += NtopUtils.addCommas(rsp.num_flows)+" <i class=\"fas fa-stream\"></i> </span> </a>";
@ -443,7 +443,7 @@ print[[
const export_pctg = rsp.flow_export_drops / (rsp.flow_export_count + rsp.flow_export_drops + 1);
if (export_pctg > ]] print(stats_utils.UPPER_BOUND_INFO_EXPORTS) print[[) {
const badge_class = (export_pctg <= ]] print(stats_utils.UPPER_BOUND_WARNING_EXPORTS) print[[) ? 'warning' : 'danger';
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/if_stats.lua\"><span class=\"badge badge-"+badge_class+"\"><i class=\"fas fa-exclamation-triangle\" style=\"color: #FFFFFF;\"></i> "+NtopUtils.addCommas(rsp.flow_export_drops)+" Export drop";
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/if_stats.lua\"><span class=\"badge bg-"+badge_class+"\"><i class=\"fas fa-exclamation-triangle\" style=\"color: #FFFFFF;\"></i> "+NtopUtils.addCommas(rsp.flow_export_drops)+" Export drop";
if(rsp.flow_export_drops > 1) msg += "s";
msg += "</span></a>";
}
@ -453,7 +453,7 @@ print[[
if ((rsp.num_live_captures != undefined) && (rsp.num_live_captures > 0) && (!systemInterfaceEnabled)) {
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/live_capture_stats.lua\">";
msg += "<span class=\"badge badge-primary\">";
msg += "<span class=\"badge bg-primary\">";
msg += NtopUtils.addCommas(rsp.num_live_captures)+" <i class=\"fas fa-download fa-lg\"></i></span></a>";
}
@ -468,7 +468,7 @@ print[[
}
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/if_stats.lua?ifid=]] print(tostring(ifid)) print[[&page=traffic_recording&tab=status\">";
msg += "<span class=\"badge badge-"+status_label+"\" title=\""+NtopUtils.addCommas(status_title)+"\">";
msg += "<span class=\"badge bg-"+status_label+"\" title=\""+NtopUtils.addCommas(status_title)+"\">";
msg += "<i class=\"fas fa-hdd fa-lg\"></i></span></a>";
}
@ -480,7 +480,7 @@ print[[
if (rsp.traffic_extraction == "ready") status_label="primary";
msg += "<a href=\"]] print (ntop.getHttpPrefix()) print [[/lua/if_stats.lua?ifid=]] print(tostring(ifid)) print[[&page=traffic_recording&tab=jobs\">";
msg += "<span class=\"badge badge-"+status_label+"\" title=\""+NtopUtils.addCommas(status_title)+"\">";
msg += "<span class=\"badge bg-"+status_label+"\" title=\""+NtopUtils.addCommas(status_title)+"\">";
msg += rsp.traffic_extraction_num_tasks+" <i class=\"fas fa-tasks fa-lg\"></i></span></a>";
}
@ -515,9 +515,6 @@ local footer_refresh_rate = ntop.getPrefs()["housekeeping_frequency"]
print(footer_refresh_rate.."")
print[[ * 1000); /* re-schedule every [interface-rate] seconds */
//Enable tooltip without a fixer placement
$(document).ready(function () { $("[rel='tooltip'],a,i,summary>span").tooltip(); });
//Automatically open dropdown-menu
$(document).ready(function(){
$('ul.nav li.dropdown').hover(function() {
@ -599,9 +596,13 @@ end
-- ######################################
local http_prefix = ntop.getHttpPrefix()
-- close wrapper
print[[
</main>
</div>
<script type="text/javascript" src="]] print(http_prefix) print[[/bootstrap/js/bootstrap.min.js?"></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/selectpicker/js/bootstrap-select.min.js"></script>
</body>
</html> ]]

View file

@ -31,9 +31,9 @@ if _POST and table.len(_POST) > 0 and isAdministrator() then
end
if #err_msgs == 0 then
print('<div class="alert alert-success alert-dismissable"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>'..i18n('delete_data.delete_inactive_interfaces_data_ok')..'</div>')
print('<div class="alert alert-success alert-dismissable">'..i18n('delete_data.delete_inactive_interfaces_data_ok')..'<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
else
print('<div class="alert alert-danger alert-dismissable"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>'..i18n('delete_data.delete_inactive_interfaces_data_failed')..' '..table.concat(err_msgs, ' ')..'</div>')
print('<div class="alert alert-danger alert-dismissable">'..i18n('delete_data.delete_inactive_interfaces_data_failed')..' '..table.concat(err_msgs, ' ')..'<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
end
else
@ -44,8 +44,8 @@ if _POST and table.len(_POST) > 0 and isAdministrator() then
print([[
<div class="alert alert-success alert-dismissable">
<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
]]..i18n('delete_data.delete_active_interface_data_ok', {ifname = i18n("system"), product = ntop.getInfo().product})..[[
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
]])
end

View file

@ -805,7 +805,7 @@ print[[
} else if (rsp.status == 'update-avail' || rsp.status == 'upgrade-failure') {
$('#updates-info-li').html('<span class="badge badge-pill badge-danger">]] print(i18n("updates.available")) print[[</span> ]] print(info["product"]) print[[ ' + rsp.version);
$('#updates-info-li').html('<span class="badge bg-pill bg-danger">]] print(i18n("updates.available")) print[[</span> ]] print(info["product"]) print[[ ' + rsp.version);
$('#updates-info-li').attr('title', '');
var icon = '<i class="fas fa-download"></i>';
@ -855,10 +855,10 @@ end -- num_ifaces > 0
-- ##############################################
print([[
<nav class="navbar navbar-expand-md navbar-expand-lg fixed-top navbar-light justify-content-between" id='n-navbar'>
<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top px-2" id='n-navbar'>
<ul class='navbar-nav flex-row flex-wrap'>
<li class='nav-item'>
<button class='btn btn-outline-dark border-0 btn-sidebar' data-toggle='sidebar'>
<button class='btn btn-outline-dark border-0 btn-sidebar' data-bs-toggle='sidebar'>
<i class="fas fa-bars"></i>
</button>
</li>
@ -979,7 +979,7 @@ print(template_utils.gen("pages/components/ifaces-dropdown.template", context))
if not is_pcap_dump and not is_system_interface then
print([[
<li class='nav-item d-none d-sm-done d-md-flex d-lg-flex ml-2'>
<li class='nav-item d-none d-sm-done d-md-flex d-lg-flex ms-2'>
<div class='info-stats'>
]].. page_utils.generate_info_stats() ..[[
</div>
@ -1000,7 +1000,7 @@ if (_POST["ntopng_license"] == nil) and (info["pro.systemid"] and (info["pro.sys
local rest = info["pro.demo_ends_at"] - os.time()
if (rest > 0) then
print('<li class="nav-item nav-link"><a href="https://shop.ntop.org"><span class="badge badge-warning">')
print('<li class="nav-item nav-link"><a href="https://shop.ntop.org"><span class="badge bg-warning">')
print(" " .. i18n("about.licence_expires_in", {time=secondsToTime(rest)}))
print('</span></a></li>')
end
@ -1008,7 +1008,7 @@ if (_POST["ntopng_license"] == nil) and (info["pro.systemid"] and (info["pro.sys
else
if(not(ntop.getInfo()["pro.forced_community"])) then
print('<li class="nav-item nav-link"><a href="https://shop.ntop.org"><span class="badge badge-warning">')
print('<li class="nav-item nav-link"><a href="https://shop.ntop.org"><span class="badge bg-warning">')
print(i18n("about.upgrade_to_professional")..' <i class="fas fa-external-link-alt"></i>')
print('</span></a></li>')
end
@ -1027,7 +1027,7 @@ print([[
print('</ul>')
print([[
<ul class='navbar-nav flex-row ml-auto'>
<ul class='navbar-nav flex-row ms-auto'>
]])
-- ########################################
@ -1060,7 +1060,6 @@ end
-- #########################################
-- User Navbar Menu
-- Render Blog Notifications
if (not info.oem) then
@ -1070,8 +1069,8 @@ if (not info.oem) then
local posts, new_posts_counter = blog_utils.readPostsFromRedis(username)
print([[
<li class="nav-item">
<a id="notification-list" href="#" class="nav-link dropdown-toggle mx-2 dark-gray position-relative" data-toggle="dropdown">
<li class="nav-item dropdown">
<a id="notification-list" href="#" class="nav-link dropdown-toggle mx-2 dark-gray position-relative" data-bs-toggle="dropdown">
<i class='fas fa-bell'></i>
]])
@ -1081,7 +1080,7 @@ if (not info.oem) then
print([[
</a>
<div class="dropdown-menu dropdown-menu-right p-1">
<div class="dropdown-menu dropdown-menu-end p-1">
<div class="blog-section">
<span class="dropdown-header p-2 mb-0">]].. i18n("blog_feed.news_from_blog") ..[[</span>
<ul class="list-unstyled">]])
@ -1137,22 +1136,24 @@ local session_user = _SESSION['user']
local is_no_login_user = isNoLoginUser()
print([[
<li class="nav-item">
<a href='#' class="nav-link dropdown-toggle mx-2 dark-gray" data-toggle="dropdown">
<li class="nav-item dropdown">
<a href='#' class="nav-link dropdown-toggle mx-2 dark-gray" id='navbar-user-dropdown-link' role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class='fas fa-user'></i>
</a>
<ul class="dropdown-menu dropdown-menu-right">]])
<ul class="dropdown-menu dropdown-menu-lg-end" aria-labelledby='navbar-user-dropdown-link'>]])
if (not _SESSION["localuser"] or not is_admin) and (not is_no_login_user) then
print[[
<a class="dropdown-item" href='#password_dialog' data-toggle='modal'>
<li>
<a class="dropdown-item" href='#password_dialog' data-bs-toggle='modal'>
<i class='fas fa-user'></i> ]] print(i18n("manage_users.manage_user_x", {user = _SESSION["user"]})) print[[
</a>
</li>
]]
else
if (not is_no_login_user) then
print([[<a class='dropdown-item' href=']].. ntop.getHttpPrefix() ..[[/lua/admin/users.lua?user=]].. session_user:gsub("%.", "\\\\\\\\.") ..[['><i class='fas fa-user'></i> ]].. session_user ..[[</a>]])
print([[<li><a class="dropdown-item" href=']].. ntop.getHttpPrefix() ..[[/lua/admin/users.lua?user=]].. session_user:gsub("%.", "\\\\\\\\.") ..[['><i class='fas fa-user'></i> ]].. session_user ..[[</a></li>]])
else
print([[<li class='dropdown-item disabled'>]])
print([[<i class='fas fa-user'></i> ]].. session_user ..[[]])
@ -1167,12 +1168,12 @@ print([[
<li class="dropdown-divider"></li>
<li class="dropdown-header">]] .. i18n("nedge.product_status", {product=info.product}) .. [[</li>
<li>
<a class="dropdown-item" href="#poweroff_dialog" data-toggle="modal">
<a class="dropdown-item" href="#poweroff_dialog" data-bs-toggle="modal">
<i class="fas fa-power-off"></i> ]]..i18n("nedge.power_off")..[[
</a>
</li>
<li>
<a class="dropdown-item" href="#reboot_dialog" data-toggle="modal">
<a class="dropdown-item" href="#reboot_dialog" data-bs-toggle="dropdown"e="modal">
<i class="fas fa-redo"></i> ]]..i18n("nedge.reboot")..[[
</a>
</li>
@ -1184,7 +1185,7 @@ if updates_supported then
print([[
<li class="dropdown-divider"></li>
<li class="dropdown-header" id="updates-info-li">]] .. i18n("updates.no_updates") .. [[.</li>
<li><button class="dropdown-item" id="updates-install-li"><i class="fas fa-sync"></i> ]] .. (i18n("updates.check")) ..[[</button></li>
<li><a class='dropdown-item' href='#' id="updates-install-li"><i class="fas fa-sync"></i> ]] .. (i18n("updates.check")) ..[[</a></li>
]])
end
@ -1192,7 +1193,9 @@ end
if is_admin then
print([[
<li class='dropdown-divider'></li>
<a class='dropdown-item toggle-dark-theme' href='#'><i class="fas fa-adjust"></i> ]].. i18n("toggle_dark_theme") ..[[</a>
<li>
<a class='dropdown-item toggle-dark-theme' href='#'><i class="fas fa-adjust"></i> ]].. i18n("toggle_dark_theme") ..[[</a>
</li>
]])
end
@ -1202,7 +1205,7 @@ if(_SESSION["user"] ~= nil and (not is_no_login_user)) then
print[[
<li class='dropdown-divider'></li>
<li class="nav-item">
<li>
<a class="dropdown-item" href="]]
print(ntop.getHttpPrefix())
print [[/lua/logout.lua" onclick="return confirm(']] print(i18n("login.logout_message")) print [[')"><i class="fas fa-sign-out-alt"></i> ]] print(i18n("login.logout")) print[[</a></li>]]
@ -1212,7 +1215,7 @@ if(_SESSION["user"] ~= nil and (not is_no_login_user)) then
if(is_admin and ntop.isPackage() and not ntop.isWindows()) then
print [[
<li class="dropdown-divider"></li>
<li class="nav-item"><a class="dropdown-item restart-service" href="#"><i class="fas fa-redo-alt"></i> ]] print(i18n("restart.restart")) print[[</a></li>
<li><a class="dropdown-item restart-service" href="#"><i class="fas fa-redo-alt"></i> ]] print(i18n("restart.restart")) print[[</a></li>
]]
end
@ -1235,8 +1238,8 @@ toasts_manager.render_toasts("main-container", toasts_manager.load_main_toasts()
print("<div class='main-alerts'>")
-- Hidden by default, will be shown by the footer if necessary
print('<div id="influxdb-error-msg" class="alert alert-danger" style="display:none" role="alert"><i class="fas fa-exclamation-triangle fa-lg" id="alerts-menu-triangle"></i> <span id="influxdb-error-msg-text"></span>')
print[[<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>]]
print('<div id="influxdb-error-msg" class="alert alert-danger alert-dismissable" style="display:none" role="alert"><i class="fas fa-exclamation-triangle fa-lg" id="alerts-menu-triangle"></i> <span id="influxdb-error-msg-text"></span>')
print[[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]]
print('</div>')
-- Hidden by default, will be shown by the footer if necessary
@ -1244,15 +1247,15 @@ print('<div id="major-release-alert" class="alert alert-info" style="display:non
print('</div>')
-- Hidden by default, will be shown by the footer if necessary
print('<div id="move-rrd-to-influxdb" class="alert alert-warning" style="display:none" role="alert"><i class="fas fa-exclamation-triangle fa-lg" id="alerts-menu-triangle"></i> ')
print[[<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>]]
print('<div id="move-rrd-to-influxdb" class="alert alert-warning alert-dismissable" style="display:none" role="alert"><i class="fas fa-exclamation-triangle fa-lg" id="alerts-menu-triangle"></i> ')
print(i18n("alert_messages.influxdb_migration_msg", {url="https://www.ntop.org/ntopng/ntopng-and-time-series-from-rrd-to-influxdb-new-charts-with-time-shift/"}))
print[[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]]
print('</div>')
if(_SESSION["INVALID_CSRF"]) then
print('<div id="move-rrd-to-influxdb" class="alert alert-warning" role="alert"><i class="fas fa-exclamation-triangle fa-lg" id="alerts-menu-triangle"></i> ')
print[[<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>]]
print('<div id="move-rrd-to-influxdb" class="alert alert-warning alert-dismissable" role="alert"><i class="fas fa-exclamation-triangle fa-lg" id="alerts-menu-triangle"></i> ')
print(i18n("expired_csrf"))
print[[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]]
print('</div>')
end

View file

@ -11,9 +11,7 @@ print [[
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="password_dialog_label">]] print(i18n("manage_users.manage_user_x", {user=[[<span class="password_dialog_title">]].. _SESSION['user'] ..[[</span>]]})) print[[ </h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
<span aria-hidden="true">&times;</span>
</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
@ -24,11 +22,11 @@ print [[
<ul class="nav nav-tabs card-header-tabs" role="tablist" id="edit-user-container">
]]
if(is_admin) then
print[[<li class="nav-item active" id="li_change_prefs"><a class="nav-link active" href="#change-prefs-dialog" role="tab" data-toggle="tab"> ]] print(i18n("prefs.preferences")) print[[ </a></li>]]
print[[<li class="nav-item active" id="li_change_prefs"><a class="nav-link active" href="#change-prefs-dialog" role="tab" data-bs-toggle="tab"> ]] print(i18n("prefs.preferences")) print[[ </a></li>]]
end
print[[
<li class="nav-item ]] print(ternary(is_admin, "", "active")) print[["><a class="nav-link ]] print(ternary(is_admin, "", "active")) print[[" href="#change-password-dialog" role="tab" data-toggle="tab"> ]] print(i18n("login.password")) print[[ </a></li>
<li class="nav-item"><a class="nav-link" href="#user-token-tab" role="tab" data-toggle="tab"> ]] print(i18n("login.auth_token")) print[[ </a></li>
<li class="nav-item ]] print(ternary(is_admin, "", "active")) print[["><a class="nav-link ]] print(ternary(is_admin, "", "active")) print[[" href="#change-password-dialog" role="tab" data-bs-toggle="tab"> ]] print(i18n("login.password")) print[[ </a></li>
<li class="nav-item"><a class="nav-link" href="#user-token-tab" role="tab" data-bs-toggle="tab"> ]] print(i18n("login.auth_token")) print[[ </a></li>
</ul>
</div>
@ -39,11 +37,11 @@ print [[
<script>
password_alert = function() {}
password_alert.error = function(message) { $('#password_alert_placeholder').html('<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">x</button>' + message + '</div>'); }
password_alert.success = function(message) { $('#password_alert_placeholder').html('<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">x</button>' + message + '</div>'); }
password_alert.error = function(message) { $('#password_alert_placeholder').html('<div class="alert alert-danger alert-dismissable">' + message + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>'); }
password_alert.success = function(message) { $('#password_alert_placeholder').html('<div class="alert alert-success alert-dismissable">' + message + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>'); }
</script>
<form data-toggle="validator" id="form_password_reset" method="post" action="]] print(ntop.getHttpPrefix()) print[[/lua/admin/password_reset.lua" accept-charset="UTF-8">
<form data-bs-toggle="validator" id="form_password_reset" method="post" action="]] print(ntop.getHttpPrefix()) print[[/lua/admin/password_reset.lua" accept-charset="UTF-8">
]]
print('<input name="csrf" type="hidden" value="'..ntop.getRandomCSRFValue()..'" />\n')
@ -59,12 +57,10 @@ local col_md_size = "6"
if(not is_admin) then
col_md_size = "4"
print [[
<div class='form-group'>
<label for="old_password_input">]] print(i18n("manage_users.old_password")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' for="old_password_input">]] print(i18n("manage_users.old_password")) print[[</label>
<div class='input-group mb-]] print(col_md_size) print[[ has-feedback'>
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-lock"></i></span>
</div>
<input id="old_password_input" type="password" name="old_password" value="" class="form-control" required>
</div>
</div>
@ -72,22 +68,18 @@ print [[
end
print [[
<div class='form-group'>
<label for="new_password_input">]] print(i18n("manage_users.new_password")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' for="new_password_input">]] print(i18n("manage_users.new_password")) print[[</label>
<div class='input-group mb-]] print(col_md_size) print[['>
<div class="input-group-prepend"><span class="input-group-text">
<i class="fas fa-lock"></i></span>
</div>
<span class="input-group-text"><i class="fas fa-lock"></i></span>
<input id="new_password_input" type="password" name="new_password" value="" class="form-control" pattern="]] print(getPasswordInputPattern()) print[[" required>
</div>
</div>
<div class='form-group'>
<label for="confirm_new_password_input">]] print(i18n("manage_users.new_password_confirm")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' class='form-label' for="confirm_new_password_input">]] print(i18n("manage_users.new_password_confirm")) print[[</label>
<div class='input-group md-]] print(col_md_size) print[['>
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-lock"></i></span>
</div>
<input id="confirm_new_password_input" type="password" name="confirm_password" value="" class="form-control" pattern="]] print(getPasswordInputPattern()) print[[" required>
</div>
</div>
@ -97,7 +89,7 @@ print [[
<hr>
<div class="has-feedback text-right">
<div class="has-feedback text-end">
<button id="password_reset_submit" class="btn btn-primary">]] print(i18n("manage_users.change_user_password")) print[[</button>
</div>
@ -111,14 +103,14 @@ print [[
</div>
<div class="tab-pane ]] print(ternary(is_admin, "active", "")) print[[" id="change-prefs-dialog">
<form data-toggle="validator" id="form_pref_change" method="post" action="]] print(ntop.getHttpPrefix()) print[[/lua/admin/change_user_prefs.lua">
<form data-bs-toggle="validator" id="form_pref_change" method="post" action="]] print(ntop.getHttpPrefix()) print[[/lua/admin/change_user_prefs.lua">
<input name="csrf" type="hidden" value="]] print(ntop.getRandomCSRFValue()) print[[" />
<input id="pref_dialog_username" type="hidden" name="username" value="" />
<div class='form-group'>
<label for="host_role_select">]] print(i18n("manage_users.user_role")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' for="host_role_select">]] print(i18n("manage_users.user_role")) print[[</label>
<div class='input-group mb-6'>
<select id="host_role_select" name="user_role" class="form-control">
<select id="host_role_select" name="user_role" class="form-select">
<option value="unprivileged">]] print(i18n("manage_users.non_privileged_user")) print[[</option>
<option value="administrator">]] print(i18n("manage_users.administrator")) print[[</option>
</select>
@ -127,10 +119,10 @@ print [[
<div id="unprivileged_manage_input">
<div class='form-group'>
<label for="allowed_interface">]] print(i18n("manage_users.allowed_interface")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' for="allowed_interface">]] print(i18n("manage_users.allowed_interface")) print[[</label>
<div class='input-group mb-6'>
<select name="allowed_interface" id="allowed_interface" class="form-control">
<select name="allowed_interface" id="allowed_interface" class="form-select">
<option value="">]] print(i18n("manage_users.any_interface")) print[[</option>
]]
for _, interface_name in pairsByValues(interface.getIfNames(), asc) do
@ -142,8 +134,8 @@ print [[
</div>
</div>
<div class='form-group'>
<label for="networks_input">]] print(i18n("manage_users.allowed_networks")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' for="networks_input">]] print(i18n("manage_users.allowed_networks")) print[[</label>
<div class='input-group mb-6'>
<input id="networks_input" type="text" name="allowed_networks" value="" class="form-control w-100" required>
</div>
@ -151,7 +143,7 @@ print [[
</div>
<div class="form-group mb-6">
<div class="form-group mb-3 mb-6">
<div class="form-check pl-0">]]
print(template.gen("on_off_switch.html", {
@ -178,13 +170,11 @@ print [[
]]
print[[
<div class='form-group'>
<label for="user_language">]] print(i18n("language")) print[[</label>
<div class='form-group mb-3'>
<label class='form-label' for="user_language">]] print(i18n("language")) print[[</label>
<div class='input-group mb-6'>
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-language" aria-hidden="true"></i></span>
</div>
<select name="user_language" id="user_language" class="form-control">]]
<select name="user_language" id="user_language" class="form-select">]]
for _, lang in ipairs(locales_utils.getAvailableLocales()) do
print('<option value="'..lang["code"]..'">'..i18n("locales." .. lang["code"])..'</option>')
@ -197,7 +187,7 @@ print[[
print[[
<hr>
<div class="has-feedback text-right">
<div class="has-feedback text-end">
<button id="pref_change" class="btn btn-primary">]] print(i18n("manage_users.change_user_preferences")) print[[</button>
</div>
</form>
@ -215,18 +205,18 @@ local input_value = api_token or i18n("manage_users.token_not_generated")
print([[
<div class='tab-pane' id='user-token-tab'>
<div class="form-group has-error">
<label for="token-input">]] .. i18n("manage_users.token") ..[[</label>
<div class="form-group mb-3 has-error">
<label class='form-label' for="token-input">]] .. i18n("manage_users.token") ..[[</label>
<div class='d-flex'>
<input readonly class='form-control' id='input-token' value=']].. input_value ..[['>
<input readonly hidden id='input-username' value=']].._SESSION['user'] ..[['>
<button ]].. (isEmptyString(api_token) and "style='display: none'" or "") ..[[ class="btn btn-light border ml-1" data-placement="bottom" id="btn-copy-token">
<button ]].. (isEmptyString(api_token) and "style='display: none'" or "") ..[[ class="btn btn-light border ms-1" data-placement="bottom" id="btn-copy-token">
<i class='fas fa-copy'></i>
</button>
</div>
</div>
<hr>
<div class='w-100 text-right'>
<div class='w-100 text-end'>
<button class='btn btn-primary' id='btn-generate_token'>]].. i18n("login.generate_token") ..[[</button>
</div>
</div>

View file

@ -99,7 +99,7 @@ if recording_utils.isSupportedZMQInterface(ifid) then
<tr>
<th width=30%>]] print(i18n("traffic_recording.ext_interface")) print [[</th>
<td colspan=2>
<select class="form-control" name="custom_name" value="]] print(ext_ifname) print [[">
<select class="form-select" name="custom_name" value="]] print(ext_ifname) print [[">
]]
for ifname,info in pairsByKeys(ext_interfaces, asc) do
print("<option value=\""..ifname.."\" "..ternary(ifname == ext_ifname, "selected", "")..">"..info.ifdesc.."</option>")

View file

@ -17,7 +17,7 @@ print [[",
showPagination: true,
title: "",
buttons: [
"<a href='#add_user_dialog' role='button' class='add-on btn' data-toggle='modal'><i class='fas fa-plus fa-sm'></i></a>"
"<a href='#add_user_dialog' role='button' class='add-on btn' data-bs-toggle='modal'><i class='fas fa-plus fa-sm'></i></a>"
],
tableCallback: function() {

View file

@ -141,7 +141,7 @@ print [[
<div class="control-group text-center">
<span class='mx-1'>]] print(i18n("index_page.refresh_frequency"))
print[[:</span><div class="btn-group btn-small">
<button class="btn btn-secondary btn-xs dropdown-toggle" data-toggle="dropdown">
<button class="btn btn-secondary btn-xs dropdown-toggle" data-bs-toggle="dropdown">
]]
if (refresh ~= '0') then
if (refresh == '60000') then
@ -156,26 +156,26 @@ end
print [[</button>
<ul class="dropdown-menu ">
]]
print('<li class="nav-item text-left"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=5000" >5 '..i18n("index_page.seconds")..'</a></li>\n')
print('<li class="nav-item text-left"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=10000" >10 '..i18n("index_page.seconds")..'</a></li>\n')
print('<li class="nav-item text-left"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=30000" >30 '..i18n("index_page.seconds")..'</a></li>\n')
print('<li class="nav-item text-left"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=60000" >1 '..i18n("index_page.minute")..'</a></li>\n')
print('<li class="nav-item text-left"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=0" >'..i18n("index_page.never")..'</a></li>\n')
print('<li class="nav-item text-start"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=5000" >5 '..i18n("index_page.seconds")..'</a></li>\n')
print('<li class="nav-item text-start"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=10000" >10 '..i18n("index_page.seconds")..'</a></li>\n')
print('<li class="nav-item text-start"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=30000" >30 '..i18n("index_page.seconds")..'</a></li>\n')
print('<li class="nav-item text-start"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=60000" >1 '..i18n("index_page.minute")..'</a></li>\n')
print('<li class="nav-item text-start"> <a class="dropdown-item" href="'..ntop.getHttpPrefix()..'?refresh=0" >'..i18n("index_page.never")..'</a></li>\n')
print [[
</ul>
</div><!-- /btn-group -->
]]
if (refresh ~= '0') then
print [[<span class='mx-1'>]] print(i18n("index_page.live_update")) print [[:</span>]] print[[<div class="btn-group btn-group-toggle btn-group-xs" data-toggle="buttons" data-toggle-name="topflow_graph_state">
<button id="topflow_graph_state_play" value="1" type="button" class="btn btn-secondary btn-xs active" data-toggle="button" disabled><i class="fas fa-pause"></i></button>
<button id="topflow_graph_state_stop" value="0" type="button" class="btn btn-secondary btn-xs" data-toggle="button" ><i class="fas fa-stop"></i></button>
print [[<span class='mx-1'>]] print(i18n("index_page.live_update")) print [[:</span>]] print[[<div class="btn-group btn-group-toggle btn-group-xs" data-bs-toggle="buttons" data-bs-toggle-name="topflow_graph_state">
<button id="topflow_graph_state_play" value="1" type="button" class="btn btn-secondary btn-xs active" data-bs-toggle="button" disabled><i class="fas fa-pause"></i></button>
<button id="topflow_graph_state_stop" value="0" type="button" class="btn btn-secondary btn-xs" data-bs-toggle="button" ><i class="fas fa-stop"></i></button>
</div>
]]
else
print [[<span class='mx-1'>]] print(i18n("index_page.refresh")) print [[:</span>]] print[[<div class="btn-group btn-small">
<button id="topflow_graph_refresh" class="btn btn-secondary btn-xs">
<i rel="tooltip" data-toggle="tooltip" data-placement="top" data-original-title="]] print(i18n("index_page.refresh_graph_popup_msg")) print [[" class="fas fa-sync"></i></button>
<i rel="tooltip" data-bs-toggle="tooltip" data-placement="top" data-original-title="]] print(i18n("index_page.refresh_graph_popup_msg")) print [[" class="fas fa-sync"></i></button>
</div>
]]
end

View file

@ -55,13 +55,13 @@ print [[
<div class="container">
<form id="form_add_user" role="form" data-toggle="validator" class="form-signin" action="]] print(ntop.getHttpPrefix()) print[[/lua/authorize_captive.lua" method="GET">
<form id="form_add_user" role="form" data-bs-toggle="validator" class="form-signin" action="]] print(ntop.getHttpPrefix()) print[[/lua/authorize_captive.lua" method="GET">
<h2 class="form-signin-heading" style="font-weight: bold; text-align: center;">]] print(info["product"]) print [[<br>Access Portal</h2>
<br>
<br>
<div class="form-group">
<div class="form-group mb-3">
<div class="form-check">
<label class="form-check-label" style="font-weight: normal;">]]

View file

@ -31,7 +31,7 @@ for k,v in pairs(lc) do
local capture_max_pkts = v.capture_max_pkts
local diff = v.capture_until - os.time()
local capture_until = format_utils.formatEpoch(v.capture_until).." [ - "..diff.." sec ]"
local stop_href = "<A HREF=".. ntop.getHttpPrefix() .."/lua/stop_live_capture.lua?capture_id="..v.id.."><span class=\"badge badge-danger\">Stop <i class=\"fas fa-download\"></i></span></A>"
local stop_href = "<A HREF=".. ntop.getHttpPrefix() .."/lua/stop_live_capture.lua?capture_id="..v.id.."><span class=\"badge bg-danger\">Stop <i class=\"fas fa-download\"></i></span></A>"
if(v.host ~= nil) then host = v.host end
res[#res + 1] = { host = host, num_captured_packets = num_captured_packets, capture_until = capture_until, stop_href = stop_href }

View file

@ -2,7 +2,7 @@
-- (C) 2013-21 - ntop.org
--
dirs = ntop.getDirs()
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
-- io.write ("Session:".._SESSION["session"].."\n")
require "lua_utils"
@ -13,63 +13,72 @@ sendHTTPContentTypeHeader('text/html')
page_utils.print_header()
info = ntop.getInfo()
local info = ntop.getInfo()
local referer = _GET["referer"]
local reason = _GET["reason"]
print [[
<div class="container-narrow">
print ([[
<script src=']].. ntop.getHttpPrefix() ..[[/js/particle/particle.min.js'></script>
<style>
html, body {
height: 100vh;
}
body {
background-color: #f5f5f5;
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
padding-top: 0 !important;
text-align: center;
}
<style type="text/css">
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
#particles-js {
position: absolute;
width: 100%;
height: 100%;
background-color: #f5f5f5;
background-image: url("");
background-repeat: no-repeat;
background-size: cover;
background-position: 50% 50%;
} /* ---- stats.js ---- */
.form-signin {
max-width: 350px;
padding: 9px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin input[type="text"],
.form-signin input[type="password"] {
font-size: 16px;
height: auto;
margin-bottom: 15px;
padding: 7px 9px;
}
</style>
<div class="container">
]]
.form-signin {
width: 100%;
max-width: 330px;
padding: 15px;
margin: auto;
z-index: 1000;
}
</style>
<div id="particles-js"></div>
<main class='form-signin'>
]])
local blacklisted = ntop.isLoginBlacklisted()
-- must specify the accept-charset here or the encoding for the special characters will be different from the encoding used when saving/updating passwords
print[[
<form id="form_add_user" role="form" data-toggle="validator" class="form-signin" onsubmit="return makeUsernameLowercase();" action="]] print(ntop.getHttpPrefix()) print[[/authorize.html" method="POST" accept-charset="UTF-8">
<h2 class="form-signin-heading" style="font-weight: bold;">]] print(i18n("login.welcome_to", {product=info["product"]})) print[[</h2>
<div class="form-group has-feedback">
<input type="hidden" class="form-control" name="user">
<input type="text" class="form-control" name="_username" placeholder="]] print(i18n("login.username_ph")) print[[" required]] print(ternary(blacklisted, " disabled", "")) print[[>
<input type="password" class="form-control" name="password" placeholder="]] print(i18n("login.password_ph")) print[[" pattern="]] print(getPasswordInputPattern()) print[[" required]] print(ternary(blacklisted, " disabled", "")) print[[>
<form id="form_add_user" role="form" data-bs-toggle="validator" onsubmit="return makeUsernameLowercase();" action="]] print(ntop.getHttpPrefix()) print[[/authorize.html" method="POST" accept-charset="UTF-8">
<input type="hidden" class="form-control" name="user">
<input type="hidden" class="form-control" name="referer" value="]] print(referer or "") print [[">
<h1 class="h3 mb-3 fw-normal">]] print(i18n("login.welcome_to", {product=info["product"]})) print[[</h1>
<div class="form-group mb-3 has-feedback mb-3">
<div class='form-floating'>
<input placeholder='admin' id='input-username' type="text" class="form-control" name="_username" required]] print(ternary(blacklisted, " disabled", "")) print[[>
<label for="input-username">]] print(i18n("login.username_ph")) print[[
</div>
<div class='form-floating'>
<input placeholder='admin' id='input-password' type="password" class="form-control" name="password" pattern="]] print(getPasswordInputPattern()) print[[" required]] print(ternary(blacklisted, " disabled", "")) print[[>
<label for="input-password">]] print(i18n("login.password_ph")) print[[
</div>
]]
if blacklisted then
@ -85,12 +94,8 @@ if not isEmptyString(reason) then
end
print[[
</div>
<input type="hidden" class="form-control" name="referer" value="]] print(referer or "") print [[">
<button class="btn btn-lg btn-primary btn-block" type="submit" ]]
-- style="background-color: #ff7500; border-color: #ff7500"
print [[>]] print(i18n("login.login")) print[[</button>
</div> <!-- Close .form-group mb-3 -->
<button class="w-100 btn btn-lg btn-primary" type="submit">]] print(i18n("login.login")) print[[</button>
<div class="row">
<div >&nbsp;</div>
@ -106,7 +111,7 @@ if(info["product"] == "ntopng") then
<p>]] print(i18n("login.donation", {product=info["product"], donation_url="http://shop.ntop.org"})) print[[
</p>
<p>]] print(info["copyright"]) print [[<br> ]] print(i18n("login.license", {product=info["product"], license="GPLv3", license_url="http://www.gnu.org/copyleft/gpl.html"})) print[[</p>
<p class='text-muted'>]] print(info["copyright"]) print [[<br> ]] print(i18n("login.license", {product=info["product"], license="GPLv3", license_url="http://www.gnu.org/copyleft/gpl.html"})) print[[</p>
</small>]]
else
print("<small>"..info["copyright"].."</small>")
@ -142,12 +147,15 @@ end
return false;
}
if(isIeBrowser())
$("#unsupported-browser").show();
if(isIeBrowser()) $("#unsupported-browser").show();
</script>
<script type='text/javascript'>
particlesJS("particles-js", {"particles":{"number":{"value":20,"density":{"enable":true,"value_area":500}},"color":{"value":"#ccc"},"shape":{"type":"circle","stroke":{"width":0,"color":"#000000"},"polygon":{"nb_sides":5},"image":{"src":"img/github.svg","width":100,"height":100}},"opacity":{"value":1,"random":false,"anim":{"enable":false,"speed":1,"opacity_min":0.1,"sync":false}},"size":{"value":3,"random":true,"anim":{"enable":false,"speed":40,"size_min":0.1,"sync":false}},"line_linked":{"enable":true,"distance":150,"color":"#6e6e6e","opacity":0.4,"width":1},"move":{"enable":true,"speed":1,"direction":"none","random":false,"straight":false,"out_mode":"out","bounce":false,"attract":{"enable":false,"rotateX":600,"rotateY":1200}}},"interactivity":{"detect_on":"canvas","events":{"onhover":{"enable":false,"mode":"repulse"},"onclick":{"enable":false,"mode":"push"},"resize":true},"modes":{"grab":{"distance":400,"line_linked":{"opacity":1}},"bubble":{"distance":400,"size":40,"duration":2,"opacity":8,"speed":3},"repulse":{"distance":200,"duration":0.4},"push":{"particles_nb":4},"remove":{"particles_nb":2}}},"retina_detect":true});
</script>
</div> <!-- /container -->
</main>
<script type="text/javascript" src="]] print(ntop.getHttpPrefix()) print[[/bootstrap/js/bootstrap.min.js?"></script>
<script type="text/javascript" src="]] print(ntop.getHttpPrefix()) print[[/selectpicker/js/bootstrap-select.min.js"></script>
</body>
</html>
]]

View file

@ -90,9 +90,9 @@ end
if isAdministrator() then
if _POST["action"] == "reset_stats" then
if interface.resetMacStats(mac) then
print("<div class=\"alert alert alert-success\">")
print[[<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>]]
print("<div class=\"alert alert alert-dismissable alert-success\">")
print(i18n("mac_details.reset_stats_in_progress"))
print([[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]])
print("</div>")
end
end

View file

@ -108,7 +108,7 @@ print('buttons: [')
-- table.clone needed to modify some parameters while keeping the original unchanged
local macs_params = table.clone(page_params)
macs_params.devices_mode = nil
print('\'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..i18n("mac_stats.filter_macs")..devices_mode_filter..'<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;"><li><a class="dropdown-item" href="')
print('\'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..i18n("mac_stats.filter_macs")..devices_mode_filter..'<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;"><li><a class="dropdown-item" href="')
print(getPageUrl(base_url, macs_params))
print('">'..i18n("mac_stats.all_devices")..'</a></li>')
@ -126,7 +126,7 @@ print('buttons: [')
manufacturer_params.manufacturer = nil
print[[, '\
<div class="btn-group float-right">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("mac_stats.manufacturer")) print(manufacturer_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("mac_stats.manufacturer")) print(manufacturer_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, manufacturer_params)) print[[">]] print(i18n("mac_stats.all_manufacturers")) print[[</a></li>\
]]
@ -147,7 +147,7 @@ for manuf, count in pairsByKeys(interface.getMacManufacturers(nil, nil, device_t
devicetype_params.device_type = nil
print[[, '\
<div class="btn-group float-right">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("details.device_type")) print(devtype_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("details.device_type")) print(devtype_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, devicetype_params)) print[[">]] print(i18n("mac_stats.all_devices")) print[[</a></li>\
]]

View file

@ -52,10 +52,10 @@ else
delete_data_utils.request_delete_active_interface_data(_POST["ifid"])
print(
'<div class="alert alert-success alert-dismissable"><a href="" class="close" data-dismiss="alert" aria-label="close">&times;</a>' ..
'<div class="alert alert-success alert-dismissable">' ..
i18n('delete_data.delete_active_interface_data_ok',
{ifname = ifname, product = ntop.getInfo().product}) ..
'</div>')
'<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
else -- we're deleting an host
@ -82,15 +82,15 @@ else
if #err_msgs == 0 then
print(
'<div class="alert alert-success alert-dismissable"><a href="" class="close" data-dismiss="alert" aria-label="close">&times;</a>' ..
'<div class="alert alert-success alert-dismissable">' ..
i18n('delete_data.delete_ok',
{host = hostinfo2hostkey(host_info)}) .. '</div>')
{host = hostinfo2hostkey(host_info)}) .. '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
else
print(
'<div class="alert alert-danger alert-dismissable"><a href="" class="close" data-dismiss="alert" aria-label="close">&times;</a>' ..
'<div class="alert alert-danger alert-dismissable">' ..
i18n('delete_data.delete_failed',
{host = hostinfo2hostkey(host_info)}) .. ' ' ..
table.concat(err_msgs, ' ') .. '</div>')
table.concat(err_msgs, ' ') .. '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>')
end
end

View file

@ -17,7 +17,7 @@ local dirs = ntop.getDirs()
local alert_severities = {
debug = {
severity_id = 1,
label = "badge-info",
label = "bg-info",
icon = "fas fa-fw fa-bug text-info",
color = "#a8e4ef",
i18n_title = "alerts_dashboard.debug",
@ -26,7 +26,7 @@ local alert_severities = {
},
info = {
severity_id = 2,
label = "badge-info",
label = "bg-info",
icon = "fas fa-fw fa-info-circle text-info",
color = "#adebad",
i18n_title = "alerts_dashboard.info",
@ -36,7 +36,7 @@ local alert_severities = {
},
notice = {
severity_id = 3,
label = "badge-info",
label = "bg-info",
icon = "fas fa-fw fa-hand-paper text-primary",
color = "#70db70",
i18n_title = "alerts_dashboard.notice",
@ -46,7 +46,7 @@ local alert_severities = {
},
warning = {
severity_id = 4,
label = "badge-warning",
label = "bg-warning",
icon = "fas fa-fw fa-exclamation-triangle text-warning",
color = "#ffc007",
i18n_title = "alerts_dashboard.warning",
@ -56,7 +56,7 @@ local alert_severities = {
},
error = {
severity_id = 5,
label = "badge-danger",
label = "bg-danger",
icon = "fas fa-fw fa-exclamation-triangle text-danger",
color = "#ff3231",
i18n_title = "alerts_dashboard.error",
@ -66,7 +66,7 @@ local alert_severities = {
},
critical = {
severity_id = 6,
label = "badge-danger",
label = "bg-danger",
icon = "fas fa-fw fa-exclamation-triangle text-danger",
color = "#fb6962",
i18n_title = "alerts_dashboard.critical",
@ -75,7 +75,7 @@ local alert_severities = {
},
alert = {
severity_id = 7,
label = "badge-danger",
label = "bg-danger",
icon = "fas fa-fw fa-bomb text-danger",
color = "#fb6962",
i18n_title = "alerts_dashboard.alert",
@ -84,7 +84,7 @@ local alert_severities = {
},
emergency = {
severity_id = 8,
label = "badge-danger text-danger",
label = "bg-danger text-danger",
icon = "fas fa-fw fa-bomb",
color = "#fb6962",
i18n_title = "alerts_dashboard.emergency",

View file

@ -173,7 +173,7 @@ function custom_column_utils.printCustomColumnDropdown(base_url, page_params)
custom_column_params["custom_column"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown"><i class="fas fa-columns" aria-hidden="true"></i><span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown"><i class="fas fa-columns" aria-hidden="true"></i><span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="custom_column_dropdown">]]
for _, lg in ipairs(custom_column_utils.available_custom_columns) do

View file

@ -379,7 +379,7 @@ end
-- ################################################################################
function discover.printDeviceTypeSelector(device_type, field_name)
print [[<div class="form-group"><select name="]] print(field_name) print[[" class="form-control">\
print [[<div class="form-group mb-3"><select name="]] print(field_name) print[[" class="form-select">\
<option value="0"></option>]]
discover.printDeviceTypeSelectorOptions(device_type, true)

View file

@ -205,7 +205,7 @@ function ebpf_utils.draw_ndpi_piecharts(ifstats, url, host_info, username, pid_n
<table class="table table-bordered table-striped">
<tr>
<th class="text-left" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("protocol")})) print[[</th>
<th class="text-start" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("protocol")})) print[[</th>
<td>
<div class="pie-chart" id="topApplicationProtocols"></div>
</td>
@ -214,7 +214,7 @@ function ebpf_utils.draw_ndpi_piecharts(ifstats, url, host_info, username, pid_n
</td>
</tr>
<tr>
<th class="text-left" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("category")})) print[[</th>
<th class="text-start" colspan=2>]] print(i18n("ndpi_page.overview", {what = i18n("category")})) print[[</th>
<td colspan=2>
<div class="pie-chart" id="topApplicationCategories"></div>
</td>

View file

@ -40,7 +40,7 @@ function formatTrafficProfile(profile)
local res = ""
if not isEmptyString(profile) then
res = "<span class='badge badge-primary'>"..profile.."</span> "
res = "<span class='badge bg-primary'>"..profile.."</span> "
end
return res
@ -558,9 +558,9 @@ local function formatFlowHost(flow, cli_or_srv, historical_bounds, hyperlink_suf
host_name = host_name.." <i class='fas fa-ban' aria-hidden='true' title='Blacklisted'></i>"
end
if(flow[cli_or_srv .. ".localhost"] == true) then
host_name = host_name .. ' <abbr title=\"'.. i18n("details.label_local_host") ..'\"><span class="badge badge-success">'..i18n("details.label_short_local_host")..'</span></abbr>'
host_name = host_name .. ' <abbr title=\"'.. i18n("details.label_local_host") ..'\"><span class="badge bg-success">'..i18n("details.label_short_local_host")..'</span></abbr>'
else
host_name = host_name .. ' <abbr title=\"'.. i18n("details.label_remote") ..'\"><span class="badge badge-secondary">'..i18n("details.label_short_remote")..'</span></abbr>'
host_name = host_name .. ' <abbr title=\"'.. i18n("details.label_remote") ..'\"><span class="badge bg-secondary">'..i18n("details.label_short_remote")..'</span></abbr>'
end
return hostinfo2detailshref(flow2hostinfo(flow, cli_or_srv), hyperlink_params, host_name, nil, true --[[ perform link existance checks --]])
@ -1432,8 +1432,8 @@ function printBlockFlowJs()
var row_id = flow_key + "_" + flow_hash_id;
if (data.status == "BLOCKED") {
$('#'+row_id+'_block')
.removeClass('badge-secondary')
.addClass('badge-danger')
.removeClass('bg-secondary')
.addClass('bg-danger')
.attr('title', ']] print(i18n("flow_details.flow_traffic_is_dropped")) print[[');
}
},
@ -1466,8 +1466,8 @@ function printL4ProtoDropdown(base_url, page_params, l4_proto)
end
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.l4_protocol")) print[[]] print(l4proto_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-right scrollable-dropdown" role="menu" id="flow_dropdown">\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.l4_protocol")) print[[]] print(l4proto_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-end scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, l4proto_params_non_tcp)) print[[">]] print(i18n("flows_page.all_l4_protocols")) print[[</a></li>]]
if l4_proto then
@ -1517,8 +1517,8 @@ local function printFlowDevicesFilterDropdown(base_url, page_params)
end
print[[, '<div class="btn-group float-right">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.device_ip")) print[[]] print(cur_dev_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-right scrollable-dropdown" role="menu" id="flow_dropdown">\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.device_ip")) print[[]] print(cur_dev_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-end scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, dev_params)) print[[">]] print(i18n("flows_page.all_devices")) print[[</a></li>\]]
for _, dev_ip in ipairs(devips) do
local dev_name = dev_ip
@ -1559,7 +1559,7 @@ local function printFlowDevicesFilterDropdown(base_url, page_params)
if_params[direction] = nil
print[[, '<div class="btn-group float-right">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page."..direction)) print[[]] print(cur_if_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page."..direction)) print[[]] print(cur_if_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, if_params)) print[[">]] print(i18n("flows_page.all_"..direction)) print[[</a></li>\]]
@ -1613,7 +1613,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
print[['\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.hosts")) print(getParamFilter(page_params, "flowhosts_type")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.hosts")) print(getParamFilter(page_params, "flowhosts_type")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, flowhosts_type_params)) print[[">]] print(i18n("flows_page.all_hosts")) print[[</a></li>\]]
printDropdownEntries({
@ -1634,7 +1634,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
print[[, '\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("status")) print(getParamFilter(page_params, "alert_type")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("status")) print(getParamFilter(page_params, "alert_type")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, alert_type_params)) print[[">]] print(i18n("flows_page.all_flows")) print[[</a></li>\]]
@ -1681,7 +1681,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
print[[, '\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.alert_type_severity")) print(getParamFilter(page_params, "alert_type_severity")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.alert_type_severity")) print(getParamFilter(page_params, "alert_type_severity")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, alert_type_severity_params)) print[[">]] print(i18n("flows_page.all_flows")) print[[</a></li>]]
@ -1713,7 +1713,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
print[[, '\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.tcp_state")) print(getParamFilter(page_params, "tcp_flow_state")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.tcp_state")) print(getParamFilter(page_params, "tcp_flow_state")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, tcp_state_params)) print[[">]] print(i18n("flows_page.all_flows")) print[[</a></li>\]]
@ -1736,7 +1736,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
print[[, '\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.direction")) print(getParamFilter(page_params, "traffic_type")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.direction")) print(getParamFilter(page_params, "traffic_type")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, traffic_type_params)) print[[">]] print(i18n("flows_page.all_flows")) print[[</a></li>\]]
printDropdownEntries({
@ -1760,7 +1760,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
if not table.empty(pods) then
print[[, '\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("containers_stats.pod")) print(getParamFilter(page_params, "pod")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("containers_stats.pod")) print(getParamFilter(page_params, "pod")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu">\
]]
local entries = {}
@ -1789,7 +1789,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
if not table.empty(containers) then
print[[, '\
<div class="btn-group">\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("containers_stats.container")) print(getParamFilter(page_params, "container")) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("containers_stats.container")) print(getParamFilter(page_params, "container")) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu">\
]]
local entries = {}
@ -1810,7 +1810,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
end
-- L7 Application
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..i18n("report.applications")..' ' .. getParamFilter(page_params, "application") .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">')
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..i18n("report.applications")..' ' .. getParamFilter(page_params, "application") .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">')
print('<li><a class="dropdown-item" href="')
-- table.clone needed to modify some parameters while keeping the original unchanged
@ -1846,7 +1846,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
print("</ul> </div>'")
-- L7 Application Category
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..i18n("users.categories")..' ' .. getParamFilter(page_params, "category") .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">')
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..i18n("users.categories")..' ' .. getParamFilter(page_params, "category") .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">')
print('<li><a class="dropdown-item" href="')
-- table.clone needed to modify some parameters while keeping the original unchanged
local category_filter_params = table.clone(page_params)
@ -1925,7 +1925,7 @@ function printActiveFlowsDropdown(base_url, page_params, ifstats, flowstats, is_
if profiles_defined then
-- Traffic Profiles
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..i18n("traffic_profiles.traffic_profiles")..' ' .. getParamFilter(page_params, "traffic_profile") .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">')
print(', \'<div class="btn-group"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..i18n("traffic_profiles.traffic_profiles")..' ' .. getParamFilter(page_params, "traffic_profile") .. '<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">')
print('<li><a class="dropdown-item" href="')
-- table.clone needed to modify some parameters while keeping the original unchanged
local traffic_profile_filter_params = table.clone(page_params)

View file

@ -354,15 +354,15 @@ function format_utils.formatFullAddressCategory(host)
end
if(host["is_broadcast"] == true) then
addr_category = addr_category .. " <abbr title=\"".. i18n("broadcast") .."\"><span class='badge badge-dark'>" ..i18n("short_broadcast").. "</span></abbr>"
addr_category = addr_category .. " <abbr title=\"".. i18n("broadcast") .."\"><span class='badge bg-dark'>" ..i18n("short_broadcast").. "</span></abbr>"
end
if(host["broadcast_domain_host"] == true) then
addr_category = addr_category .. " <span class='badge badge-info'><i class='fas fa-sitemap' title='"..i18n("hosts_stats.label_broadcast_domain_host").."'></i></span>"
addr_category = addr_category .. " <span class='badge bg-info'><i class='fas fa-sitemap' title='"..i18n("hosts_stats.label_broadcast_domain_host").."'></i></span>"
end
if(host["privatehost"] == true) then
addr_category = addr_category .. ' <abbr title=\"'.. i18n("details.label_private_ip") ..'\"><span class="badge badge-warning">'..i18n("details.label_short_private_ip")..'</span></abbr>'
addr_category = addr_category .. ' <abbr title=\"'.. i18n("details.label_private_ip") ..'\"><span class="badge bg-warning">'..i18n("details.label_short_private_ip")..'</span></abbr>'
end
if(host["dhcpHost"] == true) then

View file

@ -264,7 +264,7 @@ function graph_utils.stackedProgressBars(total, bars, other_label, formatter, cs
res[#res + 1] = [[<span>]]
if(num > 0) then res[#res + 1] = [[<br>]] end
if bar.link ~= nil then res[#res + 1] = [[<a href="]] .. bar.link .. [[">]] end
res[#res + 1] = [[<span class="badge badge-]].. (bar.class) ..[[" style="]] .. bar.style .. [[">&nbsp;</span>]]
res[#res + 1] = [[<span class="badge bg-]].. (bar.class) ..[[" style="]] .. bar.style .. [[">&nbsp;</span>]]
if bar.link ~= nil then res[#res + 1] = [[</a>]] end
res[#res + 1] = [[<span> ]] .. bar.title .. " (".. formatter(bar.value) ..")</span></span>"
num = num + 1
@ -417,13 +417,13 @@ function graph_utils.drawGraphs(ifid, schema, tags, zoomLevel, baseurl, selected
<div class='card'>
<div class='card-header'>
<ul class="nav nav-tabs card-header-tabs" role="tablist" id="historical-tabs-container">
<li class="nav-item active"> <a class="nav-link active" href="#historical-tab-chart" role="tab" data-toggle="tab"> Chart </a> </li>
<li class="nav-item active"> <a class="nav-link active" href="#historical-tab-chart" role="tab" data-bs-toggle="tab"> Chart </a> </li>
]]
local show_historical_tabs = ntop.getPrefs().is_dump_flows_to_mysql_enabled and options.show_historical
if show_historical_tabs then
print('<li class="nav-item"><a class="nav-link" href="#historical-flows" role="tab" data-toggle="tab" id="tab-flows-summary"> Flows </a> </li>\n')
print('<li class="nav-item"><a class="nav-link" href="#historical-flows" role="tab" data-bs-toggle="tab" id="tab-flows-summary"> Flows </a> </li>\n')
end
print[[
@ -446,7 +446,7 @@ function graph_utils.drawGraphs(ifid, schema, tags, zoomLevel, baseurl, selected
if(options.timeseries) then
print [[
<div class="dropdown d-inline">
<button class="btn btn-light btn-sm dropdown-toggle" data-toggle="dropdown">Timeseries <span class="caret"></span></button>
<button class="btn btn-light btn-sm dropdown-toggle" data-bs-toggle="dropdown">Timeseries <span class="caret"></span></button>
<div class="dropdown-menu scrollable-dropdown">
]]
@ -459,7 +459,7 @@ function graph_utils.drawGraphs(ifid, schema, tags, zoomLevel, baseurl, selected
]]
end -- options.timeseries
print('<span class="mx-1">Timeframe:</span><div class="btn-group btn-group-toggle" data-toggle="buttons" id="graph_zoom">\n')
print('<span class="mx-1">Timeframe:</span><div class="btn-group" role="group" id="graph_zoom">\n')
for k,v in ipairs(graph_common.zoom_vals) do
-- display 1 minute button only for networks and interface stats
@ -470,13 +470,7 @@ function graph_utils.drawGraphs(ifid, schema, tags, zoomLevel, baseurl, selected
elseif graph_common.zoom_vals[k][1] == '5m' and min_zoom ~= '1m' and min_zoom ~= '5m' then
goto continue
end
if(graph_common.zoom_vals[k][1] == zoomLevel) then
print([[<label class="btn bg-primary text-white">]])
else
print([[<label class="btn btn-link">]])
end
local params = table.merge(page_params, {zoom=graph_common.zoom_vals[k][1]})
-- Additional parameters
@ -488,8 +482,15 @@ function graph_utils.drawGraphs(ifid, schema, tags, zoomLevel, baseurl, selected
end
local url = getPageUrl(baseurl, params)
print('<input type="radio" class="btn-check" name="options" id="zoom_level_'..k..'" value="'..url..'">')
if(graph_common.zoom_vals[k][1] == zoomLevel) then
print([[<label class="btn bg-primary text-white" for='zoom_level_]].. k ..[['>]].. graph_common.zoom_vals[k][1] ..[[</label>]])
else
print([[<label class="btn btn-outline-secondary" for='zoom_level_]].. k ..[['>]].. graph_common.zoom_vals[k][1] ..[[</label>]])
end
print('<input type="radio" name="options" id="zoom_level_'..k..'" value="'..url..'">'.. graph_common.zoom_vals[k][1] ..'</input></label>\n')
::continue::
end
@ -869,7 +870,7 @@ function graph_utils.printProtocolQuota(proto, ndpi_stats, category_stats, quota
if not traffic_quota_ratio then traffic_quota_ratio = 0 end
if show_td then
output[#output + 1] = [[<td class='text-right']]..ternary(bytes_exceeded, ' style=\'color:red;\'', '').."><span>"..lb_bytes..ternary(hide_limit, "", " / "..lb_bytes_quota).."</span>"
output[#output + 1] = [[<td class='text-end']]..ternary(bytes_exceeded, ' style=\'color:red;\'', '').."><span>"..lb_bytes..ternary(hide_limit, "", " / "..lb_bytes_quota).."</span>"
end
output[#output + 1] = [[
@ -891,7 +892,7 @@ function graph_utils.printProtocolQuota(proto, ndpi_stats, category_stats, quota
local duration_quota_ratio = round(duration_taken * 100 / (duration_taken+duration_remaining), 0) or 0
if show_td then
output[#output + 1] = [[<td class='text-right']]..ternary(time_exceeded, ' style=\'color:red;\'', '').."><span>"..lb_duration..ternary(hide_limit, "", " / "..lb_duration_quota).."</span>"
output[#output + 1] = [[<td class='text-end']]..ternary(time_exceeded, ' style=\'color:red;\'', '').."><span>"..lb_duration..ternary(hide_limit, "", " / "..lb_duration_quota).."</span>"
end
output[#output + 1] = ([[
@ -954,7 +955,7 @@ function graph_utils.printPoolChangeDropdown(ifId, pool_id, have_nedge)
output[#output + 1] = [[<tr>
<th>]] .. i18n(ternary(have_nedge, "nedge.user", "host_config.host_pool")) .. [[</th>
<td>
<select name="pool" class="form-control" style="width:20em; display:inline;">]]
<select name="pool" class="form-select" style="width:20em; display:inline;">]]
output[#output + 1] = graph_utils.poolDropdown(ifId, pool_id)
@ -962,7 +963,7 @@ function graph_utils.printPoolChangeDropdown(ifId, pool_id, have_nedge)
output[#output + 1] = [[
</select>
<a class='ml-1' href="]] .. ntop.getHttpPrefix() .. edit_pools_link .. [["><i class="fas fa-edit" aria-hidden="true" title="]]
<a class='ms-1' href="]] .. ntop.getHttpPrefix() .. edit_pools_link .. [["><i class="fas fa-edit" aria-hidden="true" title="]]
..(have_nedge and i18n("edit") or '')
.. [["></i></a>
</tr>]]
@ -982,7 +983,7 @@ function graph_utils.printCategoryDropdownButton(by_id, cat_id_or_name, base_url
count_callback = count_callback or count_all
-- 'Category' button
print('\'<div class="btn-group float-right"><div class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..
print('\'<div class="btn-group float-right"><div class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..
i18n("category") .. ternary(not isEmptyString(cat_id_or_name), '<span class="fas fa-filter"></span>', '') ..
'<span class="caret"></span></div> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')

View file

@ -1190,7 +1190,7 @@ function historicalFlowsTab(ifId, host, epoch_begin, epoch_end, l7proto, l4proto
<br>
<div class="container-fluid" id="historical-flows-container">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item active"> <a class="nav-link active" href="#historical-flows-summary" role="tab" data-toggle="tab"> ]] print(i18n("db_explorer.summary")) print[[ </a> </li>
<li class="nav-item active"> <a class="nav-link active" href="#historical-flows-summary" role="tab" data-bs-toggle="tab"> ]] print(i18n("db_explorer.summary")) print[[ </a> </li>
]]
print '<li class="nav-item" id="tab-ipv4-li" style="display: none;"> <a class="nav-link" href="#tab-ipv4" role="tab"> ' print(i18n("ipv4")) print' </a> </li>'
@ -1285,7 +1285,7 @@ $('a[href="#historical-flows"]').on('shown.bs.tab', function (e) {
$('a[href="#historical-flows"]').attr("loaded", 1);
// disable all tabs
$("#historical-flows-container").find("li").addClass("disabled").find("a").removeAttr("data-toggle");
$("#historical-flows-container").find("li").addClass("disabled").find("a").removeAttr("data-bs-toggle");
xhr = $.ajax({
type: 'GET',]]
@ -1320,7 +1320,7 @@ print[[
}
// re-enable all tabs
$("#historical-flows-container").find("li").removeClass("disabled").find("a").attr("data-toggle", "tab");
$("#historical-flows-container").find("li").removeClass("disabled").find("a").attr("data-bs-toggle", "tab");
// populate the number of flows
$("#tab-ipv4").attr("num_flows", msg.count.IPv4.tot_flows)

View file

@ -27,7 +27,7 @@ local function printHashTablesDropdown(base_url, page_params)
hash_table_params["hash_table"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("internals.hash_table")) print[[]] print(hash_table_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("internals.hash_table")) print[[]] print(hash_table_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\]]
print[[<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, hash_table_params)) print[[">]] print(i18n("internals.all_hash_tables")) print[[</a></li>\]]
@ -210,7 +210,7 @@ local function printPeriodicactivityIssuesDropdown(base_url, page_params)
periodic_activity_issue_params["periodic_script_issue"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("internals.periodic_activity_issues")) print[[]] print(periodic_activity_issue_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("internals.periodic_activity_issues")) print[[]] print(periodic_activity_issue_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\]]
print[[<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, periodic_activity_issue_params)) print[[">]] print(i18n("internals.all_periodic_activities")) print[[</a></li>\]]
@ -239,7 +239,7 @@ local function printPeriodicactivityDropdown(base_url, page_params)
periodic_activity_params["periodic_script"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("internals.periodic_activity")) print[[]] print(periodic_activity_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("internals.periodic_activity")) print[[]] print(periodic_activity_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\]]
print[[<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, periodic_activity_params)) print[[">]] print(i18n("internals.all_periodic_activities")) print[[</a></li>\]]
@ -264,9 +264,9 @@ local function printPeriodicActivitiesTable(base_url, ifid, ts_creation)
<b>]] print(i18n("notes")) print[[</b>
<ul>
<li>]] print(i18n("internals.status_description")) print[[</li><ul>
<li><span class="badge badge-secondary">]] print(i18n("internals.sleeping")) print[[</span> ]] print(i18n("internals.status_sleeping_descr")) print[[</li>
<li><span class="badge badge-warning">]] print(i18n("internals.queued")) print[[</span> ]] print(i18n("internals.status_queued_descr")) print[[</li>
<li><span class="badge badge-success">]] print(i18n("running")) print[[</span> ]] print(i18n("internals.status_running_descr")) print[[</li>
<li><span class="badge bg-secondary">]] print(i18n("internals.sleeping")) print[[</span> ]] print(i18n("internals.status_sleeping_descr")) print[[</li>
<li><span class="badge bg-warning">]] print(i18n("internals.queued")) print[[</span> ]] print(i18n("internals.status_queued_descr")) print[[</li>
<li><span class="badge bg-success">]] print(i18n("running")) print[[</span> ]] print(i18n("internals.status_running_descr")) print[[</li>
</ul>
<li>]] print(i18n("internals.periodic_activities_descr")) print[[</li>
<li>]] print(i18n("internals.periodic_activities_periodicity_descr")) print[[</li>
@ -281,7 +281,7 @@ local function printPeriodicActivitiesTable(base_url, ifid, ts_creation)
</ul>
<script type='text/javascript'>
$(document).ready(function(){
$('[data-toggle="popover"]').popover({
$('[data-bs-toggle="popover"]').popover({
placement : 'top',
trigger : 'hover'
});
@ -465,7 +465,7 @@ local function printUserScriptsDropdown(base_url, page_params)
user_script_target_params["user_script_target"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("internals.user_script_target")) print[[]] print(user_script_target_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("internals.user_script_target")) print[[]] print(user_script_target_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu" role="menu" id="flow_dropdown">\]]
print[[<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, user_script_target_params)) print[[">]] print(i18n("internals.all_user_script_targets")) print[[</a></li>\]]

View file

@ -33,7 +33,6 @@ function live_traffic_utils.printLiveTrafficForm(ifid, host_info)
print[[
<div class="input-group mb-1">
<div class="input-group-prepend">
<select class="btn border bg-white" id="duration" name=duration>
<option value=10>10 sec</option>
<option value=30>30 sec</option>
@ -41,7 +40,6 @@ function live_traffic_utils.printLiveTrafficForm(ifid, host_info)
<option value=300>5 min</option>
<option value=600>10 min</option>
</select>
</div>
&nbsp;
<label for="bpf_filter" class="sr-only">]] print(i18n("db_explorer.filter_bpf")) print[[</label>
<input type="text" class="form-control" id="live-capture-bpf-filter" name="bpf_filter" placeholder="]] print(i18n("db_explorer.filter_bpf")) print[["></input>

View file

@ -405,7 +405,7 @@ function printIpVersionDropdown(base_url, page_params)
ipversion_params["version"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.ip_version")) print[[]] print(ipversion_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.ip_version")) print[[]] print(ipversion_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, ipversion_params)) print[[">]] print(i18n("flows_page.all_ip_versions")) print[[</a></li>\
<li><a class="dropdown-item ]] if ipversion == "4" then print('active') end print[[" href="]] ipversion_params["version"] = "4"; print(getPageUrl(base_url, ipversion_params)); print[[">]] print(i18n("flows_page.ipv4_only")) print[[</a></li>\
@ -437,7 +437,7 @@ function printVLANFilterDropdown(base_url, page_params)
vlan_id_params["vlan"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.vlan")) print[[]] print(vlan_id_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.vlan")) print[[]] print(vlan_id_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, vlan_id_params)) print[[">]] print(i18n("flows_page.all_vlan_ids")) print[[</a></li>\]]
for _, vid in ipairs(ids) do
@ -481,8 +481,8 @@ function printDSCPDropdown(base_url, page_params, dscp_list)
end
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.dscp")) print[[]] print(dscp_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-right scrollable-dropdown" role="menu" id="flow_dropdown">\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.dscp")) print[[]] print(dscp_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-end scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, dscp_params_non_filter)) print[[">]] print(i18n("flows_page.all_dscp")) print[[</a></li>]]
for key, value in pairsByKeys(ordered_dscp_list, asc) do
@ -538,8 +538,8 @@ function printHostPoolDropdown(base_url, page_params, host_pool_list)
end
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("details.host_pool")) print[[]] print(host_pool_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-right scrollable-dropdown" role="menu" id="flow_dropdown">\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("details.host_pool")) print[[]] print(host_pool_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu dropdown-menu-end scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, host_pool_params_non_filter)) print[[">]] print(i18n("flows_page.all_host_pool")) print[[</a></li>]]
for key, value in pairsByKeys(ordered_host_pool_list, asc) do
@ -572,7 +572,7 @@ function printTrafficTypeFilterDropdown(base_url, page_params)
traffic_type_params["traffic_type"] = nil
print[[\
<button class="btn btn-link dropdown-toggle" data-toggle="dropdown">]] print(i18n("flows_page.direction")) print[[]] print(traffic_type_filter) print[[<span class="caret"></span></button>\
<button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">]] print(i18n("flows_page.direction")) print[[]] print(traffic_type_filter) print[[<span class="caret"></span></button>\
<ul class="dropdown-menu scrollable-dropdown" role="menu" id="flow_dropdown">\
<li><a class="dropdown-item" href="]] print(getPageUrl(base_url, traffic_type_params)) print[[">]] print(i18n("hosts_stats.traffic_type_all")) print[[</a></li>\]]
@ -1833,7 +1833,7 @@ function hostinfo2detailshref(host_info, href_params, href_value, href_tooltip,
local hostdetails_url = hostinfo2detailsurl(host_info, href_params, href_check)
if not isEmptyString(hostdetails_url) then
res = string.format("<a href='%s' data-toggle='tooltip' title='%s'>%s</a>",
res = string.format("<a href='%s' data-bs-toggle='tooltip' title='%s'>%s</a>",
hostdetails_url, href_tooltip or '', href_value or '')
else
res = href_value or ''
@ -2938,14 +2938,14 @@ end
-- print TCP flags
function printTCPFlags(flags)
if(hasbit(flags,0x01)) then print('<span class="badge badge-info">FIN</span> ') end
if(hasbit(flags,0x02)) then print('<span class="badge badge-info">SYN</span> ') end
if(hasbit(flags,0x04)) then print('<span class="badge badge-danger">RST</span> ') end
if(hasbit(flags,0x08)) then print('<span class="badge badge-info">PUSH</span> ') end
if(hasbit(flags,0x10)) then print('<span class="badge badge-info">ACK</span> ') end
if(hasbit(flags,0x20)) then print('<span class="badge badge-info">URG</span> ') end
if(hasbit(flags,0x40)) then print('<span class="badge badge-info">ECE</span> ') end
if(hasbit(flags,0x80)) then print('<span class="badge badge-info">CWR</span> ') end
if(hasbit(flags,0x01)) then print('<span class="badge bg-info">FIN</span> ') end
if(hasbit(flags,0x02)) then print('<span class="badge bg-info">SYN</span> ') end
if(hasbit(flags,0x04)) then print('<span class="badge bg-danger">RST</span> ') end
if(hasbit(flags,0x08)) then print('<span class="badge bg-info">PUSH</span> ') end
if(hasbit(flags,0x10)) then print('<span class="badge bg-info">ACK</span> ') end
if(hasbit(flags,0x20)) then print('<span class="badge bg-info">URG</span> ') end
if(hasbit(flags,0x40)) then print('<span class="badge bg-info">ECE</span> ') end
if(hasbit(flags,0x80)) then print('<span class="badge bg-info">CWR</span> ') end
end
-- convert the integer carrying TCP flags in a more convenient lua table
@ -2983,7 +2983,7 @@ function historicalProtoHostHref(ifId, host, l4_proto, ndpi_proto_id, info)
if((ndpi_proto_id ~= nil) and (ndpi_proto_id ~= "")) then hist_url = hist_url.."&protocol="..ndpi_proto_id end
if((info ~= nil) and (info ~= "")) then hist_url = hist_url.."&info="..info end
print('&nbsp;')
-- print('<span class="badge badge-info">')
-- print('<span class="badge bg-info">')
print('<a href="'..hist_url..'&epoch_begin='..tostring(ago1h)..'" title="'..i18n("db_explorer.last_hour_flows")..'"><i class="fas fa-history fa-lg"></i></a>')
-- print('</span>')
end
@ -3289,26 +3289,30 @@ function makeResolutionButtons(fmt_to_data, ctrl_id, fmt, value, extra, max_val)
end
local style = table.merge({display="flex"}, extra.style or {})
html_lines[#html_lines+1] = [[<div class="btn-group btn-group-toggle ]] .. table.concat(extra.classes or {}, "") .. [[" id="]] .. ctrl_id .. [[" data-toggle="buttons" style="]] .. table.tconcat(style, ":", "; ", ";") .. [[">]]
html_lines[#html_lines+1] = [[<div class="btn-group ]] .. table.concat(extra.classes or {}, "") .. [[" id="]] .. ctrl_id .. [[" role="group" style="]] .. table.tconcat(style, ":", "; ", ";") .. [[">]]
-- foreach character in format
string.gsub(fmt, ".", function(k)
local v = fmt_to_data[k]
if v ~= nil then
local line = {}
local line = {}
if((max_val == nil) or (v.value < max_val)) then
line[#line+1] = [[<label class="btn]]
if selected == k then
line[#line+1] = [[ btn-primary active]]
else
line[#line+1] = [[ btn-secondary]]
end
line[#line+1] = [[ btn-sm"><input data-resol="]] .. k .. [[" value="]] .. truncate(v.value) .. [[" title="]] .. v.label .. [[" name="opt_resbt_]] .. k .. [[_]] .. ctrl_id .. [[" autocomplete="off" type="radio"]]
if selected == k then line[#line+1] = [[ checked="checked"]] end
line[#line+1] = [[/>]] .. v.label .. [[</label>]]
if((max_val == nil) or (v.value < max_val)) then
html_lines[#html_lines+1] = table.concat(line, "")
local input_name = ("opt_resbt_%s_%s"):format(k, ctrl_id)
local input = ([[
<input class='btn-check' data-resol="%s" value="%s" title="%s" name="%s" id="input-%s" autocomplete="off" type="radio" %s/>
]]):format(k, truncate(v.value), v.label, input_name, input_name, ternary((selected == k), "checked='checked'", ""))
local label = ([[
<label class="btn btn-sm %s" for="input-%s">%s</label>
]]):format(ternary((selected == k), "btn-primary active", "btn-secondary"), input_name, v.label)
line[#line+1] = input
line[#line+1] = label
html_lines[#html_lines+1] = table.concat(line, "")
end
end
end)
@ -3321,11 +3325,11 @@ function makeResolutionButtons(fmt_to_data, ctrl_id, fmt, value, extra, max_val)
var _resol_inputs = [];
function resol_selector_get_input(a_button) {
return $("input", $(a_button).closest(".form-group")).last();
return $("input", $(a_button).closest(".form-group.mb-3")).last();
}
function resol_selector_get_buttons(an_input) {
return $(".btn-group", $(an_input).closest(".form-group")).first().find("input");
return $(".btn-group", $(an_input).closest(".form-group.mb-3")).first().find("input");
}
/* This function scales values wrt selected resolution */
@ -3657,10 +3661,10 @@ end
function printWarningAlert(message)
print[[<div class="alert alert-warning alert-dismissable" role="alert">]]
print[[<a class="close" data-dismiss="alert" aria-label="close">&times;</a>]]
print[[<i class="fas fa-exclamation-triangle fa-sm"></i> ]]
print[[<strong>]] print(i18n("warning")) print[[</strong> ]]
print(message)
print[[<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>]]
print[[</div>]]
end
@ -3738,9 +3742,7 @@ function printMessageBanners(banners)
for _, msg in ipairs(banners) do
print[[
<div class="alert alert-]] print(msg.type) print([[ alert-dismissible" style="margin-top:2em; margin-bottom:0em;">
<button type="button" class="close" data-dismiss="alert" aria-label="]]..i18n("close")..[[">
<span aria-hidden="true">&times;</span>
</button>]])
]])
if (msg.type == "warning") then
print("<b>".. i18n("warning") .. "</b>: ")
@ -3751,6 +3753,7 @@ function printMessageBanners(banners)
print(msg.text)
print[[
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>]]
end
end
@ -3858,7 +3861,7 @@ function generate_select(id, name, is_required, is_disabled, options, additional
end
return ([[
<select id="]].. id ..[[" class="form-control ]] .. (additional_classes or "") .. [[" ]].. name_attr ..[[ ]].. required_flag ..[[ ]] .. disabled_flag ..[[>
<select id="]].. id ..[[" class="form-select ]] .. (additional_classes or "") .. [[" ]].. name_attr ..[[ ]].. required_flag ..[[ ]] .. disabled_flag ..[[>
]].. parsed_options ..[[
</select>
]])

View file

@ -191,7 +191,7 @@ function page_utils.print_page_title(title)
print("<header class='mb-3 d-flex align-items-center'>")
print("<h2 class='d-inline-block'>".. title .."</h2>")
if (not isEmptyString(help_link)) then
print("<a data-toggle='tooltip' title='".. i18n("open_documentation") .."' target='_newtab' href='".. help_link .."' class='text-muted ml-auto'><i class='fas fa-question-circle'></i></a>")
print("<a data-bs-toggle='tooltip' title='".. i18n("open_documentation") .."' target='_newtab' href='".. help_link .."' class='text-muted ms-auto'><i class='fas fa-question-circle'></i></a>")
end
print("</header>")
@ -291,7 +291,7 @@ function page_utils.print_header(title)
print[[<link href="]] print(http_prefix) print[[/css/minified/bootstrap-orange.min.css" rel="stylesheet">]]
print[[<link href="]] print(http_prefix) print[[/css/minified/dark-mode.min.css?]] print(static_file_epoch) print[[" rel="stylesheet">]]
else
print[[ <link href="]] print(http_prefix) print[[/bootstrap-4.4.0-dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-SI27wrMjH3ZZ89r4o+fGIJtnzkAnFs3E4qz9DIYioCQ5l9Rd/7UAa8DHcaL8jkWt" crossorigin="anonymous">]]
print[[ <link href="]] print(http_prefix) print[[/bootstrap/css/bootstrap.min.css" rel="stylesheet">]]
end
print[[
<link href="]] print(http_prefix) print[[/css/minified/ntopng.min.css?]] print(static_file_epoch) print[[" rel="stylesheet">
@ -319,12 +319,10 @@ function page_utils.print_header(title)
<script src="]] print(http_prefix) print[[/js/html5shiv.js"></script>
<![endif]-->
<script type="text/javascript" src="]] print(http_prefix) print[[/js/jquery_bootstrap.min.js?]] print(static_file_epoch) print[["></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/popper-1.12.9/js/popper.min.js" crossorigin="anonymous"></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/bootstrap-4.4.0-dist/js/bootstrap.min.js?]] print(static_file_epoch) print[[" integrity="sha384-3qaqj0lc6sV/qpzrc1N5DC6i1VRn/HyX4qdPaiEFbn54VjQBEU341pvjz7Dv3n6P" crossorigin="anonymous"></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/js/popper/popper.min.js" crossorigin="anonymous"></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/js/deps.min.js?]] print(static_file_epoch) print[["></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/js/ntop.min.js?]] print(static_file_epoch) print[["></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/js/tempusdominus.min.js?]] print(static_file_epoch) print[["></script>
<script type="text/javascript" src="]] print(http_prefix) print[[/selectpicker/js/bootstrap-select.min.js?]] print(static_file_epoch) print[["></script>
</head>]]
print([[
<body class="body ]].. (dark_mode and "dark" or "") ..[[">
@ -348,7 +346,7 @@ function page_utils.print_header_minimal(title)
<title>]] print(page_title) print[[</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="]] print(http_prefix) print[[/bootstrap-4.4.0-dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-SI27wrMjH3ZZ89r4o+fGIJtnzkAnFs3E4qz9DIYioCQ5l9Rd/7UAa8DHcaL8jkWt" crossorigin="anonymous">
<link href="]] print(http_prefix) print[[/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="]] print(http_prefix) print[[/fontawesome-free-5.11.2-web/css/fontawesome.css" rel="stylesheet">
<link href="]] print(http_prefix) print[[/fontawesome-free-5.11.2-web/css/brands.css" rel="stylesheet">
<link href="]] print(http_prefix) print[[/fontawesome-free-5.11.2-web/css/solid.css" rel="stylesheet">
@ -451,7 +449,7 @@ local function print_submenu(section, container_list_name)
print[["]]
if section_has_submenu then
print[[ data-toggle="collapse" ]]
print[[ data-bs-toggle="collapse" ]]
end
print[[ href="]]
@ -472,7 +470,7 @@ local function print_submenu(section, container_list_name)
print[["]]
if section_entry.entry.is_modal then
print(' data-toggle="modal"')
print(' data-bs-toggle="modal"')
end
if external_link then
@ -548,7 +546,7 @@ local function print_section(section, list_name)
print[[" ]]
if section_has_submenu then
print[[ data-toggle="collapse" ]]
print[[ data-bs-toggle="collapse" ]]
end
print[[href="]]
@ -603,7 +601,7 @@ function page_utils.print_menubar()
})
..[[
</form>
<button data-toggle="]] .. list_name .. [[" class='ml-5'><i class="fas fa-times"></i></button>
<button data-bs-toggle="]] .. list_name .. [[" class='ms-5'><i class="fas fa-times"></i></button>
</div>
<div class="mobile-menu-stats">
]])
@ -761,12 +759,12 @@ function page_utils.generate_info_stats()
<div class='up'>
<i class="fas fa-arrow-up"></i>
<span style='display: none;' class="network-load-chart-upload">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span>
<span class="text-right chart-upload-text"></span>
<span class="text-end chart-upload-text"></span>
</div>
<div class='down'>
<i class="fas fa-arrow-down"></i>
<span style='display: none;' class="network-load-chart-download">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span>
<span class="text-right chart-download-text"></span>
<span class="text-end chart-download-text"></span>
</div>
</a>
]])
@ -774,7 +772,7 @@ function page_utils.generate_info_stats()
return ([[
<a href=']].. ntop.getHttpPrefix() ..[[/lua/if_stats.lua'>
<span style='display: none;' class="network-load-chart-total">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span>
<span class="text-right chart-total-text"></span>
<span class="text-end chart-total-text"></span>
</a>
]])
end

View file

@ -286,7 +286,7 @@ function prefsInputFieldPrefs(label, comment, prekey, key, default_value, _input
print [[
<td align=right>
<table class="table table-borderless form-group" style="margin-bottom: 0; min-width:22em;">
<table class="table table-borderless form-group mb-3" style="margin-bottom: 0; min-width:22em;">
<tr>
<td width="100%;"></td>
<td style="vertical-align:top;">]]
@ -320,7 +320,7 @@ function prefsInputFieldPrefs(label, comment, prekey, key, default_value, _input
</tr>
<tr>
<td colspan="3" style="padding:0;">
<div class="help-block with-errors text-right" style="height:1em;"></div>
<div class="help-block with-errors text-end" style="height:1em;"></div>
</td>
</tr>
</table>
@ -360,7 +360,7 @@ function prefsDropdownFieldPrefs(label, comment, key, values, default_value, sho
print [[
<td align=right>
<table class="form-group" style="margin-bottom: 0; min-width:22em;">
<table class="form-group mb-3" style="margin-bottom: 0; min-width:22em;">
<tr>
<td width="100%;"></td>]]
@ -377,7 +377,7 @@ function prefsDropdownFieldPrefs(label, comment, key, values, default_value, sho
print[[
<td style="vertical-align:top; padding-left: 2em;">
<select id="id_input_]] print(key) print [[" class="form-control" ]] print(table.tconcat(attributes, "=", " ", nil, '"')) print[[ name="]] print(key) print [[" style="]] print(table.tconcat(style, ":", "; ", ";")) print[[" value="]] print((value or '')..'"') print[[>]]
<select id="id_input_]] print(key) print [[" class="form-select" ]] print(table.tconcat(attributes, "=", " ", nil, '"')) print[[ name="]] print(key) print [[" style="]] print(table.tconcat(style, ":", "; ", ";")) print[[" value="]] print((value or '')..'"') print[[>]]
if extra.keys == nil then
for _, optname in pairs(values) do
print("<option " .. ternary(optname == default_value, "selected", "") .. ">"..optname.."</option>")
@ -395,7 +395,7 @@ function prefsDropdownFieldPrefs(label, comment, key, values, default_value, sho
</tr>
<tr>
<td colspan="3" style="padding:0;">
<div class="help-block with-errors text-right" style="height:1em;"></div>
<div class="help-block with-errors text-end" style="height:1em;"></div>
</td>
</tr>
</table>
@ -515,9 +515,9 @@ local function toggleTableButtonPrefs(label, comment, on_label, on_value, on_col
if(label ~= "") then print('<tr id="row_'..submit_field..'"'..objRow..'><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td><td align=right>\n') end
print([[
<div class="custom-control custom-switch ">
<input ]].. (value == off_value and '' or 'checked') ..[[ type="checkbox" class="custom-control-input" id="check-]].. submit_field ..[[">
<label class="custom-control-label custom-control-label-lg " for="check-]].. submit_field ..[["></label>
<div class="form-check form-switch">
<input ]].. (value == off_value and '' or 'checked') ..[[ type="checkbox" class="form-check-input" id="check-]].. submit_field ..[[">
<label class="form-check-label" for="check-]].. submit_field ..[["></label>
<input hidden id="input-]].. submit_field ..[[" name="]].. submit_field ..[[" value="]].. value ..[[">
]])
print([[</div>]])
@ -658,7 +658,7 @@ function multipleTableButtonPrefs(label, comment, array_labels, array_values, de
end
if(value ~= nil) then
if(label ~= "") then print('<tr id="row_'..submit_field..'"'..objRow..'><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td><td align=right>\n') end
print('<div class="btn-group" data-toggle="buttons-radio" data-toggle-name="'..submit_field..'">')
print('<div class="btn-group" data-bs-toggle="buttons-radio" data-bs-toggle-name="'..submit_field..'">')
for nameCount = 1, #array_labels do
local type_button = "btn-secondary"
@ -671,7 +671,7 @@ function multipleTableButtonPrefs(label, comment, array_labels, array_values, de
end
type_button = "btn-"..color.." active"
end
print('<button id="id_'..submit_field..'_'..array_values[nameCount]..'" value="'..array_values[nameCount]..'" type="button" class="btn btn-sm '..type_button..' ' .. disabled .. '"'.. disabled_attr ..' data-toggle="button">'..array_labels[nameCount]..'</button>\n')
print('<button id="id_'..submit_field..'_'..array_values[nameCount]..'" value="'..array_values[nameCount]..'" type="button" class="btn btn-sm '..type_button..' ' .. disabled .. '"'.. disabled_attr ..' data-bs-toggle="button">'..array_labels[nameCount]..'</button>\n')
end
print('</div>\n')
print('<input type="hidden" id="id-toggle-'..submit_field..'" name="'..submit_field..'" value="'..value..'" />\n')

View file

@ -143,9 +143,9 @@ function system_setup_ui_utils.printConfigChange(sys_config, warnings)
]]
if sys_config:needsReboot() then
print[[<button type="button" data-toggle="modal" data-target="#config_apply_dialog_reboot" class="btn btn-primary">]] print(i18n("nedge.setup_apply")) print[[</button>]]
print[[<button type="button" data-bs-toggle="modal" data-target="#config_apply_dialog_reboot" class="btn btn-primary">]] print(i18n("nedge.setup_apply")) print[[</button>]]
elseif sys_config:needsSelfRestart() then
print[[<button type="button" data-toggle="modal" data-target="#config_apply_dialog_restart_self" class="btn btn-primary">]] print(i18n("nedge.setup_apply")) print[[</button>]]
print[[<button type="button" data-bs-toggle="modal" data-target="#config_apply_dialog_restart_self" class="btn btn-primary">]] print(i18n("nedge.setup_apply")) print[[</button>]]
else
print[[<button type="submit" class="btn btn-primary">]] print(i18n("nedge.setup_apply")) print[[</button>]]
end
@ -279,12 +279,12 @@ function system_setup_ui_utils.printPrivateAddressSelector(label, comment, ip_ke
print('<tr id="'..field_id..'" style="display: '..showEnabled..';"><td width=50%><strong>'..label..'</strong><p><small>'..comment..'</small></td>')
print [[
<td align=right>
<table class="form-group" style="margin-bottom: 0; min-width:22em;">
<table class="form-group mb-3" style="margin-bottom: 0; min-width:22em;">
<tr class='border-0'>
]]
print[[
<td class="local-ip-selector border-0 text-right" style="vertical-align:top; padding-left: 2em;">]]
<td class="local-ip-selector border-0 text-end" style="vertical-align:top; padding-left: 2em;">]]
-- Find initial netmask
for _, preset in pairs(networks_presets) do
@ -294,7 +294,7 @@ function system_setup_ui_utils.printPrivateAddressSelector(label, comment, ip_ke
end
if extra.net_select ~= false then
print[[<select name="]] print(field_id) print[[_net" class="form-control d-inline-block" style="width: 9.6rem">]]
print[[<select name="]] print(field_id) print[[_net" class="form-select d-inline-block" style="width: 9.6rem">]]
for _, preset in pairs(networks_presets) do
print[[<option value="]] print(preset.prefix) print[["]]
@ -338,7 +338,7 @@ function system_setup_ui_utils.printPrivateAddressSelector(label, comment, ip_ke
</tr>
<tr>
<td colspan="3" style="padding:0;">
<div class="help-block with-errors text-right" style="height:1em;"></div>
<div class="help-block with-errors text-end" style="height:1em;"></div>
</td>
</tr>
</table>
@ -416,7 +416,7 @@ function system_setup_ui_utils.prefsDateTimeFieldPrefs(label, comment, key, defa
print [[
<td align=right>
<table class="form-group" style="margin-bottom: 0; min-width:22em;">
<table class="form-group mb-3" style="margin-bottom: 0; min-width:22em;">
<tr>
<td width="100%;"></td>]]
@ -439,7 +439,7 @@ function system_setup_ui_utils.prefsDateTimeFieldPrefs(label, comment, key, defa
<input type="hidden" id="]] print(orig_name) print[[" name="]] print(orig_name) print[[" value="" />
<div class='input-group date' id=']] print(picker_name) print[[' style="width: 20em;" data-target-input="nearest">
<input id="]] print(key) print[[" name="]] print(key) print[[" type="text" class="form-control datetimepicker-input" data_target="#]] print(picker_name) print[["/>
<div class="input-group-append" data-target="#]] print(picker_name) print[[" data-toggle="datetimepicker">
<div class="input-group-append" data-target="#]] print(picker_name) print[[" data-bs-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar"></i></div>
</div>
<script type="text/javascript">
@ -464,7 +464,7 @@ function system_setup_ui_utils.prefsDateTimeFieldPrefs(label, comment, key, defa
</tr>
<tr>
<td colspan="3" style="padding:0;">
<div class="help-block with-errors text-right" style="height:1em;"></div>
<div class="help-block with-errors text-end" style="height:1em;"></div>
</td>
</tr>
</table>

View file

@ -60,9 +60,9 @@ function telemetry_utils.print_overview()
]]
if telemetry_utils.telemetry_enabled() then
print('<span class="badge badge-success">'..i18n('prefs.telemetry_contribute')..'</span>')
print('<span class="badge bg-success">'..i18n('prefs.telemetry_contribute')..'</span>')
elseif telemetry_utils.telemetry_disabled() then
print('<span class="badge badge-secondary">'..i18n('prefs.telemetry_do_not_contribute')..'</span>')
print('<span class="badge bg-secondary">'..i18n('prefs.telemetry_do_not_contribute')..'</span>')
else -- no preference expressed
print('<i>'..i18n('telemetry_page.telemetry_data_no_consent')..'</i>')
end

View file

@ -3,7 +3,7 @@
Template used by the 'Elephant Flows' User Script.
#}
<div class="form-group row">
<div class="mb-3 row">
</div>
<script type="text/javascript">

View file

@ -33,7 +33,7 @@
%}
<input hidden type="number" value="{{ hook_conf.script_conf.min_duration }}" name="min_duration">
<div class="form-group row">
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">{{ i18n("enabled") }}</label>
<div class="col-2">
<div class="custom-control custom-switch">
@ -42,7 +42,7 @@
</div>
</div>
</div>
<div class="form-group row">
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">{{ i18n("scripts_list.templates.flow_duration_threshold") }}</label>
<div class="col-2">
<div id="time-toggles" class="btn-group btn-group-toggle w-100" data-toggle="buttons">

View file

@ -16,7 +16,7 @@
local default_operator_not_defined = isEmptyString(user_script.default_value.operator)
%}
<div class="form-group row">
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">{{ i18n("enabled") }}</label>
<div class="col-2">
<div class="custom-control custom-switch">
@ -25,7 +25,7 @@
</div>
</div>
</div>
<div class="form-group row">
<div class="mb-3 row">
<label class="col-sm-2 col-form-label">{{ i18n("edit_user_script.hooks_name." .. hook_name) or hook_name }}</label>
<div class="col-2">
<div class="input-group">
@ -41,7 +41,7 @@
{% end %}
</div>
<input type="number" class="form-control text-right" required {{ (hook_conf.enabled and '' or 'disabled') }} value="{{ hook_conf.script_conf.threshold }}" name="threshold">
<span class="mt-auto mb-auto ml-2 mr-2">{{ field_unit }}</span>
<span class="mt-auto mb-auto ms-2 me-2">{{ field_unit }}</span>
</div>
</div>

View file

@ -1882,7 +1882,7 @@ local function printUserScriptsTable()
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td class="text-right">%u</td>
<td class="text-end">%u</td>
<td class="text-center">%s</td></tr>
]]), name, info.label, available, hooks, filters, script.num_filtered, edit_url or ""))
::skip::
@ -1914,7 +1914,7 @@ function user_scripts.printUserScripts()
</tbody>
</table>
</div>
<link href="]].. ntop.getHttpPrefix() ..[[/datatables/datatables.min.css" rel="stylesheet"/>
<link href="]].. ntop.getHttpPrefix() ..[[/css/dataTables.bootstrap5.min.css" rel="stylesheet"/>
<script type='text/javascript'>
$(document).ready(function() {
@ -1936,7 +1936,7 @@ function user_scripts.printUserScripts()
const dropdownId = `${title}-filter-menu`;
const $dropdownContainer = $(`<div id='${dropdownId}' class='dropdown d-inline'></div>`);
const $dropdownButton = $(`<button class='btn-link btn dropdown-toggle' data-toggle='dropdown' type='button'></button>`);
const $dropdownButton = $(`<button class='btn-link btn dropdown-toggle' data-bs-toggle='dropdown' type='button'></button>`);
const $dropdownTitle = $(`<span>${title}</span>`);
$dropdownButton.append($dropdownTitle);

View file

@ -119,13 +119,13 @@ function MosPercentageBar(value)
value = tonumber(value)
if (value >= 4.0) then
ret_bar = '<span class="badge badge-success">'..value..' '..i18n("flow_details.desirable_label")..'</span>'
ret_bar = '<span class="badge bg-success">'..value..' '..i18n("flow_details.desirable_label")..'</span>'
elseif ((value >= 3.6) and (value < 4.0)) then
ret_bar = '<span class="badge badge-info">'..value..' '..i18n("flow_details.acceptable_label")..'</span>'
ret_bar = '<span class="badge bg-info">'..value..' '..i18n("flow_details.acceptable_label")..'</span>'
elseif ((value >= 2.6) and (value < 3.6)) then
ret_bar = '<span class="badge badge-warning">'..value..' '..i18n("flow_details.reach_connection_label")..'</span>'
ret_bar = '<span class="badge bg-warning">'..value..' '..i18n("flow_details.reach_connection_label")..'</span>'
elseif ((value > 0) and (value < 2.6)) then
ret_bar = '<span class="badge badge-danger">'..value..' '..i18n("flow_details.not_recommended_label")..'</span>'
ret_bar = '<span class="badge bg-danger">'..value..' '..i18n("flow_details.not_recommended_label")..'</span>'
end
return ret_bar
@ -138,13 +138,13 @@ function RFactorPercentageBar(value)
value = tonumber(value)
if (value >= 80.0) then
ret_bar = '<span class="badge badge-success">'..value..' '..i18n("flow_details.desirable_label")..'</span>'
ret_bar = '<span class="badge bg-success">'..value..' '..i18n("flow_details.desirable_label")..'</span>'
elseif ((value >= 70.0) and (value < 80.0)) then
ret_bar = '<span class="badge badge-info">'..value..' '..i18n("flow_details.acceptable_label")..'</span>'
ret_bar = '<span class="badge bg-info">'..value..' '..i18n("flow_details.acceptable_label")..'</span>'
elseif ((value >= 50.0) and (value < 70.0)) then
ret_bar = '<span class="badge badge-warning">'..value..' '..i18n("flow_details.reach_connection_label")..'</span>'
ret_bar = '<span class="badge bg-warning">'..value..' '..i18n("flow_details.reach_connection_label")..'</span>'
elseif ((value >= 0) and (value < 50.0)) then
ret_bar = '<span class="badge badge-danger">'..value..' '..i18n("flow_details.not_recommended_label")..'</span>'
ret_bar = '<span class="badge bg-danger">'..value..' '..i18n("flow_details.not_recommended_label")..'</span>'
end
return ret_bar
@ -154,34 +154,34 @@ end
function SipCallStatePercentageBar(state)
-- Wireshark use different state http://wiki.wireshark.org/VoIP_calls
label_class = "badge-secondary"
label_class = "bg-secondary"
if (state == "REGISTER") then
label_class = "badge-info"
label_class = "bg-info"
end
if (state == "CALL_STARTED") then
label_class = "badge-info"
label_class = "bg-info"
end
if (state == "CALL_IN_PROGRESS") then
label_class = "badge-progress"
label_class = "bg-progress"
end
if (state == "CALL_COMPLETED") then
label_class = "badge-success"
label_class = "bg-success"
end
if (state == "CALL_ERROR") then
label_class = "badge-danger"
label_class = "bg-danger"
end
if (state == "CALL_CANCELED") then
label_class = "badge-warning"
label_class = "bg-warning"
end
if (state == "UNKNOWN") then
label_class = "badge-warning"
label_class = "bg-warning"
end
print('<span class="badge '..label_class..'">'..state..'</span>')

View file

@ -72,7 +72,7 @@ print([[
print[[<div class="row mb-3">
<div class="col col-md-1">
<form class="form-inline" style="width:12em">
<select id="filter_select" name="edition" class="form-control">
<select id="filter_select" name="edition" class="form-select">
<option value="" ]] print(ternary(isEmptyString(edition, "selected", ""))) print[[>]] print(i18n("all")) print[[</option>
<option value="community" ]] print(ternary(edition == "community", "selected", "")) print[[>]] print(i18n("plugins_overview.edition_only", {edition="Community"})) print[[</option>
<option value="pro" ]] print(ternary(edition == "pro", "selected", "")) print[[>]] print(i18n("plugins_overview.edition_only", {edition="Pro"})) print[[</option>
@ -83,7 +83,7 @@ print[[<div class="row mb-3">
</div>]]
if isAdministrator() then
print[[<div class="col col-md--11 text-right">
print[[<div class="col col-md--11 text-end">
<form class="form-inline" method="POST">
<input name="csrf" type="hidden" value="]] print(ntop.getRandomCSRFValue()) print[[">
<input name="action" type="hidden" value="reload" />

View file

@ -111,7 +111,7 @@ if (ntop.isEnterpriseM() or ntop.isnEdge()) and pool_id ~= host_pools_instance.D
host_pools_nedge.printQuotas(pool_id, nil, page_params)
print[[
<button class="btn btn-secondary" data-toggle="modal" data-target="#reset_quotas_dialog" style="float:right;">]] print(i18n("host_pools.reset_quotas")) print[[</button>]]
<button class="btn btn-secondary" data-bs-toggle="modal" data-target="#reset_quotas_dialog" style="float:right;">]] print(i18n("host_pools.reset_quotas")) print[[</button>]]
if ntop.isnEdge() then
local username = host_pools_nedge.poolIdToUsername(pool_id)
print[[<a href="]] print(ntop.getHttpPrefix()) print[[/lua/pro/nedge/admin/nf_edit_user.lua?page=categories&username=]] print(username)

View file

@ -23,8 +23,8 @@ print [[
<br>
<ul class="nav nav-tabs">
<li class="nav-item active"><a class="nav-link active" href="#Overview" data-toggle="tab">]] print(i18n("overview")) print[[</a></li>
<li class="nav-item"><a class="nav-link" href="#Timeline" data-toggle="tab">]] print(i18n("processes_stats.timeline")) print[[</a></li>
<li class="nav-item active"><a class="nav-link active" href="#Overview" data-bs-toggle="tab">]] print(i18n("overview")) print[[</a></li>
<li class="nav-item"><a class="nav-link" href="#Timeline" data-bs-toggle="tab">]] print(i18n("processes_stats.timeline")) print[[</a></li>
</ul>
<!-- Tab content-->
@ -145,7 +145,7 @@ print [[
<table class="table table-bordered">
<tr>
<th class="text-left span3">
<th class="text-start span3">
<legend>]] print(i18n("processes_stats.legend")) print[[</legend>
<div id="legend"></div>
<br/><br/>

View file

@ -74,18 +74,16 @@ print([[
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">]] .. i18n("syslog.edit") .. [[</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body container-fluid">
<div class="form-group row">
<div class="form-group mb-3 row">
<label class="col-sm-3 col-form-label">]] .. i18n("syslog.producer_type") .. [[</label>
<div class="col-sm-5">
]].. generate_select("select-edit-producer", "syslog_producer_type", true, false, producer_types) ..[[
</div>
</div>
<div class="form-group row">
<div class="form-group mb-3 row">
<label class="col-sm-3 col-form-label">]] .. i18n("syslog.producer_host") .. [[</label>
<div class="col-sm-5">
<input placeholder="]] .. i18n("syslog.ip_or_device") .. [[" required id="input-edit-host" type="text" name="host" class="form-control" />
@ -95,8 +93,7 @@ print([[
<span class="invalid-feedback"></span>
</div>
<div class="modal-footer">
<button id="btn-reset-defaults" type="button" class="btn btn-danger mr-auto">]] .. i18n("reset") .. [[</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">]] .. i18n("cancel") .. [[</button>
<button id="btn-reset-defaults" type="button" class="btn btn-danger me-auto">]] .. i18n("reset") .. [[</button>
<button type="submit" class="btn btn-primary">]] .. i18n("apply") .. [[</button>
</div>
</div>
@ -113,18 +110,16 @@ print([[
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">]] .. i18n("syslog.add") .. [[</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body container-fluid">
<div class="form-group row">
<div class="form-group mb-3 row">
<label class="col-sm-3 col-form-label">]] .. i18n("syslog.producer_type") .. [[</label>
<div class="col-sm-5">
]] .. generate_select("select-add-producer", "producer", true, false, producer_types) ..[[
</div>
</div>
<div class="form-group row">
<div class="form-group mb-3 row">
<label class="col-sm-3 col-form-label">]] .. i18n("syslog.producer_host") .. [[</label>
<div class="col-sm-5">
<input placeholder="]] .. i18n("syslog.ip_or_device") .. [[" required id="input-add-host" type="text" name="host" class="form-control" />
@ -134,7 +129,6 @@ print([[
<span class="invalid-feedback"></span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">]] .. i18n("cancel") .. [[</button>
<button type="submit" class="btn btn-primary">]] .. i18n("add") .. [[</button>
</div>
</div>
@ -151,9 +145,7 @@ print([[
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">]] .. i18n("delete") .. [[: <span id="delete-host"></span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>
@ -162,7 +154,6 @@ print([[
<span class="invalid-feedback"></span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">]] .. i18n("cancel") .. [[</button>
<button id="btn-delete-producer" type="submit" class="btn btn-danger">]] .. i18n("delete") .. [[</button>
</div>
</div>
@ -182,7 +173,7 @@ print([[
-- Table Data
print([[
<link href="]].. ntop.getHttpPrefix() ..[[/datatables/datatables.min.css" rel="stylesheet"/>
<link href="]].. ntop.getHttpPrefix() ..[[/css/dataTables.bootstrap5.min.css" rel="stylesheet"/>
<script type="text/javascript">
i18n.showing_x_to_y_rows = "]].. i18n('showing_x_to_y_rows', {x='_START_', y='_END_', tot='_TOTAL_'}) ..[[";

View file

@ -96,9 +96,9 @@ print_page_body = function()
<input name="lan_interfaces" type="hidden">
<input name="wan_interfaces" type="hidden">
<div class="form-group" style="width:40%; margin-left:5%; display:inline-block;">
<label for="lan_ifaces">]] print(lan_label) print[[</label>
<select id="lan_ifaces" class="form-control" name="lan_ifaces" style="min-height: 150px;" multiple>]]
<div class="form-group mb-3" style="width:40%; margin-left:5%; display:inline-block;">
<label class='form-label' for="lan_ifaces">]] print(lan_label) print[[</label>
<select id="lan_ifaces" class="form-select" name="lan_ifaces" style="min-height: 150px;" multiple>]]
for iface, role in pairsByKeys(ifaces) do
printIfSelected(iface, role == "lan")
@ -106,9 +106,9 @@ print_page_body = function()
print[[</select>
</div>
<div class="form-group" style="width:40%; margin-right:5%; display:inline-block; float:right;">
<label for="wan_ifaces" >]] print(wan_label) print[[</label>
<select id="wan_ifaces" class="form-control" name="wan_ifaces" style="min-height: 150px;" multiple>]]
<div class="form-group mb-3" style="width:40%; margin-right:5%; display:inline-block; float:right;">
<label class='form-label' for="wan_ifaces" >]] print(wan_label) print[[</label>
<select id="wan_ifaces" class="form-select" name="wan_ifaces" style="min-height: 150px;" multiple>]]
for iface, role in pairsByKeys(ifaces) do
printIfSelected(iface, role == "wan")

View file

@ -122,9 +122,9 @@ if(page == "overview") then
-- encapsule the ERROR or WARNING string in a badge
-- so the log are more visible
if text:find("ERROR") then
text = text:gsub("(ERROR)(:)", "<span class='badge badge-danger'>%1</span>")
text = text:gsub("(ERROR)(:)", "<span class='badge bg-danger'>%1</span>")
elseif text:find("WARNING") then
text = text:gsub("(WARNING)(:)", "<span class='badge badge-warning'>%1</span>")
text = text:gsub("(WARNING)(:)", "<span class='badge bg-warning'>%1</span>")
end
print(text)

View file

@ -44,7 +44,7 @@ print(
action = "assignDevicePool(mac_to_assign)",
title = i18n("unknown_devices.assign_device_pool"),
message = i18n("unknown_devices.select_pool", {mac="<span id=\"assign_device_dialog_mac\"></span>"}) ..
'<br><br><select class="form-control" id="device_target_pool" style="width:15em;" >'..
'<br><br><select class="form-select" id="device_target_pool" style="width:15em;" >'..
graph_utils.poolDropdown(ifstats.id, "")..
'</select>',
custom_alert_class = "",
@ -101,7 +101,7 @@ print ('sort: [ ["' .. getDefaultTableSort("unknown_devices") ..'","' .. getDefa
print('buttons: [')
-- table.clone needed to modify some parameters while keeping the original unchanged
local devices_mode = table.clone(page_params)
print('\'<div class="btn-group float-right"><button class="btn btn-link dropdown-toggle" data-toggle="dropdown">'..i18n("unknown_devices.filter_devices")..devices_mode_filter..'<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')
print('\'<div class="btn-group float-right"><button class="btn btn-link dropdown-toggle" data-bs-toggle="dropdown">'..i18n("unknown_devices.filter_devices")..devices_mode_filter..'<span class="caret"></span></button> <ul class="dropdown-menu scrollable-dropdown" role="menu" style="min-width: 90px;">')
devices_mode.unassigned_devices = nil
print ('<li class="nav-item"><a class="dropdown-item" href="')

View file

@ -74,7 +74,7 @@ else
if(page == "username_processes") then
print [[
<table class="table table-bordered table-striped">
<tr><th class="text-left">
<tr><th class="text-start">
]] print(i18n("user_info.processes_overview")) print[[
<td><div class="pie-chart" id="topProcesses"></div></td>