001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
// (2020.10.23, 차재복, Cha Jae Bok, http://www.ktword.co.kr) // 코드(code:1),메뉴얼(manual:2),비교(comp:4)를 위한 테이블 창 만들고, ajax 호출로 내용 보이기 function embed_display(data, current, targetBox) { // data : 현재 li 정보 중 reform_more의 more_ptr, more_type 등 // current : liLineSpan 요소 // targetBox : 화면 표출 박스 if (data.more_type == '1' || data.more_type == '2') { // 1: code, 2 : manual // url 및 method let url = '../reform/display.php?id='+data.more_ptr+'&type='+data.more_type; // id : data.more_ptr, type='1' (code), type='2' (manual) let method = 'get'; // ajax 호출 let xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.onreadystatechange = function() { // ajax 통신 성공이면, if (xhr.readyState === 4 && xhr.status === 200) { if (xhr.responseText == false) { alert('서버 처리 에러 ('+url+')'); return; } // 응답된 데이터의 배열 내 객체화 : [{},{},...] let object = JSON.parse(xhr.responseText); // (편집자용) 추후 add를 위한 빈 객체를 배열 끝에 삽입시켜 둠 /* let date = new Date(); let yy = date.getFullYear(); let mm = date.getMonth() + 1; mm = (mm<10 ? '0'+mm : mm); let dd = date.getDate(); dd = (dd<10 ? '0'+dd : dd); let dateStr = yy+'-'+mm+'-'+dd; object.push({'type':'','no':'','date':dateStr,'code':''}); */ // 입력 데이터 수 만큼 tr,td 생성 for (value of object) { // object : type, no, code, date, seq // tr 요소 생성 let tr = table_tr_make(data.more_ptr, value, data.more_type, value.seq); // table 내 tr 추가 targetBox.appendChild(tr); } } }; xhr.send(); // div } else if (data.more_type == '4') { // 4 : comp let page = 1; let url = "/test/reform/special.php?bare=1&ch="+data.more_ptr; let method = "get"; let dir = 'reform'; let file = 'special.php'; let ch = data.more_ptr; // 1:comp, 2:type, 3:formula, 4:law, 5:theory, 6:principle, 7:theorem, 8:discipline, 9:more, // 10:function, 11:ratio, 12:coef, 13:constant, 14:factor, 15:order, 16:density, 17:degree, 18:energy, // 19:power, 20:velocity, 21:field, let parms = {'url' : url,'method' : method, 'dir' : dir, 'file' : file, 'ch' : ch}; pageBreakDisplayAjax(targetBox, page, parms); // paging/page_tesing.js } } // tr 요소 생성 function table_tr_make(id, data, type, i) { // id : 메뉴얼 내 항목 id // data : no(항목번호), type(이름 id_name), code(내용 txt), date(날짜), seq (display.php) // type : 메뉴얼(manual) 등의 구분 // i : table 내 현재 tr 요소 순서번호 // table tr 생성 let tr = document.createElement('tr'); // table tr 정보 기록 tr.id = 'tr_'+data.seq; // tr_(tr 순서번호 id_seq) tr.dataset.no = data.no; tr.dataset.id = data.id; tr.dataset.seq = data.seq; // 좌측 td 생성 및 스타일 let td1 = document.createElement('td'); td1.style.border = '1px solid navy'; td1.style.padding = '5px'; td1.style.fontSize = '13px'; // 좌측 td 내 타이틀 텍스트 (사용자 유형에 따라 달리 처리) // 메뉴얼 : (data[i].type : 지식구축,운용개발,운용환경 등) // 코드 : (data[i].type : 일상언어,C,Java,의사코드,Javascript,HTML 등) if (glob_var.user_type == 0) { // 일반 사용자용 텍스트 let text1 = document.createTextNode(data.type); td1.appendChild(text1); } else if (glob_var.user_type > 0) { // 편집자용 input 텍스트 // input 생성 및 이름 let input = document.createElement('input'); input.id = 'input_'+id+'_'+data.no; // 편집 대상 요소의 id 지정 input.size = 10; input.value = data.type; td1.appendChild(input); } // 좌측 td 내 date td1.appendChild(document.createElement('br')); let text_date = document.createTextNode('('+data.date+')'); let text_span = document.createElement('span'); text_span.id = 'cdate_'+data.no; text_span.style.fontSize = '13px'; text_span.appendChild(text_date); td1.appendChild(text_span); // (편집자용) update,delete,add 버튼 생성 if (glob_var.user_type > 0) { // 버튼 정보 정의 const btn_info = { 'type' : '', // 'man_update','man_delete','man_insert' 등 선택 'btn_name' : '', // 버튼 이름 'id' : id, // code 또는 manual 테이블 내 항목 분류 번호 'no' : data.no, // code 또는 manual 테이블 내 항목 번호 'tr_id' : tr.id, // table 내 tr 번호 : tr_(table id)_(tr 순서번호 i) 'tr_seq' : data.seq // table 내 tr seq 번호 i }; // btn 요소에 ajax 호출 정보 알리기 const title = 'embed_display.js/table_tr_make() \n embed_edit.js/editor_btn_ajax_action() \n ' +'reform/reform_update.php \n ' +'no:'+data.no+'\n id:'+id+'\n seq:'+data.seq; // update 버튼 // br td1.appendChild(document.createElement('br')); // update 버튼 내 정보 btn_info.type = 'man_update'; btn_info.btn_name = 'Update'; // update button 생성 const update_btn = editor_btn_make(btn_info); // embed_edit.js // btn 요소에 ajax 호출 정보 알리기 update_btn.title = title+'\n type:'+btn_info.type; // 버튼에 ajax event 설정 실행 editor_btn_ajax_action(update_btn); // embed_edit.js // update // const update_btn = editor_update_btn(id, data[i].no, type); // embed_edit.js // type : (1 : code, 2 : manual), sub_type : 없음 // td1에 update_btn 추가 td1.appendChild(update_btn); // delete 버튼 생성 및 버튼에 이벤트 설정 // br td1.appendChild(document.createElement('br')); // delete 버튼 내 정보 btn_info.type = 'man_delete'; btn_info.btn_name = 'Delete'; // delete button 생성 const delete_btn = editor_btn_make(btn_info); // embed_edit.js // btn 요소에 ajax 호출 정보 알리기 delete_btn.title = title+'\n type:'+btn_info.type; // 버튼에 ajax event 설정 실행 editor_btn_ajax_action(delete_btn); // embed_edit.js // td1에 delete_btn 추가 td1.appendChild(delete_btn); // insert 버튼 // br td1.appendChild(document.createElement('br')); // add 버튼 내 정보 btn_info.type = 'man_insert'; btn_info.btn_name = 'Insert'; // add button 생성 const insert_btn = editor_btn_make(btn_info); // embed_edit.js // btn 요소에 ajax 호출 정보 알리기 insert_btn.title = title+'\n type:'+btn_info.type; // 버튼에 ajax event 설정 실행 editor_btn_ajax_action(insert_btn); // embed_edit.js // td1에 add_btn 추가 td1.appendChild(insert_btn); } // 우측 td 생성 let td2 = document.createElement('td'); td2.style.border = '1px solid navy'; td2.style.padding = '10px'; td2.style.fontSize = '13px'; td2.style.whiteSpace = 'pre-wrap'; td2.style.lineHeight = '150%'; // 우측 td 내 텍스트 또는 textarea 생성 및 이름 let text_node = null; if (glob_var.user_type == 0) { // 일반 사용자용 텍스트 text_node = document.createTextNode(data.code); } else if (glob_var.user_type > 0) { // 편집자용 input 텍스트 // textarea 생성 text_node = document.createElement('textarea'); text_node.style.border = '1px solid navy'; text_node.id = 'area_'+id+'_'+data.no; // 편집 대상 요소의 id 지정 text_node.style.padding = '5px'; text_node.style.fontSize = '13px'; text_node.style.lineHeight = '150%'; text_node.style.whiteSpace = 'pre-wrap'; // textarea의 rows,cols 설정 if (data.code) { let rows = data.code.match(/\n/g); // 줄 카운트 if(rows != null) text_node.setAttribute('rows', rows.length+1); } text_node.setAttribute('cols',100); // textarea 내 텍스트 text_node.textContent = data.code; } td2.appendChild(text_node); // tr 내 td1,td2 추가 tr.appendChild(td1); tr.appendChild(td2); return tr; } // 특정검색 div 요소 make function div_make(id, data) { // div 요소 생성 let div = document.createElement('div'); div.id = 'did_' + id; let url = "/test/reform/special.php?ch="+id; let method = "get"; let out = div; textAjax(url, out, method); return div; } // reform table 편집 창 내용 보이기 (ajax 호출 처리) function table_edit(id) { var xhr = new XMLHttpRequest(); xhr.open('GET','../reform/reform_item.php?ch=show&id='+id); xhr.onreadystatechange = function() { // ajax 통신 성공이면, if (xhr.readyState === 4 && xhr.status === 200) { // 숨겨진 form 나타나게 함 var form_elem = document.getElementById('form_'+id); form_elem.style.display = 'block'; // textarea 위치 파악 var textarea = document.getElementById('textarea_'+id); // textarea rows 파악 및 적용 var rows = xhr.responseText.match(/\n/g); if(rows != null) textarea.setAttribute('rows',rows.length+1); // textarea에 ajax 수신 결과 text 출력 textarea.innerHTML = xhr.responseText; // show/hide (이벤트리스너 파기 및 재지정) var current = document.getElementById('edit_ptr'); show_hide(current, form_elem); } }; xhr.send(); }