Advertisement
Guest User

Untitled

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