001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
// (2020.10.23, 차재복, Cha Jae Bok, http://www.ktword.co.kr) /* // (편집자용) 메뉴얼 업데이트용 버튼 생성 function editor_update_btn(id, no, type, sub_type) { // id : reform 항목 번호 // no : 코드,메뉴얼 내 항목 번호 // type : 메뉴얼(2) 구분 // sub_type // 구분 let ch; if (type=='1') ch = 'code_update'; else if (type=='2') ch = 'man_update'; let sub_ch; if (sub_type) sub_ch = sub_type; // button let btn = document.createElement('button'); btn.id = id; btn.name = 'code'; // let btn_text = document.createTextNode('Update'); btn.appendChild(btn_text); // btn 요소에 ajax 호출 정보 알리기 btn.title = 'embed_edit.js/editor_update_btn() '+(type==1 ? 'code' : 'manual')+'.id:'+id+'.no:'+no; btn.addEventListener('click', function(e) { let title = document.getElementById('input_'+e.target.id+'_'+no).value; let contentElem = document.getElementById('area_'+e.target.id+'_'+no); let contentValue = contentElem.value // 코드 디버깅용 if (!confirm('ch='+ch+', sub_ch='+sub_ch+', id='+id+', no='+no+', title='+title+ ', \n content='+contentValue)) return; // ajax let xhr = new XMLHttpRequest(); xhr.open('POST','../reform/reform_update.php'); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 코드 디버깅용 console.log(xhr.responseText); let data = JSON.parse(xhr.responseText); // 결과 보이기 console.log(data); if(data.notice) alert('[수신알림]\n'+data.notice); if(data.name) alert(data.name+' 항목 업데이트됨'); if(data.err_msg) alert(data.err_msg); // content textarea 크기 조절 let rows = contentElem.value.match(/\n/g); // 줄 카운트 if(rows != null) contentElem.setAttribute('rows', rows.length+1); } } xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send('id='+id+'&no='+no+'&msg='+encodeURIComponent(title)+'&text='+encodeURIComponent(contentValue)+'&ch='+ch+'&sub_ch='+sub_ch); },false); return btn; } */ // (편집자용) 편집 전용 버튼 생성 function editor_btn_make(btn_info) { // btn_name : 버튼 이름 // type : 'code_update','man_update','code_delete','man_delete' 등 선택 // id : code 또는 manual 테이블 내 항목 분류 번호 // no : code 또는 manual 테이블 내 항목 번호 // tr_id : table 내 tr id // button 생성 let btn = document.createElement('button'); // 생성된 button에 정보 기록 const btn_name = document.createTextNode(btn_info.btn_name); btn.appendChild(btn_name); // button name btn.dataset.type = btn_info.type; // 'man_update','man_delete' 등 선택 btn.dataset.id = btn_info.id; // manual 테이블 내 항목 분류 번호 btn.dataset.no = btn_info.no; // manual 테이블 내 항목 번호 btn.dataset.tr_id = btn_info.tr_id; // table 내 tr id btn.dataset.tr_seq = btn_info.tr_seq; // table 내 tr no return btn; } // (편집자용 manual table 버튼) (메뉴얼) 버튼 ajax 실행 function editor_btn_ajax_action(btn) { btn.addEventListener('click', function(e) { const url = '../reform/reform_update.php'; const method = 'post'; const id = btn.dataset.id; // manual 테이블 내 항목 분류 번호 const no = btn.dataset.no; // manual 테이블 내 항목 번호 const ch = btn.dataset.type; // 'man_update','man_delete','man_insert' 등 선택 const tr_id = btn.dataset.tr_id; // table 내 tr id const tr_seq = btn.dataset.tr_seq; // table 내 tr seq const td1Title = document.getElementById('input_'+btn.dataset.id+'_'+no).value; // 왼쪽 td 타이틀 const td2AreaElem = document.getElementById('area_'+btn.dataset.id+'_'+no); // 오른쪽 td textarea 요소 const td2AreaValue = td2AreaElem.value; // 오른쪽 td textarea 요소 내 텍스트 const currentTr = document.getElementById(tr_id); // 현재 tr 노드 const currentTable = currentTr.parentNode; // 현재 table 노드 const liNode = e.target.closest('li'); // 해당 li 노드 const currentParentObject = JSON.parse(sessionStorage.getItem('sid_' + liNode.dataset.parent)); // 현재 부모 sessionStorage // 삭제 경고 if (ch=='man_delete' || ch=='code_delete') if(!confirm('삭제 여부 확인 ('+ch+')')) return; // 코드 디버깅용 if (!confirm('ch='+ch+'\n id='+id+'\n no='+no+'\n title='+td1Title+'\n content='+td2AreaValue+'\n tr_id='+tr_id)) return; // ajax 실행 let xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 서버 응답 디버깅용 // console.log(xhr.responseText); let data = JSON.parse(xhr.responseText); // 서버 처리 결과 에러 검토 if(data.err_msg) { alert('[에러발생]\n'+data.err_msg); console.log(data); return; } if(data.notice) alert('[경고알림]\n'+data.notice); // 현재 메뉴얼 tr 삭제 if (ch=='man_delete') { //현재 tr 삭제 currentTable.removeChild(currentTr); // 만일, 현재 메뉴얼 tr 하나도 없으면, if(!currentTable.hasChildNodes()) { // currentTable 삭제 liNode.removeChild(currentTable); // li line 요소에서, const target = liNode.querySelector("span[name='line']"); // border bottom, mouse pointer 제거 target.style.borderBottom = ''; target.style.cursor = ''; // li line 요소에서 이벤트리스너 삭제 target.removeEventListener('click',moreShow); // parent 노드의 sessionStorage 수정 currentParentObject[liNode.dataset.subseq]['more_type'] = null; currentParentObject[liNode.dataset.subseq]['more_ptr'] = null; const currentParentData = JSON.stringify(currentParentObject); sessionStorage.setItem('sid_' + liNode.dataset.parent, currentParentData); } } // 현재 메뉴얼 항목 직후 빈 tr 삽입 if (ch=='man_insert') { // 나머지 tr들에 대해 seq 번호 1씩 증가 const restChilds = currentTable.childNodes; for (let i=currentTr.seq+1; i<restChilds.length; i++) { restChilds[i].dataset.seq = seq+1; } // 서버로부터 받은 데이터 const newObject = {'no':data.no,'type':data.name,'code':'','date':data.date,'seq':data.seq}; // 새로운 tr 생성 const newTr = table_tr_make(id, newObject, '', data.seq+1); // 현재 tr 직후 newTr 삽입 insertAfter(currentTr, newTr); } // 현재 메뉴얼 항목 업데이트 if (ch=='man_update') { if(data.name) alert(data.name+' 항목 업데이트됨'); // td2AreaElem의 textarea 크기 조절 let rows = data.code.match(/\n/g).length; // 줄 카운트 if(rows > 0) td2AreaElem.setAttribute('rows', rows+1); // alert('이전줄수:'+td2AreaValue.match(/\n/g).length+', 서버갱신후줄수:'+data.code.match(/\n/g).length); // td2AreaElem의 텍스트 교체 // td2AreaElem.innerContent = data.code; td2AreaElem.value = data.code; } } } xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send('ch='+ch+'&id='+id+'&no='+no+'&msg='+encodeURIComponent(td1Title)+'&text='+encodeURIComponent(td2AreaValue)); },false); }