/** * @author NAVER (developers@xpressengine.com) * @version 0.1.1 * @brief 파일 업로드 관련 **/ var uploadedFiles = []; var uploaderSettings = []; var loaded_images = []; var swfUploadObjs = []; var uploadSettingObj = []; var uploadAutosaveChecker = false; /** * 업로드를 하기 위한 준비 시작 * 이 함수는 editor.html 에서 파일 업로드 가능할 경우 호출됨 **/ // window.load 이벤트일 경우 && 문서 번호가 가상의 번호가 아니면 기존에 저장되어 있을지도 모르는 파일 목록을 가져옴 (function($){ var defaultHandlers; function init(cfg, exe) { var seq = cfg.editorSequence; if(!is_def(seq)) return; cfg = $.extend({ sessionName : 'PHPSESSID', allowedFileSize : 2097152, // byte. 2*1024*1024 allowedFileTypes : '*.*', allowedFileTypesDescription : 'All Files', replaceButtonID : 'swfUploadButton'+cfg.editorSequence, insertedFiles : 0 }, cfg); uploadSettingObj[seq] = cfg; $(function(){ start(cfg); }); } function start(cfg) { var $button, width, height, $span, seq, id, settings, handlers, name, fn, swfu, $swf; seq = cfg.editorSequence; id = cfg.replaceButtonID; $button = $('#'+id).wrap(''); width = $button.width(); height = $button.height(); $span = $('').insertAfter($button); settings = { flash_url : request_uri + 'modules/editor/tpl/images/SWFUpload.swf', upload_url : request_uri + 'index.php', post_params : { mid : current_mid, act : 'procFileUpload', editor_sequence : seq, uploadTargetSrl : editorRelKeys[seq].primary.value }, http_success : [302], file_size_limit : Math.floor( (parseInt(cfg.allowedFileSize,10)||1024) / 1024 ), file_queue_limit : 0, file_upload_limit : 0, file_types : cfg.allowedFileTypes, file_types_description : cfg.allowedFileTypesDescription, custom_settings : { progressTarget : null, cancelButtonId : null }, debug : false, // Button settings button_window_mode : 'transparent', button_placeholder_id : $span.attr('id'), button_text : null, button_image_url : request_uri+'common/img/blank.gif', button_width : width, button_height : height, button_text_style : null, button_text_left_padding : 0, button_text_top_padding : 0, button_cursor : -2, editorSequence : seq, uploadTargetSrl : editorRelKeys[seq].primary.value, fileListAreaID : cfg.fileListAreaID, previewAreaID : cfg.previewAreaID, uploaderStatusID : cfg.uploaderStatusID }; if(typeof(enforce_ssl)!=="undefined" && enforce_ssl) { settings.upload_url = request_uri+'index.php'; } // preview $('#'+cfg.fileListAreaID).click(previewFiles); // The event handler functions are defined in handlers.js handlers = { file_queued : 'FileQueued', file_queue_error : 'FileQueueError', file_dialog_complete : 'FileDialogComplete', upload_start : 'UploadStart', upload_progress : 'UploadProgress', upload_error : 'UploadError', upload_success : 'UploadSuccess', upload_complete : 'UploadComplete', queue_complete : 'QueueComplete' }; for(name in handlers) { if(!handlers.hasOwnProperty(name)) continue; fn = 'on'+handlers[name]; settings[name+'_handler'] = cfg['on'+fn] || defaultHandlers[fn]; } if(is_def(window.xeVid)) settings.post_params.vid = xeVid; settings.sessionName = cfg.sessionName; if(getCookie(cfg.sessionName)) settings.post_params[cfg.sessionName] = getCookie(cfg.sessionName); uploaderSettings[seq] = settings; swfu = new SWFUpload(settings); $swf = $('#'+swfu.movieName); swfUploadObjs[seq] = swfu.movieName; if(!$swf.length) return; $swf.css({ display : 'block', cursor : 'pointer', position : 'absolute', left : 0, top : 0, width : width + 'px', height : height + 'px' }); if(cfg.insertedFiles || editorRelKeys[seq].primary.value) reloadFileList(cfg); } function _true(){ return true; } defaultHandlers = { onFileQueued : _true, onFileQueueError : function(file, errorCode, message) { try { switch(errorCode) { case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED : alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file."))); break; case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: alert("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); break; case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: alert("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); break; case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: alert("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); break; default: alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message); break; } } catch(e) { this.debug(e); } }, onFileDialogComplete : function(numFilesSelected, numFilesQueued) { try { if(getCookie(this.settings.sessionName)) this.addPostParam(this.settings.sessionName, getCookie(this.settings.sessionName)); this.startUpload(); } catch (e) { this.debug(e); } }, onUploadStart : _true, onUploadProgress : function(file, bytesLoaded, bytesTotal) { if(getCookie(this.settings.sessionName)) this.addPostParam(this.settings.sessionName, getCookie(this.settings.sessionName)); try { var $list, $lastopt, percent, filename; $list = $('#'+this.settings.fileListAreaID); percent = Math.ceil((bytesLoaded / bytesTotal) * 100); filename = file.name; $lastopt = $list.find('>option:last'); if(filename.length>20) filename = filename.substr(0,20)+'...'; if(!$lastopt.length || $lastopt.attr('value') != file.id) { $lastopt = $('