mirror of
https://github.com/Mailu/Mailu.git
synced 2025-03-05 14:55:20 +02:00
Merge #2632
2632: Interface cosmetics r=mergify[bot] a=ghostwheel42 ## What type of PR? enhancement, bug-fix ## What does this PR do? - add default sort order to all tables - repair sliders - add quota in list - improve mailu logo in roundcube webmail when using responsive skin - show version in the footer (after login) ### Related issue(s) - closes #2570 Co-authored-by: Alexander Graf <ghostwheel42@users.noreply.github.com>
This commit is contained in:
commit
8cd5c462f8
@ -57,3 +57,9 @@ fieldset:disabled .form-control:disabled {
|
|||||||
.input-group-text {
|
.input-group-text {
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* version string */
|
||||||
|
.mailu-version {
|
||||||
|
font-size: 60%;
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
@ -86,9 +86,12 @@ $('document').ready(function() {
|
|||||||
if (value_element.length) {
|
if (value_element.length) {
|
||||||
value_element = $(value_element[0]);
|
value_element = $(value_element[0]);
|
||||||
var infinity = $(this).data('infinity');
|
var infinity = $(this).data('infinity');
|
||||||
var step = $(this).attr('step');
|
var unit = $(this).data('unit');
|
||||||
|
if (typeof unit === 'undefined' || unit === false) {
|
||||||
|
unit=1;
|
||||||
|
}
|
||||||
$(this).on('input', function() {
|
$(this).on('input', function() {
|
||||||
var num = (infinity && this.value == 0) ? '∞' : (this.value/step).toFixed(2);
|
var num = (infinity && this.value == 0) ? '∞' : (this.value/unit).toFixed(2);
|
||||||
if (num.endsWith('.00')) num = num.substr(0, num.length - 3);
|
if (num.endsWith('.00')) num = num.substr(0, num.length - 3);
|
||||||
value_element.text(num);
|
value_element.text(num);
|
||||||
}).trigger('input');
|
}).trigger('input');
|
||||||
|
@ -18,6 +18,7 @@ DEFAULT_CONFIG = {
|
|||||||
'TEMPLATES_AUTO_RELOAD': True,
|
'TEMPLATES_AUTO_RELOAD': True,
|
||||||
'MEMORY_SESSIONS': False,
|
'MEMORY_SESSIONS': False,
|
||||||
'FETCHMAIL_ENABLED': True,
|
'FETCHMAIL_ENABLED': True,
|
||||||
|
'MAILU_VERSION': 'unknown',
|
||||||
# Database settings
|
# Database settings
|
||||||
'DB_FLAVOR': None,
|
'DB_FLAVOR': None,
|
||||||
'DB_USER': 'mailu',
|
'DB_USER': 'mailu',
|
||||||
@ -157,6 +158,10 @@ class ConfigManager:
|
|||||||
self.config['HOSTNAME'] = hostnames[0]
|
self.config['HOSTNAME'] = hostnames[0]
|
||||||
self.config['DEFAULT_SPAM_THRESHOLD'] = int(self.config['DEFAULT_SPAM_THRESHOLD'])
|
self.config['DEFAULT_SPAM_THRESHOLD'] = int(self.config['DEFAULT_SPAM_THRESHOLD'])
|
||||||
self.config['PROXY_AUTH_WHITELIST'] = set(ipaddress.ip_network(cidr, False) for cidr in (cidr.strip() for cidr in self.config['PROXY_AUTH_WHITELIST'].split(',')) if cidr)
|
self.config['PROXY_AUTH_WHITELIST'] = set(ipaddress.ip_network(cidr, False) for cidr in (cidr.strip() for cidr in self.config['PROXY_AUTH_WHITELIST'].split(',')) if cidr)
|
||||||
|
try:
|
||||||
|
self.config['MAILU_VERSION'] = open('/version', 'r').read()
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
# update the app config
|
# update the app config
|
||||||
app.config.update(self.config)
|
app.config.update(self.config)
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table() %}
|
{%- call macros.table(order='[[1,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
@ -22,6 +22,7 @@
|
|||||||
{%- for admin in admins %}
|
{%- for admin in admins %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
<a href="{{ url_for('.user_edit', user_email=admin.email) }}" title="{% trans %}Edit{% endtrans %}"><i class="fas fa-pencil-alt"></i></a>
|
||||||
<a href="{{ url_for('.admin_delete', admin=admin.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
|
<a href="{{ url_for('.admin_delete', admin=admin.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ admin }}</td>
|
<td>{{ admin }}</td>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table() %}
|
{%- call macros.table(order='[[1,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table() %}
|
{%- call macros.table(order='[[1,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
|
@ -78,6 +78,11 @@
|
|||||||
<i class="fa fa-code-branch" aria-hidden="true"></i><span class="sr-only">fork</span>
|
<i class="fa fa-code-branch" aria-hidden="true"></i><span class="sr-only">fork</span>
|
||||||
on <a href="https://github.com/Mailu/Mailu">Github</a>
|
on <a href="https://github.com/Mailu/Mailu">Github</a>
|
||||||
</span>
|
</span>
|
||||||
|
<div class="mailu-version">
|
||||||
|
<span class="fa-pull-right">
|
||||||
|
{{ config["MAILU_VERSION"] }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
<script src="{{ url_for('static', filename='vendor.js') }}"></script>
|
<script src="{{ url_for('static', filename='vendor.js') }}"></script>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
{{ macros.form_field(form.name) }}
|
{{ macros.form_field(form.name) }}
|
||||||
{{ macros.form_fields((form.max_users, form.max_aliases)) }}
|
{{ macros.form_fields((form.max_users, form.max_aliases)) }}
|
||||||
{{ macros.form_field(form.max_quota_bytes, step=50*10**6, max=50*10**9, data_infinity="true",
|
{{ macros.form_field(form.max_quota_bytes, step=50*10**6, max=50*10**9, data_infinity="true", data_unit=10**9,
|
||||||
prepend='<span class="input-group-text"><span id="max_quota_bytes_value"></span> GB</span>') }}
|
prepend='<span class="input-group-text"><span id="max_quota_bytes_value"></span> GB</span>') }}
|
||||||
{{ macros.form_field(form.signup_enabled) }}
|
{{ macros.form_field(form.signup_enabled) }}
|
||||||
{{ macros.form_field(form.comment) }}
|
{{ macros.form_field(form.comment) }}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
<th>{% trans %}Domain name{% endtrans %}</th>
|
<th>{% trans %}Domain name{% endtrans %}</th>
|
||||||
<th>{% trans %}Mailbox count{% endtrans %}</th>
|
<th>{% trans %}Mailbox count{% endtrans %}</th>
|
||||||
<th>{% trans %}Alias count{% endtrans %}</th>
|
<th>{% trans %}Alias count{% endtrans %}</th>
|
||||||
|
<th>{% trans %}Quota{% endtrans %}</th>
|
||||||
<th>{% trans %}Comment{% endtrans %}</th>
|
<th>{% trans %}Comment{% endtrans %}</th>
|
||||||
<th>{% trans %}Enable sign-up{% endtrans %}</th>
|
<th>{% trans %}Enable sign-up{% endtrans %}</th>
|
||||||
<th>{% trans %}Created{% endtrans %}</th>
|
<th>{% trans %}Created{% endtrans %}</th>
|
||||||
@ -46,6 +47,7 @@
|
|||||||
<td>{{ domain.name }}</td>
|
<td>{{ domain.name }}</td>
|
||||||
<td data-order="{{ domain.users | count }}">{{ domain.users | count }} / {{ '∞' if domain.max_users == -1 else domain.max_users }}</td>
|
<td data-order="{{ domain.users | count }}">{{ domain.users | count }} / {{ '∞' if domain.max_users == -1 else domain.max_users }}</td>
|
||||||
<td data-order="{{ domain.aliases | count }}">{{ domain.aliases | count }} / {{ '∞' if domain.max_aliases == -1 else domain.max_aliases }}</td>
|
<td data-order="{{ domain.aliases | count }}">{{ domain.aliases | count }} / {{ '∞' if domain.max_aliases == -1 else domain.max_aliases }}</td>
|
||||||
|
<td data-sort="{{ domain.max_quota_bytes }}">{{ (domain.max_quota_bytes | filesizeformat) if domain.max_quota_bytes else '∞' }}</td>
|
||||||
<td>{{ domain.comment or '' }}</td>
|
<td>{{ domain.comment or '' }}</td>
|
||||||
<td data-sort="{{ domain.signup_enabled }}">{% if domain.signup_enabled %}{% trans %}yes{% endtrans %}{% else %}{% trans %}no{% endtrans %}{% endif %}</td>
|
<td data-sort="{{ domain.signup_enabled }}">{% if domain.signup_enabled %}{% trans %}yes{% endtrans %}{% else %}{% trans %}no{% endtrans %}{% endif %}</td>
|
||||||
<td data-order="{{ domain.created_at or '0000-00-00' }}">{{ domain.created_at | format_date }}</td>
|
<td data-order="{{ domain.created_at or '0000-00-00' }}">{{ domain.created_at | format_date }}</td>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table() %}
|
{%- call macros.table(order='[[1,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table(order='[[2,"asc"]]') %}
|
{%- call macros.table(order='[[1,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
@ -24,6 +24,7 @@
|
|||||||
{%- for manager in domain.managers %}
|
{%- for manager in domain.managers %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
<a href="{{ url_for('.user_edit', user_email=manager.email) }}" title="{% trans %}Edit{% endtrans %}"><i class="fas fa-pencil-alt"></i></a>
|
||||||
<a href="{{ url_for('.manager_delete', domain_name=domain.name, user_email=manager.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
|
<a href="{{ url_for('.manager_delete', domain_name=domain.name, user_email=manager.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ manager }}</td>
|
<td>{{ manager }}</td>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table() %}
|
{%- call macros.table(order='[[1,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
{%- endcall %}
|
{%- endcall %}
|
||||||
|
|
||||||
{%- call macros.card(_("Features and quotas"), theme="success") %}
|
{%- call macros.card(_("Features and quotas"), theme="success") %}
|
||||||
{{ macros.form_field(form.quota_bytes, step=50*10**6, max=(max_quota_bytes or domain.max_quota_bytes or 50*10**9), data_infinity="true",
|
{{ macros.form_field(form.quota_bytes, step=50*10**6, max=(max_quota_bytes or domain.max_quota_bytes or 50*10**9), data_infinity="true", data_unit=10**9,
|
||||||
prepend='<span class="input-group-text"><span id="quota_bytes_value"></span> GB</span>') }}
|
prepend='<span class="input-group-text"><span id="quota_bytes_value"></span> GB</span>') }}
|
||||||
{{ macros.form_field(form.enable_imap) }}
|
{{ macros.form_field(form.enable_imap) }}
|
||||||
{{ macros.form_field(form.enable_pop) }}
|
{{ macros.form_field(form.enable_pop) }}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
|
||||||
{%- block content %}
|
{%- block content %}
|
||||||
{%- call macros.table() %}
|
{%- call macros.table(order='[[2,"asc"]]') %}
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
<th data-orderable="false">{% trans %}Actions{% endtrans %}</th>
|
||||||
|
@ -9,3 +9,13 @@
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #45555c;
|
background-color: #45555c;
|
||||||
}
|
}
|
||||||
|
@media screen and (max-width: 480px) {
|
||||||
|
#taskmenu a.button-mailu {
|
||||||
|
background-position: 0px;
|
||||||
|
background-size: 40px 40px;
|
||||||
|
}
|
||||||
|
#taskmenu a.button-mailu.selected, #taskmenu a.button-mailu.selected:hover, #taskmenu a.button-mailu:hover {
|
||||||
|
color: #000;
|
||||||
|
background-color: #ececec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user