// (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();
}
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"