Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Portlet de calendário estendido. Problema de quebra de layout #82

Closed
FernandoNasicimento opened this issue Mar 23, 2018 · 14 comments
Closed
Assignees
Labels

Comments

@FernandoNasicimento
Copy link

FernandoNasicimento commented Mar 23, 2018

Segue abaixo um erro de quebra de layout do portlet de calendário estendido.
Outro ponto verificado: Portlet não avança e nem retrocede entre as datas
image

Versão ::
image

@hvelarde hvelarde added the bug label Mar 26, 2018
@idgserpro idgserpro self-assigned this Apr 20, 2018
@idgserpro
Copy link
Member

Layout

1 - O erro de quebra de layout foi ocasionado pelo atualização de plone.app.event. É necessário customizar um javascript (veja mais sobre essa decisão plonegovbr/brasil.gov.portal#412 (comment)).

2 - O mês que ficava alinhado no centro do portlet agora fica alinhado à esquerda devido à atualização do collective.upload que utiliza o bootstrap e cria uma regra th com text-align: left:

https://github.com/collective/collective.upload/blob/45278693169d568da9205863ec6e03cd977884f5/webpack/app/upload.less#L6
https://github.com/distros/bootstrap-less/blob/f07af08fe8bdafb334df3d86e5e6790b842d4cbf/bootstrap/tables.less#L15
https://github.com/distros/bootstrap-less/blob/f07af08fe8bdafb334df3d86e5e6790b842d4cbf/bootstrap/tables.less#L15

collective.portlet.calendar já define a regra de centralizar o nome do mês, portanto iremos apenas fazer com que o registro do css do upload seja feito antes do css de collective.portlet.calendar (usando insert-before no cssregistry.xml) no nosso pacote e também com um upgradeStep.

Como esse problema ocorre devido ao uso do collective.upload, deve ser corrigido no brasil.gov.portal (pois collective.upload não é dependência de brasil.gov.agenda).

Funcionalidade próximo mês

Será feito um patch baseado em plone/Products.CMFPlone#2215 por não podermos atuar no namespace Plone. Basicamente, adicionando um str na variável path mencionada pelo @claytonc resolve o problema (e como em https://github.com/zopefoundation/Zope/blob/2.13.27/src/OFS/Traversable.py#L149 já é esperado um str, não vejo maiores problemas nesse patch enquanto não é feito e lançado upstream).

idgserpro added a commit that referenced this issue May 9, 2018
portlet_calendar.js foi customizado. Ler o relato para entender as
motivações.

Customizado a partir de

https://raw.githubusercontent.com/plone/plone.app.event/1.1.8/plone/app/event/portlets/portlet_calendar.js
idgserpro added a commit that referenced this issue May 11, 2018
Fecha #82.

Patch foi feito da forma tradicional e não com uso de
collective.monkeypatcher, ver

https://pypi.org/project/collective.monkeypatcher/#patching-module-level-functions
idgserpro added a commit to plonegovbr/brasil.gov.portal that referenced this issue May 15, 2018
Altera ordem de registro de javascript do collective.upload e
collective.portlet.calendar para corrigir alinhamento do título
(refs. plonegovbr/brasil.gov.agenda#82)
hvelarde pushed a commit that referenced this issue May 16, 2018
* Corrige layout do portlet de agenda (rel #82).

portlet_calendar.js foi customizado. Ler o relato para entender as
motivações.

Customizado a partir de

https://raw.githubusercontent.com/plone/plone.app.event/1.1.8/plone/app/event/portlets/portlet_calendar.js

* Adiciona upgradeStep para customização js.

O último upgradeStep da branch 1.x é o 4003:

https://github.com/plonegovbr/brasil.gov.agenda/tree/dd4fcfa103d625a1ee7f44cba9b6457e2a6b6a17/src/brasil/gov/agenda/upgrades

E o primeiro da branch master (2.0) é o 4004:

https://github.com/plonegovbr/brasil.gov.agenda/tree/58370bbb9c5a9182c8979aba7669bb09c10d9b82/src/brasil/gov/agenda/upgrades

Dessa forma, nomearemos o upgradeStep na branch 1.x de 4003r01 para evitar
conflitos com nomes. Essa lógica é parecida com a usada nos revisions dos
UnifiedInstallers:

https://launchpad.net/plone/4.3/4.3.15/+download/Plone-4.3.15-UnifiedInstaller-r2.tgz

E também é reconhecida pelos padrões definidos em distutils.version.LooseVersion
e packaging.version.parse.

* Corrige navegação entre meses calendário estendido

Fecha #82.

Patch foi feito da forma tradicional e não com uso de
collective.monkeypatcher, ver

https://pypi.org/project/collective.monkeypatcher/#patching-module-level-functions

* Muda upgradeStep de 4003r01 para 4004.

Após discussões sobre padrões de números de upgradeSteps em

plonegovbr/brasil.gov.portal#471 (comment)

Decidimos mudar para 4004. Modificações futuras no brasil.gov.agenda com
relação ao upgradeStep hoje definido na branch master (futuro 2.x) serão
feitas em

#86
hvelarde pushed a commit to plonegovbr/brasil.gov.portal that referenced this issue May 24, 2018
* Altera reg javascript do c.upload / c.p.calendar.

Altera ordem de registro de javascript do collective.upload e
collective.portlet.calendar para corrigir alinhamento do título
(refs. plonegovbr/brasil.gov.agenda#82)

* Code review.

Ficar atento às várias opções disponibilizadas em

https://docs.python.org/2/library/unittest.html#assert-methods

A principal vantagem é a legibilidade: só de ler o assert você já
entende a lógica ao invés de tentar interpretar a lógica interna que
voltaria True para assertTrue anteriormente.

Registros de css também não necessitam de 'insert-after' E
'insert-before' por ser redundante.
@idgserpro
Copy link
Member

idgserpro commented Jun 11, 2018

Acho que a implementação aqui não foi a mais correta: será necessário, no main.css, forçar uma regra caption,th{text-align:center} (ou similar) além de registrar o upload.css antes como já foi feito nesse relato, pois quando se está logado, o nome do mês continua alinhado à esquerda.

Falo isso porque o html renderizado é:

<table class="ploneCalendar" summary="Calendário">
<caption class="hiddenStructure">Junho</caption>
<thead>
<tr class="month">
<th colspan="7">
<a href="http://brasil.gov.portal-1.x:8080/Plone?month:int=5&amp;year:int=2018&amp;orig_query=" rel="nofollow" title="Mês anterior" id="calendar-previous" data-month="5" data-year="2018" class="kssCalendarChange kssattr-year-2018 kssattr-month-5 calendarPrevious">«</a>
Junho 2018
<a href="http://brasil.gov.portal-1.x:8080/Plone?month:int=7&amp;year:int=2018&amp;orig_query=" rel="nofollow" title="Próximo mês" id="calendar-next" data-month="7" data-year="2018" class="kssCalendarChange kssattr-year-2018 kssattr-month-7 calendarNext">»</a>
</th>
</tr>
<tr class="weekdays"><th scope="col">Do</th><th scope="col">Se</th><th scope="col">Te</th><th scope="col">Qu</th><th scope="col">Qu</th><th scope="col">Se</th><th scope="col">Sa</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td class="todaynoevent"><strong>11</strong></td>
<td class="event">
<strong>
<a href="http://brasil.gov.portal-1.x:8080/Plone/agenda/2018-06-12" title="Agenda">12</a></strong></td>
<td>13</td>
<td>14</td>
<td>15</td>
<td>16</td>
</tr>
<tr>
<td>17</td>
<td>18</td>
<td>19</td>
<td>20</td>
<td>21</td>
<td>22</td>
<td>23</td>
</tr>
<tr>
<td>24</td>
<td>25</td>
<td>26</td>
<td>27</td>
<td>28</td>
<td>29</td>
<td>30</td>
</tr>
</tbody>
</table>

Veja que o th está dentro do <tr class="month">, portanto a regra do portlet calendar em https://github.com/collective/collective.portlet.calendar/blob/1.0b2/collective/portlet/calendar/browser/calendar_styles/calendar.css#L20 que define o tr.month como center não irá funcionar pois na hierarquia css o th é filho do tr e, portanto, mais específico.

Acho que o ideal aqui seria, em https://github.com/plonegovbr/brasil.gov.portal/blob/3583d4c3dbff69e128c585f954eb8d3b615f976e/src/brasil/gov/portal/static/css/main.css#L1283, criar uma nova seção, "Portlet de calendário estendido", colocando a regra

.portletCalendarEx th {
    text-align: center;
}

@rodfersou e @agnogueira, favor expressarem suas opiniões. Precisamos resolver isso antes de sair um novo release 1.5.x.

@rodfersou
Copy link
Member

eu usaria uma regra flexbox para corrigir a posição dos elementos.

@agnogueira
Copy link
Member

@idgserpro Tranquilo pra mim esse enfoque se resolve o problema agora.
Mas acho que vale também alterar o CSS do calendar, para tornar a regra mais específica. Apesar de ser um erro específico na nossa seleção de produtos, mais gente pode encontrar esse problema quando utilizar em conjunto com o bootstraap.

@idgserpro
Copy link
Member

@agnogueira Acha então que

.portletCalendarEx th {
    text-align: center;
}

Deveria ser adicionado em collective.portlet.calendar com essa justificativa, evitar conflito quando estiver usando bootstrap?

@rodfersou
Copy link
Member

me parece a solução mais simples

@idgserpro
Copy link
Member

De qualquer forma, precisamos adicionar aqui porque usar o último release de collective.portlet.calendar ainda não é possível.

@idgserpro
Copy link
Member

idgserpro commented Jun 11, 2018

Temos outro problema: ao atualizar um IDG 1.0.5 para as branches 1.x com essa correção, o portlet de agenda não cria mais os links para as agendas a não ser que eu dê um updateCatalog. Não sei se isso é um problema do Plone ou do collective.portlet.calendar. @hvelarde já viu algo parecido?

Antes do update catalog:
captura de tela de 2018-06-11 12-23-19

Depois do update catalog:
captura de tela de 2018-06-11 12-23-53

Código html do "evento" renderizado após o update catalog:

<td class="event">
    <strong>
        <a href="http://localhost:8080/Plone/agenda/2018-06-09" title="Agenda">9</a>
    </strong>
</td>

@hvelarde
Copy link
Member

@idgserpro nunca vi, mas acho que pode estar relacionado com a atualização do plone.app.contenttypes.

@idgserpro
Copy link
Member

idgserpro commented Jun 11, 2018

O "erro" ocorre aqui: https://github.com/plone/Products.CMFPlone/blob/4.3.15/Products/CMFPlone/CalendarTool.py#L88

Sem rodar updateCatalog:

idg-152-semupdatecatalog

{'start': {'query': DateTime('2018/06/30 23:59:59 GMT-3'), 'range': 'max'}, 'end': {'query': DateTime('2018/06/01 00:00:00 GMT-3'), 'range': 'min'}, 'path': '/Plone/agenda', 'portal_type': ('Event', 'AgendaDiaria'), 'sort_on': 'start', 'review_state': ('published',)}

[]

Rodando updateCatalog:

idg-152-updatecatalog

{'start': {'query': DateTime('2018/06/30 23:59:59 GMT-3'), 'range': 'max'}, 'end': {'query': DateTime('2018/06/01 00:00:00 GMT-3'), 'range': 'min'}, 'path': '/Plone/agenda', 'portal_type': ('Event', 'AgendaDiaria'), 'sort_on': 'start', 'review_state': ('published',)}
[<Products.ZCatalog.Catalog.mybrains object at 0x7f98d7287db8>]

@idgserpro
Copy link
Member

idgserpro commented Jun 12, 2018

IDG 1.0.5

idg-105

Atualizando do 1.0.5 para 1.5.2 (a ser lançado) mas sem rodar o upgradeStep de plone.app.contenttypes

idg-152-sem-rodar-upgradestep-ploneappcontenttypes

Atualizando do 1.0.5 para 1.5.2 (a ser lançado) rodando o upgradeStep de plone.app.contenttypes

idg-152-rodando-upgradestep-ploneappcontenttypes

Atualizando do 1.0.5 para 1.5.2 (a ser lançado) rodando todos os upgradeSteps + um de teste em que ele executa catalog.catalog_object(obj) em Agenda, AgendaDiaria e Compromisso:

idg-152-todos-upgrades-rodados-mais-reindex-agenda

idgserpro added a commit that referenced this issue Jun 12, 2018
Dessa forma, itens passam a aparecer no portlet definido por collective.portlet.calendar. Ver #82 (comment) para mais detalhes.
idgserpro added a commit to plonegovbr/brasil.gov.portal that referenced this issue Jun 12, 2018
Sobrescreve a regra adicionada pelo bootstrap de collective.upload. Ver plonegovbr/brasil.gov.agenda#82 (comment)
idgserpro added a commit to plonegovbr/brasil.gov.portal that referenced this issue Jun 12, 2018
Sobrescreve a regra adicionada pelo bootstrap de collective.upload. Ver plonegovbr/brasil.gov.agenda#82 (comment)
idgserpro added a commit to collective/collective.portlet.calendar that referenced this issue Jun 12, 2018
This is being done because of bootstrap.

An example is collective.upload, that it's using bootstrap: in https://github.com/collective/collective.upload/blob/45278693169d568da9205863ec6e03cd977884f5/webpack/app/upload.less#L6 -> https://github.com/distros/bootstrap-less/blob/f07af08fe8bdafb334df3d86e5e6790b842d4cbf/bootstrap/tables.less#L15 you can see that

th {
  text-align: left;
}

Is defined and will have impact in all layouts like here in collective.portlet.calendar if you have collective.upload installed.

This was motivated (in portuguese) in plonegovbr/brasil.gov.agenda#82 (comment).
@idgserpro
Copy link
Member

idgserpro commented Jun 12, 2018

#97, plonegovbr/brasil.gov.portal#482 e collective/collective.portlet.calendar#10 criados.

@hvelarde não entendi muito bem o porquê de #82 (comment) (como você mesmo disse, devia ser plone.app.contenttypes e era mesmo), mas chamando o catalog_object o portlet volta a mostrar os itens.

idgserpro added a commit to plonegovbr/brasil.gov.portal that referenced this issue Jun 12, 2018
Sobrescreve a regra adicionada pelo bootstrap de collective.upload. Assim,
força centralização do nome do mês no portlet de calendário estendido.

Ver plonegovbr/brasil.gov.agenda#82 (comment)
idgserpro added a commit to collective/collective.portlet.calendar that referenced this issue Jun 12, 2018
This is being done because of bootstrap.

An example is collective.upload, that it's using bootstrap: in https://github.com/collective/collective.upload/blob/45278693169d568da9205863ec6e03cd977884f5/webpack/app/upload.less#L6 -> https://github.com/distros/bootstrap-less/blob/f07af08fe8bdafb334df3d86e5e6790b842d4cbf/bootstrap/tables.less#L15 you can see that

th {
  text-align: left;
}

Is defined and will have impact in all layouts like here in collective.portlet.calendar if you have collective.upload installed.

This was motivated (in portuguese) in plonegovbr/brasil.gov.agenda#82 (comment).
hvelarde pushed a commit that referenced this issue Jun 12, 2018
Dessa forma, itens passam a aparecer no portlet definido por collective.portlet.calendar. Ver #82 (comment) para mais detalhes.
hvelarde pushed a commit to collective/collective.portlet.calendar that referenced this issue Jun 12, 2018
This is being done because of bootstrap.

An example is collective.upload, that it's using bootstrap: in https://github.com/collective/collective.upload/blob/45278693169d568da9205863ec6e03cd977884f5/webpack/app/upload.less#L6 -> https://github.com/distros/bootstrap-less/blob/f07af08fe8bdafb334df3d86e5e6790b842d4cbf/bootstrap/tables.less#L15 you can see that

th {
  text-align: left;
}

Is defined and will have impact in all layouts like here in collective.portlet.calendar if you have collective.upload installed.

This was motivated (in portuguese) in plonegovbr/brasil.gov.agenda#82 (comment).
@hvelarde
Copy link
Member

vou avisando que esse pacote torna-se desnecessário no IDG 2.0.

@idgserpro
Copy link
Member

Você está falando do collective.portlet.calendar?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants