Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2012
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.32 KB | None | 0 0
  1. /**
  2. * @file
  3. * Drupal behaviors for the jPlayer audio player.
  4. *
  5. * Significant modifcations made by Derek Duoba
  6. * 9-6-2011
  7. */
  8.  
  9. (function ($) {
  10.  
  11. Drupal.jPlayer = Drupal.jPlayer || { active: false };
  12.  
  13. Drupal.behaviors.jPlayer = function(context) {
  14. $('.jplayer', context).each(function() {
  15. var wrapper = $(this).parent().get(0);
  16. var player = this;
  17. var playerId = this.id;
  18. var playerType = $(this).attr('rel') ? 'single' : 'playlist';
  19. var playerPlayTime = $(wrapper).find('.jp-play-time').get(0);
  20. var playerTotalTime = $(wrapper).find('.jp-total-time').get(0);
  21. var active = 0; // The current playlist item.
  22. var playlist = []; // An array of DOM element links.
  23.  
  24. // Custom variables to implement continuous play
  25. // Get the next player element
  26. var next = $(this).next();
  27.  
  28. // Get the preceeding player element
  29. var previous = $(this).prev();
  30.  
  31. // This is the URL of the current element
  32. var url = $(this).attr('rel');
  33.  
  34. // Multi-player specific code.
  35. if (playerType == 'playlist') {
  36.  
  37. // Enable clicking links within the playlist. (This has been modified to allow link element clicks)
  38. $(wrapper).find('.jp-playlist li a.track_info').each(function(n) {
  39. if ($(player).attr('rel') != '') {
  40. $(player).attr('rel', this.href);
  41. }
  42. playlist.push(this);
  43. $(this).click(function() {
  44. active = n;
  45. Drupal.jPlayer.setActive(wrapper, player, playlist, n);
  46. Drupal.jPlayer.play(wrapper, player);
  47. return false;
  48. });
  49. });
  50.  
  51. // CUSTOM CODE Change track title on click in playlist players
  52. $(wrapper).find('.jp-playlist li a.track_info').click(function() {
  53. //var $this = $(this);
  54. var $this = $('.jp-playlist li.jplayer_playlist_current a.track_info');
  55. var $trackname = $('.trackname span').fadeOut(300, function () {
  56. $trackname.text($this.text());
  57. //marquee('.trackname span');
  58. $trackname.fadeIn(300);
  59. });
  60. return false;
  61. });
  62.  
  63. // Enable play, pause, and stop buttons.
  64. $(wrapper).find('a.jp-play').click(function() {
  65. Drupal.jPlayer.play(wrapper, player);
  66. return false;
  67. });
  68. $(wrapper).find('a.jp-pause').click(function() {
  69. Drupal.jPlayer.pause(wrapper, player);
  70. return false;
  71. });
  72. $(wrapper).find('a.jp-stop').click(function() {
  73. Drupal.jPlayer.stop(wrapper, player);
  74. return false;
  75. });
  76.  
  77. // Enable next and previous buttons.
  78. $(wrapper).find('a.jp-next').click(function() {
  79. active = Drupal.jPlayer.next(wrapper, player, playlist, active);
  80. Drupal.jPlayer.play(wrapper, player);
  81. var $this = $('.jp-playlist li.jplayer_playlist_current a.track_info');
  82. var $trackname = $('.trackname span').fadeOut(300, function() {
  83. $trackname.text($this.text());
  84. $trackname.fadeIn(300);
  85. });
  86. return false;
  87. });
  88. $(wrapper).find('a.jp-previous').click(function() {
  89. active = Drupal.jPlayer.previous(wrapper, player, playlist, active);
  90. Drupal.jPlayer.play(wrapper, player);
  91. var $this = $('.jp-playlist li.jplayer_playlist_current a.track_info');
  92. var $trackname = $('.trackname span').fadeOut(300, function() {
  93. $trackname.text($this.text());
  94. $trackname.fadeIn(300);
  95. });
  96. return false;
  97. });
  98.  
  99. } else if (playerType == 'single') {
  100.  
  101. // CUSTOM CODE add "active" to the current single player's class
  102. $(wrapper).find('a.jp-play').click(function() {
  103. //Drupal.jPlayer.play(wrapper, player);
  104. $(wrapper).find('.jp-title').addClass('active');
  105. return false;
  106. });
  107.  
  108. }
  109.  
  110. // Actually initialize the player.
  111. $(player).jPlayer({
  112. ready: function() {
  113. this.element.jPlayer('setFile', this.element.attr('rel'));
  114. if (Drupal.settings.jPlayer.autoPlay && !Drupal.jPlayer.active) {
  115. if (playerType == 'playlist') {
  116. Drupal.jPlayer.setActive(wrapper, player, playlist, active);
  117. }
  118. Drupal.jPlayer.play(wrapper, player);
  119. }
  120. },
  121. swfPath: Drupal.settings.jPlayer.swfPath,
  122. volume: 50,
  123. oggSupport: false,
  124. nativeSupprt: true
  125. })
  126.  
  127. // Set all our custom IDs.
  128. .jPlayer('cssId', 'play', playerId + '-play')
  129. .jPlayer('cssId', 'pause', playerId + '-pause')
  130. .jPlayer('cssId', 'stop', playerId + '-stop')
  131. .jPlayer('cssId', 'loadBar', playerId + '-load-bar')
  132. .jPlayer('cssId', 'playBar', playerId + '-play-bar')
  133. .jPlayer('cssId', 'volumeMin', playerId + '-volume-min')
  134. .jPlayer('cssId', 'volumeMax', playerId + '-volume-max')
  135. .jPlayer('cssId', 'volumeBar', playerId + '-volume-bar')
  136. .jPlayer('cssId', 'volumeBarValue', playerId + '-volume-bar-value')
  137.  
  138. // Register progress functions.
  139. .jPlayer('onProgressChange', function(loadPercent, playedPercentRelative, playedPercentAbsolute, playedTime, totalTime) {
  140. $(playerPlayTime).text($.jPlayer.convertTime(playedTime));
  141. if (totalTime != 0 && totalTime != Number.POSITIVE_INFINITY) {
  142. $(playerTotalTime).text($.jPlayer.convertTime(totalTime));
  143. }
  144. })
  145.  
  146. .jPlayer('onSoundComplete', function() {
  147. if (playerType == 'playlist') {
  148. Drupal.jPlayer.next(wrapper, player, playlist, active);
  149. var $this = $('.jp-playlist li.jplayer_playlist_current a.track_info');
  150. var $trackname = $('.trackname span').fadeOut(300, function() {
  151. $trackname.text($this.text());
  152. $trackname.fadeIn(300);
  153. });
  154. return false;
  155. }
  156. // Implement the option of continuous play with "single" players when there is more than one player on a page
  157. else if (playerType == 'single') { // && current != current.last()
  158. //var $previous = $('.content').find('.jp-title').removeClass('active');
  159. Drupal.jPlayer.continuousNext(wrapper, player);
  160. }
  161.  
  162. });
  163. $.jPlayer.timeFormat.showHour = true;
  164. });
  165. };
  166.  
  167. Drupal.jPlayer.setActive = function(wrapper, player, playlist, index) {
  168. $(wrapper).find('.jplayer_playlist_current').removeClass('jplayer_playlist_current');
  169. $(playlist[index]).parent().addClass('jplayer_playlist_current');
  170. $(player).jPlayer('setFile', playlist[index].href);
  171. };
  172.  
  173. Drupal.jPlayer.play = function(wrapper, player) {
  174. $(player).jPlayer('play');
  175. Drupal.jPlayer.active = true;
  176. }
  177.  
  178. Drupal.jPlayer.pause = function(wrapper, player) {
  179. $(player).jPlayer('pause');
  180. Drupal.jPlayer.active = false;
  181. }
  182.  
  183. Drupal.jPlayer.stop = function(wrapper, player) {
  184. $(player).jPlayer('stop');
  185. Drupal.jPlayer.active = false;
  186. }
  187.  
  188. Drupal.jPlayer.next = function(wrapper, player, playlist, current) {
  189. var index = (current + 1 < playlist.length) ? current + 1 : 0;
  190. Drupal.jPlayer.setActive(wrapper, player, playlist, index);
  191. Drupal.jPlayer.play(wrapper, player);
  192. return index;
  193. }
  194.  
  195. Drupal.jPlayer.previous = function(wrapper, player, playlist, current) {
  196. var index = (current - 1 >= 0) ? current - 1 : playlist.length - 1;
  197. Drupal.jPlayer.setActive(wrapper, player, playlist, index);
  198. Drupal.jPlayer.play(wrapper, player);
  199. return index;
  200. }
  201.  
  202. // CUSTOM CODE: Allow for continuous play by setting up the next element
  203. Drupal.jPlayer.continuousNext = function(wrapper, player) {
  204. Drupal.jPlayer.continuousSetActive($(player).next);
  205. Drupal.jPlayer.play($(player).next.wrapper, player.next);
  206. $(wrapper).find('.jp-title').addClass('active');
  207. };
  208.  
  209. // CUSTOM CODE: Allow for moving backwards during continuous play by setting up the previous element
  210. Drupal.jPlayer.continuousPrevious = function(wrapper, player) {
  211. Drupal.jPlayer.continuousSetActive($(player).previous);
  212. Drupal.jPlayer.play($(player).previous.wrapper, $(player).previous);
  213. $(wrapper).find('.jp-title').addClass('active');
  214. };
  215.  
  216. // CUSTOM CODE: Allow for continuous play by setting up the relevant item to "active"
  217. Drupal.jPlayer.continuousSetActive = function(player) {
  218. //$(player).jPlayer('setFile', $(player).url);
  219. $(player).jPlayer('setFile', 'http://testsite.inyourspeakers.com/files/test_music/BeachesBeaches - FourFour - 01 lovelove.mp3');
  220. var $old = $('.content').find('.jp-title').removeClass('active');
  221. };
  222.  
  223. /*
  224. // CUSTOM CODE Insert marquee tags into playlist player title entries when necessary
  225. marquee = function(classname) {
  226. if ($(classname).text().length >= 35) {
  227. $(classname).wrap('<marquee scrollamount="2" behavior="alternate" direction="left" width="" onmouseover="this.start();" onmouseout="this.stop();">');
  228. };
  229. };
  230. */
  231.  
  232. })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement