Files
batuhanerkek-site/admin.js
2026-01-30 02:51:30 +03:00

131 lines
3.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import PocketBase from 'https://cdnjs.cloudflare.com/ajax/libs/pocketbase/0.21.1/pocketbase.es.mjs';
// 1. PocketBase Bağlantısı - Güncellendi
const pb = new PocketBase('https://db.batuhanerkek.com');
const loginCard = document.getElementById("login-card");
const adminPanel = document.getElementById("admin-panel");
const loginForm = document.getElementById("login-form");
const blogForm = document.getElementById("blog-form");
const logoutBtn = document.getElementById("logout-btn");
const postsList = document.getElementById("posts-list");
const tagsInput = document.getElementById("tags-input");
const tagsList = document.getElementById("tags-list");
let currentTags = [];
function setAuthState(isLoggedIn) {
if (isLoggedIn) {
loginCard.classList.add("hidden");
adminPanel.classList.remove("hidden");
loadPosts();
} else {
loginCard.classList.remove("hidden");
adminPanel.classList.add("hidden");
}
}
// 2. Giriş Yapma
loginForm.addEventListener("submit", async (event) => {
event.preventDefault();
const formData = new FormData(loginForm);
try {
await pb.collection('users').authWithPassword(
formData.get("email"),
formData.get("password")
);
loginForm.reset();
setAuthState(true);
} catch (error) {
alert("Giriş başarısız: " + error.message);
}
});
// 3. Çıkış Yapma
logoutBtn.addEventListener("click", () => {
pb.authStore.clear();
setAuthState(false);
});
// 4. Yeni Yazı Kaydetme - JSON.stringify kaldırıldı
blogForm.addEventListener("submit", async (event) => {
event.preventDefault();
const formData = new FormData(blogForm);
const newPost = {
title: formData.get("title").trim(),
tags: currentTags, // PocketBase JSON alanı için saf dizi gönderiyoruz
summary: formData.get("summary").trim(),
content: formData.get("content").trim(),
date: formData.get("date"),
image: formData.get("image").trim(),
};
try {
await pb.collection('posts').create(newPost);
blogForm.reset();
currentTags = [];
renderTags();
loadPosts();
alert("Yazı başarıyla kaydedildi!");
} catch (error) {
alert("Kaydedilemedi: " + error.message);
}
});
// 5. Yazıları Listeleme
async function loadPosts() {
try {
const records = await pb.collection('posts').getFullList({
sort: '-created',
});
postsList.innerHTML = records.map(post => `
<div class="post-item">
<span>${post.title}</span>
<button onclick="deletePost('${post.id}')">Sil</button>
</div>
`).join('');
} catch (error) {
console.error("Yazılar yüklenemedi:", error);
}
}
window.deletePost = async (id) => {
if (confirm("Bu yazıyı silmek istediğinize emin misiniz?")) {
try {
await pb.collection('posts').delete(id);
loadPosts();
} catch (error) {
alert("Silinemedi: " + error.message);
}
}
};
// Etiket Yönetimi
function renderTags() {
tagsList.innerHTML = currentTags.map((tag, index) => `
<span class="tag">${tag} <i onclick="removeTag(${index})">&times;</i></span>
`).join('');
}
window.removeTag = (index) => {
currentTags.splice(index, 1);
renderTags();
};
tagsInput.addEventListener("keydown", (event) => {
if (event.key === "Enter") {
event.preventDefault();
const tag = tagsInput.value.trim();
if (tag && !currentTags.includes(tag)) {
currentTags.push(tag);
renderTags();
}
tagsInput.value = "";
}
});
if (pb.authStore.isValid) {
setAuthState(true);
}