mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
=> change the way service multiple script behave to handle multiple settings : - now work if no suffix custom settings and all numbers - change the way the custom multiple settings are added to DOM (directly after creation and not sorting after insert to DOM) - change the way multiple settings add is working to avoid conflicts
423 lines
23 KiB
HTML
423 lines
23 KiB
HTML
{% set current_endpoint = url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-')
|
|
%}
|
|
{% set global_config = config["CONFIG"].get_config() %}
|
|
{% set plugins = [{
|
|
"id": "general",
|
|
"order": 999,
|
|
"name": "General",
|
|
"description": "The general settings for the server",
|
|
"version": "0.1",
|
|
"settings": {
|
|
"SERVER_NAME": {
|
|
"context": "multisite",
|
|
"default": "",
|
|
"help": "List of the virtual hosts served by bunkerweb.",
|
|
"id": "SERVER_NAME",
|
|
"label": "Server name",
|
|
"regex": ".*",
|
|
"type": "text",
|
|
}
|
|
}
|
|
}] + config["CONFIG"].get_plugins() %}
|
|
<!-- plugin item -->
|
|
{% for plugin in plugins %}
|
|
|
|
<div
|
|
{{current_endpoint}}-item="{{plugin['id']}}"
|
|
id="{{plugin['id']}}"
|
|
class="hidden w-full"
|
|
>
|
|
<!-- title and desc -->
|
|
<div class="col-span-12" setting-header>
|
|
<h5
|
|
class="transition duration-300 ease-in-out dark:opacity-90 ml-2 font-bold text-md uppercase dark:text-white mb-0"
|
|
>
|
|
{{plugin['name']}} <span>{{plugin['version']}}</span>
|
|
</h5>
|
|
<div
|
|
class="transition duration-300 ease-in-out dark:opacity-90 ml-2 text-sm mb-2 dark:text-gray-400"
|
|
>
|
|
{{plugin['description']}}
|
|
</div>
|
|
</div>
|
|
<!-- end title and desc -->
|
|
<!-- plugin settings not multiple -->
|
|
<div {{current_endpoint}}-settings class="w-full grid grid-cols-12">
|
|
{% for setting, value in plugin["settings"].items() %}{% if current_endpoint
|
|
== "global-config" and value['context'] == "global" and not value['multiple'] or current_endpoint ==
|
|
"services" and value['context'] == "multisite" and not value['multiple'] %}
|
|
<div setting-container
|
|
class="
|
|
mx-0 sm:mx-4 my-2 col-span-12 md:mx-6 md:my-3 md:col-span-6 2xl:mx-6 2xl:my-3 2xl:col-span-4"
|
|
id="form-edit-{{current_endpoint}}-{{ value["id"] }}">
|
|
<!-- title and info -->
|
|
<div class="flex items-center my-1 relative">
|
|
<h5
|
|
class="transition duration-300 ease-in-out dark:opacity-90 text-sm sm:text-md font-bold m-0 dark:text-gray-300"
|
|
>
|
|
{{value["label"]}}
|
|
</h5>
|
|
<svg
|
|
{{current_endpoint}}-info-btn="{{ value["label"] }}"
|
|
class="cursor-pointer fill-blue-500 h-5 w-5 ml-2 hover:brightness-75"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 512 512"
|
|
>
|
|
<path
|
|
d="M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-144c-17.7 0-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32z"
|
|
/>
|
|
</svg>
|
|
<!-- popover -->
|
|
<div class="hidden transition z-50 rounded-md p-3 left-0 -translate-y-7 bottom-0 absolute bg-blue-500"
|
|
{{current_endpoint}}-info-popover="{{ value["label"] }}"
|
|
>
|
|
<p class="transition duration-300 ease-in-out dark:opacity-90 font-bold text-sm text-white m-0" >{{value['help']}}
|
|
</p>
|
|
</div>
|
|
<!-- end popover -->
|
|
</div>
|
|
<!-- end title and info -->
|
|
|
|
<!-- input -->
|
|
{% if value["type"] != "select" and value["type"] != "check" %}
|
|
<input
|
|
default-value="{{global_config[setting]['value']}}" default-method="{{global_config[setting]['method']}}"
|
|
{% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} disabled {% endif %} id="{{setting}}" name="{{setting}}"
|
|
class="duration-300 ease-in-out dark:opacity-90 dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300 disabled:opacity-75 focus:valid:border-green-500 focus:invalid:border-red-500 outline-none focus:border-primary text-sm leading-5.6 ease block w-full appearance-none rounded-lg border border-solid border-gray-300 bg-white bg-clip-padding px-1.5 py-1 md:px-3 md:py-2 font-normal text-gray-700 transition-all placeholder:text-gray-500 disabled:bg-gray-400 dark:disabled:bg-gray-800 dark:disabled:border-gray-800 dark:disabled:text-gray-300 disabled:text-gray-700"
|
|
value="{% if global_config[setting]['value'] %} {{global_config[setting]['value']}} {% else %} {{value['default']}} {% endif %}" type="{{value['type']}}" pattern="{{value['regex']|safe}}" />
|
|
{% endif %}
|
|
<!-- end input -->
|
|
|
|
<!-- select -->
|
|
{% if value["type"] == "select" %}
|
|
<!-- default hidden-->
|
|
<select default-method="{{global_config[setting]['method']}}" default-value="{{value['default']}}"
|
|
id="{{setting}}" name="{{setting}}" {{current_endpoint}}-setting-select-default="{{value['id']}}" type="form-select" id="{{setting}}" name="{{setting}}"
|
|
class="hidden">
|
|
{% for item in value['select'] %}
|
|
<option value="{{item}}" {% if global_config[setting]['value'] and global_config[setting]['value'] == item or not global_config[setting]['value'] and value['default'] == item %} selected{% endif %}>{{item}}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<!-- end default hidden-->
|
|
|
|
<!--custom-->
|
|
<div class="relative">
|
|
<button
|
|
{% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} disabled {% endif %} {{current_endpoint}}-setting-select="{{value['id']}}"
|
|
default-value="{{global_config[setting]['value']}}"
|
|
type="button"
|
|
class="disabled:opacity-75 dark:disabled:text-gray-300 disabled:text-gray-700 disabled:bg-gray-400 disabled:border-gray-400 dark:disabled:bg-gray-800 dark:disabled:border-gray-800 duration-300 ease-in-out dark:opacity-90 dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300 focus:border-green-500 flex justify-between align-middle items-center text-left text-sm leading-5.6 ease w-full rounded-lg border border-solid border-gray-300 bg-white bg-clip-padding px-1.5 py-1 md:px-3 md:py-2 font-normal text-gray-700 transition-all placeholder:text-gray-500"
|
|
>
|
|
{% for item in value['select'] %} {% if global_config[setting]['value'] and
|
|
global_config[setting]['value'] == item %}
|
|
<span
|
|
{{current_endpoint}}-setting-select-text="{{value['id']}}"
|
|
value="{{global_config[setting]['value']}}"
|
|
>{{global_config[setting]['value']}}</span
|
|
>
|
|
{% elif not global_config[setting]['value'] and value['default'] == item %}
|
|
<span
|
|
{{current_endpoint}}-setting-select-text="{{value['id']}}"
|
|
value="{{value['default']}}"
|
|
>{{value['default']}}</span
|
|
>
|
|
{% endif %} {% endfor %}
|
|
<!-- chevron -->
|
|
<svg
|
|
{{current_endpoint}}-setting-select="{{value['id']}}"
|
|
class="transition-transform h-4 w-4 fill-gray-500"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 512 512"
|
|
>
|
|
<path
|
|
d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"
|
|
/>
|
|
</svg>
|
|
<!-- end chevron -->
|
|
</button>
|
|
<!-- dropdown-->
|
|
<div
|
|
{{current_endpoint}}-setting-select-dropdown="{{value['id']}}"
|
|
class="hidden z-100 absolute h-full flex-col w-full mt-2"
|
|
>
|
|
{% for item in value['select'] %} {% if global_config[setting]['value'] and
|
|
global_config[setting]['value'] == item or not global_config[setting]['value']
|
|
and value['default'] == item %}
|
|
<button
|
|
type="button"
|
|
value="{{item}}"
|
|
{{current_endpoint}}-setting-select-dropdown-btn="{{value['id']}}"
|
|
type="button"
|
|
class="{% if loop.index == 1 %} border-t rounded-t {% endif %} {% if loop.index == loop.length %}rounded-b {% endif %} border-b border-l border-r border-gray-300 hover:brightness-90 bg-primary text-white my-0 relative px-6 py-2 text-center align-middle transition-all rounded-none cursor-pointer leading-normal text-sm ease-in tracking-tight-rem dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300"
|
|
>
|
|
{{item}}
|
|
</button>
|
|
{% else %}
|
|
<button
|
|
type="button"
|
|
value="{{item}}"
|
|
{{current_endpoint}}-setting-select-dropdown-btn="{{value['id']}}"
|
|
type="button"
|
|
class="{% if loop.index == 1 %} border-t rounded-t {% endif %} {% if loop.index == loop.length %}rounded-b {% endif %} border-b border-l border-r border-gray-300 hover:bg-gray-100 bg-white text-gray-700 my-0 relative px-6 py-2 text-center align-middle transition-all rounded-none cursor-pointer leading-normal text-sm ease-in tracking-tight-rem dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300"
|
|
>
|
|
{{item}}
|
|
</button>
|
|
{% endif %} {% endfor %}
|
|
</div>
|
|
<!-- end dropdown-->
|
|
</div>
|
|
|
|
|
|
|
|
<!-- end custom-->
|
|
{% endif %}
|
|
|
|
<!-- checkbox -->
|
|
{% if value["type"] == "check" %}
|
|
<div checkbox-handler="{{value['id']}}" class="relative mb-7 md:mb-0">
|
|
<input id="{{setting}}" name="{{setting}}"
|
|
default-method="{{global_config[setting]['method']}}"
|
|
default-value="{{global_config[setting]['value']}}" {% if
|
|
global_config[setting]['method'] != 'ui' or global_config[setting]['method']
|
|
!= 'default' %} disabled {% endif %} {% if global_config[setting]['value'] and
|
|
global_config[setting]['value'] == 'yes' or not
|
|
global_config[setting]['value'] and value['default'] == 'yes' %} checked {%
|
|
endif %} id="checkbox-{{value['id']}}" class="relative {% if
|
|
global_config[setting]['method'] != 'ui' and global_config[setting]['method']
|
|
!= 'default' %} pointer-events-none {% else %} cursor-pointer {% endif %}
|
|
dark:border-slate-600 dark:bg-slate-700 z-10 checked:z-0 w-5 h-5 ease
|
|
text-base rounded-1.4 checked:bg-primary checked:border-primary
|
|
dark:checked:bg-primary dark:checked:border-primary duration-250 float-left
|
|
mt-1 appearance-none border border-gray-300 bg-white bg-contain bg-center
|
|
bg-no-repeat align-top transition-all disabled:bg-gray-400
|
|
disabled:border-gray-400 dark:disabled:bg-gray-800
|
|
dark:disabled:border-gray-800 disabled:text-gray-700
|
|
dark:disabled:text-gray-300" type="checkbox" pattern="{{value['regex']|safe}}"
|
|
value="{% if global_config[setting]['value'] %}
|
|
{{global_config[setting]['value']}} {% else %} {{value['default']}} {% endif
|
|
%}" />
|
|
<svg
|
|
checkbox-handler="{{value['id']}}"
|
|
class="{% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} pointer-events-none {% else %} cursor-pointer {% endif %} absolute fill-white dark:fill-gray-300 left-0 top-0 translate-x-1 translate-y-2 h-3 w-3"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 512 512"
|
|
>
|
|
<path
|
|
d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"
|
|
></path>
|
|
</svg>
|
|
</div>
|
|
{% endif %}
|
|
<!-- end checkbox -->
|
|
|
|
<!-- invalid feedback -->
|
|
<div class="hidden text-sm dark:text-red-500">
|
|
{{value['label']}} is invalid and must match this pattern:
|
|
{{value['regex']|safe}}
|
|
</div>
|
|
<!--end invalid feedback-->
|
|
</div>
|
|
{% endif %} {% endfor %}
|
|
<!-- end plugin settings -->
|
|
</div>
|
|
<!-- end plugin settings not multiple -->
|
|
|
|
<!-- plugin multiple -->
|
|
{% if not plugin['multiple'] %}
|
|
<div multiple-handler class="flex items-center mx-0 sm:mx-4 md:mx-6 md:my-3 my-2 2xl:mx-6 2xl:my-3 col-span-12 ">
|
|
<h5
|
|
class="transition duration-300 ease-in-out dark:opacity-90 text-sm sm:text-md font-bold m-0 dark:text-gray-300"
|
|
>
|
|
{{plugin['name']}}
|
|
</h5>
|
|
<button {{current_endpoint}}-multiple-add="{{plugin['name']}}" type="button" class="ml-3 dark:brightness-90 inline-block px-3 py-1.5 font-bold text-center text-white uppercase align-middle transition-all rounded-lg cursor-pointer bg-green-500 hover:bg-green-500/80 focus:bg-green-500/80 leading-normal text-md ease-in tracking-tight-rem shadow-xs bg-150 bg-x-25 hover:-translate-y-px active:opacity-85 hover:shadow-md">
|
|
Add
|
|
</button>
|
|
</div>
|
|
<div {{current_endpoint}}-settings-multiple="{{plugin['name']}}_SCHEMA" class="hidden w-full mb-8 grid-cols-12 border dark:border-gray-700">
|
|
|
|
{% for setting, value in plugin["settings"].items() %}
|
|
{% if current_endpoint
|
|
== "global-config" and value['context'] == "global" and value['multiple'] or current_endpoint ==
|
|
"services" and value['context'] == "multisite" and value['multiple'] %}
|
|
<div setting-container="{{setting}}_SCHEMA"
|
|
class="
|
|
mx-0 sm:mx-4 my-2 col-span-12 md:mx-6 md:my-3 md:col-span-6 2xl:mx-6 2xl:my-3 2xl:col-span-4"
|
|
id="form-edit-{{current_endpoint}}-{{ value["id"] }}">
|
|
<!-- title and info -->
|
|
<div class="flex items-center my-1 relative">
|
|
<h5
|
|
class="transition duration-300 ease-in-out dark:opacity-90 text-sm sm:text-md font-bold m-0 dark:text-gray-300"
|
|
>
|
|
{{value["label"]}}
|
|
</h5>
|
|
<svg
|
|
{{current_endpoint}}-info-btn="{{ value["label"] }}"
|
|
class="cursor-pointer fill-blue-500 h-5 w-5 ml-2 hover:brightness-75"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 512 512"
|
|
>
|
|
<path
|
|
d="M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-144c-17.7 0-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32z"
|
|
/>
|
|
</svg>
|
|
<!-- popover -->
|
|
<div class="hidden transition z-50 rounded-md p-3 left-0 -translate-y-7 bottom-0 absolute bg-blue-500"
|
|
{{current_endpoint}}-info-popover="{{ value["label"] }}"
|
|
>
|
|
<p class="transition duration-300 ease-in-out dark:opacity-90 font-bold text-sm text-white m-0" >{{value['help']}}
|
|
</p>
|
|
</div>
|
|
<!-- end popover -->
|
|
</div>
|
|
<!-- end title and info -->
|
|
|
|
<!-- input -->
|
|
{% if value["type"] != "select" and value["type"] != "check" %}
|
|
<input
|
|
default-value="{{global_config[setting]['value']}}" default-method="{{global_config[setting]['method']}}"
|
|
{% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} disabled {% endif %} id="{{setting}}_SCHEMA" name="{{setting}}_SCHEMA"
|
|
class="duration-300 ease-in-out dark:opacity-90 dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300 disabled:opacity-75 focus:valid:border-green-500 focus:invalid:border-red-500 outline-none focus:border-primary text-sm leading-5.6 ease block w-full appearance-none rounded-lg border border-solid border-gray-300 bg-white bg-clip-padding px-1.5 py-1 md:px-3 md:py-2 font-normal text-gray-700 transition-all placeholder:text-gray-500 disabled:bg-gray-400 dark:disabled:bg-gray-800 dark:disabled:border-gray-800 dark:disabled:text-gray-300 disabled:text-gray-700"
|
|
value="{% if global_config[setting]['value'] %} {{global_config[setting]['value']}} {% else %} {{value['default']}} {% endif %}" type="{{value['type']}}" pattern="{{value['regex']|safe}}" />
|
|
{% endif %}
|
|
<!-- end input -->
|
|
|
|
<!-- select -->
|
|
{% if value["type"] == "select" %}
|
|
<!-- default hidden-->
|
|
<select default-method="{{global_config[setting]['method']}}" default-value="{{value['default']}}"
|
|
id="{{setting}}_SCHEMA" name="{{setting}}_SCHEMA" {{current_endpoint}}-setting-select-default="{{value['id']}}" type="form-select" id="{{setting}}" name="{{setting}}"
|
|
class="hidden">
|
|
{% for item in value['select'] %}
|
|
<option value="{{item}}" {% if global_config[setting]['value'] and global_config[setting]['value'] == item or not global_config[setting]['value'] and value['default'] == item %} selected{% endif %}>{{item}}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<!-- end default hidden-->
|
|
|
|
<!--custom-->
|
|
<div class="relative">
|
|
<button
|
|
{% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} disabled {% endif %} {{current_endpoint}}-setting-select="{{value['id']}}"
|
|
default-value="{{global_config[setting]['value']}}"
|
|
type="button"
|
|
class="disabled:opacity-75 dark:disabled:text-gray-300 disabled:text-gray-700 disabled:bg-gray-400 disabled:border-gray-400 dark:disabled:bg-gray-800 dark:disabled:border-gray-800 duration-300 ease-in-out dark:opacity-90 dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300 focus:border-green-500 flex justify-between align-middle items-center text-left text-sm leading-5.6 ease w-full rounded-lg border border-solid border-gray-300 bg-white bg-clip-padding px-1.5 py-1 md:px-3 md:py-2 font-normal text-gray-700 transition-all placeholder:text-gray-500"
|
|
>
|
|
{% for item in value['select'] %} {% if global_config[setting]['value'] and
|
|
global_config[setting]['value'] == item %}
|
|
<span
|
|
{{current_endpoint}}-setting-select-text="{{value['id']}}"
|
|
value="{{global_config[setting]['value']}}"
|
|
>{{global_config[setting]['value']}}</span
|
|
>
|
|
{% elif not global_config[setting]['value'] and value['default'] == item %}
|
|
<span
|
|
{{current_endpoint}}-setting-select-text="{{value['id']}}"
|
|
value="{{value['default']}}"
|
|
>{{value['default']}}</span
|
|
>
|
|
{% endif %} {% endfor %}
|
|
<!-- chevron -->
|
|
<svg
|
|
{{current_endpoint}}-setting-select="{{value['id']}}"
|
|
class="transition-transform h-4 w-4 fill-gray-500"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 512 512"
|
|
>
|
|
<path
|
|
d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"
|
|
/>
|
|
</svg>
|
|
<!-- end chevron -->
|
|
</button>
|
|
<!-- dropdown-->
|
|
<div
|
|
{{current_endpoint}}-setting-select-dropdown="{{value['id']}}"
|
|
class="hidden z-100 absolute h-full flex-col w-full mt-2"
|
|
>
|
|
{% for item in value['select'] %} {% if global_config[setting]['value'] and
|
|
global_config[setting]['value'] == item or not global_config[setting]['value']
|
|
and value['default'] == item %}
|
|
<button
|
|
type="button"
|
|
value="{{item}}"
|
|
{{current_endpoint}}-setting-select-dropdown-btn="{{value['id']}}"
|
|
type="button"
|
|
class="{% if loop.index == 1 %} border-t rounded-t {% endif %} {% if loop.index == loop.length %}rounded-b {% endif %} border-b border-l border-r border-gray-300 hover:brightness-90 bg-primary text-white my-0 relative px-6 py-2 text-center align-middle transition-all rounded-none cursor-pointer leading-normal text-sm ease-in tracking-tight-rem dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300"
|
|
>
|
|
{{item}}
|
|
</button>
|
|
{% else %}
|
|
<button
|
|
type="button"
|
|
value="{{item}}"
|
|
{{current_endpoint}}-setting-select-dropdown-btn="{{value['id']}}"
|
|
type="button"
|
|
class="{% if loop.index == 1 %} border-t rounded-t {% endif %} {% if loop.index == loop.length %}rounded-b {% endif %} border-b border-l border-r border-gray-300 hover:bg-gray-100 bg-white text-gray-700 my-0 relative px-6 py-2 text-center align-middle transition-all rounded-none cursor-pointer leading-normal text-sm ease-in tracking-tight-rem dark:border-slate-600 dark:bg-slate-700 dark:text-gray-300"
|
|
>
|
|
{{item}}
|
|
</button>
|
|
{% endif %} {% endfor %}
|
|
</div>
|
|
<!-- end dropdown-->
|
|
</div>
|
|
<!-- end custom-->
|
|
{% endif %}
|
|
|
|
<!-- checkbox -->
|
|
{% if value["type"] == "check" %}
|
|
<div checkbox-handler="{{value['id']}}" class="relative mb-7 md:mb-0">
|
|
<input id="{{setting}}_SCHEMA" name="{{setting}}_SCHEMA"
|
|
default-method="{{global_config[setting]['method']}}"
|
|
default-value="{{global_config[setting]['value']}}" {% if
|
|
global_config[setting]['method'] != 'ui' or global_config[setting]['method']
|
|
!= 'default' %} disabled {% endif %} {% if global_config[setting]['value'] and
|
|
global_config[setting]['value'] == 'yes' or not
|
|
global_config[setting]['value'] and value['default'] == 'yes' %} checked {%
|
|
endif %} id="checkbox-{{value['id']}}" class="relative {% if
|
|
global_config[setting]['method'] != 'ui' and global_config[setting]['method']
|
|
!= 'default' %} pointer-events-none {% else %} cursor-pointer {% endif %}
|
|
dark:border-slate-600 dark:bg-slate-700 z-10 checked:z-0 w-5 h-5 ease
|
|
text-base rounded-1.4 checked:bg-primary checked:border-primary
|
|
dark:checked:bg-primary dark:checked:border-primary duration-250 float-left
|
|
mt-1 appearance-none border border-gray-300 bg-white bg-contain bg-center
|
|
bg-no-repeat align-top transition-all disabled:bg-gray-400
|
|
disabled:border-gray-400 dark:disabled:bg-gray-800
|
|
dark:disabled:border-gray-800 disabled:text-gray-700
|
|
dark:disabled:text-gray-300" type="checkbox" pattern="{{value['regex']|safe}}"
|
|
value="{% if global_config[setting]['value'] %}
|
|
{{global_config[setting]['value']}} {% else %} {{value['default']}} {% endif
|
|
%}" />
|
|
<svg
|
|
checkbox-handler="{{value['id']}}"
|
|
class="{% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} pointer-events-none {% else %} cursor-pointer {% endif %} absolute fill-white dark:fill-gray-300 left-0 top-0 translate-x-1 translate-y-2 h-3 w-3"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 512 512"
|
|
>
|
|
<path
|
|
d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"
|
|
></path>
|
|
</svg>
|
|
</div>
|
|
{% endif %}
|
|
<!-- end checkbox -->
|
|
|
|
<!-- invalid feedback -->
|
|
<div class="hidden text-sm dark:text-red-500">
|
|
{{value['label']}} is invalid and must match this pattern:
|
|
{{value['regex']|safe}}
|
|
</div>
|
|
<!--end invalid feedback-->
|
|
</div>
|
|
{% endif %} {% endfor %}
|
|
<div multiple-delete-container class="col-span-12 flex justify-center my-4">
|
|
<button {{current_endpoint}}-multiple-delete="{{plugin['name']}}" type="button" class="ml-3 dark:brightness-90 inline-block px-3 py-1.5 font-bold text-center text-white uppercase align-middle transition-all rounded-lg cursor-pointer bg-red-500 hover:bg-red-500/80 focus:bg-red-500/80 leading-normal text-md ease-in tracking-tight-rem shadow-xs bg-150 bg-x-25 hover:-translate-y-px active:opacity-85 hover:shadow-md">
|
|
Remove
|
|
</button>
|
|
</div>
|
|
<!-- end plugin settings -->
|
|
</div>
|
|
{%endif %}
|
|
<!-- end plugin multiple -->
|
|
</div>
|
|
{% endfor %}
|
|
<!-- end plugin item -->
|