play.js 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663
  1. ///* Librairie Autoplay pour muzi.ch */
  2. //$(document).ready(function(){
  3. //
  4. // /*
  5. // * Section commune
  6. // */
  7. //
  8. // // Liste de données pour la lecture
  9. // var autoplay_list = new Array;
  10. // // object player
  11. // var autoplay_player = null;
  12. // // Ritournelle pour le lecteur soundcloud (une seule variable sinon bug)
  13. // var autoplay_player_soundcloud = null;
  14. // // identifiant de la division du lecteur
  15. // var autoplay_player_div_id = "autoplay_player";
  16. // // identifiant du lecteur
  17. // var autoplay_player_id = "autoplay_player_id";
  18. // // étape de lecture, on commence naturellement a 0
  19. // var autoplay_step = 0;
  20. // // On utilise cette variable pour savoir quel est l'élélement choisis en
  21. // // dernier (cas du brute click)
  22. // var autoplay_last_element_id = null;
  23. // // Pour savoir si on est en bout de ligne
  24. // var autoplay_no_more = false;
  25. // // Pour savoir si le lecteur générique a déjà été lancé
  26. // var autoplay_generic_player_launched = false;
  27. // // contient l'objet playlist du lecteur générique
  28. // var autoplay_generic_player_playlist = null;
  29. // // contient le nombre de tracks dans la playlist du lecteur générique
  30. // var autoplay_generic_player_playlist_count = 0;
  31. // // Index dernière piste lu par lecteur générique
  32. // var autoplay_generic_player_index_track_previous = 0;
  33. // // pour notre hack: les données previous track, current track sont
  34. // // interprété différemment lorsque on est a notre 2ème lecture ...
  35. // var autoplay_generic_player_first_launch = null;
  36. //
  37. // // En cas de click sur un bouton de lecture
  38. // $('a#autoplay_launch').click(function(){
  39. //
  40. // window.autoplay.start();
  41. // return false;
  42. //
  43. // // On ouvre la boite de dialogue pendant la demande ajax
  44. // open_popin_dialog('autoplay');
  45. // $('img#autoplay_loader').show();
  46. //
  47. // $.getJSON($(this).attr('href'), function(response) {
  48. // if (response.status == 'mustbeconnected')
  49. // {
  50. // $(location).attr('href', url_index);
  51. // }
  52. //
  53. // if (response.status == 'success')
  54. // {
  55. //
  56. // // hack
  57. // autoplay_generic_player_playlist = new jPlayerPlaylist({
  58. // jPlayer: "#jquery_jplayer_1",
  59. // cssSelectorAncestor: "#jp_container_1"
  60. // },
  61. // []
  62. // , {
  63. // playlistOptions: {
  64. // autoPlay: true,
  65. // enableRemoveControls: true
  66. // },
  67. // swfPath: "/jplayer/js",
  68. // supplied: "mp3",
  69. // wmode: "window"
  70. // });
  71. //
  72. // if (response.data.length)
  73. // {
  74. // // On récupère la liste d'élèments
  75. // autoplay_list = response.data;
  76. // // On renseigne l'id de l'élèment en cours de demande de lecture
  77. // autoplay_last_element_id = autoplay_list[0].element_id;
  78. // // On par sur l'index premier de la liste de lecture
  79. // autoplay_step = 0;
  80. // // On lance la lecture auo
  81. // autoplay_run(autoplay_step, false);
  82. // }
  83. // else
  84. // {
  85. // autoplay_display_nomore();
  86. // }
  87. // }
  88. //
  89. // });
  90. // return false;
  91. // });
  92. //
  93. // /**
  94. // * Cette fonction est chargé de récupérer le bloc élent avec le nom, la note etc ...
  95. // * @param {int} element_id
  96. // * @param {boolean} timed
  97. // */
  98. // function autoplay_load_element(element_id, timed)
  99. // {
  100. // // Si on a pas retardé cette demande
  101. // if (!timed)
  102. // {
  103. // // Alors il faut que l'on attende un peu, au cas ou il y avait plein de clics simultanés
  104. // $('#autoplay_element_loader').show();
  105. // $('li#autoplay_element_container').html('');
  106. // // On relance le bousin dans x millisecondes
  107. // setTimeout(autoplay_load_element, 500, element_id, true);
  108. // }
  109. // else
  110. // {
  111. // // On ne lance la procédure que si il n'y as pas eu de nouvelle demande depuis
  112. // if (autoplay_last_element_id == element_id)
  113. // {
  114. // $.getJSON(url_element_dom_get_one_autoplay+'/'+element_id, function(response) {
  115. //
  116. // $('#autoplay_element_loader').hide();
  117. //
  118. // if (response.status == 'mustbeconnected')
  119. // {
  120. // $(location).attr('href', url_index);
  121. // }
  122. //
  123. // if (response.status == 'success' && autoplay_last_element_id == element_id)
  124. // {
  125. // if (!autoplay_no_more)
  126. // {
  127. // // On récupère la liste d'élèments
  128. // $('li#autoplay_element_container').html(response.data);
  129. // }
  130. // else
  131. // {
  132. // $('li#autoplay_element_container').html('');
  133. // }
  134. // }
  135. //
  136. // });
  137. // }
  138. //
  139. // }
  140. // }
  141. //
  142. // /**
  143. // * Lancement d'une lecture d'élément
  144. // * @param {int} step
  145. // * @param {boolean} timed
  146. // */
  147. // function autoplay_run(step, timed)
  148. // {
  149. //
  150. // if (!timed)
  151. // {
  152. // // En premier lieu on réinitialise le lecteur en détruisant le dom qui a
  153. // // pu être créé par la lecture précedente.
  154. // autoplay_clean_for_player_creation();
  155. //
  156. // // Pause des lecteurs potentiels
  157. // autoplay_pause_all_players();
  158. //
  159. // // On la relance au cas ou il y a eu de multiples clicks
  160. // setTimeout(autoplay_run, 500, step, true);
  161. // }
  162. // else if (autoplay_last_element_id == autoplay_list[step].element_id)
  163. // {
  164. //
  165. // if (autoplay_list.length)
  166. // {
  167. //
  168. // if (array_key_exists(step, autoplay_list))
  169. // {
  170. // // Youtube case
  171. // if (autoplay_list[step].element_type == 'youtube.com' || autoplay_list[step].element_type == 'youtu.be')
  172. // {
  173. // autoplay_load_element(autoplay_list[step].element_id, false);
  174. // youtube_create_player(autoplay_list[step].element_ref_id);
  175. // }
  176. //
  177. // if (autoplay_list[step].element_type == 'soundcloud.com')
  178. // {
  179. // autoplay_load_element(autoplay_list[step].element_id, false);
  180. // soundcloud_create_player(autoplay_list[step].element_ref_id, autoplay_list[step].element_normalized_url);
  181. // }
  182. //
  183. // if (autoplay_list[step].element_type == 'jamendo.com')
  184. // {
  185. // autoplay_load_element(autoplay_list[step].element_id, false);
  186. // jamendo_create_player(autoplay_list[step].element_id);
  187. // }
  188. //
  189. // }
  190. //
  191. // }
  192. // else
  193. // {
  194. // autoplay_display_nomore();
  195. // }
  196. //
  197. // }
  198. // }
  199. //
  200. // /**
  201. // * Nettoyage du lecteur autoplay pour l'ouverture d'un nouvel élément
  202. // *
  203. // */
  204. // function autoplay_clean_for_player_creation(clean_element)
  205. // {
  206. // autoplay_pause_all_players();
  207. //
  208. // $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
  209. // $('#autoplay_noelements_text').hide();
  210. // $('div#autoplay_player_generic').hide();
  211. //
  212. // if (clean_element)
  213. // {
  214. // $('li#autoplay_element_container').html('');
  215. // }
  216. // $('img#autoplay_loader').show();
  217. // }
  218. //
  219. // /**
  220. // * Fonction qui regroupe les méthode de mise en pause de tout les lecteurs
  221. // *
  222. // */
  223. // function autoplay_pause_all_players()
  224. // {
  225. // // Pas youtube car on détruit son lecteur
  226. // soundcloud_stop_player();
  227. // jamendo_stop_player();
  228. // }
  229. //
  230. // /**
  231. // * Affichage du message indiquant qu'il n'y a plus rien a lire
  232. // */
  233. // function autoplay_display_nomore()
  234. // {
  235. // autoplay_no_more = true;
  236. // $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
  237. // $('li#autoplay_element_container').html('');
  238. // $('#autoplay_noelements_text').show();
  239. // $('img#autoplay_loader').hide();
  240. // $('img#autoplay_element_loader').hide();
  241. // if (autoplay_player_soundcloud)
  242. // {
  243. // $('div#autoplay_player_soundcloud').hide();
  244. // autoplay_player_soundcloud.pause();
  245. // }
  246. // }
  247. //
  248. // // Avancer d'un éleement dans la liste
  249. // function autoplay_next()
  250. // {
  251. // autoplay_no_more = false;
  252. // autoplay_step++;
  253. // if (array_key_exists(autoplay_step, autoplay_list))
  254. // {
  255. // autoplay_last_element_id = autoplay_list[autoplay_step].element_id;
  256. // autoplay_run(autoplay_step, false);
  257. // }
  258. // else
  259. // {
  260. // autoplay_display_nomore();
  261. // autoplay_step = autoplay_list.length;
  262. // }
  263. // }
  264. //
  265. // // Reculer d'un élement dans la liste
  266. // function autoplay_previous()
  267. // {
  268. // autoplay_no_more = false;
  269. // autoplay_step--;
  270. // if (array_key_exists(autoplay_step, autoplay_list))
  271. // {
  272. // autoplay_last_element_id = autoplay_list[autoplay_step].element_id;
  273. // autoplay_run(autoplay_step, false);
  274. // }
  275. // else
  276. // {
  277. // autoplay_display_nomore();
  278. // autoplay_step = -1;
  279. // }
  280. // }
  281. //
  282. // // bouton précedent
  283. // //$('a#autoplay_previous').click(function(){autoplay_previous();});
  284. // //// bouton suivant
  285. // //$('a#autoplay_next').click(function(){autoplay_next();});
  286. // //// Fermeture de la lecture auto
  287. // //$('a#autoplay_close').click(function(){
  288. // // // Fond gris
  289. // // $('#fade').fadeOut(1000, function(){$('#fade').remove();});
  290. // // // On cache le lecteur
  291. // // $('#autoplay').hide();
  292. // // // On vide le dom du lecteur
  293. // //
  294. // // window.autoplay.stopAndClearAllPlayers();
  295. // //
  296. // //
  297. // // //$('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
  298. // // //// Plus rien de dois être lu
  299. // // //autoplay_pause_all_players();
  300. // // //// TODO: Pour le moment c'est surtout pour détruire la variable du lecteur générique
  301. // // //autoplay_clean_for_player_creation();
  302. // //});
  303. //
  304. //
  305. // /*
  306. // *
  307. // *
  308. // *
  309. // * Fonction youtube.com et youtu.be
  310. // *
  311. // *
  312. // *
  313. // */
  314. //
  315. // // Création du lecteur FLASH youtube
  316. // function youtube_create_player(ref_id)
  317. // {
  318. // // Préparation du terrain
  319. // autoplay_clean_for_player_creation();
  320. //
  321. // var playerapiid = "ytplayerapiid";
  322. // var params = {allowScriptAccess: "always"};
  323. // var atts = {id: autoplay_player_id};
  324. // swfobject.embedSWF(
  325. // "http://www.youtube.com/v/"+ref_id+"?enablejsapi=1&playerapiid="+playerapiid+"&version=3",
  326. // autoplay_player_div_id,
  327. // "425",
  328. // "356",
  329. // "8",
  330. // null,
  331. // null,
  332. // params,
  333. // atts
  334. // );
  335. // }
  336. //
  337. // // Fonction appelé par l'ActionScript (flash) du lecteur youtube quand il est prêt
  338. // window.onYouTubePlayerReady = function()
  339. // {
  340. // autoplay_player = document.getElementById(autoplay_player_id);
  341. // autoplay_player.addEventListener("onStateChange", "youtube_StateChange");
  342. // autoplay_player.addEventListener("onError", "youtube_error");
  343. // $('img#autoplay_loader').hide();
  344. // youtube_play();
  345. // }
  346. //
  347. // // Fonction appelé par le lecteur youtube quand il change d'état
  348. // window.youtube_StateChange = function(newState)
  349. // {
  350. // // Lorsque la lecture est terminé
  351. // if (newState === 0)
  352. // {
  353. // autoplay_next();
  354. // }
  355. // }
  356. //
  357. // // Fonction appelé par le lecteur youtube quand il y a une erreur
  358. // window.youtube_error = function(newState)
  359. // {
  360. // autoplay_next();
  361. // }
  362. //
  363. // // Lecture
  364. // function youtube_play()
  365. // {
  366. // if (autoplay_player)
  367. // {
  368. // autoplay_player.playVideo();
  369. // }
  370. // }
  371. //
  372. // /*
  373. // *
  374. // *
  375. // *
  376. // * Fonctions soundcloud
  377. // *
  378. // *
  379. // *
  380. // */
  381. //
  382. // function soundcloud_create_player(ref_id, ref_url)
  383. // {
  384. //
  385. // // Préparation du terrain
  386. // autoplay_clean_for_player_creation();
  387. //
  388. // // Variable dans lequelle on met l'index dela track lu précedamment
  389. // var index_track_previous = 0;
  390. //
  391. // if (!$('iframe#soundcloud_iframe_player').length)
  392. // {
  393. // $('div#autoplay_player_soundcloud').show();
  394. //
  395. // // TODO: on garde ?
  396. // SC.initialize({
  397. // client_id: '39946ea18e3d78d64c0ac95a025794e1'
  398. // });
  399. //
  400. // // Aucun lecteur soundcloud n'a été ouvert pour le moment
  401. // $('#autoplay_player_soundcloud').html(
  402. // '<iframe id="soundcloud_iframe_player" src="http://w.soundcloud.com/player/?url='
  403. // +ref_url+'&show_artwork=false&auto_play=true" width="100%" '
  404. // +'height="370" scrolling="no" frameborder="no"></iframe>'
  405. // );
  406. //
  407. // //console.debug(document.getElementById('sc-widget_'+ref_id));
  408. // var widgetIframe = document.getElementById('soundcloud_iframe_player');
  409. // autoplay_player_soundcloud = SC.Widget(widgetIframe);
  410. //
  411. // SC.get(ref_url, function(track, error) {
  412. // if (error)
  413. // {
  414. // // En cas d'erreur on passe a al suivante
  415. // autoplay_next();
  416. // }
  417. // else
  418. // {
  419. // // Lorsque le lecteur est prêt on lance la lecture
  420. // autoplay_player_soundcloud.bind(SC.Widget.Events.READY, function ()
  421. // {
  422. // autoplay_player_soundcloud.play();
  423. // $('img#autoplay_loader').hide();
  424. //
  425. // });
  426. //
  427. // autoplay_player_soundcloud.bind(SC.Widget.Events.PLAY, function ()
  428. // {
  429. // // Lorsque le lecteur commence une lecture
  430. // // On garde en mémoire l'index de la lecture en cours
  431. // autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
  432. // index_track_previous = value;
  433. // });
  434. // });
  435. //
  436. // // Lorsque le lecteur a terminé sa lecture, on passe au suivant
  437. // autoplay_player_soundcloud.bind(SC.Widget.Events.FINISH, function ()
  438. // {
  439. //
  440. // // Cette variable contient le nombre de pistes dans la liste de lecture
  441. // var track_count = 1;
  442. // autoplay_player_soundcloud.getSounds(function(value){
  443. // // On récupère le nomre de pistes
  444. // track_count = value.length;
  445. // });
  446. //
  447. // autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
  448. //
  449. // // Si la index_track_previous est la même maintenant que la piste
  450. // // est terminé, c'est que l'on est arrivé en fin de liste.
  451. // // Cependant, si c'est une liste avec une piste unique, on passe
  452. // // tout de suite a la suite
  453. // if (value == index_track_previous || track_count == 1)
  454. // {
  455. // autoplay_next();
  456. // }
  457. //
  458. // // Sinon on prend al nouvelle valeur
  459. // index_track_previous = value;
  460. //
  461. // });
  462. //
  463. // });
  464. // }
  465. // });
  466. //
  467. //
  468. //
  469. // }
  470. // else
  471. // {
  472. // SC.get(ref_url, function(track, error) {
  473. // if (error)
  474. // {
  475. // // En cas d'erreur on passe a al suivante
  476. // autoplay_next();
  477. // }
  478. // else
  479. // {
  480. //
  481. // // Le lecteur iframe existait déjà
  482. // $('div#autoplay_player_soundcloud').show();
  483. // autoplay_player_soundcloud.load(ref_url+'&show_artwork=false&auto_play=true');
  484. // //autoplay_player_soundcloud.play();
  485. // $('img#autoplay_loader').hide();
  486. //
  487. // }
  488. // });
  489. // }
  490. //
  491. // }
  492. //
  493. // function soundcloud_stop_player()
  494. // {
  495. // if (autoplay_player_soundcloud)
  496. // {
  497. // autoplay_player_soundcloud.pause();
  498. // }
  499. // $('div#autoplay_player_soundcloud').hide();
  500. // }
  501. //
  502. // /*
  503. // *
  504. // *
  505. // *
  506. // * Jamendo.com (utilise le lecteur générique)
  507. // *
  508. // *
  509. // */
  510. //
  511. // function jamendo_create_player(element_id)
  512. // {
  513. // autoplay_generic_player_load(element_id);
  514. // }
  515. //
  516. // function jamendo_stop_player()
  517. // {
  518. // autoplay_generic_player_stop();
  519. // }
  520. //
  521. //
  522. // /*
  523. // *
  524. // *
  525. // * Lecteur générique
  526. // *
  527. // */
  528. //
  529. // /**
  530. // * Objet son
  531. // * @param {string} title Nom du morceau qui sera affiché dans la liste de lecture
  532. // * @param {string} mp3 adresse du flux sonore
  533. // */
  534. // // EN COMMENTAIRE CAR CODE COPIE VERS play2.js
  535. // //function GenericSong(title, mp3)
  536. // //{
  537. // // this.title = title;
  538. // // this.mp3 = mp3;
  539. // //}
  540. //
  541. // /**
  542. // * Fonction de lecture d'un élèment avec le lecteur générique
  543. // *
  544. // * @param {int} element_id identifiant internet de l'élément
  545. // */
  546. // function autoplay_generic_player_load(element_id)
  547. // {
  548. // // On doit récupérer les informations pour la lecture streaming
  549. // $.getJSON(url_element_get_stream_data+'/'+element_id, function(response) {
  550. //
  551. // if (response.status == 'mustbeconnected')
  552. // {
  553. // $(location).attr('href', url_index);
  554. // }
  555. //
  556. // if (response.status == 'success')
  557. // {
  558. // if (response.data)
  559. // {
  560. //
  561. // // Pour stocker localement les données de notre base
  562. // var autoplay_generic_playlist_data = new Array;
  563. //
  564. // for(var i = 0; i < response.data.length; i++)
  565. // {
  566. // // On construit un objet son pour constituer une bibliothèque (autoplay_generic_playlist_data)
  567. // var song = new GenericSong(response.data[i].name, response.data[i].url);
  568. // autoplay_generic_playlist_data[i] = song;
  569. // }
  570. //
  571. // // On garde en mémoire le nombre de piste que l'on à, ca nous sera utlie pour
  572. // // savoir si on est en fin de lecture par exemple
  573. // autoplay_generic_player_playlist_count = autoplay_generic_playlist_data.length;
  574. //
  575. // $('div#autoplay_player_generic').show();
  576. //
  577. // // On a besoin de savoir si c'est la première fois que l'on charge ce lecteur
  578. // if (autoplay_generic_player_first_launch === null)
  579. // {
  580. // autoplay_generic_player_first_launch = true;
  581. // }
  582. // else if (autoplay_generic_player_first_launch === true)
  583. // {
  584. // autoplay_generic_player_first_launch = false;
  585. // }
  586. //
  587. // // On construit l'objet de jPlayerv avec une playlist
  588. // autoplay_generic_player_playlist = new jPlayerPlaylist({
  589. // jPlayer: "#jquery_jplayer_1",
  590. // cssSelectorAncestor: "#jp_container_1"
  591. // },
  592. // // On stransmet la plsylist a cette position
  593. // autoplay_generic_playlist_data
  594. // , {
  595. // playlistOptions: {
  596. // autoPlay: true,
  597. // enableRemoveControls: true
  598. // },
  599. // swfPath: "/jplayer/js",
  600. // supplied: "mp3",
  601. // wmode: "window"
  602. // });
  603. //
  604. // // On ne bind qu'un seule fois les functions
  605. // if (autoplay_generic_player_launched == false)
  606. // {
  607. //
  608. // // On garde en mémoire la piste lu en ce moment
  609. // $("#jquery_jplayer_1").bind($.jPlayer.event.play, function(event) {
  610. // autoplay_generic_player_index_track_previous = autoplay_generic_player_playlist.current;
  611. // $('img#autoplay_loader').hide();
  612. // });
  613. //
  614. // $("#jquery_jplayer_1").bind($.jPlayer.event.ended, function(event) {
  615. //
  616. // // Si la index_track_previous est la même maintenant que la piste
  617. // // est terminé, c'est que l'on est arrivé en fin de liste.
  618. // // Cependant, si c'est une liste avec une piste unique, on passe
  619. // if (
  620. // (
  621. // // Si c'est la première fois il faut qu'après la lecture ce soit les mêmes index
  622. // ( autoplay_generic_player_first_launch &&
  623. // autoplay_generic_player_index_track_previous == autoplay_generic_player_playlist.current )
  624. // ||
  625. // // Si c'est pas la première fois, on obtient le current avant de passer a al suitante
  626. // // du coup on peut regarder si on était a la dernière piste
  627. // ( !autoplay_generic_player_first_launch &&
  628. // autoplay_generic_player_playlist.current == autoplay_generic_player_playlist_count -1 )
  629. // )
  630. // || autoplay_generic_player_playlist_count == 1
  631. // )
  632. // {
  633. // //console.log('next...')
  634. // autoplay_next();
  635. // }
  636. //
  637. // });
  638. //
  639. // $("#jquery_jplayer_1").bind($.jPlayer.event.error, function(event)
  640. // {
  641. // autoplay_next();
  642. // });
  643. //
  644. // }
  645. //
  646. // autoplay_generic_player_launched = true;
  647. // }
  648. // else
  649. // {
  650. // autoplay_next();
  651. // }
  652. // }
  653. //
  654. // });
  655. // }
  656. //
  657. // function autoplay_generic_player_stop()
  658. // {
  659. // $("#jquery_jplayer_1").jPlayer("destroy");
  660. // }
  661. //
  662. //});