Visitez mon nouveau site web » mongo.ca

dimanche 6 décembre 2009

Portée des variables en Javascript (Variable scope)

Cacher des variables



En javascript toutes les variables déclarées dans une fonction ne sont visibles que dans cette fonction.



function maFonction() {
var variableCachee = "une variable cachée";
}

alert(variableCachee); // Retourne une erreur car la variable est inaccessible à l'extérieur de la fonction.

/////////////////
//Autre exemple//
/////////////////

// Variable globale
var x = 0;

(function() {

// Variable privée
var x = 1;
alert(x); // Renvoi 1

})();

alert(x); // Renvoie 0




En utilisant la technique de la fonction sans nom il est possible de "cacher" des variables pour qu'elles soient invisibles dans le reste du code javascript.



(function() {

// Variable "cachées"
var varChache1 = 1;
var varChache2 = 1;
var varChache3 = 1;


})();

alert(varChache1); // retourne une erreur car la variable est seulement accessible à l'intérieur de la fonction sans nom


* La fonction sans nom est immédiatement exécutée grâce au 2 parenthèses à la fin "();".

 



La variable this



En javascript la variable this est relative à chaque fonction.




function maFonction() {

this.variable = "Ceci est une variable";

function autreFonction() {

alert(this.variable); //Retourne une erreur car this est maintenant relatif à autreFonction

}


}



Une bonne pratique pour avoir accès au this d'une fonction parente est de l'attribuée à une autre variable.




function maFonction() {

//On attribue la variable this à une autre variable nommé self
var self = this;

self.variable = "Ceci est une variable";

function autreFonction() {

alert(self.variable); //Retourne "Ceci est une variable"

}


}



Si vous utilisez jQuery, cette technique est souvent utile car la variable this fait souvent référence à l'élément en cours.




$("#bouton").click(function() {

//On attribue l'élément en cours à une variable pour pouvoir l'utiliser dans les fonctions suivantes
var bouton = $(this);

bouton.val("Chargement...");

//On fait par exemple une requète AJAX
$.get("/contact.php",function(data) {

//La variable «bouton», déclarée plus haut, nous permet d'accéder à l'élément «bouton» même à l'intérieur d'une autre fonction.
bouton.val("Terminé");

});


}

Architecture Javascript pour entreprise avec Google Closure

Dernièrement j'ai fait beaucoup de recherche sur la façon de structurer son code javascript dans de gros projets web. Il n'y a pas vraiment d'informations sur le sujet car l'utilisation poussée de javascript est relativement récente. Mais comment doit-on organiser son code lorsqu'on bâtit une application web qui utilise AJAX et Javascript de façon intensive comme le fait Facebook ou GMail? Google offre depuis peu une solution à ce problème, Google Closure.

Ce projet vient en 3 morceaux:

Closure Compiler : Un compilateur javascript qui rassemble votre code en un seul fichier et supprime les commentaires, les espaces ainsi que les fonctions/variables inutilisées. Vous pouvez compiler votre code à l'aide de l'outil en ligne.

Closure Library : Une librairie javascript qui offre une grande quantité de fonctions utiles mais aussi de modules pour votre interface utilisateur (Bouton, Rich text editor, Tree view, etc...). Cette libraire est particulièrement utile car elle encourage les bonnes pratiques de programmation pour garantir une structure intelligente et la possibilité de réutiliser vos modules. Cette librairie est utilisée dans de gros projets web comme Google GMail.

Closure Templates : Un système de templates pour Javascript qui utilise un langage simple et efficace.

Je n'ai pas encore utilisé activement Google Closure mais je prévoit en faire l'essai pour la nouvelle version de Écoutez.ca .

À suivre...

Objets et Classes Javascript pour débutants / Programmation orientée objet en Javascript (Public/Private/Static)

Voici une traduction d'un article fort intéressant publié sur le blog de Komodo Média.

Cet article prend pour acquis que vous connaissez les bases de javascript et savez ce qu'est la programmation orientée objet.


Principe de base des classes en Javascript



Voici comment déclarer une classe et création d'une instance de celle-ci :


//Déclaration de la classe
function MaClasse() {
//...
}

//Création d'une instance de la classe
var classe = new MaClasse();

//Création d'une deuxième instance de la classe
var classe2 = new MaClasse();

//...





Variables(propriétés) et Fonctions(méthodes) publiques



Une variable ou une fonction publique est accessible à l'intérieur d'une classe et lorsque vous créez une instance de votre classe.

function MaClasse() {
//...
}

//Déclaration d'une variable publique
MaClasse.prototype.variablePublique = "Ceci est une variable publique";


//Déclaration d'une fonction publique
MaClasse.prototype.fonctionPublique = function() {
alert(this.variablePublique);
};

//Création d'une instance de la classe
var classe = new MaClasse();

//Utilisation d'une fonction publique
classe.fonctionPublique(); //Renvoie le texte contenu dans classe.variablePublique

//Vous pouvez aussi modifier la valeur d'une variable publique
classe.variablePublique = "Nouveau message";

classe.fonctionPublique(); //Renvoie "Nouveau message"



Variables(propriétés) et Fonctions(méthodes) privées



Les variables et fonctions privées sont accessibles seulement à l'intérieur de la classe et ne sont pas accessibles par l'instance de votre classe.


//Déclaration de la classe
function MaClasse() {

//on stocke la référence à this dans une variable.
var self = this;

//Déclaration d'une variable privée
var variablePrivee = "Ceci est une variable privée";

//Déclaration d'une variable publique
this.variablePublique = "Ceci est une variable publique";

//Déclaration d'une fonction privée
var fonctionPrivee = function() {

alert(self.variablePrivee); //Renvoie la valeur de la variable privée

};

}

//Création d'une instance de la classe
var classe = new MaClasse();

classe.fonctionPrivee(); //retourne une erreur car la fonction est privée

alert(classe.variablePrivee); //retourne une ereur car la variable est privée

alert(classe.variablePublique); //renvoie "Ceci est une variable publique"




Variables(propriétés) et Fonctions(méthodes) statiques


Les variables et fonctions statiques n'ont pas accès au variables/fonctions privées et publiques.


//Déclaration de la classe
function MaClasse() {

//...

}

MaClasse.variableStatique = "Ceci est une variable statique";


MaClasse.fonctionStatique = function () {

alert(MaClasse.variableStatique);

};

//Création d'une instance de la classe
var classe = new MaClasse();

classe.fonctionStatique(); //retourne une erreur car la fonction est statique est invisible par une instance de la classe

//Une fonction statique est accessible directement à partir de la classe
MaClasse.fonctionStatique(); // Renvoie "Ceci est une variable statique";



Variables(propriétés) et Fonctions(méthodes) privilégiées


Les variables et fonctions privilégiées ont accès aux variables/fonctions privées et publiques.


//Déclaration de la classe
function MaClasse() {

//on stocke la référence à this dans une variable.
var self = this;

//Déclaration d'une variable privée
var variablePrivee = "Ceci est une variable privée";

//Déclaration d'une fonction privée
this.fonctionPrivilegiee = function() {

alert(self.variablePrivee); //Renvoie la valeur de la variable privée

};

}

//Création d'une instance de la classe
var classe = new MaClasse();

classe.fonctionPrivilegiee(); //Renvoie la valeur de la variable privée



Voilà, vous savez maintenant comment utiliser tout le pouvoir de la programmation orientée objet avec Javascript.

samedi 5 décembre 2009

Ajax Dialog box avec jQuery et jQuery UI



Voici comment créer une Dialog Box dont le contenu est chargé par Ajax avec jQuery.

Vous avez besoin de jQuery et de jQuery UI




//Si vous n'avez pas déjà d'élément pour contenir le DialogBox
$("
Chargement...
").dialog().load("/adresse/dufichier.html");

//Créé une DialogBox dans un élément avec l'id "dialog"
$("#dialog").dialog().load("/adresse/dufichier.html");



Vous pouvez aussi inclure les librairies jQuery et JQuery UI sans les télécharger en utilisant le CDN de Google :








Cette technique est pratique car si un visiteur à déjà le fichier javascript en cache (parce qu'il a visité un autre site qui utilisait le CDN Google) il n'aura pas besoin de le télécharger à nouveau. Votre site se chargera donc plus rapidement.

Icônes gratuites pour sites web (Réseaux sociaux, Drapeaux, ...)

Voici quelques sites intéressants pour trouver des icônes gratuites et libres de droits.



Famfamfam (www.famfamfam.com)
Silk icons
700 icônes 16x16 pixels . Probablement la librairie la plus complète et la mieux réalisée.
Drapeaux
Tout les drapeaux du monde entier 16x16 pixels


Komodo Média (www.komodomedia.com)
Réseaux Sociaux
Icônes 16x16 pixels et 32x32 pixels des réseaux sociaux comme Facebook, Youtube, MySpace, ....
Très belles icônes et beaucoup de réseaux sociaux.



Si vous connaissez d'autres adresses, n'hésitez pas à les partager en écrivant un commentaire à cet article.

jeudi 1 octobre 2009

Télécharger de la musique gratuitement à partir de Google

J'ai découvert ce nouveau truc dernièrement et je dois dire que c'est assez efficace. En utilisant tout le potentiel du moteur de recherche Google vous pouvez arriver à chercher seulement les fichiers MP3 disponible gratuitement sur le web. Vous n'avez qu'à chercher ceci dans Google :


intitle:index.of -html -htm -download mp3 [mot clés]




Vous devez biensûr remplacer [mot clés] (y compris les crochets) par le nom de l'artiste ou de la chanson que vous cherchez

De cette façon Google ne vous donnera que les fichiers mp3 téléchargeables. Il faut cependant faire attention car beaucoup de sites créent de fausses pages qui donne l'impression qu'il s'agit d'une liste de fichiers mp3 mais en fait ce sont des liens vers de la publicité.

Amusez-vous!

dimanche 23 août 2009

Liste des villes du Québec au format XML - Base de données avec coordonnées géographiques(latitude/longitude)



Lors du développement de Écoutez.ca nous avons développé une liste de toutes les villes du Québec avec leur régions administratives. Comme je crois beaucoup au web ouvert, j'ai décidé de rendre accessible cette liste pour les webmestres et programmeurs web qui voudraient l'utiliser pour leur site. Pour le moment, je vous fournis 2 fichiers XML. Le premier contient la liste des villes seulement et le deuxième la liste des villes avec leur région et le positionnement géographique(latitude et longitude, disponible pour toutes les villes, merci à Simon Pouliot). Vous pouvez facilement utiliser ces fichiers XML pour entrer l'information dans une base de données MySQL ou pour créer un SELECT BOX dans un formulaire HTML.



Le premier fichier est organisé de cette façon (Téléchargez ce fichier):

<?xml version='1.0' encoding='utf-8'?>
<cities>
<city>Abercorn</city>



</cities>


Voici un exemple en PHP pour afficher une SELECT BOX à partir du fichier XML 1 :

Avec SimpleXML :

<?php

$xml = simplexml_load_file("/chemin/vers/fichier/villes_du_quebec.xml");

echo "<select name='city'>";

foreach($xml->city as $city) {
echo "<option>".$city."</option>";
}

echo "</select>";

?>



Sans SimpleXML

<?php

$xml = "";
$f = fopen( '/chemin/vers/fichier/villes_du_quebec.xml', 'r' );
while( $data = fread( $f, 4096 ) ) { $xml .= $data; }
fclose( $f );

preg_match_all( "/\\<\!\[CDATA\[(.*?)\]\]\>\<\/city\>/s",
$xml, $cities );

echo "<select name='city'>";

foreach( $cities[1] as $city ) {
echo "<option>".$city."</option>";
}

echo "</select>";


?>



Le deuxième fichier contient les coordonnées géographiques des villes. Il s'organise de la façon suivante : (Téléchargez ce fichier)

<?xml version='1.0' encoding='utf-8'?>
<cities>
<city>
<name>Abercorn</name>
<region>Montérégie</region>
<lat>45.032999</lat>
<lng>-72.663057</lng>
</city>



</cities>


Crédits


David Mongeau-Petitpas
Benoit Tétreault
Simon Pouliot


Creative Commons License
Liste des villes du Québec au format XML par Ecoutez.ca est mis à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.5 Canada.
Basé(e) sur une oeuvre à www.ecoutez.ca.

 

jeudi 28 mai 2009

Service d'intégration web

J'offre mes services d'intégration web pour les designers et entreprises de création de sites web. Je suis spécialisé PHP/MySQL et Javascript. Vous pouvez me contacter en tout temps à dmongeau_petitpas@ecoutez.ca .

Voici quelques exemples de sites :
http://www.boiteamusique.ca
http://www.uniondufeu.ca
http://www.guillaumearsenault.com
http://www.cinematproductions.com

jeudi 30 octobre 2008

Petit cours de balises HTML et de CSS pour les pages MySpace et les réseaux sociaux

Cet article vise à aider les utilisateurs de MySpace et autre réseaux sociaux qui donne la possibilité d'utiliser du HTML et CSS dans leurs pages.

HTML

Le langage HTML est à la base de TOUTES les pages web que vous visitez, même les sites en FLASH. Ce langage est constitué de balises qui organise le texte ou l'informations (Images, vidéos, etc...). Un document HTML typique se constitue de la façon suivante :


<html>

<head>
<title>Le titre de votre page</title>
</head>

<body>
Contenu de votre page web...
</body>

</html>


La compréhension de la structure d'un document HTML n'est pas très importante lorsqu'on ne créé pas une page en totalité. Le plus important à retenir est que le langage HTML se compose de balises (ex:<body></body>) et que celles-ci doivent être refermées (ex:<div>Bonjour) (ex:<div>Bonjour</div>). Vous aurez compris que la balise de fermeture comprend un «/». Ces balises ne sont bien entendue pas visibles par l'utilisateur final qui consulte la page avec un navigateur comme Firefox.

Balises HTML utiles pour les pages MySpace:

<a href="http://www.ecoutez.ca">exemple de texte</a> : créé un lien vers http://www.ecoutez.ca avec le texte «exemple de texte»

<img src="http://www.ecoutez.ca/image.jpg" /> : affiche l'image http://www.ecoutez.ca/image.jpg (cette balise n'a pas besoin d'une balise de fermeture mais demande un «/» avant la fin.

<p>exemple de texte</p> : délimite un paragraphe

<div>exemple de texte</div> : délimite une boîte de texte (avec changement de ligne après)

<span>exemple de texte</span> : délimite une boîte de texte (sans changement de ligne)

La différence entre une balise <span></span> et <div></div> est le changement de ligne après la balise. Si vous voulez isoler un mot dans une phrase vous devez utiliser la balise <span></span> car elle ne brisera pas votre phrase avec un changement de ligne.

<span>Bonjour,</span> ce blog ...
Affiche :
Bonjour, ce blog ...



<div>Bonjour,</div> ce blog ...
Affiche :
Bonjour,
ce blog ...


Maintenant que vous connaissez les principales balises HTML, il est temps de leur trouver une utilité!

CSS

Le CSS est un langage ajouté au HTML qui permet de définir le style de votre page. Vous pouvez ajouter à toutes vos balises HTML un paramètre style="" contenant les informations de mise en forme (ex:<div style="font-weight:bold;">Bonjour</div> affiche le texte contenu dans la balise <div></div> en gras)

Voici les principaux paramètres CSS:






















Détails

Valeurs

font-size

Définir la taille du texte

Valeurs possibles:
<chiffre> px

ex: font-size:14px;

font-weight

Définir l'épaisseur du texte

Valeurs possibles:
normal
bold

ex: font-weight:bold;

color

Définir la couleur du texte

Valeurs possibles:
#<valeur hexadécimale>
<nom de la couleur>

ex: color:#ffffff;
ex: color:red;

background

Définir l'arrière-plan

Valeurs possibles:
#<valeur hexadécimale>
<nom de la couleur>
url(<adresse de l'image>) no-repeat

ex: background:#ffffff;
ex: background:red;
ex: background:url(http://www.ecoutez.ca/image.jpg) no-repeat;



Je vais ajouter peu à peu d'autres paramètres CSS et d'autres balises HTML.

BoosterBlog

lundi 27 octobre 2008

Un petit truc pour éviter que votre page MySpace EXPLOSE!

En me promenant sur MySpace pour chercher des groupes du Québec pour Écoutez.ca, j'ai remarqué une erreur d'affichage sur la plupart des pages MySpace. Beaucoup utilisent des widgets Flash ou des vidéos YouTube sur leur page. Le chargement peut parfois être long et les widgets se mettent à apparaître un après l'autre ce qui a pour conséquence d'agrandir la page et de déplacer le lien où vous alliez cliquer. Voici la solution pour que votre page s'ouvre avec la bonne taille. Fini les liens qui se retrouvent 1 km plus bas après le chargement de vos widgets. Oui oui, rien de moins!



Donc, je commence! Vous devez aller dans «modifier votre profil» et repérer tous les éléments Flash(les balises commençant par <object> et se finissant par </object>). Dans ces balises se trouvent les dimensions finales de l'élément Flash.

Voici un exemple avec le code d'un player YouTube :


<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ZJhIYXmZEFs&hl=fr&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/ZJhIYXmZEFs&hl=fr&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>


Largeur : 425
Hauteur : 344

Il vous suffit donc d'utiliser ces dimensions pour entouré votre élément Flash avec une balise <div> à grandeur fixe. Attention, il est important d'entourer la balise <object> seulement et de ne pas y inclure d'autres balises <div> ou du texte.



<div style="width:425px; height:344px;">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ZJhIYXmZEFs&hl=fr&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/ZJhIYXmZEFs&hl=fr&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
</div>



N'oubliez pas d'ajouter px après les chiffres.

Voilà c'est fait, votre page est beaucoup plus agréable à visiter!

Visitez mon nouveau site web » mongo.ca