123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 |
- /* Librairie Autoplay pour muzi.ch */
- $(document).ready(function(){
-
- /*
- * Section commune
- */
-
- // Liste de données pour la lecture
- var autoplay_list = new Array;
- // object player
- var autoplay_player = null;
- // Ritournelle pour le lecteur soundcloud (une seule variable sinon bug)
- var autoplay_player_soundcloud = null;
- // identifiant de la division du lecteur
- var autoplay_player_div_id = "autoplay_player";
- // identifiant du lecteur
- var autoplay_player_id = "autoplay_player_id";
- // étape de lecture, on commence naturellement a 0
- var autoplay_step = 0;
- // On utilise cette variable pour savoir quel est l'élélement choisis en
- // dernier (cas du brute click)
- var autoplay_last_element_id = null;
- // Pour savoir si on est en bout de ligne
- var autoplay_no_more = false;
- // Pour savoir si le lecteur générique a déjà été lancé
- var autoplay_generic_player_launched = false;
- // contient l'objet playlist du lecteur générique
- var autoplay_generic_player_playlist = null;
- // contient le nombre de tracks dans la playlist du lecteur générique
- var autoplay_generic_player_playlist_count = 0;
- // Index dernière piste lu par lecteur générique
- var autoplay_generic_player_index_track_previous = 0;
- // pour notre hack: les données previous track, current track sont
- // interprété différemment lorsque on est a notre 2ème lecture ...
- var autoplay_generic_player_first_launch = null;
-
- // En cas de click sur un bouton de lecture
- $('a#autoplay_launch').click(function(){
-
- // On ouvre la boite de dialogue pendant la demande ajax
- open_popin_dialog('autoplay');
- $('img#autoplay_loader').show();
-
- $.getJSON($(this).attr('href'), function(response) {
- if (response.status == 'mustbeconnected')
- {
- $(location).attr('href', url_index);
- }
-
- if (response.status == 'success')
- {
-
- // hack
- autoplay_generic_player_playlist = new jPlayerPlaylist({
- jPlayer: "#jquery_jplayer_1",
- cssSelectorAncestor: "#jp_container_1"
- },
- []
- , {
- playlistOptions: {
- autoPlay: true,
- enableRemoveControls: true
- },
- swfPath: "/jplayer/js",
- supplied: "mp3",
- wmode: "window"
- });
-
- // On récupère la liste d'élèments
- autoplay_list = response.data;
- // On renseigne l'id de l'élèment en cours de demande de lecture
- autoplay_last_element_id = autoplay_list[0].element_id;
- // On par sur l'index premier de la liste de lecture
- autoplay_step = 0;
- // On lance la lecture auo
- autoplay_run(autoplay_step, false);
- }
-
- });
- return false;
- });
-
- /**
- * Cette fonction est chargé de récupérer le bloc élent avec le nom, la note etc ...
- * @param {int} element_id
- * @param {boolean} timed
- */
- function autoplay_load_element(element_id, timed)
- {
- // Si on a pas retardé cette demande
- if (!timed)
- {
- // Alors il faut que l'on attende un peu, au cas ou il y avait plein de clics simultanés
- $('#autoplay_element_loader').show();
- $('li#autoplay_element_container').html('');
- // On relance le bousin dans x millisecondes
- setTimeout(autoplay_load_element, 500, element_id, true);
- }
- else
- {
- // On ne lance la procédure que si il n'y as pas eu de nouvelle demande depuis
- if (autoplay_last_element_id == element_id)
- {
- $.getJSON(url_element_dom_get_one_autoplay+'/'+element_id, function(response) {
-
- $('#autoplay_element_loader').hide();
-
- if (response.status == 'mustbeconnected')
- {
- $(location).attr('href', url_index);
- }
-
- if (response.status == 'success' && autoplay_last_element_id == element_id)
- {
- if (!autoplay_no_more)
- {
- // On récupère la liste d'élèments
- $('li#autoplay_element_container').html(response.data);
- }
- else
- {
- $('li#autoplay_element_container').html('');
- }
- }
-
- });
- }
-
- }
- }
-
- /**
- * Lancement d'une lecture d'élément
- * @param {int} step
- * @param {boolean} timed
- */
- function autoplay_run(step, timed)
- {
-
- if (!timed)
- {
- // En premier lieu on réinitialise le lecteur en détruisant le dom qui a
- // pu être créé par la lecture précedente.
- autoplay_clean_for_player_creation();
-
- // Pause des lecteurs potentiels
- autoplay_pause_all_players();
-
- // On la relance au cas ou il y a eu de multiples clicks
- setTimeout(autoplay_run, 500, step, true);
- }
- else if (autoplay_last_element_id == autoplay_list[step].element_id)
- {
-
- if (autoplay_list.length)
- {
-
- if (array_key_exists(step, autoplay_list))
- {
- // Youtube case
- if (autoplay_list[step].element_type == 'youtube.com' || autoplay_list[step].element_type == 'youtu.be')
- {
- autoplay_load_element(autoplay_list[step].element_id, false);
- youtube_create_player(autoplay_list[step].element_ref_id);
- }
-
- if (autoplay_list[step].element_type == 'soundcloud.com')
- {
- autoplay_load_element(autoplay_list[step].element_id, false);
- soundcloud_create_player(autoplay_list[step].element_ref_id, autoplay_list[step].element_normalized_url);
- }
-
- if (autoplay_list[step].element_type == 'jamendo.com')
- {
- autoplay_load_element(autoplay_list[step].element_id, false);
- jamendo_create_player(autoplay_list[step].element_id);
- }
-
- }
-
- }
- else
- {
- autoplay_display_nomore();
- }
-
- }
- }
-
- /**
- * Nettoyage du lecteur autoplay pour l'ouverture d'un nouvel élément
- *
- */
- function autoplay_clean_for_player_creation(clean_element)
- {
- autoplay_pause_all_players();
-
- $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
- $('#autoplay_noelements_text').hide();
- $('div#autoplay_player_generic').hide();
-
- if (clean_element)
- {
- $('li#autoplay_element_container').html('');
- }
- $('img#autoplay_loader').show();
- }
-
- /**
- * Fonction qui regroupe les méthode de mise en pause de tout les lecteurs
- *
- */
- function autoplay_pause_all_players()
- {
- // Pas youtube car on détruit son lecteur
- soundcloud_stop_player();
- jamendo_stop_player();
- }
-
- /**
- * Affichage du message indiquant qu'il n'y a plus rien a lire
- */
- function autoplay_display_nomore()
- {
- autoplay_no_more = true;
- $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
- $('li#autoplay_element_container').html('');
- $('#autoplay_noelements_text').show();
- $('img#autoplay_loader').hide();
- if (autoplay_player_soundcloud)
- {
- $('div#autoplay_player_soundcloud').hide();
- autoplay_player_soundcloud.pause();
- }
- }
-
- // Avancer d'un éleement dans la liste
- function autoplay_next()
- {
- autoplay_no_more = false;
- autoplay_step++;
- if (array_key_exists(autoplay_step, autoplay_list))
- {
- autoplay_last_element_id = autoplay_list[autoplay_step].element_id;
- autoplay_run(autoplay_step, false);
- }
- else
- {
- autoplay_display_nomore();
- autoplay_step = autoplay_list.length;
- }
- }
-
- // Reculer d'un élement dans la liste
- function autoplay_previous()
- {
- autoplay_no_more = false;
- autoplay_step--;
- if (array_key_exists(autoplay_step, autoplay_list))
- {
- autoplay_last_element_id = autoplay_list[autoplay_step].element_id;
- autoplay_run(autoplay_step, false);
- }
- else
- {
- autoplay_display_nomore();
- autoplay_step = -1;
- }
- }
-
- // bouton précedent
- $('a#autoplay_previous').click(function(){autoplay_previous();});
- // bouton suivant
- $('a#autoplay_next').click(function(){autoplay_next();});
- // Fermeture de la lecture auto
- $('a#autoplay_close').click(function(){
- // Fond gris
- $('#fade').fadeOut(1000, function(){$('#fade').remove();});
- // On cache le lecteur
- $('#autoplay').hide();
- // On vide le dom du lecteur
- $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
- // Plus rien de dois être lu
- autoplay_pause_all_players();
- // TODO: Pour le moment c'est surtout pour détruire la variable du lecteur générique
- autoplay_clean_for_player_creation();
- });
-
-
- /*
- *
- *
- *
- * Fonction youtube.com et youtu.be
- *
- *
- *
- */
-
- // Création du lecteur FLASH youtube
- function youtube_create_player(ref_id)
- {
- // Préparation du terrain
- autoplay_clean_for_player_creation();
-
- var playerapiid = "ytplayerapiid";
- var params = {allowScriptAccess: "always"};
- var atts = {id: autoplay_player_id};
- swfobject.embedSWF(
- "http://www.youtube.com/v/"+ref_id+"?enablejsapi=1&playerapiid="+playerapiid+"&version=3",
- autoplay_player_div_id,
- "425",
- "356",
- "8",
- null,
- null,
- params,
- atts
- );
- }
-
- // Fonction appelé par l'ActionScript (flash) du lecteur youtube quand il est prêt
- window.onYouTubePlayerReady = function()
- {
- autoplay_player = document.getElementById(autoplay_player_id);
- autoplay_player.addEventListener("onStateChange", "youtube_StateChange");
- autoplay_player.addEventListener("onError", "youtube_error");
- $('img#autoplay_loader').hide();
- youtube_play();
- }
-
- // Fonction appelé par le lecteur youtube quand il change d'état
- window.youtube_StateChange = function(newState)
- {
- // Lorsque la lecture est terminé
- if (newState === 0)
- {
- autoplay_next();
- }
- }
-
- // Fonction appelé par le lecteur youtube quand il y a une erreur
- window.youtube_error = function(newState)
- {
- autoplay_next();
- }
-
- // Lecture
- function youtube_play()
- {
- if (autoplay_player)
- {
- autoplay_player.playVideo();
- }
- }
-
- /*
- *
- *
- *
- * Fonctions soundcloud
- *
- *
- *
- */
-
- function soundcloud_create_player(ref_id, ref_url)
- {
-
- // Préparation du terrain
- autoplay_clean_for_player_creation();
-
- // Variable dans lequelle on met l'index dela track lu précedamment
- var index_track_previous = 0;
-
- if (!$('iframe#soundcloud_iframe_player').length)
- {
- $('div#autoplay_player_soundcloud').show();
-
- // TODO: on garde ?
- SC.initialize({
- client_id: '39946ea18e3d78d64c0ac95a025794e1'
- });
-
- // Aucun lecteur soundcloud n'a été ouvert pour le moment
- $('#autoplay_player_soundcloud').html(
- '<iframe id="soundcloud_iframe_player" src="http://w.soundcloud.com/player/?url='
- +ref_url+'&show_artwork=false&auto_play=true" width="100%" '
- +'height="370" scrolling="no" frameborder="no"></iframe>'
- );
-
- //console.debug(document.getElementById('sc-widget_'+ref_id));
- var widgetIframe = document.getElementById('soundcloud_iframe_player');
- autoplay_player_soundcloud = SC.Widget(widgetIframe);
-
- SC.get(ref_url, function(track, error) {
- if (error)
- {
- // En cas d'erreur on passe a al suivante
- autoplay_next();
- }
- else
- {
- // Lorsque le lecteur est prêt on lance la lecture
- autoplay_player_soundcloud.bind(SC.Widget.Events.READY, function ()
- {
- autoplay_player_soundcloud.play();
- $('img#autoplay_loader').hide();
-
- });
-
- autoplay_player_soundcloud.bind(SC.Widget.Events.PLAY, function ()
- {
- // Lorsque le lecteur commence une lecture
- // On garde en mémoire l'index de la lecture en cours
- autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
- index_track_previous = value;
- });
- });
-
- // Lorsque le lecteur a terminé sa lecture, on passe au suivant
- autoplay_player_soundcloud.bind(SC.Widget.Events.FINISH, function ()
- {
-
- // Cette variable contient le nombre de pistes dans la liste de lecture
- var track_count = 1;
- autoplay_player_soundcloud.getSounds(function(value){
- // On récupère le nomre de pistes
- track_count = value.length;
- });
-
- autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
-
- // Si la index_track_previous est la même maintenant que la piste
- // est terminé, c'est que l'on est arrivé en fin de liste.
- // Cependant, si c'est une liste avec une piste unique, on passe
- // tout de suite a la suite
- if (value == index_track_previous || track_count == 1)
- {
- autoplay_next();
- }
-
- // Sinon on prend al nouvelle valeur
- index_track_previous = value;
-
- });
-
- });
- }
- });
-
-
-
- }
- else
- {
- SC.get(ref_url, function(track, error) {
- if (error)
- {
- // En cas d'erreur on passe a al suivante
- autoplay_next();
- }
- else
- {
-
- // Le lecteur iframe existait déjà
- $('div#autoplay_player_soundcloud').show();
- autoplay_player_soundcloud.load(ref_url+'&show_artwork=false&auto_play=true');
- //autoplay_player_soundcloud.play();
- $('img#autoplay_loader').hide();
-
- }
- });
- }
-
- }
-
- function soundcloud_stop_player()
- {
- if (autoplay_player_soundcloud)
- {
- autoplay_player_soundcloud.pause();
- }
- $('div#autoplay_player_soundcloud').hide();
- }
-
- /*
- *
- *
- *
- * Jamendo.com (utilise le lecteur générique)
- *
- *
- */
-
- function jamendo_create_player(element_id)
- {
- autoplay_generic_player_load(element_id);
- }
-
- function jamendo_stop_player()
- {
- autoplay_generic_player_stop();
- }
-
-
- /*
- *
- *
- * Lecteur générique
- *
- */
-
- /**
- * Objet son
- * @param {string} title Nom du morceau qui sera affiché dans la liste de lecture
- * @param {string} mp3 adresse du flux sonore
- */
- function GenericSong(title, mp3)
- {
- this.title = title;
- this.mp3 = mp3;
- }
-
- /**
- * Fonction de lecture d'un élèment avec le lecteur générique
- *
- * @param {int} element_id identifiant internet de l'élément
- */
- function autoplay_generic_player_load(element_id)
- {
- // On doit récupérer les informations pour la lecture streaming
- $.getJSON(url_element_get_stream_data+'/'+element_id, function(response) {
-
- if (response.status == 'mustbeconnected')
- {
- $(location).attr('href', url_index);
- }
-
- if (response.status == 'success')
- {
- if (response.data)
- {
-
- // Pour stocker localement les données de notre base
- var autoplay_generic_playlist_data = new Array;
-
- for(var i = 0; i < response.data.length; i++)
- {
- // On construit un objet son pour constituer une bibliothèque (autoplay_generic_playlist_data)
- var song = new GenericSong(response.data[i].name, response.data[i].url);
- autoplay_generic_playlist_data[i] = song;
- }
-
- // On garde en mémoire le nombre de piste que l'on à, ca nous sera utlie pour
- // savoir si on est en fin de lecture par exemple
- autoplay_generic_player_playlist_count = autoplay_generic_playlist_data.length;
-
- $('div#autoplay_player_generic').show();
-
- // On a besoin de savoir si c'est la première fois que l'on charge ce lecteur
- if (autoplay_generic_player_first_launch === null)
- {
- autoplay_generic_player_first_launch = true;
- }
- else if (autoplay_generic_player_first_launch === true)
- {
- autoplay_generic_player_first_launch = false;
- }
-
- // On construit l'objet de jPlayerv avec une playlist
- autoplay_generic_player_playlist = new jPlayerPlaylist({
- jPlayer: "#jquery_jplayer_1",
- cssSelectorAncestor: "#jp_container_1"
- },
- // On stransmet la plsylist a cette position
- autoplay_generic_playlist_data
- , {
- playlistOptions: {
- autoPlay: true,
- enableRemoveControls: true
- },
- swfPath: "/jplayer/js",
- supplied: "mp3",
- wmode: "window"
- });
-
- // On ne bind qu'un seule fois les functions
- if (autoplay_generic_player_launched == false)
- {
-
- // On garde en mémoire la piste lu en ce moment
- $("#jquery_jplayer_1").bind($.jPlayer.event.play, function(event) {
- autoplay_generic_player_index_track_previous = autoplay_generic_player_playlist.current;
- $('img#autoplay_loader').hide();
- });
-
- $("#jquery_jplayer_1").bind($.jPlayer.event.ended, function(event) {
-
- // Si la index_track_previous est la même maintenant que la piste
- // est terminé, c'est que l'on est arrivé en fin de liste.
- // Cependant, si c'est une liste avec une piste unique, on passe
- if (
- (
- // Si c'est la première fois il faut qu'après la lecture ce soit les mêmes index
- ( autoplay_generic_player_first_launch &&
- autoplay_generic_player_index_track_previous == autoplay_generic_player_playlist.current )
- ||
- // Si c'est pas la première fois, on obtient le current avant de passer a al suitante
- // du coup on peut regarder si on était a la dernière piste
- ( !autoplay_generic_player_first_launch &&
- autoplay_generic_player_playlist.current == autoplay_generic_player_playlist_count -1 )
- )
- || autoplay_generic_player_playlist_count == 1
- )
- {
- console.log('next...')
- autoplay_next();
- }
-
- });
-
- $("#jquery_jplayer_1").bind($.jPlayer.event.error, function(event)
- {
- autoplay_next();
- });
-
- }
-
- autoplay_generic_player_launched = true;
- }
- else
- {
- autoplay_next();
- }
- }
-
- });
- }
-
- function autoplay_generic_player_stop()
- {
- $("#jquery_jplayer_1").jPlayer("destroy");
- }
-
- });
|