changeset 15:51645aad97a8

Simplification du code, impliquant un changement important de comportement. Avant, les balises dans l'espace de nom template n'apparaissant pas dans les paramètres d'applications étaient supprimés. Maintenant, leur contenu passe dans le template de base.
author Franck Deroche <webmaster@defr.org>
date Mon, 22 Oct 2007 16:04:12 +0200
parents 54b0a41e5564
children 7a3ce31086b3
files class.template.php simple.php simple.xml
diffstat 3 files changed, 14 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/class.template.php	Mon Oct 22 10:07:42 2007 +0200
+++ b/class.template.php	Mon Oct 22 16:04:12 2007 +0200
@@ -10,6 +10,7 @@
         $this->xmlDocument->validateOnParse = $shouldValidate;
         $this->xmlDocument->preserveWhiteSpace = false;
         $this->xmlDocument->loadXML(file_get_contents($fileName));
+        $this->xmlDocument->preserveWhiteSpace = false;
         $this->xmlXPath = new DOMXPath($this->xmlDocument);
         $this->xmlXPath->registerNamespace('_t', Template::NS);
     }
@@ -23,14 +24,10 @@
         else {
             foreach($rootSelector->nodes as $node) {
                 $content = $this->parseReplacement($obj); 
-                if(isset($rootSelector->attribute)) {
+                if(isset($rootSelector->attribute))
                     $node->setAttribute($rootSelector->attribute, $obj);
-                } else {
-                    if($node->namespaceURI == Template::NS)
-                        $this->replaceNode($node, $content);
-                    else
-                        $this->setNodeContent($node, $content);
-                }
+                else
+                    $this->setNodeContent($node, $content);
             }
         }
     }
@@ -49,10 +46,7 @@
                     else {
                         $content = $this->parseReplacement($test);
                         $node->insertBefore($content, $tmp->orig);
-                        if($futureNode->namespaceURI == Template::NS)
-                            $this->replaceNode($futureNode, $content);
-                        else
-                            $this->setNodeContent($futureNode, $content);
+                        $this->setNodeContent($futureNode, $content);
                     }
                 }
 	        }
@@ -131,7 +125,12 @@
         $nodes = $this->xmlXPath->query("//*[@_t:toClone]|//_t:*");
         foreach($nodes as $node) {
             if($node->parentNode) {
-                $node->parentNode->removeChild($node);
+                $parent = $node->parentNode;
+                if(!$node->hasAttributeNS(Template::NS, 'toClone')) {
+                    while($node->hasChildNodes())
+                        $parent->insertBefore($node->firstChild, $node);
+                }
+                $parent->removeChild($node);
             }
         }
     }
@@ -139,6 +138,7 @@
     function __toString() {
         $this->clean();
         $this->xmlDocument->formatOutput = true;
+        $this->xmlDocument->normalizeDocument();
         return $this->xmlDocument->saveXML();
     }
 }
--- a/simple.php	Mon Oct 22 10:07:42 2007 +0200
+++ b/simple.php	Mon Oct 22 16:04:12 2007 +0200
@@ -8,6 +8,7 @@
     'test' => 'Ceci devrait remplacer l\'element test dans l\'espace de nom t.',
     'color' => 'vert',
     '#attr@class' => 'test',
+    'ab' => '',
     '#choses' => array(
         array('li' => 'Lorem ipsum', 'li@class' => 'test'),
         array('li' => 'sit dolor'),
--- a/simple.xml	Mon Oct 22 10:07:42 2007 +0200
+++ b/simple.xml	Mon Oct 22 16:04:12 2007 +0200
@@ -16,6 +16,6 @@
         <li t:toClone='true' class='ab' />
         <li>Dernière chose</li>
     </ul>
-    <t:ab>Ceci devrait disparaitre.</t:ab>
+    <span><t:ab>Ceci devrait disparaitre.</t:ab></span>
   </body>
 </html>