diff --git a/presente/views.py b/presente/views.py index 1cb63a5..92f5355 100644 --- a/presente/views.py +++ b/presente/views.py @@ -270,7 +270,7 @@ class ActivityAttendanceListView(ActivityOwnerMixin, CoreFilterView): filterset_class = ActivityAttendanceFilter template_name = "presente/activity_attendance_list.html" table_pagination = {"per_page": 20} - context_object_name = "attendances" + # context_object_name = "attendances" actions = ["delete"] permission_required = [] diff --git a/static/css/presente.css b/static/css/presente.css index b15440b..b97c573 100644 --- a/static/css/presente.css +++ b/static/css/presente.css @@ -17,415 +17,3 @@ color: #6c757d; font-weight: 500; } - -/* Compact card headers - AdminLTE4 style */ -.card-header h5 { - font-size: 1rem; - font-weight: 500; - margin-bottom: 0; - line-height: 1.5; -} -.card-header { - padding: 0.5rem 1rem; - min-height: auto; -} -.card-header .btn-sm { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; -} - -/* Detail field styling */ -.detail-field { - padding-bottom: 0.5rem; - border-bottom: 1px solid #e9ecef; -} - -.detail-field:last-child { - border-bottom: none; -} - -.detail-field label { - font-weight: 600; - letter-spacing: 0.05em; -} - -.detail-value { - font-size: 1rem; - padding-top: 0.25rem; -} - -/* Public Activity Page - Fullscreen QR Code Display */ -.public-activity-page body { - overflow: hidden; -} -.fullscreen-container { - min-height: 100vh; - display: flex; - flex-direction: column; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - padding: 1.5rem; -} -.activity-card { - background: white; - border-radius: 1.5rem; - box-shadow: 0 20px 60px rgba(0,0,0,0.3); - flex: 1; - display: flex; - flex-direction: column; - overflow: hidden; - max-width: 1200px; - margin: 0 auto; - width: 100%; -} - -/* Header with branding */ -.activity-header { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - padding: 1.5rem 2rem; - text-align: center; -} -.activity-header h1 { - margin: 0; - font-size: 2.5rem; - font-weight: 700; -} - -/* Body layout */ -.activity-body { - flex: 1; - display: flex; - flex-direction: column; - padding: 2rem; - justify-content: space-between; - gap: 1rem; -} - -/* Time info blocks */ -.time-info { - display: flex; - justify-content: center; - gap: 0.75rem; - flex-wrap: wrap; -} -.time-block { - text-align: center; - padding: 0.75rem 1rem; - background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); - border-radius: 0.75rem; - min-width: 160px; - flex: 1; - max-width: 220px; - box-shadow: 0 2px 8px rgba(0,0,0,0.08); -} -.time-label { - font-size: 0.75rem; - color: #666; - text-transform: uppercase; - letter-spacing: 0.5px; - margin-bottom: 0.25rem; - font-weight: 600; -} -.time-label i { - margin-right: 0.25rem; -} -.time-value { - font-size: 1.1rem; - font-weight: 700; - color: #333; -} - -/* QR Section */ -.qr-section { - text-align: center; - flex: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} -.qr-title { - font-size: 1.5rem; - font-weight: 600; - color: #333; - margin-bottom: 1rem; -} -#qr-code-container { - margin-bottom: 0.75rem; -} -.qr-wrapper { - display: flex; - flex-direction: column; - align-items: center; -} -.qr-code-link { - display: block; - padding: 1.5rem; - background: white; - border-radius: 1.2rem; - box-shadow: 0 10px 40px rgba(0,0,0,0.15); - transition: transform 0.2s, box-shadow 0.2s, opacity 0.3s ease-in-out; - cursor: pointer; - text-decoration: none; - opacity: 1; -} -.qr-code-link:hover { - transform: translateY(-2px); - box-shadow: 0 12px 50px rgba(0,0,0,0.2); -} -.qr-code-link.qr-fade-in { - animation: fadeIn 0.3s ease-in; -} -.qr-code-link.qr-fade-out { - opacity: 0.3; -} -@keyframes fadeIn { - from { - opacity: 0.3; - } - to { - opacity: 1; - } -} - -/* HTMX transition animations */ -#qr-code-container.htmx-swapping { - opacity: 0; - transition: opacity 0.3s ease-out; -} -#qr-code-container.htmx-settling { - opacity: 1; - transition: opacity 0.3s ease-in; -} -#qrcode img { - display: block; - border-radius: 0.5rem; - max-width: 100%; - height: auto; -} -/* Datetime badge - compact utility display */ -.qr-datetime-badge { - display: inline-flex; - align-items: center; - gap: 0.5rem; - padding: 0.4rem 0.75rem; - background: rgba(102, 126, 234, 0.08); - border-radius: 0.5rem; - font-size: 0.8rem; - color: #555; - font-weight: 500; - font-variant-numeric: tabular-nums; - margin-bottom: 1rem; -} -.qr-datetime-badge i { - color: #667eea; - font-size: 0.75rem; -} -.qr-datetime-separator { - color: #999; - margin: 0 0.15rem; -} - -/* Status container */ -.qr-status-container { - display: flex; - flex-direction: column; - align-items: center; -} -.qr-countdown { - margin-top: 1rem; - font-size: 0.95rem; - color: #666; - font-weight: 500; -} -.qr-countdown i { - animation: spin 2s linear infinite; -} -@keyframes spin { - from { transform: rotate(0deg); } - to { transform: rotate(360deg); } -} - -/* Footer branding */ -.page-footer { - margin-top: auto; - padding-top: 1rem; - border-top: 1px solid #e9ecef; - text-align: center; -} -.footer-content { - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; -} -.footer-logo { - height: 24px; -} -.footer-text { - font-size: 1rem; - color: #333; - font-weight: 700; -} -.footer-separator { - color: #999; - font-size: 1rem; - margin: 0 0.25rem; -} -.footer-copyright { - font-size: 0.85rem; - color: #666; -} - -/* Responsive adjustments for public activity page */ -@media (max-width: 768px) { - .fullscreen-container { - padding: 1rem; - } - .activity-header { - padding: 1rem 1.5rem; - } - .activity-header h1 { - font-size: 1.8rem; - } - .activity-body { - padding: 1.5rem; - gap: 1rem; - } - .qr-title { - font-size: 1.2rem; - margin-bottom: 0.75rem; - } - .time-block { - min-width: 140px; - padding: 0.6rem 0.85rem; - } - .time-label { - font-size: 0.7rem; - } - .time-value { - font-size: 1rem; - } - .qr-code-link { - padding: 1rem; - } - .qr-datetime-badge { - font-size: 0.75rem; - padding: 0.35rem 0.65rem; - } -} - -@media (max-width: 576px) { - .activity-header h1 { - font-size: 1.4rem; - } - .qr-title { - font-size: 1.1rem; - margin-bottom: 0.5rem; - } - .time-info { - gap: 0.5rem; - } - .time-block { - min-width: 110px; - padding: 0.5rem 0.75rem; - } - .time-label { - font-size: 0.65rem; - letter-spacing: 0.25px; - } - .time-value { - font-size: 0.95rem; - } - .qr-code-link { - padding: 0.75rem; - } - .qr-datetime-badge { - font-size: 0.72rem; - padding: 0.3rem 0.6rem; - gap: 0.35rem; - } - .qr-countdown { - font-size: 0.85rem; - } - .footer-content { - gap: 0.35rem; - } - .footer-logo { - height: 20px; - } - .footer-text { - font-size: 0.85rem; - } - .footer-separator { - font-size: 0.85rem; - } - .footer-copyright { - font-size: 0.7rem; - } -} - -@media (max-height: 700px) { - .fullscreen-container { - padding: 0.75rem; - } - .activity-header { - padding: 0.75rem 1rem; - } - .activity-header h1 { - font-size: 1.5rem; - } - .activity-body { - padding: 1rem; - gap: 0.75rem; - } - .qr-title { - font-size: 1.1rem; - margin-bottom: 0.5rem; - } - .time-info { - gap: 0.5rem; - } - .time-block { - padding: 0.5rem 0.75rem; - min-width: 130px; - } - .time-label { - font-size: 0.65rem; - } - .time-value { - font-size: 0.95rem; - } - .qr-code-link { - padding: 0.75rem; - } - .qr-datetime-badge { - font-size: 0.7rem; - padding: 0.3rem 0.55rem; - gap: 0.3rem; - } - .qr-datetime-badge i { - font-size: 0.7rem; - } - .qr-countdown { - font-size: 0.85rem; - } - .page-footer { - padding-top: 0.5rem; - } - .footer-content { - gap: 0.35rem; - } - .footer-logo { - height: 18px; - } - .footer-text { - font-size: 0.8rem; - } - .footer-separator { - font-size: 0.8rem; - } - .footer-copyright { - font-size: 0.65rem; - } -} diff --git a/static/css/qrcode_page.css b/static/css/qrcode_page.css new file mode 100644 index 0000000..3a934a0 --- /dev/null +++ b/static/css/qrcode_page.css @@ -0,0 +1,374 @@ +/* Public Activity Page - Fullscreen QR Code Display */ +.public-activity-page body { + overflow: hidden; +} +.fullscreen-container { + min-height: 100vh; + display: flex; + flex-direction: column; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + padding: 1.5rem; +} +.activity-card { + background: white; + border-radius: 1.5rem; + box-shadow: 0 20px 60px rgba(0,0,0,0.3); + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + max-width: 1200px; + margin: 0 auto; + width: 100%; +} + +/* Header with branding */ +.activity-header { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + padding: 1.5rem 2rem; + text-align: center; +} +.activity-header h1 { + margin: 0; + font-size: 2.5rem; + font-weight: 700; +} + +/* Body layout */ +.activity-body { + flex: 1; + display: flex; + flex-direction: column; + padding: 2rem; + justify-content: space-between; + gap: 1rem; +} + +/* Time info blocks */ +.time-info { + display: flex; + justify-content: center; + gap: 0.75rem; + flex-wrap: wrap; +} +.time-block { + text-align: center; + padding: 0.75rem 1rem; + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); + border-radius: 0.75rem; + min-width: 160px; + flex: 1; + max-width: 220px; + box-shadow: 0 2px 8px rgba(0,0,0,0.08); +} +.time-label { + font-size: 0.75rem; + color: #666; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 0.25rem; + font-weight: 600; +} +.time-label i { + margin-right: 0.25rem; +} +.time-value { + font-size: 1.1rem; + font-weight: 700; + color: #333; +} + +/* QR Section */ +.qr-section { + text-align: center; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.qr-title { + font-size: 1.5rem; + font-weight: 600; + color: #333; + margin-bottom: 1rem; +} +#qr-code-container { + margin-bottom: 0.75rem; +} +.qr-wrapper { + display: flex; + flex-direction: column; + align-items: center; +} +.qr-code-link { + display: block; + padding: 1.5rem; + background: white; + border-radius: 1.2rem; + box-shadow: 0 10px 40px rgba(0,0,0,0.15); + transition: transform 0.2s, box-shadow 0.2s, opacity 0.3s ease-in-out; + cursor: pointer; + text-decoration: none; + opacity: 1; +} +.qr-code-link:hover { + transform: translateY(-2px); + box-shadow: 0 12px 50px rgba(0,0,0,0.2); +} +.qr-code-link.qr-fade-in { + animation: fadeIn 0.3s ease-in; +} +.qr-code-link.qr-fade-out { + opacity: 0.3; +} +@keyframes fadeIn { + from { + opacity: 0.3; + } + to { + opacity: 1; + } +} + +/* HTMX transition animations */ +#qr-code-container.htmx-swapping { + opacity: 0; + transition: opacity 0.3s ease-out; +} +#qr-code-container.htmx-settling { + opacity: 1; + transition: opacity 0.3s ease-in; +} +#qrcode img { + display: block; + border-radius: 0.5rem; + max-width: 100%; + height: auto; +} +/* Datetime badge - compact utility display */ +.qr-datetime-badge { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.4rem 0.75rem; + background: rgba(102, 126, 234, 0.08); + border-radius: 0.5rem; + font-size: 0.8rem; + color: #555; + font-weight: 500; + font-variant-numeric: tabular-nums; +} +.qr-datetime-badge i { + color: #667eea; + font-size: 0.75rem; +} +.qr-datetime-separator { + color: #999; + margin: 0 0.15rem; +} + +/* Status container */ +.qr-status-container { + display: flex; + flex-direction: column; + align-items: center; +} +.qr-countdown { + margin-top: 1rem; + font-size: 0.95rem; + color: #666; + font-weight: 500; +} +.qr-countdown i { + animation: spin 2s linear infinite; +} +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +/* Footer branding */ +.page-footer { + margin-top: auto; + padding-top: 1rem; + border-top: 1px solid #e9ecef; + text-align: center; +} +.footer-content { + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; +} +.footer-logo { + height: 24px; +} +.footer-text { + font-size: 1rem; + color: #333; + font-weight: 700; +} +.footer-separator { + color: #999; + font-size: 1rem; + margin: 0 0.25rem; +} +.footer-copyright { + font-size: 0.85rem; + color: #666; +} + +/* Responsive adjustments for public activity page */ +@media (max-width: 768px) { + .fullscreen-container { + padding: 1rem; + } + .activity-header { + padding: 1rem 1.5rem; + } + .activity-header h1 { + font-size: 1.8rem; + } + .activity-body { + padding: 1.5rem; + gap: 1rem; + } + .qr-title { + font-size: 1.2rem; + margin-bottom: 0.75rem; + } + .time-block { + min-width: 140px; + padding: 0.6rem 0.85rem; + } + .time-label { + font-size: 0.7rem; + } + .time-value { + font-size: 1rem; + } + .qr-code-link { + padding: 1rem; + } + .qr-datetime-badge { + font-size: 0.75rem; + padding: 0.35rem 0.65rem; + } +} + +@media (max-width: 576px) { + .activity-header h1 { + font-size: 1.4rem; + } + .qr-title { + font-size: 1.1rem; + margin-bottom: 0.5rem; + } + .time-info { + gap: 0.5rem; + } + .time-block { + min-width: 110px; + padding: 0.5rem 0.75rem; + } + .time-label { + font-size: 0.65rem; + letter-spacing: 0.25px; + } + .time-value { + font-size: 0.95rem; + } + .qr-code-link { + padding: 0.75rem; + } + .qr-datetime-badge { + font-size: 0.72rem; + padding: 0.3rem 0.6rem; + gap: 0.35rem; + } + .qr-countdown { + font-size: 0.85rem; + } + .footer-content { + gap: 0.35rem; + } + .footer-logo { + height: 20px; + } + .footer-text { + font-size: 0.85rem; + } + .footer-separator { + font-size: 0.85rem; + } + .footer-copyright { + font-size: 0.7rem; + } +} + +@media (max-height: 700px) { + .fullscreen-container { + padding: 0.75rem; + } + .activity-header { + padding: 0.75rem 1rem; + } + .activity-header h1 { + font-size: 1.5rem; + } + .activity-body { + padding: 1rem; + gap: 0.75rem; + } + .qr-title { + font-size: 1.1rem; + margin-bottom: 0.5rem; + } + .time-info { + gap: 0.5rem; + } + .time-block { + padding: 0.5rem 0.75rem; + min-width: 130px; + } + .time-label { + font-size: 0.65rem; + } + .time-value { + font-size: 0.95rem; + } + .qr-code-link { + padding: 0.75rem; + } + .qr-datetime-badge { + font-size: 0.7rem; + padding: 0.3rem 0.55rem; + gap: 0.3rem; + } + .qr-datetime-badge i { + font-size: 0.7rem; + } + .qr-countdown { + font-size: 0.85rem; + } + .page-footer { + padding-top: 0.5rem; + } + .footer-content { + gap: 0.35rem; + } + .footer-logo { + height: 18px; + } + .footer-text { + font-size: 0.8rem; + } + .footer-separator { + font-size: 0.8rem; + } + .footer-copyright { + font-size: 0.65rem; + } +} diff --git a/static/js/presente.js b/static/js/presente.js new file mode 100644 index 0000000..995746b --- /dev/null +++ b/static/js/presente.js @@ -0,0 +1,159 @@ +"use strict"; + +function setupOverlayScrollbars() { + const sidebarWrapper = document.querySelector('.sidebar-wrapper'); + + if (sidebarWrapper && typeof OverlayScrollbarsGlobal?.OverlayScrollbars !== 'undefined') { + OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, { + scrollbars: { + theme: 'os-theme-light', + autoHide: 'leave', + clickScroll: true, + }, + }); + } +} + +function setupTomSelect() { + // Multi-select for users + document.querySelectorAll('[data-tom-select="users"]').forEach(function(el) { + if (!el.tomselect) { + new TomSelect(el, { + plugins: ['remove_button'], + persist: false, + create: false, + maxItems: null, + preload: false, + loadThrottle: 300, + onInitialize: function() { + // Hide dropdown initially + this.clearOptions(); + }, + load: function(query, callback) { + // Only load if at least 2 characters typed + if (query.length < 2) { + return callback(); + } + // Reload all options and filter + const allOptions = Array.from(el.querySelectorAll('option')).map(opt => ({ + value: opt.value, + text: opt.text + })).filter(opt => opt.value && opt.text.toLowerCase().includes(query.toLowerCase())); + callback(allOptions); + }, + render: { + option: function(data, escape) { + return '
' + escape(data.text) + '
'; + }, + item: function(data, escape) { + return '
' + escape(data.text) + '
'; + } + } + }); + } + }); + + // Multi-select for tags with create + document.querySelectorAll('[data-tom-select="tags"]').forEach(function(el) { + if (!el.tomselect) { + new TomSelect(el, { + plugins: ['remove_button'], + persist: false, + create: true, + maxItems: null, + preload: false, + loadThrottle: 300, + onInitialize: function() { + // Store all options and clear initially + this.allOptions = Array.from(el.querySelectorAll('option')).map(opt => ({ + value: opt.value, + text: opt.text + })).filter(opt => opt.value); + this.clearOptions(); + }, + load: function(query, callback) { + // Only load if at least 2 characters typed + if (query.length < 2) { + return callback(); + } + // Filter stored options + const filtered = this.allOptions.filter(opt => + opt.text.toLowerCase().includes(query.toLowerCase()) + ); + callback(filtered); + }, + render: { + option_create: function(data, escape) { + return '
Adicionar ' + escape(data.input) + '
'; + }, + no_results: function(data, escape) { + if (data.input.length < 2) { + return '
Digite ao menos 2 caracteres...
'; + } + return '
Nenhum resultado encontrado.
'; + } + } + }); + } + }); + + // Simple select dropdowns (single select) + document.querySelectorAll('[data-tom-select="simple"]').forEach(function(el) { + if (!el.tomselect) { + new TomSelect(el, { + persist: false, + create: false, + allowEmptyOption: true, + placeholder: el.getAttribute('placeholder') || 'Selecione...', + }); + } + }); +} + +function copyPublicLink() { + const input = document.getElementById('publicLink'); + input.select(); + input.setSelectionRange(0, 99999); // For mobile devices + navigator.clipboard.writeText(input.value); + + const button = event.target.closest('button'); + const originalHTML = button.innerHTML; + button.innerHTML = ' Copiado!'; + button.classList.remove('btn-outline-secondary'); + button.classList.add('btn-success'); + + setTimeout(() => { + button.innerHTML = originalHTML; + button.classList.remove('btn-success'); + button.classList.add('btn-outline-secondary'); + }, 2000); +} + +function muteIpCheckbox() { + // Handle IP restriction toggle + const restrictIpCheckbox = document.getElementById('id_restrict_ip'); + const allowedNetworksContainer = document.querySelector('[name="allowed_networks"]')?.closest('.mb-3'); + + if (restrictIpCheckbox && allowedNetworksContainer) { + function toggleAllowedNetworks() { + const isRestricted = restrictIpCheckbox.checked; + const checkboxes = allowedNetworksContainer.querySelectorAll('input[type="checkbox"]'); + + checkboxes.forEach(function(checkbox) { + checkbox.disabled = !isRestricted; + }); + + if (isRestricted) { + allowedNetworksContainer.style.opacity = '1'; + } else { + allowedNetworksContainer.style.opacity = '0.5'; + } + } + + // Initial state + toggleAllowedNetworks(); + + // Listen for changes + restrictIpCheckbox.addEventListener('change', toggleAllowedNetworks); + } +} diff --git a/templates/account/login.html b/templates/account/login.html index 042419d..70cb98f 100644 --- a/templates/account/login.html +++ b/templates/account/login.html @@ -60,10 +60,12 @@ + {% comment %}

{% trans "Password Reset" %}

+ {% endcomment %} {% endblock content %} diff --git a/templates/allauth/layouts/base.html b/templates/allauth/layouts/base.html index e0bb8a2..b522191 100644 --- a/templates/allauth/layouts/base.html +++ b/templates/allauth/layouts/base.html @@ -16,7 +16,7 @@
diff --git a/templates/core/create.html b/templates/core/create.html index 5e8c61a..a1de5ab 100644 --- a/templates/core/create.html +++ b/templates/core/create.html @@ -5,85 +5,6 @@ {{ form.media }} {% endblock %} -{% block extra_body %} - -{% endblock %} - {% block crumb %} {{ block.super }} {% endblock %} -{% block extra_body %} -{{ block.super }} - -{% endblock %} - {% block app_content %}
@@ -60,6 +26,8 @@ {% endif %}
+ {% block extra_actions %} + {% endblock %} {% if "add" in allowed_actions %} Novo diff --git a/templates/core/update.html b/templates/core/update.html index 36535bd..5302127 100644 --- a/templates/core/update.html +++ b/templates/core/update.html @@ -5,85 +5,6 @@ {{ form.media }} {% endblock %} -{% block extra_body %} - -{% endblock %} - {% block crumb %} {{ block.super }} - - -{% endblock %} - -{% block extra_body %} -{{ block.super }} - -{% endblock %} - -{% block app_content %} -
-
-
- {% if filter %} - {% has_active_filters filter as filters_active %} - - {% endif %} -
-
- - {% if "add" in allowed_actions %} - - Novo - - {% endif %} -
-
- - {% if filter %} - {% has_active_filters filter as filters_active %} -
-
-
-
- {% for field in filter.form %} - {% if field.name != 'csrfmiddlewaretoken' %} -
- - {{ field }} - {% if field.errors %} -
- {{ field.errors }} -
- {% endif %} -
- {% endif %} - {% endfor %} -
- - - Limpar - -
-
-
-
-
- {% endif %} - -
-
- {% render_table table %} -
-
-
+{% extends "core/list.html" %} +{% block extra_actions %} + {% endblock %} diff --git a/templates/presente/activity_detail.html b/templates/presente/activity_detail.html index c0b3d05..f4f3171 100644 --- a/templates/presente/activity_detail.html +++ b/templates/presente/activity_detail.html @@ -4,33 +4,18 @@ Ver Presenças -{% if "change" in allowed_actions %} - - Editar - -{% endif %} -{% if "delete" in allowed_actions %} - -{% endif %} +{{ block.super }} {% endblock %} {% block app_content %} {{ block.super }} -
+
-
-
-
Link Público
+
+
+
Link Público
{% if object.status == 'expired' %} @@ -58,27 +43,4 @@
Link Público
- -{% if not is_expired %} - -{% endif %} {% endblock %} diff --git a/templates/presente/attendance_print.html b/templates/presente/attendance_print.html index 1208ca0..5000f09 100644 --- a/templates/presente/attendance_print.html +++ b/templates/presente/attendance_print.html @@ -101,7 +101,7 @@

Filtros Aplicados:

diff --git a/templates/presente/base.html b/templates/presente/base.html index 2a28937..d727f71 100644 --- a/templates/presente/base.html +++ b/templates/presente/base.html @@ -62,16 +62,18 @@ href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-beta3/dist/css/adminlte.min.css" crossorigin="anonymous" /> + + + + - - - + {% htmx_script %} + {% block extra_head %} {% endblock %} - @@ -82,149 +84,15 @@ {% endblock %} - - - + - - - - - - - - + {% block extra_body %} - {% endblock %} - diff --git a/templates/presente/includes/users_table.html b/templates/presente/includes/users_table.html deleted file mode 100644 index b177434..0000000 --- a/templates/presente/includes/users_table.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - {% for tuser in page_obj %} - - - - - - - - - {% include "cms/includes/actions.html" with obj=tuser %} - - {% endfor %} - -
#NomeE-mailMatrículaTipoGruposÚltimo acessoAções
{{ tuser.id }}{{ tuser.first_name }} {{ tuser.last_name }}{{ tuser.email }}{{ tuser.matricula|default:"-" }}{{ tuser.get_type_display|default:"-" }} - {% for group in tuser.groups.all %} - {{ group }}{% if not forloop.last %}, {% endif %} - {% empty %} - - - {% endfor %} - - {{ tuser.last_login|default:"-"|date:"SHORT_DATE_FORMAT" }} -
diff --git a/templates/presente/private_base.html b/templates/presente/private_base.html index 5ccd6fa..b40e5f3 100644 --- a/templates/presente/private_base.html +++ b/templates/presente/private_base.html @@ -148,5 +148,34 @@
- {% endblock app_wrapper %} + +{% block extra_body %} + {{ block.super }} + + + + + + + + + + + + + + +{% endblock %} diff --git a/templates/presente/public_activity.html b/templates/presente/public_activity.html index dad06e8..6e2945f 100644 --- a/templates/presente/public_activity.html +++ b/templates/presente/public_activity.html @@ -5,12 +5,22 @@ {% block body_class %}public-activity-page{% endblock %} +{% block extra_head %} +{{ block.super }} + +{% endblock %} + {% block app_wrapper %}

{{ activity.title }}

+
+ + + +
@@ -25,12 +35,6 @@

{{ activity.title }}

-
- - - -
-
Erro de Conexão
{% block extra_script %} +{{ block.super }}