오픈소스

해시넷
59.0.90.180 (토론)님의 2023년 5월 9일 (화) 18:42 판 (같이 보기)
이동: 둘러보기, 검색

오픈소스(open source)란 소프트웨어소스코드(source code)를 누구나 열람하고 수정할 수 있도록 공개한 것을 말한다. 대체로 무료로 배포된다. 오픈소스 소프트웨어(Open Source Software, OSS)라고도 한다. 오픈소스 기반의 운영체제(OS), 웹서버, DBMS, 플러그인, 프레임워크, 개발 툴, 웹브라우저, 테스트 툴 등 다양한 오픈소스 소프트웨어가 있다. 오픈소스 소프트웨어의 경우 소스 코드가 공개되어 있고, 통째로 복사하는 것이 허용되는 라이선스를 따르기 때문에, 원저작자의 허가 없이 포크(fork)를 통한 새로운 소프트웨어 개발이 가능하다.

종류

운영체제

웹서버

웹 애플리케이션 서버

데이터베이스 관리 시스템

웹브라우저


표준 프레임워크

  • 스프링(Spring) : 자바 언어를 사용하여 응용 프로그램을 개발하기 위해 사용하는 오픈소스 기반의 표준 프레임워크이다. 아파치재단이 관리하고 있다.
  • 스트럿츠(Struts) : 자바 언어를 사용하여 응용 프로그램을 개발하기 위해 사용하는 오픈소스 기반의 표준 프레임워크이다. 크레이그 맥클라나한(Craig McClanahan)이 처음 개발했고, 2000년 5월 아파치재단에 이관되었다.
  • 전자정부 표준 프레임워크(eGovFrame) : 대한민국 정부가 공공기관 시스템 개발에 공동으로 사용할 목적으로 개발한 오픈소스 기반의 표준 프레임워크이다. 기존의 스프링 프레임워크와 아이바티스(iBatis) 프레임워크를 활용하여 개발했다. 아파치 라이선스로 배포하고 있다.
  • 아이바티스(iBatis) : 자바로 개발한 응용 프로그램을 SQL로 개발한 데이터베이스와 연결시켜 주는 역할을 하는 오픈소스 기반의 표준 프레임워크이다. 아파치재단이 개발했다.
  • 마이바티스(MyBatis) : 2010년 기존의 아이바티스(iBatis)를 포크하여 새로 업그레이드한 오픈소스 기반의 표준 프레임워크이다. 아파치 라이선스를 따른다.
  • 하이버네이트(Hibernate) : 객체 지향 언어인 자바의 클래스 파일을 관계형 데이터베이스의 테이블에 매핑해 주는 오픈소스 기반의 표준 프레임워크이다. 2001년 개빈 킹(Gavin King)이 개발했다.
  • 에이에스피닷넷(ASP.NET) : 동적 웹 페이지를 개발하기 위해 사용하는 오픈소스 기반의 웹 프로그램 개발 표준 프레임워크이다. 미국 마이크로소프트가 기존 ASP 기술을 계승하여 개발했다.
  • 노드제이에스(node.js) : 자바스크립트(JavaScript) 언어를 사용하여 서버 측 응용 프로그램을 개발할 수 있는 오픈소스 기반의 I/O 프레임워크이다. 2009년 라이언 달(Ryan Dahl)이 개발했다. 기존의 자바스크립트는 프런트 엔드 개발에 주로 사용되었으나, node.js의 출현으로 자바스크립트를 이용하여 서버 측의 백 엔드까지 개발할 수 있게 되었다.
  • 앵귤러제이에스(AngularJS) : 구글이 관리하는 오픈소스 기반의 웹 어플리케이션 프레임워크이다.
  • 하둡(Hadoop) : 여러 개의 저렴한 컴퓨터를 마치 하나인 것처럼 묶어 대용량 데이터를 처리하는 오픈소스 소프트웨어 프레임워크이다. 주로 빅데이터 처리에 사용된다. 아파치재단에서 관리하고 있다.
  • 스파크(Spark) : 오픈소스 기반의 클러스터 컴퓨팅 프레임워크이다. 2009년 미국 UC 버클리대학교의 대학원생인 마테이 자하리아(Matei Zaharia)가 개발했다. 영어로 spark는 불꽃이 튀기는 것을 말하는데, 대용량 데이터를 마치 불꽃이 튀기는 것처럼 순식간에 처리한다는 것을 강조하기 위해 붙인 이름이다. 2010년 BSD 라이선스로 공개했고, 2013년 아파치재단에 넘겨서 아파치 라이선스로 변경되었다.
  • 아두이노(Arduino) : 사물인터넷(IoT) 기기를 만들기 위하여 사용하는 오픈소스 기반의 컴퓨팅 플랫폼을 말한다. C, C++ 등 다양한 언어를 사용하여 원하는 동작을 하도록 코딩을 한 후 기계어로 컴파일하여 마이크로컨트롤러(microcontroller) 보드에 업로드하면, 아두이노가 작동한다.

콘텐츠 관리 시스템

위키


개발 도구

테스트 툴

  • 제이미터(JMeter) : 아파치재단에서 만든 공개형 웹 서비스 부하 테스트 도구이다. 웹 애플리케이션 등 다양한 서비스의 성능을 분석하고 측정하기 위한 GUI 기반의 오픈소스 테스트 도구이다.
  • 버그질라(Bugzilla) : 1998년 테리 와이스만(Terry Weissman)이 개발한 오픈소스 기반의 버그 추적 및 테스트 프로그램이다. 모질라재단에서 관리하고 있다.
  • 소나큐브(SonarQube) : 프로그램 코드의 품질을 체크해 주는 오픈소스 툴이다. 이클립스(Eclipse)에서 사용할 수 있는 SonarQube 플러그인이 무료로 제공되고 있다.
  • 엔그라인더(nGrinder) : 2011년 네이버㈜가 개발한 오픈소스 기반의 시스템 성능 테스트 툴이다.

웹취약점 점검 툴

  • (ZAP) : Zed Attack Proxy의 약자로서, OWASP가 만든 오픈소스 기반의 웹취약점 점검 툴이다. 정식 이름은 OWASP ZAP이다. 자바 언어로 개발되었고, 리눅스, 윈도우, 오에스텐 등 다양한 운영체제(OS)에서 작동한다. 플러그인 방식으로 다양한 기능을 추가할 수 있다. 전 세계 25개 언어로 번역되어 있다.
  • 야스카(Yasca) : 웹 보안 취약점 점검을 위해 무료로 사용할 수 있는 소스 코드 진단 도구이다. Yasca는 Yet Another Source Code Analyzer의 약자이다. 2007년 마이클 스코베타(Michael Scovetta)가 개발했다.
  • 파인드벅스(FindBugs) : 자바 프로그램의 버그를 찾아주는 오픈소스 기반의 코드 분석기이다. 자바의 소스 코드가 아니라 바이트코드(bytecode)를 분석하여 버그 패턴을 탐지한다. 단독 실행형도 있고, 이클립스(Eclipse)나 젠킨스(Jenkins) 등에 플러그인 방식으로 삽입하여 사용하는 것도 있다.
  • 피엠디(PMD) : 자바 프로그램의 오류나 비효율적인 코드를 찾아주는 소스 코드 분석기이다. 기본적으로 제공되는 탐색 규칙 이외에 사용자가 직접 원하는 규칙을 정하여 자바 소스 코드의 오류나 비효율적인 부분을 찾아낼 수 있다. 공식적으로는 어떤 것의 약자도 아니지만, 비공식적으로는 Programming Mistake Detector의 약자로 알려져 있다. 아파치 라이선스 등을 따르는 오픈소스 무료 소프트웨어이다.

암호화폐

각주

  1. 미디어위키〉, 《위키백과》
<!DOCTYPE html><html lang="ko"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>


 <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">                                     
 <title>(주)호원</title>                                                                          
 <style type="text/css" media="print">
 	@page                                     
 	{                                         
     	size:    auto;                        
    	 margin: 19mm 19mm 19mm 19mm;                    
 	}                                         
 	body, html                                
 	{                                         
     	padding: 0;                           
     	margin: 0;                            
 	}                                         
 	tr {	
 	page-break-inside: avoid; 
 	} 
 </style>                                  
                                           
 <style>                                   
 td {                                      
     	  box-sizing: content-box;   
  }	                                       
 	* {                                       
     	word-break: break-all;               
 	}                                         
 </style>                                  
                                                                                                  
                                                                                                   
 <script type="text/javascript" src="/style/js/jquery-2.1.1.min.js"></script>

<link rel="stylesheet" id="publish_css" href="/style/css/gw.css"><script type="text/javascript" src="http://ngw.howon.com/gw/resources/js/common/newriseup.js"></script> <script type="text/javascript" src="http://ngw.howon.com/gw/resources/js/common/cascade.js"></script>

<script id="_LINK_DATA_" type="text/data">{}</script>
<colgroup><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"><col style="width: 27px;"></colgroup> <tbody> </tbody>
기 안 지 (PLANNING SHEET)
(주)호원양산품질1팀-0484호
기안부서양산품질1팀
  • 책임매니저
  • 양산품질1팀
  • 최호성
  • 승인
  • 10/25 13:34
  • 1공장 공장장
  • 제조1_3공장
  • 양정운
  • 승인
  • 10/25 13:58
  • 생산본부장
  • 생산본부
  • 신동기
  • 승인
  • 10/26 16:26
  • 부회장
  • (주)호원
  • 신현주
  • 승인
  • 10/27 08:38
  • 회장
  • (주)호원
  • 양진석
  • 승인
  • 10/27 08:44
기안일2022-10-25
기안자윤정섭
보존년한
영구
합의부서 / 수신부서
  • 실장
  • 원가관리실
  • 최준혁
  • 승인(합의)
  • 10/26 07:40
  • 실장
  • 재무관리실
  • 김동인
  • 승인(합의)
  • 10/26 13:42
  • 경영지원본부장
  • 경영지원본부
  • 윤창권
  • 승인(합의)
  • 10/26 14:04
  • 실장
  • 전략기획실
  • 양승빈
  • 승인(합의)
  • 10/30 09:14
원가관리실, 재무관리실, 경영지원본부, 전략기획실
열  람김재원 (양산품질1팀), 김운태 (원가지원팀), 김민영 (원가지원팀), 나재선 (원가지원팀), 허지희 (품질보증팀), 배상현 (재무경영팀)
제  목SP2 PE차종 양산 설계 변경 관련 F/APRON 검사구(I/F & C/F) 수정 품의의 件

               SP2 PE차종 양산 설계 변경 관련

F/APRON 검사구 수정(I/F & C/F) 업체 제작 비용 지급을

아래와 같이 품의 하오니,

검토 후 재가 바랍니다.

 

 

                                                                                   - 아    래 -

 

 

1. 수정 내용 : SP2 PE차종 양산 설계 변경에 따른 F/APRON 검사구 수정 (I/F  : 1SET, C/F : 4SET)

 

     └  광주조립1부 베터리 트레이 작업성 개선

 

 

  1) 수정 일정

 

<img style="width: 706px; height: 77px;" src="http://ngw.howon.com/gw/dext5/2022/10/24/20221024_153340465_08807.png">

 

  2) 부품 현황

 

<img style="width: 706px; height: 173px;" src="http://ngw.howon.com/gw/dext5/2022/10/24/20221024_153308570_24026.png">

 

2. 투자 내용 : I/F &

C/F

KMC 예상가 6,210천원

 

 

 

3. 투자비 종합 현황

                                                                                                                                                              (단위 : 천원) 

<img style="width: 706px; height: 192px;" http://ngw.howon.com/gw/dext5/2023/05/09/20230509_174959613_83113.png">

 

4. 지급조건

                                                                                                                                                              (단위 : 천원)

<img style="width: 706px; height: 220px;" src="http://ngw.howon.com/gw/dext5/2022/10/24/20221024_153431693_61760.png">

 

 

※ 유첨 : SP2 PE차종 검사구 수정 보고서 - 1부

 

     <a title="행 추가" class="btn_form_plus" id="_btnPlus" style='display: none; background-image: url("http://ngw.howon.com/style/img/btn.png");' href="javascript:void(0);">행 추가</a>    
     <a title="행 삭제" class="btn_form_minus" id="_btnMinus_" style='display: none; background-image: url("http://ngw.howon.com/style/img/btn.png");' href="javascript:void(0);">행 삭제</a>

<script src="http://ngw.howon.com/style/js/html2canvas.js" type="text/javascript"></script> <script src="http://ngw.howon.com/style/js/bluebird.js" type="text/javascript"></script> <script type="text/javascript">

var load = $load("script") 
 load.script("http://ngw.howon.com/style/js/html2canvas.js", function(){ 
	load.script("http://ngw.howon.com/style/js/bluebird.js", function(){ 
   var $body$ = $("body");
    var setUserForm = $(".formrit"); 
var formIframe = $(parent.document).find('iframe[id$=Iframe]'); 
var datepickers =[]; 
var headrs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ','BA','BB','BC','BD','BE','BF','BG','BH','BI','BJ','BK','BL','BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ','CA','CB','CC','CD','CE','CF','CG','CH','CI','CJ','CK','CL','CM','CN','CO','CP','CQ','CR','CS','CT','CU','CV','CW','CX','CY','CZ','DA','DB','DC','DD','DE','DF','DG','DH','DI','DJ','DK','DL','DM','DN','DO','DP','DQ','DR','DS','DT','DU','DV','DW','DX','DY','DZ','EA','EB','EC','ED','EE','EF','EG','EH','EI','EJ','EK','EL','EM','EN','EO','EP','EQ','ER','ES','ET','EU','EV','EW','EX','EY','EZ','FA','FB','FC','FD','FE','FF','FG','FH','FI','FJ','FK','FL','FM','FN','FO','FP','FQ','FR','FS','FT','FU','FV','FW','FX','FY','FZ','GA','GB','GC','GD','GE','GF','GG','GH','GI','GJ','GK','GL','GM','GN','GO','GP','GQ','GR','GS','GT','GU','GV','GW','GX','GY','GZ']; 
formIframe.height(setUserForm.height()); 

var filter = "win16|win32|win64|mac"; 
	if(navigator.platform){ 
		if(0 > filter.indexOf(navigator.platform.toLowerCase())){ 
			formIframe.width(setUserForm.width()); 
		} 
	} 
	function hasClass(el, name) { 
		return new RegExp('(\s|^)'+name+'(\s|$)').test(el.className);  
	} 
	function getElementHeight(el) { 
		el = (typeof el === 'string') ? document.querySelector(el) : el; 
		var styles = window.getComputedStyle(el); 
		var margin = parseFloat(styles['marginTop']) + parseFloat(styles['marginBottom']); 
		return Math.ceil(el.offsetHeight + margin); 
	} 
	 
	function resizeApprovalPage () { 
		 
		var px_1 = 3.779527559; 
		var formDesignPagePaddingTop			= 19;// 5 mm 
		var formDesignPagePaddingBottom			= 19;// 5 mm 
		var formrit = document.getElementsByClassName("formrit"); 
		 
		for (var i = 0; i < formrit.length; i++) { 
			var fixedFooter = formrit[i].getElementsByClassName('fixedFooter'); 
			if (fixedFooter.length > 0) { 
				var ie9 = hasClass(document.getElementsByTagName('html')[0], 'ie9'); 
				var landscape = hasClass(formrit[i], 'landscape'); 
				var setBorder = hasClass(formrit[i], 'setBorder'); 
				var addRow = formrit[i].getElementsByClassName('addRow')[0]; 
				addRow.style.height = '0px'; 
				var addRowPrev = addRow.previousElementSibling; 
				/* 
				var prevFirst = addRowPrev.querySelector('td:first-child'); 
				var prevLast = addRowPrev.querySelector('td:last-child'); 
				 
				var borderLeftWidth = parseInt(prevFirst.style.borderLeftWidth); 
				var borderLeftStyle = prevFirst.style.borderLeftStyle; 
				var borderLeftColor = prevFirst.style.borderLeftColor; 
				var borderRightWidth = parseInt(prevLast.style.borderRightWidth); 
				var borderRightStyle = prevLast.style.borderRightStyle; 
				var borderRightColor = prevLast.style.borderRightColor; 
				 
				if (borderLeftWidth > 0 && borderRightWidth > 0) { 
					var addRowTd = addRow.querySelector('td'); 
					addRowTd.style.borderLeft = borderLeftWidth + 'px ' + borderLeftStyle + ' ' + borderLeftColor; 
					addRowTd.style.borderRight = borderRightWidth + 'px ' + borderRightStyle + ' ' + borderRightColor; 
					//addRowTd.style.borderBottom = borderRightWidth + 'px ' + borderRightStyle + ' ' + borderRightColor; 
								 
					var prevTd = addRowPrev.querySelectorAll('td'); 
					var prevTdLength = prevTd.length; 
					//for (var k = 0; k < prevTdLength; k++) { 
					//	prevTd[k].style.borderBottom = '0px'; 
					//} 
				} 
				*/ 
				 
				var pagePaddingTop = Math.round(formDesignPagePaddingTop * px_1) - 72; 
				var pagePaddingBottom = Math.round(formDesignPagePaddingBottom * px_1) - 72; 
				var minHeight = 1042 - pagePaddingTop - pagePaddingBottom - 1; 
				if (setBorder == true) {// table 전체에 border 라인 그릴때 버그처리 
					minHeight = 1040 - pagePaddingTop - pagePaddingBottom; 
				} 
				if (landscape == true) { 
					minHeight = 652 - pagePaddingTop - pagePaddingBottom; 
					if (setBorder == true) {// table 전체에 border 라인 그릴때 버그처리 
						minHeight = 650 - pagePaddingTop - pagePaddingBottom; 
					} 
				} 
				 
				addRow.style.minHeight = '0px'; 
				addRow.style.display = 'table-row'; 
				if (getElementHeight(formrit[i]) && addRow) { 
					if (getElementHeight(formrit[i]) < minHeight) { 
						minHeight = minHeight - getElementHeight(formrit[i]); 
						addRow.style.height = minHeight + 'px'; 
					} 
				} 
			} 
		} 
		formIframe.height(setUserForm.height()); 
	} 

function getSumrySum(oval){  
	var val = 0;  
	oval && oval.each(function(){  
 																						
  if(this.value && ('-' == this.value[(this.value.length-1)])){		
  	this.value = this.value.replace(/-/g,);								
  };																					
  																					
		val += ~~(this.value && this.value.replace(/,/g,));  
	});  
  
	return val;  
}  
  
function isDisplay(ix, ele){ return !($(ele).css('display') === 'none'); }  
function drawSumryMath(td, val){  
	$('td[data-header]').filter(isDisplay).find('span[name=_SUMRY_]').each(function(){  
		var	self = $(this),  
			data = self.data('value'),  
			val = 0,  
			len = 0,  
			matchs = /([a-zA-Z]+)\s*\(\s*([a-zA-Z]+)([0-9]+)\s*([:,])\s*([a-zA-Z]+)([0-9]+)\s*\)/.exec(data),  
			dest, salpa, ealpa, srow, erow, operat;  
  
		if(matchs && matchs.length === 7) {  
			salpa = matchs[2].toUpperCase();  
			ealpa = matchs[5].toUpperCase();  
			srow = ~~matchs[3];  
			erow = ~~matchs[6];  
			operat = matchs[1].toUpperCase();  
  
			if(matchs[4] === ':') {  
				var	sidx = headrs.indexOf(salpa),  
					lidx = headrs.indexOf(ealpa);  
  
				for(; lidx >= sidx ;sidx++) {  
					for(var i = srow; erow >= i ; i++){  
						dest = $('td[data-header='+headrs[sidx]+'][data-row='+i+']').filter(isDisplay).find('[data-sumry-assign=true]');  
						val += getSumrySum(dest);  
						len += dest.length;  
					}  
				}  
			} else {  
				var dest2 = $('td[data-header='+ealpa+'][data-row='+erow+']').filter(isDisplay).find('[data-sumry-assign=true]');  
				dest = $('td[data-header='+salpa+'][data-row='+srow+']').filter(isDisplay).find('[data-sumry-assign=true]');  
  
				val += getSumrySum(dest);  
				val += getSumrySum(dest2);  
				len = dest.length + dest2.length;  
			}  
  
			switch(operat){  
				case 'AVERAGE' :  
					val = val/len;  
					break;  
			}  
		}else{  
			debugger;  
			matchs = /([a-zA-Z]+)([0-9]+)\s*([\+\-\*\/\%])\s*([a-zA-Z]+)([0-9]+)/.exec(data);  
  
			if(matchs && matchs.length === 6) {  
				salpa = matchs[1].toUpperCase(),  
					ealpa = matchs[4].toUpperCase(),  
					srow = ~~matchs[2],  
					erow = ~~matchs[5],  
					operat = matchs[3];  
  
				var dest2 = $('td[data-header='+ealpa+'][data-row='+erow+']').filter(isDisplay).find('[data-sumry-assign=true]');  
				dest = $('td[data-header='+salpa+'][data-row='+srow+']').filter(isDisplay).find('[data-sumry-assign=true]');  
  
				switch(operat){  
					case '+' :  
						val = getSumrySum(dest) + getSumrySum(dest2);  
						break;  
					case '-' :  
						val = getSumrySum(dest) - getSumrySum(dest2);  
						break;  
					case '*' :  
						val = getSumrySum(dest) * getSumrySum(dest2);  
						break;  
					case '%' :  
						val = getSumrySum(dest) % getSumrySum(dest2);  
						break;  
					case '/' :  
						val = getSumrySum(dest) / getSumrySum(dest2);  
						break;  
				}  
			}  
		}  
  
		self.html(Number.toThousandComma(~~val+))  
	})  
}  

window.numberKeyUp = function (evt){ var varl = evt.currentTarget.value, self = $(evt.currentTarget); if(self.data('sumryAssign')){ drawSumryMath(self.closest("td[data-header]"), varl); } if(varl !== && !(evt.keyCode >=37 && evt.keyCode<=40)){ varl = varl.replace(/[^a-z0-9.-]/gi,)

 			evt.currentTarget.value = Number.toThousandComma(varl) 

} return false; };

	function setRow () { 
		 
		formIframe.height(setUserForm.height());// iframe 사이즈를 양식 사이즈로 맞춤 
		 
		 $('.form_wrap').find('.timepicker .setting').removeClass('active');//view에서 timepicker안에 setting부분 active 지우기
		 
		 
		 
		// $('.editorWrap').css({ 'padding' : '0 15px 0' });// ----> 필요없음 
      $('.editorWrap').addClass('editor_orderlist_reset');// 2021.02.15 추가 
		 
		/* 
		if ($('.editorWrap').find('img').length > 0) { 
			var resizeCount = 0; 
			var resizeApprovalPageInterval = setInterval(function(){ 
				resizeApprovalPage(); 
				if (resizeCount == 5) { 
					clearInterval(resizeApprovalPageInterval); 
				} 
				resizeCount++; 
			}, 500); 
		} 
		*/ 
		// resizeApprovalPage(); // ---> A4 사이즈 맞추기 위한 함수 
		 
		// $('.btn_form_plus, .btn_form_minus').hide();// 반복 버튼 감추기 
	} 

	function setEdit () { 
		setDatepickerUseYnToday ( 
			datepickers 
		); 
		setIframeResizeHeight(); 
	} 
	 
	// Datepicker 적용시 오늘날짜(new Date()) 적용 유무 체크 
	// 기본으로 new Date 적용시 임시저장이나 문서 변경이 되면 오늘날짜로만 나오기 때문에 적용되었음 
	function setDatepickerUseYnToday (dataArr) { 
		var dataArrLength = dataArr.length; 
		debugger; 
		var linkData = $('#_LINK_DATA_'); 
		var data =  linkData.text() && JSON.parse(linkData.text()) || {}; 
		for (var i = 0; i < dataArrLength; i++) { 
			var calenderId = dataArr[i].calender; 
			var newDateUseYn = dataArr[i].newDate; 
			if (newDateUseYn == true) { 
				var ldata = data[calenderId.substring(1)]; 
				if(ldata){
					setDatepicker (calenderId, !ldata.val); 
					continue; 
				} 
				var calenderTextId = calenderId + '_text'; 
				setDatepicker (calenderId, !$(calenderTextId).text().trim()); 
			} 
			else { 
				setDatepicker (calenderId) 
			} 
		} 
	} 
	// Datepicker 적용 : 오늘날짜(new Date()) 적용 유무 
	function setDatepicker (calenderId, useYnNewDate) { 
		if (useYnNewDate == true) { 
			$(calenderId).removeClass('hasDatepicker').datepicker({ 
				dateFormat: "yy-mm-dd", 
				changeMonth: true, 
				changeYear: true, 
				showMonthAfterYear: true 
			}) 
			.datepicker("setDate", new Date()) 
			.inputmask( 
				"yyyy-mm-dd",{ 
				clearIncomplete: true, 
				clearMaskOnLostFocus: true, 
				showMaskOnFocus: false, 
				showMaskOnHover: false, 
			}); 
		} 
		else { 
			$(calenderId).removeClass('hasDatepicker').datepicker({ 
				dateFormat: "yy-mm-dd", 
				changeMonth: true, 
				changeYear: true, 
				showMonthAfterYear: true 
			}) 
			.inputmask( 
				"yyyy-mm-dd",{ 
				clearIncomplete: true, 
				clearMaskOnLostFocus: true, 
				showMaskOnFocus: false, 
				showMaskOnHover: false, 
			}); 
		} 
	} 
	 
	function setIframeResizeHeight () { 
		var resizeCount = 0; 
		var iframeHeightInterval = setInterval(function(){ 
			formIframe.height(setUserForm.height()); 
			if (resizeCount == 5) { 
				clearInterval(iframeHeightInterval); 
			} 
			resizeCount++; 
		}, 500); 
		setUserForm.on('remove', function () { 
			clearInterval(iframeHeightInterval); 
		}); 
	} 
	setTimeout(function(){ 
		if ($('#eapApprEditFrame_formDiv').length > 0) {		// 작성 
			setEdit(); 
		} 
		else if ($('#eapApprViewIframe_documentPage').length > 0) {	// 조회 
			setRow(); 
		} 
		else if ($('#recApprViewIframe_documentPage').length > 0) {	// 기록물철 조회, 관련해서 다른 모듈로 등록되면 추가 되어야 함  
			setRow(); 
		} 
		else if ($('#eapFormManageFormMain_main').length > 0) {	// 양식편집-View 
			setRow(); 
		} 
		else {								// 프린트 - pc 저장일때에 대한 조건처리가 필요함 
			 showPrint(); 
		} 
	}, 1); 
	function showPrint(){ 
			setRow(); 
			if ($('.formrit').hasClass('callPrint') == true) { 

if (navigator.userAgent.indexOf("Chrome") != -1 ) { if (window.navigator.userAgent.indexOf("Edge") > -1) {// console.log('window edge'); printCanvasImage(); } else {// console.log('Chrome'); setTimeout(function(){ // window.print(); }, 1100); } } else {// console.log('other browser'); printCanvasImage(); }

			}
	}  

window.formBuildMethod = {

   setSelectedInfo	: function (data){
       console.log(data) 
   	var 	userParam = JSON.parse(data.userParams),

idLi = "#".concat(userParam.id),

   			trgtEmp =	{	type		:	"3",
      	        	                id			:  data.empId||data.deptId ,

value : data.empId||data.deptId, label : data.psnName||data.deptName }; var autoCompleteValues = []; autoCompleteValues.push(trgtEmp); console.log("autoCompleteValues", autoCompleteValues); $(idLi).setAutoCompleteValue(autoCompleteValues); $("#selectLayer").dialog("close"); } }

function printCanvasImage () { var printWidth = $('.form_wrap').outerWidth();

$('.form_wrap').wrap('
');

html2canvas(document.querySelector("#formWrap")).then(function(canvas) { //var tdLength = $('.form_wrap').find('td').length; //for (var i = 0; i < tdLength; i++ ) { // var td = $('.form_wrap').find('td:eq(' + i + ')'); // if (td.css('display') != 'none') { // console.log(td); // } //}

var sCallPrint = document.querySelector('.callPrint'); 
sCallPrint.innerHTML = '
<img src="'+ canvas.toDataURL("image/png") +'" alt="" style="margin-left: -17px;">
';

setTimeout(function(){ // window.print(); }, 1000); }); }





 }) 
}) 
</script> 


</body></html>