diff --git a/src/js/current.js b/src/js/current.js new file mode 100644 index 0000000..f8a4783 --- /dev/null +++ b/src/js/current.js @@ -0,0 +1,113 @@ +const url = "/xml/nihList.xml"; +const $albumList = document.querySelector("#albumList"); +const $listList = document.querySelector("#listList"); +const $pagingList = document.querySelector("#pagingList"); +const $count = document.querySelector("#count"); +const $page = document.querySelector("#page"); +const $maxPage = document.querySelector("#maxPage"); +let maxPage = 1; +let page = 1; + +function changePage(data) { + $albumList.innerHTML = ""; + $page.innerHTML = page; + data.forEach((item, i) => { + if(i <= page * 8 && i > (page - 1) * 8){ + const div = document.createElement("div"); + const img = new Image(); + const name = item.ccbaMnm1; + + const itemURL = `/xml/detail/${item.ccbaKdcd}_${item.ccbaCtcd}_${item.ccbaAsno}.xml`; + const src = fetch(itemURL) + .then(res => res.text()) + .then(data => new DOMParser().parseFromString(data, "text/xml")) + .then(data => { + return [...data.querySelectorAll("item")].map(({children}) => { + return [...children].reduce((acc, {tagName, textContent}) => { + acc[tagName] = textContent; + + return acc; + }, {}) + }) + }) + src.then(data => img.src = `/xml/nihcImage/${data[0].imageUrl}`); + + img.onerror = function() { + img.src = "/src/images/no_image.png"; + img.alt = "No images"; + } + + div.append(img, name); + + div.classList.add("item"); + + $albumList.append(div); + } + }) +} + +function hasClass(element, className) { + return element.classList.contains(className); +} + +const result = fetch(url) + .then(res => res.text()) + .then(data => new DOMParser().parseFromString(data, "text/xml")) + .then(data => { + return [...data.querySelectorAll("item")].map(({children}) => { + return [...children].reduce((acc, {tagName, textContent}) => { + acc[tagName] = textContent; + + return acc; + }, {}) + }) + }) + +result.then(data => { + maxPage = Math.ceil(data.length / 8); + $count.innerHTML = data.length; + $maxPage.innerHTML = maxPage; + changePage(data); + + for(let i = 1; i <= maxPage; i++) { + const td = document.createElement("td"); + td.innerHTML = i; + + td.classList.add("button", `paging${i}`, "pagingButton"); + + if(i === 1) td.classList.add("active"); + + $pagingList.querySelector(".next").before(td); + } + + + $pagingList.querySelectorAll(".button").forEach(item => item.addEventListener("click", e => { + target = e.target; + num = Number(target.innerHTML); + + if(num > 0) { + page = num; + + changePage(data); + + $pagingList.querySelector(".active").classList.remove("active"); + + target.classList.add("active"); + }else { + if(hasClass(target, "prev")) { + page--; + if(page < 1) page = 1; + } + if(hasClass(target, "next")) { + page++; + if(page > maxPage) page = maxPage; + } + if(hasClass(target, "first")) page = 1; + if(hasClass(target, "last")) page = maxPage; + $pagingList.querySelector(".active").classList.remove("active"); + $pagingList.querySelectorAll(".pagingButton")[page - 1].classList.add("active"); + + changePage(data); + } + })) +}) \ No newline at end of file diff --git a/src/js/history.js b/src/js/history.js new file mode 100644 index 0000000..424ab48 --- /dev/null +++ b/src/js/history.js @@ -0,0 +1,200 @@ +const $addHistory = document.querySelector("#addHistory"); +const $years = document.querySelector("#years"); +const $year = document.querySelector("#year"); +const $list = document.querySelector("#list"); +const $historyForm = document.querySelector("#historyForm"); +const $close = document.querySelector(".close"); +const $save = document.querySelector("#save"); + +const yearList = JSON.parse(localStorage.getItem("yearList")) ?? []; +const historyList = JSON.parse(localStorage.getItem("historyList")) ?? []; +let selectYear = localStorage.getItem("selectYear") ? JSON.parse(localStorage.getItem("selectYear")) : yearList.length > 0 ? yearList[yearList.length - 1] : null; + +function hasClass(element, className) { + return element.classList.contains(className); +} + +const setText = function (element, text = "") { + if(text !== "") element.querySelector(".text").innerHTML = text; + else return element.querySelector(".text").innerHTML; +} + +function createElement(element, classList = []) { + const result = document.createElement(element); + classList.forEach(cl => { + result.classList.add(cl); + }) + return result; +} + +function changeYear() { + if(!selectYear > 0) { + $year.style.display = "none"; + }else { + $year.style.display = ""; + setText($year, selectYear); + } + localStorage.setItem("selectYear", selectYear); + document.querySelectorAll(".year").forEach(e => { + if(e.querySelector(".text").innerHTML == selectYear) { + e.classList.add("active") + }else { + e.classList.remove("active") + } + }); + + $list.innerHTML = ""; + + historyList.forEach((item, i) => { + if(item.year === selectYear) { + const li = createElement("li", ["item"]); + const date = createElement("span", ["date"]); + const notice = createElement("span", ["notice"]); + const modifyBtn = createElement("span", ["button", "modify"]); + const deleteBtn = createElement("span", ["button", "delete"]); + + date.innerHTML = item.date; + notice.innerHTML = item.text; + modifyBtn.innerHTML = "수정"; + deleteBtn.innerHTML = "삭제"; + + li.append(date, notice, modifyBtn, deleteBtn); + + li.dataset.no = item.no; + + $list.append(li); + + deleteBtn.addEventListener("click", _ => { + let thisYears = 0; + historyList.forEach(e => {if(e.year === item.year) thisYears++}); + + if(thisYears === 1) { + yearList.splice(yearList.indexOf(item.year), 1); + + selectYear= yearList.length > 0 ? yearList[yearList.length - 1] : null; + + localStorage.setItem("yearList", JSON.stringify(yearList)); + changeYearList(); + } + + historyList.splice(i, 1); + + + localStorage.setItem("historyList", JSON.stringify(historyList)); + changeYear(); + }) + + modifyBtn.addEventListener("click", _ => { + $historyForm.notice.value = item.text; + $historyForm.date.value = `${item.year}-${item.date.split(".").join("-")}`; + $historyForm.style.display = "block"; + $historyForm.classList.add("modifing"); + $historyForm.dataset.no = item.no; + }) + } + }) +} + +function changeYearList() { + $years.innerHTML = "