django-smartbase-admin 1.0.14__py3-none-any.whl → 1.0.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_smartbase_admin/admin/admin_base.py +14 -14
- django_smartbase_admin/admin/site.py +7 -1
- django_smartbase_admin/admin/widgets.py +13 -1
- django_smartbase_admin/engine/admin_base_view.py +14 -0
- django_smartbase_admin/locale/sk/LC_MESSAGES/django.mo +0 -0
- django_smartbase_admin/locale/sk/LC_MESSAGES/django.po +22 -13
- django_smartbase_admin/migrations/0005_sbadminuserconfiguration.py +26 -0
- django_smartbase_admin/models.py +33 -0
- django_smartbase_admin/services/configuration.py +13 -0
- django_smartbase_admin/static/sb_admin/build/tailwind_config_partials/colors.js +4 -0
- django_smartbase_admin/static/sb_admin/css/ckeditor/ckeditor_content_dark.css +208 -0
- django_smartbase_admin/static/sb_admin/dist/calendar.js +1 -1
- django_smartbase_admin/static/sb_admin/dist/calendar_style.css +1 -1
- django_smartbase_admin/static/sb_admin/dist/chart.js +1 -1
- django_smartbase_admin/static/sb_admin/dist/main.js +1 -1
- django_smartbase_admin/static/sb_admin/dist/main_style.css +1 -1
- django_smartbase_admin/static/sb_admin/dist/table.js +1 -1
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Moon.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Sun-one.svg +3 -0
- django_smartbase_admin/static/sb_admin/src/css/_base.css +1 -1
- django_smartbase_admin/static/sb_admin/src/css/_colors.css +257 -82
- django_smartbase_admin/static/sb_admin/src/css/_components.css +1 -1
- django_smartbase_admin/static/sb_admin/src/css/_tabulator.css +2 -2
- django_smartbase_admin/static/sb_admin/src/css/calendar.css +3 -3
- django_smartbase_admin/static/sb_admin/src/css/components/_button.css +1 -1
- django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css +25 -7
- django_smartbase_admin/static/sb_admin/src/css/components/_input.css +33 -2
- django_smartbase_admin/static/sb_admin/src/css/components/_modal.css +1 -1
- django_smartbase_admin/static/sb_admin/src/css/components/_query-builder.css +1 -7
- django_smartbase_admin/static/sb_admin/src/css/style.css +1 -1
- django_smartbase_admin/static/sb_admin/src/js/main.js +58 -15
- django_smartbase_admin/static/sb_admin/src/js/multiselect.js +10 -19
- django_smartbase_admin/static/sb_admin/src/js/utils.js +47 -23
- django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/multiple_choice_field.html +1 -1
- django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html +1 -1
- django_smartbase_admin/templates/sb_admin/navigation.html +9 -7
- django_smartbase_admin/templates/sb_admin/sb_admin_base_no_sidebar.html +1 -1
- django_smartbase_admin/templates/sb_admin/sprites/sb_admin.svg +1 -1
- django_smartbase_admin/templates/sb_admin/tailwind_whitelist.html +2 -1
- django_smartbase_admin/templates/sb_admin/widgets/{checkbox_select.html → checkbox_dropdown.html} +2 -2
- django_smartbase_admin/templates/sb_admin/widgets/radio.html +3 -2
- django_smartbase_admin/templates/sb_admin/widgets/radio_dropdown.html +30 -0
- django_smartbase_admin/views/user_config_view.py +35 -0
- {django_smartbase_admin-1.0.14.dist-info → django_smartbase_admin-1.0.15.dist-info}/METADATA +1 -1
- {django_smartbase_admin-1.0.14.dist-info → django_smartbase_admin-1.0.15.dist-info}/RECORD +47 -41
- {django_smartbase_admin-1.0.14.dist-info → django_smartbase_admin-1.0.15.dist-info}/LICENSE.md +0 -0
- {django_smartbase_admin-1.0.14.dist-info → django_smartbase_admin-1.0.15.dist-info}/WHEEL +0 -0
|
@@ -36,9 +36,6 @@ from django.utils.text import capfirst
|
|
|
36
36
|
from django.utils.translation import gettext_lazy as _
|
|
37
37
|
from django_admin_inline_paginator.admin import TabularInlinePaginated
|
|
38
38
|
from django_htmx.http import trigger_client_event
|
|
39
|
-
from parler.admin import TranslatableAdmin
|
|
40
|
-
|
|
41
|
-
from django_smartbase_admin.engine.field import SBAdminField
|
|
42
39
|
from filer.fields.file import FilerFileField
|
|
43
40
|
from filer.fields.image import AdminImageFormField, FilerImageField
|
|
44
41
|
from nested_admin.formsets import NestedInlineFormSet
|
|
@@ -56,6 +53,8 @@ from django_smartbase_admin.utils import FormFieldsetMixin, is_modal
|
|
|
56
53
|
|
|
57
54
|
parler_enabled = None
|
|
58
55
|
try:
|
|
56
|
+
from parler.admin import TranslatableAdmin
|
|
57
|
+
|
|
59
58
|
from parler.forms import (
|
|
60
59
|
TranslatableModelForm,
|
|
61
60
|
TranslatableModelFormMetaclass,
|
|
@@ -132,7 +131,6 @@ from django_smartbase_admin.engine.const import (
|
|
|
132
131
|
OBJECT_ID_PLACEHOLDER,
|
|
133
132
|
TRANSLATIONS_SELECTED_LANGUAGES,
|
|
134
133
|
ROW_CLASS_FIELD,
|
|
135
|
-
Action,
|
|
136
134
|
)
|
|
137
135
|
from django_smartbase_admin.services.translations import SBAdminTranslationsService
|
|
138
136
|
from django_smartbase_admin.services.views import SBAdminViewService
|
|
@@ -1159,14 +1157,16 @@ class SBAdminGenericStackedInline(SBAdminInline, NestedGenericStackedInline):
|
|
|
1159
1157
|
fieldset_template = "sb_admin/includes/inline_fieldset.html"
|
|
1160
1158
|
|
|
1161
1159
|
|
|
1162
|
-
|
|
1163
|
-
def get_readonly_fields(self, request, obj=...):
|
|
1164
|
-
readonly_fields = super().get_readonly_fields(request, obj)
|
|
1165
|
-
if "sbadmin_translation_status" not in readonly_fields:
|
|
1166
|
-
readonly_fields += ("sbadmin_translation_status",)
|
|
1167
|
-
return readonly_fields
|
|
1160
|
+
if parler_enabled:
|
|
1168
1161
|
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1162
|
+
class SBTranslatableAdmin(SBAdmin, TranslatableAdmin):
|
|
1163
|
+
def get_readonly_fields(self, request, obj=...):
|
|
1164
|
+
readonly_fields = super().get_readonly_fields(request, obj)
|
|
1165
|
+
if "sbadmin_translation_status" not in readonly_fields:
|
|
1166
|
+
readonly_fields += ("sbadmin_translation_status",)
|
|
1167
|
+
return readonly_fields
|
|
1168
|
+
|
|
1169
|
+
def get_fieldsets(self, request, obj=...):
|
|
1170
|
+
fieldsets = super().get_fieldsets(request, obj)
|
|
1171
|
+
fieldsets.append(SBAdminTranslationsService.get_translation_fieldset())
|
|
1172
|
+
return fieldsets
|
|
@@ -33,8 +33,8 @@ class SBAdminSite(admin.AdminSite):
|
|
|
33
33
|
pass
|
|
34
34
|
request.sbadmin_selected_view = selected_view
|
|
35
35
|
kwargs["view"] = selected_view.get_id() if selected_view else None
|
|
36
|
-
request_data = SBAdminViewRequestData.from_request_and_kwargs(request, **kwargs)
|
|
37
36
|
SBAdminThreadLocalService.set_request(request)
|
|
37
|
+
request_data = SBAdminViewRequestData.from_request_and_kwargs(request, **kwargs)
|
|
38
38
|
if selected_view:
|
|
39
39
|
# Initialize SBAdmin, ModelAdmin instances, class-based SBAdminEntrypointView are initialized with request_data
|
|
40
40
|
selected_view.init_view_dynamic(
|
|
@@ -77,6 +77,7 @@ class SBAdminSite(admin.AdminSite):
|
|
|
77
77
|
PasswordChangeView,
|
|
78
78
|
PasswordChangeDoneView,
|
|
79
79
|
)
|
|
80
|
+
from django_smartbase_admin.views.user_config_view import ColorSchemeView
|
|
80
81
|
|
|
81
82
|
urls = [
|
|
82
83
|
path(
|
|
@@ -152,6 +153,11 @@ class SBAdminSite(admin.AdminSite):
|
|
|
152
153
|
self.admin_view(GlobalFilterView.as_view()),
|
|
153
154
|
name="global_filter",
|
|
154
155
|
),
|
|
156
|
+
path(
|
|
157
|
+
"color-scheme",
|
|
158
|
+
self.admin_view(ColorSchemeView.as_view()),
|
|
159
|
+
name="color_scheme",
|
|
160
|
+
),
|
|
155
161
|
path(
|
|
156
162
|
"<str:view>/<str:action>/<str:modifier>",
|
|
157
163
|
self.admin_view(SBAdminEntrypointView.as_view()),
|
|
@@ -190,8 +190,20 @@ class SBAdminRadioWidget(SBAdminBaseWidget, forms.RadioSelect):
|
|
|
190
190
|
)
|
|
191
191
|
|
|
192
192
|
|
|
193
|
+
class SBAdminRadioDropdownWidget(SBAdminBaseWidget, forms.RadioSelect):
|
|
194
|
+
template_name = "sb_admin/widgets/radio_dropdown.html"
|
|
195
|
+
option_template_name = "sb_admin/widgets/radio_option.html"
|
|
196
|
+
|
|
197
|
+
def __init__(self, form_field=None, attrs=None, choices=()):
|
|
198
|
+
super().__init__(
|
|
199
|
+
form_field,
|
|
200
|
+
attrs={"class": "radio radio-list", **(attrs or {})},
|
|
201
|
+
choices=choices,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
|
|
193
205
|
class SBAdminMultipleChoiceWidget(SBAdminBaseWidget, forms.CheckboxSelectMultiple):
|
|
194
|
-
template_name = "sb_admin/widgets/
|
|
206
|
+
template_name = "sb_admin/widgets/checkbox_dropdown.html"
|
|
195
207
|
option_template_name = "sb_admin/widgets/checkbox_option.html"
|
|
196
208
|
|
|
197
209
|
def __init__(self, form_field=None, attrs=None, choices=()):
|
|
@@ -38,6 +38,9 @@ from django_smartbase_admin.engine.const import (
|
|
|
38
38
|
IGNORE_LIST_SELECTION,
|
|
39
39
|
SUPPORTED_FILE_TYPE_ICONS,
|
|
40
40
|
)
|
|
41
|
+
from django_smartbase_admin.services.configuration import (
|
|
42
|
+
SBAdminUserConfigurationService,
|
|
43
|
+
)
|
|
41
44
|
from django_smartbase_admin.services.views import SBAdminViewService
|
|
42
45
|
from django_smartbase_admin.services.xlsx_export import (
|
|
43
46
|
SBAdminXLSXExportService,
|
|
@@ -208,6 +211,16 @@ class SBAdminBaseView(object):
|
|
|
208
211
|
) -> Iterable[SBAdminCustomAction] | None:
|
|
209
212
|
return self.sbadmin_detail_actions
|
|
210
213
|
|
|
214
|
+
def get_color_scheme_context(self, request):
|
|
215
|
+
from django_smartbase_admin.views.user_config_view import ColorSchemeForm
|
|
216
|
+
|
|
217
|
+
user_config = SBAdminUserConfigurationService.get_user_config(request)
|
|
218
|
+
color_scheme_form = ColorSchemeForm(instance=user_config)
|
|
219
|
+
return {
|
|
220
|
+
"user_config": user_config,
|
|
221
|
+
"color_scheme_form": color_scheme_form,
|
|
222
|
+
}
|
|
223
|
+
|
|
211
224
|
def get_global_context(
|
|
212
225
|
self, request, object_id: int | str | None = None
|
|
213
226
|
) -> dict[str, Any]:
|
|
@@ -234,6 +247,7 @@ class SBAdminBaseView(object):
|
|
|
234
247
|
"STATIC_BASE_PATH": static("sb_admin"),
|
|
235
248
|
}
|
|
236
249
|
),
|
|
250
|
+
**self.get_color_scheme_context(request),
|
|
237
251
|
}
|
|
238
252
|
|
|
239
253
|
def get_model_path(self) -> str:
|
|
Binary file
|
|
@@ -7,7 +7,7 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: \n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
|
-
"POT-Creation-Date: 2025-
|
|
10
|
+
"POT-Creation-Date: 2025-07-29 12:46+0200\n"
|
|
11
11
|
"PO-Revision-Date: 2023-11-15 15:21+0100\n"
|
|
12
12
|
"Last-Translator: \n"
|
|
13
13
|
"Language-Team: \n"
|
|
@@ -206,6 +206,18 @@ msgctxt "Tree widget"
|
|
|
206
206
|
msgid "No data."
|
|
207
207
|
msgstr "Žiadne dáta."
|
|
208
208
|
|
|
209
|
+
msgid "System"
|
|
210
|
+
msgstr "Systém"
|
|
211
|
+
|
|
212
|
+
msgid "Dark"
|
|
213
|
+
msgstr "Tmavá"
|
|
214
|
+
|
|
215
|
+
msgid "Light"
|
|
216
|
+
msgstr "Svetlá"
|
|
217
|
+
|
|
218
|
+
msgid "Theme"
|
|
219
|
+
msgstr "Téma"
|
|
220
|
+
|
|
209
221
|
msgid "Translations"
|
|
210
222
|
msgstr "Preklady"
|
|
211
223
|
|
|
@@ -221,15 +233,21 @@ msgstr[0] "Opravte chybu nižšie."
|
|
|
221
233
|
msgstr[1] "Opravte chyby nižšie."
|
|
222
234
|
msgstr[2] "Opravte chyby nižšie."
|
|
223
235
|
|
|
236
|
+
msgid "Save"
|
|
237
|
+
msgstr "Uložiť"
|
|
238
|
+
|
|
239
|
+
msgid "Close"
|
|
240
|
+
msgstr "Zatvoriť"
|
|
241
|
+
|
|
224
242
|
msgid "Prev"
|
|
225
|
-
msgstr ""
|
|
243
|
+
msgstr "Pred."
|
|
226
244
|
|
|
227
245
|
#, python-format
|
|
228
246
|
msgid "<strong>%(current_index)s</strong> / %(all_objects_count)s"
|
|
229
247
|
msgstr ""
|
|
230
248
|
|
|
231
249
|
msgid "Next"
|
|
232
|
-
msgstr ""
|
|
250
|
+
msgstr "Ďal."
|
|
233
251
|
|
|
234
252
|
msgid "Back"
|
|
235
253
|
msgstr "Naspäť"
|
|
@@ -326,9 +344,6 @@ msgstr "Vyhľadať"
|
|
|
326
344
|
msgid "Copy"
|
|
327
345
|
msgstr "Kopírovať"
|
|
328
346
|
|
|
329
|
-
msgid "Save"
|
|
330
|
-
msgstr "Uložiť"
|
|
331
|
-
|
|
332
347
|
msgid "Show translations"
|
|
333
348
|
msgstr "Zobraziť preklady"
|
|
334
349
|
|
|
@@ -337,7 +352,7 @@ msgstr "Uložiť zoradenie"
|
|
|
337
352
|
|
|
338
353
|
#, python-format
|
|
339
354
|
msgid "You are authenticated as %(username)s, but are not authorized to access this page. Would you like to login to a different account?"
|
|
340
|
-
msgstr ""
|
|
355
|
+
msgstr "Ste prihlásený ako %(username)s, ale k tejto stránke nemáte prístup. Chcete sa prihlásiť pod iným účtom?"
|
|
341
356
|
|
|
342
357
|
msgid "Welcome back"
|
|
343
358
|
msgstr "Vitajte späť"
|
|
@@ -650,9 +665,6 @@ msgstr "Zobraziť menu"
|
|
|
650
665
|
msgid "Change current folder details"
|
|
651
666
|
msgstr "Zmeniť detaily priečinka"
|
|
652
667
|
|
|
653
|
-
msgid "Close"
|
|
654
|
-
msgstr "Zatvoriť"
|
|
655
|
-
|
|
656
668
|
msgid "Limit"
|
|
657
669
|
msgstr "Limit"
|
|
658
670
|
|
|
@@ -704,9 +716,6 @@ msgstr "Poradie sa upravuje, prosím čakajte"
|
|
|
704
716
|
msgid "Logout"
|
|
705
717
|
msgstr "Odhlásiť sa"
|
|
706
718
|
|
|
707
|
-
msgid "Choose domain"
|
|
708
|
-
msgstr "Zvoľte si doménu"
|
|
709
|
-
|
|
710
719
|
msgid "Continue"
|
|
711
720
|
msgstr "Pokračovať"
|
|
712
721
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Generated by Django 5.0.3 on 2025-07-29 08:28
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.conf import settings
|
|
5
|
+
from django.db import migrations, models
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Migration(migrations.Migration):
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
('django_smartbase_admin', '0004_alter_sbadminlistviewconfiguration_action_and_more'),
|
|
12
|
+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
operations = [
|
|
16
|
+
migrations.CreateModel(
|
|
17
|
+
name='SBAdminUserConfiguration',
|
|
18
|
+
fields=[
|
|
19
|
+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
20
|
+
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
21
|
+
('updated_at', models.DateTimeField(auto_now=True)),
|
|
22
|
+
('color_scheme', models.CharField(choices=[('auto', '<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Translation"></use></svg><span>System</span></span>'), ('dark', '<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Moon"></use></svg><span>Dark</span></span>'), ('light', '<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Sun-one"></use></svg><span>Light</span></span>')], default='auto', max_length=255, verbose_name='Theme')),
|
|
23
|
+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
|
24
|
+
],
|
|
25
|
+
),
|
|
26
|
+
]
|
django_smartbase_admin/models.py
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
from django.conf import settings
|
|
2
2
|
from django.db import models
|
|
3
|
+
from django.utils.html import format_html
|
|
4
|
+
from django.utils.translation import gettext_lazy as _
|
|
3
5
|
|
|
4
6
|
from django_smartbase_admin.querysets import SBAdminListViewConfigurationQueryset
|
|
5
7
|
|
|
8
|
+
AUTO_LABEL = _("System")
|
|
9
|
+
DARK_LABEL = _("Dark")
|
|
10
|
+
LIGHT_LABEL = _("Light")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ColorScheme(models.TextChoices):
|
|
14
|
+
AUTO = "auto", format_html(
|
|
15
|
+
f'<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Translation"></use></svg><span>{AUTO_LABEL}</span></span>'
|
|
16
|
+
)
|
|
17
|
+
DARK = "dark", format_html(
|
|
18
|
+
f'<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Moon"></use></svg><span>{DARK_LABEL}</span></span>'
|
|
19
|
+
)
|
|
20
|
+
LIGHT = "light", format_html(
|
|
21
|
+
f'<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Sun-one"></use></svg><span>{LIGHT_LABEL}</span></span>'
|
|
22
|
+
)
|
|
23
|
+
|
|
6
24
|
|
|
7
25
|
class SBAdminListViewConfiguration(models.Model):
|
|
8
26
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
@@ -18,3 +36,18 @@ class SBAdminListViewConfiguration(models.Model):
|
|
|
18
36
|
url_params = models.TextField()
|
|
19
37
|
|
|
20
38
|
objects = SBAdminListViewConfigurationQueryset.as_manager()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class SBAdminUserConfiguration(models.Model):
|
|
42
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
|
43
|
+
updated_at = models.DateTimeField(auto_now=True)
|
|
44
|
+
user = models.ForeignKey(
|
|
45
|
+
to=settings.AUTH_USER_MODEL,
|
|
46
|
+
on_delete=models.CASCADE,
|
|
47
|
+
)
|
|
48
|
+
color_scheme = models.CharField(
|
|
49
|
+
max_length=255,
|
|
50
|
+
choices=ColorScheme.choices,
|
|
51
|
+
default=ColorScheme.AUTO,
|
|
52
|
+
verbose_name=_("Theme"),
|
|
53
|
+
)
|
|
@@ -20,3 +20,16 @@ class SBAdminConfigurationService(object):
|
|
|
20
20
|
return slugify(view_id)
|
|
21
21
|
else:
|
|
22
22
|
return view_id
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class SBAdminUserConfigurationService(object):
|
|
26
|
+
@classmethod
|
|
27
|
+
def get_user_config(cls, request):
|
|
28
|
+
if not request.user:
|
|
29
|
+
return None
|
|
30
|
+
from django_smartbase_admin.models import SBAdminUserConfiguration
|
|
31
|
+
|
|
32
|
+
user_config, created = SBAdminUserConfiguration.objects.get_or_create(
|
|
33
|
+
user_id=request.user.id
|
|
34
|
+
)
|
|
35
|
+
return user_config
|
|
@@ -25,7 +25,11 @@ module.exports = {
|
|
|
25
25
|
colors: {
|
|
26
26
|
current: 'currentColor',
|
|
27
27
|
light: 'var(--color-light)',
|
|
28
|
+
'light-a': 'rgb(var(--color-light-a) / <alpha-value>)',
|
|
28
29
|
'transparent': 'var(--color-transparent)',
|
|
29
30
|
...createColorConfig(),
|
|
31
|
+
'bg': 'var(--color-bg)',
|
|
32
|
+
'bg-elevated': 'var(--color-bg-elevated)',
|
|
33
|
+
'bg-input': 'var(--color-bg-input)',
|
|
30
34
|
}
|
|
31
35
|
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
body
|
|
2
|
+
{
|
|
3
|
+
/* Font */
|
|
4
|
+
/* Emoji fonts are added to visualise them nicely in Internet Explorer. */
|
|
5
|
+
font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
6
|
+
font-size: 12px;
|
|
7
|
+
|
|
8
|
+
/* Text color */
|
|
9
|
+
color: #ffffff;
|
|
10
|
+
|
|
11
|
+
/* Remove the background color to make it transparent. */
|
|
12
|
+
background-color: #2B3645;
|
|
13
|
+
|
|
14
|
+
margin: 20px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.cke_panel_listItem.cke_selected a, .cke_panel_listItem a:hover, .cke_panel_listItem a:focus, .cke_panel_listItem a:active {
|
|
18
|
+
background-color: #111827;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
.cke_editable
|
|
23
|
+
{
|
|
24
|
+
font-size: 13px;
|
|
25
|
+
line-height: 1.6;
|
|
26
|
+
|
|
27
|
+
/* Fix for missing scrollbars with RTL texts. (#10488) */
|
|
28
|
+
word-wrap: break-word;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
blockquote
|
|
32
|
+
{
|
|
33
|
+
font-style: italic;
|
|
34
|
+
font-family: Georgia, Times, "Times New Roman", serif;
|
|
35
|
+
padding: 2px 0;
|
|
36
|
+
border-style: solid;
|
|
37
|
+
border-color: #ccc;
|
|
38
|
+
border-width: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.cke_contents_ltr blockquote
|
|
42
|
+
{
|
|
43
|
+
padding-left: 20px;
|
|
44
|
+
padding-right: 8px;
|
|
45
|
+
border-left-width: 5px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.cke_contents_rtl blockquote
|
|
49
|
+
{
|
|
50
|
+
padding-left: 8px;
|
|
51
|
+
padding-right: 20px;
|
|
52
|
+
border-right-width: 5px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
a
|
|
56
|
+
{
|
|
57
|
+
color: #0782C1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
ol,ul,dl
|
|
61
|
+
{
|
|
62
|
+
/* IE7: reset rtl list margin. (#7334) */
|
|
63
|
+
*margin-right: 0px;
|
|
64
|
+
/* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/
|
|
65
|
+
padding: 0 40px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
h1,h2,h3,h4,h5,h6
|
|
69
|
+
{
|
|
70
|
+
font-weight: normal;
|
|
71
|
+
line-height: 1.2;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
hr
|
|
75
|
+
{
|
|
76
|
+
border: 0px;
|
|
77
|
+
border-top: 1px solid #ccc;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
img.right
|
|
81
|
+
{
|
|
82
|
+
border: 1px solid #ccc;
|
|
83
|
+
float: right;
|
|
84
|
+
margin-left: 15px;
|
|
85
|
+
padding: 5px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
img.left
|
|
89
|
+
{
|
|
90
|
+
border: 1px solid #ccc;
|
|
91
|
+
float: left;
|
|
92
|
+
margin-right: 15px;
|
|
93
|
+
padding: 5px;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
pre
|
|
97
|
+
{
|
|
98
|
+
white-space: pre-wrap; /* CSS 2.1 */
|
|
99
|
+
word-wrap: break-word; /* IE7 */
|
|
100
|
+
-moz-tab-size: 4;
|
|
101
|
+
tab-size: 4;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.marker
|
|
105
|
+
{
|
|
106
|
+
background-color: Yellow;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
span[lang]
|
|
110
|
+
{
|
|
111
|
+
font-style: italic;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
figure
|
|
115
|
+
{
|
|
116
|
+
text-align: center;
|
|
117
|
+
outline: solid 1px #ccc;
|
|
118
|
+
background: rgba(0,0,0,0.05);
|
|
119
|
+
padding: 10px;
|
|
120
|
+
margin: 10px 20px;
|
|
121
|
+
display: inline-block;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
figure > figcaption
|
|
125
|
+
{
|
|
126
|
+
text-align: center;
|
|
127
|
+
display: block; /* For IE8 */
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
a > img {
|
|
131
|
+
padding: 1px;
|
|
132
|
+
margin: 1px;
|
|
133
|
+
border: none;
|
|
134
|
+
outline: 1px solid #0782C1;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Widget Styles */
|
|
138
|
+
.code-featured
|
|
139
|
+
{
|
|
140
|
+
border: 5px solid red;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.math-featured
|
|
144
|
+
{
|
|
145
|
+
padding: 20px;
|
|
146
|
+
box-shadow: 0 0 2px rgba(200, 0, 0, 1);
|
|
147
|
+
background-color: rgba(255, 0, 0, 0.05);
|
|
148
|
+
margin: 10px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.image-clean
|
|
152
|
+
{
|
|
153
|
+
border: 0;
|
|
154
|
+
background: none;
|
|
155
|
+
padding: 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.image-clean > figcaption
|
|
159
|
+
{
|
|
160
|
+
font-size: .9em;
|
|
161
|
+
text-align: right;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.image-grayscale
|
|
165
|
+
{
|
|
166
|
+
background-color: white;
|
|
167
|
+
color: #666;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.image-grayscale img, img.image-grayscale
|
|
171
|
+
{
|
|
172
|
+
filter: grayscale(100%);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.embed-240p
|
|
176
|
+
{
|
|
177
|
+
max-width: 426px;
|
|
178
|
+
max-height: 240px;
|
|
179
|
+
margin:0 auto;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.embed-360p
|
|
183
|
+
{
|
|
184
|
+
max-width: 640px;
|
|
185
|
+
max-height: 360px;
|
|
186
|
+
margin:0 auto;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.embed-480p
|
|
190
|
+
{
|
|
191
|
+
max-width: 854px;
|
|
192
|
+
max-height: 480px;
|
|
193
|
+
margin:0 auto;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.embed-720p
|
|
197
|
+
{
|
|
198
|
+
max-width: 1280px;
|
|
199
|
+
max-height: 720px;
|
|
200
|
+
margin:0 auto;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.embed-1080p
|
|
204
|
+
{
|
|
205
|
+
max-width: 1920px;
|
|
206
|
+
max-height: 1080px;
|
|
207
|
+
margin:0 auto;
|
|
208
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";const e=e
|
|
1
|
+
(()=>{"use strict";const e=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:", ";const n=[],s=Object.values(e);let r=!1;for(let[e,t]of s.entries()){if(e===window.sb_admin_const.MULTISELECT_FILTER_MAX_CHOICES_SHOWN)break;if(!(s.length>1&&t.value===window.sb_admin_const.SELECT_ALL_KEYWORD)){if(e===window.sb_admin_const.MULTISELECT_FILTER_MAX_CHOICES_SHOWN-2&&s[e+2]){n.push(t.label),r=!0;break}n.push(t.label)}}let i=n.join(t);return r&&(i=i.substring(0,i.length),i+="... +"+(s.length-window.sb_admin_const.MULTISELECT_FILTER_MAX_CHOICES_SHOWN+1)),i},t=t=>{const n=t.dataset.filterId||t.id,s=t.dataset.labelSeparator||", ",r=document.querySelector(`#${n}-value`);if(!r)return;const i=t.dataset.label;if(i)return r.innerHTML=i,r;const a=(e=>{try{return JSON.parse(e)}catch(e){}return e})(t.value);if(""===t.value||"[]"===t.value)return t.dataset.emptyLabel?r.innerHTML=t.dataset.emptyLabel:r.innerHTML="",r;if("object"==typeof a)r.innerHTML=e(a,s);else try{r.innerHTML=t.options[t.selectedIndex].text}catch(e){const n=document.querySelector(`label[for=${t.id}]`);if(n)r.innerHTML=n.innerText;else{let e;try{e=document.querySelector(`label[for=${t.id}_${t.value}]`)}catch(t){e=null}r.innerHTML=e?e.innerText:a}}return r};window.SBAdminCalendarClass=class{constructor(e){if(this.options=e,this.calendar=null,this.options.calendarOptions=this.options.calendarOptions||{},!Object.hasOwn(this.options.calendarOptions,"events")||!this.options.calendarOptions.events)throw Error("Missing events property!");"string"==typeof this.options.calendarOptions.events&&(this.options.calendarOptions.events={url:this.options.calendarOptions.events}),this.options.calendarOptions.events.extraParams=this.options.calendarOptions.events.extraParams||{},this.options.calendarOptions.events.extraParams=()=>({...this.options.calendarOptions.events.extraParams||{},...this.getFilterData()}),this.initCalendar(),this.initFilters()}initCalendar(){const e=document.getElementById(`${this.options.widgetId}-calendar`);this.calendar=new FullCalendar.Calendar(e,this.options.calendarOptions||{}),this.calendar.render()}getFilterData(){const e=document.querySelector(`#${this.options.widgetId}-filter-form`),t=new FormData(e).entries(),n={};for(const[e,s]of t)s&&(n[e]=s);return n}initFilters(){var e,n;e=`[form="${this.options.widgetId}-filter-form"]`,n=e=>{this.calendar.refetchEvents(),t(e.target)},document.querySelectorAll(e).forEach((e=>{e.addEventListener("change",n),e.addEventListener("keypress",(t=>{if(13===t.keyCode)return e.blur(),t.preventDefault(),e.focus(),!0})),e.addEventListener("SBAutocompleteChange",n)}))}}})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--fc-small-font-size:.75rem;--fc-border-color:var(--color-dark-200);--fc-today-bg-color:var(--color-primary-50);--fc-neutral-bg-color:var(--color-
|
|
1
|
+
:root{--fc-small-font-size:.75rem;--fc-border-color:var(--color-dark-200);--fc-today-bg-color:var(--color-primary-50);--fc-neutral-bg-color:var(--color-bg-elevated)}.fc-theme-standard th.fc-col-header-cell{background-color:var(--color-bg);padding:.5rem 1.5rem}.fc-theme-standard td.fc-daygrid-day{padding:.5rem}.fc table{font-size:.75rem;line-height:1.25rem}.fc .fc-col-header-cell-cushion{font-size:.875rem;font-weight:500;line-height:1.25rem;padding:0}.fc .fc-daygrid-day{height:9rem}.fc .fc-day-other{background-color:var(--color-bg)}.fc .fc-day-other .fc-daygrid-day-top{opacity:1}.fc .fc-day-other .fc-daygrid-day-top .fc-daygrid-day-number{color:var(--color-dark)}.fc .fc-day-other .fc-daygrid-day-events{opacity:.6}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before,.fc .fc-daygrid-day-events:after,.fc .fc-daygrid-day-events:before,.fc .fc-daygrid-day-frame:after,.fc .fc-daygrid-day-frame:before,.fc .fc-daygrid-event-harness:after,.fc .fc-daygrid-event-harness:before{display:none}.fc .fc-daygrid-day-events,.fc .fc-daygrid-day-frame{display:flex;flex-direction:column;gap:.25rem}.fc .fc-daygrid-day-events{margin:0}.fc .fc-daygrid-day-top{flex-direction:row}.fc .fc-daygrid-day-number{align-items:center;color:var(--color-dark-900);display:flex;font-weight:600;height:1.5rem;justify-content:center;line-height:1;padding:.25rem;width:1.5rem}.fc .fc-day-today .fc-daygrid-day-number{background-color:var(--color-primary);border-radius:9999px;color:var(--color-light)}.fc .fc-daygrid-event{display:flex;gap:.25rem;margin:0!important}.fc .fc-daygrid-dot-event{border-color:var(--color-dark-200);border-radius:6px;border-width:1px;height:1.5rem;padding:0 .5rem}.fc .fc-daygrid-dot-event .fc-event-time{display:none}.fc .fc-daygrid-dot-event .fc-event-title{color:var(--color-dark-900);font-weight:400;line-height:1rem;text-overflow:ellipsis}.fc .fc-daygrid-event-dot{border-color:currentColor;border-radius:9999px;border-width:2px;box-sizing:border-box;flex-shrink:0;height:.75rem;margin:0;width:.75rem}.fc .fc-daygrid-day-bottom{font-size:.75rem;line-height:1.25rem;margin:0!important}.fc .fc-daygrid-more-link{margin:0;padding:0}.fc .fc-daygrid-more-link:hover{background:none}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{margin-bottom:0;min-height:4rem}.fc .fc-daygrid-day-bg{display:none}.fc .fc-popover{z-index:10}.fc .fc-popover .fc-popover-header{padding:.25rem}.fc .fc-popover .fc-popover-title{font-size:.875rem;line-height:1.25rem}.fc .fc-popover .fc-popover-body{display:flex;flex-direction:column;gap:.25rem;padding:.5rem}.fc .fc-scrollgrid{border-left-width:0}.fc .fc-scrollgrid-section>td,.fc .fc-scrollgrid-section>th{border:0}
|