djgentelella 0.3.29__py3-none-any.whl → 0.4.30__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.
- djgentelella/__init__.py +1 -1
- djgentelella/admin.py +4 -3
- djgentelella/fields/files.py +27 -1
- djgentelella/firmador_digital/__init__.py +0 -0
- djgentelella/firmador_digital/config/__init__.py +0 -0
- djgentelella/firmador_digital/config/asgi_config.py +32 -0
- djgentelella/firmador_digital/config/asgi_worker.py +5 -0
- djgentelella/firmador_digital/config/websocket_urls.py +4 -0
- djgentelella/firmador_digital/consumers/__init__.py +0 -0
- djgentelella/firmador_digital/consumers/pdf_render.py +8 -0
- djgentelella/firmador_digital/consumers/sign.py +148 -0
- djgentelella/firmador_digital/forms.py +28 -0
- djgentelella/firmador_digital/gunicorn/config_asgi.py +12 -0
- djgentelella/firmador_digital/gunicorn/config_wsgi.py +13 -0
- djgentelella/firmador_digital/models.py +33 -0
- djgentelella/firmador_digital/signvalue_utils.py +41 -0
- djgentelella/firmador_digital/utils.py +154 -0
- djgentelella/firmador_digital/viewsets.py +77 -0
- djgentelella/locale/es/LC_MESSAGES/django.mo +0 -0
- djgentelella/locale/es/LC_MESSAGES/django.po +103 -6
- djgentelella/locale/es/LC_MESSAGES/djangojs.mo +0 -0
- djgentelella/locale/es/LC_MESSAGES/djangojs.po +107 -8
- djgentelella/management/commands/createbasejs.py +3 -0
- djgentelella/management/commands/loaddevstatic.py +18 -0
- djgentelella/migrations/0013_usersignatureconfig.py +25 -0
- djgentelella/serializers/firmador_digital.py +103 -0
- djgentelella/settings.py +4 -2
- djgentelella/static/djgentelella.readonly.vendors.min.css +1 -1
- djgentelella/static/djgentelella.readonly.vendors.min.js +1 -1
- djgentelella/static/djgentelella.vendors.header.min.js +1 -1
- djgentelella/static/djgentelella.vendors.min.css +2 -2
- djgentelella/static/gentelella/css/pdfviewer.css +147 -0
- djgentelella/static/gentelella/images/firmador.ico +0 -0
- djgentelella/static/gentelella/js/base/digital_signature.js +945 -0
- djgentelella/static/gentelella/js/base.js +947 -0
- djgentelella/static/gentelella/js/datatables.js +2 -2
- djgentelella/static/gentelella/js/widgets.js +72 -59
- djgentelella/static/vendors/friconix/friconix.js +1 -1
- djgentelella/static/vendors/pdfjs/images/altText_add.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/altText_disclaimer.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/altText_done.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/altText_spinner.svg +30 -0
- djgentelella/static/vendors/pdfjs/images/altText_warning.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/cursor-editorFreeHighlight.svg +6 -0
- djgentelella/static/vendors/pdfjs/images/cursor-editorFreeText.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/cursor-editorInk.svg +4 -0
- djgentelella/static/vendors/pdfjs/images/cursor-editorTextHighlight.svg +8 -0
- djgentelella/static/vendors/pdfjs/images/editor-toolbar-delete.svg +5 -0
- djgentelella/static/vendors/pdfjs/images/loading-icon.gif +0 -0
- djgentelella/static/vendors/pdfjs/images/messageBar_closingButton.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/messageBar_warning.svg +3 -0
- djgentelella/static/vendors/pdfjs/images/toolbarButton-editorHighlight.svg +6 -0
- djgentelella/static/vendors/pdfjs/images/toolbarButton-menuArrow.svg +3 -0
- djgentelella/static/vendors/timeline/css/timeline.css +1 -1
- djgentelella/static/vendors/timeline/js/timeline.js +1 -1
- djgentelella/templates/gentelella/registration/login.html +38 -42
- djgentelella/templates/gentelella/statics/javascript.html +75 -61
- djgentelella/templates/gentelella/statics/stylesheets.html +11 -10
- djgentelella/templates/gentelella/widgets/addtreeselect.html +1 -1
- djgentelella/templates/gentelella/widgets/chunkedupload.html +2 -2
- djgentelella/templates/gentelella/widgets/digital_signature.html +208 -0
- djgentelella/templates/gentelella/widgets/file.html +15 -16
- djgentelella/templatetags/gtsettings.py +4 -0
- djgentelella/urls.py +1 -1
- djgentelella/widgets/core.py +5 -2
- djgentelella/widgets/digital_signature.py +116 -0
- {djgentelella-0.3.29.dist-info → djgentelella-0.4.30.dist-info}/METADATA +18 -20
- {djgentelella-0.3.29.dist-info → djgentelella-0.4.30.dist-info}/RECORD +72 -35
- {djgentelella-0.3.29.dist-info → djgentelella-0.4.30.dist-info}/WHEEL +1 -1
- {djgentelella-0.3.29.dist-info → djgentelella-0.4.30.dist-info}/AUTHORS +0 -0
- {djgentelella-0.3.29.dist-info → djgentelella-0.4.30.dist-info}/LICENSE.txt +0 -0
- {djgentelella-0.3.29.dist-info → djgentelella-0.4.30.dist-info}/top_level.txt +0 -0
|
@@ -1,52 +1,48 @@
|
|
|
1
1
|
{% extends 'gentelella/base.html' %}
|
|
2
2
|
{% load static i18n %}
|
|
3
3
|
|
|
4
|
-
{% block extra_css %}
|
|
5
|
-
<link href="{% trans 'vendors/animate.css/animate.min.css' %}" rel="stylesheet">
|
|
6
|
-
{% endblock %}
|
|
7
|
-
|
|
8
4
|
{% block body_class %}login{% endblock body_class %}
|
|
9
5
|
{% block body %}
|
|
10
6
|
<div>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
<a class="hiddenanchor" id="signup"></a>
|
|
8
|
+
<a class="hiddenanchor" id="signin"></a>
|
|
9
|
+
<div class="login_wrapper">
|
|
10
|
+
<div class="animate form login_form">
|
|
11
|
+
<section class="login_content">
|
|
12
|
+
<form method="post" action="{% url 'login' %}">
|
|
13
|
+
{% csrf_token %}
|
|
14
|
+
<input type="hidden" name="next" value="{{ next }}">
|
|
15
|
+
<h1>{% trans 'Login' %}</h1>
|
|
16
|
+
<div>
|
|
17
|
+
{% if form.errors %}
|
|
18
|
+
<p class="text-warning">{% trans "Your username and password didn't match. Please try again." %}</p>
|
|
19
|
+
{% endif %}
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
{% if next %}
|
|
22
|
+
{% if user.is_authenticated %}
|
|
23
|
+
<p>{% blocktrans %}Your account doesn't have access to this page. To proceed,
|
|
24
|
+
please login with an account that has access.{% endblocktrans %}</p>
|
|
25
|
+
{% else %}
|
|
26
|
+
<p class="text-warning">{% trans "Please login to see this page." %}</p>
|
|
27
|
+
{% endif %}
|
|
28
|
+
{% endif %}
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
30
|
+
</div>
|
|
31
|
+
<div>
|
|
32
|
+
<input type="text" class="form-control" name="username" placeholder="{% trans 'Username' %}" required=""/>
|
|
33
|
+
</div>
|
|
34
|
+
<div>
|
|
35
|
+
<input type="password" class="form-control" name="password" placeholder="{% trans 'Password' %}" required=""/>
|
|
36
|
+
</div>
|
|
37
|
+
<div>
|
|
38
|
+
<button type="submit" class="btn btn-secondary submit">{% trans 'Log in' %}</button>
|
|
39
|
+
<a class="reset_pass" href="{% url 'password_reset' %}">{% trans 'Lost your password?' %}</a>
|
|
40
|
+
</div>
|
|
45
41
|
|
|
46
|
-
{% include 'gentelella/registration/footer.html' %}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
{% include 'gentelella/registration/footer.html' %}
|
|
43
|
+
</form>
|
|
44
|
+
</section>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
51
47
|
</div>
|
|
52
|
-
{% endblock %}
|
|
48
|
+
{% endblock %}
|
|
@@ -2,43 +2,57 @@
|
|
|
2
2
|
{% get_settings 'use_compress_static' as use_compress %}
|
|
3
3
|
{% get_define 'use_readonlywidgets' as use_readonlywidgets %}
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
<script type="module" src="{% static 'vendors/pdfjs/pdf.
|
|
5
|
+
<!-- Pdf js -->
|
|
6
|
+
<script type="module" src="{% static 'vendors/pdfjs/pdf.min.mjs' %}?v={% get_version %}"></script>
|
|
7
|
+
<script type="module" src="{% static 'vendors/pdfjs/pdf.worker.min.mjs' %}?v={% get_version %}"></script>
|
|
7
8
|
|
|
8
9
|
{% if use_compress == 'true' %}
|
|
9
|
-
<script src="{% static 'djgentelella.vendors.min.js' %}?v={% get_version %}"></script>
|
|
10
|
-
{% if use_readonlywidgets %}
|
|
11
|
-
<script src="{% static 'djgentelella.readonly.vendors.min.js' %}?v={% get_version %}"></script>
|
|
12
|
-
{% endif %}
|
|
13
|
-
<script src="{% static 'vendors/tinymce/tinymce.min.js' %}?v={% get_version %}"></script>
|
|
14
|
-
<script src="{% static 'vendors/tinymce/jquery.tinymce.min.js' %}?v={% get_version %}"></script>
|
|
15
|
-
<script src="{% static 'vendors/tinymce/tinymce-all.js' %}?v={% get_version %}"></script>
|
|
10
|
+
<script src="{% static 'djgentelella.vendors.min.js' %}?v={% get_version %}"></script>
|
|
11
|
+
{% if use_readonlywidgets %}
|
|
12
|
+
<script src="{% static 'djgentelella.readonly.vendors.min.js' %}?v={% get_version %}"></script>
|
|
13
|
+
{% endif %}
|
|
14
|
+
<script src="{% static 'vendors/tinymce/tinymce.min.js' %}?v={% get_version %}"></script>
|
|
15
|
+
<script src="{% static 'vendors/tinymce/jquery.tinymce.min.js' %}?v={% get_version %}"></script>
|
|
16
|
+
<script src="{% static 'vendors/tinymce/tinymce-all.js' %}?v={% get_version %}"></script>
|
|
16
17
|
|
|
17
18
|
{% else %}
|
|
18
|
-
<script src="{% static 'vendors/squirrelly/squirrelly.min.js' %}?v={% get_version %}"></script>
|
|
19
|
-
<script src="{% static 'vendors/moment/moment-with-locales.min.js' %}?v={% get_version %}"></script>
|
|
20
|
-
<script src="{% static 'vendors/jquery-knob/jquery.knob.min.js' %}?v={% get_version %}"></script>
|
|
21
|
-
<script src="{% static 'vendors/inputmask/inputmask.min.js' %}?v={% get_version %}"></script>
|
|
22
|
-
<script src="{% static 'vendors/inputmask/jquery.inputmask.min.js' %}?v={% get_version %}"></script>
|
|
23
|
-
<script src="{% static 'vendors/nprogress/nprogress.min.js' %}?v={% get_version %}"></script>
|
|
24
|
-
<script src="{% static 'vendors/bootstrap-progressbar/bootstrap-progressbar.min.js' %}?v={% get_version %}"></script>
|
|
25
|
-
<script src="{% static 'vendors/iCheck/icheck.min.js' %}?v={% get_version %}"></script>
|
|
26
|
-
<script src="{% static 'vendors/interact/interact.min.js' %}?v={% get_version %}"></script>
|
|
27
|
-
<script src="{% static 'vendors/bootstrap-daterangepicker/daterangepicker.min.js' %}?v={% get_version %}"></script>
|
|
28
|
-
<script
|
|
29
|
-
|
|
30
|
-
<!-- Switchery -->
|
|
31
|
-
<script src="{% static 'vendors/switchery/switchery.min.js' %}?v={% get_version %}"></script>
|
|
32
|
-
<!-- Select2 -->
|
|
33
|
-
<script src="{% static 'vendors/select2/select2.min.js' %}?v={% get_version %}"></script>
|
|
34
|
-
<script src="{% static 'vendors/parsleyjs/parsley.min.js' %}?v={% get_version %}"></script>
|
|
35
|
-
<!-- Autosize -->
|
|
36
|
-
<script src="{% static 'vendors/autosize/autosize.min.js' %}?v={% get_version %}"></script>
|
|
37
|
-
<script src="{% static 'vendors/bootstrap-maxlength/bootstrap-maxlength.min.js' %}?v={% get_version %}"></script>
|
|
38
|
-
<script src="{% static 'vendors/fileupload/jquery.ui.widget.min.js' %}?v={% get_version %}"></script>
|
|
39
|
-
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
|
|
40
|
-
<!-- Grid Slider Plugin-->
|
|
41
|
-
<script src="{% static 'vendors/grid-slider/ion.rangeSlider.min.js' %}?v={% get_version %}"></script>
|
|
19
|
+
<script src="{% static 'vendors/squirrelly/squirrelly.min.js' %}?v={% get_version %}"></script>
|
|
20
|
+
<script src="{% static 'vendors/moment/moment-with-locales.min.js' %}?v={% get_version %}"></script>
|
|
21
|
+
<script src="{% static 'vendors/jquery-knob/jquery.knob.min.js' %}?v={% get_version %}"></script>
|
|
22
|
+
<script src="{% static 'vendors/inputmask/inputmask.min.js' %}?v={% get_version %}"></script>
|
|
23
|
+
<script src="{% static 'vendors/inputmask/jquery.inputmask.min.js' %}?v={% get_version %}"></script>
|
|
24
|
+
<script src="{% static 'vendors/nprogress/nprogress.min.js' %}?v={% get_version %}"></script>
|
|
25
|
+
<script src="{% static 'vendors/bootstrap-progressbar/bootstrap-progressbar.min.js' %}?v={% get_version %}"></script>
|
|
26
|
+
<script src="{% static 'vendors/iCheck/icheck.min.js' %}?v={% get_version %}"></script>
|
|
27
|
+
<script src="{% static 'vendors/interact/interact.min.js' %}?v={% get_version %}"></script>
|
|
28
|
+
<script src="{% static 'vendors/bootstrap-daterangepicker/daterangepicker.min.js' %}?v={% get_version %}"></script>
|
|
29
|
+
<script
|
|
30
|
+
src="{% static 'vendors/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js' %}?v={% get_version %}"></script>
|
|
31
|
+
<!-- Switchery -->
|
|
32
|
+
<script src="{% static 'vendors/switchery/switchery.min.js' %}?v={% get_version %}"></script>
|
|
33
|
+
<!-- Select2 -->
|
|
34
|
+
<script src="{% static 'vendors/select2/select2.min.js' %}?v={% get_version %}"></script>
|
|
35
|
+
<script src="{% static 'vendors/parsleyjs/parsley.min.js' %}?v={% get_version %}"></script>
|
|
36
|
+
<!-- Autosize -->
|
|
37
|
+
<script src="{% static 'vendors/autosize/autosize.min.js' %}?v={% get_version %}"></script>
|
|
38
|
+
<script src="{% static 'vendors/bootstrap-maxlength/bootstrap-maxlength.min.js' %}?v={% get_version %}"></script>
|
|
39
|
+
<script src="{% static 'vendors/fileupload/jquery.ui.widget.min.js' %}?v={% get_version %}"></script>
|
|
40
|
+
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
|
|
41
|
+
<!-- Grid Slider Plugin-->
|
|
42
|
+
<script src="{% static 'vendors/grid-slider/ion.rangeSlider.min.js' %}?v={% get_version %}"></script>
|
|
43
|
+
<script src="{% static 'vendors/fileupload/jquery.iframe-transport.min.js' %}?v={% get_version %}"></script>
|
|
44
|
+
<!-- The basic File Upload plugin -->
|
|
45
|
+
<script src="{% static 'vendors/fileupload/jquery.fileupload.min.js' %}?v={% get_version %}"></script>
|
|
46
|
+
<!-- Calculate md5 -->
|
|
47
|
+
<script src="{% static 'vendors/fileupload/spark-md5.min.js' %}?v={% get_version %}"></script>
|
|
48
|
+
<script src="{% static 'vendors/tagify/tagify.min.js' %}?v={% get_version %}"></script>
|
|
49
|
+
<script src="{% static 'vendors/tagify/jQuery.tagify.min.js' %}?v={% get_version %}"></script>
|
|
50
|
+
<script src="{% static 'vendors/tinymce/tinymce.min.js' %}?v={% get_version %}"></script>
|
|
51
|
+
<script src="{% static 'vendors/tinymce/jquery.tinymce.min.js' %}?v={% get_version %}"></script>
|
|
52
|
+
<script src="{% static 'vendors/tinymce/tinymce-all.js' %}?v={% get_version %}"></script>
|
|
53
|
+
<script src="{% static 'vendors/sweetalert2/sweetalert2.all.min.js' %}?v={% get_version %}"></script>
|
|
54
|
+
<!-- Pdf js -->
|
|
55
|
+
<script src="{% static 'vendors/pdfjs/interact.min.js' %}?v={% get_version %}"></script>
|
|
42
56
|
|
|
43
57
|
<script src="{% static 'vendors/fileupload/jquery.iframe-transport.min.js' %}?v={% get_version %}"></script>
|
|
44
58
|
<!-- The basic File Upload plugin -->
|
|
@@ -62,39 +76,39 @@
|
|
|
62
76
|
{% endif %}
|
|
63
77
|
|
|
64
78
|
{% if use_compress == 'true' %}
|
|
65
|
-
<script src="{% static 'gentelella/js/datatables.js' %}?v={% get_version %}"></script>
|
|
66
|
-
<script src="{% static 'gentelella/js/obj_api_management.js' %}?v={% get_version %}"></script>
|
|
79
|
+
<script src="{% static 'gentelella/js/datatables.js' %}?v={% get_version %}"></script>
|
|
80
|
+
<script src="{% static 'gentelella/js/obj_api_management.js' %}?v={% get_version %}"></script>
|
|
67
81
|
{% else %}
|
|
68
|
-
<script src="{% static 'vendors/datatables/datatables.min.js' %}?v={% get_version %}"></script>
|
|
69
|
-
<script src="{% static 'gentelella/js/datatables.js' %}?v={% get_version %}"></script>
|
|
70
|
-
<script src="{% static 'gentelella/js/obj_api_management.js' %}?v={% get_version %}"></script>
|
|
71
|
-
<script src="{% static 'vendors/chartjs/Chart.min.js' %}?v={% get_version %}"></script>
|
|
82
|
+
<script src="{% static 'vendors/datatables/datatables.min.js' %}?v={% get_version %}"></script>
|
|
83
|
+
<script src="{% static 'gentelella/js/datatables.js' %}?v={% get_version %}"></script>
|
|
84
|
+
<script src="{% static 'gentelella/js/obj_api_management.js' %}?v={% get_version %}"></script>
|
|
85
|
+
<script src="{% static 'vendors/chartjs/Chart.min.js' %}?v={% get_version %}"></script>
|
|
72
86
|
{% endif %}
|
|
73
87
|
<!-- Custom Theme Scripts -->
|
|
74
88
|
<script src="{% static 'gentelella/js/base.js' %}?v={% get_version %}"></script>
|
|
75
89
|
<script src="{% static 'gentelella/js/widgets.js' %}?v={% get_version %}"></script>
|
|
76
90
|
<script src="{% static 'gentelella/js/custom.js' %}?v={% get_version %}"></script>
|
|
77
91
|
{% if perms.djgentelella.can_manage_permissions %}
|
|
78
|
-
{% get_urlname_action as urlnameactions %}
|
|
79
|
-
{% if urlnameactions %}
|
|
80
|
-
<script>
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
</script>
|
|
98
|
-
<script src="{% static 'gentelella/js/permissionmanagement.js' %}?v={% get_version %}"></script>
|
|
99
|
-
{% endif %}
|
|
92
|
+
{% get_urlname_action as urlnameactions %}
|
|
93
|
+
{% if urlnameactions %}
|
|
94
|
+
<script>
|
|
95
|
+
var permission_context = {
|
|
96
|
+
'select_user_url': "{% url 'userbase-list' %}",
|
|
97
|
+
'select_group_url': "{% url 'groupbase-list' %}",
|
|
98
|
+
'user_placeholder': "{% trans 'Select an User' %}",
|
|
99
|
+
'group_placeholder': "{% trans 'Select a Group' %}",
|
|
100
|
+
'get_permissions': "{% url 'permission_view_list' pk=0 %}",
|
|
101
|
+
'save_permissions': "{% url 'permcategorymanagement-save' %}",
|
|
102
|
+
'user_label': "{% trans 'User' %}",
|
|
103
|
+
'validation_error': "{% trans 'There are fields with invalid options' %}",
|
|
104
|
+
'not_found_object': "{% trans 'Not found' %}",
|
|
105
|
+
'group_label': "{% trans 'Group' %}",
|
|
106
|
+
'not_found_permissions_label': "{% trans 'This view has not permissions associated.' %}",
|
|
107
|
+
'not_select_valid_option': "{% trans 'You have not selected a valid option.' %}",
|
|
108
|
+
'save_messages': "{% trans 'Permission have been successfully saved.' %}",
|
|
109
|
+
'error': "{% trans 'An error occurred while saving.' %}",
|
|
110
|
+
};
|
|
111
|
+
</script>
|
|
112
|
+
<script src="{% static 'gentelella/js/permissionmanagement.js' %}?v={% get_version %}"></script>
|
|
113
|
+
{% endif %}
|
|
100
114
|
{% endif %}
|
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
<script> datatables_lang = "{% get_datatables_translation %}"; </script>
|
|
4
4
|
{% get_settings 'use_compress_static' as use_compress %}
|
|
5
5
|
{% if use_compress == 'true' %}
|
|
6
|
-
<link href="{% static '
|
|
7
|
-
{%
|
|
8
|
-
{%
|
|
9
|
-
|
|
10
|
-
{%
|
|
11
|
-
|
|
12
|
-
{%
|
|
13
|
-
{%
|
|
14
|
-
|
|
15
|
-
{%
|
|
6
|
+
<link href="{% static 'gentelella/css/pdfviewer.css' %}?v={% get_version %}" rel="stylesheet">
|
|
7
|
+
<link href="{% static 'djgentelella.vendors.min.css' %}?v={% get_version %}" rel="stylesheet">
|
|
8
|
+
{% get_define 'use_flags' as use_flags %}
|
|
9
|
+
{% if use_flags %}
|
|
10
|
+
<link href="{% static 'djgentelella.flags.vendors.min.css' %}?v={% get_version %}" rel="stylesheet">
|
|
11
|
+
{% endif %}
|
|
12
|
+
<link href="{% static 'vendors/tinymce/skin.min.css' %}?v={% get_version %}" rel="stylesheet"/>
|
|
13
|
+
{% get_define 'use_readonlywidgets' as use_readonlywidgets %}
|
|
14
|
+
{% if use_readonlywidgets %}
|
|
15
|
+
<link href="{% static 'djgentelella.readonly.vendors.min.css' %}?v={% get_version %}" rel="stylesheet">
|
|
16
|
+
{% endif %}
|
|
16
17
|
{% else %}
|
|
17
18
|
<link href="{% static 'vendors/bootstrap/bootstrap.min.css' %}?v={% get_version %}" rel="stylesheet">
|
|
18
19
|
<link href="{% static 'vendors/font-awesome/font-awesome.min.css' %}?v={% get_version %}" rel="stylesheet">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% load i18n %}
|
|
2
|
-
<div class="input-group">
|
|
2
|
+
<div class="input-group flex-nowrap">
|
|
3
3
|
<div id="add_{{ widget.name }}_id" data-toggle="modal" data-bs-target="#modal_{{ widget.name }}_id" class="input-group-addon gentelella_select_add"><i class="fa fa-plus"></i></div>
|
|
4
4
|
<select name="{{ widget.name }}" data-modalname="#modal_{{ widget.name }}_id" {% include "gentelella/widgets/attrs.html" %} >
|
|
5
5
|
{% for group_name, group_choices, group_index in widget.optgroups %}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{% load i18n %}
|
|
2
2
|
<div class="fileupload">
|
|
3
3
|
<div class="input-group flex-nowrap">
|
|
4
|
-
<div
|
|
4
|
+
<div class="input-group-text {{ widget.name }}_progress"><i class="fa fa-file"></i></div>
|
|
5
5
|
<div class="uploadfilecontent chunkedupload">
|
|
6
|
-
<input class="chunkedupload-input"
|
|
6
|
+
<input class="chunkedupload-input" type="{{ widget.type }}" data-inputtoken="{{ widget.name }}" data-process=".{{ widget.name }}_progress" data-message=".{{ widget.name }}_messages" name="{{ widget.name }}_widget" {% include "gentelella/widgets/attrs.html" %}>
|
|
7
7
|
</div>
|
|
8
8
|
<div class="form-control {{ widget.name }}_messages" style="display:none;"></div>
|
|
9
9
|
<input class="chunkedvalue" type="hidden" name="{{ widget.name }}" value='{{widget.value}}' autocomplete="off"/>
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
{% load urlname_tags %}
|
|
2
|
+
{% load gentelellamenu gtsettings %}
|
|
3
|
+
{% load i18n %}
|
|
4
|
+
{% load static %}
|
|
5
|
+
|
|
6
|
+
<div class="row my-3 widget-digital-signature">
|
|
7
|
+
|
|
8
|
+
{# optional title #}
|
|
9
|
+
{% if widget.attrs.title %}
|
|
10
|
+
<h5 class="text-center mb-3 mt-2 text-secondary fw-bold">
|
|
11
|
+
{{ widget.attrs.title }}
|
|
12
|
+
</h5>
|
|
13
|
+
{% endif %}
|
|
14
|
+
|
|
15
|
+
{# digital signature card #}
|
|
16
|
+
<div class="col-12 col-md-4">
|
|
17
|
+
|
|
18
|
+
<div id="container_select_card_tem">
|
|
19
|
+
<div class="d-flex justify-content-end">
|
|
20
|
+
{# btn refresh #}
|
|
21
|
+
<i class="fa fa-refresh text-muted fs-5 cursor-pointer btn_signer_refresh"
|
|
22
|
+
title="{% trans 'Reload' %}"
|
|
23
|
+
aria-hidden="true"></i>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<h6 class="text-danger fw-bold my-2">
|
|
27
|
+
{% trans 'The signed option is not available.' %}
|
|
28
|
+
</h6>
|
|
29
|
+
|
|
30
|
+
<p class="fw-bold mx-1">
|
|
31
|
+
{% trans "We did not find an electronic signature card." %}
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<p class="mx-1">
|
|
35
|
+
{% trans 'Please make sure to comply with the notices or resolve the errors.' %}
|
|
36
|
+
</p>
|
|
37
|
+
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div id="container_select_card" class="d-flex justify-content-center flex-column d-none p-2">
|
|
41
|
+
<div class="d-flex justify-content-between align-items-center my-3">
|
|
42
|
+
<label for="select_card_{{ widget.attrs.id }}" class="text-center fw-bold">
|
|
43
|
+
{% trans 'Choose your signature card' %}
|
|
44
|
+
</label>
|
|
45
|
+
|
|
46
|
+
{# btn refresh #}
|
|
47
|
+
<i class="fa fa-refresh text-muted fs-5 cursor-pointer btn_signer_refresh"
|
|
48
|
+
title="{% trans 'Reload' %}"
|
|
49
|
+
aria-hidden="true"></i>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
{# select card #}
|
|
53
|
+
<div class="select-container" title="{% trans 'Electronic signature card' %}">
|
|
54
|
+
<i class="fa fa-credit-card-alt ms-2" aria-hidden="true"></i>
|
|
55
|
+
<select id="select_card_{{ widget.attrs.id }}" class="form-select select_card" name="{{ widget.name }}_select">
|
|
56
|
+
</select>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
{# btn sign #}
|
|
60
|
+
<div class="my-3 d-flex align-items-center justify-content-evenly">
|
|
61
|
+
<button class="btn btn-primary w-50 rounded formadd btn-sm px-3 btn_signer"
|
|
62
|
+
type="button">{% trans 'Sign' %}</button>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
{# info messages #}
|
|
67
|
+
<div class="row m-1">
|
|
68
|
+
<p class="text-muted fw-bold m-0 p-0">
|
|
69
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
70
|
+
{% trans 'Notices' %}
|
|
71
|
+
</p>
|
|
72
|
+
<ul class="m-0 p-0 ms-2">
|
|
73
|
+
<li>
|
|
74
|
+
<small> 1) {% trans 'You need Firmador Libre installed in order to sign.' %} </small>
|
|
75
|
+
</li>
|
|
76
|
+
<li>
|
|
77
|
+
<small> 2) {% trans 'Make sure your version is 1.9.8 or later.' %}
|
|
78
|
+
</small>
|
|
79
|
+
</li>
|
|
80
|
+
<li>
|
|
81
|
+
<small> 3) {% trans 'Run the application before proceeding with the signature.' %} </small>
|
|
82
|
+
</li>
|
|
83
|
+
<li>
|
|
84
|
+
<small>
|
|
85
|
+
4)
|
|
86
|
+
{% trans "If the autolauncher doesn't work, I used this command line." %}
|
|
87
|
+
<i class="fa fa-info-circle cursor-pointer" title="{% trans 'Show command' %}" id="show-command-line"
|
|
88
|
+
aria-hidden="true"></i>
|
|
89
|
+
</small>
|
|
90
|
+
</li>
|
|
91
|
+
</ul>
|
|
92
|
+
|
|
93
|
+
<div class="row">
|
|
94
|
+
<p id="text-copy" class="text-center text-muted p-0 m-0 small d-none">
|
|
95
|
+
{% trans 'Copied to clipboard' %}
|
|
96
|
+
</p>
|
|
97
|
+
<div id="container-command-line" class="text-wrap bg-light text-center p-2 rounded shadow-sm d-none">
|
|
98
|
+
<div class="d-flex justify-content-end">
|
|
99
|
+
<i class="fa fa-clipboard cursor-pointer text-black" id="copy-command-line"
|
|
100
|
+
title="{% trans 'Copy to clipboard' %}" aria-hidden="true"></i>
|
|
101
|
+
</div>
|
|
102
|
+
<pre id="command-line" class="text-wrap small">
|
|
103
|
+
java --add-exports=jdk.crypto.cryptoki/sun.security.pkcs11.wrapper=ALL-UNNAMED -Djnlp.remoteOrigin={{ request.scheme }}://{{ request.get_host }} -jar firmador.jar -dremote
|
|
104
|
+
</pre>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
{# firmador messages #}
|
|
111
|
+
<div class="row m-1 pt-2">
|
|
112
|
+
<p class="text-muted fw-bold m-0 p-0 d-flex align-items-center">
|
|
113
|
+
<span class="me-2"> Firmador Libre </span>
|
|
114
|
+
<img src="{% static 'gentelella/images/firmador.ico' %}" width="20" alt="Firmador Libre">
|
|
115
|
+
</p>
|
|
116
|
+
<ul class="m-0 p-0 ms-2">
|
|
117
|
+
<li>
|
|
118
|
+
<a class="small"
|
|
119
|
+
title="{% trans 'Download Firmador Libre' %}"
|
|
120
|
+
href="https://firmador.libre.cr/descargar.html" target="_blank">
|
|
121
|
+
{% trans 'Download app' %}
|
|
122
|
+
<i class="fa fa-download" aria-hidden="true"></i>
|
|
123
|
+
</a>
|
|
124
|
+
</li>
|
|
125
|
+
<li>
|
|
126
|
+
<a class="small"
|
|
127
|
+
title="{% trans 'Run Firmador Libre' %}"
|
|
128
|
+
href="firmador:{{ widget.attrs.cors }}">
|
|
129
|
+
{% trans 'Run app' %}
|
|
130
|
+
<i class="fa fa-cog" aria-hidden="true"></i>
|
|
131
|
+
</a>
|
|
132
|
+
</li>
|
|
133
|
+
</ul>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
{# error messages #}
|
|
137
|
+
<div id="signature-errors" class="errors_signer row m-1">
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
{# preview file #}
|
|
143
|
+
<div class="col-12 col-md-8">
|
|
144
|
+
<div class="pdf-signature-container" id="pdf-signature-container">
|
|
145
|
+
{# actions for change page#}
|
|
146
|
+
<div class="my-3 d-flex align-items-center justify-content-evenly">
|
|
147
|
+
<input type="hidden" name="{{ widget.name }}_page_number" class="page_number">
|
|
148
|
+
<input type="hidden" name="{{ widget.name }}"
|
|
149
|
+
{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %} {% include "gentelella/widgets/attrs.html" %}>
|
|
150
|
+
|
|
151
|
+
{# button to change page #}
|
|
152
|
+
<div>
|
|
153
|
+
<button type="button" class="btn btn-light px-3 shadow-sm border btn-sm prev" title="{% trans 'Previous' %} ">
|
|
154
|
+
<i class="fa fa-angle-double-left" aria-hidden="true"></i>
|
|
155
|
+
</button>
|
|
156
|
+
<button type="button" class="btn btn-light px-3 shadow-sm border btn-sm next" title="{% trans 'Next' %} ">
|
|
157
|
+
<i class="fa fa-angle-double-right" aria-hidden="true"></i>
|
|
158
|
+
</button>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
{# number of pages #}
|
|
162
|
+
<div class="border rounded px-3 py-1 shadow-sm ">
|
|
163
|
+
<i class="fa fa-file-o me-1" aria-hidden="true" title="{% trans 'Page' %}"></i>
|
|
164
|
+
<span class="page_num"></span> / <span class="page_count"></span>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
{# preview document #}
|
|
169
|
+
<div class="d-flex justify-content-center canvas_container">
|
|
170
|
+
<div class="sub_canvas_container">
|
|
171
|
+
<div class="signature">
|
|
172
|
+
<div class="image"></div>
|
|
173
|
+
<div class="text"></div>
|
|
174
|
+
</div>
|
|
175
|
+
<canvas class="pdfviewer"></canvas>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
{# warning message #}
|
|
180
|
+
<div class="text-muted text-center my-3">
|
|
181
|
+
<p class="small">
|
|
182
|
+
<i class="fa fa-exclamation-circle me-2" aria-hidden="true"></i>
|
|
183
|
+
{% trans "Please go to the last page, in the signature space, try to place your signature vertically centered." %}
|
|
184
|
+
</p>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
{# loading #}
|
|
190
|
+
<div class="modal fade" id="loading_sign" style="background-color: rgba(0, 0, 0, 0.3);" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
|
|
191
|
+
aria-hidden="true">
|
|
192
|
+
<div class="modal-dialog modal-dialog-centered">
|
|
193
|
+
<div class="modal-content bg-transparent border-0">
|
|
194
|
+
<div class="d-flex flex-column justify-content-center align-items-center text-white">
|
|
195
|
+
<span class="spinner-border" style="width: 3rem; height: 3rem;" role="status" aria-hidden="true"></span>
|
|
196
|
+
<h6 class="text-center fw-bold mt-3 loading-animation"> {% trans "Loading..." %} </h6>
|
|
197
|
+
|
|
198
|
+
<p class="text-center mt-3 fw-bold">
|
|
199
|
+
{% trans "Please wait while the document is being signed." %}
|
|
200
|
+
</p>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
</div>
|
|
207
|
+
|
|
208
|
+
|
|
@@ -2,24 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
<div class="fileupload">
|
|
4
4
|
<div class="input-group flex-nowrap">
|
|
5
|
-
<div
|
|
6
|
-
<div class="uploadfilecontent">
|
|
7
|
-
<input type="{{ widget.type }}" data-inputtoken="{{ widget.name }}" data-process=".{{ widget.name }}_progress" data-message=".{{ widget.name }}_messages" name="{{ widget.name }}_widget" {% include "gentelella/widgets/attrs.html" %}>
|
|
5
|
+
<div class="input-group-text {{ widget.name }}_progress"><i class="fa fa-file"></i></div>
|
|
6
|
+
<div class="uploadfilecontent chunkedupload">
|
|
7
|
+
<input class="chunkedupload-input" type="{{ widget.type }}" data-inputtoken="{{ widget.name }}" data-process=".{{ widget.name }}_progress" data-message=".{{ widget.name }}_messages" name="{{ widget.name }}_widget" {% include "gentelella/widgets/attrs.html" %}>
|
|
8
8
|
</div>
|
|
9
|
-
<div
|
|
10
|
-
<input type="hidden" name="{{ widget.name }}" value="{{ widget.value
|
|
9
|
+
<div class="form-control {{ widget.name }}_messages" style="display:none;"></div>
|
|
10
|
+
<input type="hidden" name="{{ widget.name }}" value="{{ widget.value|default:'' }}" autocomplete="off" />
|
|
11
11
|
<div class="input-group-text fileshow" ><i class="fa fa-eye"></i></div>
|
|
12
|
-
<div id="download_{{ widget.name }}" class="input-group-text bg-danger" >
|
|
13
|
-
<a href="" target="_blank"><i class="fa fa-download text-light"></i></a>
|
|
12
|
+
<div id="download_{{ widget.name }}" class="input-group-text bg-danger" {% if not widget.value %}style="display:none;"{% endif %}>
|
|
13
|
+
<a href="{% if widget.value %}{{widget.value.url}}{%endif%}" target="_blank"><i class="fa fa-download text-light"></i></a>
|
|
14
14
|
</div>
|
|
15
15
|
</div>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
</
|
|
24
|
-
</div>
|
|
16
|
+
<div id="remove_{{ widget.name }}" class="checkbox">
|
|
17
|
+
<label class="">
|
|
18
|
+
<div class="icheckbox_flat-green" style="position: relative;">
|
|
19
|
+
<input id="id_remove_{{ widget.name }}" type="checkbox" autocomplete="off" data-widget="CheckboxInput" name="remove_{{ widget.name }}_gt" class="flat" style="position: absolute; opacity: 0;">
|
|
20
|
+
<ins class="iCheck-helper" ></ins></div>
|
|
21
|
+
{% trans 'Delete this file' %}
|
|
22
|
+
</label>
|
|
23
|
+
</div>
|
|
25
24
|
</div>
|
|
@@ -52,3 +52,7 @@ def get_define(context, val):
|
|
|
52
52
|
value = settings.DEFAULT_JS_IMPORTS[val]
|
|
53
53
|
value = getattr(context['request'], val, value)
|
|
54
54
|
return value
|
|
55
|
+
|
|
56
|
+
@register.simple_tag(takes_context=True)
|
|
57
|
+
def get_websocket_url(context, name, *args, default="sign_document", **kwargs):
|
|
58
|
+
return settings.FIRMADOR_WS + name
|
djgentelella/urls.py
CHANGED
|
@@ -55,7 +55,6 @@ wysiwyg_urls = [
|
|
|
55
55
|
name="tinymce_upload_video"),
|
|
56
56
|
]
|
|
57
57
|
|
|
58
|
-
|
|
59
58
|
def import_module_app_gt(app, name):
|
|
60
59
|
try:
|
|
61
60
|
__import__(app + '.' + name)
|
|
@@ -101,6 +100,7 @@ permission_management_urls = [
|
|
|
101
100
|
]
|
|
102
101
|
|
|
103
102
|
urlpatterns = auth_urls + base_urlpatterns + wysiwyg_urls + permission_management_urls
|
|
103
|
+
|
|
104
104
|
if settings.DEBUG:
|
|
105
105
|
urlpatterns += [
|
|
106
106
|
path('djsi18n/', JavaScriptCatalog.as_view(), name='djgentelella-js-catalog'),
|
djgentelella/widgets/core.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
1
3
|
from django.forms import (
|
|
2
4
|
PasswordInput as DJPasswordInput,
|
|
3
5
|
FileInput as DJFileInput,
|
|
@@ -178,7 +180,7 @@ class FileInput(DJFileInput):
|
|
|
178
180
|
attrs = update_kwargs(
|
|
179
181
|
attrs,
|
|
180
182
|
self.__class__.__name__,
|
|
181
|
-
base_class='djgentelella-file-
|
|
183
|
+
base_class='djgentelella-file-input form-control')
|
|
182
184
|
if 'data-href' not in attrs:
|
|
183
185
|
attrs.update({'data-href': reverse_lazy('upload_file_view')})
|
|
184
186
|
if 'data-done' not in attrs:
|
|
@@ -192,7 +194,8 @@ class FileInput(DJFileInput):
|
|
|
192
194
|
def value_from_datadict(self, data, files, name):
|
|
193
195
|
dev = None
|
|
194
196
|
token = data.get(name)
|
|
195
|
-
|
|
197
|
+
load_token = json.loads(token)
|
|
198
|
+
tmpupload = ChunkedUpload.objects.filter(upload_id=load_token['token']).first()
|
|
196
199
|
if tmpupload:
|
|
197
200
|
dev = tmpupload.get_uploaded_file()
|
|
198
201
|
tmpupload.delete()
|