wagtail-enap-designsystem 1.2.1.126__py3-none-any.whl → 1.2.1.128__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.
- enap_designsystem/blocks/form.py +296 -5
- enap_designsystem/migrations/0388_sistemavotacaopage_configuracoes_votacao.py +132 -0
- enap_designsystem/migrations/0389_alter_sistemavotacaopage_configuracoes_votacao.py +81 -0
- enap_designsystem/migrations/0390_alter_areaaluno_body_alter_cursoeadpage_curso_and_more.py +53322 -0
- enap_designsystem/migrations/0391_alter_formulariopage_form_steps.py +1240 -0
- enap_designsystem/migrations/0392_alter_formulariopage_form_steps.py +1237 -0
- enap_designsystem/migrations/0393_alter_formulariopage_form_steps.py +1264 -0
- enap_designsystem/models.py +12 -0
- enap_designsystem/static/enap_designsystem/blocks/card_courses.css +2 -1
- enap_designsystem/static/enap_designsystem/blocks/suap/suap_courses_block.css +28 -6
- enap_designsystem/templates/enap_designsystem/blocks/clientes_block.html +1 -1
- enap_designsystem/templates/enap_designsystem/blocks/suap/suap_courses_block.html +9 -2
- enap_designsystem/templates/enap_designsystem/form_templates/formulario_page.html +631 -934
- enap_designsystem/templates/enap_designsystem/includes/form_field.html +798 -382
- enap_designsystem/templates/enap_designsystem/sistema_votacao_page.html +6 -0
- enap_designsystem/views.py +2 -1
- {wagtail_enap_designsystem-1.2.1.126.dist-info → wagtail_enap_designsystem-1.2.1.128.dist-info}/METADATA +1 -1
- {wagtail_enap_designsystem-1.2.1.126.dist-info → wagtail_enap_designsystem-1.2.1.128.dist-info}/RECORD +21 -15
- {wagtail_enap_designsystem-1.2.1.126.dist-info → wagtail_enap_designsystem-1.2.1.128.dist-info}/WHEEL +0 -0
- {wagtail_enap_designsystem-1.2.1.126.dist-info → wagtail_enap_designsystem-1.2.1.128.dist-info}/licenses/LICENSE +0 -0
- {wagtail_enap_designsystem-1.2.1.126.dist-info → wagtail_enap_designsystem-1.2.1.128.dist-info}/top_level.txt +0 -0
enap_designsystem/blocks/form.py
CHANGED
|
@@ -657,7 +657,7 @@ class CheckboxMultiRedirectFieldBlock(blocks.StructBlock):
|
|
|
657
657
|
label="Opções e Ações",
|
|
658
658
|
help_text="Configure as opções e o que acontece para cada uma",
|
|
659
659
|
min_num=1,
|
|
660
|
-
max_num=
|
|
660
|
+
max_num=10
|
|
661
661
|
)
|
|
662
662
|
|
|
663
663
|
class Meta:
|
|
@@ -728,12 +728,250 @@ class ConditionalFieldBlock(blocks.StructBlock):
|
|
|
728
728
|
label = "🔗 Campo Condicional"
|
|
729
729
|
|
|
730
730
|
|
|
731
|
-
|
|
731
|
+
|
|
732
|
+
|
|
733
|
+
class SmartNavigationFieldBlock(blocks.StructBlock):
|
|
734
|
+
"""Campo que pode redirecionar para qualquer seção do formulário"""
|
|
735
|
+
|
|
736
|
+
# Pergunta principal
|
|
737
|
+
label = blocks.CharBlock(
|
|
738
|
+
label="Pergunta",
|
|
739
|
+
max_length=255,
|
|
740
|
+
help_text="Ex: Você possui conhecimento na temática do curso?"
|
|
741
|
+
)
|
|
742
|
+
|
|
743
|
+
help_text = blocks.CharBlock(
|
|
744
|
+
label="Texto de ajuda",
|
|
745
|
+
required=False
|
|
746
|
+
)
|
|
747
|
+
|
|
748
|
+
required = blocks.BooleanBlock(
|
|
749
|
+
label="Obrigatório",
|
|
750
|
+
default=True
|
|
751
|
+
)
|
|
752
|
+
|
|
753
|
+
# Tipo do campo
|
|
754
|
+
field_type = blocks.ChoiceBlock(
|
|
755
|
+
label="Tipo de campo",
|
|
756
|
+
choices=[
|
|
757
|
+
('radio', '🔘 Sim/Não (Radio)'),
|
|
758
|
+
('dropdown', '📋 Lista Suspensa'),
|
|
759
|
+
('checkbox', '☑️ Checkbox único'),
|
|
760
|
+
],
|
|
761
|
+
default='radio'
|
|
762
|
+
)
|
|
763
|
+
|
|
764
|
+
# Opções com navegação
|
|
765
|
+
navigation_options = blocks.StreamBlock([
|
|
766
|
+
('option', blocks.StructBlock([
|
|
767
|
+
('value', blocks.CharBlock(
|
|
768
|
+
label="Texto da opção",
|
|
769
|
+
max_length=255,
|
|
770
|
+
help_text="Ex: 'Sim', 'Não', 'Concordo'"
|
|
771
|
+
)),
|
|
772
|
+
|
|
773
|
+
('action_type', blocks.ChoiceBlock(
|
|
774
|
+
label="Tipo de ação",
|
|
775
|
+
choices=[
|
|
776
|
+
('continue', '➡️ Continuar para próximo campo'),
|
|
777
|
+
('jump_to_section', '🎯 Pular para seção específica'),
|
|
778
|
+
('finish_form', '✅ Finalizar formulário'),
|
|
779
|
+
('show_message_and_finish', '📝 Mostrar mensagem e finalizar'),
|
|
780
|
+
],
|
|
781
|
+
default='continue'
|
|
782
|
+
)),
|
|
783
|
+
|
|
784
|
+
('target_section_name', blocks.CharBlock(
|
|
785
|
+
label="Nome da seção de destino",
|
|
786
|
+
max_length=255,
|
|
787
|
+
required=False,
|
|
788
|
+
help_text="Nome EXATO do divisor de destino (ex: 'DADOS PESSOAIS E PROFISSIONAIS')"
|
|
789
|
+
)),
|
|
790
|
+
|
|
791
|
+
('finish_message', blocks.RichTextBlock(
|
|
792
|
+
label="Mensagem de finalização",
|
|
793
|
+
required=False,
|
|
794
|
+
features=['bold', 'italic'],
|
|
795
|
+
help_text="Mensagem mostrada quando formulário é finalizado por esta opção"
|
|
796
|
+
)),
|
|
797
|
+
|
|
798
|
+
('custom_thank_you_title', blocks.CharBlock(
|
|
799
|
+
label="Título personalizado de agradecimento",
|
|
800
|
+
max_length=255,
|
|
801
|
+
required=False,
|
|
802
|
+
help_text="Ex: 'A ENAP AGRADECE SUA PARTICIPAÇÃO!'"
|
|
803
|
+
))
|
|
804
|
+
], label="Opção de Navegação"))
|
|
805
|
+
],
|
|
806
|
+
label="Opções e Navegação",
|
|
807
|
+
help_text="Configure para onde cada resposta leva o usuário",
|
|
808
|
+
min_num=1,
|
|
809
|
+
max_num=10
|
|
810
|
+
)
|
|
811
|
+
|
|
812
|
+
class Meta:
|
|
813
|
+
icon = "redirect"
|
|
814
|
+
label = "🧭 Campo com Navegação Inteligente"
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
class SectionDividerBlock(blocks.StructBlock):
|
|
818
|
+
"""Divisor que marca seções navegáveis"""
|
|
819
|
+
section_name = blocks.CharBlock(
|
|
820
|
+
label="Nome da Seção",
|
|
821
|
+
max_length=255,
|
|
822
|
+
help_text="Nome único para navegação (ex: 'DADOS PESSOAIS')"
|
|
823
|
+
)
|
|
824
|
+
|
|
825
|
+
title = blocks.CharBlock(
|
|
826
|
+
label="Título visível",
|
|
827
|
+
max_length=255,
|
|
828
|
+
help_text="Título que aparece para o usuário"
|
|
829
|
+
)
|
|
830
|
+
|
|
831
|
+
subtitle = blocks.CharBlock(
|
|
832
|
+
label="Subtítulo",
|
|
833
|
+
max_length=500,
|
|
834
|
+
required=False
|
|
835
|
+
)
|
|
836
|
+
|
|
837
|
+
is_hidden_by_default = blocks.BooleanBlock(
|
|
838
|
+
label="Seção oculta por padrão",
|
|
839
|
+
default=False,
|
|
840
|
+
help_text="Se marcado, só aparece quando navegado para ela"
|
|
841
|
+
)
|
|
842
|
+
|
|
843
|
+
class Meta:
|
|
844
|
+
icon = "horizontalrule"
|
|
845
|
+
label = "📍 Divisor de Seção Navegável"
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
FORM_CONDICIONAL = [
|
|
851
|
+
('checkbox_multi_redirect_field', CheckboxMultiRedirectFieldBlock()),
|
|
852
|
+
('conditional_field', ConditionalFieldBlock()),
|
|
853
|
+
('section_divider', SectionDividerBlock()),
|
|
854
|
+
('smart_navigation_field', SmartNavigationFieldBlock()),
|
|
855
|
+
('section_header', SectionHeaderBlock()),
|
|
856
|
+
('text_field', TextFieldBlock()),
|
|
857
|
+
('email_field', EmailFieldBlock()),
|
|
858
|
+
('cpf_field', CPFFieldBlock()),
|
|
859
|
+
('cnpj_field', CNPJFieldBlock()),
|
|
860
|
+
('phone_field', PhoneFieldBlock()),
|
|
861
|
+
('textarea_field', TextAreaFieldBlock()),
|
|
862
|
+
('number_field', NumberFieldBlock()),
|
|
863
|
+
('date_field', DateFieldBlock()),
|
|
864
|
+
('dropdown_field', DropdownFieldBlock()),
|
|
865
|
+
('estado_cidade_field', EstadoCidadeFieldBlock()),
|
|
866
|
+
('radio_field', RadioFieldBlock()),
|
|
867
|
+
('checkbox_field', CheckboxFieldBlock()),
|
|
868
|
+
('checkbox_multiple_field', CheckboxMultipleFieldBlock()),
|
|
869
|
+
('file_upload_field', FileUploadFieldBlock()),
|
|
870
|
+
('rating_field', RatingFieldBlock()),
|
|
871
|
+
('info_text', InfoTextBlock()),
|
|
872
|
+
('divider', DividerBlock()),
|
|
873
|
+
('nome_completo_field', NomeCompletoFieldBlock()),
|
|
874
|
+
]
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
class ConditionalFieldBlockCondicional(blocks.StructBlock):
|
|
879
|
+
"""Campo com ramificações condicionais"""
|
|
880
|
+
|
|
881
|
+
# Pergunta principal
|
|
882
|
+
label_con = blocks.CharBlock(
|
|
883
|
+
label="Pergunta",
|
|
884
|
+
required=False,
|
|
885
|
+
max_length=255,
|
|
886
|
+
help_text="Ex: Qual país? / Precisa de acessibilidade?"
|
|
887
|
+
)
|
|
888
|
+
|
|
889
|
+
help_text_con = blocks.CharBlock(
|
|
890
|
+
label="Texto de ajuda",
|
|
891
|
+
required=False
|
|
892
|
+
)
|
|
893
|
+
|
|
894
|
+
required_con = blocks.BooleanBlock(
|
|
895
|
+
label="Obrigatório",
|
|
896
|
+
default=True
|
|
897
|
+
)
|
|
898
|
+
|
|
899
|
+
# Tipo do campo principal
|
|
900
|
+
field_type_con = blocks.ChoiceBlock(
|
|
901
|
+
label="Tipo do campo",
|
|
902
|
+
choices=[
|
|
903
|
+
('dropdown', '📋 Lista Suspensa'),
|
|
904
|
+
('radio', '🔘 Botões de Rádio'),
|
|
905
|
+
],
|
|
906
|
+
default='dropdown'
|
|
907
|
+
)
|
|
908
|
+
|
|
909
|
+
# Opções com ramificações
|
|
910
|
+
conditional_options_con = blocks.StreamBlock([
|
|
911
|
+
('option_con', blocks.StructBlock([
|
|
912
|
+
('value_con', blocks.CharBlock(
|
|
913
|
+
label="Opção",
|
|
914
|
+
max_length=255,
|
|
915
|
+
help_text="Ex: Brasil, Sim, Empresa"
|
|
916
|
+
)),
|
|
917
|
+
('action_con', blocks.ChoiceBlock(
|
|
918
|
+
label="Quando escolher esta opção",
|
|
919
|
+
choices=[
|
|
920
|
+
('show_fields_con', '👁️ Mostrar campos'),
|
|
921
|
+
('nothing_con', '➡️ Não fazer nada (pular)'),
|
|
922
|
+
],
|
|
923
|
+
default='nothing_con'
|
|
924
|
+
)),
|
|
925
|
+
('fields_to_show_con', blocks.StreamBlock(
|
|
926
|
+
FORM_CONDICIONAL,
|
|
927
|
+
label="Campos que aparecem",
|
|
928
|
+
required=False,
|
|
929
|
+
help_text="Campos que só aparecem se esta opção for escolhida"
|
|
930
|
+
))
|
|
931
|
+
], label="Opção com Ação"))
|
|
932
|
+
],
|
|
933
|
+
label="Opções e Ramificações",
|
|
934
|
+
help_text="Configure o que acontece para cada opção"
|
|
935
|
+
)
|
|
936
|
+
|
|
937
|
+
class Meta:
|
|
938
|
+
icon = "list-ul"
|
|
939
|
+
label = "🔗 Campo Condicional - Condicional"
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
|
|
732
946
|
FORM_FIELD_BLOCKS = BASE_FORM_FIELD_BLOCKS + [
|
|
733
947
|
('checkbox_multi_redirect_field', CheckboxMultiRedirectFieldBlock()),
|
|
734
|
-
('conditional_field', ConditionalFieldBlock()),
|
|
948
|
+
('conditional_field', ConditionalFieldBlock()),
|
|
949
|
+
('conditional_field_condicional', ConditionalFieldBlockCondicional()),
|
|
950
|
+
('section_divider', SectionDividerBlock()),
|
|
951
|
+
('smart_navigation_field', SmartNavigationFieldBlock()),
|
|
952
|
+
('section_header', SectionHeaderBlock()),
|
|
953
|
+
('text_field', TextFieldBlock()),
|
|
954
|
+
('email_field', EmailFieldBlock()),
|
|
955
|
+
('cpf_field', CPFFieldBlock()),
|
|
956
|
+
('cnpj_field', CNPJFieldBlock()),
|
|
957
|
+
('phone_field', PhoneFieldBlock()),
|
|
958
|
+
('textarea_field', TextAreaFieldBlock()),
|
|
959
|
+
('number_field', NumberFieldBlock()),
|
|
960
|
+
('date_field', DateFieldBlock()),
|
|
961
|
+
('dropdown_field', DropdownFieldBlock()),
|
|
962
|
+
('estado_cidade_field', EstadoCidadeFieldBlock()),
|
|
963
|
+
('radio_field', RadioFieldBlock()),
|
|
964
|
+
('checkbox_field', CheckboxFieldBlock()),
|
|
965
|
+
('checkbox_multiple_field', CheckboxMultipleFieldBlock()),
|
|
966
|
+
('file_upload_field', FileUploadFieldBlock()),
|
|
967
|
+
('rating_field', RatingFieldBlock()),
|
|
968
|
+
('info_text', InfoTextBlock()),
|
|
969
|
+
('divider', DividerBlock()),
|
|
970
|
+
('nome_completo_field', NomeCompletoFieldBlock()),
|
|
735
971
|
]
|
|
736
972
|
|
|
973
|
+
|
|
974
|
+
|
|
737
975
|
class FormStepBlock(StructBlock):
|
|
738
976
|
"""Bloco para uma etapa do formulário - apenas logo e campos"""
|
|
739
977
|
|
|
@@ -1015,8 +1253,6 @@ class FormularioPage(Page):
|
|
|
1015
1253
|
steps.append(step_data)
|
|
1016
1254
|
return steps
|
|
1017
1255
|
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
1256
|
def get_total_steps(self):
|
|
1021
1257
|
"""Retorna o número total de etapas (incluindo boas-vindas e sucesso)"""
|
|
1022
1258
|
return len(self.form_steps) + 2 # +2 para boas-vindas e sucesso
|
|
@@ -1193,6 +1429,61 @@ class FormularioPage(Page):
|
|
|
1193
1429
|
|
|
1194
1430
|
return True
|
|
1195
1431
|
|
|
1432
|
+
def get_section_map(self):
|
|
1433
|
+
"""Cria mapa de seções para navegação"""
|
|
1434
|
+
section_map = {}
|
|
1435
|
+
current_section = None
|
|
1436
|
+
|
|
1437
|
+
for step in self.get_all_steps():
|
|
1438
|
+
for block in step['fields']:
|
|
1439
|
+
if block.block_type == 'section_divider':
|
|
1440
|
+
section_name = block.value['section_name']
|
|
1441
|
+
section_map[section_name] = {
|
|
1442
|
+
'step': step['number'],
|
|
1443
|
+
'block_id': block.id,
|
|
1444
|
+
'title': block.value['title'],
|
|
1445
|
+
'hidden_by_default': block.value.get('is_hidden_by_default', False)
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
return section_map
|
|
1449
|
+
|
|
1450
|
+
def get_navigation_data(self):
|
|
1451
|
+
"""Coleta dados de navegação de todos os campos inteligentes"""
|
|
1452
|
+
navigation_data = {}
|
|
1453
|
+
|
|
1454
|
+
for step in self.get_all_steps():
|
|
1455
|
+
for block in step['fields']:
|
|
1456
|
+
if block.block_type == 'smart_navigation_field':
|
|
1457
|
+
field_id = f"smart_navigation_field_{block.id}"
|
|
1458
|
+
options_data = {}
|
|
1459
|
+
|
|
1460
|
+
for option in block.value.get('navigation_options', []):
|
|
1461
|
+
options_data[option.value['value']] = {
|
|
1462
|
+
'action_type': option.value['action_type'],
|
|
1463
|
+
'target_section': option.value.get('target_section_name', ''),
|
|
1464
|
+
'finish_message': option.value.get('finish_message', ''),
|
|
1465
|
+
'thank_you_title': option.value.get('custom_thank_you_title', '')
|
|
1466
|
+
}
|
|
1467
|
+
|
|
1468
|
+
navigation_data[field_id] = options_data
|
|
1469
|
+
|
|
1470
|
+
return navigation_data
|
|
1471
|
+
|
|
1472
|
+
def get_context(self, request, *args, **kwargs):
|
|
1473
|
+
"""Adiciona dados de navegação ao contexto"""
|
|
1474
|
+
context = super().get_context(request, *args, **kwargs)
|
|
1475
|
+
|
|
1476
|
+
# Dados existentes
|
|
1477
|
+
context['total_form_steps'] = len(self.form_steps)
|
|
1478
|
+
context['all_steps'] = self.get_all_steps()
|
|
1479
|
+
|
|
1480
|
+
# Novos dados de navegação
|
|
1481
|
+
context['section_map'] = self.get_section_map()
|
|
1482
|
+
context['navigation_data'] = self.get_navigation_data()
|
|
1483
|
+
context['section_map_json'] = json.dumps(self.get_section_map())
|
|
1484
|
+
context['navigation_data_json'] = json.dumps(self.get_navigation_data())
|
|
1485
|
+
|
|
1486
|
+
return context
|
|
1196
1487
|
|
|
1197
1488
|
|
|
1198
1489
|
# def get_estados_cidades_data(self):
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Generated by Django 5.1.6 on 2025-09-04 22:04
|
|
2
|
+
|
|
3
|
+
import wagtail.fields
|
|
4
|
+
from django.db import migrations
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
(
|
|
11
|
+
"enap_designsystem",
|
|
12
|
+
"0387_alter_areaaluno_body_alter_enapcomponentes_body_and_more",
|
|
13
|
+
),
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
operations = [
|
|
17
|
+
migrations.AddField(
|
|
18
|
+
model_name="sistemavotacaopage",
|
|
19
|
+
name="configuracoes_votacao",
|
|
20
|
+
field=wagtail.fields.StreamField(
|
|
21
|
+
[
|
|
22
|
+
("recaptcha", 5),
|
|
23
|
+
("texto_instrucoes", 6),
|
|
24
|
+
("aviso_importante", 10),
|
|
25
|
+
("separador", 11),
|
|
26
|
+
],
|
|
27
|
+
blank=True,
|
|
28
|
+
block_lookup={
|
|
29
|
+
0: (
|
|
30
|
+
"wagtail.blocks.ChoiceBlock",
|
|
31
|
+
[],
|
|
32
|
+
{
|
|
33
|
+
"choices": [
|
|
34
|
+
("v2", "reCAPTCHA v2 (checkbox visível)"),
|
|
35
|
+
("v3", "reCAPTCHA v3 (invisível)"),
|
|
36
|
+
("v2_invisible", "reCAPTCHA v2 invisível"),
|
|
37
|
+
],
|
|
38
|
+
"help_text": "Tipo de reCAPTCHA",
|
|
39
|
+
},
|
|
40
|
+
),
|
|
41
|
+
1: (
|
|
42
|
+
"wagtail.blocks.ChoiceBlock",
|
|
43
|
+
[],
|
|
44
|
+
{
|
|
45
|
+
"choices": [("light", "Claro"), ("dark", "Escuro")],
|
|
46
|
+
"help_text": "Tema visual (apenas v2)",
|
|
47
|
+
},
|
|
48
|
+
),
|
|
49
|
+
2: (
|
|
50
|
+
"wagtail.blocks.ChoiceBlock",
|
|
51
|
+
[],
|
|
52
|
+
{
|
|
53
|
+
"choices": [("normal", "Normal"), ("compact", "Compacto")],
|
|
54
|
+
"help_text": "Tamanho do widget (apenas v2)",
|
|
55
|
+
},
|
|
56
|
+
),
|
|
57
|
+
3: (
|
|
58
|
+
"wagtail.blocks.CharBlock",
|
|
59
|
+
(),
|
|
60
|
+
{"help_text": "Classes CSS adicionais", "required": False},
|
|
61
|
+
),
|
|
62
|
+
4: (
|
|
63
|
+
"wagtail.blocks.CharBlock",
|
|
64
|
+
(),
|
|
65
|
+
{
|
|
66
|
+
"default": "submit",
|
|
67
|
+
"help_text": "Ação para reCAPTCHA v3 (ex: login, submit, homepage)",
|
|
68
|
+
"required": False,
|
|
69
|
+
},
|
|
70
|
+
),
|
|
71
|
+
5: (
|
|
72
|
+
"wagtail.blocks.StructBlock",
|
|
73
|
+
[
|
|
74
|
+
[
|
|
75
|
+
("tipo", 0),
|
|
76
|
+
("tema", 1),
|
|
77
|
+
("tamanho", 2),
|
|
78
|
+
("css_classes", 3),
|
|
79
|
+
("acao_v3", 4),
|
|
80
|
+
]
|
|
81
|
+
],
|
|
82
|
+
{},
|
|
83
|
+
),
|
|
84
|
+
6: (
|
|
85
|
+
"wagtail.blocks.RichTextBlock",
|
|
86
|
+
(),
|
|
87
|
+
{
|
|
88
|
+
"help_text": "Instruções sobre como votar",
|
|
89
|
+
"icon": "doc-full",
|
|
90
|
+
"label": "Texto de Instruções",
|
|
91
|
+
},
|
|
92
|
+
),
|
|
93
|
+
7: (
|
|
94
|
+
"wagtail.blocks.CharBlock",
|
|
95
|
+
(),
|
|
96
|
+
{"label": "Título do Aviso", "max_length": 100},
|
|
97
|
+
),
|
|
98
|
+
8: ("wagtail.blocks.RichTextBlock", (), {"label": "Mensagem"}),
|
|
99
|
+
9: (
|
|
100
|
+
"wagtail.blocks.ChoiceBlock",
|
|
101
|
+
[],
|
|
102
|
+
{
|
|
103
|
+
"choices": [
|
|
104
|
+
("info", "Informação"),
|
|
105
|
+
("warning", "Aviso"),
|
|
106
|
+
("success", "Sucesso"),
|
|
107
|
+
("danger", "Perigo"),
|
|
108
|
+
],
|
|
109
|
+
"label": "Tipo de Aviso",
|
|
110
|
+
},
|
|
111
|
+
),
|
|
112
|
+
10: (
|
|
113
|
+
"wagtail.blocks.StructBlock",
|
|
114
|
+
[[("titulo", 7), ("mensagem", 8), ("tipo", 9)]],
|
|
115
|
+
{"icon": "warning", "label": "Aviso/Alerta"},
|
|
116
|
+
),
|
|
117
|
+
11: (
|
|
118
|
+
"wagtail.blocks.static_block.StaticBlock",
|
|
119
|
+
(),
|
|
120
|
+
{
|
|
121
|
+
"admin_text": "Separador visual entre seções",
|
|
122
|
+
"icon": "horizontalrule",
|
|
123
|
+
"label": "Separador",
|
|
124
|
+
"template": "blocks/separador.html",
|
|
125
|
+
},
|
|
126
|
+
),
|
|
127
|
+
},
|
|
128
|
+
help_text="Adicione reCAPTCHA, instruções e outros elementos para a página de votação",
|
|
129
|
+
verbose_name="Configurações e Elementos da Votação",
|
|
130
|
+
),
|
|
131
|
+
),
|
|
132
|
+
]
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Generated by Django 5.1.6 on 2025-09-04 22:13
|
|
2
|
+
|
|
3
|
+
import wagtail.fields
|
|
4
|
+
from django.db import migrations
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("enap_designsystem", "0388_sistemavotacaopage_configuracoes_votacao"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AlterField(
|
|
15
|
+
model_name="sistemavotacaopage",
|
|
16
|
+
name="configuracoes_votacao",
|
|
17
|
+
field=wagtail.fields.StreamField(
|
|
18
|
+
[("recaptcha", 5)],
|
|
19
|
+
blank=True,
|
|
20
|
+
block_lookup={
|
|
21
|
+
0: (
|
|
22
|
+
"wagtail.blocks.ChoiceBlock",
|
|
23
|
+
[],
|
|
24
|
+
{
|
|
25
|
+
"choices": [
|
|
26
|
+
("v2", "reCAPTCHA v2 (checkbox visível)"),
|
|
27
|
+
("v3", "reCAPTCHA v3 (invisível)"),
|
|
28
|
+
("v2_invisible", "reCAPTCHA v2 invisível"),
|
|
29
|
+
],
|
|
30
|
+
"help_text": "Tipo de reCAPTCHA",
|
|
31
|
+
},
|
|
32
|
+
),
|
|
33
|
+
1: (
|
|
34
|
+
"wagtail.blocks.ChoiceBlock",
|
|
35
|
+
[],
|
|
36
|
+
{
|
|
37
|
+
"choices": [("light", "Claro"), ("dark", "Escuro")],
|
|
38
|
+
"help_text": "Tema visual (apenas v2)",
|
|
39
|
+
},
|
|
40
|
+
),
|
|
41
|
+
2: (
|
|
42
|
+
"wagtail.blocks.ChoiceBlock",
|
|
43
|
+
[],
|
|
44
|
+
{
|
|
45
|
+
"choices": [("normal", "Normal"), ("compact", "Compacto")],
|
|
46
|
+
"help_text": "Tamanho do widget (apenas v2)",
|
|
47
|
+
},
|
|
48
|
+
),
|
|
49
|
+
3: (
|
|
50
|
+
"wagtail.blocks.CharBlock",
|
|
51
|
+
(),
|
|
52
|
+
{"help_text": "Classes CSS adicionais", "required": False},
|
|
53
|
+
),
|
|
54
|
+
4: (
|
|
55
|
+
"wagtail.blocks.CharBlock",
|
|
56
|
+
(),
|
|
57
|
+
{
|
|
58
|
+
"default": "submit",
|
|
59
|
+
"help_text": "Ação para reCAPTCHA v3 (ex: login, submit, homepage)",
|
|
60
|
+
"required": False,
|
|
61
|
+
},
|
|
62
|
+
),
|
|
63
|
+
5: (
|
|
64
|
+
"wagtail.blocks.StructBlock",
|
|
65
|
+
[
|
|
66
|
+
[
|
|
67
|
+
("tipo", 0),
|
|
68
|
+
("tema", 1),
|
|
69
|
+
("tamanho", 2),
|
|
70
|
+
("css_classes", 3),
|
|
71
|
+
("acao_v3", 4),
|
|
72
|
+
]
|
|
73
|
+
],
|
|
74
|
+
{},
|
|
75
|
+
),
|
|
76
|
+
},
|
|
77
|
+
help_text="Adicione reCAPTCHA para a página de votação",
|
|
78
|
+
verbose_name="Configurações e Elementos da Votação",
|
|
79
|
+
),
|
|
80
|
+
),
|
|
81
|
+
]
|