From 12830e8b9098bf132f5419317ddffbda92155a9a Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Fri, 8 Nov 2024 02:52:59 +0300 Subject: [PATCH 01/18] =?UTF-8?q?=D0=9F=D0=BE=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=81?= =?UTF-8?q?=D0=B2=D1=8F=D0=B7=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81=20?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=BE=D0=BC=20=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/app.js | 874 ++++++++++++------------- public/components/complex/grid/grid.js | 16 +- public/components/complex/pin/pin.hbs | 8 +- public/components/complex/pin/pin.js | 14 +- public/constants/config.js | 11 +- public/modules/network.js | 2 +- public/modules/validation.js | 9 + public/pages/main/main.js | 2 +- public/pages/signup/signup.js | 66 +- public/precompiled.js | 10 +- 10 files changed, 538 insertions(+), 474 deletions(-) diff --git a/public/app.js b/public/app.js index ceabfec..f37f502 100644 --- a/public/app.js +++ b/public/app.js @@ -115,7 +115,7 @@ export default class App { const formInputs = document.getElementsByClassName('input'); const storedValues = this.#structure.login.inputsStoredValues; if (Object.keys(storedValues).length > 0) { - formInputs[1].value = storedValues.login; + formInputs[1].value = storedValues.userNickname; formInputs[2].value = storedValues.password; } } @@ -125,443 +125,443 @@ export default class App { * Renders feed including header and pins set */ async #renderFeed() { - // const pinSet = await getMethod(BACKEND_FEED_ROUTE); - - const pinSet = [ - { - PinID: 1, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 2, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 3, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 4, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 5, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 6, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 7, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 8, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 9, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 10, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 11, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 12, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 13, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 14, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 15, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 16, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 17, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 18, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 19, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 20, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 21, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 22, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 23, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 24, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 25, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 26, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 27, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 28, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 29, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 30, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 31, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 32, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 33, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 34, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 35, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 36, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 37, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 38, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 39, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 40, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 41, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 42, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 43, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 44, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 45, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 46, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 47, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy", - BoardID: 1, - }, - { - PinID: 48, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 49, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 50, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 51, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 52, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - BoardID: 1, - }, - { - PinID: 53, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 54, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 55, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - { - PinID: 56, - AuthorName: "Mary Jane", - AuthorAvatar: './assets/imgs/avatar.jpg', - AuthorFollowersNumber: 100, - MediaUrl: "https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D", - }, - ]; + const pinSet = await getMethod(BACKEND_FEED_ROUTE); + // const pinSet = [ + // { + // PinID: 1, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 2, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 3, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 4, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 5, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 6, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 7, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 8, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 9, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 10, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 11, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 12, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 13, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 14, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 15, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 16, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 17, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 18, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 19, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 20, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 21, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 22, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 23, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 24, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 25, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 26, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 27, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 28, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 29, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 30, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 31, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 32, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 33, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 34, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 35, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 36, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 37, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 38, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 39, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 40, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 41, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 42, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 43, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 44, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 45, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 46, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 47, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + // BoardID: 1, + // }, + // { + // PinID: 48, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 49, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 50, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 51, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 52, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // BoardID: 1, + // }, + // { + // PinID: 53, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 54, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 55, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // { + // PinID: 56, + // AuthorName: 'Mary Jane', + // AuthorAvatar: './assets/imgs/avatar.jpg', + // AuthorFollowersNumber: 100, + // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', + // }, + // ]; + //console.log(pinSet) const mainPage = new MainPageComponent(this.root, pinSet); mainPage.renderTemplate(); this.#structure.mainPage = mainPage; diff --git a/public/components/complex/grid/grid.js b/public/components/complex/grid/grid.js index bc8b907..8064584 100644 --- a/public/components/complex/grid/grid.js +++ b/public/components/complex/grid/grid.js @@ -67,6 +67,7 @@ export class GridComponent extends BaseComponent { // Render each PinComponent using its template for (const pinData of this.#pins) { + pinData.media_url = pinData.media_url.replace('http://minio:9000', 'http://localhost:9000'); const newPin = new PinComponent(pinData); pinsToRender.push(newPin); }; @@ -97,9 +98,9 @@ export class GridComponent extends BaseComponent { const columnWidth = (this.parentContainerWidth - widthGutter * (columnsN + 1)) / columnsN; for (const pin of this.#pins) { - const pinContainer = document.querySelector(`.pin__content-container-${pin.PinID}`); + const pinContainer = document.querySelector(`.pin__content-container-${pin.pin_id}`); if (pinContainer) { - const pinImage = document.querySelector(`.pin__image-${pin.PinID}`); + const pinImage = document.querySelector(`.pin__image-${pin.pin_id}`); pinContainer.style.width = pinImage.style.width = `${columnWidth}px`; @@ -149,14 +150,13 @@ export class GridComponent extends BaseComponent { * @param {Object} pin - pin object containing its information including ID and media url. */ buildPinPreview(pin) { - const pinPreviewBtn = document.querySelector(`.pin__image-preview-button-${pin.PinID}`); + const pinPreviewBtn = document.querySelector(`.pin__image-preview-button-${pin.pin_id}`); const parent = document.getElementById('root'); const previewState = { - MediaUrl: pin.MediaUrl, + MediaUrl: pin.media_url, AuthorAvatarUrl: './assets/imgs/avatar.jpg', - AuthorName: pin.AuthorName, - AuthorFollowersNumber: pin.AuthorFollowersNumber, + AuthorName: pin.author_id, Boards: [ { BoardCoverUrl: './assets/imgs/michael.jpg', @@ -245,8 +245,8 @@ export class GridComponent extends BaseComponent { this.addBookmarkBtnListener(previewState); this.addSaveBtnListener(previewState.Boards); this.addMoreBtnListener(previewState.DetailsOptions); - - const pinImageElement = document.querySelector(`.pin__image-${pin.PinID}`); + + const pinImageElement = document.querySelector(`.pin__image-${pin.pin_id}`); let intWidth = parseInt(pinImageElement.style.width, 10); let intHeight = parseInt(pinImageElement.style.height, 10); diff --git a/public/components/complex/pin/pin.hbs b/public/components/complex/pin/pin.hbs index 47a4eba..5cc6554 100644 --- a/public/components/complex/pin/pin.hbs +++ b/public/components/complex/pin/pin.hbs @@ -1,12 +1,12 @@ -
+
- -
+ +
Preview
{{#unless pin.imageOnly}} -
+

{{{pin.AuthorName}}}

diff --git a/public/components/complex/pin/pin.js b/public/components/complex/pin/pin.js index 2d1d140..637ed30 100644 --- a/public/components/complex/pin/pin.js +++ b/public/components/complex/pin/pin.js @@ -8,19 +8,19 @@ import { BaseComponent } from '../../base.js'; */ export class PinComponent extends BaseComponent { #state = { - PinID: 0, - AuthorAvatar: "", - AuthorName: "", - MediaUrl: "", + pin_id: 0, + author_avatar: '', + author_name: '', + media_url: '', }; /** * Creates an instance of PinComponent. * @param {HTMLElement} parent - The parent element for rendering the pin. * @param {Object} [state=this.#state] - The initial state of the pin. - * @param {string} state.AuthorAvatar - The author avatar. - * @param {string} state.AuthorName - The author name. - * @param {string} state.MediaUrl - Url link associated with the pin. + * @param {string} state.author_avatar - The author avatar. + * @param {string} state.author_name - The author name. + * @param {string} state.media_url - Url link associated with the pin. */ constructor(state, parent) { super(parent, state); diff --git a/public/constants/config.js b/public/constants/config.js index 3248cac..ced74e8 100644 --- a/public/constants/config.js +++ b/public/constants/config.js @@ -56,10 +56,19 @@ export const signupConfig = { className: 'signup-form', text: 'Это форма регистрации', inputs: { + nickName: { + inputSize: 'input_large', + typeOfInput: 'text', + inputPlaceholder: 'Логин', + inputHelperText: true, + isDisabled: false, + valid: false, + rightIconClickable: true, + }, userName: { inputSize: 'input_large', typeOfInput: 'text', - inputPlaceholder: 'Имя пользователя', + inputPlaceholder: 'Имя', inputHelperText: true, isDisabled: false, valid: false, diff --git a/public/modules/network.js b/public/modules/network.js index 4d92616..381d1bd 100644 --- a/public/modules/network.js +++ b/public/modules/network.js @@ -53,7 +53,7 @@ export const getMethod = async (apiRoute, shouldLog) => { }).catch(() => { return undefined }); - + return response; }; diff --git a/public/modules/validation.js b/public/modules/validation.js index d883c08..1d852f5 100644 --- a/public/modules/validation.js +++ b/public/modules/validation.js @@ -97,6 +97,7 @@ export const validateInput = (input, rules) => { /** * Validates user input based on the given rules. * + * @param {boolean} [riles.isNickName=false] - If ture, validates the input as an Nickname. * @param {boolean} [rules.isEmail=false] - If true, validates the input as an email. * @param {boolean} [rules.isPassword=false] - If true, validates the input as a password (8-24 characters, must contain at least one uppercase letter and one digit). * @param {boolean} [rules.isNickname=false] - If true, validates the input as a nickname (3-20 characters, only digits, letters, and underscores allowed). @@ -104,6 +105,14 @@ export const validateInput = (input, rules) => { * @returns {{captions: string[]}} - An object indicating whether the input is valid and an error message if invalid. **/ export const getCaptionSetForRule = (rules) => { + if (rules.isNickName) { + return [ + 'Nick name должен содержать:', + '• От 3 до 20 символов.', + '• Только буквы, цифры и символы \'_\'.', + ]; + } + if (rules.isUserName) { return [ 'Имя должно содержать:', diff --git a/public/pages/main/main.js b/public/pages/main/main.js index e1e8a70..e74255c 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -166,7 +166,7 @@ export class MainPageComponent extends BaseComponent { const resp = await postMethod(BACKEND_LOGOUT_ROUTE, {}, true); if (!resp.code_status) { - document.cookie = "session_token" + '=; Max-Age=0' + document.cookie = 'session_token' + '=; Max-Age=0' this.Parent.innerHTML = ''; app.renderPage(ROUTES.main); } diff --git a/public/pages/signup/signup.js b/public/pages/signup/signup.js index a9e68bc..5a4e0df 100644 --- a/public/pages/signup/signup.js +++ b/public/pages/signup/signup.js @@ -41,6 +41,9 @@ export class SignUpComponent extends BaseComponent { this.#buttonData = buttonData; this.#buttonFooterData = buttonFooterData; + this.#inputsData.nickName.captions = getCaptionSetForRule({ + isNickName: true, + }); this.#inputsData.userName.captions = getCaptionSetForRule({ isUserName: true, }); @@ -76,9 +79,15 @@ export class SignUpComponent extends BaseComponent { input.parent = this.htmlElement; }); - const [userNameCaptionsBlock, emailCaptionsBlock, passwordCaptionsBlock] = + const [nickNameCaptionsBlock, userNameCaptionsBlock, emailCaptionsBlock, passwordCaptionsBlock] = document.getElementsByClassName('input__helper-text-list'); + for (const captionText of this.#inputsData.nickName.captions) { + const nextCaption = document.createElement('input__helper-text'); + nextCaption.textContent = captionText; + nickNameCaptionsBlock.appendChild(nextCaption); + } + for (const captionText of this.#inputsData.userName.captions) { const nextCaption = document.createElement('input__helper-text'); nextCaption.textContent = captionText; @@ -123,12 +132,14 @@ export class SignUpComponent extends BaseComponent { submitBtn.addEventListener('click', async (event) => { event.preventDefault(); - const [userNameInput, emailInput, passwordInput] = document.getElementsByClassName('input'); + const [nickNameInput, userNameInput, emailInput, passwordInput] = document.getElementsByClassName('input'); + const nickNameState = validateInput(nickNameInput.value, {isNickName: true}) const userNameState = validateInput(userNameInput.value, { isUserName: true }) const emailState = validateInput(emailInput.value, { isEmail: true }); const passwordState = validateInput(passwordInput.value, { isPassword: true }); - if (userNameState.isValid && emailState.isValid && passwordState.isValid) { + if (nickNameState.isValid && userNameState.isValid && emailState.isValid && passwordState.isValid) { const signUpData = { + nick_name: userNameInput.value, user_name: userNameInput.value, email: emailInput.value, password: passwordInput.value, @@ -147,11 +158,18 @@ export class SignUpComponent extends BaseComponent { * Adds focus/blur handlers for data inputs */ addInputFocusHandler() { - const [userNameInput, loginInput, passwordInput] = + const [nickNameInput, userNameInput, loginInput, passwordInput] = document.getElementsByClassName('input'); - const [userNameCaptionsBlock, emailCaptionsBlock, passwordCaptionsBlock] = + const [nickNameCaptionBlock, userNameCaptionsBlock, emailCaptionsBlock, passwordCaptionsBlock] = document.getElementsByClassName('input__helper-text-list'); + nickNameInput.addEventListener('focus', (event) => { + event.preventDefault(); + + if (this.#inputsErrors.nickName == undefined) { + nickNameCaptionBlock.style.display = ''; + } + }); userNameInput.addEventListener('focus', (event) => { event.preventDefault(); @@ -174,6 +192,10 @@ export class SignUpComponent extends BaseComponent { } }); + nickNameInput.addEventListener('blur', (event) => { + event.preventDefault(); + nickNameCaptionBlock.style.display = 'none'; + }); userNameInput.addEventListener('blur', (event) => { event.preventDefault(); userNameCaptionsBlock.style.display = 'none'; @@ -192,22 +214,46 @@ export class SignUpComponent extends BaseComponent { * Adds input handler to track its value changes */ addInputOnChangeHandler() { - const [userNameInput, loginInput, passwordInput, passwordRepeatInput] = + const [nickNameInput, userNameInput, loginInput, passwordInput, passwordRepeatInput] = document.getElementsByClassName('input'); - const [userNameCaptionsBlock, emailCaptionsBlock, passwordCaptionsBlock] = + const [nickNameCaptionsBlock, userNameCaptionsBlock, emailCaptionsBlock, passwordCaptionsBlock] = document.getElementsByClassName('input__helper-text-list'); const [ + nickNameErrBlock, userNameErrBlock, emailErrBlock, passwordErrBlock, passwordRepeatErrBlock, ] = document.getElementsByClassName('input__error-text-list'); + const nickNameErrTextBlock = document.createElement('input__error-text'); const userNameErrTextBlock = document.createElement('input__error-text'); const emailErrTextBlock = document.createElement('input__error-text'); const passwordErrTextBlock = document.createElement('input__error-text'); const passwordRepeatErrTextBlock = - document.createElement('input__error-text'); + document.createElement('input__error-text'); + + nickNameInput.addEventListener('input', (event) => { + event.preventDefault(); + + const nickNameState = validateInput(nickNameInput.value, { + isUserName: true, + }); + if (nickNameInput.value.length > 0 && !nickNameState.isValid) { + this.#inputsErrors.nickName = nickNameState.error; + nickNameErrTextBlock.textContent = nickNameState.error; + nickNameErrBlock.appendChild(nickNameErrTextBlock); + nickNameErrBlock.style.display = ''; + nickNameCaptionsBlock.style.display = 'none'; + } else { + this.#inputsErrors.nickName = undefined; + if (nickNameErrBlock.contains(nickNameErrTextBlock)) { + nickNameErrBlock.removeChild(nickNameErrTextBlock); + } + nickNameErrBlock.style.display = 'none'; + nickNameCaptionsBlock.style.display = ''; + } + }); userNameInput.addEventListener('input', (event) => { event.preventDefault(); @@ -323,9 +369,9 @@ export class SignUpComponent extends BaseComponent { signUpBtn.addEventListener('click', (event) => { event.preventDefault(); - const [_, login, password] = document.getElementsByClassName('input'); + const [_, email, password] = document.getElementsByClassName('input'); this.#inputsSavedValues = { - login: login.value, + login: email.value, password: password.value, }; diff --git a/public/precompiled.js b/public/precompiled.js index 3ebb21e..d475c4c 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -183,7 +183,7 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, }; return "
\r\n \r\n
\r\n

" @@ -200,13 +200,13 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, }; return "

\r\n
\r\n \r\n
\r\n \"Preview\"\r\n
\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"imageOnly") : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":1},"end":{"line":16,"column":12}}})) != null ? stack1 : "") + "
\r\n"; From 0f0c6882601640f1e25382a12377f20d1d15c1e2 Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Fri, 8 Nov 2024 20:27:48 +0300 Subject: [PATCH 02/18] =?UTF-8?q?=D0=9C=D0=B8=D0=BD=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/app.js | 440 +------------------------ public/components/complex/grid/grid.js | 5 +- public/components/complex/pin/pin.hbs | 6 +- public/constants/config.js | 4 +- public/modules/network.js | 1 - public/modules/validation.js | 25 +- public/pages/signup/signup.js | 12 +- public/precompiled.js | 6 +- 8 files changed, 44 insertions(+), 455 deletions(-) diff --git a/public/app.js b/public/app.js index f37f502..6d907bb 100644 --- a/public/app.js +++ b/public/app.js @@ -114,9 +114,10 @@ export default class App { if (this.#structure.login) { const formInputs = document.getElementsByClassName('input'); const storedValues = this.#structure.login.inputsStoredValues; + if (Object.keys(storedValues).length > 0) { - formInputs[1].value = storedValues.userNickname; - formInputs[2].value = storedValues.password; + formInputs[2].value = storedValues.login; + formInputs[3].value = storedValues.password; } } } @@ -127,441 +128,6 @@ export default class App { async #renderFeed() { const pinSet = await getMethod(BACKEND_FEED_ROUTE); - // const pinSet = [ - // { - // PinID: 1, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 2, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 3, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 4, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 5, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 6, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 7, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 8, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 9, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 10, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 11, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 12, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 13, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 14, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 15, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 16, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 17, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 18, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 19, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 20, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 21, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 22, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 23, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 24, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 25, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 26, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 27, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 28, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 29, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 30, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 31, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 32, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 33, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 34, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 35, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 36, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 37, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 38, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 39, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 40, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 41, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 42, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 43, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 44, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 45, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 46, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 47, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - // BoardID: 1, - // }, - // { - // PinID: 48, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 49, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 50, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 51, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 52, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // BoardID: 1, - // }, - // { - // PinID: 53, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 54, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 55, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // { - // PinID: 56, - // AuthorName: 'Mary Jane', - // AuthorAvatar: './assets/imgs/avatar.jpg', - // AuthorFollowersNumber: 100, - // MediaUrl: 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - // }, - // ]; - //console.log(pinSet) const mainPage = new MainPageComponent(this.root, pinSet); mainPage.renderTemplate(); this.#structure.mainPage = mainPage; diff --git a/public/components/complex/grid/grid.js b/public/components/complex/grid/grid.js index 8064584..4e6b5aa 100644 --- a/public/components/complex/grid/grid.js +++ b/public/components/complex/grid/grid.js @@ -155,8 +155,9 @@ export class GridComponent extends BaseComponent { const previewState = { MediaUrl: pin.media_url, - AuthorAvatarUrl: './assets/imgs/avatar.jpg', - AuthorName: pin.author_id, + AuthorAvatarUrl: pin.author_info.avatar_url, + AuthorName: pin.author_info.nick_name, + AuthorFollowersNumber: pin.author_info.followings_count, Boards: [ { BoardCoverUrl: './assets/imgs/michael.jpg', diff --git a/public/components/complex/pin/pin.hbs b/public/components/complex/pin/pin.hbs index 5cc6554..bc059f3 100644 --- a/public/components/complex/pin/pin.hbs +++ b/public/components/complex/pin/pin.hbs @@ -7,10 +7,10 @@
{{#unless pin.imageOnly}}
- +
-

{{{pin.AuthorName}}}

-

{{{pin.AuthorFollowersNumber}}} Followers

+

{{{pin.author_info.nick_name}}}

+

{{{pin.author_info.followings_count}}} Followers

{{/unless}} diff --git a/public/constants/config.js b/public/constants/config.js index ced74e8..cfd304f 100644 --- a/public/constants/config.js +++ b/public/constants/config.js @@ -60,7 +60,7 @@ export const signupConfig = { inputSize: 'input_large', typeOfInput: 'text', inputPlaceholder: 'Логин', - inputHelperText: true, + inputHelperText: false, isDisabled: false, valid: false, rightIconClickable: true, @@ -87,6 +87,7 @@ export const signupConfig = { inputSize: 'input_large', typeOfInput: 'password', inputPlaceholder: 'Пароль', + autocomplete: 'current password', inputHelperText: true, isDisabled: false, valid: false, @@ -96,6 +97,7 @@ export const signupConfig = { inputSize: 'input_large', typeOfInput: 'password', inputPlaceholder: 'Повторите пароль', + autocomplete: 'current password', inputHelperText: true, isDisabled: false, valid: false, diff --git a/public/modules/network.js b/public/modules/network.js index 381d1bd..db27e12 100644 --- a/public/modules/network.js +++ b/public/modules/network.js @@ -53,7 +53,6 @@ export const getMethod = async (apiRoute, shouldLog) => { }).catch(() => { return undefined }); - return response; }; diff --git a/public/modules/validation.js b/public/modules/validation.js index 1d852f5..35cc6c5 100644 --- a/public/modules/validation.js +++ b/public/modules/validation.js @@ -28,17 +28,38 @@ const EMAIL_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; * console.log(result.isValid); // true * * @example - * // Example 3: Validating a nickname - * const result = validateInput('nickname_123', { isNickname: true }); + * // Example 3: Validating a login + * const result = validateInput('login_123', { isNickname: true }); * console.log(result.isValid); // true * * @example * // Example 4: Comparing two strings * const result = validateInput('password123', { compareWith: 'password123' }); * console.log(result.isValid); // true + * + * @example + * // Example 5: Validating an email + * const result = validateInput('example@mail.com', { isEmail: true }); + * console.log(result.isValid); // true */ export const validateInput = (input, rules) => { // Nickname validation (3-20 characters, only digits, letters, and underscore) + if (rules.isNickName) { + if (input.length < 3 || input.length > 20) { + return { + isValid: false, + error: 'Имя должно содержать от 3 до 20 символов.', + }; + } + if (!/^[A-Za-zА-Яа-я0-9_]+( )*[A-Za-zА-Яа-я0-9_]*$/.test(input)) { + return { + isValid: false, + error: 'Имя может состоять только из букв, цифр и символов \'_\'.', + }; + } + } + + // Login validation (3-20 characters, only digits, letters, and underscore) if (rules.isUserName) { if (input.length < 3 || input.length > 20) { return { diff --git a/public/pages/signup/signup.js b/public/pages/signup/signup.js index 5a4e0df..c84c2f9 100644 --- a/public/pages/signup/signup.js +++ b/public/pages/signup/signup.js @@ -236,12 +236,12 @@ export class SignUpComponent extends BaseComponent { nickNameInput.addEventListener('input', (event) => { event.preventDefault(); - const nickNameState = validateInput(nickNameInput.value, { - isUserName: true, + const inputState = validateInput(nickNameInput.value, { + isNickName: true, }); - if (nickNameInput.value.length > 0 && !nickNameState.isValid) { - this.#inputsErrors.nickName = nickNameState.error; - nickNameErrTextBlock.textContent = nickNameState.error; + if (nickNameInput.value.length > 0 && !inputState.isValid) { + this.#inputsErrors.nickName = inputState.error; + nickNameErrTextBlock.textContent = inputState.error; nickNameErrBlock.appendChild(nickNameErrTextBlock); nickNameErrBlock.style.display = ''; nickNameCaptionsBlock.style.display = 'none'; @@ -369,7 +369,7 @@ export class SignUpComponent extends BaseComponent { signUpBtn.addEventListener('click', (event) => { event.preventDefault(); - const [_, email, password] = document.getElementsByClassName('input'); + const [, email, password] = document.getElementsByClassName('input'); this.#inputsSavedValues = { login: email.value, password: password.value, diff --git a/public/precompiled.js b/public/precompiled.js index d475c4c..51275ee 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -185,11 +185,11 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\r\n \r\n
\r\n

" - + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") + + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") + "

\r\n

" - + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") + + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") + " Followers

\r\n
\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { From 3a143d01fdc236043a2dd8239b4a0cecbfe4586d Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Fri, 8 Nov 2024 21:31:09 +0300 Subject: [PATCH 03/18] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D1=81=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/components/complex/grid/grid.js | 75 ++------------------------ 1 file changed, 5 insertions(+), 70 deletions(-) diff --git a/public/components/complex/grid/grid.js b/public/components/complex/grid/grid.js index 4e6b5aa..1d56f07 100644 --- a/public/components/complex/grid/grid.js +++ b/public/components/complex/grid/grid.js @@ -158,76 +158,11 @@ export class GridComponent extends BaseComponent { AuthorAvatarUrl: pin.author_info.avatar_url, AuthorName: pin.author_info.nick_name, AuthorFollowersNumber: pin.author_info.followings_count, - Boards: [ - { - BoardCoverUrl: './assets/imgs/michael.jpg', - BoardName: 'SingersSingersSingers', - Private: true, - }, - { - BoardCoverUrl: './assets/imgs/recipe.jpg', - BoardName: 'Recipes', - Private: true, - }, - { - BoardCoverUrl: './assets/imgs/art.jpg', - BoardName: 'Work-of-art', - Private: false, - }, - { - BoardCoverUrl: './assets/imgs/michael.jpg', - BoardName: 'Singers 2Singers 2Singers 2', - Private: false, - }, - { - BoardCoverUrl: './assets/imgs/recipe.jpg', - BoardName: 'Recipes 2', - Private: true, - }, - { - BoardCoverUrl: './assets/imgs/art.jpg', - BoardName: 'Work-of-art 2', - Private: true, - }, - { - BoardCoverUrl: './assets/imgs/michael.jpg', - BoardName: 'Singers 3', - Private: false, - }, - { - BoardCoverUrl: './assets/imgs/recipe.jpg', - BoardName: 'Recipes 3', - Private: true, - }, - { - BoardCoverUrl: './assets/imgs/art.jpg', - BoardName: 'Work-of-art 3', - Private: false, - }, - ], - DetailsOptions: [ - { - ID: 1, - Text: 'Открыть', - Download: false, - }, - { - ID: 2, - Text: 'Скачать', - Download: true, - FilePath: pin.MediaUrl, - }, - { - ID: 3, - Text: 'Не интересно', - Download: false, - }, - { - ID: 4, - Text: 'Пожаловаться', - Download: false, - }, - ], + Boards: pin.available_boards.map(board => ({ + BoardCoverUrl: board.board_cover || './default/cover.jpg', + BoardName: board.board_name, + Private: !board.public + })), Bookmarked: false, BookmarksNumber: 390, ViewsNumber: 10_000_000, From 757deb3f40cc215a6062f00c2b637ae5c2cb1320 Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Sat, 9 Nov 2024 00:12:10 +0300 Subject: [PATCH 04/18] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D1=83=D1=8E=20=D0=B2=D0=B5=D1=82=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/app.js | 439 ------------------------- public/components/complex/grid/grid.js | 33 +- public/pages/editPin/editPin.js | 17 +- public/pages/main/main.js | 4 + public/precompiled.js | 298 ++++++++--------- 5 files changed, 181 insertions(+), 610 deletions(-) diff --git a/public/app.js b/public/app.js index 3414f42..422dd56 100644 --- a/public/app.js +++ b/public/app.js @@ -190,446 +190,7 @@ export default class App { * Renders feed including header and pins set */ async #renderFeed() { -<<<<<<< HEAD const pinSet = await getMethod(BACKEND_FEED_ROUTE); -======= - // const pinSet = await getMethod(BACKEND_FEED_ROUTE); - - const pinSet = [ - { - PinID: 1, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 2, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 3, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 4, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 5, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 6, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 7, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 8, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 9, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 10, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 11, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 12, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 13, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 14, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 15, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 16, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 17, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 18, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 19, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 20, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 21, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 22, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 23, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 24, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 25, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 26, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 27, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 28, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 29, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 30, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 31, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 32, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 33, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 34, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 35, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 36, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 37, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 38, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 39, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 40, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 41, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 42, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 43, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1655635949384-f737c5133dfe?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 44, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1596348158371-d3a25ec4dcf4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NXx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 45, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 46, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1593376893114-1aed528d80cf?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 47, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1680474569854-81216b34417a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }, - { - PinID: 48, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1668395093559-338fa935d929?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MTR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 49, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1530388684420-55a62e95ed82?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MjR8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 50, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1587383378486-83d683d9d02d?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDJ8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 51, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1518276780006-c85b06fa3c11?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NDB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 52, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1578259819688-2bf7b20a351a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTN8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - BoardID: 1, - }, - { - PinID: 53, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1614029655965-2464911905a4?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NTV8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 54, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1603745871918-d756fb3c2c5e?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjB8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 55, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1700075489227-47f36fb2709b?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NjF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - { - PinID: 56, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1613591876822-846e82526ee7?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8ODF8fG5ldXJhbCUyMG5ldHdvcmtzfGVufDB8MXwwfHx8Mg%3D%3D', - }, - ]; ->>>>>>> origin/dev-10 const mainPage = new MainPageComponent(this.root, pinSet); mainPage.renderTemplate(); diff --git a/public/components/complex/grid/grid.js b/public/components/complex/grid/grid.js index 0ba39d8..e47eb70 100644 --- a/public/components/complex/grid/grid.js +++ b/public/components/complex/grid/grid.js @@ -66,17 +66,32 @@ export class GridComponent extends BaseComponent { let pinsToRender = []; // Render each PinComponent using its template - for (const pinData of this.#pins) { - pinData.media_url = pinData.media_url.replace('http://minio:9000', 'http://localhost:9000'); - const newPin = new PinComponent(pinData); - pinsToRender.push(newPin); - }; + if (this.#pins && this.#pins.length > 0) { + for (const pinData of this.#pins) { + pinData.media_url = pinData.media_url.replace('http://minio:9000', 'http://localhost:9000'); + const newPin = new PinComponent(pinData); + pinsToRender.push(newPin); + } + } else { + // Вывод сообщения или пустого состояния + const noPinsMessage = document.createElement('div'); + noPinsMessage.textContent = 'Нет доступных пинов.'; + pinsToRender.push(noPinsMessage); + } + + const renderedTemplate = template({ - pins: pinsToRender.map((pin) => pin.renderTemplate()) + pins: pinsToRender.map((pin) => { + if (typeof pin.renderTemplate === 'function') { + return pin.renderTemplate(); + } + console.warn('Pin does not have renderTemplate function:', pin); + return null; // Или можно вернуть шаблон пустого пина, если требуется + }).filter(Boolean) // Убирает любые `null` из массива }); + - return renderedTemplate } /** @@ -97,6 +112,10 @@ export class GridComponent extends BaseComponent { const columnWidth = (this.parentContainerWidth - widthGutter * (columnsN + 1)) / columnsN; + if (!Array.isArray(this.#pins)) { + this.#pins = []; + } + for (const pin of this.#pins) { const pinContainer = document.querySelector(`.pin__content-container-${pin.pin_id}`); if (pinContainer) { diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index 6bd9acb..4143eff 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -59,7 +59,6 @@ export default class EditPinComponent extends BaseComponent { PinBoard: this.#pin.PinBoard, Image: this.#pin.mediaUrl, MediaUrl: this.#pin.mediaUrl, - BoardsList: boardsList.renderTemplate(), }); this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); @@ -115,21 +114,33 @@ export default class EditPinComponent extends BaseComponent { '.editpin__description input' ).value; const ImageUrl = this.#pin.mediaUrl; - const BoardID = 1; const requestBody = JSON.stringify({ author_id: 1, - board_id: BoardID, description: DescriptionValue, title: TitleValue, media_url: ImageUrl, }); + console.log(requestBody); + // await fetch('http://localhost:8080/create-pin', { + // method: 'POST', + // body: requestBody, + // }); + await fetch('http://localhost:8080/create-pin', { method: 'POST', + mode: 'cors', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, body: requestBody, }); + + console.log(requestBody) + console.log('fetch done successfully'); } } diff --git a/public/pages/main/main.js b/public/pages/main/main.js index 67ed775..51dd89b 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -50,6 +50,10 @@ export class MainPageComponent extends BaseComponent { this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); + if (!Array.isArray(this.#pins)) { + this.#pins = []; + } + for (const pin of this.#pins) { grid.buildPinPreview(pin); } diff --git a/public/precompiled.js b/public/precompiled.js index 529683b..2ea8110 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -19,23 +19,23 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return "
\n \r\n \n
\n \r\n
\r\n \"cover\"\n
\n
\r\n \n" + + "\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Private") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":16},"end":{"line":12,"column":23}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"private\"\n"; + return " \"private\"\r\n"; },"5":function(container,depth0,helpers,partials,data) { - return "

Здесь будут отображены доски

\n"; + return "

Здесь будут отображены доски

\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -44,9 +44,9 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return undefined }; - return "
\n" + return "
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(5, data, 0),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":17,"column":11}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['button.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "disabled"; @@ -92,13 +92,13 @@ templates['button.hbs'] = template({"1":function(container,depth0,helpers,partia + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"active") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":77},"end":{"line":1,"column":104}}})) != null ? stack1 : "") + "\" " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"disabled") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":106},"end":{"line":2,"column":26}}})) != null ? stack1 : "") - + ">\n " + + ">\r\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":3,"column":65}}})) != null ? stack1 : "") - + "\n " + + "\r\n " + alias4(((helper = (helper = lookupProperty(helpers,"label") || (depth0 != null ? lookupProperty(depth0,"label") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data,"loc":{"start":{"line":4,"column":1},"end":{"line":4,"column":10}}}) : helper))) - + "\n " + + "\r\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconRight") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":68}}})) != null ? stack1 : "") - + "\n\n"; + + "\r\n\r\n"; },"useData":true}); templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -110,18 +110,18 @@ templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":functi return "
\n \r\n \n
\n"; + + "\">\r\n
\r\n"; },"useData":true}); templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -130,9 +130,9 @@ templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials return undefined }; - return "
\n" + return "
\r\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"pins") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":4,"column":13}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['header.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -142,11 +142,11 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"createButton") : stack1), depth0)) != null ? stack1 : "") - + "\n
\n
\n \r\n
\r\n \n
\n"; + + "\">\r\n
\r\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -155,9 +155,9 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return " \r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -166,13 +166,13 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n
\n \r\n
\r\n \"Pinset\"\n
\n\n
\n " + + "\" alt=\"Pinset\" class=\"header__icon\" />\r\n
\r\n\r\n
\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"searchInput") : stack1), depth0)) != null ? stack1 : "") - + "\n
\n\n" + + "\r\n
\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"isAuthorized") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":10,"column":1},"end":{"line":21,"column":8}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -183,7 +183,6 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, }; return "
\r\n \r\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") + " Followers

\r\n
\r\n
\r\n"; -======= - + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"PinID") : stack1), depth0)) - + "\">\n \n
\n

" - + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") - + "

\n

" - + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\n
\n
\n"; ->>>>>>> origin/dev-10 },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -211,7 +200,6 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, }; return "
\r\n
\r\n \r\n
\r\n \"Preview\"\r\n
\r\n
\r\n" -======= - + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"PinID") : stack1), depth0)) - + "\">\n
\n \n
\n \"Preview\"\n
\n
\n" ->>>>>>> origin/dev-10 + ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"imageOnly") : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":1},"end":{"line":16,"column":12}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['preview.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return " \"bookmark\n"; + return " \"bookmark\r\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"bookmark\n"; + return " \"bookmark\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -245,21 +223,21 @@ templates['preview.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n
\n
\n \r\n
\r\n
\r\n \n
\n

" + + "\">\r\n

\r\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") - + "

\n

" + + "

\r\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\n
\n
\n\n
\n
\n

Сохранить

\n \"expand\"\n
\n
\n
\n\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Сохранить

\r\n \"expand\"\r\n
\r\n
\r\n
\r\n\r\n \"Preview\"\n\n
\n
\n \"more\"\n
\n" + + "\" alt=\"Preview\">\r\n\r\n
\r\n
\r\n \"more\"\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"Bookmarked") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":15}}})) != null ? stack1 : "") - + " \"comment\"\n \"share\"\n
\n\n
\n
\n

" + + " \"comment\"\r\n \"share\"\r\n

\r\n\r\n
\r\n
\r\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"ViewsNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\n \"bookmark\"\n
\n
\n

" + + "

\r\n \"bookmark\"\r\n
\r\n
\r\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"BookmarksNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\n \"bookmark\"\n
\n
\n
\n"; + + "

\r\n \"bookmark\"\r\n
\r\n
\r\n
\r\n"; },"useData":true}); templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -269,11 +247,11 @@ templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\n
\n " + return "
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":3,"column":25}}}) : helper))) != null ? stack1 : "") - + "\n
\n " + + "\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"boardsList") || (depth0 != null ? lookupProperty(depth0,"boardsList") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"boardsList","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n
\n \n \n
\n
\n"; + + "\r\n
\r\n \r\n \r\n
\r\n
\r\n"; },"useData":true}); templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -289,7 +267,7 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Download") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":56},"end":{"line":4,"column":135}}})) != null ? stack1 : "") + ">" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"Text") : depth0), depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"2":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -309,12 +287,12 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, return undefined }; - return "
\n
\n" + return "
\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"options") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":5,"column":17}}})) != null ? stack1 : "") - + "
\n
\n"; + + "
\r\n
\r\n"; },"useData":true}); templates['drop-down-menu.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "\n"; + return "\r\n"; },"useData":true}); templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -326,9 +304,9 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return " \n \r\n \"icon\"\n \n"; + + "\" alt=\"icon\" />\r\n \r\n"; },"3":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -394,23 +372,23 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return undefined }; - return "
\n
\r\n"; },"useData":true}); templates['input.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "input-error"; @@ -424,7 +402,7 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return " \n"; + + "\r\n"; },"5":function(container,depth0,helpers,partials,data) { var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -433,9 +411,9 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \n " + return " \r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageLeft") || (depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageLeft","hash":{},"data":data,"loc":{"start":{"line":10,"column":3},"end":{"line":10,"column":23}}}) : helper))) != null ? stack1 : "") - + "\n \n \n"; + + "\r\n \r\n \r\n"; },"7":function(container,depth0,helpers,partials,data) { return " input__text-padding-left "; },"9":function(container,depth0,helpers,partials,data) { @@ -450,11 +428,11 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \n " + return " \r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageRight") || (depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageRight","hash":{},"data":data,"loc":{"start":{"line":21,"column":3},"end":{"line":21,"column":24}}}) : helper))) != null ? stack1 : "") - + "\n \n \n"; + + "\r\n \r\n \r\n"; },"15":function(container,depth0,helpers,partials,data) { - return "
\n
\n"; + return "
\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -467,27 +445,27 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial + alias4(((helper = (helper = lookupProperty(helpers,"inputSize") || (depth0 != null ? lookupProperty(depth0,"inputSize") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"inputSize","hash":{},"data":data,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":41}}}) : helper))) + " " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Error") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":42},"end":{"line":1,"column":73}}})) != null ? stack1 : "") - + "\">\n\n" + + "\">\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputLabelText") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":5,"column":8}}})) != null ? stack1 : "") - + "\n
\n" + + "\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":2},"end":{"line":13,"column":9}}})) != null ? stack1 : "") - + "\n \n\n" + + " />\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":2},"end":{"line":24,"column":9}}})) != null ? stack1 : "") - + "
\n\n" + + "
\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputHelperText") : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":27,"column":1},"end":{"line":30,"column":8}}})) != null ? stack1 : "") - + "\n
\n"; + + "\r\n\r\n"; },"useData":true}); templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -497,9 +475,9 @@ templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":funct return undefined }; - return "
\n \"search\"\n \r\n \"search\"\r\n \n \"clear\"\n
\n"; + + "\" name=\"search-input\">\r\n \"clear\"\r\n\r\n"; },"useData":true}); templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -509,15 +487,15 @@ templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\n
\n \n
\n
\n
\n
\n " + return "
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"saveButton") || (depth0 != null ? lookupProperty(depth0,"saveButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"saveButton","hash":{},"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}}}) : helper))) != null ? stack1 : "") - + "\n " + + "\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"rewardButton") || (depth0 != null ? lookupProperty(depth0,"rewardButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"rewardButton","hash":{},"data":data,"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":34}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n \"bookmark\n \"comment\"\n \"share\"\n
\n
\n
\n
\n \n
\n

" + + "\r\n

\r\n
\r\n \"bookmark\r\n \"comment\"\r\n \"share\"\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") - + "

\n

" + + "

\r\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\n
\n
\n
\n 1 месяц назад\n
\n
\n Россия, Москва\n
\n
\n
\n Готовы к будущему ? Красочный киберпанковский головной убор\n
\n
\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\n
\n \n
\n 11 комментариев\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n
\n
\n"; + + " Followers

\r\n
\r\n
\r\n
\r\n 1 месяц назад\r\n
\r\n
\r\n Россия, Москва\r\n
\r\n
\r\n
\r\n Готовы к будущему ? Красочный киберпанковский головной убор\r\n
\r\n
\r\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\r\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\r\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\r\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \r\n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\r\n
\r\n
\r\n Ссылка на пин\r\n
\r\n
\r\n 11 комментариев\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"; },"useData":true}); templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -529,9 +507,9 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return " \"Image\"\n"; + + "\" alt=\"Image\">\r\n"; },"3":function(container,depth0,helpers,partials,data) { - return "
\n \"checkphoto\"\n
\n
\n выберите файл или перетащите его сюда\n
\n"; + return "
\r\n \"checkphoto\"\r\n
\r\n
\r\n выберите файл или перетащите его сюда\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -540,24 +518,22 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "\n
\n
\n
\n" + return "\r\n
\r\n
\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Image") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":14,"column":19}}})) != null ? stack1 : "") - + "
\n \n
\n
\n
\n " + + "
\r\n \r\n
\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"TitleInput") || (depth0 != null ? lookupProperty(depth0,"TitleInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"TitleInput","hash":{},"data":data,"loc":{"start":{"line":20,"column":12},"end":{"line":20,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n " + + "\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"DescriptionInput") || (depth0 != null ? lookupProperty(depth0,"DescriptionInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"DescriptionInput","hash":{},"data":data,"loc":{"start":{"line":23,"column":12},"end":{"line":23,"column":34}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
Выберите доску
\n " - + ((stack1 = ((helper = (helper = lookupProperty(helpers,"BoardsList") || (depth0 != null ? lookupProperty(depth0,"BoardsList") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"BoardsList","hash":{},"data":data,"loc":{"start":{"line":27,"column":12},"end":{"line":27,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n " + + "\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"PublishButton") || (depth0 != null ? lookupProperty(depth0,"PublishButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"PublishButton","hash":{},"data":data,"loc":{"start":{"line":30,"column":12},"end":{"line":30,"column":31}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n\n\n\n\n\n\n\n\n"; + + "\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"; },"useData":true}); templates['login.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -566,15 +542,15 @@ templates['login.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return "
\n Главная\n
\n \n
\n
\r\n Главная\r\n
\r\n \r\n
\r\n \n" + + "\">\r\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n \n
\n Нет аккаунта? " + + "\r\n \r\n
\r\n Нет аккаунта? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":36},"end":{"line":18,"column":60}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n
\n"; + + "\r\n
\r\n
\r\n
\r\n\r\n"; },"useData":true}); templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -584,11 +560,11 @@ templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(cont return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\n " + + "\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"grid") || (depth0 != null ? lookupProperty(depth0,"grid") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"grid","hash":{},"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":14}}}) : helper))) != null ? stack1 : "") - + "\n
\n"; + + "\r\n
\r\n"; },"useData":true}); templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -607,23 +583,23 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\n \r\n \""\n \"Details\"\n
\r\n \"Details\"\r\n
\n
\n

" + + "\">\r\n

\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"title") : depth0), depth0)) != null ? stack1 : "") - + "

\n" + + "

\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depths[1] != null ? lookupProperty(depths[1],"profile") : depths[1])) != null ? lookupProperty(stack1,"currentUser") : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":24},"end":{"line":14,"column":31}}})) != null ? stack1 : "") - + "
\n
\n
\n
\n

" + + "

\r\n
\r\n
\r\n
\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"bookmarkedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\n \"Bookmark\"\n
\n
\n

" + + "

\r\n \"Bookmark\"\r\n
\r\n
\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"rewardedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\n \"Pinset\"\n
\n
\n
\n

" + + "

\r\n \"Pinset\"\r\n
\r\n
\r\n
\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"lastModifyTime") : depth0), depth0)) != null ? stack1 : "") - + "

\n
\n
\n
\n
\n"; + + "

\r\n
\r\n
\r\n
\r\n \r\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -634,9 +610,9 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"private") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":28},"end":{"line":13,"column":35}}})) != null ? stack1 : ""); },"4":function(container,depth0,helpers,partials,data) { - return " \"Private\"\n"; + return " \"Private\"\r\n"; },"6":function(container,depth0,helpers,partials,data) { - return "

По вашему запросу ничего не найдено

\n"; + return "

По вашему запросу ничего не найдено

\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -645,12 +621,12 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\n" + return "
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.program(6, data, 0, blockParams, depths),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":36,"column":11}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true,"useDepths":true}); templates['profile.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return "
\n \"Settings\"\n
\n"; + return "
\r\n \"Settings\"\r\n
\r\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -659,21 +635,21 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"chatButton") : stack1), depth0)) != null ? stack1 : "") - + "\n " + + "\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"subscribeButton") : stack1), depth0)) != null ? stack1 : "") - + "\n
\n"; + + "\r\n
\r\n"; },"5":function(container,depth0,helpers,partials,data) { - return " \"VK\"\n"; + return " \"VK\"\r\n"; },"7":function(container,depth0,helpers,partials,data) { - return " \"Telegram\"\n"; + return " \"Telegram\"\r\n"; },"9":function(container,depth0,helpers,partials,data) { - return " \"Github\"\n"; + return " \"Github\"\r\n"; },"11":function(container,depth0,helpers,partials,data) { - return " \"Pinterest\"\n"; + return " \"Pinterest\"\r\n"; },"13":function(container,depth0,helpers,partials,data) { - return "
\n \n Pinset\n \n \"Navigate\"\n \n Мой профиль\n \n
\n
\n

Мои доски

\n \"Create\"\n
\n"; + return "
\r\n \r\n Pinset\r\n \r\n \"Navigate\"\r\n \r\n Мой профиль\r\n \r\n
\r\n
\r\n

Мои доски

\r\n \"Create\"\r\n
\r\n"; },"15":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -682,9 +658,9 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n \n Pinset\n \n \"Navigate\"\n \n @" + return " \n
\n

Доски пользователя

\n
\n"; + + "\r\n \r\n
\r\n
\r\n

Доски пользователя

\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, alias5=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -693,49 +669,49 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\n\n
\n \n"; + + "\r\n
\r\n
\r\n\r\n
\r\n"; },"useData":true}); templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -744,17 +720,17 @@ templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n Главная\n
\n \n
\n
\r\n Главная\r\n
\r\n \r\n
\r\n \n" + + "\">\r\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n \n
\n Уже зарегистрированы? " + + "\r\n \r\n
\r\n Уже зарегистрированы? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":44},"end":{"line":18,"column":68}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n
\n"; + + "\r\n
\r\n
\r\n
\r\n\r\n"; },"useData":true}); templates['unknown.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "
\n Главная\n

404 страница не найдена

\n
\n"; + return "
\r\n Главная\r\n

404 страница не найдена

\r\n
\r\n"; },"useData":true}); })(); \ No newline at end of file From 8e316a2dc8c527c5ef8e4ed294ee39121595ceee Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Sat, 9 Nov 2024 01:03:54 +0300 Subject: [PATCH 05/18] =?UTF-8?q?=D0=9E=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20re?= =?UTF-8?q?nder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/components/complex/grid/grid.js | 56 +++++++++++-------- public/components/complex/preview/preview.hbs | 8 +-- public/pages/main/main.js | 1 + public/precompiled.js | 8 +-- 4 files changed, 42 insertions(+), 31 deletions(-) diff --git a/public/components/complex/grid/grid.js b/public/components/complex/grid/grid.js index e47eb70..103166b 100644 --- a/public/components/complex/grid/grid.js +++ b/public/components/complex/grid/grid.js @@ -169,18 +169,20 @@ export class GridComponent extends BaseComponent { * @param {Object} pin - pin object containing its information including ID and media url. */ buildPinPreview(pin) { + console.log(`.pin__image-preview-button-${pin.pin_id}`); const pinPreviewBtn = document.querySelector(`.pin__image-preview-button-${pin.pin_id}`); - const parent = document.getElementById('root'); + console.log(typeof(pinPreviewBtn)); + const parent = document.getElementById('root'); const previewState = { MediaUrl: pin.media_url, - AuthorAvatarUrl: pin.author_info.avatar_url, + AuthorAvatarUrl: pin.author_info.avatar_url || './default/avatar.jpg', AuthorName: pin.author_info.nick_name, AuthorFollowersNumber: pin.author_info.followings_count, - Boards: pin.available_boards.map(board => ({ + Boards: (pin.available_boards || []).map(board => ({ BoardCoverUrl: board.board_cover || './default/cover.jpg', - BoardName: board.board_name, - Private: !board.public + BoardName: board.board_name || '', + Private: !board.public || 'false' })), Bookmarked: false, BookmarksNumber: 390, @@ -189,37 +191,45 @@ export class GridComponent extends BaseComponent { pinPreviewBtn.addEventListener('click', (event) => { event.preventDefault(); - // create expanded pin version const preview = new Preview(parent, previewState); const previewRendered = preview.renderTemplate(); - + parent.insertAdjacentHTML('beforeend', previewRendered); - + // Adding buttons listeners this.addBookmarkBtnListener(previewState); this.addSaveBtnListener(previewState.Boards); this.addMoreBtnListener(previewState.DetailsOptions); - + const pinImageElement = document.querySelector(`.pin__image-${pin.pin_id}`); - - let intWidth = parseInt(pinImageElement.style.width, 10); - let intHeight = parseInt(pinImageElement.style.height, 10); - - const previewContainer = document.querySelector('.preview__content-container'); - const previewTopSide = document.querySelector('.preview__stats-bookmarks-container'); - const previewBottomSide = document.querySelector('.preview__author-container'); - const previewRightSide = document.querySelector('.preview__side-menu-container'); - - previewContainer.style.width = `${intWidth * PREVIEW_IMG_X_FACTOR + previewRightSide.clientWidth}px`; - previewContainer.style.height = `${intHeight * PREVIEW_IMG_X_FACTOR + previewTopSide.clientHeight + previewBottomSide.clientHeight}px`; - previewContainer.style.marginTop = '3%'; - + if (pinImageElement) { + let intWidth = parseInt(pinImageElement.style.width, 10); + let intHeight = parseInt(pinImageElement.style.height, 10); + + const previewContainer = document.querySelector('.preview__content-container'); + const previewTopSide = document.querySelector('.preview__stats-bookmarks-container'); + const previewBottomSide = document.querySelector('.preview__author-container'); + const previewRightSide = document.querySelector('.preview__side-menu-container'); + + // Проверка на null перед использованием элементов + if (previewContainer && previewTopSide && previewBottomSide && previewRightSide) { + previewContainer.style.width = `${intWidth * PREVIEW_IMG_X_FACTOR + previewRightSide.clientWidth}px`; + previewContainer.style.height = `${intHeight * PREVIEW_IMG_X_FACTOR + previewTopSide.clientHeight + previewBottomSide.clientHeight}px`; + previewContainer.style.marginTop = '3%'; + } else { + console.error('One or more preview container elements are missing'); + } + } else { + console.error('Pin image element not found'); + } + // Create dark transparent background and add event listeners this.createBackgroundListeners(); - + this.#boardsToSaveTo = []; }); + } /** diff --git a/public/components/complex/preview/preview.hbs b/public/components/complex/preview/preview.hbs index b11e333..f1d4420 100644 --- a/public/components/complex/preview/preview.hbs +++ b/public/components/complex/preview/preview.hbs @@ -1,10 +1,10 @@
- +
-

{{{preview.AuthorName}}}

-

{{{preview.AuthorFollowersNumber}}} Followers

+

{{{preview.author_info.nick_name}}}

+

{{{preview.author_info.followings_count}}} Followers

@@ -16,7 +16,7 @@
- Preview + Preview
diff --git a/public/pages/main/main.js b/public/pages/main/main.js index 51dd89b..94be664 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -55,6 +55,7 @@ export class MainPageComponent extends BaseComponent { } for (const pin of this.#pins) { + console.log(pin) grid.buildPinPreview(pin); } diff --git a/public/precompiled.js b/public/precompiled.js index 2ea8110..cc3a755 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -224,13 +224,13 @@ templates['preview.hbs'] = template({"1":function(container,depth0,helpers,parti }; return "
\r\n
\r\n
\r\n \r\n
\r\n

" - + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") + + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") + "

\r\n

" - + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") + + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") + " Followers

\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Сохранить

\r\n \"expand\"\r\n
\r\n
\r\n
\r\n\r\n \"Preview\"\r\n\r\n
\r\n
\r\n \"more\"\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"Bookmarked") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":15}}})) != null ? stack1 : "") + " \"comment\"\r\n \"share\"\r\n
\r\n\r\n
\r\n
\r\n

" From 050657b3f8a6274c4bb6789164240be93febbb03 Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sat, 9 Nov 2024 02:37:34 +0300 Subject: [PATCH 06/18] fixed error --- public/components/complex/grid/grid.js | 1327 +++++++++++++----------- public/components/complex/pin/pin.js | 62 +- public/pages/editPin/editPin.js | 5 +- public/pages/main/main.js | 359 ++++--- public/precompiled.js | 288 ++--- 5 files changed, 1088 insertions(+), 953 deletions(-) diff --git a/public/components/complex/grid/grid.js b/public/components/complex/grid/grid.js index 103166b..5542471 100644 --- a/public/components/complex/grid/grid.js +++ b/public/components/complex/grid/grid.js @@ -20,616 +20,729 @@ const PREVIEW_IMG_X_FACTOR = 1.5; * @class */ export class GridComponent extends BaseComponent { - #pins = []; // pins stored on the grid - #marginTop; - - /** - * Creates an instance of GridComponent. - * @param {HTMLElement} parent - The parent element for rendering. - * @param {Array} pins - An array of objects representing pin data. - * @param {Boolean} marginTop - Should grid be margin topped or not. - */ - constructor(parent, pins, marginTop) { - super(parent); - this.#pins = pins; - this.#marginTop = marginTop; - - // Providing layout rebuild on resize events - window.addEventListener('resize', (event) => { - event.preventDefault(); - - let body = document.body, - html = document.documentElement; - - let height = Math.max(body.scrollHeight, body.offsetHeight, - html.clientHeight, html.scrollHeight, html.offsetHeight); - - const pageDarkBlurBack = document.getElementById('page__dark-blur-container'); - if (pageDarkBlurBack) { - pageDarkBlurBack.style.height = height + 'px'; - } - const pageTransparentBlurBack = document.getElementById('page__transparent-container'); - if (pageTransparentBlurBack) { - pageTransparentBlurBack.style.height = height + 'px'; - } - - this.buildLayout(); - }, true); - } - - /** - * Renders the component template and displays the pins. - * Clears the parent container and adds new pin elements. - */ - renderTemplate() { - const template = Handlebars.templates['grid.hbs']; - let pinsToRender = []; - - // Render each PinComponent using its template - if (this.#pins && this.#pins.length > 0) { - for (const pinData of this.#pins) { - pinData.media_url = pinData.media_url.replace('http://minio:9000', 'http://localhost:9000'); - const newPin = new PinComponent(pinData); - pinsToRender.push(newPin); - } - } else { - // Вывод сообщения или пустого состояния - const noPinsMessage = document.createElement('div'); - noPinsMessage.textContent = 'Нет доступных пинов.'; - pinsToRender.push(noPinsMessage); - } - - - - const renderedTemplate = template({ - pins: pinsToRender.map((pin) => { - if (typeof pin.renderTemplate === 'function') { - return pin.renderTemplate(); - } - console.warn('Pin does not have renderTemplate function:', pin); - return null; // Или можно вернуть шаблон пустого пина, если требуется - }).filter(Boolean) // Убирает любые `null` из массива - }); - - - } - - /** - * Dynamically calculates layout parameters and positions grid. - */ - buildLayout() { - const columnsN = this.adaptiveColumnsN; - const widthGutter = 30, heightGutter = 15; - let heights = new Array(columnsN).fill(0); - - let headerHeight = 0; - if (this.#marginTop) { - const header = document.querySelector('.header__content-container'); - if (header) { - headerHeight = header.clientHeight; - } - } - - const columnWidth = (this.parentContainerWidth - widthGutter * (columnsN + 1)) / columnsN; - - if (!Array.isArray(this.#pins)) { - this.#pins = []; - } - - for (const pin of this.#pins) { - const pinContainer = document.querySelector(`.pin__content-container-${pin.pin_id}`); - if (pinContainer) { - const pinImage = document.querySelector(`.pin__image-${pin.pin_id}`); - - pinContainer.style.width = pinImage.style.width = `${columnWidth}px`; - - // Next column index to insert the pinContainer - const minIdx = heights.indexOf(Math.min(...heights)); - - pinContainer.style.top = `${heights[minIdx] + heightGutter + headerHeight}px`; - pinContainer.style.left = `${minIdx * columnWidth + widthGutter * (minIdx + 1)}px`; - - heights[minIdx] += pinContainer.offsetHeight + heightGutter; - } - } - - const layoutContainer = document.querySelector('.feed__layout-container'); - if (layoutContainer) { - layoutContainer.style.height = `${Math.max(...heights)}px`; - } - } - - /** - * Returns width of parent container. - */ - get parentContainerWidth() { - return this.Parent.innerWidth || this.Parent.clientWidth; - } - - /** - * Returns a default ration that must be maintained between page size and columns number. - */ - get parentContainerColumnsRatio() { - return DEFAULT_FULLPAGE_WIDTH / DEFAULT_COLUMNS_N_FOR_FULLPAGE; - } - - /** - * Returns the number of columns adapted for current page width. - */ - get adaptiveColumnsN() { - let newColumnN = Math.floor(this.parentContainerWidth / this.parentContainerColumnsRatio); - if (newColumnN == 0) - newColumnN = 1; - - return newColumnN; - } - - /** - * Makes pins previewable. - * @param {Object} pin - pin object containing its information including ID and media url. - */ - buildPinPreview(pin) { - console.log(`.pin__image-preview-button-${pin.pin_id}`); - const pinPreviewBtn = document.querySelector(`.pin__image-preview-button-${pin.pin_id}`); - console.log(typeof(pinPreviewBtn)); - - const parent = document.getElementById('root'); - const previewState = { - MediaUrl: pin.media_url, - AuthorAvatarUrl: pin.author_info.avatar_url || './default/avatar.jpg', - AuthorName: pin.author_info.nick_name, - AuthorFollowersNumber: pin.author_info.followings_count, - Boards: (pin.available_boards || []).map(board => ({ - BoardCoverUrl: board.board_cover || './default/cover.jpg', - BoardName: board.board_name || '', - Private: !board.public || 'false' - })), - Bookmarked: false, - BookmarksNumber: 390, - ViewsNumber: 10_000_000, - } - - pinPreviewBtn.addEventListener('click', (event) => { - event.preventDefault(); - // create expanded pin version - const preview = new Preview(parent, previewState); - const previewRendered = preview.renderTemplate(); - - parent.insertAdjacentHTML('beforeend', previewRendered); - - // Adding buttons listeners - this.addBookmarkBtnListener(previewState); - this.addSaveBtnListener(previewState.Boards); - this.addMoreBtnListener(previewState.DetailsOptions); - - const pinImageElement = document.querySelector(`.pin__image-${pin.pin_id}`); - if (pinImageElement) { - let intWidth = parseInt(pinImageElement.style.width, 10); - let intHeight = parseInt(pinImageElement.style.height, 10); - - const previewContainer = document.querySelector('.preview__content-container'); - const previewTopSide = document.querySelector('.preview__stats-bookmarks-container'); - const previewBottomSide = document.querySelector('.preview__author-container'); - const previewRightSide = document.querySelector('.preview__side-menu-container'); - - // Проверка на null перед использованием элементов - if (previewContainer && previewTopSide && previewBottomSide && previewRightSide) { - previewContainer.style.width = `${intWidth * PREVIEW_IMG_X_FACTOR + previewRightSide.clientWidth}px`; - previewContainer.style.height = `${intHeight * PREVIEW_IMG_X_FACTOR + previewTopSide.clientHeight + previewBottomSide.clientHeight}px`; - previewContainer.style.marginTop = '3%'; - } else { - console.error('One or more preview container elements are missing'); - } - } else { - console.error('Pin image element not found'); - } - - // Create dark transparent background and add event listeners - this.createBackgroundListeners(); - - this.#boardsToSaveTo = []; - }); - - } - - /** - * Creates a handler for dark blured background and its listeners. - */ - createBackgroundListeners() { - const root = document.getElementById('root'); - - if (!document.getElementById('page__dark-blur-container')) { - const pageBluredBackground = document.createElement('div'); - pageBluredBackground.id = 'page__dark-blur-container'; - - pageBluredBackground.style.height = `${document.body.scrollHeight}px`; - - root.appendChild(pageBluredBackground); - - // Add eventListener on Escape press - document.addEventListener('keydown', (event) => { - this.removePreviewOnEscape(event, pageBluredBackground) - }); - - // Also add eventListener on background click - const self = this; - pageBluredBackground.addEventListener('click', (event) => { - event.preventDefault(); - - const pinPreview = document.querySelector('.preview__content-container'); - if (root.contains(pinPreview)) { - root.removeChild(pinPreview); - } - root.removeChild(pageBluredBackground); - - document.removeEventListener('keydown', self.removePreviewOnEscape); - }); - } - } - - /** - * Handles preview container remove on Escape key press. - * @param {Event} event - event that was generated by key press. - * @param {HTMLElement} pageBluredBackground - dark blured background HTML element. - * @returns - */ - removePreviewOnEscape(event, pageBluredBackground) { - if (event.target.matches('[name="search-input"]')) { - return; - } - - event.preventDefault(); - - if (event.code == 'Escape' && event.key == 'Escape') { - const pinPreview = document.querySelector('.preview__content-container'); - if (root.contains(pinPreview)) { - root.removeChild(pinPreview); - } - const transparentBackground = document.getElementById('page__transparent-container'); - if (root.contains(transparentBackground)) { - root.removeChild(transparentBackground); - } - if (root.contains(pageBluredBackground)) { - root.removeChild(pageBluredBackground); - } - - } - - document.removeEventListener('keydown', this.removePreviewOnEscape); - } - - /** - * Creates a handler for bookmark button click events. - * @param {HTMLElement} bookmarkElement - a bookmark button HTML element that was clicked. - * @param {Object} previewState - preview state object containing its state info. - */ - bookmarkListenerHandler(bookmarkElement, previewState) { - if (previewState.Bookmarked) { - bookmarkElement.src = './assets/icons/bookmark-empty.svg'; - previewState.Bookmarked = false; - previewState.BookmarksNumber--; - } - else { - bookmarkElement.src = './assets/icons/bookmark-fill.svg'; - previewState.Bookmarked = true; - previewState.BookmarksNumber++; - } - document.querySelector('.preview__stats-bookmarks-number').textContent = previewState.BookmarksNumber; - } - - /** - * Creates a listener for bookmark button events. - * @param {Object} previewState - preview state object containing its state info. - */ - addBookmarkBtnListener(previewState) { - const bookmarkBtn = document.querySelector('.preview__side-menu-bookmark'); - bookmarkBtn.addEventListener('click', (event) => { - event.preventDefault(); - this.bookmarkListenerHandler(bookmarkBtn, previewState); - }); - } - - /** - * Boolean flag signilizing about save button click state. - */ - #saveBtnClicked; - - /** - * Creates a handler for save button click events. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - saveBtnListenerHandler(boards) { - if (document.querySelector('.details-menu__content-container')) { - const detailsMenuContainer = document.querySelector('.details-menu__content-container'); - document.querySelector('.preview__side-menu-more-container').removeChild(detailsMenuContainer); - this.#moreBtnClicked = false; - - const pageTransparentBackground = document.getElementById('page__transparent-container'); - document.getElementById('root').removeChild(pageTransparentBackground); - } - - if (this.#saveBtnClicked) { - document.querySelector('.preview__board-selector').style.background = 'no-repeat right 0.8em center / 1.4em'; - const saveBtnIcon = document.querySelector('.preview__board-selector-container-icon'); - saveBtnIcon.style.transform = 'none'; - saveBtnIcon.src = './assets/icons/expand-list.svg'; - document.querySelector('.preview__board-selector-container-text').style.color = 'white'; - this.#saveBtnClicked = false; - - const previewBoardSelectorContainer = document.querySelector('.preview__board-selector'); - const saveBoxContainer = document.querySelector('.savebox__content-container'); - previewBoardSelectorContainer.removeChild(saveBoxContainer); - - const transparentContainer = document.getElementById('page__transparent-container'); - if (transparentContainer) { - document.querySelector('#root').removeChild(transparentContainer); - } - } - else { - document.querySelector('.preview__board-selector').style.background = 'white'; - const saveBtnIcon = document.querySelector('.preview__board-selector-container-icon'); - saveBtnIcon.src = './assets/icons/expand-list-flipped.svg'; - saveBtnIcon.style.transform = 'ScaleY(-1)'; - document.querySelector('.preview__board-selector-container-text').style.color = 'black'; - this.#saveBtnClicked = true; - - const saveBoxMarginTop = 20; - const saveBox = new SaveBox(this.Parent, boards); - const previewBoardSelectorContainer = document.querySelector('.preview__board-selector'); - const renderedSaveBox = saveBox.renderTemplate(); - previewBoardSelectorContainer.insertAdjacentHTML('beforeend', renderedSaveBox); - - const saveBoxContentContainer = document.querySelector('.savebox__content-container'); - const saveBtnContainer = document.querySelector('.preview__board-selector'); - - saveBoxContentContainer.style.top = saveBtnContainer.clientHeight + saveBoxMarginTop + 'px'; - - this.addSearchInputListener(boards); - this.addInputClearBtnListener(boards); - this.addSaveToBoardListener(boards); - this.addTransparentLayoutForSaveBox(); - - for (const boardName of this.#boardsToSaveTo) { - const checkedBoard = document.getElementById(`checkbox-${boardName}`); - if (checkedBoard) { - checkedBoard.checked = true; - } - } - } - } - - /** - * Creates a listeners for save button events. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - addSaveBtnListener(boards) { - this.#saveBtnClicked = false; - - document.querySelector('.preview__board-selector-container').addEventListener('click', (event) => { - event.preventDefault(); - this.saveBtnListenerHandler(boards); - }) - } - - /** - * Boolean flag signilizing about more button click state. - */ - #moreBtnClicked; - - /** - * Creates a handler for side menu 'more' button and its events. - * @param {Array} options - options provided for details menu container. - */ - moreBtnListenerHandler(options) { - if (this.#moreBtnClicked) { - const detailsMenuContainer = document.querySelector('.details-menu__content-container'); - document.querySelector('.preview__side-menu-more-container').removeChild(detailsMenuContainer); - this.#moreBtnClicked = false; - } - else { - const detailsMenu = new DetailsMenu(this.Parent, options); - const renderedDetailsMenu = detailsMenu.renderTemplate(); - document.querySelector('.preview__side-menu-more-container').insertAdjacentHTML('beforeend', renderedDetailsMenu); - - this.addTransparentLayoutForDetailsMenu(); - - const detailMenuContainer = document.querySelector('.details-menu__content-container'); - const menuMoreElement = document.querySelector('.preview__side-menu-more'); - - const detailMenuContainerMarginTop = -15; - detailMenuContainer.style.top = menuMoreElement.clientHeight + detailMenuContainerMarginTop + 'px'; - - detailMenuContainer.style.left = - ((detailMenuContainer.clientWidth - menuMoreElement.clientWidth) / 2) + 'px'; - - this.#moreBtnClicked = true; - } - } - - /** - * Creates a listener of side menu 'more' button events. - * @param {Array} options - */ - addMoreBtnListener(options) { - this.#moreBtnClicked = false; - - document.querySelector('.preview__side-menu-more').addEventListener('click', (event) => { - event.preventDefault(); - this.moreBtnListenerHandler(options); - }); - } - - /** - * Creates a handler for search input clear button click event. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - searchInputClearBtnListenerHandler(boards) { - const searchInputField = document.querySelector(`.savebox__content-main-box + #pins = []; // pins stored on the grid + #marginTop; + + /** + * Creates an instance of GridComponent. + * @param {HTMLElement} parent - The parent element for rendering. + * @param {Array} pins - An array of objects representing pin data. + * @param {Boolean} marginTop - Should grid be margin topped or not. + */ + constructor(parent, pins, marginTop) { + super(parent); + this.#pins = pins; + this.#marginTop = marginTop; + + // Providing layout rebuild on resize events + window.addEventListener( + 'resize', + (event) => { + event.preventDefault(); + + let body = document.body, + html = document.documentElement; + + let height = Math.max( + body.scrollHeight, + body.offsetHeight, + html.clientHeight, + html.scrollHeight, + html.offsetHeight + ); + + const pageDarkBlurBack = document.getElementById( + 'page__dark-blur-container' + ); + if (pageDarkBlurBack) { + pageDarkBlurBack.style.height = height + 'px'; + } + const pageTransparentBlurBack = document.getElementById( + 'page__transparent-container' + ); + if (pageTransparentBlurBack) { + pageTransparentBlurBack.style.height = height + 'px'; + } + + this.buildLayout(); + }, + true + ); + } + + /** + * Renders the component template and displays the pins. + * Clears the parent container and adds new pin elements. + */ + renderTemplate() { + const template = Handlebars.templates['grid.hbs']; + let pinsToRender = []; + + // Render each PinComponent using its template + if (this.#pins && this.#pins.length > 0) { + for (const pinData of this.#pins) { + pinData.media_url = pinData.media_url.replace( + 'http://minio:9000', + 'http://localhost:9000' + ); + const newPin = new PinComponent(pinData); + pinsToRender.push(newPin); + } + } else { + // Вывод сообщения или пустого состояния + const noPinsMessage = document.createElement('div'); + noPinsMessage.textContent = 'Нет доступных пинов.'; + pinsToRender.push(noPinsMessage); + } + + const renderedTemplate = template({ + pins: pinsToRender + .map((pin) => { + if (typeof pin.renderTemplate === 'function') { + console.log('pin building', pin.renderTemplate()); + return pin.renderTemplate(); + } + console.warn('Pin does not have renderTemplate function:', pin); + return null; // Или можно вернуть шаблон пустого пина, если требуется + }) + .filter(Boolean), // Убирает любые `null` из массива + }); + return renderedTemplate; + } + + /** + * Dynamically calculates layout parameters and positions grid. + */ + buildLayout() { + const columnsN = this.adaptiveColumnsN; + const widthGutter = 30, + heightGutter = 15; + let heights = new Array(columnsN).fill(0); + + let headerHeight = 0; + if (this.#marginTop) { + const header = document.querySelector('.header__content-container'); + if (header) { + headerHeight = header.clientHeight; + } + } + + const columnWidth = + (this.parentContainerWidth - widthGutter * (columnsN + 1)) / columnsN; + + if (!Array.isArray(this.#pins)) { + this.#pins = []; + } + + for (const pin of this.#pins) { + const pinContainer = document.querySelector( + `.pin__content-container-${pin.pin_id}` + ); + if (pinContainer) { + const pinImage = document.querySelector(`.pin__image-${pin.pin_id}`); + + pinContainer.style.width = pinImage.style.width = `${columnWidth}px`; + + // Next column index to insert the pinContainer + const minIdx = heights.indexOf(Math.min(...heights)); + + pinContainer.style.top = `${ + heights[minIdx] + heightGutter + headerHeight + }px`; + pinContainer.style.left = `${ + minIdx * columnWidth + widthGutter * (minIdx + 1) + }px`; + + heights[minIdx] += pinContainer.offsetHeight + heightGutter; + } + } + + const layoutContainer = document.querySelector('.feed__layout-container'); + if (layoutContainer) { + layoutContainer.style.height = `${Math.max(...heights)}px`; + } + } + + /** + * Returns width of parent container. + */ + get parentContainerWidth() { + return this.Parent.innerWidth || this.Parent.clientWidth; + } + + /** + * Returns a default ration that must be maintained between page size and columns number. + */ + get parentContainerColumnsRatio() { + return DEFAULT_FULLPAGE_WIDTH / DEFAULT_COLUMNS_N_FOR_FULLPAGE; + } + + /** + * Returns the number of columns adapted for current page width. + */ + get adaptiveColumnsN() { + let newColumnN = Math.floor( + this.parentContainerWidth / this.parentContainerColumnsRatio + ); + if (newColumnN == 0) newColumnN = 1; + + return newColumnN; + } + + /** + * Makes pins previewable. + * @param {Object} pin - pin object containing its information including ID and media url. + */ + buildPinPreview(pin) { + console.log(`.pin__image-preview-button-${pin.pin_id}`); + const pinPreviewBtn = document.querySelector( + `.pin__image-preview-button-${pin.pin_id}` + ); + console.log(typeof pinPreviewBtn); + + const parent = document.getElementById('root'); + const previewState = { + MediaUrl: pin.media_url, + AuthorAvatarUrl: pin.author_info.avatar_url || './default/avatar.jpg', + AuthorName: pin.author_info.nick_name, + AuthorFollowersNumber: pin.author_info.followings_count, + Boards: (pin.available_boards || []).map((board) => ({ + BoardCoverUrl: board.board_cover || './default/cover.jpg', + BoardName: board.board_name || '', + Private: !board.public || 'false', + })), + Bookmarked: false, + BookmarksNumber: 390, + ViewsNumber: 10_000_000, + }; + + pinPreviewBtn.addEventListener('click', (event) => { + event.preventDefault(); + // create expanded pin version + const preview = new Preview(parent, previewState); + const previewRendered = preview.renderTemplate(); + + parent.insertAdjacentHTML('beforeend', previewRendered); + + // Adding buttons listeners + this.addBookmarkBtnListener(previewState); + this.addSaveBtnListener(previewState.Boards); + this.addMoreBtnListener(previewState.DetailsOptions); + + const pinImageElement = document.querySelector( + `.pin__image-${pin.pin_id}` + ); + if (pinImageElement) { + let intWidth = parseInt(pinImageElement.style.width, 10); + let intHeight = parseInt(pinImageElement.style.height, 10); + + const previewContainer = document.querySelector( + '.preview__content-container' + ); + const previewTopSide = document.querySelector( + '.preview__stats-bookmarks-container' + ); + const previewBottomSide = document.querySelector( + '.preview__author-container' + ); + const previewRightSide = document.querySelector( + '.preview__side-menu-container' + ); + + // Проверка на null перед использованием элементов + if ( + previewContainer && + previewTopSide && + previewBottomSide && + previewRightSide + ) { + previewContainer.style.width = `${ + intWidth * PREVIEW_IMG_X_FACTOR + previewRightSide.clientWidth + }px`; + previewContainer.style.height = `${ + intHeight * PREVIEW_IMG_X_FACTOR + + previewTopSide.clientHeight + + previewBottomSide.clientHeight + }px`; + previewContainer.style.marginTop = '3%'; + } else { + console.error('One or more preview container elements are missing'); + } + } else { + console.error('Pin image element not found'); + } + + // Create dark transparent background and add event listeners + this.createBackgroundListeners(); + + this.#boardsToSaveTo = []; + }); + } + + /** + * Creates a handler for dark blured background and its listeners. + */ + createBackgroundListeners() { + const root = document.getElementById('root'); + + if (!document.getElementById('page__dark-blur-container')) { + const pageBluredBackground = document.createElement('div'); + pageBluredBackground.id = 'page__dark-blur-container'; + + pageBluredBackground.style.height = `${document.body.scrollHeight}px`; + + root.appendChild(pageBluredBackground); + + // Add eventListener on Escape press + document.addEventListener('keydown', (event) => { + this.removePreviewOnEscape(event, pageBluredBackground); + }); + + // Also add eventListener on background click + const self = this; + pageBluredBackground.addEventListener('click', (event) => { + event.preventDefault(); + + const pinPreview = document.querySelector( + '.preview__content-container' + ); + if (root.contains(pinPreview)) { + root.removeChild(pinPreview); + } + root.removeChild(pageBluredBackground); + + document.removeEventListener('keydown', self.removePreviewOnEscape); + }); + } + } + + /** + * Handles preview container remove on Escape key press. + * @param {Event} event - event that was generated by key press. + * @param {HTMLElement} pageBluredBackground - dark blured background HTML element. + * @returns + */ + removePreviewOnEscape(event, pageBluredBackground) { + if (event.target.matches('[name="search-input"]')) { + return; + } + + event.preventDefault(); + + if (event.code == 'Escape' && event.key == 'Escape') { + const pinPreview = document.querySelector('.preview__content-container'); + if (root.contains(pinPreview)) { + root.removeChild(pinPreview); + } + const transparentBackground = document.getElementById( + 'page__transparent-container' + ); + if (root.contains(transparentBackground)) { + root.removeChild(transparentBackground); + } + if (root.contains(pageBluredBackground)) { + root.removeChild(pageBluredBackground); + } + } + + document.removeEventListener('keydown', this.removePreviewOnEscape); + } + + /** + * Creates a handler for bookmark button click events. + * @param {HTMLElement} bookmarkElement - a bookmark button HTML element that was clicked. + * @param {Object} previewState - preview state object containing its state info. + */ + bookmarkListenerHandler(bookmarkElement, previewState) { + if (previewState.Bookmarked) { + bookmarkElement.src = './assets/icons/bookmark-empty.svg'; + previewState.Bookmarked = false; + previewState.BookmarksNumber--; + } else { + bookmarkElement.src = './assets/icons/bookmark-fill.svg'; + previewState.Bookmarked = true; + previewState.BookmarksNumber++; + } + document.querySelector('.preview__stats-bookmarks-number').textContent = + previewState.BookmarksNumber; + } + + /** + * Creates a listener for bookmark button events. + * @param {Object} previewState - preview state object containing its state info. + */ + addBookmarkBtnListener(previewState) { + const bookmarkBtn = document.querySelector('.preview__side-menu-bookmark'); + bookmarkBtn.addEventListener('click', (event) => { + event.preventDefault(); + this.bookmarkListenerHandler(bookmarkBtn, previewState); + }); + } + + /** + * Boolean flag signilizing about save button click state. + */ + #saveBtnClicked; + + /** + * Creates a handler for save button click events. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + saveBtnListenerHandler(boards) { + if (document.querySelector('.details-menu__content-container')) { + const detailsMenuContainer = document.querySelector( + '.details-menu__content-container' + ); + document + .querySelector('.preview__side-menu-more-container') + .removeChild(detailsMenuContainer); + this.#moreBtnClicked = false; + + const pageTransparentBackground = document.getElementById( + 'page__transparent-container' + ); + document.getElementById('root').removeChild(pageTransparentBackground); + } + + if (this.#saveBtnClicked) { + document.querySelector('.preview__board-selector').style.background = + 'no-repeat right 0.8em center / 1.4em'; + const saveBtnIcon = document.querySelector( + '.preview__board-selector-container-icon' + ); + saveBtnIcon.style.transform = 'none'; + saveBtnIcon.src = './assets/icons/expand-list.svg'; + document.querySelector( + '.preview__board-selector-container-text' + ).style.color = 'white'; + this.#saveBtnClicked = false; + + const previewBoardSelectorContainer = document.querySelector( + '.preview__board-selector' + ); + const saveBoxContainer = document.querySelector( + '.savebox__content-container' + ); + previewBoardSelectorContainer.removeChild(saveBoxContainer); + + const transparentContainer = document.getElementById( + 'page__transparent-container' + ); + if (transparentContainer) { + document.querySelector('#root').removeChild(transparentContainer); + } + } else { + document.querySelector('.preview__board-selector').style.background = + 'white'; + const saveBtnIcon = document.querySelector( + '.preview__board-selector-container-icon' + ); + saveBtnIcon.src = './assets/icons/expand-list-flipped.svg'; + saveBtnIcon.style.transform = 'ScaleY(-1)'; + document.querySelector( + '.preview__board-selector-container-text' + ).style.color = 'black'; + this.#saveBtnClicked = true; + + const saveBoxMarginTop = 20; + const saveBox = new SaveBox(this.Parent, boards); + const previewBoardSelectorContainer = document.querySelector( + '.preview__board-selector' + ); + const renderedSaveBox = saveBox.renderTemplate(); + previewBoardSelectorContainer.insertAdjacentHTML( + 'beforeend', + renderedSaveBox + ); + + const saveBoxContentContainer = document.querySelector( + '.savebox__content-container' + ); + const saveBtnContainer = document.querySelector( + '.preview__board-selector' + ); + + saveBoxContentContainer.style.top = + saveBtnContainer.clientHeight + saveBoxMarginTop + 'px'; + + this.addSearchInputListener(boards); + this.addInputClearBtnListener(boards); + this.addSaveToBoardListener(boards); + this.addTransparentLayoutForSaveBox(); + + for (const boardName of this.#boardsToSaveTo) { + const checkedBoard = document.getElementById(`checkbox-${boardName}`); + if (checkedBoard) { + checkedBoard.checked = true; + } + } + } + } + + /** + * Creates a listeners for save button events. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + addSaveBtnListener(boards) { + this.#saveBtnClicked = false; + + document + .querySelector('.preview__board-selector-container') + .addEventListener('click', (event) => { + event.preventDefault(); + this.saveBtnListenerHandler(boards); + }); + } + + /** + * Boolean flag signilizing about more button click state. + */ + #moreBtnClicked; + + /** + * Creates a handler for side menu 'more' button and its events. + * @param {Array} options - options provided for details menu container. + */ + moreBtnListenerHandler(options) { + if (this.#moreBtnClicked) { + const detailsMenuContainer = document.querySelector( + '.details-menu__content-container' + ); + document + .querySelector('.preview__side-menu-more-container') + .removeChild(detailsMenuContainer); + this.#moreBtnClicked = false; + } else { + const detailsMenu = new DetailsMenu(this.Parent, options); + const renderedDetailsMenu = detailsMenu.renderTemplate(); + document + .querySelector('.preview__side-menu-more-container') + .insertAdjacentHTML('beforeend', renderedDetailsMenu); + + this.addTransparentLayoutForDetailsMenu(); + + const detailMenuContainer = document.querySelector( + '.details-menu__content-container' + ); + const menuMoreElement = document.querySelector( + '.preview__side-menu-more' + ); + + const detailMenuContainerMarginTop = -15; + detailMenuContainer.style.top = + menuMoreElement.clientHeight + detailMenuContainerMarginTop + 'px'; + + detailMenuContainer.style.left = + -((detailMenuContainer.clientWidth - menuMoreElement.clientWidth) / 2) + + 'px'; + + this.#moreBtnClicked = true; + } + } + + /** + * Creates a listener of side menu 'more' button events. + * @param {Array} options + */ + addMoreBtnListener(options) { + this.#moreBtnClicked = false; + + document + .querySelector('.preview__side-menu-more') + .addEventListener('click', (event) => { + event.preventDefault(); + this.moreBtnListenerHandler(options); + }); + } + + /** + * Creates a handler for search input clear button click event. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + searchInputClearBtnListenerHandler(boards) { + const searchInputField = document.querySelector(`.savebox__content-main-box .searchinput__content-container .searchinput__search-field`); - searchInputField.value = ''; - searchInputField.focus(); - this.searchInputListenerHandler(searchInputField, boards); - } - - /** - * Creates a listener of search input clear button events. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - addInputClearBtnListener(boards) { - const searchInputClearIcon = document.querySelector(`.savebox__content-main-box + searchInputField.value = ''; + searchInputField.focus(); + this.searchInputListenerHandler(searchInputField, boards); + } + + /** + * Creates a listener of search input clear button events. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + addInputClearBtnListener(boards) { + const searchInputClearIcon = + document.querySelector(`.savebox__content-main-box .searchinput__content-container .searchinput__clear-icon`); - searchInputClearIcon.addEventListener('click', (event) => { - event.preventDefault(); - this.searchInputClearBtnListenerHandler(boards); - }); - } - - /** - * List of checked boards at that time. - */ - #boardsToSaveTo = []; - - /** - * Creates a handler for search input field change events. - * @param {HTMLElement} inputField - a HTMLElement of search input field. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - searchInputListenerHandler(inputField, boards) { - let matchedBoards = []; - const searchText = inputField.value; - for (const board of boards) { - if (board.BoardName.toLowerCase().includes(searchText.toLowerCase())) { - matchedBoards.push(board); - } - } - - // Remove boards from current list - const boardsListContainer = document.querySelector('.savebox__boards-list-container'); - const boardsList = document.querySelector('.savebox__boards-list'); - if (boardsListContainer.contains(boardsList)) { - boardsListContainer.removeChild(boardsList); - } - - // Rerender boards list with new matched boards - const newBoardsList = new BoardsList(this.Parent, matchedBoards); - const renderedList = newBoardsList.renderTemplate(); - boardsListContainer.insertAdjacentHTML('beforeend', renderedList); - - this.addSaveToBoardListener(matchedBoards); - - for (const boardName of this.#boardsToSaveTo) { - const checkedBoard = document.getElementById(`checkbox-${boardName}`); - if (checkedBoard) { - checkedBoard.checked = true; - } - } - } - - /** - * Creates a listener of search input field change event. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - addSearchInputListener(boards) { - const searchInputField = document.querySelector(`.savebox__content-main-box + searchInputClearIcon.addEventListener('click', (event) => { + event.preventDefault(); + this.searchInputClearBtnListenerHandler(boards); + }); + } + + /** + * List of checked boards at that time. + */ + #boardsToSaveTo = []; + + /** + * Creates a handler for search input field change events. + * @param {HTMLElement} inputField - a HTMLElement of search input field. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + searchInputListenerHandler(inputField, boards) { + let matchedBoards = []; + const searchText = inputField.value; + for (const board of boards) { + if (board.BoardName.toLowerCase().includes(searchText.toLowerCase())) { + matchedBoards.push(board); + } + } + + // Remove boards from current list + const boardsListContainer = document.querySelector( + '.savebox__boards-list-container' + ); + const boardsList = document.querySelector('.savebox__boards-list'); + if (boardsListContainer.contains(boardsList)) { + boardsListContainer.removeChild(boardsList); + } + + // Rerender boards list with new matched boards + const newBoardsList = new BoardsList(this.Parent, matchedBoards); + const renderedList = newBoardsList.renderTemplate(); + boardsListContainer.insertAdjacentHTML('beforeend', renderedList); + + this.addSaveToBoardListener(matchedBoards); + + for (const boardName of this.#boardsToSaveTo) { + const checkedBoard = document.getElementById(`checkbox-${boardName}`); + if (checkedBoard) { + checkedBoard.checked = true; + } + } + } + + /** + * Creates a listener of search input field change event. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + addSearchInputListener(boards) { + const searchInputField = document.querySelector(`.savebox__content-main-box .searchinput__content-container .searchinput__search-field`); - searchInputField.addEventListener('input', (event) => { - event.preventDefault(); - this.searchInputListenerHandler(searchInputField, boards); - }); - } - - /** - * Adds transparent layout under the save box. - */ - addTransparentLayoutForSaveBox() { - const root = document.getElementById('root'); - if (!document.getElementById('page__transparent-container')) { - const pageTransparentBackground = document.createElement('div'); - pageTransparentBackground.id = 'page__transparent-container'; - - pageTransparentBackground.style.height = `${document.body.scrollHeight}px`; - - root.appendChild(pageTransparentBackground); - - pageTransparentBackground.addEventListener('click', (event) => { - event.preventDefault(); - - document.querySelector('.preview__board-selector').style.background = 'none'; - const saveBtnIcon = document.querySelector('.preview__board-selector-container-icon'); - saveBtnIcon.style.transform = 'none'; - saveBtnIcon.src = './assets/icons/expand-list.svg'; - document.querySelector('.preview__board-selector-container-text').style.color = 'white'; - this.#saveBtnClicked = false; - - const saveBox = document.querySelector('.savebox__content-container'); - - document.querySelector('.preview__board-selector').removeChild(saveBox); - root.removeChild(pageTransparentBackground); - }); - } - } - - /** - * Adds transparent layout under the detailes menu box. - */ - addTransparentLayoutForDetailsMenu() { - const root = document.getElementById('root'); - if (!document.getElementById('page__transparent-container')) { - const pageTransparentBackground = document.createElement('div'); - pageTransparentBackground.id = 'page__transparent-container'; - - pageTransparentBackground.style.height = `${document.body.scrollHeight}px`; - - root.appendChild(pageTransparentBackground); - - pageTransparentBackground.addEventListener('click', (event) => { - event.preventDefault(); - - const detailsMenuContainer = document.querySelector('.details-menu__content-container'); - if (detailsMenuContainer) { - document.querySelector('.preview__side-menu-more-container').removeChild(detailsMenuContainer); - this.#moreBtnClicked = false; - } - root.removeChild(pageTransparentBackground); - }); - } - } - - /** - * Creates a handler for boards list checkboxes. - * @param {Event} event - event that was generated by checkboxes state. - */ - saveToBoardListenerHandler(event) { - if (event.currentTarget.checked) { - this.#boardsToSaveTo.push(event.currentTarget.value); - } - else { - const index = this.#boardsToSaveTo.indexOf(event.currentTarget.value); - if (index > -1) { - this.#boardsToSaveTo.splice(index, 1); - } - } - - if (this.#boardsToSaveTo.length > 0) { - document.querySelector('.preview__board-selector-container-text').textContent = 'Сохранено'; - } - else { - document.querySelector('.preview__board-selector-container-text').textContent = 'Сохранить'; - } - } - - /** - * Creates a listener of save-to-board checkboxes change event. - * @param {Array} boards - the list of boards which belongs to current authorized user. - */ - addSaveToBoardListener(boards) { - for (const board of boards) { - document.getElementById(`checkbox-${board.BoardName}`).addEventListener('change', (event) => { - event.preventDefault(); - this.saveToBoardListenerHandler(event); - }); - } - } -}; + searchInputField.addEventListener('input', (event) => { + event.preventDefault(); + this.searchInputListenerHandler(searchInputField, boards); + }); + } + + /** + * Adds transparent layout under the save box. + */ + addTransparentLayoutForSaveBox() { + const root = document.getElementById('root'); + if (!document.getElementById('page__transparent-container')) { + const pageTransparentBackground = document.createElement('div'); + pageTransparentBackground.id = 'page__transparent-container'; + + pageTransparentBackground.style.height = `${document.body.scrollHeight}px`; + + root.appendChild(pageTransparentBackground); + + pageTransparentBackground.addEventListener('click', (event) => { + event.preventDefault(); + + document.querySelector('.preview__board-selector').style.background = + 'none'; + const saveBtnIcon = document.querySelector( + '.preview__board-selector-container-icon' + ); + saveBtnIcon.style.transform = 'none'; + saveBtnIcon.src = './assets/icons/expand-list.svg'; + document.querySelector( + '.preview__board-selector-container-text' + ).style.color = 'white'; + this.#saveBtnClicked = false; + + const saveBox = document.querySelector('.savebox__content-container'); + + document.querySelector('.preview__board-selector').removeChild(saveBox); + root.removeChild(pageTransparentBackground); + }); + } + } + + /** + * Adds transparent layout under the detailes menu box. + */ + addTransparentLayoutForDetailsMenu() { + const root = document.getElementById('root'); + if (!document.getElementById('page__transparent-container')) { + const pageTransparentBackground = document.createElement('div'); + pageTransparentBackground.id = 'page__transparent-container'; + + pageTransparentBackground.style.height = `${document.body.scrollHeight}px`; + + root.appendChild(pageTransparentBackground); + + pageTransparentBackground.addEventListener('click', (event) => { + event.preventDefault(); + + const detailsMenuContainer = document.querySelector( + '.details-menu__content-container' + ); + if (detailsMenuContainer) { + document + .querySelector('.preview__side-menu-more-container') + .removeChild(detailsMenuContainer); + this.#moreBtnClicked = false; + } + root.removeChild(pageTransparentBackground); + }); + } + } + + /** + * Creates a handler for boards list checkboxes. + * @param {Event} event - event that was generated by checkboxes state. + */ + saveToBoardListenerHandler(event) { + if (event.currentTarget.checked) { + this.#boardsToSaveTo.push(event.currentTarget.value); + } else { + const index = this.#boardsToSaveTo.indexOf(event.currentTarget.value); + if (index > -1) { + this.#boardsToSaveTo.splice(index, 1); + } + } + + if (this.#boardsToSaveTo.length > 0) { + document.querySelector( + '.preview__board-selector-container-text' + ).textContent = 'Сохранено'; + } else { + document.querySelector( + '.preview__board-selector-container-text' + ).textContent = 'Сохранить'; + } + } + + /** + * Creates a listener of save-to-board checkboxes change event. + * @param {Array} boards - the list of boards which belongs to current authorized user. + */ + addSaveToBoardListener(boards) { + for (const board of boards) { + document + .getElementById(`checkbox-${board.BoardName}`) + .addEventListener('change', (event) => { + event.preventDefault(); + this.saveToBoardListenerHandler(event); + }); + } + } +} diff --git a/public/components/complex/pin/pin.js b/public/components/complex/pin/pin.js index 24ce608..d018c56 100644 --- a/public/components/complex/pin/pin.js +++ b/public/components/complex/pin/pin.js @@ -7,37 +7,39 @@ import { BaseComponent } from '../../base/base.js'; * @class */ export class PinComponent extends BaseComponent { - #state = { - pin_id: 0, - author_avatar: '', - author_name: '', - media_url: '', - }; + #state = { + pin_id: 0, + author_avatar: '', + author_name: '', + media_url: '', + }; - /** - * Creates an instance of PinComponent. - * @param {HTMLElement} parent - The parent element for rendering the pin. - * @param {Object} [state=this.#state] - The initial state of the pin. - * @param {string} state.author_avatar - The author avatar. - * @param {string} state.author_name - The author name. - * @param {string} state.media_url - Url link associated with the pin. - */ - constructor(state, parent) { - super(parent, state); - this.#state = state; - } + /** + * Creates an instance of PinComponent. + * @param {HTMLElement} parent - The parent element for rendering the pin. + * @param {Object} [state=this.#state] - The initial state of the pin. + * @param {string} state.author_avatar - The author avatar. + * @param {string} state.author_name - The author name. + * @param {string} state.media_url - Url link associated with the pin. + */ + constructor(state, parent) { + super(parent, state); + this.#state = state; + } - /** - * Renders the pin template and appends it to the parent container. - * Updates the button components based on the state. - * @returns {string} - The rendered template for debugging purposes. - */ - renderTemplate() { - const template = Handlebars.templates['pin.hbs']; - const renderedTemplate = template({ - pin: this.#state - }); + /** + * Renders the pin template and appends it to the parent container. + * Updates the button components based on the state. + * @returns {string} - The rendered template for debugging purposes. + */ + renderTemplate() { + const template = Handlebars.templates['pin.hbs']; + console.log('pin rendered'); + console.log(this.#state); + const renderedTemplate = template({ + pin: this.#state, + }); - return renderedTemplate; // Can be kept for debugging if needed - } + return renderedTemplate; // Can be kept for debugging if needed + } } diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index 4143eff..1dc8841 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -117,11 +117,12 @@ export default class EditPinComponent extends BaseComponent { const requestBody = JSON.stringify({ author_id: 1, + board_id: 1, description: DescriptionValue, title: TitleValue, media_url: ImageUrl, }); - + console.log(requestBody); // await fetch('http://localhost:8080/create-pin', { @@ -139,7 +140,7 @@ export default class EditPinComponent extends BaseComponent { body: requestBody, }); - console.log(requestBody) + console.log(requestBody); console.log('fetch done successfully'); } diff --git a/public/pages/main/main.js b/public/pages/main/main.js index 94be664..a23be8c 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -1,196 +1,215 @@ -'use strict' +'use strict'; -import { HeaderComponent as Header } from '../../components/complex/header/header.js' -import { GridComponent as Grid } from '../../components/complex/grid/grid.js' -import { isAuthorized } from '../../modules/network.js' +import { HeaderComponent as Header } from '../../components/complex/header/header.js'; +import { GridComponent as Grid } from '../../components/complex/grid/grid.js'; +import { isAuthorized } from '../../modules/network.js'; -import { ROUTES } from '../../constants/routes.js' -import { BACKEND_LOGOUT_ROUTE } from '../../constants/api.js' -import { postMethod } from '../../modules/network.js' +import { ROUTES } from '../../constants/routes.js'; +import { BACKEND_LOGOUT_ROUTE } from '../../constants/api.js'; +import { postMethod } from '../../modules/network.js'; -import { app } from '../../index.js' -import { BaseComponent } from '../../components/base/base.js' +import { app } from '../../index.js'; +import { BaseComponent } from '../../components/base/base.js'; -import { DropDownMenuComponent as DropDownMenu } from '../../components/drop-down-menu/drop-down-menu.js' +import { DropDownMenuComponent as DropDownMenu } from '../../components/drop-down-menu/drop-down-menu.js'; /** * Represents the Main Page Component. * @class */ export class MainPageComponent extends BaseComponent { - /** - * An array of pins. - */ - #pins - - /** - * Creates an instance of MainPage Component. - * @constructor - * @param {HTMLElement} parent - The parent element where the main page will be rendered. - * @param {Object} pins - data provided for pins propagation. - */ - constructor(parent, pins) { - super(parent); - this.#pins = pins + /** + * An array of pins. + */ + #pins; + + /** + * Creates an instance of MainPage Component. + * @constructor + * @param {HTMLElement} parent - The parent element where the main page will be rendered. + * @param {Object} pins - data provided for pins propagation. + */ + constructor(parent, pins) { + super(parent); + this.#pins = pins; + } + + /** + * Renders the MainPage component. + * @returns {string} - The rendered HTML template of the main page. + */ + async renderTemplate() { + const template = Handlebars.templates['main.hbs']; + + const grid = new Grid(this.Parent, this.#pins, true); + + const renderedTemplate = template({ + header: new Header(this.Parent, await isAuthorized()).renderTemplate(), + grid: grid.renderTemplate(), + }); + console.log(renderedTemplate); + + this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); + + if (!Array.isArray(this.#pins)) { + this.#pins = []; } - /** - * Renders the MainPage component. - * @returns {string} - The rendered HTML template of the main page. - */ - async renderTemplate() { - const template = Handlebars.templates['main.hbs']; - - const grid = new Grid(this.Parent, this.#pins, true); - - const renderedTemplate = template({ - header: new Header(this.Parent, await isAuthorized()).renderTemplate(), - grid: grid.renderTemplate(), - }); - - this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); - - if (!Array.isArray(this.#pins)) { - this.#pins = []; - } - - for (const pin of this.#pins) { - console.log(pin) - grid.buildPinPreview(pin); - } - - document.body.addEventListener('load', (event) => { - event.preventDefault(); - grid.buildLayout(); - }, true); - - // Listeners - this.addLogoListener(); - this.addLoginBtnListener(); - this.addSearchInputListener(); - this.addProfileImgListener(); - - return renderedTemplate; + for (const pin of this.#pins) { + console.log(pin); + grid.buildPinPreview(pin); } - /** - * Creates a listener of the search input bar. - */ - addSearchInputListener() { - const searchInputClearIcon = document.querySelector(`.header__search-input-content-container + document.body.addEventListener( + 'load', + (event) => { + event.preventDefault(); + grid.buildLayout(); + }, + true + ); + + // Listeners + this.addLogoListener(); + this.addLoginBtnListener(); + this.addSearchInputListener(); + this.addProfileImgListener(); + + return renderedTemplate; + } + + /** + * Creates a listener of the search input bar. + */ + addSearchInputListener() { + const searchInputClearIcon = + document.querySelector(`.header__search-input-content-container .searchinput__content-container .searchinput__clear-icon`); - if (!searchInputClearIcon) { - return; - } + if (!searchInputClearIcon) { + return; + } - searchInputClearIcon.addEventListener('click', (event) => { - event.preventDefault(); - const searchInputField = document.querySelector(`.header__search-input-content-container + searchInputClearIcon.addEventListener('click', (event) => { + event.preventDefault(); + const searchInputField = + document.querySelector(`.header__search-input-content-container .searchinput__content-container .searchinput__search-field`); - searchInputField.value = ''; - searchInputField.focus(); - }); - + searchInputField.value = ''; + searchInputField.focus(); + }); + } + + /** + * Creates a listener of the logo icon. + */ + addLogoListener() { + const headerLogInButton = document.querySelector('.header__logo-container'); + if (headerLogInButton) { + headerLogInButton.addEventListener('click', (event) => { + event.preventDefault(); + + root.innerHTML = ''; + app.renderPage(ROUTES.main); + }); } - - /** - * Creates a listener of the logo icon. - */ - addLogoListener() { - const headerLogInButton = document.querySelector('.header__logo-container') - if (headerLogInButton) { - headerLogInButton.addEventListener('click', (event) => { - event.preventDefault(); - - root.innerHTML = ''; - app.renderPage(ROUTES.main); - }); - } + } + + /** + * Creates a listener of login button. + */ + addLoginBtnListener() { + const headerLogInButton = document.querySelector( + '.header__login-btn-container' + ); + if (headerLogInButton) { + headerLogInButton.addEventListener('click', (event) => { + event.preventDefault(); + + root.innerHTML = ''; + app.renderPage(ROUTES.login); + }); } - - /** - * Creates a listener of login button. - */ - addLoginBtnListener() { - const headerLogInButton = document.querySelector('.header__login-btn-container') - if (headerLogInButton) { - headerLogInButton.addEventListener('click', (event) => { - event.preventDefault(); - - root.innerHTML = ''; - app.renderPage(ROUTES.login); - }); + } + + /** + * Creates a listener of profile icon. + */ + addProfileImgListener() { + const profileContainer = document.querySelector( + '.header__profile-container' + ); + if (profileContainer) { + profileContainer.addEventListener('click', (event) => { + event.preventDefault(); + + if (!document.querySelector('.drop-down-menu__content-container')) { + const dropDownMenu = new DropDownMenu(this.Parent); + const renderedTemplate = dropDownMenu.renderTemplate(); + profileContainer.insertAdjacentHTML('beforeend', renderedTemplate); + + const dropDownMenuElement = document.querySelector( + '.drop-down-menu__content-container' + ); + if (dropDownMenuElement) { + const header = document.querySelector('.header__content-container'); + const dropDownMenuMarginTop = -10, + dropDownMenuMarginRight = 10; + dropDownMenuElement.style.top = + header.clientHeight + dropDownMenuMarginTop + 'px'; + dropDownMenuElement.style.right = dropDownMenuMarginRight + 'px'; + + this.addLogoutButtonListener(); + this.addProfileListener(); + } + } else { + const dropDownMenu = document.querySelector( + '.drop-down-menu__content-container' + ); + if (dropDownMenu) { + profileContainer.removeChild(dropDownMenu); + } } + }); } - - /** - * Creates a listener of profile icon. - */ - addProfileImgListener() { - const profileContainer = document.querySelector('.header__profile-container'); - if (profileContainer) { - profileContainer.addEventListener('click', (event) => { - event.preventDefault(); - - if (!document.querySelector('.drop-down-menu__content-container')) { - const dropDownMenu = new DropDownMenu(this.Parent); - const renderedTemplate = dropDownMenu.renderTemplate(); - profileContainer.insertAdjacentHTML('beforeend', renderedTemplate); - - const dropDownMenuElement = document.querySelector('.drop-down-menu__content-container'); - if (dropDownMenuElement) { - const header = document.querySelector('.header__content-container'); - const dropDownMenuMarginTop = -10, dropDownMenuMarginRight = 10; - dropDownMenuElement.style.top = header.clientHeight + dropDownMenuMarginTop + 'px'; - dropDownMenuElement.style.right = dropDownMenuMarginRight + 'px'; - - this.addLogoutButtonListener(); - this.addProfileListener(); - } - } - else { - const dropDownMenu = document.querySelector('.drop-down-menu__content-container'); - if (dropDownMenu) { - profileContainer.removeChild(dropDownMenu); - } - } - }); + } + + /** + * Creates a listener of logout button. + */ + addLogoutButtonListener() { + const logOutButton = document.querySelector( + '.drop-down-menu__logout-option' + ); + if (logOutButton) { + logOutButton.addEventListener('click', async (event) => { + event.preventDefault(); + + const resp = await postMethod(BACKEND_LOGOUT_ROUTE, {}, true); + if (!resp.code_status) { + document.cookie = 'session_token' + '=; Max-Age=0'; + this.Parent.innerHTML = ''; + app.renderPage(ROUTES.main); } + }); } - - /** - * Creates a listener of logout button. - */ - addLogoutButtonListener() { - const logOutButton = document.querySelector('.drop-down-menu__logout-option'); - if (logOutButton) { - logOutButton.addEventListener('click', async (event) => { - event.preventDefault(); - - const resp = await postMethod(BACKEND_LOGOUT_ROUTE, {}, true); - if (!resp.code_status) { - document.cookie = 'session_token' + '=; Max-Age=0' - this.Parent.innerHTML = ''; - app.renderPage(ROUTES.main); - } - }); - } - } - - /** - * Creates a listener of profile button. - */ - addProfileListener() { - const menuProfileButton = document.querySelector('.drop-down-menu__user-option') - if (menuProfileButton) { - menuProfileButton.addEventListener('click', (event) => { - event.preventDefault(); - - root.innerHTML = ''; - app.renderPage(ROUTES.profile); - }); - } + } + + /** + * Creates a listener of profile button. + */ + addProfileListener() { + const menuProfileButton = document.querySelector( + '.drop-down-menu__user-option' + ); + if (menuProfileButton) { + menuProfileButton.addEventListener('click', (event) => { + event.preventDefault(); + + root.innerHTML = ''; + app.renderPage(ROUTES.profile); + }); } -}; + } +} diff --git a/public/precompiled.js b/public/precompiled.js index cc3a755..058448c 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -19,23 +19,23 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return "

\r\n \n \r\n
\r\n \n
\n \"cover\"\r\n
\r\n
\n \r\n" + + "\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Private") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":16},"end":{"line":12,"column":23}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"private\"\r\n"; + return " \"private\"\n"; },"5":function(container,depth0,helpers,partials,data) { - return "

Здесь будут отображены доски

\r\n"; + return "

Здесь будут отображены доски

\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -44,9 +44,9 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return undefined }; - return "
\r\n" + return "
\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(5, data, 0),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":17,"column":11}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true}); templates['button.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "disabled"; @@ -92,13 +92,13 @@ templates['button.hbs'] = template({"1":function(container,depth0,helpers,partia + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"active") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":77},"end":{"line":1,"column":104}}})) != null ? stack1 : "") + "\" " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"disabled") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":106},"end":{"line":2,"column":26}}})) != null ? stack1 : "") - + ">\r\n " + + ">\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":3,"column":65}}})) != null ? stack1 : "") - + "\r\n " + + "\n " + alias4(((helper = (helper = lookupProperty(helpers,"label") || (depth0 != null ? lookupProperty(depth0,"label") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data,"loc":{"start":{"line":4,"column":1},"end":{"line":4,"column":10}}}) : helper))) - + "\r\n " + + "\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconRight") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":68}}})) != null ? stack1 : "") - + "\r\n\r\n"; + + "\n\n"; },"useData":true}); templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -110,18 +110,18 @@ templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":functi return "
\r\n \n \r\n
\r\n"; + + "\">\n
\n"; },"useData":true}); templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -130,9 +130,9 @@ templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials return undefined }; - return "
\r\n" + return "
\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"pins") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":4,"column":13}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true}); templates['header.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -142,11 +142,11 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"createButton") : stack1), depth0)) != null ? stack1 : "") - + "\r\n
\r\n
\r\n \n
\n \r\n
\r\n"; + + "\">\n
\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -155,9 +155,9 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return " \n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -166,13 +166,13 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\r\n
\r\n \n
\n \"Pinset\"\r\n
\r\n\r\n
\r\n " + + "\" alt=\"Pinset\" class=\"header__icon\" />\n
\n\n
\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"searchInput") : stack1), depth0)) != null ? stack1 : "") - + "\r\n
\r\n\r\n" + + "\n
\n\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"isAuthorized") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":10,"column":1},"end":{"line":21,"column":8}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true}); templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -184,13 +184,13 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\r\n \n \r\n
\r\n

" + + "\">\n

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n

" + + "

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\r\n
\r\n
\r\n"; + + " Followers

\n
\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -201,20 +201,20 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\r\n
\r\n \n
\n \r\n
\n
\r\n \"Preview\"\r\n
\r\n
\r\n" + + "\">\n \"Preview\"\n
\n
\n" + ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"imageOnly") : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":1},"end":{"line":16,"column":12}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true}); templates['preview.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return " \"bookmark\r\n"; + return " \"bookmark\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"bookmark\r\n"; + return " \"bookmark\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -223,21 +223,21 @@ templates['preview.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\r\n
\r\n
\r\n \n
\n
\n \r\n
\r\n

" + + "\">\n

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n

" + + "

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Сохранить

\r\n \"expand\"\r\n
\r\n
\r\n
\r\n\r\n \n
\n
\n\n
\n
\n

Сохранить

\n \"expand\"\n
\n
\n
\n\n \"Preview\"\r\n\r\n
\r\n
\r\n \"more\"\r\n
\r\n" + + "\" alt=\"Preview\">\n\n
\n
\n \"more\"\n
\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"Bookmarked") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":15}}})) != null ? stack1 : "") - + " \"comment\"\r\n \"share\"\r\n
\r\n\r\n
\r\n
\r\n

" + + " \"comment\"\n \"share\"\n

\n\n
\n
\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"ViewsNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n \"bookmark\"\r\n
\r\n
\r\n

" + + "

\n \"bookmark\"\n
\n
\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"BookmarksNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n \"bookmark\"\r\n
\r\n
\r\n
\r\n"; + + "

\n \"bookmark\"\n
\n
\n
\n"; },"useData":true}); templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -247,11 +247,11 @@ templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\r\n
\r\n " + return "
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":3,"column":25}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n " + + "\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"boardsList") || (depth0 != null ? lookupProperty(depth0,"boardsList") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"boardsList","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n \r\n \r\n
\r\n
\r\n"; + + "\n
\n \n \n
\n
\n"; },"useData":true}); templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -267,7 +267,7 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Download") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":56},"end":{"line":4,"column":135}}})) != null ? stack1 : "") + ">" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"Text") : depth0), depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"2":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -287,12 +287,12 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, return undefined }; - return "
\r\n
\r\n" + return "
\n
\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"options") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":5,"column":17}}})) != null ? stack1 : "") - + "
\r\n
\r\n"; + + "
\n
\n"; },"useData":true}); templates['drop-down-menu.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "\r\n"; + return "\n"; },"useData":true}); templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -304,9 +304,9 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return " \r\n \n \"icon\"\r\n \r\n"; + + "\" alt=\"icon\" />\n \n"; },"3":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -372,23 +372,23 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return undefined }; - return "
\r\n
\n"; },"useData":true}); templates['input.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "input-error"; @@ -402,7 +402,7 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return " \r\n"; + + "\n"; },"5":function(container,depth0,helpers,partials,data) { var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -411,9 +411,9 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \r\n " + return " \n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageLeft") || (depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageLeft","hash":{},"data":data,"loc":{"start":{"line":10,"column":3},"end":{"line":10,"column":23}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n \r\n"; + + "\n \n \n"; },"7":function(container,depth0,helpers,partials,data) { return " input__text-padding-left "; },"9":function(container,depth0,helpers,partials,data) { @@ -428,11 +428,11 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \r\n " + return " \n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageRight") || (depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageRight","hash":{},"data":data,"loc":{"start":{"line":21,"column":3},"end":{"line":21,"column":24}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n \r\n"; + + "\n \n \n"; },"15":function(container,depth0,helpers,partials,data) { - return "
\r\n
\r\n"; + return "
\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -445,27 +445,27 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial + alias4(((helper = (helper = lookupProperty(helpers,"inputSize") || (depth0 != null ? lookupProperty(depth0,"inputSize") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"inputSize","hash":{},"data":data,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":41}}}) : helper))) + " " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Error") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":42},"end":{"line":1,"column":73}}})) != null ? stack1 : "") - + "\">\r\n\r\n" + + "\">\n\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputLabelText") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":5,"column":8}}})) != null ? stack1 : "") - + "\r\n
\r\n" + + "\n
\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":2},"end":{"line":13,"column":9}}})) != null ? stack1 : "") - + "\r\n \r\n\r\n" + + " />\n\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":2},"end":{"line":24,"column":9}}})) != null ? stack1 : "") - + "
\r\n\r\n" + + "
\n\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputHelperText") : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":27,"column":1},"end":{"line":30,"column":8}}})) != null ? stack1 : "") - + "\r\n\r\n"; + + "\n\n"; },"useData":true}); templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -475,9 +475,9 @@ templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":funct return undefined }; - return "
\r\n \"search\"\r\n \n \"search\"\n \r\n \"clear\"\r\n
\r\n"; + + "\" name=\"search-input\">\n \"clear\"\n\n"; },"useData":true}); templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -487,15 +487,15 @@ templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n " + return "
\n
\n \n
\n
\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"saveButton") || (depth0 != null ? lookupProperty(depth0,"saveButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"saveButton","hash":{},"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}}}) : helper))) != null ? stack1 : "") - + "\r\n " + + "\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"rewardButton") || (depth0 != null ? lookupProperty(depth0,"rewardButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"rewardButton","hash":{},"data":data,"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":34}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n \"bookmark\r\n \"comment\"\r\n \"share\"\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

" + + "\n

\n
\n \"bookmark\n \"comment\"\n \"share\"\n
\n
\n
\n
\n \n
\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n

" + + "

\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\r\n
\r\n
\r\n
\r\n 1 месяц назад\r\n
\r\n
\r\n Россия, Москва\r\n
\r\n
\r\n
\r\n Готовы к будущему ? Красочный киберпанковский головной убор\r\n
\r\n
\r\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\r\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\r\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\r\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \r\n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\r\n
\r\n \r\n
\r\n 11 комментариев\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"; + + " Followers

\n
\n
\n
\n 1 месяц назад\n
\n
\n Россия, Москва\n
\n
\n
\n Готовы к будущему ? Красочный киберпанковский головной убор\n
\n
\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\n
\n
\n Ссылка на пин\n
\n
\n 11 комментариев\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n
\n
\n"; },"useData":true}); templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -507,9 +507,9 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return " \"Image\"\r\n"; + + "\" alt=\"Image\">\n"; },"3":function(container,depth0,helpers,partials,data) { - return "
\r\n \"checkphoto\"\r\n
\r\n
\r\n выберите файл или перетащите его сюда\r\n
\r\n"; + return "
\n \"checkphoto\"\n
\n
\n выберите файл или перетащите его сюда\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -518,22 +518,22 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "\r\n
\r\n
\r\n
\r\n" + return "\n
\n
\n
\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Image") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":14,"column":19}}})) != null ? stack1 : "") - + "
\r\n \r\n
\r\n
\r\n
\r\n " + + "
\n \n
\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"TitleInput") || (depth0 != null ? lookupProperty(depth0,"TitleInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"TitleInput","hash":{},"data":data,"loc":{"start":{"line":20,"column":12},"end":{"line":20,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n " + + "\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"DescriptionInput") || (depth0 != null ? lookupProperty(depth0,"DescriptionInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"DescriptionInput","hash":{},"data":data,"loc":{"start":{"line":23,"column":12},"end":{"line":23,"column":34}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n " + + "\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"PublishButton") || (depth0 != null ? lookupProperty(depth0,"PublishButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"PublishButton","hash":{},"data":data,"loc":{"start":{"line":30,"column":12},"end":{"line":30,"column":31}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"; + + "\n
\n
\n
\n\n\n\n\n\n\n\n\n"; },"useData":true}); templates['login.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -542,15 +542,15 @@ templates['login.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return "
\r\n Главная\r\n
\r\n \r\n
\r\n
\n Главная\n
\n \n
\n \r\n" + + "\">\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n
\r\n Нет аккаунта? " + + "\n \n
\n Нет аккаунта? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":36},"end":{"line":18,"column":60}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n
\r\n
\r\n"; + + "\n
\n
\n
\n\n"; },"useData":true}); templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -560,11 +560,11 @@ templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(cont return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\r\n " + + "\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"grid") || (depth0 != null ? lookupProperty(depth0,"grid") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"grid","hash":{},"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":14}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n"; + + "\n
\n"; },"useData":true}); templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -583,23 +583,23 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\r\n \n \""\r\n \"Details\"\r\n
\n \"Details\"\n
\r\n
\r\n

" + + "\">\n

\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"title") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n" + + "

\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depths[1] != null ? lookupProperty(depths[1],"profile") : depths[1])) != null ? lookupProperty(stack1,"currentUser") : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":24},"end":{"line":14,"column":31}}})) != null ? stack1 : "") - + "
\r\n
\r\n
\r\n
\r\n

" + + "

\n
\n
\n
\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"bookmarkedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n \"Bookmark\"\r\n
\r\n
\r\n

" + + "

\n \"Bookmark\"\n
\n
\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"rewardedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n \"Pinset\"\r\n
\r\n
\r\n
\r\n

" + + "

\n \"Pinset\"\n
\n
\n
\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"lastModifyTime") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n
\r\n
\r\n
\r\n
\r\n"; + + "

\n
\n
\n
\n \n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -610,9 +610,9 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"private") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":28},"end":{"line":13,"column":35}}})) != null ? stack1 : ""); },"4":function(container,depth0,helpers,partials,data) { - return " \"Private\"\r\n"; + return " \"Private\"\n"; },"6":function(container,depth0,helpers,partials,data) { - return "

По вашему запросу ничего не найдено

\r\n"; + return "

По вашему запросу ничего не найдено

\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -621,12 +621,12 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\r\n" + return "
\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.program(6, data, 0, blockParams, depths),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":36,"column":11}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true,"useDepths":true}); templates['profile.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return "
\r\n \"Settings\"\r\n
\r\n"; + return "
\n \"Settings\"\n
\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -635,21 +635,21 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"chatButton") : stack1), depth0)) != null ? stack1 : "") - + "\r\n " + + "\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"subscribeButton") : stack1), depth0)) != null ? stack1 : "") - + "\r\n
\r\n"; + + "\n
\n"; },"5":function(container,depth0,helpers,partials,data) { - return " \"VK\"\r\n"; + return " \"VK\"\n"; },"7":function(container,depth0,helpers,partials,data) { - return " \"Telegram\"\r\n"; + return " \"Telegram\"\n"; },"9":function(container,depth0,helpers,partials,data) { - return " \"Github\"\r\n"; + return " \"Github\"\n"; },"11":function(container,depth0,helpers,partials,data) { - return " \"Pinterest\"\r\n"; + return " \"Pinterest\"\n"; },"13":function(container,depth0,helpers,partials,data) { - return " \r\n
\r\n

Мои доски

\r\n \"Create\"\r\n
\r\n"; + return " \n
\n

Мои доски

\n \"Create\"\n
\n"; },"15":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -658,9 +658,9 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return " \n
\n

Доски пользователя

\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, alias5=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -669,49 +669,49 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\r\n\r\n
\r\n \r\n"; + + "\n
\n
\n\n
\n"; },"useData":true}); templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -720,17 +720,17 @@ templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\r\n Главная\r\n
\r\n \r\n
\r\n
\n Главная\n
\n \n
\n \r\n" + + "\">\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n
\r\n Уже зарегистрированы? " + + "\n \n
\n Уже зарегистрированы? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":44},"end":{"line":18,"column":68}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n
\r\n
\r\n"; + + "\n
\n
\n
\n\n"; },"useData":true}); templates['unknown.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "
\r\n Главная\r\n

404 страница не найдена

\r\n
\r\n"; + return "
\n Главная\n

404 страница не найдена

\n
\n"; },"useData":true}); })(); \ No newline at end of file From e4a578e2f1588b4a4b0231621f0bbcb98ed0135e Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sat, 9 Nov 2024 10:29:45 +0300 Subject: [PATCH 07/18] add edit_pin page btn --- public/pages/main/main.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/pages/main/main.js b/public/pages/main/main.js index a23be8c..e987766 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -69,6 +69,15 @@ export class MainPageComponent extends BaseComponent { true ); + const createBtn = document.querySelector( + '.header__create-btn-container button' + ); + console.log('createBtn', createBtn); + createBtn.addEventListener('click', (event) => { + event.preventDefault(); + app.render(ROUTES.editPin); + }); + // Listeners this.addLogoListener(); this.addLoginBtnListener(); From 352a99c53e5a17466975727b0265ca9315c1dc3b Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sat, 9 Nov 2024 11:25:42 +0300 Subject: [PATCH 08/18] final commit --- public/components/complex/header/header.js | 90 ++++++++++++---------- public/pages/main/main.js | 21 ++--- 2 files changed, 63 insertions(+), 48 deletions(-) diff --git a/public/components/complex/header/header.js b/public/components/complex/header/header.js index d9837be..3b2b943 100644 --- a/public/components/complex/header/header.js +++ b/public/components/complex/header/header.js @@ -14,43 +14,55 @@ import { headerConfig } from '../../../constants/config.js'; * @class */ export class HeaderComponent extends BaseComponent { - #config; - #isAuth; - - /** - * Creates an instance of HeaderComponent. - * - * @constructor - * @param {HTMLElement} parent - The parent element where the header will be rendered. - * @param {Object} [state] - Optional initial state to override default state. - */ - constructor(parent, authState) { - super(parent); - this.#config = headerConfig; - this.#isAuth = authState; - } - - /** - * Renders the header template to the parent element. - * It creates buttons for navigation, login, register, and profile based on the user's login status. - * - * @returns {string} - The rendered HTML template. - */ - renderTemplate() { - // Get and compile the Handlebars template - const template = Handlebars.templates['header.hbs']; - - const renderedTemplate = template({ - header: { - logoUrl: this.#config.LogoUrl, - profileUrl: this.#config.ProfileUrl, - searchInput: new SeachInput(this.Parent, { Placeholder: this.#config.Placeholder }).renderTemplate(), - isAuthorized: this.#isAuth, - loginButton: new Button(this.Parent, this.#config.LoginButton).renderTemplate(), - createButton: new Button(this.Parent, this.#config.CreateButton).renderTemplate(), - } - }); - - return renderedTemplate; - } + #config; + #isAuth; + + /** + * Creates an instance of HeaderComponent. + * + * @constructor + * @param {HTMLElement} parent - The parent element where the header will be rendered. + * @param {Object} [state] - Optional initial state to override default state. + */ + constructor(parent, authState) { + super(parent); + this.#config = headerConfig; + this.#isAuth = authState; + } + + /** + * Renders the header template to the parent element. + * It creates buttons for navigation, login, register, and profile based on the user's login status. + * + * @returns {string} - The rendered HTML template. + */ + renderTemplate() { + // Get and compile the Handlebars template + const template = Handlebars.templates['header.hbs']; + + const renderedTemplate = template({ + header: { + logoUrl: this.#config.LogoUrl, + profileUrl: this.#config.ProfileUrl, + searchInput: new SeachInput(this.Parent, { + Placeholder: this.#config.Placeholder, + }).renderTemplate(), + isAuthorized: this.#isAuth, + loginButton: new Button( + this.Parent, + this.#config.LoginButton + ).renderTemplate(), + createButton: new Button( + this.Parent, + this.#config.CreateButton + ).renderTemplate(), + }, + }); + + return renderedTemplate; + } + + isAuthorized() { + return this.#isAuth; + } } diff --git a/public/pages/main/main.js b/public/pages/main/main.js index e987766..68abe8e 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -42,9 +42,10 @@ export class MainPageComponent extends BaseComponent { const template = Handlebars.templates['main.hbs']; const grid = new Grid(this.Parent, this.#pins, true); + const headerPart = new Header(this.Parent, await isAuthorized()); const renderedTemplate = template({ - header: new Header(this.Parent, await isAuthorized()).renderTemplate(), + header: headerPart.renderTemplate(), grid: grid.renderTemplate(), }); console.log(renderedTemplate); @@ -69,14 +70,16 @@ export class MainPageComponent extends BaseComponent { true ); - const createBtn = document.querySelector( - '.header__create-btn-container button' - ); - console.log('createBtn', createBtn); - createBtn.addEventListener('click', (event) => { - event.preventDefault(); - app.render(ROUTES.editPin); - }); + if (headerPart.isAuthorized()) { + const createBtn = document.querySelector( + '.header__create-btn-container button' + ); + console.log('createBtn', createBtn); + createBtn.addEventListener('click', (event) => { + event.preventDefault(); + app.render(ROUTES.editPin); + }); + } // Listeners this.addLogoListener(); From f376b23e575a19e68422799801a6463377c7fea0 Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Sat, 9 Nov 2024 11:39:36 +0300 Subject: [PATCH 09/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BA=20=D0=B4=D0=B5=D0=BF=D0=BB=D0=BE=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server.js b/server/server.js index 2ed035d..33316c7 100644 --- a/server/server.js +++ b/server/server.js @@ -12,7 +12,7 @@ app.get('*', (req, res) => { res.sendFile(path.join(__dirname, '../public', 'index.html')); }); -const port = process.env.PORT || 3000; +const port = process.env.PORT || 8079; app.listen(port, function () { console.log(`Server listening on port ${port}`); From 292603cf83b4ee24bfe9206b3ac5fca2efa3584c Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sat, 9 Nov 2024 11:43:30 +0300 Subject: [PATCH 10/18] changed color of buttons --- public/components/button/button.css | 2 +- public/pages/editPin/editPin.css | 1 + public/pages/login/login.css | 2 +- public/pages/login/login.hbs | 4 ++-- public/pages/signup/signup.hbs | 4 ++-- public/precompiled.js | 4 ++-- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/public/components/button/button.css b/public/components/button/button.css index 2b94f6f..f4a3795 100644 --- a/public/components/button/button.css +++ b/public/components/button/button.css @@ -19,7 +19,7 @@ } .button.link { - color: var(--project-primary-red); + color: var(--pinset-main-color-purple); padding: 0px 10px; background-color: transparent; text-decoration: underline; diff --git a/public/pages/editPin/editPin.css b/public/pages/editPin/editPin.css index 85bcaa7..f6edd8f 100644 --- a/public/pages/editPin/editPin.css +++ b/public/pages/editPin/editPin.css @@ -108,6 +108,7 @@ html, body { .editpin__submit button { height: 100%; width: 100%; + background-color: var(--pinset-main-color-purple); } diff --git a/public/pages/login/login.css b/public/pages/login/login.css index 4d9e8b6..22e7e80 100644 --- a/public/pages/login/login.css +++ b/public/pages/login/login.css @@ -83,7 +83,7 @@ .form-auth form button { cursor: pointer; margin: 20px; - background-color: var(--project-primary-red); + background-color: var(--pinset-main-color-purple); color: white; border: none; padding: .75rem 1.5rem; diff --git a/public/pages/login/login.hbs b/public/pages/login/login.hbs index 1185bf0..1b868cb 100644 --- a/public/pages/login/login.hbs +++ b/public/pages/login/login.hbs @@ -3,8 +3,8 @@
diff --git a/public/pages/signup/signup.hbs b/public/pages/signup/signup.hbs index 68e766c..39b3537 100644 --- a/public/pages/signup/signup.hbs +++ b/public/pages/signup/signup.hbs @@ -3,8 +3,8 @@
diff --git a/public/precompiled.js b/public/precompiled.js index 058448c..4c28f9e 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -542,7 +542,7 @@ templates['login.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return "
\n Главная\n
\n \n
\n
\n Главная\n
\n \n
\n \n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") @@ -720,7 +720,7 @@ templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n Главная\n
\n \n
\n \n Главная\n
\n \n
\n \n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") From a85d13a3813891810e2d4202d5e2c88225c64899 Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Sat, 9 Nov 2024 11:49:01 +0300 Subject: [PATCH 11/18] =?UTF-8?q?=D0=BC=D0=B8=D0=BD=D0=BE=D1=80=D0=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/precompiled.js | 288 +++++++++++++++++++++--------------------- 1 file changed, 144 insertions(+), 144 deletions(-) diff --git a/public/precompiled.js b/public/precompiled.js index 058448c..cc3a755 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -19,23 +19,23 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return "
\n \r\n \n
\n \r\n
\r\n \"cover\"\n
\n
\r\n \n" + + "\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Private") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":16},"end":{"line":12,"column":23}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"private\"\n"; + return " \"private\"\r\n"; },"5":function(container,depth0,helpers,partials,data) { - return "

Здесь будут отображены доски

\n"; + return "

Здесь будут отображены доски

\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -44,9 +44,9 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return undefined }; - return "
\n" + return "
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(5, data, 0),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":17,"column":11}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['button.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "disabled"; @@ -92,13 +92,13 @@ templates['button.hbs'] = template({"1":function(container,depth0,helpers,partia + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"active") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":77},"end":{"line":1,"column":104}}})) != null ? stack1 : "") + "\" " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"disabled") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":106},"end":{"line":2,"column":26}}})) != null ? stack1 : "") - + ">\n " + + ">\r\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":3,"column":65}}})) != null ? stack1 : "") - + "\n " + + "\r\n " + alias4(((helper = (helper = lookupProperty(helpers,"label") || (depth0 != null ? lookupProperty(depth0,"label") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data,"loc":{"start":{"line":4,"column":1},"end":{"line":4,"column":10}}}) : helper))) - + "\n " + + "\r\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconRight") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":68}}})) != null ? stack1 : "") - + "\n\n"; + + "\r\n\r\n"; },"useData":true}); templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -110,18 +110,18 @@ templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":functi return "
\n \r\n \n
\n"; + + "\">\r\n
\r\n"; },"useData":true}); templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -130,9 +130,9 @@ templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials return undefined }; - return "
\n" + return "
\r\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"pins") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":4,"column":13}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['header.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -142,11 +142,11 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"createButton") : stack1), depth0)) != null ? stack1 : "") - + "\n
\n
\n \r\n
\r\n \n
\n"; + + "\">\r\n
\r\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -155,9 +155,9 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return " \r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -166,13 +166,13 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n
\n \r\n
\r\n \"Pinset\"\n
\n\n
\n " + + "\" alt=\"Pinset\" class=\"header__icon\" />\r\n
\r\n\r\n
\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"searchInput") : stack1), depth0)) != null ? stack1 : "") - + "\n
\n\n" + + "\r\n
\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"isAuthorized") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":10,"column":1},"end":{"line":21,"column":8}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -184,13 +184,13 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\n \r\n \n
\n

" + + "\">\r\n

\r\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") - + "

\n

" + + "

\r\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\n
\n
\n"; + + " Followers

\r\n
\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -201,20 +201,20 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\n
\n \r\n
\r\n \n
\r\n
\n \"Preview\"\n
\n
\n" + + "\">\r\n \"Preview\"\r\n
\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"imageOnly") : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":1},"end":{"line":16,"column":12}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true}); templates['preview.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return " \"bookmark\n"; + return " \"bookmark\r\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"bookmark\n"; + return " \"bookmark\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -223,21 +223,21 @@ templates['preview.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n
\n
\n \r\n
\r\n
\r\n \n
\n

" + + "\">\r\n

\r\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") - + "

\n

" + + "

\r\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\n
\n
\n\n
\n
\n

Сохранить

\n \"expand\"\n
\n
\n
\n\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

Сохранить

\r\n \"expand\"\r\n
\r\n
\r\n
\r\n\r\n \"Preview\"\n\n
\n
\n \"more\"\n
\n" + + "\" alt=\"Preview\">\r\n\r\n
\r\n
\r\n \"more\"\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"Bookmarked") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":15}}})) != null ? stack1 : "") - + " \"comment\"\n \"share\"\n
\n\n
\n
\n

" + + " \"comment\"\r\n \"share\"\r\n

\r\n\r\n
\r\n
\r\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"ViewsNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\n \"bookmark\"\n
\n
\n

" + + "

\r\n \"bookmark\"\r\n
\r\n
\r\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"BookmarksNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\n \"bookmark\"\n
\n
\n
\n"; + + "

\r\n \"bookmark\"\r\n
\r\n
\r\n
\r\n"; },"useData":true}); templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -247,11 +247,11 @@ templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\n
\n " + return "
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":3,"column":25}}}) : helper))) != null ? stack1 : "") - + "\n
\n " + + "\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"boardsList") || (depth0 != null ? lookupProperty(depth0,"boardsList") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"boardsList","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n
\n \n \n
\n
\n"; + + "\r\n
\r\n \r\n \r\n
\r\n
\r\n"; },"useData":true}); templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -267,7 +267,7 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Download") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":56},"end":{"line":4,"column":135}}})) != null ? stack1 : "") + ">" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"Text") : depth0), depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"2":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -287,12 +287,12 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, return undefined }; - return "
\n
\n" + return "
\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"options") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":5,"column":17}}})) != null ? stack1 : "") - + "
\n
\n"; + + "
\r\n
\r\n"; },"useData":true}); templates['drop-down-menu.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "\n"; + return "\r\n"; },"useData":true}); templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -304,9 +304,9 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return " \n \r\n \"icon\"\n \n"; + + "\" alt=\"icon\" />\r\n \r\n"; },"3":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -372,23 +372,23 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return undefined }; - return "
\n
\r\n"; },"useData":true}); templates['input.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "input-error"; @@ -402,7 +402,7 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return " \n"; + + "\r\n"; },"5":function(container,depth0,helpers,partials,data) { var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -411,9 +411,9 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \n " + return " \r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageLeft") || (depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageLeft","hash":{},"data":data,"loc":{"start":{"line":10,"column":3},"end":{"line":10,"column":23}}}) : helper))) != null ? stack1 : "") - + "\n \n \n"; + + "\r\n \r\n \r\n"; },"7":function(container,depth0,helpers,partials,data) { return " input__text-padding-left "; },"9":function(container,depth0,helpers,partials,data) { @@ -428,11 +428,11 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \n " + return " \r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageRight") || (depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageRight","hash":{},"data":data,"loc":{"start":{"line":21,"column":3},"end":{"line":21,"column":24}}}) : helper))) != null ? stack1 : "") - + "\n \n \n"; + + "\r\n \r\n \r\n"; },"15":function(container,depth0,helpers,partials,data) { - return "
\n
\n"; + return "
\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -445,27 +445,27 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial + alias4(((helper = (helper = lookupProperty(helpers,"inputSize") || (depth0 != null ? lookupProperty(depth0,"inputSize") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"inputSize","hash":{},"data":data,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":41}}}) : helper))) + " " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Error") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":42},"end":{"line":1,"column":73}}})) != null ? stack1 : "") - + "\">\n\n" + + "\">\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputLabelText") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":5,"column":8}}})) != null ? stack1 : "") - + "\n
\n" + + "\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":2},"end":{"line":13,"column":9}}})) != null ? stack1 : "") - + "\n \n\n" + + " />\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":2},"end":{"line":24,"column":9}}})) != null ? stack1 : "") - + "
\n\n" + + "
\r\n\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputHelperText") : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":27,"column":1},"end":{"line":30,"column":8}}})) != null ? stack1 : "") - + "\n
\n"; + + "\r\n
\r\n"; },"useData":true}); templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -475,9 +475,9 @@ templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":funct return undefined }; - return "
\n \"search\"\n \r\n \"search\"\r\n \n \"clear\"\n
\n"; + + "\" name=\"search-input\">\r\n \"clear\"\r\n
\r\n"; },"useData":true}); templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -487,15 +487,15 @@ templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\n
\n \n
\n
\n
\n
\n " + return "
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"saveButton") || (depth0 != null ? lookupProperty(depth0,"saveButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"saveButton","hash":{},"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}}}) : helper))) != null ? stack1 : "") - + "\n " + + "\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"rewardButton") || (depth0 != null ? lookupProperty(depth0,"rewardButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"rewardButton","hash":{},"data":data,"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":34}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n \"bookmark\n \"comment\"\n \"share\"\n
\n
\n
\n
\n \n
\n

" + + "\r\n

\r\n
\r\n \"bookmark\r\n \"comment\"\r\n \"share\"\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") - + "

\n

" + + "

\r\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\n
\n
\n
\n 1 месяц назад\n
\n
\n Россия, Москва\n
\n
\n
\n Готовы к будущему ? Красочный киберпанковский головной убор\n
\n
\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\n
\n \n
\n 11 комментариев\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n
\n
\n"; + + " Followers

\r\n
\r\n
\r\n
\r\n 1 месяц назад\r\n
\r\n
\r\n Россия, Москва\r\n
\r\n
\r\n
\r\n Готовы к будущему ? Красочный киберпанковский головной убор\r\n
\r\n
\r\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\r\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\r\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\r\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \r\n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\r\n
\r\n \r\n
\r\n 11 комментариев\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"; },"useData":true}); templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -507,9 +507,9 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return " \"Image\"\n"; + + "\" alt=\"Image\">\r\n"; },"3":function(container,depth0,helpers,partials,data) { - return "
\n \"checkphoto\"\n
\n
\n выберите файл или перетащите его сюда\n
\n"; + return "
\r\n \"checkphoto\"\r\n
\r\n
\r\n выберите файл или перетащите его сюда\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -518,22 +518,22 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "\n
\n
\n
\n" + return "\r\n
\r\n
\r\n
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Image") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":14,"column":19}}})) != null ? stack1 : "") - + "
\n \n
\n
\n
\n " + + "
\r\n \r\n
\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"TitleInput") || (depth0 != null ? lookupProperty(depth0,"TitleInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"TitleInput","hash":{},"data":data,"loc":{"start":{"line":20,"column":12},"end":{"line":20,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n " + + "\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"DescriptionInput") || (depth0 != null ? lookupProperty(depth0,"DescriptionInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"DescriptionInput","hash":{},"data":data,"loc":{"start":{"line":23,"column":12},"end":{"line":23,"column":34}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n " + + "\r\n
\r\n
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"PublishButton") || (depth0 != null ? lookupProperty(depth0,"PublishButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"PublishButton","hash":{},"data":data,"loc":{"start":{"line":30,"column":12},"end":{"line":30,"column":31}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n\n\n\n\n\n\n\n\n"; + + "\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"; },"useData":true}); templates['login.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -542,15 +542,15 @@ templates['login.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return "
\n Главная\n
\n \n
\n \r\n Главная\r\n
\r\n \r\n
\r\n \n" + + "\">\r\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n \n
\n Нет аккаунта? " + + "\r\n \r\n
\r\n Нет аккаунта? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":36},"end":{"line":18,"column":60}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n
\n"; + + "\r\n
\r\n
\r\n
\r\n
\r\n"; },"useData":true}); templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -560,11 +560,11 @@ templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(cont return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\n " + + "\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"grid") || (depth0 != null ? lookupProperty(depth0,"grid") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"grid","hash":{},"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":14}}}) : helper))) != null ? stack1 : "") - + "\n
\n"; + + "\r\n
\r\n"; },"useData":true}); templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -583,23 +583,23 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\n \r\n \""\n \"Details\"\n
\r\n \"Details\"\r\n
\n
\n

" + + "\">\r\n

\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"title") : depth0), depth0)) != null ? stack1 : "") - + "

\n" + + "

\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depths[1] != null ? lookupProperty(depths[1],"profile") : depths[1])) != null ? lookupProperty(stack1,"currentUser") : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":24},"end":{"line":14,"column":31}}})) != null ? stack1 : "") - + "
\n
\n
\n
\n

" + + "

\r\n
\r\n
\r\n
\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"bookmarkedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\n \"Bookmark\"\n
\n
\n

" + + "

\r\n \"Bookmark\"\r\n
\r\n
\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"rewardedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\n \"Pinset\"\n
\n
\n
\n

" + + "

\r\n \"Pinset\"\r\n
\r\n
\r\n
\r\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"lastModifyTime") : depth0), depth0)) != null ? stack1 : "") - + "

\n
\n
\n
\n
\n"; + + "

\r\n
\r\n
\r\n
\r\n
\r\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -610,9 +610,9 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"private") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":28},"end":{"line":13,"column":35}}})) != null ? stack1 : ""); },"4":function(container,depth0,helpers,partials,data) { - return " \"Private\"\n"; + return " \"Private\"\r\n"; },"6":function(container,depth0,helpers,partials,data) { - return "

По вашему запросу ничего не найдено

\n"; + return "

По вашему запросу ничего не найдено

\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -621,12 +621,12 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\n" + return "
\r\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.program(6, data, 0, blockParams, depths),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":36,"column":11}}})) != null ? stack1 : "") - + "
\n"; + + "
\r\n"; },"useData":true,"useDepths":true}); templates['profile.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return "
\n \"Settings\"\n
\n"; + return "
\r\n \"Settings\"\r\n
\r\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -635,21 +635,21 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"chatButton") : stack1), depth0)) != null ? stack1 : "") - + "\n " + + "\r\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"subscribeButton") : stack1), depth0)) != null ? stack1 : "") - + "\n
\n"; + + "\r\n
\r\n"; },"5":function(container,depth0,helpers,partials,data) { - return " \"VK\"\n"; + return " \"VK\"\r\n"; },"7":function(container,depth0,helpers,partials,data) { - return " \"Telegram\"\n"; + return " \"Telegram\"\r\n"; },"9":function(container,depth0,helpers,partials,data) { - return " \"Github\"\n"; + return " \"Github\"\r\n"; },"11":function(container,depth0,helpers,partials,data) { - return " \"Pinterest\"\n"; + return " \"Pinterest\"\r\n"; },"13":function(container,depth0,helpers,partials,data) { - return " \n
\n

Мои доски

\n \"Create\"\n
\n"; + return " \r\n
\r\n

Мои доски

\r\n \"Create\"\r\n
\r\n"; },"15":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -658,9 +658,9 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return " \r\n
\r\n

Доски пользователя

\r\n
\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, alias5=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -669,49 +669,49 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\n " + return "
\r\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\n\n
\n \n"; + + "\r\n
\r\n
\r\n\r\n
\r\n"; },"useData":true}); templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\n"; + + "\r\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -720,17 +720,17 @@ templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\n Главная\n
\n \n
\n
\r\n Главная\r\n
\r\n \r\n
\r\n \n" + + "\">\r\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\n \n
\n Уже зарегистрированы? " + + "\r\n \r\n
\r\n Уже зарегистрированы? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":44},"end":{"line":18,"column":68}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n
\n"; + + "\r\n
\r\n
\r\n
\r\n
\r\n"; },"useData":true}); templates['unknown.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "
\n Главная\n

404 страница не найдена

\n
\n"; + return "
\r\n Главная\r\n

404 страница не найдена

\r\n
\r\n"; },"useData":true}); })(); \ No newline at end of file From 2032d8c9341049a6e2744f6818f6b8afa7aec10f Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Sat, 9 Nov 2024 11:50:43 +0300 Subject: [PATCH 12/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=BE=D1=83=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/constants/api.js | 2 +- public/pages/editPin/editPin.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/constants/api.js b/public/constants/api.js index 1097586..f0e6598 100644 --- a/public/constants/api.js +++ b/public/constants/api.js @@ -2,7 +2,7 @@ import { ROUTES } from './routes.js'; -const BASE = 'http://localhost:8080'; +const BASE = 'http://37.139.41.77:8080'; export const BACKEND_FEED_ROUTE = `${BASE}${ROUTES.main}`; export const BACKEND_LOGIN_ROUTE = `${BASE}${ROUTES.login}`; diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index 1dc8841..fa14c13 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -130,7 +130,7 @@ export default class EditPinComponent extends BaseComponent { // body: requestBody, // }); - await fetch('http://localhost:8080/create-pin', { + await fetch('http://37.139.41.77:8080/create-pin', { method: 'POST', mode: 'cors', credentials: 'include', From 9f1e5019387aca2ac9d487f30df8b417e917aae0 Mon Sep 17 00:00:00 2001 From: Ivan Ivashkin Date: Sat, 9 Nov 2024 11:57:26 +0300 Subject: [PATCH 13/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=80=D0=BE=D1=83=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/pages/editPin/editPin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index fa14c13..022be59 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -87,7 +87,7 @@ export default class EditPinComponent extends BaseComponent { const formData = new FormData(); formData.append('file', file); - const response = await fetch('http://localhost:8080/image/upload', { + const response = await fetch('http://37.139.41.77:8079/image/upload', { method: 'POST', body: formData, }); From 7cd581502d6459cd249ee23119166bc48674f125 Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sat, 9 Nov 2024 12:03:45 +0300 Subject: [PATCH 14/18] added create btn --- public/pages/editPin/editPin.js | 4 ++++ server/server.js | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index 022be59..08fb672 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -2,6 +2,8 @@ import { BaseComponent } from '../../components/base/base.js'; import { ButtonComponent as Button } from '../../components/button/button.js'; import { InputComponent } from '../../components/input/input.js'; import { SaveBoxComponent } from '../../components/complex/savebox/savebox.js'; +import { app } from '../../index.js'; +import { ROUTES } from '../../constants/routes.js'; /** * Component that is used to create and edit pins. @@ -143,5 +145,7 @@ export default class EditPinComponent extends BaseComponent { console.log(requestBody); console.log('fetch done successfully'); + this.Parent.innerHTML = ''; + app.renderPage(ROUTES.main); } } diff --git a/server/server.js b/server/server.js index 33316c7..d1f26f2 100644 --- a/server/server.js +++ b/server/server.js @@ -9,11 +9,11 @@ app.use(express.static('./public', { fallthrough: true })); app.use(express.static('./node_modules')); app.get('*', (req, res) => { - res.sendFile(path.join(__dirname, '../public', 'index.html')); + res.sendFile(path.join(__dirname, '../public', 'index.html')); }); -const port = process.env.PORT || 8079; +const port = process.env.PORT || 3000; app.listen(port, function () { - console.log(`Server listening on port ${port}`); + console.log(`Server listening on port ${port}`); }); From bd62a2e34f6b24b54c3f28c39c293e9b16d42224 Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Mon, 18 Nov 2024 16:32:42 +0300 Subject: [PATCH 15/18] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D1=83=D1=8E=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B8=D0=BA=D1=83=20=D1=87=D0=B0=D1=82=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=80=D0=BE=D0=BD=D1=82=D0=B5,=20=D1=81?= =?UTF-8?q?=D0=B2=D1=8F=D0=B7=D0=B0=D0=BB=20=D1=81=20=D0=B1=D1=8D=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/app.js | 735 +++++++++--------- .../complex/messagelist/messagelist.css | 10 + .../complex/messagelist/messagelist.hbs | 5 + .../complex/messagelist/messagelist.js | 32 + .../dialog-preview/dialog-preview.css | 46 ++ .../dialog-preview/dialog-preview.hbs | 13 + .../dialog-preview/dialog-preview.js | 15 + public/components/message/message.css | 19 + public/components/message/message.hbs | 3 + public/components/message/message.js | 25 + public/constants/api.js | 2 +- public/constants/routes.js | 19 +- public/index.css | 4 + public/pages/chat/chat.css | 59 ++ public/pages/chat/chat.hbs | 29 + public/pages/chat/chat.js | 171 ++++ public/pages/editPin/editPin.js | 4 +- public/precompiled.js | 372 +++++---- 18 files changed, 1038 insertions(+), 525 deletions(-) create mode 100644 public/components/complex/messagelist/messagelist.css create mode 100644 public/components/complex/messagelist/messagelist.hbs create mode 100644 public/components/complex/messagelist/messagelist.js create mode 100644 public/components/dialog-preview/dialog-preview.css create mode 100644 public/components/dialog-preview/dialog-preview.hbs create mode 100644 public/components/dialog-preview/dialog-preview.js create mode 100644 public/components/message/message.css create mode 100644 public/components/message/message.hbs create mode 100644 public/components/message/message.js create mode 100644 public/pages/chat/chat.css create mode 100644 public/pages/chat/chat.hbs create mode 100644 public/pages/chat/chat.js diff --git a/public/app.js b/public/app.js index 422dd56..cbb4566 100644 --- a/public/app.js +++ b/public/app.js @@ -9,379 +9,388 @@ import EditPin from './pages/editPin/editPin.js'; import { ProfilePageComponent as ProfilePage } from './pages/profile/profile.js'; - import { ROUTES } from './constants/routes.js'; import { - BACKEND_LOGIN_ROUTE, - BACKEND_SIGNUP_ROUTE, - BACKEND_FEED_ROUTE, - BACKEND_LOGOUT_ROUTE, + BACKEND_LOGIN_ROUTE, + BACKEND_SIGNUP_ROUTE, + BACKEND_FEED_ROUTE, + BACKEND_LOGOUT_ROUTE, } from './constants/api.js'; import { getMethod } from './modules/network.js'; +import { ChatPageComponent } from './pages/chat/chat.js'; /** * Represents core Application class * @class */ export default class App { - handlers = {}; - #structure = {}; - config; - root; - - /** - * Creates an instance of App. - * @constructor - * @param {Object} config - data provided for components propagation - * @param {HTMLElement} root - The parent element where app components will live - */ - constructor(config, root) { - this.config = config; - this.root = root; - } - - /** - * Renders the component depending on what route is given. - * @param {string} pageRoute - the route of the page. - */ - render(pageRoute) { - switch (pageRoute) { - case ROUTES.main: - history.pushState({}, '', ROUTES.main); - this.#renderFeed(); - break; - case ROUTES.login: - history.pushState({}, '', ROUTES.login); - this.#renderLogin(); - break; - case ROUTES.signup: - history.pushState({}, '', ROUTES.signup); - this.#renderSignup(); - break; - case ROUTES.lookPin: - history.pushState({}, '', ROUTES.lookPin); - this.#renderLookPin(); - break; - case ROUTES.editPin: - history.pushState({}, '', ROUTES.editPin); - this.#renderEditPin(); - break; - case ROUTES.createPin: - history.pushState({}, '', ROUTES.createPin); - this.#renderCreatePin(); - break; - case ROUTES.profile: - history.pushState({}, '', ROUTES.profile); - this.#renderProfile(); - break; - default: - this.#handleUnknownRoute(); - break; - } - } - - /** - * Clears all page data if it's needed and renders the page depending on what route is given. - * @param {string} pageRoute - the route of the page. - * @param {boolean} deleteEverything - flag for clearing all page data. - */ - renderPage(pageRoute, deleteEverything = false) { - this.clear(deleteEverything); - this.render(pageRoute); - } - - /** - * Renders login component and saves inputs values if they are typed in. - */ - #renderLookPin() { - const curPin = { - PinID: 3, - AuthorName: 'Mary Jane', - AuthorFollowersNumber: 100, - MediaUrl: - 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }; - const addPin = new LookPin(this.root, curPin); - addPin.renderTemplate(); - } - - #renderEditPin() { - const curPin = { - PinID: 3, - Title: 'Текущее название', - Description: 'Текущее описание', - PinBoard: 'Имя текущей доски', - MediaUrl: - 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', - BoardID: 1, - }; - const editPin = new EditPin(this.root, curPin, true); - editPin.renderTemplate(); - } - - #renderCreatePin() { - const editPin = new EditPin(this.root, null, false); - editPin.renderTemplate(); - } - - #renderLogin() { - const config = this.config.loginConfig; - const login = new Login( - this.root, - config.inputs, - config.button, - config.button_form_footer - ); - login.renderTemplate(); - - login.addSubmitBtnHandler(BACKEND_LOGIN_ROUTE); - login.addInputFocusHandler(); - login.addInputOnChangeHandler(); - login.addInputsSaveHandler(this); - - this.#structure.login = login; - - // Add values to inputs if it's stored - if (this.#structure.signUp) { - const formInputs = document.getElementsByClassName('input'); - const storedValues = this.#structure.signUp.inputsStoredValues; - if (Object.keys(storedValues).length > 0) { - formInputs[0].value = storedValues.login; - formInputs[1].value = storedValues.password; - } - } - } - - /** - * Renders sign up component and saves inputs values if they are typed in. - */ - #renderSignup() { - const config = this.config.signupConfig; - const signUp = new SignUp( - this.root, - config.inputs, - config.button, - config.button_form_footer - ); - signUp.renderTemplate(); - - signUp.addSubmitBtnHandler(BACKEND_SIGNUP_ROUTE); - signUp.addInputFocusHandler(); - signUp.addInputOnChangeHandler(); - signUp.addInputsSaveHandler(this); - - this.#structure.signUp = signUp; - - // Add values to inputs if it's stored - if (this.#structure.login) { - const formInputs = document.getElementsByClassName('input'); - const storedValues = this.#structure.login.inputsStoredValues; - - if (Object.keys(storedValues).length > 0) { - formInputs[2].value = storedValues.login; - formInputs[3].value = storedValues.password; - } - } - } - - /** - * Renders feed including header and pins set - */ - async #renderFeed() { - const pinSet = await getMethod(BACKEND_FEED_ROUTE); - - const mainPage = new MainPageComponent(this.root, pinSet); - mainPage.renderTemplate(); - this.#structure.mainPage = mainPage; - } - - /** - * Handles unknown route request, renders corresponding page template - * @returns {string} - rendered page of unknown route - */ - #handleUnknownRoute() { - if (this.#structure.login) { - this.#structure.login.clearStoredInputsValues(); - } - if (this.#structure.signup) { - this.#structure.signup.clearStoredInputsValues(); - } - if (this.#structure.mainPage) { - this.#structure.mainPage.clearStoredInputsValues(); - } - - this.clear(true); - - const template = Handlebars.templates['unknown.hbs']; - const renderedTemplate = template(); - this.root.innerHTML += renderedTemplate; - - document - .querySelector('.tomain__tap-button') - .addEventListener('click', (event) => { - event.preventDefault(); - - this.root.innerHTML = ''; - this.renderPage(ROUTES.main); - }); - - return renderedTemplate; - } - - #renderProfile() { - const profileState = { - userName: 'Иван Иванов', - userNickname: 'ivanvanov', - avatarUrl: './assets/imgs/bono_avatar.jpg', - followersNumber: 19, - followingsNumber: 60, - personalWebsiteLink: 'https://sales-generator.ru/blog/brend-marketing/', - geolocation: 'Россия, Москва', - bio: `Я — директор по бренд-маркетингу с опытом управления глобальными командами и многомиллионными кампаниями. + handlers = {}; + #structure = {}; + config; + root; + + /** + * Creates an instance of App. + * @constructor + * @param {Object} config - data provided for components propagation + * @param {HTMLElement} root - The parent element where app components will live + */ + constructor(config, root) { + this.config = config; + this.root = root; + } + + /** + * Renders the component depending on what route is given. + * @param {string} pageRoute - the route of the page. + */ + render(pageRoute) { + switch (pageRoute) { + case ROUTES.chat: + history.pushState({}, '', ROUTES.chat); + this.#renderChat(); + break; + case ROUTES.main: + history.pushState({}, '', ROUTES.main); + this.#renderFeed(); + break; + case ROUTES.login: + history.pushState({}, '', ROUTES.login); + this.#renderLogin(); + break; + case ROUTES.signup: + history.pushState({}, '', ROUTES.signup); + this.#renderSignup(); + break; + case ROUTES.lookPin: + history.pushState({}, '', ROUTES.lookPin); + this.#renderLookPin(); + break; + case ROUTES.editPin: + history.pushState({}, '', ROUTES.editPin); + this.#renderEditPin(); + break; + case ROUTES.createPin: + history.pushState({}, '', ROUTES.createPin); + this.#renderCreatePin(); + break; + case ROUTES.profile: + history.pushState({}, '', ROUTES.profile); + this.#renderProfile(); + break; + default: + this.#handleUnknownRoute(); + break; + } + } + + /** + * Clears all page data if it's needed and renders the page depending on what route is given. + * @param {string} pageRoute - the route of the page. + * @param {boolean} deleteEverything - flag for clearing all page data. + */ + renderPage(pageRoute, deleteEverything = false) { + this.clear(deleteEverything); + this.render(pageRoute); + } + + #renderChat() { + const chatPage = new ChatPageComponent(this.root); + chatPage.renderTemplate(); + } + + /** + * Renders login component and saves inputs values if they are typed in. + */ + #renderLookPin() { + const curPin = { + PinID: 3, + AuthorName: 'Mary Jane', + AuthorFollowersNumber: 100, + MediaUrl: + 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + BoardID: 1, + }; + const addPin = new LookPin(this.root, curPin); + addPin.renderTemplate(); + } + + #renderEditPin() { + const curPin = { + PinID: 3, + Title: 'Текущее название', + Description: 'Текущее описание', + PinBoard: 'Имя текущей доски', + MediaUrl: + 'https://images.unsplash.com/photo-1580618432485-1e08c5039909?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmV1cmFsJTIwbmV0d29ya3N8ZW58MHwxfDB8fHwy', + BoardID: 1, + }; + const editPin = new EditPin(this.root, curPin, true); + editPin.renderTemplate(); + } + + #renderCreatePin() { + const editPin = new EditPin(this.root, null, false); + editPin.renderTemplate(); + } + + #renderLogin() { + const config = this.config.loginConfig; + const login = new Login( + this.root, + config.inputs, + config.button, + config.button_form_footer + ); + login.renderTemplate(); + + login.addSubmitBtnHandler(BACKEND_LOGIN_ROUTE); + login.addInputFocusHandler(); + login.addInputOnChangeHandler(); + login.addInputsSaveHandler(this); + + this.#structure.login = login; + + // Add values to inputs if it's stored + if (this.#structure.signUp) { + const formInputs = document.getElementsByClassName('input'); + const storedValues = this.#structure.signUp.inputsStoredValues; + if (Object.keys(storedValues).length > 0) { + formInputs[0].value = storedValues.login; + formInputs[1].value = storedValues.password; + } + } + } + + /** + * Renders sign up component and saves inputs values if they are typed in. + */ + #renderSignup() { + const config = this.config.signupConfig; + const signUp = new SignUp( + this.root, + config.inputs, + config.button, + config.button_form_footer + ); + signUp.renderTemplate(); + + signUp.addSubmitBtnHandler(BACKEND_SIGNUP_ROUTE); + signUp.addInputFocusHandler(); + signUp.addInputOnChangeHandler(); + signUp.addInputsSaveHandler(this); + + this.#structure.signUp = signUp; + + // Add values to inputs if it's stored + if (this.#structure.login) { + const formInputs = document.getElementsByClassName('input'); + const storedValues = this.#structure.login.inputsStoredValues; + + if (Object.keys(storedValues).length > 0) { + formInputs[2].value = storedValues.login; + formInputs[3].value = storedValues.password; + } + } + } + + /** + * Renders feed including header and pins set + */ + async #renderFeed() { + const pinSet = await getMethod(BACKEND_FEED_ROUTE); + + const mainPage = new MainPageComponent(this.root, pinSet); + mainPage.renderTemplate(); + this.#structure.mainPage = mainPage; + } + + /** + * Handles unknown route request, renders corresponding page template + * @returns {string} - rendered page of unknown route + */ + #handleUnknownRoute() { + if (this.#structure.login) { + this.#structure.login.clearStoredInputsValues(); + } + if (this.#structure.signup) { + this.#structure.signup.clearStoredInputsValues(); + } + if (this.#structure.mainPage) { + this.#structure.mainPage.clearStoredInputsValues(); + } + + this.clear(true); + + const template = Handlebars.templates['unknown.hbs']; + const renderedTemplate = template(); + this.root.innerHTML += renderedTemplate; + + document + .querySelector('.tomain__tap-button') + .addEventListener('click', (event) => { + event.preventDefault(); + + this.root.innerHTML = ''; + this.renderPage(ROUTES.main); + }); + + return renderedTemplate; + } + + #renderProfile() { + const profileState = { + userName: 'Иван Иванов', + userNickname: 'ivanvanov', + avatarUrl: './assets/imgs/bono_avatar.jpg', + followersNumber: 19, + followingsNumber: 60, + personalWebsiteLink: 'https://sales-generator.ru/blog/brend-marketing/', + geolocation: 'Россия, Москва', + bio: `Я — директор по бренд-маркетингу с опытом управления глобальными командами и многомиллионными кампаниями. Ее опыт в области стратегии бренда, визуального дизайна и управления учетными записями определяет ее осознанный, но...`, - currentUser: true, - socialNetworks: { - vk: true, - telegram: true, - github: true, - pinterest: true, - }, - boards: [ - { - boardID: 1, - coverUrl: './assets/imgs/bookmarks-board-cover.jpg', - title: 'Закладки', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 2, - coverUrl: './assets/imgs/michael.jpg', - title: 'Singers', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 3, - coverUrl: './assets/imgs/art.jpg', - title: 'Work-of-art', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: false, - }, - { - boardID: 4, - coverUrl: './assets/imgs/recipe.jpg', - title: 'Recipes', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 5, - coverUrl: './assets/imgs/michael.jpg', - title: 'Singers', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 6, - coverUrl: './assets/imgs/avatar.jpg', - title: 'Singers', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: false, - }, - { - boardID: 7, - coverUrl: './assets/imgs/michael.jpg', - title: 'Singers', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 8, - coverUrl: './assets/imgs/avatar.jpg', - title: 'Work-of-art', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: false, - }, - { - boardID: 9, - coverUrl: './assets/imgs/art.jpg', - title: 'Work-of-art', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: false, - }, - { - boardID: 10, - coverUrl: './assets/imgs/recipe.jpg', - title: 'Recipes', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 11, - coverUrl: './assets/imgs/michael.jpg', - title: 'Singers', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: true, - }, - { - boardID: 12, - coverUrl: './assets/imgs/avatar.jpg', - title: 'Singers', - bookmarkedNumber: 139, - rewardedNumber: 128, - lastModifyTime: '1 нед. назад', - private: false, - }, - ] - }; - - const profile = new ProfilePage(this.root, profileState); - return profile.renderTemplate() - } - - /** - * Clear all page data if it's needed. - * @param {boolean} deleteEverything - flag for clearing all page data. - */ - clear(deleteEverything) { - document.removeEventListener('scroll', this.handlers.scrollHandler); - Object.keys(this.#structure).forEach((key) => { - if (deleteEverything) { - this.#structure[key].remove(); - delete this.#structure[key]; - } - }); - } - - /** - * Returns url of the last visited page. - */ - get LastPage() { - return document.referrer; - } + currentUser: true, + socialNetworks: { + vk: true, + telegram: true, + github: true, + pinterest: true, + }, + boards: [ + { + boardID: 1, + coverUrl: './assets/imgs/bookmarks-board-cover.jpg', + title: 'Закладки', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 2, + coverUrl: './assets/imgs/michael.jpg', + title: 'Singers', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 3, + coverUrl: './assets/imgs/art.jpg', + title: 'Work-of-art', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: false, + }, + { + boardID: 4, + coverUrl: './assets/imgs/recipe.jpg', + title: 'Recipes', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 5, + coverUrl: './assets/imgs/michael.jpg', + title: 'Singers', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 6, + coverUrl: './assets/imgs/avatar.jpg', + title: 'Singers', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: false, + }, + { + boardID: 7, + coverUrl: './assets/imgs/michael.jpg', + title: 'Singers', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 8, + coverUrl: './assets/imgs/avatar.jpg', + title: 'Work-of-art', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: false, + }, + { + boardID: 9, + coverUrl: './assets/imgs/art.jpg', + title: 'Work-of-art', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: false, + }, + { + boardID: 10, + coverUrl: './assets/imgs/recipe.jpg', + title: 'Recipes', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 11, + coverUrl: './assets/imgs/michael.jpg', + title: 'Singers', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: true, + }, + { + boardID: 12, + coverUrl: './assets/imgs/avatar.jpg', + title: 'Singers', + bookmarkedNumber: 139, + rewardedNumber: 128, + lastModifyTime: '1 нед. назад', + private: false, + }, + ], + }; + + const profile = new ProfilePage(this.root, profileState); + return profile.renderTemplate(); + } + + /** + * Clear all page data if it's needed. + * @param {boolean} deleteEverything - flag for clearing all page data. + */ + clear(deleteEverything) { + document.removeEventListener('scroll', this.handlers.scrollHandler); + Object.keys(this.#structure).forEach((key) => { + if (deleteEverything) { + this.#structure[key].remove(); + delete this.#structure[key]; + } + }); + } + + /** + * Returns url of the last visited page. + */ + get LastPage() { + return document.referrer; + } } diff --git a/public/components/complex/messagelist/messagelist.css b/public/components/complex/messagelist/messagelist.css new file mode 100644 index 0000000..fae4308 --- /dev/null +++ b/public/components/complex/messagelist/messagelist.css @@ -0,0 +1,10 @@ +.message-container{ + width: 100%; + height: 100%; + box-sizing: border-box; + padding: 0.5rem; + display: flex; + flex-direction: column; + gap: 0.5rem; + overflow-y: auto; +} \ No newline at end of file diff --git a/public/components/complex/messagelist/messagelist.hbs b/public/components/complex/messagelist/messagelist.hbs new file mode 100644 index 0000000..9e8cce0 --- /dev/null +++ b/public/components/complex/messagelist/messagelist.hbs @@ -0,0 +1,5 @@ +
+ {{#each Messages}} + {{{this}}} + {{/each}} +
\ No newline at end of file diff --git a/public/components/complex/messagelist/messagelist.js b/public/components/complex/messagelist/messagelist.js new file mode 100644 index 0000000..369520c --- /dev/null +++ b/public/components/complex/messagelist/messagelist.js @@ -0,0 +1,32 @@ +'use strict'; + +import { MessageComponent } from '../../message/message.js'; +import { BaseComponent } from '../../base/base.js'; + +export class MessageListComponent extends BaseComponent { + constructor(parent, state) { + super(parent, state); + } + + renderTemplate() { + const template = Handlebars.templates['messagelist.hbs']; + + const messageList = []; + console.log(messageList); + + this.State.messagesInfo.forEach((message) => { + const component = new MessageComponent(this.Parent, { + Content: message.content, + AuthorID: message.sender_id, + ChatOwnerID: this.State.ChatOwnerID, + }); + messageList.push(component.renderTemplate()); + }); + + const renderedTemplate = template({ + Messages: messageList, + }); + + return renderedTemplate; + } +} diff --git a/public/components/dialog-preview/dialog-preview.css b/public/components/dialog-preview/dialog-preview.css new file mode 100644 index 0000000..1f38cd4 --- /dev/null +++ b/public/components/dialog-preview/dialog-preview.css @@ -0,0 +1,46 @@ +.dialog-preview { + display: flex; + width: 100%; + height: 20%; + gap: 1rem; + box-sizing: border-box; + padding: 0.5rem; +} + +.dialog-preview.active{ + background-color: var(--project-primary-grey); + color: var(--project-primary-white); +} + +.dialog-preview.disabled{ + background-color: var(--pinset-header-background-color); + color: var(--project-primary-black); +} + +.dialog-preview__image{ + width: 15%; +} + +.dialog-preview__image img{ + width: 100%; + height: 70%; + border-radius: 50%; + border: 1px solid black; +} + +.dialog-preview__content{ + flex-grow: 1; + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.content__author-name{ + font-size: 16px; + font-weight: 600; +} + +.content__message-preview{ + font-size: 14px; +} + diff --git a/public/components/dialog-preview/dialog-preview.hbs b/public/components/dialog-preview/dialog-preview.hbs new file mode 100644 index 0000000..a998dbd --- /dev/null +++ b/public/components/dialog-preview/dialog-preview.hbs @@ -0,0 +1,13 @@ +
+
+ +
+
+ +
+ Привет ! +
+
+
\ No newline at end of file diff --git a/public/components/dialog-preview/dialog-preview.js b/public/components/dialog-preview/dialog-preview.js new file mode 100644 index 0000000..2dcf796 --- /dev/null +++ b/public/components/dialog-preview/dialog-preview.js @@ -0,0 +1,15 @@ +'use strict'; + +import { BaseComponent } from '../base/base.js'; + +export class DialogPreviewComponent extends BaseComponent { + constructor(parent, state = {}) { + super(parent, state); + } + + renderTemplate() { + const template = Handlebars.templates['dialog-preview.hbs']; + const renderedTemplate = template(this.State); + return renderedTemplate; + } +} diff --git a/public/components/message/message.css b/public/components/message/message.css new file mode 100644 index 0000000..c0f7e06 --- /dev/null +++ b/public/components/message/message.css @@ -0,0 +1,19 @@ +.message{ + display: flex; + width: 100%; +} + +.message-content { + width: fit-content; + padding: 0.5rem; + border-radius: 5px; + box-shadow: 0px 0px 3px var(--project-primary-black); +} + +.message.align-left{ + justify-content: left; +} + +.message.align-right{ + justify-content: right; +} \ No newline at end of file diff --git a/public/components/message/message.hbs b/public/components/message/message.hbs new file mode 100644 index 0000000..643aedc --- /dev/null +++ b/public/components/message/message.hbs @@ -0,0 +1,3 @@ +
+
{{Content}}
+
\ No newline at end of file diff --git a/public/components/message/message.js b/public/components/message/message.js new file mode 100644 index 0000000..124531f --- /dev/null +++ b/public/components/message/message.js @@ -0,0 +1,25 @@ +'use strict'; + +import { BaseComponent } from '../base/base.js'; + +export class MessageComponent extends BaseComponent { + constructor(parent, state) { + super(parent, state); + } + + renderTemplate() { + console.log('message', this.State.AuthorID, this.State.ChatOwnerID); + if (this.State.AuthorID === this.State.ChatOwnerID) { + this.myMessage = true; + } else { + this.myMessage = false; + } + const template = Handlebars.templates['message.hbs']; + const renderedTemplate = template({ + Content: this.State.Content, + myMessage: this.myMessage, + }); + + return renderedTemplate; + } +} diff --git a/public/constants/api.js b/public/constants/api.js index f0e6598..1097586 100644 --- a/public/constants/api.js +++ b/public/constants/api.js @@ -2,7 +2,7 @@ import { ROUTES } from './routes.js'; -const BASE = 'http://37.139.41.77:8080'; +const BASE = 'http://localhost:8080'; export const BACKEND_FEED_ROUTE = `${BASE}${ROUTES.main}`; export const BACKEND_LOGIN_ROUTE = `${BASE}${ROUTES.login}`; diff --git a/public/constants/routes.js b/public/constants/routes.js index 414aa26..c126f6d 100644 --- a/public/constants/routes.js +++ b/public/constants/routes.js @@ -1,13 +1,14 @@ 'use strict'; export const ROUTES = { - main: '/feed', - profile: '/profile', - login: '/login', - signup: '/signup', - isAuthorized: '/is_authorized', - logOut: '/logout', - lookPin: '/lookpin', - editPin: '/edit_pin', - createPin: '/create_pin', + main: '/feed', + profile: '/profile', + login: '/login', + signup: '/signup', + isAuthorized: '/is_authorized', + logOut: '/logout', + lookPin: '/lookpin', + editPin: '/edit_pin', + createPin: '/create_pin', + chat: '/chat', }; diff --git a/public/index.css b/public/index.css index 30b6cfc..c841d17 100644 --- a/public/index.css +++ b/public/index.css @@ -5,6 +5,7 @@ @import url(pages/signup/signup.css); @import url(pages/addPin/lookPin.css); @import url(pages/editPin/editPin.css); +@import url(pages/chat/chat.css); @import url(pages/unknown/unknown.css); @import url(pages/profile/profile.css); @import url(components/complex/header/header.css); @@ -12,12 +13,15 @@ @import url(components/complex/pin/pin.css); @import url(pages/main/addPin.css); @import url(components/complex/preview/preview.css); +@import url(components/dialog-preview/dialog-preview.css); @import url(components/complex/savebox/savebox.css); @import url(components/search-input/search-input.css); @import url(components/boards-list/boards-list.css); @import url(components/details-menu/details-menu.css); @import url(components/drop-down-menu/drop-down-menu.css); @import url(components/input-text-area/input-text-area.css); +@import url(components/complex/messagelist/messagelist.css); +@import url(components/message/message.css); @import url(./constants.css); diff --git a/public/pages/chat/chat.css b/public/pages/chat/chat.css new file mode 100644 index 0000000..88e4e8d --- /dev/null +++ b/public/pages/chat/chat.css @@ -0,0 +1,59 @@ +.chat-container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +.chat__content { + display: flex; + margin-top: 8vh; + width: 100%; + height: calc(100% - 8vh); +} + +.chat__sidebar { + height: 100%; + width: 25%; + background-color: var(--pinset-header-background-color); +} + +.chat__sidebar-search { + padding: 0.5rem; +} + +.chat__sidebar-dialog-list { + height: 70%; + overflow-y: auto; +} + +.chat__dialog { + height: 100%; + flex-grow: 1; + display: flex; + flex-direction: column; +} + +.chat__dialog-messages { + width: 100%; + height: 90%; +} + +.chat__dialog-input{ + width: 100%; + background-color: var(--pinset-header-background-color); + padding-top: 1rem; + flex-grow: 1; +} + +.chat__dialog-input .input-icons-wrapper { + width: 100%; + position: relative; +} + +.chat__dialog-input svg { + width: 50px; + height: 50px; +} + + diff --git a/public/pages/chat/chat.hbs b/public/pages/chat/chat.hbs new file mode 100644 index 0000000..943b6b9 --- /dev/null +++ b/public/pages/chat/chat.hbs @@ -0,0 +1,29 @@ +
+ {{{header}}} +
+
+ +
+ {{#each dialogPreviews}} + {{{this}}} + {{/each}} +
+
+
+
+ {{#if containsMessages}} +
+
Привет
+
Пока
+
исрсрвисрвроивсррсвиовсии
+
+ {{/if}} +
+
+ {{{messageInput}}} +
+
+
+
\ No newline at end of file diff --git a/public/pages/chat/chat.js b/public/pages/chat/chat.js new file mode 100644 index 0000000..d8237b7 --- /dev/null +++ b/public/pages/chat/chat.js @@ -0,0 +1,171 @@ +import { BaseComponent } from '../../components/base/base.js'; +import { HeaderComponent as Header } from '../../components/complex/header/header.js'; +import { MessageListComponent } from '../../components/complex/messagelist/messagelist.js'; +import { DialogPreviewComponent } from '../../components/dialog-preview/dialog-preview.js'; +import { InputComponent } from '../../components/input/input.js'; +import { MessageComponent } from '../../components/message/message.js'; +import { SearchInputComponent } from '../../components/search-input/search-input.js'; +import { isAuthorized } from '../../modules/network.js'; + +export class ChatPageComponent extends BaseComponent { + constructor(parent) { + super(parent); + this.getChatMessages = this.getChatMessages.bind(this); + this.SendMessageFunc = this.SendMessageFunc.bind(this); + this.AddReseivedMessage = this.AddReseivedMessage.bind(this); + } + + async renderTemplate() { + const template = Handlebars.templates['chat.hbs']; + + const userIDResponse = await fetch('http://localhost:8080/is_authorized', { + method: 'GET', + mode: 'cors', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, + }); + + const userIDResponseData = await userIDResponse.json(); + + this.ChatOwnerID = userIDResponseData.user_id; + + const svgIcon = await this.loadSVG('./assets/icons/navigation-arrow.svg'); + + const headerPart = new Header(this.Parent, false); + + const messageInput = new InputComponent(this.Parent, { + inputPlaceholder: 'Введите сообщение...', + inputImageRight: svgIcon, + }); + const searchInput = new SearchInputComponent(this.Parent, { + Placeholder: 'искать друзей...', + }); + + const response = await fetch('http://localhost:8080/mychats', { + method: 'GET', + mode: 'cors', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, + }); + const userChats = await response.json(); + + const chatTemplates = []; + userChats.forEach((chat) => { + const component = new DialogPreviewComponent(this.Parent, { + ChatID: chat['chat_id'], + AvatarUrl: chat.companion['avatar_url'], + NickName: chat.companion['nick_name'], + }); + chatTemplates.push(component.renderTemplate()); + }); + + const renderedTemplate = template({ + header: headerPart.renderTemplate(), + messageInput: messageInput.renderTemplate(), + searchInput: searchInput.renderTemplate(), + dialogPreviews: chatTemplates, + }); + + this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); + + const dialogs = document.querySelectorAll('.dialog-preview'); + dialogs.forEach((dialog) => { + dialog.addEventListener('click', this.getChatMessages); + }); + + this.socket = new WebSocket('ws://localhost:8080/handshake'); + this.socket.onopen = function () { + console.log('Соединение установлено'); + }; + + this.socket.onclose = function (event) { + console.log('Соединение закрыто:', event.reason); + }; + + this.socket.onmessage = this.AddReseivedMessage; + + const messageSubmitBtn = document.querySelector('.input__icon'); + messageSubmitBtn.addEventListener('click', this.SendMessageFunc); + } + + async AddReseivedMessage(event) { + const message = JSON.parse(event.data); + const messageContainer = document.querySelector('.message-container'); + const messageComponent = new MessageComponent(this.Parent, { + Content: message.data.content, + AuthorID: message.data.sender_id, + ChatOwnerID: this.ChatOwnerID, + }); + const renderedMessages = messageComponent.renderTemplate(); + messageContainer.insertAdjacentHTML('beforeend', renderedMessages); + } + + async SendMessageFunc(event) { + event.preventDefault(); + + const inputField = document.querySelector('.chat__dialog-input input'); + const messageValue = inputField.value; + + const message = { + chat_id: parseInt(this.currentChatID), + content: messageValue, + }; + + const messageJson = JSON.stringify(message); + + this.socket.send(messageJson); + inputField.value = ''; + } + + async getChatMessages(event) { + event.preventDefault(); + + const dialogs = document.querySelectorAll('.dialog-preview'); + dialogs.forEach((dialog) => { + dialog.classList.remove('active'); + dialog.classList.add('disabled'); + }); + event.currentTarget.classList.remove('disabled'); + event.currentTarget.classList.add('active'); + + this.currentChatID = event.currentTarget.dataset.chatId; + const urlPath = + 'http://localhost:8080/chat/' + + this.currentChatID.toString() + + '/messages'; + const response = await fetch(urlPath, { + method: 'GET', + mode: 'cors', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, + }); + const messages = await response.json(); + const messageList = new MessageListComponent(this.Parent, { + messagesInfo: messages, + ChatOwnerID: this.ChatOwnerID, + }); + const renderedMessages = messageList.renderTemplate(); + + let dialogMessages = document.querySelector('.chat__dialog-messages'); + dialogMessages.innerHTML = ''; + dialogMessages.insertAdjacentHTML('afterbegin', renderedMessages); + } + + async loadSVG(url) { + try { + const response = await fetch(url); + if (!response.ok) throw new Error('Network response was not ok'); + const svgContent = await response.text(); + return svgContent; + } catch (error) { + console.error('Ошибка загрузки SVG:', error); + return ''; + } + } +} diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index 08fb672..1862674 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -89,7 +89,7 @@ export default class EditPinComponent extends BaseComponent { const formData = new FormData(); formData.append('file', file); - const response = await fetch('http://37.139.41.77:8079/image/upload', { + const response = await fetch('http://localhost:8080/image/upload', { method: 'POST', body: formData, }); @@ -132,7 +132,7 @@ export default class EditPinComponent extends BaseComponent { // body: requestBody, // }); - await fetch('http://37.139.41.77:8080/create-pin', { + await fetch('http://localhost:8080/create-pin', { method: 'POST', mode: 'cors', credentials: 'include', diff --git a/public/precompiled.js b/public/precompiled.js index ba2dcc3..2cdb3ef 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -19,23 +19,23 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return "
\r\n \n \r\n
\r\n \n
\n \"cover\"\r\n
\r\n
\n \r\n" + + "\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Private") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":16},"end":{"line":12,"column":23}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"private\"\r\n"; + return " \"private\"\n"; },"5":function(container,depth0,helpers,partials,data) { - return "

Здесь будут отображены доски

\r\n"; + return "

Здесь будут отображены доски

\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -44,9 +44,9 @@ templates['boards-list.hbs'] = template({"1":function(container,depth0,helpers,p return undefined }; - return "
\r\n" + return "
\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(5, data, 0),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":17,"column":11}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true}); templates['button.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "disabled"; @@ -92,13 +92,13 @@ templates['button.hbs'] = template({"1":function(container,depth0,helpers,partia + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"active") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":77},"end":{"line":1,"column":104}}})) != null ? stack1 : "") + "\" " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"disabled") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":106},"end":{"line":2,"column":26}}})) != null ? stack1 : "") - + ">\r\n " + + ">\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":3,"column":65}}})) != null ? stack1 : "") - + "\r\n " + + "\n " + alias4(((helper = (helper = lookupProperty(helpers,"label") || (depth0 != null ? lookupProperty(depth0,"label") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data,"loc":{"start":{"line":4,"column":1},"end":{"line":4,"column":10}}}) : helper))) - + "\r\n " + + "\n " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"iconRight") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":68}}})) != null ? stack1 : "") - + "\r\n\r\n"; + + "\n\n"; },"useData":true}); templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -110,18 +110,18 @@ templates['icon-button.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":functi return "
\r\n \n \r\n
\r\n"; + + "\">\n
\n"; },"useData":true}); templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -130,9 +130,9 @@ templates['grid.hbs'] = template({"1":function(container,depth0,helpers,partials return undefined }; - return "
\r\n" + return "
\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"pins") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":4,"column":13}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true}); templates['header.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -142,11 +142,11 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"createButton") : stack1), depth0)) != null ? stack1 : "") - + "\r\n
\r\n
\r\n \n
\n \r\n
\r\n"; + + "\">\n
\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -155,9 +155,9 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return " \n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -166,13 +166,31 @@ templates['header.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; - return "
\r\n
\r\n \n
\n \"Pinset\"\r\n
\r\n\r\n
\r\n " + + "\" alt=\"Pinset\" class=\"header__icon\" />\n
\n\n
\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"searchInput") : stack1), depth0)) != null ? stack1 : "") - + "\r\n
\r\n\r\n" + + "\n
\n\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? lookupProperty(stack1,"isAuthorized") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":10,"column":1},"end":{"line":21,"column":8}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; +},"useData":true}); +templates['messagelist.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { + var stack1; + + return " " + + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") + + "\n"; +},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
\n" + + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Messages") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":6},"end":{"line":4,"column":17}}})) != null ? stack1 : "") + + "
"; },"useData":true}); templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -184,13 +202,13 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\r\n \n \r\n
\r\n

" + + "\">\n

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n

" + + "

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\r\n
\r\n
\r\n"; + + " Followers

\n
\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -201,20 +219,20 @@ templates['pin.hbs'] = template({"1":function(container,depth0,helpers,partials, return "
\r\n
\r\n \n
\n \r\n
\n
\r\n \"Preview\"\r\n
\r\n
\r\n" + + "\">\n \"Preview\"\n
\n
\n" + ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"pin") : depth0)) != null ? lookupProperty(stack1,"imageOnly") : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":1},"end":{"line":16,"column":12}}})) != null ? stack1 : "") - + "
\r\n"; + + "\n"; },"useData":true}); templates['preview.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return " \"bookmark\r\n"; + return " \"bookmark\n"; },"3":function(container,depth0,helpers,partials,data) { - return " \"bookmark\r\n"; + return " \"bookmark\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -223,21 +241,21 @@ templates['preview.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\r\n
\r\n
\r\n \n
\n
\n \r\n
\r\n

" + + "\">\n

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"nick_name") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n

" + + "

\n

" + ((stack1 = alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"author_info") : stack1)) != null ? lookupProperty(stack1,"followings_count") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Сохранить

\r\n \"expand\"\r\n
\r\n
\r\n
\r\n\r\n \n
\n
\n\n
\n
\n

Сохранить

\n \"expand\"\n
\n
\n
\n\n \"Preview\"\r\n\r\n
\r\n
\r\n \"more\"\r\n
\r\n" + + "\" alt=\"Preview\">\n\n
\n
\n \"more\"\n
\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"Bookmarked") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":25,"column":8},"end":{"line":29,"column":15}}})) != null ? stack1 : "") - + " \"comment\"\r\n \"share\"\r\n
\r\n\r\n
\r\n
\r\n

" + + " \"comment\"\n \"share\"\n

\n\n
\n
\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"ViewsNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n \"bookmark\"\r\n
\r\n
\r\n

" + + "

\n \"bookmark\"\n
\n
\n

" + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"BookmarksNumber") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n \"bookmark\"\r\n
\r\n
\r\n
\r\n"; + + "

\n \"bookmark\"\n
\n
\n\n"; },"useData":true}); templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -247,11 +265,11 @@ templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\r\n
\r\n " + return "
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":3,"column":25}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n " + + "\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"boardsList") || (depth0 != null ? lookupProperty(depth0,"boardsList") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"boardsList","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n \r\n \r\n
\r\n
\r\n"; + + "\n
\n \n \n
\n
\n"; },"useData":true}); templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -267,7 +285,7 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"Download") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":56},"end":{"line":4,"column":135}}})) != null ? stack1 : "") + ">" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"Text") : depth0), depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"2":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -287,12 +305,28 @@ templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers, return undefined }; - return "
\r\n
\r\n" + return "
\n
\n" + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"options") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":5,"column":17}}})) != null ? stack1 : "") - + "
\r\n
\r\n"; + + "
\n
\n"; +},"useData":true}); +templates['dialog-preview.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
\n
\n \n
\n
\n
\n " + + alias4(((helper = (helper = lookupProperty(helpers,"NickName") || (depth0 != null ? lookupProperty(depth0,"NickName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"NickName","hash":{},"data":data,"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":24}}}) : helper))) + + "\n
\n
\n Привет !\n
\n
\n
"; },"useData":true}); templates['drop-down-menu.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "\r\n"; + return "\n"; },"useData":true}); templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -304,9 +338,9 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return " \r\n \n \"icon\"\r\n \r\n"; + + "\" alt=\"icon\" />\n \n"; },"3":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -372,23 +406,23 @@ templates['input-text-area.hbs'] = template({"1":function(container,depth0,helpe return undefined }; - return "
\r\n
\n"; },"useData":true}); templates['input.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { return "input-error"; @@ -402,7 +436,7 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return " \r\n"; + + "\n"; },"5":function(container,depth0,helpers,partials,data) { var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -411,9 +445,9 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \r\n " + return " \n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageLeft") || (depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageLeft","hash":{},"data":data,"loc":{"start":{"line":10,"column":3},"end":{"line":10,"column":23}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n \r\n"; + + "\n \n \n"; },"7":function(container,depth0,helpers,partials,data) { return " input__text-padding-left "; },"9":function(container,depth0,helpers,partials,data) { @@ -428,11 +462,11 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; - return " \r\n " + return " \n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"inputImageRight") || (depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"inputImageRight","hash":{},"data":data,"loc":{"start":{"line":21,"column":3},"end":{"line":21,"column":24}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n \r\n"; + + "\n \n \n"; },"15":function(container,depth0,helpers,partials,data) { - return "
\r\n
\r\n"; + return "
\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -445,27 +479,45 @@ templates['input.hbs'] = template({"1":function(container,depth0,helpers,partial + alias4(((helper = (helper = lookupProperty(helpers,"inputSize") || (depth0 != null ? lookupProperty(depth0,"inputSize") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"inputSize","hash":{},"data":data,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":41}}}) : helper))) + " " + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Error") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":42},"end":{"line":1,"column":73}}})) != null ? stack1 : "") - + "\">\r\n\r\n" + + "\">\n\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputLabelText") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":1},"end":{"line":5,"column":8}}})) != null ? stack1 : "") - + "\r\n
\r\n" + + "\n
\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":2},"end":{"line":13,"column":9}}})) != null ? stack1 : "") - + "\r\n \r\n\r\n" + + " />\n\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputImageRight") : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":2},"end":{"line":24,"column":9}}})) != null ? stack1 : "") - + "
\r\n\r\n" + + "
\n\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputHelperText") : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":27,"column":1},"end":{"line":30,"column":8}}})) != null ? stack1 : "") - + "\r\n\r\n"; + + "\n\n"; +},"useData":true}); +templates['message.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { + return "align-right"; +},"3":function(container,depth0,helpers,partials,data) { + return "align-left"; +},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
\n
" + + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"Content") || (depth0 != null ? lookupProperty(depth0,"Content") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"Content","hash":{},"data":data,"loc":{"start":{"line":2,"column":33},"end":{"line":2,"column":44}}}) : helper))) + + "
\n
"; },"useData":true}); templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -475,9 +527,9 @@ templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":funct return undefined }; - return "
\r\n \"search\"\r\n \n \"search\"\n \r\n \"clear\"\r\n
\r\n"; + + "\" name=\"search-input\">\n \"clear\"\n\n"; },"useData":true}); templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -487,15 +539,43 @@ templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c return undefined }; - return "
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n " + return "
\n
\n \n
\n
\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"saveButton") || (depth0 != null ? lookupProperty(depth0,"saveButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"saveButton","hash":{},"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":32}}}) : helper))) != null ? stack1 : "") - + "\r\n " + + "\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"rewardButton") || (depth0 != null ? lookupProperty(depth0,"rewardButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"rewardButton","hash":{},"data":data,"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":34}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n \"bookmark\r\n \"comment\"\r\n \"share\"\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

" + + "\n

\n
\n \"bookmark\n \"comment\"\n \"share\"\n
\n
\n
\n
\n \n
\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorName") : stack1), depth0)) != null ? stack1 : "") - + "

\r\n

" + + "

\n

" + ((stack1 = alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"preview") : depth0)) != null ? lookupProperty(stack1,"AuthorFollowersNumber") : stack1), depth0)) != null ? stack1 : "") - + " Followers

\r\n
\r\n
\r\n
\r\n 1 месяц назад\r\n
\r\n
\r\n Россия, Москва\r\n
\r\n
\r\n
\r\n Готовы к будущему ? Красочный киберпанковский головной убор\r\n
\r\n
\r\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\r\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\r\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\r\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \r\n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\r\n
\r\n \r\n
\r\n 11 комментариев\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Chris Isaak\r\n
\r\n
\r\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"; + + " Followers

\n
\n
\n
\n 1 месяц назад\n
\n
\n Россия, Москва\n
\n
\n
\n Готовы к будущему ? Красочный киберпанковский головной убор\n
\n
\n Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,\n totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta\n sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia\n consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, \n quia dolor sit amet consectetur adipisci[ng] velit, sed quia non numquam\n
\n \n
\n 11 комментариев\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n \n
\n
\n Chris Isaak\n
\n
\n Поздравляем с выдающимися решениями в области ИИ. В корпоративном секторе они создают волны.\n
\n
\n
\n
\n
\n
\n"; +},"useData":true}); +templates['chat.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { + var stack1; + + return " " + + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") + + "\n"; +},"3":function(container,depth0,helpers,partials,data) { + return "
\n
Привет
\n
Пока
\n
исрсрвисрвроивсррсвиовсии
\n
\n"; +},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
\n " + + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") + + "\n
\n
\n
\n " + + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":33}}}) : helper))) != null ? stack1 : "") + + "\n
\n
\n" + + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"dialogPreviews") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":16},"end":{"line":11,"column":25}}})) != null ? stack1 : "") + + "
\n
\n
\n
\n" + + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"containsMessages") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":16},"end":{"line":22,"column":23}}})) != null ? stack1 : "") + + "
\n
\n " + + ((stack1 = ((helper = (helper = lookupProperty(helpers,"messageInput") || (depth0 != null ? lookupProperty(depth0,"messageInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"messageInput","hash":{},"data":data,"loc":{"start":{"line":25,"column":16},"end":{"line":25,"column":34}}}) : helper))) != null ? stack1 : "") + + "\n
\n
\n
\n
"; },"useData":true}); templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -507,9 +587,9 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return " \"Image\"\r\n"; + + "\" alt=\"Image\">\n"; },"3":function(container,depth0,helpers,partials,data) { - return "
\r\n \"checkphoto\"\r\n
\r\n
\r\n выберите файл или перетащите его сюда\r\n
\r\n"; + return "
\n \"checkphoto\"\n
\n
\n выберите файл или перетащите его сюда\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -518,22 +598,22 @@ templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "\r\n
\r\n
\r\n
\r\n" + return "\n
\n
\n
\n" + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"Image") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":14,"column":19}}})) != null ? stack1 : "") - + "
\r\n \r\n
\r\n
\r\n
\r\n " + + "
\n \n
\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"TitleInput") || (depth0 != null ? lookupProperty(depth0,"TitleInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"TitleInput","hash":{},"data":data,"loc":{"start":{"line":20,"column":12},"end":{"line":20,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n " + + "\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"DescriptionInput") || (depth0 != null ? lookupProperty(depth0,"DescriptionInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"DescriptionInput","hash":{},"data":data,"loc":{"start":{"line":23,"column":12},"end":{"line":23,"column":34}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n " + + "\n
\n
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"PublishButton") || (depth0 != null ? lookupProperty(depth0,"PublishButton") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"PublishButton","hash":{},"data":data,"loc":{"start":{"line":30,"column":12},"end":{"line":30,"column":31}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"; + + "\n
\n
\n
\n\n\n\n\n\n\n\n\n"; },"useData":true}); templates['login.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -542,19 +622,15 @@ templates['login.hbs'] = template({"1":function(container,depth0,helpers,partial return undefined }; -<<<<<<< HEAD - return "
\r\n Главная\r\n
\r\n \r\n
\r\n
\n Главная\n
\n \n
\n >>>>>> 292603cf83b4ee24bfe9206b3ac5fca2efa3584c + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"className") : depth0), depth0)) - + "\">\r\n" + + "\">\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n
\r\n Нет аккаунта? " + + "\n \n
\n Нет аккаунта? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":36},"end":{"line":18,"column":60}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n
\r\n
\r\n"; + + "\n
\n
\n
\n\n"; },"useData":true}); templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -564,11 +640,11 @@ templates['main.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(cont return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\r\n " + + "\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"grid") || (depth0 != null ? lookupProperty(depth0,"grid") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"grid","hash":{},"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":14}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n"; + + "\n
\n"; },"useData":true}); templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -587,23 +663,23 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\r\n \n \""\r\n \"Details\"\r\n
\n \"Details\"\n
\r\n
\r\n

" + + "\">\n

\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"title") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n" + + "

\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depths[1] != null ? lookupProperty(depths[1],"profile") : depths[1])) != null ? lookupProperty(stack1,"currentUser") : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":24},"end":{"line":14,"column":31}}})) != null ? stack1 : "") - + "
\r\n
\r\n
\r\n
\r\n

" + + "

\n
\n
\n
\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"bookmarkedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n \"Bookmark\"\r\n
\r\n
\r\n

" + + "

\n \"Bookmark\"\n
\n
\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"rewardedNumber") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n \"Pinset\"\r\n
\r\n
\r\n
\r\n

" + + "

\n \"Pinset\"\n
\n
\n
\n

" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,"lastModifyTime") : depth0), depth0)) != null ? stack1 : "") - + "

\r\n
\r\n
\r\n
\r\n
\r\n"; + + "

\n
\n
\n
\n \n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -614,9 +690,9 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"private") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":28},"end":{"line":13,"column":35}}})) != null ? stack1 : ""); },"4":function(container,depth0,helpers,partials,data) { - return " \"Private\"\r\n"; + return " \"Private\"\n"; },"6":function(container,depth0,helpers,partials,data) { - return "

По вашему запросу ничего не найдено

\r\n"; + return "

По вашему запросу ничего не найдено

\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -625,12 +701,12 @@ templates['board-grid.hbs'] = template({"1":function(container,depth0,helpers,pa return undefined }; - return "
\r\n" + return "
\n" + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"boards") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.program(6, data, 0, blockParams, depths),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":36,"column":11}}})) != null ? stack1 : "") - + "
\r\n"; + + "
\n"; },"useData":true,"useDepths":true}); templates['profile.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { - return "
\r\n \"Settings\"\r\n
\r\n"; + return "
\n \"Settings\"\n
\n"; },"3":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -639,21 +715,21 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"chatButton") : stack1), depth0)) != null ? stack1 : "") - + "\r\n " + + "\n " + ((stack1 = alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"profile") : depth0)) != null ? lookupProperty(stack1,"subscribeButton") : stack1), depth0)) != null ? stack1 : "") - + "\r\n
\r\n"; + + "\n
\n"; },"5":function(container,depth0,helpers,partials,data) { - return " \"VK\"\r\n"; + return " \"VK\"\n"; },"7":function(container,depth0,helpers,partials,data) { - return " \"Telegram\"\r\n"; + return " \"Telegram\"\n"; },"9":function(container,depth0,helpers,partials,data) { - return " \"Github\"\r\n"; + return " \"Github\"\n"; },"11":function(container,depth0,helpers,partials,data) { - return " \"Pinterest\"\r\n"; + return " \"Pinterest\"\n"; },"13":function(container,depth0,helpers,partials,data) { - return " \r\n
\r\n

Мои доски

\r\n \"Create\"\r\n
\r\n"; + return " \n
\n

Мои доски

\n \"Create\"\n
\n"; },"15":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -662,9 +738,9 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return " \n
\n

Доски пользователя

\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, alias5=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -673,49 +749,49 @@ templates['profile.hbs'] = template({"1":function(container,depth0,helpers,parti return undefined }; - return "
\r\n " + return "
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\r\n\r\n
\r\n \r\n"; + + "\n
\n
\n\n
\n"; },"useData":true}); templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1; return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") - + "\r\n"; + + "\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -724,21 +800,17 @@ templates['signup.hbs'] = template({"1":function(container,depth0,helpers,partia return undefined }; -<<<<<<< HEAD - return "
\r\n Главная\r\n
\r\n \r\n
\r\n
\n Главная\n
\n \n
\n >>>>>> 292603cf83b4ee24bfe9206b3ac5fca2efa3584c + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"className") : depth0), depth0)) - + "\">\r\n" + + "\">\n" + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"inputs") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":14,"column":25}}})) != null ? stack1 : "") + " " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button") || (depth0 != null ? lookupProperty(depth0,"button") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button","hash":{},"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":28}}}) : helper))) != null ? stack1 : "") - + "\r\n \r\n
\r\n Уже зарегистрированы? " + + "\n \n
\n Уже зарегистрированы? " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"button_form_footer") || (depth0 != null ? lookupProperty(depth0,"button_form_footer") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"button_form_footer","hash":{},"data":data,"loc":{"start":{"line":18,"column":44},"end":{"line":18,"column":68}}}) : helper))) != null ? stack1 : "") - + "\r\n
\r\n
\r\n
\r\n
\r\n"; + + "\n
\n
\n
\n\n"; },"useData":true}); templates['unknown.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "
\r\n Главная\r\n

404 страница не найдена

\r\n
\r\n"; + return "
\n Главная\n

404 страница не найдена

\n
\n"; },"useData":true}); })(); \ No newline at end of file From 6b77aeb4a12322546a0fbcba3051cf0567e18e32 Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Mon, 18 Nov 2024 17:22:01 +0300 Subject: [PATCH 16/18] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D1=83=20=D1=87?= =?UTF-8?q?=D0=B0=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/pages/chat/chat.hbs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/public/pages/chat/chat.hbs b/public/pages/chat/chat.hbs index 943b6b9..8201706 100644 --- a/public/pages/chat/chat.hbs +++ b/public/pages/chat/chat.hbs @@ -13,13 +13,7 @@
- {{#if containsMessages}} -
-
Привет
-
Пока
-
исрсрвисрвроивсррсвиовсии
-
- {{/if}} +
{{{messageInput}}} From f60c8516b140b67c39a1081312975f9748e1c289 Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sat, 23 Nov 2024 00:11:33 +0300 Subject: [PATCH 17/18] =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=87=D0=B0=D1=82=D1=8B,=20=D1=83=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=BB=20=D0=B1=D0=B0=D0=B3=D0=B8,=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF=D0=BE=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=20=D0=BF=D0=BE=20=D1=8E=D0=B7=D0=B5=D1=80=D0=B0=D0=BC=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=87=D0=B0=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../complex/messagelist/messagelist.js | 18 ++-- .../complex/searchuser/searchuser.css | 28 +++++ .../complex/searchuser/searchuser.hbs | 7 ++ .../complex/searchuser/searchuser.js | 71 +++++++++++++ .../searchuser-item/searchuser-item.css | 49 +++++++++ .../searchuser-item/searchuser-item.hbs | 18 ++++ .../searchuser-item/searchuser-item.js | 13 +++ public/index.css | 2 + public/modules/imgprocess.js | 15 +++ public/pages/chat/chat.css | 1 + public/pages/chat/chat.hbs | 1 - public/pages/chat/chat.js | 100 ++++++++---------- public/precompiled.js | 44 ++++++-- 13 files changed, 293 insertions(+), 74 deletions(-) create mode 100644 public/components/complex/searchuser/searchuser.css create mode 100644 public/components/complex/searchuser/searchuser.hbs create mode 100644 public/components/complex/searchuser/searchuser.js create mode 100644 public/components/searchuser-item/searchuser-item.css create mode 100644 public/components/searchuser-item/searchuser-item.hbs create mode 100644 public/components/searchuser-item/searchuser-item.js create mode 100644 public/modules/imgprocess.js diff --git a/public/components/complex/messagelist/messagelist.js b/public/components/complex/messagelist/messagelist.js index 369520c..9f2f5be 100644 --- a/public/components/complex/messagelist/messagelist.js +++ b/public/components/complex/messagelist/messagelist.js @@ -12,16 +12,16 @@ export class MessageListComponent extends BaseComponent { const template = Handlebars.templates['messagelist.hbs']; const messageList = []; - console.log(messageList); - - this.State.messagesInfo.forEach((message) => { - const component = new MessageComponent(this.Parent, { - Content: message.content, - AuthorID: message.sender_id, - ChatOwnerID: this.State.ChatOwnerID, + if (this.State.messagesInfo) { + this.State.messagesInfo.forEach((message) => { + const component = new MessageComponent(this.Parent, { + Content: message.content, + AuthorID: message.sender_id, + ChatOwnerID: this.State.ChatOwnerID, + }); + messageList.push(component.renderTemplate()); }); - messageList.push(component.renderTemplate()); - }); + } const renderedTemplate = template({ Messages: messageList, diff --git a/public/components/complex/searchuser/searchuser.css b/public/components/complex/searchuser/searchuser.css new file mode 100644 index 0000000..c083038 --- /dev/null +++ b/public/components/complex/searchuser/searchuser.css @@ -0,0 +1,28 @@ + + +.search-user__container{ + position: relative; +} + +.search-user__input{ + border: 1.5px solid var(--project-primary-grey); + border-radius: 3px; +} + +.search-user__input .input-icons-wrapper{ + width: 100%; + padding: 0.4rem; +} + +.search-user__list{ + display: none; + box-sizing: border-box; + padding: 0.5rem; + border-radius: 4px; + z-index: 10; + width: 100%; + height: 500%; + position: absolute; + overflow-y: auto; + background-color: var(--project-primary-white); +} diff --git a/public/components/complex/searchuser/searchuser.hbs b/public/components/complex/searchuser/searchuser.hbs new file mode 100644 index 0000000..6069167 --- /dev/null +++ b/public/components/complex/searchuser/searchuser.hbs @@ -0,0 +1,7 @@ +
+
+ {{{searchInput}}} +
+
+
+
\ No newline at end of file diff --git a/public/components/complex/searchuser/searchuser.js b/public/components/complex/searchuser/searchuser.js new file mode 100644 index 0000000..86ece96 --- /dev/null +++ b/public/components/complex/searchuser/searchuser.js @@ -0,0 +1,71 @@ +import { BaseComponent } from '../../base/base.js'; +import { InputComponent } from '../../input/input.js'; +import { postMethod } from '../../../modules/network.js'; +import { SearchUserItemComponent } from '../../searchuser-item/searchuser-item.js'; +import { DialogPreviewComponent } from '../../dialog-preview/dialog-preview.js'; + +export class SearchUserComponent extends BaseComponent { + constructor(parent, state, chat) { + super(parent, state); + this.chat = chat; + this.HandleUserInput = this.HandleUserInput.bind(this); + this.HandleUserInputStop = this.HandleUserInputStop.bind(this); + this.UpdateFoundUsersList = this.UpdateFoundUsersList.bind(this); + } + + renderTemplate() { + const template = Handlebars.templates['searchuser.hbs']; + + const messageInput = new InputComponent(this.Parent, { + inputPlaceholder: 'найдите друзей...', + }); + + const renderedTemplate = template({ + searchInput: messageInput.renderTemplate(), + }); + + this.Parent.insertAdjacentHTML('afterbegin', renderedTemplate); + + const userInput = this.Parent.querySelector('.search-user__input input'); + userInput.addEventListener('input', this.HandleUserInput); + userInput.addEventListener('blur', this.HandleUserInputStop); + } + + async HandleUserInput(event) { + const userList = this.Parent.querySelector('.search-user__list'); + userList.style.display = 'block'; + + const nickNameVal = event.currentTarget.value; + const response = await postMethod('http://localhost:8080/users/by/params', { + nick_name: nickNameVal, + }); + this.foundUsers = response; + this.UpdateFoundUsersList(); + } + + UpdateFoundUsersList() { + const userList = this.Parent.querySelector('.search-user__list'); + userList.innerHTML = ''; + this.foundUsers.forEach((user) => { + const newUserItem = new SearchUserItemComponent(this.Parent, { + UserName: user.user_name, + NickName: user.nick_name, + AvatarUrl: user.avatar_url, + UserID: user.user_id, + }); + userList.insertAdjacentHTML('beforeend', newUserItem.renderTemplate()); + }); + const addChatBtns = this.Parent.querySelectorAll('.add-chat-btn'); + addChatBtns.forEach((btn) => { + btn.addEventListener('mousedown', this.chat.AddUserChat); + }); + } + + HandleUserInputStop(event) { + if (event.currentTarget.classList.contains('.add-chat-btn')) { + this.UpdateFoundUsersList(); + } + const userList = this.Parent.querySelector('.search-user__list'); + userList.style.display = 'none'; + } +} diff --git a/public/components/searchuser-item/searchuser-item.css b/public/components/searchuser-item/searchuser-item.css new file mode 100644 index 0000000..69649a5 --- /dev/null +++ b/public/components/searchuser-item/searchuser-item.css @@ -0,0 +1,49 @@ +.search-user__user{ + display: flex; + margin-top: 0.5rem; + gap: 0.5rem; + border-radius: 5px; + padding: 0.2rem; + background-color: var(--pinset-search-input-background-color); +} + +.search-user__avatar{ + width: 2.2rem; + height: auto; + overflow: hidden; + border-radius: 50%; + border: 1px solid var(--project-primary-black); +} +.search-user__avatar img{ + width: 100%; + height: 100%; +} + +.search-user__name{ + font-weight: 600; + font-size: 16px; +} + +.search-user__nick{ + font-weight: 100; + font-size: 14px; +} + + +.search-user__add-chat{ + margin-left: auto; + display: flex; + flex-direction: column; + justify-content: center; +} + +.search-user__add-chat .add-chat-btn{ + margin-left: 1rem; + height: fit-content; + padding:0.2rem; + padding-right: 0.4rem; + padding-left: 0.4rem; + background-color: var(--pinset-main-color-blue); + color: var(--project-primary-white); + border-radius: 5px; +} \ No newline at end of file diff --git a/public/components/searchuser-item/searchuser-item.hbs b/public/components/searchuser-item/searchuser-item.hbs new file mode 100644 index 0000000..1cf78a8 --- /dev/null +++ b/public/components/searchuser-item/searchuser-item.hbs @@ -0,0 +1,18 @@ +
+
+ +
+
+
+ {{UserName}} +
+
+ @{{NickName}} +
+
+
+
+ + +
+
+
\ No newline at end of file diff --git a/public/components/searchuser-item/searchuser-item.js b/public/components/searchuser-item/searchuser-item.js new file mode 100644 index 0000000..7357170 --- /dev/null +++ b/public/components/searchuser-item/searchuser-item.js @@ -0,0 +1,13 @@ +import { BaseComponent } from '../base/base.js'; + +export class SearchUserItemComponent extends BaseComponent { + constructor(parent, state = {}) { + super(parent, state); + } + + renderTemplate() { + const template = Handlebars.templates['searchuser-item.hbs']; + const renderedTemplate = template(this.State); + return renderedTemplate; + } +} diff --git a/public/index.css b/public/index.css index c841d17..5551415 100644 --- a/public/index.css +++ b/public/index.css @@ -6,6 +6,7 @@ @import url(pages/addPin/lookPin.css); @import url(pages/editPin/editPin.css); @import url(pages/chat/chat.css); +@import url(components/complex/searchuser/searchuser.css); @import url(pages/unknown/unknown.css); @import url(pages/profile/profile.css); @import url(components/complex/header/header.css); @@ -18,6 +19,7 @@ @import url(components/search-input/search-input.css); @import url(components/boards-list/boards-list.css); @import url(components/details-menu/details-menu.css); +@import url(components/searchuser-item/searchuser-item.css); @import url(components/drop-down-menu/drop-down-menu.css); @import url(components/input-text-area/input-text-area.css); @import url(components/complex/messagelist/messagelist.css); diff --git a/public/modules/imgprocess.js b/public/modules/imgprocess.js new file mode 100644 index 0000000..b451865 --- /dev/null +++ b/public/modules/imgprocess.js @@ -0,0 +1,15 @@ +class ImgProcess { + async loadSVG(url) { + try { + const response = await fetch(url); + if (!response.ok) throw new Error('Network response was not ok'); + const svgContent = await response.text(); + return svgContent; + } catch (error) { + console.error('Ошибка загрузки SVG:', error); + return ''; + } + } +} + +export default new ImgProcess(); diff --git a/public/pages/chat/chat.css b/public/pages/chat/chat.css index 88e4e8d..9097303 100644 --- a/public/pages/chat/chat.css +++ b/public/pages/chat/chat.css @@ -41,6 +41,7 @@ .chat__dialog-input{ width: 100%; + display: none; background-color: var(--pinset-header-background-color); padding-top: 1rem; flex-grow: 1; diff --git a/public/pages/chat/chat.hbs b/public/pages/chat/chat.hbs index 8201706..6c59b2c 100644 --- a/public/pages/chat/chat.hbs +++ b/public/pages/chat/chat.hbs @@ -3,7 +3,6 @@
{{#each dialogPreviews}} diff --git a/public/pages/chat/chat.js b/public/pages/chat/chat.js index d8237b7..483c87d 100644 --- a/public/pages/chat/chat.js +++ b/public/pages/chat/chat.js @@ -4,8 +4,10 @@ import { MessageListComponent } from '../../components/complex/messagelist/messa import { DialogPreviewComponent } from '../../components/dialog-preview/dialog-preview.js'; import { InputComponent } from '../../components/input/input.js'; import { MessageComponent } from '../../components/message/message.js'; -import { SearchInputComponent } from '../../components/search-input/search-input.js'; -import { isAuthorized } from '../../modules/network.js'; +import { isAuthorized, postMethod } from '../../modules/network.js'; +import ImgProcess from '../../modules/imgprocess.js'; +import { SearchUserComponent } from '../../components/complex/searchuser/searchuser.js'; +import { getMethod } from '../../modules/network.js'; export class ChatPageComponent extends BaseComponent { constructor(parent) { @@ -13,25 +15,21 @@ export class ChatPageComponent extends BaseComponent { this.getChatMessages = this.getChatMessages.bind(this); this.SendMessageFunc = this.SendMessageFunc.bind(this); this.AddReseivedMessage = this.AddReseivedMessage.bind(this); + this.AddUserChat = this.AddUserChat.bind(this); } async renderTemplate() { const template = Handlebars.templates['chat.hbs']; - const userIDResponse = await fetch('http://localhost:8080/is_authorized', { - method: 'GET', - mode: 'cors', - credentials: 'include', - headers: { - 'Content-Type': 'application/json', - }, - }); - - const userIDResponseData = await userIDResponse.json(); + const userIDResponseData = await getMethod( + 'http://localhost:8080/is_authorized' + ); this.ChatOwnerID = userIDResponseData.user_id; - const svgIcon = await this.loadSVG('./assets/icons/navigation-arrow.svg'); + const svgIcon = await ImgProcess.loadSVG( + './assets/icons/navigation-arrow.svg' + ); const headerPart = new Header(this.Parent, false); @@ -39,19 +37,8 @@ export class ChatPageComponent extends BaseComponent { inputPlaceholder: 'Введите сообщение...', inputImageRight: svgIcon, }); - const searchInput = new SearchInputComponent(this.Parent, { - Placeholder: 'искать друзей...', - }); - const response = await fetch('http://localhost:8080/mychats', { - method: 'GET', - mode: 'cors', - credentials: 'include', - headers: { - 'Content-Type': 'application/json', - }, - }); - const userChats = await response.json(); + const userChats = await getMethod('http://localhost:8080/mychats'); const chatTemplates = []; userChats.forEach((chat) => { @@ -66,25 +53,27 @@ export class ChatPageComponent extends BaseComponent { const renderedTemplate = template({ header: headerPart.renderTemplate(), messageInput: messageInput.renderTemplate(), - searchInput: searchInput.renderTemplate(), dialogPreviews: chatTemplates, + chatOpened: this.currentChatID, }); this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); + const chatSidebarSearch = document.querySelector('.chat__sidebar-search'); + + const searchUserInput = new SearchUserComponent( + chatSidebarSearch, + {}, + this + ); + searchUserInput.renderTemplate(); + const dialogs = document.querySelectorAll('.dialog-preview'); dialogs.forEach((dialog) => { dialog.addEventListener('click', this.getChatMessages); }); this.socket = new WebSocket('ws://localhost:8080/handshake'); - this.socket.onopen = function () { - console.log('Соединение установлено'); - }; - - this.socket.onclose = function (event) { - console.log('Соединение закрыто:', event.reason); - }; this.socket.onmessage = this.AddReseivedMessage; @@ -92,6 +81,26 @@ export class ChatPageComponent extends BaseComponent { messageSubmitBtn.addEventListener('click', this.SendMessageFunc); } + async AddUserChat(event) { + const companionID = event.currentTarget.dataset.companionId; + const response = await postMethod( + `http://localhost:8080/create/chat/${companionID}` + ); + const component = new DialogPreviewComponent(this.Parent, { + ChatID: response['chat_id'], + AvatarUrl: response.companion['avatar_url'], + NickName: response.companion['nick_name'], + }); + const chatPreviewList = document.querySelector( + '.chat__sidebar-dialog-list' + ); + chatPreviewList.insertAdjacentHTML( + 'afterbegin', + component.renderTemplate() + ); + chatPreviewList.firstChild.addEventListener('click', this.getChatMessages); + } + async AddReseivedMessage(event) { const message = JSON.parse(event.data); const messageContainer = document.querySelector('.message-container'); @@ -124,6 +133,9 @@ export class ChatPageComponent extends BaseComponent { async getChatMessages(event) { event.preventDefault(); + const chatDialogInput = document.querySelector('.chat__dialog-input'); + chatDialogInput.style.display = 'block'; + const dialogs = document.querySelectorAll('.dialog-preview'); dialogs.forEach((dialog) => { dialog.classList.remove('active'); @@ -137,15 +149,7 @@ export class ChatPageComponent extends BaseComponent { 'http://localhost:8080/chat/' + this.currentChatID.toString() + '/messages'; - const response = await fetch(urlPath, { - method: 'GET', - mode: 'cors', - credentials: 'include', - headers: { - 'Content-Type': 'application/json', - }, - }); - const messages = await response.json(); + const messages = await getMethod(urlPath); const messageList = new MessageListComponent(this.Parent, { messagesInfo: messages, ChatOwnerID: this.ChatOwnerID, @@ -156,16 +160,4 @@ export class ChatPageComponent extends BaseComponent { dialogMessages.innerHTML = ''; dialogMessages.insertAdjacentHTML('afterbegin', renderedMessages); } - - async loadSVG(url) { - try { - const response = await fetch(url); - if (!response.ok) throw new Error('Network response was not ok'); - const svgContent = await response.text(); - return svgContent; - } catch (error) { - console.error('Ошибка загрузки SVG:', error); - return ''; - } - } } diff --git a/public/precompiled.js b/public/precompiled.js index 2cdb3ef..4444afc 100644 --- a/public/precompiled.js +++ b/public/precompiled.js @@ -271,6 +271,18 @@ templates['savebox.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(c + ((stack1 = ((helper = (helper = lookupProperty(helpers,"boardsList") || (depth0 != null ? lookupProperty(depth0,"boardsList") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"boardsList","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":28}}}) : helper))) != null ? stack1 : "") + "\n
\n \n \n
\n
\n"; },"useData":true}); +templates['searchuser.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
\n
\n " + + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":26}}}) : helper))) != null ? stack1 : "") + + "\n
\n
\n
\n
"; +},"useData":true}); templates['details-menu.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -531,6 +543,24 @@ templates['search-input.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":funct + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"state") : depth0)) != null ? lookupProperty(stack1,"Placeholder") : stack1), depth0)) + "\" name=\"search-input\">\n \"clear\"\n
\n"; },"useData":true}); +templates['searchuser-item.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
\n
\n \n
\n
\n
\n " + + alias4(((helper = (helper = lookupProperty(helpers,"UserName") || (depth0 != null ? lookupProperty(depth0,"UserName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"UserName","hash":{},"data":data,"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":24}}}) : helper))) + + "\n
\n
\n @" + + alias4(((helper = (helper = lookupProperty(helpers,"NickName") || (depth0 != null ? lookupProperty(depth0,"NickName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"NickName","hash":{},"data":data,"loc":{"start":{"line":10,"column":13},"end":{"line":10,"column":25}}}) : helper))) + + "\n
\n
\n
\n
\n +\n
\n
\n
"; +},"useData":true}); templates['lookPin.hbs'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -555,8 +585,6 @@ templates['chat.hbs'] = template({"1":function(container,depth0,helpers,partials return " " + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : "") + "\n"; -},"3":function(container,depth0,helpers,partials,data) { - return "
\n
Привет
\n
Пока
\n
исрсрвисрвроивсррсвиовсии
\n
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -567,14 +595,10 @@ templates['chat.hbs'] = template({"1":function(container,depth0,helpers,partials return "
\n " + ((stack1 = ((helper = (helper = lookupProperty(helpers,"header") || (depth0 != null ? lookupProperty(depth0,"header") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"header","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":16}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n
\n " - + ((stack1 = ((helper = (helper = lookupProperty(helpers,"searchInput") || (depth0 != null ? lookupProperty(depth0,"searchInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"searchInput","hash":{},"data":data,"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":33}}}) : helper))) != null ? stack1 : "") - + "\n
\n
\n" - + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"dialogPreviews") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":16},"end":{"line":11,"column":25}}})) != null ? stack1 : "") - + "
\n
\n
\n
\n" - + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"containsMessages") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":16},"end":{"line":22,"column":23}}})) != null ? stack1 : "") - + "
\n
\n " - + ((stack1 = ((helper = (helper = lookupProperty(helpers,"messageInput") || (depth0 != null ? lookupProperty(depth0,"messageInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"messageInput","hash":{},"data":data,"loc":{"start":{"line":25,"column":16},"end":{"line":25,"column":34}}}) : helper))) != null ? stack1 : "") + + "\n
\n
\n
\n
\n
\n" + + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"dialogPreviews") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":10,"column":25}}})) != null ? stack1 : "") + + "
\n
\n
\n
\n \n
\n
\n " + + ((stack1 = ((helper = (helper = lookupProperty(helpers,"messageInput") || (depth0 != null ? lookupProperty(depth0,"messageInput") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"messageInput","hash":{},"data":data,"loc":{"start":{"line":18,"column":16},"end":{"line":18,"column":34}}}) : helper))) != null ? stack1 : "") + "\n
\n
\n
\n
"; },"useData":true}); templates['editPin.hbs'] = template({"1":function(container,depth0,helpers,partials,data) { From fb71ac24cb92b2ee03fbe2a705a6be3381080300 Mon Sep 17 00:00:00 2001 From: Alexander Novak Date: Sun, 24 Nov 2024 13:37:42 +0300 Subject: [PATCH 18/18] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=20=D0=BB=D0=BE=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/components/complex/messagelist/messagelist.css | 2 +- public/components/complex/messagelist/messagelist.hbs | 2 +- public/components/dialog-preview/dialog-preview.hbs | 4 ++-- public/components/message/message.css | 2 +- public/components/message/message.hbs | 2 +- public/pages/chat/chat.hbs | 2 +- public/pages/editPin/editPin.js | 7 ------- public/pages/main/main.js | 3 --- 8 files changed, 7 insertions(+), 17 deletions(-) diff --git a/public/components/complex/messagelist/messagelist.css b/public/components/complex/messagelist/messagelist.css index fae4308..a978682 100644 --- a/public/components/complex/messagelist/messagelist.css +++ b/public/components/complex/messagelist/messagelist.css @@ -7,4 +7,4 @@ flex-direction: column; gap: 0.5rem; overflow-y: auto; -} \ No newline at end of file +} diff --git a/public/components/complex/messagelist/messagelist.hbs b/public/components/complex/messagelist/messagelist.hbs index 9e8cce0..bec31b8 100644 --- a/public/components/complex/messagelist/messagelist.hbs +++ b/public/components/complex/messagelist/messagelist.hbs @@ -2,4 +2,4 @@ {{#each Messages}} {{{this}}} {{/each}} -
\ No newline at end of file +
diff --git a/public/components/dialog-preview/dialog-preview.hbs b/public/components/dialog-preview/dialog-preview.hbs index a998dbd..9673bd2 100644 --- a/public/components/dialog-preview/dialog-preview.hbs +++ b/public/components/dialog-preview/dialog-preview.hbs @@ -7,7 +7,7 @@ {{NickName}}
- Привет ! +
- \ No newline at end of file + diff --git a/public/components/message/message.css b/public/components/message/message.css index c0f7e06..e9af5bc 100644 --- a/public/components/message/message.css +++ b/public/components/message/message.css @@ -16,4 +16,4 @@ .message.align-right{ justify-content: right; -} \ No newline at end of file +} diff --git a/public/components/message/message.hbs b/public/components/message/message.hbs index 643aedc..5690e8b 100644 --- a/public/components/message/message.hbs +++ b/public/components/message/message.hbs @@ -1,3 +1,3 @@
{{Content}}
-
\ No newline at end of file + diff --git a/public/pages/chat/chat.hbs b/public/pages/chat/chat.hbs index 6c59b2c..96b1b05 100644 --- a/public/pages/chat/chat.hbs +++ b/public/pages/chat/chat.hbs @@ -19,4 +19,4 @@ - \ No newline at end of file + diff --git a/public/pages/editPin/editPin.js b/public/pages/editPin/editPin.js index 1862674..98a679b 100644 --- a/public/pages/editPin/editPin.js +++ b/public/pages/editPin/editPin.js @@ -125,13 +125,6 @@ export default class EditPinComponent extends BaseComponent { media_url: ImageUrl, }); - console.log(requestBody); - - // await fetch('http://localhost:8080/create-pin', { - // method: 'POST', - // body: requestBody, - // }); - await fetch('http://localhost:8080/create-pin', { method: 'POST', mode: 'cors', diff --git a/public/pages/main/main.js b/public/pages/main/main.js index 68abe8e..d15c44d 100644 --- a/public/pages/main/main.js +++ b/public/pages/main/main.js @@ -48,7 +48,6 @@ export class MainPageComponent extends BaseComponent { header: headerPart.renderTemplate(), grid: grid.renderTemplate(), }); - console.log(renderedTemplate); this.Parent.insertAdjacentHTML('beforeend', renderedTemplate); @@ -57,7 +56,6 @@ export class MainPageComponent extends BaseComponent { } for (const pin of this.#pins) { - console.log(pin); grid.buildPinPreview(pin); } @@ -74,7 +72,6 @@ export class MainPageComponent extends BaseComponent { const createBtn = document.querySelector( '.header__create-btn-container button' ); - console.log('createBtn', createBtn); createBtn.addEventListener('click', (event) => { event.preventDefault(); app.render(ROUTES.editPin);