test if qui passe

This commit is contained in:
David Bruant 2025-04-29 13:44:01 +02:00
parent 8ff3f581c5
commit 9e35737995
3 changed files with 58 additions and 16 deletions

View File

@ -173,28 +173,70 @@ function extractBlockContent(blockStartNode, blockEndNode){
* @param {Compartment} compartment
*/
function fillIfBlock(ifOpeningMarkerNode, ifElseMarkerNode, ifClosingMarkerNode, ifBlockConditionExpression, compartment){
console.log('fillIfBlock pas encore codée')
const conditionValue = compartment.evaluate(ifBlockConditionExpression)
if(conditionValue){
// récupérer le morceau entre ifOpeningMarkerNode et ifElseMarkerNode
// l'executer
let startChild
let endChild
let markerNodes = new Set()
let chosenFragment
if(ifElseMarkerNode){
const {
startChild: startIfThenChild,
endChild: endIfThenChild,
content: thenFragment
} = extractBlockContent(ifOpeningMarkerNode, ifElseMarkerNode)
const {
startChild: startIfElseChild,
endChild: endIfElseChild,
content: elseFragment
} = extractBlockContent(ifElseMarkerNode, ifClosingMarkerNode)
chosenFragment = conditionValue ? thenFragment : elseFragment
startChild = startIfThenChild
endChild = endIfElseChild
markerNodes
.add(startIfThenChild).add(endIfThenChild)
.add(startIfElseChild).add(endIfElseChild)
}
else{
const {
startChild: startIfThenChild,
endChild: endIfThenChild,
content: thenFragment
} = extractBlockContent(ifOpeningMarkerNode, ifClosingMarkerNode)
chosenFragment = conditionValue ? thenFragment : undefined
startChild = startIfThenChild
endChild = endIfThenChild
markerNodes
.add(startIfThenChild).add(endIfThenChild)
}
// dans tous les cas, recupérer ce qu'il y a entre ifOpeningMarkerNode et ifClosingMarkerNode
// et le supprimer de l'arbre
if(chosenFragment){
fillTemplatedOdtElement(
chosenFragment,
compartment
)
endChild.parentNode.insertBefore(chosenFragment, endChild)
}
for(const markerNode of markerNodes){
try{
// may throw if node already out of tree
// might happen if
markerNode.parentNode.removeChild(markerNode)
}
catch(e){}
}
/*throw `PPP
- executer l'expression
- selon la valeur, choisir le bon block à extraire/remplir
-
`*/
}
@ -242,7 +284,7 @@ function fillEachBlock(startNode, iterableExpression, itemExpression, endNode, c
endChild.parentNode.insertBefore(itemFragment, endChild)
}
// remove block elements
// remove block marker elements
startChild.parentNode.removeChild(startChild)
endChild.parentNode.removeChild(endChild)
}

View File

@ -10,10 +10,10 @@ test('basic template filling with {#if}', async t => {
const templatePath = join(import.meta.dirname, '../fixtures/description-nombre.odt')
const templateContent = `Description du nombre {n}
{#if n >5}
n est un grand nombre
{:else}
{#if n<5}
n est un petit nombre
{:else}
n est un grand nombre
{/if}
`

Binary file not shown.