/** * jquery.fixFormTable.js * * * TagFilter.java 에 문서생성시 garbage 요소 제거하는 removeGarbageElements() 메서드 추가해뒀으니, 이 스크립트는 최소한으로만 사용할 것. * * * @version 1.0 * @author youngjun cho * @description 사용자가 입력하는 서식테이블의 레이아웃을 정돈한다. * @date 2014.10.01 * * 엑셀이나 한글에서 표를 복사하여 에디터에 붙여넣은 뒤 저장하게 되면, table 내에 garbage 요소들이 존재한다. * java 에서 붙여넣은 테이블을 DB에 저장하기 전에 필요없는 요소들을 제거하는 방법이 최선이긴 하지만, * 고치기가 쉽지않아 jquery 로 테이블의 레이아웃을 정리하는 후처리 방식으로 진행해본다. * 페이지 로드가 완료되었을때("$(document).ready(...)") 호출하는 것을 기준으로 한다. * * 잘 맹글었는건지는 모르겠는데... 잘 실행되길... * * 전제조건 * - 호출하는 파일에 jquery core library 가 반드시 삽입되어 있어야 한다. * * 사용 예 * $(document).ready(function() { * $.fixRegistFormTable( $("#formDiv").find("table"), {}); * * OR * * $.fixRegistFormTable( $("form[name='dform']").find("table"), {}); * }); */ "use strict"; (function ($) { $.fixFormTable = { defaults : { /** * fixFormTable 옵션 */ useFix : true // true : 테이블표 정돈 사용 , false : 테이블표 정돈 사용안함 (false 로 변경할 경우 소스내에 fixFormTable 의 함수를 호출해도 실행되지 않는다.) , indicator : true // true : indicator 사용 , false : indicator 미사용 , debug : false // true : console.log 로 debug 메세지 출력, false : debug 메세지 출력 안함. , indicatorObj : "#ajax_indicator_fix_table" // indicator's DOM. , indicatorBackgroundColor : "transparent" // indicator 배경색 : transparent, #000000, #FFFFFF, ... , indicatorBackgroundZIndex : 1000 // indicator 배경 z-index , indicatorBackgroundOpacity : 1.0 // indicator 배경 opacity , indicatorWidth : "230px" // indicator 전경 width , indicatorHeight : "32px" // indicator 전경 height , indicatorTop : "50%" // indicator 전경 top , indicatorLeft : "50%" // indicator 전경 left , indicatorMargin : "-16px 0 0 -115px" // indicator 전경 margin , indicatorPadding : "10px 0 10px 0" // indicator 전경 padding , indicatorZindex : 1001 // indicator 전경 z-index , indicatorImageUrl : "/totsys/common/js/img/ajax-loader1.gif" // indicator 전경 이미지 , indicatorColor : "#000000" // indicator 전경 배경색 transparent, #000000, #FFFFFF, ... , indicatorOpacity : 0.5 // indicator 전경 opacity , indicatorFontColor : "#FFFFFF" // indicator 전경 폰트색상 , indicatorFontWeight : "bold" // indicator 전경 폰트스타일 , indicatorFontFamily : "dotum" // indicator 전경 폰트종류 , indicatorFontSize : "13px" // indicator 전경 폰트크기 , indicatorText : "서식표를 정리 중입니다..." // indicator 전경 텍스트 }, checkIndicator : function() { /** * indicator element 가 존재하는지 체크. */ var isExistIndicator = false; try { if($.fixFormTable.defaults.indicator === true) { isExistIndicator = $("#ajax_indicator_fix_table").length > 0 ? true : false; } } catch(e) { $.fixFormTable._log("checkIndicator",e); } return isExistIndicator; }, showIndicator : function() { /** * indicator element 를 body 에 추가하고, show. */ try { if($.fixFormTable.defaults.indicator === true) { if ($.fixFormTable.checkIndicator() === false) { var ajaxIndicatorHtml = ""; ajaxIndicatorHtml = ajaxIndicatorHtml + "
"; $("body").append(ajaxIndicatorHtml); $($.fixFormTable.defaults.indicatorObj).show(); } else { $($.fixFormTable.defaults.indicatorObj).show(); } } } catch(e) { $.fixFormTable._log("showIndicator",e); } }, hideIndicator : function() { /** * indicator element 를 hide. */ try { //$($.fixFormTable.defaults.indicatorObj).hide(); $($.fixFormTable.defaults.indicatorObj).fadeOut(); } catch(e) { $.fixFormTable._log("hideIndicator",e); } }, _log : function(_position, _msg) { /** * console.log 출력 함수. */ try { if ($.fixFormTable.defaults.debug === true) { var logMsg = "====> [:: jquery.fixFormTable.js ::] " + _position + ", " + _msg; if (typeof console == "object") { console.log(logMsg); } else { alert(logMsg); // console.log 를 지원하지 않는 브라우저 (IE8 이하) } } } catch(e) {} } }; /** * 등록/수정 페이지에서 서식테이블 정리에 사용. * opts(options) 은 파라미터로 받을 수 있게 선언만 해둠. * @param {type} targetObj * @param {type} opts * @returns {undefined} */ $.fixRegistFormTable = function (targetObj, opts) { if ($.fixFormTable.defaults.useFix === true) { try { $.fixFormTable.showIndicator(); // indicator 실행. /** * input element 다음(next)에 오는 garbage element 를 삭제(remove)한다. * 단, input, a, img 는 제외(not)한다. * * - loop 로 탐색하는 방법 * $.each(tableObj.find("input").next().not("input,a,img"), function() { * $(this).remove(); * }); * */ targetObj.find("input").next().not("input,a,img").hide(); /** * input element 바로 앞(prev)에 a 태그로 감싸진 달력 버튼(img) 가 있다면, input 의 width 를 100% 에서 70% 로 변경한다. * input 의 width 가 100% 로 되어있어서, td 내에서 개행이 발생한다. * * - loop 로 탐색하는 방법 * $.each(tableObj, function() { * if ($(this).find("input").prev("a").find("img").length > 0) { * $(this).find("input").css("width","70%"); * } * }); * */ targetObj.find("td a img").parent().next("input").css("width","70%"); /** * select 의 width 를 100% 로 변경하고, select 다음(next) 요소를 숨긴다. 단, input, a, img 은 제외(note) 한다. */ targetObj.find("td center select").css({ "width":"100%", "text-align":"center" }).parent().next().not("input,a,img").hide(); } catch (e) { $.fixFormTable._log("fixRegistFormTable",e); } finally { $.fixFormTable.hideIndicator(); // indicator 종료. } } }; /** * 태그 하위 자식태그들에서 '