Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions hw5/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">

<!--НЕОСНОВНОЙ СТИЛЬ (БУТСТРАП)-->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<!--ОСНОВНЫЕ СТИЛИ-->
<link rel="stylesheet" href="style.css">

<title>e-Shop</title>
</head>

<body>
<div id="app">
<header>
<!--КОРЗИНА-->
<div class="dropdown mydropdown">
<div>
<form class="form-inline my-2 my-lg-0 search">
<button class="btn my-2 my-sm-0 mybtn" type="submit" @click="filterGoods"><i
class="fas fa-search"></i></button>
<input class="form-control mr-sm-2" @click="searchLine = !searchLine" type="search"
placeholder="Search" type='text' aria-label="Search" v-model="text">
<div class="searchDropdown" v-show="searchLine">
<p>{{text}}</p>
</div>
</form>
</div>
<button class="cart-button dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">Корзина</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#">Ваша корзина</a>
<div class="basket" v-if="basket.length > 0">
<p class="elem-of-basket" v-for="elem of basket">{{ elem.title }}</p>
</div>
<div class="basket" v-else>
<p class="elem-of-basket">Нет данных</p>
</div>
</div>
</div>
</header>

<main>
<!--ЗАГРУЗКА ТОВАРОВ-->
<div class="products">

<div class="product-item" v-for="product of products" :key="product.id_product">
<img :src="imgCatalog" alt="">
<div class="desc">
<h3> {{ product.product_name }} </h3>
<p> {{ product.price }} </p>
<button class="buy-btn" @click="addProduct (product)">Купить</button>
</div>
</div>

</div>
</main>
</div>

<script src="vue.js"></script>
<script src="script.js"></script>
<!--ОСНОВНОЙ СКРИПТ-->




<!--НЕОСНОВНОЙ СКРИПТ (БУТСТРАП)-->

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
</body>

</html>
239 changes: 239 additions & 0 deletions hw5/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
'use strict';
// Фэйк АПИ
const API = 'https://raw.githubusercontent.com/GeekBrainsTutorial/online-store-api/master/responses';

let app = new Vue ({
el: '#app',
data: {
catalogUrl: '/catalogData.json',
products: [],
imgCatalog: 'http://placehold.it/250x150',
basket: [],
searchLine: false,
text: ''
},
methods: {
getJson (url) {
return fetch (url)
.then (result => result.json ())
.catch (error => {
console.log (error)
})
},
addProduct (product) {
console.log (product.id_product);
},

filterGoods() {

},

showBasketContent() {
this.basket.forEach(element => {

});
}


},

mounted () {
this.getJson (`${API + this.catalogUrl}`)
.then (data => {
for (let el of data) {
this.products.push (el)
}
});
this.getJson (`getProducts.json`)
.then (data => {
for (let el of data) {
this.products.push (el)
}
});
}
});











//ОПТИМИЗАЦИЯ

// class List {
// constructor (url, container) {
// this.container = container;
// this.url = url;
// this.goods = [];
// this.allProducts = [];
// this._init ()

// }
// _init () {
// return false
// }
// getJson (url) {
// console.log(this);
// console.log(url);
// return fetch(url ? url : `${API + this.url}`)
// .then (result => result.json ())
// .catch (error => {
// console.log (error)
// })
// }

// handleData (data) {
// this.goods = [...data];
// this.render ()
// }
// sumPrice () {
// return this.allProducts.reduce((accum, item) => accum += item.price, 0)
// }
// render () {
// const block = document.querySelector (this.container);
// for (let product of this.goods) {

// const prod = new lists[this.constructor.name] (product);
// this.allProducts.push(prod);
// block.insertAdjacentHTML ('beforeend', prod.render ())
// }
// }
// }

// class Item {
// constructor(el, price) {
// this.product_name = el.product_name;
// this.price = el.price;
// this.id_product = el.id_product
// }
// render() {
// return `<div class="goods-item">
// <h5>${this.product_name}</h5>
// <p>${this.price} руб.</p>
// <button
// class="addButton"
// data-name="${this.product_name}"
// data-name="${this.product_name}"
// data-price="${this.price}"
// >Добавить</button>
// <button class="removeButton"
// data-id="${this.id_product}"
// >Удалить</button>
// </div>`;
// }
// }

// class ProductsList extends List {
// constructor (cart, url = '/catalogData.json', container ='.products') {
// super (url, container);
// this.cart = cart;
// this.getJson ()
// .then (data => this.handleData (data));
// }
// _init () {
// document.querySelector (this.container).addEventListener ('click', evt => {
// if (evt.target.classList.contains('addButton')) {
// this.cart.addProduct (evt.target)
// }
// })
// }
// }


// class ProductItem extends Item {}

// class Cart extends List {
// constructor (url = '/getBasket.json', container ='.basket') {
// super (url, container);
// this.getJson ()
// .then (data => this.handleData (data.contents));
// }
// addProduct (element) {
// this.getJson (`${API}/addToBasket.json`)
// .then (data => {
// if (data.result) {
// let productId = + element.dataset['id'];
// let find = this.allProducts.find (product => product.id_product === productId);

// if (find) {
// find.quantity++;
// this._updateCart (find)
// } else {
// let product = {
// id_product : productId,
// price : + element.dataset['price'],
// product_name : + element.dataset['name'],
// quantity : 1
// };
// this.goods = [product];
// this.render ();
// }
// } else {
// console.log ('some error here')
// }
// })
// }
// removeProduct (element) {
// this.getJson (`${API}/deleteFromBasket.json`)
// .then (data => {
// if (data.result) {
// let productId = + element.dataset['id'];
// let find = this.allProducts.find (product => product.id_product === productId);

// if (find.quantity > 1) {
// find.quantity --;
// this._updateCart(find);
// } else {
// this.allProducts.splice(this.indexOf(find), 1);
// document.querySelector (`.cart-item[data-id="${productId}]`).remove ()
// }
// } else {
// console.log ('some error here')
// }
// })
// }
// _updateCart (product) {
// let block = document.querySelector (`.cart-item[data-id="${productId}]`);
// block.querySelector (`.product-quantity`).textContent = `Количество: ${product.quantity}`;
// block.querySelector (`.product-price`).textContent = `${this.price * product.price} руб.`;
// }
// _init () {
// document.querySelector ('.cart-button').addEventListener ('click', () => {
// document.querySelector (this.container.classList.toggle('invisible'))
// });
// document.querySelector (this.container).addEventListener ('click', evt => {
// if (evt.target.classList.contains ('del-btn')) {
// this.removeProduct (evt.target)
// }
// })
// }
// };

// class CartItem extends Item{
// constructor (el) {
// super (el);
// this.quantity = el.quantity;
// }
// render () {
// return `<div class="cart-item" data-id="${this.id_product}">
// <h6>${this.product_name}</h6>
// <p class="product-price">${this.price} руб.</p>
// <p class="product-quantity">Количество: ${this.quantity}</p>
// <button class="del-btn" data-id="${this.id_product}"> &times; </button>
// </div>`;
// }
// };

// let lists = {
// ProductsList : ProductItem,
// Cart : CartItem
// };

// let cart = new Cart ();
// let products = new ProductsList (cart);

Loading