# HG changeset patch # User Franck Deroche # Date 1193849774 -3600 # Node ID fb0e206f1acfebe21f5e425dd87a5e1c84729646 # Parent 267ffe3e76f5555000a13b1d29a4414099ce86ec Possibilité de supprimer les attributs dans l'espace de nom de transformation Si des attributs sont présents dans un espace de nom autre que celui par défaut dans un document XHTML, ce dernier n'est plus valide au sens strict d'après la documentation du W3C[1], et en conséquence le validator se plaint. Par conséquent, il est désormais possible de définir un paramètre du template amenant la suppression de tous ses attributs. Par défaut, on ne les supprime pas, car il pourrait y avoir des utilisations valides d'une part (CSS étant au courant de l'existence des espaces de noms entre autres), et que cela entraine une pénalité au niveau du temps d'execution d'autre part, puisqu'il faut retrouver ses attributs avant de les supprimer (la pénalité ne devrait pas être trop grande grâce à XPath, mais non nul quand même) Ajout d'un test unitaire qui va bien pour tester cette fonctionnalité. [1] : http://www.w3.org/TR/xhtml1/#well-formed diff -r 267ffe3e76f5 -r fb0e206f1acf class.template.php --- a/class.template.php Tue Oct 30 15:06:30 2007 +0100 +++ b/class.template.php Wed Oct 31 17:56:14 2007 +0100 @@ -2,6 +2,7 @@ class Template { private $xmlDocument; private $xmlXPath; + private $stripAttributesInTemplateNS = false; const NS = 'http://defr.net/2007/template'; @@ -136,6 +137,21 @@ $parent->removeChild($node); } } + + // Suppression éventuelle des attributs de l'espace de nom Template::NS + if($this->stripAttributesInTemplateNS) { + $nodes = $this->xmlXPath->query("//*[@_t:*]"); + foreach($nodes as $node) { + foreach($node->attributes as $attr) { + if($attr->namespaceURI == Template::NS) + $node->removeAttributeNode($attr); + } + } + } + } + + function shouldStripAttributesInTemplateNS($boolean) { + $this->stripAttributesInTemplateNS = $boolean; } function __toString() { diff -r 267ffe3e76f5 -r fb0e206f1acf simple.stripAttr.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simple.stripAttr.php Wed Oct 31 17:56:14 2007 +0100 @@ -0,0 +1,20 @@ + 'Ceci est un test', + '#hello' => 'Bonjour tout l\'monde!', + '#hello@class' => 'test3', + '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'), + array('li' => 'amet.') + )); + $tpl->setParams($params); + $tpl->shouldStripAttributesInTemplateNS(true); + echo $tpl; +?> diff -r 267ffe3e76f5 -r fb0e206f1acf tests/references/simple.stripAttr.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/references/simple.stripAttr.out Wed Oct 31 17:56:14 2007 +0100 @@ -0,0 +1,21 @@ + + + + + Ceci est un test + + +

Bonjour tout l'monde!

+

Ceci devrait remplacer l'element test dans l'espace de nom t.

+

Ma couleur préférée est le vert. Et vous ?

+

Test sur les attributs.

+ + + + diff -r 267ffe3e76f5 -r fb0e206f1acf tests/test.sh --- a/tests/test.sh Tue Oct 30 15:06:30 2007 +0100 +++ b/tests/test.sh Wed Oct 31 17:56:14 2007 +0100 @@ -1,5 +1,5 @@ #!/bin/sh -TESTS="blog menu simple" +TESTS="blog menu simple simple.stripAttr" TEMPFILE=tmp DIFFFILE=tmpdiff for T in $TESTS; do