diff --git a/src/assets/css/editor.css.ts b/src/assets/css/editor.css.ts index 323b1e73..5c84f73c 100644 --- a/src/assets/css/editor.css.ts +++ b/src/assets/css/editor.css.ts @@ -492,6 +492,18 @@ export const editorStyles = html` font-weight: bold; } + .nota-alteracao[exibir], + .abre-aspas[exibir], + .fecha-aspas[exibir] { + display: inline; + } + + .nota-alteracao:not([exibir]), + .abre-aspas:not([exibir]), + .fecha-aspas:not([exibir]) { + display: none; + } + .nota-alteracao-editavel { text-decoration: underline; cursor: pointer; diff --git a/src/model/lexml/hierarquia/hierarquiaUtil.ts b/src/model/lexml/hierarquia/hierarquiaUtil.ts index 06959701..2ce44b0e 100644 --- a/src/model/lexml/hierarquia/hierarquiaUtil.ts +++ b/src/model/lexml/hierarquia/hierarquiaUtil.ts @@ -20,6 +20,16 @@ export function getArticulacao(dispositivo: Dispositivo): Articulacao { return getArticulacao(dispositivo.pai); } +export function getArticulacaoAlteracao(dispositivo: Dispositivo): Articulacao { + if (isArticulacaoAlteracao(dispositivo)) { + return dispositivo as Articulacao; + } + if (dispositivo.pai === undefined) { + throw new Error('Não foi encontrada a articulação alteração'); + } + return getArticulacaoAlteracao(dispositivo.pai); +} + export function getDispositivo(uuid: number, dispositivo: Dispositivo | Articulacao): Dispositivo | Articulacao | null { if (dispositivo.uuid === uuid) { return dispositivo; diff --git a/src/redux/elemento/evento/eventosUtil.ts b/src/redux/elemento/evento/eventosUtil.ts index 65414d53..4f9645fa 100644 --- a/src/redux/elemento/evento/eventosUtil.ts +++ b/src/redux/elemento/evento/eventosUtil.ts @@ -1,7 +1,7 @@ import { createElementoValidado } from './../../../model/elemento/elementoUtil'; import { findRevisaoByElementoUuid, isRevisaoDeExclusao } from './../util/revisaoUtil'; import { Artigo } from './../../../model/dispositivo/dispositivo'; -import { hasFilhos, getAgrupadorAntes } from './../../../model/lexml/hierarquia/hierarquiaUtil'; +import { hasFilhos, getAgrupadorAntes, getArticulacaoAlteracao } from './../../../model/lexml/hierarquia/hierarquiaUtil'; import { Articulacao, Dispositivo } from '../../../model/dispositivo/dispositivo'; import { DescricaoSituacao } from '../../../model/dispositivo/situacao'; import { isAgrupador, isArticulacao, isArtigo, isCaput } from '../../../model/dispositivo/tipo'; @@ -157,6 +157,8 @@ export const removeAgrupadorAndBuildEvents = (articulacao: Articulacao, atual: D const removido = createElemento(atual, false, true); const irmaoAnterior = getDispositivoAnteriorMesmoTipo(atual); + const notaAlteracao = isDispositivoAlteracao(atual) && isDispositivoCabecaAlteracao(atual) ? atual.notaAlteracao : undefined; + const agrupadorAntes = getAgrupadorAntes(atual); const pai = agrupadoresAnteriorMesmoTipo?.length > 0 ? agrupadoresAnteriorMesmoTipo.reverse()[0] : atual.pai!; @@ -170,7 +172,7 @@ export const removeAgrupadorAndBuildEvents = (articulacao: Articulacao, atual: D atual.filhos.forEach(d => { let novoPai: Dispositivo; if (isArtigo(d)) { - novoPai = agrupadorAntes ?? articulacao; + novoPai = agrupadorAntes ?? (isDispositivoAlteracao(d) ? getArticulacaoAlteracao(d) : articulacao); } else if (pai.tiposPermitidosFilhos?.includes(d.tipo)) { novoPai = pai; } else if (dispositivoAnterior.tiposPermitidosFilhos?.includes(d.tipo)) { @@ -180,6 +182,9 @@ export const removeAgrupadorAndBuildEvents = (articulacao: Articulacao, atual: D } d.pai = novoPai; + if (isDispositivoAlteracao(d) && isArtigo(d) && isArticulacaoAlteracao(d.pai!)) { + d.notaAlteracao = notaAlteracao; + } atual.removeFilho(d); if (agrupadoresAnteriorMesmoTipo?.length > 0) { diff --git a/src/util/eta-quill/eta-blot-abre-aspas.ts b/src/util/eta-quill/eta-blot-abre-aspas.ts index f0f41372..ff28f2b8 100644 --- a/src/util/eta-quill/eta-blot-abre-aspas.ts +++ b/src/util/eta-quill/eta-blot-abre-aspas.ts @@ -22,7 +22,7 @@ export class EtaBlotAbreAspas extends EtaBlot { node.setAttribute('contenteditable', 'false'); node.setAttribute('class', EtaBlotAbreAspas.className); - node.innerHTML = EtaBlotAbreAspas.montarHTML(elemento); + EtaBlotAbreAspas.__atualizarAtributos(elemento, node); return node; } @@ -33,7 +33,16 @@ export class EtaBlotAbreAspas extends EtaBlot { public atualizarAtributos(elemento: Elemento): void { this.elemento = elemento; - this.domNode.innerHTML = EtaBlotAbreAspas.montarHTML(elemento); + EtaBlotAbreAspas.__atualizarAtributos(elemento, this.domNode); + } + + private static __atualizarAtributos(elemento: Elemento, node: HTMLElement): void { + if (elemento.abreAspas) { + node.setAttribute('exibir', ''); + } else { + node.removeAttribute('exibir'); + } + node.innerHTML = EtaBlotAbreAspas.montarHTML(elemento); } private static montarHTML(elemento: Elemento): string { diff --git a/src/util/eta-quill/eta-blot-fecha-aspas.ts b/src/util/eta-quill/eta-blot-fecha-aspas.ts index 84ceb117..137ce9e1 100644 --- a/src/util/eta-quill/eta-blot-fecha-aspas.ts +++ b/src/util/eta-quill/eta-blot-fecha-aspas.ts @@ -22,7 +22,7 @@ export class EtaBlotFechaAspas extends EtaBlot { node.setAttribute('contenteditable', 'false'); node.setAttribute('class', EtaBlotFechaAspas.className); - node.innerHTML = EtaBlotFechaAspas.montarHTML(elemento); + EtaBlotFechaAspas.__atualizarAtributos(elemento, node); return node; } @@ -33,7 +33,16 @@ export class EtaBlotFechaAspas extends EtaBlot { public atualizarAtributos(elemento: Elemento): void { this.elemento = elemento; - this.domNode.innerHTML = EtaBlotFechaAspas.montarHTML(elemento); + EtaBlotFechaAspas.__atualizarAtributos(elemento, this.domNode); + } + + private static __atualizarAtributos(elemento: Elemento, node: HTMLElement): void { + if (elemento.fechaAspas) { + node.setAttribute('exibir', ''); + } else { + node.removeAttribute('exibir'); + } + node.innerHTML = EtaBlotFechaAspas.montarHTML(elemento); } private static montarHTML(elemento: Elemento): string { diff --git a/src/util/eta-quill/eta-blot-nota-alteracao.ts b/src/util/eta-quill/eta-blot-nota-alteracao.ts index 54ec46a2..5c3ca95d 100644 --- a/src/util/eta-quill/eta-blot-nota-alteracao.ts +++ b/src/util/eta-quill/eta-blot-nota-alteracao.ts @@ -38,8 +38,10 @@ export class EtaBlotNotaAlteracao extends EtaBlot { if (elemento.notaAlteracao) { node.setAttribute('nota-alteracao', elemento.notaAlteracao || ''); + node.setAttribute('exibir', ''); } else { node.removeAttribute('nota-alteracao'); + node.removeAttribute('exibir'); } if (elemento.podeEditarNotaAlteracao) { @@ -50,6 +52,9 @@ export class EtaBlotNotaAlteracao extends EtaBlot { } private static montarHTML(elemento: Elemento): string { + if (!elemento.dispositivoAlteracao) { + return ''; + } return elemento.notaAlteracao ? '(' + elemento.notaAlteracao + ')' : ' '; // if (!elemento.notaAlteracao) { // return ''; diff --git a/src/util/eta-quill/eta-container-table.ts b/src/util/eta-quill/eta-container-table.ts index badd7393..b8061d86 100644 --- a/src/util/eta-quill/eta-container-table.ts +++ b/src/util/eta-quill/eta-container-table.ts @@ -104,7 +104,8 @@ export class EtaContainerTable extends EtaContainer { } get blotAbreAspas(): EtaBlotAbreAspas { - return this.findBlot(EtaBlotAbreAspas.blotName) as EtaBlotAbreAspas; + const blot = this.blotRotulo?.prev; + return blot?.instanceBlotName === EtaBlotAbreAspas.blotName ? blot : undefined; } get blotFechaAspas(): EtaBlotFechaAspas { diff --git a/src/util/eta-quill/eta-quill-util.ts b/src/util/eta-quill/eta-quill-util.ts index 401408e6..312979b4 100644 --- a/src/util/eta-quill/eta-quill-util.ts +++ b/src/util/eta-quill/eta-quill-util.ts @@ -34,13 +34,15 @@ export class EtaQuillUtil { const etaTdTexto: EtaContainerTdEsquerdo = new EtaContainerTdEsquerdo(elemento); const etaTdEspaco: EtaContainerTdDireito = new EtaContainerTdDireito(this.alinhamentoMenu); - if (elemento.abreAspas) { + const isDispositivoAlteracaoAdicionado = elemento.dispositivoAlteracao && elemento.descricaoSituacao === DescricaoSituacao.DISPOSITIVO_ADICIONADO; + + if (elemento.abreAspas || isDispositivoAlteracaoAdicionado) { new EtaBlotAbreAspas(elemento).insertInto(etaTdTexto); } new EtaBlotRotulo(elemento).insertInto(etaTdTexto); - if (elemento.dispositivoAlteracao === true && elemento.descricaoSituacao === DescricaoSituacao.DISPOSITIVO_ADICIONADO) { + if (isDispositivoAlteracaoAdicionado) { new EtaBlotExistencia(elemento).insertInto(etaTdTexto); }