From 8478b2ffa11b7a834c4a5331d38cba3a2814140d Mon Sep 17 00:00:00 2001 From: Rafa0297 <158144592+Rafa0297@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:37:17 +0200 Subject: [PATCH] change sintax to javascript 6 #181 --- staff/rafael-infante/unsocial.12/.gitkeep | 0 .../unsocial.12/compo/Button.js | 13 ++ .../rafael-infante/unsocial.12/compo/Code.js | 16 +++ .../rafael-infante/unsocial.12/compo/Compo.js | 29 ++++ .../rafael-infante/unsocial.12/compo/Form.js | 13 ++ .../unsocial.12/compo/Header.js | 9 ++ .../unsocial.12/compo/Heading.js | 10 ++ .../rafael-infante/unsocial.12/compo/Icon.js | 7 + .../rafael-infante/unsocial.12/compo/Input.js | 25 ++++ .../rafael-infante/unsocial.12/compo/Label.js | 11 ++ .../rafael-infante/unsocial.12/compo/Link.js | 11 ++ .../unsocial.12/compo/Paragraph.js | 16 +++ .../unsocial.12/compo/PasswordInput.js | 30 ++++ .../unsocial.12/compo/Picture.js | 11 ++ .../unsocial.12/compo/Preformatted.js | 16 +++ .../unsocial.12/compo/Snippet.js | 18 +++ .../rafael-infante/unsocial.12/compo/Time.js | 16 +++ .../unsocial.12/compo/index.html | 26 ++++ .../rafael-infante/unsocial.12/compo/main.js | 24 ++++ .../rafael-infante/unsocial.12/data/posts.js | 20 +++ .../rafael-infante/unsocial.12/data/users.js | 4 + .../rafael-infante/unsocial.12/images/boy.png | Bin 0 -> 31449 bytes .../unsocial.12/images/girl.png | Bin 0 -> 36125 bytes .../unsocial.12/images/users-avatar.png | Bin 0 -> 11768 bytes .../unsocial.12/images/users-avatar2.png | Bin 0 -> 15402 bytes staff/rafael-infante/unsocial.12/index.html | 53 +++++++ .../unsocial.12/logic/authenticateUser.js | 16 +++ .../unsocial.12/logic/createPost.js | 14 ++ .../unsocial.12/logic/getposts.js | 3 + .../unsocial.12/logic/registerUser.js | 25 ++++ staff/rafael-infante/unsocial.12/main.js | 16 +++ .../proto-chain/index.js | 0 staff/rafael-infante/unsocial.12/style.css | 132 ++++++++++++++++++ .../unsocial.12/view/CreatePost.js | 46 ++++++ staff/rafael-infante/unsocial.12/view/Home.js | 47 +++++++ .../rafael-infante/unsocial.12/view/Login.js | 71 ++++++++++ staff/rafael-infante/unsocial.12/view/Post.js | 17 +++ .../unsocial.12/view/PostList.js | 22 +++ .../unsocial.12/view/Register.js | 72 ++++++++++ staff/rafael-infante/unsocial.13/.gitkeep | 0 .../unsocial.13/compo/Button.js | 14 ++ .../rafael-infante/unsocial.13/compo/Code.js | 17 +++ .../rafael-infante/unsocial.13/compo/Compo.js | 31 ++++ .../rafael-infante/unsocial.13/compo/Form.js | 14 ++ .../unsocial.13/compo/Header.js | 10 ++ .../unsocial.13/compo/Heading.js | 11 ++ .../rafael-infante/unsocial.13/compo/Icon.js | 8 ++ .../rafael-infante/unsocial.13/compo/Input.js | 26 ++++ .../rafael-infante/unsocial.13/compo/Label.js | 12 ++ .../rafael-infante/unsocial.13/compo/Link.js | 12 ++ .../unsocial.13/compo/Paragraph.js | 17 +++ .../unsocial.13/compo/PasswordInput.js | 31 ++++ .../unsocial.13/compo/Picture.js | 12 ++ .../unsocial.13/compo/Preformatted.js | 17 +++ .../unsocial.13/compo/Snippet.js | 18 +++ .../rafael-infante/unsocial.13/compo/Time.js | 17 +++ .../unsocial.13/compo/index.html | 26 ++++ .../rafael-infante/unsocial.13/compo/main.js | 24 ++++ .../rafael-infante/unsocial.13/data/posts.js | 20 +++ .../rafael-infante/unsocial.13/data/users.js | 4 + .../rafael-infante/unsocial.13/images/boy.png | Bin 0 -> 31449 bytes .../unsocial.13/images/girl.png | Bin 0 -> 36125 bytes .../unsocial.13/images/users-avatar.png | Bin 0 -> 11768 bytes .../unsocial.13/images/users-avatar2.png | Bin 0 -> 15402 bytes staff/rafael-infante/unsocial.13/index.html | 51 +++++++ .../unsocial.13/logic/authenticateUser.js | 14 ++ .../unsocial.13/logic/createPost.js | 14 ++ .../unsocial.13/logic/getposts.js | 1 + .../unsocial.13/logic/registerUser.js | 23 +++ staff/rafael-infante/unsocial.13/main.js | 16 +++ staff/rafael-infante/unsocial.13/style.css | 132 ++++++++++++++++++ .../unsocial.13/view/CreatePost.js | 46 ++++++ staff/rafael-infante/unsocial.13/view/Home.js | 47 +++++++ .../rafael-infante/unsocial.13/view/Login.js | 70 ++++++++++ staff/rafael-infante/unsocial.13/view/Post.js | 17 +++ .../unsocial.13/view/PostList.js | 22 +++ .../unsocial.13/view/Register.js | 73 ++++++++++ staff/rafael-infante/unsocial/compo/Button.js | 15 +- staff/rafael-infante/unsocial/compo/Code.js | 21 +-- staff/rafael-infante/unsocial/compo/Compo.js | 40 +++--- staff/rafael-infante/unsocial/compo/Form.js | 15 +- staff/rafael-infante/unsocial/compo/Header.js | 11 +- .../rafael-infante/unsocial/compo/Heading.js | 11 +- staff/rafael-infante/unsocial/compo/Icon.js | 15 +- staff/rafael-infante/unsocial/compo/Input.js | 33 ++--- staff/rafael-infante/unsocial/compo/Label.js | 13 +- staff/rafael-infante/unsocial/compo/Link.js | 13 +- .../unsocial/compo/Paragraph.js | 21 +-- .../unsocial/compo/PasswordInput.js | 51 +++---- .../rafael-infante/unsocial/compo/Picture.js | 13 +- .../unsocial/compo/Preformatted.js | 21 +-- .../rafael-infante/unsocial/compo/Snippet.js | 22 +-- staff/rafael-infante/unsocial/compo/Time.js | 21 +-- staff/rafael-infante/unsocial/compo/main.js | 20 +-- staff/rafael-infante/unsocial/data/posts.js | 2 +- staff/rafael-infante/unsocial/data/users.js | 2 +- staff/rafael-infante/unsocial/index.html | 2 - .../unsocial/logic/authenticateUser.js | 6 +- .../unsocial/logic/createPost.js | 4 +- .../rafael-infante/unsocial/logic/getposts.js | 4 +- .../unsocial/logic/registerUser.js | 8 +- staff/rafael-infante/unsocial/main.js | 14 +- .../unsocial/view/CreatePost.js | 70 +++++----- staff/rafael-infante/unsocial/view/Home.js | 88 ++++++------ staff/rafael-infante/unsocial/view/Login.js | 109 +++++++-------- staff/rafael-infante/unsocial/view/Post.js | 26 ++-- .../rafael-infante/unsocial/view/PostList.js | 32 ++--- .../rafael-infante/unsocial/view/Register.js | 109 ++++++++------- 108 files changed, 2146 insertions(+), 412 deletions(-) create mode 100644 staff/rafael-infante/unsocial.12/.gitkeep create mode 100644 staff/rafael-infante/unsocial.12/compo/Button.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Code.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Compo.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Form.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Header.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Heading.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Icon.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Input.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Label.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Link.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Paragraph.js create mode 100644 staff/rafael-infante/unsocial.12/compo/PasswordInput.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Picture.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Preformatted.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Snippet.js create mode 100644 staff/rafael-infante/unsocial.12/compo/Time.js create mode 100644 staff/rafael-infante/unsocial.12/compo/index.html create mode 100644 staff/rafael-infante/unsocial.12/compo/main.js create mode 100644 staff/rafael-infante/unsocial.12/data/posts.js create mode 100644 staff/rafael-infante/unsocial.12/data/users.js create mode 100644 staff/rafael-infante/unsocial.12/images/boy.png create mode 100644 staff/rafael-infante/unsocial.12/images/girl.png create mode 100644 staff/rafael-infante/unsocial.12/images/users-avatar.png create mode 100644 staff/rafael-infante/unsocial.12/images/users-avatar2.png create mode 100644 staff/rafael-infante/unsocial.12/index.html create mode 100644 staff/rafael-infante/unsocial.12/logic/authenticateUser.js create mode 100644 staff/rafael-infante/unsocial.12/logic/createPost.js create mode 100644 staff/rafael-infante/unsocial.12/logic/getposts.js create mode 100644 staff/rafael-infante/unsocial.12/logic/registerUser.js create mode 100644 staff/rafael-infante/unsocial.12/main.js rename staff/rafael-infante/{unsocial => unsocial.12}/proto-chain/index.js (100%) create mode 100644 staff/rafael-infante/unsocial.12/style.css create mode 100644 staff/rafael-infante/unsocial.12/view/CreatePost.js create mode 100644 staff/rafael-infante/unsocial.12/view/Home.js create mode 100644 staff/rafael-infante/unsocial.12/view/Login.js create mode 100644 staff/rafael-infante/unsocial.12/view/Post.js create mode 100644 staff/rafael-infante/unsocial.12/view/PostList.js create mode 100644 staff/rafael-infante/unsocial.12/view/Register.js create mode 100644 staff/rafael-infante/unsocial.13/.gitkeep create mode 100644 staff/rafael-infante/unsocial.13/compo/Button.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Code.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Compo.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Form.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Header.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Heading.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Icon.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Input.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Label.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Link.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Paragraph.js create mode 100644 staff/rafael-infante/unsocial.13/compo/PasswordInput.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Picture.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Preformatted.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Snippet.js create mode 100644 staff/rafael-infante/unsocial.13/compo/Time.js create mode 100644 staff/rafael-infante/unsocial.13/compo/index.html create mode 100644 staff/rafael-infante/unsocial.13/compo/main.js create mode 100644 staff/rafael-infante/unsocial.13/data/posts.js create mode 100644 staff/rafael-infante/unsocial.13/data/users.js create mode 100644 staff/rafael-infante/unsocial.13/images/boy.png create mode 100644 staff/rafael-infante/unsocial.13/images/girl.png create mode 100644 staff/rafael-infante/unsocial.13/images/users-avatar.png create mode 100644 staff/rafael-infante/unsocial.13/images/users-avatar2.png create mode 100644 staff/rafael-infante/unsocial.13/index.html create mode 100644 staff/rafael-infante/unsocial.13/logic/authenticateUser.js create mode 100644 staff/rafael-infante/unsocial.13/logic/createPost.js create mode 100644 staff/rafael-infante/unsocial.13/logic/getposts.js create mode 100644 staff/rafael-infante/unsocial.13/logic/registerUser.js create mode 100644 staff/rafael-infante/unsocial.13/main.js create mode 100644 staff/rafael-infante/unsocial.13/style.css create mode 100644 staff/rafael-infante/unsocial.13/view/CreatePost.js create mode 100644 staff/rafael-infante/unsocial.13/view/Home.js create mode 100644 staff/rafael-infante/unsocial.13/view/Login.js create mode 100644 staff/rafael-infante/unsocial.13/view/Post.js create mode 100644 staff/rafael-infante/unsocial.13/view/PostList.js create mode 100644 staff/rafael-infante/unsocial.13/view/Register.js diff --git a/staff/rafael-infante/unsocial.12/.gitkeep b/staff/rafael-infante/unsocial.12/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/staff/rafael-infante/unsocial.12/compo/Button.js b/staff/rafael-infante/unsocial.12/compo/Button.js new file mode 100644 index 00000000..4e1c489c --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Button.js @@ -0,0 +1,13 @@ +/** + * Builds a Button instance + * @param {string} id name the id of the Button instance + * @param {string} type name the type of Button instance + * @param {string} text text inside the Button instance + */ +function Button(id, type, text) { + Compo.call(this, document.createElement('button')) + this.container.id = id + this.container.type = type + this.container.innerText = text +} +Button.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Code.js b/staff/rafael-infante/unsocial.12/compo/Code.js new file mode 100644 index 00000000..0fecd689 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Code.js @@ -0,0 +1,16 @@ +/** + * Builds a Code instance + * @param {string} text text inside the Code instance + */ +function Code(text) { + Compo.call(this, document.createElement('code')) + this.container.innerText = text +} +Code.extends(Compo) + +Code.prototype.setText = function (text) { + this.container.innerText = text +} +Code.prototype.getText = function () { + return this.container.innerText +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Compo.js b/staff/rafael-infante/unsocial.12/compo/Compo.js new file mode 100644 index 00000000..bc8ee827 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Compo.js @@ -0,0 +1,29 @@ +/** + * Builds Compo instances + * @param {HTMLElement} container The DOM container of the compo instance + */ +function Compo(container) { + this.container = container + this.children = [] + this.parent = null +} + +Compo.prototype.add = function (child) { + this.children.push(child) + child.parent = this + this.container.appendChild(child.container) +} + +Compo.prototype.remove = function () { + var index = this.parent.children.findIndex(function (child) { + return child === this + }.bind(this)) + + if (index > -1) this.parent.children.splice(index, 1) + + this.container.remove() +} + +Compo.prototype.addBehavior = function (action, callback) { + this.container.addEventListener(action, callback) +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Form.js b/staff/rafael-infante/unsocial.12/compo/Form.js new file mode 100644 index 00000000..cea714fe --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Form.js @@ -0,0 +1,13 @@ +/** + * Builds a Form instance + * @param {string} className Name the CSS class of the Form instance + */ +function Form(className) { + Compo.call(this, document.createElement('form')) + this.container.classList.add(className) +} +Form.extends(Compo) + +Form.prototype.reset = function () { + this.container.reset() +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Header.js b/staff/rafael-infante/unsocial.12/compo/Header.js new file mode 100644 index 00000000..69a78d74 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Header.js @@ -0,0 +1,9 @@ +/** + * Builds Header instances + * @param {string} className Name the CSS class of the Header instance + */ +function Header(className) { + Compo.call(this, document.createElement('header')) + this.container.classList.add(className) +} +Header.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Heading.js b/staff/rafael-infante/unsocial.12/compo/Heading.js new file mode 100644 index 00000000..e167b259 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Heading.js @@ -0,0 +1,10 @@ +/** + * Builds a Heading instance + * @param {string} text Text inside the heading tag + * @param {number} level Size of the heading + */ +function Heading(text, level) { + Compo.call(this, document.createElement('h' + level)) + this.container.innerText = text +} +Heading.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Icon.js b/staff/rafael-infante/unsocial.12/compo/Icon.js new file mode 100644 index 00000000..6b480a7e --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Icon.js @@ -0,0 +1,7 @@ +function Icon() { + Compo.call(this, document.createElement('i')) + this.container.classList.add('far') + this.container.classList.add('fa-eye') + this.container.id = 'icon' +} +Icon.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Input.js b/staff/rafael-infante/unsocial.12/compo/Input.js new file mode 100644 index 00000000..5bb12cee --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Input.js @@ -0,0 +1,25 @@ +/** + * Builds an Input instance + * @param {string} id Name the id attribute of the Input instance + * @param {string} type Name the type of input + * @param {string} placeholder Text inside the Input instance + * @param {boolean} required Gives required attribute to the Input instance + */ +function Input(id, type, placeholder, required) { + Compo.call(this, document.createElement('input')) + this.container.id = id + this.container.type = type + this.container.placeholder = placeholder + this.container.required = required +} +Input.extends(Compo) + +Input.prototype.getValue = function () { + return this.container.value +} +Input.prototype.setValue = function (value) { + this.container.value = value +} +Input.prototype.setType = function (type) { + this.container.type = type +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Label.js b/staff/rafael-infante/unsocial.12/compo/Label.js new file mode 100644 index 00000000..259d0ed3 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Label.js @@ -0,0 +1,11 @@ +/** + * Builds a Label instance + * @param {string} id Name the for attribute of the Label instance + * @param {string} text Text inside the label tag + */ +function Label(id, text) { + Compo.call(this, document.createElement('label')) + this.container.htmlFor = id + this.container.innerText = text +} +Label.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Link.js b/staff/rafael-infante/unsocial.12/compo/Link.js new file mode 100644 index 00000000..dde70f42 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Link.js @@ -0,0 +1,11 @@ +/** + * Builds a Link instance + * @param {string} text text inside the Link instance + * @param {string} href URL of the Link instance + */ +function Link(text, href) { + Compo.call(this, document.createElement('a')) + this.container.innerText = text + this.container.href = href +} +Link.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Paragraph.js b/staff/rafael-infante/unsocial.12/compo/Paragraph.js new file mode 100644 index 00000000..77b290d3 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Paragraph.js @@ -0,0 +1,16 @@ +/** + * Builds a Paragraph instance + * @param {string} text text inside the Paragraph instance + */ +function Paragraph(text) { + Compo.call(this, document.createElement('p')) + this.container.innerText = text +} +Paragraph.extends(Compo) + +Paragraph.prototype.setText = function (text) { + this.container.innerText = text +} +Paragraph.prototype.getText = function () { + return this.container.innerText +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/PasswordInput.js b/staff/rafael-infante/unsocial.12/compo/PasswordInput.js new file mode 100644 index 00000000..5591de87 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/PasswordInput.js @@ -0,0 +1,30 @@ +function Passwordinput(className, id, type, placeholder, required) { + Compo.call(this, document.createElement('div')) + this.container.classList.add(className) + + var input = new Input(id, type, placeholder, required) + this.add(input) + + var icon = new Icon() + this.add(icon) + + var isVisible = false + icon.addBehavior('click', function (event) { + icon.container.classList.toggle('fa-eye-slash') + if (!isVisible) { + input.setType('text') + isVisible = true + } else { + input.setType('password') + isVisible = false + } + }) +} +Passwordinput.extends(Compo) + +Passwordinput.prototype.getValue = function () { + return this.children[0].container.value +} +Passwordinput.prototype.setValue = function (value) { + this.children[0].container.value = value +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Picture.js b/staff/rafael-infante/unsocial.12/compo/Picture.js new file mode 100644 index 00000000..42bfbd16 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Picture.js @@ -0,0 +1,11 @@ +/** + * Builds a Picture instance + * @param {string} imageSrc directory/path of the image + * @param {string} imageClass Name the CSS class of the Picture instance + */ +function Picture(imageSrc, imageClass) { + Compo.call(this, document.createElement('img')) + this.container.src = imageSrc + this.container.classList.add(imageClass) +} +Picture.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Preformatted.js b/staff/rafael-infante/unsocial.12/compo/Preformatted.js new file mode 100644 index 00000000..1fe57e1a --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Preformatted.js @@ -0,0 +1,16 @@ +/** + * Builds a Preformatted instance + * @param {string} text text inside the Preformatted instance + */ +function Preformatted(text) { + Compo.call(this, document.createElement('pre')) + this.container.innerText = text +} +Preformatted.extends(Compo) + +Preformatted.prototype.setText = function (text) { + this.container.innerText = text +} +Preformatted.prototype.getText = function () { + return this.container.innerText +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Snippet.js b/staff/rafael-infante/unsocial.12/compo/Snippet.js new file mode 100644 index 00000000..491ce9eb --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Snippet.js @@ -0,0 +1,18 @@ +/** + * + * @param {*} text + */ +function Snippet(title, text) { + Compo.call(this, document.createElement('div')) + + var title = new Heading(title, 4) + this.add(title) + + var pre = new Preformatted('') + var code = new Code(text) + pre.add(code) + + this.add(pre) +} + +Snippet.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/Time.js b/staff/rafael-infante/unsocial.12/compo/Time.js new file mode 100644 index 00000000..769b9e07 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/Time.js @@ -0,0 +1,16 @@ +/** + * Builds a Time instance + * @param {string} text text inside the Time instance + */ +function Time(text) { + Compo.call(this, document.createElement('time')) + this.container.innerText = text +} +Time.extends(Compo) + +Time.prototype.setText = function (text) { + this.container.innerText = text +} +Time.prototype.getText = function () { + return this.container.innerText +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/index.html b/staff/rafael-infante/unsocial.12/compo/index.html new file mode 100644 index 00000000..02284b1d --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/index.html @@ -0,0 +1,26 @@ + + + + + + + + Compo v0.0.5 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/compo/main.js b/staff/rafael-infante/unsocial.12/compo/main.js new file mode 100644 index 00000000..ca25ddfe --- /dev/null +++ b/staff/rafael-infante/unsocial.12/compo/main.js @@ -0,0 +1,24 @@ +var page = new Compo(document.body) + +var title = new Heading('Compo', 1) +page.add(title) + +var inputTitle = new Heading('Input', 2) +page.add(inputTitle) + +var button = new Button('button', 'button', 'Submit') +page.add(button) + +var snippet = new Snippet('Demo Input', 'var input = new Input(\'password\', \'password\')\npage.add(input)') +page.add(snippet) + +var input = new Input('password', 'password', 'Enter password', true) +page.add(input) + +var linkTitle = new Heading('Link', 2) + +var snippet = new Snippet('Demo Link', 'var link = new Link(\'Google\')\npage.add(link)') +page.add(snippet) + +var link = new Link('Google') +page.add(link) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/data/posts.js b/staff/rafael-infante/unsocial.12/data/posts.js new file mode 100644 index 00000000..774002a1 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/data/posts.js @@ -0,0 +1,20 @@ +var posts = [ + { + image: 'https://i.pinimg.com/originals/8c/60/1a/8c601a25311a1a5098896f751a784b54.jpg', + text: 'here we are', + username: 'peterpan', + date: new Date + }, + { + image: 'https://pm1.aminoapps.com/8360/ad07e2d2cdf6e1733328d6e7b7848b87db38a2bbr1-1536-2048v2_hq.jpg', + text: 'here i am', + username: 'wendydarling', + date: new Date + }, + { + image: 'https://png.pngtree.com/png-clipart/20231020/original/pngtree-couple-dressed-up-like-a-pirate-and-vampire-taking-a-selfie-png-image_13385873.png', + text: 'muajajajaja', + username: 'captainhook', + date: new Date + } +] \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/data/users.js b/staff/rafael-infante/unsocial.12/data/users.js new file mode 100644 index 00000000..f98e7df4 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/data/users.js @@ -0,0 +1,4 @@ +var users = [ + { name: 'Peter Pan', email: 'peter@pan.com', username: 'peterpan', password: '123123123' }, + { name: 'Wendy Darling', email: 'wendy@darling.com', username: 'wendydarling', password: '123123123' } +] \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/images/boy.png b/staff/rafael-infante/unsocial.12/images/boy.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4e8b35c47f506f3aa068a47ba2caec6fe0920c GIT binary patch literal 31449 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 ^`3V5 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 literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.12/images/girl.png b/staff/rafael-infante/unsocial.12/images/girl.png new file mode 100644 index 0000000000000000000000000000000000000000..27f367db44bed504d0bc82ae44731c76515f65d1 GIT binary patch literal 36125 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 LNQ4K6{r~+p3PgMK literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.12/images/users-avatar.png b/staff/rafael-infante/unsocial.12/images/users-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac2ff603b48a6d4875e5f18ff012887ab9d78e1 GIT binary patch literal 11768 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 literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.12/images/users-avatar2.png b/staff/rafael-infante/unsocial.12/images/users-avatar2.png new file mode 100644 index 0000000000000000000000000000000000000000..ccee2bf79f75b6e027eba3efd8e006a092e7bf53 GIT binary patch literal 15402 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 QcfKG~Lo0*2o1PE;4~s%A(EtDd literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.12/index.html b/staff/rafael-infante/unsocial.12/index.html new file mode 100644 index 00000000..8e6169f7 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/index.html @@ -0,0 +1,53 @@ + + + + + + + Unsocial + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/logic/authenticateUser.js b/staff/rafael-infante/unsocial.12/logic/authenticateUser.js new file mode 100644 index 00000000..4ca735ae --- /dev/null +++ b/staff/rafael-infante/unsocial.12/logic/authenticateUser.js @@ -0,0 +1,16 @@ +function authenticateUser(loginUsername, loginPassword) { + if (loginUsername.length < 4 || loginUsername.length > 12) + throw new Error('invalid username') + + if (loginPassword < 8) + throw new Error('invalid password') + + var user = users.find(function (user) { + return user.username === loginUsername && user.password === loginPassword + }) + + if (user === undefined) + throw new Error('wrong credentials') + + return user +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/logic/createPost.js b/staff/rafael-infante/unsocial.12/logic/createPost.js new file mode 100644 index 00000000..97dbc099 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/logic/createPost.js @@ -0,0 +1,14 @@ +function createpost(username, image, text) { + if (username.length < 4 || username.length > 12) + throw new Error('invalid username') + // TODO input validation + + var post = { + image: image, + text: text, + username: username, + date: new Date + } + + posts.push(post) +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/logic/getposts.js b/staff/rafael-infante/unsocial.12/logic/getposts.js new file mode 100644 index 00000000..c070f29b --- /dev/null +++ b/staff/rafael-infante/unsocial.12/logic/getposts.js @@ -0,0 +1,3 @@ +function getPosts() { + return posts +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/logic/registerUser.js b/staff/rafael-infante/unsocial.12/logic/registerUser.js new file mode 100644 index 00000000..4fb48427 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/logic/registerUser.js @@ -0,0 +1,25 @@ +function registerUser(name, email, username, password, confirmPassword) { + if (name.length < 2) + throw new Error('Invalid name') + + if (!/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test(email)) + throw new Error('Invalid email') + + var registeredUser = users.find(function (user) { + return user.email === email || user.username === username + }) + if (registeredUser) + throw new Error('This user is already registered') + + if (username.length < 4 || username.length > 12) + throw new Error('invalid user name') + + if (password.length < 8) + throw new Error('invalid password') + + if (password !== confirmPassword) + throw new Error('passwords do not match') + var user = { name: name, email: email, username: username, password: password } + + users.push(user) +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/main.js b/staff/rafael-infante/unsocial.12/main.js new file mode 100644 index 00000000..6c38a00d --- /dev/null +++ b/staff/rafael-infante/unsocial.12/main.js @@ -0,0 +1,16 @@ +var loggedUser = null + +var header = new Header('logo-container') +var picture = new Picture('images/users-avatar.png', 'logo') +header.add(picture) +var heading = new Heading('unSocial', 1) +header.add(heading) + +var login = new Login() + +var page = new Compo(document.querySelector('body')) + +page.add(header) +page.add(login) + +var home \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/proto-chain/index.js b/staff/rafael-infante/unsocial.12/proto-chain/index.js similarity index 100% rename from staff/rafael-infante/unsocial/proto-chain/index.js rename to staff/rafael-infante/unsocial.12/proto-chain/index.js diff --git a/staff/rafael-infante/unsocial.12/style.css b/staff/rafael-infante/unsocial.12/style.css new file mode 100644 index 00000000..41524f1f --- /dev/null +++ b/staff/rafael-infante/unsocial.12/style.css @@ -0,0 +1,132 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap'); + +:root { + --font: 'Poppins'; + font-family: var(--font); + background-color: #e4b834; +} + +.logo-container { + display: flex; + text-decoration: none; + color: black; + align-items: center; + margin: 0; + padding-left: 15px; +} + +.logo { + max-height: 45px; + margin-right: 5px; +} + +body { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin: 0 15px 15px 15px; +} + +.section-container { + background-color: white; + padding: 0 20px 20px 20px; + margin: 10px; + width: 85%; + max-width: 500px; + min-height: 400px; + border-radius: 10px; + display: flex; + flex-direction: column; + align-items: center; +} + +.form-container { + display: flex; + flex-direction: column; + width: 100%; +} + +label { + padding-bottom: 6px; + font-size: 14px; +} + +input { + margin-bottom: 10px; + padding: 10px; + border-radius: 5px; + border: 1px solid gray; +} + +button { + color: white; + background-color: black; + margin-top: 25px; + padding: 15px; + border-radius: 15px; + cursor: pointer; + font-weight: bolder; + border: none; +} + +button:hover { + color: black; + background-color: #e7cc79; + border: none; +} + +#btn-register { + margin: 0; +} + +#bottom-text, +p { + font-size: 13px; + color: grey; + margin-top: 15px; + margin-bottom: 0; +} + +a { + text-decoration: none; + font-weight: bold; + color: black; + cursor: pointer; +} + +a:hover { + color: #dda600; +} + +h4 { + margin: 20px; +} + +.password-container { + position: relative; + display: inline-block; +} + +.password-container input { + width: 95%; +} + +.password-container i { + position: absolute; + top: 40%; + right: 18px; + transform: translateY(-50%); + cursor: pointer; +} + +.boy { + /* height: 280px; */ + width: 100%; +} + +@media (max-width: 350px) { + .password-container input { + width: 92%; + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/view/CreatePost.js b/staff/rafael-infante/unsocial.12/view/CreatePost.js new file mode 100644 index 00000000..e87602b5 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/view/CreatePost.js @@ -0,0 +1,46 @@ +function CreatePost(className) { + Compo.call(this, document.createElement('div')) + + this.container.classList.add(className) + + var title = new Heading('Create a Post', 3) + this.add(title) + + var form = new Form('form-container') + + var imageLabel = new Label('image', 'Image') + var imageInput = new Input('image', 'text', 'Select an image', true) + form.add(imageLabel) + form.add(imageInput) + + var textLabel = new Label('text', 'Text') + var textInput = new Input('text', 'text', 'Write a text', true) + form.add(textLabel) + form.add(textInput) + + var submitButton = new Button('submit', 'submit', 'Create') + form.add(submitButton) + + this.add(form) + + form.addBehavior('submit', function (event) { + event.preventDefault() + var image = imageInput.getValue() + var text = textInput.getValue() + + try { + createpost(loggedUser.username, image, text) + form.reset() + this.remove() + var postList = new PostList() + home.add(postList) + + } catch (error) { + alert(error.message) + + console.error(error) + } + }.bind(this)) +} + +CreatePost.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/view/Home.js b/staff/rafael-infante/unsocial.12/view/Home.js new file mode 100644 index 00000000..836faa62 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/view/Home.js @@ -0,0 +1,47 @@ +/** + * Builds Home instances + */ +function Home() { + Compo.call(this, document.createElement('section')) + + this.container.id = 'home' + this.container.classList.add('section-container') + + var title = new Heading('Home', 2) + this.add(title) + + var text = new Heading('Hello, ' + loggedUser.name + '!', 3) + this.add(text) + + var image = new Picture('images/boy.png', 'boy') + this.add(image) + + var logoutButton = new Button('btn.logout', 'submit', 'Logout') + this.add(logoutButton) + + // Functionality of logout button + logoutButton.container.addEventListener('click', function (event) { + var condition = prompt('Are you sure? (y/n)') + if (condition === 'y') { + event.preventDefault() + loggedUser = null + this.remove() + page.add(login) + } + }.bind(this)) + + var postButton = new Button('btn-post', 'button', 'Post') + this.add(postButton) + + postButton.addBehavior('click', function () { + + var createPost = new CreatePost('section-container') + this.children[this.children.length - 1].remove() + this.add(createPost) + }.bind(this)) + + var postList = new PostList() + this.add(postList) +} + +Home.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/view/Login.js b/staff/rafael-infante/unsocial.12/view/Login.js new file mode 100644 index 00000000..e91f74e5 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/view/Login.js @@ -0,0 +1,71 @@ +/** + * Builds Login instances + */ +function Login() { + Compo.call(this, document.createElement('section')) + + this.container.classList.add('section-container') + + var paragraph = document.createElement('p') + paragraph.innerText = 'Welcome !' + this.container.appendChild(paragraph) + + var title = new Heading('Sign in to unSocial', 2) + this.add(title) + + var text = new Heading('Write username and password to access', 4) + this.add(text) + + var form = (new Form('form-container')) + this.add(form) + + form.add(new Label('login-user', 'User name')) + var usernameInput = new Input('login-user', 'text', 'Enter your user name', true) + form.add(usernameInput) + + form.add(new Label('login-password', 'Password')) + var passwordInput = new Passwordinput('password-container', 'password', 'password', 'Enter your password', true) + form.add(passwordInput) + + var submitButton = new Button('btn-login', 'submit', 'Login') + form.add(submitButton) + + var anchorText = document.createElement('p') + anchorText.innerText = "Don't have an account? " + this.container.appendChild(anchorText) + + var registerLink = new Link('Register', '#') + + anchorText.appendChild(registerLink.container) + + // Send user to register section when clicking on register link + registerLink.addBehavior('click', function (event) { + event.preventDefault() + this.remove() + var register = new Register() + page.add(register) + }.bind(this)) + // actions when submitting the login Form + form.addBehavior('submit', function (event) { + event.preventDefault() + + var username = usernameInput.getValue() + var password = passwordInput.getValue() + + try { + loggedUser = authenticateUser(username, password) + form.container.reset() + this.remove() + home = new Home() + page.add(home) + } + catch (error) { + passwordInput.setValue('') + alert(error.message) + console.error(error) + } + }.bind(this)) + +} + +Login.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/view/Post.js b/staff/rafael-infante/unsocial.12/view/Post.js new file mode 100644 index 00000000..686ea9ed --- /dev/null +++ b/staff/rafael-infante/unsocial.12/view/Post.js @@ -0,0 +1,17 @@ +function Post(username, image, text, date) { + Compo.call(this, document.createElement('div')) + + var userTitle = new Heading(username, 4) + this.add(userTitle) + + var picture = new Picture(image, 'boy') + this.add(picture) + + var comment = new Paragraph(text) + this.add(comment) + + var time = new Time(date) + this.add(time) +} + +Post.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/view/PostList.js b/staff/rafael-infante/unsocial.12/view/PostList.js new file mode 100644 index 00000000..ac376db6 --- /dev/null +++ b/staff/rafael-infante/unsocial.12/view/PostList.js @@ -0,0 +1,22 @@ +function PostList() { + Compo.call(this, document.createElement('div')) + + var title = new Heading('Posts', 3) + this.add(title) + + try { + var posts = getPosts().toReversed() + + posts.forEach(function (post) { + var _post = new Post(post.username, post.image, post.text, post.date) + this.add(_post) + }.bind(this)) + + } catch (error) { + alert(error.message) + + console.error(error) + } +} + +PostList.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.12/view/Register.js b/staff/rafael-infante/unsocial.12/view/Register.js new file mode 100644 index 00000000..c901a53d --- /dev/null +++ b/staff/rafael-infante/unsocial.12/view/Register.js @@ -0,0 +1,72 @@ +/** + * Builds Register instances + */ +function Register() { + Compo.call(this, document.createElement('section')) + + this.container.classList.add('section-container') + + var title = new Heading('Register to unSocial', 2) + this.add(title) + + var form = new Form('form-container') + this.add(form) + + form.add(new Label('name', 'Name')) + var nameInput = new Input('name', 'text', 'Enter your name', true) + form.add(nameInput) + + form.add(new Label('email', 'Email')) + var emailInput = new Input('email', 'email', 'Enter your email', true) + form.add(emailInput) + + form.add(new Label('username', 'User name')) + var usernameInput = new Input('username', 'text', 'Enter your user name', true) + form.add(usernameInput) + + form.add(new Label('password', 'Password')) + var passwordInput = new Input('password', 'password', 'Enter your password', true) + form.add(passwordInput) + + form.add(new Label('confirm-password', 'Confirm password')) + var confirmpasswordInput = new Input('confirm-password', 'password', 'Confirm your password', true) + form.add(confirmpasswordInput) + + var registerButton = new Button('btn-register', 'submit', 'Register') + form.add(registerButton) + + var registerAnchorText = document.createElement('p') + registerAnchorText.innerText = 'Already have an account? ' + this.container.appendChild(registerAnchorText) + + var loginLink = new Link('Login', '#') + registerAnchorText.appendChild(loginLink.container) + + loginLink.addBehavior('click', function (event) { + event.preventDefault(); + this.remove() + page.add(login) + }.bind(this)) + // Save data of new user when clicking on register button + form.addBehavior('submit', function (event) { + event.preventDefault() + var name = nameInput.getValue() + var email = emailInput.getValue() + var username = usernameInput.getValue() + var password = passwordInput.getValue() + var confirmPassword = confirmpasswordInput.getValue() + + try { + registerUser(name, email, username, password, confirmPassword) + form.reset() + this.remove() + page.add(login) + } + catch (error) { + alert(error.message) + console.error(error) + } + }.bind(this)) +} + +Register.extends(Compo) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/.gitkeep b/staff/rafael-infante/unsocial.13/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/staff/rafael-infante/unsocial.13/compo/Button.js b/staff/rafael-infante/unsocial.13/compo/Button.js new file mode 100644 index 00000000..bb66bc97 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Button.js @@ -0,0 +1,14 @@ +/** + * Builds a Button instance + * @param {string} id name the id of the Button instance + * @param {string} type name the type of Button instance + * @param {string} text text inside the Button instance + */ +class Button extends Compo { + constructor(id, type, text) { + super(document.createElement('button')) + this.container.id = id + this.container.type = type + this.container.innerText = text + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Code.js b/staff/rafael-infante/unsocial.13/compo/Code.js new file mode 100644 index 00000000..e30b1037 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Code.js @@ -0,0 +1,17 @@ +/** + * Builds a Code instance + * @param {string} text text inside the Code instance + */ +class Code extends Compo { + constructor(text) { + super(document.createElement('code')) + this.container.innerText = text + } + + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Compo.js b/staff/rafael-infante/unsocial.13/compo/Compo.js new file mode 100644 index 00000000..6d837bf9 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Compo.js @@ -0,0 +1,31 @@ +/** + * Builds Compo instances + * @param {HTMLElement} container The DOM container of the compo instance + */ +class Compo { + constructor(container) { + this.container = container + this.children = [] + this.parent = null + } + + add(child) { + this.children.push(child) + child.parent = this + this.container.appendChild(child.container) + } + + remove() { + var index = this.parent.children.findIndex(function (child) { + return child === this + }.bind(this)) + + if (index > -1) this.parent.children.splice(index, 1) + + this.container.remove() + } + + addBehavior(action, callback) { + this.container.addEventListener(action, callback) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Form.js b/staff/rafael-infante/unsocial.13/compo/Form.js new file mode 100644 index 00000000..7a14cb82 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Form.js @@ -0,0 +1,14 @@ +/** + * Builds a Form instance + * @param {string} className Name the CSS class of the Form instance + */ +class Form extends Compo { + constructor(className) { + super(document.createElement('form')) + this.container.classList.add(className) + } + + reset() { + this.container.reset() + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Header.js b/staff/rafael-infante/unsocial.13/compo/Header.js new file mode 100644 index 00000000..fb589ece --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Header.js @@ -0,0 +1,10 @@ +/** + * Builds Header instances + * @param {string} className Name the CSS class of the Header instance + */ +class Header extends Compo { + constructor(className) { + super(document.createElement('header')) + this.container.classList.add(className) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Heading.js b/staff/rafael-infante/unsocial.13/compo/Heading.js new file mode 100644 index 00000000..e38b7e0e --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Heading.js @@ -0,0 +1,11 @@ +/** + * Builds a Heading instance + * @param {string} text Text inside the heading tag + * @param {number} level Size of the heading + */ +class Heading extends Compo { + constructor(text, level) { + super(document.createElement('h' + level)) + this.container.innerText = text + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Icon.js b/staff/rafael-infante/unsocial.13/compo/Icon.js new file mode 100644 index 00000000..226f6a64 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Icon.js @@ -0,0 +1,8 @@ +class Icon extends Compo { + constructor() { + super(document.createElement('i')) + this.container.classList.add('far') + this.container.classList.add('fa-eye') + this.container.id = 'icon' + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Input.js b/staff/rafael-infante/unsocial.13/compo/Input.js new file mode 100644 index 00000000..0a593bfb --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Input.js @@ -0,0 +1,26 @@ +/** + * Builds an Input instance + * @param {string} id Name the id attribute of the Input instance + * @param {string} type Name the type of input + * @param {string} placeholder Text inside the Input instance + * @param {boolean} required Gives required attribute to the Input instance + */ +class Input extends Compo { + constructor(id, type, placeholder, required) { + super(document.createElement('input')) + this.container.id = id + this.container.type = type + this.container.placeholder = placeholder + this.container.required = required + } + + getValue() { + return this.container.value + } + setValue(value) { + this.container.value = value + } + setType(type) { + this.container.type = type + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Label.js b/staff/rafael-infante/unsocial.13/compo/Label.js new file mode 100644 index 00000000..41c7c631 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Label.js @@ -0,0 +1,12 @@ +/** + * Builds a Label instance + * @param {string} id Name the for attribute of the Label instance + * @param {string} text Text inside the label tag + */ +class Label extends Compo { + constructor(id, text) { + super(document.createElement('label')) + this.container.htmlFor = id + this.container.innerText = text + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Link.js b/staff/rafael-infante/unsocial.13/compo/Link.js new file mode 100644 index 00000000..f11b0c4f --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Link.js @@ -0,0 +1,12 @@ +/** + * Builds a Link instance + * @param {string} text text inside the Link instance + * @param {string} href URL of the Link instance + */ +class Link extends Compo { + constructor(text, href) { + super(document.createElement('a')) + this.container.innerText = text + this.container.href = href + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Paragraph.js b/staff/rafael-infante/unsocial.13/compo/Paragraph.js new file mode 100644 index 00000000..cc7db7a8 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Paragraph.js @@ -0,0 +1,17 @@ +/** + * Builds a Paragraph instance + * @param {string} text text inside the Paragraph instance + */ +class Paragraph extends Compo { + constructor(text) { + super(document.createElement('p')) + this.container.innerText = text + } + + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/PasswordInput.js b/staff/rafael-infante/unsocial.13/compo/PasswordInput.js new file mode 100644 index 00000000..9e1d73ae --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/PasswordInput.js @@ -0,0 +1,31 @@ +class Passwordinput extends Compo { + constructor(className, id, type, placeholder, required) { + super(document.createElement('div')) + this.container.classList.add(className) + + const input = new Input(id, type, placeholder, required) + this.add(input) + + const icon = new Icon() + this.add(icon) + + let isVisible = false + icon.addBehavior('click', function (event) { + icon.container.classList.toggle('fa-eye-slash') + if (!isVisible) { + input.setType('text') + isVisible = true + } else { + input.setType('password') + isVisible = false + } + }) + } + + getValue() { + return this.children[0].container.value + } + setValue(value) { + this.children[0].container.value = value + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Picture.js b/staff/rafael-infante/unsocial.13/compo/Picture.js new file mode 100644 index 00000000..10de5ba9 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Picture.js @@ -0,0 +1,12 @@ +/** + * Builds a Picture instance + * @param {string} imageSrc directory/path of the image + * @param {string} imageClass Name the CSS class of the Picture instance + */ +class Picture extends Compo { + constructor(imageSrc, imageClass) { + super(document.createElement('img')) + this.container.src = imageSrc + this.container.classList.add(imageClass) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Preformatted.js b/staff/rafael-infante/unsocial.13/compo/Preformatted.js new file mode 100644 index 00000000..b8f7449d --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Preformatted.js @@ -0,0 +1,17 @@ +/** + * Builds a Preformatted instance + * @param {string} text text inside the Preformatted instance + */ +class Preformatted extends Compo { + constructor(text) { + super(document.createElement('pre')) + this.container.innerText = text + } + + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Snippet.js b/staff/rafael-infante/unsocial.13/compo/Snippet.js new file mode 100644 index 00000000..bd091f05 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Snippet.js @@ -0,0 +1,18 @@ +/** + * + * @param {*} text + */ +class Snippet extends Compo { + constructor(title, text) { + super(document.createElement('div')) + + const caption = new Heading(title, 4) + this.add(caption) + + const pre = new Preformatted('') + const code = new Code(text) + pre.add(code) + + this.add(pre) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/Time.js b/staff/rafael-infante/unsocial.13/compo/Time.js new file mode 100644 index 00000000..2f10b8f8 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/Time.js @@ -0,0 +1,17 @@ +/** + * Builds a Time instance + * @param {string} text text inside the Time instance + */ +class Time extends Compo { + constructor(text) { + super(document.createElement('time')) + this.container.innerText = text + } + + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/index.html b/staff/rafael-infante/unsocial.13/compo/index.html new file mode 100644 index 00000000..02284b1d --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/index.html @@ -0,0 +1,26 @@ + + + + + + + + Compo v0.0.5 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/compo/main.js b/staff/rafael-infante/unsocial.13/compo/main.js new file mode 100644 index 00000000..3a2da656 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/compo/main.js @@ -0,0 +1,24 @@ +const page = new Compo(document.body) + +const title = new Heading('Compo', 1) +page.add(title) + +const inputTitle = new Heading('Input', 2) +page.add(inputTitle) + +const button = new Button('button', 'button', 'Submit') +page.add(button) + +const snippet = new Snippet('Demo Input', 'var input = new Input(\'password\', \'password\')\npage.add(input)') +page.add(snippet) + +const input = new Input('password', 'password', 'Enter password', true) +page.add(input) + +const linkTitle = new Heading('Link', 2) + +const snippet2 = new Snippet('Demo Link', 'var link = new Link(\'Google\')\npage.add(link)') +page.add(snippet2) + +const link = new Link('Google') +page.add(link) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/data/posts.js b/staff/rafael-infante/unsocial.13/data/posts.js new file mode 100644 index 00000000..88f613e9 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/data/posts.js @@ -0,0 +1,20 @@ +const posts = [ + { + image: 'https://i.pinimg.com/originals/8c/60/1a/8c601a25311a1a5098896f751a784b54.jpg', + text: 'here we are', + username: 'peterpan', + date: new Date + }, + { + image: 'https://pm1.aminoapps.com/8360/ad07e2d2cdf6e1733328d6e7b7848b87db38a2bbr1-1536-2048v2_hq.jpg', + text: 'here i am', + username: 'wendydarling', + date: new Date + }, + { + image: 'https://png.pngtree.com/png-clipart/20231020/original/pngtree-couple-dressed-up-like-a-pirate-and-vampire-taking-a-selfie-png-image_13385873.png', + text: 'muajajajaja', + username: 'captainhook', + date: new Date + } +] \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/data/users.js b/staff/rafael-infante/unsocial.13/data/users.js new file mode 100644 index 00000000..cea1f4ba --- /dev/null +++ b/staff/rafael-infante/unsocial.13/data/users.js @@ -0,0 +1,4 @@ +const users = [ + { name: 'Peter Pan', email: 'peter@pan.com', username: 'peterpan', password: '123123123' }, + { name: 'Wendy Darling', email: 'wendy@darling.com', username: 'wendydarling', password: '123123123' } +] \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/images/boy.png b/staff/rafael-infante/unsocial.13/images/boy.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4e8b35c47f506f3aa068a47ba2caec6fe0920c GIT binary patch literal 31449 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 ^`3V5 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 literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.13/images/girl.png b/staff/rafael-infante/unsocial.13/images/girl.png new file mode 100644 index 0000000000000000000000000000000000000000..27f367db44bed504d0bc82ae44731c76515f65d1 GIT binary patch literal 36125 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 LNQ4K6{r~+p3PgMK literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.13/images/users-avatar.png b/staff/rafael-infante/unsocial.13/images/users-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac2ff603b48a6d4875e5f18ff012887ab9d78e1 GIT binary patch literal 11768 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 literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.13/images/users-avatar2.png b/staff/rafael-infante/unsocial.13/images/users-avatar2.png new file mode 100644 index 0000000000000000000000000000000000000000..ccee2bf79f75b6e027eba3efd8e006a092e7bf53 GIT binary patch literal 15402 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 QcfKG~Lo0*2o1PE;4~s%A(EtDd literal 0 HcmV?d00001 diff --git a/staff/rafael-infante/unsocial.13/index.html b/staff/rafael-infante/unsocial.13/index.html new file mode 100644 index 00000000..a913c266 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/index.html @@ -0,0 +1,51 @@ + + + + + + + Unsocial + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/logic/authenticateUser.js b/staff/rafael-infante/unsocial.13/logic/authenticateUser.js new file mode 100644 index 00000000..05221c87 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/logic/authenticateUser.js @@ -0,0 +1,14 @@ +const authenticateUser = (loginUsername, loginPassword) => { + if (loginUsername.length < 4 || loginUsername.length > 12) + throw new Error('invalid username') + + if (loginPassword < 8) + throw new Error('invalid password') + + const user = users.find(user => user.username === loginUsername && user.password === loginPassword) + + if (user === undefined) + throw new Error('wrong credentials') + + return user +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/logic/createPost.js b/staff/rafael-infante/unsocial.13/logic/createPost.js new file mode 100644 index 00000000..af51493d --- /dev/null +++ b/staff/rafael-infante/unsocial.13/logic/createPost.js @@ -0,0 +1,14 @@ +const createpost = (username, image, text) => { + if (username.length < 4 || username.length > 12) + throw new Error('invalid username') + // TODO input validation + + const post = { + image: image, + text: text, + username: username, + date: new Date + } + + posts.push(post) +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/logic/getposts.js b/staff/rafael-infante/unsocial.13/logic/getposts.js new file mode 100644 index 00000000..0ccae925 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/logic/getposts.js @@ -0,0 +1 @@ +const getPosts = () => posts \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/logic/registerUser.js b/staff/rafael-infante/unsocial.13/logic/registerUser.js new file mode 100644 index 00000000..abd496cf --- /dev/null +++ b/staff/rafael-infante/unsocial.13/logic/registerUser.js @@ -0,0 +1,23 @@ +const registerUser = (name, email, username, password, confirmPassword) => { + if (name.length < 2) + throw new Error('Invalid name') + + if (!/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test(email)) + throw new Error('Invalid email') + + const registeredUser = users.find(user => user.email === email || user.username === username) + if (registeredUser) + throw new Error('This user is already registered') + + if (username.length < 4 || username.length > 12) + throw new Error('invalid user name') + + if (password.length < 8) + throw new Error('invalid password') + + if (password !== confirmPassword) + throw new Error('passwords do not match') + const user = { name: name, email: email, username: username, password: password } + + users.push(user) +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/main.js b/staff/rafael-infante/unsocial.13/main.js new file mode 100644 index 00000000..60ac105d --- /dev/null +++ b/staff/rafael-infante/unsocial.13/main.js @@ -0,0 +1,16 @@ +let loggedUser = null + +const header = new Header('logo-container') +const picture = new Picture('images/users-avatar.png', 'logo') +header.add(picture) +const heading = new Heading('unSocial', 1) +header.add(heading) + +const login = new Login() + +const page = new Compo(document.querySelector('body')) + +page.add(header) +page.add(login) + +let home \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/style.css b/staff/rafael-infante/unsocial.13/style.css new file mode 100644 index 00000000..41524f1f --- /dev/null +++ b/staff/rafael-infante/unsocial.13/style.css @@ -0,0 +1,132 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap'); + +:root { + --font: 'Poppins'; + font-family: var(--font); + background-color: #e4b834; +} + +.logo-container { + display: flex; + text-decoration: none; + color: black; + align-items: center; + margin: 0; + padding-left: 15px; +} + +.logo { + max-height: 45px; + margin-right: 5px; +} + +body { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin: 0 15px 15px 15px; +} + +.section-container { + background-color: white; + padding: 0 20px 20px 20px; + margin: 10px; + width: 85%; + max-width: 500px; + min-height: 400px; + border-radius: 10px; + display: flex; + flex-direction: column; + align-items: center; +} + +.form-container { + display: flex; + flex-direction: column; + width: 100%; +} + +label { + padding-bottom: 6px; + font-size: 14px; +} + +input { + margin-bottom: 10px; + padding: 10px; + border-radius: 5px; + border: 1px solid gray; +} + +button { + color: white; + background-color: black; + margin-top: 25px; + padding: 15px; + border-radius: 15px; + cursor: pointer; + font-weight: bolder; + border: none; +} + +button:hover { + color: black; + background-color: #e7cc79; + border: none; +} + +#btn-register { + margin: 0; +} + +#bottom-text, +p { + font-size: 13px; + color: grey; + margin-top: 15px; + margin-bottom: 0; +} + +a { + text-decoration: none; + font-weight: bold; + color: black; + cursor: pointer; +} + +a:hover { + color: #dda600; +} + +h4 { + margin: 20px; +} + +.password-container { + position: relative; + display: inline-block; +} + +.password-container input { + width: 95%; +} + +.password-container i { + position: absolute; + top: 40%; + right: 18px; + transform: translateY(-50%); + cursor: pointer; +} + +.boy { + /* height: 280px; */ + width: 100%; +} + +@media (max-width: 350px) { + .password-container input { + width: 92%; + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/view/CreatePost.js b/staff/rafael-infante/unsocial.13/view/CreatePost.js new file mode 100644 index 00000000..256795b3 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/view/CreatePost.js @@ -0,0 +1,46 @@ +class CreatePost extends Compo { + constructor(className) { + super(document.createElement('div')) + + this.container.classList.add(className) + + const title = new Heading('Create a Post', 3) + this.add(title) + + const form = new Form('form-container') + + const imageLabel = new Label('image', 'Image') + const imageInput = new Input('image', 'text', 'Select an image', true) + form.add(imageLabel) + form.add(imageInput) + + const textLabel = new Label('text', 'Text') + const textInput = new Input('text', 'text', 'Write a text', true) + form.add(textLabel) + form.add(textInput) + + const submitButton = new Button('submit', 'submit', 'Create') + form.add(submitButton) + + this.add(form) + + form.addBehavior('submit', event => { + event.preventDefault() + const image = imageInput.getValue() + const text = textInput.getValue() + + try { + createpost(loggedUser.username, image, text) + form.reset() + this.remove() + const postList = new PostList() + home.add(postList) + + } catch (error) { + alert(error.message) + + console.error(error) + } + }) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/view/Home.js b/staff/rafael-infante/unsocial.13/view/Home.js new file mode 100644 index 00000000..0870e448 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/view/Home.js @@ -0,0 +1,47 @@ +/** + * Builds Home instances + */ +class Home extends Compo { + constructor() { + super(document.createElement('section')) + + this.container.id = 'home' + this.container.classList.add('section-container') + + const title = new Heading('Home', 2) + this.add(title) + + const text = new Heading('Hello, ' + loggedUser.name + '!', 3) + this.add(text) + + const image = new Picture('images/boy.png', 'boy') + this.add(image) + + const logoutButton = new Button('btn.logout', 'submit', 'Logout') + this.add(logoutButton) + + // Functionality of logout button + logoutButton.container.addEventListener('click', event => { + const condition = prompt('Are you sure? (y/n)') + if (condition === 'y') { + event.preventDefault() + loggedUser = null + this.remove() + page.add(login) + } + }) + + const postButton = new Button('btn-post', 'button', 'Post') + this.add(postButton) + + postButton.addBehavior('click', () => { + + const createPost = new CreatePost('section-container') + this.children[this.children.length - 1].remove() + this.add(createPost) + }) + + const postList = new PostList() + this.add(postList) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/view/Login.js b/staff/rafael-infante/unsocial.13/view/Login.js new file mode 100644 index 00000000..d3a20e5e --- /dev/null +++ b/staff/rafael-infante/unsocial.13/view/Login.js @@ -0,0 +1,70 @@ +/** + * Builds Login instances + */ +class Login extends Compo { + constructor() { + super(document.createElement('section')) + + this.container.classList.add('section-container') + + const paragraph = document.createElement('p') + paragraph.innerText = 'Welcome !' + this.container.appendChild(paragraph) + + const title = new Heading('Sign in to unSocial', 2) + this.add(title) + + const text = new Heading('Write username and password to access', 4) + this.add(text) + + const form = (new Form('form-container')) + this.add(form) + + form.add(new Label('login-user', 'User name')) + const usernameInput = new Input('login-user', 'text', 'Enter your user name', true) + form.add(usernameInput) + + form.add(new Label('login-password', 'Password')) + const passwordInput = new Passwordinput('password-container', 'password', 'password', 'Enter your password', true) + form.add(passwordInput) + + const submitButton = new Button('btn-login', 'submit', 'Login') + form.add(submitButton) + + const anchorText = document.createElement('p') + anchorText.innerText = "Don't have an account? " + this.container.appendChild(anchorText) + + const registerLink = new Link('Register', '#') + + anchorText.appendChild(registerLink.container) + + // Send user to register section when clicking on register link + registerLink.addBehavior('click', event => { + event.preventDefault() + this.remove() + const register = new Register() + page.add(register) + }) + + // actions when submitting the login Form + form.addBehavior('submit', event => { + event.preventDefault() + const username = usernameInput.getValue() + const password = passwordInput.getValue() + + try { + loggedUser = authenticateUser(username, password) + form.container.reset() + this.remove() + home = new Home() + page.add(home) + } + catch (error) { + passwordInput.setValue('') + alert(error.message) + console.error(error) + } + }) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/view/Post.js b/staff/rafael-infante/unsocial.13/view/Post.js new file mode 100644 index 00000000..ef18a249 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/view/Post.js @@ -0,0 +1,17 @@ +class Post extends Compo { + constructor(username, image, text, date) { + super(document.createElement('div')) + + const userTitle = new Heading(username, 4) + this.add(userTitle) + + const picture = new Picture(image, 'boy') + this.add(picture) + + const comment = new Paragraph(text) + this.add(comment) + + const time = new Time(date) + this.add(time) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/view/PostList.js b/staff/rafael-infante/unsocial.13/view/PostList.js new file mode 100644 index 00000000..9e801ea5 --- /dev/null +++ b/staff/rafael-infante/unsocial.13/view/PostList.js @@ -0,0 +1,22 @@ +class PostList extends Compo { + constructor() { + super(document.createElement('div')) + + const title = new Heading('Posts', 3) + this.add(title) + + try { + const posts = getPosts().toReversed() + + posts.forEach(post => { + const _post = new Post(post.username, post.image, post.text, post.date) + this.add(_post) + }) + + } catch (error) { + alert(error.message) + + console.error(error) + } + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial.13/view/Register.js b/staff/rafael-infante/unsocial.13/view/Register.js new file mode 100644 index 00000000..decac37a --- /dev/null +++ b/staff/rafael-infante/unsocial.13/view/Register.js @@ -0,0 +1,73 @@ +/** + * Builds Register instances + */ +class Register extends Compo { + constructor() { + super(document.createElement('section')) + + this.container.classList.add('section-container') + + const title = new Heading('Register to unSocial', 2) + this.add(title) + + const form = new Form('form-container') + this.add(form) + + form.add(new Label('name', 'Name')) + const nameInput = new Input('name', 'text', 'Enter your name', true) + form.add(nameInput) + + form.add(new Label('email', 'Email')) + const emailInput = new Input('email', 'email', 'Enter your email', true) + form.add(emailInput) + + form.add(new Label('username', 'User name')) + const usernameInput = new Input('username', 'text', 'Enter your user name', true) + form.add(usernameInput) + + form.add(new Label('password', 'Password')) + const passwordInput = new Input('password', 'password', 'Enter your password', true) + form.add(passwordInput) + + form.add(new Label('confirm-password', 'Confirm password')) + const confirmpasswordInput = new Input('confirm-password', 'password', 'Confirm your password', true) + form.add(confirmpasswordInput) + + const registerButton = new Button('btn-register', 'submit', 'Register') + form.add(registerButton) + + const registerAnchorText = document.createElement('p') + registerAnchorText.innerText = 'Already have an account? ' + this.container.appendChild(registerAnchorText) + + const loginLink = new Link('Login', '#') + registerAnchorText.appendChild(loginLink.container) + + loginLink.addBehavior('click', event => { + event.preventDefault(); + this.remove() + page.add(login) + }) + + // Save data of new user when clicking on register button + form.addBehavior('submit', event => { + event.preventDefault() + const name = nameInput.getValue() + const email = emailInput.getValue() + const username = usernameInput.getValue() + const password = passwordInput.getValue() + const confirmPassword = confirmpasswordInput.getValue() + + try { + registerUser(name, email, username, password, confirmPassword) + form.reset() + this.remove() + page.add(login) + } + catch (error) { + alert(error.message) + console.error(error) + } + }) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Button.js b/staff/rafael-infante/unsocial/compo/Button.js index 4e1c489c..bb66bc97 100644 --- a/staff/rafael-infante/unsocial/compo/Button.js +++ b/staff/rafael-infante/unsocial/compo/Button.js @@ -4,10 +4,11 @@ * @param {string} type name the type of Button instance * @param {string} text text inside the Button instance */ -function Button(id, type, text) { - Compo.call(this, document.createElement('button')) - this.container.id = id - this.container.type = type - this.container.innerText = text -} -Button.extends(Compo) \ No newline at end of file +class Button extends Compo { + constructor(id, type, text) { + super(document.createElement('button')) + this.container.id = id + this.container.type = type + this.container.innerText = text + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Code.js b/staff/rafael-infante/unsocial/compo/Code.js index 0fecd689..e30b1037 100644 --- a/staff/rafael-infante/unsocial/compo/Code.js +++ b/staff/rafael-infante/unsocial/compo/Code.js @@ -2,15 +2,16 @@ * Builds a Code instance * @param {string} text text inside the Code instance */ -function Code(text) { - Compo.call(this, document.createElement('code')) - this.container.innerText = text -} -Code.extends(Compo) +class Code extends Compo { + constructor(text) { + super(document.createElement('code')) + this.container.innerText = text + } -Code.prototype.setText = function (text) { - this.container.innerText = text -} -Code.prototype.getText = function () { - return this.container.innerText + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Compo.js b/staff/rafael-infante/unsocial/compo/Compo.js index bc8ee827..6d837bf9 100644 --- a/staff/rafael-infante/unsocial/compo/Compo.js +++ b/staff/rafael-infante/unsocial/compo/Compo.js @@ -2,28 +2,30 @@ * Builds Compo instances * @param {HTMLElement} container The DOM container of the compo instance */ -function Compo(container) { - this.container = container - this.children = [] - this.parent = null -} +class Compo { + constructor(container) { + this.container = container + this.children = [] + this.parent = null + } -Compo.prototype.add = function (child) { - this.children.push(child) - child.parent = this - this.container.appendChild(child.container) -} + add(child) { + this.children.push(child) + child.parent = this + this.container.appendChild(child.container) + } -Compo.prototype.remove = function () { - var index = this.parent.children.findIndex(function (child) { - return child === this - }.bind(this)) + remove() { + var index = this.parent.children.findIndex(function (child) { + return child === this + }.bind(this)) - if (index > -1) this.parent.children.splice(index, 1) + if (index > -1) this.parent.children.splice(index, 1) - this.container.remove() -} + this.container.remove() + } -Compo.prototype.addBehavior = function (action, callback) { - this.container.addEventListener(action, callback) + addBehavior(action, callback) { + this.container.addEventListener(action, callback) + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Form.js b/staff/rafael-infante/unsocial/compo/Form.js index cea714fe..7a14cb82 100644 --- a/staff/rafael-infante/unsocial/compo/Form.js +++ b/staff/rafael-infante/unsocial/compo/Form.js @@ -2,12 +2,13 @@ * Builds a Form instance * @param {string} className Name the CSS class of the Form instance */ -function Form(className) { - Compo.call(this, document.createElement('form')) - this.container.classList.add(className) -} -Form.extends(Compo) +class Form extends Compo { + constructor(className) { + super(document.createElement('form')) + this.container.classList.add(className) + } -Form.prototype.reset = function () { - this.container.reset() + reset() { + this.container.reset() + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Header.js b/staff/rafael-infante/unsocial/compo/Header.js index 69a78d74..fb589ece 100644 --- a/staff/rafael-infante/unsocial/compo/Header.js +++ b/staff/rafael-infante/unsocial/compo/Header.js @@ -2,8 +2,9 @@ * Builds Header instances * @param {string} className Name the CSS class of the Header instance */ -function Header(className) { - Compo.call(this, document.createElement('header')) - this.container.classList.add(className) -} -Header.extends(Compo) \ No newline at end of file +class Header extends Compo { + constructor(className) { + super(document.createElement('header')) + this.container.classList.add(className) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Heading.js b/staff/rafael-infante/unsocial/compo/Heading.js index e167b259..e38b7e0e 100644 --- a/staff/rafael-infante/unsocial/compo/Heading.js +++ b/staff/rafael-infante/unsocial/compo/Heading.js @@ -3,8 +3,9 @@ * @param {string} text Text inside the heading tag * @param {number} level Size of the heading */ -function Heading(text, level) { - Compo.call(this, document.createElement('h' + level)) - this.container.innerText = text -} -Heading.extends(Compo) \ No newline at end of file +class Heading extends Compo { + constructor(text, level) { + super(document.createElement('h' + level)) + this.container.innerText = text + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Icon.js b/staff/rafael-infante/unsocial/compo/Icon.js index 6b480a7e..226f6a64 100644 --- a/staff/rafael-infante/unsocial/compo/Icon.js +++ b/staff/rafael-infante/unsocial/compo/Icon.js @@ -1,7 +1,8 @@ -function Icon() { - Compo.call(this, document.createElement('i')) - this.container.classList.add('far') - this.container.classList.add('fa-eye') - this.container.id = 'icon' -} -Icon.extends(Compo) \ No newline at end of file +class Icon extends Compo { + constructor() { + super(document.createElement('i')) + this.container.classList.add('far') + this.container.classList.add('fa-eye') + this.container.id = 'icon' + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Input.js b/staff/rafael-infante/unsocial/compo/Input.js index 5bb12cee..0a593bfb 100644 --- a/staff/rafael-infante/unsocial/compo/Input.js +++ b/staff/rafael-infante/unsocial/compo/Input.js @@ -5,21 +5,22 @@ * @param {string} placeholder Text inside the Input instance * @param {boolean} required Gives required attribute to the Input instance */ -function Input(id, type, placeholder, required) { - Compo.call(this, document.createElement('input')) - this.container.id = id - this.container.type = type - this.container.placeholder = placeholder - this.container.required = required -} -Input.extends(Compo) +class Input extends Compo { + constructor(id, type, placeholder, required) { + super(document.createElement('input')) + this.container.id = id + this.container.type = type + this.container.placeholder = placeholder + this.container.required = required + } -Input.prototype.getValue = function () { - return this.container.value -} -Input.prototype.setValue = function (value) { - this.container.value = value -} -Input.prototype.setType = function (type) { - this.container.type = type + getValue() { + return this.container.value + } + setValue(value) { + this.container.value = value + } + setType(type) { + this.container.type = type + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Label.js b/staff/rafael-infante/unsocial/compo/Label.js index 259d0ed3..41c7c631 100644 --- a/staff/rafael-infante/unsocial/compo/Label.js +++ b/staff/rafael-infante/unsocial/compo/Label.js @@ -3,9 +3,10 @@ * @param {string} id Name the for attribute of the Label instance * @param {string} text Text inside the label tag */ -function Label(id, text) { - Compo.call(this, document.createElement('label')) - this.container.htmlFor = id - this.container.innerText = text -} -Label.extends(Compo) \ No newline at end of file +class Label extends Compo { + constructor(id, text) { + super(document.createElement('label')) + this.container.htmlFor = id + this.container.innerText = text + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Link.js b/staff/rafael-infante/unsocial/compo/Link.js index dde70f42..f11b0c4f 100644 --- a/staff/rafael-infante/unsocial/compo/Link.js +++ b/staff/rafael-infante/unsocial/compo/Link.js @@ -3,9 +3,10 @@ * @param {string} text text inside the Link instance * @param {string} href URL of the Link instance */ -function Link(text, href) { - Compo.call(this, document.createElement('a')) - this.container.innerText = text - this.container.href = href -} -Link.extends(Compo) \ No newline at end of file +class Link extends Compo { + constructor(text, href) { + super(document.createElement('a')) + this.container.innerText = text + this.container.href = href + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Paragraph.js b/staff/rafael-infante/unsocial/compo/Paragraph.js index 77b290d3..cc7db7a8 100644 --- a/staff/rafael-infante/unsocial/compo/Paragraph.js +++ b/staff/rafael-infante/unsocial/compo/Paragraph.js @@ -2,15 +2,16 @@ * Builds a Paragraph instance * @param {string} text text inside the Paragraph instance */ -function Paragraph(text) { - Compo.call(this, document.createElement('p')) - this.container.innerText = text -} -Paragraph.extends(Compo) +class Paragraph extends Compo { + constructor(text) { + super(document.createElement('p')) + this.container.innerText = text + } -Paragraph.prototype.setText = function (text) { - this.container.innerText = text -} -Paragraph.prototype.getText = function () { - return this.container.innerText + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/PasswordInput.js b/staff/rafael-infante/unsocial/compo/PasswordInput.js index 5591de87..9e1d73ae 100644 --- a/staff/rafael-infante/unsocial/compo/PasswordInput.js +++ b/staff/rafael-infante/unsocial/compo/PasswordInput.js @@ -1,30 +1,31 @@ -function Passwordinput(className, id, type, placeholder, required) { - Compo.call(this, document.createElement('div')) - this.container.classList.add(className) +class Passwordinput extends Compo { + constructor(className, id, type, placeholder, required) { + super(document.createElement('div')) + this.container.classList.add(className) - var input = new Input(id, type, placeholder, required) - this.add(input) + const input = new Input(id, type, placeholder, required) + this.add(input) - var icon = new Icon() - this.add(icon) + const icon = new Icon() + this.add(icon) - var isVisible = false - icon.addBehavior('click', function (event) { - icon.container.classList.toggle('fa-eye-slash') - if (!isVisible) { - input.setType('text') - isVisible = true - } else { - input.setType('password') - isVisible = false - } - }) -} -Passwordinput.extends(Compo) + let isVisible = false + icon.addBehavior('click', function (event) { + icon.container.classList.toggle('fa-eye-slash') + if (!isVisible) { + input.setType('text') + isVisible = true + } else { + input.setType('password') + isVisible = false + } + }) + } -Passwordinput.prototype.getValue = function () { - return this.children[0].container.value -} -Passwordinput.prototype.setValue = function (value) { - this.children[0].container.value = value + getValue() { + return this.children[0].container.value + } + setValue(value) { + this.children[0].container.value = value + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Picture.js b/staff/rafael-infante/unsocial/compo/Picture.js index 42bfbd16..10de5ba9 100644 --- a/staff/rafael-infante/unsocial/compo/Picture.js +++ b/staff/rafael-infante/unsocial/compo/Picture.js @@ -3,9 +3,10 @@ * @param {string} imageSrc directory/path of the image * @param {string} imageClass Name the CSS class of the Picture instance */ -function Picture(imageSrc, imageClass) { - Compo.call(this, document.createElement('img')) - this.container.src = imageSrc - this.container.classList.add(imageClass) -} -Picture.extends(Compo) \ No newline at end of file +class Picture extends Compo { + constructor(imageSrc, imageClass) { + super(document.createElement('img')) + this.container.src = imageSrc + this.container.classList.add(imageClass) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Preformatted.js b/staff/rafael-infante/unsocial/compo/Preformatted.js index 1fe57e1a..b8f7449d 100644 --- a/staff/rafael-infante/unsocial/compo/Preformatted.js +++ b/staff/rafael-infante/unsocial/compo/Preformatted.js @@ -2,15 +2,16 @@ * Builds a Preformatted instance * @param {string} text text inside the Preformatted instance */ -function Preformatted(text) { - Compo.call(this, document.createElement('pre')) - this.container.innerText = text -} -Preformatted.extends(Compo) +class Preformatted extends Compo { + constructor(text) { + super(document.createElement('pre')) + this.container.innerText = text + } -Preformatted.prototype.setText = function (text) { - this.container.innerText = text -} -Preformatted.prototype.getText = function () { - return this.container.innerText + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Snippet.js b/staff/rafael-infante/unsocial/compo/Snippet.js index 491ce9eb..bd091f05 100644 --- a/staff/rafael-infante/unsocial/compo/Snippet.js +++ b/staff/rafael-infante/unsocial/compo/Snippet.js @@ -2,17 +2,17 @@ * * @param {*} text */ -function Snippet(title, text) { - Compo.call(this, document.createElement('div')) +class Snippet extends Compo { + constructor(title, text) { + super(document.createElement('div')) - var title = new Heading(title, 4) - this.add(title) + const caption = new Heading(title, 4) + this.add(caption) - var pre = new Preformatted('') - var code = new Code(text) - pre.add(code) + const pre = new Preformatted('') + const code = new Code(text) + pre.add(code) - this.add(pre) -} - -Snippet.extends(Compo) \ No newline at end of file + this.add(pre) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/Time.js b/staff/rafael-infante/unsocial/compo/Time.js index 769b9e07..2f10b8f8 100644 --- a/staff/rafael-infante/unsocial/compo/Time.js +++ b/staff/rafael-infante/unsocial/compo/Time.js @@ -2,15 +2,16 @@ * Builds a Time instance * @param {string} text text inside the Time instance */ -function Time(text) { - Compo.call(this, document.createElement('time')) - this.container.innerText = text -} -Time.extends(Compo) +class Time extends Compo { + constructor(text) { + super(document.createElement('time')) + this.container.innerText = text + } -Time.prototype.setText = function (text) { - this.container.innerText = text -} -Time.prototype.getText = function () { - return this.container.innerText + setText(text) { + this.container.innerText = text + } + getText() { + return this.container.innerText + } } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/compo/main.js b/staff/rafael-infante/unsocial/compo/main.js index ca25ddfe..3a2da656 100644 --- a/staff/rafael-infante/unsocial/compo/main.js +++ b/staff/rafael-infante/unsocial/compo/main.js @@ -1,24 +1,24 @@ -var page = new Compo(document.body) +const page = new Compo(document.body) -var title = new Heading('Compo', 1) +const title = new Heading('Compo', 1) page.add(title) -var inputTitle = new Heading('Input', 2) +const inputTitle = new Heading('Input', 2) page.add(inputTitle) -var button = new Button('button', 'button', 'Submit') +const button = new Button('button', 'button', 'Submit') page.add(button) -var snippet = new Snippet('Demo Input', 'var input = new Input(\'password\', \'password\')\npage.add(input)') +const snippet = new Snippet('Demo Input', 'var input = new Input(\'password\', \'password\')\npage.add(input)') page.add(snippet) -var input = new Input('password', 'password', 'Enter password', true) +const input = new Input('password', 'password', 'Enter password', true) page.add(input) -var linkTitle = new Heading('Link', 2) +const linkTitle = new Heading('Link', 2) -var snippet = new Snippet('Demo Link', 'var link = new Link(\'Google\')\npage.add(link)') -page.add(snippet) +const snippet2 = new Snippet('Demo Link', 'var link = new Link(\'Google\')\npage.add(link)') +page.add(snippet2) -var link = new Link('Google') +const link = new Link('Google') page.add(link) \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/data/posts.js b/staff/rafael-infante/unsocial/data/posts.js index 774002a1..88f613e9 100644 --- a/staff/rafael-infante/unsocial/data/posts.js +++ b/staff/rafael-infante/unsocial/data/posts.js @@ -1,4 +1,4 @@ -var posts = [ +const posts = [ { image: 'https://i.pinimg.com/originals/8c/60/1a/8c601a25311a1a5098896f751a784b54.jpg', text: 'here we are', diff --git a/staff/rafael-infante/unsocial/data/users.js b/staff/rafael-infante/unsocial/data/users.js index f98e7df4..cea1f4ba 100644 --- a/staff/rafael-infante/unsocial/data/users.js +++ b/staff/rafael-infante/unsocial/data/users.js @@ -1,4 +1,4 @@ -var users = [ +const users = [ { name: 'Peter Pan', email: 'peter@pan.com', username: 'peterpan', password: '123123123' }, { name: 'Wendy Darling', email: 'wendy@darling.com', username: 'wendydarling', password: '123123123' } ] \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/index.html b/staff/rafael-infante/unsocial/index.html index 8e6169f7..a913c266 100644 --- a/staff/rafael-infante/unsocial/index.html +++ b/staff/rafael-infante/unsocial/index.html @@ -20,8 +20,6 @@ - - diff --git a/staff/rafael-infante/unsocial/logic/authenticateUser.js b/staff/rafael-infante/unsocial/logic/authenticateUser.js index 4ca735ae..05221c87 100644 --- a/staff/rafael-infante/unsocial/logic/authenticateUser.js +++ b/staff/rafael-infante/unsocial/logic/authenticateUser.js @@ -1,13 +1,11 @@ -function authenticateUser(loginUsername, loginPassword) { +const authenticateUser = (loginUsername, loginPassword) => { if (loginUsername.length < 4 || loginUsername.length > 12) throw new Error('invalid username') if (loginPassword < 8) throw new Error('invalid password') - var user = users.find(function (user) { - return user.username === loginUsername && user.password === loginPassword - }) + const user = users.find(user => user.username === loginUsername && user.password === loginPassword) if (user === undefined) throw new Error('wrong credentials') diff --git a/staff/rafael-infante/unsocial/logic/createPost.js b/staff/rafael-infante/unsocial/logic/createPost.js index 97dbc099..af51493d 100644 --- a/staff/rafael-infante/unsocial/logic/createPost.js +++ b/staff/rafael-infante/unsocial/logic/createPost.js @@ -1,9 +1,9 @@ -function createpost(username, image, text) { +const createpost = (username, image, text) => { if (username.length < 4 || username.length > 12) throw new Error('invalid username') // TODO input validation - var post = { + const post = { image: image, text: text, username: username, diff --git a/staff/rafael-infante/unsocial/logic/getposts.js b/staff/rafael-infante/unsocial/logic/getposts.js index c070f29b..0ccae925 100644 --- a/staff/rafael-infante/unsocial/logic/getposts.js +++ b/staff/rafael-infante/unsocial/logic/getposts.js @@ -1,3 +1 @@ -function getPosts() { - return posts -} \ No newline at end of file +const getPosts = () => posts \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/logic/registerUser.js b/staff/rafael-infante/unsocial/logic/registerUser.js index 4fb48427..abd496cf 100644 --- a/staff/rafael-infante/unsocial/logic/registerUser.js +++ b/staff/rafael-infante/unsocial/logic/registerUser.js @@ -1,13 +1,11 @@ -function registerUser(name, email, username, password, confirmPassword) { +const registerUser = (name, email, username, password, confirmPassword) => { if (name.length < 2) throw new Error('Invalid name') if (!/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test(email)) throw new Error('Invalid email') - var registeredUser = users.find(function (user) { - return user.email === email || user.username === username - }) + const registeredUser = users.find(user => user.email === email || user.username === username) if (registeredUser) throw new Error('This user is already registered') @@ -19,7 +17,7 @@ function registerUser(name, email, username, password, confirmPassword) { if (password !== confirmPassword) throw new Error('passwords do not match') - var user = { name: name, email: email, username: username, password: password } + const user = { name: name, email: email, username: username, password: password } users.push(user) } \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/main.js b/staff/rafael-infante/unsocial/main.js index 6c38a00d..60ac105d 100644 --- a/staff/rafael-infante/unsocial/main.js +++ b/staff/rafael-infante/unsocial/main.js @@ -1,16 +1,16 @@ -var loggedUser = null +let loggedUser = null -var header = new Header('logo-container') -var picture = new Picture('images/users-avatar.png', 'logo') +const header = new Header('logo-container') +const picture = new Picture('images/users-avatar.png', 'logo') header.add(picture) -var heading = new Heading('unSocial', 1) +const heading = new Heading('unSocial', 1) header.add(heading) -var login = new Login() +const login = new Login() -var page = new Compo(document.querySelector('body')) +const page = new Compo(document.querySelector('body')) page.add(header) page.add(login) -var home \ No newline at end of file +let home \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/view/CreatePost.js b/staff/rafael-infante/unsocial/view/CreatePost.js index e87602b5..256795b3 100644 --- a/staff/rafael-infante/unsocial/view/CreatePost.js +++ b/staff/rafael-infante/unsocial/view/CreatePost.js @@ -1,46 +1,46 @@ -function CreatePost(className) { - Compo.call(this, document.createElement('div')) +class CreatePost extends Compo { + constructor(className) { + super(document.createElement('div')) - this.container.classList.add(className) + this.container.classList.add(className) - var title = new Heading('Create a Post', 3) - this.add(title) + const title = new Heading('Create a Post', 3) + this.add(title) - var form = new Form('form-container') + const form = new Form('form-container') - var imageLabel = new Label('image', 'Image') - var imageInput = new Input('image', 'text', 'Select an image', true) - form.add(imageLabel) - form.add(imageInput) + const imageLabel = new Label('image', 'Image') + const imageInput = new Input('image', 'text', 'Select an image', true) + form.add(imageLabel) + form.add(imageInput) - var textLabel = new Label('text', 'Text') - var textInput = new Input('text', 'text', 'Write a text', true) - form.add(textLabel) - form.add(textInput) + const textLabel = new Label('text', 'Text') + const textInput = new Input('text', 'text', 'Write a text', true) + form.add(textLabel) + form.add(textInput) - var submitButton = new Button('submit', 'submit', 'Create') - form.add(submitButton) + const submitButton = new Button('submit', 'submit', 'Create') + form.add(submitButton) - this.add(form) + this.add(form) - form.addBehavior('submit', function (event) { - event.preventDefault() - var image = imageInput.getValue() - var text = textInput.getValue() + form.addBehavior('submit', event => { + event.preventDefault() + const image = imageInput.getValue() + const text = textInput.getValue() - try { - createpost(loggedUser.username, image, text) - form.reset() - this.remove() - var postList = new PostList() - home.add(postList) + try { + createpost(loggedUser.username, image, text) + form.reset() + this.remove() + const postList = new PostList() + home.add(postList) - } catch (error) { - alert(error.message) + } catch (error) { + alert(error.message) - console.error(error) - } - }.bind(this)) -} - -CreatePost.extends(Compo) \ No newline at end of file + console.error(error) + } + }) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/view/Home.js b/staff/rafael-infante/unsocial/view/Home.js index 836faa62..0870e448 100644 --- a/staff/rafael-infante/unsocial/view/Home.js +++ b/staff/rafael-infante/unsocial/view/Home.js @@ -1,47 +1,47 @@ /** * Builds Home instances */ -function Home() { - Compo.call(this, document.createElement('section')) - - this.container.id = 'home' - this.container.classList.add('section-container') - - var title = new Heading('Home', 2) - this.add(title) - - var text = new Heading('Hello, ' + loggedUser.name + '!', 3) - this.add(text) - - var image = new Picture('images/boy.png', 'boy') - this.add(image) - - var logoutButton = new Button('btn.logout', 'submit', 'Logout') - this.add(logoutButton) - - // Functionality of logout button - logoutButton.container.addEventListener('click', function (event) { - var condition = prompt('Are you sure? (y/n)') - if (condition === 'y') { - event.preventDefault() - loggedUser = null - this.remove() - page.add(login) - } - }.bind(this)) - - var postButton = new Button('btn-post', 'button', 'Post') - this.add(postButton) - - postButton.addBehavior('click', function () { - - var createPost = new CreatePost('section-container') - this.children[this.children.length - 1].remove() - this.add(createPost) - }.bind(this)) - - var postList = new PostList() - this.add(postList) -} - -Home.extends(Compo) \ No newline at end of file +class Home extends Compo { + constructor() { + super(document.createElement('section')) + + this.container.id = 'home' + this.container.classList.add('section-container') + + const title = new Heading('Home', 2) + this.add(title) + + const text = new Heading('Hello, ' + loggedUser.name + '!', 3) + this.add(text) + + const image = new Picture('images/boy.png', 'boy') + this.add(image) + + const logoutButton = new Button('btn.logout', 'submit', 'Logout') + this.add(logoutButton) + + // Functionality of logout button + logoutButton.container.addEventListener('click', event => { + const condition = prompt('Are you sure? (y/n)') + if (condition === 'y') { + event.preventDefault() + loggedUser = null + this.remove() + page.add(login) + } + }) + + const postButton = new Button('btn-post', 'button', 'Post') + this.add(postButton) + + postButton.addBehavior('click', () => { + + const createPost = new CreatePost('section-container') + this.children[this.children.length - 1].remove() + this.add(createPost) + }) + + const postList = new PostList() + this.add(postList) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/view/Login.js b/staff/rafael-infante/unsocial/view/Login.js index e91f74e5..d3a20e5e 100644 --- a/staff/rafael-infante/unsocial/view/Login.js +++ b/staff/rafael-infante/unsocial/view/Login.js @@ -1,71 +1,70 @@ /** * Builds Login instances */ -function Login() { - Compo.call(this, document.createElement('section')) +class Login extends Compo { + constructor() { + super(document.createElement('section')) - this.container.classList.add('section-container') + this.container.classList.add('section-container') - var paragraph = document.createElement('p') - paragraph.innerText = 'Welcome !' - this.container.appendChild(paragraph) + const paragraph = document.createElement('p') + paragraph.innerText = 'Welcome !' + this.container.appendChild(paragraph) - var title = new Heading('Sign in to unSocial', 2) - this.add(title) + const title = new Heading('Sign in to unSocial', 2) + this.add(title) - var text = new Heading('Write username and password to access', 4) - this.add(text) + const text = new Heading('Write username and password to access', 4) + this.add(text) - var form = (new Form('form-container')) - this.add(form) + const form = (new Form('form-container')) + this.add(form) - form.add(new Label('login-user', 'User name')) - var usernameInput = new Input('login-user', 'text', 'Enter your user name', true) - form.add(usernameInput) + form.add(new Label('login-user', 'User name')) + const usernameInput = new Input('login-user', 'text', 'Enter your user name', true) + form.add(usernameInput) - form.add(new Label('login-password', 'Password')) - var passwordInput = new Passwordinput('password-container', 'password', 'password', 'Enter your password', true) - form.add(passwordInput) + form.add(new Label('login-password', 'Password')) + const passwordInput = new Passwordinput('password-container', 'password', 'password', 'Enter your password', true) + form.add(passwordInput) - var submitButton = new Button('btn-login', 'submit', 'Login') - form.add(submitButton) + const submitButton = new Button('btn-login', 'submit', 'Login') + form.add(submitButton) - var anchorText = document.createElement('p') - anchorText.innerText = "Don't have an account? " - this.container.appendChild(anchorText) + const anchorText = document.createElement('p') + anchorText.innerText = "Don't have an account? " + this.container.appendChild(anchorText) - var registerLink = new Link('Register', '#') + const registerLink = new Link('Register', '#') - anchorText.appendChild(registerLink.container) + anchorText.appendChild(registerLink.container) - // Send user to register section when clicking on register link - registerLink.addBehavior('click', function (event) { - event.preventDefault() - this.remove() - var register = new Register() - page.add(register) - }.bind(this)) - // actions when submitting the login Form - form.addBehavior('submit', function (event) { - event.preventDefault() - - var username = usernameInput.getValue() - var password = passwordInput.getValue() - - try { - loggedUser = authenticateUser(username, password) - form.container.reset() + // Send user to register section when clicking on register link + registerLink.addBehavior('click', event => { + event.preventDefault() this.remove() - home = new Home() - page.add(home) - } - catch (error) { - passwordInput.setValue('') - alert(error.message) - console.error(error) - } - }.bind(this)) - -} - -Login.extends(Compo) \ No newline at end of file + const register = new Register() + page.add(register) + }) + + // actions when submitting the login Form + form.addBehavior('submit', event => { + event.preventDefault() + const username = usernameInput.getValue() + const password = passwordInput.getValue() + + try { + loggedUser = authenticateUser(username, password) + form.container.reset() + this.remove() + home = new Home() + page.add(home) + } + catch (error) { + passwordInput.setValue('') + alert(error.message) + console.error(error) + } + }) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/view/Post.js b/staff/rafael-infante/unsocial/view/Post.js index 686ea9ed..ef18a249 100644 --- a/staff/rafael-infante/unsocial/view/Post.js +++ b/staff/rafael-infante/unsocial/view/Post.js @@ -1,17 +1,17 @@ -function Post(username, image, text, date) { - Compo.call(this, document.createElement('div')) +class Post extends Compo { + constructor(username, image, text, date) { + super(document.createElement('div')) - var userTitle = new Heading(username, 4) - this.add(userTitle) + const userTitle = new Heading(username, 4) + this.add(userTitle) - var picture = new Picture(image, 'boy') - this.add(picture) + const picture = new Picture(image, 'boy') + this.add(picture) - var comment = new Paragraph(text) - this.add(comment) + const comment = new Paragraph(text) + this.add(comment) - var time = new Time(date) - this.add(time) -} - -Post.extends(Compo) \ No newline at end of file + const time = new Time(date) + this.add(time) + } +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/view/PostList.js b/staff/rafael-infante/unsocial/view/PostList.js index ac376db6..9e801ea5 100644 --- a/staff/rafael-infante/unsocial/view/PostList.js +++ b/staff/rafael-infante/unsocial/view/PostList.js @@ -1,22 +1,22 @@ -function PostList() { - Compo.call(this, document.createElement('div')) +class PostList extends Compo { + constructor() { + super(document.createElement('div')) - var title = new Heading('Posts', 3) - this.add(title) + const title = new Heading('Posts', 3) + this.add(title) - try { - var posts = getPosts().toReversed() + try { + const posts = getPosts().toReversed() - posts.forEach(function (post) { - var _post = new Post(post.username, post.image, post.text, post.date) - this.add(_post) - }.bind(this)) + posts.forEach(post => { + const _post = new Post(post.username, post.image, post.text, post.date) + this.add(_post) + }) - } catch (error) { - alert(error.message) + } catch (error) { + alert(error.message) - console.error(error) + console.error(error) + } } -} - -PostList.extends(Compo) \ No newline at end of file +} \ No newline at end of file diff --git a/staff/rafael-infante/unsocial/view/Register.js b/staff/rafael-infante/unsocial/view/Register.js index c901a53d..decac37a 100644 --- a/staff/rafael-infante/unsocial/view/Register.js +++ b/staff/rafael-infante/unsocial/view/Register.js @@ -1,72 +1,73 @@ /** * Builds Register instances */ -function Register() { - Compo.call(this, document.createElement('section')) +class Register extends Compo { + constructor() { + super(document.createElement('section')) - this.container.classList.add('section-container') + this.container.classList.add('section-container') - var title = new Heading('Register to unSocial', 2) - this.add(title) + const title = new Heading('Register to unSocial', 2) + this.add(title) - var form = new Form('form-container') - this.add(form) + const form = new Form('form-container') + this.add(form) - form.add(new Label('name', 'Name')) - var nameInput = new Input('name', 'text', 'Enter your name', true) - form.add(nameInput) + form.add(new Label('name', 'Name')) + const nameInput = new Input('name', 'text', 'Enter your name', true) + form.add(nameInput) - form.add(new Label('email', 'Email')) - var emailInput = new Input('email', 'email', 'Enter your email', true) - form.add(emailInput) + form.add(new Label('email', 'Email')) + const emailInput = new Input('email', 'email', 'Enter your email', true) + form.add(emailInput) - form.add(new Label('username', 'User name')) - var usernameInput = new Input('username', 'text', 'Enter your user name', true) - form.add(usernameInput) + form.add(new Label('username', 'User name')) + const usernameInput = new Input('username', 'text', 'Enter your user name', true) + form.add(usernameInput) - form.add(new Label('password', 'Password')) - var passwordInput = new Input('password', 'password', 'Enter your password', true) - form.add(passwordInput) + form.add(new Label('password', 'Password')) + const passwordInput = new Input('password', 'password', 'Enter your password', true) + form.add(passwordInput) - form.add(new Label('confirm-password', 'Confirm password')) - var confirmpasswordInput = new Input('confirm-password', 'password', 'Confirm your password', true) - form.add(confirmpasswordInput) + form.add(new Label('confirm-password', 'Confirm password')) + const confirmpasswordInput = new Input('confirm-password', 'password', 'Confirm your password', true) + form.add(confirmpasswordInput) - var registerButton = new Button('btn-register', 'submit', 'Register') - form.add(registerButton) + const registerButton = new Button('btn-register', 'submit', 'Register') + form.add(registerButton) - var registerAnchorText = document.createElement('p') - registerAnchorText.innerText = 'Already have an account? ' - this.container.appendChild(registerAnchorText) + const registerAnchorText = document.createElement('p') + registerAnchorText.innerText = 'Already have an account? ' + this.container.appendChild(registerAnchorText) - var loginLink = new Link('Login', '#') - registerAnchorText.appendChild(loginLink.container) + const loginLink = new Link('Login', '#') + registerAnchorText.appendChild(loginLink.container) - loginLink.addBehavior('click', function (event) { - event.preventDefault(); - this.remove() - page.add(login) - }.bind(this)) - // Save data of new user when clicking on register button - form.addBehavior('submit', function (event) { - event.preventDefault() - var name = nameInput.getValue() - var email = emailInput.getValue() - var username = usernameInput.getValue() - var password = passwordInput.getValue() - var confirmPassword = confirmpasswordInput.getValue() - - try { - registerUser(name, email, username, password, confirmPassword) - form.reset() + loginLink.addBehavior('click', event => { + event.preventDefault(); this.remove() page.add(login) - } - catch (error) { - alert(error.message) - console.error(error) - } - }.bind(this)) -} + }) + + // Save data of new user when clicking on register button + form.addBehavior('submit', event => { + event.preventDefault() + const name = nameInput.getValue() + const email = emailInput.getValue() + const username = usernameInput.getValue() + const password = passwordInput.getValue() + const confirmPassword = confirmpasswordInput.getValue() -Register.extends(Compo) \ No newline at end of file + try { + registerUser(name, email, username, password, confirmPassword) + form.reset() + this.remove() + page.add(login) + } + catch (error) { + alert(error.message) + console.error(error) + } + }) + } +} \ No newline at end of file