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

Editor vazio não funciona no Firefox Quantum (57.0.1) #2

Closed
juliomelo opened this issue Dec 6, 2017 · 2 comments
Closed

Editor vazio não funciona no Firefox Quantum (57.0.1) #2

juliomelo opened this issue Dec 6, 2017 · 2 comments
Assignees
Labels

Comments

@juliomelo
Copy link
Member

O editor de articulação no Firefox Quantum, versão 57.0.1, não funciona quando a articulação está vazia. Entretanto, o editor funciona quando já tem conteúdo e então ganha foco.

Passos para reprdouzir:

  1. Abra o exemplo do editor de articulação em https://silegis-mg.github.io/editor-articulacao/ com o Firefox 57.0.1
  2. Clique sobre o "Art. 1º"
  3. Digite: "Teste".

Resultado esperado

Texto articulado contendo "Art. 1º Teste"

Resultado obtido

Texto articulado contendo:

Teste
     Art. 1º
@juliomelo juliomelo self-assigned this Dec 6, 2017
@juliomelo juliomelo added the bug label Dec 6, 2017
@juliomelo
Copy link
Member Author

juliomelo commented Dec 6, 2017

Problema se encontra no focusHandler do EditorArticulacaoController, introduzido no commit 5bb4d6b:

        let focusHandler = function () {
            if (!this._elemento.firstElementChild) {
                this.limpar(); // <-- aqui está o problema
            }
        }.bind(this);
        this.registrarEventListener('focus', focusHandler, true);

Como o método limpar altera o conteúdo do editor, o cursor se perde, naturalmente, indo para o início do componente, antes do primeiro artigo. Isto não ocorre no Chrome nem nas versões anteriores do Firefox.

Este código tem relação com a possibilidade do usuário, pelo navegador, remover todos os parágrafos (tag P) do editor de articulação, tornando-o vazio e introduzindo um estado inconsistente, visto que o editor assume que o foco sempre está em algum dispositivo. Neste caso, há tratamento no blur e em outros eventos que verifica esta situação, restaurando o estado inicial do editor de articulação por meio do método limpar. Quando foi introduzido, não havia a verificação no blur nem mesmo na obtenção da seleção, que foi introduzido no último commit do controller em 64168ac. Por isso, este handler se torna desnecessário, até mesmo porque o foco no editor sem conteúdo pode ser inviável, já que o mesmo pode passar a ter altura 0, dependendo do CSS da aplicação (como no caso do Silegis-MG).

Removendo o focusHandler, o editor funciona normalmente no Firefox 57.0.1 e no Chrome 62.0.3202.62. Falta ainda testar no IE 11 e a versão do Firefox homologada pela ALMG.

Talvez este mesmo código tenha provocado o problema no IE 11 tratado pelo hack no arquivo ie.js no commit b6be9bc:

    /* IE 11 coloca o foco fora do dispositivo, permitindo a criação de texto no DIV
     * principal, sem elemento P.
     */
    controller.registrarEventListener('focus', () => {
        if (controller.vazio || /^\s+$/.test(controller._elemento.firstElementChild.textContent)) {
            let selecao = controller.getSelection();

            selecao.removeAllRanges();
            
            let range = document.createRange();
            range.setStart(controller._elemento.firstElementChild, 0);
            selecao.addRange(range);
        }
    });

Farei testes para verificar se o impacto de remover o focusHandler nos navegadores e a remoção do hack para IE 11.

@juliomelo
Copy link
Member Author

Testado no Firefox 52.5.0, Firefox 57.0.1, Chrome 62.0.3202.62 e IE 11.0.9600.18792

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

1 participant