public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Trace
data/web/templates/admin/tab-config-customize.twig
Trace helps you understand code history line by line. See who changed each line, when it changed, and which commit introduced it.
Author
Date
Commit
Line
Code
1
<div class="tab-pane fade" id="tab-config-customize" role="tabpanel" aria-labelledby="tab-config-customize">
2
<div class="card mb-4">
3
<div class="card-header d-flex fs-5">
4
<button class="btn d-md-none flex-grow-1 text-start" data-bs-target="#collapse-tab-config-customize" data-bs-toggle="collapse" aria-controls="collapse-tab-config-customize">
5
{{ lang.admin.customize }}
6
</button>
7
<span class="d-none d-md-block">{{ lang.admin.customize }}</span>
8
</div>
9
<div id="collapse-tab-config-customize" class="card-body collapse" data-bs-parent="#admin-content">
10
<legend><i class="bi bi-file-image"></i> {{ lang.admin.change_logo }}</legend><hr />
11
<p class="text-muted">{{ lang.admin.logo_info }}</p>
12
<form class="form-inline" role="form" method="post" enctype="multipart/form-data">
13
<div class="mb-4">
14
<label for="main_logo_input" class="form-label">{{ lang.admin.logo_normal_label }}</label>
15
<input class="form-control" id="main_logo_input" type="file" name="main_logo" accept="image/gif, image/jpeg, image/pjpeg, image/x-png, image/png, image/svg+xml">
16
</div>
17
<div class="mb-4">
18
<label for="main_logo_dark_input" class="form-label">{{ lang.admin.logo_dark_label }}</label>
19
<input class="form-control" id="main_logo_dark_input" type="file" name="main_logo_dark" accept="image/gif, image/jpeg, image/pjpeg, image/x-png, image/png, image/svg+xml">
20
</div>
22
<button name="submit_main_logo" type="submit" class="btn btn-sm d-block d-sm-inline btn-secondary"><i class="bi bi-upload"></i> {{ lang.admin.upload }}</button>
23
</form>
24
{% if logo or logo_dark %}
25
<div class="row mt-4">
26
<div class="col-sm-4">
27
{% if logo %}
28
{% include 'admin/customize/logo.twig' %}
29
{% endif %}
30
{% if logo_dark %}
31
{% include 'admin/customize/logo.twig' with {'logo': logo_dark, 'logo_specs': logo_dark_specs, 'dark': 1} %}
32
{% endif %}
33
<hr>
34
<form class="form-inline" role="form" method="post">
35
<p><button name="reset_main_logo" type="submit" class="btn btn-sm d-block d-sm-inline btn-secondary">{{ lang.admin.reset_default }}</button></p>
36
</form>
37
</div>
38
</div>
39
{% endif %}
40
<legend style="padding-top:20px" unselectable="on">{{ lang.admin.ip_check }}</legend><hr />
41
<div id="ip_check">
42
<form class="form" data-id="ip_check" role="form" method="post">
43
<div class="mb-4">
44
<input class="form-check-input" type="checkbox" value="1" name="ip_check_opt_in" id="ip_check_opt_in" {% if ip_check == 1 %}checked{% endif %}>
45
<label class="form-check-label" for="ip_check_opt_in">
46
{{ lang.admin.ip_check_opt_in|raw }}
47
</label>
48
</div>
49
<p><div class="btn-group">
50
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success" data-action="edit_selected" data-item="admin" data-id="ip_check" data-reload="no" data-api-url='edit/ip_check' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
51
</div></p>
52
</form>
53
</div>
54
<legend style="padding-top:20px" unselectable="on">{{ lang.admin.login_page }}</legend><hr />
55
<div>
56
<form class="form" data-id="custom_login" role="form" method="post">
57
<p class="text-muted">{{ lang.admin.quicklink_text }}</p>
58
<div class="ms-2 mb-1">
59
<input class="form-check-input" type="checkbox" value="1" name="hide_user_quicklink" id="hide_user_quicklink" {% if custom_login.hide_user_quicklink == 1 %}checked{% endif %}>
60
<label class="form-check-label" for="hide_user_quicklink">
61
{{ lang.admin.user_quicklink|raw }}
62
</label>
63
</div>
64
<div class="ms-2 mb-1">
65
<input class="form-check-input" type="checkbox" value="1" name="hide_domainadmin_quicklink" id="hide_domainadmin_quicklink" {% if custom_login.hide_domainadmin_quicklink == 1 %}checked{% endif %}>
66
<label class="form-check-label" for="hide_domainadmin_quicklink">
67
{{ lang.admin.domainadmin_quicklink|raw }}
68
</label>
69
</div>
70
<div class="ms-2 mb-4">
71
<input class="form-check-input" type="checkbox" value="1" name="hide_admin_quicklink" id="hide_admin_quicklink" {% if custom_login.hide_admin_quicklink == 1 %}checked{% endif %}>
72
<label class="form-check-label" for="hide_admin_quicklink">
73
{{ lang.admin.admin_quicklink|raw }}
74
</label>
75
</div>
76
<p class="text-muted">{{ lang.admin.force_sso_text|raw }}</p>
77
<div class="ms-2 mb-4">
78
<input class="form-check-input" type="checkbox" value="1" name="force_sso" id="force_sso" {% if custom_login.force_sso == 1 %}checked{% endif %}>
79
<label class="form-check-label" for="force_sso">
80
{{ lang.admin.force_sso|raw }}
81
</label>
82
</div>
83
<p><div class="btn-group">
84
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success" data-action="edit_selected" data-item="admin" data-id="custom_login" data-reload="no" data-api-url='edit/custom_login' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
85
</div></p>
86
</form>
87
</div>
88
<legend style="padding-top:20px">{{ lang.admin.app_links }}</legend><hr />
89
<p class="text-muted">{{ lang.admin.merged_vars_hint|raw }}</p>
90
<form class="form-inline" data-id="app_links" role="form" method="post">
91
<table class="table table-condensed" style="white-space: nowrap;" id="app_link_table">
92
<tr>
93
<th>{{ lang.admin.app_name }}</th>
94
<th>{{ lang.admin.link }}</th>
95
<th>{{ lang.admin.user_link }}</th>
96
<th style="width:125px;">{{ lang.admin.app_hide }}</th>
97
<th style="width:100px;"> </th>
98
</tr>
99
{% for row in app_links %}
100
{% for key, val in row %}
101
<tr>
102
<td><input class="input-sm input-xs-lg form-control" data-id="app_links" type="text" name="app" required value="{{ key }}"></td>
103
<td><input class="input-sm input-xs-lg form-control" data-id="app_links" type="text" name="href" required value="{{ val.link }}"></td>
104
<td><input class="input-sm input-xs-lg form-control" data-id="app_links" type="text" name="user_href" required value="{{ val.user_link }}"></td>
105
<td>
106
<div class="d-flex align-items-center justify-content-center" style="height: 33.5px">
107
<input data-id="app_links" type="hidden" name="hide" {% if val.hide %}value="1"{% else %}value="0"{% endif %}>
108
<input class="form-check-input app_hide" type="checkbox" value="1" {% if val.hide %}checked{% endif %}>
109
</div>
110
</td>
111
<td><a href="#" role="button" class="btn btn-sm btn-xs-lg btn-secondary h-100 w-100" type="button">{{ lang.admin.remove_row }}</a></td>
112
</tr>
113
{% endfor %}
114
{% endfor %}
115
{% for app in mailcow_apps %}
116
<tr>
117
<td><input class="input-sm input-xs-lg form-control" value="{{ app.name }}" disabled></td>
118
<td><input class="input-sm input-xs-lg form-control" value="{{ app.link }}" disabled></td>
119
<td><input class="input-sm input-xs-lg form-control" value="{{ app.user_link }}" disabled></td>
120
<td>
121
<div class="d-flex align-items-center justify-content-center" style="height: 33.5px">
122
<input class="form-check-input" data-id="app_links" type="checkbox" name="hide" value="1" disabled {% if app.hide %}checked{% endif %}>
123
</div>
124
</td>
125
<td><a href="#" role="button" class="btn btn-sm btn-xs-lg btn-secondary h-100 w-100 disabled" type="button">{{ lang.admin.remove_row }}</a></td>
126
</tr>
127
{% endfor %}
128
</table>
129
<p><div class="btn-group">
130
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success" data-action="edit_selected" data-item="admin" data-id="app_links" data-reload="no" data-api-url='edit/app_links' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
131
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary" type="button" id="add_app_link_row">{{ lang.admin.add_row }}</button>
132
</div></p>
133
</form>
134
<legend data-bs-target="#ui_texts" style="padding-top:20px" unselectable="on">{{ lang.admin.ui_texts }}</legend><hr />
135
<div id="ui_texts">
136
<form class="form" data-id="uitexts" role="form" method="post">
137
<div class="mb-2">
138
<label for="uitests_title_name">{{ lang.admin.title_name }}:</label>
139
<input type="text" class="form-control" id="uitests_title_name" name="title_name" placeholder="mailcow UI" value="{{ ui_texts.title_name|raw }}">
140
</div>
141
<div class="mb-2">
142
<label for="uitests_main_name">{{ lang.admin.main_name }}:</label>
143
<input type="text" class="form-control" id="uitests_main_name" name="main_name" placeholder="mailcow UI" value="{{ ui_texts.main_name|raw }}">
144
</div>
145
<div class="mb-2">
146
<label for="uitests_apps_name">{{ lang.admin.apps_name }}:</label>
147
<input type="text" class="form-control" id="uitests_apps_name" name="apps_name" placeholder="{{ lang.header.apps }}" value="{{ ui_texts.apps_name|raw }}">
148
</div>
149
<div class="mb-4">
150
<label for="help_text">{{ lang.admin.help_text }}:</label>
151
<textarea class="form-control" id="help_text" name="help_text" rows="7">{{ ui_texts.help_text|raw }}</textarea>
152
</div>
153
<hr>
154
<div>
155
<p class="text-muted">{{ lang.admin.ui_header_announcement_help }}</p>
156
<label for="ui_announcement_type">{{ lang.admin.ui_header_announcement }}:</label>
157
<div class="row">
158
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
159
<p><select multiple data-width="100%" id="ui_announcement_type" name="ui_announcement_type" class="selectpicker show-tick" data-max-options="1" title="{{ lang.admin.ui_header_announcement_select }}">
160
<option {% if ui_texts.ui_announcement_type == 'info' %}selected{% endif %} value="info">{{ lang.admin.ui_header_announcement_type_info }}</option>
161
<option {% if ui_texts.ui_announcement_type == 'warning' %}selected{% endif %} value="warning">{{ lang.admin.ui_header_announcement_type_warning }}</option>
162
<option {% if ui_texts.ui_announcement_type == 'danger' %}selected{% endif %} value="danger">{{ lang.admin.ui_header_announcement_type_danger }}</option>
163
</select></p>
164
</div>
165
</div>
166
<p><textarea class="form-control" id="ui_announcement_text" name="ui_announcement_text" rows="7">{{ ui_texts.ui_announcement_text }}</textarea></p>
167
<div class="form-check">
168
<label>
169
<input type="checkbox" name="ui_announcement_active" class="form-check-input" {% if ui_texts.ui_announcement_active == 1 %}checked{% endif %}> {{ lang.admin.ui_header_announcement_active }}
170
</label>
171
</div>
172
</div>
173
<hr>
174
<div class="mb-4">
175
<label for="ui_footer">{{ lang.admin.ui_footer }}:</label>
176
<textarea class="form-control" id="ui_footer" name="ui_footer" rows="7">{{ ui_texts.ui_footer }}</textarea>
177
</div>
178
<button class="btn btn-sm d-block d-sm-inline btn-success" data-action="edit_selected" data-item="ui" data-id="uitexts" data-api-url='edit/ui_texts' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
179
</form>
180
</div>
181
</div>
182
</div>
183
</div>