wagtail-enap-designsystem 1.2.1.151__py3-none-any.whl → 1.2.1.153__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/html_blocks.py +105 -12
- enap_designsystem/blocks/semana_blocks.py +5 -0
- enap_designsystem/migrations/0424_enapnoticia_destaque_fixo_alter_areaaluno_body_and_more.py +56792 -0
- enap_designsystem/models.py +2 -2
- enap_designsystem/static/enap_designsystem/icons/thumb-noticias-novo.png +0 -0
- enap_designsystem/templates/enap_designsystem/pages/page_search.html +6 -6
- enap_designsystem/templates/enap_designsystem/semana_inovacao/blocks_menu_navigation.html +1 -1
- {wagtail_enap_designsystem-1.2.1.151.dist-info → wagtail_enap_designsystem-1.2.1.153.dist-info}/METADATA +1 -1
- {wagtail_enap_designsystem-1.2.1.151.dist-info → wagtail_enap_designsystem-1.2.1.153.dist-info}/RECORD +12 -10
- {wagtail_enap_designsystem-1.2.1.151.dist-info → wagtail_enap_designsystem-1.2.1.153.dist-info}/WHEEL +0 -0
- {wagtail_enap_designsystem-1.2.1.151.dist-info → wagtail_enap_designsystem-1.2.1.153.dist-info}/licenses/LICENSE +0 -0
- {wagtail_enap_designsystem-1.2.1.151.dist-info → wagtail_enap_designsystem-1.2.1.153.dist-info}/top_level.txt +0 -0
|
@@ -533,21 +533,74 @@ class NewsCarouselBlock(BaseBlock):
|
|
|
533
533
|
indexer = value["indexed_by"].specific
|
|
534
534
|
num_posts = value["num_posts"]
|
|
535
535
|
|
|
536
|
-
#
|
|
537
|
-
|
|
538
|
-
|
|
536
|
+
# Import dinâmico para evitar imports circulares
|
|
537
|
+
try:
|
|
538
|
+
from django.apps import apps
|
|
539
|
+
ENAPNoticia = apps.get_model('enap_designsystem', 'ENAPNoticia')
|
|
540
|
+
except (ImportError, LookupError):
|
|
541
|
+
# Se não encontrar a classe, usar lógica original OTIMIZADA
|
|
542
|
+
pages = indexer.get_children().live().select_related('content_type').order_by("-first_published_at")[:50]
|
|
543
|
+
|
|
544
|
+
def get_page_date(page):
|
|
545
|
+
return getattr(page.specific, "date_display", None) or page.first_published_at.date()
|
|
546
|
+
|
|
547
|
+
pages_final = sorted(pages, key=get_page_date, reverse=True)[:num_posts]
|
|
548
|
+
context["pages"] = pages_final
|
|
549
|
+
return context
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
all_children = indexer.get_children().live().select_related('content_type')[:20]
|
|
553
|
+
enap_noticias = []
|
|
554
|
+
outras_pages = []
|
|
555
|
+
noticias_ids = set() # Usar set para busca O(1)
|
|
556
|
+
|
|
557
|
+
for page in all_children:
|
|
558
|
+
if isinstance(page.specific, ENAPNoticia):
|
|
559
|
+
enap_noticias.append(page.specific)
|
|
560
|
+
noticias_ids.add(page.specific.id)
|
|
561
|
+
else:
|
|
562
|
+
outras_pages.append(page)
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
if enap_noticias:
|
|
566
|
+
# Ordenar TODAS as notícias por data primeiro
|
|
567
|
+
def get_page_date(page):
|
|
568
|
+
return getattr(page, "date_display", None) or page.first_published_at.date()
|
|
569
|
+
|
|
570
|
+
todas_noticias_ordenadas = sorted(enap_noticias, key=get_page_date, reverse=True)
|
|
571
|
+
|
|
572
|
+
# Pegar a notícia em destaque (se estiver entre as filhas) COM PROTEÇÃO
|
|
573
|
+
destaque = None
|
|
574
|
+
try:
|
|
575
|
+
destaque_temp = ENAPNoticia.get_noticia_destaque()
|
|
576
|
+
if destaque_temp and destaque_temp.id in noticias_ids:
|
|
577
|
+
destaque = destaque_temp
|
|
578
|
+
except Exception:
|
|
579
|
+
destaque = None
|
|
580
|
+
|
|
581
|
+
if destaque:
|
|
582
|
+
# Remove o destaque da lista ordenada
|
|
583
|
+
noticias_sem_destaque = [n for n in todas_noticias_ordenadas if n.id != destaque.id]
|
|
584
|
+
|
|
585
|
+
# Destaque primeiro, depois as outras em ordem cronológica
|
|
586
|
+
pages_final = [destaque] + noticias_sem_destaque[:num_posts-1]
|
|
587
|
+
else:
|
|
588
|
+
# Não há destaque entre as filhas, ordenação normal
|
|
589
|
+
pages_final = todas_noticias_ordenadas[:num_posts]
|
|
539
590
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
591
|
+
else:
|
|
592
|
+
pages = indexer.get_children().live().select_related('content_type').order_by("-first_published_at")[:50]
|
|
593
|
+
|
|
594
|
+
def get_page_date(page):
|
|
595
|
+
return getattr(page.specific, "date_display", None) or page.first_published_at.date()
|
|
543
596
|
|
|
544
|
-
|
|
545
|
-
pages_ordered = sorted(pages, key=get_page_date, reverse=True)[:num_posts]
|
|
597
|
+
pages_final = sorted(pages, key=get_page_date, reverse=True)[:num_posts]
|
|
546
598
|
|
|
547
|
-
|
|
548
|
-
context["pages"] = pages_ordered
|
|
599
|
+
context["pages"] = pages_final
|
|
549
600
|
return context
|
|
550
601
|
|
|
602
|
+
|
|
603
|
+
|
|
551
604
|
class CoursesCarouselBlock(BaseBlock):
|
|
552
605
|
"""
|
|
553
606
|
Renders a carousel of selected news pages.
|
|
@@ -1902,7 +1955,6 @@ class ENAPNoticiasIndexPage(Page):
|
|
|
1902
1955
|
return context
|
|
1903
1956
|
|
|
1904
1957
|
|
|
1905
|
-
|
|
1906
1958
|
class ENAPNoticia(Page):
|
|
1907
1959
|
"""Modelo base para novas notícias (customizável depois)."""
|
|
1908
1960
|
|
|
@@ -1938,6 +1990,12 @@ class ENAPNoticia(Page):
|
|
|
1938
1990
|
help_text=_("Imagem principal da notícia para exibição externa (listagens, cards, etc)."),
|
|
1939
1991
|
)
|
|
1940
1992
|
|
|
1993
|
+
destaque_fixo = models.BooleanField(
|
|
1994
|
+
default=False,
|
|
1995
|
+
verbose_name=_("Destaque Fixo na Home"),
|
|
1996
|
+
help_text=_("Marque para manter esta notícia fixa em destaque na página inicial, independente da ordem cronológica."),
|
|
1997
|
+
)
|
|
1998
|
+
|
|
1941
1999
|
author = models.ForeignKey(
|
|
1942
2000
|
settings.AUTH_USER_MODEL,
|
|
1943
2001
|
null=True,
|
|
@@ -1996,6 +2054,7 @@ class ENAPNoticia(Page):
|
|
|
1996
2054
|
FieldPanel('subtitulo'),
|
|
1997
2055
|
FieldPanel('legenda_home'),
|
|
1998
2056
|
FieldPanel('imagem_externa'),
|
|
2057
|
+
FieldPanel('destaque_fixo'),
|
|
1999
2058
|
],
|
|
2000
2059
|
heading=_("Informações Básicas"),
|
|
2001
2060
|
),
|
|
@@ -2108,6 +2167,41 @@ class ENAPNoticia(Page):
|
|
|
2108
2167
|
|
|
2109
2168
|
return re.sub(r"\s+", " ", " ".join([t for t in textos if t])).strip()
|
|
2110
2169
|
|
|
2170
|
+
# ========================================
|
|
2171
|
+
# MÉTODOS PARA CONSULTAR NOTÍCIAS
|
|
2172
|
+
# ========================================
|
|
2173
|
+
|
|
2174
|
+
@classmethod
|
|
2175
|
+
def get_noticia_destaque(cls):
|
|
2176
|
+
"""Retorna a notícia marcada como destaque fixo"""
|
|
2177
|
+
return cls.objects.filter(
|
|
2178
|
+
live=True,
|
|
2179
|
+
destaque_fixo=True
|
|
2180
|
+
).first()
|
|
2181
|
+
|
|
2182
|
+
@classmethod
|
|
2183
|
+
def get_noticias_normais(cls, limit=5):
|
|
2184
|
+
"""Retorna outras notícias (sem a de destaque) ordenadas por data"""
|
|
2185
|
+
return cls.objects.filter(
|
|
2186
|
+
live=True,
|
|
2187
|
+
destaque_fixo=False
|
|
2188
|
+
).order_by('-date_display', '-first_published_at')[:limit]
|
|
2189
|
+
|
|
2190
|
+
@classmethod
|
|
2191
|
+
def get_todas_noticias_ordenadas(cls, limit=6):
|
|
2192
|
+
"""
|
|
2193
|
+
Retorna todas as notícias com a de destaque primeiro,
|
|
2194
|
+
depois as outras por ordem cronológica
|
|
2195
|
+
"""
|
|
2196
|
+
destaque = cls.get_noticia_destaque()
|
|
2197
|
+
normais = cls.get_noticias_normais(limit - 1 if destaque else limit)
|
|
2198
|
+
|
|
2199
|
+
if destaque:
|
|
2200
|
+
# Destaque primeiro, depois as normais
|
|
2201
|
+
return [destaque] + list(normais)
|
|
2202
|
+
else:
|
|
2203
|
+
return list(normais)
|
|
2204
|
+
|
|
2111
2205
|
search_fields = Page.search_fields + [
|
|
2112
2206
|
index.SearchField("title", boost=3),
|
|
2113
2207
|
index.SearchField("titulo_filter", name="titulo"),
|
|
@@ -2126,7 +2220,6 @@ class ENAPNoticia(Page):
|
|
|
2126
2220
|
|
|
2127
2221
|
template = "enap_designsystem/pages/article/enap_noticia.html"
|
|
2128
2222
|
|
|
2129
|
-
|
|
2130
2223
|
class ENAPNoticiaImportada(Page):
|
|
2131
2224
|
"""Página exclusiva para exibir artigos importados do Joomla, sem edição."""
|
|
2132
2225
|
|
|
@@ -1298,6 +1298,11 @@ class MenuNavigationBlock(blocks.StructBlock):
|
|
|
1298
1298
|
help_text="Imagem de logo da esquerda"
|
|
1299
1299
|
)
|
|
1300
1300
|
|
|
1301
|
+
logo_url = blocks.URLBlock(
|
|
1302
|
+
required=False,
|
|
1303
|
+
help_text="Link ao clicar na logo"
|
|
1304
|
+
)
|
|
1305
|
+
|
|
1301
1306
|
cor_fundo = blocks.CharBlock(
|
|
1302
1307
|
default='#132929',
|
|
1303
1308
|
help_text="Cor de fundo do menu"
|