/* Redmine - project management software Copyright (C) 2006-2013 Jean-Philippe Lang */ function postUpMsg(attachmentId) { $.ajax({ url: '/attachments/renderTag', type: "GET", data: { attachmentId: attachmentId } }) } function reload(fileSpan) { fileSpan.remove(); $('#upload_file_count').html("<%= l(:label_no_file_uploaded)%>"); $old_file = $("#_file"); $new_file = $old_file.clone(true); $old_file.replaceWith($new_file); $new_file.show(); } function addFile_board(inputEl, file, eagerUpload, id,btnId) { var attachments_frame = '#attachments_fields' + id; if ($(attachments_frame).children().length < 30) { deleteallfiles = $(inputEl).data('deleteAllFiles'); var attachmentId = addFile.nextAttachmentId++; var fileSpan = $('', { 'id': 'attachments_' + attachmentId, 'class': 'attachment' }); fileSpan.append( $('', { 'type': 'text', 'class': 'upload_filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly' }).val(file.name), // $('', { // 'type': 'text', // 'class': 'description', // 'name': 'attachments[' + attachmentId + '][description]', // 'maxlength': 254, // 'placeholder': $(inputEl).data('descriptionPlaceholder') // }).toggle(!eagerUpload), // $('' + $(inputEl).data('fieldIsPublic') + ':').attr({ // 'class': 'ispublic-label' // }), // $('', { // 'type': 'checkbox', // 'class': 'is_public_checkbox', // 'value': 1, // 'name': 'attachments[' + attachmentId + '][is_public_checkbox]', // checked: 'checked' // }).toggle(!eagerUpload), $(' ').attr({ 'href': "#", 'class': 'remove-upload', 'data-containerid': id }).click(function() { if (confirm($(inputEl).data('areYouSure'))) { removeFile(); if (!eagerUpload) { (function(e) { reload(e); })(fileSpan); } } }).toggle(!eagerUpload), $('
', { 'class': 'div_attachments', 'name': 'div_' + 'attachments_' + attachmentId }) ).appendTo(attachments_frame); if (eagerUpload) { ajaxUpload(file, attachmentId, fileSpan, inputEl,btnId); } return attachmentId; } return null; } function addFile(inputEl, file, eagerUpload,btnId) { var attachments_frame = '#attachments_fields'; if ($(attachments_frame).children().length < 30) { deleteallfiles = $(inputEl).data('deleteAllFiles'); var attachmentId = addFile.nextAttachmentId++; var fileSpan = $('', { 'id': 'attachments_' + attachmentId, 'class': 'attachment' }); fileSpan.append( $('', { 'type': 'text', 'class': 'upload_filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly' }).val(file.name), // $('', { // 'type': 'text', // 'class': 'description', // 'name': 'attachments[' + attachmentId + '][description]', // 'maxlength': 254, // 'placeholder': $(inputEl).data('descriptionPlaceholder') // }).toggle(!eagerUpload), // $('' + $(inputEl).data('fieldIsPublic') + ':').attr({ // 'class': 'ispublic-label' // }), // $('', { // 'type': 'checkbox', // 'class': 'is_public_checkbox', // 'value': 1, // 'name': 'attachments[' + attachmentId + '][is_public_checkbox]', // checked: 'checked' // }).toggle(!eagerUpload), $(' ').attr({ 'href': "#", 'class': 'remove-upload' }).click(function() { if (confirm($(inputEl).data('areYouSure'))) { removeFile(); if (!eagerUpload) { (function(e) { reload(e); })(fileSpan); } } }).toggle(!eagerUpload), $('
', { 'class': 'div_attachments', 'name': 'div_' + 'attachments_' + attachmentId }) ).appendTo('#attachments_fields'); if (eagerUpload) { ajaxUpload(file, attachmentId, fileSpan, inputEl,btnId); } return attachmentId; } return null; } addFile.nextAttachmentId = 1; function ajaxUpload(file, attachmentId, fileSpan, inputEl,btnId) { //上传开始调用函数 function onLoadstart(e) { fileSpan.removeClass('ajax-waiting'); fileSpan.addClass('ajax-loading'); $('input:submit', $(this).parents('form')).attr('disabled', 'disabled'); } //更改progressbar的值 function onProgress(e) { if (e.lengthComputable) { this.progressbar('value', e.loaded * 100 / e.total); } } function actualUpload(file, attachmentId, fileSpan, inputEl,btnId) { ajaxUpload.uploading++; uploadBlob(file, $(inputEl).data('upload-path'), attachmentId, { loadstartEventHandler: onLoadstart.bind(progressSpan), progressEventHandler: onProgress.bind(progressSpan) }) .done(function(result) { progressSpan.progressbar('value', 100).remove(); //上传完成就去掉该文件名后的进度条 fileSpan.find('input.description, a').css('display', 'inline-block'); fileSpan.find('input.is_public_checkbox, a').css('display', 'inline-block'); }) .fail(function(result) { progressSpan.text("网络错误"); if ($("#network_issue")) { //在上传处都要给出一个network_issue的div用来显示错误 $("#network_issue").show(); } }).always(function() { ajaxUpload.uploading--; fileSpan.removeClass('ajax-loading'); var containerid = $(inputEl).data('containerid');//多个上传控件需要的容器id if(containerid == undefined ){ var count = 1;//同步上传参数为1,所以不需要去获取正在上传的文件就知道是1 $('#upload_file_count').html("" + count + "" + $(inputEl).data('lebelFileUploding')); } else{ var count = 1; $('#upload_file_count' + containerid).html("" + count + "" + $(inputEl).data('lebelFileUploding')); } var form = fileSpan.parents('form'); if (form.queue('upload').length == 0 && ajaxUpload.uploading == 0) { //所有文件上传完毕,更改状态 $('input:submit', form).removeAttr('disabled'); $('#' + btnId).removeAttr("disabled"); $('#' + btnId).val('确定') $('#' + btnId).css('background-color', '#269ac9') if(containerid == undefined ){ var count = $('#attachments_fields>span').length; $('#upload_file_count').html("" + count + "" + $(inputEl).data('fileCount')); }else{ var count = $('#attachments_fields' + containerid + '>span').length; $('#upload_file_count'+containerid).html("" + count + "" + $(inputEl).data('fileCount')); } } form.dequeue('upload');//上传完成一个就退出一个 }); //gcm files count and add delete_all link //modify by yutao 2015-5-14 ��1��ҳ����ڶ���ϴ��ؼ�ʱ�˿�������bug �ʸ�֮ start var containerid = $(inputEl).data('containerid'); if (containerid == undefined) { var count = $('#attachments_fields>span').length; $('#'+btnId).attr("disabled",true); $('#'+btnId).val('提交中'); $('#'+btnId).css('background-color','#c1c1c1') $('#upload_file_count').html("1" + $(inputEl).data('lebelFileUploding'));//目前肯定是穿一个文件 if (count >= 1) { var add_attachs = $('.add_attachment'); var delete_all = $('.remove_all'); if (delete_all.length < 1) { add_attachs.append($(" ").attr({ "href": "javascript:void(0)", 'class': 'remove_all', "onclick": "removeAll()" })); } } } else { var count = $('#attachments_fields' + containerid + '>span').length; $('#'+btnId).attr("disabled",true); $('#'+btnId).val('提交中'); $('#'+btnId).css('background-color','#c1c1c1') $('#upload_file_count' + containerid).html("1" + $(inputEl).data('lebelFileUploding'));//目前肯定是穿一个文件 if (count >= 1) { var add_attachs = $('.add_attachment').filter(function(index) { return $(this).data('containerid') == containerid; }); var delete_all = $('.remove_all').filter(function(index) { return $(this).data('containerid') == containerid; }); if (delete_all.length < 1) { add_attachs.append($(" ").attr({ "href": "javascript:void(0)", 'class': 'remove_all', 'data-containerid': containerid, "onclick": "removeAll('" + containerid + "')" })); } } //modify by yutao 2015-5-14 ��1��ҳ����ڶ���ϴ��ؼ�ʱ�˿�������bug �ʸ�֮ end } //gcm } //在插入文件名的后边插入div var progressSpan = $('
').insertAfter(fileSpan.find('input.upload_filename')); progressSpan.progressbar(); //将div处理成progress bar fileSpan.addClass('ajax-waiting'); //添加文件正在上传的状态 var containerid = $(inputEl).data('containerid');//多个上传控件需要的容器id if(containerid == undefined ){ //选择了多少个文件也要显示,因为有时候文件过大,一时半会传不完,但还是显示文件没有选择 var count = $('#attachments_fields>span').length; $('#upload_file_count').html("" + count + "" + '个文件被选择'); }else{ var count = $('#attachments_fields' + containerid + '>span').length; $('#upload_file_count'+containerid).html("" + count + "" + '个文件被选择'); } //最大的同步上传参数 var maxSyncUpload = 1 //$(inputEl).data('max-concurrent-uploads'); //如果没有指定同步上传参数 或者参数不对,或者需要上传的文件已经小于同步上传的个数,那么直接上传 if (maxSyncUpload == null || maxSyncUpload <= 0 || ajaxUpload.uploading < maxSyncUpload) actualUpload(file, attachmentId, fileSpan, inputEl,btnId); else //否则就进行队列上传 $(inputEl).parents('form').queue('upload', actualUpload.bind(this, file, attachmentId, fileSpan, inputEl,btnId)); } ajaxUpload.uploading = 0; function removeFile() { $(this).parent('span').remove(); return false; } //gcm delete all file //modify by yutao 2015-5-14 ��1��ҳ����ڶ���ϴ��ؼ�ʱ�˿�������bug �ʸ�֮ start function removeAll(containerid) { if (confirm(deleteallfiles)) { if (containerid == undefined) { $(".remove-upload").removeAttr("data-confirm"); $(".remove-upload").click(); } else { var arr = $(".remove-upload").filter(function() { return $(this).data('containerid') == containerid; }); arr.removeAttr("data-confirm"); arr.click(); } } // return false; } //modify by yutao 2015-5-14 ��1��ҳ����ڶ���ϴ��ؼ�ʱ�˿�������bug �ʸ�֮ end //gcm function uploadBlob(blob, uploadUrl, attachmentId, options) { var actualOptions = $.extend({ loadstartEventHandler: $.noop, progressEventHandler: $.noop }, options); if (uploadUrl.indexOf('?') > 0) { uploadUrl = uploadUrl + '&attachment_id=' + attachmentId; } else { uploadUrl = uploadUrl + '?attachment_id=' + attachmentId; } if (blob instanceof window.File) { uploadUrl += '&filename=' + encodeURIComponent(blob.name); } return $.ajax(uploadUrl, { type: 'POST', contentType: 'application/octet-stream', beforeSend: function(jqXhr) { jqXhr.setRequestHeader('Accept', 'application/js'); }, xhr: function() { var xhr = $.ajaxSettings.xhr(); xhr.upload.onloadstart = actualOptions.loadstartEventHandler; xhr.upload.onprogress = actualOptions.progressEventHandler; return xhr; }, data: blob, cache: false, processData: false }); } function addInputFiles(inputEl,btnId) { // var clearedFileInput = $(inputEl).clone().val(''); if (inputEl.files) { // if(inputEl.files.length >= 5){ // alert('一次选择的文件不能超过5个') // return; // } // upload files using ajax uploadAndAttachFiles(inputEl.files, inputEl,btnId); // $(inputEl).remove(); } else { // browser not supporting the file API, upload on form submission var attachmentId; var aFilename = inputEl.value.split(/\/|\\/); var count = $('#attachments_fields>span').length; attachmentId = addFile(inputEl, { name: aFilename[aFilename.length - 1] }, false); if (attachmentId) { $(inputEl).attr({ name: 'attachments[' + attachmentId + '][file]' }).hide(); if (count <= 0) count = 1; $('#upload_file_count').html("" + count + "" + $(inputEl).data('fileCount')); } } //clearedFileInput.insertAfter('#attachments_fields'); } function addInputFiles_board(inputEl, id,btnId) { // var clearedFileInput = $(inputEl).clone().val(''); if (inputEl.files) { // if(inputEl.files.length >= 5){ // alert('一次选择的文件不能超过5个') // return; // } // upload files using ajax uploadAndAttachFiles_board(inputEl.files, inputEl, id,btnId); // $(inputEl).remove(); } else { // browser not supporting the file API, upload on form submission var attachmentId; var aFilename = inputEl.value.split(/\/|\\/); attachmentId = addFile_board(inputEl, { name: aFilename[aFilename.length - 1] }, false, id); if (attachmentId) { $(inputEl).attr({ name: 'attachments[' + attachmentId + '][file]' }).hide(); $('#upload_file_count').html("" + count + "" + $(inputEl).data('fileCount')); } } //clearedFileInput.insertAfter('#attachments_fields'); } function uploadAndAttachFiles(files, inputEl,btnId) { var maxFileSize = $(inputEl).data('max-file-size'); var maxFileSizeExceeded = $(inputEl).data('max-file-size-message'); var sizeExceeded = false; $.each(files, function() { if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) { sizeExceeded = true; } }); if (sizeExceeded) { window.alert(maxFileSizeExceeded); } else { $.each(files, function() { addFile(inputEl, this, true,btnId); }); } } function uploadAndAttachFiles_board(files, inputEl, id,btnId) { var maxFileSize = $(inputEl).data('max-file-size'); var maxFileSizeExceeded = $(inputEl).data('max-file-size-message'); var sizeExceeded = false; $.each(files, function() { if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) { sizeExceeded = true; } }); if (sizeExceeded) { window.alert(maxFileSizeExceeded); } else { $.each(files, function() { addFile_board(inputEl, this, true, id,btnId); }); } } function handleFileDropEvent(e) { $(this).removeClass('fileover'); blockEventPropagation(e); if ($.inArray('Files', e.dataTransfer.types) > -1) { uploadAndAttachFiles(e.dataTransfer.files, $('input:file.file_selector')); } } function dragOverHandler(e) { $(this).addClass('fileover'); blockEventPropagation(e); } function dragOutHandler(e) { $(this).removeClass('fileover'); blockEventPropagation(e); } function setupFileDrop() { if (window.File && window.FileList && window.ProgressEvent && window.FormData) { $.event.fixHooks.drop = { props: ['dataTransfer'] }; $('form div.box').has('input:file').each(function() { $(this).on({ dragover: dragOverHandler, dragleave: dragOutHandler, drop: handleFileDropEvent }); }); } } $(document).ready(setupFileDrop); $(function() { $(".file_selector").each(function() { deleteallfiles = $(this).data('deleteAllFiles'); var containerid = $(this).data('containerid'); if (containerid == undefined) containerid = ''; var count = $('#attachments_fields' + containerid + '>span').length; if (count >= 1) { $('#upload_file_count' + containerid).html("" + count + "" + $(this).data('fileCount')); var add_attachs = $('.add_attachment').filter(function(index) { return $(this).data('containerid') == containerid; }); var delete_all = $('.remove_all').filter(function(index) { return $(this).data('containerid') == containerid; }); if (delete_all.length < 1) { add_attachs.append($(" ").attr({ "href": "javascript:void(0)", 'class': 'remove_all', 'data-containerid': containerid, "onclick": "removeAll('" + containerid + "')" })); } } }); }); //课程课件 function addInputFilesCourseSource(inputEl) { checkBox = arguments[1] == 'public' ? false : true; btnId = arguments[2]; // var clearedFileInput = $(inputEl).clone().val(''); if (inputEl.files) { // if(inputEl.files.length >= 5){ // alert('一次选择的文件不能超过5个') // return; // } // upload files using ajax uploadAndAttachFilesCourseSource(inputEl.files, inputEl,checkBox,btnId); // $(inputEl).remove(); } else { // browser not supporting the file API, upload on form submission var attachmentId; var aFilename = inputEl.value.split(/\/|\\/); var count = $('#attachments_fields>span').length; attachmentId = addFile(inputEl, { name: aFilename[aFilename.length - 1] }, false); if (attachmentId) { $(inputEl).attr({ name: 'attachments[' + attachmentId + '][file]' }).hide(); if (count <= 0) count = 1; $('#upload_file_count').html("" + count + "" + $(inputEl).data('fileCount')); } } //clearedFileInput.insertAfter('#attachments_fields'); } function uploadAndAttachFilesCourseSource(files, inputEl,checkBox,btnId) { var maxFileSize = $(inputEl).data('max-file-size'); var maxFileSizeExceeded = $(inputEl).data('max-file-size-message'); var sizeExceeded = false; $.each(files, function() { if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) { sizeExceeded = true; } }); if (sizeExceeded) { window.alert(maxFileSizeExceeded); } else { $.each(files, function() { addFileCourseSource(inputEl, this, true,checkBox,btnId); }); } } function addFileCourseSource(inputEl, file, eagerUpload,checkBox,btnId) { var attachments_frame = '#attachments_fields'; if ($(attachments_frame).children().length < 30) { deleteallfiles = $(inputEl).data('deleteAllFiles'); var attachmentId = addFile.nextAttachmentId++; var fileSpan = $('', { 'id': 'attachments_' + attachmentId, 'class': 'attachment' }); //alert(checkBox); if(checkBox){ fileSpan.append( $('', { 'type': 'text', 'class': 'upload_filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly' }).val(file.name), // $('', { // 'type': 'text', // 'class': 'description', // 'name': 'attachments[' + attachmentId + '][description]', // 'maxlength': 254, // 'placeholder': $(inputEl).data('descriptionPlaceholder') // }).toggle(!eagerUpload), $('
', { 'class': 'div_attachments', 'name': 'div_' + 'attachments_' + attachmentId }) ).appendTo('#attachments_fields'); }else { fileSpan.append( $('', { 'type': 'text', 'class': 'upload_filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly' }).val(file.name), // $('', { // 'type': 'text', // 'class': 'description', // 'name': 'attachments[' + attachmentId + '][description]', // 'maxlength': 254, // 'placeholder': $(inputEl).data('descriptionPlaceholder') // }).toggle(!eagerUpload), // $('' + $(inputEl).data('fieldIsPublic') + ':').attr({ // 'class': 'ispublic-label' // }), // $('', { // 'type': 'checkbox', // 'class': 'is_public_checkbox', // 'value': 1, // 'name': 'attachments[' + attachmentId + '][is_public_checkbox]', // checked: 'checked' // }).toggle(!eagerUpload), $(' ').attr({ 'href': "#", 'class': 'remove-upload' }).click(function () { if (confirm($(inputEl).data('areYouSure'))) { removeFile(); if (!eagerUpload) { (function (e) { reload(e); })(fileSpan); } } }).toggle(!eagerUpload), $('
', { 'class': 'div_attachments', 'name': 'div_' + 'attachments_' + attachmentId }) ).appendTo('#attachments_fields'); } if (eagerUpload) { ajaxUpload(file, attachmentId, fileSpan, inputEl,btnId); } return attachmentId; } return null; } addFileCourseSource.nextAttachmentId = 1;