Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | espaco | 1 | /* |
| 2 | * jQuery File Upload Video Preview Plugin 1.0.3 |
||
| 3 | * https://github.com/blueimp/jQuery-File-Upload |
||
| 4 | * |
||
| 5 | * Copyright 2013, Sebastian Tschan |
||
| 6 | * https://blueimp.net |
||
| 7 | * |
||
| 8 | * Licensed under the MIT license: |
||
| 9 | * http://www.opensource.org/licenses/MIT |
||
| 10 | */ |
||
| 11 | |||
| 12 | /* jshint nomen:false */ |
||
| 13 | /* global define, window, document */ |
||
| 14 | |||
| 15 | (function (factory) { |
||
| 16 | 'use strict'; |
||
| 17 | if (typeof define === 'function' && define.amd) { |
||
| 18 | // Register as an anonymous AMD module: |
||
| 19 | define([ |
||
| 20 | 'jquery', |
||
| 21 | 'load-image', |
||
| 22 | './jquery.fileupload-process' |
||
| 23 | ], factory); |
||
| 24 | } else { |
||
| 25 | // Browser globals: |
||
| 26 | factory( |
||
| 27 | window.jQuery, |
||
| 28 | window.loadImage |
||
| 29 | ); |
||
| 30 | } |
||
| 31 | }(function ($, loadImage) { |
||
| 32 | 'use strict'; |
||
| 33 | |||
| 34 | // Prepend to the default processQueue: |
||
| 35 | $.blueimp.fileupload.prototype.options.processQueue.unshift( |
||
| 36 | { |
||
| 37 | action: 'loadVideo', |
||
| 38 | // Use the action as prefix for the "@" options: |
||
| 39 | prefix: true, |
||
| 40 | fileTypes: '@', |
||
| 41 | maxFileSize: '@', |
||
| 42 | disabled: '@disableVideoPreview' |
||
| 43 | }, |
||
| 44 | { |
||
| 45 | action: 'setVideo', |
||
| 46 | name: '@videoPreviewName', |
||
| 47 | disabled: '@disableVideoPreview' |
||
| 48 | } |
||
| 49 | ); |
||
| 50 | |||
| 51 | // The File Upload Video Preview plugin extends the fileupload widget |
||
| 52 | // with video preview functionality: |
||
| 53 | $.widget('blueimp.fileupload', $.blueimp.fileupload, { |
||
| 54 | |||
| 55 | options: { |
||
| 56 | // The regular expression for the types of video files to load, |
||
| 57 | // matched against the file type: |
||
| 58 | loadVideoFileTypes: /^video\/.*$/ |
||
| 59 | }, |
||
| 60 | |||
| 61 | _videoElement: document.createElement('video'), |
||
| 62 | |||
| 63 | processActions: { |
||
| 64 | |||
| 65 | // Loads the video file given via data.files and data.index |
||
| 66 | // as video element if the browser supports playing it. |
||
| 67 | // Accepts the options fileTypes (regular expression) |
||
| 68 | // and maxFileSize (integer) to limit the files to load: |
||
| 69 | loadVideo: function (data, options) { |
||
| 70 | if (options.disabled) { |
||
| 71 | return data; |
||
| 72 | } |
||
| 73 | var file = data.files[data.index], |
||
| 74 | url, |
||
| 75 | video; |
||
| 76 | if (this._videoElement.canPlayType && |
||
| 77 | this._videoElement.canPlayType(file.type) && |
||
| 78 | ($.type(options.maxFileSize) !== 'number' || |
||
| 79 | file.size <= options.maxFileSize) && |
||
| 80 | (!options.fileTypes || |
||
| 81 | options.fileTypes.test(file.type))) { |
||
| 82 | url = loadImage.createObjectURL(file); |
||
| 83 | if (url) { |
||
| 84 | video = this._videoElement.cloneNode(false); |
||
| 85 | video.src = url; |
||
| 86 | video.controls = true; |
||
| 87 | data.video = video; |
||
| 88 | return data; |
||
| 89 | } |
||
| 90 | } |
||
| 91 | return data; |
||
| 92 | }, |
||
| 93 | |||
| 94 | // Sets the video element as a property of the file object: |
||
| 95 | setVideo: function (data, options) { |
||
| 96 | if (data.video && !options.disabled) { |
||
| 97 | data.files[data.index][options.name || 'preview'] = data.video; |
||
| 98 | } |
||
| 99 | return data; |
||
| 100 | } |
||
| 101 | |||
| 102 | } |
||
| 103 | |||
| 104 | }); |
||
| 105 | |||
| 106 | })); |