plonegovbr / brasil.gov.portal

Implementação em Plone do Portal Padrão da Identidade Digital de Governo
https://plone.org.br/gov/
35 stars 31 forks source link

Javacripts registrados duas vezes #287

Closed claytonc closed 7 years ago

claytonc commented 8 years ago

Os produtos brasil.gov.tiles e brasil.gov.portlets utilizam os mesmos javascripts, mas foram registrados no portal_javascripts duas vezes.

brasil.gov.portlets/src/brasil/gov/portlets/setuphandlers.py: 1 - ++resource++brasil.gov.portlets/js/jquery.cycle2.js 2 - ++resource++brasil.gov.portlets/js/jquery.cycle2.carousel.js 3 - ++resource++brasil.gov.portlets/js/jquery.jplayer.min.js

brasil.gov.tiles/brasil/gov/tiles/profiles/default/jsregistry.xml: 1 - ++resource++brasil.gov.tiles/jquery.cycle2.js 2 - ++resource++brasil.gov.tiles/jquery.cycle2.carousel.js 3 - ++resource++brasil.gov.tiles/jquery.jplayer.min.js

Encontrar uma solução para casos parecidos.

hvelarde commented 8 years ago

a solução passa por ambos pacotes depender do collective.js.cycle2

claytonc commented 7 years ago

@hvelarde o produto collective.js.cycle2 não resolve o problema completamente, pois o jquery.jplayer.min.js não esta incluso.

o produto brasil.gov.portlets utiliza o setuphandlers.py para registrar os javascripts e o brasil.gov.tiles utiliza o profiles via jsregistry.xml.

a minha sugestão é a seguinte modificar o setuphandlers.py do produto brasil.gov.portlet efetuando uma verificação no se o brasil.gov.portal existe, fazendo isso somente o produto brasil.gov.tiles registra os javascripts citados não duplicando os javascript.

E se alguém for utilizar somente o brasil.gov.portlet sem o brasil.gov.portal os javascripts serão registrados.

@idgserpro alguma sugestão ?

+import pkg_resources

+try:
+    pkg_resources.get_distribution('brasil.gov.portal')
+except pkg_resources.DistributionNotFound:
+    HAS_BRASIL_GOV_PORTAL = False
+else:
+    HAS_BRASIL_GOV_PORTAL = True
...
     site = api.portal.get()
+    if not HAS_BRASIL_GOV_PORTAL:
-    register_vendor_js(site)
+        register_vendor_js(site)
idgserpro commented 7 years ago

brasil.gov.portlets tem o brasil.gov.portal como dependência. brasil.gov.portal tem brasil.gov.portlets e brasil.gov.tiles como dependência.

Analisando friamente, esses recursos deveriam ser registrados apenas no brasil.gov.tiles, pois ele pode ser instalado "separado" (não tem brasil.gov.portal de dependência): mas sempre que você instalar o brasil.gov.portlets ou o próprio brasil.gov.portal o brasil.gov.tiles vem junto e, por tabela viriam esses javascripts que o brasil.gov.portlets precisa.

Portanto, a opção com menos código seria colocar o o collective.js.cycle2 de dependência de brasil.gov.tiles, e manter o ++resource++brasil.gov.portlets/js/jquery.jplayer.min.js: essa abordagem tem a desvantagem de ficar "confusa" a árvore de dependências, ter um js que é usado no seu pacote dentro de outro (ou seja, o brasil.gov.portlets tem um js necessário pra funcionar dentro do brasil.gov.tiles). Se for seguir por esse caminho recomendo uma documentação adicional no setup.py de todos os pacotes e no configure.zcml do brasil.gov.tiles pra mostrar que mais de um pacote utiliza aqueles recursos.

De qualquer forma, tem de se pesquisar no código e ver se é feita alguma chamada explícita para "++resource++brasil.gov.tiles/jquery.cycle2.js" por exemplo e verificar também se não será necessário um upgradeStep.

claytonc commented 7 years ago

@idgserpro Nenhum dos dois produtos fazem chamadas explícitas para os javascripts citados, os dois produtos registram no portal_javascripts.

Então temos duas possíveis soluções:

1 - Remover do setuphandlers.py do brasil.gov.portlets e manter somente no brasil.gov.tiles, criando algo para remover os registros efetuados pelo brasil.gov.portlets em instalações existentes.

2 - Remover do setuphandlers.py do brasil.gov.portlets e alterar os registros do brasil.gov.tiles, pois o collective.js.cycle2 não registra automaticamente no portal_javacripts. Criar algo para remover e alterar os registros dos produtos brasil.gov.portlets e brasil.gov.tiles em instalações existentes.

claytonc commented 7 years ago

@idgserpro

De qualquer forma removendo do brasil.gov.portlet o registro dos javascripts já resolve a parte de duplicidade depois abrimos uma outra issue para o brasil.gov.tiles para adicionar o collective.js.cycle2 como dependência.

Estou apanhando um pouco com os testes mas daqui a pouco consigo realizar o pull request

idgserpro commented 7 years ago

Feito em https://github.com/plonegovbr/brasil.gov.portlets/pull/15