/* * jQuery File Upload Video 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: 'loadVideo', // 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: '@disableVideoPreview' }, { action: 'setVideo', name: '@videoPreviewName', disabled: '@disableVideoPreview' } ); // The File Upload Video Preview plugin extends the fileupload widget // with video preview functionality: $.widget('blueimp.fileupload', $.blueimp.fileupload, { options: { // The regular expression for the types of video files to load, // matched against the file type: loadVideoFileTypes: /^video\/.*$/ }, _videoElement: document.createElement('video'), processActions: { // Loads the video file given via data.files and data.index // as video element if the browser supports playing it. // Accepts the options fileTypes (regular expression) // and maxFileSize (integer) to limit the files to load: loadVideo: function (data, options) { if (options.disabled) { return data; } var that = this, file = data.files[data.index], dfd = $.Deferred(), url, video; if (this._videoElement.canPlayType && this._videoElement.canPlayType(file.type) && ($.type(options.maxFileSize) !== 'number' || file.size <= options.maxFileSize) && (!options.fileTypes || options.fileTypes.test(file.type))) { url = loadImage.createObjectURL(file); if (url) { video = this._videoElement.cloneNode(false); video.src = url; video.controls = true; data.video = video; dfd.resolveWith(that, [data]); return dfd.promise(); } } dfd.rejectWith(that, [data]); return dfd.promise(); }, // Sets the video element as a property of the file object: setVideo: function (data, options) { if (data.video && !options.disabled) { data.files[data.index][options.name || 'preview'] = data.video; } return data; } } }); }));