•
현재 블로그에 구성된 전체 노션 페이지 수를 카운팅해서 확인해 보고 싶었음.
◦
수동으로 확인하는 것은 모양빠지니… 코드를 통해 확인하는 작업을 수행
•
현재 구성된 데이터베이스를 모아둔 Migration 페이지에서 카운팅을 수행
◦
3개의 데이터베이스의 테이블 수를 확인해서 값을 추출하고 합산
동작 확인
⇒ 토글을 열기 전에는 “전체 페이지 수 계산 중”으로 표현
⇒ 토글을 열면 “전체 페이지 수: “ 표현
코드 확인
<script>
// 모든 토글 열기/닫기
function toggleAll() {
const toggles = document.querySelectorAll(".notion-toggle-block");
toggles.forEach(toggle => {
const toggleButton = toggle.querySelector("svg.triangle");
if (toggleButton) {
const parent = toggleButton.parentElement;
const isExpanded = parent.getAttribute("aria-expanded") === "true";
parent.click(); // 토글 상태 전환
}
});
// 3초 지연 후 카운팅 실행
setTimeout(() => {
waitForContentLoad(() => {
updatePageCount();
});
}, 3000);
}
// 테이블 컨텐츠 로딩을 기다리는 함수
function waitForContentLoad(callback) {
let attempts = 0; // 시도 횟수 제한
const interval = setInterval(() => {
const tableContainers = document.querySelectorAll('.notion-table-view');
let allTablesLoaded = true;
tableContainers.forEach(table => {
const collectionItems = table.querySelectorAll('.notion-collection-item');
if (collectionItems.length === 0) {
allTablesLoaded = false;
}
});
if (allTablesLoaded || attempts > 10) {
clearInterval(interval);
callback(); // 콜백 실행
}
attempts++;
}, 300); // 300ms 간격으로 DOM 체크
}
// 페이지 수 업데이트 함수
function updatePageCount() {
const tableContainers = document.querySelectorAll('.notion-table-view');
let totalPageCount = 0;
tableContainers.forEach(table => {
const collectionItems = table.querySelectorAll('.notion-collection-item');
totalPageCount += collectionItems.length;
});
const pageCountElement = document.getElementById('page-count');
if (pageCountElement) {
if (totalPageCount > 0) {
pageCountElement.textContent = `전체 페이지 수: ${totalPageCount}`;
} else {
pageCountElement.textContent = "전체 페이지 수를 계산 중... (토글이 열리면 계산됩니다.)";
}
}
}
// DOM 로드 후 초기 메시지 설정
document.addEventListener("DOMContentLoaded", function () {
const pageCountElement = document.getElementById("page-count");
pageCountElement.textContent = "전체 페이지 수를 계산 중... (토글이 열리면 계산됩니다.)";
});
</script>
HTML
복사
데이터베이스 테이블에 표출할 수 있는 수량이 최대 100개로 제한되는데…
이때는 어떻게 카운팅하지?? (Notion API??)
이건 먼 훗날 이야기니… 일단 이부분은 나중에 생각하자!!!