├── .env.example
├── .gitignore
├── LICENSE
├── OnlineStore
├── OnlineStore
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── about
│ ├── __init__.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── urls.py
│ └── views.py
├── cart
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── urls.py
│ └── views.py
├── checkout
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── urls.py
│ └── views.py
├── data.json
├── manage.py
├── media
│ ├── categories
│ │ ├── TV_ppwkV1B.webp
│ │ ├── accessories_tmYriK7.jfif
│ │ ├── books_1GGrYRo.jpg
│ │ ├── cloth_3lvPJ7G.jfif
│ │ ├── gifts_XeUxR8Q.jfif
│ │ ├── household-appliances_tBZV85q.webp
│ │ ├── jewelry_RUe9kx2.jfif
│ │ ├── perfumes_K06mfT5.jfif
│ │ ├── shoes_SdkPIZW.jfif
│ │ ├── smartphone_a95wGX0.jpg
│ │ ├── tech_WrOLWez.jfif
│ │ └── transport_qqhaDGt.png
│ └── items
│ │ ├── 1984_XO3HTUv.jpg
│ │ ├── Bosch-TWK8633P_hZC2KUv.jpg
│ │ ├── Columbia-Pike-Lake-Hooded-Jacket_gePQSn1.jfif
│ │ ├── DeLonghi_ECAM_23.460.S.png
│ │ ├── Galaxy-Tab-S7_CST8Ne2.jfif
│ │ ├── JBL-Charge-5_tpjg2Xk.webp
│ │ ├── Lenovo_IdeaPad_5.webp
│ │ ├── Levis-501-Original-Fit-Jeans_SsgbwEn.jfif
│ │ ├── Samsung_QE55QN85A.jfif
│ │ ├── Sony-WH-1000XM4_YjrBbWL.jfif
│ │ ├── Timberland-6-Inch-Premium-Waterproof-Boots_HoI879Z.webp
│ │ ├── Xiaomi-Mi-Electric-Scooter-3_RUMgxCZ.jpg
│ │ ├── Xiaomi-Mi-Smart-Band-6_wMwNqOM.jfif
│ │ ├── Xiaomi-Redmi-Note-11-Pro_CgkQnGC.jpg
│ │ ├── bracer_mdB2w4O.jpg
│ │ ├── brilliant_ring_WMwQsJB.jpg
│ │ ├── chanel-5_a1Dm3hf.jfif
│ │ ├── dior-jadore_v5cw0dV.jpg
│ │ ├── giorgio-armani-si_GU7DrBB.jfif
│ │ ├── ice-and-fire_Ryk7YEj.jpg
│ │ ├── iphone13_NZPTaAW.jpg
│ │ ├── kolie.jpg
│ │ ├── little-prince_YqX3QwM.webp
│ │ ├── massage-chair_RrFiiNO.webp
│ │ ├── smart-bottle_E5WIu9I.jpg
│ │ ├── tom-ford-black-orchid_TOXDMnZ.jpg
│ │ └── yves-saint-laurent-black-opium_dCWKzwO.jpg
├── static
│ ├── admin
│ │ ├── css
│ │ │ ├── autocomplete.css
│ │ │ ├── base.css
│ │ │ ├── changelists.css
│ │ │ ├── dashboard.css
│ │ │ ├── fonts.css
│ │ │ ├── forms.css
│ │ │ ├── login.css
│ │ │ ├── nav_sidebar.css
│ │ │ ├── responsive.css
│ │ │ ├── responsive_rtl.css
│ │ │ ├── rtl.css
│ │ │ ├── vendor
│ │ │ │ └── select2
│ │ │ │ │ ├── LICENSE-SELECT2.md
│ │ │ │ │ ├── select2.css
│ │ │ │ │ └── select2.min.css
│ │ │ └── widgets.css
│ │ ├── fonts
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.txt
│ │ │ ├── Roboto-Bold-webfont.woff
│ │ │ ├── Roboto-Light-webfont.woff
│ │ │ └── Roboto-Regular-webfont.woff
│ │ ├── img
│ │ │ ├── LICENSE
│ │ │ ├── README.txt
│ │ │ ├── calendar-icons.svg
│ │ │ ├── gis
│ │ │ │ ├── move_vertex_off.svg
│ │ │ │ └── move_vertex_on.svg
│ │ │ ├── icon-addlink.svg
│ │ │ ├── icon-alert.svg
│ │ │ ├── icon-calendar.svg
│ │ │ ├── icon-changelink.svg
│ │ │ ├── icon-clock.svg
│ │ │ ├── icon-deletelink.svg
│ │ │ ├── icon-no.svg
│ │ │ ├── icon-unknown-alt.svg
│ │ │ ├── icon-unknown.svg
│ │ │ ├── icon-viewlink.svg
│ │ │ ├── icon-yes.svg
│ │ │ ├── inline-delete.svg
│ │ │ ├── search.svg
│ │ │ ├── selector-icons.svg
│ │ │ ├── sorting-icons.svg
│ │ │ ├── tooltag-add.svg
│ │ │ └── tooltag-arrowright.svg
│ │ └── js
│ │ │ ├── SelectBox.js
│ │ │ ├── SelectFilter2.js
│ │ │ ├── actions.js
│ │ │ ├── admin
│ │ │ ├── DateTimeShortcuts.js
│ │ │ └── RelatedObjectLookups.js
│ │ │ ├── autocomplete.js
│ │ │ ├── calendar.js
│ │ │ ├── cancel.js
│ │ │ ├── change_form.js
│ │ │ ├── collapse.js
│ │ │ ├── core.js
│ │ │ ├── inlines.js
│ │ │ ├── jquery.init.js
│ │ │ ├── nav_sidebar.js
│ │ │ ├── popup_response.js
│ │ │ ├── prepopulate.js
│ │ │ ├── prepopulate_init.js
│ │ │ ├── urlify.js
│ │ │ └── vendor
│ │ │ ├── jquery
│ │ │ ├── LICENSE.txt
│ │ │ ├── jquery.js
│ │ │ └── jquery.min.js
│ │ │ ├── select2
│ │ │ ├── LICENSE.md
│ │ │ ├── i18n
│ │ │ │ ├── af.js
│ │ │ │ ├── ar.js
│ │ │ │ ├── az.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── bn.js
│ │ │ │ ├── bs.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de.js
│ │ │ │ ├── dsb.js
│ │ │ │ ├── el.js
│ │ │ │ ├── en.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hsb.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── hy.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ja.js
│ │ │ │ ├── ka.js
│ │ │ │ ├── km.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── ms.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── ne.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── ps.js
│ │ │ │ ├── pt-BR.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sl.js
│ │ │ │ ├── sq.js
│ │ │ │ ├── sr-Cyrl.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tk.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-CN.js
│ │ │ │ └── zh-TW.js
│ │ │ ├── select2.full.js
│ │ │ └── select2.full.min.js
│ │ │ └── xregexp
│ │ │ ├── LICENSE.txt
│ │ │ ├── xregexp.js
│ │ │ └── xregexp.min.js
│ ├── assets
│ │ ├── css
│ │ │ ├── cart.css
│ │ │ ├── checkout.css
│ │ │ ├── fontawesome-all.min.css
│ │ │ ├── item_details.css
│ │ │ ├── main.css
│ │ │ ├── noscript.css
│ │ │ ├── profile.css
│ │ │ └── users.css
│ │ ├── js
│ │ │ ├── ajax.js
│ │ │ ├── breakpoints.min.js
│ │ │ ├── browser.min.js
│ │ │ ├── cart.js
│ │ │ ├── checkout.js
│ │ │ ├── jquery.min.js
│ │ │ ├── main.js
│ │ │ ├── payment.js
│ │ │ └── util.js
│ │ ├── sass
│ │ │ ├── base
│ │ │ │ ├── _page.scss
│ │ │ │ ├── _reset.scss
│ │ │ │ └── _typography.scss
│ │ │ ├── components
│ │ │ │ ├── _actions.scss
│ │ │ │ ├── _box.scss
│ │ │ │ ├── _button.scss
│ │ │ │ ├── _form.scss
│ │ │ │ ├── _icon.scss
│ │ │ │ ├── _icons.scss
│ │ │ │ ├── _image.scss
│ │ │ │ ├── _list.scss
│ │ │ │ ├── _row.scss
│ │ │ │ ├── _section.scss
│ │ │ │ ├── _table.scss
│ │ │ │ └── _tiles.scss
│ │ │ ├── layout
│ │ │ │ ├── _footer.scss
│ │ │ │ ├── _header.scss
│ │ │ │ ├── _main.scss
│ │ │ │ ├── _menu.scss
│ │ │ │ └── _wrapper.scss
│ │ │ ├── libs
│ │ │ │ ├── _breakpoints.scss
│ │ │ │ ├── _functions.scss
│ │ │ │ ├── _html-grid.scss
│ │ │ │ ├── _mixins.scss
│ │ │ │ ├── _vars.scss
│ │ │ │ └── _vendor.scss
│ │ │ ├── main.scss
│ │ │ └── noscript.scss
│ │ └── webfonts
│ │ │ ├── fa-brands-400.eot
│ │ │ ├── fa-brands-400.svg
│ │ │ ├── fa-brands-400.ttf
│ │ │ ├── fa-brands-400.woff
│ │ │ ├── fa-brands-400.woff2
│ │ │ ├── fa-regular-400.eot
│ │ │ ├── fa-regular-400.svg
│ │ │ ├── fa-regular-400.ttf
│ │ │ ├── fa-regular-400.woff
│ │ │ ├── fa-regular-400.woff2
│ │ │ ├── fa-solid-900.eot
│ │ │ ├── fa-solid-900.svg
│ │ │ ├── fa-solid-900.ttf
│ │ │ ├── fa-solid-900.woff
│ │ │ └── fa-solid-900.woff2
│ └── images
│ │ ├── cart.jpg
│ │ ├── garbage.svg
│ │ ├── logo.svg
│ │ ├── pic01.jpg
│ │ ├── pic14.jpg
│ │ └── profile.png
├── store
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── paginator.py
│ ├── urls.py
│ └── views.py
├── templates
│ ├── about
│ │ ├── author.html
│ │ └── project.html
│ ├── base.html
│ ├── cart
│ │ └── cart.html
│ ├── checkout
│ │ ├── checkout.html
│ │ ├── popup.html
│ │ └── thank_you.html
│ ├── includes
│ │ ├── footer.html
│ │ ├── header.html
│ │ └── paginator.html
│ ├── store
│ │ ├── item_details.html
│ │ ├── main_page.html
│ │ ├── tag_details.html
│ │ └── tag_list.html
│ └── users
│ │ ├── feedback_failed.html
│ │ ├── feedback_success.html
│ │ ├── logged_out.html
│ │ ├── login.html
│ │ ├── managment
│ │ ├── password_change_done.html
│ │ ├── password_change_form.html
│ │ ├── password_reset_complete.html
│ │ ├── password_reset_confirm.html
│ │ ├── password_reset_done.html
│ │ ├── password_reset_email.html
│ │ ├── password_reset_form.html
│ │ └── reset_done.html
│ │ ├── profile.html
│ │ ├── signup.html
│ │ └── user_orders.html
└── users
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── migrations
│ ├── 0001_initial.py
│ └── __init__.py
│ ├── models.py
│ ├── urls.py
│ └── views.py
├── README.md
└── requirements.txt
/.env.example:
--------------------------------------------------------------------------------
1 | SECRET_KEY = 'MY-SECRET_KEY'
2 |
3 | TELEGRAM_TOKEN = '013123123:qwertyuiopsdfghjklzxcvbnm,1234567890'
4 | TELEGRAM_CHAT_ID = '123456789'
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 2-Clause License
2 |
3 | Copyright (c) 2023, Artem Natolin
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | 1. Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 |
11 | 2. Redistributions in binary form must reproduce the above copyright notice,
12 | this list of conditions and the following disclaimer in the documentation
13 | and/or other materials provided with the distribution.
14 |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 |
--------------------------------------------------------------------------------
/OnlineStore/OnlineStore/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/OnlineStore/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/OnlineStore/asgi.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from django.core.asgi import get_asgi_application
4 |
5 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'OnlineStore.settings')
6 |
7 | application = get_asgi_application()
8 |
--------------------------------------------------------------------------------
/OnlineStore/OnlineStore/urls.py:
--------------------------------------------------------------------------------
1 | from django.conf import settings
2 | from django.conf.urls.static import static
3 | from django.contrib import admin
4 | from django.urls import include, path
5 |
6 | urlpatterns = [
7 | path('admin/', admin.site.urls),
8 | path('cart/', include('cart.urls')),
9 | path('about/', include('about.urls')),
10 | path('checkout/', include('checkout.urls')),
11 | path('users/', include('users.urls')),
12 | path('', include('store.urls')),
13 | path('', include('django.contrib.auth.urls'))
14 | ]
15 |
16 | if settings.DEBUG:
17 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
18 | urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
19 |
--------------------------------------------------------------------------------
/OnlineStore/OnlineStore/wsgi.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from django.core.wsgi import get_wsgi_application
4 |
5 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'OnlineStore.settings')
6 |
7 | application = get_wsgi_application()
8 |
--------------------------------------------------------------------------------
/OnlineStore/about/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/about/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/about/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class AboutConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'about'
7 | verbose_name = 'Общая информация'
8 |
--------------------------------------------------------------------------------
/OnlineStore/about/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/about/migrations/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/about/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from .views import AboutAuthorView, AboutProjectView
4 |
5 | app_name = 'about'
6 |
7 | urlpatterns = [
8 | path('project/', AboutProjectView.as_view(), name='about_project'),
9 | path('me/', AboutAuthorView.as_view(), name='about_me'),
10 | ]
11 |
--------------------------------------------------------------------------------
/OnlineStore/about/views.py:
--------------------------------------------------------------------------------
1 | from django.views.generic.base import TemplateView
2 |
3 |
4 | class AboutAuthorView(TemplateView):
5 | template_name = 'about/author.html'
6 |
7 |
8 | class AboutProjectView(TemplateView):
9 | template_name = 'about/project.html'
10 |
--------------------------------------------------------------------------------
/OnlineStore/cart/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/cart/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/cart/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | from .models import Cart, CartItem
4 |
5 |
6 | class CartItemAdmin(admin.ModelAdmin):
7 | list_display = ('item', 'cart', 'quantity', 'total_price_field',)
8 | search_fields = ('item__title', 'cart__user__username',)
9 | list_filter = ('item', 'cart__user',)
10 | raw_id_fields = ('item', 'cart',)
11 |
12 | def total_price_field(self, obj):
13 | return obj.total_price
14 |
15 | total_price_field.short_description = 'Общая цена'
16 |
17 |
18 | class CartAdmin(admin.ModelAdmin):
19 | list_display = ('user', 'created_at', 'cart_items', 'total_price_field',)
20 | list_filter = ('created_at',)
21 | search_fields = ('user__username', 'user__email', 'created_at',)
22 | readonly_fields = ('total_price',)
23 |
24 | def cart_items(self, obj):
25 | return [o for o in obj.items.all()]
26 |
27 | def total_price_field(self, obj):
28 | return obj.total_price
29 |
30 | cart_items.short_description = 'Список товаров'
31 | total_price_field.short_description = 'Общая цена'
32 |
33 |
34 | admin.site.register(Cart, CartAdmin)
35 | admin.site.register(CartItem, CartItemAdmin)
36 |
--------------------------------------------------------------------------------
/OnlineStore/cart/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class CartConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'cart'
7 | verbose_name = 'Корзина'
8 |
--------------------------------------------------------------------------------
/OnlineStore/cart/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.10 on 2023-03-21 14:58
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | initial = True
10 |
11 | dependencies = [
12 | ]
13 |
14 | operations = [
15 | migrations.CreateModel(
16 | name='Cart',
17 | fields=[
18 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19 | ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
20 | ],
21 | options={
22 | 'verbose_name': 'Корзина',
23 | 'verbose_name_plural': 'Корзины',
24 | },
25 | ),
26 | migrations.CreateModel(
27 | name='CartItem',
28 | fields=[
29 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
30 | ('quantity', models.PositiveIntegerField(default=1, verbose_name='Количество')),
31 | ('cart', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='cart.cart', verbose_name='Корзина')),
32 | ],
33 | options={
34 | 'verbose_name': 'Товар в корзине',
35 | 'verbose_name_plural': 'Товары в корзине',
36 | },
37 | ),
38 | ]
39 |
--------------------------------------------------------------------------------
/OnlineStore/cart/migrations/0002_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.10 on 2023-03-21 14:58
2 |
3 | from django.conf import settings
4 | from django.db import migrations, models
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | initial = True
11 |
12 | dependencies = [
13 | migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14 | ('cart', '0001_initial'),
15 | ('store', '0001_initial'),
16 | ]
17 |
18 | operations = [
19 | migrations.AddField(
20 | model_name='cartitem',
21 | name='item',
22 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='store.item', verbose_name='Товар'),
23 | ),
24 | migrations.AddField(
25 | model_name='cart',
26 | name='user',
27 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='carts', to=settings.AUTH_USER_MODEL, verbose_name='Покупатель'),
28 | ),
29 | ]
30 |
--------------------------------------------------------------------------------
/OnlineStore/cart/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/cart/migrations/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/cart/models.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth.models import User
2 | from django.db import models
3 |
4 | from store.models import Item
5 |
6 |
7 | class Cart(models.Model):
8 | user = models.ForeignKey(
9 | User,
10 | on_delete=models.CASCADE,
11 | related_name='carts',
12 | verbose_name='Покупатель',
13 | )
14 | created_at = models.DateTimeField(
15 | auto_now_add=True, verbose_name='Дата создания',)
16 |
17 | class Meta:
18 | verbose_name = 'Корзина'
19 | verbose_name_plural = 'Корзины'
20 |
21 | @property
22 | def total_price(self):
23 | total_price = sum(item.total_price for item in self.items.all())
24 | return total_price
25 |
26 | def __str__(self):
27 | return f"Cart {self.id} for {self.user.username}"
28 |
29 | def clear(self):
30 | self.items.all().delete()
31 |
32 |
33 | class CartItem(models.Model):
34 | cart = models.ForeignKey(
35 | Cart,
36 | on_delete=models.CASCADE,
37 | related_name='items',
38 | verbose_name='Корзина',
39 | )
40 | item = models.ForeignKey(
41 | Item,
42 | on_delete=models.CASCADE,
43 | verbose_name='Товар',
44 | )
45 | quantity = models.PositiveIntegerField(
46 | default=1, verbose_name='Количество',)
47 |
48 | class Meta:
49 | verbose_name = 'Товар в корзине'
50 | verbose_name_plural = 'Товары в корзине'
51 |
52 | @property
53 | def total_price(self):
54 | total_price = self.quantity * self.item.price
55 | return total_price
56 |
57 | def __str__(self):
58 | return f"{self.quantity} x {self.item.title}"
59 |
--------------------------------------------------------------------------------
/OnlineStore/cart/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from .views import add_to_cart, cart, delete_cart_item, update_cart_item
4 |
5 | app_name = 'cart'
6 |
7 | urlpatterns = [
8 | path('', cart, name='cart'),
9 | path('add//', add_to_cart, name='add_to_cart'),
10 | path('delete//', delete_cart_item, name='delete_cart_item'),
11 | path('update_cart_item/', update_cart_item, name='update_cart_item'),
12 | ]
13 |
--------------------------------------------------------------------------------
/OnlineStore/checkout/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/checkout/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/checkout/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | from .models import Order, OrderItem, ShippingAddress
4 |
5 |
6 | class OrderAdmin(admin.ModelAdmin):
7 | list_display = ('user', 'created_at', 'shipping_address', 'status',
8 | 'order_items', 'payment_method', 'total_price_field',)
9 | list_filter = ('status', 'payment_method',)
10 | search_fields = ('user__username', 'shipping_address__first_name', 'shipping_address__last_name',)
11 | date_hierarchy = 'created_at'
12 |
13 | def order_items(self, obj):
14 | return [o for o in obj.items.all()]
15 |
16 | def total_price_field(self, obj):
17 | return obj.total_price
18 |
19 | total_price_field.short_description = 'Общая цена'
20 | order_items.short_description = 'Список товаров'
21 |
22 |
23 | class OrderItemAdmin(admin.ModelAdmin):
24 | list_display = ('item', 'order', 'quantity', 'total_price_field',)
25 | list_filter = ('order__status',)
26 | search_fields = ('item__title', 'order__user__username',)
27 |
28 | def total_price_field(self, obj):
29 | return obj.total_price
30 |
31 | total_price_field.short_description = 'Общая цена'
32 |
33 |
34 | class ShippingAddressAdmin(admin.ModelAdmin):
35 | list_display = ('id', 'first_name', 'last_name', 'email',
36 | 'phone', 'address_line_1', 'address_line_2',)
37 | search_fields = ('first_name', 'last_name', 'email',)
38 |
39 |
40 | admin.site.register(Order, OrderAdmin)
41 | admin.site.register(OrderItem, OrderItemAdmin)
42 | admin.site.register(ShippingAddress, ShippingAddressAdmin)
43 |
--------------------------------------------------------------------------------
/OnlineStore/checkout/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class CheckoutConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'checkout'
7 | verbose_name = 'Оформление заказа'
8 |
--------------------------------------------------------------------------------
/OnlineStore/checkout/forms.py:
--------------------------------------------------------------------------------
1 | from django import forms
2 |
3 | from .models import Order
4 |
5 |
6 | class PlaceholderForm(forms.Form):
7 | def __init__(self, *args, **kwargs):
8 | super(PlaceholderForm, self).__init__(*args, **kwargs)
9 | for _, field in self.fields.items():
10 | field.widget.attrs['placeholder'] = field.help_text
11 |
12 |
13 | class OrderCreateForm(PlaceholderForm):
14 | first_name = forms.CharField(max_length=100, help_text='Имя')
15 | last_name = forms.CharField(max_length=100, help_text='Фамилия')
16 | email = forms.EmailField(help_text='Email')
17 | phone = forms.CharField(max_length=20, help_text='Телефон')
18 | address_line_1 = forms.CharField(max_length=100, help_text='Адрес')
19 | address_line_2 = forms.CharField(
20 | max_length=100,
21 | required=False,
22 | help_text='Адрес (дополнительно)'
23 | )
24 | payment_method = forms.ChoiceField(choices=Order.PAYMENT_METHOD_CHOICES)
25 |
--------------------------------------------------------------------------------
/OnlineStore/checkout/migrations/0002_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.10 on 2023-03-21 14:58
2 |
3 | from django.conf import settings
4 | from django.db import migrations, models
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | initial = True
11 |
12 | dependencies = [
13 | migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14 | ('checkout', '0001_initial'),
15 | ('store', '0001_initial'),
16 | ]
17 |
18 | operations = [
19 | migrations.AddField(
20 | model_name='orderitem',
21 | name='item',
22 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='store.item', verbose_name='Товар'),
23 | ),
24 | migrations.AddField(
25 | model_name='orderitem',
26 | name='order',
27 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='checkout.order', verbose_name='Заказ'),
28 | ),
29 | migrations.AddField(
30 | model_name='order',
31 | name='user',
32 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL, verbose_name='Покупатель'),
33 | ),
34 | ]
35 |
--------------------------------------------------------------------------------
/OnlineStore/checkout/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/checkout/migrations/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/checkout/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from .views import checkout, create_order, thank_you
4 |
5 | app_name = 'checkout'
6 |
7 | urlpatterns = [
8 | path('', checkout, name='checkout'),
9 | path('create-order/', create_order, name='create_order'),
10 | path('thank-you//', thank_you, name='thank_you'),
11 | ]
12 |
--------------------------------------------------------------------------------
/OnlineStore/checkout/views.py:
--------------------------------------------------------------------------------
1 | from django.contrib import messages
2 | from django.contrib.auth.decorators import login_required
3 | from django.shortcuts import get_object_or_404, redirect, render
4 |
5 | from cart.views import Cart
6 | from .forms import OrderCreateForm
7 | from .models import Order, OrderItem, ShippingAddress
8 |
9 |
10 | @login_required
11 | def checkout(request):
12 | """
13 | Представление чекаута.
14 | """
15 | cart = Cart.objects.get(user=request.user)
16 | form = OrderCreateForm()
17 | context = {'cart': cart, 'form': form}
18 |
19 | return render(request, 'checkout/checkout.html', context)
20 |
21 |
22 | @login_required
23 | def thank_you(request, order_id):
24 | """
25 | Страница благодарности за заказ.
26 | """
27 | order = get_object_or_404(Order, id=order_id, user=request.user)
28 | return render(request, 'checkout/thank_you.html', {'order': order})
29 |
30 |
31 | @login_required
32 | def create_order(request):
33 | """
34 | Создание экземпляров Order и ShippingAddress
35 | из формы и редирект в профиль пользователя,
36 | либо передаем форму обратно.
37 | """
38 | cart = get_object_or_404(Cart, user=request.user)
39 |
40 | if cart.items.exists() and request.method == 'POST':
41 | form = OrderCreateForm(request.POST)
42 | if form.is_valid():
43 | order = Order.objects.create(
44 | payment_method=form.cleaned_data['payment_method'],
45 | user=request.user,
46 | )
47 |
48 | ShippingAddress.objects.create(
49 | first_name=form.cleaned_data['first_name'],
50 | last_name=form.cleaned_data['last_name'],
51 | email=form.cleaned_data['email'],
52 | phone=form.cleaned_data['phone'],
53 | address_line_1=form.cleaned_data['address_line_1'],
54 | address_line_2=form.cleaned_data['address_line_2'],
55 | order=order,
56 | )
57 |
58 | for cart_item in cart.items.all():
59 | OrderItem.objects.create(
60 | order=order,
61 | item=cart_item.item,
62 | quantity=cart_item.quantity,
63 | price=cart_item.item.price
64 | )
65 |
66 | cart.clear()
67 | return redirect('checkout:thank_you', order_id=order.id)
68 | else:
69 | form = OrderCreateForm()
70 | messages.warning(
71 | request, 'Форма не была корректно обработана, введите данные еще раз')
72 | context = {'form': form, 'cart': cart}
73 | return render(request, 'checkout/checkout.html', context)
74 |
--------------------------------------------------------------------------------
/OnlineStore/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | """Django's command-line utility for administrative tasks."""
3 | import os
4 | import sys
5 |
6 |
7 | def main():
8 | """Run administrative tasks."""
9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'OnlineStore.settings')
10 | try:
11 | from django.core.management import execute_from_command_line
12 | except ImportError as exc:
13 | raise ImportError(
14 | "Couldn't import Django. Are you sure it's installed and "
15 | "available on your PYTHONPATH environment variable? Did you "
16 | "forget to activate a virtual environment?"
17 | ) from exc
18 | execute_from_command_line(sys.argv)
19 |
20 |
21 | if __name__ == '__main__':
22 | main()
23 |
--------------------------------------------------------------------------------
/OnlineStore/media/categories/TV_ppwkV1B.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/TV_ppwkV1B.webp
--------------------------------------------------------------------------------
/OnlineStore/media/categories/accessories_tmYriK7.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/accessories_tmYriK7.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/books_1GGrYRo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/books_1GGrYRo.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/categories/cloth_3lvPJ7G.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/cloth_3lvPJ7G.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/gifts_XeUxR8Q.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/gifts_XeUxR8Q.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/household-appliances_tBZV85q.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/household-appliances_tBZV85q.webp
--------------------------------------------------------------------------------
/OnlineStore/media/categories/jewelry_RUe9kx2.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/jewelry_RUe9kx2.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/perfumes_K06mfT5.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/perfumes_K06mfT5.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/shoes_SdkPIZW.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/shoes_SdkPIZW.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/smartphone_a95wGX0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/smartphone_a95wGX0.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/categories/tech_WrOLWez.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/tech_WrOLWez.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/categories/transport_qqhaDGt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/categories/transport_qqhaDGt.png
--------------------------------------------------------------------------------
/OnlineStore/media/items/1984_XO3HTUv.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/1984_XO3HTUv.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/Bosch-TWK8633P_hZC2KUv.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Bosch-TWK8633P_hZC2KUv.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/Columbia-Pike-Lake-Hooded-Jacket_gePQSn1.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Columbia-Pike-Lake-Hooded-Jacket_gePQSn1.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/DeLonghi_ECAM_23.460.S.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/DeLonghi_ECAM_23.460.S.png
--------------------------------------------------------------------------------
/OnlineStore/media/items/Galaxy-Tab-S7_CST8Ne2.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Galaxy-Tab-S7_CST8Ne2.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/JBL-Charge-5_tpjg2Xk.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/JBL-Charge-5_tpjg2Xk.webp
--------------------------------------------------------------------------------
/OnlineStore/media/items/Lenovo_IdeaPad_5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Lenovo_IdeaPad_5.webp
--------------------------------------------------------------------------------
/OnlineStore/media/items/Levis-501-Original-Fit-Jeans_SsgbwEn.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Levis-501-Original-Fit-Jeans_SsgbwEn.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/Samsung_QE55QN85A.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Samsung_QE55QN85A.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/Sony-WH-1000XM4_YjrBbWL.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Sony-WH-1000XM4_YjrBbWL.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/Timberland-6-Inch-Premium-Waterproof-Boots_HoI879Z.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Timberland-6-Inch-Premium-Waterproof-Boots_HoI879Z.webp
--------------------------------------------------------------------------------
/OnlineStore/media/items/Xiaomi-Mi-Electric-Scooter-3_RUMgxCZ.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Xiaomi-Mi-Electric-Scooter-3_RUMgxCZ.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/Xiaomi-Mi-Smart-Band-6_wMwNqOM.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Xiaomi-Mi-Smart-Band-6_wMwNqOM.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/Xiaomi-Redmi-Note-11-Pro_CgkQnGC.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/Xiaomi-Redmi-Note-11-Pro_CgkQnGC.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/bracer_mdB2w4O.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/bracer_mdB2w4O.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/brilliant_ring_WMwQsJB.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/brilliant_ring_WMwQsJB.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/chanel-5_a1Dm3hf.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/chanel-5_a1Dm3hf.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/dior-jadore_v5cw0dV.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/dior-jadore_v5cw0dV.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/giorgio-armani-si_GU7DrBB.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/giorgio-armani-si_GU7DrBB.jfif
--------------------------------------------------------------------------------
/OnlineStore/media/items/ice-and-fire_Ryk7YEj.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/ice-and-fire_Ryk7YEj.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/iphone13_NZPTaAW.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/iphone13_NZPTaAW.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/kolie.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/kolie.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/little-prince_YqX3QwM.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/little-prince_YqX3QwM.webp
--------------------------------------------------------------------------------
/OnlineStore/media/items/massage-chair_RrFiiNO.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/massage-chair_RrFiiNO.webp
--------------------------------------------------------------------------------
/OnlineStore/media/items/smart-bottle_E5WIu9I.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/smart-bottle_E5WIu9I.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/tom-ford-black-orchid_TOXDMnZ.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/tom-ford-black-orchid_TOXDMnZ.jpg
--------------------------------------------------------------------------------
/OnlineStore/media/items/yves-saint-laurent-black-opium_dCWKzwO.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/media/items/yves-saint-laurent-black-opium_dCWKzwO.jpg
--------------------------------------------------------------------------------
/OnlineStore/static/admin/css/dashboard.css:
--------------------------------------------------------------------------------
1 | /* DASHBOARD */
2 |
3 | .dashboard .module table th {
4 | width: 100%;
5 | }
6 |
7 | .dashboard .module table td {
8 | white-space: nowrap;
9 | }
10 |
11 | .dashboard .module table td a {
12 | display: block;
13 | padding-right: .6em;
14 | }
15 |
16 | /* RECENT ACTIONS MODULE */
17 |
18 | .module ul.actionlist {
19 | margin-left: 0;
20 | }
21 |
22 | ul.actionlist li {
23 | list-style-type: none;
24 | overflow: hidden;
25 | text-overflow: ellipsis;
26 | }
27 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/css/fonts.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Roboto';
3 | src: url('../fonts/Roboto-Bold-webfont.woff');
4 | font-weight: 700;
5 | font-style: normal;
6 | }
7 |
8 | @font-face {
9 | font-family: 'Roboto';
10 | src: url('../fonts/Roboto-Regular-webfont.woff');
11 | font-weight: 400;
12 | font-style: normal;
13 | }
14 |
15 | @font-face {
16 | font-family: 'Roboto';
17 | src: url('../fonts/Roboto-Light-webfont.woff');
18 | font-weight: 300;
19 | font-style: normal;
20 | }
21 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/css/login.css:
--------------------------------------------------------------------------------
1 | /* LOGIN FORM */
2 |
3 | .login {
4 | background: var(--darkened-bg);
5 | height: auto;
6 | }
7 |
8 | .login #header {
9 | height: auto;
10 | padding: 15px 16px;
11 | justify-content: center;
12 | }
13 |
14 | .login #header h1 {
15 | font-size: 18px;
16 | }
17 |
18 | .login #header h1 a {
19 | color: var(--header-link-color);
20 | }
21 |
22 | .login #content {
23 | padding: 20px 20px 0;
24 | }
25 |
26 | .login #container {
27 | background: var(--body-bg);
28 | border: 1px solid var(--hairline-color);
29 | border-radius: 4px;
30 | overflow: hidden;
31 | width: 28em;
32 | min-width: 300px;
33 | margin: 100px auto;
34 | height: auto;
35 | }
36 |
37 | .login .form-row {
38 | padding: 4px 0;
39 | }
40 |
41 | .login .form-row label {
42 | display: block;
43 | line-height: 2em;
44 | }
45 |
46 | .login .form-row #id_username, .login .form-row #id_password {
47 | padding: 8px;
48 | width: 100%;
49 | box-sizing: border-box;
50 | }
51 |
52 | .login .submit-row {
53 | padding: 1em 0 0 0;
54 | margin: 0;
55 | text-align: center;
56 | }
57 |
58 | .login .password-reset-link {
59 | text-align: center;
60 | }
61 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/css/responsive_rtl.css:
--------------------------------------------------------------------------------
1 | /* TABLETS */
2 |
3 | @media (max-width: 1024px) {
4 | [dir="rtl"] .colMS {
5 | margin-right: 0;
6 | }
7 |
8 | [dir="rtl"] #user-tools {
9 | text-align: right;
10 | }
11 |
12 | [dir="rtl"] #changelist .actions label {
13 | padding-left: 10px;
14 | padding-right: 0;
15 | }
16 |
17 | [dir="rtl"] #changelist .actions select {
18 | margin-left: 0;
19 | margin-right: 15px;
20 | }
21 |
22 | [dir="rtl"] .change-list .filtered .results,
23 | [dir="rtl"] .change-list .filtered .paginator,
24 | [dir="rtl"] .filtered #toolbar,
25 | [dir="rtl"] .filtered div.xfull,
26 | [dir="rtl"] .filtered .actions,
27 | [dir="rtl"] #changelist-filter {
28 | margin-left: 0;
29 | }
30 |
31 | [dir="rtl"] .inline-group ul.tools a.add,
32 | [dir="rtl"] .inline-group div.add-row a,
33 | [dir="rtl"] .inline-group .tabular tr.add-row td a {
34 | padding: 8px 26px 8px 10px;
35 | background-position: calc(100% - 8px) 9px;
36 | }
37 |
38 | [dir="rtl"] .related-widget-wrapper-link + .selector {
39 | margin-right: 0;
40 | margin-left: 15px;
41 | }
42 |
43 | [dir="rtl"] .selector .selector-filter label {
44 | margin-right: 0;
45 | margin-left: 8px;
46 | }
47 |
48 | [dir="rtl"] .object-tools li {
49 | float: right;
50 | }
51 |
52 | [dir="rtl"] .object-tools li + li {
53 | margin-left: 0;
54 | margin-right: 15px;
55 | }
56 |
57 | [dir="rtl"] .dashboard .module table td a {
58 | padding-left: 0;
59 | padding-right: 16px;
60 | }
61 | }
62 |
63 | /* MOBILE */
64 |
65 | @media (max-width: 767px) {
66 | [dir="rtl"] .aligned .related-lookup,
67 | [dir="rtl"] .aligned .datetimeshortcuts {
68 | margin-left: 0;
69 | margin-right: 15px;
70 | }
71 |
72 | [dir="rtl"] .aligned ul {
73 | margin-right: 0;
74 | }
75 |
76 | [dir="rtl"] #changelist-filter {
77 | margin-left: 0;
78 | margin-right: 0;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/css/vendor/select2/LICENSE-SELECT2.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/fonts/README.txt:
--------------------------------------------------------------------------------
1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
2 | WOFF files extracted using https://github.com/majodev/google-webfonts-helper
3 | Weights used in this project: Light (300), Regular (400), Bold (700)
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/fonts/Roboto-Bold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/admin/fonts/Roboto-Bold-webfont.woff
--------------------------------------------------------------------------------
/OnlineStore/static/admin/fonts/Roboto-Light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/admin/fonts/Roboto-Light-webfont.woff
--------------------------------------------------------------------------------
/OnlineStore/static/admin/fonts/Roboto-Regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/admin/fonts/Roboto-Regular-webfont.woff
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Code Charm Ltd
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/README.txt:
--------------------------------------------------------------------------------
1 | All icons are taken from Font Awesome (http://fontawesome.io/) project.
2 | The Font Awesome font is licensed under the SIL OFL 1.1:
3 | - https://scripts.sil.org/OFL
4 |
5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG
6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license
7 | in current folder).
8 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/calendar-icons.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/gis/move_vertex_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/gis/move_vertex_on.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-addlink.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-alert.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-calendar.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-changelink.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-clock.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-deletelink.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-no.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-unknown-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-unknown.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-viewlink.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/icon-yes.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/inline-delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/sorting-icons.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/tooltag-add.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/img/tooltag-arrowright.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/autocomplete.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | {
3 | const $ = django.jQuery;
4 | const init = function($element, options) {
5 | const settings = $.extend({
6 | ajax: {
7 | data: function(params) {
8 | return {
9 | term: params.term,
10 | page: params.page,
11 | app_label: $element.data('app-label'),
12 | model_name: $element.data('model-name'),
13 | field_name: $element.data('field-name')
14 | };
15 | }
16 | }
17 | }, options);
18 | $element.select2(settings);
19 | };
20 |
21 | $.fn.djangoAdminSelect2 = function(options) {
22 | const settings = $.extend({}, options);
23 | $.each(this, function(i, element) {
24 | const $element = $(element);
25 | init($element, settings);
26 | });
27 | return this;
28 | };
29 |
30 | $(function() {
31 | // Initialize all autocomplete widgets except the one in the template
32 | // form used when a new formset is added.
33 | $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2();
34 | });
35 |
36 | $(document).on('formset:added', (function() {
37 | return function(event, $newFormset) {
38 | return $newFormset.find('.admin-autocomplete').djangoAdminSelect2();
39 | };
40 | })(this));
41 | }
42 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/cancel.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | {
3 | // Call function fn when the DOM is loaded and ready. If it is already
4 | // loaded, call the function now.
5 | // http://youmightnotneedjquery.com/#ready
6 | function ready(fn) {
7 | if (document.readyState !== 'loading') {
8 | fn();
9 | } else {
10 | document.addEventListener('DOMContentLoaded', fn);
11 | }
12 | }
13 |
14 | ready(function() {
15 | function handleClick(event) {
16 | event.preventDefault();
17 | const params = new URLSearchParams(window.location.search);
18 | if (params.has('_popup')) {
19 | window.close(); // Close the popup.
20 | } else {
21 | window.history.back(); // Otherwise, go back.
22 | }
23 | }
24 |
25 | document.querySelectorAll('.cancel-link').forEach(function(el) {
26 | el.addEventListener('click', handleClick);
27 | });
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/change_form.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | {
3 | const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];
4 | const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName;
5 | if (modelName) {
6 | const form = document.getElementById(modelName + '_form');
7 | for (const element of form.elements) {
8 | // HTMLElement.offsetParent returns null when the element is not
9 | // rendered.
10 | if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) {
11 | element.focus();
12 | break;
13 | }
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/collapse.js:
--------------------------------------------------------------------------------
1 | /*global gettext*/
2 | 'use strict';
3 | {
4 | window.addEventListener('load', function() {
5 | // Add anchor tag for Show/Hide link
6 | const fieldsets = document.querySelectorAll('fieldset.collapse');
7 | for (const [i, elem] of fieldsets.entries()) {
8 | // Don't hide if fields in this fieldset have errors
9 | if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) {
10 | elem.classList.add('collapsed');
11 | const h2 = elem.querySelector('h2');
12 | const link = document.createElement('a');
13 | link.id = 'fieldsetcollapser' + i;
14 | link.className = 'collapse-toggle';
15 | link.href = '#';
16 | link.textContent = gettext('Show');
17 | h2.appendChild(document.createTextNode(' ('));
18 | h2.appendChild(link);
19 | h2.appendChild(document.createTextNode(')'));
20 | }
21 | }
22 | // Add toggle to hide/show anchor tag
23 | const toggleFunc = function(ev) {
24 | if (ev.target.matches('.collapse-toggle')) {
25 | ev.preventDefault();
26 | ev.stopPropagation();
27 | const fieldset = ev.target.closest('fieldset');
28 | if (fieldset.classList.contains('collapsed')) {
29 | // Show
30 | ev.target.textContent = gettext('Hide');
31 | fieldset.classList.remove('collapsed');
32 | } else {
33 | // Hide
34 | ev.target.textContent = gettext('Show');
35 | fieldset.classList.add('collapsed');
36 | }
37 | }
38 | };
39 | document.querySelectorAll('fieldset.module').forEach(function(el) {
40 | el.addEventListener('click', toggleFunc);
41 | });
42 | });
43 | }
44 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/jquery.init.js:
--------------------------------------------------------------------------------
1 | /*global jQuery:false*/
2 | 'use strict';
3 | /* Puts the included jQuery into our own namespace using noConflict and passing
4 | * it 'true'. This ensures that the included jQuery doesn't pollute the global
5 | * namespace (i.e. this preserves pre-existing values for both window.$ and
6 | * window.jQuery).
7 | */
8 | window.django = {jQuery: jQuery.noConflict(true)};
9 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/nav_sidebar.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | {
3 | const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');
4 | if (toggleNavSidebar !== null) {
5 | const navLinks = document.querySelectorAll('#nav-sidebar a');
6 | function disableNavLinkTabbing() {
7 | for (const navLink of navLinks) {
8 | navLink.tabIndex = -1;
9 | }
10 | }
11 | function enableNavLinkTabbing() {
12 | for (const navLink of navLinks) {
13 | navLink.tabIndex = 0;
14 | }
15 | }
16 |
17 | const main = document.getElementById('main');
18 | let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
19 | if (navSidebarIsOpen === null) {
20 | navSidebarIsOpen = 'true';
21 | }
22 | if (navSidebarIsOpen === 'false') {
23 | disableNavLinkTabbing();
24 | }
25 | main.classList.toggle('shifted', navSidebarIsOpen === 'true');
26 |
27 | toggleNavSidebar.addEventListener('click', function() {
28 | if (navSidebarIsOpen === 'true') {
29 | navSidebarIsOpen = 'false';
30 | disableNavLinkTabbing();
31 | } else {
32 | navSidebarIsOpen = 'true';
33 | enableNavLinkTabbing();
34 | }
35 | localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
36 | main.classList.toggle('shifted');
37 | });
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/popup_response.js:
--------------------------------------------------------------------------------
1 | /*global opener */
2 | 'use strict';
3 | {
4 | const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
5 | switch(initData.action) {
6 | case 'change':
7 | opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value);
8 | break;
9 | case 'delete':
10 | opener.dismissDeleteRelatedObjectPopup(window, initData.value);
11 | break;
12 | default:
13 | opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj);
14 | break;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/prepopulate.js:
--------------------------------------------------------------------------------
1 | /*global URLify*/
2 | 'use strict';
3 | {
4 | const $ = django.jQuery;
5 | $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) {
6 | /*
7 | Depends on urlify.js
8 | Populates a selected field with the values of the dependent fields,
9 | URLifies and shortens the string.
10 | dependencies - array of dependent fields ids
11 | maxLength - maximum length of the URLify'd string
12 | allowUnicode - Unicode support of the URLify'd string
13 | */
14 | return this.each(function() {
15 | const prepopulatedField = $(this);
16 |
17 | const populate = function() {
18 | // Bail if the field's value has been changed by the user
19 | if (prepopulatedField.data('_changed')) {
20 | return;
21 | }
22 |
23 | const values = [];
24 | $.each(dependencies, function(i, field) {
25 | field = $(field);
26 | if (field.val().length > 0) {
27 | values.push(field.val());
28 | }
29 | });
30 | prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode));
31 | };
32 |
33 | prepopulatedField.data('_changed', false);
34 | prepopulatedField.on('change', function() {
35 | prepopulatedField.data('_changed', true);
36 | });
37 |
38 | if (!prepopulatedField.val()) {
39 | $(dependencies.join(',')).on('keyup change focus', populate);
40 | }
41 | });
42 | };
43 | }
44 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/prepopulate_init.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | {
3 | const $ = django.jQuery;
4 | const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields');
5 | $.each(fields, function(index, field) {
6 | $('.empty-form .form-row .field-' + field.name + ', .empty-form.form-row .field-' + field.name).addClass('prepopulated_field');
7 | $(field.id).data('dependency_list', field.dependency_list).prepopulate(
8 | field.dependency_ids, field.maxLength, field.allowUnicode
9 | );
10 | });
11 | }
12 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/jquery/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright JS Foundation and other contributors, https://js.foundation/
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/af.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ar.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/az.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/bg.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/bn.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/bs.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/bs",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(n){var r=n.input.length-n.maximum,t="Obrišite "+r+" simbol";return t+=e(r,"","a","a")},inputTooShort:function(n){var r=n.minimum-n.input.length,t="Ukucajte bar još "+r+" simbol";return t+=e(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(n){var r="Možete izabrati samo "+n.maximum+" stavk";return r+=e(n.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Uklonite sve stavke"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ca.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Si us plau, elimina "+n+" car";return r+=1==n?"àcter":"àcters"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Si us plau, introdueix "+n+" car";return r+=1==n?"àcter":"àcters"},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/cs.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/cs",[],function(){function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadejte o jeden znak méně.":t<=4?"Prosím, zadejte o "+e(t,!0)+" znaky méně.":"Prosím, zadejte o "+t+" znaků méně."},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadejte ještě jeden znak.":t<=4?"Prosím, zadejte ještě další "+e(t,!0)+" znaky.":"Prosím, zadejte ještě dalších "+t+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(n){var t=n.maximum;return 1==t?"Můžete zvolit jen jednu položku.":t<=4?"Můžete zvolit maximálně "+e(t,!1)+" položky.":"Můžete zvolit maximálně "+t+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"},removeAllItems:function(){return"Odstraňte všechny položky"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/da.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/de.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/dsb.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/dsb",[],function(){var n=["znamuško","znamušce","znamuška","znamuškow"],e=["zapisk","zapiska","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Pšosym lašuj "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Pšosym zapódaj nanejmjenjej "+a+" "+u(a,n)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(n){return"Móžoš jano "+n.maximum+" "+u(n.maximum,e)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/el.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(n){var e=n.input.length-n.maximum,u="Παρακαλώ διαγράψτε "+e+" χαρακτήρ";return 1==e&&(u+="α"),1!=e&&(u+="ες"),u},inputTooShort:function(n){return"Παρακαλώ συμπληρώστε "+(n.minimum-n.input.length)+" ή περισσότερους χαρακτήρες"},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(n){var e="Μπορείτε να επιλέξετε μόνο "+n.maximum+" επιλογ";return 1==n.maximum&&(e+="ή"),1!=n.maximum&&(e+="ές"),e},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/en.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/es.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Por favor, elimine "+n+" car";return r+=1==n?"ácter":"acteres"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Por favor, introduzca "+n+" car";return r+=1==n?"ácter":"acteres"},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/et.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+=" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/eu.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/fa.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها میتوانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/fi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/fr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/gl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/he.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="נא למחוק ";return r+=1===e?"תו אחד":e+" תווים"},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return r+=1===e?"תו אחד":e+" תווים",r+=" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/hi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/hr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/hsb.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hsb",[],function(){var n=["znamješko","znamješce","znamješka","znamješkow"],e=["zapisk","zapiskaj","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Prošu zhašej "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Prošu zapodaj znajmjeńša "+a+" "+u(a,n)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(n){return"Móžeš jenož "+n.maximum+" "+u(n.maximum,e)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/hu.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/hy.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/id.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/is.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/is",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e="Vinsamlegast styttið texta um "+t+" staf";return t<=1?e:e+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,e="Vinsamlegast skrifið "+t+" staf";return t>1&&(e+="i"),e+=" í viðbót"},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(n){return"Þú getur aðeins valið "+n.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"},removeAllItems:function(){return"Fjarlægðu öll atriði"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/it.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Per favore cancella "+n+" caratter";return t+=1!==n?"i":"e"},inputTooShort:function(e){return"Per favore inserisci "+(e.minimum-e.input.length)+" o più caratteri"},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var n="Puoi selezionare solo "+e.maximum+" element";return 1!==e.maximum?n+="i":n+="o",n},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"},removeAllItems:function(){return"Rimuovi tutti gli oggetti"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ja.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ka.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ka",[],function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/km.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ko.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/lt.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/lt",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t="Pašalinkite "+i+" simbol";return t+=n(i,"į","ius","ių")},inputTooShort:function(e){var i=e.minimum-e.input.length,t="Įrašykite dar "+i+" simbol";return t+=n(i,"į","ius","ių")},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(e){var i="Jūs galite pasirinkti tik "+e.maximum+" element";return i+=n(e.maximum,"ą","us","ų")},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"},removeAllItems:function(){return"Pašalinti visus elementus"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/lv.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/lv",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i="Lūdzu ievadiet par "+u;return(i+=" simbol"+e(u,"iem","u","iem"))+" mazāk"},inputTooShort:function(n){var u=n.minimum-n.input.length,i="Lūdzu ievadiet vēl "+u;return i+=" simbol"+e(u,"us","u","us")},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(n){var u="Jūs varat izvēlēties ne vairāk kā "+n.maximum;return u+=" element"+e(n.maximum,"us","u","us")},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/mk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/mk",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,"Ве молиме внесете "+n.maximum+" помалку карактер");return 1!==n.maximum&&(e+="и"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,"Ве молиме внесете уште "+n.maximum+" карактер");return 1!==n.maximum&&(e+="и"),e},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(n){var e="Можете да изберете само "+n.maximum+" ставк";return 1===n.maximum?e+="а":e+="и",e},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"},removeAllItems:function(){return"Отстрани ги сите предмети"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ms.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/nb.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ne.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ne",[],function(){return{errorLoading:function(){return"नतिजाहरु देखाउन सकिएन।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="कृपया "+e+" अक्षर मेटाउनुहोस्।";return 1!=e&&(u+="कृपया "+e+" अक्षरहरु मेटाउनुहोस्।"),u},inputTooShort:function(n){return"कृपया बाँकी रहेका "+(n.minimum-n.input.length)+" वा अरु धेरै अक्षरहरु भर्नुहोस्।"},loadingMore:function(){return"अरु नतिजाहरु भरिँदैछन् …"},maximumSelected:function(n){var e="तँपाई "+n.maximum+" वस्तु मात्र छान्न पाउँनुहुन्छ।";return 1!=n.maximum&&(e="तँपाई "+n.maximum+" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।"),e},noResults:function(){return"कुनै पनि नतिजा भेटिएन।"},searching:function(){return"खोजि हुँदैछ…"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/nl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){return"Gelieve "+(e.input.length-e.maximum)+" karakters te verwijderen"},inputTooShort:function(e){return"Gelieve "+(e.minimum-e.input.length)+" of meer karakters in te voeren"},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var n=1==e.maximum?"kan":"kunnen",r="Er "+n+" maar "+e.maximum+" item";return 1!=e.maximum&&(r+="s"),r+=" worden geselecteerd"},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"},removeAllItems:function(){return"Verwijder alle items"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/pl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pl",[],function(){var n=["znak","znaki","znaków"],e=["element","elementy","elementów"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Usuń "+t+" "+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Podaj przynajmniej "+t+" "+r(t,n)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(n){return"Możesz zaznaczyć tylko "+n.maximum+" "+r(n.maximum,e)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"},removeAllItems:function(){return"Usuń wszystkie przedmioty"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ps.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="د مهربانۍ لمخي "+e+" توری ړنګ کړئ";return 1!=e&&(r=r.replace("توری","توري")),r},inputTooShort:function(n){return"لږ تر لږه "+(n.minimum-n.input.length)+" يا ډېر توري وليکئ"},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(n){var e="تاسو يوازي "+n.maximum+" قلم په نښه کولای سی";return 1!=n.maximum&&(e=e.replace("قلم","قلمونه")),e},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."},removeAllItems:function(){return"ټول توکي لرې کړئ"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/pt-BR.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Apague "+n+" caracter";return 1!=n&&(r+="es"),r},inputTooShort:function(e){return"Digite "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var n="Você só pode selecionar "+e.maximum+" ite";return 1==e.maximum?n+="m":n+="ns",n},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/pt.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var r=e.input.length-e.maximum,n="Por favor apague "+r+" ";return n+=1!=r?"caracteres":"caractere"},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var r="Apenas pode seleccionar "+e.maximum+" ";return r+=1!=e.maximum?"itens":"item"},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ro.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return 1!==t&&(n+="e"),n},inputTooShort:function(e){return"Vă rugăm să introduceți "+(e.minimum-e.input.length)+" sau mai multe caractere"},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",1!==e.maximum&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"},removeAllItems:function(){return"Eliminați toate elementele"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/ru.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ru",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Пожалуйста, введите на "+r+" символ";return u+=n(r,"","a","ов"),u+=" меньше"},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Пожалуйста, введите ещё хотя бы "+r+" символ";return u+=n(r,"","a","ов")},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(e){var r="Вы можете выбрать не более "+e.maximum+" элемент";return r+=n(e.maximum,"","a","ов")},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"},removeAllItems:function(){return"Удалить все элементы"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/sk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadajte o jeden znak menej":t>=2&&t<=4?"Prosím, zadajte o "+e[t](!0)+" znaky menej":"Prosím, zadajte o "+t+" znakov menej"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadajte ešte jeden znak":t<=4?"Prosím, zadajte ešte ďalšie "+e[t](!0)+" znaky":"Prosím, zadajte ešte ďalších "+t+" znakov"},loadingMore:function(){return"Načítanie ďalších výsledkov…"},maximumSelected:function(n){return 1==n.maximum?"Môžete zvoliť len jednu položku":n.maximum>=2&&n.maximum<=4?"Môžete zvoliť najviac "+e[n.maximum](!1)+" položky":"Môžete zvoliť najviac "+n.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"},removeAllItems:function(){return"Odstráňte všetky položky"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/sl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Prosim zbrišite "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Prosim vpišite še "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var n="Označite lahko največ "+e.maximum+" predmet";return 2==e.maximum?n+="a":1!=e.maximum&&(n+="e"),n},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"},removeAllItems:function(){return"Odstranite vse elemente"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/sq.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Të lutem fshi "+n+" karakter";return 1!=n&&(t+="e"),t},inputTooShort:function(e){return"Të lutem shkruaj "+(e.minimum-e.input.length)+" ose më shumë karaktere"},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var n="Mund të zgjedhësh vetëm "+e.maximum+" element";return 1!=e.maximum&&(n+="e"),n},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/sr-Cyrl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr-Cyrl",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Обришите "+r+" симбол";return u+=n(r,"","а","а")},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Укуцајте бар још "+r+" симбол";return u+=n(r,"","а","а")},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(e){var r="Можете изабрати само "+e.maximum+" ставк";return r+=n(e.maximum,"у","е","и")},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/sr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(e){var r=e.input.length-e.maximum,t="Obrišite "+r+" simbol";return t+=n(r,"","a","a")},inputTooShort:function(e){var r=e.minimum-e.input.length,t="Ukucajte bar još "+r+" simbol";return t+=n(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(e){var r="Možete izabrati samo "+e.maximum+" stavk";return r+=n(e.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/sv.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/th.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/tk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/tk",[],function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/tr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/uk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/uk",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(e){return"Будь ласка, видаліть "+(e.input.length-e.maximum)+" "+n(e.maximum,"літеру","літери","літер")},inputTooShort:function(n){return"Будь ласка, введіть "+(n.minimum-n.input.length)+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(e){return"Ви можете вибрати лише "+e.maximum+" "+n(e.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"},removeAllItems:function(){return"Видалити всі елементи"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/vi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/vi",[],function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/zh-CN.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/select2/i18n/zh-TW.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}}),n.define,n.require}();
--------------------------------------------------------------------------------
/OnlineStore/static/admin/js/vendor/xregexp/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2007-2017 Steven Levithan
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/OnlineStore/static/assets/css/cart.css:
--------------------------------------------------------------------------------
1 | .count {
2 | display: flex;
3 | justify-content: center;
4 | text-align: center;
5 | align-items: center;
6 | max-width: 45px;
7 | max-height:45px;
8 | -webkit-box-sizing: border-box;
9 | -moz-box-sizing: border-box;
10 | box-sizing: border-box;
11 | overflow: hidden;
12 | padding: 15px;
13 | margin: auto;
14 | background: #e0e0e0;
15 | border-radius: 30px;
16 | -webkit-transition: max-width 0.5s;
17 | -moz-transition: max-width 0.5s;
18 | -o-transition: max-width 0.5s;
19 | transition: max-width 0.5s;
20 | }
21 | .count:hover,
22 | .count.active {
23 | max-width: 110px;
24 | background: #ffffff;
25 | border: 1px #c2c2c2 solid;
26 | }
27 | .count:hover input,
28 | .count.active input {
29 | border-bottom: 1px #404040 solid;
30 | margin-bottom: -1px;
31 | }
32 | .count input {
33 | width: 45px;
34 | border: none;
35 | background: transparent;
36 | text-align: center;
37 | padding: 0;
38 | margin: 0;
39 | margin-left: -3px;
40 | }
41 | .count span {
42 | cursor: pointer;
43 | }
44 | .count .minus{
45 | font-size: 12px;
46 | margin-right: 10px;
47 | }
48 | .count .plus{
49 | margin-left: 10px;
50 | }
51 | input[type='number'] {
52 | -moz-appearance:textfield;
53 | }
54 | input::-webkit-outer-spin-button,
55 | input::-webkit-inner-spin-button {
56 | -webkit-appearance: none;
57 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/css/checkout.css:
--------------------------------------------------------------------------------
1 | /* Error message */
2 | .error-message {
3 | color: #dc3545;
4 | font-size: 14px;
5 | margin-top: 5px;
6 | }
7 |
8 | .error-message span {
9 | display: block;
10 | margin-bottom: 5px;
11 | }
12 |
13 | /* Popup message */
14 | .messages-container {
15 | position: fixed;
16 | top: 0;
17 | left: 0;
18 | width: 100%;
19 | height: 10%;
20 | background-color: rgb(255, 94, 94);
21 | color: #fff;
22 | opacity: 0;
23 | transition: opacity 0.5s ease-in-out;
24 | display: flex;
25 | justify-content: center;
26 | align-items: center;
27 | z-index: 9999;
28 | }
29 |
30 | .messages-container.show {
31 | opacity: 1;
32 | }
33 |
34 | .messages-container.hide {
35 | opacity: 0;
36 | }
37 |
38 |
39 | /* Popup cart online */
40 | .overlay {
41 | position: fixed;
42 | top: 0;
43 | left: 0;
44 | width: 100%;
45 | height: 100%;
46 | z-index: 999;
47 | background-color: rgba(0, 0, 0, 0.5);
48 | display: none;
49 | }
50 |
51 |
52 | #close-btn {
53 | position: absolute;
54 | top: 10px;
55 | right: 10px;
56 | cursor: pointer;
57 | }
58 |
59 | #online-payment-info {
60 | position: fixed;
61 | top: 50%;
62 | left: 50%;
63 | transform: translate(-50%, -50%);
64 | width: 40%;
65 | height: 70%;
66 | background-color: white;
67 | z-index: 1000;
68 | padding: 20px;
69 | display: none;
70 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/css/item_details.css:
--------------------------------------------------------------------------------
1 | .price {
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | margin: 20px 0;
6 | font-size: 1.5rem;
7 | }
8 |
9 | .old-price {
10 | text-decoration: line-through;
11 | margin-right: 20px;
12 | color: #999;
13 | }
14 |
15 | .new-price {
16 | color: #ff5e00;
17 | }
18 |
19 | .cart {
20 | display: flex;
21 | justify-content: center;
22 | align-items: center;
23 | }
24 |
25 | .cart a {
26 | display: inline-block;
27 | padding: 12px 24px;
28 | background-color: #ff5e00;
29 | color: #fff;
30 | text-decoration: none;
31 | font-size: 1.2rem;
32 | border-radius: 5px;
33 | }
34 |
35 | .cart a:hover {
36 | background-color: #ff7f2a;
37 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/css/noscript.css:
--------------------------------------------------------------------------------
1 | /*
2 | Phantom by HTML5 UP
3 | html5up.net | @ajlkn
4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | */
6 |
7 | /* Tiles */
8 |
9 | body.is-preload .tiles article {
10 | -moz-transform: none;
11 | -webkit-transform: none;
12 | -ms-transform: none;
13 | transform: none;
14 | opacity: 1;
15 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/css/profile.css:
--------------------------------------------------------------------------------
1 | .order-wrapper {
2 | background-color: #f2f2f2;
3 | border-radius: 10px;
4 | padding: 20px;
5 | }
6 |
7 | .order-header {
8 | display: flex;
9 | justify-content: space-between;
10 | margin-bottom: 20px;
11 | }
12 |
13 | .table-wrapper {
14 | overflow-x: auto;
15 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/css/users.css:
--------------------------------------------------------------------------------
1 | .form-field {
2 | display: flex;
3 | align-items: center;
4 | }
5 | .form-field label {
6 | width: 200px;
7 | padding-right: 10px;
8 | }
9 | .form-field input {
10 | flex-grow: 1;
11 | box-sizing: border-box;
12 | }
13 |
14 | .alert-danger {
15 | color: red;
16 | }
17 |
18 | p {
19 | margin-bottom: 5px;
20 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/js/ajax.js:
--------------------------------------------------------------------------------
1 | $('.minus, .plus').click(function () {
2 | var $input = $(this).parent().find('input');
3 | var count = parseInt($input.val());
4 |
5 | if ($(this).hasClass('minus')) {
6 | count = count < 2 ? 1 : count - 1;
7 | } else {
8 | count = count + 1;
9 | }
10 |
11 | $input.val(count);
12 |
13 | var cartItemId = $input.attr('data-cart-item-id');
14 | var newQuantityInput = document.getElementById('new-quantity-input');
15 | var cartItemIdInput = document.getElementById('cart-item-id-input');
16 | var csrfToken = $('input[name="csrfmiddlewaretoken"]').val();
17 | var cartId = $('#cart-total-price').data('cart-id'); // Получение значения cart.id
18 |
19 | newQuantityInput.value = count;
20 | cartItemIdInput.value = cartItemId;
21 |
22 | $.ajax({
23 | url: 'update_cart_item/',
24 | method: "POST",
25 | data: {
26 | cart_id: cartId,
27 | new_quantity: newQuantityInput.value,
28 | cart_item_id: cartItemIdInput.value,
29 | csrfmiddlewaretoken: csrfToken,
30 | },
31 | success: function (data) {
32 | var newQuantity = data.cart_item_quantity;
33 | var newTotalPrice = data.cart_item_total_price;
34 | var newCartTotalPrice = data.cart_total_price;
35 |
36 | $('#cart-item-count').text(data.cart_item_count);
37 | $input.val(newQuantity);
38 | $('.cart-item-total-price[data-cart-item-id="' + cartItemId + '"]').text(newTotalPrice);
39 | $('#cart-total-price').text(newCartTotalPrice);
40 |
41 | console.log('Successful uptated');
42 | },
43 |
44 | error: function () {
45 | console.log('Failed to update cart item');
46 | },
47 | });
48 | });
--------------------------------------------------------------------------------
/OnlineStore/static/assets/js/breakpoints.min.js:
--------------------------------------------------------------------------------
1 | /* breakpoints.js v1.0 | @ajlkn | MIT licensed */
2 | var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e 0) {
7 | messagesContainer.classList.add('show');
8 | setTimeout(function() {
9 | messagesContainer.classList.add('hide');
10 | messagesContainer.classList.remove('show');
11 | }, 2000);
12 | }
13 | }
14 |
15 | // Скрипт для всплывающего окна с оплатой
16 | const paymentMethodSelect = document.getElementById('id_payment_method');
17 | const onlinePaymentInfo = document.getElementById('online-payment-info');
18 | const overlay = document.getElementById('overlay');
19 | const closeBtn = document.getElementById('close-btn');
20 |
21 | paymentMethodSelect.addEventListener('change', (event) => {
22 | if (event.target.value === 'card_online') {
23 | onlinePaymentInfo.style.display = 'block';
24 | overlay.style.display = 'block';
25 | } else {
26 | onlinePaymentInfo.style.display = 'none';
27 | overlay.style.display = 'none';
28 | }
29 | });
30 |
31 | closeBtn.addEventListener('click', () => {
32 | onlinePaymentInfo.style.display = 'none';
33 | overlay.style.display = 'none';
34 | });
--------------------------------------------------------------------------------
/OnlineStore/static/assets/js/payment.js:
--------------------------------------------------------------------------------
1 | // Render the PayPal button into #paypal-button-container
2 | paypal.Buttons({
3 | // Call your server to set up the transaction
4 | createOrder: function(data, actions) {
5 | return fetch('/demo/checkout/api/paypal/order/create/', {
6 | method: 'post'
7 | }).then(function(res) {
8 | return res.json();
9 | }).then(function(orderData) {
10 | return orderData.id;
11 | });
12 | },
13 |
14 | // Call your server to finalize the transaction
15 | onApprove: function(data, actions) {
16 | return fetch('/demo/checkout/api/paypal/order/' + data.orderID + '/capture/', {
17 | method: 'post'
18 | }).then(function(res) {
19 | return res.json();
20 | }).then(function(orderData) {
21 | // Three cases to handle:
22 | // (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()
23 | // (2) Other non-recoverable errors -> Show a failure message
24 | // (3) Successful transaction -> Show confirmation or thank you
25 |
26 | // This example reads a v2/checkout/orders capture response, propagated from the server
27 | // You could use a different API or structure for your 'orderData'
28 | var errorDetail = Array.isArray(orderData.details) && orderData.details[0];
29 |
30 | if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
31 | return actions.restart(); // Recoverable state, per:
32 | // https://developer.paypal.com/docs/checkout/integration-features/funding-failure/
33 | }
34 |
35 | if (errorDetail) {
36 | var msg = 'Sorry, your transaction could not be processed.';
37 | if (errorDetail.description) msg += '\n\n' + errorDetail.description;
38 | if (orderData.debug_id) msg += ' (' + orderData.debug_id + ')';
39 | return alert(msg); // Show a failure message (try to avoid alerts in production environments)
40 | }
41 |
42 | // Successful capture! For demo purposes:
43 | console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
44 | var transaction = orderData.purchase_units[0].payments.captures[0];
45 | alert('Transaction '+ transaction.status + ': ' + transaction.id + '\n\nSee console for all available details');
46 |
47 | actions.redirect('thank_you.html');
48 | });
49 | }
50 | }).render('#paypal-button-container');
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/base/_page.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Basic */
8 |
9 | // MSIE: Required for IEMobile.
10 | @-ms-viewport {
11 | width: device-width;
12 | }
13 |
14 | // MSIE: Prevents scrollbar from overlapping content.
15 | body {
16 | -ms-overflow-style: scrollbar;
17 | }
18 |
19 | // Ensures page width is always >=320px.
20 | @include breakpoint('<=xsmall') {
21 | html, body {
22 | min-width: 320px;
23 | }
24 | }
25 |
26 | // Set box model to border-box.
27 | // Based on css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
28 | html {
29 | box-sizing: border-box;
30 | }
31 |
32 | *, *:before, *:after {
33 | box-sizing: inherit;
34 | }
35 |
36 | body {
37 | background: _palette(bg);
38 |
39 | // Stops initial animations until page loads.
40 | &.is-preload {
41 | *, *:before, *:after {
42 | @include vendor('animation', 'none !important');
43 | @include vendor('transition', 'none !important');
44 | }
45 | }
46 |
47 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/base/_reset.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | // Reset.
8 | // Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)
9 |
10 | html, body, div, span, applet, object,
11 | iframe, h1, h2, h3, h4, h5, h6, p, blockquote,
12 | pre, a, abbr, acronym, address, big, cite,
13 | code, del, dfn, em, img, ins, kbd, q, s, samp,
14 | small, strike, strong, sub, sup, tt, var, b,
15 | u, i, center, dl, dt, dd, ol, ul, li, fieldset,
16 | form, label, legend, table, caption, tbody,
17 | tfoot, thead, tr, th, td, article, aside,
18 | canvas, details, embed, figure, figcaption,
19 | footer, header, hgroup, menu, nav, output, ruby,
20 | section, summary, time, mark, audio, video {
21 | margin: 0;
22 | padding: 0;
23 | border: 0;
24 | font-size: 100%;
25 | font: inherit;
26 | vertical-align: baseline;
27 | }
28 |
29 | article, aside, details, figcaption, figure,
30 | footer, header, hgroup, menu, nav, section {
31 | display: block;
32 | }
33 |
34 | body {
35 | line-height: 1;
36 | }
37 |
38 | ol, ul {
39 | list-style:none;
40 | }
41 |
42 | blockquote, q {
43 | quotes: none;
44 |
45 | &:before,
46 | &:after {
47 | content: '';
48 | content: none;
49 | }
50 | }
51 |
52 | table {
53 | border-collapse: collapse;
54 | border-spacing: 0;
55 | }
56 |
57 | body {
58 | -webkit-text-size-adjust: none;
59 | }
60 |
61 | mark {
62 | background-color: transparent;
63 | color: inherit;
64 | }
65 |
66 | input::-moz-focus-inner {
67 | border: 0;
68 | padding: 0;
69 | }
70 |
71 | input, select, textarea {
72 | -moz-appearance: none;
73 | -webkit-appearance: none;
74 | -ms-appearance: none;
75 | appearance: none;
76 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_actions.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Actions */
8 |
9 | ul.actions {
10 | @include vendor('display', 'flex');
11 | cursor: default;
12 | list-style: none;
13 | margin-left: (_size(element-margin) * -0.5);
14 | padding-left: 0;
15 |
16 | li {
17 | padding: 0 0 0 (_size(element-margin) * 0.5);
18 | vertical-align: middle;
19 | }
20 |
21 | &.special {
22 | @include vendor('justify-content', 'center');
23 | width: 100%;
24 | margin-left: 0;
25 |
26 | li {
27 | &:first-child {
28 | padding-left: 0;
29 | }
30 | }
31 | }
32 |
33 | &.stacked {
34 | @include vendor('flex-direction', 'column');
35 | margin-left: 0;
36 |
37 | li {
38 | padding: (_size(element-margin) * 0.65) 0 0 0;
39 |
40 | &:first-child {
41 | padding-top: 0;
42 | }
43 | }
44 | }
45 |
46 | &.fit {
47 | width: calc(100% + #{_size(element-margin) * 0.5});
48 |
49 | li {
50 | @include vendor('flex-grow', '1');
51 | @include vendor('flex-shrink', '1');
52 | width: 100%;
53 |
54 | > * {
55 | width: 100%;
56 | }
57 | }
58 |
59 | &.stacked {
60 | width: 100%;
61 | }
62 | }
63 |
64 | @include breakpoint('<=xsmall') {
65 | &:not(.fixed) {
66 | @include vendor('flex-direction', 'column');
67 | margin-left: 0;
68 | width: 100% !important;
69 |
70 | li {
71 | @include vendor('flex-grow', '1');
72 | @include vendor('flex-shrink', '1');
73 | padding: (_size(element-margin) * 0.5) 0 0 0;
74 | text-align: center;
75 | width: 100%;
76 |
77 | > * {
78 | width: 100%;
79 | }
80 |
81 | &:first-child {
82 | padding-top: 0;
83 | }
84 |
85 | input[type="submit"],
86 | input[type="reset"],
87 | input[type="button"],
88 | button,
89 | .button {
90 | width: 100%;
91 |
92 | &.icon {
93 | &:before {
94 | margin-left: -0.5rem;
95 | }
96 | }
97 | }
98 | }
99 | }
100 | }
101 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_box.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Box */
8 |
9 | .box {
10 | border-radius: _size(border-radius);
11 | border: solid _size(border-width) _palette(border);
12 | margin-bottom: _size(element-margin);
13 | padding: 1.5em;
14 |
15 | > :last-child,
16 | > :last-child > :last-child,
17 | > :last-child > :last-child > :last-child {
18 | margin-bottom: 0;
19 | }
20 |
21 | &.alt {
22 | border: 0;
23 | border-radius: 0;
24 | padding: 0;
25 | }
26 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_button.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Button */
8 |
9 | input[type="submit"],
10 | input[type="reset"],
11 | input[type="button"],
12 | button,
13 | .button {
14 | @include vendor('appearance', 'none');
15 | @include vendor('transition', (
16 | 'background-color #{_duration(transition)} ease-in-out',
17 | 'color #{_duration(transition)} ease-in-out',
18 | 'box-shadow #{_duration(transition)} ease-in-out'
19 | ));
20 | background-color: transparent;
21 | border-radius: _size(border-radius);
22 | border: 0;
23 | box-shadow: inset 0 0 0 (_size(border-width) * 2) _palette(fg);
24 | color: _palette(fg) !important;
25 | cursor: pointer;
26 | display: inline-block;
27 | font-size: 0.8em;
28 | font-weight: _font(weight-bold);
29 | height: 3.5em;
30 | letter-spacing: _font(letter-spacing);
31 | line-height: 3.45em;
32 | overflow: hidden;
33 | padding: 0 1.25em 0 #{1.25em + _font(letter-spacing)};
34 | text-align: center;
35 | text-decoration: none;
36 | text-overflow: ellipsis;
37 | text-transform: uppercase;
38 | white-space: nowrap;
39 |
40 | &.icon {
41 | &:before {
42 | margin-right: 0.5em;
43 | }
44 | }
45 |
46 | &.fit {
47 | width: 100%;
48 | }
49 |
50 | &:hover {
51 | color: _palette(accent1) !important;
52 | box-shadow: inset 0 0 0 (_size(border-width) * 2) _palette(accent1);
53 | }
54 |
55 | &:active {
56 | background-color: transparentize(_palette(accent1), 0.9);
57 | }
58 |
59 | &.small {
60 | font-size: 0.6em;
61 | }
62 |
63 | &.large {
64 | font-size: 1em;
65 | }
66 |
67 | &.primary {
68 | box-shadow: none;
69 | background-color: _palette(fg);
70 | color: _palette(bg) !important;
71 |
72 | &:hover {
73 | background-color: _palette(accent1);
74 | }
75 |
76 | &:active {
77 | background-color: darken(_palette(accent1), 8);
78 | }
79 | }
80 |
81 | &.disabled,
82 | &:disabled {
83 | @include vendor('pointer-events', 'none');
84 | opacity: 0.25;
85 | }
86 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_icon.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Icon */
8 |
9 | .icon {
10 | @include icon;
11 | border-bottom: none;
12 | position: relative;
13 |
14 | > .label {
15 | display: none;
16 | }
17 |
18 | &:before {
19 | line-height: inherit;
20 | }
21 |
22 | &.solid {
23 | &:before {
24 | font-weight: 900;
25 | }
26 | }
27 |
28 | &.brands {
29 | &:before {
30 | font-family: 'Font Awesome 5 Brands';
31 | }
32 | }
33 |
34 | &.style1 {
35 | }
36 |
37 | &.style2 {
38 | @include vendor('transition', (
39 | 'background-color #{_duration(transition)} ease-in-out',
40 | 'color #{_duration(transition)} ease-in-out',
41 | 'border-color #{_duration(transition)} ease-in-out'
42 | ));
43 | background-color: transparent;
44 | border: solid 1px _palette(border);
45 | border-radius: _size(border-radius);
46 | width: 2.65em;
47 | height: 2.65em;
48 | display: inline-block;
49 | text-align: center;
50 | line-height: 2.65em;
51 | color: inherit;
52 |
53 | &:before {
54 | font-size: 1.1em;
55 | }
56 |
57 | &:hover {
58 | color: _palette(accent1);
59 | border-color: _palette(accent1);
60 | }
61 |
62 | &:active {
63 | background-color: transparentize(_palette(accent1), 0.9);
64 | }
65 | }
66 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_icons.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Icons */
8 |
9 | ul.icons {
10 | cursor: default;
11 | list-style: none;
12 | padding-left: 0;
13 | margin: -1em 0 _size(element-margin) -1em;
14 |
15 | li {
16 | display: inline-block;
17 | padding: 1em 0 0 1em;
18 | }
19 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_image.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Image */
8 |
9 | .image {
10 | border-radius: _size(border-radius);
11 | border: 0;
12 | display: inline-block;
13 | position: relative;
14 |
15 | img {
16 | border-radius: _size(border-radius);
17 | display: block;
18 | }
19 |
20 | &.left,
21 | &.right {
22 | max-width: 40%;
23 |
24 | img {
25 | width: 100%;
26 | }
27 | }
28 |
29 | &.left {
30 | float: left;
31 | padding: 0 1.5em 1em 0;
32 | top: 0.25em;
33 | }
34 |
35 | &.right {
36 | float: right;
37 | padding: 0 0 1em 1.5em;
38 | top: 0.25em;
39 | }
40 |
41 | &.fit {
42 | display: block;
43 | margin: 0 0 _size(element-margin) 0;
44 | width: 100%;
45 |
46 | img {
47 | width: 100%;
48 | }
49 | }
50 |
51 | &.main {
52 | display: block;
53 | margin: 0 0 (_size(element-margin) * 1.5) 0;
54 | width: 100%;
55 |
56 | img {
57 | width: 100%;
58 | }
59 |
60 | @include breakpoint('<=small') {
61 | margin: 0 0 _size(element-margin) 0;
62 | }
63 | }
64 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_list.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* List */
8 |
9 | ol {
10 | list-style: decimal;
11 | margin: 0 0 _size(element-margin) 0;
12 | padding-left: 1.25em;
13 |
14 | li {
15 | padding-left: 0.25em;
16 | }
17 | }
18 |
19 | ul {
20 | list-style: disc;
21 | margin: 0 0 _size(element-margin) 0;
22 | padding-left: 1em;
23 |
24 | li {
25 | padding-left: 0.5em;
26 | }
27 |
28 | &.alt {
29 | list-style: none;
30 | padding-left: 0;
31 |
32 | li {
33 | border-top: solid _size(border-width) _palette(border);
34 | padding: 0.5em 0;
35 |
36 | &:first-child {
37 | border-top: 0;
38 | padding-top: 0;
39 | }
40 | }
41 | }
42 | }
43 |
44 | dl {
45 | margin: 0 0 _size(element-margin) 0;
46 |
47 | dt {
48 | display: block;
49 | font-weight: _font(weight-bold);
50 | margin: 0 0 (_size(element-margin) * 0.5) 0;
51 | }
52 |
53 | dd {
54 | margin-left: _size(element-margin);
55 | }
56 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_row.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Row */
8 |
9 | .row {
10 | @include html-grid(2em);
11 |
12 | @include breakpoint('<=xlarge') {
13 | @include html-grid(2em, 'xlarge');
14 | }
15 |
16 | @include breakpoint('<=large') {
17 | @include html-grid(2em, 'large');
18 | }
19 |
20 | @include breakpoint('<=medium') {
21 | @include html-grid(1.5em, 'medium');
22 | }
23 |
24 | @include breakpoint('<=small') {
25 | @include html-grid(1em, 'small');
26 | }
27 |
28 | @include breakpoint('<=xsmall') {
29 | @include html-grid(1em, 'xsmall');
30 | }
31 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_section.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Section/Article */
8 |
9 | section, article {
10 | &.special {
11 | text-align: center;
12 | }
13 | }
14 |
15 | header {
16 | p {
17 | margin-top: _size(element-margin) * -0.5;
18 | }
19 |
20 | @include breakpoint('<=small') {
21 | p {
22 | margin-top: 0;
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/components/_table.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Table */
8 |
9 | .table-wrapper {
10 | -webkit-overflow-scrolling: touch;
11 | overflow-x: auto;
12 | }
13 |
14 | table {
15 | margin: 0 0 _size(element-margin) 0;
16 | width: 100%;
17 |
18 | tbody {
19 | tr {
20 | border: solid _size(border-width) _palette(border);
21 | border-left: 0;
22 | border-right: 0;
23 |
24 | &:nth-child(2n + 1) {
25 | background-color: _palette(border-bg);
26 | }
27 | }
28 | }
29 |
30 | td {
31 | padding: 0.75em 0.75em;
32 | }
33 |
34 | th {
35 | color: _palette(fg-bold);
36 | font-size: 0.9em;
37 | font-weight: _font(weight-bold);
38 | padding: 0 0.75em 0.75em 0.75em;
39 | text-align: left;
40 | }
41 |
42 | thead {
43 | border-bottom: solid (_size(border-width) * 2) _palette(border);
44 | }
45 |
46 | tfoot {
47 | border-top: solid (_size(border-width) * 2) _palette(border);
48 | }
49 |
50 | &.alt {
51 | border-collapse: separate;
52 |
53 | tbody {
54 | tr {
55 | td {
56 | border: solid _size(border-width) _palette(border);
57 | border-left-width: 0;
58 | border-top-width: 0;
59 |
60 | &:first-child {
61 | border-left-width: _size(border-width);
62 | }
63 | }
64 |
65 | &:first-child {
66 | td {
67 | border-top-width: _size(border-width);
68 | }
69 | }
70 | }
71 | }
72 |
73 | thead {
74 | border-bottom: 0;
75 | }
76 |
77 | tfoot {
78 | border-top: 0;
79 | }
80 | }
81 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/layout/_main.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Main */
8 |
9 | #main {
10 | @include padding(5em, 0, (-5em, 0, 3em, 0));
11 |
12 | @include breakpoint('<=small') {
13 | @include padding(3em, 0, (-3em, 0, 3em, 0));
14 | }
15 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/layout/_wrapper.scss:
--------------------------------------------------------------------------------
1 | ///
2 | /// Phantom by HTML5 UP
3 | /// html5up.net | @ajlkn
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
5 | ///
6 |
7 | /* Wrapper */
8 |
9 | #wrapper {
10 | > * {
11 | > .inner {
12 | $gutter: _size(gutter);
13 |
14 | width: 100%;
15 | max-width: _size(inner);
16 | margin: 0 auto;
17 | padding: 0 $gutter;
18 |
19 | @include breakpoint('<=small') {
20 | $gutter: _size(gutter) * 0.5;
21 |
22 | padding: 0 $gutter;
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/libs/_functions.scss:
--------------------------------------------------------------------------------
1 | /// Removes a specific item from a list.
2 | /// @author Hugo Giraudel
3 | /// @param {list} $list List.
4 | /// @param {integer} $index Index.
5 | /// @return {list} Updated list.
6 | @function remove-nth($list, $index) {
7 |
8 | $result: null;
9 |
10 | @if type-of($index) != number {
11 | @warn "$index: #{quote($index)} is not a number for `remove-nth`.";
12 | }
13 | @else if $index == 0 {
14 | @warn "List index 0 must be a non-zero integer for `remove-nth`.";
15 | }
16 | @else if abs($index) > length($list) {
17 | @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
18 | }
19 | @else {
20 |
21 | $result: ();
22 | $index: if($index < 0, length($list) + $index + 1, $index);
23 |
24 | @for $i from 1 through length($list) {
25 |
26 | @if $i != $index {
27 | $result: append($result, nth($list, $i));
28 | }
29 |
30 | }
31 |
32 | }
33 |
34 | @return $result;
35 |
36 | }
37 |
38 | /// Gets a value from a map.
39 | /// @author Hugo Giraudel
40 | /// @param {map} $map Map.
41 | /// @param {string} $keys Key(s).
42 | /// @return {string} Value.
43 | @function val($map, $keys...) {
44 |
45 | @if nth($keys, 1) == null {
46 | $keys: remove-nth($keys, 1);
47 | }
48 |
49 | @each $key in $keys {
50 | $map: map-get($map, $key);
51 | }
52 |
53 | @return $map;
54 |
55 | }
56 |
57 | /// Gets a duration value.
58 | /// @param {string} $keys Key(s).
59 | /// @return {string} Value.
60 | @function _duration($keys...) {
61 | @return val($duration, $keys...);
62 | }
63 |
64 | /// Gets a font value.
65 | /// @param {string} $keys Key(s).
66 | /// @return {string} Value.
67 | @function _font($keys...) {
68 | @return val($font, $keys...);
69 | }
70 |
71 | /// Gets a misc value.
72 | /// @param {string} $keys Key(s).
73 | /// @return {string} Value.
74 | @function _misc($keys...) {
75 | @return val($misc, $keys...);
76 | }
77 |
78 | /// Gets a palette value.
79 | /// @param {string} $keys Key(s).
80 | /// @return {string} Value.
81 | @function _palette($keys...) {
82 | @return val($palette, $keys...);
83 | }
84 |
85 | /// Gets a size value.
86 | /// @param {string} $keys Key(s).
87 | /// @return {string} Value.
88 | @function _size($keys...) {
89 | @return val($size, $keys...);
90 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/libs/_mixins.scss:
--------------------------------------------------------------------------------
1 | /// Makes an element's :before pseudoelement a FontAwesome icon.
2 | /// @param {string} $content Optional content value to use.
3 | /// @param {string} $category Optional category to use.
4 | /// @param {string} $where Optional pseudoelement to target (before or after).
5 | @mixin icon($content: false, $category: regular, $where: before) {
6 |
7 | text-decoration: none;
8 |
9 | &:#{$where} {
10 |
11 | @if $content {
12 | content: $content;
13 | }
14 |
15 | -moz-osx-font-smoothing: grayscale;
16 | -webkit-font-smoothing: antialiased;
17 | display: inline-block;
18 | font-style: normal;
19 | font-variant: normal;
20 | text-rendering: auto;
21 | line-height: 1;
22 | text-transform: none !important;
23 |
24 | @if ($category == brands) {
25 | font-family: 'Font Awesome 5 Brands';
26 | }
27 | @elseif ($category == solid) {
28 | font-family: 'Font Awesome 5 Free';
29 | font-weight: 900;
30 | }
31 | @else {
32 | font-family: 'Font Awesome 5 Free';
33 | font-weight: 400;
34 | }
35 |
36 | }
37 |
38 | }
39 |
40 | /// Applies padding to an element, taking the current element-margin value into account.
41 | /// @param {mixed} $tb Top/bottom padding.
42 | /// @param {mixed} $lr Left/right padding.
43 | /// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left)
44 | /// @param {bool} $important If true, adds !important.
45 | @mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) {
46 |
47 | @if $important {
48 | $important: '!important';
49 | }
50 |
51 | $x: 0.1em;
52 |
53 | @if unit(_size(element-margin)) == 'rem' {
54 | $x: 0.1rem;
55 | }
56 |
57 | padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important};
58 |
59 | }
60 |
61 | /// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp).
62 | /// @param {string} $svg SVG data URL.
63 | /// @return {string} Encoded SVG data URL.
64 | @function svg-url($svg) {
65 |
66 | $svg: str-replace($svg, '"', '\'');
67 | $svg: str-replace($svg, '%', '%25');
68 | $svg: str-replace($svg, '<', '%3C');
69 | $svg: str-replace($svg, '>', '%3E');
70 | $svg: str-replace($svg, '&', '%26');
71 | $svg: str-replace($svg, '#', '%23');
72 | $svg: str-replace($svg, '{', '%7B');
73 | $svg: str-replace($svg, '}', '%7D');
74 | $svg: str-replace($svg, ';', '%3B');
75 |
76 | @return url("data:image/svg+xml;charset=utf8,#{$svg}");
77 |
78 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/libs/_vars.scss:
--------------------------------------------------------------------------------
1 | // Misc.
2 | $misc: (
3 | z-index-base: 10000
4 | );
5 |
6 | // Duration.
7 | $duration: (
8 | menu: 0.45s,
9 | transition: 0.2s
10 | );
11 |
12 | // Size.
13 | $size: (
14 | border-radius: 4px,
15 | border-width: 1px,
16 | element-height: 3em,
17 | element-margin: 2em,
18 | gutter: 2.5em,
19 | field-gutter: 2em,
20 | inner: 68em,
21 | menu: 22em
22 | );
23 |
24 | // Font.
25 | $font: (
26 | family: ('Source Sans Pro', Helvetica, sans-serif),
27 | family-fixed: ('Courier New', monospace),
28 | weight: 300,
29 | weight-bold: 900,
30 | weight-bold-alt: 700,
31 | letter-spacing: 0.35em,
32 | letter-spacing-alt: -0.035em
33 | );
34 |
35 | // Palette.
36 | $palette: (
37 | bg: #ffffff,
38 | bg-accent: #333333,
39 | bg-alt: #f6f6f6,
40 | fg: #585858,
41 | fg-accent: #ffffff,
42 | border: #c9c9c9,
43 | border-bg: rgba(144,144,144,0.075),
44 | accent1: #f2849e,
45 | accent2: #7ecaf6,
46 | accent3: #7bd0c1,
47 | accent4: #c75b9b,
48 | accent5: #ae85ca,
49 | accent6: #8499e7,
50 | );
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/main.scss:
--------------------------------------------------------------------------------
1 | @import 'libs/vars';
2 | @import 'libs/functions';
3 | @import 'libs/mixins';
4 | @import 'libs/vendor';
5 | @import 'libs/breakpoints';
6 | @import 'libs/html-grid';
7 | @import 'fontawesome-all.min.css';
8 | @import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,700,900');
9 |
10 | /*
11 | Phantom by HTML5 UP
12 | html5up.net | @ajlkn
13 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
14 | */
15 |
16 | // Breakpoints.
17 |
18 | @include breakpoints((
19 | xlarge: ( 1281px, 1680px ),
20 | large: ( 981px, 1280px ),
21 | medium: ( 737px, 980px ),
22 | small: ( 481px, 736px ),
23 | xsmall: ( 361px, 480px ),
24 | xxsmall: ( null, 360px )
25 | ));
26 |
27 | // Base.
28 |
29 | @import 'base/reset';
30 | @import 'base/page';
31 | @import 'base/typography';
32 |
33 | // Component.
34 |
35 | @import 'components/row';
36 | @import 'components/section';
37 | @import 'components/icon';
38 | @import 'components/list';
39 | @import 'components/actions';
40 | @import 'components/icons';
41 | @import 'components/form';
42 | @import 'components/box';
43 | @import 'components/image';
44 | @import 'components/table';
45 | @import 'components/button';
46 | @import 'components/tiles';
47 |
48 | // Layout.
49 |
50 | @import 'layout/header';
51 | @import 'layout/menu';
52 | @import 'layout/main';
53 | @import 'layout/footer';
54 | @import 'layout/wrapper';
--------------------------------------------------------------------------------
/OnlineStore/static/assets/sass/noscript.scss:
--------------------------------------------------------------------------------
1 | @import 'libs/vars';
2 | @import 'libs/functions';
3 | @import 'libs/mixins';
4 | @import 'libs/vendor';
5 | @import 'libs/breakpoints';
6 | @import 'libs/html-grid';
7 |
8 | /*
9 | Phantom by HTML5 UP
10 | html5up.net | @ajlkn
11 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
12 | */
13 |
14 | /* Tiles */
15 |
16 | .tiles {
17 | body.is-preload & {
18 | article {
19 | @include vendor('transform', 'none');
20 | opacity: 1;
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-brands-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-brands-400.eot
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-brands-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-brands-400.woff
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-regular-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-regular-400.eot
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-regular-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-regular-400.woff
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-solid-900.eot
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-solid-900.woff
--------------------------------------------------------------------------------
/OnlineStore/static/assets/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/assets/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/OnlineStore/static/images/cart.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/images/cart.jpg
--------------------------------------------------------------------------------
/OnlineStore/static/images/garbage.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/OnlineStore/static/images/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/OnlineStore/static/images/pic01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/images/pic01.jpg
--------------------------------------------------------------------------------
/OnlineStore/static/images/pic14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/images/pic14.jpg
--------------------------------------------------------------------------------
/OnlineStore/static/images/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/static/images/profile.png
--------------------------------------------------------------------------------
/OnlineStore/store/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/store/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/store/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | from .models import Item, ItemTag
4 |
5 |
6 | class ItemAdmin(admin.ModelAdmin):
7 | list_display = ('title', 'short_description', 'slug', 'price',
8 | 'old_price', 'is_available', 'tag_list',)
9 | search_fields = ('title', 'description', 'tags__name',)
10 | list_filter = ('is_available', 'tags',)
11 |
12 | def short_description(self, obj):
13 | if len(obj.description) > 100:
14 | return obj.description[:100] + '...'
15 | else:
16 | return obj.description
17 |
18 | def get_queryset(self, request):
19 | return super().get_queryset(request).prefetch_related('tags')
20 |
21 | def tag_list(self, obj):
22 | return u", ".join(o.name for o in obj.tags.all())
23 |
24 | short_description.short_description = 'Описание'
25 | tag_list.short_description = 'Список категорий'
26 |
27 |
28 | class ItemTagAdmin(admin.ModelAdmin):
29 | list_display = ('name', 'slug', 'short_description', 'item_list',)
30 |
31 | def short_description(self, obj):
32 | if len(obj.description) > 100:
33 | return obj.description[:100] + '...'
34 | else:
35 | return obj.description
36 |
37 | def item_list(self, obj):
38 | return [Item.objects.get(
39 | pk=o.get('object_id')
40 | ) for o in obj.items.values()]
41 |
42 | short_description.short_description = 'Описание'
43 | item_list.short_description = 'Список товаров'
44 |
45 |
46 | admin.site.register(Item, ItemAdmin)
47 | admin.site.register(ItemTag, ItemTagAdmin)
48 |
--------------------------------------------------------------------------------
/OnlineStore/store/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class StoreConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'store'
7 | verbose_name = 'Магазин'
8 |
--------------------------------------------------------------------------------
/OnlineStore/store/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/store/migrations/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/store/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from django.utils.translation import gettext_lazy as _
3 | from taggit.managers import TaggableManager
4 | from taggit.models import GenericTaggedItemBase, TagBase
5 |
6 |
7 | class ItemTag(TagBase):
8 | image = models.ImageField(
9 | upload_to='categories/',
10 | verbose_name='Изображение',
11 | blank=True
12 | )
13 | description = models.TextField(
14 | blank=True,
15 | verbose_name='Описание',
16 | )
17 |
18 | class Meta:
19 | verbose_name = _("Категория")
20 | verbose_name_plural = _("Категории")
21 |
22 |
23 | class TaggedItem(GenericTaggedItemBase):
24 | tag = models.ForeignKey(
25 | ItemTag,
26 | on_delete=models.CASCADE,
27 | related_name="items",
28 | verbose_name='Категория',
29 | )
30 |
31 |
32 | class Item(models.Model):
33 | title = models.CharField(max_length=200, verbose_name='Название',)
34 | description = models.TextField(verbose_name='Описание',)
35 | slug = models.CharField(
36 | unique=True,
37 | max_length=50,
38 | )
39 | pub_date = models.DateTimeField(auto_now_add=True, verbose_name='Дата добавления',)
40 | price = models.DecimalField(
41 | max_digits=8,
42 | decimal_places=2,
43 | verbose_name='Новая цена',
44 | )
45 | old_price = models.DecimalField(
46 | max_digits=8,
47 | decimal_places=2,
48 | verbose_name='Старая цена',
49 | blank=True,
50 | null=True,
51 | )
52 | image = models.ImageField(
53 | verbose_name='Изображение',
54 | upload_to='items/',
55 | blank=True,
56 | )
57 | is_available = models.BooleanField(
58 | default=True,
59 | verbose_name='Доступно',
60 | )
61 | tags = TaggableManager(through=TaggedItem, related_name="tagged_items", verbose_name='Категории',)
62 |
63 | def __str__(self):
64 | return self.title
65 |
66 | class Meta:
67 | ordering = ['-price']
68 | verbose_name = 'Товар'
69 | verbose_name_plural = 'Товары'
70 |
--------------------------------------------------------------------------------
/OnlineStore/store/paginator.py:
--------------------------------------------------------------------------------
1 | from django.core.paginator import Paginator
2 |
3 |
4 | def paginator(request, items, items_on_page):
5 | paginator = Paginator(items, items_on_page)
6 | page_number = request.GET.get('page')
7 |
8 | return paginator.get_page(page_number)
9 |
--------------------------------------------------------------------------------
/OnlineStore/store/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from .views import item_details, store, tag_details, tag_list
4 |
5 | app_name = 'store'
6 |
7 |
8 | urlpatterns = [
9 | path('', store, name='home'),
10 | path('categories/', tag_list, name='tag_list'),
11 | path('category-details//', tag_details, name='tag_details'),
12 | path('/', item_details, name='item_details'),
13 | ]
14 |
--------------------------------------------------------------------------------
/OnlineStore/store/views.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import get_object_or_404, render
2 |
3 | from .models import Item, ItemTag
4 | from .paginator import paginator
5 |
6 |
7 | def store(request):
8 | items = Item.objects.filter(is_available=True)
9 | context = {
10 | 'page_obj': paginator(request, items, 9),
11 | 'range': [*range(1, 7)], # For random css styles
12 | }
13 |
14 | return render(request, 'store/main_page.html', context)
15 |
16 |
17 | def item_details(request, item_slug):
18 | item = get_object_or_404(Item, slug=item_slug)
19 | context = {
20 | 'item': item,
21 | }
22 | return render(request, 'store/item_details.html', context)
23 |
24 |
25 | def tag_details(request, slug):
26 | tag = get_object_or_404(ItemTag, slug=slug)
27 | items = Item.objects.filter(tags__in=[tag])
28 | context = {
29 | 'tag': tag,
30 | 'page_obj': paginator(request, items, 3),
31 | }
32 | return render(request, 'store/tag_details.html', context)
33 |
34 |
35 | def tag_list(request):
36 | tags = ItemTag.objects.all()
37 | context = {
38 | 'page_obj': paginator(request, tags, 6),
39 | }
40 | return render(request, 'store/tag_list.html', context)
41 |
--------------------------------------------------------------------------------
/OnlineStore/templates/about/author.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | Привет! Меня зовут Натолин Артем, и я создатель этого проекта по созданию интернет-магазина. Я занимаюсь web-разработкой и стремлюсь к тому, чтобы создавать качественные, удобные и функциональные веб-приложения.
5 | Я изучаю web-разработку уже несколько лет и мой проект по созданию интернет-магазина является частью моего обучения. В этом проекте я стараюсь применить все знания и навыки, которые я приобрел, и создать максимально полезный и удобный магазин.
6 | Если вы хотите связаться со мной, то можете написать мне на почту или посетить мою страницу в социальных сетях, где я буду рад ответить на ваши вопросы и обсудить возможности сотрудничества. Ссылки на них расположены ниже.
7 | Спасибо, что посетили мой проект по созданию интернет-магазина! Другие мои проекты можно также посмотреть на моей странице GitHub
8 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/about/project.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | Сайт был создан с помощью фреймворка Django и библиотек для него. База данных реализована на SQLite, а дизайн сайта был разработан с использованием HTML и CSS и JS.
5 | Я работал на тем чтобы сайт был максимально быстрым и удобным для пользователей. Фреймворк Django был выбран для создания надежного и безопасного веб-приложения, а база данных SQLite позволяет эффективно хранить и управлять информацией.
6 | Дизайн основан на HTML, CSS и JS, которые использовались для создания красивого и функционального пользовательского интерфейса. Я постоянно работаю над улучшением дизайна сайта чтобы предоставить пользователям наилучший опыт.
7 | Если у вас есть какие-либо вопросы или предложения по улучшению сайта, пожалуйста, свяжитесь со мной по ссылкам снизу. Я буду рад услышать ваше мнение и помочь вам в любых вопросах.
8 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/base.html:
--------------------------------------------------------------------------------
1 |
2 |
7 | {% load static %}
8 |
9 |
10 | Artem Nalolin's Online Store
11 |
12 |
13 |
14 |
15 |
16 | {% block css %}
17 | {% endblock %}
18 |
19 |
20 |
21 |
22 |
23 |
24 | {% include 'includes/header.html' %}
25 |
26 |
27 |
28 | {% block content %}
29 |
30 | {% endblock %}
31 |
32 | {% if page_obj %}
{% include 'includes/paginator.html' %}{% endif %}
33 |
34 |
35 |
36 | {% include 'includes/footer.html' %}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | {% block js %}
45 | {% endblock %}
46 |
47 |
--------------------------------------------------------------------------------
/OnlineStore/templates/cart/cart.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | Корзина
10 | {% if cart_items %}
11 |
55 |
59 | {% else %}
60 | Ваша корзина пуста.
61 | {% endif %}
62 | {% block js %}
63 |
64 | {% endblock %}
65 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/checkout/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Закрыть
4 |
НЕ ПЛАТИТЕ ЭТО ШУТКА
5 |
6 |
НЕ ПЛАТИТЕ ЭТО ШУТКА
7 |
--------------------------------------------------------------------------------
/OnlineStore/templates/checkout/thank_you.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% block content %}
4 | Спасибо за ваш заказ!
5 | Содержимое заказа:
6 | {% for item in order.items.all %}
7 |
{{ item.quantity }} х {{ item.item.title }}
8 | {% endfor %}
9 |
10 | На сумму {{ order.total_price }} рублей.
11 |
12 | Привезем по адресу:
13 | {{ order.shipping_address }}
14 |
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/OnlineStore/templates/includes/footer.html:
--------------------------------------------------------------------------------
1 |
33 |
--------------------------------------------------------------------------------
/OnlineStore/templates/includes/header.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
26 |
27 |
--------------------------------------------------------------------------------
/OnlineStore/templates/includes/paginator.html:
--------------------------------------------------------------------------------
1 | {% if page_obj.has_previous %}
2 | Prev
3 | {% else %}
4 | Prev
5 | {% endif %}
6 | {% for i in page_obj.paginator.page_range %}
7 | {% if page_obj.number == i %}
8 | {{ i }}
9 | {% else %}
10 | {{ i }}
11 | {% endif %}
12 | {% endfor %}
13 | {% if page_obj.has_next %}
14 | Next
15 | {% else %}
16 | Next
17 | {% endif %}
18 |
--------------------------------------------------------------------------------
/OnlineStore/templates/store/item_details.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | {% load static %}
5 | {{ item.title }}
6 | Товар принадлежит к категории
7 | {% for tag in item.tags.all %}
8 | {{ tag }}
9 | {% if not forloop.last %},{% endif %}
10 | {% endfor %}
11 |
12 | {% if item.image %}
13 |
14 | {% else %}
15 |
16 | {% endif %}
17 |
18 | Добавить в корзину
19 |
20 | {{ item.description }}{{ item.description }}
21 |
22 | {% if item.old_price %}
23 | Старая цена: {{ item.old_price }} рублей
24 | Новая цена: {{ item.price }} рублей
25 | {% else %}
26 | Цена: {{ item.price }} рублей
27 | {% endif %}
28 | {% endblock %}
29 |
--------------------------------------------------------------------------------
/OnlineStore/templates/store/main_page.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | {% load static %}
5 | OnlineStore: Онлайн-магазин для всех ваших потребностей
6 | Мой проект - это современный интернет-магазин, который был разработан с использованием передовых технологий веб-разработки. Использовался язык программирования Python и его фреймворк Django для создания серверной части сайта.
7 | Для создания пользовательского интерфейса были использованы языки HTML, CSS и JavaScript. Большее количество шаблонов было взято с HTML5 UP
8 | Я также использовал SQLite для хранения данных, таких как информация о продуктах и заказах.
9 |
36 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/store/tag_details.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | {% load static %}
5 | {{ tag.name }}
6 | Количество товаров: {{ tag.items.count }}
7 | Все категории
8 |
9 | {% for item in page_obj %}
10 | {{ item.title }}
11 |
12 | {% if item.image %}
13 |
14 | {% else %}
15 |
16 | {% endif %}
17 |
18 | Добавить в корзину
19 |
20 |
21 | {{ item.description }}
22 | {% if item.old_price %}
23 | Старая цена: {{ item.old_price }} рублей
24 | Новая цена: {{ item.price }} рублей
25 | {% else %}
26 | Цена: {{ item.price }} рублей
27 | {% endif %}
28 | {% if not forloop.last %} {% endif %}
29 | {% endfor %}
30 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/store/tag_list.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | {% load static %}
5 | Список всех категорий
6 |
7 | {% for tag in page_obj %}
8 | {{ tag.name }}
9 |
10 | {% if tag.image %}
11 |
12 | {% else %}
13 |
14 | {% endif %}
15 | {{tag.description}}{{tag.description}}
16 | {% if not forloop.last %} {% endif %}
17 | {% endfor %}
18 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/feedback_failed.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% block content %}
4 | Извините, Ваш отзыв был не обработан =(
5 | К сожалению, Ваше сообщение не было обработано. Возможно, форма не была корректно заполнена.
6 | Если же Вы уверены что форма заполнена корректно, свяжитесь с нами по почте или по социальным сетям. Ссылки на них расположены внизу страницы.
7 | {% endblock %}
8 |
--------------------------------------------------------------------------------
/OnlineStore/templates/users/feedback_success.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% block content %}
4 | Спасибо за отзыв!
5 | Ваше сообщение уже принято в обработку. В ближайшее время мы свяжемся с Вами.
6 | {% endblock %}
7 |
--------------------------------------------------------------------------------
/OnlineStore/templates/users/logged_out.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% block content %}
4 | Вы успешно вышли из системы
5 | Вернуться на страницу входа .
6 | {% endblock %}
7 |
--------------------------------------------------------------------------------
/OnlineStore/templates/users/login.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | Войти на сайт
10 |
27 | {% endfor %}
28 |
29 | Войти
30 |
31 |
35 |
36 | Забыли пароль?
37 |
38 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_change_done.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | Пароль изменен
5 | Ваш пароль был успешно изменен.
6 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_change_form.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | Смена пароля
10 | Заполните форму для смены пароля.
11 |
29 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_reset_complete.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% block content %}
4 | Пароль изменен успешно!
5 | Установлен новый пароль. Вы можете войти .
6 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_reset_confirm.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | {% if validlink %}
10 | Установите новый пароль
11 |
29 | {% else %}
30 | Ссылка измененения пароля недействительна, скорее всего она уже была использована. Пожалуйста, запросите смену пароля еще раз.
31 | {% endif %}
32 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_reset_done.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | Отправлено письмо
5 | Проверьте свою почту, вам должно прийти письмо со ссылкой для восстановления пароля.
6 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_reset_email.html:
--------------------------------------------------------------------------------
1 | Someone asked for password reset for email {{ email }}. Follow thelink below:
2 | {{ protocol }}://{{ domain }}{% url "users:password_reset_confirm" uidb64=uid token=token %}
3 | Your username, in case you've forgotten: {{ user.get_username }}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/password_reset_form.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | Забыли пароль?
10 | Введите почту в форму и мы вышлем Вам на нее инстуркцию по смене пароля.
11 |
12 |
30 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/managment/reset_done.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 | Восстановление пароля завершено
5 | Ваш пароль был сохранен. Теперь вы можете войти.
6 | Войти
7 | {% endblock %}
8 |
--------------------------------------------------------------------------------
/OnlineStore/templates/users/profile.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 |
3 | {% block content %}
4 | Ваш профиль
5 | Здравствуйте, {{ request.user.get_username }}. Всего у вас {{ request.user.orders.count }} заказов.
6 | Ваши заказы: Перейти к заказам
7 | Если вы хотите выйти из системы: Выйти
8 | Если вы хотите сменить пароль: Сменить пароль
9 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/signup.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | Зарегистрироваться
10 |
30 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/templates/users/user_orders.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% load static %}
4 | {% block css %}
5 |
6 | {% endblock %}
7 |
8 | {% block content %}
9 | Ваши заказы
10 | {% if orders %}
11 | {% for order in orders %}
12 |
13 |
17 |
18 |
19 |
20 |
21 | Название
22 | Количество
23 | Цена
24 |
25 |
26 |
27 | {% for order_item in order.items.all %}
28 |
29 | {{ order_item.item.title }}
30 |
31 | {{ order_item.quantity }}
32 |
33 | {{ order_item.total_price }}
34 |
35 | {% endfor %}
36 |
37 |
38 |
39 |
40 | {{ order.total_price }}
41 |
42 |
43 |
44 |
45 |
46 | {% if not forloop.last %} {% endif %}
47 | {% endfor %}
48 | {% else %}
49 | У вас пока нет заказов.
50 | {% endif %}
51 | {% endblock %}
--------------------------------------------------------------------------------
/OnlineStore/users/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/users/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/users/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | from .models import Feedback
4 |
5 |
6 | class FeedbackAdmin(admin.ModelAdmin):
7 | list_display = ('feedback_name', 'feedback_email',
8 | 'feedback_message', 'created_at',)
9 | ordering = ('-created_at',)
10 |
11 |
12 | admin.site.register(Feedback, FeedbackAdmin)
13 |
--------------------------------------------------------------------------------
/OnlineStore/users/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class UsersConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'users'
7 | verbose_name = 'Пользователи'
8 |
--------------------------------------------------------------------------------
/OnlineStore/users/forms.py:
--------------------------------------------------------------------------------
1 | from django import forms
2 | from django.contrib.auth import get_user_model
3 | from django.contrib.auth.forms import UserCreationForm
4 |
5 | from .models import Feedback
6 |
7 | User = get_user_model()
8 |
9 |
10 | class CreationForm(UserCreationForm):
11 | class Meta(UserCreationForm.Meta):
12 | model = User
13 | fields = ('first_name', 'last_name', 'username', 'email')
14 |
15 |
16 | class FeedbackForm(forms.ModelForm):
17 | class Meta:
18 | model = Feedback
19 | fields = ['feedback_name', 'feedback_email', 'feedback_message']
20 |
--------------------------------------------------------------------------------
/OnlineStore/users/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.10 on 2023-03-21 14:58
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | initial = True
9 |
10 | dependencies = [
11 | ]
12 |
13 | operations = [
14 | migrations.CreateModel(
15 | name='Feedback',
16 | fields=[
17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18 | ('feedback_name', models.CharField(max_length=50, verbose_name='Имя покупателя')),
19 | ('feedback_email', models.EmailField(max_length=254, verbose_name='Почта покупателя')),
20 | ('feedback_message', models.TextField(verbose_name='Текст')),
21 | ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
22 | ],
23 | options={
24 | 'verbose_name': 'Обратная связь покупателя',
25 | 'verbose_name_plural': 'Обратная связь покупателя',
26 | },
27 | ),
28 | ]
29 |
--------------------------------------------------------------------------------
/OnlineStore/users/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dagedarr/StoreProject/e227f96b843db8e30878a0bd088e700ac28a231b/OnlineStore/users/migrations/__init__.py
--------------------------------------------------------------------------------
/OnlineStore/users/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 |
4 | class Feedback(models.Model):
5 | feedback_name = models.CharField(max_length=50, verbose_name='Имя покупателя',)
6 | feedback_email = models.EmailField(verbose_name='Почта покупателя',)
7 | feedback_message = models.TextField(verbose_name='Текст',)
8 | created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания',)
9 |
10 | class Meta:
11 | verbose_name = 'Обратная связь покупателя'
12 | verbose_name_plural = 'Обратная связь покупателя'
13 |
14 | def __str__(self):
15 | return self.feedback_message[:30]
16 |
--------------------------------------------------------------------------------
/OnlineStore/users/views.py:
--------------------------------------------------------------------------------
1 | import asyncio
2 |
3 | import telegram
4 | from django.contrib.auth.decorators import login_required
5 | from django.shortcuts import render
6 | from django.urls import reverse_lazy
7 | from django.views.generic import CreateView
8 |
9 | from OnlineStore.settings import TELEGRAM_CHAT_ID, TELEGRAM_TOKEN
10 | from checkout.models import Order
11 | from .forms import CreationForm, FeedbackForm
12 | from .models import Feedback
13 |
14 |
15 | @login_required
16 | def user_orders(request):
17 | """
18 | Представление списка заказов пользователя.
19 | """
20 | orders = Order.objects.filter(user=request.user)
21 | context = {
22 | 'orders': orders,
23 | }
24 | return render(request, 'users/user_orders.html', context)
25 |
26 |
27 | @login_required
28 | def profile(request):
29 | """
30 | Представление профиля пользователя.
31 | """
32 | return render(request, 'users/profile.html')
33 |
34 |
35 | class SignUp(CreateView):
36 | form_class = CreationForm
37 | success_url = reverse_lazy('store:home')
38 | template_name = 'users/signup.html'
39 |
40 |
41 | async def send_telegram_message(message):
42 | """
43 | Асинхронная функция для отправки сообщения в ТГ.
44 | """
45 | bot = telegram.Bot(token=TELEGRAM_TOKEN)
46 | chat_id = TELEGRAM_CHAT_ID
47 | await bot.send_message(chat_id=chat_id, text=message)
48 |
49 |
50 | def feedback_processing(request):
51 | """
52 | Представление приема и обработки для обратной связи.
53 | """
54 | if request.method == 'POST':
55 | form = FeedbackForm(request.POST)
56 | if form.is_valid():
57 | feedback = Feedback(
58 | feedback_name=form.cleaned_data['feedback_name'],
59 | feedback_email=form.cleaned_data['feedback_email'],
60 | feedback_message=form.cleaned_data['feedback_message'],
61 | )
62 | feedback.save()
63 |
64 | # Отпрака сообщения
65 | message = f"Новое сообщение от {feedback.feedback_name} ({feedback.feedback_email}): {feedback.feedback_message}"
66 | asyncio.run(send_telegram_message(message))
67 |
68 | return render(request, 'users/feedback_success.html')
69 | return render(request, 'users/feedback_failed.html')
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # https://natolin.pythonanywhere.com/
2 |
3 | # Интернет магазин на Django
4 |
5 | Это полноценный проект интернет-магазина, разработанный на Django.
6 | В нем я использовал ***AJAX-запросы*** для динамического обновления количества товаров на странице корзины без перезагрузки страницы, а ***asyncio*** я применял для отправки сообщений в Telegram-бота асинхронно, не блокируя основной поток выполнения приложения.
7 |
8 | # Установка
9 |
10 | 1. Клонируйте репозиторий
11 | ```
12 | https://github.com/dagedarr/StoreProject.git
13 |
14 | cd OnlineStore
15 | ```
16 | Если вы не используете Git, то вы можете просто скачать исходный код репозитория в ZIP-архиве и распаковать его на свой компьютер.
17 |
18 | 2. Создайте виртуальное окружение и активируйте его
19 | ```
20 | python -m venv venv
21 | source venv/bin/activate
22 | ```
23 | 3. Установите зависимости
24 | ```
25 | pip install -r requirements.txt
26 | ```
27 | 4. Создайте в корне проекта .env по обазу .env.example
28 |
29 | 5. Запустите миграции и загрузите данные в БД
30 | ```
31 | python manage.py migrate
32 | python manage.py loaddata data.json
33 | ```
34 | 6. Создайте администратора магазина
35 | ```
36 | python manage.py createsuperuser
37 | ```
38 | 7. Запустите сервер
39 | ```
40 | python manage.py runserver
41 | ```
42 | Откройте браузер и перейдите по адресу http://127.0.0.1:8000/admin/. Введите имя пользователя и пароль администратора, чтобы войти в панель управления магазином.
43 |
44 | # Готово!
45 | Вы успешно установили магазин на Django и готовы начать его использовать!
46 |
47 | # Вклад в проект
48 | Если у вас есть предложения по улучшению или вы обнаружили баг, не стесняйтесь создать issue, отправить pull request либо написать напрямую автору. Ваш вклад приветствуется!
49 |
50 | # Автор
51 | [Натолин Артем](https://github.com/dagedarr)
52 |
53 | [Ссылка на еще один мой проект - финансовый ассистент](https://github.com/dagedarr/telegram-budget)
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | Django==3.2.10
2 | django-taggit==3.1.0
3 | Pillow==8.0.1
4 | python-telegram-bot==20.1
5 | python-dotenv==1.0.0
--------------------------------------------------------------------------------