djgentelella 0.3.29__py3-none-any.whl → 0.4.1__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.
Files changed (76) hide show
  1. djgentelella/__init__.py +4 -1
  2. djgentelella/admin.py +4 -3
  3. djgentelella/fields/files.py +27 -1
  4. djgentelella/firmador_digital/__init__.py +0 -0
  5. djgentelella/firmador_digital/config/__init__.py +0 -0
  6. djgentelella/firmador_digital/config/asgi_config.py +32 -0
  7. djgentelella/firmador_digital/config/asgi_worker.py +5 -0
  8. djgentelella/firmador_digital/config/websocket_urls.py +4 -0
  9. djgentelella/firmador_digital/consumers/__init__.py +0 -0
  10. djgentelella/firmador_digital/consumers/pdf_render.py +8 -0
  11. djgentelella/firmador_digital/consumers/sign.py +148 -0
  12. djgentelella/firmador_digital/forms.py +28 -0
  13. djgentelella/firmador_digital/gunicorn/config_asgi.py +12 -0
  14. djgentelella/firmador_digital/gunicorn/config_wsgi.py +13 -0
  15. djgentelella/firmador_digital/models.py +33 -0
  16. djgentelella/firmador_digital/signvalue_utils.py +41 -0
  17. djgentelella/firmador_digital/utils.py +154 -0
  18. djgentelella/firmador_digital/viewsets.py +77 -0
  19. djgentelella/forms/forms.py +10 -2
  20. djgentelella/locale/es/LC_MESSAGES/django.mo +0 -0
  21. djgentelella/locale/es/LC_MESSAGES/django.po +103 -6
  22. djgentelella/locale/es/LC_MESSAGES/djangojs.mo +0 -0
  23. djgentelella/locale/es/LC_MESSAGES/djangojs.po +107 -8
  24. djgentelella/management/commands/createbasejs.py +3 -0
  25. djgentelella/management/commands/loaddevstatic.py +18 -0
  26. djgentelella/migrations/0013_usersignatureconfig.py +25 -0
  27. djgentelella/serializers/firmador_digital.py +103 -0
  28. djgentelella/settings.py +4 -2
  29. djgentelella/static/djgentelella.readonly.vendors.min.css +1 -1
  30. djgentelella/static/djgentelella.readonly.vendors.min.js +1 -1
  31. djgentelella/static/djgentelella.vendors.header.min.js +1 -1
  32. djgentelella/static/djgentelella.vendors.min.css +2 -2
  33. djgentelella/static/gentelella/css/pdfviewer.css +147 -0
  34. djgentelella/static/gentelella/images/firmador.ico +0 -0
  35. djgentelella/static/gentelella/js/base/digital_signature.js +945 -0
  36. djgentelella/static/gentelella/js/base.js +947 -0
  37. djgentelella/static/gentelella/js/datatables.js +2 -2
  38. djgentelella/static/gentelella/js/widgets.js +72 -59
  39. djgentelella/static/vendors/friconix/friconix.js +1 -1
  40. djgentelella/static/vendors/pdfjs/images/altText_add.svg +3 -0
  41. djgentelella/static/vendors/pdfjs/images/altText_disclaimer.svg +3 -0
  42. djgentelella/static/vendors/pdfjs/images/altText_done.svg +3 -0
  43. djgentelella/static/vendors/pdfjs/images/altText_spinner.svg +30 -0
  44. djgentelella/static/vendors/pdfjs/images/altText_warning.svg +3 -0
  45. djgentelella/static/vendors/pdfjs/images/cursor-editorFreeHighlight.svg +6 -0
  46. djgentelella/static/vendors/pdfjs/images/cursor-editorFreeText.svg +3 -0
  47. djgentelella/static/vendors/pdfjs/images/cursor-editorInk.svg +4 -0
  48. djgentelella/static/vendors/pdfjs/images/cursor-editorTextHighlight.svg +8 -0
  49. djgentelella/static/vendors/pdfjs/images/editor-toolbar-delete.svg +5 -0
  50. djgentelella/static/vendors/pdfjs/images/loading-icon.gif +0 -0
  51. djgentelella/static/vendors/pdfjs/images/messageBar_closingButton.svg +3 -0
  52. djgentelella/static/vendors/pdfjs/images/messageBar_warning.svg +3 -0
  53. djgentelella/static/vendors/pdfjs/images/toolbarButton-editorHighlight.svg +6 -0
  54. djgentelella/static/vendors/pdfjs/images/toolbarButton-menuArrow.svg +3 -0
  55. djgentelella/static/vendors/timeline/css/timeline.css +1 -1
  56. djgentelella/static/vendors/timeline/js/timeline.js +1 -1
  57. djgentelella/templates/forms/as_grid.html +2 -2
  58. djgentelella/templates/forms/as_inline.html +3 -5
  59. djgentelella/templates/gentelella/registration/login.html +38 -42
  60. djgentelella/templates/gentelella/registration/reset_done.html +24 -0
  61. djgentelella/templates/gentelella/statics/javascript.html +75 -61
  62. djgentelella/templates/gentelella/statics/stylesheets.html +11 -10
  63. djgentelella/templates/gentelella/widgets/addtreeselect.html +1 -1
  64. djgentelella/templates/gentelella/widgets/chunkedupload.html +2 -2
  65. djgentelella/templates/gentelella/widgets/digital_signature.html +208 -0
  66. djgentelella/templates/gentelella/widgets/file.html +15 -16
  67. djgentelella/templatetags/gtsettings.py +4 -0
  68. djgentelella/urls.py +2 -1
  69. djgentelella/widgets/core.py +5 -2
  70. djgentelella/widgets/digital_signature.py +116 -0
  71. {djgentelella-0.3.29.dist-info → djgentelella-0.4.1.dist-info}/METADATA +18 -20
  72. {djgentelella-0.3.29.dist-info → djgentelella-0.4.1.dist-info}/RECORD +76 -38
  73. {djgentelella-0.3.29.dist-info → djgentelella-0.4.1.dist-info}/WHEEL +1 -1
  74. {djgentelella-0.3.29.dist-info → djgentelella-0.4.1.dist-info}/AUTHORS +0 -0
  75. {djgentelella-0.3.29.dist-info → djgentelella-0.4.1.dist-info}/LICENSE.txt +0 -0
  76. {djgentelella-0.3.29.dist-info → djgentelella-0.4.1.dist-info}/top_level.txt +0 -0
@@ -14,12 +14,12 @@
14
14
  {% endif %}
15
15
  {% for column in form.grid %}
16
16
  <div class="row">{% for row in column %}
17
- <div class="col">{% for field in row %}
17
+ <div class="col">{% for field, errors in row %}
18
18
  <div {% with classes=field.css_classes %}{% if classes %} class="{{ classes }} asgrid gtformfield" {% else %}
19
19
  class="mb-3 asgrid gtformfield"
20
20
  {% endif %}
21
21
  {% endwith %}>
22
- {{ errors }}
22
+ {% if errors %}{{ errors }}{% endif %}
23
23
  {% if field.label %}{{ field.label_tag }}{% endif %}
24
24
  {{ field }}
25
25
  {% if field.help_text %}
@@ -21,15 +21,13 @@
21
21
 
22
22
  {{ field }}
23
23
  {% if field.help_text %}
24
- {% if forloop.last %}
25
- {% for field in hidden_fields %}{{ field }}{% endfor %}
26
- {% endif %}
27
-
28
24
  <div class="feedback text-info" {% if field.auto_id %} id="{{ field.auto_id }}_helptext" {% endif %}>
29
25
  {{ field.help_text|safe }}
30
26
  </div>
31
27
  {% endif %}
32
-
28
+ {% if forloop.last %}
29
+ {% for field in hidden_fields %}{{ field }}{% endfor %}
30
+ {% endif %}
33
31
  </div>
34
32
  {% endfor %}
35
33
  {% if not fields and not errors %}
@@ -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
- <a class="hiddenanchor" id="signup"></a>
12
- <a class="hiddenanchor" id="signin"></a>
13
- <div class="login_wrapper">
14
- <div class="animate form login_form">
15
- <section class="login_content">
16
- <form method="post" action="{% url 'login' %}">
17
- {% csrf_token %}
18
- <input type="hidden" name="next" value="{{ next }}">
19
- <h1>{% trans 'Login' %}</h1>
20
- <div>
21
- {% if form.errors %}
22
- <p class="text-warning">{% trans "Your username and password didn't match. Please try again." %}</p>
23
- {% endif %}
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
- {% if next %}
26
- {% if user.is_authenticated %}
27
- <p>{% blocktrans %}Your account doesn't have access to this page. To proceed,
28
- please login with an account that has access.{% endblocktrans %}</p>
29
- {% else %}
30
- <p class="text-warning">{% trans "Please login to see this page." %}</p>
31
- {% endif %}
32
- {% endif %}
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
- </div>
35
- <div>
36
- <input type="text" class="form-control" name="username" placeholder="{% trans 'Username' %}" required="" />
37
- </div>
38
- <div>
39
- <input type="password" class="form-control" name="password" placeholder="{% trans 'Password' %}" required="" />
40
- </div>
41
- <div>
42
- <button type="submit" class="btn btn-secondary submit" >{% trans 'Log in' %}</button>
43
- <a class="reset_pass" href="{% url 'password_reset' %}">{% trans 'Lost your password?' %}</a>
44
- </div>
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
- </form>
48
- </section>
49
- </div>
50
- </div>
42
+ {% include 'gentelella/registration/footer.html' %}
43
+ </form>
44
+ </section>
45
+ </div>
46
+ </div>
51
47
  </div>
52
- {% endblock %}
48
+ {% endblock %}
@@ -0,0 +1,24 @@
1
+ {% extends 'gentelella/base.html' %}
2
+ {% load i18n %}
3
+
4
+ {% block body_class %}login{% endblock body_class %}
5
+ {% block body %}
6
+
7
+ <div class="main_container">
8
+
9
+ <div class="col-md-8 offset-md-2">
10
+ <div class="col-middle">
11
+ <div class="text-center ">
12
+ <h1>{% trans 'Password changed' %}</h1>
13
+ <p>{% trans "You updated correctly your password please login again." %}</p>
14
+ <br>
15
+ <a href="/"> {% trans 'Go to home' %}</a>
16
+ {% include 'gentelella/registration/footer.html' %}
17
+
18
+
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+
24
+ {% 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
- <script type="module" src="{% static 'vendors/pdfjs/pdf.min.mjs' %}?v={% get_version %}"></script>
6
- <script type="module" src="{% static 'vendors/pdfjs/pdf.worker.min.mjs' %}?v={% get_version %}"></script>
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
- src="{% static 'vendors/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js' %}?v={% get_version %}"></script>
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
- var permission_context = {
82
- 'select_user_url': "{% url 'userbase-list' %}",
83
- 'select_group_url': "{% url 'groupbase-list' %}",
84
- 'user_placeholder': "{% trans 'Select an User' %}",
85
- 'group_placeholder': "{% trans 'Select a Group' %}",
86
- 'get_permissions': "{% url 'permission_view_list' pk=0 %}",
87
- 'save_permissions': "{% url 'permcategorymanagement-save' %}",
88
- 'user_label': "{% trans 'User' %}",
89
- 'validation_error': "{% trans 'There are fields with invalid options' %}",
90
- 'not_found_object': "{% trans 'Not found' %}",
91
- 'group_label': "{% trans 'Group' %}",
92
- 'not_found_permissions_label': "{% trans 'This view has not permissions associated.' %}",
93
- 'not_select_valid_option': "{% trans 'You have not selected a valid option.' %}",
94
- 'save_messages': "{% trans 'Permission have been successfully saved.' %}",
95
- 'error': "{% trans 'An error occurred while saving.' %}",
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 'djgentelella.vendors.min.css' %}?v={% get_version %}" rel="stylesheet">
7
- {% get_define 'use_flags' as use_flags %}
8
- {% if use_flags %}
9
- <link href="{% static 'djgentelella.flags.vendors.min.css' %}?v={% get_version %}" rel="stylesheet">
10
- {% endif %}
11
- <link href="{% static 'vendors/tinymce/skin.min.css' %}?v={% get_version %}" rel="stylesheet"/>
12
- {% get_define 'use_readonlywidgets' as use_readonlywidgets %}
13
- {% if use_readonlywidgets %}
14
- <link href="{% static 'djgentelella.readonly.vendors.min.css' %}?v={% get_version %}" rel="stylesheet">
15
- {% endif %}
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 class="input-group-text {{ widget.name }}_progress"><i class="fa fa-file"></i></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" style="" 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" %}>
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 class="input-group-text {{ widget.name }}_progress"><i class="fa fa-file"></i></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 class="form-control {{ widget.name }}_messages" style="display:none;"></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
- <div id="check_{{ widget.name }}" class="checkbox">
17
- <label class="">
18
- <div class="icheckbox_flat-green " style="position: relative;">
19
- <input type="checkbox" autocomplete="off" data-widget="CheckboxInput" class="flat" style="position: absolute; opacity: 0;">
20
- <ins class="iCheck-helper" ></ins></div>
21
- {% trans 'Delete this file' %}
22
-
23
- </label>
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