// (2024.12.20, 차재복, Cha Jae Bok, cjbword@gmailcom)
// 기능 : 문서 로딩 직후 실행 (분류, 분류 검색, 소스 코드, 소스 검색 펼쳐 보이기)
// 호출 : [index.php] window 'load'
window.addEventListener('load', function() {
// 용어해설 분류 : `펼쳐 보이기` (이벤트핸들러 적용)
const wordSpan = document.getElementById('wordBunryuTarget');
if(wordSpan) collapseSpanHandle(wordSpan); // navi_source.js
// 용어해설 분류 : `검색' 선택 호출 (이벤트핸들러 적용)
const bunryuSrchInput = document.getElementById('bunryuSrchInput'); // 입력필드
if(bunryuSrchInput) bunryuSrchInput.addEventListener('keypress', (e) =>
{ if(e.key === 'Enter') searchAction(e); } // navi_search.js
);
const bunryuSrchBtn = document.getElementById('bunryuSrchBtn'); // 버튼필드
if(bunryuSrchBtn) bunryuSrchBtn.addEventListener('click', searchAction); // navi_search.js
// 외부 파라미터 입력 여부
if(calledStr) {
searchActionDisplay(calledStr);
} else if(calledId || calledNo) {
ajaxIdNoFetch(calledId,calledNo);
}
// 소스코드 분류 : ol 펼쳐 보이기`
const sourceSpan = document.getElementById('sourceBunryuTarget');
if(sourceSpan) collapseSpanHandle(sourceSpan); // navi_source.js
// 소스코드 검색 : div 펼쳐 보이기
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
);
// 특정어 검색 선택 호출
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
});
}
});
// 외부 url 파라미터 입력 요청에 의한 살행
function ajaxIdNoFetch(calledId,calledNo) {
// ajax Promise 검색 요청 파라미터 설정
const url = '/test/navigation/naviFetch.php'; // naviFetch.php
const method = 'post';
let choice = 'ajaxIdNo4PathName'; // naviFetch.php : bunryu_search_v2()
const parms = { 'choice' : choice,
...(calledId != null && { id: calledId }),
...(calledNo != null && { no: calledNo })
};
// 서버로부터 검색 결과 가져오기
ajaxPromise(url, method, parms)
.then(
response => {
console.log(response);
if(response==null) return;
if (calledId && calledNo)
idPathFocusDirect(response[0].path,response[0].no,response[0].titlename);
else if (!calledId && calledNo)
idPathFocusDirect(response[0].path,response[0].no,response[0].titlename);
else if (calledId && !calledNo)
idPathFocusDirect(response[0].path,'',response[0].titlename);
},
error => { alert(error); }
);
}
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();
}
}