/* * jQuery File Upload Audio Preview Plugin 1.0.4 * https://github.com/blueimp/jQuery-File-Upload * * Copyright 2013, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ /* jshint nomen:false */ /* global define, require, window, document */ (function (factory) { 'use strict'; if (typeof define === 'function' && define.amd) { // Register as an anonymous AMD module: define([ 'jquery', 'load-image', './jquery.fileupload-process' ], factory); } else if (typeof exports === 'object') { // Node/CommonJS: factory( require('jquery'), require('load-image') ); } else { // Browser globals: factory( window.jQuery, window.loadImage ); } }(function ($, loadImage) { 'use strict'; // Prepend to the default processQueue: $.blueimp.fileupload.prototype.options.processQueue.unshift( { action: 'loadAudio', // Use the action as prefix for the "@" options: prefix: true, fileTypes: '@', maxFileSize: '@', disabled: '@disableAudioPreview' }, { action: 'setAudio', name: '@audioPreviewName', disabled: '@disableAudioPreview' } ); // The File Upload Audio Preview plugin extends the fileupload widget // with audio preview functionality: $.widget('blueimp.fileupload', $.blueimp.fileupload, { options: { // The regular expression for the types of audio files to load, // matched against the file type: loadAudioFileTypes: /^audio\/.*$/ }, _audioElement: document.createElement('audio'), processActions: { // Loads the audio file given via data.files and data.index // as audio element if the browser supports playing it. // Accepts the options fileTypes (regular expression) // and maxFileSize (integer) to limit the files to load: loadAudio: function (data, options) { if (options.disabled) { return data; } var file = data.files[data.index], url, audio; if (this._audioElement.canPlayType && this._audioElement.canPlayType(file.type) && ($.type(options.maxFileSize) !== 'number' || file.size <= options.maxFileSize) && (!options.fileTypes || options.fileTypes.test(file.type))) { url = loadImage.createObjectURL(file); if (url) { audio = this._audioElement.cloneNode(false); audio.src = url; audio.controls = true; data.audio = audio; return data; } } return data; }, // Sets the audio element as a property of the file object: setAudio: function (data, options) { if (data.audio && !options.disabled) { data.files[data.index][options.name || 'preview'] = data.audio; } return data; } } }); }));