└── Django---Ecommerce-master ├── .dockerignore ├── .gitattributes ├── .gitignore ├── Dockerfile ├── LICENSE ├── NOTES.md ├── README.md ├── cart ├── __init__.py ├── admin.py ├── apps.py ├── forms.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_product_stock.py │ ├── 0003_stripepayment.py │ ├── 0004_auto_20200912_1605.py │ └── __init__.py ├── models.py ├── templatetags │ ├── __init__.py │ └── cart_template_tags.py ├── urls.py ├── utils.py └── views.py ├── core ├── __init__.py ├── admin.py ├── apps.py ├── forms.py ├── migrations │ ├── 0001_initial.py │ └── __init__.py ├── models.py ├── signals.py └── views.py ├── ecom ├── __init__.py ├── asgi.py ├── gunicorn.py ├── settings │ ├── __init__.py │ ├── local_example.py │ └── main.py ├── urls.py └── wsgi.py ├── manage.py ├── requirements.in ├── requirements.txt ├── staff ├── __init__.py ├── apps.py ├── forms.py ├── migrations │ └── __init__.py ├── mixins.py ├── urls.py └── views.py ├── static ├── css │ ├── aos.css │ ├── bootstrap.min.css │ ├── bootstrap │ │ ├── bootstrap-grid.css │ │ └── bootstrap-reboot.css │ ├── jquery-ui.css │ ├── magnific-popup.css │ ├── owl.carousel.min.css │ ├── owl.theme.default.min.css │ └── style.css ├── fonts │ └── icomoon │ │ ├── Read Me.txt │ │ ├── demo-files │ │ ├── demo.css │ │ └── demo.js │ │ ├── demo.html │ │ ├── fonts │ │ ├── icomoon.eot │ │ ├── icomoon.svg │ │ ├── icomoon.ttf │ │ └── icomoon.woff │ │ ├── selection.json │ │ └── style.css ├── icons │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── images │ └── logo.png ├── js │ ├── aos.js │ ├── bootstrap.min.js │ ├── jquery-3.3.1.min.js │ ├── jquery-ui.js │ ├── jquery.magnific-popup.min.js │ ├── main.js │ ├── owl.carousel.min.js │ ├── popper.min.js │ └── slick.min.js └── scss │ ├── _site-base.scss │ ├── _site-blocks.scss │ ├── _site-navbar.scss │ ├── bootstrap │ ├── _alert.scss │ ├── _badge.scss │ ├── _breadcrumb.scss │ ├── _button-group.scss │ ├── _buttons.scss │ ├── _card.scss │ ├── _carousel.scss │ ├── _close.scss │ ├── _code.scss │ ├── _custom-forms.scss │ ├── _dropdown.scss │ ├── _forms.scss │ ├── _functions.scss │ ├── _grid.scss │ ├── _images.scss │ ├── _input-group.scss │ ├── _jumbotron.scss │ ├── _list-group.scss │ ├── _media.scss │ ├── _mixins.scss │ ├── _modal.scss │ ├── _nav.scss │ ├── _navbar.scss │ ├── _pagination.scss │ ├── _popover.scss │ ├── _print.scss │ ├── _progress.scss │ ├── _reboot.scss │ ├── _root.scss │ ├── _tables.scss │ ├── _tooltip.scss │ ├── _transitions.scss │ ├── _type.scss │ ├── _utilities.scss │ ├── _variables.scss │ ├── bootstrap-grid.scss │ ├── bootstrap-reboot.scss │ ├── bootstrap.scss │ ├── mixins │ │ ├── _alert.scss │ │ ├── _background-variant.scss │ │ ├── _badge.scss │ │ ├── _border-radius.scss │ │ ├── _box-shadow.scss │ │ ├── _breakpoints.scss │ │ ├── _buttons.scss │ │ ├── _caret.scss │ │ ├── _clearfix.scss │ │ ├── _float.scss │ │ ├── _forms.scss │ │ ├── _gradients.scss │ │ ├── _grid-framework.scss │ │ ├── _grid.scss │ │ ├── _hover.scss │ │ ├── _image.scss │ │ ├── _list-group.scss │ │ ├── _lists.scss │ │ ├── _nav-divider.scss │ │ ├── _pagination.scss │ │ ├── _reset-text.scss │ │ ├── _resize.scss │ │ ├── _screen-reader.scss │ │ ├── _size.scss │ │ ├── _table-row.scss │ │ ├── _text-emphasis.scss │ │ ├── _text-hide.scss │ │ ├── _text-truncate.scss │ │ ├── _transition.scss │ │ └── _visibility.scss │ └── utilities │ │ ├── _align.scss │ │ ├── _background.scss │ │ ├── _borders.scss │ │ ├── _clearfix.scss │ │ ├── _display.scss │ │ ├── _embed.scss │ │ ├── _flex.scss │ │ ├── _float.scss │ │ ├── _position.scss │ │ ├── _screenreaders.scss │ │ ├── _shadows.scss │ │ ├── _sizing.scss │ │ ├── _spacing.scss │ │ ├── _text.scss │ │ └── _visibility.scss │ └── style.scss └── templates ├── account ├── account_inactive.html ├── base.html ├── email.html ├── email │ ├── email_confirmation_message.txt │ ├── email_confirmation_signup_message.txt │ ├── email_confirmation_signup_subject.txt │ ├── email_confirmation_subject.txt │ ├── password_reset_key_message.txt │ └── password_reset_key_subject.txt ├── email_confirm.html ├── login.html ├── logout.html ├── messages │ ├── cannot_delete_primary_email.txt │ ├── email_confirmation_sent.txt │ ├── email_confirmed.txt │ ├── email_deleted.txt │ ├── logged_in.txt │ ├── logged_out.txt │ ├── password_changed.txt │ ├── password_set.txt │ ├── primary_email_set.txt │ └── unverified_primary_email.txt ├── password_change.html ├── password_reset.html ├── password_reset_done.html ├── password_reset_from_key.html ├── password_reset_from_key_done.html ├── password_set.html ├── signup.html ├── signup_closed.html ├── snippets │ └── already_logged_in.html ├── verification_sent.html └── verified_email_required.html ├── base.html ├── cart ├── cart.html ├── checkout.html ├── payment.html ├── product_detail.html ├── product_list.html ├── stripe_payment.html └── thanks.html ├── contact.html ├── footer.html ├── index.html ├── navbar.html ├── openid ├── base.html └── login.html ├── order.html ├── profile.html ├── scripts.html ├── socialaccount ├── authentication_error.html ├── base.html ├── connections.html ├── login_cancelled.html ├── messages │ ├── account_connected.txt │ ├── account_connected_other.txt │ ├── account_connected_updated.txt │ └── account_disconnected.txt ├── signup.html └── snippets │ ├── login_extra.html │ └── provider_list.html ├── staff ├── product_create.html ├── product_delete.html ├── product_list.html ├── product_update.html └── staff.html └── tests └── test_403_csrf.html /Django---Ecommerce-master/.dockerignore: -------------------------------------------------------------------------------- 1 | .idea 2 | venv/ 3 | venv 4 | *.pyc 5 | local_example.py 6 | local.py 7 | media/ 8 | media_root/ 9 | .gitattributes 10 | .gitignore 11 | LICENSE 12 | NOTES.md 13 | README.md 14 | .dockerignore 15 | .git 16 | Dockerfile 17 | 18 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/.gitattributes: -------------------------------------------------------------------------------- 1 | static/* linguist-vendored 2 | templates/* linguist-vendored -------------------------------------------------------------------------------- /Django---Ecommerce-master/.gitignore: -------------------------------------------------------------------------------- 1 | ### Django ### 2 | *.log 3 | *.pot 4 | *.pyc 5 | __pycache__/ 6 | local_settings.py 7 | db.sqlite3 8 | db.sqlite3-journal 9 | media 10 | local.py 11 | .idea/ 12 | 13 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 14 | # in your Git repository. Update and uncomment the following line accordingly. 15 | # /staticfiles/ 16 | 17 | ### Django.Python Stack ### 18 | # Byte-compiled / optimized / DLL files 19 | *.py[cod] 20 | *$py.class 21 | 22 | # C extensions 23 | *.so 24 | 25 | # Distribution / packaging 26 | .Python 27 | build/ 28 | develop-eggs/ 29 | dist/ 30 | downloads/ 31 | eggs/ 32 | .eggs/ 33 | lib/ 34 | lib64/ 35 | parts/ 36 | sdist/ 37 | var/ 38 | wheels/ 39 | pip-wheel-metadata/ 40 | share/python-wheels/ 41 | *.egg-info/ 42 | .installed.cfg 43 | *.egg 44 | MANIFEST 45 | 46 | # PyInstaller 47 | # Usually these files are written by a python script from a template 48 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 49 | *.manifest 50 | *.spec 51 | 52 | # Installer logs 53 | pip-log.txt 54 | pip-delete-this-directory.txt 55 | 56 | # Unit test / coverage reports 57 | htmlcov/ 58 | .tox/ 59 | .nox/ 60 | .coverage 61 | .coverage.* 62 | .cache 63 | nosetests.xml 64 | coverage.xml 65 | *.cover 66 | *.py,cover 67 | .hypothesis/ 68 | .pytest_cache/ 69 | pytestdebug.log 70 | 71 | # Translations 72 | *.mo 73 | 74 | # Django stuff: 75 | 76 | # Flask stuff: 77 | instance/ 78 | .webassets-cache 79 | 80 | # Scrapy stuff: 81 | .scrapy 82 | 83 | # Sphinx documentation 84 | docs/_build/ 85 | doc/_build/ 86 | 87 | # PyBuilder 88 | target/ 89 | 90 | # Jupyter Notebook 91 | .ipynb_checkpoints 92 | 93 | # IPython 94 | profile_default/ 95 | ipython_config.py 96 | 97 | # pyenv 98 | .python-version 99 | 100 | # pipenv 101 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 102 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 103 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 104 | # install all needed dependencies. 105 | #Pipfile.lock 106 | 107 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 108 | __pypackages__/ 109 | 110 | # Celery stuff 111 | celerybeat-schedule 112 | celerybeat.pid 113 | 114 | # SageMath parsed files 115 | *.sage.py 116 | 117 | # Environments 118 | .env 119 | .venv 120 | env/ 121 | venv/ 122 | ENV/ 123 | env.bak/ 124 | venv.bak/ 125 | 126 | # Spyder project settings 127 | .spyderproject 128 | .spyproject 129 | 130 | # Rope project settings 131 | .ropeproject 132 | 133 | # mkdocs documentation 134 | /site 135 | 136 | # mypy 137 | .mypy_cache/ 138 | .dmypy.json 139 | dmypy.json 140 | 141 | # Pyre type checker 142 | .pyre/ 143 | 144 | # pytype static type analyzer 145 | .pytype/ 146 | 147 | .vscode/ 148 | 149 | # static files generated from Django application using `collectstatic` 150 | media 151 | static_root 152 | media_root!/ecom/settings/local.py 153 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9.6-alpine3.14 2 | 3 | ENV PROJECT_DIR=/opt/project 4 | 5 | RUN true \ 6 | && apk add --upgrade \ 7 | && apk add \ 8 | musl-dev \ 9 | build-base \ 10 | postgresql-dev \ 11 | libffi-dev \ 12 | jpeg-dev \ 13 | zlib-dev \ 14 | libjpeg 15 | 16 | WORKDIR $PROJECT_DIR 17 | 18 | COPY requirements.txt requirements.txt 19 | COPY . . 20 | 21 | RUN true \ 22 | && python -m pip install --upgrade pip \ 23 | && python -m pip install -r $PROJECT_DIR/requirements.txt 24 | 25 | RUN mkdir -p $PROJECT_DIR/ecom/static 26 | RUN python $PROJECT_DIR/manage.py migrate 27 | RUN python $PROJECT_DIR/manage.py collectstatic 28 | RUN gunicorn ecom.wsgi:application -c $PROJECT_DIR/ecom/gunicorn.py 29 | 30 | EXPOSE 8000 31 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Flavio Oliveira 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 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, 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/NOTES.md: -------------------------------------------------------------------------------- 1 | # Notes for the user flow 2 | 3 | Product list 4 | 5 | | 6 | 7 | Product detail (add the item to cart) 8 | 9 | | 10 | 11 | Cart view (order detail view) (all the items in our cart) 12 | 13 | | 14 | 15 | Checkout (addresses) 16 | 17 | | 18 | 19 | Payment 20 | 21 | | 22 | 23 | Order confirmation 24 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/README.md: -------------------------------------------------------------------------------- 1 | # Django E-commerce. 2 | 3 |

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

13 | 14 | 15 |
16 | It is an E-commerce system built in Django. It contains all the essentials for adding products and use PayPal and Stripe as payment systems. 17 | 18 | ## About this Project: 19 | 20 | It is an E-commerce system built in Django. It contains all the essentials for adding products and use PayPal and Stripe as payment systems. 21 | 22 | The repository is a start point for most of my professional projects; for this, I'm using as a part of my portfolio, feel free to use wherever you want. I'll be happy if you provide any feedback or code improvements or suggestions. 23 | 24 | Connect with me at: 25 | 26 |

27 | 28 | 29 | 30 |    31 | 32 | 33 |    34 | 35 |

36 | 37 |

38 | 📫 How to reach me: fl4viooliveira@gmail.com 39 |

40 |

41 | 42 |

43 | 44 | ## Some technical information: 45 | 46 | - Django - 3.1.1 47 | - Django Allauth - 0.42.0 48 | - Django Crispy Forms - 1.9.2 49 | - Django Environ - 0.4.5 50 | - Stripe - 2.51.0 51 | 52 | 53 | ## To Install: 54 | 55 | Cloning the Repository: 56 | 57 | ``` 58 | $ git clone https://github.com/fl4viooliveira/django_ecommerce.git 59 | 60 | $ cd django_ecommerce 61 | 62 | ``` 63 | 64 | Installing the environment control: 65 | 66 | ``` 67 | $ pip install virtualenv 68 | 69 | $ virtualenv env 70 | 71 | ``` 72 | 73 | Activating the environment: 74 | 75 | on Windows: 76 | ``` 77 | env\Scripts\activate 78 | 79 | ``` 80 | on Mac OS / Linux: 81 | ``` 82 | $ source env/bin/activate 83 | 84 | ``` 85 | 86 | Installing dependencies: 87 | 88 | ``` 89 | $ pip install -r requirements.txt 90 | 91 | ``` 92 | 93 | Create a .env file on ecom folder (/ecom/.env) setting all requirements without using space after "=". 94 | 95 | Copy and paste on our .env file: 96 | 97 | ``` 98 | DEBUG= 99 | SECRET_KEY= 100 | DEFAULT_FROM_EMAIL= 101 | NOTIFY_EMAIL= 102 | PAYPAL_SANDBOX_CLIENT_ID= 103 | PAYPAL_SANDBOX_SECRET_KEY= 104 | PAYPAL_LIVE_CLIENT_ID= 105 | PAYPAL_LIVE_SECRET_KEY= 106 | STRIPE_PUBLIC_KEY= 107 | STRIPE_SECRET_KEY= 108 | STRIPE_WEBHOOK_SECRET= 109 | 110 | ``` 111 | 112 | Last commands to start: 113 | 114 | ``` 115 | $ python manage.py makemigrations 116 | 117 | $ python manage.py migrate 118 | 119 | ``` 120 | Create a super user: 121 | 122 | ``` 123 | $ python manage.py createsuperuser admin-name 124 | 125 | ``` 126 | 127 | Finishing running server: 128 | 129 | ``` 130 | $ python manage.py runserver 131 | 132 | ``` 133 | 134 | ## Contributing 135 | 136 | You can send how many PR's do you want, I'll be glad to analyse and accept them! And if you have any question about the project... 137 | 138 | 📫Email-me: fl4viooliveira@gmail.com 139 | 140 | 141 | 142 |    143 | 144 | Thank you! 145 | 146 | ## License 147 | 148 | 149 | NPM 150 |    151 | 152 | This project is licensed under the MIT License - see the [LICENSE.md](https://github.com/fl4viooliveira/django_ecommerce/blob/master/LICENSE) file for details. -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/cart/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/admin.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from django.contrib import admin 4 | 5 | from .models import ( 6 | Product, 7 | OrderItem, 8 | Order, 9 | ColourVariation, 10 | SizeVariation, 11 | Address, 12 | Payment, 13 | Category, 14 | StripePayment, 15 | ) 16 | 17 | 18 | @admin.register(Address) 19 | class AddressAdmin(admin.ModelAdmin): 20 | list_display: List[str] = [ 21 | 'address_line_1', 22 | 'address_line_2', 23 | 'city', 24 | 'zip_code', 25 | 'address_type', 26 | ] 27 | 28 | 29 | admin.site.register(Order) 30 | admin.site.register(Product) 31 | admin.site.register(Payment) 32 | admin.site.register(Category) 33 | admin.site.register(OrderItem) 34 | admin.site.register(SizeVariation) 35 | admin.site.register(StripePayment) 36 | admin.site.register(ColourVariation) 37 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class CartConfig(AppConfig): 5 | name: str = 'cart' 6 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/migrations/0002_product_stock.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.1 on 2020-09-11 23:56 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('cart', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='product', 15 | name='stock', 16 | field=models.IntegerField(default=0), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/migrations/0003_stripepayment.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.1 on 2020-09-12 11:27 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('cart', '0002_product_stock'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='StripePayment', 16 | fields=[ 17 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('payment_intent_id', models.CharField(max_length=100)), 19 | ('timestamp', models.DateTimeField(auto_now_add=True)), 20 | ('successful', models.BooleanField(default=False)), 21 | ('amount', models.FloatField(default=0)), 22 | ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stripe_payments', to='cart.order')), 23 | ], 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/migrations/0004_auto_20200912_1605.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.1 on 2020-09-12 16:05 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('cart', '0003_stripepayment'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='product', 16 | name='primary_category', 17 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='primary_products', to='cart.category'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/cart/migrations/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/cart/templatetags/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/templatetags/cart_template_tags.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | 3 | from cart.utils import get_or_set_order_session 4 | 5 | register = template.Library() 6 | 7 | 8 | @register.filter 9 | def cart_item_count(request) -> int: 10 | order = get_or_set_order_session(request) 11 | count: int = order.items.count() 12 | return count 13 | 14 | 15 | __all__ = ('cart_item_count',) 16 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/urls.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from django.urls import (path, URLPattern) 4 | 5 | from . import views 6 | 7 | urlpatterns: List[URLPattern] = [ 8 | path(route='', view=views.CartView.as_view(), name='summary'), 9 | path(route='payment/', view=views.PaymentView.as_view(), name='payment'), 10 | path(route='checkout/', view=views.CheckoutView.as_view(), name='checkout'), 11 | path(route='thank-you/', view=views.ThankYouView.as_view(), name='thank-you'), 12 | path(route='shop/', view=views.ProductListView.as_view(), name='product-list'), 13 | path(route='orders//', view=views.OrderDetailView.as_view(), name='order-detail'), 14 | path(route='webhooks/stripe/', view=views.stripe_webhook_view, name='stripe-webhook'), 15 | path(route='shop//', view=views.ProductDetailView.as_view(), name='product-detail'), 16 | path(route='confirm-order/', view=views.ConfirmOrderView.as_view(), name='confirm-order'), 17 | path(route='payment/stripe/', view=views.StripePaymentView.as_view(), name='payment-stripe'), 18 | path( 19 | route='increase-quantity//', 20 | view=views.IncreaseQuantityView.as_view(), 21 | name='increase-quantity', 22 | ), 23 | path( 24 | route='decrease-quantity//', 25 | view=views.DecreaseQuantityView.as_view(), 26 | name='decrease-quantity', 27 | ), 28 | path( 29 | route='remove-from-cart//', 30 | view=views.RemoveFromCartView.as_view(), 31 | name='remove-from-cart', 32 | ), 33 | ] 34 | 35 | app_name: str = 'cart' 36 | 37 | __all__ = ('app_name', 'urlpatterns',) 38 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/cart/utils.py: -------------------------------------------------------------------------------- 1 | from typing import Optional 2 | 3 | from .models import Order 4 | 5 | 6 | def get_or_set_order_session(request) -> Order: 7 | order_id: Optional[int] = request.session.get('order_id', None) 8 | if order_id is not None: 9 | order, _ = Order.objects.get_or_create(id=order_id, ordered=False) 10 | request.session['order_id'] = order.id 11 | else: 12 | order = Order.objects.create() 13 | request.session['order_id'] = order.id 14 | 15 | if request.user.is_authenticated and order.user is None: 16 | order.user = request.user 17 | order.save(update_fields=['user', ]) 18 | return order 19 | 20 | 21 | __all__ = ('get_or_set_order_session',) 22 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/core/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Customer 4 | 5 | admin.site.register(Customer) 6 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class CoreConfig(AppConfig): 5 | name: str = 'core' 6 | 7 | def ready(self): 8 | # noinspection PyUnresolvedReferences 9 | from . import signals 10 | 11 | super().ready() 12 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | 3 | 4 | class ContactForm(forms.Form): 5 | name = forms.CharField( 6 | max_length=100, 7 | widget=forms.TextInput( 8 | attrs={'placeholder': "Your name", } 9 | ) 10 | ) 11 | email = forms.EmailField( 12 | widget=forms.TextInput( 13 | attrs={'placeholder': "Your e-mail", } 14 | ) 15 | ) 16 | message = forms.CharField( 17 | widget=forms.Textarea( 18 | attrs={'placeholder': 'Your message', } 19 | ) 20 | ) 21 | 22 | 23 | __all__ = ('ContactForm',) 24 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.1 on 2020-09-12 11:27 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 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Customer', 19 | fields=[ 20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('stripe_customer_id', models.CharField(max_length=100)), 22 | ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), 23 | ], 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/core/migrations/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/models.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth import get_user_model 2 | from django.db import models 3 | from django.db.models.signals import post_save 4 | 5 | User = get_user_model() 6 | 7 | 8 | class Customer(models.Model): 9 | stripe_customer_id = models.CharField(max_length=100) 10 | user = models.OneToOneField(to=User, on_delete=models.CASCADE) 11 | 12 | def __str__(self) -> str: 13 | return self.user.email 14 | 15 | 16 | def post_save_user_receiver(sender, instance, created, **kwargs): 17 | if created: 18 | Customer.objects.create(user=instance) 19 | 20 | 21 | post_save.connect(post_save_user_receiver, sender=User) 22 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/signals.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth import get_user_model 2 | from django.db.models.signals import post_save 3 | from django.dispatch import receiver 4 | 5 | from .models import Customer 6 | 7 | User = get_user_model() 8 | 9 | 10 | @receiver(signal=post_save, sender=User) 11 | def post_save_user_receiver(sender, instance, created, **kwargs): 12 | if created: 13 | Customer.objects.create(user=instance) 14 | 15 | 16 | __all__ = ('post_save_user_receiver',) 17 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/core/views.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict 2 | 3 | from django.conf import settings 4 | from django.contrib import messages 5 | from django.contrib.auth.mixins import LoginRequiredMixin 6 | from django.core.mail import send_mail 7 | from django.shortcuts import reverse 8 | from django.views import generic 9 | 10 | from cart.models import Order 11 | from .forms import ContactForm 12 | 13 | 14 | class ProfileView(LoginRequiredMixin, generic.TemplateView): 15 | template_name: str = 'profile.html' 16 | 17 | def get_context_data(self, **kwargs) -> Dict[str, Any]: 18 | context = super(ProfileView, self).get_context_data(**kwargs) 19 | context.update({"orders": Order.objects.filter(user=self.request.user, ordered=True)}) 20 | return context 21 | 22 | 23 | class HomeView(generic.TemplateView): 24 | template_name: str = 'index.html' 25 | 26 | 27 | class ContactView(generic.FormView): 28 | template_name: str = 'contact.html' 29 | form_class = ContactForm 30 | 31 | def get_success_url(self) -> str: 32 | return reverse("contact") 33 | 34 | def form_valid(self, form): 35 | messages.info( 36 | self.request, "Thanks for getting in touch. We have received your message." 37 | ) 38 | name = form.cleaned_data.get('name') 39 | email = form.cleaned_data.get('email') 40 | message = form.cleaned_data.get('message') 41 | 42 | full_message = f""" 43 | Received message below from {name}, {email} 44 | ________________________ 45 | 46 | 47 | {message} 48 | """ 49 | send_mail( 50 | subject="Received contact form submission", 51 | message=full_message, 52 | from_email=settings.DEFAULT_FROM_EMAIL, 53 | recipient_list=[settings.NOTIFY_EMAIL] 54 | ) 55 | return super(ContactView, self).form_valid(form) 56 | 57 | 58 | __all__ = ( 59 | 'ProfileView', 60 | 'HomeView', 61 | 'ContactView', 62 | ) 63 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/ecom/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/asgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from django.core.asgi import get_asgi_application 4 | 5 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ecom.settings') 6 | 7 | application = get_asgi_application() 8 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/gunicorn.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | bind: str = '0.0.0.0:8000' 4 | backlog: int = 2048 5 | workers: int = os.cpu_count() * 2 + 1 6 | threads: int = 2 7 | max_requests: int = 10 8 | 9 | worker_class: str = 'gevent' 10 | 11 | __all__ = ('bind', 'backlog', 'workers', 'threads', 'max_requests',) 12 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/settings/__init__.py: -------------------------------------------------------------------------------- 1 | try: 2 | from .local import * 3 | except ImportError: 4 | from .main import * 5 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/settings/local_example.py: -------------------------------------------------------------------------------- 1 | from .main import * 2 | 3 | ALLOWED_HOSTS: List[str] = ['*', ] 4 | EMAIL_BACKEND: str = 'django.core.mail.backends.console.EmailBackend' 5 | 6 | # Database 7 | # region 8 | DATABASES: Dict[str, Dict[str, Any]] = { 9 | 'default': { 10 | 'ENGINE': 'django.db.backends.sqlite3', 11 | 'NAME': BASE_DIR / 'db.sqlite3', 12 | } 13 | } 14 | # endregion 15 | 16 | 17 | # Payment 18 | # region 19 | PAYPAL_CLIENT_ID: str = env.str('PAYPAL_SANDBOX_CLIENT_ID', '') 20 | PAYPAL_SECRET_KEY: str = env.str('PAYPAL_SANDBOX_SECRET_KEY', '') 21 | 22 | # endregion 23 | 24 | # Session 25 | # region 26 | SESSION_COOKIE_SECURE: bool = False 27 | 28 | # endregion 29 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/urls.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from django.conf import settings 4 | from django.conf.urls.static import static 5 | from django.contrib import admin 6 | from django.urls import (path, include, URLPattern) 7 | 8 | from core import views 9 | 10 | urlpatterns: List[URLPattern] = [ 11 | path('admin/', admin.site.urls), 12 | path('accounts/', include('allauth.urls')), 13 | path('', views.HomeView.as_view(), name='home'), 14 | path('cart/', include('cart.urls', namespace='cart')), 15 | path('staff/', include('staff.urls', namespace='staff')), 16 | path('profile/', views.ProfileView.as_view(), name='profile'), 17 | path('contact/', views.ContactView.as_view(), name='contact'), 18 | ] 19 | 20 | if settings.DEBUG: 21 | urlpatterns += static(prefix=settings.STATIC_URL, document_root=settings.STATIC_ROOT) 22 | urlpatterns += static(prefix=settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 23 | 24 | __all__ = ('urlpatterns',) 25 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/ecom/wsgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from django.core.wsgi import get_wsgi_application 4 | 5 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ecom.settings') 6 | 7 | application = get_wsgi_application() 8 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/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', 'ecom.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 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/requirements.in: -------------------------------------------------------------------------------- 1 | asgiref==3.2.10 2 | certifi==2020.6.20 3 | chardet==3.0.4 4 | defusedxml==0.6.0 5 | Django==3.1.1 6 | django-allauth==0.42.0 7 | django-crispy-forms==1.9.2 8 | django-environ==0.4.5 9 | idna==2.10 10 | oauthlib==3.1.0 11 | Pillow==7.2.0 12 | psycopg2==2.8.5 13 | python3-openid==3.2.0 14 | pytz==2020.1 15 | requests==2.24.0 16 | requests-oauthlib==1.3.0 17 | sqlparse==0.3.1 18 | stripe==2.51.0 19 | urllib3==1.25.10 20 | gunicorn>=20.1.0 21 | gevent>=21.8.0 22 | pip-tools 23 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/requirements.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This file is autogenerated by pip-compile with python 3.9 3 | # To update, run: 4 | # 5 | # pip-compile --output-file=requirements.txt requirements.in 6 | # 7 | asgiref==3.2.10 8 | # via 9 | # -r requirements.in 10 | # django 11 | build==0.8.0 12 | # via pip-tools 13 | certifi==2020.6.20 14 | # via 15 | # -r requirements.in 16 | # requests 17 | chardet==3.0.4 18 | # via 19 | # -r requirements.in 20 | # requests 21 | click==8.1.3 22 | # via pip-tools 23 | defusedxml==0.6.0 24 | # via 25 | # -r requirements.in 26 | # python3-openid 27 | django==3.1.1 28 | # via 29 | # -r requirements.in 30 | # django-allauth 31 | django-allauth==0.42.0 32 | # via -r requirements.in 33 | django-crispy-forms==1.9.2 34 | # via -r requirements.in 35 | django-environ==0.4.5 36 | # via -r requirements.in 37 | gevent==21.12.0 38 | # via -r requirements.in 39 | greenlet==1.1.2 40 | # via gevent 41 | gunicorn==20.1.0 42 | # via -r requirements.in 43 | idna==2.10 44 | # via 45 | # -r requirements.in 46 | # requests 47 | oauthlib==3.1.0 48 | # via 49 | # -r requirements.in 50 | # requests-oauthlib 51 | packaging==21.3 52 | # via build 53 | pep517==0.12.0 54 | # via build 55 | pillow==7.2.0 56 | # via -r requirements.in 57 | pip-tools==6.8.0 58 | # via -r requirements.in 59 | psycopg2==2.8.5 60 | # via -r requirements.in 61 | pyparsing==3.0.9 62 | # via packaging 63 | python3-openid==3.2.0 64 | # via 65 | # -r requirements.in 66 | # django-allauth 67 | pytz==2020.1 68 | # via 69 | # -r requirements.in 70 | # django 71 | requests==2.24.0 72 | # via 73 | # -r requirements.in 74 | # django-allauth 75 | # requests-oauthlib 76 | # stripe 77 | requests-oauthlib==1.3.0 78 | # via 79 | # -r requirements.in 80 | # django-allauth 81 | sqlparse==0.3.1 82 | # via 83 | # -r requirements.in 84 | # django 85 | stripe==2.51.0 86 | # via -r requirements.in 87 | tomli==2.0.1 88 | # via 89 | # build 90 | # pep517 91 | urllib3==1.25.10 92 | # via 93 | # -r requirements.in 94 | # requests 95 | wheel==0.37.1 96 | # via pip-tools 97 | zope-event==4.5.0 98 | # via gevent 99 | zope-interface==5.4.0 100 | # via gevent 101 | 102 | # The following packages are considered to be unsafe in a requirements file: 103 | # pip 104 | # setuptools 105 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/staff/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class StaffConfig(AppConfig): 5 | name: str = 'staff' 6 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | 3 | from cart.models import Product 4 | 5 | 6 | class ProductForm(forms.ModelForm): 7 | class Meta: 8 | model = Product 9 | fields = [ 10 | 'title', 11 | 'image', 12 | 'description', 13 | 'price', 14 | 'available_colours', 15 | 'available_sizes', 16 | ] 17 | 18 | 19 | __all__ = ('ProductForm',) 20 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/staff/migrations/__init__.py -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/mixins.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from django.http import (HttpResponseRedirect, HttpResponsePermanentRedirect) 4 | from django.shortcuts import redirect 5 | 6 | 7 | class StaffUserMixin(object): 8 | def dispatch(self, request, *args, **kwargs) -> Union[HttpResponsePermanentRedirect, HttpResponseRedirect]: 9 | if not request.user.is_staff: 10 | return redirect("home") 11 | return super(StaffUserMixin, self).dispatch(request, *args, **kwargs) 12 | 13 | 14 | __all__ = ('StaffUserMixin',) 15 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/urls.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from django.urls import (path, URLPattern) 4 | 5 | from . import views 6 | 7 | urlpatterns: List[URLPattern] = [ 8 | path(route='', view=views.StaffView.as_view(), name='staff'), 9 | path(route='products/', view=views.ProductListView.as_view(), name='product-list'), 10 | path(route='create/', view=views.ProductCreateView.as_view(), name='product-create'), 11 | path( 12 | route='products//update/', 13 | view=views.ProductUpdateView.as_view(), 14 | name='product-update', 15 | ), 16 | path( 17 | route='products//delete/', 18 | view=views.ProductDeleteView.as_view(), 19 | name='product-delete', 20 | ), 21 | ] 22 | 23 | app_name: str = 'staff' 24 | 25 | __all__ = ('app_name', 'urlpatterns',) 26 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/staff/views.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.mixins import LoginRequiredMixin 2 | from django.http import HttpResponseRedirect 3 | from django.shortcuts import reverse 4 | from django.views import generic 5 | 6 | from cart.models import (Order, Product) 7 | from .forms import ProductForm 8 | from .mixins import StaffUserMixin 9 | 10 | 11 | class StaffView(LoginRequiredMixin, StaffUserMixin, generic.ListView): 12 | template_name = 'staff/staff.html' 13 | queryset = Order.objects.filter(ordered=True).order_by('-ordered_date') 14 | paginate_by: int = 20 15 | context_object_name: str = 'orders' 16 | 17 | 18 | class ProductListView(LoginRequiredMixin, StaffUserMixin, generic.ListView): 19 | template_name: str = 'staff/product_list.html' 20 | queryset = Product.objects.all() 21 | paginate_by: int = 20 22 | context_object_name: str = 'products' 23 | 24 | 25 | class ProductCreateView(LoginRequiredMixin, StaffUserMixin, generic.CreateView): 26 | template_name: str = 'staff/product_create.html' 27 | form_class = ProductForm 28 | 29 | def get_success_url(self) -> str: 30 | return reverse('staff:product-list') 31 | 32 | def form_valid(self, form) -> HttpResponseRedirect: 33 | form.save() 34 | return super(ProductCreateView, self).form_valid(form) 35 | 36 | 37 | class ProductUpdateView(LoginRequiredMixin, StaffUserMixin, generic.UpdateView): 38 | template_name: str = 'staff/product_create.html' 39 | form_class = ProductForm 40 | queryset = Product.objects.all() 41 | 42 | def get_success_url(self) -> str: 43 | return reverse("staff:product-list") 44 | 45 | def form_valid(self, form) -> HttpResponseRedirect: 46 | form.save() 47 | return super(ProductUpdateView, self).form_valid(form) 48 | 49 | 50 | class ProductDeleteView(LoginRequiredMixin, StaffUserMixin, generic.DeleteView): 51 | template_name: str = 'staff/product_delete.html' 52 | queryset = Product.objects.all() 53 | 54 | def get_success_url(self) -> str: 55 | return reverse("staff:product-list") 56 | 57 | 58 | __all__ = ( 59 | 'StaffView', 60 | 'ProductListView', 61 | 'ProductCreateView', 62 | 'ProductUpdateView', 63 | 'ProductDeleteView', 64 | ) 65 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/css/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/css/owl.theme.default.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-theme .owl-dots, 7 | .owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent} 8 | .owl-theme .owl-nav{margin-top:10px} 9 | .owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px;position: absolute;} 10 | .owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none} 11 | .owl-theme .owl-nav .disabled{opacity:.5;cursor:default} 12 | .owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px} 13 | .owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1} 14 | .owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px} 15 | .owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/fonts/icomoon/Read Me.txt: -------------------------------------------------------------------------------- 1 | Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures. 2 | 3 | To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts 4 | 5 | You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects. 6 | 7 | You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. 8 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/fonts/icomoon/demo-files/demo.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 0; 3 | margin: 0; 4 | font-family: sans-serif; 5 | font-size: 1em; 6 | line-height: 1.5; 7 | color: #555; 8 | background: #fff; 9 | } 10 | h1 { 11 | font-size: 1.5em; 12 | font-weight: normal; 13 | } 14 | small { 15 | font-size: .66666667em; 16 | } 17 | a { 18 | color: #e74c3c; 19 | text-decoration: none; 20 | } 21 | a:hover, a:focus { 22 | box-shadow: 0 1px #e74c3c; 23 | } 24 | .bshadow0, input { 25 | box-shadow: inset 0 -2px #e7e7e7; 26 | } 27 | input:hover { 28 | box-shadow: inset 0 -2px #ccc; 29 | } 30 | input, fieldset { 31 | font-family: sans-serif; 32 | font-size: 1em; 33 | margin: 0; 34 | padding: 0; 35 | border: 0; 36 | } 37 | input { 38 | color: inherit; 39 | line-height: 1.5; 40 | height: 1.5em; 41 | padding: .25em 0; 42 | } 43 | input:focus { 44 | outline: none; 45 | box-shadow: inset 0 -2px #449fdb; 46 | } 47 | .glyph { 48 | font-size: 16px; 49 | width: 15em; 50 | padding-bottom: 1em; 51 | margin-right: 4em; 52 | margin-bottom: 1em; 53 | float: left; 54 | overflow: hidden; 55 | } 56 | .liga { 57 | width: 80%; 58 | width: calc(100% - 2.5em); 59 | } 60 | .talign-right { 61 | text-align: right; 62 | } 63 | .talign-center { 64 | text-align: center; 65 | } 66 | .bgc1 { 67 | background: #f1f1f1; 68 | } 69 | .fgc1 { 70 | color: #999; 71 | } 72 | .fgc0 { 73 | color: #000; 74 | } 75 | p { 76 | margin-top: 1em; 77 | margin-bottom: 1em; 78 | } 79 | .mvm { 80 | margin-top: .75em; 81 | margin-bottom: .75em; 82 | } 83 | .mtn { 84 | margin-top: 0; 85 | } 86 | .mtl, .mal { 87 | margin-top: 1.5em; 88 | } 89 | .mbl, .mal { 90 | margin-bottom: 1.5em; 91 | } 92 | .mal, .mhl { 93 | margin-left: 1.5em; 94 | margin-right: 1.5em; 95 | } 96 | .mhmm { 97 | margin-left: 1em; 98 | margin-right: 1em; 99 | } 100 | .mls { 101 | margin-left: .25em; 102 | } 103 | .ptl { 104 | padding-top: 1.5em; 105 | } 106 | .pbs, .pvs { 107 | padding-bottom: .25em; 108 | } 109 | .pvs, .pts { 110 | padding-top: .25em; 111 | } 112 | .unit { 113 | float: left; 114 | } 115 | .unitRight { 116 | float: right; 117 | } 118 | .size1of2 { 119 | width: 50%; 120 | } 121 | .size1of1 { 122 | width: 100%; 123 | } 124 | .clearfix:before, .clearfix:after { 125 | content: " "; 126 | display: table; 127 | } 128 | .clearfix:after { 129 | clear: both; 130 | } 131 | .hidden-true { 132 | display: none; 133 | } 134 | .textbox0 { 135 | width: 3em; 136 | background: #f1f1f1; 137 | padding: .25em .5em; 138 | line-height: 1.5; 139 | height: 1.5em; 140 | } 141 | #testDrive { 142 | display: block; 143 | padding-top: 24px; 144 | line-height: 1.5; 145 | } 146 | .fs0 { 147 | font-size: 16px; 148 | } 149 | .fs1 { 150 | font-size: 28px; 151 | } 152 | .fs2 { 153 | font-size: 24px; 154 | } 155 | 156 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/fonts/icomoon/demo-files/demo.js: -------------------------------------------------------------------------------- 1 | if (!('boxShadow' in document.body.style)) { 2 | document.body.setAttribute('class', 'noBoxShadow'); 3 | } 4 | 5 | document.body.addEventListener("click", function(e) { 6 | var target = e.target; 7 | if (target.tagName === "INPUT" && 8 | target.getAttribute('class').indexOf('liga') === -1) { 9 | target.select(); 10 | } 11 | }); 12 | 13 | (function() { 14 | var fontSize = document.getElementById('fontSize'), 15 | testDrive = document.getElementById('testDrive'), 16 | testText = document.getElementById('testText'); 17 | function updateTest() { 18 | testDrive.innerHTML = testText.value || String.fromCharCode(160); 19 | if (window.icomoonLiga) { 20 | window.icomoonLiga(testDrive); 21 | } 22 | } 23 | function updateSize() { 24 | testDrive.style.fontSize = fontSize.value + 'px'; 25 | } 26 | fontSize.addEventListener('change', updateSize, false); 27 | testText.addEventListener('input', updateTest, false); 28 | testText.addEventListener('change', updateTest, false); 29 | updateSize(); 30 | }()); 31 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/fonts/icomoon/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/fonts/icomoon/fonts/icomoon.eot -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/fonts/icomoon/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/fonts/icomoon/fonts/icomoon.ttf -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/fonts/icomoon/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/fonts/icomoon/fonts/icomoon.woff -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/android-icon-144x144.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/android-icon-192x192.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/android-icon-36x36.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/android-icon-48x48.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/android-icon-72x72.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/android-icon-96x96.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-114x114.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-144x144.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-57x57.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-60x60.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-72x72.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-76x76.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/apple-icon.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/favicon-16x16.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/favicon-32x32.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/favicon-96x96.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/favicon.ico -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/ms-icon-150x150.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/ms-icon-310x310.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/icons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/icons/ms-icon-70x70.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talented0Dev/Django---Ecommerce/4588dcf1808a54f23a56f1cbcd580c33edf79d9c/Django---Ecommerce-master/static/images/logo.png -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/scss/_site-base.scss: -------------------------------------------------------------------------------- 1 | body { 2 | line-height: 1.7; 3 | color: darken($gray-3, 20%); 4 | font-weight: 300; 5 | font-size: 16px; 6 | } 7 | ::-moz-selection { 8 | background: $black; 9 | color: $white; 10 | } 11 | ::selection { 12 | background: $black; 13 | color: $white; 14 | } 15 | a { 16 | transition: .3s all ease; 17 | &:hover { 18 | text-decoration: none; 19 | } 20 | } 21 | 22 | .text-black { 23 | color: $black; 24 | } 25 | 26 | 27 | .site-wrap { 28 | &:before { 29 | transition: .3s all ease-in-out; 30 | background: rgba(0,0,0,.6); 31 | content: ""; 32 | position: absolute; 33 | z-index: 2000; 34 | top: 0; 35 | left: 0; 36 | right: 0; 37 | bottom: 0; 38 | opacity: 0; 39 | visibility: hidden; 40 | } 41 | .offcanvas-menu & { 42 | position: absolute; 43 | height: 100%; 44 | width: 100%; 45 | z-index: 2; 46 | overflow: hidden; 47 | 48 | &:before { 49 | opacity: 1; 50 | visibility: visible; 51 | } 52 | } 53 | } 54 | 55 | .btn { 56 | text-transform: uppercase; 57 | position: relative; 58 | transition: .2s all ease-in-out!important; 59 | top: 0; 60 | letter-spacing: .05em; 61 | &:hover, &:active, &:focus { 62 | outline: none; 63 | box-shadow: none!important; 64 | } 65 | &.btn-secondary { 66 | background-color: lighten($secondary, 45%); 67 | border-color: lighten($secondary, 45%); 68 | color: $black; 69 | } 70 | &.btn-sm { 71 | font-size: 14px!important; 72 | padding: 10px 20px!important; 73 | } 74 | &.btn-primary { 75 | font-size: 17px; 76 | font-weight: 300; 77 | letter-spacing: .2em; 78 | } 79 | &:hover { 80 | box-shadow: 0 5px 20px -7px rgba(0,0,0,.9)!important; 81 | top: -2px; 82 | } 83 | 84 | } 85 | .form-control { 86 | height: 43px; 87 | &:active, &:focus { 88 | border-color: $primary; 89 | } 90 | &:hover, &:active, &:focus { 91 | box-shadow: none!important; 92 | } 93 | } 94 | 95 | .site-section { 96 | padding: 2.5em 0; 97 | @include media-breakpoint-up(md) { 98 | padding: 5em 0; 99 | } 100 | 101 | &.site-section-sm { 102 | padding: 4em 0; 103 | } 104 | } 105 | 106 | .site-section-heading { 107 | font-size: 30px; 108 | color: $gray-1; 109 | position: relative; 110 | &:before { 111 | content: ""; 112 | left: 0%; 113 | top: 0; 114 | position: absolute; 115 | width: 40px; 116 | height: 2px; 117 | background: $primary; 118 | } 119 | &.text-center { 120 | &:before { 121 | content: ""; 122 | left: 50%; 123 | top: 0; 124 | transform: translateX(-50%); 125 | position: absolute; 126 | width: 40px; 127 | height: 2px; 128 | background: $primary; 129 | } 130 | } 131 | 132 | } 133 | 134 | .border-top { 135 | border-top: 1px solid $gray-4!important; 136 | } 137 | 138 | .site-footer { 139 | padding: 4em 0; 140 | ul { 141 | li { 142 | margin-bottom: 10px; 143 | a { 144 | color: $gray-2; 145 | &:hover { 146 | color: $primary; 147 | } 148 | } 149 | } 150 | } 151 | .footer-heading { 152 | font-size: 20px; 153 | color: $gray-1; 154 | } 155 | } -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/scss/bootstrap/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: ($close-font-size + $alert-padding-x * 2); 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | padding: $alert-padding-y $alert-padding-x; 38 | color: inherit; 39 | } 40 | } 41 | 42 | 43 | // Alternate styles 44 | // 45 | // Generate contextual modifier classes for colorizing the alert. 46 | 47 | @each $color, $value in $theme-colors { 48 | .alert-#{$color} { 49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/scss/bootstrap/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | font-size: $badge-font-size; 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | 17 | // Empty badges collapse automatically 18 | &:empty { 19 | display: none; 20 | } 21 | } 22 | 23 | // Quick fix for badges in buttons 24 | .btn .badge { 25 | position: relative; 26 | top: -1px; 27 | } 28 | 29 | // Pill badges 30 | // 31 | // Make them extra rounded with a modifier to replace v3's badges. 32 | 33 | .badge-pill { 34 | padding-right: $badge-pill-padding-x; 35 | padding-left: $badge-pill-padding-x; 36 | @include border-radius($badge-pill-border-radius); 37 | } 38 | 39 | // Colors 40 | // 41 | // Contextual variations (linked badges get darker on :hover). 42 | 43 | @each $color, $value in $theme-colors { 44 | .badge-#{$color} { 45 | @include badge-variant($value); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Django---Ecommerce-master/static/scss/bootstrap/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | list-style: none; 7 | background-color: $breadcrumb-bg; 8 | @include border-radius($breadcrumb-border-radius); 9 | } 10 | 11 | .breadcrumb-item { 12 | // The separator between breadcrumbs (by default, a forward-slash: "/") 13 | + .breadcrumb-item { 14 | padding-left: $breadcrumb-item-padding; 15 | 16 | &::before { 17 | display: inline-block; // Suppress underlining of the separator in modern browsers 18 | padding-right: $breadcrumb-item-padding; 19 | color: $breadcrumb-divider-color; 20 | content: $breadcrumb-divider; 21 | } 22 | } 23 | 24 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 25 | // without `