audiofield-8.x-1.x-dev/js/wavesurfer.builder.js
js/wavesurfer.builder.js
/**
* DO NOT EDIT THIS FILE.
* See the following change record for more information,
* https://www.drupal.org/node/2815083
* @preserve
**/
(function ($, Drupal, once) {
'use strict';
Drupal.AudiofieldWavesurfer = {};
Drupal.AudiofieldWavesurfer.generate = function (context, file, settings) {
var elements = once('generate-waveform', '#' + file.id, context);
$.each(elements, function (index, wavecontainer) {
var wavesurfer = WaveSurfer.create({
container: '#' + $(wavecontainer).attr('id') + ' .waveform',
backend: settings.backend,
audioRate: settings.audioRate,
autoCenter: settings.autoCenter,
barGap: settings.barGap,
barHeight: settings.barHeight,
barWidth: settings.barWidth,
cursorColor: settings.cursorColor,
cursorWidth: settings.cursorWidth,
forceDecode: settings.forceDecode,
normalize: settings.normalize,
progressColor: settings.progressColor,
responsive: settings.responsive,
waveColor: settings.waveColor
});
if (typeof file.peakpath !== 'undefined') {
fetch(file.peakpath)
.then(response => {
if (!response.ok) {
throw new Error("HTTP error " + response.status);
}
return response.json();
})
.then(peaks => {
Drupal.AudiofieldWavesurfer.normalizePeaks(peaks);
wavesurfer.load(file.path, peaks.data);
$(wavecontainer).find('.player-button.playpause').html('Play');
})
.catch((e) => {
wavesurfer.load(file.path);
console.error('error', e);
});
}
else {
wavesurfer.load(file.path);
}
wavesurfer.setVolume(settings.volume);
$(wavecontainer).find('.player-button.playpause').on('click', function (event) {
Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
});
$(wavecontainer).find('.volume').on('change', function (event) {
wavesurfer.setVolume($(event.currentTarget).val() / 10);
});
if (!!settings.autoplay) {
wavesurfer.on('ready', wavesurfer.play.bind(wavesurfer));
}
Drupal.AudiofieldWavesurfer.instance = wavesurfer;
});
};
Drupal.AudiofieldWavesurfer.normalizePeaks = function (peaks) {
var max = peaks.data[0], min = peaks.data[0];
var X, scale;
for (X = 1; X < peaks.data.length; X++) {
if (max < peaks.data[X]) {
max = peaks.data[X];
}
if (min > peaks.data[X]) {
min = peaks.data[X];
}
}
scale = 1.0 / Math.max(Math.abs(min), Math.abs(max));
for (X = 0; X < peaks.data.length; X++) {
peaks.data[X] *= scale;
}
}
Drupal.AudiofieldWavesurfer.generatePlaylist = function (context, settings) {
var elements = once('generate-waveform', '#wavesurfer_playlist-' + settings.unique_id, context);
$.each(elements, function (index, wavecontainer) {
var wavesurfer = WaveSurfer.create({
container: '#' + $(wavecontainer).attr('id') + ' .waveform',
audioRate: settings.audioRate,
autoCenter: settings.autoCenter,
barGap: settings.barGap,
barHeight: settings.barHeight,
barWidth: settings.barWidth,
cursorColor: settings.cursorColor,
cursorWidth: settings.cursorWidth,
forceDecode: settings.forceDecode,
normalize: settings.normalize,
progressColor: settings.progressColor,
responsive: settings.responsive,
waveColor: settings.waveColor
});
wavesurfer.setVolume(settings.volume);
var first = $(wavecontainer).find('.playlist .track').first();
var label = $(wavecontainer).find('label').first();
label.html('Playing: ' + first.html());
Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, first, false);
$(wavecontainer).find('.player-button.playpause').on('click', function (event) {
Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
});
$(wavecontainer).find('.player-button.next').on('click', function (event) {
Drupal.AudiofieldWavesurfer.Next(wavecontainer, wavesurfer);
});
$(wavecontainer).find('.player-button.previous').on('click', function (event) {
Drupal.AudiofieldWavesurfer.Previous(wavecontainer, wavesurfer);
});
$(wavecontainer).find('.playlist .track').on('click', function (event) {
if ($(this).hasClass('playing')) {
Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
}
else {
Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, $(event.currentTarget));
}
});
$(wavecontainer).find('.volume').on('change', function (event) {
wavesurfer.setVolume($(event.currentTarget).val() / 10);
});
if (!!settings.autoplay) {
wavesurfer.on('ready', wavesurfer.play.bind(wavesurfer));
}
if (settings.autoplayNextTrack) {
wavesurfer.on('finish', function (event) {
Drupal.AudiofieldWavesurfer.Next(wavecontainer, wavesurfer);
});
}
Drupal.AudiofieldWavesurfer.instance = wavesurfer;
});
};
Drupal.AudiofieldWavesurfer.PlayPause = function (wavecontainer, wavesurfer) {
wavesurfer.playPause();
var button = $(wavecontainer).find('.player-button.playpause');
if (wavesurfer.isPlaying()) {
$(wavecontainer).addClass('playing');
button.html('Pause');
} else {
$(wavecontainer).removeClass('playing');
button.html('Play');
}
};
Drupal.AudiofieldWavesurfer.Load = function (wavecontainer, wavesurfer, track, playonload = true) {
var peakpath = track.attr('data-peakpath');
if (peakpath !== '') {
fetch(peakpath)
.then(response => {
if (!response.ok) {
throw new Error("HTTP error " + response.status);
}
return response.json();
})
.then(peaks => {
Drupal.AudiofieldWavesurfer.normalizePeaks(peaks);
wavesurfer.load(track.attr('data-src'), peaks.data);
})
.catch((e) => {
wavesurfer.load(track.attr('data-src'));
console.error('error', e);
});
}
else {
wavesurfer.load(track.attr('data-src'));
}
wavesurfer.on('ready', function (event) {
if (playonload) {
$(wavecontainer).removeClass('playing');
$(wavecontainer).addClass('playing');
$(wavecontainer).find('.player-button.playpause').html('Pause');
wavesurfer.play();
}
});
$(wavecontainer).find('.track').removeClass('playing');
track.addClass('playing');
$(wavecontainer).find('label').first().html('Playing: ' + track.html());
};
Drupal.AudiofieldWavesurfer.Next = function (wavecontainer, wavesurfer) {
if (wavesurfer.isPlaying()) {
Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
}
var track = $(wavecontainer).find('.track.playing').next();
if (typeof track.attr('data-src') === 'undefined') {
track = $(wavecontainer).find('.track').first();
}
Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, track);
};
Drupal.AudiofieldWavesurfer.Previous = function (wavecontainer, wavesurfer) {
if (wavesurfer.isPlaying()) {
Drupal.AudiofieldWavesurfer.PlayPause(wavecontainer, wavesurfer);
}
var track = $(wavecontainer).find('.track.playing').prev();
if (typeof track.attr('data-src') === 'undefined') {
track = $(wavecontainer).find('.track').last();
}
Drupal.AudiofieldWavesurfer.Load(wavecontainer, wavesurfer, track);
};
Drupal.behaviors.audiofieldwavesurfer = {
attach: function attach(context, settings) {
$.each(settings.audiofieldwavesurfer, function (key, settingEntry) {
if (settingEntry.playertype === 'default') {
$.each(settingEntry.files, function (key2, file) {
Drupal.AudiofieldWavesurfer.generate(context, file, settingEntry);
});
} else if (settingEntry.playertype === 'playlist') {
Drupal.AudiofieldWavesurfer.generatePlaylist(context, settingEntry);
}
});
}
};
})(jQuery, Drupal, once);
