@@ -15,40 +15,35 @@ export function checkConditionalBlock(
1515 condition = condition . replace (
1616 / @ S E L E C T O R \[ " ( [ ^ " ] + ) " \] / g,
1717 function ( match , cssSelector ) {
18- const element = getLastElement ( cssSelector , document ) ;
19- if ( element )
20- return (
21- '"' +
22- element . textContent
23- . trim ( )
24- . replaceAll ( '"' , '\\"' )
25- . replace ( / \n / g, " " ) +
26- '"'
27- ) ;
28- // Sinon, on utilise un élément HTML temporaire pour afficher le message pas encore affiché, et on applique le sélecteur à cet élément,
18+ // On crée un élément temporaire qui contient le contenu en cours de construction
2919 const tempElement = document . createElement ( "div" ) ;
3020 tempElement . innerHTML = cumulativeOutput ;
31- const selectorAppliedToTempElement = getLastElement (
32- cssSelector ,
33- tempElement ,
34- ) ;
35- let foundText = "" ;
36- if ( selectorAppliedToTempElement ) {
37- foundText = selectorAppliedToTempElement . textContent . trim ( ) ;
38- if ( foundText !== "" ) {
39- // Si le texte trouvé est un bloc spécial (readcsv ou !useLLM), on indique qu'il faut une évaluation différée de la condition avec le sélecteur
40- const isSpecialBlock =
41- foundText . includes ( "readcsv" ) || foundText . includes ( "!useLLM" ) ;
42- if ( isSpecialBlock ) {
43- return `!DIFFER_EVALUATION:SELECTOR["${ cssSelector } "]` ;
44- }
21+ // On le rend complètement invisible et hors du flux
22+ tempElement . style . cssText =
23+ "position: absolute; visibility: hidden; pointer-events: none;" ;
24+ // On ajoute temporairement cet élément au document
25+ document . body . appendChild ( tempElement ) ;
26+ // Maintenant on cherche le dernier élément qui correspond au sélecteur CSS dans tout le document en incluant l'élément temporaire
27+ const selectorAppliedToDocument = getLastElement ( cssSelector , document ) ;
28+ let value = selectorAppliedToDocument
29+ ? selectorAppliedToDocument . textContent . trim ( )
30+ : "" ;
31+ // On retire l'élément temporaire du document
32+ document . body . removeChild ( tempElement ) ;
33+ // Si on a trouvé une valeur, on l'utilise directement
34+ if ( value !== "" ) {
35+ // Si on a trouvé une valeur, on teste si c'est un bloc spécial
36+ const isSpecialBlock =
37+ value . includes ( "readcsv" ) || value . includes ( "!useLLM" ) ;
38+ if ( isSpecialBlock ) {
39+ // Si c'est un bloc spécial, on indique qu'il faut une évaluation différée de la condition avec le sélecteur
40+ return `!DIFFER_EVALUATION:SELECTOR["${ cssSelector } "]` ;
4541 }
42+ return '"' + value . replaceAll ( '"' , '\\"' ) . replace ( / \n / g, " " ) + '"' ;
43+ } else {
44+ // Si on n'a pas trouvé de valeur, on indique qu'il faut une évaluation différée de la condition avec le sélecteur
45+ return `!DIFFER_EVALUATION:SELECTOR["${ cssSelector } "]` ;
4646 }
47- // Si l'élément temporaire contenait bien du texte et n'était pas un bloc spécial, on retourne ce texte
48- // Sinon, on indique qu'il faut une évaluation différée de la condition avec le sélecteur
49- return foundText
50- ? '"' + foundText . replaceAll ( '"' , '\\"' ) . replace ( / \n / g, " " ) + '"'
51- : `!DIFFER_EVALUATION:SELECTOR["${ cssSelector } "]` ;
5247 } ,
5348 ) ;
5449 // Gestion du cas où la condition nécessite une évaluation différée
0 commit comments