main
yaemiku 2024-01-04 01:40:33 +01:00
parent 59ef202862
commit e3b3b83ca0
Signed by: podlaskizbs
GPG Key ID: ADC039636B3E4AAB
34 changed files with 7297 additions and 5640 deletions

View File

@ -36,5 +36,6 @@ def load_config(request):
'memberships': Membership.objects.filter(published=True), 'memberships': Membership.objects.filter(published=True),
'youth': Youth.objects.filter(published=True), 'youth': Youth.objects.filter(published=True),
'mbkb': MBKB.objects.filter(published=True), 'mbkb': MBKB.objects.filter(published=True),
'atus': Atu.objects.filter(published=True) 'atus': Atu.objects.filter(published=True),
'footer': Footer.Get()
} }

View File

@ -87,8 +87,15 @@
> >
{% block content %}{% endblock %} {% block content %}{% endblock %}
</main> </main>
<footer class="footer text-center font-light italic"> {% if footer %}
<h6 class="mb-4">&copy; {% now "Y" %} Nikola Kubiczek</h6> <footer class="shadow-lg border-t border-slate-400 bg-white mt-8">
<ul class="lg:m-0 prose max-w-full w-full">
{% content footer %}
<div class="flex flex-wrap gap-4 justify-center items-center mb-4">
{% buttons footer.buttons %}
</div>
</ul>
</footer> </footer>
{% endif %}
</body> </body>
</html> </html>

View File

@ -20,3 +20,10 @@ class GrandPrixWAdmin(OrderableAdmin, admin.ModelAdmin):
ordering_field_hide_input = True ordering_field_hide_input = True
exclude = ['ordering'] exclude = ['ordering']
@admin.register(Footer)
class FooterAdmin(OrderableAdmin, admin.ModelAdmin):
list_display = ('__str__', 'published', 'ordering')
list_editable = ['ordering']
ordering_field_hide_input = True
exclude = ['ordering']

View File

@ -0,0 +1,33 @@
# Generated by Django 5.0.1 on 2024-01-04 00:39
import tinymce.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0011_rename_year_grandprixw_id_alter_grandprixw_published_and_more'),
]
operations = [
migrations.CreateModel(
name='Footer',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ordering', models.IntegerField(default=0, verbose_name='Kolejność')),
('published', models.BooleanField(default=False, verbose_name='Wpis opublikowany')),
('show_title', models.BooleanField(default=True, verbose_name='Pokaż tytuł')),
('title', models.CharField(blank=True, default='', max_length=250, verbose_name='Tytuł')),
('content', tinymce.models.HTMLField(blank=True, default='', verbose_name='Treść')),
('buttons', models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:<br /> <code><br /> tekst1 -> link<br /> teskt2 | link<br /> ...<br /> </code><br /> Symbol <code>-></code> oznacza, że link będzie otwarty w nowej karcie<br /> Symbol <code>|</code> oznacza, że link będzie otwarty w tej samej karcie<br /> Na przykład:<br /> <code><br /> pzbs -> https://pzbs.pl<br /> fotogaleria | https://galeria.podlaskizbs.pl<br /> cezar -> https://www.msc.com.pl/cezar<br /> </code><br /> PZBS i Cezar zostaną otwarte w nowej karcie<br /> <b>UWAGA !!</b><br /> Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:<br /> <code><br /> -> link do wyników<br /> fotogaleria -> link do fotogalerii<br /> </code><br /> Wtedy pokaże się <b>tylko przycisk fotogalerii</b><br /> ', verbose_name='Przyciski')),
('created_at', models.DateTimeField(auto_now_add=True)),
],
options={
'verbose_name': 'Stopka',
'verbose_name_plural': 'Stopki',
'ordering': ['ordering'],
'abstract': False,
},
),
]

View File

@ -1,4 +1,4 @@
from django.db import models from django.db import models, transaction
from django.urls.base import reverse_lazy from django.urls.base import reverse_lazy
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from tinymce.models import HTMLField from tinymce.models import HTMLField
@ -55,3 +55,53 @@ class GrandPrixW(OrderableModel):
class Meta(OrderableModel.Meta): class Meta(OrderableModel.Meta):
verbose_name = 'Grand Prix Województwa' verbose_name = 'Grand Prix Województwa'
verbose_name_plural = 'Grand Prix Województwa' verbose_name_plural = 'Grand Prix Województwa'
class PublishableModel(models.Model):
published = models.BooleanField("Wpis opublikowany", default=False)
@classmethod
def Published(cls):
return cls.objects.filter(published=True)
class Meta():
abstract = True
class SingletonModel(PublishableModel):
class Meta:
abstract = True
def save(self, *args, **kwargs):
if not self.published:
return super().save(*args, **kwargs)
with transaction.atomic():
self.__class__.objects.filter(published=True).update(published=False)
return super().save(*args, **kwargs)
@classmethod
def Get(cls):
return cls.objects.filter(published=True).first()
class PostableModel(PublishableModel, OrderableModel):
reverse_href = ""
show_title = models.BooleanField("Pokaż tytuł", default=True)
title = models.CharField("Tytuł", default="", blank=True, max_length=250)
content = HTMLField("Treść", default="", blank=True)
buttons = models.TextField(
"Przyciski", default="", blank=True, help_text=buttons_help_text
)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title or "(brak tytułu)"
class Meta(OrderableModel.Meta):
abstract = True
class Footer(PostableModel, SingletonModel):
class Meta(OrderableModel.Meta):
verbose_name = "Stopka"
verbose_name_plural = "Stopki"

View File

@ -2,59 +2,88 @@
DJANGO Admin styles DJANGO Admin styles
*/ */
@import url(fonts.css);
/* VARIABLE DEFINITIONS */ /* VARIABLE DEFINITIONS */
html[data-theme="light"],
:root { :root {
--primary: #79aec8; --primary: #79aec8;
--secondary: #417690; --secondary: #417690;
--accent: #f5dd5d; --accent: #f5dd5d;
--primary-fg: #fff; --primary-fg: #fff;
--body-fg: #333; --body-fg: #333;
--body-bg: #fff; --body-bg: #fff;
--body-quiet-color: #666; --body-quiet-color: #666;
--body-loud-color: #000; --body-loud-color: #000;
--header-color: #ffc; --header-color: #ffc;
--header-branding-color: var(--accent); --header-branding-color: var(--accent);
--header-bg: var(--secondary); --header-bg: var(--secondary);
--header-link-color: var(--primary-fg); --header-link-color: var(--primary-fg);
--breadcrumbs-fg: #c4dce8; --breadcrumbs-fg: #c4dce8;
--breadcrumbs-link-fg: var(--body-bg); --breadcrumbs-link-fg: var(--body-bg);
--breadcrumbs-bg: var(--primary); --breadcrumbs-bg: #264b5d;
--link-fg: #447e9b; --link-fg: #417893;
--link-hover-color: #036; --link-hover-color: #036;
--link-selected-fg: #5b80b2; --link-selected-fg: var(--secondary);
--hairline-color: #e8e8e8; --hairline-color: #e8e8e8;
--border-color: #ccc; --border-color: #ccc;
--error-fg: #ba2121; --error-fg: #ba2121;
--message-success-bg: #dfd; --message-success-bg: #dfd;
--message-warning-bg: #ffc; --message-warning-bg: #ffc;
--message-error-bg: #ffefef; --message-error-bg: #ffefef;
--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 */
--selected-row: #ffc; --selected-row: #ffc;
--button-fg: #fff; --button-fg: #fff;
--button-bg: var(--primary); --button-bg: var(--secondary);
--button-hover-bg: #609ab6; --button-hover-bg: #205067;
--default-button-bg: var(--secondary); --default-button-bg: #205067;
--default-button-hover-bg: #205067; --default-button-hover-bg: var(--secondary);
--close-button-bg: #888; /* Previously #bbb, contrast 1.92 */ --close-button-bg: #747474;
--close-button-hover-bg: #747474; --close-button-hover-bg: #333;
--delete-button-bg: #ba2121; --delete-button-bg: #ba2121;
--delete-button-hover-bg: #a41515; --delete-button-hover-bg: #a41515;
--object-tools-fg: var(--button-fg); --object-tools-fg: var(--button-fg);
--object-tools-bg: var(--close-button-bg); --object-tools-bg: var(--close-button-bg);
--object-tools-hover-bg: var(--close-button-hover-bg); --object-tools-hover-bg: var(--close-button-hover-bg);
--font-family-primary:
"Segoe UI",
system-ui,
Roboto,
"Helvetica Neue",
Arial,
sans-serif,
"Apple Color Emoji",
"Segoe UI Emoji",
"Segoe UI Symbol",
"Noto Color Emoji";
--font-family-monospace:
ui-monospace,
Menlo,
Monaco,
"Cascadia Mono",
"Segoe UI Mono",
"Roboto Mono",
"Oxygen Mono",
"Ubuntu Monospace",
"Source Code Pro",
"Fira Mono",
"Droid Sans Mono",
"Courier New",
monospace,
"Apple Color Emoji",
"Segoe UI Emoji",
"Segoe UI Symbol",
"Noto Color Emoji";
} }
html, body { html, body {
@ -65,7 +94,7 @@ body {
margin: 0; margin: 0;
padding: 0; padding: 0;
font-size: 0.875rem; font-size: 0.875rem;
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; font-family: var(--font-family-primary);
color: var(--body-fg); color: var(--body-fg);
background: var(--body-bg); background: var(--body-bg);
} }
@ -73,7 +102,7 @@ body {
/* LINKS */ /* LINKS */
a:link, a:visited { a:link, a:visited {
color: var(--link-fg); color: var(--body-fg);
text-decoration: none; text-decoration: none;
transition: color 0.15s, background 0.15s; transition: color 0.15s, background 0.15s;
} }
@ -163,7 +192,7 @@ li ul {
li, dt, dd { li, dt, dd {
font-size: 0.8125rem; font-size: 0.8125rem;
line-height: 20px; line-height: 1.25rem;
} }
dt { dt {
@ -197,7 +226,7 @@ blockquote {
} }
code, pre { code, pre {
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; font-family: var(--font-family-monospace);
color: var(--body-quiet-color); color: var(--body-quiet-color);
font-size: 0.75rem; font-size: 0.75rem;
overflow-x: auto; overflow-x: auto;
@ -277,7 +306,7 @@ table {
td, th { td, th {
font-size: 0.8125rem; font-size: 0.8125rem;
line-height: 16px; line-height: 1rem;
border-bottom: 1px solid var(--hairline-color); border-bottom: 1px solid var(--hairline-color);
vertical-align: top; vertical-align: top;
padding: 8px; padding: 8px;
@ -441,7 +470,7 @@ input, textarea, select, .form-row p, form .button {
margin: 2px 0; margin: 2px 0;
padding: 2px 3px; padding: 2px 3px;
vertical-align: middle; vertical-align: middle;
font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; font-family: var(--font-family-primary);
font-weight: normal; font-weight: normal;
font-size: 0.8125rem; font-size: 0.8125rem;
} }
@ -470,7 +499,7 @@ textarea:focus, select:focus, .vTextField:focus {
} }
select { select {
height: 30px; height: 1.875rem;
} }
select[multiple] { select[multiple] {
@ -506,7 +535,6 @@ a.button {
} }
.button.default, input[type=submit].default, .submit-row input.default { .button.default, input[type=submit].default, .submit-row input.default {
float: right;
border: none; border: none;
font-weight: 400; font-weight: 400;
background: var(--default-button-bg); background: var(--default-button-bg);
@ -556,7 +584,7 @@ input[type=button][disabled].default {
font-weight: 400; font-weight: 400;
font-size: 0.8125rem; font-size: 0.8125rem;
text-align: left; text-align: left;
background: var(--primary); background: var(--header-bg);
color: var(--header-link-color); color: var(--header-link-color);
} }
@ -692,6 +720,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
background: url(../img/icon-viewlink.svg) 0 1px no-repeat; background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
} }
.hidelink {
padding-left: 16px;
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
}
.addlink { .addlink {
padding-left: 16px; padding-left: 16px;
background: url(../img/icon-addlink.svg) 0 1px no-repeat; background: url(../img/icon-addlink.svg) 0 1px no-repeat;
@ -731,7 +764,7 @@ a.deletelink:focus, a.deletelink:hover {
display: block; display: block;
float: left; float: left;
margin-left: 5px; margin-left: 5px;
height: 16px; height: 1rem;
} }
.object-tools a { .object-tools a {
@ -801,10 +834,6 @@ a.deletelink:focus, a.deletelink:hover {
height: 100%; height: 100%;
} }
#container > div {
flex-shrink: 0;
}
#container > .main { #container > .main {
display: flex; display: flex;
flex: 1 0 auto; flex: 1 0 auto;
@ -815,6 +844,20 @@ a.deletelink:focus, a.deletelink:hover {
max-width: 100%; max-width: 100%;
} }
.skip-to-content-link {
position: absolute;
top: -999px;
margin: 5px;
padding: 5px;
background: var(--body-bg);
z-index: 1;
}
.skip-to-content-link:focus {
left: 0px;
top: 0px;
}
#content { #content {
padding: 20px 40px; padding: 20px 40px;
} }
@ -875,7 +918,6 @@ a.deletelink:focus, a.deletelink:hover {
padding: 10px 40px; padding: 10px 40px;
background: var(--header-bg); background: var(--header-bg);
color: var(--header-color); color: var(--header-color);
overflow: hidden;
} }
#header a:link, #header a:visited, #logout-form button { #header a:link, #header a:visited, #logout-form button {
@ -887,18 +929,19 @@ a.deletelink:focus, a.deletelink:hover {
} }
#branding { #branding {
float: left; display: flex;
} }
#branding h1 { #site-name {
padding: 0; padding: 0;
margin: 0 20px 0 0; margin: 0;
margin-inline-end: 20px;
font-weight: 300; font-weight: 300;
font-size: 1.5rem; font-size: 1.5rem;
color: var(--header-branding-color); color: var(--header-branding-color);
} }
#branding h1 a:link, #branding h1 a:visited { #site-name a:link, #site-name a:visited {
color: var(--accent); color: var(--accent);
} }
@ -922,7 +965,7 @@ a.deletelink:focus, a.deletelink:hover {
background: none; background: none;
border: 0; border: 0;
cursor: pointer; cursor: pointer;
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; font-family: var(--font-family-primary);
} }
#user-tools { #user-tools {
@ -1014,8 +1057,8 @@ a.deletelink:focus, a.deletelink:hover {
.delete-confirmation form .cancel-link { .delete-confirmation form .cancel-link {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
height: 15px; height: 0.9375rem;
line-height: 15px; line-height: 0.9375rem;
border-radius: 4px; border-radius: 4px;
padding: 10px 15px; padding: 10px 15px;
color: var(--button-fg); color: var(--button-fg);
@ -1045,6 +1088,9 @@ a.deletelink:focus, a.deletelink:hover {
/* PAGINATOR */ /* PAGINATOR */
.paginator { .paginator {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.8125rem; font-size: 0.8125rem;
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
@ -1087,3 +1133,24 @@ a.deletelink:focus, a.deletelink:hover {
color: white; color: white;
background: var(--link-hover-color); background: var(--link-hover-color);
} }
.paginator input {
margin-left: auto;
}
.base-svgs {
display: none;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
color: var(--body-fg);
background-color: var(--body-bg);
}

View File

@ -90,7 +90,7 @@
} }
#toolbar #searchbar { #toolbar #searchbar {
height: 19px; height: 1.1875rem;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
padding: 2px 5px; padding: 2px 5px;
margin: 0; margin: 0;
@ -153,6 +153,7 @@
font-weight: 400; font-weight: 400;
padding: 0 15px; padding: 0 15px;
margin-bottom: 10px; margin-bottom: 10px;
cursor: pointer;
} }
#changelist-filter details summary > * { #changelist-filter details summary > * {
@ -215,35 +216,32 @@
color: var(--link-hover-color); color: var(--link-hover-color);
} }
#changelist-filter #changelist-filter-clear a { #changelist-filter #changelist-filter-extra-actions {
font-size: 0.8125rem; font-size: 0.8125rem;
padding-bottom: 10px; margin-bottom: 10px;
border-bottom: 1px solid var(--hairline-color); border-bottom: 1px solid var(--hairline-color);
} }
/* DATE DRILLDOWN */ /* DATE DRILLDOWN */
.change-list ul.toplinks { .change-list .toplinks {
display: block; display: flex;
float: left; padding-bottom: 5px;
padding: 0; flex-wrap: wrap;
margin: 0; gap: 3px 17px;
width: 100%;
}
.change-list ul.toplinks li {
padding: 3px 6px;
font-weight: bold; font-weight: bold;
list-style-type: none;
display: inline-block;
} }
.change-list ul.toplinks .date-back a { .change-list .toplinks a {
font-size: 0.8125rem;
}
.change-list .toplinks .date-back {
color: var(--body-quiet-color); color: var(--body-quiet-color);
} }
.change-list ul.toplinks .date-back a:focus, .change-list .toplinks .date-back:focus,
.change-list ul.toplinks .date-back a:hover { .change-list .toplinks .date-back:hover {
color: var(--link-hover-color); color: var(--link-hover-color);
} }
@ -258,16 +256,31 @@
vertical-align: baseline; vertical-align: baseline;
} }
#changelist table tbody tr.selected { /* Once the :has() pseudo-class is supported by all browsers, the tr.selected
selector and the JS adding the class can be removed. */
#changelist tbody tr.selected {
background-color: var(--selected-row); background-color: var(--selected-row);
} }
#changelist tbody tr:has(.action-select:checked) {
background-color: var(--selected-row);
}
@media (forced-colors: active) {
#changelist tbody tr.selected {
background-color: SelectedItem;
}
#changelist tbody tr:has(.action-select:checked) {
background-color: SelectedItem;
}
}
#changelist .actions { #changelist .actions {
padding: 10px; padding: 10px;
background: var(--body-bg); background: var(--body-bg);
border-top: none; border-top: none;
border-bottom: none; border-bottom: none;
line-height: 24px; line-height: 1.5rem;
color: var(--body-quiet-color); color: var(--body-quiet-color);
width: 100%; width: 100%;
} }
@ -286,7 +299,7 @@
#changelist .actions select { #changelist .actions select {
vertical-align: top; vertical-align: top;
height: 24px; height: 1.5rem;
color: var(--body-fg); color: var(--body-fg);
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
border-radius: 4px; border-radius: 4px;
@ -313,7 +326,7 @@
background: var(--body-bg); background: var(--body-bg);
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
cursor: pointer; cursor: pointer;
height: 24px; height: 1.5rem;
line-height: 1; line-height: 1;
padding: 4px 8px; padding: 4px 8px;
margin: 0; margin: 0;

View File

@ -31,3 +31,94 @@
--close-button-hover-bg: #666666; --close-button-hover-bg: #666666;
} }
} }
html[data-theme="dark"] {
--primary: #264b5d;
--primary-fg: #f7f7f7;
--body-fg: #eeeeee;
--body-bg: #121212;
--body-quiet-color: #e0e0e0;
--body-loud-color: #ffffff;
--breadcrumbs-link-fg: #e0e0e0;
--breadcrumbs-bg: var(--primary);
--link-fg: #81d4fa;
--link-hover-color: #4ac1f7;
--link-selected-fg: #6f94c6;
--hairline-color: #272727;
--border-color: #353535;
--error-fg: #e35f5f;
--message-success-bg: #006b1b;
--message-warning-bg: #583305;
--message-error-bg: #570808;
--darkened-bg: #212121;
--selected-bg: #1b1b1b;
--selected-row: #00363a;
--close-button-bg: #333333;
--close-button-hover-bg: #666666;
}
/* THEME SWITCH */
.theme-toggle {
cursor: pointer;
border: none;
padding: 0;
background: transparent;
vertical-align: middle;
margin-inline-start: 5px;
margin-top: -1px;
}
.theme-toggle svg {
vertical-align: middle;
height: 1rem;
width: 1rem;
display: none;
}
/*
Fully hide screen reader text so we only show the one matching the current
theme.
*/
.theme-toggle .visually-hidden {
display: none;
}
html[data-theme="auto"] .theme-toggle .theme-label-when-auto {
display: block;
}
html[data-theme="dark"] .theme-toggle .theme-label-when-dark {
display: block;
}
html[data-theme="light"] .theme-toggle .theme-label-when-light {
display: block;
}
/* ICONS */
.theme-toggle svg.theme-icon-when-auto,
.theme-toggle svg.theme-icon-when-dark,
.theme-toggle svg.theme-icon-when-light {
fill: var(--header-link-color);
color: var(--header-bg);
}
html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto {
display: block;
}
html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
display: block;
}
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
display: block;
}

View File

@ -1,4 +1,7 @@
/* DASHBOARD */ /* DASHBOARD */
.dashboard td, .dashboard th {
word-break: break-word;
}
.dashboard .module table th { .dashboard .module table th {
width: 100%; width: 100%;

View File

@ -22,6 +22,18 @@ form .form-row p {
padding-left: 0; padding-left: 0;
} }
.flex-container {
display: flex;
}
.form-multiline {
flex-wrap: wrap;
}
.form-multiline > div {
padding-bottom: 10px;
}
/* FORM LABELS */ /* FORM LABELS */
label { label {
@ -69,7 +81,7 @@ form ul.inline li {
.aligned label { .aligned label {
display: block; display: block;
padding: 4px 10px 0 0; padding: 4px 10px 0 0;
float: left; min-width: 160px;
width: 160px; width: 160px;
word-wrap: break-word; word-wrap: break-word;
line-height: 1; line-height: 1;
@ -79,14 +91,14 @@ form ul.inline li {
content: ''; content: '';
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
height: 26px; height: 1.625rem;
} }
.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { .aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly {
padding: 6px 0; padding: 6px 0;
margin-top: 0; margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
margin-left: 170px; margin-left: 0;
overflow-wrap: break-word; overflow-wrap: break-word;
} }
@ -117,16 +129,17 @@ form .aligned div.radiolist {
form .aligned p.help, form .aligned p.help,
form .aligned div.help { form .aligned div.help {
clear: left;
margin-top: 0; margin-top: 0;
margin-left: 160px; margin-left: 160px;
padding-left: 10px; padding-left: 10px;
} }
form .aligned label + p.help, form .aligned p.date div.help.timezonewarning,
form .aligned label + div.help { form .aligned p.datetime div.help.timezonewarning,
form .aligned p.time div.help.timezonewarning {
margin-left: 0; margin-left: 0;
padding-left: 0; padding-left: 0;
font-weight: normal;
} }
form .aligned p.help:last-child, form .aligned p.help:last-child,
@ -171,14 +184,7 @@ form .aligned table p {
width: 610px; width: 610px;
} }
.checkbox-row p.help,
.checkbox-row div.help {
margin-left: 0;
padding-left: 0;
}
fieldset .fieldBox { fieldset .fieldBox {
float: left;
margin-right: 20px; margin-right: 20px;
} }
@ -189,6 +195,7 @@ fieldset .fieldBox {
} }
form .wide p, form .wide p,
form .wide ul.errorlist,
form .wide input + p.help, form .wide input + p.help,
form .wide input + div.help { form .wide input + div.help {
margin-left: 200px; margin-left: 200px;
@ -196,7 +203,7 @@ form .wide input + div.help {
form .wide p.help, form .wide p.help,
form .wide div.help { form .wide div.help {
padding-left: 38px; padding-left: 50px;
} }
form div.help ul { form div.help ul {
@ -242,19 +249,21 @@ fieldset.collapsed .collapse-toggle {
/* MONOSPACE TEXTAREAS */ /* MONOSPACE TEXTAREAS */
fieldset.monospace textarea { fieldset.monospace textarea {
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; font-family: var(--font-family-monospace);
} }
/* SUBMIT ROW */ /* SUBMIT ROW */
.submit-row { .submit-row {
padding: 12px 14px 7px; padding: 12px 14px 12px;
margin: 0 0 20px; margin: 0 0 20px;
background: var(--darkened-bg); background: var(--darkened-bg);
border: 1px solid var(--hairline-color); border: 1px solid var(--hairline-color);
border-radius: 4px; border-radius: 4px;
text-align: right;
overflow: hidden; overflow: hidden;
display: flex;
gap: 10px;
flex-wrap: wrap;
} }
body.popup .submit-row { body.popup .submit-row {
@ -262,33 +271,29 @@ body.popup .submit-row {
} }
.submit-row input { .submit-row input {
height: 35px; height: 2.1875rem;
line-height: 15px; line-height: 0.9375rem;
margin: 0 0 5px 5px; }
.submit-row input, .submit-row a {
margin: 0;
} }
.submit-row input.default { .submit-row input.default {
margin: 0 0 5px 8px;
text-transform: uppercase; text-transform: uppercase;
} }
.submit-row p { .submit-row a.deletelink {
margin: 0.3em; margin-left: auto;
}
.submit-row p.deletelink-box {
float: left;
margin: 0;
} }
.submit-row a.deletelink { .submit-row a.deletelink {
display: block; display: block;
background: var(--delete-button-bg); background: var(--delete-button-bg);
border-radius: 4px; border-radius: 4px;
padding: 10px 15px; padding: 0.625rem 0.9375rem;
height: 15px; height: 0.9375rem;
line-height: 15px; line-height: 0.9375rem;
margin-bottom: 5px;
color: var(--button-fg); color: var(--button-fg);
} }
@ -297,9 +302,8 @@ body.popup .submit-row {
background: var(--close-button-bg); background: var(--close-button-bg);
border-radius: 4px; border-radius: 4px;
padding: 10px 15px; padding: 10px 15px;
height: 15px; height: 0.9375rem;
line-height: 15px; line-height: 0.9375rem;
margin: 0 0 0 5px;
color: var(--button-fg); color: var(--button-fg);
} }
@ -307,12 +311,14 @@ body.popup .submit-row {
.submit-row a.deletelink:hover, .submit-row a.deletelink:hover,
.submit-row a.deletelink:active { .submit-row a.deletelink:active {
background: var(--delete-button-hover-bg); background: var(--delete-button-hover-bg);
text-decoration: none;
} }
.submit-row a.closelink:focus, .submit-row a.closelink:focus,
.submit-row a.closelink:hover, .submit-row a.closelink:hover,
.submit-row a.closelink:active { .submit-row a.closelink:active {
background: var(--close-button-hover-bg); background: var(--close-button-hover-bg);
text-decoration: none;
} }
/* CUSTOM FORM FIELDS */ /* CUSTOM FORM FIELDS */
@ -512,8 +518,8 @@ body.popup .submit-row {
} }
.related-lookup { .related-lookup {
width: 16px; width: 1rem;
height: 16px; height: 1rem;
background-image: url(../img/search.svg); background-image: url(../img/search.svg);
} }

View File

@ -59,8 +59,13 @@
content: '\00AB'; content: '\00AB';
} }
.main > #nav-sidebar {
visibility: hidden;
}
.main.shifted > #nav-sidebar { .main.shifted > #nav-sidebar {
margin-left: 0; margin-left: 0;
visibility: visible;
} }
[dir="rtl"] .main.shifted > #nav-sidebar { [dir="rtl"] .main.shifted > #nav-sidebar {
@ -97,6 +102,12 @@
background: var(--selected-row); background: var(--selected-row);
} }
@media (forced-colors: active) {
#nav-sidebar .current-model {
background-color: SelectedItem;
}
}
.main > #nav-sidebar + .content { .main > #nav-sidebar + .content {
max-width: calc(100% - 23px); max-width: calc(100% - 23px);
} }

View File

@ -43,7 +43,7 @@ input[type="submit"], button {
justify-content: flex-start; justify-content: flex-start;
} }
#branding h1 { #site-name {
margin: 0 0 8px; margin: 0 0 8px;
line-height: 1.2; line-height: 1.2;
} }
@ -104,13 +104,13 @@ input[type="submit"], button {
} }
#changelist-search label { #changelist-search label {
line-height: 22px; line-height: 1.375rem;
} }
#toolbar form #searchbar { #toolbar form #searchbar {
flex: 1 0 auto; flex: 1 0 auto;
width: 0; width: 0;
height: 22px; height: 1.375rem;
margin: 0 10px 0 6px; margin: 0 10px 0 6px;
} }
@ -186,12 +186,12 @@ input[type="submit"], button {
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
padding: 6px 8px; padding: 6px 8px;
min-height: 36px; min-height: 2.25rem;
font-size: 0.875rem; font-size: 0.875rem;
} }
.form-row select { .form-row select {
height: 36px; height: 2.25rem;
} }
.form-row select[multiple] { .form-row select[multiple] {
@ -199,12 +199,6 @@ input[type="submit"], button {
min-height: 0; min-height: 0;
} }
fieldset .fieldBox {
float: none;
margin: 0 -10px;
padding: 0 10px;
}
fieldset .fieldBox + .fieldBox { fieldset .fieldBox + .fieldBox {
margin-top: 10px; margin-top: 10px;
padding-top: 10px; padding-top: 10px;
@ -232,37 +226,17 @@ input[type="submit"], button {
} }
.submit-row { .submit-row {
padding: 8px 8px 3px 8px; padding: 8px;
} }
.submit-row a.deletelink { .submit-row a.deletelink {
padding: 10px 7px; padding: 10px 7px;
} }
.submit-row input.default {
margin: 0 0 5px 5px;
}
.button, input[type=submit], input[type=button], .submit-row input, a.button { .button, input[type=submit], input[type=button], .submit-row input, a.button {
padding: 7px; padding: 7px;
} }
/* Related widget */
.related-widget-wrapper {
float: none;
}
.related-widget-wrapper-link + .selector {
max-width: calc(100% - 30px);
margin-right: 15px;
}
select + .related-widget-wrapper-link,
.related-widget-wrapper-link + .related-widget-wrapper-link {
margin-left: 10px;
}
/* Selector */ /* Selector */
.selector { .selector {
@ -280,7 +254,7 @@ input[type="submit"], button {
} }
.selector .selector-filter input { .selector .selector-filter input {
width: auto; width: 100%;
min-height: 0; min-height: 0;
flex: 1 1; flex: 1 1;
} }
@ -302,7 +276,6 @@ input[type="submit"], button {
width: 26px; width: 26px;
height: 52px; height: 52px;
padding: 2px 0; padding: 2px 0;
margin: auto 15px;
border-radius: 20px; border-radius: 20px;
transform: translateY(-10px); transform: translateY(-10px);
} }
@ -346,7 +319,6 @@ input[type="submit"], button {
width: 52px; width: 52px;
height: 26px; height: 26px;
padding: 0 2px; padding: 0 2px;
margin: 15px auto;
transform: none; transform: none;
} }
@ -394,10 +366,6 @@ input[type="submit"], button {
display: none; display: none;
} }
form .form-row p.datetime {
width: 100%;
}
.datetime input { .datetime input {
width: 50%; width: 50%;
max-width: 120px; max-width: 120px;
@ -446,7 +414,7 @@ input[type="submit"], button {
padding: 15px 20px; padding: 15px 20px;
} }
.login #branding h1 { .login #site-name {
margin: 0; margin: 0;
} }
@ -568,8 +536,6 @@ input[type="submit"], button {
.aligned .form-row, .aligned .form-row,
.aligned .form-row > div { .aligned .form-row > div {
display: flex;
flex-wrap: wrap;
max-width: 100vw; max-width: 100vw;
} }
@ -577,6 +543,14 @@ input[type="submit"], button {
width: calc(100vw - 30px); width: calc(100vw - 30px);
} }
.flex-container {
flex-flow: column;
}
.flex-container.checkbox-row {
flex-flow: row;
}
textarea { textarea {
max-width: none; max-width: none;
} }
@ -596,6 +570,7 @@ input[type="submit"], button {
.aligned label { .aligned label {
width: 100%; width: 100%;
min-width: auto;
padding: 0 0 10px; padding: 0 0 10px;
} }
@ -610,10 +585,6 @@ input[type="submit"], button {
max-width: 100%; max-width: 100%;
} }
.aligned .checkbox-row {
align-items: center;
}
.aligned .checkbox-row input { .aligned .checkbox-row input {
flex: 0 1 auto; flex: 0 1 auto;
margin: 0; margin: 0;
@ -632,7 +603,6 @@ input[type="submit"], button {
} }
.aligned p.file-upload { .aligned p.file-upload {
margin-left: 0;
font-size: 0.8125rem; font-size: 0.8125rem;
} }
@ -656,7 +626,8 @@ input[type="submit"], button {
padding: 0; padding: 0;
} }
form .aligned ul { form .aligned ul,
form .aligned ul.errorlist {
margin-left: 0; margin-left: 0;
padding-left: 0; padding-left: 0;
} }
@ -695,23 +666,14 @@ input[type="submit"], button {
align-self: center; align-self: center;
} }
select + .related-widget-wrapper-link,
.related-widget-wrapper-link + .related-widget-wrapper-link {
margin-left: 15px;
}
/* Selector */ /* Selector */
.selector { .selector {
flex-direction: column; flex-direction: column;
} gap: 10px 0;
.selector > * {
float: none;
} }
.selector-available, .selector-chosen { .selector-available, .selector-chosen {
margin-bottom: 0;
flex: 1 1 auto; flex: 1 1 auto;
} }
@ -721,11 +683,9 @@ input[type="submit"], button {
.selector ul.selector-chooser { .selector ul.selector-chooser {
display: block; display: block;
float: none;
width: 52px; width: 52px;
height: 26px; height: 26px;
padding: 0 2px; padding: 0 2px;
margin: 15px auto 20px;
transform: none; transform: none;
} }
@ -823,28 +783,23 @@ input[type="submit"], button {
/* Submit row */ /* Submit row */
.submit-row { .submit-row {
padding: 10px 10px 5px; padding: 10px;
margin: 0 0 15px; margin: 0 0 15px;
display: flex;
flex-direction: column; flex-direction: column;
gap: 8px;
} }
.submit-row > * { .submit-row input, .submit-row input.default, .submit-row a {
width: 100%;
}
.submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink {
float: none;
margin: 0 0 10px;
text-align: center; text-align: center;
} }
.submit-row a.closelink { .submit-row a.closelink {
padding: 10px 0; padding: 10px 0;
text-align: center;
} }
.submit-row p.deletelink-box { .submit-row a.deletelink {
order: 4; margin: 0;
} }
/* Messages */ /* Messages */
@ -966,7 +921,7 @@ input[type="submit"], button {
.calendar-shortcuts { .calendar-shortcuts {
padding: 10px 0; padding: 10px 0;
font-size: 0.75rem; font-size: 0.75rem;
line-height: 12px; line-height: 0.75rem;
} }
.calendar-shortcuts a { .calendar-shortcuts a {

View File

@ -69,7 +69,8 @@
margin-right: 15px; margin-right: 15px;
} }
[dir="rtl"] .aligned ul { [dir="rtl"] .aligned ul,
[dir="rtl"] form .aligned ul.errorlist {
margin-right: 0; margin-right: 0;
} }
@ -77,4 +78,7 @@
margin-left: 0; margin-left: 0;
margin-right: 0; margin-right: 0;
} }
[dir="rtl"] .aligned .vCheckboxLabel {
padding: 1px 5px 0 0;
}
} }

View File

@ -13,7 +13,7 @@ th {
margin-right: 1.5em; margin-right: 1.5em;
} }
.viewlink, .addlink, .changelink { .viewlink, .addlink, .changelink, .hidelink {
padding-left: 0; padding-left: 0;
padding-right: 16px; padding-right: 16px;
background-position: 100% 1px; background-position: 100% 1px;
@ -107,23 +107,25 @@ thead th.sorted .text {
border-left: none; border-left: none;
} }
.paginator .end {
margin-left: 6px;
margin-right: 0;
}
.paginator input {
margin-left: 0;
margin-right: auto;
}
/* FORMS */ /* FORMS */
.aligned label { .aligned label {
padding: 0 0 3px 1em; padding: 0 0 3px 1em;
float: right;
} }
.submit-row { .submit-row a.deletelink {
text-align: left
}
.submit-row p.deletelink-box {
float: right;
}
.submit-row input.default {
margin-left: 0; margin-left: 0;
margin-right: auto;
} }
.vDateField, .vTimeField { .vDateField, .vTimeField {
@ -134,13 +136,11 @@ thead th.sorted .text {
margin-left: 5px; margin-left: 5px;
} }
form .aligned p.help, form .aligned div.help {
clear: right;
}
form .aligned ul { form .aligned ul {
margin-right: 163px; margin-right: 163px;
padding-right: 10px;
margin-left: 0; margin-left: 0;
padding-left: 0;
} }
form ul.inline li { form ul.inline li {
@ -149,12 +149,39 @@ form ul.inline li {
padding-left: 7px; padding-left: 7px;
} }
input[type=submit].default, .submit-row input.default { form .aligned p.help,
float: left; form .aligned div.help {
margin-right: 160px;
padding-right: 10px;
}
form div.help ul,
form .aligned .checkbox-row + .help,
form .aligned p.date div.help.timezonewarning,
form .aligned p.datetime div.help.timezonewarning,
form .aligned p.time div.help.timezonewarning {
margin-right: 0;
padding-right: 0;
}
form .wide p.help, form .wide div.help {
padding-left: 0;
padding-right: 50px;
}
form .wide p,
form .wide ul.errorlist,
form .wide input + p.help,
form .wide input + div.help {
margin-right: 200px;
margin-left: 0px;
}
.submit-row {
text-align: right;
} }
fieldset .fieldBox { fieldset .fieldBox {
float: right;
margin-left: 20px; margin-left: 20px;
margin-right: 0; margin-right: 0;
} }
@ -207,6 +234,38 @@ fieldset .fieldBox {
text-align: right; text-align: right;
} }
.selector-add {
background: url(../img/selector-icons.svg) 0 -64px no-repeat;
}
.active.selector-add:focus, .active.selector-add:hover {
background-position: 0 -80px;
}
.selector-remove {
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
}
.active.selector-remove:focus, .active.selector-remove:hover {
background-position: 0 -112px;
}
a.selector-chooseall {
background: url(../img/selector-icons.svg) right -128px no-repeat;
}
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
background-position: 100% -144px;
}
a.selector-clearall {
background: url(../img/selector-icons.svg) 0 -160px no-repeat;
}
a.active.selector-clearall:focus, a.active.selector-clearall:hover {
background-position: 0 -176px;
}
.inline-deletelink { .inline-deletelink {
float: left; float: left;
} }
@ -237,3 +296,7 @@ form .form-row p.datetime {
margin-left: inherit; margin-left: inherit;
margin-right: 2px; margin-right: 2px;
} }
.selector .selector-chooser {
margin: 0;
}

View File

@ -1,27 +1,23 @@
/* SELECTOR (FILTER INTERFACE) */ /* SELECTOR (FILTER INTERFACE) */
.selector { .selector {
width: 800px;
float: left;
display: flex; display: flex;
flex-grow: 1;
gap: 0 10px;
} }
.selector select { .selector select {
width: 380px;
height: 17.2em; height: 17.2em;
flex: 1 0 auto; flex: 1 0 auto;
overflow: scroll;
width: 100%;
} }
.selector-available, .selector-chosen { .selector-available, .selector-chosen {
width: 380px;
text-align: center; text-align: center;
margin-bottom: 5px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} flex: 1 1;
.selector-chosen select {
border-top: none;
} }
.selector-available h2, .selector-chosen h2 { .selector-available h2, .selector-chosen h2 {
@ -29,9 +25,24 @@
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
} }
.selector-chosen h2 { .selector-chosen .list-footer-display {
border: 1px solid var(--border-color);
border-top: none;
border-radius: 0 0 4px 4px;
margin: 0 0 10px;
padding: 8px;
text-align: center;
background: var(--primary); background: var(--primary);
color: var(--header-link-color); color: var(--header-link-color);
cursor: pointer;
}
.selector-chosen .list-footer-display__clear {
color: var(--breadcrumbs-fg);
}
.selector-chosen h2 {
background: var(--secondary);
color: var(--header-link-color);
} }
.selector .selector-available h2 { .selector .selector-available h2 {
@ -47,6 +58,7 @@
font-size: 0.625rem; font-size: 0.625rem;
margin: 0; margin: 0;
text-align: left; text-align: left;
display: flex;
} }
.selector .selector-filter label, .selector .selector-filter label,
@ -58,10 +70,15 @@
padding: 0; padding: 0;
overflow: hidden; overflow: hidden;
line-height: 1; line-height: 1;
min-width: auto;
} }
.selector .selector-available input { .selector-filter input {
width: 320px; flex-grow: 1;
}
.selector .selector-available input,
.selector .selector-chosen input {
margin-left: 8px; margin-left: 8px;
} }
@ -70,7 +87,7 @@
width: 22px; width: 22px;
background-color: var(--selected-bg); background-color: var(--selected-bg);
border-radius: 10px; border-radius: 10px;
margin: 0 5px; margin: 0;
padding: 0; padding: 0;
transform: translateY(-17px); transform: translateY(-17px);
} }
@ -86,6 +103,15 @@
margin: 0 0 10px; margin: 0 0 10px;
border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px;
} }
.selector .selector-chosen--with-filtered select {
margin: 0;
border-radius: 0;
height: 14em;
}
.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display {
display: none;
}
.selector-add, .selector-remove { .selector-add, .selector-remove {
width: 16px; width: 16px;
@ -125,7 +151,7 @@ a.selector-chooseall, a.selector-clearall {
display: inline-block; display: inline-block;
height: 16px; height: 16px;
text-align: left; text-align: left;
margin: 1px auto 3px; margin: 0 auto;
overflow: hidden; overflow: hidden;
font-weight: bold; font-weight: bold;
line-height: 16px; line-height: 16px;
@ -256,8 +282,8 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
.selector .search-label-icon { .selector .search-label-icon {
background: url(../img/search.svg) 0 0 no-repeat; background: url(../img/search.svg) 0 0 no-repeat;
display: inline-block; display: inline-block;
height: 18px; height: 1.125rem;
width: 18px; width: 1.125rem;
} }
/* DATE AND TIME */ /* DATE AND TIME */
@ -347,10 +373,6 @@ p.file-upload {
font-weight: bold; font-weight: bold;
} }
.aligned p.file-upload {
margin-left: 170px;
}
.file-upload a { .file-upload a {
font-weight: normal; font-weight: normal;
} }
@ -429,7 +451,7 @@ span.clearable-file-input label {
} }
.calendar td.selected a { .calendar td.selected a {
background: var(--primary); background: var(--secondary);
color: var(--button-fg); color: var(--button-fg);
} }
@ -477,7 +499,7 @@ span.clearable-file-input label {
background: var(--body-bg); background: var(--body-bg);
color: var(--body-quiet-color); color: var(--body-quiet-color);
font-size: 0.6875rem; font-size: 0.6875rem;
line-height: 11px; line-height: 0.6875rem;
border-top: 1px solid var(--hairline-color); border-top: 1px solid var(--hairline-color);
padding: 8px 0; padding: 8px 0;
} }
@ -516,17 +538,17 @@ span.clearable-file-input label {
margin: 0; margin: 0;
padding: 4px 0; padding: 4px 0;
font-size: 0.75rem; font-size: 0.75rem;
background: #eee; background: var(--close-button-bg);
border-top: 1px solid var(--border-color); border-top: 1px solid var(--border-color);
color: var(--body-fg); color: var(--button-fg);
} }
.calendar-cancel:focus, .calendar-cancel:hover { .calendar-cancel:focus, .calendar-cancel:hover {
background: #ddd; background: var(--close-button-hover-bg);
} }
.calendar-cancel a { .calendar-cancel a {
color: black; color: var(--button-fg);
display: block; display: block;
} }
@ -557,24 +579,25 @@ ul.timelist, .timelist li {
/* RELATED WIDGET WRAPPER */ /* RELATED WIDGET WRAPPER */
.related-widget-wrapper { .related-widget-wrapper {
float: left; /* display properly in form rows with multiple fields */ display: flex;
overflow: hidden; /* clear floated contents */ gap: 0 10px;
flex-grow: 1;
flex-wrap: wrap;
margin-bottom: 5px;
} }
.related-widget-wrapper-link { .related-widget-wrapper-link {
opacity: 0.3; opacity: .6;
filter: grayscale(1);
} }
.related-widget-wrapper-link:link { .related-widget-wrapper-link:link {
opacity: .8;
}
.related-widget-wrapper-link:link:focus,
.related-widget-wrapper-link:link:hover {
opacity: 1; opacity: 1;
filter: grayscale(0);
} }
select + .related-widget-wrapper-link, /* GIS MAPS */
.related-widget-wrapper-link + .related-widget-wrapper-link { .dj_map {
margin-left: 7px; width: 600px;
height: 400px;
} }

View File

@ -0,0 +1,3 @@
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
<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"/>
</svg>

After

Width:  |  Height:  |  Size: 784 B

View File

@ -41,6 +41,10 @@
} }
SelectBox.redisplay(id); SelectBox.redisplay(id);
}, },
get_hidden_node_count(id) {
const cache = SelectBox.cache[id] || [];
return cache.filter(node => node.displayed === 0).length;
},
delete_from_cache: function(id, value) { delete_from_cache: function(id, value) {
let delete_index = null; let delete_index = null;
const cache = SelectBox.cache[id]; const cache = SelectBox.cache[id];

View File

@ -30,6 +30,9 @@ Requires core.js and SelectBox.js.
// <div class="selector"> or <div class="selector stacked"> // <div class="selector"> or <div class="selector stacked">
const selector_div = quickElement('div', from_box.parentNode); const selector_div = quickElement('div', from_box.parentNode);
// Make sure the selector div is at the beginning so that the
// add link would be displayed to the right of the widget.
from_box.parentNode.prepend(selector_div);
selector_div.className = is_stacked ? 'selector stacked' : 'selector'; selector_div.className = is_stacked ? 'selector stacked' : 'selector';
// <div class="selector-available"> // <div class="selector-available">
@ -78,7 +81,7 @@ Requires core.js and SelectBox.js.
remove_link.className = 'selector-remove'; remove_link.className = 'selector-remove';
// <div class="selector-chosen"> // <div class="selector-chosen">
const selector_chosen = quickElement('div', selector_div); const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen');
selector_chosen.className = 'selector-chosen'; selector_chosen.className = 'selector-chosen';
const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
quickElement( quickElement(
@ -93,9 +96,30 @@ Requires core.js and SelectBox.js.
[field_name] [field_name]
) )
); );
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
filter_selected_p.className = 'selector-filter';
const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input');
quickElement(
'span', search_filter_selected_label, '',
'class', 'help-tooltip search-label-icon',
'title', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name])
);
filter_selected_p.appendChild(document.createTextNode(' '));
const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
filter_selected_input.id = field_id + '_selected_input';
const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name); const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name);
to_box.className = 'filtered'; to_box.className = 'filtered';
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text');
quickElement('span', warning_footer, ' (click to clear)', 'class', 'list-footer-display__clear');
const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link');
clear_all.className = 'selector-clearall'; clear_all.className = 'selector-clearall';
@ -106,6 +130,8 @@ Requires core.js and SelectBox.js.
if (elem.classList.contains('active')) { if (elem.classList.contains('active')) {
move_func(from, to); move_func(from, to);
SelectFilter.refresh_icons(field_id); SelectFilter.refresh_icons(field_id);
SelectFilter.refresh_filtered_selects(field_id);
SelectFilter.refresh_filtered_warning(field_id);
} }
e.preventDefault(); e.preventDefault();
}; };
@ -121,14 +147,29 @@ Requires core.js and SelectBox.js.
clear_all.addEventListener('click', function(e) { clear_all.addEventListener('click', function(e) {
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from');
}); });
warning_footer.addEventListener('click', function(e) {
filter_selected_input.value = '';
SelectBox.filter(field_id + '_to', '');
SelectFilter.refresh_filtered_warning(field_id);
SelectFilter.refresh_icons(field_id);
});
filter_input.addEventListener('keypress', function(e) { filter_input.addEventListener('keypress', function(e) {
SelectFilter.filter_key_press(e, field_id); SelectFilter.filter_key_press(e, field_id, '_from', '_to');
}); });
filter_input.addEventListener('keyup', function(e) { filter_input.addEventListener('keyup', function(e) {
SelectFilter.filter_key_up(e, field_id); SelectFilter.filter_key_up(e, field_id, '_from');
}); });
filter_input.addEventListener('keydown', function(e) { filter_input.addEventListener('keydown', function(e) {
SelectFilter.filter_key_down(e, field_id); SelectFilter.filter_key_down(e, field_id, '_from', '_to');
});
filter_selected_input.addEventListener('keypress', function(e) {
SelectFilter.filter_key_press(e, field_id, '_to', '_from');
});
filter_selected_input.addEventListener('keyup', function(e) {
SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input');
});
filter_selected_input.addEventListener('keydown', function(e) {
SelectFilter.filter_key_down(e, field_id, '_to', '_from');
}); });
selector_div.addEventListener('change', function(e) { selector_div.addEventListener('change', function(e) {
if (e.target.tagName === 'SELECT') { if (e.target.tagName === 'SELECT') {
@ -146,6 +187,7 @@ Requires core.js and SelectBox.js.
} }
}); });
from_box.closest('form').addEventListener('submit', function() { from_box.closest('form').addEventListener('submit', function() {
SelectBox.filter(field_id + '_to', '');
SelectBox.select_all(field_id + '_to'); SelectBox.select_all(field_id + '_to');
}); });
SelectBox.init(field_id + '_from'); SelectBox.init(field_id + '_from');
@ -163,6 +205,24 @@ Requires core.js and SelectBox.js.
field.required = false; field.required = false;
return any_selected; return any_selected;
}, },
refresh_filtered_warning: function(field_id) {
const count = SelectBox.get_hidden_node_count(field_id + '_to');
const selector = document.getElementById(field_id + '_selector_chosen');
const warning = document.getElementById(field_id + '_list-footer-display-text');
selector.className = selector.className.replace('selector-chosen--with-filtered', '');
warning.textContent = interpolate(ngettext(
'%s selected option not visible',
'%s selected options not visible',
count
), [count]);
if(count > 0) {
selector.className += ' selector-chosen--with-filtered';
}
},
refresh_filtered_selects: function(field_id) {
SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value);
SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value);
},
refresh_icons: function(field_id) { refresh_icons: function(field_id) {
const from = document.getElementById(field_id + '_from'); const from = document.getElementById(field_id + '_from');
const to = document.getElementById(field_id + '_to'); const to = document.getElementById(field_id + '_to');
@ -172,39 +232,47 @@ Requires core.js and SelectBox.js.
// Active if the corresponding box isn't empty // Active if the corresponding box isn't empty
document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option')); document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option'));
document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option')); document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option'));
SelectFilter.refresh_filtered_warning(field_id);
}, },
filter_key_press: function(event, field_id) { filter_key_press: function(event, field_id, source, target) {
const from = document.getElementById(field_id + '_from'); const source_box = document.getElementById(field_id + source);
// don't submit form if user pressed Enter // don't submit form if user pressed Enter
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) {
from.selectedIndex = 0; source_box.selectedIndex = 0;
SelectBox.move(field_id + '_from', field_id + '_to'); SelectBox.move(field_id + source, field_id + target);
from.selectedIndex = 0; source_box.selectedIndex = 0;
event.preventDefault(); event.preventDefault();
} }
}, },
filter_key_up: function(event, field_id) { filter_key_up: function(event, field_id, source, filter_input) {
const from = document.getElementById(field_id + '_from'); const input = filter_input || '_input';
const temp = from.selectedIndex; const source_box = document.getElementById(field_id + source);
SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); const temp = source_box.selectedIndex;
from.selectedIndex = temp; SelectBox.filter(field_id + source, document.getElementById(field_id + input).value);
source_box.selectedIndex = temp;
SelectFilter.refresh_filtered_warning(field_id);
SelectFilter.refresh_icons(field_id);
}, },
filter_key_down: function(event, field_id) { filter_key_down: function(event, field_id, source, target) {
const from = document.getElementById(field_id + '_from'); const source_box = document.getElementById(field_id + source);
// right key (39) or left key (37)
const direction = source === '_from' ? 39 : 37;
// right arrow -- move across // right arrow -- move across
if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) {
const old_index = from.selectedIndex; const old_index = source_box.selectedIndex;
SelectBox.move(field_id + '_from', field_id + '_to'); SelectBox.move(field_id + source, field_id + target);
from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; SelectFilter.refresh_filtered_selects(field_id);
SelectFilter.refresh_filtered_warning(field_id);
source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index;
return; return;
} }
// down arrow -- wrap around // down arrow -- wrap around
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) {
from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1;
} }
// up arrow -- wrap around // up arrow -- wrap around
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) {
from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1;
} }
} }
}; };

View File

@ -179,6 +179,9 @@
} }
}); });
} }
// Sync counter when navigating to the page, such as through the back
// button.
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
}; };
// Call function fn when the DOM is loaded and ready. If it is already // Call function fn when the DOM is loaded and ready. If it is already

View File

@ -90,10 +90,9 @@
} }
message = interpolate(message, [timezoneOffset]); message = interpolate(message, [timezoneOffset]);
const warning = document.createElement('span'); const warning = document.createElement('div');
warning.className = warningClass; warning.classList.add('help', warningClass);
warning.textContent = message; warning.textContent = message;
inp.parentNode.appendChild(document.createElement('br'));
inp.parentNode.appendChild(warning); inp.parentNode.appendChild(warning);
}, },
// Add clock widget to a given field // Add clock widget to a given field

View File

@ -26,13 +26,11 @@
} }
function addPopupIndex(name) { function addPopupIndex(name) {
name = name + "__" + (popupIndex + 1); return name + "__" + (popupIndex + 1);
return name;
} }
function removePopupIndex(name) { function removePopupIndex(name) {
name = name.replace(new RegExp("__" + (popupIndex + 1) + "$"), ''); return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), '');
return name;
} }
function showAdminPopup(triggeringLink, name_regexp, add_popup) { function showAdminPopup(triggeringLink, name_regexp, add_popup) {
@ -81,9 +79,11 @@
siblings.each(function() { siblings.each(function() {
const elm = $(this); const elm = $(this);
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
elm.removeAttr('aria-disabled');
}); });
} else { } else {
siblings.removeAttr('href'); siblings.removeAttr('href');
siblings.attr('aria-disabled', true);
} }
} }

View File

@ -36,6 +36,24 @@ depends on core.js for utility functions like removeChildren or quickElement
pgettext('abbrev. month December', 'Dec') pgettext('abbrev. month December', 'Dec')
], ],
daysOfWeek: [ daysOfWeek: [
gettext('Sunday'),
gettext('Monday'),
gettext('Tuesday'),
gettext('Wednesday'),
gettext('Thursday'),
gettext('Friday'),
gettext('Saturday')
],
daysOfWeekAbbrev: [
pgettext('abbrev. day Sunday', 'Sun'),
pgettext('abbrev. day Monday', 'Mon'),
pgettext('abbrev. day Tuesday', 'Tue'),
pgettext('abbrev. day Wednesday', 'Wed'),
pgettext('abbrev. day Thursday', 'Thur'),
pgettext('abbrev. day Friday', 'Fri'),
pgettext('abbrev. day Saturday', 'Sat')
],
daysOfWeekInitial: [
pgettext('one letter Sunday', 'S'), pgettext('one letter Sunday', 'S'),
pgettext('one letter Monday', 'M'), pgettext('one letter Monday', 'M'),
pgettext('one letter Tuesday', 'T'), pgettext('one letter Tuesday', 'T'),
@ -98,7 +116,7 @@ depends on core.js for utility functions like removeChildren or quickElement
// Draw days-of-week header // Draw days-of-week header
let tableRow = quickElement('tr', tableBody); let tableRow = quickElement('tr', tableBody);
for (let i = 0; i < 7; i++) { for (let i = 0; i < 7; i++) {
quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
} }
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();

View File

@ -85,6 +85,18 @@ function findPosY(obj) {
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
}; };
Date.prototype.getAbbrevDayName = function() {
return typeof window.CalendarNamespace === "undefined"
? '0' + this.getDay()
: window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()];
};
Date.prototype.getFullDayName = function() {
return typeof window.CalendarNamespace === "undefined"
? '0' + this.getDay()
: window.CalendarNamespace.daysOfWeek[this.getDay()];
};
Date.prototype.getAbbrevMonthName = function() { Date.prototype.getAbbrevMonthName = function() {
return typeof window.CalendarNamespace === "undefined" return typeof window.CalendarNamespace === "undefined"
? this.getTwoDigitMonth() ? this.getTwoDigitMonth()
@ -99,6 +111,8 @@ function findPosY(obj) {
Date.prototype.strftime = function(format) { Date.prototype.strftime = function(format) {
const fields = { const fields = {
a: this.getAbbrevDayName(),
A: this.getFullDayName(),
b: this.getAbbrevMonthName(), b: this.getAbbrevMonthName(),
B: this.getFullMonthName(), B: this.getFullMonthName(),
c: this.toString(), c: this.toString(),
@ -119,11 +133,11 @@ function findPosY(obj) {
let result = '', i = 0; let result = '', i = 0;
while (i < format.length) { while (i < format.length) {
if (format.charAt(i) === '%') { if (format.charAt(i) === '%') {
result = result + fields[format.charAt(i + 1)]; result += fields[format.charAt(i + 1)];
++i; ++i;
} }
else { else {
result = result + format.charAt(i); result += format.charAt(i);
} }
++i; ++i;
} }

View File

@ -11,7 +11,7 @@
} }
Object.entries(filters).forEach(([key, value]) => { Object.entries(filters).forEach(([key, value]) => {
const detailElement = document.querySelector(`[data-filter-title='${key}']`); const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`);
// Check if the filter is present, it could be from other view. // Check if the filter is present, it could be from other view.
if (detailElement) { if (detailElement) {

View File

@ -2,47 +2,24 @@
{ {
const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');
if (toggleNavSidebar !== null) { if (toggleNavSidebar !== null) {
const navLinks = document.querySelectorAll('#nav-sidebar a'); const navSidebar = document.getElementById('nav-sidebar');
function disableNavLinkTabbing() {
for (const navLink of navLinks) {
navLink.tabIndex = -1;
}
}
function enableNavLinkTabbing() {
for (const navLink of navLinks) {
navLink.tabIndex = 0;
}
}
function disableNavFilterTabbing() {
document.getElementById('nav-filter').tabIndex = -1;
}
function enableNavFilterTabbing() {
document.getElementById('nav-filter').tabIndex = 0;
}
const main = document.getElementById('main'); const main = document.getElementById('main');
let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
if (navSidebarIsOpen === null) { if (navSidebarIsOpen === null) {
navSidebarIsOpen = 'true'; navSidebarIsOpen = 'true';
} }
if (navSidebarIsOpen === 'false') {
disableNavLinkTabbing();
disableNavFilterTabbing();
}
main.classList.toggle('shifted', navSidebarIsOpen === 'true'); main.classList.toggle('shifted', navSidebarIsOpen === 'true');
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
toggleNavSidebar.addEventListener('click', function() { toggleNavSidebar.addEventListener('click', function() {
if (navSidebarIsOpen === 'true') { if (navSidebarIsOpen === 'true') {
navSidebarIsOpen = 'false'; navSidebarIsOpen = 'false';
disableNavLinkTabbing();
disableNavFilterTabbing();
} else { } else {
navSidebarIsOpen = 'true'; navSidebarIsOpen = 'true';
enableNavLinkTabbing();
enableNavFilterTabbing();
} }
localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
main.classList.toggle('shifted'); main.classList.toggle('shifted');
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
}); });
} }

View File

@ -0,0 +1,56 @@
'use strict';
{
window.addEventListener('load', function(e) {
function setTheme(mode) {
if (mode !== "light" && mode !== "dark" && mode !== "auto") {
console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);
mode = "auto";
}
document.documentElement.dataset.theme = mode;
localStorage.setItem("theme", mode);
}
function cycleTheme() {
const currentTheme = localStorage.getItem("theme") || "auto";
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
if (prefersDark) {
// Auto (dark) -> Light -> Dark
if (currentTheme === "auto") {
setTheme("light");
} else if (currentTheme === "light") {
setTheme("dark");
} else {
setTheme("auto");
}
} else {
// Auto (light) -> Dark -> Light
if (currentTheme === "auto") {
setTheme("dark");
} else if (currentTheme === "dark") {
setTheme("light");
} else {
setTheme("auto");
}
}
}
function initTheme() {
// set theme defined in localStorage if there is one, or fallback to auto mode
const currentTheme = localStorage.getItem("theme");
currentTheme ? setTheme(currentTheme) : setTheme("auto");
}
function setupTheme() {
// Attach event handlers for toggling themes
const buttons = document.getElementsByClassName("theme-toggle");
Array.from(buttons).forEach((btn) => {
btn.addEventListener("click", cycleTheme);
});
initTheme();
}
setupTheme();
});
}

View File

@ -163,8 +163,7 @@
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
s = s.substring(0, num_chars); // trim to first num_chars chars s = s.substring(0, num_chars); // trim to first num_chars chars
s = s.replace(/-+$/g, ''); // trim any trailing hyphens return s.replace(/-+$/g, ''); // trim any trailing hyphens
return s;
} }
window.URLify = URLify; window.URLify = URLify;
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
The MIT License The MIT License
Copyright (c) 2007-2017 Steven Levithan <http://xregexp.com/> Copyright (c) 2007-present Steven Levithan <http://xregexp.com/>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1295,38 +1295,31 @@ select {
margin: 1rem; margin: 1rem;
} }
.m-0 {
margin: 0px;
}
.mx-auto { .mx-auto {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.my-0 {
margin-top: 0px;
margin-bottom: 0px;
}
.my-2 { .my-2 {
margin-top: 0.5rem; margin-top: 0.5rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.my-5 { .my-0 {
margin-top: 1.25rem; margin-top: 0px;
margin-bottom: 1.25rem; margin-bottom: 0px;
} }
.my-3 { .mb-4 {
margin-top: 0.75rem; margin-bottom: 1rem;
margin-bottom: 0.75rem;
} }
.my-6 { .mt-2 {
margin-top: 1.5rem; margin-top: 0.5rem;
margin-bottom: 1.5rem; }
.mt-8 {
margin-top: 2rem;
} }
.mb-2 { .mb-2 {
@ -1341,18 +1334,6 @@ select {
margin-top: 1.5rem; margin-top: 1.5rem;
} }
.mb-4 {
margin-bottom: 1rem;
}
.mt-2 {
margin-top: 0.5rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.block { .block {
display: block; display: block;
} }
@ -1377,8 +1358,8 @@ select {
display: none; display: none;
} }
.h-auto { .h-full {
height: auto; height: 100%;
} }
.h-screen { .h-screen {
@ -1405,18 +1386,26 @@ select {
width: 9rem; width: 9rem;
} }
.max-w-screen-lg {
max-width: 1024px;
}
.max-w-full { .max-w-full {
max-width: 100%; max-width: 100%;
} }
.max-w-sm {
max-width: 24rem;
}
.max-w-screen-lg {
max-width: 1024px;
}
.max-w-screen-md { .max-w-screen-md {
max-width: 768px; max-width: 768px;
} }
.basis-1\/3 {
flex-basis: 33.333333%;
}
.basis-1\/2 { .basis-1\/2 {
flex-basis: 50%; flex-basis: 50%;
} }
@ -1445,6 +1434,10 @@ select {
place-items: center; place-items: center;
} }
.content-start {
align-content: flex-start;
}
.items-center { .items-center {
align-items: center; align-items: center;
} }
@ -1461,22 +1454,22 @@ select {
justify-content: space-around; justify-content: space-around;
} }
.gap-6 { .gap-4 {
gap: 1.5rem; gap: 1rem;
} }
.gap-3 { .gap-3 {
gap: 0.75rem; gap: 0.75rem;
} }
.gap-4 {
gap: 1rem;
}
.gap-8 { .gap-8 {
gap: 2rem; gap: 2rem;
} }
.gap-6 {
gap: 1.5rem;
}
.self-center { .self-center {
align-self: center; align-self: center;
} }
@ -1493,35 +1486,44 @@ select {
border-bottom-width: 1px; border-bottom-width: 1px;
} }
.border-t {
border-top-width: 1px;
}
.border-dashed { .border-dashed {
border-style: dashed; border-style: dashed;
} }
.border-blue-100 {
--tw-border-opacity: 1;
border-color: rgb(219 234 254 / var(--tw-border-opacity));
}
.border-stone-200 {
--tw-border-opacity: 1;
border-color: rgb(231 229 228 / var(--tw-border-opacity));
}
.border-slate-400 { .border-slate-400 {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(148 163 184 / var(--tw-border-opacity)); border-color: rgb(148 163 184 / var(--tw-border-opacity));
} }
.border-stone-200 {
--tw-border-opacity: 1;
border-color: rgb(231 229 228 / var(--tw-border-opacity));
}
.border-stone-300 { .border-stone-300 {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(214 211 209 / var(--tw-border-opacity)); border-color: rgb(214 211 209 / var(--tw-border-opacity));
} }
.border-blue-100 {
--tw-border-opacity: 1;
border-color: rgb(219 234 254 / var(--tw-border-opacity));
}
.bg-white { .bg-white {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
} }
.bg-green-100 {
--tw-bg-opacity: 1;
background-color: rgb(220 252 231 / var(--tw-bg-opacity));
}
.bg-blue-50 { .bg-blue-50 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(239 246 255 / var(--tw-bg-opacity)); background-color: rgb(239 246 255 / var(--tw-bg-opacity));
@ -1532,48 +1534,43 @@ select {
background-color: rgb(250 250 249 / var(--tw-bg-opacity)); background-color: rgb(250 250 249 / var(--tw-bg-opacity));
} }
.bg-green-100 {
--tw-bg-opacity: 1;
background-color: rgb(220 252 231 / var(--tw-bg-opacity));
}
.bg-gray-50 { .bg-gray-50 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity)); background-color: rgb(249 250 251 / var(--tw-bg-opacity));
} }
.p-4 {
padding: 1rem;
}
.p-2 { .p-2 {
padding: 0.5rem; padding: 0.5rem;
} }
.p-4 {
padding: 1rem;
}
.p-8 { .p-8 {
padding: 2rem; padding: 2rem;
} }
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.py-4 { .py-4 {
padding-top: 1rem; padding-top: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;
} }
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.py-2 { .py-2 {
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.pb-1 { .pb-1 {
padding-bottom: 0.25rem; padding-bottom: 0.25rem;
} }
@ -1594,6 +1591,19 @@ select {
font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
} }
.text-\[15px\] {
font-size: 15px;
}
.text-\[2\.25rem\] {
font-size: 2.25rem;
}
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem;
}
.text-2xl { .text-2xl {
font-size: 1.5rem; font-size: 1.5rem;
line-height: 2rem; line-height: 2rem;
@ -1609,24 +1619,15 @@ select {
line-height: 1rem; line-height: 1rem;
} }
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem;
}
.text-\[15px\] {
font-size: 15px;
}
.text-\[2\.25rem\] {
font-size: 2.25rem;
}
.text-5xl { .text-5xl {
font-size: 3rem; font-size: 3rem;
line-height: 1; line-height: 1;
} }
.font-medium {
font-weight: 500;
}
.font-light { .font-light {
font-weight: 300; font-weight: 300;
} }
@ -1635,10 +1636,6 @@ select {
font-weight: 400; font-weight: 400;
} }
.font-medium {
font-weight: 500;
}
.font-semibold { .font-semibold {
font-weight: 600; font-weight: 600;
} }
@ -1663,11 +1660,22 @@ select {
letter-spacing: 0em; letter-spacing: 0em;
} }
.text-white {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}
.antialiased { .antialiased {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.shadow-lg {
--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-md { .shadow-md {
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
@ -1872,14 +1880,14 @@ h4 {
margin: 0px; margin: 0px;
} }
.lg\:w-screen {
width: 100vw;
}
.lg\:w-40 { .lg\:w-40 {
width: 10rem; width: 10rem;
} }
.lg\:w-screen {
width: 100vw;
}
.lg\:flex-row { .lg\:flex-row {
flex-direction: row; flex-direction: row;
} }

View File

@ -1295,38 +1295,31 @@ select {
margin: 1rem; margin: 1rem;
} }
.m-0 {
margin: 0px;
}
.mx-auto { .mx-auto {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.my-0 {
margin-top: 0px;
margin-bottom: 0px;
}
.my-2 { .my-2 {
margin-top: 0.5rem; margin-top: 0.5rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.my-5 { .my-0 {
margin-top: 1.25rem; margin-top: 0px;
margin-bottom: 1.25rem; margin-bottom: 0px;
} }
.my-3 { .mb-4 {
margin-top: 0.75rem; margin-bottom: 1rem;
margin-bottom: 0.75rem;
} }
.my-6 { .mt-2 {
margin-top: 1.5rem; margin-top: 0.5rem;
margin-bottom: 1.5rem; }
.mt-8 {
margin-top: 2rem;
} }
.mb-2 { .mb-2 {
@ -1341,18 +1334,6 @@ select {
margin-top: 1.5rem; margin-top: 1.5rem;
} }
.mb-4 {
margin-bottom: 1rem;
}
.mt-2 {
margin-top: 0.5rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.block { .block {
display: block; display: block;
} }
@ -1377,8 +1358,8 @@ select {
display: none; display: none;
} }
.h-auto { .h-full {
height: auto; height: 100%;
} }
.h-screen { .h-screen {
@ -1405,18 +1386,26 @@ select {
width: 9rem; width: 9rem;
} }
.max-w-screen-lg {
max-width: 1024px;
}
.max-w-full { .max-w-full {
max-width: 100%; max-width: 100%;
} }
.max-w-sm {
max-width: 24rem;
}
.max-w-screen-lg {
max-width: 1024px;
}
.max-w-screen-md { .max-w-screen-md {
max-width: 768px; max-width: 768px;
} }
.basis-1\/3 {
flex-basis: 33.333333%;
}
.basis-1\/2 { .basis-1\/2 {
flex-basis: 50%; flex-basis: 50%;
} }
@ -1445,6 +1434,10 @@ select {
place-items: center; place-items: center;
} }
.content-start {
align-content: flex-start;
}
.items-center { .items-center {
align-items: center; align-items: center;
} }
@ -1461,22 +1454,22 @@ select {
justify-content: space-around; justify-content: space-around;
} }
.gap-6 { .gap-4 {
gap: 1.5rem; gap: 1rem;
} }
.gap-3 { .gap-3 {
gap: 0.75rem; gap: 0.75rem;
} }
.gap-4 {
gap: 1rem;
}
.gap-8 { .gap-8 {
gap: 2rem; gap: 2rem;
} }
.gap-6 {
gap: 1.5rem;
}
.self-center { .self-center {
align-self: center; align-self: center;
} }
@ -1493,35 +1486,44 @@ select {
border-bottom-width: 1px; border-bottom-width: 1px;
} }
.border-t {
border-top-width: 1px;
}
.border-dashed { .border-dashed {
border-style: dashed; border-style: dashed;
} }
.border-blue-100 {
--tw-border-opacity: 1;
border-color: rgb(219 234 254 / var(--tw-border-opacity));
}
.border-stone-200 {
--tw-border-opacity: 1;
border-color: rgb(231 229 228 / var(--tw-border-opacity));
}
.border-slate-400 { .border-slate-400 {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(148 163 184 / var(--tw-border-opacity)); border-color: rgb(148 163 184 / var(--tw-border-opacity));
} }
.border-stone-200 {
--tw-border-opacity: 1;
border-color: rgb(231 229 228 / var(--tw-border-opacity));
}
.border-stone-300 { .border-stone-300 {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(214 211 209 / var(--tw-border-opacity)); border-color: rgb(214 211 209 / var(--tw-border-opacity));
} }
.border-blue-100 {
--tw-border-opacity: 1;
border-color: rgb(219 234 254 / var(--tw-border-opacity));
}
.bg-white { .bg-white {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
} }
.bg-green-100 {
--tw-bg-opacity: 1;
background-color: rgb(220 252 231 / var(--tw-bg-opacity));
}
.bg-blue-50 { .bg-blue-50 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(239 246 255 / var(--tw-bg-opacity)); background-color: rgb(239 246 255 / var(--tw-bg-opacity));
@ -1532,48 +1534,43 @@ select {
background-color: rgb(250 250 249 / var(--tw-bg-opacity)); background-color: rgb(250 250 249 / var(--tw-bg-opacity));
} }
.bg-green-100 {
--tw-bg-opacity: 1;
background-color: rgb(220 252 231 / var(--tw-bg-opacity));
}
.bg-gray-50 { .bg-gray-50 {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity)); background-color: rgb(249 250 251 / var(--tw-bg-opacity));
} }
.p-4 {
padding: 1rem;
}
.p-2 { .p-2 {
padding: 0.5rem; padding: 0.5rem;
} }
.p-4 {
padding: 1rem;
}
.p-8 { .p-8 {
padding: 2rem; padding: 2rem;
} }
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.py-4 { .py-4 {
padding-top: 1rem; padding-top: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;
} }
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.py-2 { .py-2 {
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.pb-1 { .pb-1 {
padding-bottom: 0.25rem; padding-bottom: 0.25rem;
} }
@ -1594,6 +1591,19 @@ select {
font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
} }
.text-\[15px\] {
font-size: 15px;
}
.text-\[2\.25rem\] {
font-size: 2.25rem;
}
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem;
}
.text-2xl { .text-2xl {
font-size: 1.5rem; font-size: 1.5rem;
line-height: 2rem; line-height: 2rem;
@ -1609,24 +1619,15 @@ select {
line-height: 1rem; line-height: 1rem;
} }
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem;
}
.text-\[15px\] {
font-size: 15px;
}
.text-\[2\.25rem\] {
font-size: 2.25rem;
}
.text-5xl { .text-5xl {
font-size: 3rem; font-size: 3rem;
line-height: 1; line-height: 1;
} }
.font-medium {
font-weight: 500;
}
.font-light { .font-light {
font-weight: 300; font-weight: 300;
} }
@ -1635,10 +1636,6 @@ select {
font-weight: 400; font-weight: 400;
} }
.font-medium {
font-weight: 500;
}
.font-semibold { .font-semibold {
font-weight: 600; font-weight: 600;
} }
@ -1663,11 +1660,22 @@ select {
letter-spacing: 0em; letter-spacing: 0em;
} }
.text-white {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}
.antialiased { .antialiased {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.shadow-lg {
--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-md { .shadow-md {
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
@ -1872,14 +1880,14 @@ h4 {
margin: 0px; margin: 0px;
} }
.lg\:w-screen {
width: 100vw;
}
.lg\:w-40 { .lg\:w-40 {
width: 10rem; width: 10rem;
} }
.lg\:w-screen {
width: 100vw;
}
.lg\:flex-row { .lg\:flex-row {
flex-direction: row; flex-direction: row;
} }