import { initializeApp } from 'https://www.gstatic.com/firebasejs/11.10.0/firebase-app.js';
import { getDatabase, ref, get } from 'https://www.gstatic.com/firebasejs/11.10.0/firebase-database.js';
// Firebase 초기화
const app = initializeApp({
apiKey: "AIzaSyB7Z2bAp5_M2l4w3szU8RYsMY5XvwLsu1E",
authDomain: "blogger-dobae.firebaseapp.com",
databaseURL: "https://blogger-dobae-default-rtdb.firebaseio.com",
projectId: "blogger-dobae",
storageBucket: "blogger-dobae.firebasestorage.app",
messagingSenderId: "842454397432",
appId: "1:842454397432:web:f2ecb9ef638e6562e0a60d",
measurementId: "G-JB07QMVYS3"
});
const db = getDatabase(app);
let bucheonPosts = [];
let currentPage = 0;
const pageSize = 6;
const container = document.getElementById('posts');
const btn = document.getElementById('loadMoreBtn');
// ==========================
// 모달 생성
// ==========================
const modal = document.createElement('div');
modal.id = 'postModal';
modal.style.cssText = `
position: fixed;
top:0; left:0; right:0; bottom:0;
background: rgba(0,0,0,0.7);
display: none;
justify-content: center;
align-items: center;
z-index: 9999;
`;
modal.innerHTML = `
`;
document.body.appendChild(modal);
// 모달 닫기
document.getElementById('closeModal').onclick = () => {
modal.style.display = 'none';
clearInterval(slideInterval);
};
// ==========================
// 이미지 슬라이드 변수
// ==========================
let slideIndex = 0;
let slideInterval;
const gwangmyeongDistricts = {
'광명': [
// 광명1동 ~ 광명7동
'광명동','광명1동','광명2동','광명3동','광명4동','광명5동','광명6동','광명7동',
'소하동','소하1동','소하2동','소하3동',
'하안동','하안1동','하안2동','하안3동','하안4동','하안5동',
'철산동','철산1동','철산2동','철산3동','철산4동','철산5동'
]
};
// ==========================
// 게시물 로드
// ==========================
const allDongs = [...new Set(gwangmyeongDistricts['광명'])];
async function loadBucheonPosts() {
const snapshot = await get(ref(db, 'posts'));
const posts = snapshot.val();
if (!posts) return;
bucheonPosts = Object.entries(posts)
.filter(([key, payload]) => {
const text = (payload.location || '') + ' ' + (payload.title || '');
return (
(text.includes('광명') || text.includes('광명시')) &&
allDongs.some(dong =>
text.includes(dong + ' ') || text.endsWith(dong)
)
);
})
.map(([key, payload]) => ({
key,
title: payload.title || '제목 없음',
thumb: payload.thumb || (payload.images && payload.images[0]) || 'https://blogs.it.kr/images/24평시공전.webp',
content: payload.content || "내용이 없습니다.
",
images: payload.images || []
}));
currentPage = 0;
renderPosts();
}
// ==========================
// 게시물 렌더링
// ==========================
function renderPosts() {
container.innerHTML = '';
const start = currentPage * pageSize;
const slice = bucheonPosts.slice(start, start + pageSize);
slice.forEach(post => {
const li = document.createElement('li');
li.className = 'post-item';
li.innerHTML = `
${post.title}
`;
li.querySelector('img').onclick = () => {
const modalInner = document.getElementById('modalInner');
const modalImages = document.getElementById('modalImages');
// 모달 초기화
modalImages.innerHTML = '';
modalInner.innerHTML = '';
const existingMain = document.getElementById('mainSlide');
if (existingMain) existingMain.remove();
clearInterval(slideInterval);
// images 배열이 없으면 thumb 사용
const imagesToShow = post.images.length > 0 ? post.images : [post.thumb];
// 메인 이미지 생성
const mainSlide = document.createElement('img');
mainSlide.id = 'mainSlide';
mainSlide.src = imagesToShow[0];
mainSlide.style.width = '100%';
mainSlide.style.height = 'auto';
mainSlide.style.marginBottom = '10px';
mainSlide.style.borderRadius = '5px';
modalImages.parentNode.insertBefore(mainSlide, modalImages);
// 썸네일 생성
imagesToShow.forEach((imgUrl) => {
const img = document.createElement('img');
img.src = imgUrl;
img.style.width = '120px';
img.style.height = '80px';
img.style.objectFit = 'cover';
img.style.cursor = 'pointer';
img.onclick = () => mainSlide.src = imgUrl;
modalImages.appendChild(img);
});
// content를 이미지 아래에 추가
modalImages.insertAdjacentElement('afterend', modalInner);
modalInner.innerHTML = post.content;
// 자동 슬라이드 (이미지 2개 이상일 때만)
if (imagesToShow.length > 1) {
slideIndex = 0;
slideInterval = setInterval(() => {
slideIndex = (slideIndex + 1) % imagesToShow.length;
mainSlide.src = imagesToShow[slideIndex];
}, 3000);
}
modal.style.display = 'flex';
};
container.appendChild(li);
});
currentPage++;
btn.style.display = currentPage * pageSize < bucheonPosts.length ? 'block' : 'none';
}
// 더보기 버튼
btn.onclick = renderPosts;
// 초기 실행
loadBucheonPosts();