// (2024.12.3, 차재복, 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();
}
}