001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
// (2021.9.13, 차재복, Cha Jae Bok, http://www.ktword.co.kr) // 기능 : 문서 로딩 직후 실행 (1) (알파벳순 검색, 특정어 검색) // 호출 : [index.php] window 'load' window.addEventListener('load', function() { // (1) // 알파벳순 검색 선택 호출 let words = document.getElementsByClassName('words'); if (words) { for (let i=0; i<words.length; i++) { words.item(i).addEventListener('click', function (e) { e.preventDefault(); toggleElement(e, words); // index.js make_div(e, 'alphabetDiv'); // index.js let letter = e.target.dataset.no; print_div('alphabetDiv', letter); // index.js }); } } // 특정어 검색 선택 호출 let special = document.getElementsByClassName('special'); for(let i=0; i<special.length; i++) { special[i].addEventListener('click', function(e) { e.preventDefault(); toggleElement(e, special); // index.js make_div(e,'specialDiv'); // index.js let choice = e.target.dataset.ch; print_div('specialDiv', choice); // index.js }); } }); // 기능 : 문서 로딩 직후 실행 (2) (분류, 분류 검색, 소스 코드, 소스 검색 펼쳐 보이기) // 호출 : [index.php] window 'load' window.addEventListener('load', function() { //(2) // 용어해설 분류 : `펼쳐 보이기` const wordSpan = document.getElementById('wordBunryuTarget'); if(wordSpan) collapseSpanHandle(wordSpan); // navi_source.js // 용어해설 분류 : `검색' 선택 호출 const bunryuSrchBtn = document.getElementById('bunryuSrchBtn'); if(bunryuSrchBtn) bunryuSrchBtn.addEventListener('click', searchAction); // navi_search.js const bunryuSrchInput = document.getElementById('bunryuSrchInput'); if(bunryuSrchInput) bunryuSrchInput.addEventListener('keypress', (e) => { if(e.key === 'Enter') searchAction(e); } // navi_search.js ); // 용어해설 다중 선택 이동 (편집자용) const multis = document.getElementById('multis'); if(multis) { multis.style.cursor = 'pointer'; multis.addEventListener('click', createMultiMoveWin); // navi_edit_multi.js } // 소스코드 분류 : `펼쳐 보이기` const sourceSpan = document.getElementById('sourceBunryuTarget'); if(sourceSpan) collapseSpanHandle(sourceSpan); // navi_source.js // 소스코드 검색 : `펼쳐 보이기` const srcSearchBtn = document.getElementById('srcSearchBtn'); if(srcSearchBtn) srcSearchBtn.addEventListener('click', searchAction); // navi_search.js const srcSearchInput = document.getElementById('srcSearchInput'); if(srcSearchInput) srcSearchInput.addEventListener('keypress', (e) => { if(e.key === 'Enter') searchAction(e); } // navi_search.js ); // 소스코드 디렉토리 scan (편집자용) if(glob_var.user_type == '종합관리자') { const srcDirScan = document.getElementById('srcDirScan'); if(srcDirScan) srcDirScanHandle(srcDirScan); // navi_source.js } }); // 기능 : HTMLBodyElement의 임의점에서 click시 => (창닫음 이벤트 처리 리스너 호출됨) => (생성된 div 닫음) // 호출 : [index.php] body 'click' document.body.addEventListener('click', function(evt) { if(evt.target instanceof HTMLBodyElement) { // 알파벳순 floatDiv 닫음 let alphabetDiv = document.getElementById('alphabetDiv'); if(alphabetDiv) alphabetDiv.style.display = "none"; let words = document.getElementsByClassName('words'); for (let j=0; j<words.length; j++) { words.item(j).style.fontWeight = 'normal'; words.item(j).style.color = 'black'; } // 특정어 검색 div 창 닫음 let specialDiv = document.getElementById('specialDiv'); if(specialDiv) specialDiv.style.display = "none"; let special = document.getElementsByClassName('special'); for (let j=0; j<special.length; j++) { special.item(j).style.fontWeight = 'normal'; special.item(j).style.color = 'black'; } } }); // 기능 :접속 통계 등록 // 호출 : [index.js] collapseSpanHandle() function stat_enroll(reqType,find='') { let xhr = new XMLHttpRequest(); let method = 'get'; let url = '/test/base_utils/stat_utils.php?reqType='+reqType+'&find='+find; xhr.open(method, url); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // console.log(xhr.responseText); // document.getElementById('testDiv').innerHTML = xhr.responseText; } }; xhr.send(); } // 기능 : toggle 구현 // 호출 : [index.js] window.addEventListener() (1) function toggleElement(evt, classItems) { if(evt.target.style.fontWeight == 'bold') { // font => normal for (let i=0; i<classItems.length; i++) { classItems.item(i).style.fontWeight = 'normal'; classItems.item(i).style.color = 'black'; } // div => close if(evt.target.closest('div').nextElementSibling.nodeName == 'DIV') evt.target.closest('div').nextElementSibling.style.display = 'none'; } else { // font => normal for (let i=0; i<classItems.length; i++) { classItems.item(i).style.fontWeight = 'normal'; classItems.item(i).style.color = 'black'; } evt.target.style.color = 'red'; evt.target.style.fontWeight = 'bold'; // div => open if(evt.target.closest('div').nextElementSibling.nodeName == 'DIV') evt.target.closest('div').nextElementSibling.style.display = 'block'; } } // 기능 : div 생성 삽입 (출력 페이지 구분용) // 호출 : [index.js] window.addEventListener() (1) function make_div(evt, idName) { let div = document.getElementById(idName); if(div) return; let prevDiv = evt.target.closest('div'); // div 생성 처리 let newDiv = document.createElement('div'); newDiv.id = idName; newDiv.style.border = '2px red solid'; newDiv.style.padding = '10px 10px 10px'; newDiv.style.marginBottom = '25px'; newDiv.style.backgroundColor = 'white'; newDiv.style.display = 'block'; newDiv.style.marginLeft = prevDiv.style.marginLeft; // node 직후 div 삽입 return insertAfter(prevDiv, newDiv); // base_utils/common_utils.js } // 기능 : div 내 출력 (출력 페이지 구분용) // 호출 : [index.js] window.addEventListener() (1) function print_div(divName, choice, page = '1') { let div = document.getElementById(divName); if(!div) return; if(divName =='specialDiv') { const method = 'get'; const url = '/test/search/special_srch.php?bare=1&ch='+choice+'&p='+page; let parms = { 'textOnly' : true }; ajaxPromise(url, method, parms) // common_utils.js .then( response => { div.innerHTML = response; // 매 페이지번호 링크를 찾아서, 동일 출력 let pages = div.getElementsByClassName('pages') for (let i = 0, len=pages.length; i < len; i++) { pages.item(i).addEventListener('click', function(e) { e.preventDefault(); let page = pages.item(i).dataset.page; // doSpecialPages(div, ch, page); print_div(divName, choice, page); }); } }, error => { alert(error); } ); } else if (divName =='alphabetDiv') { const method = 'get'; if (!page) page = '1'; const url = '/test/paging/page_testing.php'+'?p='+page+'&sh='+choice; let xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 페이지 구분 출력 div.innerHTML = xhr.responseText; // 매 줄 (용어명) 마다 let lines = div.getElementsByClassName('line'); for (let i = 0, len=lines.length; i < len; i++) { lines.item(i).addEventListener('click', function(e) { e.preventDefault(); // let href = lines.item(i).getAttribute('href'); query = href.substring(href.lastIndexOf('?')+1); let searchParms = new URLSearchParams(query); let no = searchParms.get('no'); window.location.href = '/test/view/view.php'+'?no='+no; }); } // 매 페이지번호 마다 let pages = div.getElementsByClassName('pages') for (let i = 0, len=pages.length; i < len; i++) { pages.item(i).addEventListener('click', function(e) { e.preventDefault(); // let page = pages.item(i).dataset.page; // word_choice(lowerDiv, letter, page, jump_url) print_div(divName, choice, page); }); } } }; xhr.send(); } }