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

135 lines
3.6 KiB
JavaScript
Raw 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ı
// 'https://pocketbase.batuhanerkek.com' kısmını kendi domaininle değiştir
const pb = new PocketBase('https://pocketbase.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 = [];
// Panel Görünümünü Ayarla
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 (PocketBase Auth)
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
blogForm.addEventListener("submit", async (event) => {
event.preventDefault();
const formData = new FormData(blogForm);
const newPost = {
title: formData.get("title").trim(),
tags: JSON.stringify(currentTags), // PocketBase için dizi formatı
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);
}
}
// Yazı Silme Fonksiyonu (Global yapıyoruz)
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 = "";
}
});
// Sayfa yüklendiğinde oturum kontrolü
if (pb.authStore.isValid) {
setAuthState(true);
}