Add mode selection handling in global config and update templates for improved UI

This commit is contained in:
Théophile Diot 2024-11-08 12:07:30 +01:00
parent 25c3b13167
commit d598cb4276
No known key found for this signature in database
GPG key ID: FA995104A0BA376A
7 changed files with 296 additions and 273 deletions

View file

@ -77,6 +77,8 @@ def global_config_page():
Thread(target=update_global_config, args=(variables, True)).start()
arguments = {}
if request.args.get("mode", "advanced") != "advanced":
arguments["mode"] = request.args["mode"]
if request.args.get("type", "all") != "all":
arguments["type"] = request.args["type"]
@ -88,6 +90,7 @@ def global_config_page():
)
)
mode = request.args.get("mode", "advanced")
search_type = request.args.get("type", "all")
global_config = DB.get_config(global_only=True, methods=True)
return render_template("global_config.html", config=global_config, type=search_type)
return render_template("global_config.html", config=global_config, mode=mode, type=search_type)

View file

@ -65,6 +65,10 @@ $(document).ready(() => {
params.type = null; // Remove the type parameter
updateUrlParams(params, true); // Call the function without the hash (keep it intact)
} else {
if (currentMode === "advanced" && !$("#navs-modes-easy").length) {
params.mode = null; // Remove the mode parameter
}
// If another mode is selected, update the "mode" parameter
params.template = null; // Remove the template parameter
if (currentMode === "advanced" && currentPlugin !== "general") {
@ -121,7 +125,8 @@ $(document).ready(() => {
const handleTabChange = (targetClass) => {
// Prepare the params for URL (parameters to be updated in the URL)
const params = {};
if (currentMode !== "easy") params.mode = currentMode;
if (currentMode !== ($("#navs-modes-easy").length ? "easy" : "advanced"))
params.mode = currentMode;
if (currentType !== "all") params.type = currentType;
if (targetClass.includes("navs-plugins-")) {
@ -491,7 +496,7 @@ $(document).ready(() => {
});
// Attach event listener to handle mode changes when tabs are switched
$('#service-modes-menu button[data-bs-toggle="tab"]').on(
$('.mode-selection-menu button[data-bs-toggle="tab"]').on(
"shown.bs.tab",
(e) => {
handleModeChange($(e.target).data("bs-target"));

View file

@ -13,37 +13,38 @@
<!-- prettier-ignore -->
<div class="d-flex justify-content-between align-items-center mb-5">
{% include "breadcrumb.html" %}
{% if current_endpoint != "services" and "services" in request.path %}
{% if current_endpoint == "global-config" or current_endpoint != "services" and "services" in request.path %}
<!-- Floating button to toggle the menu -->
<div class="position-fixed bottom-0 start-0 m-3 d-lg-none"
id="floating-modes-menu">
<button class="btn btn-sm btn-primary d-flex align-items-center justify-content-center rounded-pill me-1"
type="button"
data-bs-toggle="collapse"
data-bs-target="#service-modes-floating"
aria-controls="service-modes-floating"
data-bs-target="#mode-selection-floating"
aria-controls="mode-selection-floating"
aria-expanded="false"
aria-label="Toggle navigation">
<i class="bx bx-xs bx-menu"></i> Service Modes
<i class="bx bx-xs bx-menu"></i> Mode selection
</button>
<!-- Collapsible floating menu -->
<div class="collapse mt-2" id="service-modes-floating">
<ul id="service-modes-menu"
class="nav nav-pills flex-column bg-{% if current_user.theme == 'light' %}white{% else %}dark{% endif %} p-2 rounded shadow-sm"
<div class="collapse mt-2" id="mode-selection-floating">
<ul class="nav nav-pills flex-column bg-{% if current_user.theme == 'light' %}white{% else %}dark{% endif %} p-2 rounded shadow-sm mode-selection-menu"
role="tablist">
<li class="nav-item mb-1" role="presentation">
<button type="button"
class="btn btn-sm rounded-pill nav-link d-flex align-items-center{% if mode == 'easy' %} active{% endif %}"
role="tab"
data-bs-toggle="tab"
data-bs-target="#navs-modes-easy"
aria-controls="navs-modes-easy"
{% if mode == 'easy' %}aria-selected="true"{% endif %}>
<i class="bx bx-customize bx-sm"></i>
&nbsp;
<span class="don-jose">Easy</span>
</button>
</li>
{% if current_endpoint != "global-config" %}
<li class="nav-item mb-1" role="presentation">
<button type="button"
class="btn btn-sm rounded-pill nav-link d-flex align-items-center{% if mode == 'easy' %} active{% endif %}"
role="tab"
data-bs-toggle="tab"
data-bs-target="#navs-modes-easy"
aria-controls="navs-modes-easy"
{% if mode == 'easy' %}aria-selected="true"{% endif %}>
<i class="bx bx-customize bx-sm"></i>
&nbsp;
<span class="don-jose">Easy</span>
</button>
</li>
{% endif %}
<li class="nav-item mb-1" role="presentation">
<button type="button"
class="btn btn-sm rounded-pill nav-link d-flex align-items-center{% if mode == 'advanced' %} active{% endif %}"
@ -73,22 +74,23 @@
</ul>
</div>
</div>
<ul id="service-modes-menu"
class="nav nav-pills flex-column flex-md-row d-none d-lg-flex"
<ul class="nav nav-pills flex-column flex-md-row d-none d-lg-flex mode-selection-menu"
role="tablist">
<li class="nav-item me-0 me-sm-3" role="presentation">
<button type="button"
class="btn btn-sm rounded-pill nav-link d-flex align-items-center{% if mode == 'easy' %} active{% endif %}"
role="tab"
data-bs-toggle="tab"
data-bs-target="#navs-modes-easy"
aria-controls="navs-modes-easy"
{% if mode == 'easy' %}aria-selected="true"{% endif %}>
<i class="bx bx-customize bx-xs"></i>
&nbsp;
<span class="d-none d-sm-inline don-jose">Easy</span>
</button>
</li>
{% if current_endpoint != "global-config" %}
<li class="nav-item me-0 me-sm-3" role="presentation">
<button type="button"
class="btn btn-sm rounded-pill nav-link d-flex align-items-center{% if mode == 'easy' %} active{% endif %}"
role="tab"
data-bs-toggle="tab"
data-bs-target="#navs-modes-easy"
aria-controls="navs-modes-easy"
{% if mode == 'easy' %}aria-selected="true"{% endif %}>
<i class="bx bx-customize bx-xs"></i>
&nbsp;
<span class="d-none d-sm-inline don-jose">Easy</span>
</button>
</li>
{% endif %}
<li class="nav-item me-0 me-sm-3" role="presentation">
<button type="button"
class="btn btn-sm rounded-pill nav-link d-flex align-items-center{% if mode == 'advanced' %} active{% endif %}"

View file

@ -1,8 +1,19 @@
{% extends "dashboard.html" %}
{% block content %}
<!-- Content -->
<input type="hidden"
id="selected-mode"
name="selected_mode"
value="{{ mode }}">
{% set blacklisted_settings = get_blacklisted_settings(true) %}
{% set service_method = "ui" %}
{% include "models/plugins_settings.html" %}
<div class="tab-content p-0 position-relative">
<div class="tab-pane fade{% if mode == 'advanced' %} show active{% endif %}"
id="navs-modes-advanced"
role="tabpanel">{% include "models/plugins_settings.html" %}</div>
<div class="tab-pane position-relative fade{% if mode == 'raw' %} show active{% endif %}"
id="navs-modes-raw"
role="tabpanel">{% include "models/plugins_settings_raw.html" %}</div>
</div>
<!-- / Content -->
{% endblock %}

View file

@ -140,242 +140,244 @@
</div>
</div>
<div {% if plugin_data["type"] == "pro" and not is_pro_version %}class="blur-overlay"{% endif %}>
{% if plugin_data["type"] == "pro" and not is_pro_version %}
<div class="blur-message">
<i class='bx bx-diamond bx-xs'></i>
<a href="{{ url_for('pro') }}" class="text-white-80">Upgrade to Pro to access this feature</a>
</div>
{% endif %}
<div class="card-body row g-2 gx-6 pb-0">
{% for setting, setting_data in filtered_settings.items() if not setting_data.get('multiple', false) and setting not in blacklisted_settings and (not service_endpoint or setting_data['context'] == "multisite") %}
{% set setting_id_prefix = "setting-" + plugin + "-" %}
{% set setting_config = config.get(setting, {}) %}
{% set setting_default = setting_data.get("default", "") %}
{% set setting_value = setting_config.get("value", setting_default) %}
{% set setting_method = setting_config.get("method", "default") %}
{% set setting_template = setting_config.get("template", "") %}
{% set disabled = setting_method not in ('ui', 'default') and (current_endpoint == "global-config" or not setting_config.get("global")) %}
{% if current_endpoint == "new" %}
{% set disabled = false %}
{% if setting == "SERVER_NAME" %}
{% set setting_value = "" %}
{% endif %}
{% endif %}
{% if service_method == "autoconf" %}
{% set setting_method = "autoconf" %}
{% set disabled = true %}
{% endif %}
{% if plugin_data["type"] == "pro" and not is_pro_version %}
{% set disabled = true %}
{% set setting_method = "<i class='bx bx-diamond bx-xs'></i><span>Pro feature</span>" %}
{% endif %}
{% if is_readonly %}
{% set disabled = true %}
{% set setting_method = "readonly" %}
{% endif %}
<div class="col-12 col-sm-6 col-lg-4 pb-3"
{% if disabled %}data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" data-bs-original-title="Disabled by {{ setting_method }}"{% endif %}>
<div class="d-flex justify-content-between align-items-center">
<label id="label-setting-{{ plugin }}-{{ setting_data['id'] }}"
for="setting-{{ plugin }}-{{ setting_data['id'] }}"
class="form-label fw-semibold text-truncate">{{ setting_data["label"] }}</label>
<div class="d-flex align-items-center">
{% if current_endpoint == "global-config" and setting_data["context"] == "multisite" %}
<a role="badge"
href='https://docs.bunkerweb.io/latest/concepts/?utm_campaign=self&utm_source=ui#multisite-mode'
class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="Multisite setting"
target="_blank"
rel="noopener">
<span class="bx bx-server bx-xs"></span>
</a>
{% endif %}
{% if setting_template %}
<span class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From template: {{ setting_template }}">
<span class="bx bx-spreadsheet bx-xs"></span>
</span>
{% endif %}
{% if current_endpoint != "global-config" and setting_config.get("global") and setting_value != setting_default %}
<span class="badge badge-center rounded-pill bg-primary-subtle text-dark d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From global configuration">
<span class="bx bx-globe bx-xs"></span>
</span>
{% endif %}
<span class="badge rounded-pill bg-secondary-subtle text-dark d-flex align-items-center justify-content-center p-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="{{ setting_data['help'] }}">
<span class="bx bx-question-mark bx-xs"></span>
</span>
</div>
</div>
{% if setting_data["type"] == "select" %}
{% include "models/select_setting.html" %}
{% elif setting_data["type"] == "check" %}
{% include "models/checkbox_setting.html" %}
{% else %}
{% if setting == "SERVER_NAME" and current_endpoint != "global-config" %}
<input type="hidden"
id="old-server-name"
name="OLD_SERVER_NAME"
value="{{ setting_value }}">
{% endif %}
{% include "models/input_setting.html" %}
{% endif %}
{% if plugin_data["type"] == "pro" and not is_pro_version %}
<div class="blur-message">
<i class='bx bx-diamond bx-xs'></i>
<a href="{{ url_for('pro') }}" class="text-white-80">Upgrade to Pro to access this feature</a>
</div>
{% endfor %}
</div>
{% set plugin_multiples = get_multiples(filtered_settings, config) %}
{% if plugin_multiples %}
{% set setting_id_prefix = "multiple-setting-" + plugin +"-" %}
<div class="card-header pb-2 mt-6">
<h5 class="card-title d-inline border p-2{{ plugin_types[plugin_data['type']].get('text-class', '') }}{{ plugin_types[plugin_data['type']].get('title-class', '') }}">
Multiple settings
</h5>
<p class="card-subtitle text-muted mt-2">This is where you can configure multiple settings for this plugin.</p>
</div>
<div class="card-body row g-2 gx-6 pt-0">
{% for multiple, multiples in plugin_multiples.items() %}
<div id="multiple-{{ plugin }}-{{ multiple }}"
class="col-12{% if plugin_multiples|length > 1 %} col-md-6{% endif %}{% if plugin_multiples|length > 2 and not settings|length > 1 %} col-lg-4{% endif %}">
{% for setting_suffix, settings in multiples.items() %}
<div class="row multiple-container pt-2 pb-2">
{% set setting_id_suffix = "-" + setting_suffix %}
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0 me-2">
{{ multiple.replace('-', ' ') | capitalize }}
{% if setting_suffix != "0" %}#{{ setting_suffix }}{% endif %}
</h6>
<div class="d-flex align-items-center">
{% if setting_suffix == "0" %}
<div class="me-1"
{% if service_method == "autoconf" or is_readonly %}data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="{% if is_readonly %}The database is in readonly{% else %}The service was created using the autoconf method{% endif %}
therefore
multiple
settings
are
locked
"
{% endif %}>
<button id="add-multiple-{{ plugin }}-{{ multiple }}"
type="button"
class="btn btn-xs btn-text-bw-green rounded-pill add-multiple p-0 pe-2{% if service_method == "autoconf" or is_readonly %} disabled{% endif %}">
<i class="bx bx-plus-circle bx-sm"></i>&nbsp;ADD
</button>
</div>
{% else %}
<button id="remove-multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
type="button"
class="btn btn-xs btn-text-danger rounded-pill remove-multiple p-0 pe-2">
<i class="bx bx-trash bx-sm"></i>&nbsp;REMOVE
</button>
{% endif %}
<button id="show-multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
type="button"
class="btn btn-xs btn-text-secondary rounded-pill show-multiple p-0"
data-bs-toggle="collapse"
data-bs-target="#multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
aria-expanded="true"
aria-controls="multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}">
<i class="bx bx-show-alt bx-sm"></i>&nbsp;HIDE
</button>
</div>
</div>
<div id="multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
class="collapse show multiple-collapse pt-0">
<div class="row g-2 gx-6 mt-2 pt-2">
{% for setting, setting_data in settings.items() if setting not in blacklisted_settings %}
{% set setting_config = config.get(setting, {}) %}
{% set setting_default = setting_data.get("default", "") %}
{% set setting_value = setting_config.get("value", setting_default) %}
{% set setting_method = setting_config.get("method", "default") %}
{% set setting_template = setting_config.get("template", "") %}
{% set disabled = setting_method not in ('ui', 'default') and (current_endpoint == "global-config" or not setting_config.get("global")) %}
{% if current_endpoint == "new" %}
{% set disabled = false %}
{% endif %}
{% if service_method == "autoconf" %}
{% set setting_method = "autoconf" %}
{% set disabled = true %}
{% endif %}
{% if plugin_data["type"] == "pro" and not is_pro_version %}
{% set disabled = true %}
{% set setting_method = "<i class='bx bx-diamond bx-xs'></i><span>Pro feature</span>" %}
{% endif %}
{% if is_readonly %}
{% set disabled = true %}
{% set setting_method = "readonly" %}
{% endif %}
<div class="col-12{% if settings|length > 1 %} col-md-6{% endif %}{% if settings|length > 2 and not multiple_multiples %} col-lg-4{% endif %} pb-2"
{% if disabled %}data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" data-bs-original-title="Disabled by {{ setting_method }}"{% endif %}>
<div class="d-flex justify-content-between align-items-center">
<label id="label-multiple-setting-{{ plugin }}-{{ setting_data['id'] }}-{{ setting_suffix }}"
for="multiple-setting-{{ plugin }}-{{ setting_data['id'] }}-{{ setting_suffix }}"
class="form-label fw-semibold text-truncate">
{{ setting_data["label"] }}
</label>
<div class="d-flex align-items-center">
{% if current_endpoint == "global-config" and setting_data["context"] == "multisite" %}
<a role="badge"
href='https://docs.bunkerweb.io/latest/concepts/?utm_campaign=self&utm_source=ui#multisite-mode'
class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="Multisite setting"
target="_blank"
rel="noopener">
<span class="bx bx-server bx-xs"></span>
</a>
{% endif %}
{% if setting_template %}
<span class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From template: {{ setting_template }}">
<span class="bx bx-spreadsheet bx-xs"></span>
</span>
{% endif %}
{% if current_endpoint != "global-config" and setting_config.get("global") and setting_value != setting_default %}
<span class="badge badge-center rounded-pill bg-primary-subtle text-dark d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From global configuration">
<span class="bx bx-globe bx-xs"></span>
</span>
{% endif %}
<span class="badge rounded-pill bg-secondary-subtle text-dark d-flex align-items-center justify-content-center p-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="{{ setting_data['help'] }}">
<span class="bx bx-question-mark bx-xs"></span>
</span>
</div>
</div>
{% if setting_data["type"] == "select" %}
{% include "models/select_setting.html" %}
{% elif setting_data["type"] == "check" %}
{% include "models/checkbox_setting.html" %}
{% else %}
{% include "models/input_setting.html" %}
{% endif %}
</div>
{% endfor %}
</div>
</div>
{% endif %}
<div class="card-body row g-2 gx-6 pb-0">
{% for setting, setting_data in filtered_settings.items() if not setting_data.get('multiple', false) and setting not in blacklisted_settings and (not service_endpoint or setting_data['context'] == "multisite") %}
{% set setting_id_prefix = "setting-" + plugin + "-" %}
{% set setting_config = config.get(setting, {}) %}
{% set setting_default = setting_data.get("default", "") %}
{% set setting_value = setting_config.get("value", setting_default) %}
{% set setting_method = setting_config.get("method", "default") %}
{% set setting_template = setting_config.get("template", "") %}
{% set disabled = setting_method not in ('ui', 'default') and (current_endpoint == "global-config" or not setting_config.get("global")) %}
{% if current_endpoint == "new" %}
{% set disabled = false %}
{% if setting == "SERVER_NAME" %}
{% set setting_value = "" %}
{% endif %}
{% endif %}
{% if service_method == "autoconf" %}
{% set setting_method = "autoconf" %}
{% set disabled = true %}
{% endif %}
{% if plugin_data["type"] == "pro" and not is_pro_version %}
{% set disabled = true %}
{% set setting_method = "<i class='bx bx-diamond bx-xs'></i><span>Pro feature</span>" %}
{% endif %}
{% if is_readonly %}
{% set disabled = true %}
{% set setting_method = "readonly" %}
{% endif %}
<div class="col-12 col-sm-6 col-lg-4 pb-3"
{% if disabled %}data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" data-bs-original-title="Disabled by {{ setting_method }}"{% endif %}>
<div class="d-flex justify-content-between align-items-center">
<label id="label-setting-{{ plugin }}-{{ setting_data['id'] }}"
for="setting-{{ plugin }}-{{ setting_data['id'] }}"
class="form-label fw-semibold text-truncate">
{{ setting_data["label"] }}
</label>
<div class="d-flex align-items-center">
{% if current_endpoint == "global-config" and setting_data["context"] == "multisite" %}
<a role="badge"
href='https://docs.bunkerweb.io/latest/concepts/?utm_campaign=self&utm_source=ui#multisite-mode'
class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="Multisite setting"
target="_blank"
rel="noopener">
<span class="bx bx-server bx-xs"></span>
</a>
{% endif %}
{% if setting_template %}
<span class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From template: {{ setting_template }}">
<span class="bx bx-spreadsheet bx-xs"></span>
</span>
{% endif %}
{% if current_endpoint != "global-config" and setting_config.get("global") and setting_value != setting_default %}
<span class="badge badge-center rounded-pill bg-primary-subtle text-dark d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From global configuration">
<span class="bx bx-globe bx-xs"></span>
</span>
{% endif %}
<span class="badge rounded-pill bg-secondary-subtle text-dark d-flex align-items-center justify-content-center p-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="{{ setting_data['help'] }}">
<span class="bx bx-question-mark bx-xs"></span>
</span>
</div>
{% endfor %}
</div>
{% if setting_data["type"] == "select" %}
{% include "models/select_setting.html" %}
{% elif setting_data["type"] == "check" %}
{% include "models/checkbox_setting.html" %}
{% else %}
{% if setting == "SERVER_NAME" and current_endpoint != "global-config" %}
<input type="hidden"
id="old-server-name"
name="OLD_SERVER_NAME"
value="{{ setting_value }}">
{% endif %}
{% include "models/input_setting.html" %}
{% endif %}
</div>
{% endfor %}
</div>
{% endif %}
</div>
{% set plugin_multiples = get_multiples(filtered_settings, config) %}
{% if plugin_multiples %}
{% set setting_id_prefix = "multiple-setting-" + plugin +"-" %}
<div class="card-header pb-2 mt-6">
<h5 class="card-title d-inline border p-2{{ plugin_types[plugin_data['type']].get('text-class', '') }}{{ plugin_types[plugin_data['type']].get('title-class', '') }}">
Multiple settings
</h5>
<p class="card-subtitle text-muted mt-2">This is where you can configure multiple settings for this plugin.</p>
</div>
<div class="card-body row g-2 gx-6 pt-0">
{% for multiple, multiples in plugin_multiples.items() %}
<div id="multiple-{{ plugin }}-{{ multiple }}"
class="col-12{% if plugin_multiples|length > 1 %} col-md-6{% endif %}{% if plugin_multiples|length > 2 and not settings|length > 1 %} col-lg-4{% endif %}">
{% for setting_suffix, settings in multiples.items() %}
<div class="row multiple-container pt-2 pb-2">
{% set setting_id_suffix = "-" + setting_suffix %}
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0 me-2">
{{ multiple.replace('-', ' ') | capitalize }}
{% if setting_suffix != "0" %}#{{ setting_suffix }}{% endif %}
</h6>
<div class="d-flex align-items-center">
{% if setting_suffix == "0" %}
<div class="me-1"
{% if service_method == "autoconf" or is_readonly %}data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="{% if is_readonly %}The database is in readonly{% else %}The service was created using the autoconf method{% endif %}
therefore
multiple
settings
are
locked
"
{% endif %}>
<button id="add-multiple-{{ plugin }}-{{ multiple }}"
type="button"
class="btn btn-xs btn-text-bw-green rounded-pill add-multiple p-0 pe-2{% if service_method == "autoconf" or is_readonly %} disabled{% endif %}">
<i class="bx bx-plus-circle bx-sm"></i>&nbsp;ADD
</button>
</div>
{% else %}
<button id="remove-multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
type="button"
class="btn btn-xs btn-text-danger rounded-pill remove-multiple p-0 pe-2">
<i class="bx bx-trash bx-sm"></i>&nbsp;REMOVE
</button>
{% endif %}
<button id="show-multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
type="button"
class="btn btn-xs btn-text-secondary rounded-pill show-multiple p-0"
data-bs-toggle="collapse"
data-bs-target="#multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
aria-expanded="true"
aria-controls="multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}">
<i class="bx bx-show-alt bx-sm"></i>&nbsp;HIDE
</button>
</div>
</div>
<div id="multiple-{{ plugin }}-{{ multiple }}-{{ setting_suffix }}"
class="collapse show multiple-collapse pt-0">
<div class="row g-2 gx-6 mt-2 pt-2">
{% for setting, setting_data in settings.items() if setting not in blacklisted_settings %}
{% set setting_config = config.get(setting, {}) %}
{% set setting_default = setting_data.get("default", "") %}
{% set setting_value = setting_config.get("value", setting_default) %}
{% set setting_method = setting_config.get("method", "default") %}
{% set setting_template = setting_config.get("template", "") %}
{% set disabled = setting_method not in ('ui', 'default') and (current_endpoint == "global-config" or not setting_config.get("global")) %}
{% if current_endpoint == "new" %}
{% set disabled = false %}
{% endif %}
{% if service_method == "autoconf" %}
{% set setting_method = "autoconf" %}
{% set disabled = true %}
{% endif %}
{% if plugin_data["type"] == "pro" and not is_pro_version %}
{% set disabled = true %}
{% set setting_method = "<i class='bx bx-diamond bx-xs'></i><span>Pro feature</span>" %}
{% endif %}
{% if is_readonly %}
{% set disabled = true %}
{% set setting_method = "readonly" %}
{% endif %}
<div class="col-12{% if settings|length > 1 %} col-md-6{% endif %}{% if settings|length > 2 and not multiple_multiples %} col-lg-4{% endif %} pb-2"
{% if disabled %}data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" data-bs-original-title="Disabled by {{ setting_method }}"{% endif %}>
<div class="d-flex justify-content-between align-items-center">
<label id="label-multiple-setting-{{ plugin }}-{{ setting_data['id'] }}-{{ setting_suffix }}"
for="multiple-setting-{{ plugin }}-{{ setting_data['id'] }}-{{ setting_suffix }}"
class="form-label fw-semibold text-truncate">
{{ setting_data["label"] }}
</label>
<div class="d-flex align-items-center">
{% if current_endpoint == "global-config" and setting_data["context"] == "multisite" %}
<a role="badge"
href='https://docs.bunkerweb.io/latest/concepts/?utm_campaign=self&utm_source=ui#multisite-mode'
class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="Multisite setting"
target="_blank"
rel="noopener">
<span class="bx bx-server bx-xs"></span>
</a>
{% endif %}
{% if setting_template %}
<span class="badge badge-center rounded-pill bg-secondary d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From template: {{ setting_template }}">
<span class="bx bx-spreadsheet bx-xs"></span>
</span>
{% endif %}
{% if current_endpoint != "global-config" and setting_config.get("global") and setting_value != setting_default %}
<span class="badge badge-center rounded-pill bg-primary-subtle text-dark d-flex align-items-center justify-content-center p-1 me-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="From global configuration">
<span class="bx bx-globe bx-xs"></span>
</span>
{% endif %}
<span class="badge rounded-pill bg-secondary-subtle text-dark d-flex align-items-center justify-content-center p-1"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title="{{ setting_data['help'] }}">
<span class="bx bx-question-mark bx-xs"></span>
</span>
</div>
</div>
{% if setting_data["type"] == "select" %}
{% include "models/select_setting.html" %}
{% elif setting_data["type"] == "check" %}
{% include "models/checkbox_setting.html" %}
{% else %}
{% include "models/input_setting.html" %}
{% endif %}
</div>
{% endfor %}
</div>
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
{% endif %}
</div>
</div>
{% endif %}
{% endfor %}

View file

@ -34,8 +34,8 @@
{% if service_method == "autoconf" or is_readonly %}data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Disabled by {% if is_readonly %}readonly{% else %}{{ service_method }}{% endif %}
"
{% endif %}>
{% set config_lines = ["IS_DRAFT=" + config.get('IS_DRAFT', {}).get('value', 'no')] %}
{% set default_settings = ["IS_DRAFT=no"] %}
{% set config_lines = ["IS_DRAFT=" + config.get('IS_DRAFT', {}).get('value', 'no')] if current_endpoint != "global-config" else [] %}
{% set default_settings = ["IS_DRAFT=no"] if current_endpoint != "global-config" else [] %}
{% for plugin_data in plugins.values() %}
{% set filtered_settings = get_filtered_settings(plugin_data["settings"], current_endpoint == "global-config") %}
{% if filtered_settings %}

View file

@ -49,7 +49,7 @@
aria-atomic="true"
data-bs-autohide="true">
<div class="toast-header d-flex align-items-center text-warning">
<i class="d-block h-auto rounded tf-icons bx bx-xs bx-bell bx-tada me-2"></i>
<i class="d-block h-auto rounded tf-icons bx bx-xs bx-bell bx-tada me-2"></i>
<span class="fw-medium me-auto">BunkerWeb Forever</span>
<small class="text-body-secondary">just now</small>
<button type="button"