mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 07:29:32 +00:00
158 lines
5.9 KiB
HTML
158 lines
5.9 KiB
HTML
<div id="{{wizard.id}}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="{{wizard.id}}Label" aria-hidden="true" data-backdrop="static">
|
|
<div class="modal-dialog" style="{{wizard.style or ''}}">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 id="{{wizard.id}}Label">{{wizard.title}}</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
|
|
{% wizard.actual_steps = {}; wizard.size_sum = 0 %}
|
|
{% for step_idx, step in ipairs(wizard.steps) do %}
|
|
{% if not step.disabled then %}
|
|
{% wizard.actual_steps[#wizard.actual_steps + 1] = step; wizard.size_sum = wizard.size_sum + (step.size or 1) %}
|
|
{% end %}
|
|
{% end %}
|
|
|
|
<div class="modal-body" style="{{wizard.body_style or ""}}">
|
|
<div class="navbar">
|
|
<div class="navbar-inner">
|
|
<ul class="nav nav-wizard">
|
|
{% for step_idx, step in ipairs(wizard.actual_steps) do %}
|
|
<li{% if step_idx == 1 then %} class="active" {% end %} style="width: {{ (step.size or 1) / wizard.size_sum *100 }}%;"><a{% if step_idx ~= 1 then %} class="disabled" {% end %} href="#{{wizard.id}}Step{{step_idx}}" data-bs-toggle="tab" data-step="{{step_idx}}">{{step.title}}</a></li>
|
|
{% end %}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<form id="{{wizard.id}}Form" style="height:95%;"
|
|
data-ays-ignore="true"
|
|
onkeypress="return event.keyCode != 13;"
|
|
method="{{wizard.form_method or "post"}}"
|
|
{% if wizard.form_action ~= nil then %} action="{{wizard.form_action}} {% end %}"
|
|
{% if wizard.form_onsubmit ~= nil then %} onsubmit="return {{wizard.form_onsubmit}}(this)" {% end %}>
|
|
<input name="csrf" type="hidden" value="{{ ntop.getRandomCSRFValue() }}" />
|
|
<div class="tab-content" style="height:100%;">
|
|
{% for step_idx, step in ipairs(wizard.actual_steps) do %}
|
|
<div class="tab-pane fade in{% if step_idx == 1 then %} active {% end %}" id="{{wizard.id}}Step{{step_idx}}" style="height:100%;">
|
|
<div class="well well-wizard" style="height:75%;">
|
|
{*step.content*}
|
|
</div>
|
|
|
|
<a class="btn btn-secondary wizard-prev{% if step_idx == 1 then %} disabled {% end %}" href="#">{{i18n("previous")}}</a>
|
|
<a class="btn btn-secondary wizard-next pull-right{% if (step_idx == #wizard.actual_steps) or (wizard.cannot_proceed) then %} disabled {% end %}" href="#">{{i18n("next")}}</a>
|
|
</div>
|
|
{% end %}
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button class="btn btn-secondary" data-bs-dismiss="modal" aria-hidden="true">{{i18n("abort")}}</button>
|
|
<button id="{{wizard.id}}SaveBtn" class="btn btn-primary" onClick="$('#{{wizard.id}}Form').submit();">{{i18n("save_configuration")}}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
var CurrentStep = 1;
|
|
|
|
/* Before modal open */
|
|
$("#{{wizard.id}}").on("show.bs.modal", function() {
|
|
/* Begin from the first tab */
|
|
$("ul.nav-wizard li:first a", $(this)).tab('show');
|
|
|
|
$("input", $(this)).each(function() {
|
|
if (typeof $(this).attr("data-input-value") === "undefined")
|
|
/* Dump original value */
|
|
$(this).attr("data-input-value", $(this).val());
|
|
else
|
|
/* Restore original value */
|
|
$(this).val($(this).attr("data-input-value"));
|
|
});
|
|
|
|
$("#{{wizard.id}}SaveBtn").attr("disabled", "disabled");
|
|
});
|
|
|
|
/* On Next button click */
|
|
$('#{{wizard.id}} a.wizard-next').click(function(){
|
|
/* Trigger validation */
|
|
var form = $("#{{wizard.id}}Form");
|
|
form.data("bs.validator").validate();
|
|
|
|
/* Only consider current panel fields */
|
|
var invalid = $(".has-error", form).filter(function() {
|
|
return $(this).closest(".tab-pane").attr("id") === ("{{wizard.id}}Step" + {{wizard.id}}CurrentStep);
|
|
}).length > 0;
|
|
|
|
if (! invalid) {
|
|
var nextId = $(this).parents('.tab-pane').next().attr("id");
|
|
var nextTab = $('[href="#'+nextId+'"]');
|
|
nextTab.tab('show');
|
|
return false;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
/* On Previous button click */
|
|
$('#{{wizard.id}} a.wizard-prev').click(function(){
|
|
var prevId = $(this).parents('.tab-pane').prev().attr("id");
|
|
$('[href="#'+prevId+'"]').tab('show');
|
|
return false;
|
|
});
|
|
|
|
{{wizard.id}}OnShow = [];
|
|
|
|
{% for step_idx, step in ipairs(wizard.actual_steps) do %}
|
|
{% if step.on_show then %}
|
|
{{wizard.id}}OnShow.push(function(){ {*step.on_show*} });
|
|
{% else %}
|
|
{{wizard.id}}OnShow.push($.noop);
|
|
{% end %}
|
|
{% end %}
|
|
|
|
$('#{{wizard.id}} a[data-bs-toggle="tab"]')
|
|
/* On Tab click */
|
|
.on("click", function(e) {
|
|
if ($(this).hasClass("disabled")) {
|
|
e.preventDefault();
|
|
return false;
|
|
}
|
|
})
|
|
/* On Tab shown */
|
|
.on('shown.bs.tab', function (e) {
|
|
var savebt = $("#{{wizard.id}}SaveBtn");
|
|
var cur_step = $(this).attr("data-step");
|
|
|
|
if (cur_step != {{#wizard.actual_steps}})
|
|
savebt.attr("disabled", "disabled");
|
|
else
|
|
savebt.removeAttr("disabled");
|
|
|
|
{{wizard.id}}CurrentStep = cur_step;
|
|
var form = $("#{{wizard.id}}Form");
|
|
|
|
/* Clear any validation errors */
|
|
$(".has-error", form).removeClass("has-error");
|
|
$(".with-errors", form).html("");
|
|
|
|
/* Enable previous tabs, disable next tabs */
|
|
$(this).parent().prevAll().find("a").removeClass("disabled");
|
|
$(this).parent().nextAll().find("a").addClass("disabled");
|
|
|
|
{{wizard.id}}OnShow[cur_step-1]();
|
|
});
|
|
|
|
$("#{{wizard.id}}Form")
|
|
.validator({*wizard.validator_options or "{}"*})
|
|
.on('validate.bs.validator', function(e) {
|
|
var savebt = $("#{{wizard.id}}SaveBtn");
|
|
var invalid = $(".has-error", $(this)).length > 0;
|
|
|
|
if (invalid) {
|
|
savebt.addClass("disabled");
|
|
} else {
|
|
savebt.removeClass("disabled");
|
|
}
|
|
});
|
|
</script>
|