accrete 0.0.99__py3-none-any.whl → 0.0.101__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.
- accrete/contrib/ui/__init__.py +2 -0
- accrete/contrib/ui/components/__init__.py +1 -0
- accrete/contrib/ui/components/search_select.py +18 -0
- accrete/contrib/ui/forms/widgets.py +101 -0
- accrete/contrib/ui/templates/django/forms/widgets/date.html +9 -0
- accrete/contrib/ui/templates/ui/components/model_search_select_multi_selected_options.html +3 -0
- accrete/contrib/ui/templates/ui/components/model_search_select_multi_tags.html +6 -0
- accrete/contrib/ui/templates/ui/components/model_search_select_options.html +3 -0
- accrete/contrib/ui/templates/ui/layout.html +1 -1
- accrete/contrib/ui/templates/ui/partials/modal_form.html +1 -0
- accrete/contrib/ui/templates/ui/widgets/model_search_select.html +53 -0
- accrete/contrib/ui/templates/ui/widgets/model_search_select_multi.html +67 -0
- accrete/contrib/ui/templatetags/accrete_ui.py +1 -1
- {accrete-0.0.99.dist-info → accrete-0.0.101.dist-info}/METADATA +1 -1
- {accrete-0.0.99.dist-info → accrete-0.0.101.dist-info}/RECORD +17 -8
- {accrete-0.0.99.dist-info → accrete-0.0.101.dist-info}/WHEEL +0 -0
- {accrete-0.0.99.dist-info → accrete-0.0.101.dist-info}/licenses/LICENSE +0 -0
accrete/contrib/ui/__init__.py
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
from .search_select import ModelSearchSelectOptions
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from dataclasses import dataclass
|
2
|
+
|
3
|
+
from django.db.models import QuerySet
|
4
|
+
from django.template.loader import render_to_string
|
5
|
+
from django.utils.safestring import mark_safe
|
6
|
+
|
7
|
+
|
8
|
+
@dataclass
|
9
|
+
class ModelSearchSelectOptions:
|
10
|
+
|
11
|
+
queryset: QuerySet
|
12
|
+
template: str = 'ui/components/model_search_select_options.html'
|
13
|
+
|
14
|
+
def get_context(self):
|
15
|
+
return {'options': self.queryset}
|
16
|
+
|
17
|
+
def __str__(self):
|
18
|
+
return mark_safe(render_to_string(self.template, self.get_context()))
|
@@ -0,0 +1,101 @@
|
|
1
|
+
from django.forms import widgets
|
2
|
+
from django.shortcuts import resolve_url
|
3
|
+
|
4
|
+
|
5
|
+
class ModelSearchSelect(widgets.NumberInput):
|
6
|
+
template_name = 'ui/widgets/model_search_select.html'
|
7
|
+
option_template_name = 'ui/widgets/model_search_select_options.html'
|
8
|
+
input_type = 'number'
|
9
|
+
|
10
|
+
def __init__(
|
11
|
+
self,
|
12
|
+
search_url: str,
|
13
|
+
search_parameter: str = 'search',
|
14
|
+
limit: int | None = 5,
|
15
|
+
hx_trigger_on_change: bool = False,
|
16
|
+
choices=()
|
17
|
+
):
|
18
|
+
super().__init__()
|
19
|
+
self.search_url = search_url
|
20
|
+
self.search_parameter = search_parameter
|
21
|
+
self.limit = limit
|
22
|
+
self.hx_trigger_on_change = hx_trigger_on_change
|
23
|
+
self.choices = choices
|
24
|
+
|
25
|
+
def get_context(self, name, value, attrs):
|
26
|
+
qs = self.choices.queryset
|
27
|
+
if self.limit:
|
28
|
+
qs = qs[:self.limit]
|
29
|
+
|
30
|
+
context = {
|
31
|
+
"widget": {
|
32
|
+
"name": name,
|
33
|
+
"is_hidden": self.is_hidden,
|
34
|
+
"required": self.is_required,
|
35
|
+
"value": self.format_value(value or ''),
|
36
|
+
'value_display': self.value_display(value),
|
37
|
+
"attrs": self.build_attrs(self.attrs, attrs),
|
38
|
+
"template_name": self.template_name,
|
39
|
+
'search_url': self.search_url,
|
40
|
+
'search_parameter': self.search_parameter,
|
41
|
+
'hx_trigger_on_change': self.hx_trigger_on_change
|
42
|
+
},
|
43
|
+
'options': qs
|
44
|
+
}
|
45
|
+
return context
|
46
|
+
|
47
|
+
def format_value(self, value):
|
48
|
+
res = super().format_value(value)
|
49
|
+
return res or ''
|
50
|
+
|
51
|
+
def value_display(self, value):
|
52
|
+
if value is None:
|
53
|
+
return ''
|
54
|
+
try:
|
55
|
+
value = int(value)
|
56
|
+
except ValueError:
|
57
|
+
return ''
|
58
|
+
return str(self.choices.queryset.get(pk=value))
|
59
|
+
|
60
|
+
|
61
|
+
class ModelSearchSelectMulti(widgets.SelectMultiple):
|
62
|
+
template_name = 'ui/widgets/model_search_select_multi.html'
|
63
|
+
option_template_name = 'ui/widgets/model_search_select_options.html'
|
64
|
+
input_type = 'number'
|
65
|
+
|
66
|
+
def __init__(
|
67
|
+
self,
|
68
|
+
search_url: str,
|
69
|
+
search_parameter: str = 'search',
|
70
|
+
limit: int | None = 5,
|
71
|
+
hx_trigger_on_change: bool = False,
|
72
|
+
choices=()
|
73
|
+
):
|
74
|
+
super().__init__()
|
75
|
+
self.search_url = search_url
|
76
|
+
self.search_parameter = search_parameter
|
77
|
+
self.limit = limit
|
78
|
+
self.hx_trigger_on_change = hx_trigger_on_change
|
79
|
+
self.choices = choices
|
80
|
+
|
81
|
+
def get_context(self, name, value, attrs):
|
82
|
+
qs = self.choices.queryset
|
83
|
+
if self.limit:
|
84
|
+
qs = qs[:self.limit]
|
85
|
+
|
86
|
+
context = {
|
87
|
+
"widget": {
|
88
|
+
"name": name,
|
89
|
+
"is_hidden": self.is_hidden,
|
90
|
+
"required": self.is_required,
|
91
|
+
"value": self.format_value(value),
|
92
|
+
"attrs": self.build_attrs(self.attrs, attrs),
|
93
|
+
"template_name": self.template_name,
|
94
|
+
'search_url': resolve_url(self.search_url),
|
95
|
+
'search_parameter': self.search_parameter,
|
96
|
+
'hx_trigger_on_change': self.hx_trigger_on_change
|
97
|
+
},
|
98
|
+
'options': qs,
|
99
|
+
'selected': self.choices.queryset.filter(pk__in=value) if value else qs.none()
|
100
|
+
}
|
101
|
+
return context
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="field">
|
2
|
+
<p class="control">
|
3
|
+
<input class="{% if widget.type != 'checkbox' %}input{% endif %} is-fullwidth"
|
4
|
+
name="{{ widget.name }}" type="{{ widget.type }}"
|
5
|
+
{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}
|
6
|
+
{% include "django/forms/widgets/attrs.html" %}
|
7
|
+
>
|
8
|
+
</p>
|
9
|
+
</div>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
12
12
|
{% block favicon %}<link rel="icon" type="image/svg" href="{% static 'icons/accrete.svg' %}"/>{% endblock %}
|
13
13
|
{% block style %}
|
14
|
-
<link rel="stylesheet" type="text/css" href="{% static "css/accrete.css" %}?v=0.0.
|
14
|
+
<link rel="stylesheet" type="text/css" href="{% static "css/accrete.css" %}?v=0.0.100">
|
15
15
|
<link rel="stylesheet" type="text/css" href="{% static "css/icons.css" %}">
|
16
16
|
<link rel="stylesheet" type="text/css" href="{% static "css/fa.css" %}">
|
17
17
|
{% endblock %}
|
@@ -3,6 +3,7 @@
|
|
3
3
|
<div id="modal-{{ form_id }}" class="modal {% block modal_form_class %}is-active{% endblock %}"
|
4
4
|
hx-swap="outerHTML"
|
5
5
|
hx-target="#modal-{{ form_id }}"
|
6
|
+
hx-on:delete="removeModal('modal-{{ form_id }}')"
|
6
7
|
{% if blocking %}
|
7
8
|
hx-indicator="#modal-{{ form_id }}-indicator"
|
8
9
|
hx-disabled-elt="#modal-{{ form_id }}-background"
|
@@ -0,0 +1,53 @@
|
|
1
|
+
{% load static %}
|
2
|
+
{% load i18n %}
|
3
|
+
|
4
|
+
|
5
|
+
<script>
|
6
|
+
function modelSearchSelect() {
|
7
|
+
return {
|
8
|
+
open: false,
|
9
|
+
|
10
|
+
shouldClose(event) {
|
11
|
+
return event.relatedTarget === this.$refs.dropdownContent || this.$refs.dropdownContent.contains(event.relatedTarget)
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
</script>
|
16
|
+
|
17
|
+
|
18
|
+
<div class="field select" x-data="modelSearchSelect()" @click.outside="open = false">
|
19
|
+
<input id="id_{{ widget.name }}_value" hidden="hidden" type="{{ widget.type }}" name="{{ widget.name }}" x-ref="inputValue" aria-label="inputValue"
|
20
|
+
value="{{ widget.value }}"
|
21
|
+
>
|
22
|
+
<input id="id_{{ widget.name }}_display" class="input" type="text" readonly x-ref="inputDisplay" value="{{ widget.value_display }}" aria-label="inputDisplay"
|
23
|
+
style="padding-right: 30px"
|
24
|
+
x-on:focus="open = true;"
|
25
|
+
x-on:keydown="if ($event.keyCode == 27) {document.activeElement.blur()} else if ($event.keyCode != 9) {$refs.searchInput.focus();}"
|
26
|
+
x-on:focusout="open = shouldClose($event)"
|
27
|
+
>
|
28
|
+
<div style="position: relative; z-index: 90;">
|
29
|
+
<div x-show="open" class="box pt-1" x-ref="dropdownContent" tabindex="-1" x-transition>
|
30
|
+
<input id="id_{{ widget.name }}_search" type="search" autocomplete="off" class="input" x-ref="searchInput" aria-label="search"
|
31
|
+
name="{{ widget.search_parameter }}"
|
32
|
+
placeholder="{% translate 'Type to search' %}"
|
33
|
+
x-on:keydown="if ($event.keyCode == 27) {document.activeElement.blur()}"
|
34
|
+
x-on:focusout="open = shouldClose($event)"
|
35
|
+
hx-get="{{ widget.search_url }}"
|
36
|
+
hx-trigger="input changed delay:500ms, search"
|
37
|
+
hx-target="#{{ widget.name }}_dropdown_items"
|
38
|
+
>
|
39
|
+
<div x-on:click="$refs.inputValue.setAttribute('value', $event.target.value); $refs.inputDisplay.value = $event.target.innerText; htmx.trigger($refs.inputValue, 'submit'); open = false; {% if widget.hx_trigger_on_change %}htmx.trigger('#id_{{ widget.name }}_value', 'change');{% endif %}"
|
40
|
+
x-on:keydown="if ($event.keyCode == 27) {document.activeElement.blur()} else if ($event.keyCode != 9 && $event.keyCode != 13) {$refs.searchInput.focus();}"
|
41
|
+
>
|
42
|
+
{% if not widget.required %}
|
43
|
+
<div class="hoverable" style="max-height: 200px; width: 100%; overflow-y: auto;">
|
44
|
+
<button type="button" class="dropdown-item px-1" value="" style="word-wrap: break-word; width: 100%; white-space: normal">---------</button>
|
45
|
+
</div>
|
46
|
+
{% endif %}
|
47
|
+
<div id="{{ widget.name }}_dropdown_items" class="hoverable" style="max-height: 200px; width: 100%; overflow-y: auto;">
|
48
|
+
{% include 'ui/components/model_search_select_options.html' %}
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
</div>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
{% load i18n %}
|
2
|
+
|
3
|
+
<div class="" x-data="{open: false, shouldClose(event) {return event.relatedTarget == $refs.dropdownContent || $refs.dropdownContent.contains(event.relatedTarget);} }"
|
4
|
+
@click.outside="open = false" style="width: 100%"
|
5
|
+
>
|
6
|
+
<select multiple id="{{ widget.attrs.id }}" hidden="hidden" name="{{ widget.name }}" aria-label="{{ widget.name }}" x-ref="inputValue">
|
7
|
+
{% include 'ui/components/model_search_select_multi_selected_options.html' %}
|
8
|
+
</select>
|
9
|
+
<div id="{{ widget.attrs.id }}_display" class="input select py-1 pl-1" tabindex="0" x-ref="inputDisplay" aria-label="inputDisplay"
|
10
|
+
style="padding-right: 30px; border-radius: 0; border-top: 0; border-right:0; border-left: 0; min-height: var(--bulma-control-height); height: fit-content; width: 100%"
|
11
|
+
x-on:focus="open = true;"
|
12
|
+
x-on:keydown="if ($event.keyCode == 27) {document.activeElement.blur()} else if ($event.keyCode != 9) {$refs.searchInput.focus();}"
|
13
|
+
x-on:focusout="open = shouldClose($event)"
|
14
|
+
>
|
15
|
+
<div class="tags" x-ref="inputDisplayTags"
|
16
|
+
@click="
|
17
|
+
if ($event.target.classList.contains('delete')) {
|
18
|
+
let val = $event.target.getAttribute('data-value');
|
19
|
+
$refs.inputValue.querySelector(`option[value=${CSS.escape(val)}]`).remove();
|
20
|
+
$event.target.parentElement.remove();
|
21
|
+
}
|
22
|
+
">
|
23
|
+
{% include 'ui/components/model_search_select_multi_tags.html' %}
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
<div style="position: relative; z-index: 90;">
|
27
|
+
<div x-show="open" class="box pt-1" x-ref="dropdownContent" tabindex="-1" x-transition style="position: absolute; min-width: 100%">
|
28
|
+
<input id="id_{{ widget.name }}_search" type="search" autocomplete="off" class="input" x-ref="searchInput" aria-label="search"
|
29
|
+
name="{{ widget.search_parameter }}"
|
30
|
+
placeholder="{% translate 'Type to search' %}"
|
31
|
+
x-on:keydown="if ($event.keyCode == 27) {document.activeElement.blur()}"
|
32
|
+
x-on:focusout="open = shouldClose($event)"
|
33
|
+
hx-get="{{ widget.search_url }}"
|
34
|
+
hx-trigger="input changed delay:500ms, search"
|
35
|
+
hx-target="#{{ widget.name }}_dropdown_items"
|
36
|
+
>
|
37
|
+
<div id="{{ widget.name }}_dropdown_items" class="hoverable" style="max-height: 200px; width: 100%; overflow-y: auto;"
|
38
|
+
x-on:click="
|
39
|
+
if (! $refs.inputValue.querySelectorAll(`option[value=${CSS.escape($event.target.value)}]`).length) {
|
40
|
+
let option = document.createElement('option');
|
41
|
+
let tag = document.createElement('span');
|
42
|
+
let delButton = document.createElement('button');
|
43
|
+
option.setAttribute('selected', '');
|
44
|
+
option.value = $event.target.value;
|
45
|
+
tag.classList.add('tag');
|
46
|
+
tag.innerText = $event.target.innerText;
|
47
|
+
tag.style.whiteSpace = 'normal';
|
48
|
+
tag.style.height = 'fit-content';
|
49
|
+
delButton.classList.add('delete', 'is-small');
|
50
|
+
delButton.type = 'button';
|
51
|
+
delButton.setAttribute('data-value', $event.target.value);
|
52
|
+
tag.appendChild(delButton);
|
53
|
+
$refs.inputValue.appendChild(option);
|
54
|
+
$refs.inputDisplayTags.appendChild(tag);
|
55
|
+
};
|
56
|
+
{% if widget.hx_trigger_on_change %}htmx.trigger('#{{ widget.attrs.id }}_value', 'change');{% endif %}
|
57
|
+
"
|
58
|
+
x-on:keydown="
|
59
|
+
if ($event.keyCode == 27) {document.activeElement.blur()}
|
60
|
+
else if ($event.keyCode != 9 && $event.keyCode != 13) {$refs.searchInput.focus();}
|
61
|
+
"
|
62
|
+
>
|
63
|
+
{% include 'ui/components/model_search_select_options.html' %}
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
</div>
|
@@ -120,7 +120,7 @@ def timedelta_cast(td: timedelta, code: str) -> str | None:
|
|
120
120
|
|
121
121
|
|
122
122
|
@register.filter(name='weekday')
|
123
|
-
def datetime_to_weekday(dt: datetime|date, default=None):
|
123
|
+
def datetime_to_weekday(dt: datetime|date, default=None) -> str:
|
124
124
|
if dt is None:
|
125
125
|
return default
|
126
126
|
mapping = {
|
@@ -34,7 +34,7 @@ accrete/contrib/system_mail/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2
|
|
34
34
|
accrete/contrib/system_mail/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
|
35
35
|
accrete/contrib/system_mail/migrations/0001_initial.py,sha256=6cwkkRXGjXvwXoMjjgmWmcPyXSTlUbhW1vMiHObk9MQ,1074
|
36
36
|
accrete/contrib/system_mail/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
|
-
accrete/contrib/ui/__init__.py,sha256=
|
37
|
+
accrete/contrib/ui/__init__.py,sha256=WmsbOxYjh2PpInP7-rHidgkjunGb8ujc5I1AL3anXTM,596
|
38
38
|
accrete/contrib/ui/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
|
39
39
|
accrete/contrib/ui/apps.py,sha256=E0ao2ox6PQ3ldfeR17FXJUUJuGiWjm2DPCxHbPXGzls,152
|
40
40
|
accrete/contrib/ui/context.py,sha256=Awpt3kcjn_REJsZ3xDq71WitPefBLCj2N5FrAZfDXYE,10155
|
@@ -43,6 +43,9 @@ accrete/contrib/ui/filter.py,sha256=N3_h-AeN3VQdkGAGREHTGTRDRzcOrlk0Q2rbdTQyevA,
|
|
43
43
|
accrete/contrib/ui/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
44
44
|
accrete/contrib/ui/urls.py,sha256=UrRRroqP6ANW_jpkRWqo2yLvBhYOVhczzbxbfkGnoq4,124
|
45
45
|
accrete/contrib/ui/views.py,sha256=Eewx1n_fOAqx_nP4mvGltaksUtp1_WhCJThtK13YiQc,106
|
46
|
+
accrete/contrib/ui/components/__init__.py,sha256=B-0S010wPC-XSsEGGURCJDlaEdpSMphiO67XkOFRmQc,52
|
47
|
+
accrete/contrib/ui/components/search_select.py,sha256=s1VeJm0Jhn0ix2kG7hAXO-jd6jlPjwGxh-tw86fBs1k,481
|
48
|
+
accrete/contrib/ui/forms/widgets.py,sha256=mo5E6qT8zDBEGHJQ6GCN8epjOYIo0kLxNgvQnq19vGU,3298
|
46
49
|
accrete/contrib/ui/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
47
50
|
accrete/contrib/ui/static/bulma/LICENSE,sha256=--fY7Bi3Lt7RXXnKc9pe756OJY9fGv-D5OmT5pdSJ5w,1080
|
48
51
|
accrete/contrib/ui/static/bulma/README.md,sha256=dXEZ8Xo6lwH7mVf_Uy8P_rpOORrwicW5481xDTArOmU,14237
|
@@ -158,6 +161,7 @@ accrete/contrib/ui/static/webfonts/fa-solid-900.woff2,sha256=n8hfOkVEqw1XDH-Pm7u
|
|
158
161
|
accrete/contrib/ui/static/webfonts/fa-v4compatibility.ttf,sha256=CWY6NvwF5xkK-DJLhVEFxbtRGtlPlLgbNK_uUDJ57KI,10832
|
159
162
|
accrete/contrib/ui/static/webfonts/fa-v4compatibility.woff2,sha256=TUotf9HGaEhFyxdP3X_Ac71ky3QShvskf4t2wre4UsQ,4792
|
160
163
|
accrete/contrib/ui/templates/django/forms/widgets/attrs.html,sha256=zNxjU4Ta_eWZkh1WhrF_VIwNZ0lZyl980gSSijUK51k,195
|
164
|
+
accrete/contrib/ui/templates/django/forms/widgets/date.html,sha256=bKx0aGuvOM6yxNlgQOVKupPqg6tcmjxMKYRQLDscPmo,385
|
161
165
|
accrete/contrib/ui/templates/django/forms/widgets/email.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48
|
162
166
|
accrete/contrib/ui/templates/django/forms/widgets/file.html,sha256=J1NmXmQTp6IU48K-zRdLeYl-1Tpavx6ZAo3cPIP9Y6Y,755
|
163
167
|
accrete/contrib/ui/templates/django/forms/widgets/input.html,sha256=CRu81kTsbPwis7NknCv6i7EQkOwexR9rURaRpoGHBek,248
|
@@ -167,14 +171,17 @@ accrete/contrib/ui/templates/django/forms/widgets/textarea.html,sha256=c9BTedqb3
|
|
167
171
|
accrete/contrib/ui/templates/ui/dashboard.html,sha256=udnwiSJEcn2wMaJfTs4P0Y20FU79VguK_9Lq4K2BqtM,160
|
168
172
|
accrete/contrib/ui/templates/ui/detail.html,sha256=-Nksyufbf4onufqmFGTAW_BxLRNSWv1A9n8Qs2a6aCo,564
|
169
173
|
accrete/contrib/ui/templates/ui/form.html,sha256=uCtP16THdOuRfs3JdsjadIW0k9b2rN3GAsRSTfSUWak,691
|
170
|
-
accrete/contrib/ui/templates/ui/layout.html,sha256=
|
174
|
+
accrete/contrib/ui/templates/ui/layout.html,sha256=MUrb19FvoOKAgxek8NCxA23uFr-Jgmvg7eqK1rqgUOc,15650
|
171
175
|
accrete/contrib/ui/templates/ui/list.html,sha256=ahN8SgF4kE3OEy6EBeDBdDQvuXx-CyIgbixYd-KdV4k,1751
|
172
176
|
accrete/contrib/ui/templates/ui/table.html,sha256=8ELtgxoapCyNsvmGISAGXe712lG6AkP_nekb4OVLK3I,4481
|
177
|
+
accrete/contrib/ui/templates/ui/components/model_search_select_multi_selected_options.html,sha256=1fDpCnotpGFH7bzqllwbVixH1DB1-akbso5eH8cL4iU,91
|
178
|
+
accrete/contrib/ui/templates/ui/components/model_search_select_multi_tags.html,sha256=FV2pc5qaJil19reZXWzLgrUlcXyugdwunZ12lv6COfg,231
|
179
|
+
accrete/contrib/ui/templates/ui/components/model_search_select_options.html,sha256=TECaTLnkmVoUZBhehLwcSjyfgwvhXX2ZBiqSro9ap_U,203
|
173
180
|
accrete/contrib/ui/templates/ui/partials/filter.html,sha256=fMxi5L1daqKElzZpHg8bItv0FlBjOkAEBxmT_OXgg4M,7434
|
174
181
|
accrete/contrib/ui/templates/ui/partials/form_errors.html,sha256=C5ktasYff2xBTiWfM6QR8qaGKSyK9QufB3B9N77KGpg,1386
|
175
182
|
accrete/contrib/ui/templates/ui/partials/header.html,sha256=wBiyo02mON3z7l4hJAPTAJn_vDhekYZ-a0g8TuW4RmY,7015
|
176
183
|
accrete/contrib/ui/templates/ui/partials/modal.html,sha256=Lk7ViKJS99QLjGFHKna90j6VUo_U03IDAT1Rq__QVLU,1472
|
177
|
-
accrete/contrib/ui/templates/ui/partials/modal_form.html,sha256=
|
184
|
+
accrete/contrib/ui/templates/ui/partials/modal_form.html,sha256=_2cvsihB1tIZ5ydh2Vop_5fBVH-Nqwc01eYxh2TH2BQ,2158
|
178
185
|
accrete/contrib/ui/templates/ui/partials/onchange_form.html,sha256=8wNgZYnpa6ttc-OraOi1i02isJCcnaMtYwsmObc3qcY,109
|
179
186
|
accrete/contrib/ui/templates/ui/partials/pagination_detail.html,sha256=58nA3X7Il0FAD4VcYyr7tTGWRiVf_FN1TkImmKEpKHU,1014
|
180
187
|
accrete/contrib/ui/templates/ui/partials/pagination_list.html,sha256=Eyx1lsk9UIFFYPICL7RuYeUFaKVlmvWVXnFCGR-II7k,1324
|
@@ -182,8 +189,10 @@ accrete/contrib/ui/templates/ui/partials/table_field.html,sha256=4oQw0na9UgHP8lo
|
|
182
189
|
accrete/contrib/ui/templates/ui/partials/table_field_float.html,sha256=GH_jFdpk8wEJXv4QfO6c3URYrZGGLeuSyWwWl2cWxwQ,45
|
183
190
|
accrete/contrib/ui/templates/ui/partials/table_field_monetary.html,sha256=Wtod9vel2dD4vG8lUVLbtls4aU_2EG3p0E1QRRUSH10,166
|
184
191
|
accrete/contrib/ui/templates/ui/partials/table_field_string.html,sha256=GH_jFdpk8wEJXv4QfO6c3URYrZGGLeuSyWwWl2cWxwQ,45
|
192
|
+
accrete/contrib/ui/templates/ui/widgets/model_search_select.html,sha256=prJLy58XSJKlqOagI7gcVyHg-pcaUKqCFMfAP4aQEn8,2979
|
193
|
+
accrete/contrib/ui/templates/ui/widgets/model_search_select_multi.html,sha256=AFoAKEeB99f63CWwL-ougERnj-IQVya_jdDcwW7Bo80,4109
|
185
194
|
accrete/contrib/ui/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
186
|
-
accrete/contrib/ui/templatetags/accrete_ui.py,sha256=
|
195
|
+
accrete/contrib/ui/templatetags/accrete_ui.py,sha256=nGd6U5AVZvfwi4yHBoR6YUIIA3vYGkrHCs_m-T__pFk,3839
|
187
196
|
accrete/contrib/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
188
197
|
accrete/contrib/user/admin.py,sha256=YS4iApli7XUaIl9GsEJxys2j8sepX0by88omYHjff-E,85
|
189
198
|
accrete/contrib/user/apps.py,sha256=oHDrAiHf-G57mZLyxqGJzRY2DbPprGFD-QgyVJG_ruI,156
|
@@ -225,7 +234,7 @@ accrete/utils/forms.py,sha256=IvxbXNpSd4a-JBgsTJhs2GHe-DCRWX-xnVPRcoiCzbI,3104
|
|
225
234
|
accrete/utils/log.py,sha256=BH0MBDweAjx30wGBO4F3sFhbgkSoEs7T1lLLjlYZNnA,407
|
226
235
|
accrete/utils/models.py,sha256=EEhv7-sQVtQD24PEb3XcDUAh3VVhVFoMMLyFrDjGEaI,706
|
227
236
|
accrete/utils/views.py,sha256=iWZSYbd3qYMrV9wAsX26ofGb5wxn1N_nRrQ6s2lpp2I,4557
|
228
|
-
accrete-0.0.
|
229
|
-
accrete-0.0.
|
230
|
-
accrete-0.0.
|
231
|
-
accrete-0.0.
|
237
|
+
accrete-0.0.101.dist-info/METADATA,sha256=ZF8MU0HdYFEsShI4phQv86kglt-GWT_BAgpAdqc3Ks8,4953
|
238
|
+
accrete-0.0.101.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
239
|
+
accrete-0.0.101.dist-info/licenses/LICENSE,sha256=_7laeMIHnsd3Y2vJEXDYXq_PEXxIcjgJsGt8UIKTRWc,1057
|
240
|
+
accrete-0.0.101.dist-info/RECORD,,
|
File without changes
|
File without changes
|