forked from b00tc4mp/isdi-bootcamp-202405
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
implement all ponies app until delete post b00tc4mp#60
- Loading branch information
root
authored and
root
committed
Jun 16, 2024
1 parent
bc6b5f1
commit c41a71a
Showing
19 changed files
with
496 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
function createPost(image, caption) { | ||
if (!image.startsWith('http')) { | ||
throw new Error('invalid image') | ||
} | ||
|
||
var posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] | ||
|
||
var post = { | ||
image: image, | ||
caption: caption, | ||
author: sessionStorage.username, | ||
date: new Date().toISOString(), | ||
id: generateRandomId() | ||
} | ||
|
||
posts.push(post) | ||
|
||
localStorage.posts = JSON.stringify(posts) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
function deletePost(id) { | ||
|
||
var posts = getAllPosts() | ||
var index = posts.findIndex(function (element) { | ||
|
||
return element.id === id | ||
|
||
}) | ||
|
||
posts.splice(index, 1) | ||
|
||
localStorage.posts = JSON.stringify(posts) | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
function getAllPosts() { | ||
var posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] | ||
|
||
return posts.reverse() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
function getUserName() { | ||
var users = localStorage.users !== undefined ? JSON.parse(localStorage.users) : [] | ||
|
||
var user = users.find(function (user) { | ||
return user.username === sessionStorage.username | ||
}) | ||
|
||
if (user === undefined) { | ||
throw new Error('user not found') | ||
} | ||
|
||
return user.name | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function getUserUsername() { | ||
return sessionStorage.username | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
var USER_REGEX = /^(?!.*\s{2})[a-zA-Z0-9._-]{4,16}$/ | ||
|
||
function loginUser(username, password) { | ||
if (!USER_REGEX.test(username)) { | ||
throw new Error('invalid username') | ||
} | ||
|
||
if (password.trim().length < 8) { | ||
throw new Error('invalid password') | ||
} | ||
|
||
var users = localStorage.users !== undefined ? JSON.parse(localStorage.users) : [] | ||
|
||
var user = users.find(function (user) { | ||
return user.username === username | ||
}) | ||
|
||
if (user === undefined) { | ||
throw new Error('username does not exist') | ||
} | ||
|
||
if (user.password !== password) { | ||
throw new Error('wrong password') | ||
} | ||
|
||
sessionStorage.username = username | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function logoutUser() { | ||
delete sessionStorage.username | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
var EMAIL_REGEX = /^[a-z0-9._]+@[a-z0-9.-]{3,63}\.[a-z]{2,10}$/ | ||
var NAME_REGEX = /^(?!.*\s{2})[a-zA-Z ]{3,16}$/ | ||
var USER_REGEX = /^(?!.*\s{2})[a-zA-Z0-9._-]{4,16}$/ | ||
|
||
function registerUser(name, surname, email, username, password, passwordRepeat) { | ||
if (!NAME_REGEX.test(name.trim())) { | ||
throw new Error('invalid name') | ||
} | ||
|
||
if (!NAME_REGEX.test(surname.trim())) { | ||
throw new Error('ivalid surname') | ||
} | ||
|
||
if (!EMAIL_REGEX.test(email)) { | ||
throw new Error('invalid email') | ||
} | ||
|
||
if (!USER_REGEX.test(username)) { | ||
throw new Error('invalid username') | ||
} | ||
|
||
if (password.trim().length < 8) { | ||
throw new Error('invalid password') | ||
} | ||
|
||
if (password !== passwordRepeat) { | ||
throw new Error('passwords do not match') | ||
} | ||
|
||
var users = localStorage.users !== undefined ? JSON.parse(localStorage.users) : [] | ||
|
||
var user = users.find(function (user) { | ||
return user.email === email | ||
}) | ||
|
||
if (user !== undefined) { | ||
throw new Error('email already exists') | ||
} | ||
|
||
var user = users.find(function (user) { | ||
return user.username === username | ||
}) | ||
|
||
if (user !== undefined) { | ||
throw new Error('username already exists') | ||
} | ||
|
||
user = { | ||
name: name, | ||
surname: surname, | ||
email: email, | ||
username: username, | ||
password: password | ||
} | ||
|
||
users.push(user) | ||
|
||
localStorage.users = JSON.stringify(users) | ||
} |
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
function formatTime(date) { | ||
var seconds = Math.round((Date.now() - date.getTime()) / 1000) | ||
|
||
if (seconds < 60) { | ||
return seconds + ' second' + (seconds === 1 ? '' : 's') | ||
} | ||
|
||
var minutes = Math.round(seconds / 60) | ||
|
||
if (minutes < 60) { | ||
return minutes + ' minute' + (minutes === 1 ? '' : 's') | ||
} | ||
|
||
var hours = Math.round(minutes / 60) | ||
|
||
if (hours < 24) { | ||
return hours + ' hour' + (hours === 1 ? '' : 's') | ||
} | ||
|
||
var days = Math.round(hours / 24) | ||
|
||
if (days < 7) { | ||
return days + ' day' + (days === 1 ? '' : 's') | ||
} | ||
|
||
var weeks = Math.round(days / 7) | ||
|
||
if (weeks < 4) { | ||
return weeks + ' week' + (weeks === 1 ? '' : 's') | ||
} | ||
|
||
var months = Math.round(weeks / 4) | ||
|
||
if (months < 12) { | ||
return months + ' month' + (months === 1 ? '' : 's') | ||
} | ||
|
||
var years = Math.round(months / 12) | ||
|
||
return years + ' year' + (years === 1 ? '' : 's') | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
function generateRandomId() { | ||
return Math.random().toString() + Date.now().toString() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
|
||
<head> | ||
<meta charset="UTF-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
<title>Home</title> | ||
|
||
<style> | ||
|
||
</style> | ||
</head> | ||
|
||
<body> | ||
<h1>Home</h1> | ||
<button id="logout-button">Logout</button> | ||
<button id="add-post-button">Add Post</button> | ||
|
||
<script src="../../utils/formatTime.js"></script> | ||
<script src="../../utils/randomId.js"></script> | ||
|
||
<script src="../../logic/getUserName.js"></script> | ||
<script src="../../logic/logoutUser.js"></script> | ||
<script src="../../logic/createPost.js"></script> | ||
<script src="../../logic/getAllPosts.js"></script> | ||
<script src="../../logic/getUserUsername.js"></script> | ||
<script src="../../logic/deletePost.js"></script> | ||
|
||
<script src="index.js"></script> | ||
</body> | ||
|
||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
try { | ||
var name = getUserName() | ||
|
||
var title = document.querySelector('h1') | ||
|
||
title.innerText = 'Hello, ' + name + '!' | ||
} catch (error) { | ||
alert(error.message) | ||
} | ||
|
||
var logoutButton = document.getElementById('logout-button') | ||
|
||
logoutButton.onclick = function () { | ||
try { | ||
logoutUser() | ||
|
||
location.href = '../login' | ||
} catch (error) { | ||
alert(error.message) | ||
} | ||
} | ||
|
||
var addPostButton = document.getElementById('add-post-button') | ||
|
||
addPostButton.onclick = function () { | ||
var createPostSection = document.createElement('section') | ||
document.body.appendChild(createPostSection) | ||
|
||
var createPostTitle = document.createElement('h2') | ||
createPostTitle.innerText = 'Create Post' | ||
createPostSection.appendChild(createPostTitle) | ||
|
||
var createPostForm = document.createElement('form') | ||
createPostSection.appendChild(createPostForm) | ||
|
||
createPostForm.onsubmit = function (event) { | ||
event.preventDefault() | ||
|
||
// var postImageInput = document.getElementById('post-image-input') | ||
var postImage = postImageInput.value | ||
var postCaption = postCaptionInput.value | ||
|
||
try { | ||
createPost(postImage, postCaption) | ||
|
||
document.body.removeChild(createPostSection) | ||
|
||
for (var i = postListSection.children.length - 1; i > -1; i--) { | ||
var child = postListSection.children[i] | ||
|
||
postListSection.removeChild(child) | ||
} | ||
|
||
listPosts() | ||
} catch (error) { | ||
alert(error.message) | ||
} | ||
} | ||
|
||
var postImageLabel = document.createElement('label') | ||
postImageLabel.htmlFor = 'post-image-input' | ||
postImageLabel.innerText = 'Image' | ||
createPostForm.appendChild(postImageLabel) | ||
|
||
var postImageInput = document.createElement('input') | ||
postImageInput.id = postImageLabel.htmlFor | ||
createPostForm.appendChild(postImageInput) | ||
|
||
var postCaptionLabel = document.createElement('label') | ||
postCaptionLabel.htmlFor = 'post-caption-input' | ||
postCaptionLabel.innerText = 'Caption' | ||
createPostForm.appendChild(postCaptionLabel) | ||
|
||
var postCaptionInput = document.createElement('input') | ||
postCaptionInput.id = postCaptionLabel.htmlFor | ||
createPostForm.appendChild(postCaptionInput) | ||
|
||
var postButtonSubmit = document.createElement('button') | ||
postButtonSubmit.type = 'submit' | ||
postButtonSubmit.innerText = 'Submit' | ||
createPostForm.appendChild(postButtonSubmit) | ||
|
||
var postCancelButton = document.createElement('button') | ||
postCancelButton.innerText = 'Cancel' | ||
postCancelButton.type = 'reset' | ||
createPostForm.appendChild(postCancelButton) | ||
|
||
postCancelButton.onclick = function () { | ||
document.body.removeChild(createPostSection) | ||
} | ||
} | ||
|
||
var postListSection = document.createElement('section') | ||
document.body.appendChild(postListSection) | ||
|
||
function listPosts() { | ||
var posts = getAllPosts() | ||
|
||
posts.forEach(function (post) { | ||
var postArticle = document.createElement('article') | ||
postListSection.appendChild(postArticle) | ||
|
||
var postAuthorTitle = document.createElement('h3') | ||
postAuthorTitle.innerText = post.author | ||
postArticle.appendChild(postAuthorTitle) | ||
|
||
var postImage = document.createElement('img') | ||
postImage.src = post.image | ||
postArticle.appendChild(postImage) | ||
|
||
var postCaptionText = document.createElement('p') | ||
postCaptionText.innerText = post.caption | ||
postArticle.appendChild(postCaptionText) | ||
|
||
var postDateTime = document.createElement('time') | ||
postDateTime.innerText = formatTime(new Date(post.date)) | ||
postArticle.appendChild(postDateTime) | ||
|
||
if (post.author === getUserUsername()) { | ||
var postDeleteButton = document.createElement('button') | ||
postDeleteButton.innerText = 'Delete' | ||
postArticle.appendChild(postDeleteButton) | ||
|
||
postDeleteButton.onclick = function () { | ||
|
||
var id = post.id | ||
|
||
deletePost(id) | ||
postListSection.removeChild(postArticle) | ||
} | ||
} | ||
}) | ||
} | ||
|
||
listPosts() |
Oops, something went wrong.