var adm_OS = ""; var fileAjax; var fileBool = true; var jslang = []; jslang[1001] = "파일 업로드 객체 생성 오류"; jslang[1002] = "선택한 파일 [#xx#]개"; jslang[1003] = "File Drag & Drop"; jslang[1004] = "파일 업로드 오류"; jslang[1005] = "파일 리스팅 오류"; jslang[1006] = "선택한 파일을 취소 하시겠습니까?"; jslang[1007] = "[#xx#] 중 최소 하나이상 선택해 주세요."; jslang[1008] = "[#xx#] 정보를 입력해 주세요."; jslang[1009] = "전송중..."; jslang[1010] = "파일 용량을 [#xx#] 이하로 올려 주세요."; var h_root = ''; var file = { init: function(options) { var defaults = { outer: '', id: '', info: '', rndcode: uniqid(), el: null, size: 0, total_size: 0, multi: true, mobile: false, right_btn_cnt: 1 }; var options = $.extend({}, defaults, options); /* // case : mobile (os chk.) if (IS_MOBILE()) { $.ajax({ url: h_root+'/lib/os.nx?'+uniqid(), type: 'GET', dataType: 'html', async: false }) .done(function(data) { // os type 을 options 에 추가 options.os = data; file.evton(options); }) .fail(function() { alert(jslang[1001]); return; }); } else { */ // os type 을 options 에 추가 options.os = ''; file.evton(options); //} // 시작 문구 options.info.get(0).innerHTML = '

'+jslang[1003]+'

'; // 대상 input=file 의 multiple control if (options.multi) { options.id.attr('multiple', 'multiple'); } else { options.id.removeAttr('multiple'); } }, evton: function(options) { options.id.on({ change:function(e) { options.el = options.id.get(0).files; file.add(options); } }); options.outer.get(0).addEventListener("dragover", function(event) { event.preventDefault(); $(this).css("background", "#cccccc"); }, true); options.outer.get(0).addEventListener("dragleave", function(event) { $(this).css("background", ""); }, true); options.outer.get(0).addEventListener("drop", function(event) { event.preventDefault(); $(this).css("background", ""); options.el = event.dataTransfer.files; file.add(options); }, true); // html 객체에 기본 options data 저장 $('html').data('jsf_'+options.rndcode, options); }, add: function(options) { // case : android if (options.os == 'Android') { var v = ''; if (options.el > 0) { v = "" +'

' +''+ +jslang[1002].replace('[#xx#]', options.el) +'' +''+getSizeTxt(options.size)+'' +'

' +'
' +"" ; } if (v == '') { v = "

"+jslang[1003]+"

"; if (adm_OS != '') options.outer.hide(); } options.outer.removeClass('added').addClass('added').attr('filebo','Y'); options.info.get(0).innerHTML = v; } // case else else { if (fileBool) { fileBool = false; // size 제한 if (options.size > 0) { try { for (var i = 0; i < options.el.length; i++) { if (options.el[i].size > options.size) { alert(jslang[1010].replace('[#xx#]', getSizeTxt(options.size))); fileBool = true; return; } } } catch(e) {console.log(e)} } // 기존 upload 정보 가져오기 file.view({rndcode: options.rndcode, mode: 'read', mobile: ((options.mobile) ? 'Y' : 'N')}); //----- file upload by ajax var fd = new FormData(); fd.append("FT_RNDCODE", options.rndcode); fd.append("FT_MOBILE_YN", ((options.mobile) ? 'Y' : 'N')); fd.append("TOTAL_SIZE", options.total_size); fd.append("PLUS_YN", "Y"); fd.append("MULTI_YN", ((options.multi) ? 'Y' : 'N')); for (var i = 0; i < options.el.length; i++) fd.append("file[]", options.el[i]); fileAjax = $.ajax({ url: h_root+'/json/file.addProc.nx', processData: false, contentType: false, data: fd, dataType: 'json', type: 'POST', xhr: function() { var myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ myXhr.upload.addEventListener("progress", function(e) { if (e.lengthComputable) { var percentage = Math.round((e.loaded * 100) / e.total); file.progress(percentage); } }, false); } return myXhr; }, beforeSend: function() { file.progress(0); }, success: function(json){ file.draw({rndcode: options.rndcode, json: json, mode: 'add'}); fileBool = true; if(typeof(file_return) == "function") file_return('add', options.id.attr('id'), json); }, fail: function() { alert(jslang[1004]); } }); //----- } } }, view: function(options) { if (options.rndcode == "") return; $("#div_upload").show(); $.ajax({ url: h_root+'/json/file.read.nx', type: 'POST', dataType: 'json', data: {FT_RNDCODE: options.rndcode, FT_MOBILE_YN: options.mobile} }) .done(function(json) { file.draw({rndcode: options.rndcode, json: json, mode: options.mode}); }) .fail(function() { alert(jslang[1005]); }); }, draw: function(options) { // options 기본값과 합치기 var options = $.extend({}, options, $('html').data('jsf_'+options.rndcode)); $("#ul_file").html(""); if (!options.json.success) { alert(options.json.msg); } else { if (!options.json.items) { if (options.mode == "del") { options.outer.removeClass('added').attr('filebo','N'); options.info.get(0).innerHTML = "

"+jslang[1003]+"

"; if (adm_OS != '') options.outer.hide(); upload_close(); } return; } file.progress(100); var html = ""; for (var i = 0; i < options.json.items.length; i++) { var item = options.json.items[i]; html += '
  • '; } $("#ul_file").html(html); for (var i = 0; i < options.json.items.length; i++) { var item = options.json.items[i]; $("#li_file_" + item.FT_TBFNUM).html( '

    '+item.FT_ORINAME+'

    ' +'

    '+getSizeTxt(item.FT_SIZE)+'

    ' +"" ); } var v = ''; if (options.json.cnt > 0) { v = "" +'

    ' +'' +jslang[1002].replace('[#xx#]', options.json.cnt) +'' +''+getSizeTxt(options.json.size)+'' +'

    ' +'
    ' +"" ; } options.outer.removeClass('added'); if (v == '') { v = "

    "+jslang[1003]+"

    "; if (adm_OS != '') options.outer.hide(); options.outer.attr('filebo','N'); } else { options.outer.addClass('added').show().attr('filebo','Y'); } options.info.get(0).innerHTML = v; } if (options.mode == "add") options.id.get(0).value = ''; }, del: function(options) { // options 기본값과 합치기 var options = $.extend({}, options, $('html').data('jsf_'+options.rndcode)); // rfv. if ((options.info == "") && options.num == "") return; if (options.alert) { if (!confirm(jslang[1006])) return; } // delete file $.post(h_root+'/lib/filetemp.delProc.nx', {FT_RNDCODE: options.rndcode, FT_TBFNUM: options.num}, function(data) { // num 이 지정되어 있지 않을 경우 전체삭제 if (options.num == '') { options.outer.removeClass('added').attr('filebo','N'); options.info.get(0).innerHTML = "

    "+jslang[1003]+"

    "; if (adm_OS != '') options.outer.hide(); upload_close(); } else { file.view({rndcode: options.rndcode, mode: 'del', mobile: ((options.mobile) ? 'Y' : 'N')}); } if(typeof(file_return) == "function") file_return('del', options.id.attr('id')); }, 'html'); }, stop: function() { $.get(h_root+'/lib/os.nx', function(data) { if (data == "Android") { upload_close(); } else { if (fileBool) { upload_close(); } else { upload_close(); fileBool = true; } } }, 'html'); }, progress: function(v) { $("#p_percent").html(v+"%"); $("#div_percent").css("width", v+"%"); if (v < 100) { $("#a_close").hide(); $("#a_confirm").hide(); } else { $("#a_close").show(); $("#a_confirm").show(); } } } var rfv = { chk:function(f) { if (!f instanceof Array || f.length != 2) return false; var $el = ""; var f0 = f[0], f1 = f[1]; for (var i in f0) { // case : class 로 전달된 경우 (checkbox 형식 확인) if (f0[i].indexOf('.cls_') > -1) { if (!$(f0[i]).is(":hidden")) { if ($(f0[i]+":checked").length <= 0) { var str = jslang[1007].replace('[#xx#]',f1[i]); alert(str); $(f0[i]).get(0).focus(); return false; } } } // case : class 로 전달된 경우 (date 형식 확인) else if (f0[i].indexOf('.date_') > -1) { if (!$(f0[i]).is(":hidden")) { for (var j = 0; j < $(f0[i]).size(); j++) { if ($(f0[i] + ":eq(" + j + ")").val() == "") { var str = jslang[1008].replace('[#xx#]',f1[i]); alert(str); $(f0[i] + ":eq(" + j + ")").focus(); return false; } } } } // case : 기본 ID 로 구분 else { $el = $('#'+f0[i]); if (!$el.is(":hidden")) { if ($el.val() == "") { var str = jslang[1008].replace('[#xx#]',f1[i]); alert(str); $el.focus(); return false; } } } } return true; } } // 저장중 임을 처리 var ing = { save: function(m, el) { if (el.length <= 0) return; var m = (m == 'on') ? 'on' : 'off'; if (m == 'on' && typeof el.data('txt') == 'undefined') { // 기존의 텍스트 문구 저장 var _href = el.attr('href'), _onclick = el.attr('onclick'), _txt = el.text() ; el.data({href: _href, onclick: _onclick, txt: _txt}); el.css('backgroundColor','#ccc').text(jslang[1009]).attr({href: 'javascript:void(0);', onclick: 'javascript:void(0);'}); } else { var _data = el.data(); el.css('backgroundColor','#3462b4').text( _data.txt ).attr({href: _data.href, onclick: _data.onclick}); // 저장한 data 비우기 el.removeData(); } } } function F_CTRL_IF_LAYER(v) { // 옵션값(v) 이 배열로 전달되지 않았을 경우 빈배열 생성 if (typeof v !== 'object') v = []; // set : variables var id = v.id, src = v.src, $el = $('#'+id), $el_btn_cls = $el.find('[data-id=btn_cls]'), $el_loading = $el.find('[data-id=if_loading]'), $el_if = $('#if_'+id), el_ww = $el_if.width() ; // chk : rfv. if ($el.length <= 0) return; if (v.title != '') $el.find('[data-role="title"]').text(v.title); if (v.ww != '') $el.css('width',v.ww).attr('data-width',v.ww); if (v.maxww != '') $el.css('maxWidth',v.maxww).attr('data-maxwidth',v.maxww); if (v.hh != '') $el.css('height',v.hh).attr('data-height',v.hh); if (v.maxhh != '') $el.css('maxHeight',v.maxhh).attr('data-maxheight',v.maxhh); // iframe layer 에 사용할 배경 mask 생성 if ($('#if_layer_bg').length <= 0) { $('body').prepend(''); } // mask 변수 할당 var $mask = $('#if_layer_bg'); // mask layer show $mask.fadeIn('fast'); // mask click 시 창닫기 evt. 등록 $mask.off().on('click', function(e) { F_CLOSE_IF_LAYER({el:$el}); }); // 뒷부분의 scroll 막기 $('html, body').css({'overflow':'hidden','height':($(window).scrollTop() + $(window).height())}); // src 정보가 전달된 경우 iframe 의 data-src 에 지정 if (src != '') { $el_if.attr('data-src', src); } // 객체 가운데 정렬 $('#'+id).show(); // 닫기 버튼 링크 생성 $el_btn_cls.off().click(function(e) { F_CLOSE_IF_LAYER({el:$el}); }); // loading 표시 $el_loading.show(); // iframe width 셋팅 (ios 에서 iframe 의 width 를 제대로 가져오지 못하는 문제(jquery carousel 과 함께 사용시) 수정용) // src 설정 // $el_if.css({width: el_ww}) $el_if.css({width: '100%'}) .attr({'src':$el_if.attr('data-src')}) ; // resize evt. 등록 $el.off().on({ _resize: function() { // outer 와 iframe 의 width 가 다를 경우 outer 기준으로 resize if ($el.width() != $el_if.width()) { $el_if.css('width', $el.width()); } } }); // 초기 1회 resize evt. 강제 실행 $el.trigger('_resize'); $(window).resize(function() { $el.trigger('_resize'); }); } function F_CLOSE_IF_LAYER(opts) { var defaults = { el: '' }; var opts = $.extend({}, defaults, opts); if (opts.el == '') return; var el = opts.el; var el_if = $('#if_'+opts.el.attr('id')); var mask = $('#if_layer_bg'); var pre_src = el_if.attr('src'); el_if.attr('src',''); var pre_ww = el.attr('data-width'), pre_hh = el.attr('data-height'), pre_maxww = el.attr('data-maxwidth'), pre_maxhh = el.attr('data-maxheight') ; el.off().fadeOut('fast', function() { // $(this).removeAttr('style').css({'z-index':'10000', 'display':'none', 'width':pre_ww, 'height':pre_hh, 'maxWidth':pre_maxww, 'maxHeight':pre_maxhh}); $(this).removeAttr('style').css({'z-index':'10000', 'display':'none', 'width':pre_ww, 'height':pre_hh}); }); mask.off().fadeOut('fast'); $('html, body').css({'overflow':'','height':''}); if(pre_src.indexOf('/lcms/cont.cate.list') >= 0) { window.location.reload(); } if (el.get(0).id == 'secondView') { var qstr = pre_src.split('?')[1]; if (qstr) { var qarr = qstr.split('&'); var qstrs = []; for (var i in qarr) { var t = qarr[i].split('='); qstrs[t[0]] = t[1]; } if (qstrs['num']) { var t_if = document.getElementById(qstrs[t[0]]); if (t_if != null && typeof(t_if.contentWindow.secondViewClose) == 'function') { t_if.contentWindow.secondViewClose(); } } } } } //]]>