Skip to content

Commit

Permalink
implement all ponies app until delete post b00tc4mp#60
Browse files Browse the repository at this point in the history
  • Loading branch information
root authored and root committed Jun 16, 2024
1 parent bc6b5f1 commit c41a71a
Show file tree
Hide file tree
Showing 19 changed files with 496 additions and 0 deletions.
Empty file.
19 changes: 19 additions & 0 deletions staff/lucas-orts/ponies/app/logic/createPost.js
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)
}
14 changes: 14 additions & 0 deletions staff/lucas-orts/ponies/app/logic/deletePost.js
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)

}
5 changes: 5 additions & 0 deletions staff/lucas-orts/ponies/app/logic/getAllPosts.js
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()
}
13 changes: 13 additions & 0 deletions staff/lucas-orts/ponies/app/logic/getUserName.js
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
}
3 changes: 3 additions & 0 deletions staff/lucas-orts/ponies/app/logic/getUserUsername.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function getUserUsername() {
return sessionStorage.username
}
27 changes: 27 additions & 0 deletions staff/lucas-orts/ponies/app/logic/loginUser.js
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
}
3 changes: 3 additions & 0 deletions staff/lucas-orts/ponies/app/logic/logoutUser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function logoutUser() {
delete sessionStorage.username
}
59 changes: 59 additions & 0 deletions staff/lucas-orts/ponies/app/logic/registerUser.js
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.
41 changes: 41 additions & 0 deletions staff/lucas-orts/ponies/app/utils/formatTime.js
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')
}
3 changes: 3 additions & 0 deletions staff/lucas-orts/ponies/app/utils/generateRandomId.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function generateRandomId() {
return Math.random().toString() + Date.now().toString()
}
32 changes: 32 additions & 0 deletions staff/lucas-orts/ponies/app/views/home/index.html
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>
135 changes: 135 additions & 0 deletions staff/lucas-orts/ponies/app/views/home/index.js
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()
Loading

0 comments on commit c41a71a

Please sign in to comment.