Unfiltered / script.js
abdullahalioo's picture
Upload 9 files
6390fb3 verified
document.addEventListener('DOMContentLoaded', () => {
loadBlogs();
});
function loadBlogs() {
const blogsContainer = document.getElementById('blogsContainer');
const blogs = JSON.parse(localStorage.getItem('mubashra_blogs_v2')) || [];
if (blogs.length > 0) {
blogsContainer.innerHTML = ''; // Clear empty state
blogs.forEach((blog, index) => {
const card = document.createElement('div');
card.classList.add('blog-card');
// For this version, since the admin creates a free-form "canvas",
// the safest way to "preview" it is to render the HTML structure.
// However, to prevent styles from breaking the card, we might scale it or similar.
// A simple approach: specific card layout.
// But the user said "place it like canva".
// So the blog is likely absolute positioned elements on a fixed size canvas.
// We will render a mini version of that canvas.
const previewScale = 0.3; // Scale down for card
card.innerHTML = `
<div class="blog-preview-wrapper" style="position: relative; width: 100%; padding-top: 75%; overflow: hidden; background: ${blog.backgroundColor || 'transparent'};">
<div class="blog-content-scaler" style="
position: absolute;
top: 0;
left: 0;
width: 100%;
transform-origin: top left;
transform: scale(${previewScale});
width: ${100 / previewScale}%;
height: ${100 / previewScale}%;
pointer-events: none; /* Make it non-interactive in preview */
">
${blog.content}
</div>
</div>
<div style="padding: 1rem; background: rgba(0,0,0,0.2);">
<h3 style="margin-bottom: 0.5rem; font-family: var(--font-heading);">${blog.title || 'Untitled Blog'}</h3>
<p style="font-size: 0.8rem; opacity: 0.7;">${new Date(blog.date).toLocaleDateString()}</p>
</div>
`;
// Optional: Click to view full blog (Modal or separate page).
// For now, let's just create a simple 'View' modal logic or leave as cards.
// The user didn't explicitly ask for a 'View' page, just 'show all blogs'.
// But 'show' usually implies readability.
card.addEventListener('click', () => openBlogModal(blog));
blogsContainer.appendChild(card);
});
}
}
function openBlogModal(blog) {
// fast modal implementation
const modal = document.createElement('div');
modal.style.cssText = `
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0,0,0,0.9); z-index: 2000; display: flex;
justify-content: center; align-items: center; overflow: auto;
padding: 2rem;
`;
// The "Canvas" logic from Admin will likely use a fixed width container.
// We need to match that. Assuming standard web 1000px or similar.
modal.innerHTML = `
<div style="position: relative; width: 100%; max-width: 1000px; min-height: 80vh; background: ${blog.backgroundColor || '#1a1a2e'}; border-radius: 10px; box-shadow: 0 0 50px rgba(0,0,0,0.5); padding: 2rem; overflow: hidden;">
<button onclick="this.parentElement.parentElement.remove()" style="position: absolute; top: 1rem; right: 1rem; background: red; border: none; color: white; width: 30px; height: 30px; border-radius: 50%; cursor: pointer; z-index: 100;">X</button>
<div style="position: relative; width: 100%; height: 100%;">
${blog.content}
</div>
</div>
`;
document.body.appendChild(modal);
}