jplayer.builder.es6.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /**
  2. * @file
  3. * Audiofield build jPlayer audio players of various types.
  4. */
  5. (($, Drupal) => {
  6. 'use strict';
  7. Drupal.AudiofieldJplayer = {};
  8. /**
  9. * Generate a jplayer player for the default single file layout.
  10. *
  11. * @param {jQuery} context
  12. * The Drupal context for which we are finding and generating this player.
  13. * @param {jQuery} settings
  14. * The Drupal settings for this player.
  15. */
  16. Drupal.AudiofieldJplayer.generate = (context, settings) => {
  17. // Create the media player.
  18. $(`#jquery_jplayer_${settings.unique_id}`, context).once('generate-jplayer').jPlayer(
  19. {
  20. cssSelectorAncestor: `#jp_container_${settings.unique_id}`,
  21. },
  22. {
  23. ready: () => {
  24. const mediaArray = {
  25. title: settings.description,
  26. };
  27. mediaArray[settings.filetype] = settings.file;
  28. $(`#jquery_jplayer_${settings.unique_id}`, context).jPlayer('setMedia', mediaArray);
  29. },
  30. canplay: () => {
  31. // Handle autoplay.
  32. if (!!settings.autoplay) {
  33. $(`#jquery_jplayer_${settings.unique_id}`, context).jPlayer('play');
  34. }
  35. },
  36. swfPath: '/libraries/jplayer/dist/jplayer',
  37. supplied: settings.filetype,
  38. wmode: 'window',
  39. useStateClassSkin: true,
  40. autoBlur: false,
  41. smoothPlayBar: true,
  42. keyEnabled: true,
  43. remainingDuration: false,
  44. toggleDuration: false,
  45. volume: settings.volume,
  46. },
  47. );
  48. };
  49. /**
  50. * Generate a jplayer formatter for a player.
  51. *
  52. * @param {jQuery} context
  53. * The Drupal context for which we are finding and generating this player.
  54. * @param {jQuery} settings
  55. * The Drupal settings for this player.
  56. */
  57. Drupal.AudiofieldJplayer.generatePlaylist = (context, settings) => {
  58. $.each($(context).find(`#jquery_jplayer_${settings.unique_id}`).once('generate-jplayer'), (index, item) => {
  59. // Initialize the container audio player.
  60. const thisPlaylist = new jPlayerPlaylist({
  61. jPlayer: $(item),
  62. cssSelectorAncestor: `#jp_container_${settings.unique_id}`,
  63. }, [], {
  64. canplay: () => {
  65. // Handle autoplay.
  66. if (!!settings.autoplay) {
  67. $(item).jPlayer('play');
  68. }
  69. },
  70. playlistOptions: {
  71. enableRemoveControls: false,
  72. },
  73. swfPath: '/libraries/jplayer/dist/jplayer',
  74. wmode: 'window',
  75. useStateClassSkin: true,
  76. autoBlur: false,
  77. smoothPlayBar: true,
  78. keyEnabled: true,
  79. volume: settings.volume,
  80. });
  81. // Loop over each file.
  82. $.each(settings.files, (key, fileEntry) => {
  83. // Build the media array.
  84. const mediaArray = {
  85. title: fileEntry.description,
  86. };
  87. mediaArray[fileEntry.filetype] = fileEntry.file;
  88. // Add the file to the playlist.
  89. thisPlaylist.add(mediaArray);
  90. });
  91. });
  92. };
  93. /**
  94. * Generate a jplayer circle player.
  95. *
  96. * @param {jQuery} context
  97. * The Drupal context for which we are finding and generating this player.
  98. * @param {array} file
  99. * The audio file for which we are generating a player.
  100. */
  101. Drupal.AudiofieldJplayer.generateCircle = (context, file) => {
  102. // Create the media player.
  103. $.each($(context).find(`#jquery_jplayer_${file.fid}`).once('generate-jplayer'), (index, item) => {
  104. // Build the media array for this player.
  105. const mediaArray = {};
  106. mediaArray[file.filetype] = file.file;
  107. // Initialize the player.
  108. new CirclePlayer(
  109. $(item),
  110. mediaArray,
  111. {
  112. cssSelectorAncestor: `#cp_container_${file.fid}`,
  113. canplay: () => {
  114. // Handle autoplay.
  115. if (!!file.autoplay) {
  116. $(item).jPlayer('play');
  117. }
  118. },
  119. swfPath: '/libraries/jplayer/dist/jplayer',
  120. wmode: 'window',
  121. keyEnabled: true,
  122. supplied: file.filetype,
  123. },
  124. );
  125. });
  126. };
  127. /**
  128. * Attach the behaviors to generate the audio player.
  129. *
  130. * @type {Drupal~behavior}
  131. *
  132. * @prop {Drupal~behaviorAttach} attach
  133. * Attaches generation of Jplayer audio players.
  134. */
  135. Drupal.behaviors.audiofieldjplayer = {
  136. attach: (context, settings) => {
  137. $.each(settings.audiofieldjplayer, (key, settingEntry) => {
  138. // Default audio player.
  139. if (settingEntry.playertype === 'default') {
  140. // We can just initialize the audio player direcly.
  141. Drupal.AudiofieldJplayer.generate(context, settingEntry);
  142. }
  143. // Playlist audio player.
  144. else if (settingEntry.playertype === 'playlist') {
  145. Drupal.AudiofieldJplayer.generatePlaylist(context, settingEntry);
  146. }
  147. // Circle audio player.
  148. else if (settingEntry.playertype === 'circle') {
  149. // Loop over the files.
  150. $.each(settingEntry.files, (key2, fileEntry) => {
  151. // Create the player.
  152. Drupal.AudiofieldJplayer.generateCircle(context, fileEntry);
  153. });
  154. }
  155. });
  156. },
  157. };
  158. })(jQuery, Drupal);