django-unfold 0.56.0__py3-none-any.whl → 0.57.0__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_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/METADATA +1 -1
- {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/RECORD +27 -23
- unfold/forms.py +3 -2
- unfold/layout.py +19 -1
- unfold/static/unfold/css/styles.css +1 -1
- unfold/styles.css +18 -28
- unfold/templates/admin/actions.html +1 -1
- unfold/templates/unfold/helpers/edit_inline/tabular_field.html +1 -1
- unfold/templates/unfold/helpers/field_readonly_value.html +1 -1
- unfold/templates/unfold/helpers/fieldset_row_checkbox.html +2 -2
- unfold/templates/unfold/helpers/fieldset_row_field.html +2 -2
- unfold/templates/unfold/helpers/form_errors.html +1 -1
- unfold/templates/unfold/helpers/messages/errornote.html +1 -5
- unfold/templates/unfold/layouts/skeleton.html +1 -1
- unfold/templates/unfold/widgets/clearable_file_input.html +3 -3
- unfold/templates/unfold/widgets/clearable_file_input_small.html +1 -1
- unfold/templates/unfold/widgets/select.html +9 -0
- unfold/templates/unfold_crispy/errors_formset.html +3 -0
- unfold/templates/unfold_crispy/field.html +1 -1
- unfold/templates/unfold_crispy/inputs.html +1 -1
- unfold/templates/unfold_crispy/layout/field_errors.html +5 -5
- unfold/templates/unfold_crispy/layout/hr.html +13 -0
- unfold/templates/unfold_crispy/layout/table_inline_formset.html +5 -3
- unfold/templates/unfold_crispy/whole_uni_formset.html +30 -0
- unfold/widgets.py +30 -0
- {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/LICENSE.md +0 -0
- {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/WHEEL +0 -0
unfold/styles.css
CHANGED
@@ -90,6 +90,10 @@
|
|
90
90
|
font-size: 18px;
|
91
91
|
}
|
92
92
|
|
93
|
+
.errorlist {
|
94
|
+
@apply *:before:align-bottom *:before:content-['warning'] *:before:material-symbols-outlined *:before:mr-1;
|
95
|
+
}
|
96
|
+
|
93
97
|
[x-cloak] {
|
94
98
|
@apply hidden!;
|
95
99
|
}
|
@@ -153,50 +157,37 @@ table tr.selected th {
|
|
153
157
|
Datetime
|
154
158
|
*******************************************************/
|
155
159
|
.datetimeshortcuts {
|
156
|
-
@apply absolute flex flex-row-reverse items-center right-
|
160
|
+
@apply absolute flex flex-row-reverse items-center right-px text-[0px] top-px;
|
157
161
|
}
|
158
162
|
|
159
163
|
.datetimeshortcuts a {
|
160
|
-
@apply text-[0px] text-base-400 transition hover:text-base-700;
|
164
|
+
@apply flex items-center h-9 text-[0px] text-base-400 transition hover:text-base-700;
|
161
165
|
}
|
162
166
|
|
163
167
|
.datetimeshortcuts a:first-child {
|
164
|
-
@apply
|
168
|
+
@apply hidden;
|
165
169
|
}
|
166
170
|
|
167
171
|
.datetimeshortcuts a:first-child:after {
|
168
|
-
@apply
|
169
|
-
content: "timer";
|
172
|
+
@apply content-['update'] flex h-9 items-center justify-center leading-none material-symbols-outlined px-3 py-2 text-center hover:text-base-700 dark:border-base-700 dark:hover:text-base-700;
|
170
173
|
}
|
171
174
|
|
172
175
|
.datetimeshortcuts a:first-child:after {
|
173
176
|
@apply flex;
|
174
177
|
}
|
175
178
|
|
179
|
+
.clock-icon,
|
176
180
|
.date-icon {
|
177
|
-
@apply block
|
178
|
-
|
179
|
-
|
180
|
-
.date-icon:after {
|
181
|
-
@apply border-l border-base-200 h-9 items-center justify-center leading-none material-symbols-outlined py-2 text-center w-9 hover:text-base-700 dark:border-base-700;
|
182
|
-
content: "edit";
|
181
|
+
@apply block text-base-400 transition-all hover:text-base-700 dark:text-base-500 dark:hover:text-base-200;
|
182
|
+
@apply after:border-base-200 after:material-symbols-outlined after:px-3 dark:after:border-base-700;
|
183
183
|
}
|
184
184
|
|
185
185
|
.date-icon:after {
|
186
|
-
|
187
|
-
}
|
188
|
-
|
189
|
-
.clock-icon {
|
190
|
-
@apply block h-9 ml-2 w-9 hover:text-base-700 dark:text-base-500 dark:hover:text-base-200;
|
186
|
+
content: "calendar_today";
|
191
187
|
}
|
192
188
|
|
193
189
|
.clock-icon:after {
|
194
|
-
|
195
|
-
content: "edit";
|
196
|
-
}
|
197
|
-
|
198
|
-
.clock-icon:after {
|
199
|
-
@apply flex;
|
190
|
+
content: "schedule";
|
200
191
|
}
|
201
192
|
|
202
193
|
.timezonewarning {
|
@@ -381,7 +372,7 @@ h3 span:nth-child(3) {
|
|
381
372
|
.select2-container.select2-container--admin-autocomplete
|
382
373
|
.select2-selection--single
|
383
374
|
.select2-selection__clear {
|
384
|
-
@apply flex items-center h-9 -mt-2 text-[0px];
|
375
|
+
@apply flex items-center h-9 -mt-2 text-[0px] after:text-base-400 hover:after:text-base-700 dark:hover:after:text-base-200 dark:after:text-base-500;
|
385
376
|
}
|
386
377
|
|
387
378
|
.select2-container.select2-container--admin-autocomplete
|
@@ -390,9 +381,7 @@ h3 span:nth-child(3) {
|
|
390
381
|
.select2-container.select2-container--admin-autocomplete
|
391
382
|
.select2-selection--single
|
392
383
|
.select2-selection__clear:after {
|
393
|
-
@apply material-symbols-outlined text-
|
394
|
-
content: "close";
|
395
|
-
font-size: 14px;
|
384
|
+
@apply material-symbols-outlined transition-all content-['close'] text-[18px] ;
|
396
385
|
}
|
397
386
|
|
398
387
|
.select2-container.select2-container--admin-autocomplete
|
@@ -404,7 +393,7 @@ h3 span:nth-child(3) {
|
|
404
393
|
.select2-container.select2-container--admin-autocomplete
|
405
394
|
.select2-selection--single
|
406
395
|
.select2-selection__arrow:after {
|
407
|
-
@apply left-0 leading-none m-0 material-symbols-outlined text-base-
|
396
|
+
@apply left-0 leading-none m-0 material-symbols-outlined text-base-400 text-lg;
|
408
397
|
content: "expand_more";
|
409
398
|
}
|
410
399
|
|
@@ -464,9 +453,10 @@ h3 span:nth-child(3) {
|
|
464
453
|
.select2-container.select2-container--admin-autocomplete
|
465
454
|
.select2-selection--multiple
|
466
455
|
.select2-selection__clear {
|
467
|
-
@apply m-0 mr-
|
456
|
+
@apply m-0 mr-3 top-0;
|
468
457
|
}
|
469
458
|
|
459
|
+
|
470
460
|
.select2-container.select2-container--admin-autocomplete
|
471
461
|
.select2-selection--multiple
|
472
462
|
.select2-selection__rendered {
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<div id="changelist-actions" class="actions flex flex-col gap-3 text-white sm:flex-row sm:items-center lg:items-center {% if not cl.model_admin.list_fullwidth %}mx-auto{% endif %}" x-bind:style="'width: ' + changeListWidth + 'px'">
|
4
4
|
{% block actions %}
|
5
|
-
<div class="flex flex-row gap-2 lg:flex-row" x-data="{action: ''}">
|
5
|
+
<div class="group primary flex flex-row gap-2 lg:flex-row" x-data="{action: ''}">
|
6
6
|
{% block actions-form %}
|
7
7
|
{% for field in action_form %}
|
8
8
|
{% if field.label %}
|
@@ -1 +1 @@
|
|
1
|
-
<div class="readonly break-words {% if field.is_json %}max-w-4xl{% else %}max-w-2xl{% endif %} py-2 text-sm *:rounded-default {% if not adminform.model_admin.compressed_fields and not field.is_image %}bg-base-50 border font-medium px-3 rounded-default shadow-xs dark:border-base-700 dark:bg-base-800{% endif %} {% if field.is_image %}inline-block [&_img]:rounded-default py-0!{% endif %}">{% if value %}{{ value }}{% elif field.contents %}{{ field.contents }}{% else %}-{% endif %}</div>
|
1
|
+
<div class="readonly break-words {% if field.is_json %}max-w-4xl{% else %}max-w-2xl{% endif %} py-2 text-sm *:rounded-default {% if not adminform.model_admin.compressed_fields and not field.is_image %}bg-base-50 border border-base-200 font-medium px-3 rounded-default shadow-xs dark:border-base-700 dark:bg-base-800{% endif %} {% if field.is_image %}inline-block [&_img]:rounded-default py-0!{% endif %}">{% if value %}{{ value }}{% elif field.contents %}{{ field.contents }}{% else %}-{% endif %}</div>
|
@@ -16,7 +16,7 @@
|
|
16
16
|
</div>
|
17
17
|
|
18
18
|
{% if field.errors %}
|
19
|
-
<div class="mt-
|
19
|
+
<div class="mt-2 text-red-600 text-xs dark:text-red-500">
|
20
20
|
{{ field.errors }}
|
21
21
|
</div>
|
22
22
|
{% endif %}
|
@@ -36,7 +36,7 @@
|
|
36
36
|
{% endif %}
|
37
37
|
|
38
38
|
{% if field.errors %}
|
39
|
-
<div class="mt-
|
39
|
+
<div class="mt-2 text-red-600 text-xs dark:text-red-500">
|
40
40
|
{{ field.errors }}
|
41
41
|
</div>
|
42
42
|
{% endif %}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
{{ field.label_tag }}
|
3
3
|
</div>
|
4
4
|
|
5
|
-
<div class="grow">
|
5
|
+
<div class="grow relative">
|
6
6
|
{% if field.is_readonly %}
|
7
7
|
{% include "unfold/helpers/field_readonly_value.html" %}
|
8
8
|
{% else %}
|
@@ -14,7 +14,7 @@
|
|
14
14
|
{% endif %}
|
15
15
|
|
16
16
|
{% if field.errors %}
|
17
|
-
<div class="mt-
|
17
|
+
<div class="mt-2 text-red-600 text-xs dark:text-red-500">
|
18
18
|
{{ field.errors }}
|
19
19
|
</div>
|
20
20
|
{% endif %}
|
@@ -2,10 +2,6 @@
|
|
2
2
|
|
3
3
|
{% if errors %}
|
4
4
|
<p class="errornote bg-red-100 mb-8 text-red-700 px-3 py-3 rounded-default dark:bg-red-500/20 dark:border-red-500/20 dark:text-red-400">
|
5
|
-
{%
|
6
|
-
{% translate "Please correct the error below." %}
|
7
|
-
{% else %}
|
8
|
-
{% translate "Please correct the errors below." %}
|
9
|
-
{% endif %}
|
5
|
+
{% blocktranslate count counter=errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktranslate %}
|
10
6
|
</p>
|
11
7
|
{% endif %}
|
@@ -58,7 +58,7 @@
|
|
58
58
|
{% endblock %}
|
59
59
|
</head>
|
60
60
|
|
61
|
-
<body class="antialiased bg-base-50 font-sans text-font-default-light text-sm dark:bg-base-900 dark:text-font-default-dark {% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" data-admin-utc-offset="{% now "Z" %}" x-data="{{% if opts %}activeTab: 'general',{% endif %} sidebarMobileOpen: false, sidebarDesktopOpen: {% if request.session.toggle_sidebar == False %}false{% else %}true{% endif %} }" x-init="activeTab = {% if opts %}window.location.hash?.replace('#', '') || 'general'{% else %}''{% endif %}">
|
61
|
+
<body class="antialiased bg-base-50 font-sans text-font-default-light text-sm dark:bg-base-900 dark:text-font-default-dark {% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" data-admin-utc-offset="{% now "Z" %}" x-data="{ {% if opts %}activeTab: 'general',{% endif %} sidebarMobileOpen: false, sidebarDesktopOpen: {% if request.session.toggle_sidebar == False %}false{% else %}true{% endif %} }" x-init="activeTab = {% if opts %}window.location.hash?.replace('#', '') || 'general'{% else %}''{% endif %}">
|
62
62
|
{% if colors %}
|
63
63
|
<style id="unfold-theme-colors">
|
64
64
|
:root {
|
@@ -24,18 +24,18 @@
|
|
24
24
|
<input type="text" aria-label="{% trans 'Choose file to upload' %}" value="{% if widget.value %}{{ widget.value.url }}{% else %}{% trans 'Choose file to upload' %}{% endif %}" disabled class="bg-white grow font-medium min-w-0 px-3 py-2 text-ellipsis dark:bg-base-900">
|
25
25
|
|
26
26
|
<div class="bg-white flex flex-none items-center leading-none self-stretch dark:bg-base-900">
|
27
|
-
<div class="opacity-0 w-[0px]">
|
27
|
+
<div class="opacity-0 overflow-hidden w-[0px]">
|
28
28
|
<input type="{{ widget.type }}" name="{{ widget.name }}" {% include "django/forms/widgets/attrs.html" %} />
|
29
29
|
</div>
|
30
30
|
|
31
31
|
{% if widget.is_initial %}
|
32
32
|
<a href="{{ widget.value.url }}" class="border-r border-base-200 cursor-pointer text-base-400 px-3 hover:text-base-700 dark:border-base-700 dark:text-base-500 dark:hover:text-base-200" target="_blank">
|
33
|
-
<span class="material-symbols-outlined">download</span>
|
33
|
+
<span class="block material-symbols-outlined">download</span>
|
34
34
|
</a>
|
35
35
|
{% endif %}
|
36
36
|
|
37
37
|
<label for="{{ widget.attrs.id }}" class="cursor-pointer text-base-400 px-3 hover:text-base-700 dark:text-base-500 dark:hover:text-base-200">
|
38
|
-
<span class="material-symbols-outlined">upload</span>
|
38
|
+
<span class="block material-symbols-outlined">upload</span>
|
39
39
|
</label>
|
40
40
|
</div>
|
41
41
|
</div>
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<input type="text" aria-label="{% trans 'Choose file to upload' %}" value="{% if widget.value %}{{ widget.value.url }}{% else %}{% trans 'Choose file to upload' %}{% endif %}" disabled class="bg-white grow font-medium min-w-0 px-3 py-2 text-ellipsis dark:bg-base-900">
|
18
18
|
|
19
19
|
<div class="flex flex-none items-center leading-none self-stretch">
|
20
|
-
<div class="opacity-0 w-[0px]">
|
20
|
+
<div class="opacity-0 overflow-hidden w-[0px]">
|
21
21
|
<input type="{{ widget.type }}" name="{{ widget.name }}" {% include "django/forms/widgets/attrs.html" %} />
|
22
22
|
</div>
|
23
23
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="grow relative max-w-2xl">
|
2
|
+
<select name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% for group_name, group_choices, group_index in widget.optgroups %}{% if group_name %}
|
3
|
+
<optgroup label="{{ group_name }}">{% endif %}{% for option in group_choices %}
|
4
|
+
{% include option.template_name with widget=option %}{% endfor %}{% if group_name %}
|
5
|
+
</optgroup>{% endif %}{% endfor %}
|
6
|
+
</select>
|
7
|
+
|
8
|
+
<span class="material-symbols-outlined absolute group-[.primary]:text-white -ml-[31px] pointer-events-none text-base-400 top-0 top-1/2 hover:text-base-700 dark:text-base-500 dark:hover:text-base-200 -translate-y-1/2">expand_more</span>
|
9
|
+
</div>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
{% if field.is_hidden %}
|
4
4
|
{{ field }}
|
5
5
|
{% else %}
|
6
|
-
<{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id }}" class="group {% if tag == "td" %}align-top border-t border-base-200 font-normal gap-4 min-w-0 overflow-hidden px-3 py-3 text-left dark:border-base-800 dark:before:text-font-important-dark{% endif%} {% if field.errors %}errors{% endif %} {% if field_class %} {{ field_class }}{% endif %} {% if field|is_checkbox and tag == "td" %}flex flex-row gap-2
|
6
|
+
<{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id }}" class="group {% if tag == "td" %}align-top border-t border-base-200 font-normal gap-4 min-w-0 overflow-hidden px-3 py-3 text-left dark:border-base-800 dark:before:text-font-important-dark{% endif%} {% if field.errors %}errors{% endif %} {% if field_class %} {{ field_class }}{% endif %} {% if field|is_checkbox and tag == "td" %}flex flex-row gap-2 items-center{% else %}{% if 'form-horizontal' in form_class %} row{% endif %}{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}">
|
7
7
|
{% if field.label and not field|is_checkbox and form_show_labels %}
|
8
8
|
<label {% if field.id_for_label %}for="{{ field.id_for_label }}"{% endif %} class="block font-semibold mb-2 text-font-important-light text-sm dark:text-font-important-dark {% if label_class %} {{ label_class }}{% endif %}">
|
9
9
|
{{ field.label }}{% if field.field.required %} <span class="asteriskField">*</span>{% endif %}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
{% if inputs %}
|
2
|
-
<div class="
|
2
|
+
<div class="flex flex-col gap-2 justify-end lg:flex-row {{ field_class }}">
|
3
3
|
{% for input in inputs %}
|
4
4
|
{% include "unfold_crispy/layout/baseinput.html" %}
|
5
5
|
{% endfor %}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{% if form_show_errors and field.errors %}
|
2
|
-
|
3
|
-
|
4
|
-
{{ error }}
|
5
|
-
|
6
|
-
|
2
|
+
<ul class="errorlist">
|
3
|
+
{% for error in field.errors %}
|
4
|
+
<li id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="mt-2 text-red-600 text-xs dark:text-red-500">{{ error }}</li>
|
5
|
+
{% endfor %}
|
6
|
+
</ul>
|
7
7
|
{% endif %}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class="flex flex-row justify-center items-center gap-4 my-4">
|
2
|
+
{% if title %}
|
3
|
+
<span class="bg-base-200 grow h-px"></span>
|
4
|
+
|
5
|
+
{% if title %}
|
6
|
+
<span>
|
7
|
+
{{ title }}
|
8
|
+
</span>
|
9
|
+
{% endif %}
|
10
|
+
{% endif %}
|
11
|
+
|
12
|
+
<span class="bg-base-200 grow h-px"></span>
|
13
|
+
</div>
|
@@ -9,7 +9,9 @@
|
|
9
9
|
{% csrf_token %}
|
10
10
|
{% endif %}
|
11
11
|
|
12
|
-
|
12
|
+
{% include "unfold_crispy/errors_formset.html" %}
|
13
|
+
|
14
|
+
<div class="overflow-x-auto border border-base-200 mb-8 rounded-default shadow-xs dark:border-base-800" {% if form_id %} id="{{ form_id }}"{% endif %}>
|
13
15
|
{{ formset.management_form|crispy }}
|
14
16
|
|
15
17
|
<table class="w-full">
|
@@ -66,10 +68,10 @@
|
|
66
68
|
</tbody>
|
67
69
|
{% endif %}
|
68
70
|
</table>
|
69
|
-
|
70
|
-
{% include "unfold_crispy/inputs.html" %}
|
71
71
|
</div>
|
72
72
|
|
73
|
+
{% include "unfold_crispy/inputs.html" %}
|
74
|
+
|
73
75
|
{% if formset_tag %}
|
74
76
|
</form>
|
75
77
|
{% endif %}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
{% load crispy_forms_tags %}
|
2
|
+
{% load crispy_forms_utils %}
|
3
|
+
|
4
|
+
{% specialspaceless %}
|
5
|
+
{% if formset_tag %}
|
6
|
+
<form {{ flat_attrs }} method="{{ form_method }}" {% if formset.is_multipart %} enctype="multipart/form-data"{% endif %}>
|
7
|
+
{% endif %}
|
8
|
+
{% if formset_method|lower == 'post' and not disable_csrf %}
|
9
|
+
{% csrf_token %}
|
10
|
+
{% endif %}
|
11
|
+
|
12
|
+
<div>
|
13
|
+
{{ formset.management_form|crispy }}
|
14
|
+
</div>
|
15
|
+
|
16
|
+
{% include "unfold_crispy/errors_formset.html" %}
|
17
|
+
|
18
|
+
{% for form in formset %}
|
19
|
+
{% include "unfold_crispy/display_form.html" %}
|
20
|
+
{% endfor %}
|
21
|
+
|
22
|
+
{% if inputs %}
|
23
|
+
<div class="form-actions">
|
24
|
+
{% for input in inputs %}
|
25
|
+
{% include "unfold_crispy/layout/baseinput.html" %}
|
26
|
+
{% endfor %}
|
27
|
+
</div>
|
28
|
+
{% endif %}
|
29
|
+
{% if formset_tag %}</form>{% endif %}
|
30
|
+
{% endspecialspaceless %}
|
unfold/widgets.py
CHANGED
@@ -86,6 +86,7 @@ BASE_CLASSES = [
|
|
86
86
|
"dark:group-[.errors]:border-red-500",
|
87
87
|
"dark:focus:group-[.errors]:outline-red-500",
|
88
88
|
"dark:scheme-dark",
|
89
|
+
"group-[.primary]:border-transparent",
|
89
90
|
]
|
90
91
|
|
91
92
|
BASE_INPUT_CLASSES = [
|
@@ -633,6 +634,8 @@ class UnfoldAdminBigIntegerFieldWidget(AdminBigIntegerFieldWidget):
|
|
633
634
|
|
634
635
|
|
635
636
|
class UnfoldAdminNullBooleanSelectWidget(NullBooleanSelect):
|
637
|
+
template_name = "unfold/widgets/select.html"
|
638
|
+
|
636
639
|
def __init__(self, attrs=None):
|
637
640
|
if attrs is None:
|
638
641
|
attrs = {}
|
@@ -644,6 +647,8 @@ class UnfoldAdminNullBooleanSelectWidget(NullBooleanSelect):
|
|
644
647
|
|
645
648
|
|
646
649
|
class UnfoldAdminSelectWidget(Select):
|
650
|
+
template_name = "unfold/widgets/select.html"
|
651
|
+
|
647
652
|
def __init__(self, attrs=None, choices=()):
|
648
653
|
if attrs is None:
|
649
654
|
attrs = {}
|
@@ -690,6 +695,31 @@ class UnfoldAdminSelectMultipleWidget(SelectMultiple):
|
|
690
695
|
super().__init__(attrs, choices)
|
691
696
|
|
692
697
|
|
698
|
+
class UnfoldAdminSelect2MultipleWidget(SelectMultiple):
|
699
|
+
def __init__(self, attrs=None, choices=()):
|
700
|
+
if attrs is None:
|
701
|
+
attrs = {}
|
702
|
+
|
703
|
+
attrs["data-theme"] = "admin-autocomplete"
|
704
|
+
attrs["class"] = "unfold-admin-autocomplete admin-autocomplete"
|
705
|
+
|
706
|
+
super().__init__(attrs, choices)
|
707
|
+
|
708
|
+
class Media:
|
709
|
+
js = (
|
710
|
+
"admin/js/vendor/jquery/jquery.js",
|
711
|
+
"admin/js/vendor/select2/select2.full.js",
|
712
|
+
"admin/js/jquery.init.js",
|
713
|
+
"unfold/js/select2.init.js",
|
714
|
+
)
|
715
|
+
css = {
|
716
|
+
"screen": (
|
717
|
+
"admin/css/vendor/select2/select2.css",
|
718
|
+
"admin/css/autocomplete.css",
|
719
|
+
),
|
720
|
+
}
|
721
|
+
|
722
|
+
|
693
723
|
class UnfoldAdminRadioSelectWidget(AdminRadioSelect):
|
694
724
|
template_name = "unfold/widgets/radio.html"
|
695
725
|
option_template_name = "unfold/widgets/radio_option.html"
|
File without changes
|
File without changes
|