wavesurfer.builder.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /**
  2. * DO NOT EDIT THIS FILE.
  3. * See the following change record for more information,
  4. * https://www.drupal.org/node/2815083
  5. * @preserve
  6. **/
  7. (function ($, Drupal) {
  8. 'use strict';
  9. Drupal.AudiofieldWavesurfer = {};
  10. Drupal.AudiofieldWavesurfer.generate = function (context, file, settings) {
  11. $.each($(context).find('#' + file.id).once('generate-waveform'), function (index, wavecontainer) {
  12. var wavesurfer = WaveSurfer.create({
  13. container: '#' + $(wavecontainer).attr('id') + ' .waveform',
  14. audioRate: settings.audioRate,
  15. autoCenter: settings.autoCenter,
  16. barGap: settings.barGap,
  17. barHeight: settings.barHeight,
  18. barWidth: settings.barWidth,
  19. cursorColor: settings.cursorColor,
  20. cursorWidth: settings.cursorWidth,
  21. forceDecode: settings.forceDecode,
  22. normalize: settings.normalize,
  23. progressColor: settings.progressColor,
  24. responsive: settings.responsive,
  25. waveColor: settings.waveColor
  26. });
  27. wavesurfer.load(file.path);
  28. wavesurfer.setVolume(settings.volume);
  29. $(wavecontainer).find('.player-button.playpause').on('click', function (event) {
  30. Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
  31. });
  32. $(wavecontainer).find('.volume').on('change', function (event) {
  33. wavesurfer.setVolume($(event.currentTarget).val() / 10);
  34. });
  35. if (!!settings.autoplay) {
  36. wavesurfer.on('ready', wavesurfer.play.bind(wavesurfer));
  37. }
  38. });
  39. };
  40. Drupal.AudiofieldWavesurfer.generatePlaylist = function (context, settings) {
  41. $.each($(context).find('#wavesurfer_playlist').once('generate-waveform'), function (index, wavecontainer) {
  42. var wavesurfer = WaveSurfer.create({
  43. container: '#' + $(wavecontainer).attr('id') + ' .waveform',
  44. audioRate: settings.audioRate,
  45. autoCenter: settings.autoCenter,
  46. barGap: settings.barGap,
  47. barHeight: settings.barHeight,
  48. barWidth: settings.barWidth,
  49. cursorColor: settings.cursorColor,
  50. cursorWidth: settings.cursorWidth,
  51. forceDecode: settings.forceDecode,
  52. normalize: settings.normalize,
  53. progressColor: settings.progressColor,
  54. responsive: settings.responsive,
  55. waveColor: settings.waveColor
  56. });
  57. wavesurfer.setVolume(settings.volume);
  58. var first = $(wavecontainer).find('.playlist .track').first();
  59. var label = $(wavecontainer).find('label').first();
  60. label.html('Playing: ' + first.html());
  61. first.addClass('playing');
  62. wavesurfer.load(first.attr('data-src'));
  63. $(wavecontainer).find('.player-button.playpause').on('click', function (event) {
  64. Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
  65. });
  66. $(wavecontainer).find('.player-button.next').on('click', function (event) {
  67. Drupal.AudiofieldWavesurfer.Next(wavecontainer, wavesurfer);
  68. });
  69. $(wavecontainer).find('.player-button.previous').on('click', function (event) {
  70. Drupal.AudiofieldWavesurfer.Previous(wavecontainer, wavesurfer);
  71. });
  72. $(wavecontainer).find('.playlist .track').on('click', function (event) {
  73. if ($(this).hasClass('playing')) {
  74. Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
  75. }
  76. else {
  77. Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, $(event.currentTarget));
  78. }
  79. });
  80. $(wavecontainer).find('.volume').on('change', function (event) {
  81. wavesurfer.setVolume($(event.currentTarget).val() / 10);
  82. });
  83. if (!!settings.autoplay) {
  84. wavesurfer.on('ready', wavesurfer.play.bind(wavesurfer));
  85. }
  86. wavesurfer.on('finish', function (event) {
  87. Drupal.AudiofieldWavesurfer.Next(wavecontainer, wavesurfer);
  88. });
  89. });
  90. };
  91. Drupal.AudiofieldWavesurfer.PlayPause = function (wavecontainer, wavesurfer) {
  92. wavesurfer.playPause();
  93. var button = $(wavecontainer).find('.player-button.playpause');
  94. if (wavesurfer.isPlaying()) {
  95. $(wavecontainer).addClass('playing');
  96. button.html('Pause');
  97. } else {
  98. $(wavecontainer).removeClass('playing');
  99. button.html('Play');
  100. }
  101. };
  102. Drupal.AudiofieldWavesurfer.Load = function (wavecontainer, wavesurfer, track) {
  103. wavesurfer.load(track.attr('data-src'));
  104. wavesurfer.on('ready', function (event) {
  105. $(wavecontainer).removeClass('playing');
  106. $(wavecontainer).addClass('playing');
  107. $(wavecontainer).find('.player-button.playpause').html('Pause');
  108. wavesurfer.play();
  109. });
  110. $(wavecontainer).find('.track').removeClass('playing');
  111. track.addClass('playing');
  112. $(wavecontainer).find('label').first().html('Playing: ' + track.html());
  113. };
  114. Drupal.AudiofieldWavesurfer.Next = function (wavecontainer, wavesurfer) {
  115. if (wavesurfer.isPlaying()) {
  116. Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
  117. }
  118. var track = $(wavecontainer).find('.track.playing').next();
  119. if (typeof track.attr('data-src') === 'undefined') {
  120. track = $(wavecontainer).find('.track').first();
  121. }
  122. Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, track);
  123. };
  124. Drupal.AudiofieldWavesurfer.Previous = function (wavecontainer, wavesurfer) {
  125. if (wavesurfer.isPlaying()) {
  126. Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
  127. }
  128. var track = $(wavecontainer).find('.track.playing').prev();
  129. if (typeof track.attr('data-src') === 'undefined') {
  130. track = $(wavecontainer).find('.track').last();
  131. }
  132. Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, track);
  133. };
  134. Drupal.behaviors.audiofieldwavesurfer = {
  135. attach: function attach(context, settings) {
  136. $.each(settings.audiofieldwavesurfer, function (key, settingEntry) {
  137. if (settingEntry.playertype === 'default') {
  138. $.each(settingEntry.files, function (key2, file) {
  139. Drupal.AudiofieldWavesurfer.generate(context, file, settingEntry);
  140. });
  141. } else if (settingEntry.playertype === 'playlist') {
  142. Drupal.AudiofieldWavesurfer.generatePlaylist(context, settingEntry);
  143. }
  144. });
  145. }
  146. };
  147. })(jQuery, Drupal);