├── core
├── __init__.py
├── migrations
│ ├── __init__.py
│ ├── 0005_auto_20200626_1903.py
│ ├── 0003_auto_20200625_2024.py
│ ├── 0004_item_description.py
│ ├── 0007_auto_20201206_1235.py
│ ├── 0006_comment.py
│ ├── 0002_auto_20200625_2010.py
│ └── 0008_alter_address_id_alter_cart_id_alter_category_id_and_more.py
├── tests.py
├── apps.py
├── templatetags
│ ├── pagination.py
│ └── cart_template_tags.py
├── urls.py
├── forms.py
└── admin.py
├── djangoecommerce
├── __init__.py
├── wsgi.py
└── urls.py
├── static
├── scss
│ ├── _custom-styles.scss
│ ├── _custom-variables.scss
│ ├── free
│ │ ├── _depreciated.scss
│ │ ├── _dropdowns.scss
│ │ ├── _loader.scss
│ │ ├── modules
│ │ │ └── animations-extended
│ │ │ │ └── animations-extended.scss
│ │ ├── _footers.scss
│ │ ├── _badges.scss
│ │ ├── _input-group.scss
│ │ ├── _list-group.scss
│ │ ├── _cards.scss
│ │ ├── _switch.scss
│ │ ├── _carousels.scss
│ │ ├── _tables.scss
│ │ ├── _pagination.scss
│ │ ├── _navbars.scss
│ │ └── _animations-basic.scss
│ ├── addons
│ │ ├── _directives.scss
│ │ ├── _rating.scss
│ │ └── _hierarchical-display.scss
│ ├── style.scss
│ ├── _custom-skin.scss
│ ├── core
│ │ ├── _helpers.scss
│ │ ├── _masks.scss
│ │ ├── bootstrap
│ │ │ └── _functions.scss
│ │ ├── _typography.scss
│ │ └── _global.scss
│ ├── mdb.lite.scss
│ └── mdb.scss
├── img
│ ├── flags.png
│ ├── sample.jpg
│ ├── svg
│ │ ├── flags.png
│ │ ├── arrow_left.svg
│ │ └── arrow_right.svg
│ ├── overlays
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ ├── 05.png
│ │ ├── 06.png
│ │ ├── 07.png
│ │ ├── 08.png
│ │ └── 09.png
│ └── lightbox
│ │ ├── preloader.gif
│ │ ├── default-skin.png
│ │ └── default-skin.svg
├── font
│ └── roboto
│ │ ├── Roboto-Bold.eot
│ │ ├── Roboto-Bold.ttf
│ │ ├── Roboto-Bold.woff
│ │ ├── Roboto-Light.eot
│ │ ├── Roboto-Light.ttf
│ │ ├── Roboto-Thin.eot
│ │ ├── Roboto-Thin.ttf
│ │ ├── Roboto-Thin.woff
│ │ ├── Roboto-Bold.woff2
│ │ ├── Roboto-Light.woff
│ │ ├── Roboto-Light.woff2
│ │ ├── Roboto-Medium.eot
│ │ ├── Roboto-Medium.ttf
│ │ ├── Roboto-Medium.woff
│ │ ├── Roboto-Medium.woff2
│ │ ├── Roboto-Regular.eot
│ │ ├── Roboto-Regular.ttf
│ │ ├── Roboto-Regular.woff
│ │ ├── Roboto-Thin.woff2
│ │ └── Roboto-Regular.woff2
├── css
│ ├── style.min.css
│ ├── addons
│ │ ├── directives.min.css
│ │ ├── rating.min.css
│ │ ├── rating.css
│ │ ├── directives.css
│ │ ├── zmd.hierarchical-display.min.css
│ │ ├── zmd.hierarchical-display.css
│ │ └── datatables.min.css
│ └── style.css
└── js
│ ├── modules
│ ├── scrolling-navbar.js
│ ├── default-file-input.js
│ ├── enhanced-modals.js
│ └── treeview.js
│ └── addons
│ ├── progressBar.min.js
│ ├── progressBar.js
│ ├── rating.min.js
│ └── jquery.zmd.hierarchical-display.min.js
├── templates
├── account
│ ├── base.html
│ ├── messages
│ │ ├── logged_out.txt
│ │ ├── email_confirmation_sent.txt
│ │ ├── logged_in.txt
│ │ ├── password_changed.txt
│ │ ├── password_set.txt
│ │ ├── email_confirmed.txt
│ │ ├── email_deleted.txt
│ │ ├── primary_email_set.txt
│ │ ├── unverified_primary_email.txt
│ │ └── cannot_delete_primary_email.txt
│ ├── email
│ │ ├── email_confirmation_signup_message.txt
│ │ ├── email_confirmation_signup_subject.txt
│ │ ├── password_reset_key_subject.txt
│ │ ├── email_confirmation_subject.txt
│ │ ├── email_confirmation_message.txt
│ │ └── password_reset_key_message.txt
│ ├── snippets
│ │ └── already_logged_in.html
│ ├── account_inactive.html
│ ├── password_reset_from_key_done.html
│ ├── signup_closed.html
│ ├── password_set.html
│ ├── verification_sent.html
│ ├── password_reset_done.html
│ ├── logout.html
│ ├── password_change.html
│ ├── verified_email_required.html
│ ├── password_reset.html
│ ├── password_reset_from_key.html
│ ├── email_confirm.html
│ ├── signup.html
│ ├── login.html
│ └── email.html
├── openid
│ ├── base.html
│ └── login.html
├── socialaccount
│ ├── base.html
│ ├── snippets
│ │ ├── login_extra.html
│ │ └── provider_list.html
│ ├── messages
│ │ ├── account_connected_updated.txt
│ │ ├── account_connected.txt
│ │ ├── account_disconnected.txt
│ │ └── account_connected_other.txt
│ ├── authentication_error.html
│ ├── login_cancelled.html
│ ├── signup.html
│ └── connections.html
├── tests
│ ├── test_403_csrf.html
│ └── design_form.html
├── ssl_payment.html
├── any_form.html
├── script.html
├── request_refund.html
├── base.html
├── complete.html
├── head.html
├── category.html
├── order_snippet.html
├── navbar.html
├── footer.html
├── customer_profile.html
└── home-page.html
├── static_in_env
├── scss
│ ├── _custom-styles.scss
│ ├── _custom-variables.scss
│ ├── free
│ │ ├── _depreciated.scss
│ │ ├── _dropdowns.scss
│ │ ├── _loader.scss
│ │ ├── modules
│ │ │ └── animations-extended
│ │ │ │ └── animations-extended.scss
│ │ ├── _footers.scss
│ │ ├── _badges.scss
│ │ ├── _input-group.scss
│ │ ├── _list-group.scss
│ │ ├── _cards.scss
│ │ ├── _switch.scss
│ │ ├── _carousels.scss
│ │ ├── _tables.scss
│ │ ├── _pagination.scss
│ │ ├── _navbars.scss
│ │ └── _animations-basic.scss
│ ├── addons
│ │ ├── _directives.scss
│ │ ├── _rating.scss
│ │ └── _hierarchical-display.scss
│ ├── style.scss
│ ├── _custom-skin.scss
│ ├── core
│ │ ├── _helpers.scss
│ │ ├── _masks.scss
│ │ ├── bootstrap
│ │ │ └── _functions.scss
│ │ ├── _typography.scss
│ │ └── _global.scss
│ ├── mdb.lite.scss
│ └── mdb.scss
├── img
│ ├── flags.png
│ ├── sample.jpg
│ ├── overlays
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ ├── 05.png
│ │ ├── 06.png
│ │ ├── 07.png
│ │ ├── 08.png
│ │ └── 09.png
│ ├── svg
│ │ ├── flags.png
│ │ ├── arrow_left.svg
│ │ └── arrow_right.svg
│ └── lightbox
│ │ ├── preloader.gif
│ │ ├── default-skin.png
│ │ └── default-skin.svg
├── font
│ └── roboto
│ │ ├── Roboto-Bold.eot
│ │ ├── Roboto-Bold.ttf
│ │ ├── Roboto-Bold.woff
│ │ ├── Roboto-Bold.woff2
│ │ ├── Roboto-Light.eot
│ │ ├── Roboto-Light.ttf
│ │ ├── Roboto-Light.woff
│ │ ├── Roboto-Medium.eot
│ │ ├── Roboto-Medium.ttf
│ │ ├── Roboto-Thin.eot
│ │ ├── Roboto-Thin.ttf
│ │ ├── Roboto-Thin.woff
│ │ ├── Roboto-Thin.woff2
│ │ ├── Roboto-Light.woff2
│ │ ├── Roboto-Medium.woff
│ │ ├── Roboto-Medium.woff2
│ │ ├── Roboto-Regular.eot
│ │ ├── Roboto-Regular.ttf
│ │ ├── Roboto-Regular.woff
│ │ └── Roboto-Regular.woff2
├── css
│ ├── style.min.css
│ ├── addons
│ │ ├── directives.min.css
│ │ ├── rating.min.css
│ │ ├── rating.css
│ │ ├── directives.css
│ │ ├── zmd.hierarchical-display.min.css
│ │ ├── zmd.hierarchical-display.css
│ │ └── datatables.min.css
│ └── style.css
└── js
│ ├── modules
│ ├── scrolling-navbar.js
│ ├── default-file-input.js
│ ├── enhanced-modals.js
│ └── treeview.js
│ └── addons
│ ├── progressBar.min.js
│ ├── progressBar.js
│ ├── rating.min.js
│ └── jquery.zmd.hierarchical-display.min.js
├── .env
├── requirements.txt
├── manage.py
└── .gitignore
/core/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/core/migrations/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/djangoecommerce/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/scss/_custom-styles.scss:
--------------------------------------------------------------------------------
1 | // Your custom styles
--------------------------------------------------------------------------------
/static/scss/_custom-variables.scss:
--------------------------------------------------------------------------------
1 | // Your custom variables
--------------------------------------------------------------------------------
/templates/account/base.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
--------------------------------------------------------------------------------
/templates/account/messages/logged_out.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
--------------------------------------------------------------------------------
/static_in_env/scss/_custom-styles.scss:
--------------------------------------------------------------------------------
1 | // Your custom styles
--------------------------------------------------------------------------------
/static_in_env/scss/_custom-variables.scss:
--------------------------------------------------------------------------------
1 | // Your custom variables
--------------------------------------------------------------------------------
/templates/openid/base.html:
--------------------------------------------------------------------------------
1 | {% extends "socialaccount/base.html" %}
2 |
--------------------------------------------------------------------------------
/templates/socialaccount/base.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
--------------------------------------------------------------------------------
/core/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/static/scss/free/_depreciated.scss:
--------------------------------------------------------------------------------
1 | // These settings will be only for one version
2 |
3 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_depreciated.scss:
--------------------------------------------------------------------------------
1 | // These settings will be only for one version
2 |
3 |
--------------------------------------------------------------------------------
/static/img/flags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/flags.png
--------------------------------------------------------------------------------
/templates/socialaccount/snippets/login_extra.html:
--------------------------------------------------------------------------------
1 | {% load socialaccount %}
2 |
3 | {% providers_media_js %}
4 |
--------------------------------------------------------------------------------
/core/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class CoreConfig(AppConfig):
5 | name = 'core'
6 |
--------------------------------------------------------------------------------
/static/img/sample.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/sample.jpg
--------------------------------------------------------------------------------
/templates/account/messages/email_confirmation_sent.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/static/img/svg/flags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/svg/flags.png
--------------------------------------------------------------------------------
/templates/account/messages/logged_in.txt:
--------------------------------------------------------------------------------
1 | {% load account %}
2 | {% load i18n %}
3 | {% user_display user as name %}
4 |
--------------------------------------------------------------------------------
/static/img/overlays/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/01.png
--------------------------------------------------------------------------------
/static/img/overlays/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/02.png
--------------------------------------------------------------------------------
/static/img/overlays/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/03.png
--------------------------------------------------------------------------------
/static/img/overlays/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/04.png
--------------------------------------------------------------------------------
/static/img/overlays/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/05.png
--------------------------------------------------------------------------------
/static/img/overlays/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/06.png
--------------------------------------------------------------------------------
/static/img/overlays/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/07.png
--------------------------------------------------------------------------------
/static/img/overlays/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/08.png
--------------------------------------------------------------------------------
/static/img/overlays/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/overlays/09.png
--------------------------------------------------------------------------------
/static_in_env/img/flags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/flags.png
--------------------------------------------------------------------------------
/static_in_env/img/sample.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/sample.jpg
--------------------------------------------------------------------------------
/templates/account/email/email_confirmation_signup_message.txt:
--------------------------------------------------------------------------------
1 | {% include "account/email/email_confirmation_message.txt" %}
2 |
--------------------------------------------------------------------------------
/templates/account/email/email_confirmation_signup_subject.txt:
--------------------------------------------------------------------------------
1 | {% include "account/email/email_confirmation_subject.txt" %}
2 |
--------------------------------------------------------------------------------
/templates/account/messages/password_changed.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}Password Changed.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/templates/socialaccount/messages/account_connected_updated.txt:
--------------------------------------------------------------------------------
1 | {% extends "socialaccount/messages/account_connected.txt" %}
2 |
--------------------------------------------------------------------------------
/templates/account/messages/password_set.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}Password successfully set.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/static/img/lightbox/preloader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/lightbox/preloader.gif
--------------------------------------------------------------------------------
/static_in_env/img/overlays/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/01.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/02.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/03.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/04.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/05.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/06.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/07.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/08.png
--------------------------------------------------------------------------------
/static_in_env/img/overlays/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/overlays/09.png
--------------------------------------------------------------------------------
/static_in_env/img/svg/flags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/svg/flags.png
--------------------------------------------------------------------------------
/templates/account/messages/email_confirmed.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}You have confirmed {{email}}.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/templates/account/messages/email_deleted.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}Removed e-mail address {{email}}.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/templates/account/messages/primary_email_set.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}Primary e-mail address set.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Bold.eot
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Bold.woff
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Light.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Light.eot
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Light.ttf
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Thin.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Thin.eot
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Thin.ttf
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Thin.woff
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Bold.woff2
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Light.woff
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Light.woff2
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Medium.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Medium.eot
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Medium.ttf
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Medium.woff
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Medium.woff2
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Regular.eot
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Regular.woff
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Thin.woff2
--------------------------------------------------------------------------------
/static/img/lightbox/default-skin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/img/lightbox/default-skin.png
--------------------------------------------------------------------------------
/static/font/roboto/Roboto-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static/font/roboto/Roboto-Regular.woff2
--------------------------------------------------------------------------------
/static_in_env/img/lightbox/preloader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/lightbox/preloader.gif
--------------------------------------------------------------------------------
/templates/socialaccount/messages/account_connected.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}The social account has been connected.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/templates/tests/test_403_csrf.html:
--------------------------------------------------------------------------------
1 | {% load socialaccount %}
2 | Sign In
3 |
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Bold.eot
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Bold.woff
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Bold.woff2
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Light.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Light.eot
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Light.ttf
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Light.woff
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Medium.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Medium.eot
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Medium.ttf
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Thin.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Thin.eot
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Thin.ttf
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Thin.woff
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Thin.woff2
--------------------------------------------------------------------------------
/static_in_env/img/lightbox/default-skin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/img/lightbox/default-skin.png
--------------------------------------------------------------------------------
/templates/socialaccount/messages/account_disconnected.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}The social account has been disconnected.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Light.woff2
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Medium.woff
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Medium.woff2
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Regular.eot
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Regular.woff
--------------------------------------------------------------------------------
/templates/account/messages/unverified_primary_email.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}Your primary e-mail address must be verified.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/static_in_env/font/roboto/Roboto-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nabilmoiun/E-commerce-Website-Django/HEAD/static_in_env/font/roboto/Roboto-Regular.woff2
--------------------------------------------------------------------------------
/templates/account/messages/cannot_delete_primary_email.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/templates/socialaccount/messages/account_connected_other.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% blocktrans %}The social account is already connected to a different account.{% endblocktrans %}
3 |
--------------------------------------------------------------------------------
/.env:
--------------------------------------------------------------------------------
1 | SECRET_KEY=x_k4rgpyh95z#6pz6d9waw@69#c@(!1e+g*mi50u!i#wt7n20d
2 | STRIPE_SECRET_KEY=your-stripe-secret-key
3 | STRIPE_PUBLISHABLE_KEY=your-stripe-publishable-key
4 | DEBUG=FALSE
5 |
--------------------------------------------------------------------------------
/templates/account/email/password_reset_key_subject.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% autoescape off %}
3 | {% blocktrans %}Password Reset E-mail{% endblocktrans %}
4 | {% endautoescape %}
5 |
--------------------------------------------------------------------------------
/static/scss/addons/_directives.scss:
--------------------------------------------------------------------------------
1 | // Optional directives
2 | @each $key in (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100) {
3 | .opacity-#{$key} {
4 | opacity: $key * .01;
5 | }
6 | }
--------------------------------------------------------------------------------
/static_in_env/scss/addons/_directives.scss:
--------------------------------------------------------------------------------
1 | // Optional directives
2 | @each $key in (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100) {
3 | .opacity-#{$key} {
4 | opacity: $key * .01;
5 | }
6 | }
--------------------------------------------------------------------------------
/templates/account/email/email_confirmation_subject.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% autoescape off %}
3 | {% blocktrans %}Please Confirm Your E-mail Address{% endblocktrans %}
4 | {% endautoescape %}
5 |
--------------------------------------------------------------------------------
/core/templatetags/pagination.py:
--------------------------------------------------------------------------------
1 | from django import template
2 |
3 | register = template.Library()
4 |
5 |
6 | @register.filter(name='paginate')
7 | def paginate(pages):
8 | return range(1, pages + 1)
9 |
--------------------------------------------------------------------------------
/templates/ssl_payment.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% block content %}
3 |
4 |
5 |
SSL Payment
6 |
7 |
8 | {% endblock content %}
--------------------------------------------------------------------------------
/djangoecommerce/wsgi.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from django.core.wsgi import get_wsgi_application
4 |
5 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoecommerce.settings')
6 |
7 | application = get_wsgi_application()
8 |
--------------------------------------------------------------------------------
/static/scss/free/_dropdowns.scss:
--------------------------------------------------------------------------------
1 | // Dropdowns
2 | .dropdown {
3 | .dropdown-menu {
4 | .dropdown-item {
5 | &:active {
6 | background-color: $grey-darken-1;
7 | }
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_dropdowns.scss:
--------------------------------------------------------------------------------
1 | // Dropdowns
2 | .dropdown {
3 | .dropdown-menu {
4 | .dropdown-item {
5 | &:active {
6 | background-color: $grey-darken-1;
7 | }
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | Django==5.0.1
2 | django-allauth==0.60.1
3 | django-countries==7.5.1
4 | django-crispy-forms==2.1
5 | crispy-bootstrap4==2023.1
6 | pillow==10.2.0
7 | requests==2.31.0
8 | stripe==7.13.0
9 | python-decouple==3.8
10 |
--------------------------------------------------------------------------------
/static/scss/free/_loader.scss:
--------------------------------------------------------------------------------
1 | // Loader / Spinner
2 | .fast {
3 | &.spinner-border {
4 | animation: spinner-border .4s linear infinite;
5 | }
6 | &.spinner-grow {
7 | animation: spinner-grow .4s linear infinite
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/static/img/svg/arrow_left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/static/img/svg/arrow_right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/static_in_env/img/svg/arrow_left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/static_in_env/img/svg/arrow_right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_loader.scss:
--------------------------------------------------------------------------------
1 | // Loader / Spinner
2 | .fast {
3 | &.spinner-border {
4 | animation: spinner-border .4s linear infinite;
5 | }
6 | &.spinner-grow {
7 | animation: spinner-grow .4s linear infinite
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/static/css/style.min.css:
--------------------------------------------------------------------------------
1 | .view,body,html{height:100%}.carousel{height:50%}.carousel .carousel-inner,.carousel .carousel-inner .active,.carousel .carousel-inner .carousel-item{height:100%}@media (max-width:776px){.carousel{height:100%}}.page-footer{background-color:#929FBA}
--------------------------------------------------------------------------------
/static/scss/free/modules/animations-extended/animations-extended.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * MDBootstrap Animations Extended
3 | * Learn more: https://mdbootstrap.com/docs/jquery/css/animations/
4 | * About MDBootstrap: https://mdbootstrap.com/
5 | */
6 |
7 | @import "module";
8 |
--------------------------------------------------------------------------------
/templates/account/snippets/already_logged_in.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% load account %}
3 |
4 | {% user_display user as user_display %}
5 | {% trans "Note" %}: {% blocktrans %}you are already logged in as {{ user_display }}.{% endblocktrans %}
6 |
--------------------------------------------------------------------------------
/static_in_env/css/style.min.css:
--------------------------------------------------------------------------------
1 | .view,body,html{height:100%}.carousel{height:50%}.carousel .carousel-inner,.carousel .carousel-inner .active,.carousel .carousel-inner .carousel-item{height:100%}@media (max-width:776px){.carousel{height:100%}}.page-footer{background-color:#929FBA}
--------------------------------------------------------------------------------
/static_in_env/scss/free/modules/animations-extended/animations-extended.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * MDBootstrap Animations Extended
3 | * Learn more: https://mdbootstrap.com/docs/jquery/css/animations/
4 | * About MDBootstrap: https://mdbootstrap.com/
5 | */
6 |
7 | @import "module";
8 |
--------------------------------------------------------------------------------
/static/css/addons/directives.min.css:
--------------------------------------------------------------------------------
1 | .opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}
--------------------------------------------------------------------------------
/static_in_env/css/addons/directives.min.css:
--------------------------------------------------------------------------------
1 | .opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}
--------------------------------------------------------------------------------
/templates/tests/design_form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Put the form here
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/static/css/addons/rating.min.css:
--------------------------------------------------------------------------------
1 | .mdb-rating .rate-popover{color:grey}.mdb-rating .live{color:#000}.mdb-rating .oneStar{color:#44370f}.mdb-rating .twoStars{color:#96781e}.mdb-rating .threeStars{color:#e2b52e}.mdb-rating .fourStars{color:#f1ba12}.mdb-rating .fiveStars{color:#f3cb06}.mdb-rating .amber-text{color:#ffc107!important}
--------------------------------------------------------------------------------
/static_in_env/css/addons/rating.min.css:
--------------------------------------------------------------------------------
1 | .mdb-rating .rate-popover{color:grey}.mdb-rating .live{color:#000}.mdb-rating .oneStar{color:#44370f}.mdb-rating .twoStars{color:#96781e}.mdb-rating .threeStars{color:#e2b52e}.mdb-rating .fourStars{color:#f1ba12}.mdb-rating .fiveStars{color:#f3cb06}.mdb-rating .amber-text{color:#ffc107!important}
--------------------------------------------------------------------------------
/templates/account/account_inactive.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Account Inactive" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Account Inactive" %}
9 |
10 | {% trans "This account is inactive." %}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/templates/account/password_reset_from_key_done.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% block head_title %}{% trans "Change Password" %}{% endblock %}
5 |
6 | {% block content %}
7 | {% trans "Change Password" %}
8 | {% trans 'Your password is now changed.' %}
9 | {% endblock %}
10 |
--------------------------------------------------------------------------------
/templates/account/signup_closed.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Sign Up Closed" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Sign Up Closed" %}
9 |
10 | {% trans "We are sorry, but the sign up is currently closed." %}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/core/templatetags/cart_template_tags.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | from core.models import Cart
3 |
4 | register = template.Library()
5 |
6 |
7 | @register.filter
8 | def cart_item_count(user):
9 | if user.is_authenticated:
10 | qs = Cart.objects.filter(user=user, ordered=False)
11 | if qs.exists():
12 | return qs[0].items.count()
13 | else:
14 | return 0
15 |
--------------------------------------------------------------------------------
/static/scss/free/_footers.scss:
--------------------------------------------------------------------------------
1 | // Footers
2 | footer {
3 | &.page-footer {
4 | bottom: 0;
5 | color: $white-base;
6 | .container-fluid {
7 | width: auto;
8 | }
9 | .footer-copyright {
10 | overflow: hidden;
11 | background-color: $footer-copyright-bg-color;
12 | color: $footer-copyright-color;
13 | }
14 | a {
15 | color: $white-base;
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/templates/socialaccount/authentication_error.html:
--------------------------------------------------------------------------------
1 | {% extends "socialaccount/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Social Network Login Failure" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Social Network Login Failure" %}
9 |
10 | {% trans "An error occurred while attempting to login via your social network account." %}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/static/scss/free/_badges.scss:
--------------------------------------------------------------------------------
1 | // Badges
2 | .badge {
3 | box-shadow: $z-depth-1;
4 | border-radius: $border-radius-base;
5 | color: $white !important;
6 | }
7 | .badge-pill {
8 | border-radius: $badge-pill-border-radius;
9 | padding-right: $badge-pill-padding-x;
10 | padding-left: $badge-pill-padding-x;
11 | }
12 | @each $name, $color in $basic-mdb-colors {
13 | @include make-badge($name, $color);
14 | }
15 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_footers.scss:
--------------------------------------------------------------------------------
1 | // Footers
2 | footer {
3 | &.page-footer {
4 | bottom: 0;
5 | color: $white-base;
6 | .container-fluid {
7 | width: auto;
8 | }
9 | .footer-copyright {
10 | overflow: hidden;
11 | background-color: $footer-copyright-bg-color;
12 | color: $footer-copyright-color;
13 | }
14 | a {
15 | color: $white-base;
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/static_in_env/scss/free/_badges.scss:
--------------------------------------------------------------------------------
1 | // Badges
2 | .badge {
3 | box-shadow: $z-depth-1;
4 | border-radius: $border-radius-base;
5 | color: $white !important;
6 | }
7 | .badge-pill {
8 | border-radius: $badge-pill-border-radius;
9 | padding-right: $badge-pill-padding-x;
10 | padding-left: $badge-pill-padding-x;
11 | }
12 | @each $name, $color in $basic-mdb-colors {
13 | @include make-badge($name, $color);
14 | }
15 |
--------------------------------------------------------------------------------
/templates/openid/login.html:
--------------------------------------------------------------------------------
1 | {% extends "openid/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}OpenID Sign In{% endblock %}
6 |
7 | {% block content %}
8 |
9 | {% trans 'OpenID Sign In' %}
10 |
11 |
12 |
17 |
18 | {% endblock %}
19 |
--------------------------------------------------------------------------------
/core/migrations/0005_auto_20200626_1903.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.0.7 on 2020-06-26 13:03
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0004_item_description'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='item',
15 | name='slug',
16 | field=models.SlugField(unique=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/static/css/addons/rating.css:
--------------------------------------------------------------------------------
1 | .mdb-rating .rate-popover {
2 | color: grey; }
3 |
4 | .mdb-rating .live {
5 | color: black; }
6 |
7 | .mdb-rating .oneStar {
8 | color: #44370f; }
9 |
10 | .mdb-rating .twoStars {
11 | color: #96781e; }
12 |
13 | .mdb-rating .threeStars {
14 | color: #e2b52e; }
15 |
16 | .mdb-rating .fourStars {
17 | color: #f1ba12; }
18 |
19 | .mdb-rating .fiveStars {
20 | color: #f3cb06; }
21 |
22 | .mdb-rating .amber-text {
23 | color: #ffc107 !important; }
--------------------------------------------------------------------------------
/static/js/modules/scrolling-navbar.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | (function ($) {
4 | var SCROLLING_NAVBAR_OFFSET_TOP = 50;
5 | $(window).on('scroll', function () {
6 | var $navbar = $('.navbar');
7 |
8 | if ($navbar.length) {
9 | if ($navbar.offset().top > SCROLLING_NAVBAR_OFFSET_TOP) {
10 | $('.scrolling-navbar').addClass('top-nav-collapse');
11 | } else {
12 | $('.scrolling-navbar').removeClass('top-nav-collapse');
13 | }
14 | }
15 | });
16 | })(jQuery);
--------------------------------------------------------------------------------
/static_in_env/css/addons/rating.css:
--------------------------------------------------------------------------------
1 | .mdb-rating .rate-popover {
2 | color: grey; }
3 |
4 | .mdb-rating .live {
5 | color: black; }
6 |
7 | .mdb-rating .oneStar {
8 | color: #44370f; }
9 |
10 | .mdb-rating .twoStars {
11 | color: #96781e; }
12 |
13 | .mdb-rating .threeStars {
14 | color: #e2b52e; }
15 |
16 | .mdb-rating .fourStars {
17 | color: #f1ba12; }
18 |
19 | .mdb-rating .fiveStars {
20 | color: #f3cb06; }
21 |
22 | .mdb-rating .amber-text {
23 | color: #ffc107 !important; }
--------------------------------------------------------------------------------
/static_in_env/js/modules/scrolling-navbar.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | (function ($) {
4 | var SCROLLING_NAVBAR_OFFSET_TOP = 50;
5 | $(window).on('scroll', function () {
6 | var $navbar = $('.navbar');
7 |
8 | if ($navbar.length) {
9 | if ($navbar.offset().top > SCROLLING_NAVBAR_OFFSET_TOP) {
10 | $('.scrolling-navbar').addClass('top-nav-collapse');
11 | } else {
12 | $('.scrolling-navbar').removeClass('top-nav-collapse');
13 | }
14 | }
15 | });
16 | })(jQuery);
--------------------------------------------------------------------------------
/templates/account/password_set.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Set Password" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Set Password" %}
9 |
10 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/core/migrations/0003_auto_20200625_2024.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.0.7 on 2020-06-25 14:24
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0002_auto_20200625_2010'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='userprofile',
15 | name='on_click_purchasing',
16 | field=models.BooleanField(default=False),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/static/scss/addons/_rating.scss:
--------------------------------------------------------------------------------
1 | .mdb-rating {
2 |
3 | .rate-popover {
4 | color: #808080;
5 | }
6 |
7 | .live {
8 | color: #000;
9 | }
10 |
11 | .oneStar {
12 | color: #44370f;
13 | }
14 |
15 | .twoStars {
16 | color: #96781e;
17 | }
18 |
19 | .threeStars {
20 | color: #e2b52e;
21 | }
22 |
23 | .fourStars {
24 | color: #f1ba12;
25 | }
26 |
27 | .fiveStars {
28 | color: #f3cb06;
29 | }
30 |
31 | .amber-text {
32 | color: #ffc107;
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/templates/account/verification_sent.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Verify Your E-mail Address" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Verify Your E-mail Address" %}
9 |
10 | {% blocktrans %}We have sent an e-mail to you for verification. Follow the link provided to finalize the signup process. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}
11 |
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/static/css/addons/directives.css:
--------------------------------------------------------------------------------
1 | .opacity-0 {
2 | opacity: 0; }
3 |
4 | .opacity-10 {
5 | opacity: 0.1; }
6 |
7 | .opacity-20 {
8 | opacity: 0.2; }
9 |
10 | .opacity-30 {
11 | opacity: 0.3; }
12 |
13 | .opacity-40 {
14 | opacity: 0.4; }
15 |
16 | .opacity-50 {
17 | opacity: 0.5; }
18 |
19 | .opacity-60 {
20 | opacity: 0.6; }
21 |
22 | .opacity-70 {
23 | opacity: 0.7; }
24 |
25 | .opacity-80 {
26 | opacity: 0.8; }
27 |
28 | .opacity-90 {
29 | opacity: 0.9; }
30 |
31 | .opacity-100 {
32 | opacity: 1; }
--------------------------------------------------------------------------------
/static_in_env/scss/addons/_rating.scss:
--------------------------------------------------------------------------------
1 | .mdb-rating {
2 |
3 | .rate-popover {
4 | color: #808080;
5 | }
6 |
7 | .live {
8 | color: #000;
9 | }
10 |
11 | .oneStar {
12 | color: #44370f;
13 | }
14 |
15 | .twoStars {
16 | color: #96781e;
17 | }
18 |
19 | .threeStars {
20 | color: #e2b52e;
21 | }
22 |
23 | .fourStars {
24 | color: #f1ba12;
25 | }
26 |
27 | .fiveStars {
28 | color: #f3cb06;
29 | }
30 |
31 | .amber-text {
32 | color: #ffc107;
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/static_in_env/css/addons/directives.css:
--------------------------------------------------------------------------------
1 | .opacity-0 {
2 | opacity: 0; }
3 |
4 | .opacity-10 {
5 | opacity: 0.1; }
6 |
7 | .opacity-20 {
8 | opacity: 0.2; }
9 |
10 | .opacity-30 {
11 | opacity: 0.3; }
12 |
13 | .opacity-40 {
14 | opacity: 0.4; }
15 |
16 | .opacity-50 {
17 | opacity: 0.5; }
18 |
19 | .opacity-60 {
20 | opacity: 0.6; }
21 |
22 | .opacity-70 {
23 | opacity: 0.7; }
24 |
25 | .opacity-80 {
26 | opacity: 0.8; }
27 |
28 | .opacity-90 {
29 | opacity: 0.9; }
30 |
31 | .opacity-100 {
32 | opacity: 1; }
--------------------------------------------------------------------------------
/static/scss/free/_input-group.scss:
--------------------------------------------------------------------------------
1 | // Input group
2 | .md-form {
3 | &.input-group {
4 | label {
5 | top: 0;
6 | margin-bottom: 0;
7 | }
8 | .input-group-text {
9 | background-color: $input-group-text-bgc;
10 | &.md-addon {
11 | border: none;
12 | background-color: transparent;
13 | font-weight: 500;
14 | }
15 | }
16 | .form-control {
17 | margin: 0;
18 | padding: $input-group-form-control-py $input-group-form-control-px;
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/templates/any_form.html:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_input-group.scss:
--------------------------------------------------------------------------------
1 | // Input group
2 | .md-form {
3 | &.input-group {
4 | label {
5 | top: 0;
6 | margin-bottom: 0;
7 | }
8 | .input-group-text {
9 | background-color: $input-group-text-bgc;
10 | &.md-addon {
11 | border: none;
12 | background-color: transparent;
13 | font-weight: 500;
14 | }
15 | }
16 | .form-control {
17 | margin: 0;
18 | padding: $input-group-form-control-py $input-group-form-control-px;
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/core/migrations/0004_item_description.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.0.7 on 2020-06-26 10:03
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0003_auto_20200625_2024'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='item',
15 | name='description',
16 | field=models.TextField(default='description'),
17 | preserve_default=False,
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/templates/socialaccount/login_cancelled.html:
--------------------------------------------------------------------------------
1 | {% extends "socialaccount/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Login Cancelled" %}{% endblock %}
6 |
7 | {% block content %}
8 |
9 | {% trans "Login Cancelled" %}
10 |
11 | {% url 'account_login' as login_url %}
12 |
13 | {% blocktrans %}You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to sign in .{% endblocktrans %}
14 |
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/templates/account/password_reset_done.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% load account %}
5 |
6 | {% block head_title %}{% trans "Password Reset" %}{% endblock %}
7 |
8 | {% block content %}
9 | {% trans "Password Reset" %}
10 |
11 | {% if user.is_authenticated %}
12 | {% include "account/snippets/already_logged_in.html" %}
13 | {% endif %}
14 |
15 | {% blocktrans %}We have sent you an e-mail. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/djangoecommerce/urls.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from django.conf import settings
3 | from django.conf.urls.static import static
4 | from django.urls import path, include
5 |
6 | from core import views
7 |
8 | urlpatterns = [
9 | path('admin/', admin.site.urls),
10 | path('accounts/', include('allauth.urls')),
11 | path('', include('core.urls')),
12 | ]
13 |
14 | if settings.DEBUG:
15 | urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
16 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
17 |
--------------------------------------------------------------------------------
/templates/account/logout.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Sign Out" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Sign Out" %}
9 |
10 | {% trans 'Are you sure you want to sign out?' %}
11 |
12 |
19 |
20 |
21 | {% endblock %}
22 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 |
4 |
5 | def main():
6 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoecommerce.settings')
7 | try:
8 | from django.core.management import execute_from_command_line
9 | except ImportError as exc:
10 | raise ImportError(
11 | "Couldn't import Django. Are you sure it's installed and "
12 | "available on your PYTHONPATH environment variable? Did you "
13 | "forget to activate a virtual environment?"
14 | ) from exc
15 | execute_from_command_line(sys.argv)
16 |
17 |
18 | if __name__ == '__main__':
19 | main()
20 |
--------------------------------------------------------------------------------
/templates/script.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/templates/account/email/email_confirmation_message.txt:
--------------------------------------------------------------------------------
1 | {% load account %}{% user_display user as user_display %}{% load i18n %}{% autoescape off %}{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Hello from {{ site_name }}!
2 |
3 | You're receiving this e-mail because user {{ user_display }} has given yours as an e-mail address to connect their account.
4 |
5 | To confirm this is correct, go to {{ activate_url }}
6 | {% endblocktrans %}
7 | {% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Thank you from {{ site_name }}!
8 | {{ site_domain }}{% endblocktrans %}
9 | {% endautoescape %}
10 |
--------------------------------------------------------------------------------
/static/css/style.css:
--------------------------------------------------------------------------------
1 | /* Required height of parents of the Half Page Carousel for proper displaying carousel itself */
2 | html,
3 | body,
4 | .view {
5 | height: 100%; }
6 |
7 | /* Half Page Carousel itself*/
8 | .carousel {
9 | height: 50%; }
10 | .carousel .carousel-inner {
11 | height: 100%; }
12 | .carousel .carousel-inner .carousel-item,
13 | .carousel .carousel-inner .active {
14 | height: 100%; }
15 |
16 | /* Adjustment for mobile devices*/
17 | @media (max-width: 776px) {
18 | .carousel {
19 | height: 100%; } }
20 |
21 | /* Footer color for sake of consistency with Navbar */
22 | .page-footer {
23 | background-color: #929FBA; }
24 |
--------------------------------------------------------------------------------
/static/js/modules/default-file-input.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | (function ($) {
4 | $('.input-default-wrapper').on('change', '.input-default-js', function (e) {
5 |
6 | var $this = $(e.target),
7 | $label = $this.next('label'),
8 | $files = $this[0].files;
9 | var fileName = '';
10 |
11 | if ($files && $files.length > 1) {
12 | fileName = ($this.attr('data-multiple-target') || '').replace('{target}', $files.length);
13 | } else if (e.target.value) {
14 | fileName = e.target.value.split('\\').pop();
15 | }
16 | fileName ? $label.find('.span-choose-file').html(fileName) : $label.html($label.html());
17 | });
18 | })(jQuery);
--------------------------------------------------------------------------------
/static_in_env/css/style.css:
--------------------------------------------------------------------------------
1 | /* Required height of parents of the Half Page Carousel for proper displaying carousel itself */
2 | html,
3 | body,
4 | .view {
5 | height: 100%; }
6 |
7 | /* Half Page Carousel itself*/
8 | .carousel {
9 | height: 50%; }
10 | .carousel .carousel-inner {
11 | height: 100%; }
12 | .carousel .carousel-inner .carousel-item,
13 | .carousel .carousel-inner .active {
14 | height: 100%; }
15 |
16 | /* Adjustment for mobile devices*/
17 | @media (max-width: 776px) {
18 | .carousel {
19 | height: 100%; } }
20 |
21 | /* Footer color for sake of consistency with Navbar */
22 | .page-footer {
23 | background-color: #929FBA; }
24 |
--------------------------------------------------------------------------------
/static_in_env/js/modules/default-file-input.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | (function ($) {
4 | $('.input-default-wrapper').on('change', '.input-default-js', function (e) {
5 |
6 | var $this = $(e.target),
7 | $label = $this.next('label'),
8 | $files = $this[0].files;
9 | var fileName = '';
10 |
11 | if ($files && $files.length > 1) {
12 | fileName = ($this.attr('data-multiple-target') || '').replace('{target}', $files.length);
13 | } else if (e.target.value) {
14 | fileName = e.target.value.split('\\').pop();
15 | }
16 | fileName ? $label.find('.span-choose-file').html(fileName) : $label.html($label.html());
17 | });
18 | })(jQuery);
--------------------------------------------------------------------------------
/templates/request_refund.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% load crispy_forms_tags %}
3 | {% block content %}
4 |
5 |
20 |
21 |
22 | {% endblock %}
--------------------------------------------------------------------------------
/static/scss/style.scss:
--------------------------------------------------------------------------------
1 | // Your custom styles
2 |
3 | /* Required height of parents of the Half Page Carousel for proper displaying carousel itself */
4 | html,
5 | body,
6 | .view {
7 | height: 100%; }
8 |
9 | /* Half Page Carousel itself*/
10 | .carousel {
11 | height: 50%; }
12 | .carousel .carousel-inner {
13 | height: 100%; }
14 | .carousel .carousel-inner .carousel-item,
15 | .carousel .carousel-inner .active {
16 | height: 100%; }
17 |
18 | /* Adjustment for mobile devices*/
19 | @media (max-width: 776px) {
20 | .carousel {
21 | height: 100%; } }
22 |
23 | /* Footer color for sake of consistency with Navbar */
24 | .page-footer {
25 | background-color: #929FBA; }
26 |
--------------------------------------------------------------------------------
/static_in_env/scss/style.scss:
--------------------------------------------------------------------------------
1 | // Your custom styles
2 |
3 | /* Required height of parents of the Half Page Carousel for proper displaying carousel itself */
4 | html,
5 | body,
6 | .view {
7 | height: 100%; }
8 |
9 | /* Half Page Carousel itself*/
10 | .carousel {
11 | height: 50%; }
12 | .carousel .carousel-inner {
13 | height: 100%; }
14 | .carousel .carousel-inner .carousel-item,
15 | .carousel .carousel-inner .active {
16 | height: 100%; }
17 |
18 | /* Adjustment for mobile devices*/
19 | @media (max-width: 776px) {
20 | .carousel {
21 | height: 100%; } }
22 |
23 | /* Footer color for sake of consistency with Navbar */
24 | .page-footer {
25 | background-color: #929FBA; }
26 |
--------------------------------------------------------------------------------
/core/migrations/0007_auto_20201206_1235.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.0.7 on 2020-12-06 06:35
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0006_comment'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='payment',
15 | name='ssl_charge_id',
16 | field=models.CharField(blank=True, max_length=50, null=True),
17 | ),
18 | migrations.AlterField(
19 | model_name='payment',
20 | name='stripe_charge_id',
21 | field=models.CharField(blank=True, max_length=50, null=True),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/static/scss/free/_list-group.scss:
--------------------------------------------------------------------------------
1 | // List group
2 | .media {
3 | .media-left {
4 | padding: $list-group-padding;
5 |
6 | img {
7 | box-shadow: $z-depth-1;
8 | }
9 | }
10 | }
11 |
12 | .list-group {
13 | .list-group-item {
14 | &:first-child {
15 | border-top-left-radius: $border-radius-base;
16 | border-top-right-radius: $border-radius-base;
17 | }
18 |
19 | &:last-child {
20 | border-bottom-left-radius: $border-radius-base;
21 | border-bottom-right-radius: $border-radius-base;
22 | }
23 | }
24 |
25 | a,
26 | button {
27 | transition: $list-group-transition;
28 |
29 | &:hover {
30 | transition: $list-group-transition;
31 | }
32 | }
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_list-group.scss:
--------------------------------------------------------------------------------
1 | // List group
2 | .media {
3 | .media-left {
4 | padding: $list-group-padding;
5 |
6 | img {
7 | box-shadow: $z-depth-1;
8 | }
9 | }
10 | }
11 |
12 | .list-group {
13 | .list-group-item {
14 | &:first-child {
15 | border-top-left-radius: $border-radius-base;
16 | border-top-right-radius: $border-radius-base;
17 | }
18 |
19 | &:last-child {
20 | border-bottom-left-radius: $border-radius-base;
21 | border-bottom-right-radius: $border-radius-base;
22 | }
23 | }
24 |
25 | a,
26 | button {
27 | transition: $list-group-transition;
28 |
29 | &:hover {
30 | transition: $list-group-transition;
31 | }
32 | }
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/static/scss/free/_cards.scss:
--------------------------------------------------------------------------------
1 | // Cards
2 | .card {
3 | box-shadow: $z-depth-1;
4 | border: 0;
5 | font-weight: 400;
6 | &[class*="border"] {
7 | border: 1px solid $grey-base;
8 | box-shadow: none;
9 | }
10 | .card-body {
11 | h1, h2, h3, h4, h5, h6 {
12 | font-weight: 400;
13 | }
14 | .card-title {
15 | a {
16 | transition: $md-card-link-transition;
17 | &:hover {
18 | transition: $md-card-link-transition;
19 | }
20 | }
21 | }
22 | .card-text {
23 | color: $md-card-text-color;
24 | font-size: $md-card-font-size;
25 | font-weight: 400;
26 | }
27 | }
28 | .md-form {
29 | label {
30 | font-weight: 300;
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_cards.scss:
--------------------------------------------------------------------------------
1 | // Cards
2 | .card {
3 | box-shadow: $z-depth-1;
4 | border: 0;
5 | font-weight: 400;
6 | &[class*="border"] {
7 | border: 1px solid $grey-base;
8 | box-shadow: none;
9 | }
10 | .card-body {
11 | h1, h2, h3, h4, h5, h6 {
12 | font-weight: 400;
13 | }
14 | .card-title {
15 | a {
16 | transition: $md-card-link-transition;
17 | &:hover {
18 | transition: $md-card-link-transition;
19 | }
20 | }
21 | }
22 | .card-text {
23 | color: $md-card-text-color;
24 | font-size: $md-card-font-size;
25 | font-weight: 400;
26 | }
27 | }
28 | .md-form {
29 | label {
30 | font-weight: 300;
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/templates/account/email/password_reset_key_message.txt:
--------------------------------------------------------------------------------
1 | {% load i18n %}{% autoescape off %}{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Hello from {{ site_name }}!
2 |
3 | You're receiving this e-mail because you or someone else has requested a password for your user account.
4 | It can be safely ignored if you did not request a password reset. Click the link below to reset your password.{% endblocktrans %}
5 |
6 | {{ password_reset_url }}
7 |
8 | {% if username %}{% blocktrans %}In case you forgot, your username is {{ username }}.{% endblocktrans %}
9 |
10 | {% endif %}{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Thank you for using {{ site_name }}!
11 | {{ site_domain }}{% endblocktrans %}
12 | {% endautoescape %}
13 |
--------------------------------------------------------------------------------
/templates/account/password_change.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Change Password" %}{% endblock %}
6 |
7 | {% block content %}
8 |
9 |
10 |
11 |
12 |
13 |
{% trans "Change Password" %}
14 |
15 |
20 |
21 |
22 |
23 |
24 |
25 | {% endblock %}
--------------------------------------------------------------------------------
/static/js/modules/enhanced-modals.js:
--------------------------------------------------------------------------------
1 | /*
2 | Enhanced Bootstrap Modals
3 | https://mdbootstrap.com
4 | office@mdbootstrap.com
5 | */
6 |
7 | (function($){
8 | $('body').on('shown.bs.modal', '.modal', function() {
9 | if(!$('.modal-backdrop').length) {
10 |
11 | $modal_dialog = $(this).children('.modal-dialog')
12 |
13 | if($modal_dialog.hasClass('modal-side')) {
14 | $(this).addClass('modal-scrolling');
15 | $('body').addClass('scrollable');
16 | }
17 |
18 | if($modal_dialog.hasClass('modal-frame')) {
19 | $(this).addClass('modal-content-clickable');
20 | $('body').addClass('scrollable');
21 | }
22 | }
23 | });
24 | $('body').on('hidden.bs.modal', '.modal', function() {
25 | $('body').removeClass('scrollable');
26 | });
27 | })(jQuery);
28 |
--------------------------------------------------------------------------------
/static_in_env/js/modules/enhanced-modals.js:
--------------------------------------------------------------------------------
1 | /*
2 | Enhanced Bootstrap Modals
3 | https://mdbootstrap.com
4 | office@mdbootstrap.com
5 | */
6 |
7 | (function($){
8 | $('body').on('shown.bs.modal', '.modal', function() {
9 | if(!$('.modal-backdrop').length) {
10 |
11 | $modal_dialog = $(this).children('.modal-dialog')
12 |
13 | if($modal_dialog.hasClass('modal-side')) {
14 | $(this).addClass('modal-scrolling');
15 | $('body').addClass('scrollable');
16 | }
17 |
18 | if($modal_dialog.hasClass('modal-frame')) {
19 | $(this).addClass('modal-content-clickable');
20 | $('body').addClass('scrollable');
21 | }
22 | }
23 | });
24 | $('body').on('hidden.bs.modal', '.modal', function() {
25 | $('body').removeClass('scrollable');
26 | });
27 | })(jQuery);
28 |
--------------------------------------------------------------------------------
/templates/socialaccount/snippets/provider_list.html:
--------------------------------------------------------------------------------
1 | {% load socialaccount %}
2 |
3 | {% get_providers as socialaccount_providers %}
4 |
5 | {% for provider in socialaccount_providers %}
6 | {% if provider.id == "openid" %}
7 | {% for brand in provider.get_brands %}
8 |
9 | {{brand.name}}
13 |
14 | {% endfor %}
15 | {% endif %}
16 |
17 | Sign in With {{provider.name}}
20 |
21 | {% endfor %}
22 |
--------------------------------------------------------------------------------
/static/scss/_custom-skin.scss:
--------------------------------------------------------------------------------
1 | // Your custom skin
2 | // Skins
3 | $skins: () !default;
4 | $skins: map-merge((
5 | "test": (
6 | "skin-primary-color": #fff,
7 | "skin-navbar": #fff,
8 | "skin-footer-color": #fff,
9 | "skin-flat": #fff,
10 | "skin-accent": #fff,
11 | "skin-sidenav-item": #fff,
12 | "skin-sidenav-item-hover": #fff,
13 | "skin-gradient-start": #fff,
14 | "skin-gradient-end": #fff,
15 | "skin-mask-slight": #fff,
16 | "skin-mask-light": #fff,
17 | "skin-mask-strong": #fff,
18 | "skin-sn-child": #fff,
19 | "skin-btn-primary": #fff,
20 | "skin-btn-secondary": #fff,
21 | "skin-btn-default": #fff,
22 | "skin-text": #fff
23 | )
24 | ), $skins);
25 |
26 |
--------------------------------------------------------------------------------
/static_in_env/scss/_custom-skin.scss:
--------------------------------------------------------------------------------
1 | // Your custom skin
2 | // Skins
3 | $skins: () !default;
4 | $skins: map-merge((
5 | "test": (
6 | "skin-primary-color": #fff,
7 | "skin-navbar": #fff,
8 | "skin-footer-color": #fff,
9 | "skin-flat": #fff,
10 | "skin-accent": #fff,
11 | "skin-sidenav-item": #fff,
12 | "skin-sidenav-item-hover": #fff,
13 | "skin-gradient-start": #fff,
14 | "skin-gradient-end": #fff,
15 | "skin-mask-slight": #fff,
16 | "skin-mask-light": #fff,
17 | "skin-mask-strong": #fff,
18 | "skin-sn-child": #fff,
19 | "skin-btn-primary": #fff,
20 | "skin-btn-secondary": #fff,
21 | "skin-btn-default": #fff,
22 | "skin-text": #fff
23 | )
24 | ), $skins);
25 |
26 |
--------------------------------------------------------------------------------
/static/scss/addons/_hierarchical-display.scss:
--------------------------------------------------------------------------------
1 | .zmd-hierarchical-display {
2 | visibility: hidden;
3 | &.in {
4 | visibility: visible;
5 | }
6 | }
7 | .zmd-hierarchical-displaying {
8 | visibility: visible;
9 | }
10 |
11 | .animation {
12 | animation-duration: 1s;
13 | animation-fill-mode: both;
14 | }
15 |
16 | .animation.zoomedIn,
17 | .animation.zoomedOut {
18 | animation-timing-function: cubic-bezier(.55, 0, .1, 1); // "Swift Out" easing curve
19 | }
20 |
21 | @keyframes zoomedIn {
22 | from {
23 | transform: scale(0);
24 | }
25 | to {
26 | transform: scale(1);
27 | }
28 | }
29 |
30 | @keyframes zoomedOut {
31 | from {
32 | transform: scale(1);
33 | }
34 | to {
35 | transform: scale(0);
36 | }
37 | }
38 |
39 | .zoomedIn {
40 | animation-name: zoomedIn;
41 | }
42 |
43 | .zoomedOut {
44 | animation-name: zoomedOut;
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/templates/socialaccount/signup.html:
--------------------------------------------------------------------------------
1 | {% extends "socialaccount/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Signup" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Sign Up" %}
9 |
10 | {% blocktrans with provider_name=account.get_provider.name site_name=site.name %}You are about to use your {{provider_name}} account to login to
11 | {{site_name}}. As a final step, please complete the following form:{% endblocktrans %}
12 |
13 |
21 |
22 | {% endblock %}
23 |
--------------------------------------------------------------------------------
/static_in_env/scss/addons/_hierarchical-display.scss:
--------------------------------------------------------------------------------
1 | .zmd-hierarchical-display {
2 | visibility: hidden;
3 | &.in {
4 | visibility: visible;
5 | }
6 | }
7 | .zmd-hierarchical-displaying {
8 | visibility: visible;
9 | }
10 |
11 | .animation {
12 | animation-duration: 1s;
13 | animation-fill-mode: both;
14 | }
15 |
16 | .animation.zoomedIn,
17 | .animation.zoomedOut {
18 | animation-timing-function: cubic-bezier(.55, 0, .1, 1); // "Swift Out" easing curve
19 | }
20 |
21 | @keyframes zoomedIn {
22 | from {
23 | transform: scale(0);
24 | }
25 | to {
26 | transform: scale(1);
27 | }
28 | }
29 |
30 | @keyframes zoomedOut {
31 | from {
32 | transform: scale(1);
33 | }
34 | to {
35 | transform: scale(0);
36 | }
37 | }
38 |
39 | .zoomedIn {
40 | animation-name: zoomedIn;
41 | }
42 |
43 | .zoomedOut {
44 | animation-name: zoomedOut;
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/templates/account/verified_email_required.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Verify Your E-mail Address" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Verify Your E-mail Address" %}
9 |
10 | {% url 'account_email' as email_url %}
11 |
12 | {% blocktrans %}This part of the site requires us to verify that
13 | you are who you claim to be. For this purpose, we require that you
14 | verify ownership of your e-mail address. {% endblocktrans %}
15 |
16 | {% blocktrans %}We have sent an e-mail to you for
17 | verification. Please click on the link inside this e-mail. Please
18 | contact us if you do not receive it within a few minutes.{% endblocktrans %}
19 |
20 | {% blocktrans %}Note: you can still change your e-mail address .{% endblocktrans %}
21 |
22 |
23 | {% endblock %}
24 |
--------------------------------------------------------------------------------
/templates/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include 'head.html' %}
5 | {% include 'navbar.html' %}
6 |
7 |
8 | {% if messages %}
9 | {% for message in messages %}
10 |
11 | {{ message }}
12 |
13 | ×
14 |
15 |
16 | {% endfor %}
17 | {% endif %}
18 |
19 |
20 | {% block content %}
21 | {% endblock %}
22 |
23 | {% block extra_body %}
24 | {% endblock %}
25 |
26 | {% include 'script.html' %}
27 | {% block extra_scripts %}
28 | {% endblock extra_scripts %}
29 |
30 |
31 |
--------------------------------------------------------------------------------
/static/js/addons/progressBar.min.js:
--------------------------------------------------------------------------------
1 | (function($){$.fn.progressBar=function(givenValue){const $this=$(this);function init(selector){const progressValue=selector.children().attr('aria-valuenow');selector.children().width(`${progressValue}%`);selector.children().html(' ');$this.hasClass('md-progress')?selector.children().children().addClass('md-progress-bar-text'):selector.children().children().addClass('progress-bar-text');(progressValue!==100)?selector.children().children().text(`${progressValue}%`):selector.children().children().html(' ')}
2 | function set(selector,value){selector.children().removeClass('success fail active');selector.children().attr('aria-valuenow',value);init(selector);if(value>100){return!1}else if(value===100){selector.children().addClass('success')}else if(value<30){selector.children().addClass('fail')}else{selector.children().addClass('active')}
3 | return!0}
4 | set($this,givenValue)}}(jQuery))
--------------------------------------------------------------------------------
/static_in_env/js/addons/progressBar.min.js:
--------------------------------------------------------------------------------
1 | (function($){$.fn.progressBar=function(givenValue){const $this=$(this);function init(selector){const progressValue=selector.children().attr('aria-valuenow');selector.children().width(`${progressValue}%`);selector.children().html(' ');$this.hasClass('md-progress')?selector.children().children().addClass('md-progress-bar-text'):selector.children().children().addClass('progress-bar-text');(progressValue!==100)?selector.children().children().text(`${progressValue}%`):selector.children().children().html(' ')}
2 | function set(selector,value){selector.children().removeClass('success fail active');selector.children().attr('aria-valuenow',value);init(selector);if(value>100){return!1}else if(value===100){selector.children().addClass('success')}else if(value<30){selector.children().addClass('fail')}else{selector.children().addClass('active')}
3 | return!0}
4 | set($this,givenValue)}}(jQuery))
--------------------------------------------------------------------------------
/templates/account/password_reset.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 | {% load crispy_forms_tags %}
3 |
4 | {% load i18n %}
5 | {% load account %}
6 |
7 | {% block head_title %}{% trans "Password Reset" %}{% endblock %}
8 |
9 | {% block content %}
10 |
11 | {% trans "Password Reset" %}
12 | {% if user.is_authenticated %}
13 | {% include "account/snippets/already_logged_in.html" %}
14 | {% endif %}
15 |
16 | {% trans "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it." %}
17 |
18 |
23 |
24 | {% blocktrans %}Please contact us if you have any trouble resetting your password.{% endblocktrans %}
25 | {% endblock %}
26 |
--------------------------------------------------------------------------------
/templates/complete.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Document
9 |
10 |
11 |
12 | {% if messages %}
13 | {% for message in messages %}
14 |
15 | {{ message }}
16 |
17 | ×
18 |
19 |
20 | {% endfor %}
21 | {% endif %}
22 |
23 |
24 |
--------------------------------------------------------------------------------
/core/migrations/0006_comment.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.0.7 on 2020-06-27 13:37
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 | dependencies = [
11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12 | ('core', '0005_auto_20200626_1903'),
13 | ]
14 |
15 | operations = [
16 | migrations.CreateModel(
17 | name='Comment',
18 | fields=[
19 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20 | ('comment', models.TextField()),
21 | ('date', models.DateTimeField(auto_now_add=True)),
22 | ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Item')),
23 | ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
24 | ],
25 | ),
26 | ]
27 |
--------------------------------------------------------------------------------
/templates/account/password_reset_from_key.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% block head_title %}{% trans "Change Password" %}{% endblock %}
5 |
6 | {% block content %}
7 | {% if token_fail %}{% trans "Bad Token" %}{% else %}{% trans "Change Password" %}{% endif %}
8 |
9 | {% if token_fail %}
10 | {% url 'account_reset_password' as passwd_reset_url %}
11 | {% blocktrans %}The password reset link was invalid, possibly because it has already been used. Please request a new password reset .{% endblocktrans %}
12 | {% else %}
13 | {% if form %}
14 |
19 | {% else %}
20 | {% trans 'Your password is now changed.' %}
21 | {% endif %}
22 | {% endif %}
23 | {% endblock %}
24 |
--------------------------------------------------------------------------------
/templates/account/email_confirm.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% load account %}
5 |
6 | {% block head_title %}{% trans "Confirm E-mail Address" %}{% endblock %}
7 |
8 |
9 | {% block content %}
10 | {% trans "Confirm E-mail Address" %}
11 |
12 | {% if confirmation %}
13 |
14 | {% user_display confirmation.email_address.user as user_display %}
15 |
16 | {% blocktrans with confirmation.email_address.email as email %}Please confirm that {{ email }} is an e-mail address for user {{ user_display }}.{% endblocktrans %}
17 |
18 |
22 |
23 | {% else %}
24 |
25 | {% url 'account_email' as email_url %}
26 |
27 | {% blocktrans %}This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request .{% endblocktrans %}
28 |
29 | {% endif %}
30 |
31 | {% endblock %}
32 |
--------------------------------------------------------------------------------
/static/scss/free/_switch.scss:
--------------------------------------------------------------------------------
1 | // Switch free
2 | .bs-switch {
3 | position: relative;
4 | display: inline-block;
5 | width: 60px;
6 | height: 34px;
7 | input {
8 | display: none;
9 | &:checked {
10 | + .slider {
11 | background-color: #2196F3;
12 | &:before {
13 | transform: translateX(26px);
14 | }
15 | }
16 | }
17 | &:focus {
18 | + .slider {
19 | box-shadow: 0 0 1px #2196F3;
20 | }
21 | }
22 | }
23 | .slider {
24 | position: absolute;
25 | cursor: pointer;
26 | top: 0;
27 | left: 0;
28 | right: 0;
29 | bottom: 0;
30 | background-color: #ccc;
31 | -webkit-transition: .4s;
32 | transition: .4s;
33 | &:before {
34 | position: absolute;
35 | content: "";
36 | height: 26px;
37 | width: 26px;
38 | left: 4px;
39 | bottom: 4px;
40 | background-color: white;
41 | -webkit-transition: .4s;
42 | transition: .4s;
43 | }
44 | &.round {
45 | border-radius: 34px;
46 | &:before {
47 | border-radius: 50%;
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_switch.scss:
--------------------------------------------------------------------------------
1 | // Switch free
2 | .bs-switch {
3 | position: relative;
4 | display: inline-block;
5 | width: 60px;
6 | height: 34px;
7 | input {
8 | display: none;
9 | &:checked {
10 | + .slider {
11 | background-color: #2196F3;
12 | &:before {
13 | transform: translateX(26px);
14 | }
15 | }
16 | }
17 | &:focus {
18 | + .slider {
19 | box-shadow: 0 0 1px #2196F3;
20 | }
21 | }
22 | }
23 | .slider {
24 | position: absolute;
25 | cursor: pointer;
26 | top: 0;
27 | left: 0;
28 | right: 0;
29 | bottom: 0;
30 | background-color: #ccc;
31 | -webkit-transition: .4s;
32 | transition: .4s;
33 | &:before {
34 | position: absolute;
35 | content: "";
36 | height: 26px;
37 | width: 26px;
38 | left: 4px;
39 | bottom: 4px;
40 | background-color: white;
41 | -webkit-transition: .4s;
42 | transition: .4s;
43 | }
44 | &.round {
45 | border-radius: 34px;
46 | &:before {
47 | border-radius: 50%;
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/templates/account/signup.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 | {% load i18n %}
3 | {% load crispy_forms_tags %}
4 |
5 | {% block head_title %}{% trans "Signup" %}{% endblock %}
6 |
7 | {% block content %}
8 |
9 |
10 |
11 |
12 |
13 |
{% trans "Sign Up" %}
14 |
{% blocktrans %}Already have an account? Then please sign in .{% endblocktrans %}
15 |
23 |
24 |
25 |
26 |
27 |
28 | {% endblock %}
--------------------------------------------------------------------------------
/core/migrations/0002_auto_20200625_2010.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.0.7 on 2020-06-25 14:10
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 | dependencies = [
11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12 | ('core', '0001_initial'),
13 | ]
14 |
15 | operations = [
16 | migrations.AlterField(
17 | model_name='item',
18 | name='likes',
19 | field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL),
20 | ),
21 | migrations.CreateModel(
22 | name='UserProfile',
23 | fields=[
24 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
25 | ('stripe_customer_id', models.CharField(blank=True, max_length=20, null=True)),
26 | ('on_click_purchasing', models.BooleanField()),
27 | ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
28 | ],
29 | ),
30 | ]
31 |
--------------------------------------------------------------------------------
/static/js/addons/progressBar.js:
--------------------------------------------------------------------------------
1 | (function ($) {
2 | $.fn.progressBar = function (givenValue) {
3 | const $this = $(this);
4 |
5 | function init(selector) {
6 | const progressValue = selector.children().attr('aria-valuenow');
7 | selector.children().width(`${progressValue}%`);
8 | selector.children().html(' ');
9 | $this.hasClass('md-progress') ? selector.children().children().addClass('md-progress-bar-text') : selector.children().children().addClass('progress-bar-text');
10 | (progressValue !== 100) ? selector.children().children().text(`${progressValue}%`) : selector.children().children().html(' ');
11 | }
12 |
13 | function set(selector, value) {
14 | selector.children().removeClass('success fail active');
15 | selector.children().attr('aria-valuenow', value);
16 | init(selector);
17 | if (value > 100) {
18 | return false;
19 | } else if (value === 100) {
20 | selector.children().addClass('success');
21 | } else if (value < 30) {
22 | selector.children().addClass('fail');
23 | } else {
24 | selector.children().addClass('active');
25 | }
26 | return true;
27 | }
28 |
29 | set($this, givenValue);
30 | };
31 | }(jQuery));
32 |
--------------------------------------------------------------------------------
/static_in_env/js/addons/progressBar.js:
--------------------------------------------------------------------------------
1 | (function ($) {
2 | $.fn.progressBar = function (givenValue) {
3 | const $this = $(this);
4 |
5 | function init(selector) {
6 | const progressValue = selector.children().attr('aria-valuenow');
7 | selector.children().width(`${progressValue}%`);
8 | selector.children().html(' ');
9 | $this.hasClass('md-progress') ? selector.children().children().addClass('md-progress-bar-text') : selector.children().children().addClass('progress-bar-text');
10 | (progressValue !== 100) ? selector.children().children().text(`${progressValue}%`) : selector.children().children().html(' ');
11 | }
12 |
13 | function set(selector, value) {
14 | selector.children().removeClass('success fail active');
15 | selector.children().attr('aria-valuenow', value);
16 | init(selector);
17 | if (value > 100) {
18 | return false;
19 | } else if (value === 100) {
20 | selector.children().addClass('success');
21 | } else if (value < 30) {
22 | selector.children().addClass('fail');
23 | } else {
24 | selector.children().addClass('active');
25 | }
26 | return true;
27 | }
28 |
29 | set($this, givenValue);
30 | };
31 | }(jQuery));
32 |
--------------------------------------------------------------------------------
/static/css/addons/zmd.hierarchical-display.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design Hierarchical Display by Sergey Kupletsky (@zavoloklom) - https://github.com/zavoloklom/material-design-hierarchical-display/
3 | * License - https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE (MIT License)
4 | */.zmd-hierarchical-display{visibility:hidden}.zmd-hierarchical-display.in{visibility:visible}.zmd-hierarchical-displaying{visibility:visible}.animation{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animation.zoomedIn,.animation.zoomedOut{-webkit-animation-timing-function:cubic-bezier(.55,0,.1,1);animation-timing-function:cubic-bezier(.55,0,.1,1)}@-webkit-keyframes zoomedIn{from{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes zoomedIn{from{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes zoomedOut{from{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(0);transform:scale(0)}}@keyframes zoomedOut{from{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(0);transform:scale(0)}}.zoomedIn{-webkit-animation-name:zoomedIn;animation-name:zoomedIn}.zoomedOut{-webkit-animation-name:zoomedOut;animation-name:zoomedOut}
--------------------------------------------------------------------------------
/static_in_env/css/addons/zmd.hierarchical-display.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design Hierarchical Display by Sergey Kupletsky (@zavoloklom) - https://github.com/zavoloklom/material-design-hierarchical-display/
3 | * License - https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE (MIT License)
4 | */.zmd-hierarchical-display{visibility:hidden}.zmd-hierarchical-display.in{visibility:visible}.zmd-hierarchical-displaying{visibility:visible}.animation{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animation.zoomedIn,.animation.zoomedOut{-webkit-animation-timing-function:cubic-bezier(.55,0,.1,1);animation-timing-function:cubic-bezier(.55,0,.1,1)}@-webkit-keyframes zoomedIn{from{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes zoomedIn{from{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes zoomedOut{from{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(0);transform:scale(0)}}@keyframes zoomedOut{from{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(0);transform:scale(0)}}.zoomedIn{-webkit-animation-name:zoomedIn;animation-name:zoomedIn}.zoomedOut{-webkit-animation-name:zoomedOut;animation-name:zoomedOut}
--------------------------------------------------------------------------------
/templates/head.html:
--------------------------------------------------------------------------------
1 |
2 | {% load static %}
3 |
4 |
5 |
6 |
7 |
8 | {% block head_title %}{% endblock %}
9 | {% block extra_head %}
10 | {% endblock %}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
48 |
--------------------------------------------------------------------------------
/static/scss/free/_carousels.scss:
--------------------------------------------------------------------------------
1 | // Carousels
2 | .carousel {
3 | .carousel-control-prev-icon,
4 | .carousel-control-next-icon {
5 | width: $carousel-control-icon-width;
6 | height: $carousel-control-icon-height;
7 | }
8 | .carousel-control-prev-icon {
9 | background-image: $carousel-control-prev-icon;
10 | }
11 | .carousel-control-next-icon {
12 | background-image: $carousel-control-next-icon;
13 | }
14 | .carousel-indicators {
15 | li {
16 | width: $carousel-indicators-width;
17 | height: $carousel-indicators-height;
18 | border-radius: $carousel-indicators-border-radius;
19 | cursor: pointer;
20 | }
21 | }
22 | }
23 | .carousel-fade {
24 | .carousel-item {
25 | opacity: 0;
26 | transition-duration: $carousel-transition-duration;
27 | transition-property: opacity;
28 | }
29 | .carousel-item.active,
30 | .carousel-item-next.carousel-item-left,
31 | .carousel-item-prev.carousel-item-right {
32 | opacity: 1;
33 | }
34 | .carousel-item-left,
35 | .carousel-item-right {
36 | &.active {
37 | opacity: 0;
38 | }
39 | }
40 | .carousel-item-next,
41 | .carousel-item-prev,
42 | .carousel-item.active,
43 | .carousel-item-left.active,
44 | .carousel-item-prev.active {
45 | transform: $carousel-item-transform;
46 | @supports (transform-style: preserve-3d) {
47 | transform: $carousel-item-transform-2;
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/templates/category.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Categories:
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | {% for cat in categories %}
18 |
19 | {{cat.category}}
20 |
21 | {% endfor %}
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_carousels.scss:
--------------------------------------------------------------------------------
1 | // Carousels
2 | .carousel {
3 | .carousel-control-prev-icon,
4 | .carousel-control-next-icon {
5 | width: $carousel-control-icon-width;
6 | height: $carousel-control-icon-height;
7 | }
8 | .carousel-control-prev-icon {
9 | background-image: $carousel-control-prev-icon;
10 | }
11 | .carousel-control-next-icon {
12 | background-image: $carousel-control-next-icon;
13 | }
14 | .carousel-indicators {
15 | li {
16 | width: $carousel-indicators-width;
17 | height: $carousel-indicators-height;
18 | border-radius: $carousel-indicators-border-radius;
19 | cursor: pointer;
20 | }
21 | }
22 | }
23 | .carousel-fade {
24 | .carousel-item {
25 | opacity: 0;
26 | transition-duration: $carousel-transition-duration;
27 | transition-property: opacity;
28 | }
29 | .carousel-item.active,
30 | .carousel-item-next.carousel-item-left,
31 | .carousel-item-prev.carousel-item-right {
32 | opacity: 1;
33 | }
34 | .carousel-item-left,
35 | .carousel-item-right {
36 | &.active {
37 | opacity: 0;
38 | }
39 | }
40 | .carousel-item-next,
41 | .carousel-item-prev,
42 | .carousel-item.active,
43 | .carousel-item-left.active,
44 | .carousel-item-prev.active {
45 | transform: $carousel-item-transform;
46 | @supports (transform-style: preserve-3d) {
47 | transform: $carousel-item-transform-2;
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/static/scss/core/_helpers.scss:
--------------------------------------------------------------------------------
1 | // Helpers
2 | // MDB helpers
3 | .img-fluid,
4 | .video-fluid {
5 | max-width: 100%;
6 | height: auto;
7 | }
8 |
9 | .flex-center {
10 | display: flex;
11 | justify-content: center;
12 | align-items: center;
13 | height: 100%;
14 |
15 | p {
16 | margin: 0;
17 | }
18 |
19 | ul {
20 | text-align: center;
21 |
22 | li {
23 | margin-bottom: $flex-center-ul-mb;
24 |
25 | &:last-of-type {
26 | margin-bottom: 0;
27 | }
28 | }
29 | }
30 | }
31 |
32 | .hr-light {
33 | border-top: 1px solid $hr-light;
34 | }
35 |
36 | .hr-dark {
37 | border-top: 1px solid $hr-dark;
38 | }
39 |
40 | // Responsive width
41 | .w-responsive {
42 | width: 75%;
43 |
44 | @media (max-width: 740px) {
45 | width: 100%;
46 | }
47 | }
48 |
49 | // Collapsible body
50 | .collapsible-body {
51 | display: none;
52 | }
53 |
54 | .jumbotron {
55 | box-shadow: $z-depth-1;
56 | border-radius: $border-radius-base;
57 | background-color: $white-base;
58 | }
59 |
60 | @each $name,
61 | $color in $basic-mdb-colors {
62 | @include bg-variant(".bg-#{$name}", $color);
63 |
64 | .border-#{$name} {
65 | border-color: $color !important;
66 | }
67 | }
68 |
69 | .card-img-100 {
70 | width: 100px;
71 | height: 100px;
72 | }
73 |
74 | .card-img-64 {
75 | width: 64px;
76 | height: 64px;
77 | }
78 |
79 | .mml-1 {
80 | margin-left: - 0.25rem !important;
81 | }
82 |
83 | .flex-1 {
84 | flex: 1;
85 | }
86 |
--------------------------------------------------------------------------------
/static_in_env/scss/core/_helpers.scss:
--------------------------------------------------------------------------------
1 | // Helpers
2 | // MDB helpers
3 | .img-fluid,
4 | .video-fluid {
5 | max-width: 100%;
6 | height: auto;
7 | }
8 |
9 | .flex-center {
10 | display: flex;
11 | justify-content: center;
12 | align-items: center;
13 | height: 100%;
14 |
15 | p {
16 | margin: 0;
17 | }
18 |
19 | ul {
20 | text-align: center;
21 |
22 | li {
23 | margin-bottom: $flex-center-ul-mb;
24 |
25 | &:last-of-type {
26 | margin-bottom: 0;
27 | }
28 | }
29 | }
30 | }
31 |
32 | .hr-light {
33 | border-top: 1px solid $hr-light;
34 | }
35 |
36 | .hr-dark {
37 | border-top: 1px solid $hr-dark;
38 | }
39 |
40 | // Responsive width
41 | .w-responsive {
42 | width: 75%;
43 |
44 | @media (max-width: 740px) {
45 | width: 100%;
46 | }
47 | }
48 |
49 | // Collapsible body
50 | .collapsible-body {
51 | display: none;
52 | }
53 |
54 | .jumbotron {
55 | box-shadow: $z-depth-1;
56 | border-radius: $border-radius-base;
57 | background-color: $white-base;
58 | }
59 |
60 | @each $name,
61 | $color in $basic-mdb-colors {
62 | @include bg-variant(".bg-#{$name}", $color);
63 |
64 | .border-#{$name} {
65 | border-color: $color !important;
66 | }
67 | }
68 |
69 | .card-img-100 {
70 | width: 100px;
71 | height: 100px;
72 | }
73 |
74 | .card-img-64 {
75 | width: 64px;
76 | height: 64px;
77 | }
78 |
79 | .mml-1 {
80 | margin-left: - 0.25rem !important;
81 | }
82 |
83 | .flex-1 {
84 | flex: 1;
85 | }
86 |
--------------------------------------------------------------------------------
/static/img/lightbox/default-skin.svg:
--------------------------------------------------------------------------------
1 | default-skin 2
--------------------------------------------------------------------------------
/static_in_env/img/lightbox/default-skin.svg:
--------------------------------------------------------------------------------
1 | default-skin 2
--------------------------------------------------------------------------------
/static/scss/core/_masks.scss:
--------------------------------------------------------------------------------
1 | // Masks
2 | // General properties
3 | .view {
4 | position: relative;
5 | overflow: hidden;
6 | cursor: default;
7 | .mask {
8 | position: absolute;
9 | top: 0;
10 | left: 0;
11 | right: 0;
12 | bottom: 0;
13 | overflow: hidden;
14 | width: 100%;
15 | height: 100%;
16 | background-attachment: fixed;
17 | }
18 | img, video {
19 | position: relative;
20 | display: block;
21 | }
22 | video {
23 | &.video-intro {
24 | z-index: -100;
25 | top: 50%;
26 | left: 50%;
27 | transform: $intro-video-transform;
28 | transition: $intro-video-transition opacity;
29 | min-width: 100%;
30 | min-height: 100%;
31 | width: auto;
32 | height: auto;
33 | }
34 | }
35 | }
36 |
37 | // Overlay
38 | .overlay {
39 | .mask {
40 | opacity: 0;
41 | transition: $mask-overlay-transition;
42 | &:hover {
43 | opacity: 1;
44 | }
45 | }
46 | }
47 |
48 | // Zoom
49 | .zoom {
50 | img, video {
51 | transition: $mask-zoom-transition;
52 | }
53 | &:hover {
54 | img, video {
55 | transform: $mask-zoom-transform;
56 | }
57 | }
58 | }
59 |
60 | // Patterns
61 | $patterns: (
62 | 1: "01",
63 | 2: "02",
64 | 3: "03",
65 | 4: "04",
66 | 5: "05",
67 | 6: "06",
68 | 7: "07",
69 | 8: "08",
70 | 9: "09"
71 | );
72 |
73 | @each $no, $filename in $patterns {
74 | .pattern-#{$no} {
75 | background: url("#{$image-path}/overlays/#{$filename}.png");
76 | background-attachment: fixed;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/static_in_env/scss/core/_masks.scss:
--------------------------------------------------------------------------------
1 | // Masks
2 | // General properties
3 | .view {
4 | position: relative;
5 | overflow: hidden;
6 | cursor: default;
7 | .mask {
8 | position: absolute;
9 | top: 0;
10 | left: 0;
11 | right: 0;
12 | bottom: 0;
13 | overflow: hidden;
14 | width: 100%;
15 | height: 100%;
16 | background-attachment: fixed;
17 | }
18 | img, video {
19 | position: relative;
20 | display: block;
21 | }
22 | video {
23 | &.video-intro {
24 | z-index: -100;
25 | top: 50%;
26 | left: 50%;
27 | transform: $intro-video-transform;
28 | transition: $intro-video-transition opacity;
29 | min-width: 100%;
30 | min-height: 100%;
31 | width: auto;
32 | height: auto;
33 | }
34 | }
35 | }
36 |
37 | // Overlay
38 | .overlay {
39 | .mask {
40 | opacity: 0;
41 | transition: $mask-overlay-transition;
42 | &:hover {
43 | opacity: 1;
44 | }
45 | }
46 | }
47 |
48 | // Zoom
49 | .zoom {
50 | img, video {
51 | transition: $mask-zoom-transition;
52 | }
53 | &:hover {
54 | img, video {
55 | transform: $mask-zoom-transform;
56 | }
57 | }
58 | }
59 |
60 | // Patterns
61 | $patterns: (
62 | 1: "01",
63 | 2: "02",
64 | 3: "03",
65 | 4: "04",
66 | 5: "05",
67 | 6: "06",
68 | 7: "07",
69 | 8: "08",
70 | 9: "09"
71 | );
72 |
73 | @each $no, $filename in $patterns {
74 | .pattern-#{$no} {
75 | background: url("#{$image-path}/overlays/#{$filename}.png");
76 | background-attachment: fixed;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/templates/socialaccount/connections.html:
--------------------------------------------------------------------------------
1 | {% extends "socialaccount/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "Account Connections" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "Account Connections" %}
9 |
10 | {% if form.accounts %}
11 | {% blocktrans %}You can sign in to your account using any of the following third party accounts:{% endblocktrans %}
12 |
13 |
14 |
41 |
42 | {% else %}
43 | {% trans 'You currently have no social network accounts connected to this account.' %}
44 | {% endif %}
45 |
46 | {% trans 'Add a 3rd Party Account' %}
47 |
48 |
49 | {% include "socialaccount/snippets/provider_list.html" with process="connect" %}
50 |
51 |
52 | {% include "socialaccount/snippets/login_extra.html" %}
53 |
54 | {% endblock %}
55 |
--------------------------------------------------------------------------------
/static/scss/free/_tables.scss:
--------------------------------------------------------------------------------
1 | // Tables
2 | table {
3 | th {
4 | font-size: $table-th-font-size;
5 | font-weight: 400;
6 | }
7 | td {
8 | font-size: $table-td-font-size;
9 | font-weight: 300;
10 | }
11 | &.table {
12 | thead th {
13 | border-top: none;
14 | }
15 | th,
16 | td {
17 | padding-top: $table-th-padding-top;
18 | padding-bottom: $table-td-padding-bottom;
19 | }
20 | a {
21 | margin: 0;
22 | color: $table-a-color;
23 | // &.btn {
24 | // color: inherit;
25 | // }
26 | }
27 | .label-table {
28 | margin: 0;
29 | padding: 0;
30 | line-height: $table-label-height;
31 | height: $table-label-line-height;
32 | }
33 | &.btn-table {
34 | td {
35 | vertical-align: middle;
36 | }
37 | }
38 | }
39 | &.table-hover {
40 | tbody {
41 | tr {
42 | &:hover {
43 | transition: $table-hover-transition;
44 | background-color: $table-hover-background-color;
45 | }
46 | }
47 | }
48 | }
49 | .th-lg {
50 | min-width: $table-th-lg-min-width;
51 | }
52 | .th-sm {
53 | min-width: $table-th-sm-min-width;
54 | }
55 | &.table-sm {
56 | th,
57 | td {
58 | padding-top: $table-sm-padding-y;
59 | padding-bottom: $table-sm-padding-y;
60 | }
61 | }
62 | }
63 | .table-scroll-vertical {
64 | max-height: $table-scroll-vertical-max-height;
65 | overflow-y: auto;
66 | }
67 | .table-fixed {
68 | table-layout: fixed;
69 | }
70 | .table-responsive,
71 | .table-responsive-sm,
72 | .table-responsive-md,
73 | .table-responsive-lg,
74 | .table-responsive-xl {
75 | > .table-bordered {
76 | border-top: 1px solid #dee2e6;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_tables.scss:
--------------------------------------------------------------------------------
1 | // Tables
2 | table {
3 | th {
4 | font-size: $table-th-font-size;
5 | font-weight: 400;
6 | }
7 | td {
8 | font-size: $table-td-font-size;
9 | font-weight: 300;
10 | }
11 | &.table {
12 | thead th {
13 | border-top: none;
14 | }
15 | th,
16 | td {
17 | padding-top: $table-th-padding-top;
18 | padding-bottom: $table-td-padding-bottom;
19 | }
20 | a {
21 | margin: 0;
22 | color: $table-a-color;
23 | // &.btn {
24 | // color: inherit;
25 | // }
26 | }
27 | .label-table {
28 | margin: 0;
29 | padding: 0;
30 | line-height: $table-label-height;
31 | height: $table-label-line-height;
32 | }
33 | &.btn-table {
34 | td {
35 | vertical-align: middle;
36 | }
37 | }
38 | }
39 | &.table-hover {
40 | tbody {
41 | tr {
42 | &:hover {
43 | transition: $table-hover-transition;
44 | background-color: $table-hover-background-color;
45 | }
46 | }
47 | }
48 | }
49 | .th-lg {
50 | min-width: $table-th-lg-min-width;
51 | }
52 | .th-sm {
53 | min-width: $table-th-sm-min-width;
54 | }
55 | &.table-sm {
56 | th,
57 | td {
58 | padding-top: $table-sm-padding-y;
59 | padding-bottom: $table-sm-padding-y;
60 | }
61 | }
62 | }
63 | .table-scroll-vertical {
64 | max-height: $table-scroll-vertical-max-height;
65 | overflow-y: auto;
66 | }
67 | .table-fixed {
68 | table-layout: fixed;
69 | }
70 | .table-responsive,
71 | .table-responsive-sm,
72 | .table-responsive-md,
73 | .table-responsive-lg,
74 | .table-responsive-xl {
75 | > .table-bordered {
76 | border-top: 1px solid #dee2e6;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/templates/order_snippet.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Your cart
4 | {{ order.items.count }}
5 |
6 |
30 |
31 | {% if DISPLAY_COUPON_FORM %}
32 |
42 | {% endif %}
43 |
44 |
--------------------------------------------------------------------------------
/static/scss/mdb.lite.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design for Bootstrap 4
3 | * Version: MDB Lite 4.8.7
4 | *
5 | *
6 | * Copyright: Material Design for Bootstrap
7 | * https://mdbootstrap.com/
8 | *
9 | * Read the license: https://mdbootstrap.com/general/license/
10 | *
11 | *
12 | * Documentation: https://mdbootstrap.com/
13 | *
14 | * Getting started: https://mdbootstrap.com/docs/jquery/getting-started/download/
15 | *
16 | * Tutorials: https://mdbootstrap.com/education/bootstrap/
17 | *
18 | * Templates: https://mdbootstrap.com/templates/
19 | *
20 | * Support: https://mdbootstrap.com/support/
21 | *
22 | * Contact: office@mdbootstrap.com
23 | *
24 | * Attribution: Animate CSS, Twitter Bootstrap, Materialize CSS, Normalize CSS, Waves JS, WOW JS, Toastr, Chart.js
25 | *
26 | */
27 |
28 | @charset "UTF-8";
29 |
30 | // Bootstrap
31 | @import "core/bootstrap/functions";
32 | @import "core/bootstrap/variables";
33 |
34 | // CORE
35 | @import "core/mixins";
36 | // Your custom variables
37 | @import "custom-variables";
38 | @import "core/colors";
39 | @import "core/variables";
40 | @import "core/global";
41 | @import "core/helpers";
42 | @import "core/typography";
43 | @import "core/masks";
44 | @import "core/waves";
45 |
46 | // FREE
47 | @import "free/animations-basic";
48 | @import "free/buttons";
49 | @import "free/cards";
50 | @import "free/dropdowns";
51 | @import "free/input-group";
52 | @import "free/navbars";
53 | @import "free/pagination";
54 | @import "free/badges";
55 | @import "free/modals";
56 | @import "free/carousels";
57 | @import "free/forms";
58 | @import "free/msc";
59 | @import "free/footers";
60 | @import "free/list-group";
61 | @import "free/tables";
62 | @import "free/depreciated";
63 | @import "free/steppers";
64 | @import "free/loader";
65 | @import "free/treeview";
66 |
67 | // Your custom styles
68 | @import "custom-styles";
69 |
--------------------------------------------------------------------------------
/static_in_env/scss/mdb.lite.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design for Bootstrap 4
3 | * Version: MDB Lite 4.8.7
4 | *
5 | *
6 | * Copyright: Material Design for Bootstrap
7 | * https://mdbootstrap.com/
8 | *
9 | * Read the license: https://mdbootstrap.com/general/license/
10 | *
11 | *
12 | * Documentation: https://mdbootstrap.com/
13 | *
14 | * Getting started: https://mdbootstrap.com/docs/jquery/getting-started/download/
15 | *
16 | * Tutorials: https://mdbootstrap.com/education/bootstrap/
17 | *
18 | * Templates: https://mdbootstrap.com/templates/
19 | *
20 | * Support: https://mdbootstrap.com/support/
21 | *
22 | * Contact: office@mdbootstrap.com
23 | *
24 | * Attribution: Animate CSS, Twitter Bootstrap, Materialize CSS, Normalize CSS, Waves JS, WOW JS, Toastr, Chart.js
25 | *
26 | */
27 |
28 | @charset "UTF-8";
29 |
30 | // Bootstrap
31 | @import "core/bootstrap/functions";
32 | @import "core/bootstrap/variables";
33 |
34 | // CORE
35 | @import "core/mixins";
36 | // Your custom variables
37 | @import "custom-variables";
38 | @import "core/colors";
39 | @import "core/variables";
40 | @import "core/global";
41 | @import "core/helpers";
42 | @import "core/typography";
43 | @import "core/masks";
44 | @import "core/waves";
45 |
46 | // FREE
47 | @import "free/animations-basic";
48 | @import "free/buttons";
49 | @import "free/cards";
50 | @import "free/dropdowns";
51 | @import "free/input-group";
52 | @import "free/navbars";
53 | @import "free/pagination";
54 | @import "free/badges";
55 | @import "free/modals";
56 | @import "free/carousels";
57 | @import "free/forms";
58 | @import "free/msc";
59 | @import "free/footers";
60 | @import "free/list-group";
61 | @import "free/tables";
62 | @import "free/depreciated";
63 | @import "free/steppers";
64 | @import "free/loader";
65 | @import "free/treeview";
66 |
67 | // Your custom styles
68 | @import "custom-styles";
69 |
--------------------------------------------------------------------------------
/static/css/addons/zmd.hierarchical-display.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design Hierarchical Display by Sergey Kupletsky (@zavoloklom) - https://github.com/zavoloklom/material-design-hierarchical-display/
3 | * License - https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE (MIT License)
4 | */
5 | .zmd-hierarchical-display {
6 | visibility: hidden; }
7 | .zmd-hierarchical-display.in {
8 | visibility: visible; }
9 |
10 | .zmd-hierarchical-displaying {
11 | visibility: visible; }
12 |
13 | .animation {
14 | -webkit-animation-duration: 1s;
15 | animation-duration: 1s;
16 | -webkit-animation-fill-mode: both;
17 | animation-fill-mode: both; }
18 |
19 | .animation.zoomedIn,
20 | .animation.zoomedOut {
21 | -webkit-animation-timing-function: cubic-bezier(0.55, 0, 0.1, 1);
22 | animation-timing-function: cubic-bezier(0.55, 0, 0.1, 1); }
23 |
24 | @-webkit-keyframes zoomedIn {
25 | from {
26 | -webkit-transform: scale(0);
27 | transform: scale(0); }
28 | to {
29 | -webkit-transform: scale(1);
30 | transform: scale(1); } }
31 |
32 | @keyframes zoomedIn {
33 | from {
34 | -webkit-transform: scale(0);
35 | transform: scale(0); }
36 | to {
37 | -webkit-transform: scale(1);
38 | transform: scale(1); } }
39 |
40 | @-webkit-keyframes zoomedOut {
41 | from {
42 | -webkit-transform: scale(1);
43 | transform: scale(1); }
44 | to {
45 | -webkit-transform: scale(0);
46 | transform: scale(0); } }
47 |
48 | @keyframes zoomedOut {
49 | from {
50 | -webkit-transform: scale(1);
51 | transform: scale(1); }
52 | to {
53 | -webkit-transform: scale(0);
54 | transform: scale(0); } }
55 |
56 | .zoomedIn {
57 | -webkit-animation-name: zoomedIn;
58 | animation-name: zoomedIn; }
59 |
60 | .zoomedOut {
61 | -webkit-animation-name: zoomedOut;
62 | animation-name: zoomedOut; }
63 |
--------------------------------------------------------------------------------
/static_in_env/css/addons/zmd.hierarchical-display.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design Hierarchical Display by Sergey Kupletsky (@zavoloklom) - https://github.com/zavoloklom/material-design-hierarchical-display/
3 | * License - https://github.com/zavoloklom/material-design-hierarchical-display/blob/master/LICENSE (MIT License)
4 | */
5 | .zmd-hierarchical-display {
6 | visibility: hidden; }
7 | .zmd-hierarchical-display.in {
8 | visibility: visible; }
9 |
10 | .zmd-hierarchical-displaying {
11 | visibility: visible; }
12 |
13 | .animation {
14 | -webkit-animation-duration: 1s;
15 | animation-duration: 1s;
16 | -webkit-animation-fill-mode: both;
17 | animation-fill-mode: both; }
18 |
19 | .animation.zoomedIn,
20 | .animation.zoomedOut {
21 | -webkit-animation-timing-function: cubic-bezier(0.55, 0, 0.1, 1);
22 | animation-timing-function: cubic-bezier(0.55, 0, 0.1, 1); }
23 |
24 | @-webkit-keyframes zoomedIn {
25 | from {
26 | -webkit-transform: scale(0);
27 | transform: scale(0); }
28 | to {
29 | -webkit-transform: scale(1);
30 | transform: scale(1); } }
31 |
32 | @keyframes zoomedIn {
33 | from {
34 | -webkit-transform: scale(0);
35 | transform: scale(0); }
36 | to {
37 | -webkit-transform: scale(1);
38 | transform: scale(1); } }
39 |
40 | @-webkit-keyframes zoomedOut {
41 | from {
42 | -webkit-transform: scale(1);
43 | transform: scale(1); }
44 | to {
45 | -webkit-transform: scale(0);
46 | transform: scale(0); } }
47 |
48 | @keyframes zoomedOut {
49 | from {
50 | -webkit-transform: scale(1);
51 | transform: scale(1); }
52 | to {
53 | -webkit-transform: scale(0);
54 | transform: scale(0); } }
55 |
56 | .zoomedIn {
57 | -webkit-animation-name: zoomedIn;
58 | animation-name: zoomedIn; }
59 |
60 | .zoomedOut {
61 | -webkit-animation-name: zoomedOut;
62 | animation-name: zoomedOut; }
63 |
--------------------------------------------------------------------------------
/core/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from .views import (HomeView, ItemDetailView, add_to_cart, remove_from_the_cart, OrderSummary,
4 | remove_single_from_the_cart, CheckoutView, PaymentView, AddCouponView,
5 | RequestRefundView, add_likes_to_product, CustomerProfileView, add_comment_to_item,
6 | complete_payment
7 | )
8 |
9 | app_name = 'core'
10 |
11 | urlpatterns = [
12 | path('',
13 | HomeView.as_view(), name='item_list'),
14 | path('item_list//',
15 | HomeView.as_view(), name='item_list_by_category'),
16 | path('checkout/',
17 | CheckoutView.as_view(), name='checkout'),
18 | path('payment//',
19 | PaymentView.as_view(), name="payment"),
20 | path('products//',
21 | ItemDetailView.as_view(), name='products'),
22 | path('order_summary/',
23 | OrderSummary.as_view(), name='order_summary'),
24 | path('customer_profile/',
25 | CustomerProfileView.as_view(), name='customer_profile'),
26 | path('add_to_cart//',
27 | add_to_cart, name='add_to_cart'),
28 | path('remove_from_the_cart//',
29 | remove_from_the_cart, name='remove_from_the_cart'),
30 | path('remove_single_from_the_cart//',
31 | remove_single_from_the_cart, name='remove_single_from_the_cart'),
32 | path('add_coupon/',
33 | AddCouponView.as_view(), name="add_coupon"),
34 | path('request_refund/',
35 | RequestRefundView.as_view(), name="request_refund"),
36 | path('add_likes_to_product//',
37 | add_likes_to_product, name="likes"),
38 | path('add_comment_to_item//',
39 | add_comment_to_item, name="comments"),
40 | path('complete_payment///',
41 | complete_payment, name='complete_payment'),
42 |
43 | ]
44 |
--------------------------------------------------------------------------------
/templates/navbar.html:
--------------------------------------------------------------------------------
1 | {% load cart_template_tags %}
2 |
3 |
5 |
6 |
7 |
8 | {% if not request.user.is_authenticated %}
9 |
22 | {% else %}
23 |
49 |
52 |
53 |
--------------------------------------------------------------------------------
/static/scss/mdb.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design for Bootstrap 4
3 | * Version: MDB FREE 4.8.7
4 | *
5 | *
6 | * Copyright: Material Design for Bootstrap
7 | * https://mdbootstrap.com/
8 | *
9 | * Read the license: https://mdbootstrap.com/general/license/
10 | *
11 | *
12 | * Documentation: https://mdbootstrap.com/
13 | *
14 | * Getting started: https://mdbootstrap.com/docs/jquery/getting-started/download/
15 | *
16 | * Tutorials: https://mdbootstrap.com/education/bootstrap/
17 | *
18 | * Templates: https://mdbootstrap.com/templates/
19 | *
20 | * Support: https://mdbootstrap.com/support/
21 | *
22 | * Contact: office@mdbootstrap.com
23 | *
24 | * Attribution: Animate CSS, Twitter Bootstrap, Materialize CSS, Normalize CSS, Waves JS, WOW JS, Toastr, Chart.js
25 | *
26 | */
27 |
28 | @charset "UTF-8";
29 |
30 | // Bootstrap
31 | @import "core/bootstrap/functions";
32 | @import "core/bootstrap/variables";
33 | @import "core/bootstrap/rfs";
34 |
35 | // CORE
36 | @import "core/mixins";
37 | // Your custom variables
38 | @import "custom-variables";
39 | @import "core/colors";
40 | @import "core/variables";
41 | @import "core/global";
42 | @import "core/helpers";
43 | @import "core/typography";
44 | @import "core/masks";
45 | @import "core/waves";
46 |
47 | // FREE
48 | @import "free/animations-basic";
49 | @import "free/modules/animations-extended/module";
50 | @import "free/buttons";
51 | @import "free/cards";
52 | @import "free/dropdowns";
53 | @import "free/input-group";
54 | @import "free/navbars";
55 | @import "free/pagination";
56 | @import "free/badges";
57 | @import "free/modals";
58 | @import "free/carousels";
59 | @import "free/forms";
60 | @import "free/msc";
61 | @import "free/footers";
62 | @import "free/list-group";
63 | @import "free/tables";
64 | @import "free/depreciated";
65 | @import "free/steppers";
66 | @import "free/loader";
67 | @import "free/treeview";
68 | // Free addons
69 | // @import "addons/datatables";
70 | // @import "addons/datatables-select";
71 | // @import "addons/directives";
72 | // @import "addons/hierarchical-display";
73 | // @import "addons/flags";
74 | // @import "addons/rating";
75 |
76 | // Your custom styles
77 | @import "custom-styles";
78 |
--------------------------------------------------------------------------------
/static_in_env/scss/mdb.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design for Bootstrap 4
3 | * Version: MDB FREE 4.8.7
4 | *
5 | *
6 | * Copyright: Material Design for Bootstrap
7 | * https://mdbootstrap.com/
8 | *
9 | * Read the license: https://mdbootstrap.com/general/license/
10 | *
11 | *
12 | * Documentation: https://mdbootstrap.com/
13 | *
14 | * Getting started: https://mdbootstrap.com/docs/jquery/getting-started/download/
15 | *
16 | * Tutorials: https://mdbootstrap.com/education/bootstrap/
17 | *
18 | * Templates: https://mdbootstrap.com/templates/
19 | *
20 | * Support: https://mdbootstrap.com/support/
21 | *
22 | * Contact: office@mdbootstrap.com
23 | *
24 | * Attribution: Animate CSS, Twitter Bootstrap, Materialize CSS, Normalize CSS, Waves JS, WOW JS, Toastr, Chart.js
25 | *
26 | */
27 |
28 | @charset "UTF-8";
29 |
30 | // Bootstrap
31 | @import "core/bootstrap/functions";
32 | @import "core/bootstrap/variables";
33 | @import "core/bootstrap/rfs";
34 |
35 | // CORE
36 | @import "core/mixins";
37 | // Your custom variables
38 | @import "custom-variables";
39 | @import "core/colors";
40 | @import "core/variables";
41 | @import "core/global";
42 | @import "core/helpers";
43 | @import "core/typography";
44 | @import "core/masks";
45 | @import "core/waves";
46 |
47 | // FREE
48 | @import "free/animations-basic";
49 | @import "free/modules/animations-extended/module";
50 | @import "free/buttons";
51 | @import "free/cards";
52 | @import "free/dropdowns";
53 | @import "free/input-group";
54 | @import "free/navbars";
55 | @import "free/pagination";
56 | @import "free/badges";
57 | @import "free/modals";
58 | @import "free/carousels";
59 | @import "free/forms";
60 | @import "free/msc";
61 | @import "free/footers";
62 | @import "free/list-group";
63 | @import "free/tables";
64 | @import "free/depreciated";
65 | @import "free/steppers";
66 | @import "free/loader";
67 | @import "free/treeview";
68 | // Free addons
69 | // @import "addons/datatables";
70 | // @import "addons/datatables-select";
71 | // @import "addons/directives";
72 | // @import "addons/hierarchical-display";
73 | // @import "addons/flags";
74 | // @import "addons/rating";
75 |
76 | // Your custom styles
77 | @import "custom-styles";
78 |
--------------------------------------------------------------------------------
/templates/footer.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 |
--------------------------------------------------------------------------------
/templates/account/login.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 | {% load i18n %}
3 | {% load account socialaccount %}
4 | {% load crispy_forms_tags %}
5 |
6 | {% block head_title %}{% trans "Sign In" %}{% endblock %}
7 |
8 | {% block content %}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
{% trans "Sign In" %}
16 |
17 | {% get_providers as socialaccount_providers %}
18 |
19 |
29 |
30 |
31 | {% if socialaccount_providers %}
32 |
{% blocktrans with site.name as site_name %}Sign in with
33 | existing third party accounts. {% endblocktrans %}
34 |
35 |
36 |
37 |
38 | {% include "socialaccount/snippets/provider_list.html" with process="login" %}
39 |
40 |
41 |
{% trans '' %}
42 |
43 |
44 |
45 | {% include "socialaccount/snippets/login_extra.html" %}
46 |
47 | {% else %}
48 |
{% blocktrans %}If you have not created an account yet, then please
49 | sign up first.{% endblocktrans %}
50 | {% endif %}
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | {% endblock %}
--------------------------------------------------------------------------------
/static/scss/free/_pagination.scss:
--------------------------------------------------------------------------------
1 | // Pagination
2 | .pagination {
3 | .page-item {
4 | &.active {
5 | .page-link {
6 | box-shadow: $z-depth-1;
7 | transition: $pagination-active-transition;
8 | border-radius: $border-radius-base;
9 | background-color: $primary-color;
10 | color: $white-base;
11 | &:hover {
12 | background-color: $primary-color;
13 | }
14 | }
15 | }
16 | &.disabled {
17 | .page-link {
18 | color: $pagination-page-item-disabled-color;
19 | }
20 | }
21 | .page-link {
22 | transition: $pagination-page-link-transition;
23 | outline: 0;
24 | border: 0;
25 | background-color: transparent;
26 | font-size: $pagination-page-link-font-size;
27 | color: $pagination-page-link-color;
28 | &:hover {
29 | transition: $pagination-page-link-transition;
30 | border-radius: $border-radius-base;
31 | background-color: $pagination-page-link-hover-bg-color;
32 | }
33 | &:focus {
34 | background-color: transparent;
35 | box-shadow: none;
36 | }
37 | }
38 | }
39 | &.pagination-lg {
40 | .page-item {
41 | .page-link {
42 | font-size: $pagination-page-link-font-size-lg;
43 | }
44 | }
45 | }
46 | &.pagination-sm {
47 | .page-item {
48 | .page-link {
49 | font-size: $pagination-page-link-font-size-sm;
50 | }
51 | }
52 | }
53 | &.pagination-circle {
54 | .page-item {
55 | .page-link {
56 | margin-left: $pagination-circle-margin-x;
57 | margin-right: $pagination-circle-margin-x;
58 | border-radius: $pagination-circle-border-radius;
59 | &:hover {
60 | border-radius: $pagination-circle-border-radius;
61 | }
62 | }
63 | &.active {
64 | .page-link {
65 | border-radius: $pagination-circle-border-radius;
66 | }
67 | }
68 | }
69 | }
70 | @each $name, $color in $pagination-colors {
71 | &.pg-#{$name} {
72 | .page-item {
73 | &.active {
74 | .page-link {
75 | background-color: $color;
76 | &:hover {
77 | background-color: $color;
78 | }
79 | }
80 | }
81 | }
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_pagination.scss:
--------------------------------------------------------------------------------
1 | // Pagination
2 | .pagination {
3 | .page-item {
4 | &.active {
5 | .page-link {
6 | box-shadow: $z-depth-1;
7 | transition: $pagination-active-transition;
8 | border-radius: $border-radius-base;
9 | background-color: $primary-color;
10 | color: $white-base;
11 | &:hover {
12 | background-color: $primary-color;
13 | }
14 | }
15 | }
16 | &.disabled {
17 | .page-link {
18 | color: $pagination-page-item-disabled-color;
19 | }
20 | }
21 | .page-link {
22 | transition: $pagination-page-link-transition;
23 | outline: 0;
24 | border: 0;
25 | background-color: transparent;
26 | font-size: $pagination-page-link-font-size;
27 | color: $pagination-page-link-color;
28 | &:hover {
29 | transition: $pagination-page-link-transition;
30 | border-radius: $border-radius-base;
31 | background-color: $pagination-page-link-hover-bg-color;
32 | }
33 | &:focus {
34 | background-color: transparent;
35 | box-shadow: none;
36 | }
37 | }
38 | }
39 | &.pagination-lg {
40 | .page-item {
41 | .page-link {
42 | font-size: $pagination-page-link-font-size-lg;
43 | }
44 | }
45 | }
46 | &.pagination-sm {
47 | .page-item {
48 | .page-link {
49 | font-size: $pagination-page-link-font-size-sm;
50 | }
51 | }
52 | }
53 | &.pagination-circle {
54 | .page-item {
55 | .page-link {
56 | margin-left: $pagination-circle-margin-x;
57 | margin-right: $pagination-circle-margin-x;
58 | border-radius: $pagination-circle-border-radius;
59 | &:hover {
60 | border-radius: $pagination-circle-border-radius;
61 | }
62 | }
63 | &.active {
64 | .page-link {
65 | border-radius: $pagination-circle-border-radius;
66 | }
67 | }
68 | }
69 | }
70 | @each $name, $color in $pagination-colors {
71 | &.pg-#{$name} {
72 | .page-item {
73 | &.active {
74 | .page-link {
75 | background-color: $color;
76 | &:hover {
77 | background-color: $color;
78 | }
79 | }
80 | }
81 | }
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/templates/customer_profile.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% block content %}
3 | Order History
4 |
5 |
6 |
7 |
8 | Order
9 | Date
10 | Items
11 | Total(BDT)
12 | Reference Code
13 | Request Refund
14 |
15 |
16 |
17 |
18 | {% for order in orders %}
19 | {{forloop.counter}}
20 | {{order.ordered_date|date:'Y/m/d'}}
21 |
22 | {% for item in order.items.all %}
23 |
24 | {{item}}
25 |
26 | {% endfor %}
27 |
28 |
29 | {{order.payment.amount}}
30 | {{order.reference_code}}
31 | {% if order.refund_requested %}
32 | Refund Requested
33 | {% elif order.refund_granted %}
34 | Refund Granted
35 | {% else %}
36 | Refund
37 | {% endif %}
38 |
39 | {% endfor %}
40 |
41 |
42 | {% endblock content %}
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/core/forms.py:
--------------------------------------------------------------------------------
1 | from django import forms
2 |
3 | from django_countries.fields import CountryField
4 | from django_countries.widgets import CountrySelectWidget
5 |
6 | from .models import Comment
7 |
8 | CHOICE_FIELDS = (
9 | ('S', 'Stripe'),
10 | ('P', 'Paypal'),
11 | )
12 |
13 |
14 | class CheckoutForm(forms.Form):
15 | # Shipping information
16 | shipping_address = forms.CharField(required=False)
17 | shipping_address2 = forms.CharField(required=False)
18 | shipping_country = CountryField(blank_label='(select country)').formfield(
19 | required=False,
20 | widget=CountrySelectWidget(attrs={
21 | 'class': 'custom-select d-block w-100',
22 | }))
23 | shipping_zip = forms.CharField(required=False)
24 | same_billing_address = forms.BooleanField(required=False)
25 | set_default_shipping = forms.BooleanField(required=False)
26 | use_default_shipping = forms.BooleanField(required=False)
27 |
28 | # Billing information
29 | billing_address = forms.CharField(required=False)
30 | billing_address2 = forms.CharField(required=False)
31 | billing_country = CountryField(blank_label='(select country)').formfield(
32 | required=False,
33 | widget=CountrySelectWidget(attrs={
34 | 'class': 'custom-select d-block w-100',
35 | }))
36 | billing_zip = forms.CharField(required=False)
37 | set_default_billing = forms.BooleanField(required=False)
38 | use_default_billing = forms.BooleanField(required=False)
39 |
40 | # Payment Method
41 | payment_option = forms.ChoiceField(widget=forms.RadioSelect, choices=CHOICE_FIELDS)
42 |
43 |
44 | class CouponForm(forms.Form):
45 | coupon_code = forms.CharField(widget=forms.TextInput(attrs={
46 | 'class': "form-control",
47 | 'placeholder': 'Promo Code',
48 | 'aria-label': 'Recipient\'s username',
49 | 'aria-describedby':"basic-addon2"
50 | }
51 | ))
52 |
53 |
54 | class RefundForm(forms.Form):
55 | reference_code = forms.CharField(max_length=20)
56 | reason = forms.CharField(widget=forms.Textarea(attrs={
57 | "row": 2
58 | }))
59 | email = forms.EmailField()
60 |
61 |
62 | class CommentForm(forms.Form):
63 | comment = forms.CharField(widget=forms.Textarea(attrs={
64 | "cols": 200,
65 | "rows": 3,
66 | "class": "form-control",
67 | "placeholder": "Write A Comment"
68 | }))
69 |
--------------------------------------------------------------------------------
/core/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from .models import (Item, OrderItem, Cart, Address, Category, Comment,
3 | Payment, Coupon, Refund, UserProfile)
4 |
5 | admin.site.register(UserProfile)
6 | admin.site.register(Item)
7 | admin.site.register(Category)
8 |
9 |
10 | class OrderAdmin(admin.ModelAdmin):
11 | class Meta:
12 | model = OrderItem
13 |
14 | list_display = ["__str__", 'ordered']
15 |
16 |
17 | admin.site.register(OrderItem, OrderAdmin)
18 |
19 |
20 | def update_refund_request_to_true(model_admin, request, query_set):
21 | query_set.update(refund_requested=False, refund_granted=True)
22 |
23 |
24 | update_refund_request_to_true.short_description_message = "Update orders to refund granted"
25 |
26 |
27 | class CartAdmin(admin.ModelAdmin):
28 | class Meta:
29 | model = Cart
30 |
31 | list_display = ['__str__',
32 | 'ordered',
33 | 'being_delivered',
34 | 'received',
35 | 'refund_requested',
36 | 'refund_granted',
37 | 'billing_address',
38 | 'shipping_address',
39 | 'payment',
40 | 'coupon'
41 | ]
42 | list_display_links = ['__str__',
43 | 'ordered',
44 | 'billing_address',
45 | 'shipping_address',
46 | 'payment',
47 | 'coupon'
48 | ]
49 | list_filter = ['ordered',
50 | 'being_delivered',
51 | 'received',
52 | 'refund_requested',
53 | 'refund_granted'
54 | ]
55 | search_fields = ['user__username', 'reference_code']
56 | actions = [update_refund_request_to_true]
57 |
58 |
59 | admin.site.register(Cart, CartAdmin)
60 | admin.site.register(Address)
61 | admin.site.register(Payment)
62 | admin.site.register(Coupon)
63 |
64 |
65 | class RefundAdmin(admin.ModelAdmin):
66 | class Meta:
67 | model = Refund
68 | list_display = ['__str__', 'order']
69 |
70 |
71 | admin.site.register(Refund, RefundAdmin)
72 |
73 |
74 | class CommentAdmin(admin.ModelAdmin):
75 | class Meta:
76 | model = Comment
77 | list_display = ['__str__', 'user']
78 |
79 |
80 | admin.site.register(Comment, CommentAdmin)
81 |
--------------------------------------------------------------------------------
/static/js/addons/rating.min.js:
--------------------------------------------------------------------------------
1 | (function($){$.fn.mdbRate=function(){var $stars;var myDefaultWhiteList=$.fn.tooltip.Constructor.Default.whiteList
2 | myDefaultWhiteList.textarea=[];myDefaultWhiteList.button=[];var $container=$(this);var titles=['Very bad','Poor','OK','Good','Excellent'];for(var i=0;i<5;i++){$container.append(` `)}
4 | $stars=$container.children();if($container.hasClass('rating-faces')){$stars.addClass('far fa-meh-blank')}else if($container.hasClass('empty-stars')){$stars.addClass('far fa-star')}else{$stars.addClass('fas fa-star')}
5 | $stars.on('mouseover',function(){var index=$(this).attr('data-index');markStarsAsActive(index)});function markStarsAsActive(index){unmarkActive();for(var i=0;i<=index;i++){if($container.hasClass('rating-faces')){$($stars.get(i)).removeClass('fa-meh-blank');$($stars.get(i)).addClass('live');switch(index){case '0':$($stars.get(i)).addClass('fa-angry');break;case '1':$($stars.get(i)).addClass('fa-frown');break;case '2':$($stars.get(i)).addClass('fa-meh');break;case '3':$($stars.get(i)).addClass('fa-smile');break;case '4':$($stars.get(i)).addClass('fa-laugh');break}}else if($container.hasClass('empty-stars')){$($stars.get(i)).addClass('fas');switch(index){case '0':$($stars.get(i)).addClass('oneStar');break;case '1':$($stars.get(i)).addClass('twoStars');break;case '2':$($stars.get(i)).addClass('threeStars');break;case '3':$($stars.get(i)).addClass('fourStars');break;case '4':$($stars.get(i)).addClass('fiveStars');break}}else{$($stars.get(i)).addClass('amber-text')}}}
6 | function unmarkActive(){$stars.parent().hasClass('rating-faces')?$stars.addClass('fa-meh-blank'):$stars;$container.hasClass('empty-stars')?$stars.removeClass('fas'):$container;$stars.removeClass('fa-angry fa-frown fa-meh fa-smile fa-laugh live oneStar twoStars threeStars fourStars fiveStars amber-text')}
7 | $stars.on('click',function(){$stars.popover('hide')});$container.on('click','#voteSubmitButton',function(){$stars.popover('hide')});$container.on('click','#closePopoverButton',function(){$stars.popover('hide')});if($container.hasClass('feedback')){$(function(){$stars.popover({container:$container,content:` Submit! Close
`})})}
8 | $stars.tooltip()}})(jQuery)
--------------------------------------------------------------------------------
/static_in_env/js/addons/rating.min.js:
--------------------------------------------------------------------------------
1 | (function($){$.fn.mdbRate=function(){var $stars;var myDefaultWhiteList=$.fn.tooltip.Constructor.Default.whiteList
2 | myDefaultWhiteList.textarea=[];myDefaultWhiteList.button=[];var $container=$(this);var titles=['Very bad','Poor','OK','Good','Excellent'];for(var i=0;i<5;i++){$container.append(` `)}
4 | $stars=$container.children();if($container.hasClass('rating-faces')){$stars.addClass('far fa-meh-blank')}else if($container.hasClass('empty-stars')){$stars.addClass('far fa-star')}else{$stars.addClass('fas fa-star')}
5 | $stars.on('mouseover',function(){var index=$(this).attr('data-index');markStarsAsActive(index)});function markStarsAsActive(index){unmarkActive();for(var i=0;i<=index;i++){if($container.hasClass('rating-faces')){$($stars.get(i)).removeClass('fa-meh-blank');$($stars.get(i)).addClass('live');switch(index){case '0':$($stars.get(i)).addClass('fa-angry');break;case '1':$($stars.get(i)).addClass('fa-frown');break;case '2':$($stars.get(i)).addClass('fa-meh');break;case '3':$($stars.get(i)).addClass('fa-smile');break;case '4':$($stars.get(i)).addClass('fa-laugh');break}}else if($container.hasClass('empty-stars')){$($stars.get(i)).addClass('fas');switch(index){case '0':$($stars.get(i)).addClass('oneStar');break;case '1':$($stars.get(i)).addClass('twoStars');break;case '2':$($stars.get(i)).addClass('threeStars');break;case '3':$($stars.get(i)).addClass('fourStars');break;case '4':$($stars.get(i)).addClass('fiveStars');break}}else{$($stars.get(i)).addClass('amber-text')}}}
6 | function unmarkActive(){$stars.parent().hasClass('rating-faces')?$stars.addClass('fa-meh-blank'):$stars;$container.hasClass('empty-stars')?$stars.removeClass('fas'):$container;$stars.removeClass('fa-angry fa-frown fa-meh fa-smile fa-laugh live oneStar twoStars threeStars fourStars fiveStars amber-text')}
7 | $stars.on('click',function(){$stars.popover('hide')});$container.on('click','#voteSubmitButton',function(){$stars.popover('hide')});$container.on('click','#closePopoverButton',function(){$stars.popover('hide')});if($container.hasClass('feedback')){$(function(){$stars.popover({container:$container,content:` Submit! Close
`})})}
8 | $stars.tooltip()}})(jQuery)
--------------------------------------------------------------------------------
/core/migrations/0008_alter_address_id_alter_cart_id_alter_category_id_and_more.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 5.0.1 on 2024-01-23 17:34
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0007_auto_20201206_1235'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='address',
15 | name='id',
16 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
17 | ),
18 | migrations.AlterField(
19 | model_name='cart',
20 | name='id',
21 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
22 | ),
23 | migrations.AlterField(
24 | model_name='category',
25 | name='id',
26 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
27 | ),
28 | migrations.AlterField(
29 | model_name='comment',
30 | name='id',
31 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
32 | ),
33 | migrations.AlterField(
34 | model_name='coupon',
35 | name='id',
36 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
37 | ),
38 | migrations.AlterField(
39 | model_name='item',
40 | name='id',
41 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
42 | ),
43 | migrations.AlterField(
44 | model_name='orderitem',
45 | name='id',
46 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
47 | ),
48 | migrations.AlterField(
49 | model_name='payment',
50 | name='id',
51 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
52 | ),
53 | migrations.AlterField(
54 | model_name='refund',
55 | name='id',
56 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
57 | ),
58 | migrations.AlterField(
59 | model_name='userprofile',
60 | name='id',
61 | field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
62 | ),
63 | ]
64 |
--------------------------------------------------------------------------------
/static/js/modules/treeview.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | (function ($) {
4 | $.fn.mdbTreeview = function () {
5 | var $this = $(this);
6 |
7 | if ($this.hasClass('treeview')) {
8 | var $toggler = $this.find('.rotate');
9 | $.each($toggler, function (e) {
10 | $($toggler[e]).off('click');
11 | $($toggler[e]).on('click', function () {
12 | var $this = $(this);
13 | $this.siblings('.nested').toggleClass('active');
14 | $this.toggleClass('down');
15 | });
16 | });
17 | }
18 |
19 | if ($this.hasClass('treeview-animated')) {
20 | var $elements = $this.find('.treeview-animated-element');
21 | var $closed = $this.find('.closed');
22 | $this.find('.nested').hide();
23 | $closed.off('click');
24 | $closed.on('click', function () {
25 | var $this = $(this);
26 | var $target = $this.siblings('.nested');
27 | var $pointer = $this.children('.fa-angle-right');
28 | $this.toggleClass('open');
29 | $pointer.toggleClass('down');
30 | !$target.hasClass('active') ? $target.addClass('active').slideDown() : $target.removeClass('active').slideUp();
31 | return false;
32 | });
33 | $elements.off('click');
34 | $elements.on('click', function () {
35 | var $this = $(this);
36 | $this.hasClass('opened') ? $this.removeClass('opened') : ($elements.removeClass('opened'), $this.addClass('opened'));
37 | });
38 | }
39 |
40 | if ($this.hasClass('treeview-colorful')) {
41 | var _$elements = $this.find('.treeview-colorful-element');
42 |
43 | var $header = $this.find('.treeview-colorful-items-header');
44 | $this.find('.nested').hide();
45 | $header.off('click');
46 | $header.on('click', function () {
47 | var $this = $(this);
48 | var $target = $this.siblings('.nested');
49 | var $pointerPlus = $this.children('.fa-plus-circle');
50 | var $pointerMinus = $this.children('.fa-minus-circle');
51 | $this.toggleClass('open');
52 | $pointerPlus.removeClass('fa-plus-circle');
53 | $pointerPlus.addClass('fa-minus-circle');
54 | $pointerMinus.removeClass('fa-minus-circle');
55 | $pointerMinus.addClass('fa-plus-circle');
56 | !$target.hasClass('active') ? $target.addClass('active').slideDown() : $target.removeClass('active').slideUp();
57 | });
58 |
59 | _$elements.off('click');
60 |
61 | _$elements.on('click', function () {
62 | var $this = $(this);
63 | $this.hasClass('opened') ? _$elements.removeClass('opened') : (_$elements.removeClass('opened'), $this.addClass('opened'));
64 | });
65 | }
66 | };
67 | })(jQuery);
--------------------------------------------------------------------------------
/static_in_env/js/modules/treeview.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | (function ($) {
4 | $.fn.mdbTreeview = function () {
5 | var $this = $(this);
6 |
7 | if ($this.hasClass('treeview')) {
8 | var $toggler = $this.find('.rotate');
9 | $.each($toggler, function (e) {
10 | $($toggler[e]).off('click');
11 | $($toggler[e]).on('click', function () {
12 | var $this = $(this);
13 | $this.siblings('.nested').toggleClass('active');
14 | $this.toggleClass('down');
15 | });
16 | });
17 | }
18 |
19 | if ($this.hasClass('treeview-animated')) {
20 | var $elements = $this.find('.treeview-animated-element');
21 | var $closed = $this.find('.closed');
22 | $this.find('.nested').hide();
23 | $closed.off('click');
24 | $closed.on('click', function () {
25 | var $this = $(this);
26 | var $target = $this.siblings('.nested');
27 | var $pointer = $this.children('.fa-angle-right');
28 | $this.toggleClass('open');
29 | $pointer.toggleClass('down');
30 | !$target.hasClass('active') ? $target.addClass('active').slideDown() : $target.removeClass('active').slideUp();
31 | return false;
32 | });
33 | $elements.off('click');
34 | $elements.on('click', function () {
35 | var $this = $(this);
36 | $this.hasClass('opened') ? $this.removeClass('opened') : ($elements.removeClass('opened'), $this.addClass('opened'));
37 | });
38 | }
39 |
40 | if ($this.hasClass('treeview-colorful')) {
41 | var _$elements = $this.find('.treeview-colorful-element');
42 |
43 | var $header = $this.find('.treeview-colorful-items-header');
44 | $this.find('.nested').hide();
45 | $header.off('click');
46 | $header.on('click', function () {
47 | var $this = $(this);
48 | var $target = $this.siblings('.nested');
49 | var $pointerPlus = $this.children('.fa-plus-circle');
50 | var $pointerMinus = $this.children('.fa-minus-circle');
51 | $this.toggleClass('open');
52 | $pointerPlus.removeClass('fa-plus-circle');
53 | $pointerPlus.addClass('fa-minus-circle');
54 | $pointerMinus.removeClass('fa-minus-circle');
55 | $pointerMinus.addClass('fa-plus-circle');
56 | !$target.hasClass('active') ? $target.addClass('active').slideDown() : $target.removeClass('active').slideUp();
57 | });
58 |
59 | _$elements.off('click');
60 |
61 | _$elements.on('click', function () {
62 | var $this = $(this);
63 | $this.hasClass('opened') ? _$elements.removeClass('opened') : (_$elements.removeClass('opened'), $this.addClass('opened'));
64 | });
65 | }
66 | };
67 | })(jQuery);
--------------------------------------------------------------------------------
/templates/account/email.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% trans "E-mail Addresses" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% trans "E-mail Addresses" %}
9 | {% if user.emailaddress_set.all %}
10 | {% trans 'The following e-mail addresses are associated with your account:' %}
11 |
12 |
41 |
42 | {% else %}
43 | {% trans 'Warning:'%} {% trans "You currently do not have any e-mail address set up. You should really add an e-mail address so you can receive notifications, reset your password, etc." %}
44 |
45 | {% endif %}
46 |
47 |
48 | {% trans "Add E-mail Address" %}
49 |
50 |
55 |
56 | {% endblock %}
57 |
58 |
59 | {% block extra_body %}
60 |
73 | {% endblock %}
74 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | media
2 | form.txt
3 | db.sqlite3
4 | credentials.txt
5 | ecom/
6 | # Byte-compiled / optimized / DLL files
7 | __pycache__/
8 | *.py[cod]
9 | *$py.class
10 |
11 | # C extensions
12 | *.so
13 |
14 | # Distribution / packaging
15 | .Python
16 |
17 | build/
18 | develop-eggs/
19 | dist/
20 | downloads/
21 | eggs/
22 | .eggs/
23 | lib/
24 | lib64/
25 | parts/
26 | sdist/
27 | var/
28 | wheels/
29 | share/python-wheels/
30 | *.egg-info/
31 | .installed.cfg
32 | *.egg
33 | MANIFEST
34 |
35 | # PyInstaller
36 | # Usually these files are written by a python script from a template
37 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
38 | *.manifest
39 | *.spec
40 |
41 | # Installer logs
42 | pip-log.txt
43 | pip-delete-this-directory.txt
44 |
45 | # Unit test / coverage reports
46 | htmlcov/
47 | .tox/
48 | .nox/
49 | .coverage
50 | .coverage.*
51 | .cache
52 | nosetests.xml
53 | coverage.xml
54 | *.cover
55 | *.py,cover
56 | .hypothesis/
57 | .pytest_cache/
58 | cover/
59 |
60 | # Translations
61 | *.mo
62 | *.pot
63 |
64 | # Django stuff:
65 | *.log
66 | local_settings.py
67 | db.sqlite3
68 | db.sqlite3-journal
69 |
70 | # Flask stuff:
71 | instance/
72 | .webassets-cache
73 |
74 | # Scrapy stuff:
75 | .scrapy
76 |
77 | # Sphinx documentation
78 | docs/_build/
79 |
80 | # PyBuilder
81 | .pybuilder/
82 | target/
83 |
84 | # Jupyter Notebook
85 | .ipynb_checkpoints
86 |
87 | # IPython
88 | profile_default/
89 | ipython_config.py
90 |
91 | # pyenv
92 | # For a library or package, you might want to ignore these files since the code is
93 | # intended to run in multiple environments; otherwise, check them in:
94 | # .python-version
95 |
96 | # pipenv
97 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
98 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
99 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
100 | # install all needed dependencies.
101 | #Pipfile.lock
102 |
103 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
104 | __pypackages__/
105 |
106 | # Celery stuff
107 | celerybeat-schedule
108 | celerybeat.pid
109 |
110 | # SageMath parsed files
111 | *.sage.py
112 |
113 | # Environments
114 | .venv
115 | env/
116 | venv/
117 | ENV/
118 | env.bak/
119 | venv.bak/
120 |
121 | # Spyder project settings
122 | .spyderproject
123 | .spyproject
124 |
125 | # Rope project settings
126 | .ropeproject
127 |
128 | # mkdocs documentation
129 | /site
130 |
131 | # mypy
132 | .mypy_cache/
133 | .dmypy.json
134 | dmypy.json
135 |
136 | # Pyre type checker
137 | .pyre/
138 |
139 | # pytype static type analyzer
140 | .pytype/
141 |
142 | # Cython debug symbols
143 | cython_debug/
144 | .vscode
--------------------------------------------------------------------------------
/templates/home-page.html:
--------------------------------------------------------------------------------
1 | {% extends 'base.html' %}
2 | {% block content %}
3 | {% load static %}
4 | {% load pagination %}
5 |
6 |
7 |
8 | {% include 'category.html' %}
9 |
10 |
11 |
12 |
13 |
14 |
15 | {% for item in object_list %}
16 |
45 | {% endfor %}
46 | {% if object_list.count == 0 %}
47 |
48 |
No items found
49 |
50 | {% endif %}
51 |
52 |
53 |
54 |
55 |
56 | {% if is_paginated %}
57 |
58 |
79 |
80 | {% endif %}
81 |
82 |
83 |
84 | {% endblock %}
85 |
86 |
87 |
--------------------------------------------------------------------------------
/static/scss/core/bootstrap/_functions.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap functions
2 | //
3 | // Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
4 |
5 | // Ascending
6 | // Used to evaluate Sass maps like our grid breakpoints.
7 | @mixin _assert-ascending($map, $map-name) {
8 | $prev-key: null;
9 | $prev-num: null;
10 | @each $key, $num in $map {
11 | @if $prev-num == null or unit($num) == "%" {
12 | // Do nothing
13 | } @else if not comparable($prev-num, $num) {
14 | @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
15 | } @else if $prev-num >= $num {
16 | @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !";
17 | }
18 | $prev-key: $key;
19 | $prev-num: $num;
20 | }
21 | }
22 |
23 | // Starts at zero
24 | // Used to ensure the min-width of the lowest breakpoint starts at 0.
25 | @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
26 | $values: map-values($map);
27 | $first-value: nth($values, 1);
28 | @if $first-value != 0 {
29 | @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
30 | }
31 | }
32 |
33 | // Replace `$search` with `$replace` in `$string`
34 | // Used on our SVG icon backgrounds for custom forms.
35 | //
36 | // @author Hugo Giraudel
37 | // @param {String} $string - Initial string
38 | // @param {String} $search - Substring to replace
39 | // @param {String} $replace ('') - New value
40 | // @return {String} - Updated string
41 | @function str-replace($string, $search, $replace: "") {
42 | $index: str-index($string, $search);
43 |
44 | @if $index {
45 | @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
46 | }
47 |
48 | @return $string;
49 | }
50 |
51 | // Color contrast
52 | @function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
53 | $r: red($color);
54 | $g: green($color);
55 | $b: blue($color);
56 |
57 | $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
58 |
59 | @if ($yiq >= $yiq-contrasted-threshold) {
60 | @return $dark;
61 | } @else {
62 | @return $light;
63 | }
64 | }
65 |
66 | // Retrieve color Sass maps
67 | @function color($key: "blue") {
68 | @return map-get($colors, $key);
69 | }
70 |
71 | @function theme-color($key: "primary") {
72 | @return map-get($theme-colors, $key);
73 | }
74 |
75 | @function gray($key: "100") {
76 | @return map-get($grays, $key);
77 | }
78 |
79 | // Request a theme color level
80 | @function theme-color-level($color-name: "primary", $level: 0) {
81 | $color: theme-color($color-name);
82 | $color-base: if($level > 0, $black, $white);
83 | $level: abs($level);
84 |
85 | @return mix($color-base, $color, $level * $theme-color-interval);
86 | }
87 |
--------------------------------------------------------------------------------
/static_in_env/scss/core/bootstrap/_functions.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap functions
2 | //
3 | // Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
4 |
5 | // Ascending
6 | // Used to evaluate Sass maps like our grid breakpoints.
7 | @mixin _assert-ascending($map, $map-name) {
8 | $prev-key: null;
9 | $prev-num: null;
10 | @each $key, $num in $map {
11 | @if $prev-num == null or unit($num) == "%" {
12 | // Do nothing
13 | } @else if not comparable($prev-num, $num) {
14 | @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
15 | } @else if $prev-num >= $num {
16 | @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !";
17 | }
18 | $prev-key: $key;
19 | $prev-num: $num;
20 | }
21 | }
22 |
23 | // Starts at zero
24 | // Used to ensure the min-width of the lowest breakpoint starts at 0.
25 | @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
26 | $values: map-values($map);
27 | $first-value: nth($values, 1);
28 | @if $first-value != 0 {
29 | @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
30 | }
31 | }
32 |
33 | // Replace `$search` with `$replace` in `$string`
34 | // Used on our SVG icon backgrounds for custom forms.
35 | //
36 | // @author Hugo Giraudel
37 | // @param {String} $string - Initial string
38 | // @param {String} $search - Substring to replace
39 | // @param {String} $replace ('') - New value
40 | // @return {String} - Updated string
41 | @function str-replace($string, $search, $replace: "") {
42 | $index: str-index($string, $search);
43 |
44 | @if $index {
45 | @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
46 | }
47 |
48 | @return $string;
49 | }
50 |
51 | // Color contrast
52 | @function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
53 | $r: red($color);
54 | $g: green($color);
55 | $b: blue($color);
56 |
57 | $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
58 |
59 | @if ($yiq >= $yiq-contrasted-threshold) {
60 | @return $dark;
61 | } @else {
62 | @return $light;
63 | }
64 | }
65 |
66 | // Retrieve color Sass maps
67 | @function color($key: "blue") {
68 | @return map-get($colors, $key);
69 | }
70 |
71 | @function theme-color($key: "primary") {
72 | @return map-get($theme-colors, $key);
73 | }
74 |
75 | @function gray($key: "100") {
76 | @return map-get($grays, $key);
77 | }
78 |
79 | // Request a theme color level
80 | @function theme-color-level($color-name: "primary", $level: 0) {
81 | $color: theme-color($color-name);
82 | $color-base: if($level > 0, $black, $white);
83 | $level: abs($level);
84 |
85 | @return mix($color-base, $color, $level * $theme-color-interval);
86 | }
87 |
--------------------------------------------------------------------------------
/static/js/addons/jquery.zmd.hierarchical-display.min.js:
--------------------------------------------------------------------------------
1 | (function(i){"use strict";function t(t){return this.each(function(){var a=i(this),e=a.data("zmd.hierarchicalDisplay"),o=i.extend({},n.DEFAULTS,a.data(),"object"==typeof t&&t);return e||a.data("zmd.hierarchicalDisplay",e=new n(this,o)),"string"==typeof t?e[t]():o.action in e?e[o.action]():void 0})}var n=function(t,a){this.$element=i(t),this.$children=this.$element.children(),this.options=i.extend({},n.DEFAULTS,a),this._time=n.TRANSITION_DURATION*this.options.speed,this.init(),!0===this.options.debug&&this._debug()};n.VERSION="1.0.1",n.TRANSITION_DURATION=300,n.DEFAULTS={action:"show",speed:5,animationIn:"zoomedIn",animationOut:"zoomedOut",debug:!1},n.prototype.init=function(){var t,n,a,e=this,o=this.$element,s=this.$children,h=this.options,l=this._time;o.addClass("zmd-hierarchical-display"),s.each(function(){t=i(this).position(),n=.8*t.left+t.top,a=parseFloat(n/l).toFixed(2),i(this).css("-webkit-animation-delay",a+"s").css("animation-delay",a+"s")}),this._delay=a,s.last().on("webkitAnimationEnd animationend",function(){i(this).hasClass(h.animationOut)&&e._complete("hidden"),i(this).hasClass(h.animationIn)&&e._complete("shown")})},n.prototype.show=function(){var t=this.$element,n=(this.$children,this.options);t.hasClass("in")||t.hasClass("zmd-hierarchical-displaying")||(this._removeAnimations(),t.trigger(i.Event("show.zmd.hierarchicalDisplay")),this._addAnimation(n.animationIn))},n.prototype.hide=function(){var t=this.$element,n=(this.$children,this.options);"hidden"===t.css("visibility")||t.hasClass("zmd-hierarchical-displaying")||(this._removeAnimations(),t.trigger(i.Event("hide.zmd.hierarchicalDisplay")),this._addAnimation(n.animationOut))},n.prototype.toggle=function(){return this.$element.hasClass("in")?this.hide():this.show()},n.prototype._removeAnimations=function(){var t=this.options;this.$children.each(function(){i(this).removeClass(t.animationIn).removeClass(t.animationOut)})},n.prototype._addAnimation=function(t){this.$element.addClass("zmd-hierarchical-displaying"),this.$children.each(function(){i(this).addClass(t).addClass("animation")})},n.prototype._complete=function(t){this.$element.removeClass("zmd-hierarchical-displaying").toggleClass("in").trigger(i.Event(t+".zmd.hierarchicalDisplay"))},n.prototype._debug=function(){i(document).on("show.zmd.hierarchicalDisplay",function(i){console.log('Event "show.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("shown.zmd.hierarchicalDisplay",function(i){console.log('Event "shown.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("hide.zmd.hierarchicalDisplay",function(i){console.log('Event "hide.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("hidden.zmd.hierarchicalDisplay",function(i){console.log('Event "hidden.zmd.hierarchicalDisplay". For more information see:'),console.log(i)})},i.fn.hierarchicalDisplay=t,i.fn.hierarchicalDisplay.Constructor=n,i(document).on("ready",function(){i('[data-animation="hierarchical-display"]').each(function(){t.call(i(this))})}),i(document).on("click",'[data-toggle="hierarchical-display"]',function(n){var a=i(this),e=i(a.attr("data-target")||a.attr("href"));a.is("a")&&n.preventDefault(),t.call(e,"toggle")})})(jQuery);
--------------------------------------------------------------------------------
/static_in_env/js/addons/jquery.zmd.hierarchical-display.min.js:
--------------------------------------------------------------------------------
1 | (function(i){"use strict";function t(t){return this.each(function(){var a=i(this),e=a.data("zmd.hierarchicalDisplay"),o=i.extend({},n.DEFAULTS,a.data(),"object"==typeof t&&t);return e||a.data("zmd.hierarchicalDisplay",e=new n(this,o)),"string"==typeof t?e[t]():o.action in e?e[o.action]():void 0})}var n=function(t,a){this.$element=i(t),this.$children=this.$element.children(),this.options=i.extend({},n.DEFAULTS,a),this._time=n.TRANSITION_DURATION*this.options.speed,this.init(),!0===this.options.debug&&this._debug()};n.VERSION="1.0.1",n.TRANSITION_DURATION=300,n.DEFAULTS={action:"show",speed:5,animationIn:"zoomedIn",animationOut:"zoomedOut",debug:!1},n.prototype.init=function(){var t,n,a,e=this,o=this.$element,s=this.$children,h=this.options,l=this._time;o.addClass("zmd-hierarchical-display"),s.each(function(){t=i(this).position(),n=.8*t.left+t.top,a=parseFloat(n/l).toFixed(2),i(this).css("-webkit-animation-delay",a+"s").css("animation-delay",a+"s")}),this._delay=a,s.last().on("webkitAnimationEnd animationend",function(){i(this).hasClass(h.animationOut)&&e._complete("hidden"),i(this).hasClass(h.animationIn)&&e._complete("shown")})},n.prototype.show=function(){var t=this.$element,n=(this.$children,this.options);t.hasClass("in")||t.hasClass("zmd-hierarchical-displaying")||(this._removeAnimations(),t.trigger(i.Event("show.zmd.hierarchicalDisplay")),this._addAnimation(n.animationIn))},n.prototype.hide=function(){var t=this.$element,n=(this.$children,this.options);"hidden"===t.css("visibility")||t.hasClass("zmd-hierarchical-displaying")||(this._removeAnimations(),t.trigger(i.Event("hide.zmd.hierarchicalDisplay")),this._addAnimation(n.animationOut))},n.prototype.toggle=function(){return this.$element.hasClass("in")?this.hide():this.show()},n.prototype._removeAnimations=function(){var t=this.options;this.$children.each(function(){i(this).removeClass(t.animationIn).removeClass(t.animationOut)})},n.prototype._addAnimation=function(t){this.$element.addClass("zmd-hierarchical-displaying"),this.$children.each(function(){i(this).addClass(t).addClass("animation")})},n.prototype._complete=function(t){this.$element.removeClass("zmd-hierarchical-displaying").toggleClass("in").trigger(i.Event(t+".zmd.hierarchicalDisplay"))},n.prototype._debug=function(){i(document).on("show.zmd.hierarchicalDisplay",function(i){console.log('Event "show.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("shown.zmd.hierarchicalDisplay",function(i){console.log('Event "shown.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("hide.zmd.hierarchicalDisplay",function(i){console.log('Event "hide.zmd.hierarchicalDisplay". For more information see:'),console.log(i)}).on("hidden.zmd.hierarchicalDisplay",function(i){console.log('Event "hidden.zmd.hierarchicalDisplay". For more information see:'),console.log(i)})},i.fn.hierarchicalDisplay=t,i.fn.hierarchicalDisplay.Constructor=n,i(document).on("ready",function(){i('[data-animation="hierarchical-display"]').each(function(){t.call(i(this))})}),i(document).on("click",'[data-toggle="hierarchical-display"]',function(n){var a=i(this),e=i(a.attr("data-target")||a.attr("href"));a.is("a")&&n.preventDefault(),t.call(e,"toggle")})})(jQuery);
--------------------------------------------------------------------------------
/static/scss/free/_navbars.scss:
--------------------------------------------------------------------------------
1 | // Navbars
2 | .navbar {
3 | box-shadow: $z-depth-1;
4 | font-weight: $navbar-font-weight;
5 | form {
6 | .md-form {
7 | input {
8 | margin: 0 $navbar-form-input-mr $navbar-form-input-mb $navbar-form-input-ml;
9 | }
10 | }
11 | }
12 | .breadcrumb {
13 | margin: 0;
14 | padding: $navbar-breadcrumb-padding-top 0 0 $navbar-breadcrumb-padding-left;
15 | background-color: inherit;
16 | font-size: $navbar-double-font-size;
17 | font-weight: $navbar-font-weight;
18 | .breadcrumb-item {
19 | color: $white-base;
20 | &.active {
21 | color: $navbar-breadcrumb-color;
22 | }
23 | &:before {
24 | color: $navbar-breadcrumb-color;
25 | }
26 | }
27 | }
28 | .navbar-toggler {
29 | outline: 0;
30 | border-width: 0;
31 | }
32 | .nav-flex-icons {
33 | flex-direction: row;
34 | }
35 | .container {
36 | @media (max-width: $medium-screen) {
37 | width: 100%;
38 | .navbar-toggler-right {
39 | right: 0;
40 | }
41 | }
42 | }
43 | .nav-item {
44 | .nav-link {
45 | display: block;
46 | &.disabled {
47 | &:active {
48 | pointer-events: none;
49 | }
50 | }
51 | .fas, .fab, .far {
52 | padding-right: $navbar-flex-icons-padding-lg;
53 | padding-left: $navbar-flex-icons-padding-lg;
54 | }
55 | @media (max-width: $medium-screen) {
56 | padding-right: $navbar-flex-icons-padding-md;
57 | padding-left: $navbar-flex-icons-padding-md;
58 | }
59 | }
60 | }
61 | .dropdown-menu {
62 | position: absolute !important;
63 | margin-top: 0;
64 | a {
65 | padding: $navbar-dropdown-menu-padding;
66 | font-size: $navbar-dropdown-font-size;
67 | font-weight: $navbar-font-weight;
68 | color: $black;
69 | }
70 | form {
71 | @media (max-width: $small-screen) {
72 | width: 17rem;
73 | }
74 | @media (min-width: $small-screen) {
75 | width: 22rem;
76 | }
77 | }
78 | }
79 | &.navbar-light {
80 | @include make-navbar($navbar-light-disabled-color, $navbar-light-toggler-icon, $black, $navbar-light-hover-color, $navbar-light-bg-active-color);
81 | }
82 | &.navbar-dark {
83 | @include make-navbar($navbar-dark-disabled-color, $navbar-dark-toggler-icon, $white, $navbar-dark-hover-color, $navbar-dark-bg-active-color);
84 | }
85 | &.scrolling-navbar {
86 | @media (min-width: $small-screen) {
87 | transition: $navbar-scrolling-transition;
88 | padding-top: $navbar-scrolling-padding;
89 | padding-bottom: $navbar-scrolling-padding;
90 | .navbar-nav > li {
91 | transition-duration: $navbar-scrolling-transition-duration;
92 | }
93 | &.top-nav-collapse {
94 | padding-top: $navbar-top-collapse-padding;
95 | padding-bottom: $navbar-top-collapse-padding;
96 | }
97 | }
98 | }
99 | &.fixed-top,
100 | &.sticky-top {
101 | .navbar-collapse {
102 | @media (min-width: 400px) and (max-width: 767px), (min-width: 800px) and (max-width: 850px) {
103 | max-height: 340px;
104 | overflow-x: hidden;
105 | overflow-y: auto;
106 | }
107 | }
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_navbars.scss:
--------------------------------------------------------------------------------
1 | // Navbars
2 | .navbar {
3 | box-shadow: $z-depth-1;
4 | font-weight: $navbar-font-weight;
5 | form {
6 | .md-form {
7 | input {
8 | margin: 0 $navbar-form-input-mr $navbar-form-input-mb $navbar-form-input-ml;
9 | }
10 | }
11 | }
12 | .breadcrumb {
13 | margin: 0;
14 | padding: $navbar-breadcrumb-padding-top 0 0 $navbar-breadcrumb-padding-left;
15 | background-color: inherit;
16 | font-size: $navbar-double-font-size;
17 | font-weight: $navbar-font-weight;
18 | .breadcrumb-item {
19 | color: $white-base;
20 | &.active {
21 | color: $navbar-breadcrumb-color;
22 | }
23 | &:before {
24 | color: $navbar-breadcrumb-color;
25 | }
26 | }
27 | }
28 | .navbar-toggler {
29 | outline: 0;
30 | border-width: 0;
31 | }
32 | .nav-flex-icons {
33 | flex-direction: row;
34 | }
35 | .container {
36 | @media (max-width: $medium-screen) {
37 | width: 100%;
38 | .navbar-toggler-right {
39 | right: 0;
40 | }
41 | }
42 | }
43 | .nav-item {
44 | .nav-link {
45 | display: block;
46 | &.disabled {
47 | &:active {
48 | pointer-events: none;
49 | }
50 | }
51 | .fas, .fab, .far {
52 | padding-right: $navbar-flex-icons-padding-lg;
53 | padding-left: $navbar-flex-icons-padding-lg;
54 | }
55 | @media (max-width: $medium-screen) {
56 | padding-right: $navbar-flex-icons-padding-md;
57 | padding-left: $navbar-flex-icons-padding-md;
58 | }
59 | }
60 | }
61 | .dropdown-menu {
62 | position: absolute !important;
63 | margin-top: 0;
64 | a {
65 | padding: $navbar-dropdown-menu-padding;
66 | font-size: $navbar-dropdown-font-size;
67 | font-weight: $navbar-font-weight;
68 | color: $black;
69 | }
70 | form {
71 | @media (max-width: $small-screen) {
72 | width: 17rem;
73 | }
74 | @media (min-width: $small-screen) {
75 | width: 22rem;
76 | }
77 | }
78 | }
79 | &.navbar-light {
80 | @include make-navbar($navbar-light-disabled-color, $navbar-light-toggler-icon, $black, $navbar-light-hover-color, $navbar-light-bg-active-color);
81 | }
82 | &.navbar-dark {
83 | @include make-navbar($navbar-dark-disabled-color, $navbar-dark-toggler-icon, $white, $navbar-dark-hover-color, $navbar-dark-bg-active-color);
84 | }
85 | &.scrolling-navbar {
86 | @media (min-width: $small-screen) {
87 | transition: $navbar-scrolling-transition;
88 | padding-top: $navbar-scrolling-padding;
89 | padding-bottom: $navbar-scrolling-padding;
90 | .navbar-nav > li {
91 | transition-duration: $navbar-scrolling-transition-duration;
92 | }
93 | &.top-nav-collapse {
94 | padding-top: $navbar-top-collapse-padding;
95 | padding-bottom: $navbar-top-collapse-padding;
96 | }
97 | }
98 | }
99 | &.fixed-top,
100 | &.sticky-top {
101 | .navbar-collapse {
102 | @media (min-width: 400px) and (max-width: 767px), (min-width: 800px) and (max-width: 850px) {
103 | max-height: 340px;
104 | overflow-x: hidden;
105 | overflow-y: auto;
106 | }
107 | }
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/static/css/addons/datatables.min.css:
--------------------------------------------------------------------------------
1 | div.dataTables_wrapper div.dataTables_filter input,div.dataTables_wrapper div.dataTables_filter select,div.dataTables_wrapper div.dataTables_length input,div.dataTables_wrapper div.dataTables_length select{width:auto}table.dataTable thead{cursor:pointer}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label{margin-top:1.2rem;margin-right:1rem}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown,div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span{margin-top:1rem}div.dataTables_wrapper div.dataTables_filter label,div.dataTables_wrapper div.dataTables_length label{text-align:left;font-weight:400;padding-top:.5rem;padding-bottom:.5rem}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5rem;display:inline-block}div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{font-weight:400;padding-top:1rem;padding-bottom:1rem}div.dataTables_wrapper div.dataTables_paginate{text-align:right;margin:0}div.dataTables_wrapper div.dataTables_paginate ul.pagination{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus{background-color:#4285f4}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus{-webkit-box-shadow:none;box-shadow:none}@media (max-width:767px){div.dataTables_wrapper div .dataTables_filter,div.dataTables_wrapper div .dataTables_info,div.dataTables_wrapper div .dataTables_length,div.dataTables_wrapper div .dataTables_paginate ul.pagination{text-align:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.bs-select select{display:inline-block!important}table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc{padding-right:30px}table.dataTable thead>tr>td:active,table.dataTable thead>tr>th:active{outline:0}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:after,table.dataTable thead .sorting_desc_disabled:before{position:absolute;bottom:.9em;display:block;opacity:.3;font-family:'Font Awesome\ 5 Free';font-weight:900;font-size:1rem}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\f0de"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc_disabled:after{content:"\f0dd";right:16px}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}
--------------------------------------------------------------------------------
/static_in_env/css/addons/datatables.min.css:
--------------------------------------------------------------------------------
1 | div.dataTables_wrapper div.dataTables_filter input,div.dataTables_wrapper div.dataTables_filter select,div.dataTables_wrapper div.dataTables_length input,div.dataTables_wrapper div.dataTables_length select{width:auto}table.dataTable thead{cursor:pointer}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label{margin-top:1.2rem;margin-right:1rem}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown,div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span{margin-top:1rem}div.dataTables_wrapper div.dataTables_filter label,div.dataTables_wrapper div.dataTables_length label{text-align:left;font-weight:400;padding-top:.5rem;padding-bottom:.5rem}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5rem;display:inline-block}div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{font-weight:400;padding-top:1rem;padding-bottom:1rem}div.dataTables_wrapper div.dataTables_paginate{text-align:right;margin:0}div.dataTables_wrapper div.dataTables_paginate ul.pagination{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus{background-color:#4285f4}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus{-webkit-box-shadow:none;box-shadow:none}@media (max-width:767px){div.dataTables_wrapper div .dataTables_filter,div.dataTables_wrapper div .dataTables_info,div.dataTables_wrapper div .dataTables_length,div.dataTables_wrapper div .dataTables_paginate ul.pagination{text-align:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.bs-select select{display:inline-block!important}table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc{padding-right:30px}table.dataTable thead>tr>td:active,table.dataTable thead>tr>th:active{outline:0}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:after,table.dataTable thead .sorting_desc_disabled:before{position:absolute;bottom:.9em;display:block;opacity:.3;font-family:'Font Awesome\ 5 Free';font-weight:900;font-size:1rem}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\f0de"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc_disabled:after{content:"\f0dd";right:16px}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}
--------------------------------------------------------------------------------
/static/scss/free/_animations-basic.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * animate.css -http://daneden.me/animate
3 | * Version - 3.7.0
4 | * Licensed under the MIT license - http://opensource.org/licenses/MIT
5 | *
6 | * Copyright (c) 2018 Daniel Eden
7 | */
8 | .animated {
9 | animation-duration: 1s;
10 | animation-fill-mode: both;
11 | &.infinite {
12 | animation-iteration-count: infinite;
13 | }
14 | &.delay-1s {
15 | animation-delay: 1s;
16 | }
17 | &.delay-2s {
18 | animation-delay: 2s;
19 | }
20 | &.delay-3s {
21 | animation-delay: 3s;
22 | }
23 | &.delay-4s {
24 | animation-delay: 4s;
25 | }
26 | &.delay-5s {
27 | animation-delay: 5s;
28 | }
29 | &.fast {
30 | animation-duration: 800ms;
31 | }
32 | &.faster {
33 | animation-duration: 500ms;
34 | }
35 | &.slow {
36 | animation-duration: 2s;
37 | }
38 | &.slower {
39 | animation-duration: 3s;
40 | }
41 | }
42 |
43 | @media (prefers-reduced-motion) {
44 | .animated {
45 | animation: unset !important;
46 | transition: none !important;
47 | }
48 | }
49 |
50 | @keyframes fadeIn {
51 | from {
52 | opacity: 0;
53 | }
54 |
55 | to {
56 | opacity: 1;
57 | }
58 | }
59 |
60 | .fadeIn {
61 | animation-name: fadeIn;
62 | }
63 |
64 | @keyframes fadeInDown {
65 | from {
66 | opacity: 0;
67 | transform: translate3d(0, -100%, 0);
68 | }
69 |
70 | to {
71 | opacity: 1;
72 | transform: translate3d(0, 0, 0);
73 | }
74 | }
75 |
76 | .fadeInDown {
77 | animation-name: fadeInDown;
78 | }
79 |
80 | @keyframes fadeInLeft {
81 | from {
82 | opacity: 0;
83 | transform: translate3d(-100%, 0, 0);
84 | }
85 |
86 | to {
87 | opacity: 1;
88 | transform: translate3d(0, 0, 0);
89 | }
90 | }
91 |
92 | .fadeInLeft {
93 | animation-name: fadeInLeft;
94 | }
95 |
96 |
97 | @keyframes fadeInRight {
98 | from {
99 | opacity: 0;
100 | transform: translate3d(100%, 0, 0);
101 | }
102 |
103 | to {
104 | opacity: 1;
105 | transform: translate3d(0, 0, 0);
106 | }
107 | }
108 |
109 | .fadeInRight {
110 | animation-name: fadeInRight;
111 | }
112 |
113 |
114 | @keyframes fadeInUp {
115 | from {
116 | opacity: 0;
117 | transform: translate3d(0, 100%, 0);
118 | }
119 |
120 | to {
121 | opacity: 1;
122 | transform: translate3d(0, 0, 0);
123 | }
124 | }
125 |
126 | .fadeInUp {
127 | animation-name: fadeInUp;
128 | }
129 |
130 |
131 | @keyframes fadeOut {
132 | from {
133 | opacity: 1;
134 | }
135 |
136 | to {
137 | opacity: 0;
138 | }
139 | }
140 |
141 | .fadeOut {
142 | animation-name: fadeOut;
143 | }
144 |
145 |
146 | @keyframes fadeOutDown {
147 | from {
148 | opacity: 1;
149 | }
150 |
151 | to {
152 | opacity: 0;
153 | transform: translate3d(0, 100%, 0);
154 | }
155 | }
156 |
157 | .fadeOutDown {
158 | animation-name: fadeOutDown;
159 | }
160 |
161 |
162 | @keyframes fadeOutLeft {
163 | from {
164 | opacity: 1;
165 | }
166 |
167 | to {
168 | opacity: 0;
169 | transform: translate3d(-100%, 0, 0);
170 | }
171 | }
172 |
173 | .fadeOutLeft {
174 | animation-name: fadeOutLeft;
175 | }
176 |
177 |
178 | @keyframes fadeOutRight {
179 | from {
180 | opacity: 1;
181 | }
182 |
183 | to {
184 | opacity: 0;
185 | transform: translate3d(100%, 0, 0);
186 | }
187 | }
188 |
189 | .fadeOutRight {
190 | animation-name: fadeOutRight;
191 | }
192 |
193 |
194 | @keyframes fadeOutUp {
195 | from {
196 | opacity: 1;
197 | }
198 |
199 | to {
200 | opacity: 0;
201 | transform: translate3d(0, -100%, 0);
202 | }
203 | }
204 |
205 | .fadeOutUp {
206 | animation-name: fadeOutUp;
207 | }
208 |
--------------------------------------------------------------------------------
/static_in_env/scss/free/_animations-basic.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * animate.css -http://daneden.me/animate
3 | * Version - 3.7.0
4 | * Licensed under the MIT license - http://opensource.org/licenses/MIT
5 | *
6 | * Copyright (c) 2018 Daniel Eden
7 | */
8 | .animated {
9 | animation-duration: 1s;
10 | animation-fill-mode: both;
11 | &.infinite {
12 | animation-iteration-count: infinite;
13 | }
14 | &.delay-1s {
15 | animation-delay: 1s;
16 | }
17 | &.delay-2s {
18 | animation-delay: 2s;
19 | }
20 | &.delay-3s {
21 | animation-delay: 3s;
22 | }
23 | &.delay-4s {
24 | animation-delay: 4s;
25 | }
26 | &.delay-5s {
27 | animation-delay: 5s;
28 | }
29 | &.fast {
30 | animation-duration: 800ms;
31 | }
32 | &.faster {
33 | animation-duration: 500ms;
34 | }
35 | &.slow {
36 | animation-duration: 2s;
37 | }
38 | &.slower {
39 | animation-duration: 3s;
40 | }
41 | }
42 |
43 | @media (prefers-reduced-motion) {
44 | .animated {
45 | animation: unset !important;
46 | transition: none !important;
47 | }
48 | }
49 |
50 | @keyframes fadeIn {
51 | from {
52 | opacity: 0;
53 | }
54 |
55 | to {
56 | opacity: 1;
57 | }
58 | }
59 |
60 | .fadeIn {
61 | animation-name: fadeIn;
62 | }
63 |
64 | @keyframes fadeInDown {
65 | from {
66 | opacity: 0;
67 | transform: translate3d(0, -100%, 0);
68 | }
69 |
70 | to {
71 | opacity: 1;
72 | transform: translate3d(0, 0, 0);
73 | }
74 | }
75 |
76 | .fadeInDown {
77 | animation-name: fadeInDown;
78 | }
79 |
80 | @keyframes fadeInLeft {
81 | from {
82 | opacity: 0;
83 | transform: translate3d(-100%, 0, 0);
84 | }
85 |
86 | to {
87 | opacity: 1;
88 | transform: translate3d(0, 0, 0);
89 | }
90 | }
91 |
92 | .fadeInLeft {
93 | animation-name: fadeInLeft;
94 | }
95 |
96 |
97 | @keyframes fadeInRight {
98 | from {
99 | opacity: 0;
100 | transform: translate3d(100%, 0, 0);
101 | }
102 |
103 | to {
104 | opacity: 1;
105 | transform: translate3d(0, 0, 0);
106 | }
107 | }
108 |
109 | .fadeInRight {
110 | animation-name: fadeInRight;
111 | }
112 |
113 |
114 | @keyframes fadeInUp {
115 | from {
116 | opacity: 0;
117 | transform: translate3d(0, 100%, 0);
118 | }
119 |
120 | to {
121 | opacity: 1;
122 | transform: translate3d(0, 0, 0);
123 | }
124 | }
125 |
126 | .fadeInUp {
127 | animation-name: fadeInUp;
128 | }
129 |
130 |
131 | @keyframes fadeOut {
132 | from {
133 | opacity: 1;
134 | }
135 |
136 | to {
137 | opacity: 0;
138 | }
139 | }
140 |
141 | .fadeOut {
142 | animation-name: fadeOut;
143 | }
144 |
145 |
146 | @keyframes fadeOutDown {
147 | from {
148 | opacity: 1;
149 | }
150 |
151 | to {
152 | opacity: 0;
153 | transform: translate3d(0, 100%, 0);
154 | }
155 | }
156 |
157 | .fadeOutDown {
158 | animation-name: fadeOutDown;
159 | }
160 |
161 |
162 | @keyframes fadeOutLeft {
163 | from {
164 | opacity: 1;
165 | }
166 |
167 | to {
168 | opacity: 0;
169 | transform: translate3d(-100%, 0, 0);
170 | }
171 | }
172 |
173 | .fadeOutLeft {
174 | animation-name: fadeOutLeft;
175 | }
176 |
177 |
178 | @keyframes fadeOutRight {
179 | from {
180 | opacity: 1;
181 | }
182 |
183 | to {
184 | opacity: 0;
185 | transform: translate3d(100%, 0, 0);
186 | }
187 | }
188 |
189 | .fadeOutRight {
190 | animation-name: fadeOutRight;
191 | }
192 |
193 |
194 | @keyframes fadeOutUp {
195 | from {
196 | opacity: 1;
197 | }
198 |
199 | to {
200 | opacity: 0;
201 | transform: translate3d(0, -100%, 0);
202 | }
203 | }
204 |
205 | .fadeOutUp {
206 | animation-name: fadeOutUp;
207 | }
208 |
--------------------------------------------------------------------------------
/static/scss/core/_typography.scss:
--------------------------------------------------------------------------------
1 | // Typography
2 |
3 | // Roboto font
4 | @font-face {
5 | font-family: "Roboto";
6 | src: local(Roboto Thin),
7 | url("#{$roboto-font-path}Roboto-Thin.eot");
8 | src: url("#{$roboto-font-path}Roboto-Thin.eot?#iefix") format("embedded-opentype"),
9 | url("#{$roboto-font-path}Roboto-Thin.woff2") format("woff2"),
10 | url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"),
11 | url("#{$roboto-font-path}Roboto-Thin.ttf") format("truetype");
12 | font-weight: 200;
13 | }
14 |
15 | @font-face {
16 | font-family: "Roboto";
17 | src: local(Roboto Light),
18 | url("#{$roboto-font-path}Roboto-Light.eot");
19 | src: url("#{$roboto-font-path}Roboto-Light.eot?#iefix") format("embedded-opentype"),
20 | url("#{$roboto-font-path}Roboto-Light.woff2") format("woff2"),
21 | url("#{$roboto-font-path}Roboto-Light.woff") format("woff"),
22 | url("#{$roboto-font-path}Roboto-Light.ttf") format("truetype");
23 | font-weight: 300;
24 | }
25 |
26 | @font-face {
27 | font-family: "Roboto";
28 | src: local(Roboto Regular),
29 | url("#{$roboto-font-path}Roboto-Regular.eot");
30 | src: url("#{$roboto-font-path}Roboto-Regular.eot?#iefix") format("embedded-opentype"),
31 | url("#{$roboto-font-path}Roboto-Regular.woff2") format("woff2"),
32 | url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"),
33 | url("#{$roboto-font-path}Roboto-Regular.ttf") format("truetype");
34 | font-weight: 400;
35 | }
36 |
37 | @font-face {
38 | font-family: "Roboto";
39 | src: url("#{$roboto-font-path}Roboto-Medium.eot");
40 | src: url("#{$roboto-font-path}Roboto-Medium.eot?#iefix") format("embedded-opentype"),
41 | url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"),
42 | url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"),
43 | url("#{$roboto-font-path}Roboto-Medium.ttf") format("truetype");
44 | font-weight: 500;
45 | }
46 |
47 | @font-face {
48 | font-family: "Roboto";
49 | src: url("#{$roboto-font-path}Roboto-Bold.eot");
50 | src: url("#{$roboto-font-path}Roboto-Bold.eot?#iefix") format("embedded-opentype"),
51 | url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"),
52 | url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"),
53 | url("#{$roboto-font-path}Roboto-Bold.ttf") format("truetype");
54 | font-weight: 700;
55 | }
56 |
57 | // General properties
58 | body {
59 | font-family: $mdb-font-family;
60 | font-weight: $font-weight-light;
61 | }
62 |
63 | h1, h2, h3, h4, h5, h6 {
64 | font-weight: $font-weight-light;
65 | }
66 |
67 | // Blockquote
68 | .blockquote {
69 | padding: $blockquote-padding-y $blockquote-padding-x;
70 | border-left: .25rem solid #eceeef;
71 | &.text-right {
72 | border-left: none;
73 | border-right: .25rem solid #eceeef;
74 | }
75 | .bq-title {
76 | margin-bottom: 0;
77 | font-size: $font-size-large;
78 | font-weight: 400;
79 | }
80 | p {
81 | padding: $blockquote-p-padding-y 0;
82 | font-size: $blockquote-p-font-size;
83 | }
84 | }
85 |
86 | @each $name, $color in $basic {
87 | .bq-#{$name} {
88 | border-left: 3px solid $color !important;
89 | .bq-title {
90 | color: $color !important;
91 | }
92 | }
93 | }
94 |
95 | // Responsive headings
96 | @each $key, $val in $grid-breakpoints {
97 | @include media-breakpoint-up($key) {
98 | $y: map-get($responsive-headings, $key);
99 | @each $name, $value in $y {
100 | .#{$name}-responsive {
101 | font-size: $value;
102 | }
103 | }
104 | }
105 | }
106 |
107 | @each $name, $color in $basic-mdb-colors {
108 | @include text-emphasis-variant(".text-#{$name}", $color);
109 | }
110 |
111 | .font-small {
112 | font-size: $font-size-small;
113 | }
114 |
--------------------------------------------------------------------------------
/static_in_env/scss/core/_typography.scss:
--------------------------------------------------------------------------------
1 | // Typography
2 |
3 | // Roboto font
4 | @font-face {
5 | font-family: "Roboto";
6 | src: local(Roboto Thin),
7 | url("#{$roboto-font-path}Roboto-Thin.eot");
8 | src: url("#{$roboto-font-path}Roboto-Thin.eot?#iefix") format("embedded-opentype"),
9 | url("#{$roboto-font-path}Roboto-Thin.woff2") format("woff2"),
10 | url("#{$roboto-font-path}Roboto-Thin.woff") format("woff"),
11 | url("#{$roboto-font-path}Roboto-Thin.ttf") format("truetype");
12 | font-weight: 200;
13 | }
14 |
15 | @font-face {
16 | font-family: "Roboto";
17 | src: local(Roboto Light),
18 | url("#{$roboto-font-path}Roboto-Light.eot");
19 | src: url("#{$roboto-font-path}Roboto-Light.eot?#iefix") format("embedded-opentype"),
20 | url("#{$roboto-font-path}Roboto-Light.woff2") format("woff2"),
21 | url("#{$roboto-font-path}Roboto-Light.woff") format("woff"),
22 | url("#{$roboto-font-path}Roboto-Light.ttf") format("truetype");
23 | font-weight: 300;
24 | }
25 |
26 | @font-face {
27 | font-family: "Roboto";
28 | src: local(Roboto Regular),
29 | url("#{$roboto-font-path}Roboto-Regular.eot");
30 | src: url("#{$roboto-font-path}Roboto-Regular.eot?#iefix") format("embedded-opentype"),
31 | url("#{$roboto-font-path}Roboto-Regular.woff2") format("woff2"),
32 | url("#{$roboto-font-path}Roboto-Regular.woff") format("woff"),
33 | url("#{$roboto-font-path}Roboto-Regular.ttf") format("truetype");
34 | font-weight: 400;
35 | }
36 |
37 | @font-face {
38 | font-family: "Roboto";
39 | src: url("#{$roboto-font-path}Roboto-Medium.eot");
40 | src: url("#{$roboto-font-path}Roboto-Medium.eot?#iefix") format("embedded-opentype"),
41 | url("#{$roboto-font-path}Roboto-Medium.woff2") format("woff2"),
42 | url("#{$roboto-font-path}Roboto-Medium.woff") format("woff"),
43 | url("#{$roboto-font-path}Roboto-Medium.ttf") format("truetype");
44 | font-weight: 500;
45 | }
46 |
47 | @font-face {
48 | font-family: "Roboto";
49 | src: url("#{$roboto-font-path}Roboto-Bold.eot");
50 | src: url("#{$roboto-font-path}Roboto-Bold.eot?#iefix") format("embedded-opentype"),
51 | url("#{$roboto-font-path}Roboto-Bold.woff2") format("woff2"),
52 | url("#{$roboto-font-path}Roboto-Bold.woff") format("woff"),
53 | url("#{$roboto-font-path}Roboto-Bold.ttf") format("truetype");
54 | font-weight: 700;
55 | }
56 |
57 | // General properties
58 | body {
59 | font-family: $mdb-font-family;
60 | font-weight: $font-weight-light;
61 | }
62 |
63 | h1, h2, h3, h4, h5, h6 {
64 | font-weight: $font-weight-light;
65 | }
66 |
67 | // Blockquote
68 | .blockquote {
69 | padding: $blockquote-padding-y $blockquote-padding-x;
70 | border-left: .25rem solid #eceeef;
71 | &.text-right {
72 | border-left: none;
73 | border-right: .25rem solid #eceeef;
74 | }
75 | .bq-title {
76 | margin-bottom: 0;
77 | font-size: $font-size-large;
78 | font-weight: 400;
79 | }
80 | p {
81 | padding: $blockquote-p-padding-y 0;
82 | font-size: $blockquote-p-font-size;
83 | }
84 | }
85 |
86 | @each $name, $color in $basic {
87 | .bq-#{$name} {
88 | border-left: 3px solid $color !important;
89 | .bq-title {
90 | color: $color !important;
91 | }
92 | }
93 | }
94 |
95 | // Responsive headings
96 | @each $key, $val in $grid-breakpoints {
97 | @include media-breakpoint-up($key) {
98 | $y: map-get($responsive-headings, $key);
99 | @each $name, $value in $y {
100 | .#{$name}-responsive {
101 | font-size: $value;
102 | }
103 | }
104 | }
105 | }
106 |
107 | @each $name, $color in $basic-mdb-colors {
108 | @include text-emphasis-variant(".text-#{$name}", $color);
109 | }
110 |
111 | .font-small {
112 | font-size: $font-size-small;
113 | }
114 |
--------------------------------------------------------------------------------
/static/scss/core/_global.scss:
--------------------------------------------------------------------------------
1 | // Globals
2 | // Full palette of colors
3 | @each $color_name, $color in $mdb-colors-1 {
4 | @each $color_type, $color_value in $color {
5 | @if $color_type == "base" {
6 | .#{$color_name} {
7 | background-color: $color_value !important;
8 | }
9 | .#{$color_name}-text {
10 | color: $color-value !important;
11 | }
12 | .rgba-#{$color_name}-slight,
13 | .rgba-#{$color_name}-slight:after {
14 | background-color: rgba($color_value, .1);
15 | }
16 | .rgba-#{$color_name}-light,
17 | .rgba-#{$color_name}-light:after {
18 | background-color: rgba($color_value, .3);
19 | }
20 | .rgba-#{$color_name}-strong,
21 | .rgba-#{$color_name}-strong:after {
22 | background-color: rgba($color_value, .7);
23 | }
24 | }
25 | @else {
26 | @if $enable_full_palette {
27 | .#{$color_name}.#{$color_type} {
28 | background-color: $color_value !important;
29 | }
30 | }
31 | }
32 | }
33 | }
34 |
35 | // Stylish color
36 | @each $color_name, $color_value in $stylish-rgba {
37 | .#{$color_name} {
38 | background-color: $color_value;
39 | }
40 | }
41 |
42 | // Material colors palette
43 | @each $color_name, $color in $material-colors {
44 | .#{$color_name} {
45 | background-color: $color !important;
46 | }
47 | }
48 |
49 | // Basic gradients
50 | @each $name, $val in $gradients {
51 | @include make-gradient($name, $val);
52 | }
53 | @each $name, $val in $gradients-rgba {
54 | @include make-gradient-rgba($name, $val);
55 | }
56 |
57 | .dark-grey-text {
58 | color: #4f4f4f !important;
59 | &:hover,
60 | &:focus {
61 | color: #4f4f4f !important;
62 | }
63 | }
64 |
65 | // Shadow on hover
66 | .hoverable {
67 | box-shadow: none;
68 | transition: $transition-hoverable;
69 | &:hover {
70 | box-shadow: $z-depth-2;
71 | transition: $transition-hoverable;
72 | }
73 | }
74 |
75 | // Shadows
76 | .z-depth-0 {
77 | box-shadow: none !important;
78 | }
79 | .z-depth-1 {
80 | box-shadow: $z-depth-1 !important;
81 | }
82 | .z-depth-1-half {
83 | box-shadow: $z-depth-1-half !important;
84 | }
85 | .z-depth-2 {
86 | box-shadow: $z-depth-2 !important;
87 | }
88 | .z-depth-3 {
89 | box-shadow: $z-depth-3 !important;
90 | }
91 | .z-depth-4 {
92 | box-shadow: $z-depth-4 !important;
93 | }
94 | .z-depth-5 {
95 | box-shadow: $z-depth-5 !important;
96 | }
97 |
98 | // Disabled cursor
99 | .disabled,
100 | :disabled {
101 | pointer-events: none !important;
102 | }
103 |
104 | // Links
105 | a {
106 | cursor: pointer;
107 | text-decoration: none;
108 | color: $link-color;
109 | transition: $transition-basic;
110 | &:hover {
111 | text-decoration: none;
112 | color: $link-hover-color;
113 | transition: $transition-basic;
114 | }
115 | &.disabled,
116 | &:disabled {
117 | &:hover {
118 | color: $link-color;
119 | }
120 | }
121 | }
122 |
123 | a:not([href]):not([tabindex]), a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
124 | color: inherit;
125 | text-decoration: none;
126 | }
127 |
128 | // Divider
129 | .divider-new {
130 | flex-direction: row;
131 | justify-content: center;
132 | align-items: center;
133 | display: flex;
134 | margin-top: $divider-margin-y;
135 | margin-bottom: $divider-margin-y;
136 | > h1, h2, h3, h4, h5, h6 {
137 | margin-bottom: 0;
138 | }
139 | &:before,
140 | &:after {
141 | content: "";
142 | height: 1.5px;
143 | flex: 1;
144 | height: $divider-height;
145 | background: #c6c6c6;
146 | }
147 | &:before {
148 | margin: 0 $divider-margin-x 0 0;
149 | }
150 | &:after {
151 | margin: 0 0 0 $divider-margin-x;
152 | }
153 | }
--------------------------------------------------------------------------------
/static_in_env/scss/core/_global.scss:
--------------------------------------------------------------------------------
1 | // Globals
2 | // Full palette of colors
3 | @each $color_name, $color in $mdb-colors-1 {
4 | @each $color_type, $color_value in $color {
5 | @if $color_type == "base" {
6 | .#{$color_name} {
7 | background-color: $color_value !important;
8 | }
9 | .#{$color_name}-text {
10 | color: $color-value !important;
11 | }
12 | .rgba-#{$color_name}-slight,
13 | .rgba-#{$color_name}-slight:after {
14 | background-color: rgba($color_value, .1);
15 | }
16 | .rgba-#{$color_name}-light,
17 | .rgba-#{$color_name}-light:after {
18 | background-color: rgba($color_value, .3);
19 | }
20 | .rgba-#{$color_name}-strong,
21 | .rgba-#{$color_name}-strong:after {
22 | background-color: rgba($color_value, .7);
23 | }
24 | }
25 | @else {
26 | @if $enable_full_palette {
27 | .#{$color_name}.#{$color_type} {
28 | background-color: $color_value !important;
29 | }
30 | }
31 | }
32 | }
33 | }
34 |
35 | // Stylish color
36 | @each $color_name, $color_value in $stylish-rgba {
37 | .#{$color_name} {
38 | background-color: $color_value;
39 | }
40 | }
41 |
42 | // Material colors palette
43 | @each $color_name, $color in $material-colors {
44 | .#{$color_name} {
45 | background-color: $color !important;
46 | }
47 | }
48 |
49 | // Basic gradients
50 | @each $name, $val in $gradients {
51 | @include make-gradient($name, $val);
52 | }
53 | @each $name, $val in $gradients-rgba {
54 | @include make-gradient-rgba($name, $val);
55 | }
56 |
57 | .dark-grey-text {
58 | color: #4f4f4f !important;
59 | &:hover,
60 | &:focus {
61 | color: #4f4f4f !important;
62 | }
63 | }
64 |
65 | // Shadow on hover
66 | .hoverable {
67 | box-shadow: none;
68 | transition: $transition-hoverable;
69 | &:hover {
70 | box-shadow: $z-depth-2;
71 | transition: $transition-hoverable;
72 | }
73 | }
74 |
75 | // Shadows
76 | .z-depth-0 {
77 | box-shadow: none !important;
78 | }
79 | .z-depth-1 {
80 | box-shadow: $z-depth-1 !important;
81 | }
82 | .z-depth-1-half {
83 | box-shadow: $z-depth-1-half !important;
84 | }
85 | .z-depth-2 {
86 | box-shadow: $z-depth-2 !important;
87 | }
88 | .z-depth-3 {
89 | box-shadow: $z-depth-3 !important;
90 | }
91 | .z-depth-4 {
92 | box-shadow: $z-depth-4 !important;
93 | }
94 | .z-depth-5 {
95 | box-shadow: $z-depth-5 !important;
96 | }
97 |
98 | // Disabled cursor
99 | .disabled,
100 | :disabled {
101 | pointer-events: none !important;
102 | }
103 |
104 | // Links
105 | a {
106 | cursor: pointer;
107 | text-decoration: none;
108 | color: $link-color;
109 | transition: $transition-basic;
110 | &:hover {
111 | text-decoration: none;
112 | color: $link-hover-color;
113 | transition: $transition-basic;
114 | }
115 | &.disabled,
116 | &:disabled {
117 | &:hover {
118 | color: $link-color;
119 | }
120 | }
121 | }
122 |
123 | a:not([href]):not([tabindex]), a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
124 | color: inherit;
125 | text-decoration: none;
126 | }
127 |
128 | // Divider
129 | .divider-new {
130 | flex-direction: row;
131 | justify-content: center;
132 | align-items: center;
133 | display: flex;
134 | margin-top: $divider-margin-y;
135 | margin-bottom: $divider-margin-y;
136 | > h1, h2, h3, h4, h5, h6 {
137 | margin-bottom: 0;
138 | }
139 | &:before,
140 | &:after {
141 | content: "";
142 | height: 1.5px;
143 | flex: 1;
144 | height: $divider-height;
145 | background: #c6c6c6;
146 | }
147 | &:before {
148 | margin: 0 $divider-margin-x 0 0;
149 | }
150 | &:after {
151 | margin: 0 0 0 $divider-margin-x;
152 | }
153 | }
--------------------------------------------------------------------------------