fix: Preserve HTTPS X-Forwarded-Proto in Nginx and configure SECURE_PROXY_SSL_HEADER in Django to fix 403 CSRF verification on Django Admin
@@ -10,14 +10,37 @@ SECRET_KEY = os.environ.get('SECRET_KEY', 'django-insecure-key-shiftplan-change-
|
|||||||
|
|
||||||
DEBUG = os.environ.get('DEBUG', 'True') == 'True'
|
DEBUG = os.environ.get('DEBUG', 'True') == 'True'
|
||||||
|
|
||||||
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '*').split(',')
|
ALLOWED_HOSTS = [h.strip() for h in os.environ.get('ALLOWED_HOSTS', '*').split(',') if h.strip()]
|
||||||
|
|
||||||
|
# Reverse Proxy & SSL Configuration for Coolify / Traefik
|
||||||
|
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
||||||
|
USE_X_FORWARDED_HOST = True
|
||||||
|
USE_X_FORWARDED_PORT = True
|
||||||
|
|
||||||
|
# CSRF & Trusted Origins Configuration
|
||||||
|
CSRF_TRUSTED_ORIGINS = [
|
||||||
|
'http://localhost',
|
||||||
|
'http://127.0.0.1',
|
||||||
|
'https://*.op3n.link',
|
||||||
|
'http://*.op3n.link',
|
||||||
|
]
|
||||||
|
|
||||||
# CSRF & Origin configuration for reverse proxies (Coolify, Traefik, custom domains)
|
|
||||||
raw_csrf = os.environ.get('CSRF_TRUSTED_ORIGINS', '')
|
raw_csrf = os.environ.get('CSRF_TRUSTED_ORIGINS', '')
|
||||||
if raw_csrf:
|
if raw_csrf:
|
||||||
CSRF_TRUSTED_ORIGINS = [o.strip() for o in raw_csrf.split(',') if o.strip()]
|
for origin in raw_csrf.split(','):
|
||||||
else:
|
o = origin.strip()
|
||||||
CSRF_TRUSTED_ORIGINS = ['http://*', 'https://*']
|
if o and o not in CSRF_TRUSTED_ORIGINS:
|
||||||
|
CSRF_TRUSTED_ORIGINS.append(o)
|
||||||
|
|
||||||
|
for h in ALLOWED_HOSTS:
|
||||||
|
if h and h != '*':
|
||||||
|
if not h.startswith('http://') and not h.startswith('https://'):
|
||||||
|
http_origin = f'http://{h}'
|
||||||
|
https_origin = f'https://{h}'
|
||||||
|
if http_origin not in CSRF_TRUSTED_ORIGINS:
|
||||||
|
CSRF_TRUSTED_ORIGINS.append(http_origin)
|
||||||
|
if https_origin not in CSRF_TRUSTED_ORIGINS:
|
||||||
|
CSRF_TRUSTED_ORIGINS.append(https_origin)
|
||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
|
|||||||
@@ -34,16 +34,9 @@ html[data-theme="light"],
|
|||||||
|
|
||||||
--error-fg: #ba2121;
|
--error-fg: #ba2121;
|
||||||
|
|
||||||
--message-debug-bg: #efefef;
|
|
||||||
--message-debug-icon: url(../img/icon-debug.svg);
|
|
||||||
--message-info-bg: #ccefff;
|
|
||||||
--message-info-icon: url(../img/icon-info.svg);
|
|
||||||
--message-success-bg: #dfd;
|
--message-success-bg: #dfd;
|
||||||
--message-success-icon: url(../img/icon-yes.svg);
|
|
||||||
--message-warning-bg: #ffc;
|
--message-warning-bg: #ffc;
|
||||||
--message-warning-icon: url(../img/icon-alert.svg);
|
|
||||||
--message-error-bg: #ffefef;
|
--message-error-bg: #ffefef;
|
||||||
--message-error-icon: url(../img/icon-no.svg);
|
|
||||||
|
|
||||||
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
||||||
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
||||||
@@ -125,16 +118,6 @@ a:focus {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:not(
|
|
||||||
[role="button"],
|
|
||||||
#header a,
|
|
||||||
#nav-sidebar a,
|
|
||||||
#content-main.app-list a,
|
|
||||||
.object-tools a
|
|
||||||
) {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a img {
|
a img {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
@@ -243,10 +226,10 @@ details summary {
|
|||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
font-size: 0.6875rem;
|
font-size: 0.6875rem;
|
||||||
color: var(--body-quiet-color);
|
color: #777;
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
border-left: 5px solid currentColor;
|
border-left: 5px solid #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
code, pre {
|
code, pre {
|
||||||
@@ -645,44 +628,20 @@ ul.messagelist li {
|
|||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
padding: 10px 10px 10px 65px;
|
padding: 10px 10px 10px 65px;
|
||||||
margin: 0 0 10px 0;
|
margin: 0 0 10px 0;
|
||||||
|
background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat;
|
||||||
|
background-size: 16px auto;
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
background-color: var(--message-info-bg);
|
|
||||||
background-image: var(--message-info-icon);
|
|
||||||
background-position: 40px 12px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-size: 16px auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.messagelist li.debug {
|
|
||||||
background-color: var(--message-debug-bg);
|
|
||||||
background-image: var(--message-debug-icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.messagelist li.info {
|
|
||||||
background-color: var(--message-info-bg);
|
|
||||||
background-image: var(--message-info-icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.messagelist li.success {
|
|
||||||
background-color: var(--message-success-bg);
|
|
||||||
background-image: var(--message-success-icon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.messagelist li.warning {
|
ul.messagelist li.warning {
|
||||||
background-color: var(--message-warning-bg);
|
background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat;
|
||||||
background-image: var(--message-warning-icon);
|
background-size: 14px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.messagelist li.error {
|
ul.messagelist li.error {
|
||||||
background-color: var(--message-error-bg);
|
background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat;
|
||||||
background-image: var(--message-error-icon);
|
background-size: 16px auto;
|
||||||
}
|
|
||||||
|
|
||||||
@media (forced-colors: active) {
|
|
||||||
ul.messagelist li {
|
|
||||||
border: 1px solid;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.errornote {
|
.errornote {
|
||||||
@@ -809,19 +768,19 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
/* OBJECT TOOLS */
|
/* OBJECT TOOLS */
|
||||||
|
|
||||||
.object-tools {
|
.object-tools {
|
||||||
padding: 0;
|
font-size: 0.625rem;
|
||||||
overflow: hidden;
|
font-weight: bold;
|
||||||
text-align: right;
|
padding-left: 0;
|
||||||
margin: 0 0 15px;
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
margin-top: -48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools li {
|
.object-tools li {
|
||||||
display: inline-block;
|
display: block;
|
||||||
height: auto;
|
float: left;
|
||||||
}
|
margin-left: 5px;
|
||||||
|
height: 1rem;
|
||||||
.object-tools li + li {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools a {
|
.object-tools a {
|
||||||
@@ -1161,40 +1120,40 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border-top: 1px solid var(--hairline-color);
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
width: 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator ul {
|
.paginator a:link, .paginator a:visited {
|
||||||
margin: 0;
|
|
||||||
margin-right: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginator ul li {
|
|
||||||
display: inline-block;
|
|
||||||
line-height: 22px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginator a {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
}
|
|
||||||
|
|
||||||
.paginator a:not(.showall) {
|
|
||||||
background: var(--button-bg);
|
background: var(--button-bg);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: var(--button-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator a[aria-current="page"] {
|
.paginator a.showall {
|
||||||
color: var(--body-quiet-color);
|
border: none;
|
||||||
background: transparent;
|
background: none;
|
||||||
font-weight: bold;
|
color: var(--link-fg);
|
||||||
cursor: default;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator a:not([aria-current="page"], .showall):focus,
|
.paginator a.showall:focus, .paginator a.showall:hover {
|
||||||
.paginator a:not([aria-current="page"], .showall):hover {
|
background: none;
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator .end {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator .this-page {
|
||||||
|
padding: 2px 6px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator a:focus, .paginator a:hover {
|
||||||
color: white;
|
color: white;
|
||||||
background: var(--link-hover-color);
|
background: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,14 @@
|
|||||||
/* CHANGELISTS */
|
/* CHANGELISTS */
|
||||||
|
|
||||||
#changelist .changelist-form-container {
|
#changelist {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
width: 100%;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .changelist-form-container > div {
|
#changelist .changelist-form-container {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
|
||||||
|
|
||||||
#changelist .changelist-form-container:not(:has(#changelist-filter)) > div {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#changelist .changelist-form-container:has(#changelist-filter) > div {
|
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
max-width: calc(100% - 270px);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist table {
|
#changelist table {
|
||||||
@@ -33,8 +25,8 @@
|
|||||||
min-height: 400px;
|
min-height: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.change-list .filtered .results, .filtered #toolbar,
|
.change-list .filtered .results, .change-list .filtered .paginator,
|
||||||
.filtered div.xfull {
|
.filtered #toolbar, .filtered div.xfull {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,31 +43,11 @@
|
|||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .changelist-footer {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: 10px;
|
|
||||||
border-top: 1px solid var(--hairline-color);
|
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
#changelist .changelist-footer .paginator {
|
|
||||||
color: var(--body-quiet-color);
|
|
||||||
background: var(--body-bg);
|
|
||||||
border: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#changelist .paginator {
|
#changelist .paginator {
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
}
|
overflow: hidden;
|
||||||
|
|
||||||
#changelist .paginator ul {
|
|
||||||
padding: 0;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CHANGELIST TABLES */
|
/* CHANGELIST TABLES */
|
||||||
|
|||||||
@@ -20,17 +20,9 @@
|
|||||||
--border-color: #353535;
|
--border-color: #353535;
|
||||||
|
|
||||||
--error-fg: #e35f5f;
|
--error-fg: #e35f5f;
|
||||||
|
|
||||||
--message-debug-bg: #4e4e4e;
|
|
||||||
--message-debug-icon: url(../img/icon-debug-dark.svg);
|
|
||||||
--message-info-bg: #265895;
|
|
||||||
--message-info-icon: url(../img/icon-info-dark.svg);
|
|
||||||
--message-success-bg: #006b1b;
|
--message-success-bg: #006b1b;
|
||||||
--message-success-icon: url(../img/icon-yes-dark.svg);
|
|
||||||
--message-warning-bg: #583305;
|
--message-warning-bg: #583305;
|
||||||
--message-warning-icon: url(../img/icon-alert-dark.svg);
|
|
||||||
--message-error-bg: #570808;
|
--message-error-bg: #570808;
|
||||||
--message-error-icon: url(../img/icon-no-dark.svg);
|
|
||||||
|
|
||||||
--darkened-bg: #212121;
|
--darkened-bg: #212121;
|
||||||
--selected-bg: #1b1b1b;
|
--selected-bg: #1b1b1b;
|
||||||
@@ -65,17 +57,9 @@ html[data-theme="dark"] {
|
|||||||
--border-color: #353535;
|
--border-color: #353535;
|
||||||
|
|
||||||
--error-fg: #e35f5f;
|
--error-fg: #e35f5f;
|
||||||
|
|
||||||
--message-debug-bg: #4e4e4e;
|
|
||||||
--message-debug-icon: url(../img/icon-debug-dark.svg);
|
|
||||||
--message-info-bg: #265895;
|
|
||||||
--message-info-icon: url(../img/icon-info-dark.svg);
|
|
||||||
--message-success-bg: #006b1b;
|
--message-success-bg: #006b1b;
|
||||||
--message-success-icon: url(../img/icon-yes-dark.svg);
|
|
||||||
--message-warning-bg: #583305;
|
--message-warning-bg: #583305;
|
||||||
--message-warning-icon: url(../img/icon-alert-dark.svg);
|
|
||||||
--message-error-bg: #570808;
|
--message-error-bg: #570808;
|
||||||
--message-error-icon: url(../img/icon-no-dark.svg);
|
|
||||||
|
|
||||||
--darkened-bg: #212121;
|
--darkened-bg: #212121;
|
||||||
--selected-bg: #1b1b1b;
|
--selected-bg: #1b1b1b;
|
||||||
|
|||||||
@@ -30,20 +30,18 @@ form .form-row p {
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-multiline > div,
|
.form-multiline > div {
|
||||||
.form-multiline > fieldset {
|
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FORM LABELS */
|
/* FORM LABELS */
|
||||||
|
|
||||||
legend, label {
|
label {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.required legend, legend.required,
|
|
||||||
.required label, label.required {
|
.required label, label.required {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@@ -93,20 +91,6 @@ fieldset .inline-heading,
|
|||||||
|
|
||||||
/* ALIGNED FIELDSETS */
|
/* ALIGNED FIELDSETS */
|
||||||
|
|
||||||
.aligned fieldset {
|
|
||||||
flex-grow: 1;
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aligned fieldset > div {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aligned legend {
|
|
||||||
float: inline-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aligned legend,
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 4px 10px 0 0;
|
padding: 4px 10px 0 0;
|
||||||
@@ -149,7 +133,7 @@ form .aligned ul {
|
|||||||
}
|
}
|
||||||
|
|
||||||
form .aligned div.radiolist {
|
form .aligned div.radiolist {
|
||||||
display: block;
|
display: inline-block;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
@@ -217,8 +201,7 @@ fieldset .fieldBox {
|
|||||||
|
|
||||||
/* WIDE FIELDSETS */
|
/* WIDE FIELDSETS */
|
||||||
|
|
||||||
.wide label,
|
.wide label {
|
||||||
.wide legend {
|
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,7 +338,7 @@ body.popup .submit-row {
|
|||||||
width: 48em;
|
width: 48em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-flatpages.model-flatpage #id_content {
|
.flatpages-flatpage #id_content {
|
||||||
height: 40.2em;
|
height: 40.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -430,12 +413,9 @@ body.popup .submit-row {
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-related.tabular div.wrapper {
|
|
||||||
overflow-x: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inline-related.tabular fieldset.module table {
|
.inline-related.tabular fieldset.module table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
overflow-x: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
.last-related fieldset {
|
.last-related fieldset {
|
||||||
@@ -449,6 +429,7 @@ body.popup .submit-row {
|
|||||||
.inline-group .tabular tr td.original {
|
.inline-group .tabular tr td.original {
|
||||||
padding: 2px 0 0 0;
|
padding: 2px 0 0 0;
|
||||||
width: 0;
|
width: 0;
|
||||||
|
_position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group .tabular th.original {
|
.inline-group .tabular th.original {
|
||||||
@@ -456,19 +437,16 @@ body.popup .submit-row {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group .tabular td {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inline-group .tabular td.original p {
|
.inline-group .tabular td.original p {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
height: 1.2em;
|
height: 1.1em;
|
||||||
padding: 2px 9px;
|
padding: 2px 9px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-size: 0.875rem;
|
font-size: 0.5625rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
|
_width: 700px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group div.add-row,
|
.inline-group div.add-row,
|
||||||
|
|||||||
@@ -170,7 +170,6 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
/* Forms */
|
/* Forms */
|
||||||
|
|
||||||
legend,
|
|
||||||
label {
|
label {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
@@ -338,8 +337,16 @@ input[type="submit"], button {
|
|||||||
/* Messages */
|
/* Messages */
|
||||||
|
|
||||||
ul.messagelist li {
|
ul.messagelist li {
|
||||||
padding: 10px 10px 10px 55px;
|
padding-left: 55px;
|
||||||
background-position-x: 30px;
|
background-position: 30px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.error {
|
||||||
|
background-position: 30px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.warning {
|
||||||
|
background-position: 30px 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Login */
|
/* Login */
|
||||||
@@ -410,15 +417,11 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
/* Changelist */
|
/* Changelist */
|
||||||
|
|
||||||
#changelist .changelist-form-container {
|
#changelist {
|
||||||
|
align-items: stretch;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .changelist-form-container:has(#changelist-filter) > div {
|
|
||||||
max-width: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toolbar {
|
#toolbar {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
@@ -441,12 +444,25 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter {
|
#changelist-filter {
|
||||||
width: 100%;
|
position: static;
|
||||||
|
width: auto;
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools {
|
.object-tools {
|
||||||
text-align: left;
|
float: none;
|
||||||
|
margin: 0 0 15px;
|
||||||
|
padding: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.object-tools li {
|
||||||
|
height: auto;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.object-tools li + li {
|
||||||
|
margin-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Forms */
|
/* Forms */
|
||||||
@@ -485,7 +501,6 @@ input[type="submit"], button {
|
|||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned legend,
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-width: auto;
|
min-width: auto;
|
||||||
@@ -560,10 +575,6 @@ input[type="submit"], button {
|
|||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .aligned fieldset div.flex-container {
|
|
||||||
display: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Related widget */
|
/* Related widget */
|
||||||
|
|
||||||
.related-widget-wrapper {
|
.related-widget-wrapper {
|
||||||
@@ -728,8 +739,16 @@ input[type="submit"], button {
|
|||||||
/* Messages */
|
/* Messages */
|
||||||
|
|
||||||
ul.messagelist li {
|
ul.messagelist li {
|
||||||
padding: 10px 10px 10px 40px;
|
padding-left: 40px;
|
||||||
background-position-x: 15px;
|
background-position: 15px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.error {
|
||||||
|
background-position: 15px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.messagelist li.warning {
|
||||||
|
background-position: 15px 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Paginator */
|
/* Paginator */
|
||||||
|
|||||||
@@ -34,15 +34,19 @@
|
|||||||
background-position: calc(100% - 8px) 9px;
|
background-position: calc(100% - 8px) 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .object-tools li {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .object-tools li + li {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
[dir="rtl"] .dashboard .module table td a {
|
[dir="rtl"] .dashboard .module table td a {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] ul.messagelist li {
|
|
||||||
padding: 10px 55px 10px 10px;
|
|
||||||
background-position-x: calc(100% - 30px);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MOBILE */
|
/* MOBILE */
|
||||||
@@ -63,11 +67,6 @@
|
|||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] .object-tools {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
[dir="rtl"] .aligned .vCheckboxLabel {
|
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||||
padding: 1px 5px 0 0;
|
padding: 1px 5px 0 0;
|
||||||
}
|
}
|
||||||
@@ -87,9 +86,4 @@
|
|||||||
[dir="rtl"] :enabled.selector-add:focus, :enabled.selector-add:hover {
|
[dir="rtl"] :enabled.selector-add:focus, :enabled.selector-add:hover {
|
||||||
background-position: 0 -72px;
|
background-position: 0 -72px;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] ul.messagelist li {
|
|
||||||
padding: 10px 40px 10px 10px;
|
|
||||||
background-position-x: calc(100% - 15px);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,12 +26,7 @@ th {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.object-tools {
|
.object-tools {
|
||||||
text-align: left;
|
float: left;
|
||||||
}
|
|
||||||
|
|
||||||
.object-tools li + li {
|
|
||||||
margin-right: 15px;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
thead th:first-child,
|
thead th:first-child,
|
||||||
@@ -112,7 +107,7 @@ thead th.sorted .text {
|
|||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.paginator ul {
|
.paginator .end {
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
@@ -124,8 +119,7 @@ thead th.sorted .text {
|
|||||||
|
|
||||||
/* FORMS */
|
/* FORMS */
|
||||||
|
|
||||||
.aligned label,
|
.aligned label {
|
||||||
.aligned legend {
|
|
||||||
padding: 0 0 3px 1em;
|
padding: 0 0 3px 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,10 +237,18 @@ fieldset .fieldBox {
|
|||||||
background-position: 0 -168px;
|
background-position: 0 -168px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector-chooseall {
|
||||||
|
background: url(../img/selector-icons.svg) right -128px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
||||||
background-position: 100% -144px;
|
background-position: 100% -144px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector-clearall {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -160px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
||||||
background-position: 0 -176px;
|
background-position: 0 -176px;
|
||||||
}
|
}
|
||||||
@@ -289,8 +291,3 @@ form .form-row p.datetime {
|
|||||||
.selector .selector-chooser {
|
.selector .selector-chooser {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.messagelist li {
|
|
||||||
padding: 10px 65px 10px 10px;
|
|
||||||
background-position-x: calc(100% - 40px);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -162,21 +162,21 @@
|
|||||||
|
|
||||||
.selector-chooseall, .selector-clearall {
|
.selector-chooseall, .selector-clearall {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
height: 16px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding: 4px 5px;
|
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: var(--button-fg);
|
font-weight: bold;
|
||||||
background-color: var(--button-bg);
|
line-height: 16px;
|
||||||
|
color: var(--body-quiet-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:enabled.selector-chooseall:focus, :enabled.selector-clearall:focus,
|
:enabled.selector-chooseall:focus, :enabled.selector-clearall:focus,
|
||||||
:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover {
|
:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover {
|
||||||
background-color: var(--button-hover-bg);
|
color: var(--link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
:enabled.selector-chooseall, :enabled.selector-clearall {
|
:enabled.selector-chooseall, :enabled.selector-clearall {
|
||||||
@@ -187,10 +187,22 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector-chooseall {
|
||||||
|
padding: 0 18px 0 0;
|
||||||
|
background: url(../img/selector-icons.svg) right -160px no-repeat;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
||||||
background-position: 100% -176px;
|
background-position: 100% -176px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector-clearall {
|
||||||
|
padding: 0 0 0 18px;
|
||||||
|
background: url(../img/selector-icons.svg) 0 -128px no-repeat;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
||||||
background-position: 0 -144px;
|
background-position: 0 -144px;
|
||||||
}
|
}
|
||||||
@@ -301,10 +313,6 @@ p.datetime {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.datetime label {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.datetime span {
|
.datetime span {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@@ -568,8 +576,7 @@ ul.timelist, .timelist li {
|
|||||||
.inline-deletelink {
|
.inline-deletelink {
|
||||||
float: right;
|
float: right;
|
||||||
text-indent: -9999px;
|
text-indent: -9999px;
|
||||||
background: url(../img/inline-delete.svg) center center no-repeat;
|
background: url(../img/inline-delete.svg) 0 0 no-repeat;
|
||||||
background-size: contain;
|
|
||||||
width: 1.5rem;
|
width: 1.5rem;
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
border: 0px none;
|
border: 0px none;
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Code Charm Ltd
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
All icons are taken from Font Awesome (https://fontawesome.com/) project.
|
||||||
|
The Font Awesome font is licensed under the SIL OFL 1.1:
|
||||||
|
- https://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG
|
||||||
|
Font-Awesome-SVG-PNG is licensed under the MIT license (see file license
|
||||||
|
in current folder).
|
||||||
@@ -1,44 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg
|
<svg
|
||||||
width="15"
|
width="15"
|
||||||
height="30"
|
height="30"
|
||||||
viewBox="0 0 512 1024"
|
viewBox="0 0 1792 3584"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg5"
|
id="svg5"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
sodipodi:docname="calendar-icons.svg"
|
||||||
xmlns="http://www.w3.org/2000/svg">
|
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
<defs id="defs2">
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
<g id="previous">
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
<!--
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
Icon Name: circle-chevron-left
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
Icon Family: classic
|
<sodipodi:namedview
|
||||||
Icon Style: solid
|
id="namedview5"
|
||||||
-->
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="13.3"
|
||||||
|
inkscape:cx="15.526316"
|
||||||
|
inkscape:cy="20.977444"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1011"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg5" />
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<g
|
||||||
|
id="previous">
|
||||||
<path
|
<path
|
||||||
d="M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z"
|
d="m 1037,1395 102,-102 q 19,-19 19,-45 0,-26 -19,-45 L 832,896 1139,589 q 19,-19 19,-45 0,-26 -19,-45 L 1037,397 q -19,-19 -45,-19 -26,0 -45,19 L 493,851 q -19,19 -19,45 0,26 19,45 l 454,454 q 19,19 45,19 26,0 45,-19 z m 627,-499 q 0,209 -103,385.5 Q 1458,1458 1281.5,1561 1105,1664 896,1664 687,1664 510.5,1561 334,1458 231,1281.5 128,1105 128,896 128,687 231,510.5 334,334 510.5,231 687,128 896,128 1105,128 1281.5,231 1458,334 1561,510.5 1664,687 1664,896 Z"
|
||||||
id="path2" />
|
id="path1" />
|
||||||
</g>
|
</g>
|
||||||
<g id="next">
|
<g
|
||||||
<!--
|
id="next">
|
||||||
Icon Name: circle-chevron-right
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path
|
<path
|
||||||
d="M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z"
|
d="m 845,1395 454,-454 q 19,-19 19,-45 0,-26 -19,-45 L 845,397 q -19,-19 -45,-19 -26,0 -45,19 L 653,499 q -19,19 -19,45 0,26 19,45 l 307,307 -307,307 q -19,19 -19,45 0,26 19,45 l 102,102 q 19,19 45,19 26,0 45,-19 z m 819,-499 q 0,209 -103,385.5 Q 1458,1458 1281.5,1561 1105,1664 896,1664 687,1664 510.5,1561 334,1458 231,1281.5 128,1105 128,896 128,687 231,510.5 334,334 510.5,231 687,128 896,128 1105,128 1281.5,231 1458,334 1561,510.5 1664,687 1664,896 Z"
|
||||||
id="path1" />
|
id="path2" />
|
||||||
</g>
|
</g>
|
||||||
</defs>
|
</defs>
|
||||||
<use
|
<use
|
||||||
xlink:href="#next"
|
xlink:href="#next"
|
||||||
x="0"
|
x="0"
|
||||||
y="512"
|
y="5376"
|
||||||
fill="#000000"
|
fill="#000000"
|
||||||
id="use5" />
|
id="use5"
|
||||||
|
transform="translate(0,-3584)" />
|
||||||
<use
|
<use
|
||||||
xlink:href="#previous"
|
xlink:href="#previous"
|
||||||
x="0"
|
x="0"
|
||||||
y="0"
|
y="0"
|
||||||
fill="#333333"
|
fill="#333333"
|
||||||
id="use2" />
|
id="use2"
|
||||||
|
style="fill:#000000;fill-opacity:1" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#EBECE6" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9C9C9" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F1C02A" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9A741" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#5fa225" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>
|
||||||
<!--
|
|
||||||
Icon Name: plus
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#5fa225" stroke="#5fa225" stroke-width="30" d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 593 B After Width: | Height: | Size: 331 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="14" height="14">
|
<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#efb80b" d="M1024 1375v-190q0-14-9.5-23.5t-22.5-9.5h-192q-13 0-22.5 9.5t-9.5 23.5v190q0 14 9.5 23.5t22.5 9.5h192q13 0 22.5-9.5t9.5-23.5zm-2-374l18-459q0-12-10-19-13-11-24-11h-220q-11 0-24 11-10 7-10 21l17 457q0 10 10 16.5t24 6.5h185q14 0 23.5-6.5t10.5-16.5zm-14-934l768 1408q35 63-2 126-17 29-46.5 46t-63.5 17h-1536q-34 0-63.5-17t-46.5-46q-37-63-2-126l768-1408q17-31 47-49t65-18 65 18 47 49z"/>
|
||||||
<!--
|
|
||||||
Icon Name: triangle-exclamation
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#b78b02" d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 684 B After Width: | Height: | Size: 504 B |
@@ -1,15 +1,9 @@
|
|||||||
<svg width="16" height="32" viewBox="0 0 448 1024" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
|
||||||
<defs>
|
<defs>
|
||||||
<g id="icon">
|
<g id="icon">
|
||||||
<!--
|
<path d="M192 1664h288v-288h-288v288zm352 0h320v-288h-320v288zm-352-352h288v-320h-288v320zm352 0h320v-320h-320v320zm-352-384h288v-288h-288v288zm736 736h320v-288h-320v288zm-384-736h320v-288h-320v288zm768 736h288v-288h-288v288zm-384-352h320v-320h-320v320zm-352-864v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm736 864h288v-320h-288v320zm-384-384h320v-288h-320v288zm384 0h288v-288h-288v288zm32-480v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm384-64v1280q0 52-38 90t-90 38h-1408q-52 0-90-38t-38-90v-1280q0-52 38-90t90-38h128v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h384v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h128q52 0 90 38t38 90z"/>
|
||||||
Icon Name: calendar-days
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: regular
|
|
||||||
-->
|
|
||||||
<path d="M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l80 0 0 56-80 0 0-56zm0 104l80 0 0 64-80 0 0-64zm128 0l96 0 0 64-96 0 0-64zm144 0l80 0 0 64-80 0 0-64zm80-48l-80 0 0-56 80 0 0 56zm0 160l0 40c0 8.8-7.2 16-16 16l-64 0 0-56 80 0zm-128 0l0 56-96 0 0-56 96 0zm-144 0l0 56-64 0c-8.8 0-16-7.2-16-16l0-40 80 0zM272 248l-96 0 0-56 96 0 0 56z"/>
|
|
||||||
</g>
|
</g>
|
||||||
</defs>
|
</defs>
|
||||||
<use xlink:href="#icon" x="0" y="0" fill="#447e9b" />
|
<use xlink:href="#icon" x="0" y="0" fill="#447e9b" />
|
||||||
<use xlink:href="#icon" x="0" y="512" fill="#003366" />
|
<use xlink:href="#icon" x="0" y="1792" fill="#003366" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#b48c08" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/>
|
||||||
<!--
|
|
||||||
Icon Name: pencil
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#b48c08" d="M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1 0 32c0 8.8 7.2 16 16 16l32 0zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 978 B After Width: | Height: | Size: 380 B |
@@ -1,15 +1,9 @@
|
|||||||
<svg width="16" height="32" viewBox="0 0 512 1024" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<defs>
|
||||||
<defs>
|
|
||||||
<g id="icon">
|
<g id="icon">
|
||||||
<!--
|
<path d="M1024 544v448q0 14-9 23t-23 9h-320q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h224v-352q0-14 9-23t23-9h64q14 0 23 9t9 23zm416 352q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
Icon Name: clock
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: regular
|
|
||||||
-->
|
|
||||||
<path d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"/>
|
|
||||||
</g>
|
</g>
|
||||||
</defs>
|
</defs>
|
||||||
<use xlink:href="#icon" x="0" y="0" fill="#447e9b"/>
|
<use xlink:href="#icon" x="0" y="0" fill="#447e9b" />
|
||||||
<use xlink:href="#icon" x="0" y="512" fill="#003366" />
|
<use xlink:href="#icon" x="0" y="1792" fill="#003366" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 805 B After Width: | Height: | Size: 677 B |
@@ -1,11 +1,3 @@
|
|||||||
<svg width="14" height="14" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
|
<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#dd4646" d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/>
|
||||||
<g>
|
|
||||||
<!--
|
|
||||||
Icon Name: xmark
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#dd4646" stroke="#dd4646" d="M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 689 B After Width: | Height: | Size: 392 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#2b70bf" d="m555 1335 78-141q-87-63-136-159t-49-203q0-121 61-225-229 117-381 353 167 258 427 375zm389-759q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm363-191q0 7-1 9-105 188-315 566t-316 567l-49 89q-10 16-28 16-12 0-134-70-16-10-16-28 0-12 44-87-143-65-263.5-173T20 1029Q0 998 0 960t20-69q153-235 380-371t496-136q89 0 180 17l54-97q10-16 28-16 5 0 18 6t31 15.5 33 18.5 31.5 18.5T1291 358q16 10 16 27zm37 447q0 139-79 253.5T1056 1250l280-502q8 45 8 84zm448 128q0 35-20 69-39 64-109 145-150 172-347.5 267T896 1536l74-132q212-18 392.5-137T1664 960q-115-179-282-294l63-112q95 64 182.5 153T1772 891q20 34 20 69z"/>
|
||||||
<!--
|
|
||||||
Icon Name: eye-slash
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#2b70bf" d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 784 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#dd4646" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
<!--
|
|
||||||
Icon Name: circle-xmark
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#c63d3d" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 645 B After Width: | Height: | Size: 560 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#ffffff" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
<!--
|
|
||||||
Icon Name: circle-question
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#ffffff" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 806 B After Width: | Height: | Size: 655 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#666666" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
<!--
|
|
||||||
Icon Name: circle-question
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#666666" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 806 B After Width: | Height: | Size: 655 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#2b70bf" d="M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z"/>
|
||||||
<!--
|
|
||||||
Icon Name: eye
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#2b70bf" d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 928 B After Width: | Height: | Size: 581 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#70bf2b" d="M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
<!--
|
|
||||||
Icon Name: circle-check
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#649c35" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 558 B After Width: | Height: | Size: 436 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
<!--
|
|
||||||
Icon Name: circle-xmark
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#999999" d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 651 B After Width: | Height: | Size: 537 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="15" height="15" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
<svg width="15" height="15" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#555555" d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/>
|
||||||
<!--
|
|
||||||
Icon Name: magnifying-glass
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#555555" d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 607 B After Width: | Height: | Size: 458 B |
@@ -1,45 +1,34 @@
|
|||||||
<svg width="16" height="128" viewBox="0 0 512 4096" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="16" height="192" viewBox="0 0 1792 21504" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
|
||||||
<defs>
|
<defs>
|
||||||
<g id="up">
|
<g id="up">
|
||||||
<!--
|
<path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
Icon Name: circle-arrow-up
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 215c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71L280 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-214.1-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 103c9.4-9.4 24.6-9.4 33.9 0L385 215z"/>
|
|
||||||
</g>
|
</g>
|
||||||
<g id="down">
|
<g id="down">
|
||||||
<!--
|
<path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
Icon Name: circle-arrow-down
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path d="M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 297c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 214.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 409c-9.4 9.4-24.6 9.4-33.9 0L127 297z"/>
|
|
||||||
</g>
|
|
||||||
<g id="right">
|
|
||||||
<!--
|
|
||||||
Icon Name: circle-arrow-right
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path d="M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z"/>
|
|
||||||
</g>
|
</g>
|
||||||
<g id="left">
|
<g id="left">
|
||||||
<!--
|
<path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
Icon Name: circle-arrow-left
|
</g>
|
||||||
Icon Family: classic
|
<g id="right">
|
||||||
Icon Style: solid
|
<path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
-->
|
</g>
|
||||||
<path d="M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM215 127c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-71 71L392 232c13.3 0 24 10.7 24 24s-10.7 24-24 24l-214.1 0 71 71c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L103 273c-9.4-9.4-9.4-24.6 0-33.9L215 127z"/>
|
<g id="clearall">
|
||||||
|
<path transform="translate(336, 336) scale(0.75)" d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
|
</g>
|
||||||
|
<g id="chooseall">
|
||||||
|
<path transform="translate(336, 336) scale(0.75)" d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
</g>
|
</g>
|
||||||
</defs>
|
</defs>
|
||||||
<use xlink:href="#up" x="0" y="0" fill="#666666" />
|
<use xlink:href="#up" x="0" y="0" fill="#666666" />
|
||||||
<use xlink:href="#up" x="0" y="512" fill="#447e9b" />
|
<use xlink:href="#up" x="0" y="1792" fill="#447e9b" />
|
||||||
<use xlink:href="#down" x="0" y="1024" fill="#666666" />
|
<use xlink:href="#down" x="0" y="3584" fill="#666666" />
|
||||||
<use xlink:href="#down" x="0" y="1536" fill="#447e9b" />
|
<use xlink:href="#down" x="0" y="5376" fill="#447e9b" />
|
||||||
<use xlink:href="#left" x="0" y="2048" fill="#666666" />
|
<use xlink:href="#left" x="0" y="7168" fill="#666666" />
|
||||||
<use xlink:href="#left" x="0" y="2560" fill="#447e9b" />
|
<use xlink:href="#left" x="0" y="8960" fill="#447e9b" />
|
||||||
<use xlink:href="#right" x="0" y="3072" fill="#666666" />
|
<use xlink:href="#right" x="0" y="10752" fill="#666666" />
|
||||||
<use xlink:href="#right" x="0" y="3584" fill="#447e9b" />
|
<use xlink:href="#right" x="0" y="12544" fill="#447e9b" />
|
||||||
|
<use xlink:href="#clearall" x="0" y="14336" fill="#666666" />
|
||||||
|
<use xlink:href="#clearall" x="0" y="16128" fill="#447e9b" />
|
||||||
|
<use xlink:href="#chooseall" x="0" y="17920" fill="#666666" />
|
||||||
|
<use xlink:href="#chooseall" x="0" y="19712" fill="#447e9b" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 3.2 KiB |
@@ -1,35 +1,19 @@
|
|||||||
<svg width="14" height="84" viewBox="0 0 512 3072" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="14" height="84" viewBox="0 0 1792 10752" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
|
||||||
<defs>
|
<defs>
|
||||||
<g id="sort">
|
<g id="sort">
|
||||||
<!--
|
<path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/>
|
||||||
Icon Name: sort
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path d="M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8L32 224c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z"/>
|
|
||||||
</g>
|
</g>
|
||||||
<g id="ascending">
|
<g id="ascending">
|
||||||
<!--
|
<path d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/>
|
||||||
Icon Name: sort-up
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path d="M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"/>
|
|
||||||
</g>
|
</g>
|
||||||
<g id="descending">
|
<g id="descending">
|
||||||
<!--
|
<path d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/>
|
||||||
Icon Name: sort-down
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path d="M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z"/>
|
|
||||||
</g>
|
</g>
|
||||||
</defs>
|
</defs>
|
||||||
<use xlink:href="#sort" x="0" y="0" fill="#999999" />
|
<use xlink:href="#sort" x="0" y="0" fill="#999999" />
|
||||||
<use xlink:href="#sort" x="0" y="512" fill="#447e9b" />
|
<use xlink:href="#sort" x="0" y="1792" fill="#447e9b" />
|
||||||
<use xlink:href="#ascending" x="0" y="1024" fill="#999999" />
|
<use xlink:href="#ascending" x="0" y="3584" fill="#999999" />
|
||||||
<use xlink:href="#ascending" x="0" y="1536" fill="#447e9b" />
|
<use xlink:href="#ascending" x="0" y="5376" fill="#447e9b" />
|
||||||
<use xlink:href="#descending" x="0" y="2048" fill="#999999" />
|
<use xlink:href="#descending" x="0" y="7168" fill="#999999" />
|
||||||
<use xlink:href="#descending" x="0" y="2560" fill="#447e9b" />
|
<use xlink:href="#descending" x="0" y="8960" fill="#447e9b" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#ffffff" d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>
|
||||||
<!--
|
|
||||||
Icon Name: plus
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#ffffff" stroke="#ffffff" stroke-width="30" d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 593 B After Width: | Height: | Size: 331 B |
@@ -1,9 +1,3 @@
|
|||||||
<svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
<path fill="#ffffff" d="M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"/>
|
||||||
<!--
|
|
||||||
Icon Name: chevron-right
|
|
||||||
Icon Family: classic
|
|
||||||
Icon Style: solid
|
|
||||||
-->
|
|
||||||
<path fill="#ffffff" stroke="#ffffff" stroke-width="30" d="M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 569 B After Width: | Height: | Size: 280 B |
@@ -15,8 +15,7 @@ Requires core.js and SelectBox.js.
|
|||||||
const from_box = document.getElementById(field_id);
|
const from_box = document.getElementById(field_id);
|
||||||
from_box.id += '_from'; // change its ID
|
from_box.id += '_from'; // change its ID
|
||||||
from_box.className = 'filtered';
|
from_box.className = 'filtered';
|
||||||
from_box.setAttribute('aria-labelledby', field_id + '_from_label');
|
from_box.setAttribute('aria-labelledby', field_id + '_from_title');
|
||||||
from_box.setAttribute('aria-describedby', `${field_id}_helptext ${field_id}_choose_helptext`);
|
|
||||||
|
|
||||||
for (const p of from_box.parentNode.getElementsByTagName('p')) {
|
for (const p of from_box.parentNode.getElementsByTagName('p')) {
|
||||||
if (p.classList.contains("info")) {
|
if (p.classList.contains("info")) {
|
||||||
@@ -43,20 +42,12 @@ Requires core.js and SelectBox.js.
|
|||||||
const selector_available_title = quickElement('div', selector_available);
|
const selector_available_title = quickElement('div', selector_available);
|
||||||
selector_available_title.id = field_id + '_from_title';
|
selector_available_title.id = field_id + '_from_title';
|
||||||
selector_available_title.className = 'selector-available-title';
|
selector_available_title.className = 'selector-available-title';
|
||||||
quickElement(
|
quickElement('label', selector_available_title, interpolate(gettext('Available %s') + ' ', [field_name]), 'for', field_id + '_from');
|
||||||
'label',
|
|
||||||
selector_available_title,
|
|
||||||
interpolate(gettext('Available %s') + ' ', [field_name]),
|
|
||||||
'id',
|
|
||||||
field_id + '_from_label',
|
|
||||||
'for',
|
|
||||||
field_id + '_from'
|
|
||||||
);
|
|
||||||
quickElement(
|
quickElement(
|
||||||
'p',
|
'p',
|
||||||
selector_available_title,
|
selector_available_title,
|
||||||
interpolate(gettext('Choose %s by selecting them and then select the "Choose" arrow button.'), [field_name]),
|
interpolate(gettext('Choose %s by selecting them and then select the "Choose" arrow button.'), [field_name]),
|
||||||
'id', `${field_id}_choose_helptext`, 'class', 'helptext'
|
'class', 'helptext'
|
||||||
);
|
);
|
||||||
|
|
||||||
const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
|
const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
|
||||||
@@ -111,20 +102,12 @@ Requires core.js and SelectBox.js.
|
|||||||
const selector_chosen_title = quickElement('div', selector_chosen);
|
const selector_chosen_title = quickElement('div', selector_chosen);
|
||||||
selector_chosen_title.className = 'selector-chosen-title';
|
selector_chosen_title.className = 'selector-chosen-title';
|
||||||
selector_chosen_title.id = field_id + '_to_title';
|
selector_chosen_title.id = field_id + '_to_title';
|
||||||
quickElement(
|
quickElement('label', selector_chosen_title, interpolate(gettext('Chosen %s') + ' ', [field_name]), 'for', field_id + '_to');
|
||||||
'label',
|
|
||||||
selector_chosen_title,
|
|
||||||
interpolate(gettext('Chosen %s') + ' ', [field_name]),
|
|
||||||
'id',
|
|
||||||
field_id + '_to_label',
|
|
||||||
'for',
|
|
||||||
field_id + '_to'
|
|
||||||
);
|
|
||||||
quickElement(
|
quickElement(
|
||||||
'p',
|
'p',
|
||||||
selector_chosen_title,
|
selector_chosen_title,
|
||||||
interpolate(gettext('Remove %s by selecting them and then select the "Remove" arrow button.'), [field_name]),
|
interpolate(gettext('Remove %s by selecting them and then select the "Remove" arrow button.'), [field_name]),
|
||||||
'id', `${field_id}_remove_helptext`, 'class', 'helptext'
|
'class', 'helptext'
|
||||||
);
|
);
|
||||||
|
|
||||||
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
|
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
|
||||||
@@ -151,8 +134,7 @@ Requires core.js and SelectBox.js.
|
|||||||
'multiple', '',
|
'multiple', '',
|
||||||
'size', from_box.size,
|
'size', from_box.size,
|
||||||
'name', from_box.name,
|
'name', from_box.name,
|
||||||
'aria-labelledby', field_id + '_to_label',
|
'aria-labelledby', field_id + '_to_title',
|
||||||
'aria-describedby', `${field_id}_helptext ${field_id}_remove_helptext`,
|
|
||||||
'class', 'filtered'
|
'class', 'filtered'
|
||||||
);
|
);
|
||||||
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
|
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
|
||||||
|
|||||||
@@ -172,7 +172,7 @@
|
|||||||
if (document.querySelector('[name=action]').value) {
|
if (document.querySelector('[name=action]').value) {
|
||||||
const text = list_editable_changed
|
const text = list_editable_changed
|
||||||
? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.")
|
? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.")
|
||||||
: gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Run button rather than the Save button.");
|
: gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button.");
|
||||||
if (!confirm(text)) {
|
if (!confirm(text)) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,10 +91,7 @@
|
|||||||
message = interpolate(message, [timezoneOffset]);
|
message = interpolate(message, [timezoneOffset]);
|
||||||
|
|
||||||
const warning = document.createElement('div');
|
const warning = document.createElement('div');
|
||||||
const id = inp.id;
|
|
||||||
const field_id = inp.closest('p.datetime') ? id.slice(0, id.lastIndexOf("_")) : id;
|
|
||||||
warning.classList.add('help', warningClass);
|
warning.classList.add('help', warningClass);
|
||||||
warning.id = `${field_id}_timezone_warning_helptext`;
|
|
||||||
warning.textContent = message;
|
warning.textContent = message;
|
||||||
inp.parentNode.appendChild(warning);
|
inp.parentNode.appendChild(warning);
|
||||||
},
|
},
|
||||||
@@ -111,7 +108,6 @@
|
|||||||
const now_link = document.createElement('a');
|
const now_link = document.createElement('a');
|
||||||
now_link.href = "#";
|
now_link.href = "#";
|
||||||
now_link.textContent = gettext('Now');
|
now_link.textContent = gettext('Now');
|
||||||
now_link.role = 'button';
|
|
||||||
now_link.addEventListener('click', function(e) {
|
now_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
||||||
@@ -167,7 +163,7 @@
|
|||||||
// where name is the name attribute of the <input>.
|
// where name is the name attribute of the <input>.
|
||||||
const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name;
|
const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name;
|
||||||
DateTimeShortcuts.clockHours[name].forEach(function(element) {
|
DateTimeShortcuts.clockHours[name].forEach(function(element) {
|
||||||
const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'role', 'button', 'href', '#');
|
const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#');
|
||||||
time_link.addEventListener('click', function(e) {
|
time_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleClockQuicklink(num, element[1]);
|
DateTimeShortcuts.handleClockQuicklink(num, element[1]);
|
||||||
@@ -176,7 +172,7 @@
|
|||||||
|
|
||||||
const cancel_p = quickElement('p', clock_box);
|
const cancel_p = quickElement('p', clock_box);
|
||||||
cancel_p.className = 'calendar-cancel';
|
cancel_p.className = 'calendar-cancel';
|
||||||
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#');
|
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#');
|
||||||
cancel_link.addEventListener('click', function(e) {
|
cancel_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.dismissClock(num);
|
DateTimeShortcuts.dismissClock(num);
|
||||||
@@ -239,7 +235,6 @@
|
|||||||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
||||||
const today_link = document.createElement('a');
|
const today_link = document.createElement('a');
|
||||||
today_link.href = '#';
|
today_link.href = '#';
|
||||||
today_link.role = 'button';
|
|
||||||
today_link.appendChild(document.createTextNode(gettext('Today')));
|
today_link.appendChild(document.createTextNode(gettext('Today')));
|
||||||
today_link.addEventListener('click', function(e) {
|
today_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -314,19 +309,19 @@
|
|||||||
// calendar shortcuts
|
// calendar shortcuts
|
||||||
const shortcuts = quickElement('div', cal_box);
|
const shortcuts = quickElement('div', cal_box);
|
||||||
shortcuts.className = 'calendar-shortcuts';
|
shortcuts.className = 'calendar-shortcuts';
|
||||||
let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'role', 'button', 'href', '#');
|
let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#');
|
||||||
day_link.addEventListener('click', function(e) {
|
day_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleCalendarQuickLink(num, -1);
|
DateTimeShortcuts.handleCalendarQuickLink(num, -1);
|
||||||
});
|
});
|
||||||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||||
day_link = quickElement('a', shortcuts, gettext('Today'), 'role', 'button', 'href', '#');
|
day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#');
|
||||||
day_link.addEventListener('click', function(e) {
|
day_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
||||||
});
|
});
|
||||||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||||
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'role', 'button', 'href', '#');
|
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#');
|
||||||
day_link.addEventListener('click', function(e) {
|
day_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleCalendarQuickLink(num, +1);
|
DateTimeShortcuts.handleCalendarQuickLink(num, +1);
|
||||||
@@ -335,7 +330,7 @@
|
|||||||
// cancel bar
|
// cancel bar
|
||||||
const cancel_p = quickElement('p', cal_box);
|
const cancel_p = quickElement('p', cal_box);
|
||||||
cancel_p.className = 'calendar-cancel';
|
cancel_p.className = 'calendar-cancel';
|
||||||
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#');
|
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#');
|
||||||
cancel_link.addEventListener('click', function(e) {
|
cancel_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.dismissCalendar(num);
|
DateTimeShortcuts.dismissCalendar(num);
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ depends on core.js for utility functions like removeChildren or quickElement
|
|||||||
}
|
}
|
||||||
|
|
||||||
const cell = quickElement('td', tableRow, '', 'class', todayClass);
|
const cell = quickElement('td', tableRow, '', 'class', todayClass);
|
||||||
const link = quickElement('a', cell, currentDay, 'role', 'button', 'href', '#');
|
const link = quickElement('a', cell, currentDay, 'href', '#');
|
||||||
link.addEventListener('click', calendarMonth(year, month));
|
link.addEventListener('click', calendarMonth(year, month));
|
||||||
currentDay++;
|
currentDay++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
"use strict";
|
||||||
|
// Fallback JS for browsers which do not support :has selector used in
|
||||||
|
// admin/css/unusable_password_fields.css
|
||||||
|
// Remove file once all supported browsers support :has selector
|
||||||
|
try {
|
||||||
|
// If browser does not support :has selector this will raise an error
|
||||||
|
document.querySelector("form:has(input)");
|
||||||
|
} catch (error) {
|
||||||
|
console.log("Defaulting to javascript for usable password form management: " + error);
|
||||||
|
// JS replacement for unsupported :has selector
|
||||||
|
document.querySelectorAll('input[name="usable_password"]').forEach(option => {
|
||||||
|
option.addEventListener('change', function() {
|
||||||
|
const usablePassword = (this.value === "true" ? this.checked : !this.checked);
|
||||||
|
const submit1 = document.querySelector('input[type="submit"].set-password');
|
||||||
|
const submit2 = document.querySelector('input[type="submit"].unset-password');
|
||||||
|
const messages = document.querySelector('#id_unusable_warning');
|
||||||
|
document.getElementById('id_password1').closest('.form-row').hidden = !usablePassword;
|
||||||
|
document.getElementById('id_password2').closest('.form-row').hidden = !usablePassword;
|
||||||
|
if (messages) {
|
||||||
|
messages.hidden = usablePassword;
|
||||||
|
}
|
||||||
|
if (submit1 && submit2) {
|
||||||
|
submit1.hidden = !usablePassword;
|
||||||
|
submit2.hidden = usablePassword;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
option.dispatchEvent(new Event('change'));
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
map $http_x_forwarded_proto $forwarded_proto {
|
||||||
|
default $http_x_forwarded_proto;
|
||||||
|
'' $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
@@ -29,25 +34,25 @@ server {
|
|||||||
|
|
||||||
location /api/ {
|
location /api/ {
|
||||||
proxy_pass http://backend:8000/api/;
|
proxy_pass http://backend:8000/api/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $forwarded_proto;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /admin/ {
|
location /admin/ {
|
||||||
proxy_pass http://backend:8000/admin/;
|
proxy_pass http://backend:8000/admin/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $forwarded_proto;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /static/ {
|
location /static/ {
|
||||||
proxy_pass http://backend:8000/static/;
|
proxy_pass http://backend:8000/static/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $forwarded_proto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||