IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

JW Player 8 et playlist


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut JW Player 8 et playlist
    Bonjour,

    J'aimerais pouvoir exploiter le nouveau format d'affichage baptisé Shelf proposé avec la version 8 de JW Player. Il est possible ainsi d'afficher sous forme forme de vignettes les autres vidéos en dessous de la vidéo principale.

    J'ai actuellement un fichier de paramétrage du player en JS mais je ne sais pas où insérer ces nouveaux paramètres.
    En PJ l'extrait du fichier à modifier, vraisemblablement la section Playlist dans laquelle il faut rajouter le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    /*####################################################################################################################*/
    /************************************************* SECTION  VIDEO *****************************************************/
    /*####################################################################################################################*/
     
     
    /**********************************************************************************************************************/
    /* Fonction InsererVideoJW : Permet d'insérer un lecteur Vidéo basé sur JWPlayer V6   	                              */
    /*-----------------------------------------------------------------------------------------------------------------*/
    /* Paramètres:                                                                                                        */
    /*  nomDiv : Nom du DIV dans lequel on veut ajouter le lecteur 				                                          */
    /*  nomObject : id du lecteur 						                                                                  */
    /*  width : Largeur de la vidéo                                                                                       */
    /*  height : Hauteur de la vidéo                                                                                      */
    /*  serveurRTMP : serveur RTMP par lequel est streamé le fichier                                                      */
    /*  cheminFichier : Localisation complète du fichier visé                                                             */
    /*  autostart : permet de démarrer la vidéo au chargement                                                             */
    /*  image : permet de spécifier une image au chargement                                                               */
    /*  skinName : Skin personnalisé (dossier skin hébergé sur serveur flash contenant un fichier XML)                     */
    /*  caption : true /false autorise l'affichage des sous-titre s'ils existent.                                         */
    /**********************************************************************************************************************/
    function InsererVideoJW(nomDiv, nomObject, width, height, serveurRTMP, cheminFichier, autostart, image, skinName, caption, chapters, logo, adwaysId) {
     
        //Calcul de l'extension du fichier passé en paramètre (.smil/.rss/.f4v/.mp4)
        var fileURLext = cheminFichier.substring(cheminFichier.lastIndexOf("."));
        //console.log("Extension du fichier" + ' : ' + fileURLext);
     
        //Calcul de l'URL du fichier passé en paramètre sans l'extension  
        var baseCheminFichier = "";
     
        // Si l'URL du fichier contient un point (.) alors on prend tout ce qui précède ce point comme URL de base
        if (cheminFichier.indexOf('.') != -1) baseCheminFichier = cheminFichier.substr(0, cheminFichier.lastIndexOf('.'));
            // Sinon on reprend le fichier passé en paramètre tel quel
        else baseCheminFichier = cheminFichier;
     
     
        // Si l'url de base possède les 2 points (:) lors on prend tout ce qui suit les 2 ce point comme URL de base
        if (cheminFichier.indexOf(':') != -1) baseCheminFichier = baseCheminFichier.substring(baseCheminFichier.indexOf(":") + 1);
     
        //console.log("baseCheminFichier" + ' : ' + baseCheminFichier);
     
    	// nom fichier vidéo et reduction a 8 caracteres exactement pour mediaid
    	var mediaid = getJWmediaid(baseCheminFichier);
     
        /*Gestion du démarrage automatique*/
        if ((autostart === undefined) || (autostart == ""))
            autostart = "false";
     
        /*Gestion de l'apparence du lecteur*/
        if ((skinName === undefined) || (skinName == ""))
        { skinName = "seven"; }
     
     
        /*gestion de l'image */
    	// chemin de l'image généré automatique à partir du nom de fichier
        if ((image === undefined) || (image == "")) {
            image = BASE_URL_HTTP + REP_RESSOURCES + baseCheminFichier + ".jpg";
        }
     
     
        var captions = [{}];
     
    	if ((caption === undefined) || (caption == ""))
            caption = "false";
     
    	if ((chapters === undefined) || (chapters == ""))
            chapters = "false";
     
        /*Gestion du sous-titrage */
        if (caption == 'true') {
     
            var captionXml = BASE_URL_HTTP + REP_RESSOURCES + baseCheminFichier + ".vtt";
            captions.push({
                file: captionXml,
                label: "On",
                kind: "captions"
            });
        }
     
    	/*Gestion du chapitrage */
        if (chapters == 'true') {
     
            var chaptersVTT = BASE_URL_HTTP + REP_RESSOURCES + baseCheminFichier + "_chap.vtt";
            captions.push({
                file: chaptersVTT,
                kind: "chapters"
            });
        }
     
     
    	var logoDesc = {};
    	var logoFile = BASE_URL_HTTP + 'logoCNED.png';
    	var logoFileBig = BASE_URL_HTTP + 'logoCNEDbig.png';
     
    	if (logo === undefined) logo = "";
     
    	if (logo == "br") 
    	{
    		logoDesc = {
    			file: logoFileBig,
    			link: "http://www.cned.fr",
    			position: "bottom-right",
    			margin: "0"
    		};
    	}
    	else if (logo == "tl") 
    	{
    		logoDesc = {
    			file: logoFile,
    			link: "http://www.cned.fr",
    			position: "top-left"
    		};
    	}
    	else
    	{
    		logoDesc = {
    			file: logoFile,
    			link: "http://www.cned.fr"
    		};
    	}
     
        /*Configuration de base du lecteur*/
        var jwparam = {
            autostart: autostart,
            image: image,
    		skin: { name: skinName },
            width: width,
            height: height,
            flashplayer: CHEMIN_FLASH_PLAYER,
            primary: "flash",
    		logo: logoDesc,
    		displaytitle: false
        };
     
        // Playlist au format smil
        if (fileURLext == ".smil") {
            //construction du fichier utilisé pour le téléchargement progressif (sur mobile): http://en.wikipedia.org/wiki/Progressive_download
            var fallback = BASE_STREAM_HTTP + baseCheminFichier + ".mp4";
            //console.log("fallback" + ' : ' + fallback);
            //définition de l'URL pour la playlist smil 
            var smil = BASE_URL_HTTP + REP_RESSOURCES + cheminFichier;
     
            //console.log("smil" + ' : ' + smil);
            //Ajout de la playlist aux paramètres jwplayer
            jwparam.playlist = [{
    			captions:captions,
                image: jwparam.image,
                sources: [{
                    file: smil
                }, {
                    file: fallback
                }],
    			mediaid: mediaid,
    			title: mediaid
            }];
        }
            //Playlist au format rss
        else if (fileURLext == ".rss") {
    	//console.log("RSS");
            var rss = BASE_URL_HTTP + REP_RESSOURCES +cheminFichier;
    		//console.log("rss" + ' : ' + rss);
            jwparam.playlist = rss;
    		//console.log("jwparam.playlist" + ' : ' + jwparam.playlist);
    		jwparam.displaytitle = true;
    		//dans le cadre d'une demande accessibilité, on utilise les playlist RSS pour faire du streaming en priorité html5
    		jwparam.primary = "html5";
        }
        else if (serveurRTMP == RTMP_VOD) {
     
            //jwparam.file = serveurRTMP + cheminFichier;
    		jwparam.playlist = [{
    			captions:captions,
    			image: jwparam.image,
    			sources: [{
                    file: serveurRTMP + fileURLext.substring(1) + ":" + baseCheminFichier + fileURLext
                }, {
                    file: BASE_STREAM_HTTP + baseCheminFichier+fileURLext
                }],
    			mediaid: mediaid,
    			title: mediaid
            }];
    		//console.log("jwparam.playlist[0].sources[0].file" + ' : ' + jwparam.playlist[0].sources[0].file);
    		//console.log("jwparam.playlist[0].sources[1].file" + ' : ' + jwparam.playlist[0].sources[1].file);
        }
    	else if (serveurRTMP == RTMP_LIVE) {
    		jwparam.playlist = [{
    			file: serveurRTMP + baseCheminFichier,
    			mediaid: mediaid,
    			title: mediaid
            }];
    	}
    	else if (serveurRTMP.indexOf('rtmp') != -1) {
    		jwparam.playlist = [{
    			captions:captions,
    			image: jwparam.image,
    			file: serveurRTMP + fileURLext.substring(1) + ":" + baseCheminFichier + fileURLext,
    			mediaid: mediaid,
    			title: mediaid
            }];
    		//console.log("jwparam.playlist[0].file" + ' : ' + jwparam.playlist[0].file);
    	}
    	else
    	{
    		jwparam.playlist = [{
    			captions:captions,
    			image: jwparam.image,
    			file: serveurRTMP + baseCheminFichier+fileURLext,
    			mediaid: mediaid,
    			title: mediaid
            }];
    	}
     
        //initialisation du lecteur
    	if ((adwaysId != null) && (adwaysId != ""))
    	{
    		playerInstance.setup(jwparam).on('ready', function() {
    			if (typeof adways != 'undefined') 
    			{
    				//console.log("create experience adways");
    				var experience = new adways.interactive.Experience();
    				experience.setPlayerClass("jwplayer7"); // anciennement adways.playerHelpers.JWPLAYER7
    				experience.setPlayerAPI(this);
    				experience.setPublicationID(adwaysId);
    				experience.load();
    			}
    		});
    	}
    	else
    	{
    		playerInstance.setup(jwparam);
    	}
    }
     
     
    /*####################################################################################################################*/
    /************************************************* SECTION  PLAYLIST JWPLAYER *****************************************/
    /*####################################################################################################################*/
     
     
    /************************************************************************************************************/
    /* Fonction InsererPlaylistJW : Permet d'insérer une playlist de médias basé sur JWPlayer    				*/
    /*-------------------------------------------------------------------------------------------------------*/
    /* Paramètres:                                                                                              */
    /*  nomDiv : Nom du DIV dans lequel on veut ajouter le lecteur 												*/
    /*  nomObject : id du lecteur 																				*/
    /*  width : Largeur du lecteur                                                                              */
    /*  height : Hauteur du lecteur                                                                             */
    /*  playlistXML : Localisation complète de la playlist (fichier XML)                                        */
    /*  playlistPosition : Position de la playlist (right, left)                                                */
    /*  playlistSize : Taille de la playlist      				                                                */
    /*  skinName : Skin personnalisé (dossier skin hébergé sur serveur flash contenant un fichier XML)           */
    /*  autostart : permet de démarrer la vidéo au chargement 													*/
    /************************************************************************************************************/
    function InsererPlaylistJW(nomDiv, nomObject, width, height, playlistXML, playlistPosition, playlistSize, skinName, autostart) {
     
        /*Gestion du démarrage automatique*/
        if (autostart == "") {
            autostart = "true";
        }
        /*Gestion de l'apparence du lecteur*/
        if ((skinName === undefined) || (skinName == ""))
        { skinName = "seven"; }
     
    	var logoFile = BASE_URL_HTTP + 'logoCNED.png';
     
        /*Configuration du lecteur*/
        var jwparam = {
            allowfullscreen: "true",
            allowscriptaccess: "always",
            wmode: "opaque",
            playlist: playlistXML,
            flashplayer: CHEMIN_FLASH_PLAYER,
            height: height,
            primary: "flash",
            width: width,
            skin: { name: skinName},
            logo: {
    			file: logoFile,
    			link: "http://www.cned.fr"
    		},
            listbar: {
                position: playlistPosition,
                size: playlistSize
            },
            analytics: {
                enabled: false
            }
        };
     
    	//initialisation du lecteur
    	playerInstance.setup(jwparam);
    }
     
     
    /************************************************************************************************************/
    /* Fonction InsererMediaURL : Permet d'insérer un lecteur Vidéo basé sur JWPlayer dans une iframe    	    */
    /*----------------------------------------------------------------------------------------------------------*/
    /* Paramètres: ATTENTION aucun paramètre de fonction mais récupération dans l'URL en GET                    */
    /* media : le chemin vers le media sur VOD (obligatoire)		                                    */
    /* image : vignette avant la lecture 									    */
    /* nomdiv : id de DIV pour la video 									    */
    /* nomobj :	nom de balise OBJECT 									    */
    /* autostart : demarrage automatique									    */
    /************************************************************************************************************/
     
    /* Fonction permettant la récupération d'un paramètre dans l'URL de la page */
    function recupParametreUrl(NomParam, defaut) {
     
        if (defaut == null) defaut = "";
     
        NomParam = NomParam.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
     
        var regex = new RegExp("[\\?&]" + NomParam + "=([^&#]*)");
        var monparametre = regex.exec(window.location.href);
     
        if (monparametre == null)
            return defaut;
        else
            return monparametre[1];
    }
     
    function InsererMediaURL() {
     
        /* Récupération des paramètres dans l'URL */
        var media = recupParametreUrl('media');
        media = unescape(media);
     
     
        var image = recupParametreUrl('image');
        if (image != "") {
            image = unescape(image);
        }
     
        // p.brouard : on ne permet plus de choisir le nomdiv car on utilise qu'une seul balise DIV (08/2015)
    	//var nomdiv = recupParametreUrl('nomdiv');
        //if (nomdiv == "") { nomdiv = "DivPlayerJWP"; }
    	var nomdiv = "DivPlayerJWP";
     
        var nomobj = recupParametreUrl('nomobj');
        if (nomobj == "") { nomobj = nomdiv + "0"; }
     
        var autostart = recupParametreUrl('autostart');
        if (autostart != "true") { autostart = "false"; }
     
    	var mini = recupParametreUrl('mini');
    	if (mini == "mini") { mini = "true"; }
     
    	var logo = recupParametreUrl('logo');
    	if (!logo) logo = "";
     
    	var chapters = recupParametreUrl('chapters');
        if (chapters != "true") { chapters = "false"; }
     
    	var caption = recupParametreUrl('caption');
        if (caption != "true") { caption = "false"; }
     
    	var skin = recupParametreUrl('skin');
    	if (!skin) skin = "";
    	else if (skin.indexOf(".xml") != -1) skin = skin.substring(0, skin.indexOf(".xml"));
     
    	var adwaysId = recupParametreUrl('adwaysId');
    	if (!adwaysId) adwaysId = "";
     
        /* Séparation dans deux variables du chemin complet du média : 'ext' pour l'extension et 'name' pour le chemin sans l'extension */
        var separateur = ".";
        var positionPoint = media.lastIndexOf(separateur);
        var name = media.substring(0, positionPoint);
        var ext = media.substring(positionPoint + 1);
     
        //console.log('insererMediaUrl() ' + name + ' ' + ext + ' ' + image);
        //console2('insererMediaUrl() ' + name + '.' + ext + '<br /> ');
     
        /* Sélection et insertion de la fonction du player en fonction de l'extension */
        switch (ext) {
            case 'mp4':
            case 'flv':
    			InsererVideoJW(nomdiv, nomobj, '100%', '100%', RTMP_VOD, ext + ':' + name + '.' + ext, autostart, image, skin, caption, chapters, logo, adwaysId);
    			break;
    		case 'smil':
    		case 'rss' :
                InsererVideoJW(nomdiv, nomobj, '100%', '100%', RTMP_VOD, name + '.' + ext, autostart, image, skin, caption, chapters, logo, adwaysId);
                break;
    		case 'xml' :
    			InsererPlaylistJW(nomdiv, nomobj, '100%', '100%', name + '.' + ext, 'right', '250', '', autostart);
    			break;
            case 'mp3':
    			if (mini == "true") InsererAudioMiniPlay(name + '.' + ext);
    			else InsererAudioJW(nomdiv, nomobj, RTMP_VOD, ext + ':' + name + '.' + ext, autostart, skin);
                break;
    		case 'live':
    			InsererVideoJW(nomdiv, nomobj, '100%', '100%', RTMP_LIVE, name, true, image, skin);
    			break;
            case '':
                document.write("<div class='avertissement'><p>Pas de média détecté.</p></div>");
                break;
     
            default:
                document.write("<div class='avertissement'><p>Ce type de fichier (" + ext + ") n'est pas pris en charge.</p></div>");
                break;
        }
    }
    Merci par avance si une bonne âme peut me dépanner.

    bruno

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Salut,

    j’ai quelques remarques d’ordre un peu « meta », qui ne portent pas directement sur ton code mais plutôt sur des pratiques de codage.

    d’abord, les lignes commentaires sont trop longs. Dans de nombreux projets open source, il est recommandé de faire des lignes qui ne dépassent pas X caractères (souvent 72 ou 80), pour éviter d’avoir à défiler horizontalement, parce qu’il n’y a rien de moins ergonomique que le défilement horizontal. Perso quand je travaille avec des écrans larges, j’aime bien mettre plusieurs colonnes de code côte-à-côte pour augmenter ma vision du fichier / projet.

    Quand il s’agit de code, parfois on est obligé de faire une ligne longue, mais pour les commentaires on n’a pas d’excuse.

    Tes fonctions ont beaucoup trop de paramètres. À partir de quatre ça commence à être pas pratique, et là rien que dans la première fonction il y en a… 13

    Utilise le patron RORO.

    La doc. Il existe une convention pour documenter son code en JS, elle s’appelle simplement JSDoc. Autant y adhérer, ça ne coûte pas grand chose. Ça te forcera, en outre, à faire un peu plus attention aux types de tes paramètres — par exemple, j’ai vu quelques chaînes "true" / "false" qui mériteraient d’être remplacées par de vrais booléens.

    Tu n’utilises pas le mode strict.

    Enfin, attention à la forme générale de ton code, en particutier l’indentation. Si tu veux qu’on te relise, c’est une question de courtoisie. Il existe une moultitude de formateurs de code automatiques (en anglais pretty-printers ou beautifiers), il y en a même qui sont intégrés aux outils F12 des navigateurs actuels.

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut détails
    Bonjour,

    Merci pour ce retour.
    Pour tout avouer, je ne suis pas développeur et donc ce code n'est pas de moi donc désolé pour les "mauvaises pratiques" :-(
    Ensuite je dois me débrouiller avec ce fichier (qu'il soit ou non bien présenté) pour y intégrer de nouveaux paramètres.
    Je ne peux donc pas retoucher en profondeur au fichier sous peine de tout casser.

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Imagine une fonction qui prend en paramètre des quantités de choux, de carottes et d’oignons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function machin(choux, carottes, oignons) {
      "use strict";
     
      ...
    }
    Mais au moment de l’appel…
    … Tu as toujours du mal à te rappeler(*) l’ordre des paramètres. Ce serait bien de pouvoir nommer les valeurs au moment de l’appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    machin({
      choux    : 12,
      oignons  : 15,
      carottes : 47,
    });
    Comme ça, plus de problème de mémoire (humaine), et on peut passer les paramètres dans l’ordre que l’on veut. C’est la partie Receive Object du patron RORO.

    Ainsi, la nouvelle signature de la fonction serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function machin(params) {
      "use strict";
     
      ...
      // utilisation des valeurs params.choux, params.carottes, etc.
    }
    Le problème c’est que la fonction machin est déjà utilisée par du code tiers, et tu ne peux pas changer sa signature sans casser la compatibilité. Tu voudrais pouvoir ajouter une nouvelle signature, tout en conservant celle qui existe. C’est quelque chose de courant en C, Java, etc.
    En JavaScript, on peut simuler ça en faisant de la détection de type sur le premier paramètre. C’est une technique massivement utilisée par le framework jQuery, par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function machin(choux, carottes, oignons) { // ancienne signature
      "use strict";
     
      if ("object" === typeof choux) { // détection de type
        let args = choux;
     
        // redéfinit les arguments
        choux    = args.choux;
        carottes = args.carottes;
        oignons  = args.oignons;
      }
     
      // ici, les valeurs `choux`, `carottes` et `oignons` sont disponibles
      // quelle que soit la signature utilisée
     
      ...
    }
    Tu peux toujours avoir de l’ancien code qui appelle la fonction en passant tous les paramètres :
    Et tu peux recommander aux nouvelles utilisatrices et nouveaux utilisateurs de ta fonction, d’utiliser la nouvelle méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    machin({
      carottes : 1,
      oignons  : 27,
      choux    : 52,
    });
    Ça te permet de rajouter des paramètres sans risquer de casser quoi que ce soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function machin(choux, carottes, oignons) {
      "use strict";
     
      // on a rajouté deux paramètres, sans changer la signature de la fonction
      let navets, poireaux;
     
      if ("object" === typeof choux) {
        let args = choux;
     
        choux    = args.choux;
        carottes = args.carottes;
        oignons  = args.oignons;
     
        navets   = args.navets;
        poireaux = args.poireaux;
      }
     
      ...
    }
    Et voilà, avec cette méthode tu peux ajouter autant de paramètres que tu veux à tes fonctions, et avec une grande souplesse.

    Bien sûr, il ne faut pas oublier de tester l’existence ou non des valeurs, et de mettre une valeur par défaut si besoin.
    Par exemple, si le code appellant ne passe pas de valeur pour navet, tu as alors une propriété args.navets qui est undefined. Il faut donc tester if (undefined === navets) { ... }, ou plus simplement if (!navets) { ... }.

    Mais ça, j’ai vu que tu le faisais déjà dans ton code

    (*) Certaines ou certains objecteront que c’est le boulot de l’IDE de se souvenir à ta place. Mais tu ne peux pas imposer aux gens l’utilisation d’un IDE, c’est une question de préférences.

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    en tout cas merci pour ces éléments, je vais tenter de les appliquer
    merci beaucoup pour le temps passé, très sympa :-)

    bruno

Discussions similaires

  1. Player Directshow et playlist
    Par zoylamb dans le forum DirectX
    Réponses: 1
    Dernier message: 17/06/2011, 21h02
  2. Player MP3 et playlist HTML
    Par okoweb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/12/2010, 11h32
  3. Réponses: 0
    Dernier message: 04/10/2008, 16h49
  4. Player mp3 avec playlist dissosciée
    Par Krustig dans le forum Débuter
    Réponses: 2
    Dernier message: 04/01/2008, 14h10
  5. Player flv + playlist, fonctionne offline pas online
    Par eio dans le forum Intégration
    Réponses: 7
    Dernier message: 09/09/2007, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo