From 5aac86553cf547bf33dee2aa943016a647ef04a1 Mon Sep 17 00:00:00 2001 From: David Bruant Date: Tue, 27 May 2025 14:55:53 +0200 Subject: [PATCH] Ouinon bug (#10) * rename * change order of removals in fillIfBlock to properly remove right/left content --- .../odf/templating/fillOdtElementTemplate.js | 27 +++++++++++------- tests/fill-odt-template/formatting.js | 25 ++++++++++++++-- tests/fixtures/{reducing.odt => ghost-if.odt} | Bin 3 files changed, 40 insertions(+), 12 deletions(-) rename tests/fixtures/{reducing.odt => ghost-if.odt} (100%) diff --git a/scripts/odf/templating/fillOdtElementTemplate.js b/scripts/odf/templating/fillOdtElementTemplate.js index f7df3cf..7502f13 100644 --- a/scripts/odf/templating/fillOdtElementTemplate.js +++ b/scripts/odf/templating/fillOdtElementTemplate.js @@ -207,9 +207,9 @@ class TemplateBlock{ } //console.group('\n== TemplateBlock ==') - //console.log('startBranch', this.startBranch.at(1).nodeName, this.startBranch.at(1).textContent) + //this.startBranch.logBranch('startBranch') //console.log('middleContent', this.#middleContent.map(n => n.textContent).join('')) - //console.log('endBranch', this.startBranch.at(1).nodeName, this.endBranch.at(1).textContent) + //this.endBranch.logBranch('endBranch') //console.log('common ancestor', this.#commonAncestor.nodeName, '\n') //console.groupEnd() } @@ -425,6 +425,8 @@ function findPlacesToFillInString(str, compartment) { * @param {Compartment} compartment */ function fillIfBlock(ifOpeningMarkerNode, ifElseMarkerNode, ifClosingMarkerNode, ifBlockConditionExpression, compartment) { + //const docEl = ifOpeningMarkerNode.ownerDocument.documentElement + const conditionValue = compartment.evaluate(ifBlockConditionExpression) /** @type {TemplateBlock | undefined} */ @@ -445,21 +447,26 @@ function fillIfBlock(ifOpeningMarkerNode, ifElseMarkerNode, ifClosingMarkerNode, thenTemplateBlock = new TemplateBlock(ifOpeningMarkerNode, ifClosingMarkerNode) } - thenTemplateBlock.removeMarkersAndEmptyAncestors() - if(elseTemplateBlock){ - elseTemplateBlock.removeMarkersAndEmptyAncestors() - } - - if(conditionValue) { - thenTemplateBlock.fillBlockContentTemplate(compartment) - if(elseTemplateBlock){ elseTemplateBlock.removeContent() } + + thenTemplateBlock.removeMarkersAndEmptyAncestors() + if(elseTemplateBlock){ + elseTemplateBlock.removeMarkersAndEmptyAncestors() + } + + thenTemplateBlock.fillBlockContentTemplate(compartment) } else{ + // remove content before removing markers so that right and left content are fully removed thenTemplateBlock.removeContent() + + thenTemplateBlock.removeMarkersAndEmptyAncestors() + if(elseTemplateBlock){ + elseTemplateBlock.removeMarkersAndEmptyAncestors() + } if(elseTemplateBlock){ elseTemplateBlock.fillBlockContentTemplate(compartment) diff --git a/tests/fill-odt-template/formatting.js b/tests/fill-odt-template/formatting.js index 8f29efc..fc82b2c 100644 --- a/tests/fill-odt-template/formatting.js +++ b/tests/fill-odt-template/formatting.js @@ -167,8 +167,8 @@ test('template filling - formatted-start-each-single-paragraph', async t => { }); -test('template filling - formatted ghost if', async t => { - const templatePath = join(import.meta.dirname, '../fixtures/reducing.odt') +test('template filling - formatted ghost if then', async t => { + const templatePath = join(import.meta.dirname, '../fixtures/ghost-if.odt') const templateContent = ` Utilisation de sources lumineuses : {#if scientifique.source_lumineuses}Oui{:else}Non{/if} ` @@ -188,3 +188,24 @@ test('template filling - formatted ghost if', async t => { }); + +test('template filling - formatted ghost if else', async t => { + const templatePath = join(import.meta.dirname, '../fixtures/ghost-if.odt') + const templateContent = ` + Utilisation de sources lumineuses : {#if scientifique.source_lumineuses}Oui{:else}Non{/if} +` + + const data = {scientifique: {source_lumineuses: false}} + + const odtTemplate = await getOdtTemplate(templatePath) + + const templateTextContent = await getOdtTextContent(odtTemplate) + t.deepEqual(templateTextContent.trim(), templateContent.trim(), 'reconnaissance du template') + let odtResult = await fillOdtTemplate(odtTemplate, data) + + const odtResultTextContent = await getOdtTextContent(odtResult) + t.deepEqual(odtResultTextContent.trim(), ` + Utilisation de sources lumineuses : Non +`.trim()) + +}); \ No newline at end of file diff --git a/tests/fixtures/reducing.odt b/tests/fixtures/ghost-if.odt similarity index 100% rename from tests/fixtures/reducing.odt rename to tests/fixtures/ghost-if.odt