Les tests each passent
This commit is contained in:
parent
4db6b899fa
commit
815f5e5adc
@ -68,7 +68,7 @@ class TemplateDOMBranch{
|
|||||||
this.#leafNode = nextLeaf
|
this.#leafNode = nextLeaf
|
||||||
}
|
}
|
||||||
|
|
||||||
this.#ancestors = getAncestors(this.#branchBaseNode, this.#leafNode).reverse()
|
this.#ancestors = getAncestors(this.#leafNode, this.#branchBaseNode).reverse()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -76,7 +76,11 @@ class TemplateDOMBranch{
|
|||||||
* @param {number} [startIndex]
|
* @param {number} [startIndex]
|
||||||
*/
|
*/
|
||||||
removeRightContent(startIndex = 0){
|
removeRightContent(startIndex = 0){
|
||||||
|
console.log('[removeRightContent]', startIndex, this.#ancestors.slice(startIndex).length)
|
||||||
|
|
||||||
for(const branchNode of this.#ancestors.slice(startIndex)){
|
for(const branchNode of this.#ancestors.slice(startIndex)){
|
||||||
|
console.log('[removeRightContent]', branchNode.nodeType, branchNode.nodeName)
|
||||||
|
|
||||||
let toRemove = branchNode.nextSibling
|
let toRemove = branchNode.nextSibling
|
||||||
|
|
||||||
while(toRemove){
|
while(toRemove){
|
||||||
@ -146,6 +150,16 @@ class TemplateDOMBranch{
|
|||||||
return pathFromLeafToBase.toReversed()
|
return pathFromLeafToBase.toReversed()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logBranch(message){
|
||||||
|
console.group('[TemplateDOMBranch] Showing branch')
|
||||||
|
console.log(message)
|
||||||
|
for(const node of this.#ancestors){
|
||||||
|
console.log('branch node', node.nodeType, node.nodeName)
|
||||||
|
}
|
||||||
|
console.groupEnd()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -169,9 +183,13 @@ class TemplateBlock{
|
|||||||
// @ts-expect-error xmldom.Node
|
// @ts-expect-error xmldom.Node
|
||||||
this.#commonAncestor = findCommonAncestor(startNode, endNode)
|
this.#commonAncestor = findCommonAncestor(startNode, endNode)
|
||||||
|
|
||||||
|
console.log('create start branch')
|
||||||
this.startBranch = new TemplateDOMBranch(this.#commonAncestor, startNode)
|
this.startBranch = new TemplateDOMBranch(this.#commonAncestor, startNode)
|
||||||
|
console.log('create end branch')
|
||||||
this.endBranch = new TemplateDOMBranch(this.#commonAncestor, endNode)
|
this.endBranch = new TemplateDOMBranch(this.#commonAncestor, endNode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.#middleContent = []
|
this.#middleContent = []
|
||||||
|
|
||||||
let content = this.startBranch.at(1).nextSibling
|
let content = this.startBranch.at(1).nextSibling
|
||||||
@ -181,20 +199,17 @@ class TemplateBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
console.log('\n== TemplateBlock ==')
|
console.log('\n== TemplateBlock ==')
|
||||||
console.log('startBranch', this.startBranch.at(1).textContent)
|
console.log('startBranch', this.startBranch.at(1).nodeName, this.startBranch.at(1).textContent)
|
||||||
console.log('middleContent', this.#middleContent.map(n => n.textContent).join(''))
|
console.log('middleContent', this.#middleContent.map(n => n.textContent).join(''))
|
||||||
console.log('endBranch\n', this.endBranch.at(1).textContent)
|
console.log('endBranch', this.startBranch.at(1).nodeName, this.endBranch.at(1).textContent)
|
||||||
console.log('common ancestor', this.#commonAncestor.nodeName)
|
console.log('common ancestor', this.#commonAncestor.nodeName, '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
removeMarkersAndEmptyAncestors(){
|
removeMarkersAndEmptyAncestors(){
|
||||||
console.log('[removeMarkersAndEmptyAncestors]', this.#commonAncestor.textContent)
|
//console.log('[removeMarkersAndEmptyAncestors]', this.#commonAncestor.textContent)
|
||||||
//console.log('removeMarkersAndEmptyAncestors startBranch')
|
|
||||||
this.startBranch.removeLeafAndEmptyAncestors()
|
this.startBranch.removeLeafAndEmptyAncestors()
|
||||||
//console.log('removeMarkersAndEmptyAncestors endBranch')
|
|
||||||
this.endBranch.removeLeafAndEmptyAncestors()
|
this.endBranch.removeLeafAndEmptyAncestors()
|
||||||
|
//console.log('[removeMarkersAndEmptyAncestors] after', this.#commonAncestor.textContent)
|
||||||
console.log('[removeMarkersAndEmptyAncestors] after', this.#commonAncestor.textContent)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -217,7 +232,11 @@ class TemplateBlock{
|
|||||||
console.log('[fillBlockContentTemplate] after middleContent')
|
console.log('[fillBlockContentTemplate] after middleContent')
|
||||||
|
|
||||||
const endChild = this.endBranch.at(1)
|
const endChild = this.endBranch.at(1)
|
||||||
|
console.log('fillBlockContentTemplate] [endBranch]')
|
||||||
|
this.endBranch.logBranch('endBranch')
|
||||||
|
|
||||||
if(endChild){
|
if(endChild){
|
||||||
|
console.log('[fillBlockContentTemplate] endChild', endChild.nodeName, endChild.textContent)
|
||||||
fillOdtElementTemplate(endChild, compartement)
|
fillOdtElementTemplate(endChild, compartement)
|
||||||
}
|
}
|
||||||
console.log('[fillBlockContentTemplate] after endChild')
|
console.log('[fillBlockContentTemplate] after endChild')
|
||||||
@ -241,7 +260,7 @@ class TemplateBlock{
|
|||||||
* @returns {TemplateBlock}
|
* @returns {TemplateBlock}
|
||||||
*/
|
*/
|
||||||
cloneAndAppendAfter(){
|
cloneAndAppendAfter(){
|
||||||
console.log('[cloneAndAppendAfter]')
|
//console.log('[cloneAndAppendAfter]')
|
||||||
const clonedPieces = []
|
const clonedPieces = []
|
||||||
|
|
||||||
let startBranchClone;
|
let startBranchClone;
|
||||||
@ -453,6 +472,7 @@ function fillEachBlock(startNode, iterableExpression, itemExpression, endNode, c
|
|||||||
//console.log('fillEachBlock', iterableExpression, itemExpression)
|
//console.log('fillEachBlock', iterableExpression, itemExpression)
|
||||||
|
|
||||||
const docEl = startNode.ownerDocument.documentElement
|
const docEl = startNode.ownerDocument.documentElement
|
||||||
|
console.log('[fillEachBlock] docEl', docEl.textContent)
|
||||||
|
|
||||||
const repeatedTemplateBlock = new TemplateBlock(startNode, endNode)
|
const repeatedTemplateBlock = new TemplateBlock(startNode, endNode)
|
||||||
|
|
||||||
@ -476,6 +496,7 @@ function fillEachBlock(startNode, iterableExpression, itemExpression, endNode, c
|
|||||||
let nextTemplateBlock = repeatedTemplateBlock
|
let nextTemplateBlock = repeatedTemplateBlock
|
||||||
|
|
||||||
iterable.forEach((item, i) => {
|
iterable.forEach((item, i) => {
|
||||||
|
console.log('[fillEachBlock] loop i', i, docEl.textContent)
|
||||||
const firstItem = i === 0
|
const firstItem = i === 0
|
||||||
const lastItem = i === iterable.length - 1
|
const lastItem = i === iterable.length - 1
|
||||||
let currentTemplateBlock = nextTemplateBlock;
|
let currentTemplateBlock = nextTemplateBlock;
|
||||||
@ -491,19 +512,25 @@ function fillEachBlock(startNode, iterableExpression, itemExpression, endNode, c
|
|||||||
__options__: true
|
__options__: true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if(!firstItem){
|
||||||
|
currentTemplateBlock.startBranch.removeLeftContent(2)
|
||||||
|
}
|
||||||
|
if(!lastItem){
|
||||||
|
console.log('[fillEachBlock] removeRightContent')
|
||||||
|
currentTemplateBlock.endBranch.removeRightContent(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('[fillEachBlock] docEl i before removeMarkers', i, docEl.textContent)
|
||||||
currentTemplateBlock.removeMarkersAndEmptyAncestors()
|
currentTemplateBlock.removeMarkersAndEmptyAncestors()
|
||||||
console.log('recursive call to fillBlockContentTemplate')
|
console.log('[fillEachBlock] docEl i after removeMarkers', i, docEl.textContent)
|
||||||
|
|
||||||
|
|
||||||
|
console.log('\nrecursive call to fillBlockContentTemplate')
|
||||||
currentTemplateBlock.fillBlockContentTemplate(insideCompartment)
|
currentTemplateBlock.fillBlockContentTemplate(insideCompartment)
|
||||||
|
|
||||||
|
|
||||||
if(!firstItem){
|
|
||||||
currentTemplateBlock.startBranch.removeLeftContent()
|
|
||||||
}
|
console.log('[fillEachBlock] docEl i after remove contents', i, docEl.textContent)
|
||||||
if(!lastItem){
|
|
||||||
currentTemplateBlock.endBranch.removeRightContent()
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -521,9 +548,9 @@ const EACH = eachStartMarkerRegex.source
|
|||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
export default function fillOdtElementTemplate(rootElement, compartment) {
|
export default function fillOdtElementTemplate(rootElement, compartment) {
|
||||||
//console.log('fillTemplatedOdtElement', rootElement.nodeType, rootElement.nodeName, rootElement.textContent)
|
console.log('[fillTemplatedOdtElement]', rootElement.nodeType, rootElement.nodeName, rootElement.textContent)
|
||||||
//console.log('fillTemplatedOdtElement', rootElement.childNodes[0].childNodes.length)
|
console.log('[fillTemplatedOdtElement]', rootElement.documentElement && rootElement.documentElement.textContent)
|
||||||
|
|
||||||
let currentlyOpenBlocks = []
|
let currentlyOpenBlocks = []
|
||||||
|
|
||||||
/** @type {Node | undefined} */
|
/** @type {Node | undefined} */
|
||||||
|
|||||||
@ -111,7 +111,7 @@ test('template filling with {#each} generating a list', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
test.skip('template filling with 2 sequential {#each}', async t => {
|
test('template filling with 2 sequential {#each}', async t => {
|
||||||
const templatePath = join(import.meta.dirname, '../fixtures/liste-fruits-et-légumes.odt')
|
const templatePath = join(import.meta.dirname, '../fixtures/liste-fruits-et-légumes.odt')
|
||||||
const templateContent = `Liste de fruits et légumes
|
const templateContent = `Liste de fruits et légumes
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ Poivron 🫑
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
test.skip('template filling with nested {#each}s', async t => {
|
test('template filling with nested {#each}s', async t => {
|
||||||
const templatePath = join(import.meta.dirname, '../fixtures/légumes-de-saison.odt')
|
const templatePath = join(import.meta.dirname, '../fixtures/légumes-de-saison.odt')
|
||||||
const templateContent = `Légumes de saison
|
const templateContent = `Légumes de saison
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ Hiver
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
test.skip('template filling with text after {/each} in same text node', async t => {
|
test('template filling with text after {/each} in same text node', async t => {
|
||||||
const templatePath = join(import.meta.dirname, '../fixtures/text-after-closing-each.odt')
|
const templatePath = join(import.meta.dirname, '../fixtures/text-after-closing-each.odt')
|
||||||
const templateContent = `Légumes de saison
|
const templateContent = `Légumes de saison
|
||||||
|
|
||||||
@ -278,13 +278,14 @@ test.skip('template filling with text after {/each} in same text node', async t
|
|||||||
|
|
||||||
Asperge,
|
Asperge,
|
||||||
Betterave,
|
Betterave,
|
||||||
Blette, en Printemps
|
Blette,
|
||||||
|
en Printemps
|
||||||
`)
|
`)
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
test.skip('template filling of a table', async t => {
|
test('template filling of a table', async t => {
|
||||||
const templatePath = join(import.meta.dirname, '../fixtures/tableau-simple.odt')
|
const templatePath = join(import.meta.dirname, '../fixtures/tableau-simple.odt')
|
||||||
const templateContent = `Évolution énergie en kWh par personne en France
|
const templateContent = `Évolution énergie en kWh par personne en France
|
||||||
|
|
||||||
@ -328,22 +329,16 @@ Année
|
|||||||
|
|
||||||
Année
|
Année
|
||||||
Énergie par personne
|
Énergie par personne
|
||||||
|
|
||||||
1970
|
1970
|
||||||
36252.637
|
36252.637
|
||||||
|
|
||||||
1980
|
1980
|
||||||
43328.78
|
43328.78
|
||||||
|
|
||||||
1990
|
1990
|
||||||
46971.94
|
46971.94
|
||||||
|
|
||||||
2000
|
2000
|
||||||
53147.277
|
53147.277
|
||||||
|
|
||||||
2010
|
2010
|
||||||
48062.32
|
48062.32
|
||||||
|
|
||||||
2020
|
2020
|
||||||
37859.246
|
37859.246
|
||||||
`.trim())
|
`.trim())
|
||||||
|
|||||||
@ -12,17 +12,14 @@ const data = {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*const templatePath = join(import.meta.dirname, '../tests/fixtures/enum-courses.odt')
|
||||||
|
|
||||||
|
|
||||||
const templatePath = join(import.meta.dirname, '../tests/fixtures/enum-courses.odt')
|
|
||||||
const data = {
|
const data = {
|
||||||
listeCourses : [
|
listeCourses : [
|
||||||
'Radis',
|
'Radis',
|
||||||
`Jus d'orange`,
|
`Jus d'orange`,
|
||||||
'Pâtes à lasagne (fraîches !)'
|
'Pâtes à lasagne (fraîches !)'
|
||||||
]
|
]
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
const templatePath = join(import.meta.dirname, '../tests/fixtures/liste-fruits-et-légumes.odt')
|
const templatePath = join(import.meta.dirname, '../tests/fixtures/liste-fruits-et-légumes.odt')
|
||||||
@ -106,6 +103,16 @@ const templatePath = join(import.meta.dirname, '../tests/fixtures/partially-form
|
|||||||
const data = {nombre : 37}
|
const data = {nombre : 37}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const templatePath = join(import.meta.dirname, '../tests/fixtures/text-after-closing-each.odt')
|
||||||
|
const data = {
|
||||||
|
saison: 'Printemps',
|
||||||
|
légumes: [
|
||||||
|
'Asperge',
|
||||||
|
'Betterave',
|
||||||
|
'Blette'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const odtTemplate = await getOdtTemplate(templatePath)
|
const odtTemplate = await getOdtTemplate(templatePath)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user