autoplay.js 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. /* Librairie Autoplay pour muzi.ch */
  2. $(document).ready(function(){
  3. /*
  4. * Section commune
  5. */
  6. // Liste de données pour la lecture
  7. var autoplay_list = new Array;
  8. // object player
  9. var autoplay_player = null;
  10. // Ritournelle pour le lecteur soundcloud (une seule variable sinon bug)
  11. var autoplay_player_soundcloud = null;
  12. // identifiant de la division du lecteur
  13. var autoplay_player_div_id = "autoplay_player";
  14. // identifiant du lecteur
  15. var autoplay_player_id = "autoplay_player_id";
  16. // étape de lecture, on commence naturellement a 0
  17. var autoplay_step = 0;
  18. // En cas de click sur un bouton de lecture
  19. $('a#autoplay_launch').click(function(){
  20. // On ouvre la boite de dialogue pendant la demande ajax
  21. open_popin_dialog('autoplay');
  22. $('img#autoplay_loader').show();
  23. $.getJSON($(this).attr('href'), function(response) {
  24. if (response.status == 'mustbeconnected')
  25. {
  26. $(location).attr('href', url_index);
  27. }
  28. if (response.status == 'success')
  29. {
  30. // On récupère la liste d'élèments
  31. autoplay_list = response.data;
  32. autoplay_run(0);
  33. }
  34. });
  35. return false;
  36. });
  37. // Lancement de l'élèment suivant
  38. function autoplay_run(step)
  39. {
  40. // En premier lieu on réinitialise le lecteur en détruisant le dom qui a
  41. // pu être créé par la lecture précedente.
  42. $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
  43. $('#autoplay_noelements_text').hide();
  44. $('li#autoplay_element_container').html('');
  45. $('img#autoplay_loader').show();
  46. ////// TMP to check
  47. if (autoplay_player_soundcloud)
  48. {
  49. autoplay_player_soundcloud.pause();
  50. }
  51. $('div#autoplay_player_soundcloud').hide();
  52. if (autoplay_list.length)
  53. {
  54. if (array_key_exists(step, autoplay_list))
  55. {
  56. // Récupération du dom d'un élement
  57. $.getJSON(url_element_dom_get_one_autoplay+'/'+autoplay_list[step].element_id, function(response) {
  58. if (response.status == 'mustbeconnected')
  59. {
  60. $(location).attr('href', url_index);
  61. }
  62. if (response.status == 'success')
  63. {
  64. // On récupère la liste d'élèments
  65. $('li#autoplay_element_container').html(response.data);
  66. // Youtube case
  67. if (autoplay_list[step].element_type == 'youtube.com' || autoplay_list[step].element_type == 'youtu.be')
  68. {
  69. youtube_create_player(autoplay_list[step].element_ref_id);
  70. }
  71. if (autoplay_list[step].element_type == 'soundcloud.com')
  72. {
  73. soundcloud_create_player(autoplay_list[step].element_ref_id, autoplay_list[step].element_normalized_url);
  74. }
  75. }
  76. });
  77. }
  78. }
  79. else
  80. {
  81. autoplay_display_nomore();
  82. }
  83. }
  84. function autoplay_display_nomore()
  85. {
  86. $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
  87. $('li#autoplay_element_container').html('');
  88. $('#autoplay_noelements_text').show();
  89. $('img#autoplay_loader').hide();
  90. if (autoplay_player_soundcloud)
  91. {
  92. $('div#autoplay_player_soundcloud').hide();
  93. autoplay_player_soundcloud.pause();
  94. }
  95. }
  96. // Avancer d'un élelement dans la liste
  97. function autoplay_next()
  98. {
  99. autoplay_step++;
  100. if (array_key_exists(autoplay_step, autoplay_list))
  101. {
  102. autoplay_run(autoplay_step);
  103. }
  104. else
  105. {
  106. autoplay_display_nomore();
  107. autoplay_step = autoplay_list.length;
  108. }
  109. }
  110. // Reculer d'un élement dans la liste
  111. function autoplay_previous()
  112. {
  113. autoplay_step--;
  114. if (array_key_exists(autoplay_step, autoplay_list))
  115. {
  116. autoplay_run(autoplay_step);
  117. }
  118. else
  119. {
  120. autoplay_display_nomore();
  121. autoplay_step = -1;
  122. }
  123. }
  124. // bouton précedent
  125. $('a#autoplay_previous').click(function(){autoplay_previous();});
  126. // bouton suivant
  127. $('a#autoplay_next').click(function(){autoplay_next();});
  128. // Fermeture de la lecture auto
  129. $('a#autoplay_close').click(function(){
  130. // Fond gris
  131. $('#fade').fadeOut(1000, function(){$('#fade').remove();});
  132. // On cache le lecteur
  133. $('#autoplay').hide();
  134. // On vide le dom du lecteur
  135. $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
  136. });
  137. /*
  138. *
  139. *
  140. *
  141. * Fonction youtube.com et youtu.be
  142. *
  143. *
  144. *
  145. */
  146. // Création du lecteur FLASH youtube
  147. function youtube_create_player(ref_id)
  148. {
  149. var playerapiid = "ytplayerapiid";
  150. var params = {allowScriptAccess: "always"};
  151. var atts = {id: autoplay_player_id};
  152. swfobject.embedSWF(
  153. "http://www.youtube.com/v/"+ref_id+"?enablejsapi=1&playerapiid="+playerapiid+"&version=3",
  154. autoplay_player_div_id,
  155. "425",
  156. "356",
  157. "8",
  158. null,
  159. null,
  160. params,
  161. atts
  162. );
  163. }
  164. // Fonction appelé par l'ActionScript (flash) du lecteur youtube quand il est prêt
  165. window.onYouTubePlayerReady = function()
  166. {
  167. autoplay_player = document.getElementById(autoplay_player_id);
  168. autoplay_player.addEventListener("onStateChange", "youtube_StateChange");
  169. $('img#autoplay_loader').hide();
  170. youtube_play();
  171. }
  172. // Fonction appelé par le lecteur youtube quand il change d'état
  173. window.youtube_StateChange = function(newState)
  174. {
  175. // Lorsque la lecture est terminé
  176. if (newState === 0)
  177. {
  178. autoplay_next();
  179. }
  180. }
  181. // Lecture
  182. function youtube_play()
  183. {
  184. if (autoplay_player)
  185. {
  186. autoplay_player.playVideo();
  187. }
  188. }
  189. /*
  190. *
  191. *
  192. * Fonctions soundcloud
  193. *
  194. *
  195. *
  196. */
  197. function soundcloud_create_player(ref_id, ref_url)
  198. {
  199. // Variable dans lequelle on met l'index dela track lu précedamment
  200. var index_track_previous = 0;
  201. if (!$('iframe#soundcloud_iframe_player').length)
  202. {
  203. $('div#autoplay_player_soundcloud').show();
  204. // TODO: on garde ?
  205. SC.initialize({
  206. client_id: '39946ea18e3d78d64c0ac95a025794e1'
  207. });
  208. // Aucun lecteur soundcloud n'a été ouvert pour le moment
  209. $('#autoplay_player_soundcloud').html(
  210. '<iframe id="soundcloud_iframe_player" src="http://w.soundcloud.com/player/?url='
  211. +ref_url+'&show_artwork=false&auto_play=true" width="100%" '
  212. +'height="370" scrolling="no" frameborder="no"></iframe>'
  213. );
  214. //console.debug(document.getElementById('sc-widget_'+ref_id));
  215. var widgetIframe = document.getElementById('soundcloud_iframe_player');
  216. autoplay_player_soundcloud = SC.Widget(widgetIframe);
  217. // Lorsque le lecteur est prêt on lance la lecture
  218. autoplay_player_soundcloud.bind(SC.Widget.Events.READY, function ()
  219. {
  220. autoplay_player_soundcloud.play();
  221. $('img#autoplay_loader').hide();
  222. });
  223. autoplay_player_soundcloud.bind(SC.Widget.Events.PLAY, function ()
  224. {
  225. // Lorsque le lecteur commence une lecture
  226. // On garde en mémoire l'index de la lecture en cours
  227. autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
  228. index_track_previous = value;
  229. });
  230. });
  231. // Lorsque le lecteur a terminé sa lecture, on passe au suivant
  232. autoplay_player_soundcloud.bind(SC.Widget.Events.FINISH, function ()
  233. {
  234. // Cette variable contient le nombre de pistes dans la liste de lecture
  235. var track_count = 1;
  236. autoplay_player_soundcloud.getSounds(function(value){
  237. // On récupère le nomre de pistes
  238. track_count = value.length;
  239. });
  240. autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
  241. // Si la index_track_previous est la même maintenant que la piste
  242. // est terminé, c'est que l'on est arrivé en fin de liste.
  243. // Cependant, si c'est une liste avec une piste unique, on passe
  244. // tout de suite a la suite
  245. if (value == index_track_previous || track_count == 1)
  246. {
  247. autoplay_next();
  248. }
  249. // Sinon on prend al nouvelle valeur
  250. index_track_previous = value;
  251. });
  252. });
  253. }
  254. else
  255. {
  256. // Le lecteur iframe existait déjà
  257. $('div#autoplay_player_soundcloud').show();
  258. autoplay_player_soundcloud.load(ref_url+'&show_artwork=false&auto_play=true');
  259. //autoplay_player_soundcloud.play();
  260. $('img#autoplay_loader').hide();
  261. }
  262. }
  263. });