Skip to content
Extraits de code Groupes Projets
Valider 2f346f08 rédigé par esj's avatar esj
Parcourir les fichiers

Petite amélioration dans l'intégration de documents SVG:

- repérer l'attribut viewBox, plus fiable que width et height pour connaitre la taille du document, et en son absence ne pas prendre en compte width height s'ils sont exprimés en pourcentage;
- produire une balise embed seule, pas besoin des balises param et object.
parent dbf82ac0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -172,49 +172,8 @@ function embed_document($id_document, $les_parametres="", $afficher_titre=true)
}
else $type = 'fichier';
// Pour RealVideo
$real = ((!ereg("^controls", $les_parametres)) AND (ereg("^(rm|ra|ram)$", $extension)));
// Pour Flash
$flash = ((!ereg("^controls", $les_parametres)) AND (ereg("^(swf)$", $extension)));
if ($inclus == "embed" AND !$real) {
for ($i = 0; $i < count($params); $i++) {
if (ereg("([^\=]*)\=([^\=]*)", $params[$i], $vals)){
$nom = $vals[1];
$valeur = $vals[2];
$inserer_vignette .= "<param name='$nom' value='$valeur' />";
$param_emb .= " $nom='$valeur'";
if ($nom == "controls" AND $valeur == "PlayButton") {
$largeur = 40;
$hauteur = 25;
}
else if ($nom == "controls" AND $valeur == "PositionSlider") {
$largeur = $largeur - 40;
$hauteur = 25;
}
}
}
$vignette = "<object ";
if ($flash)
$vignette .=
"type='application/x-shockwave-flash' data='$fichier' ";
$vignette .= "width='$largeur' height='$hauteur'>\n";
$vignette .= "<param name='movie' value='$fichier' />\n";
$vignette .= "<param name='src' value='$fichier' />\n";
$vignette .= $inserer_vignette;
if (!$flash)
$vignette .= "<embed src='$fichier' $param_emb width='$largeur' height='$hauteur'></embed>\n";
$vignette .= "</object>\n";
}
else if ($inclus == "embed" AND $real) {
$vignette .= "<div>".embed_document ($id_document, "controls=ImageWindow|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false)."</div>";
$vignette .= embed_document ($id_document, "controls=PlayButton|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false);
$vignette .= embed_document ($id_document, "controls=PositionSlider|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false);
}
if ($inclus == "embed")
$vignette = parametrer_embed_document($fichier, $id_document, $hauteur, $largeur, $extension, $les_parametres, $params);
else if ($inclus == "image") {
$fichier_vignette = $fichier;
$largeur_vignette = $largeur;
......@@ -257,6 +216,59 @@ function embed_document($id_document, $les_parametres="", $afficher_titre=true)
return $retour;
}
function parametrer_embed_document($fichier, $id_document, $hauteur, $largeur, $extension, $les_parametres, $params)
{
if ((!ereg("^controls", $les_parametres)) AND (ereg("^(rm|ra|ram)$", $extension)))
// Pour RealVideo (??? -- c'est toujours irreel la video. [esj])
{
$param = "|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres";
return "<div>" .
embed_document($id_document, "controls=ImageWindow$param", false) .
"</div>" .
embed_document($id_document, "controls=PlayButton$param", false) .
embed_document($id_document, "controls=PositionSlider$param", false);
} else {
$inserer_vignette = '';
for ($i = 0; $i < count($params); $i++) {
if (ereg("([^\=]*)\=([^\=]*)", $params[$i], $vals)){
$nom = $vals[1];
$valeur = $vals[2];
$inserer_vignette .= "<param name='$nom' value='$valeur' />";
$param_emb .= " $nom='$valeur'";
if ($nom == "controls" AND $valeur == "PlayButton") {
$largeur = 40;
$hauteur = 25;
} else if ($nom == "controls" AND $valeur == "PositionSlider") {
$largeur = $largeur - 40;
$hauteur = 25;
}
}
}
$params = "<param name='movie' value='$fichier' />\n"
. "<param name='src' value='$fichier' />\n"
. $inserer_vignette;
// Pour Flash
if ((!ereg("^controls", $les_parametres)) AND ($extension=='swf'))
return "<object "
. "type='application/x-shockwave-flash' data='$fichier' "
. "width='$largeur' height='$hauteur'>\n"
. $params
. "</object>\n";
else {
$emb = "<embed src='$fichier' $param_emb width='$largeur' height='$hauteur'></embed>\n";
if ($extension == 'svg') return $emb;
return "<object width='$largeur' height='$hauteur'>\n"
. $params
. $emb
. "</object>\n";
}
}
}
//
// Integration des images et documents
......
......@@ -413,23 +413,33 @@ function traite_svg($file)
{
include_spip('inc/texte');
$texte = spip_file_get_contents($file);
$new = safehtml($texte);
// securite: virer les scripts et les references externes
// trop expeditif, a ameliorer
$new = safehtml($texte);
if ($new != $texte) ecrire_fichier($file, $new);
$width = $height = 150;
$width = $height = 150;
if (preg_match(',<svg[^>]+>,', $new, $s)) {
$s = $s[0];
if (preg_match(',\WviewBox\s*=\s*.\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+),i', $s, $r)){
$width = $r[3];
$height = $r[4];
} else {
// si la taille est en centimetre, estimer le pixel a 1/64 de cm
if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),', $s, $r)){
$width = $r[1];
if ($r[2] == 'cm') $width <<=6;
if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
if ($r[2] != '%') {
$width = $r[1];
if ($r[2] == 'cm') $width <<=6;
}
}
if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),', $s, $r)){
$height = $r[1];
if ($r[2] == 'cm') $height <<=6;
if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
if ($r[2] != '%') {
$height = $r[1];
if ($r[2] == 'cm') $height <<=6;
}
}
}
}
return array($width, $height);
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter