Accent dans : XML/Actionscript 2/3

Accent dans : XML/Actionscript 2/3 - Flash/ActionScript - Programmation

Marsh Posté le 27-11-2008 à 23:04:13    

Bonjour,
 
J'ai un problème pour afficher les accents via mon fichier xml.
Je précise que :
 
- mon fichier xml est enregistré sous en utf-8
- qu'il contient la ligne <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- que j'ai essayé de mettre "System.useCodepage=true" dans mon code AS et que ça ne marche même pas (je dis même car je sais qu'il ne faut pas utiliser ce code)
- Je ne peux pas rajouter de Character Embedding comme je le fais d'habitude car il n'y a pas de zone de texte. En effet, le texte de description est associé à une image.
 
Voici un exemple de mon fichiers work.xml :
 
<gallery>
  <thumb>work_images/thumb/01.jpg</thumb>
  <image>work_images/01.jpg</image>
  <txt><![CDATA[ voila mon texte ou éàèéàèé ne marche pas]]></txt>
</gallery>
 
Le bout de code AS qui fait appelle au fichier xml :
 
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.firstChild.childNodes[0].firstChild.nodeValue
xmlData.load("work.xml" );
 
D'autre bout de code conçernant le chargement du texte de description :
 
//attach the description text for the main text
this.attachMovie("descriptionText","descriptionText",this.getNextHighestDepth());
 
 
//if there is a picture description
 if (descriptionText.description_txt.text != "" ) {
  //load and position text and text background
  descriptionText.description_txt.autoSize = "left";
  descriptionText.description_txt._width = loader._width-10;
  descriptionText.bg._width = loader._width;
  descriptionText.bg._height = descriptionText.description_txt._height+10;
 }
 //position picture description text holder  
 descriptionText._x = loader._x;
 descriptionText._y = loader._y+loader._height-descriptionText.bg._height;
 
//load main description text
descriptionText.description_txt.htmlText = txt[mc];
 
 
Voila, ça fait un grand moment que je cherche et je n'arrive pas à trouver la solution. Donc merci d'avance.
 
 
 
 

Reply

Marsh Posté le 27-11-2008 à 23:04:13   

Reply

Marsh Posté le 28-11-2008 à 04:33:22    

Ben chez moi ca marche. Mais ton code est un peu bizare. Faudrait que tu posts l'ensemble pour voir.

 

Ton XML tu l'edites avec quoi ?

 

Voila le code que j'ai utilisé:
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("doc.xml" );

 

var ref = this.attachMovie("descriptionText","descriptionText",this.getNextHighestDepth());

 

function loadXML() {
 ref.tf_txt.htmlText = this.firstChild.childNodes[2].firstChild.nodeValue;
}


Message édité par Zedlefou le 28-11-2008 à 04:33:51

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 28-11-2008 à 08:10:20    

Comme toi, j'utilise les CDATA, j'ai deja eu 2-3 pb que j'ai jamais compris (je ne suis pas calé), comme si flash n'avais pas le temps d'importer les données...
j'ai résolu mon problème en séparant l'import du traitement XML en 2 frames :

Code :
  1. stop();
  2. xmlDoc= new XML();
  3. xmlDoc.ignoreWhite=true;
  4. xmlDoc.onLoad = traiteXml;
  5. xmlDoc.load ("monXml.xml" );
  6. function traiteXml(success) {
  7.   if(success) {gotoAndStop(2)}
  8.   else {gotoAndStop(1)}
  9. }


Bon, c'est très laid mais ça marche... sur AS3 l'import du XML ce fait sans pb parcontre


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 28-11-2008 à 08:12:25    

J'ai deja eu des problemes en passant par PHP, mais pas XML ... enfin je crois pas.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 28-11-2008 à 08:14:29    

Ah, j'oubliais, dans Flash je dois impérativement intégrer les caractères sur mon textField !


Message édité par abais le 28-11-2008 à 08:15:21

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 28-11-2008 à 10:30:47    

Merci de vos réponses, j'ai essayé ta méthode Abais, mais comme je l'ai précisé, je ne peux pas intégrer de caractères dans mon textField tout simplement car il n'y a pas de textField. Je n'ai plus de problème avec les accents quand il s'agit d'un loader avec une zone de texte dynamique et un loader xml externe. La le problème semble tout autre.
 
Comme programme pour éditer mon xml, j'ai essayé avec Dreamweaver, Microsoft Web Developer et le Notepad, c'est toujours pareil tant que j'enregistre bien en utf-8, mon xml marche avec les accents sur mes autres documents contenant ce fameux textfield.
 
Je vous mets tout mon code Actionscript qui est assez complexe. Merci d'avance.

Code :
  1. //import ease tweens
  2. import mx.transitions.Tween;
  3. import mx.transitions.easing.*;
  4. //set original thumb to alpha 0
  5. thumbHolder.inThumbHolder._visible = false;
  6. //set menu controls to invisible in the beginning
  7. menuBack_mc._visible = false;
  8. menuNext_mc._visible = false;
  9. //attach the description text for the main text
  10. this.attachMovie("descriptionText","descriptionText",this.getNextHighestDepth());
  11. //hide description text in the beginning
  12. descriptionText._alpha = 0;
  13. descriptionText._visible = false;
  14. //attach the over movie clip - for picture rollover
  15. this.attachMovie("over","over",this.getNextHighestDepth());
  16. //disable and hide over mc
  17. over.enabled = false;
  18. over._visible = false;
  19. //variables
  20. lastThumb = 0;
  21. pic = 0;
  22. startX = 0;
  23. startY = 0;
  24. currentTotal = 0;
  25. //hide objects for the start
  26. loader._alpha = 0;
  27. bg._alpha = 0;
  28. xClose._alpha = 0;
  29. //------------------------------------Load XML Data
  30. function loadXML(success) {
  31. if (success) {
  32.  xmlNode = this.firstChild;
  33.  thumb = [];
  34.  image = [];
  35.  txt = [];
  36.  total = xmlNode.childNodes.length;
  37.  //for loop for each picture
  38.  for (i=0; i<total; i++) {
  39.   thumb[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
  40.   image[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
  41.   txt[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
  42.  }
  43.  //Colors from XML file
  44.  backColor = this.firstChild.attributes.backColor;
  45.  //set main picture background color
  46.  bgColor = new Color(bg.inBg);
  47.  bgColor.setRGB(backColor);
  48.  xCloseColor = this.firstChild.attributes.xCloseColor;
  49.  //set main picture close button color (the big X)
  50.  xColor = new Color(xClose);
  51.  xColor.setRGB(xCloseColor);
  52.  controlsOutColor = this.firstChild.attributes.controlsOutColor;
  53.  controlsOverColor = this.firstChild.attributes.controlsOverColor;
  54.  //set menu control colors
  55.  menuBackOut = new Color(menuBack_mc);
  56.  menuBackOut.setRGB(controlsOutColor);
  57.  menuNextOut = new Color(menuNext_mc);
  58.  menuNextOut.setRGB(controlsOutColor);
  59.  //thumb attributes
  60.  columns = Number(this.firstChild.attributes.thumbColumns);
  61.  rows = Number(this.firstChild.attributes.thumbRows);
  62.  spacer = Number(this.firstChild.attributes.spacer);
  63.  //total images per page
  64.  totalPerPage = columns*rows;
  65.  //width of each thumbnail
  66.  thumbWidth = Number(this.firstChild.attributes.thumbWidth);
  67.  thumbHeight = Number(this.firstChild.attributes.thumbHeight);
  68.  //border size of main pic background
  69.  border = Number(this.firstChild.attributes.border);
  70.  //if the total of pictures is larger than
  71.  //total per page, then show menu controls
  72.  if (total>totalPerPage) {
  73.   menuBack_mc._visible = true;
  74.   menuNext_mc._visible = true;
  75.  }
  76.  //build first page of thumbs  
  77.  buildThumbs(0);
  78. } else {
  79.  trace("Error loading XML" );
  80. }
  81. }
  82. xmlData = new XML();
  83. xmlData.ignoreWhite = true;
  84. xmlData.onLoad = loadXML;
  85. xmlData.firstChild.childNodes[0].firstChild.nodeValue
  86. xmlData.load("work.xml" );
  87. //-----------------------------------FUNCTIONS
  88. //position menu controls
  89. menuBack_mc._x = 32.5-(menuBack_mc._width/2);
  90. menuBack_mc._y = 225-(menuBack_mc._height/2);
  91. menuNext_mc._x = 900-32.5-(menuNext_mc._width/2);
  92. menuNext_mc._y = 225-(menuNext_mc._height/2);
  93. //menu controls on rollover
  94. menuBack_mc.onRollOver = function() {
  95. //color arrow on rollover
  96. menuBackOver = new Color(menuBack_mc);
  97. menuBackOver.setRGB(controlsOverColor);
  98. };
  99. menuNext_mc.onRollOver = function() {
  100. //color arrow on rollover
  101. menuNextOver = new Color(menuNext_mc);
  102. menuNextOver.setRGB(controlsOverColor);
  103. };
  104. //menu controls on rollout
  105. menuBack_mc.onRollOut = function() {
  106. //color arrow on rollout
  107. menuBackOut = new Color(menuBack_mc);
  108. menuBackOut.setRGB(controlsOutColor);
  109. };
  110. menuNext_mc.onRollOut = function() {
  111. //color arrow on rollout
  112. menuNextOut = new Color(menuNext_mc);
  113. menuNextOut.setRGB(controlsOutColor);
  114. };
  115. //---------------------------------
  116. //thumb rollover function
  117. function menuRollOver(mc) {
  118. //alpha to 100 on thumb that has rollover
  119. alphaTw = new Tween(thumbHolder["e"+int(mc)], "_alpha", Regular.easeOut, 35, 100, 15, false);
  120. }
  121. //thumb rollout function
  122. function menuRollOut(mc) {
  123. //alpha back to 35 on thumb that has rollout
  124. alphaTw = new Tween(thumbHolder["e"+int(mc)], "_alpha", Regular.easeIn, 100, 35, 15, false);
  125. }
  126. //resize thumbs to XML attributes
  127. function resizeThumbs(mc) {
  128. //resize background
  129. mc.bg._width = thumbWidth;
  130. mc.bg._height = thumbHeight;
  131. //center preloader
  132. mc.preloader_txt._x = (thumbWidth/2)-(mc.preloader_txt._width/2);
  133. mc.preloader_txt._y = (thumbHeight/2)-(mc.preloader_txt._height/2)+5;
  134. }
  135. //build thumbnails function
  136. function buildThumbs(n) {
  137. startX = 0;
  138. startY = 0;
  139. currentTotal = 0;
  140. //X and Y position on where to start thumbnails
  141. xPos = ((900-((thumbWidth*columns)+(spacer*columns-1)))/2)+(spacer/2);
  142. yPos = ((450-((thumbHeight*rows)+(spacer*rows-1)))/2)+(spacer/2);
  143. //remove old thumbnails
  144. for (i=0; i<total; i++) {
  145.  removeMovieClip(thumbHolder["e"+int(i)]);
  146. }
  147. //for loop for each picture
  148. for (i=n; i<total; i++) {
  149.  //while total thumbs per page is not met
  150.  if (currentTotal<totalPerPage) {
  151.   //duplicate main thumbnail
  152.   var e:MovieClip = thumbHolder.inThumbHolder.duplicateMovieClip("e"+i, i);
  153.   //resize thumbnails to XML attributes
  154.   resizeThumbs(e);
  155.   //position thumbnails
  156.   e._x = xPos+(thumbWidth+spacer)*((currentTotal)%columns);
  157.   e._y = yPos+(thumbHeight+spacer)*(int((currentTotal)/columns));
  158.   //load thumbnail
  159.   e.thumbLoader.loadMovie(thumb[i]);
  160.   //thumbnail loading
  161.   _root["thumbInterval"+i] = setInterval(checkProgressThumbs, 1, e, i);
  162.   //record thumbnails
  163.   lastThumb++;
  164.   currentTotal++;
  165.   //assign thumbnail position
  166.   e.num = i;
  167.   //set thumb to alpha 35 when loaded
  168.   e._alpha = 35;
  169.   //thumbnail on release
  170.   e.onRelease = function() {
  171.    //assign current pic
  172.    pic = this.num;
  173.    //load picture
  174.    menuRelease(this.num);
  175.   };
  176.   //thumbnail rollover
  177.   e.onRollOver = function() {
  178.    menuRollOver(this.num);
  179.   };
  180.   //thumbnail rollout
  181.   e.onRollOut = e.onReleaseOutside=function () {
  182.    menuRollOut(this.num);
  183.   };
  184.  }
  185. }
  186. //position and load text which tells what pictures user is looking through
  187. menu_txt._x = xPos;
  188. menu_txt._y = yPos-menu_txt._height;
  189. menu_txt.autoSize = "left";
  190. menu_txt.text = n+1+" - "+lastThumb+" / "+total;
  191. }
  192. //back arrow on release function
  193. menuBack_mc.onRelease = function() {
  194. //if not the first page
  195. if (lastThumb>totalPerPage) {
  196.  //assign current thumbs
  197.  lastThumb = lastThumb-totalPerPage-currentTotal;
  198.  //load thumbs
  199.  buildThumbs(lastThumb);
  200. }
  201. };
  202. //next arrow on release function
  203. menuNext_mc.onRelease = function() {
  204. //if not the last page
  205. if (lastThumb<total) {
  206.  //load thumbs
  207.  buildThumbs(lastThumb);
  208. }
  209. };
  210. //----------------------------------------------------
  211. //align objects when main picture loads
  212. function alignObjects() {
  213. //if there is a picture description
  214. if (descriptionText.description_txt.text != "" ) {
  215.  //load and position text and text background
  216.  descriptionText.description_txt.autoSize = "left";
  217.  descriptionText.description_txt._width = loader._width-10;
  218.  descriptionText.bg._width = loader._width;
  219.  descriptionText.bg._height = descriptionText.description_txt._height+10;
  220. }
  221. //position picture description text holder  
  222. descriptionText._x = loader._x;
  223. descriptionText._y = loader._y+loader._height-descriptionText.bg._height;
  224. //position the main loader centered on the stage
  225. loader._x = 450-(loader._width)/2;
  226. loader._y = 200-(loader._height)/2;
  227. //position and stretch the main picture background
  228. bg._x = 450;
  229. bg._y = 200;
  230. bg.inBg._width += (loader._width+border-bg.inBg._width)/4;
  231. bg.inBg._height += (loader._height+border-bg.inBg._height)/4;
  232. //position and stretch main picture rollOver movieclip
  233. over._x = 450-(loader._width)/2;
  234. over._y = 200-(loader._height)/2;
  235. over._width = loader._width;
  236. over._height = loader._height;
  237. //position the main picture close button
  238. xClose._x = loader._x+loader._width+(border/2)+30;
  239. xClose._y = loader._y+(loader._height/2);
  240. }
  241. //initialize the main picture - get everything ready
  242. function initPic() {
  243. //function "hidePage" from the main INDEX file
  244. // - this will hide the main page within the main file,  
  245. //   when the main picture is brought up
  246. _root.hidePage();
  247. //fade out objects
  248. alphaTw = new Tween(menuBack_mc, "_alpha", Regular.easeOut, 100, 0, 15, false);
  249. alphaTw = new Tween(menuNext_mc, "_alpha", Regular.easeOut, 100, 0, 15, false);
  250. alphaTw = new Tween(menu_txt, "_alpha", Regular.easeOut, 100, 0, 15, false);
  251. //disable/enable objects
  252. xClose.enabled = true;
  253. menuBack_mc.enabled = false;
  254. menuNext_mc.enabled = false;
  255. //for loop to fade out / disable all thumbnails
  256. for (i=0; i<total; i++) {
  257.  _root["thumbsOutInterval"+i] = setInterval(thumbsAlphaOut, 5, i);
  258.  thumbHolder["e"+int(i)].enabled = false;
  259. }
  260. //set initial bg position and size
  261. bg.inBg._width = 50;
  262. bg.inBg._height = 50;
  263. bg._x = 450;
  264. bg._y = 200;
  265. }
  266. //load main picture function
  267. function loadPic(mc) {
  268. //hide and disable objects
  269. loader._alpha = 0;
  270. descriptionText.enabled = false;
  271. descriptionText._visible = false;
  272. xClose.enabled = false;
  273. bg.enabled = false;
  274. over.enabled = false;
  275. over._visible = false;
  276. //load main picture
  277. loader.loadMovie(image[mc]);
  278. //load main description text
  279. descriptionText.description_txt.htmlText = txt[mc];
  280. //loading / fading function
  281. this.onEnterFrame = function() {
  282.  //get picture size
  283.  bLoaded = loader.getBytesLoaded();
  284.  bTotal = loader.getBytesTotal();
  285.  //fade in picture background  
  286.  if (bg._alpha<100) {
  287.   bg._alpha += 10;
  288.  }
  289.  //if picture has not loaded  
  290.  if (bLoaded != bTotal) {
  291.   //show percentage loaded
  292.   bg.preloader_txt.text = Math.round((bLoaded/bTotal)*100);
  293.   //if picture is loaded
  294.  } else if (bLoaded>=bTotal && bLoaded>100 && bTotal>100) {
  295.   bg.preloader_txt.text = "100";
  296.   //call align objects function
  297.   alignObjects();
  298.   //fade in close button
  299.   if (xClose._alpha<100) {
  300.    xClose._alpha += 10;
  301.   }
  302.   //if picture background is in the right position  
  303.   if ((bg.inBg._width>loader._width+(border-1)) && (bg.inBg._width<loader._width+(border+1)) && (bg.inBg._height>loader._height+(border-1)) && (bg.inBg._height<loader._height+(border+1))) {
  304.    //hide preloader
  305.    bg.preloader_txt.text = "";
  306.    //fade in main picture
  307.    if (loader._alpha<100) {
  308.     loader._alpha += 10;
  309.    }
  310.    //if picture has faded in to alpha 100  
  311.    if (loader._alpha>=100) {
  312.     //enabled objects
  313.     xClose.enabled = true;
  314.     over.enabled = true;
  315.     over._visible = true;
  316.     //if there is a picture description
  317.     if (descriptionText.description_txt.text != "" ) {
  318.      //enable picture description
  319.      descriptionText.enabled = true;
  320.      descriptionText._alpha = 0;
  321.      descriptionText._visible = true;
  322.     }
  323.     //if picture has loaded, delete the function  
  324.     delete this.onEnterFrame;
  325.    }
  326.   }
  327.  }
  328. };
  329. }
  330. //menu release function
  331. function menuRelease(mc) {
  332. //call function to initialize image
  333. initPic();
  334. //call function to load image
  335. loadPic(mc);
  336. }
  337. //main picture on press function
  338. //if user clicks on the main picture, it will load the next one
  339. over.onPress = function() {
  340. //if not the last picture
  341. if (pic<total-1) {
  342.  pic++;
  343.  loadPic(pic);
  344. }
  345. };
  346. //main picture rollOver function - to show the picture description
  347. over.onRollOver = function() {
  348. alphaTw = new Tween(descriptionText, "_alpha", Regular.easeIn, 0, 100, 7, false);
  349. };
  350. //main picture rollOut function - to hide the picture description
  351. over.onRollOut = function() {
  352. alphaTw = new Tween(descriptionText, "_alpha", Regular.easeIn, 100, 0, 7, false);
  353. };
  354. //main picture close button (big X) on Release function
  355. xClose.onRelease = function() {
  356. //enable menu controls
  357. menuBack_mc.enabled = true;
  358. menuNext_mc.enabled = true;
  359. //fade in/out objects
  360. alphaTw = new Tween(menuBack_mc, "_alpha", Regular.easeOut, 0, 100, 15, false);
  361. alphaTw = new Tween(menuNext_mc, "_alpha", Regular.easeOut, 0, 100, 15, false);
  362. alphaTw = new Tween(menu_txt, "_alpha", Regular.easeOut, 0, 100, 15, false);
  363. alphaTw = new Tween(xClose, "_alpha", Regular.easeOut, 100, 0, 5, false);
  364. alphaTw = new Tween(loader, "_alpha", Regular.easeOut, 100, 0, 5, false);
  365. alphaTw = new Tween(bg, "_alpha", Regular.easeOut, 100, 0, 5, false);
  366. //for loop for each thumbnail to fade in and enable it
  367. for (i=0; i<total; i++) {
  368.  _root["thumbsInInterval"+i] = setInterval(thumbsAlphaIn, 5, i);
  369.  thumbHolder["e"+int(i)].enabled = true;
  370. }
  371. //function "showPage" from the main INDEX file
  372. // - this will show the main page within the main file,  
  373. //   when the main picture is closed down
  374. _root.showPage();
  375. //disable all main picture objects
  376. xClose.enabled = false;
  377. bg.enabled = false;
  378. over.enabled = false;
  379. over._visible = false;
  380. descriptionText.enabled = false;
  381. descriptionText._visible = false;
  382. };
  383. //function which loads the thumbnails
  384. function checkProgressThumbs(e, i):Void {
  385. //get thumbnail size
  386. bLoaded = e.thumbLoader.getBytesLoaded();
  387. bTotal = e.thumbLoader.getBytesTotal();
  388. //percent loaded
  389. pLoaded = Math.round((bLoaded/bTotal)*100);
  390. //if thumbnail has not loaded yet
  391. if (bLoaded<bTotal) {
  392.  //hide thumbnail - alpha to 0 for fade in
  393.  e.thumbLoader.enabled = false;
  394.  e.thumbLoader._alpha = 0;
  395.  //show percent loaded on thumbnail holder
  396.  e.preloader_txt.text = pLoaded;
  397. //if thumbnail is loaded
  398. } else if (bLoaded>=bTotal && bLoaded>100 && bTotal>100) {
  399.  //hide preloader
  400.  e.preloader_txt.text = "";
  401.  //fade in thumbnail
  402.  if (e.thumbLoader._alpha<100) {
  403.   e.thumbLoader._alpha = e.thumbLoader._alpha+10;
  404.  }
  405.  //if thumbnail has faded in to alpha 100, clear interval  
  406.  if (e.thumbLoader._alpha>=100) {
  407.   clearInterval(_root["thumbInterval"+i]);
  408.  }
  409. }
  410. }
  411. //function to fade out thumbnails when thumbnail is clicked on
  412. function thumbsAlphaOut(i):Void {
  413. //fade thumb out
  414. thumbHolder["e"+int(i)]._alpha = thumbHolder["e"+int(i)]._alpha-5;
  415. //if faded out to alpha 0, clear interval
  416. if (thumbHolder["e"+int(i)]._alpha<=0) {
  417.  clearInterval(_root["thumbsOutInterval"+i]);
  418. }
  419. }
  420. //function to fade in thumbnails when main picture is closed down
  421. function thumbsAlphaIn(i):Void {
  422. //fade thumb in
  423. thumbHolder["e"+int(i)]._alpha = thumbHolder["e"+int(i)]._alpha+5;
  424. //if faded in to alpha 100, clear interval
  425. if (thumbHolder["e"+int(i)]._alpha>=35) {
  426.  clearInterval(_root["thumbsInInterval"+i]);
  427. }
  428. }

Message cité 1 fois
Message édité par BnB-Aurelien le 28-11-2008 à 10:32:03
Reply

Marsh Posté le 28-11-2008 à 10:37:40    

BnB-Aurelien a écrit :

Merci de vos réponses, j'ai essayé ta méthode Abais, mais comme je l'ai précisé, je ne peux pas intégrer de caractères dans mon textField tout simplement car il n'y a pas de textField.


Heuuu tu as forcement un textField quelque part.

 

Apparemment il est la: descriptionText.description_txt

 

Ton probleme doit venir de ce champ.


Message édité par Zedlefou le 28-11-2008 à 10:42:54

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 28-11-2008 à 13:49:40    

Rolalla ! En effet :O J'étais totalement à la masse! Merci bcp de m'avoir réouvert les yeux :P

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed