/* * jQuery File Upload Audio Preview Plugin 1.0.2 * 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 */ /*jslint nomen: true, unparam: true, regexp: true */ /*global define, 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 { // Browser globals: factory( window.jQuery, window.loadImage ); } }(function ($, loadImage) { 'use strict'; // Prepend to the default processQueue: $.blueimp.fileupload.prototype.options.processQueue.unshift( { action: 'loadAudio', // Always trigger this action, // even if the previous action was rejected: always: true, // 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 that = this, file = data.files[data.index], dfd = $.Deferred(), 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; dfd.resolveWith(that, [data]); return dfd.promise(); } } dfd.rejectWith(that, [data]); return dfd.promise(); }, // 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; } } }); }));