wagtail-enap-designsystem 1.2.1.122__py3-none-any.whl → 1.2.1.125__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.

Potentially problematic release.


This version of wagtail-enap-designsystem might be problematic. Click here for more details.

Files changed (22) hide show
  1. enap_designsystem/blocks/__init__.py +4 -0
  2. enap_designsystem/blocks/form.py +101 -6
  3. enap_designsystem/blocks/html_blocks.py +199 -10
  4. enap_designsystem/blocks/semana_inovacao.py +7 -1
  5. enap_designsystem/middleware/aluno_sso.py +16 -0
  6. enap_designsystem/migrations/0382_alter_areaaluno_body_alter_cursoeadpage_curso_and_more.py +51080 -0
  7. enap_designsystem/migrations/0383_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +50922 -0
  8. enap_designsystem/migrations/0384_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51606 -0
  9. enap_designsystem/migrations/0385_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51947 -0
  10. enap_designsystem/migrations/0386_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51809 -0
  11. enap_designsystem/templates/custom_404.html +372 -0
  12. enap_designsystem/templates/enap_designsystem/blocks/apresentacao_block.html +116 -0
  13. enap_designsystem/templates/enap_designsystem/blocks/apresentacao_simple_block.html +236 -0
  14. enap_designsystem/templates/enap_designsystem/form_templates/formulario_page.html +490 -13
  15. enap_designsystem/templates/enap_designsystem/includes/form_field.html +661 -4
  16. enap_designsystem/templates/enap_designsystem/pages/mba_especializacao.html +10 -0
  17. enap_designsystem/templates/enap_designsystem/sistema_votacao_page.html +33 -25
  18. {wagtail_enap_designsystem-1.2.1.122.dist-info → wagtail_enap_designsystem-1.2.1.125.dist-info}/METADATA +1 -1
  19. {wagtail_enap_designsystem-1.2.1.122.dist-info → wagtail_enap_designsystem-1.2.1.125.dist-info}/RECORD +22 -13
  20. {wagtail_enap_designsystem-1.2.1.122.dist-info → wagtail_enap_designsystem-1.2.1.125.dist-info}/WHEEL +0 -0
  21. {wagtail_enap_designsystem-1.2.1.122.dist-info → wagtail_enap_designsystem-1.2.1.125.dist-info}/licenses/LICENSE +0 -0
  22. {wagtail_enap_designsystem-1.2.1.122.dist-info → wagtail_enap_designsystem-1.2.1.125.dist-info}/top_level.txt +0 -0
@@ -26,6 +26,8 @@ from .html_blocks import (
26
26
  TimelineBlock,
27
27
  JobVacancyFilteredBlock,
28
28
  FormularioDinamicoBlock,
29
+ ApresentacaoBlock,
30
+ ApresentacaoSimpleBlock,
29
31
  )
30
32
 
31
33
  from .semana_blocks import (
@@ -353,6 +355,8 @@ class ContentStreamBlock(StreamBlock):
353
355
  feature_list = FeatureListBlock(label="📋 Lista de Features")
354
356
  feature_list_text = FeatureWithLinksBlock(label="🔗 Features com Links")
355
357
  html = HTMLCustomBlock(label="🔧 HTML Customizado")
358
+ apresentcao = ApresentacaoBlock(label="📰 Componente simples com título, quadrado de conteúdo e botão")
359
+ ApresentacaoBlock = ApresentacaoSimpleBlock(label="Componente com título, texto e grid flexível de cards")
356
360
 
357
361
  class Meta:
358
362
  label = "📰 Conteúdo e Texto"
@@ -546,17 +546,15 @@ class NomeCompletoFieldBlock(blocks.StructBlock):
546
546
 
547
547
 
548
548
 
549
+
549
550
  BASE_FORM_FIELD_BLOCKS = [
550
551
  ('section_header', SectionHeaderBlock()),
551
- ('nome_completo_field', NomeCompletoFieldBlock()),
552
552
  ('text_field', TextFieldBlock()),
553
553
  ('email_field', EmailFieldBlock()),
554
- ('cnpj_field', CNPJFieldBlock()),
555
554
  ('cpf_field', CPFFieldBlock()),
556
555
  ('phone_field', PhoneFieldBlock()),
557
556
  ('textarea_field', TextAreaFieldBlock()),
558
557
  ('number_field', NumberFieldBlock()),
559
- ('estado_cidade_field', EstadoCidadeFieldBlock()),
560
558
  ('date_field', DateFieldBlock()),
561
559
  ('dropdown_field', DropdownFieldBlock()),
562
560
  ('country_field', CountryFieldBlock()),
@@ -569,6 +567,103 @@ BASE_FORM_FIELD_BLOCKS = [
569
567
  ('divider', DividerBlock()),
570
568
  ]
571
569
 
570
+ # 2. DEPOIS: Definir as classes que usam BASE_FORM_FIELD_BLOCKS
571
+
572
+ class CheckboxMultiRedirectFieldBlock(blocks.StructBlock):
573
+ """Checkbox com múltiplas opções de redirecionamento - Sistema avançado"""
574
+
575
+ # Pergunta principal
576
+ label = blocks.CharBlock(
577
+ label="Pergunta/Título",
578
+ max_length=255,
579
+ help_text="Ex: Informações sobre dependentes"
580
+ )
581
+
582
+ help_text = blocks.CharBlock(
583
+ label="Texto de ajuda",
584
+ required=False,
585
+ help_text="Instrução adicional para o usuário"
586
+ )
587
+
588
+ required = blocks.BooleanBlock(
589
+ label="Obrigatório",
590
+ default=True
591
+ )
592
+
593
+ # Tipo do campo
594
+ field_type = blocks.ChoiceBlock(
595
+ label="Tipo de campo",
596
+ choices=[
597
+ ('checkbox', '☑️ Checkbox único (sim/não)'),
598
+ ('radio', '🔘 Múltiplas opções (radio)'),
599
+ ('dropdown', '📋 Lista suspensa'),
600
+ ],
601
+ default='checkbox',
602
+ help_text="Escolha como o usuário vai responder"
603
+ )
604
+
605
+ # Opções com redirecionamentos
606
+ redirect_options = blocks.StreamBlock([
607
+ ('option', blocks.StructBlock([
608
+ ('value', blocks.CharBlock(
609
+ label="Texto da opção",
610
+ max_length=255,
611
+ help_text="Ex: 'Sim, tenho filhos', 'Não tenho dependentes', 'Sou menor de idade'"
612
+ )),
613
+
614
+ ('action', blocks.ChoiceBlock(
615
+ label="Ação quando escolher esta opção",
616
+ choices=[
617
+ ('continue', '➡️ Continuar normalmente'),
618
+ ('next_step', '⏩ Pular para próxima etapa'),
619
+ ('specific_section', '🎯 Ir para seção específica'),
620
+ ('skip_to_end', '⏭️ Finalizar formulário'),
621
+ ('show_fields', '👁️ Mostrar campos condicionais'),
622
+ ],
623
+ default='continue'
624
+ )),
625
+
626
+ ('target_section_title', blocks.CharBlock(
627
+ label="Nome da seção de destino",
628
+ max_length=255,
629
+ required=False,
630
+ help_text="Nome exato do divisor (necessário se escolheu 'Ir para seção específica')"
631
+ )),
632
+
633
+ ('redirect_message', blocks.RichTextBlock(
634
+ label="Mensagem explicativa",
635
+ required=False,
636
+ features=['bold', 'italic', 'link'],
637
+ help_text="Mensagem mostrada ao usuário antes do redirecionamento"
638
+ )),
639
+
640
+ ('fields_to_show', blocks.StreamBlock(
641
+ BASE_FORM_FIELD_BLOCKS, # Agora já está definido acima
642
+ label="Campos condicionais",
643
+ required=False,
644
+ help_text="Campos que aparecem apenas se esta opção for escolhida"
645
+ )),
646
+
647
+ ('delay_seconds', blocks.IntegerBlock(
648
+ label="Delay antes do redirecionamento (segundos)",
649
+ default=1,
650
+ min_value=0,
651
+ max_value=10,
652
+ required=False,
653
+ help_text="Tempo de espera antes de executar o redirecionamento"
654
+ ))
655
+ ], label="Opção com Redirecionamento"))
656
+ ],
657
+ label="Opções e Ações",
658
+ help_text="Configure as opções e o que acontece para cada uma",
659
+ min_num=1,
660
+ max_num=5
661
+ )
662
+
663
+ class Meta:
664
+ icon = "redirect"
665
+ label = "☑️🔀 Checkbox Multi-Redirecionamento"
666
+
572
667
 
573
668
  class ConditionalFieldBlock(blocks.StructBlock):
574
669
  """Campo com ramificações condicionais - Super simples!"""
@@ -617,7 +712,7 @@ class ConditionalFieldBlock(blocks.StructBlock):
617
712
  default='nothing'
618
713
  )),
619
714
  ('fields_to_show', blocks.StreamBlock(
620
- BASE_FORM_FIELD_BLOCKS, # 🎯 Usa os campos básicos para evitar recursão
715
+ BASE_FORM_FIELD_BLOCKS, # Agora está definido acima
621
716
  label="Campos que aparecem",
622
717
  required=False,
623
718
  help_text="Campos que só aparecem se esta opção for escolhida"
@@ -633,12 +728,12 @@ class ConditionalFieldBlock(blocks.StructBlock):
633
728
  label = "🔗 Campo Condicional"
634
729
 
635
730
 
636
-
731
+ # 3. POR ÚLTIMO: Criar a lista final com os campos avançados
637
732
  FORM_FIELD_BLOCKS = BASE_FORM_FIELD_BLOCKS + [
733
+ ('checkbox_multi_redirect_field', CheckboxMultiRedirectFieldBlock()),
638
734
  ('conditional_field', ConditionalFieldBlock()),
639
735
  ]
640
736
 
641
-
642
737
  class FormStepBlock(StructBlock):
643
738
  """Bloco para uma etapa do formulário - apenas logo e campos"""
644
739
 
@@ -100,16 +100,16 @@ GRADIENT_COLOR_CHOICES = [
100
100
 
101
101
  # Cores para badges e botões
102
102
  ACCENT_COLOR_CHOICES = [
103
- ('enap-green', 'Verde ENAP'),
104
- ('enap-link', 'Verde Link ENAP'),
105
- ('enap-60', 'Verde ENAP 60 (#007D7A)'),
106
- ('enap-90', 'Verde ENAP 90 (#024248)'),
107
- ('enap-cinza', 'ENAP Cinza (#F5F7FA)'),
108
- ('gnova-purple', 'Roxo Gnova'),
109
- ('gnova-light', 'Roxo Claro Gnova'),
110
- ('gnova', 'Gnova (#AD6BFC)'),
111
- ('purple', 'Roxo'),
112
- ('#FFFFFF', 'Branco (#FFFFFF)'),
103
+ ('#024248', 'Verde ENAP'),
104
+ ('#007D7A', 'Verde Link ENAP'),
105
+ ('#007D7A', 'Verde ENAP 60'),
106
+ ('#024248', 'Verde ENAP 90'),
107
+ ('#F5F7FA', 'ENAP Cinza'),
108
+ ('#AD6BFC', 'Roxo Gnova'),
109
+ ('#B396FC', 'Roxo Claro Gnova'),
110
+ ('#AD6BFC', 'Gnova'),
111
+ ('#6366F1', 'Roxo'),
112
+ ('#FFFFFF', 'Branco'),
113
113
  ]
114
114
 
115
115
 
@@ -7404,5 +7404,194 @@ class FormularioDinamicoBlock(blocks.StructBlock):
7404
7404
 
7405
7405
 
7406
7406
 
7407
+ class ApresentacaoBlock(blocks.StructBlock):
7408
+ """
7409
+ Componente simples de apresentação com título, texto e botão
7410
+ Reutilizável para diferentes seções
7411
+ """
7412
+
7413
+ # Cor de fundo da seção
7414
+ cor_fundo = blocks.ChoiceBlock(
7415
+ choices=BACKGROUND_COLOR_CHOICES,
7416
+ required=False,
7417
+ default='#F8F9FA',
7418
+ help_text="Cor de fundo do componente"
7419
+ )
7420
+
7421
+ # Título
7422
+ titulo = blocks.CharBlock(
7423
+ required=True,
7424
+ max_length=100,
7425
+ help_text="Título principal"
7426
+ )
7427
+
7428
+ cor_titulo = blocks.ChoiceBlock(
7429
+ choices=ENAP_GREEN_COLORS,
7430
+ required=False,
7431
+ default='#024248',
7432
+ help_text="Cor do título"
7433
+ )
7434
+
7435
+ # Quadrado de conteúdo
7436
+ cor_quadrado = blocks.ChoiceBlock(
7437
+ choices=BACKGROUND_COLOR_CHOICES,
7438
+ required=False,
7439
+ default='#FFFFFF',
7440
+ help_text="Cor de fundo do quadrado de conteúdo"
7441
+ )
7442
+
7443
+ conteudo = blocks.RichTextBlock(
7444
+ required=True,
7445
+ help_text="Conteúdo do quadrado (rich text)"
7446
+ )
7447
+
7448
+ # Botão
7449
+ botao_texto = blocks.CharBlock(
7450
+ required=True,
7451
+ max_length=50,
7452
+ help_text="Texto do botão"
7453
+ )
7454
+
7455
+ botao_url = blocks.URLBlock(
7456
+ required=False,
7457
+ help_text="URL de destino do botão"
7458
+ )
7459
+
7460
+ botao_icone = blocks.ChoiceBlock(
7461
+ choices=FONTAWESOME_ICON_CHOICES,
7462
+ required=False,
7463
+ default='',
7464
+ help_text="Ícone do botão"
7465
+ )
7466
+
7467
+ cor_botao = blocks.ChoiceBlock(
7468
+ choices=ACCENT_COLOR_CHOICES,
7469
+ required=False,
7470
+ default='#AD6BFC',
7471
+ help_text="Cor do botão"
7472
+ )
7473
+
7474
+ cor_botao_hover = blocks.ChoiceBlock(
7475
+ choices=ACCENT_COLOR_CHOICES,
7476
+ required=False,
7477
+ default='#B396FC',
7478
+ help_text="Cor do botão no hover"
7479
+ )
7480
+
7481
+ class Meta:
7482
+ template = 'enap_designsystem/blocks/apresentacao_block.html'
7483
+ icon = 'doc-full'
7484
+ label = 'Apresentação'
7485
+ help_text = 'Componente simples com título, quadrado de conteúdo e botão'
7486
+
7487
+
7488
+
7489
+
7490
+
7407
7491
 
7408
7492
 
7493
+ class ApresentacaoCardBlock(blocks.StructBlock):
7494
+ """
7495
+ Card individual para usar dentro da apresentação
7496
+ """
7497
+ # Ícone
7498
+ icone = blocks.ChoiceBlock(
7499
+ choices=FONTAWESOME_ICON_CHOICES,
7500
+ required=False,
7501
+ default='fa-solid fa-lightbulb',
7502
+ help_text="Ícone do card"
7503
+ )
7504
+
7505
+ # Título do card
7506
+ titulo = blocks.CharBlock(
7507
+ required=True,
7508
+ max_length=100,
7509
+ help_text="Título do card"
7510
+ )
7511
+
7512
+ # Descrição
7513
+ descricao = blocks.TextBlock(
7514
+ required=True,
7515
+ help_text="Descrição do card"
7516
+ )
7517
+
7518
+ class Meta:
7519
+ icon = 'doc-empty'
7520
+ label = 'Card'
7521
+
7522
+
7523
+ class ApresentacaoSimpleBlock(blocks.StructBlock):
7524
+ """
7525
+ Componente simples de apresentação com título, texto e grid de cards
7526
+ """
7527
+
7528
+ # Background
7529
+ cor_fundo = blocks.ChoiceBlock(
7530
+ choices=BACKGROUND_COLOR_CHOICES,
7531
+ required=False,
7532
+ default='#6A1B9A', # Roxo como na imagem
7533
+ help_text="Cor de fundo do componente"
7534
+ )
7535
+
7536
+ # Título
7537
+ titulo = blocks.CharBlock(
7538
+ required=True,
7539
+ max_length=200,
7540
+ help_text="Título principal"
7541
+ )
7542
+
7543
+ cor_titulo = blocks.ChoiceBlock(
7544
+ choices=ENAP_GREEN_COLORS + [('#FFFFFF', 'Branco (#FFFFFF)')],
7545
+ required=False,
7546
+ default='#FFFFFF',
7547
+ help_text="Cor do título"
7548
+ )
7549
+
7550
+ # Quadrado de conteúdo
7551
+ cor_quadrado = blocks.ChoiceBlock(
7552
+ choices=BACKGROUND_COLOR_CHOICES,
7553
+ required=False,
7554
+ default='#FFFFFF',
7555
+ help_text="Cor de fundo do quadrado de conteúdo"
7556
+ )
7557
+
7558
+ # Rich text
7559
+ conteudo = blocks.RichTextBlock(
7560
+ required=True,
7561
+ help_text="Conteúdo descritivo (rich text)"
7562
+ )
7563
+
7564
+ cor_texto = blocks.ChoiceBlock(
7565
+ choices=ENAP_GREEN_COLORS,
7566
+ required=False,
7567
+ default='#024248',
7568
+ help_text="Cor do texto do conteúdo"
7569
+ )
7570
+
7571
+ # Grid de cards
7572
+ grid_tipo = blocks.ChoiceBlock(
7573
+ choices=[
7574
+ ('cards-grid-1', '1 card por linha'),
7575
+ ('cards-grid-2', 'Até 2 cards'),
7576
+ ('cards-grid-3', 'Até 3 cards'),
7577
+ ('cards-grid-4', 'Até 4 cards'),
7578
+ ('cards-grid-5', 'Até 5 cards')
7579
+ ],
7580
+ default='cards-grid-5',
7581
+ help_text="Quantos cards por linha",
7582
+ label="Cards por linha"
7583
+ )
7584
+
7585
+ # Stream de cards
7586
+ cards = blocks.StreamBlock([
7587
+ ('card', ApresentacaoCardBlock()),
7588
+ ],
7589
+ required=False,
7590
+ help_text="Adicione quantos cards precisar"
7591
+ )
7592
+
7593
+ class Meta:
7594
+ template = 'enap_designsystem/blocks/apresentacao_simple_block.html'
7595
+ icon = 'doc-full'
7596
+ label = 'Apresentação com Cards'
7597
+ help_text = 'Componente com título, texto e grid flexível de cards'
@@ -1251,4 +1251,10 @@ class SejaAvaliador(Page):
1251
1251
 
1252
1252
  class Meta:
1253
1253
  verbose_name = "Concurso de inovação - Seja Avaliador"
1254
- verbose_name_plural = "Concurso de inovação - Seja Avaliador"
1254
+ verbose_name_plural = "Concurso de inovação - Seja Avaliador"
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
@@ -0,0 +1,16 @@
1
+ class AlunoSSOMiddleware:
2
+ def __init__(self, get_response):
3
+ self.get_response = get_response
4
+
5
+ def __call__(self, request):
6
+ aluno = request.session.get("aluno_sso")
7
+ if aluno:
8
+ request.aluno = aluno
9
+ nome_completo = aluno.get("nome", "")
10
+ request.primeiro_nome = nome_completo.split(" ")[0] if nome_completo else "Aluno"
11
+ else:
12
+ request.aluno = None
13
+ request.primeiro_nome = None
14
+
15
+ response = self.get_response(request)
16
+ return response