diff --git a/app3.js b/app3.js new file mode 100644 index 00000000..b89f586e --- /dev/null +++ b/app3.js @@ -0,0 +1,168 @@ +// Get references to DOM elements +const postForm = document.getElementById('postForm'); +const postTitleInput = document.getElementById('postTitle'); +const postAuthorInput = document.getElementById('postAuthor'); +const postsList = document.getElementById('postsList'); + +// Load posts from localStorage on page load +window.addEventListener('DOMContentLoaded', () => { + const posts = JSON.parse(localStorage.getItem('posts')) || []; + posts.forEach(post => addPostToDOM(post)); +}); + +// Handle form submission +postForm.addEventListener('submit', function (e) { + e.preventDefault(); + + const title = postTitleInput.value.trim(); + const author = postAuthorInput.value.trim(); + + if (!title || !author) return; + + const post = { + title, + author, + timestamp: new Date().toISOString(), + comments: [] // Add a comments array to store comments for this post + }; + + addPostToDOM(post); + savePost(post); + + postForm.reset(); +}); + +// Add a post to the DOM +function addPostToDOM(post) { + const postCard = document.createElement('div'); + postCard.className = 'card mb-3'; + + const postTime = new Date(post.timestamp).toLocaleString(); + + postCard.innerHTML = ` +
${escapeHTML(comment.author)}: ${escapeHTML(comment.text)}
+ + `; + + // Delete comment functionality + commentDiv.querySelector('.delete-comment-btn').addEventListener('click', () => { + commentDiv.remove(); + deleteComment(post, comment.timestamp); + }); + + commentsList.appendChild(commentDiv); +} + +// Save a post to localStorage +function savePost(post) { + const posts = JSON.parse(localStorage.getItem('posts')) || []; + posts.push(post); + localStorage.setItem('posts', JSON.stringify(posts)); +} + +// Save a comment to localStorage +function saveComment(post, comment) { + const posts = JSON.parse(localStorage.getItem('posts')) || []; + const postIndex = posts.findIndex(p => p.timestamp === post.timestamp); + if (postIndex !== -1) { + posts[postIndex].comments.push(comment); + localStorage.setItem('posts', JSON.stringify(posts)); + } +} + +// Delete a comment from localStorage +function deleteComment(post, commentTimestamp) { + const posts = JSON.parse(localStorage.getItem('posts')) || []; + const postIndex = posts.findIndex(p => p.timestamp === post.timestamp); + if (postIndex !== -1) { + posts[postIndex].comments = posts[postIndex].comments.filter(c => c.timestamp !== commentTimestamp); + localStorage.setItem('posts', JSON.stringify(posts)); + } +} + +// Remove a post from localStorage +function removePost(timestamp) { + const posts = JSON.parse(localStorage.getItem('posts')) || []; + const updatedPosts = posts.filter(post => post.timestamp !== timestamp); + localStorage.setItem('posts', JSON.stringify(updatedPosts)); +} + +// Simple HTML escaping to prevent XSS +function escapeHTML(str) { + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; +} diff --git a/index.html b/index.html new file mode 100644 index 00000000..a2ebd20b --- /dev/null +++ b/index.html @@ -0,0 +1,33 @@ + + + +
Comments:
+ + + +