You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.8 KiB
104 lines
2.8 KiB
( function ( $, wp, rwmb ) {
|
|
'use strict';
|
|
|
|
var views = rwmb.views = rwmb.views || {},
|
|
MediaField = views.MediaField,
|
|
FileUploadField, UploadButton;
|
|
|
|
FileUploadField = views.FileUploadField = MediaField.extend( {
|
|
createAddButton: function () {
|
|
this.addButton = new UploadButton( {controller: this.controller} );
|
|
}
|
|
} );
|
|
|
|
UploadButton = views.UploadButton = Backbone.View.extend( {
|
|
className: 'rwmb-upload-area',
|
|
tagName: 'div',
|
|
template: wp.template( 'rwmb-upload-area' ),
|
|
render: function () {
|
|
this.$el.html( this.template( {} ) );
|
|
return this;
|
|
},
|
|
|
|
initialize: function ( options ) {
|
|
this.controller = options.controller;
|
|
this.el.id = _.uniqueId( 'rwmb-upload-area-' );
|
|
this.render();
|
|
|
|
// Auto hide if you reach the max number of media
|
|
this.listenTo( this.controller, 'change:full', function () {
|
|
this.$el.toggle( ! this.controller.get( 'full' ) );
|
|
} );
|
|
},
|
|
|
|
// Initializes plupload using code from wp.Uploader (wp-includes/js/plupload/wp-plupload.js)
|
|
initUploader: function ( $this ) {
|
|
var self = this,
|
|
extensions = this.getExtensions().join( ',' ),
|
|
maxFileSize = this.controller.get( 'maxFileSize' ),
|
|
options = {
|
|
container: this.el,
|
|
dropzone: this.el,
|
|
browser: this.$( '.rwmb-browse-button' ),
|
|
params: {
|
|
post_id : $( '#post_ID' ).val()
|
|
},
|
|
added: function( attachment ) {
|
|
self.controller.get( 'items' ).add( [attachment] );
|
|
}
|
|
};
|
|
|
|
// Initialize the plupload instance.
|
|
this.uploader = new wp.Uploader( options );
|
|
|
|
var filters = this.uploader.uploader.getOption( 'filters' );
|
|
if ( maxFileSize ) {
|
|
filters.max_file_size = maxFileSize;
|
|
}
|
|
if ( extensions ) {
|
|
filters.mime_types = [{title: i18nRwmbMedia.select, extensions: extensions}];
|
|
}
|
|
this.uploader.uploader.setOption( 'filters', filters );
|
|
$this.data( 'uploader', this.uploader );
|
|
},
|
|
|
|
getExtensions: function () {
|
|
var mimeTypes = this.controller.get( 'mimeType' ).split( ',' ),
|
|
exts = [];
|
|
|
|
_.each( mimeTypes, function ( current, index ) {
|
|
if ( i18nRwmbMedia.extensions[current] ) {
|
|
exts = exts.concat( i18nRwmbMedia.extensions[current] );
|
|
}
|
|
} );
|
|
return exts;
|
|
}
|
|
} );
|
|
|
|
function initFileUpload() {
|
|
var $this = $( this ),
|
|
view = $this.data( 'view' );
|
|
|
|
if ( view ) {
|
|
return;
|
|
}
|
|
view = new FileUploadField( { input: this } );
|
|
|
|
$this.siblings( '.rwmb-media-view' ).remove();
|
|
$this.after( view.el );
|
|
|
|
// Init uploader after view is inserted to make wp.Uploader works.
|
|
view.addButton.initUploader( $this );
|
|
|
|
$this.data( 'view', view );
|
|
}
|
|
|
|
function init( e ) {
|
|
$( e.target ).find( '.rwmb-file_upload' ).each( initFileUpload );
|
|
}
|
|
|
|
rwmb.$document
|
|
.on( 'mb_ready', init )
|
|
.on( 'clone', '.rwmb-file_upload', initFileUpload )
|
|
} )( jQuery, wp, rwmb );
|