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