– support stone  thrones otelo finder ristoo zoo tickoon finder

Présentation

Crée en 1995, JavaScript ou JS est un langage de scripts. Il sert principalement à contrôler les données saisies dans des formulaires ou modifier le code HTML. Le JS est exécuté coté client par le navigateur. Le code est donc accessible par l’utilisateur dans son ensemble. Il est toutefois possible d’écrire du JS coté serveur.

JS ne fonctionne pas de la même façon que Java. NetScape, fondateur de JavaScript était partenaire de Sun, créateur de Java. Pour des raisons commerciales, ils ont choisi ce nom. JS peut être remplacé par des technologies similaires comme Ruby, Python ou Dart qui sont des langages de scripts

js

nodejs 2

Avantages

  • le plus rapide
  • à la mode
  • indépendant de l’OS

Inconvénients

  • différent des langages classiques

Métiers

 

Syntaxe de base

On écrit du JS entre des balises script.

<script>
alert(‘coucou’) ;
</script>

Il est nécessaire de finir les lignes d’instructions par des ; même si leurs oublis fonctionnent. Certains problème peuvent dans ce cas apparaître.
On évitera le code suivant qui générera une erreur car l’interpréteur va comprendre le code comme deux lignes d’instructions séparées.

var a = b 
+c ;

Lien externe

Pour des raisons d’architecture, on préférera séparer le code JS du HTML en appelant un fichier. On ne met pas les balises <script> dans le fichier JS.

<script src="monFichier.js"></script>

Variable

JS fonctionne comme PHP, les variables sont typés dynamiquement. Nous n’avons donc pas besoin de déclarer les types.

let username= 12 ;

La concaténation de chaine de caractère fonctionne avec des + comme en Java

let a ="youhou"+b ;

Affichage et saisie

On utilise la commande prompt pour la saisie et alert pour l’affichage avec l’utilisateur

let maVar= prompt(‘Entrez une valeur) ;
alert(maVar);
confirm("message")

Dans la console

console.log("youhou");

 

Les conditions

if (confirm("dans le if")) {
    alert("dans if');
} else {
    alert("dans else");
}

var choix = parseInt(prompt('1 ou 2'));
switch (choix) {
    case 1:
        alert("choix 1");
        break;
    case 2:
        alert("choix 2");
        break;
    default:
        alert("aucun choix");
}

Les boucles

let somme = 0, valeur = 0;
while (valeur != -1) {
    valeur = parseInt(prompt(‘valeur’))
    ;
    if (valeur != -1) {
        somme += valeur;
    }
}

alert(somme);
for (let i = 0; i < 10; i++) {
    alert(i);
}

Les tableaux

var nombres= [5,8,12];
alert(nombres[2]);

Pour ajouter un élément à la fin du tableau

nombres.push(45) ;

Parcours

nombres.forEach(function(item, index, array) {
  console.log(item, index);
});

 

Les fonctions

Comme en PHP

function f(){}

Il existe des fonctions anonymes, i.e. une fonction qui n’a pas de nom. La variable maFonction possède la référence de la fonction anonyme.

var maFonction = function(message){
alert(message);
};
maFonction('ceci est un test');

Porté des variables

Les variables var sont connus à l’intérieur des fonctions où elles sont déclarées et dans les sous fonctions.
Les variables let sont connues dans le bloc uniquement.

var x = 1;

function h(){
  var x = 2;

  console.log(x);
  // expected output: 2
}
h();
console.log(x);
// expected output: 1
let x = 1;

if (x === 1) {
  let x = 2;

  console.log(x);
  // expected output: 2
}

console.log(x);
// expected output: 1
var x = 1;

if (x === 1) {
  var x = 2;

  console.log(x);
  // expected output: 2
}

console.log(x);
// expected output: 2

Encapsulation

JavaScript ne propose pas nativement de fonctionnalité d’espace de nommage. Pour éviter les collisions de noms, entre autres par l’utilisation d’importation de code externe, une méthode consiste à encapsuler la bibliothèque dans une fonction anonyme. Les variables et fonctions n’ont plus dans ce cas une portée globale mais réduite à la portée de la fonction.

  • Pour ce faire, la déclaration “function() {}” permet de définir la fonction anonyme.
  • L’ajout de “()” à la fin de la déclaration permet son exécution immédiate.
  • La grammaire de JavaScript ne permettant cependant pas cette écriture, il faut donc encadrer la fonction anonyme avec des parenthèses.
var maVariable = 'I am global';

(function () {
    var maVariable = 'I am not global';
    alert(maVariable);
.
//Affiche 'I am not global'
})();


alert(maVariable);
//Affiche 'I am global'

 

Les évènements

Il existe plusieurs évènements qui sont récupérables via JS.

click Cliquer (appuyer puis relâcher) sur l’élément
dblclick Double-cliquer sur l’élément
mouseover Faire entrer le curseur sur l’élément
mouseout Faire sortir le curseur de l’élément
mousedown Appuyer (sans relâcher) sur le bouton gauche de la souris sur l’élément
mouseup Relâcher le bouton gauche de la souris sur l’élément
mousemove Faire déplacer le curseur sur l’élément
keydown Appuyer (sans relâcher) sur une touche de clavier sur l’élément
keyup Relâcher une touche de clavier sur l’élément
keypress Frapper (appuyer puis relâcher) une touche de clavier sur l’élément
focus « Cibler » l’élément
blur Annuler le « ciblage » de l’élément
change Changer la valeur d’un élément spécifique aux formulaires (input,checkbox, etc.)
select Sélectionner le contenu d’un champ de texte (input, textarea, etc.)

Version DOM 0

<span onclick="alert('Hello !');">Cliquez-moi !</span>

Version DOM 2

On « écoute » l’évènement sur un élément. Ceci est très proche de la plupart des langages de programmation objet.

<span id = "clickme" > Cliquez - moi! </span>
<script>
var element = document.getElementById('clickme');
element.addEventListener('click', function (e) {   alert("Vous m'avez cliqué !" + e.type); }, false);
</script>

Modifier le CSS

On peut aussi modifier le style d’un élément via JS.

#text {
color: red;
}

<span id="text"></span>
var text = document.getElementById('text'),
color = getComputedStyle(text, null).color;
alert(color);

LocalStorage et sessionStorage

Il est possible d’enregister des variables persistantes avec JavaScript. Les variables de sessions sont disponibles dans une instance de navigateur. Les variables local n’expirent pas. Pour un enregistrement d’information et accès coté serveur, on utilisera des cookies.

sessionStorage.setItem('token', data);
var token = sessionStorage.getItem('token');

localStorage.setItem("username", "John");
var username = localStorage.getItem('username');

sessionStorage.removeItem('token');
localStorage.clear();

 

jQuery

jQuery est une bibliothèque JavaScript qui permet d’agir sur le code HTML, CSS, JavaScript. jQuery est indépendant des navigateurs.  http://api.jquery.com/
La bibliothèque jQuery peut être appelée de deux manières différentes jQuery ou $

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        alert("Value: " + $("#test").val());
    });
});
</script>

Ajax

Ajax, basé sur du JavaScript permet de faire communiquer le navigateur avec un serveur Web sans occasionner le rechargement d’une page.

Fonctionnement sans Ajax

Le navigateur envoie une requête – via une URL – au serveur. Le serveur répond en renvoyant au navigateur le code HTML de la page ainsi que tout ce qui lui est associé comme les scripts JavaScript, les images ou les éventuels médias et autres objets embarqués – donc la réponse du serveur est volumineuse.

ajax1 2

Avec Ajax

La première requête est la même. Lorsque la page nécessite de nouvelle information, le navigateur via JS peut appeler le serveur web et obtenir ce dont il a besoin sans les autres données. On peut effectuer un envoie sélectif de données et rafraichir une partie de la page. Il revient au développeur de réaliser le code spécifique coté navigateur et serveur Web.

ajax2 2

 

Exemple avec jQuery, cliquer sur le bouton, bonjour Ajax devrait s’afficher. JS vient d’appeler le contenu de index.php

index.js

$(document).ready(function () {
//click sur l'id btn
    $('#btn').click(function () {
        $.ajax("http://localhost/index.php",//appel de index.php sur le serveur web
            {
                type: "GET",
                success: function (resultat) {
                    $("#result").html(resultat);
                }
            });
    });
});

index.html

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8">
</head>

<body>

 <button class="btn btn-primary" id="btn">Valider</button>
 <div id="result"></div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" crossorigin="anonymous"></script>
<script src="index.js"></script>
</body>
</html>

index.php

<?php  echo "bonjour Ajax";

Autre exemple

$(document).ready(function () {
    $('#btn').click(function () {
        $.ajax("http://localhost/index.php",
            {
                type: "GET",
                data: 'nom=' + nom + '&prenom=' + prenom,
                success: function (data, textStatus, jqXHR) {
                    $("#result").html(resultat);
                },
                error: function (data, textStatus, jqXHR) {
                    console.log(jqXHR.statusCode());
                },
                complete: function (data, textStatus, jqXHR) {
                    console.log("finito");
                }
            });
    });
});

Programmation Objet

Classes, constructeur, variables d’instances et accesseur

class Fruit{
  constructor(couleur, grammes) {
    this.couleur= couleur;
     this.grammes= grammes;
  }
  
  get kilo(){
    return this.grammes/1000;
  }

}

let monFruit = new Fruit();
console.log(monFruit.kilo);

Variables et méthodes static (MDN)

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  static distance(a, b) {
    const dx = a.x - b.x;
    const dy = a.y - b.y;
    return Math.hypot(dx, dy);
  }
}

const p1 = new Point(5, 5);
const p2 = new Point(10, 10);

//variable static
Point.couleur="noir";

console.log(Point.distance(p1, p2));
console.log(Point.couleur);

Héritage

class Personne{ 
  constructor(nom) {
    this.nom = nom;
  }
  
  mange() {
    console.log(this.nom + ' mange.');
  }
}

class Etudiant extends Personne{
  constructor(nom) {
    super(nom); 
  }
  mange() {
    console.log(this.nom + ' mange beaucoup.');
  }
}

 

Vue.js

On pourra utiliser Vue.js à la place de JQuery.

On utilise un cdn pour obtenir la version 2 en mode débogage.
https://fr.vuejs.org/v2/guide/installation.html

 

  • La div app definit la zone où vue.js s’exécutera.
  • {{maVariable}} contient des variables qui seront interpreté grâce à data
  • v-bind ou : permet de remplacer un attribut html
  • v-if   v-else est interprété selon la valeur de l’attribut
  • v-on:click ou @click permet d’exécuter une fonction dans methods au click
  • v-model  (v-bind:value) pour lier la value d’un formulaire avec une variable
<!DOCTYPE html> 
<html>
<head>
    <meta charset="utf-8"/>
    <title> mon tableau </title>
</head>
<body>
<div id="app">
  <a v-bind:href="link"  :title="title">{{message}}</a>

  <div v-if="success">
   message selon condition
   <div v-on:click="close">test click</div>
    </div>
    <div v-else="success">
  pas de message !
    </div>

     <div v-show="tarte">
   message selon condition2
    </div>
    <ul>
    	<li v-for="p in tb">{{p}}</li>
    </ul>
    <input v-model="message2" placeholder="modifiez-moi">
     <p>Le message est : {{ message2 }}</p>


<br ><div v-bind:class="classObject"></div> </br >

</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  
new Vue({
  //div ou est executé vuejs
  el:'#app',

  data: {
    //variable
    message:"youhou",
    //liaison avec un input
    message2:"test",
    //attribut html
    title:"titre",
    //href
    link:'https://frebourg.es',
    //affichage de la div v-if
    success: true,
        //affichage de la div v-show
    tarte:false,
    //affichage d'un tableau
    tb:['Angular','React'],

    
  //changer de class
  classObject: {
       active: true,
       'text-danger': false
    }
  },

  methods:{
    close: function(){
      //changement de la valeur de success de data
      this.success=false;
    }
  }
})

</script>
</body>
</html>



 

Ajax avec axios

https://github.com/axios/axios

 

<div id="app">
  {{ info }}
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
new Vue({
  el: '#app',
  data () {
    return {
      info: null
    }
  },
  mounted () {
        axios({
      method: 'get',
      url: 'https://api.coindesk.com/v1/bpi/currentprice.json',
      responseType: 'json',
     /* data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
      }*/
    })
       .then(async res => { 
       	if(res.status === 200) { 
       	      alert('Ok!');
       	      this.info=res;
       	 } else if(res.status === 400) { 
       	 	  let errorResponse = await res.json(); this.errors.push(errorResponse.error); }

       });
  }
})
</script>