rs.uploaders = {}; if(jQuery.event.props.indexOf('dataTransfer') == -1){ jQuery.event.props.push( "dataTransfer" ); } function rs_upload_remove_file(id, file_id){ var uploader = rs.uploaders[id]; if(uploader){ var file = uploader.getFile(file_id); if(file){alert(file_id); var status_before = file.status; var container = jQuery('#' + uploader.settings.container); var uploaded_list = container.find('.uploaded-list'); uploader.removeFile(file); if(uploader.state == plupload.STARTED && status_before == plupload.UPLOADING) { uploader.stop(); uploader.start(); } if(uploader.total.queued == 0){ container.find('.pending-list').removeClass('has-file'); } var count = uploader.total.queued + uploaded_list.find('li').length; if(uploader.settings.max_files > count){ container.find('.upload-browser').show(); } } } } function rs_upload_remove_uploaded_file(id, file_id, nonce, question){ var uploader = rs.uploaders[id]; if(uploader){ var container = jQuery('#' + uploader.settings.container); if(!question || confirm(question)){ jQuery('#' + 'rs-file-' + file_id).css('opacity', 0.5); jQuery.post(rs.wordpress.admin_ajax_url, {id: file_id, security: nonce, action: 'rs_file_upload_remove', callback: uploader.settings.multipart_params.callback}, function(data){ if(data.success){ jQuery('#' + 'rs-file-' + file_id).remove(); var count = uploader.total.queued + container.find('.uploaded-list li').length; container.find('.upload-browser').toggle(uploader.settings.max_files > count); if(count == 0){ container.append(''); } var removed_callback = uploader.settings.js_callback.removed_callback; if(typeof window[removed_callback] == 'function'){ window[removed_callback](response, uploader.settings.js_callback.removed_parameter); } } else{ jQuery('#' + 'rs-file-' + file_id).css('opacity', 1); alert('Cannot remove this file. ' + data.message); } }, 'json').error(function(){ jQuery('#' + 'rs-file-' + file_id).css('opacity', 1); }); } } } function rs_upload_remove_uploaded_files(id, question){ var uploader = rs.uploaders[id]; if(uploader){ if(!question || confirm(question)){ var container = jQuery('#' + uploader.settings.container); container.find('.uploaded-list .remove-file').each(function(){ rs_upload_remove_uploaded_file(id, jQuery(this).next().val(), jQuery(this).data('security')); }); } } } function rs_upload_add_file(uploader, files){ var container = jQuery('#' + uploader.settings.container); var list = container.find('.pending-list'); var uploaded_list = container.find('.uploaded-list'); var count = uploader.total.queued + uploaded_list.find('li').length; var max = files.length; if(uploader.settings.max_files <= count) { jQuery.each(files, function(i, file) { uploader.removeFile(file); }); container.find('.upload-browser').hide(); return false; } else{ max = uploader.settings.max_files - count; if(max <= files.length){ container.find('.upload-browser').hide(); } } jQuery.each(files, function(i, file) { if(i < max){ list.append( '
  • ' + '
    ' + file.name + '
    ' + '
    ' + plupload.formatSize(0) + ' / ' + plupload.formatSize(file.size) + ')
    ' + '
    ' + 'X' + '
  • '); } else{ uploader.removeFile(file); } }); list.addClass('has-file'); list.find('.remove-file').click(function(){ rs_upload_remove_file(uploader.settings.id, jQuery(this).parent().attr('id')); jQuery(this).parent().remove(); }); uploader.refresh(); if(uploader.settings.auto_start) uploader.start(); } function rs_upload_add_file_error(uploader, error){ var container = jQuery('#' + uploader.settings.container); var uploaded_list = container.find('.uploaded-list'); var count = uploader.total.queued + uploaded_list.find('li').length; if(uploader.settings.max_files > count){ container.find('.upload-browser').show(); } alert('File ' + error.file.name + ' can not be uploaded (' + error.message + ')'); } function rs_upload_progress(uploader, file) { jQuery('#' + file.id).addClass('uploading').find('.file-progress').width(file.percent + "%"); jQuery('#' + file.id + " .file-size span").html(plupload.formatSize(parseInt(file.size * file.percent / 100))); } function rs_upload_uploaded(uploader, file, response) { var container = jQuery('#' + uploader.settings.container); var uploaded_list = container.find('.uploaded-list'); var response = JSON.parse(response["response"]); jQuery('#' + file.id).remove(); if(response.success){ var item = jQuery( '
  • ' + '' + ''+response.title+'' + ''+response.ext+'' + ''+plupload.formatSize(response.size)+'' + '' + '' + '
  • '); item.find('.remove-file').click(function(){ rs_upload_remove_uploaded_file(uploader.settings.id, response.id, response.nonce, 'Are you sure you want to remove this file?'); }); var type = response.type.split('/')[0]; if(type == 'image' && response.thumbnail.indexOf('default.png') == -1){ item.addClass('has-thumbnail'); } uploaded_list.addClass('has-file').append(item); container.find('.rs-file-default-value').remove(); } else{ var count = uploader.total.queued + uploaded_list.find('li').length; if(uploader.settings.max_files > count){ container.find('.upload-browser').show(); } alert('File "' + file.name + '" can not be uploaded. ' + response.message); } var added_callback = uploader.settings.js_callback.added_callback; if(typeof window[added_callback] == 'function'){ window[added_callback](response, uploader.settings.js_callback.added_parameter); } if(uploader.total.queued == 0){ container.find('.pending-list').removeClass('has-file'); if(uploader.callback){ uploader.callback.call(); } } } function rs_upload_get_uploader(id){ return rs.uploaders[id]; } function rs_upload_has_file(id){ var uploader = rs_upload_get_uploader(id); return uploader && uploader.total.queued; } function rs_upload_start(id, callback){ var uploader = rs_upload_get_uploader(id); if(uploader){ if(typeof callback == 'function') { uploader.callback = callback; } uploader.start(); } else{ if(typeof callback == 'function') callback.call(); } } function rs_upload_stop(id){ var uploader = rs_upload_get_uploader(id); if(uploader){ uploader.callback = null; uploader.stop(); } } jQuery(function($){ function rs_upload_message(msg){ alert(msg); } $(document).bind('rs-control-rebuild.rs-fileupload', function(e, box){ if(typeof plupload == 'undefined') return false; box = $(box).is('.rs-fileupload') ? $(box) : $(box).find('.rs-fileupload'); box.each(function(){ var control = $(this), config, uploader; var config = control.find('script.rs-data'); if(config.length){ try{ config = JSON.parse(config.text()); if(config){ if(rs.uploaders[config.id]){ rs.uploaders[config.id].destroy(); } uploader = new plupload.Uploader(config); uploader.init(); uploader.bind('FilesAdded', rs_upload_add_file); uploader.bind('Error', rs_upload_add_file_error); uploader.bind('UploadProgress', rs_upload_progress); uploader.bind('FileUploaded', rs_upload_uploaded); rs.uploaders[config.id] = uploader; control.find('.remove-file').unbind('click.rs-upload').bind('click.rs-upload', function(){ rs_upload_remove_uploaded_file(config.id, $(this).next().val(), $(this).attr('data-security'), 'Are you sure you want to remove this file?'); }); if(control.find('.uploaded-list li').length >= uploader.settings.max_files){ control.find('.upload-browser').hide(); } } } catch(ex){ console.log(ex); } } }); $(document).has('.rs-fileupload.allow-drag-drop').unbind('dragover.rs-upload').bind('dragover.rs-upload', function (event) { $(this).find('.allow-drag-drop .upload-browser').addClass('dragover'); if ($.inArray('Files', event.dataTransfer.types) > -1) { event.stopPropagation(); event.preventDefault(); event.dataTransfer.dropEffect = $(event.target).closest('.upload-browser').length ? 'copy' : 'none'; } }); $(document).has('.rs-fileupload.allow-drag-drop').unbind('dragleave.rs-upload').bind('dragleave.rs-upload', function (event) { $(this).find('.allow-drag-drop .upload-browser').removeClass('dragover'); $('body').css('cursor', ''); }); }); $(document).trigger('rs-control-rebuild.rs-fileupload', '.rs-fileupload'); });