From 00fd3fe19b8d8ee643935fe163a8673b7817905f Mon Sep 17 00:00:00 2001 From: q2012 Date: Thu, 26 May 2016 11:55:03 +0300 Subject: [PATCH] Add files via upload --- Frontend/www/assets/js/main.js | 407 ++++++++++++++- Frontend/www/assets/less/main.less | 264 +++++++++- .../www/assets/less/pizza/pizza-card.less | 13 + Frontend/www/index.html | 493 +++++++++++++++++- 4 files changed, 1139 insertions(+), 38 deletions(-) diff --git a/Frontend/www/assets/js/main.js b/Frontend/www/assets/js/main.js index da110673c..83d6aebe0 100644 --- a/Frontend/www/assets/js/main.js +++ b/Frontend/www/assets/js/main.js @@ -188,7 +188,7 @@ exports.PizzaMenu_OneItem = ejs.compile("<%\n\nfunction getIngredientsArray(pizz exports.PizzaCart_OneItem = ejs.compile("
\n <%= pizza.title %> (<%= size %>)\n
Ціна: <%= pizza[size].price %> грн.
\n
\n \n <%= quantity %>\n \n
\n
"); -},{"ejs":6}],3:[function(require,module,exports){ +},{"ejs":8}],3:[function(require,module,exports){ /** * Created by chaika on 25.01.16. */ @@ -209,7 +209,7 @@ $(function(){ * Created by chaika on 02.02.16. */ var Templates = require('../Templates'); - +var Storage = require('./Storage'); //Перелік розмірів піци var PizzaSize = { Big: "big_size", @@ -248,6 +248,11 @@ function initialiseCart() { //Фукнція віпрацьвуватиме при завантаженні сторінки //Тут можна наприклад, зчитати вміст корзини який збережено в Local Storage то показати його //TODO: ... +var saved_pizza = Storage.get('cart'); + if(saved_pizza){ + Cart = saved_pizza; + } + updateCart(); } @@ -284,7 +289,7 @@ function updateCart() { Cart.forEach(showOnePizzaInCart); } - +Storage.set("cart",Cart); exports.removeFromCart = removeFromCart; exports.addToCart = addToCart; @@ -292,7 +297,7 @@ exports.getPizzaInCart = getPizzaInCart; exports.initialiseCart = initialiseCart; exports.PizzaSize = PizzaSize; -},{"../Templates":2}],5:[function(require,module,exports){ +},{"../Templates":2,"./Storage":6}],5:[function(require,module,exports){ /** * Created by chaika on 02.02.16. */ @@ -349,6 +354,387 @@ function initialiseMenu() { exports.filterPizza = filterPizza; exports.initialiseMenu = initialiseMenu; },{"../Pizza_List":1,"../Templates":2,"./PizzaCart":4}],6:[function(require,module,exports){ +var basil = require('basil.js'); +basil = new basil(); +exports.get = function(key) { + return basil.get(key); +}; +exports.set = function(key, value) { + return basil.set(key, value); +};/** + * Created by Angelina on 03.02.2016. + */ + +},{"basil.js":7}],7:[function(require,module,exports){ +(function () { + // Basil + var Basil = function (options) { + return Basil.utils.extend({}, Basil.plugins, new Basil.Storage().init(options)); + }; + + // Version + Basil.version = '0.4.2'; + + // Utils + Basil.utils = { + extend: function () { + var destination = typeof arguments[0] === 'object' ? arguments[0] : {}; + for (var i = 1; i < arguments.length; i++) { + if (arguments[i] && typeof arguments[i] === 'object') + for (var property in arguments[i]) + destination[property] = arguments[i][property]; + } + return destination; + }, + each: function (obj, fnIterator, context) { + if (this.isArray(obj)) { + for (var i = 0; i < obj.length; i++) + if (fnIterator.call(context, obj[i], i) === false) return; + } else if (obj) { + for (var key in obj) + if (fnIterator.call(context, obj[key], key) === false) return; + } + }, + tryEach: function (obj, fnIterator, fnError, context) { + this.each(obj, function (value, key) { + try { + return fnIterator.call(context, value, key); + } catch (error) { + if (this.isFunction(fnError)) { + try { + fnError.call(context, value, key, error); + } catch (error) {} + } + } + }, this); + }, + registerPlugin: function (methods) { + Basil.plugins = this.extend(methods, Basil.plugins); + } + }; + // Add some isType methods: isArguments, isBoolean, isFunction, isString, isArray, isNumber, isDate, isRegExp. + var types = ['Arguments', 'Boolean', 'Function', 'String', 'Array', 'Number', 'Date', 'RegExp'] + for (var i = 0; i < types.length; i++) { + Basil.utils['is' + types[i]] = (function (type) { + return function (obj) { + return Object.prototype.toString.call(obj) === '[object ' + type + ']'; + }; + })(types[i]); + } + + // Plugins + Basil.plugins = {}; + + // Options + Basil.options = Basil.utils.extend({ + namespace: 'b45i1', + storages: ['local', 'cookie', 'session', 'memory'], + expireDays: 365 + }, window.Basil ? window.Basil.options : {}); + + // Storage + Basil.Storage = function () { + var _salt = 'b45i1' + (Math.random() + 1) + .toString(36) + .substring(7), + _storages = {}, + _toStoragesArray = function (storages) { + if (Basil.utils.isArray(storages)) + return storages; + return Basil.utils.isString(storages) ? [storages] : []; + }, + _toStoredKey = function (namespace, path) { + var key = ''; + if (Basil.utils.isString(path) && path.length) + path = [path]; + if (Basil.utils.isArray(path) && path.length) + key = path.join('.'); + return key && namespace ? namespace + '.' + key : key; + }, + _toKeyName = function (namespace, key) { + if (!namespace) + return key; + return key.replace(new RegExp('^' + namespace + '.'), ''); + }, + _toStoredValue = function (value) { + return JSON.stringify(value); + }, + _fromStoredValue = function (value) { + return value ? JSON.parse(value) : null; + }; + + // HTML5 web storage interface + var webStorageInterface = { + engine: null, + check: function () { + try { + window[this.engine].setItem(_salt, true); + window[this.engine].removeItem(_salt); + } catch (e) { + return false; + } + return true; + }, + set: function (key, value, options) { + if (!key) + throw Error('invalid key'); + window[this.engine].setItem(key, value); + }, + get: function (key) { + return window[this.engine].getItem(key); + }, + remove: function (key) { + window[this.engine].removeItem(key); + }, + reset: function (namespace) { + for (var i = 0, key; i < window[this.engine].length; i++) { + key = window[this.engine].key(i); + if (!namespace || key.indexOf(namespace) === 0) { + this.remove(key); + i--; + } + } + }, + keys: function (namespace) { + var keys = []; + for (var i = 0, key; i < window[this.engine].length; i++) { + key = window[this.engine].key(i); + if (!namespace || key.indexOf(namespace) === 0) + keys.push(_toKeyName(namespace, key)); + } + return keys; + } + }; + + // local storage + _storages.local = Basil.utils.extend({}, webStorageInterface, { + engine: 'localStorage' + }); + // session storage + _storages.session = Basil.utils.extend({}, webStorageInterface, { + engine: 'sessionStorage' + }); + + // memory storage + _storages.memory = { + _hash: {}, + check: function () { + return true; + }, + set: function (key, value, options) { + if (!key) + throw Error('invalid key'); + this._hash[key] = value; + }, + get: function (key) { + return this._hash[key] || null; + }, + remove: function (key) { + delete this._hash[key]; + }, + reset: function (namespace) { + for (var key in this._hash) { + if (!namespace || key.indexOf(namespace) === 0) + this.remove(key); + } + }, + keys: function (namespace) { + var keys = []; + for (var key in this._hash) + if (!namespace || key.indexOf(namespace) === 0) + keys.push(_toKeyName(namespace, key)); + return keys; + } + }; + + // cookie storage + _storages.cookie = { + check: function () { + return navigator.cookieEnabled; + }, + set: function (key, value, options) { + if (!this.check()) + throw Error('cookies are disabled'); + options = options || {}; + if (!key) + throw Error('invalid key'); + var cookie = encodeURIComponent(key) + '=' + encodeURIComponent(value); + // handle expiration days + if (options.expireDays) { + var date = new Date(); + date.setTime(date.getTime() + (options.expireDays * 24 * 60 * 60 * 1000)); + cookie += '; expires=' + date.toGMTString(); + } + // handle domain + if (options.domain && options.domain !== document.domain) { + var _domain = options.domain.replace(/^\./, ''); + if (document.domain.indexOf(_domain) === -1 || _domain.split('.').length <= 1) + throw Error('invalid domain'); + cookie += '; domain=' + options.domain; + } + // handle secure + if (options.secure === true) { + cookie += '; secure'; + } + document.cookie = cookie + '; path=/'; + }, + get: function (key) { + if (!this.check()) + throw Error('cookies are disabled'); + var encodedKey = encodeURIComponent(key); + var cookies = document.cookie ? document.cookie.split(';') : []; + // retrieve last updated cookie first + for (var i = cookies.length - 1, cookie; i >= 0; i--) { + cookie = cookies[i].replace(/^\s*/, ''); + if (cookie.indexOf(encodedKey + '=') === 0) + return decodeURIComponent(cookie.substring(encodedKey.length + 1, cookie.length)); + } + return null; + }, + remove: function (key) { + // remove cookie from main domain + this.set(key, '', { expireDays: -1 }); + // remove cookie from upper domains + var domainParts = document.domain.split('.'); + for (var i = domainParts.length; i >= 0; i--) { + this.set(key, '', { expireDays: -1, domain: '.' + domainParts.slice(- i).join('.') }); + } + }, + reset: function (namespace) { + var cookies = document.cookie ? document.cookie.split(';') : []; + for (var i = 0, cookie, key; i < cookies.length; i++) { + cookie = cookies[i].replace(/^\s*/, ''); + key = cookie.substr(0, cookie.indexOf('=')); + if (!namespace || key.indexOf(namespace) === 0) + this.remove(key); + } + }, + keys: function (namespace) { + if (!this.check()) + throw Error('cookies are disabled'); + var keys = [], + cookies = document.cookie ? document.cookie.split(';') : []; + for (var i = 0, cookie, key; i < cookies.length; i++) { + cookie = cookies[i].replace(/^\s*/, ''); + key = decodeURIComponent(cookie.substr(0, cookie.indexOf('='))); + if (!namespace || key.indexOf(namespace) === 0) + keys.push(_toKeyName(namespace, key)); + } + return keys; + } + }; + + return { + init: function (options) { + this.setOptions(options); + return this; + }, + setOptions: function (options) { + this.options = Basil.utils.extend({}, this.options || Basil.options, options); + }, + support: function (storage) { + return _storages.hasOwnProperty(storage); + }, + check: function (storage) { + if (this.support(storage)) + return _storages[storage].check(); + return false; + }, + set: function (key, value, options) { + options = Basil.utils.extend({}, this.options, options); + if (!(key = _toStoredKey(options.namespace, key))) + return false; + value = options.raw === true ? value : _toStoredValue(value); + var where = null; + // try to set key/value in first available storage + Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage, index) { + _storages[storage].set(key, value, options); + where = storage; + return false; // break; + }, null, this); + if (!where) { + // key has not been set anywhere + return false; + } + // remove key from all other storages + Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage, index) { + if (storage !== where) + _storages[storage].remove(key); + }, null, this); + return true; + }, + get: function (key, options) { + options = Basil.utils.extend({}, this.options, options); + if (!(key = _toStoredKey(options.namespace, key))) + return null; + var value = null; + Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage, index) { + if (value !== null) + return false; // break if a value has already been found. + value = _storages[storage].get(key, options) || null; + value = options.raw === true ? value : _fromStoredValue(value); + }, function (storage, index, error) { + value = null; + }, this); + return value; + }, + remove: function (key, options) { + options = Basil.utils.extend({}, this.options, options); + if (!(key = _toStoredKey(options.namespace, key))) + return; + Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage) { + _storages[storage].remove(key); + }, null, this); + }, + reset: function (options) { + options = Basil.utils.extend({}, this.options, options); + Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage) { + _storages[storage].reset(options.namespace); + }, null, this); + }, + keys: function (options) { + options = options || {}; + var keys = []; + for (var key in this.keysMap(options)) + keys.push(key); + return keys; + }, + keysMap: function (options) { + options = Basil.utils.extend({}, this.options, options); + var map = {}; + Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage) { + Basil.utils.each(_storages[storage].keys(options.namespace), function (key) { + map[key] = Basil.utils.isArray(map[key]) ? map[key] : []; + map[key].push(storage); + }, this); + }, null, this); + return map; + } + }; + }; + + // Access to native storages, without namespace or basil value decoration + Basil.memory = new Basil.Storage().init({ storages: 'memory', namespace: null, raw: true }); + Basil.cookie = new Basil.Storage().init({ storages: 'cookie', namespace: null, raw: true }); + Basil.localStorage = new Basil.Storage().init({ storages: 'local', namespace: null, raw: true }); + Basil.sessionStorage = new Basil.Storage().init({ storages: 'session', namespace: null, raw: true }); + + // browser export + window.Basil = Basil; + + // AMD export + if (typeof define === 'function' && define.amd) { + define(function() { + return Basil; + }); + // commonjs export + } else if (typeof module !== 'undefined' && module.exports) { + module.exports = Basil; + } + +})(); + +},{}],8:[function(require,module,exports){ /* * EJS Embedded JavaScript templates * Copyright 2112 Matthew Eernisse (mde@fleegix.org) @@ -1099,7 +1485,7 @@ if (typeof window != 'undefined') { window.ejs = exports; } -},{"../package.json":8,"./utils":7,"fs":9,"path":10}],7:[function(require,module,exports){ +},{"../package.json":10,"./utils":9,"fs":11,"path":12}],9:[function(require,module,exports){ /* * EJS Embedded JavaScript templates * Copyright 2112 Matthew Eernisse (mde@fleegix.org) @@ -1242,7 +1628,7 @@ exports.cache = { }; -},{}],8:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ module.exports={ "name": "ejs", "description": "Embedded JavaScript templates", @@ -1318,13 +1704,12 @@ module.exports={ "shasum": "82e15b1b2a1f948b18097476ba2bd7c66f4d1566", "tarball": "http://registry.npmjs.org/ejs/-/ejs-2.4.1.tgz" }, - "directories": {}, - "readme": "ERROR: No README data found!" + "directories": {} } -},{}],9:[function(require,module,exports){ +},{}],11:[function(require,module,exports){ -},{}],10:[function(require,module,exports){ +},{}],12:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -1552,7 +1937,7 @@ var substr = 'ab'.substr(-1) === 'b' ; }).call(this,require('_process')) -},{"_process":11}],11:[function(require,module,exports){ +},{"_process":13}],13:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; diff --git a/Frontend/www/assets/less/main.less b/Frontend/www/assets/less/main.less index e49b0b5fa..f8e21fa4d 100644 --- a/Frontend/www/assets/less/main.less +++ b/Frontend/www/assets/less/main.less @@ -1,3 +1,263 @@ -@mainColor: blue; +@mainColor: rgba(232, 151, 51, 0.99); +@footerColor: #f98b17; +@fontSize: 20px; +@import "pizza/pizza-card"; -@import "pizza/pizza-card"; \ No newline at end of file +.row{ +margin: auto; +} + +.main-header-top { + width: 100%; + font-size: @fontSize; + line-height: 11px; + color: white; + opacity: 50%; + margin: 11px 0 14px 0; + border-bottom : 1px solid white; + +}.main-header { + font-size: 0; + position: fixed; + top: 0; + left: 0; + width: 100%; + background: black; + opacity:0.8; + padding: 0 25% 0 130px; + z-index: 10; + } +.main-header-top, .header-box, .main-header-top-item { + display: inline-block; +} +.fs14 { + font-size: @fontSize; + line-height: 20px; + margin-right: 30px; + color:grey; +} + +.fs15 { + font-size: @fontSize; + line-height: 20px; + margin-right: 30px; + color:white; +} +.main, nav{ + display: block; +} +.main-nav-item { + display: inline-block; + vertical-align: top; + font-size: @fontSize; + line-height: 17px; + margin-right: 15px; + padding-bottom: 7px; + color: #fff; +} +.site-icon { + position: fixed; + left: 9px; + top: 0px; + background: orange; + border-left: 1px solid #d16200; + border-right: 1px solid #d16200; + z-index: 99; + width: 100px; + height: 87px; + font-size: @fontSize*1.5; + padding: 10px; + padding-top:15px; + text-transform: uppercase; + text-align: center; + color: #fff; +} +.title-1{ + font-size: @fontSize*1.5; + margin-top: 15px; + color: #fefefe; + text-decoration: none; +} +.pizza-logo{ + font-size: @fontSize*1.5; + margin-top: 15px; + color: #fefefe; + text-decoration:none; +} +.sign-in-button { + float: right; + margin-top: -11px; + } +.left-panel { + +margin-right: 500px; + padding-left: 30px; + padding-right: 360px; + max-width: 1354px; +} +.right-panel { + position: fixed!important; + top: 0; + right: 0; + bottom: 0; + padding-top: 35px; + margin-left: 20px; + padding-right: 0!important; + padding-left: 0!important; + box-orient: vertical; + flex-direction: column; + min-width: 330px; + width: 330px; + height: 100%; + background: #fff; + box-shadow: rgba(0,0,0,.2) -3px 3px 10px; + z-index: 1000; +} +.r1, .r2{ + width: 100%; + box-sizing: content-box; + display: block!important; +} + +.r2{ + background-color: gainsboro; +} +.r1{ + margin-bottom: 10%; +} + +.order-state{ + margin:10%; + margin-top:5%; +} + +.sum-title{ + margin-left:-5%; + font-weight: 400; +} +.sum-number{ + margin-left:30%; + font-size: 20px; + font-weight:400; +} + +.button-order{ + margin-top: 10%; +} + +.right-panel .order-list-title { + font-size: @fontSize; + font-weight: 700; + line-height: 17px; + margin-left: 20px; +} +.right-panel .clear-order-wrap { + padding-right: 15px; + padding-left: 20px; + font-size: 10px; + line-height: 11px; + font-weight: 400; + color: gray; +} +.mainTitle { + margin: 10px; + margin-top: 100px; +} +.pizzaType { + color: @mainColor; + background-color: white; + border: none; + margin-bottom: 20px; +} + +.pizzaType:hover{ + background-color: @mainColor; + color:white; +} + +.pizzaType-active { + color:white; + background-color: @mainColor; +} + +.allPizzas { + font-size: 28px; + display: inline-block; + margin: auto; +} +.allPizzasNumber { + font-size: @fontSize; + color: white; + background-color: @mainColor; + border-radius: 20px; + margin: 5px; + padding-left: 10px; + padding-right: 10px; +} +.discount { + position: fixed; + bottom: 0px; + left: 10px; +} +.buy{ + margin-left: 60px; +} +.order-one { + height: 120px; + padding: 20px 61px 10px 24px; + border-bottom: 1px solid rgba(0,0,0,.1); + position: relative; + overflow: hidden; +} +.order-one .order-title { + line-height: 16px; + font-size: 20px; + color: #ec890e; +} +.img-aside { + position: absolute; + right: -50px; + top: 15px; + border-radius: 50% 0 0 50%; + max-height: 96px; + max-width: 96px; +} +img { + vertical-align: middle; +} +.btn-circle { + width: 30px; + height: 30px; + padding: 6px 0; + font-size: 12px; + border-radius: 15px; +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: 400; + line-height: 1; +} + +.pull-right{ + position: absolute; + font-size: 16px; + margin-right: -15px; + margin-top:-15px; + margin-left:65%; +} +.title-1{ + font-size: @fontSize*1.5; + margin-top: 15px; + color: #fefefe; + text-decoration: none; +} +.pizza-logo{ + font-size: @fontSize*1.5; + margin-top: 15px; + color: #fefefe; + text-decoration:none; +} \ No newline at end of file diff --git a/Frontend/www/assets/less/pizza/pizza-card.less b/Frontend/www/assets/less/pizza/pizza-card.less index a0448e2df..d4766279e 100644 --- a/Frontend/www/assets/less/pizza/pizza-card.less +++ b/Frontend/www/assets/less/pizza/pizza-card.less @@ -7,4 +7,17 @@ color: @mainColor; background-color: lighten(@mainColor, 45%); } + .remark { + color: #bdc4ca; + font-size: 14px; + } + .buy { + margin-left: 60px; + } + + .description { + font-size: @fontSize; + height: 65px; + overflow: hidden; + } } \ No newline at end of file diff --git a/Frontend/www/index.html b/Frontend/www/index.html index 41873db7d..ad62d0477 100644 --- a/Frontend/www/index.html +++ b/Frontend/www/index.html @@ -13,59 +13,502 @@ + - -
+ + +
+
+ + +
+
+

(044)222 3 222

+
+
+
+ 24 години / 7 днів на тиждень +
+
+
+
+
+

Безкоштовна доставка піци

+
+
+ +
+ + +
+ +
+
Усі піци
+ 9 +
+
+ + + + + + +
+ +
-
+
+ -

Thumbnail label

+

Міксовий поло

+

М'ясна

+ +

Куриця копчена, сир моцарелла, ананаси, кукурудза, петрушка, соус томатний

+
+
+ + 30 +
+
+ + 500 +
+

130

грн.
+ +
+
+
+ + 50
+
+ + 850
+

220

грн.
+ +
+
+
+
+ +
+
+ Популярна + -

Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.

+

BBQ

+

З грибами

-

- Button 2 - Button 1 -

+

Мисливські ковбаски, ковбаски папероні, сир домашній, печериці, петрушка, оливки

+
+
+ + 30 +
+
+ + 500 +
+

170

грн.
+ +
+
+
+ + 50
+
+ + 850
+

240

грн.
+
+
- + -

Thumbnail label

+

Маргарита

+

Вега

-

Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.

+

Базилік, орегано, помідор, соус томатний, сир моцарелла

+
+
+ + 30 +
+
+ + 500 +
+

120

грн.
+ +
+
+
+ + 50
+
+ + 850
+

210

грн.
+ +
+
+
+
+
+
+ Нова + -

- Button 3 - Button 4 -

+

Россо Густо

+

З морепродуктами

+

Ікра червона, лосось копчений, сир моцарелла, оливкова олія, вершки

+
+
+ + 30 +
+
+ + 500 +
+

180

грн.
+ +
+
+
+ + 50
+
+ + 850
+

270

грн.
+ +
+
+
+ + + +

Бамбіно

+

З грибами

+

Базилік, шинка, печериці, ковбаса салямі, перець болгарський, соус томатний, сир моцарелла

+
+
+ + 30 +
+
+ + 500 +
+

140

грн.
+ +
+
+
+ + 50
+
+ + 850
+

210

грн.
+ +
+
+
+
- + -

Thumbnail label

+

Вернісаж

+

З грибами

-

Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.

+

Печериці, ковбаски мисливські, куряча грудинка, цибуля, петрушка, соус, сир моцарелла, огірки

+
+
+ + 30 +
+
+ + 500 +
+

140

грн.
+ +
+
+
+ + 50
+
+ + 850
+

230

грн.
+ +
+
+
+
+
+ +
+ + +

Імпреза

+

М'ясна

-

- Button 5 - Button 6 -

+

Балик, салямі, куриця, сир моцарелла, сир рокфорд, ананаси, томатна паста, петрушка

+
+
+ + 30 +
+
+ + 500 +
+

130

грн.
+ +
+
+
+ + 130
+
+ + 850
+

230

грн.
+ +
+ +
+
+ + +

Дольче Маре

+

З морепродуктами

+ +

Ікра червона, креветки тигрові, морський коктейль, сир моцарелла, вершки

+
+
+ + 30 +
+
+ + 500 +
+

180

грн.
+ +
+
+
+ + 50
+
+ + 850
+

270

грн.
+ +
+
+
+
+ +
+
+ + +

Капрічіоза

+

М'ясна

+ +

Шинка, ковбаса салямі, куряча грудинка, петрушка, сир моцарелла, вершки

+
+
+ + 30 +
+
+ + 500 +
+

140

грн.
+ +
+
+
+ + 50
+
+ + 850
+

220

грн.
+ +
+ + +
+
+
+ +
+ +
+
+ + Замовлення + 3 + + + + Очистити замовлення + + +
+ +
+
+ Піца +

+ BBQ (Мала) +

+
+ + 30 + + 500 +
+
+ 170грн + + + + + 1 + + + + + + + + + + +
+
+
+ Піца +

+ Міксовий поло (Велика) +

+
+ + 50 + + 850 +
+
+ 220грн + + + + + 1 + + + + + + + + + + +
+
+
+ Піца +

+ Россо Густо (Мала) +

+
+ + 30 + + 500 +
+
+ 180грн + + + + + 1 + + + + + + + + + + +
+
+ + + +
+ + Сума замовлення: + + 570 грн +
+ + + +
+ +
+
+ + +
+ +

ЦЬОГО

ТИЖНЯ

НА ВСЕ


-20%
+
@@ -75,6 +518,6 @@ - + - + \ No newline at end of file