├── .gitignore ├── .idea ├── .gitignore ├── inspectionProfiles │ └── profiles_settings.xml ├── kinobase.iml ├── misc.xml ├── modules.xml └── vcs.xml ├── __pycache__ └── locustfile.cpython-38.pyc ├── db.sqlite3 ├── kinobase ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-38.pyc │ ├── config.cpython-38.pyc │ ├── settings.cpython-38.pyc │ ├── urls.cpython-38.pyc │ └── wsgi.cpython-38.pyc ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py ├── locustfile.py ├── manage.py ├── media ├── actor_images │ ├── 68f6690f907e7d69c108544664c80e63.jpg │ ├── Chris-Hemsworth.jpg │ ├── hollywood-highest-paid-actor-actress.webp │ └── main-qimg-fa166cb42693e4643faeb6340a056934-lq.jpg └── movie_posters │ └── 2022 │ └── 05 │ ├── 072bcf18ab120aa5d013.jpg │ ├── 111ebbb72ac9ad1359ea.jpg │ ├── 1b6d23a63c2998c00377.jpg │ ├── 1c4dea714f8fa0a66c88.jpg │ ├── 2a27789eff43cde7b9bc.jpg │ ├── 3fc6679caf702799f3c6.jpg │ ├── 45078f059368e2456d2e.jpg │ ├── 5e6f327aa911f706ade2.jpg │ ├── 64c0480d66a92778fc93.jpg │ ├── 6695970f62d2a9cabcf2.jpg │ ├── 67291dcfd8f3bcb5cacd.jpg │ ├── 6c4b358298363eb52f0e.jpg │ ├── 78bc3c8724a76e268628.jpg │ ├── 86389b716b7e665fdd42.jpg │ ├── 8e3f12cf79dbb30f82c4.jpg │ ├── 95747f24e3e1223a106c.jpg │ ├── ccfc586ad4559035617d.jpg │ └── e776a924173345884428.jpg ├── movie ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-38.pyc │ ├── admin.cpython-38.pyc │ ├── apps.cpython-38.pyc │ ├── context_pro.cpython-38.pyc │ ├── forms.cpython-38.pyc │ ├── models.cpython-38.pyc │ ├── urls.cpython-38.pyc │ └── views.cpython-38.pyc ├── admin.py ├── apps.py ├── context_pro.py ├── forms.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_movie_poster.py │ ├── 0003_auto_20220510_1725.py │ ├── 0004_auto_20220510_1726.py │ ├── 0005_comment.py │ ├── 0006_alter_comment_movie.py │ ├── 0007_alter_comment_options.py │ ├── 0008_likedmovielist.py │ ├── 0009_auto_20220524_1708.py │ ├── 0010_auto_20220524_1711.py │ ├── 0011_alter_likedmovielist_movie.py │ ├── 0012_alter_likedmovielist_movie.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-38.pyc │ │ ├── 0002_movie_poster.cpython-38.pyc │ │ ├── 0003_auto_20220510_1725.cpython-38.pyc │ │ ├── 0004_auto_20220510_1726.cpython-38.pyc │ │ ├── 0005_comment.cpython-38.pyc │ │ ├── 0006_alter_comment_movie.cpython-38.pyc │ │ ├── 0007_alter_comment_options.cpython-38.pyc │ │ ├── 0008_likedmovielist.cpython-38.pyc │ │ ├── 0009_auto_20220524_1708.cpython-38.pyc │ │ ├── 0010_auto_20220524_1711.cpython-38.pyc │ │ ├── 0011_alter_likedmovielist_movie.cpython-38.pyc │ │ ├── 0012_alter_likedmovielist_movie.cpython-38.pyc │ │ └── __init__.cpython-38.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── requirements.txt ├── staticfiles └── static │ ├── css │ ├── bootstrap.css │ ├── kinobase.css │ └── master.css │ ├── favicon.ico │ ├── favicon.png │ ├── fonts │ ├── fontello.eot │ ├── fontello.svg │ ├── fontello.ttf │ ├── fontello.woff │ ├── glyphicons-halflings-regular-1.eot │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 │ ├── images │ └── logo2.png │ ├── js │ ├── bootstrap.js │ ├── jquery.js │ └── master.js │ └── player │ └── 378 │ ├── hls.js │ └── playerjs.js └── templates ├── 404.html ├── base.html ├── index.html ├── liked-movies.html ├── list.html ├── movie-detail.html ├── registration ├── login.html ├── password_reset_confirm.html ├── password_reset_done.html ├── password_reset_email.html ├── password_reset_form.html ├── password_reset_sent.html ├── recover.html └── registration.html ├── search_list.html └── soon.html /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | kinobase/config.py 3 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/kinobase.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /__pycache__/locustfile.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/__pycache__/locustfile.cpython-38.pyc -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/db.sqlite3 -------------------------------------------------------------------------------- /kinobase/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/kinobase/__init__.py -------------------------------------------------------------------------------- /kinobase/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/kinobase/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /kinobase/__pycache__/config.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/kinobase/__pycache__/config.cpython-38.pyc -------------------------------------------------------------------------------- /kinobase/__pycache__/settings.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/kinobase/__pycache__/settings.cpython-38.pyc -------------------------------------------------------------------------------- /kinobase/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/kinobase/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /kinobase/__pycache__/wsgi.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/kinobase/__pycache__/wsgi.cpython-38.pyc -------------------------------------------------------------------------------- /kinobase/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for kinobase project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'kinobase.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /kinobase/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for kinobase project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.2.6. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.2/ref/settings/ 11 | """ 12 | 13 | import os 14 | from pathlib import Path 15 | 16 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 17 | BASE_DIR = Path(__file__).resolve().parent.parent 18 | 19 | 20 | # Quick-start development settings - unsuitable for production 21 | # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ 22 | 23 | # SECURITY WARNING: keep the secret key used in production secret! 24 | SECRET_KEY = 'django-insecure-357(fzot%%*#-$*ph8dl(5%untg2=0)*dn+9qa!!=+(ngadpdx' 25 | 26 | # SECURITY WARNING: don't run with debug turned on in production! 27 | DEBUG = True 28 | TEMPLATE_DEBUG = DEBUG 29 | 30 | ALLOWED_HOSTS = ["*"] 31 | 32 | 33 | # Application definition 34 | 35 | INSTALLED_APPS = [ 36 | 'django.contrib.admin', 37 | 'django.contrib.auth', 38 | 'django.contrib.contenttypes', 39 | 'django.contrib.sessions', 40 | 'django.contrib.messages', 41 | 'django.contrib.staticfiles', 42 | 'movie', 43 | 'social_django', 44 | # "debug_toolbar", 45 | ] 46 | 47 | MIDDLEWARE = [ 48 | 'django.middleware.security.SecurityMiddleware', 49 | 'django.contrib.sessions.middleware.SessionMiddleware', 50 | 'django.middleware.common.CommonMiddleware', 51 | 'django.middleware.csrf.CsrfViewMiddleware', 52 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 53 | 'django.contrib.messages.middleware.MessageMiddleware', 54 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 55 | # "debug_toolbar.middleware.DebugToolbarMiddleware", 56 | ] 57 | INTERNAL_IPS = [ 58 | "127.0.0.1", 59 | ] 60 | ROOT_URLCONF = 'kinobase.urls' 61 | 62 | TEMPLATES = [ 63 | { 64 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 65 | 'DIRS': [BASE_DIR / 'templates'], 66 | 'APP_DIRS': True, 67 | 'OPTIONS': { 68 | 'context_processors': [ 69 | 'django.template.context_processors.debug', 70 | 'django.template.context_processors.request', 71 | 'django.contrib.auth.context_processors.auth', 72 | 'django.contrib.messages.context_processors.messages', 73 | 'movie.context_pro.view_all', 74 | 75 | # Add the following two 76 | 'social_django.context_processors.backends', 77 | 'social_django.context_processors.login_redirect', 78 | ], 79 | }, 80 | }, 81 | ] 82 | 83 | WSGI_APPLICATION = 'kinobase.wsgi.application' 84 | 85 | 86 | # Database 87 | # https://docs.djangoproject.com/en/3.2/ref/settings/#databases 88 | 89 | DATABASES = { 90 | 'default': { 91 | 'ENGINE': 'django.db.backends.sqlite3', 92 | 'NAME': BASE_DIR / 'db.sqlite3', 93 | } 94 | } 95 | 96 | 97 | # Password validation 98 | # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators 99 | 100 | AUTH_PASSWORD_VALIDATORS = [ 101 | { 102 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 103 | }, 104 | { 105 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 106 | }, 107 | { 108 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 109 | }, 110 | { 111 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 112 | }, 113 | ] 114 | 115 | AUTHENTICATION_BACKENDS = ( 116 | 'social_core.backends.github.GithubOAuth2', 117 | 'social_core.backends.google.GoogleOAuth2', 118 | 'social_core.backends.facebook.FacebookOAuth2', 119 | 'django.contrib.auth.backends.ModelBackend', 120 | ) 121 | SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/' 122 | # SOCIAL_AUTH_LOGIN_URL = '/login-url/' 123 | 124 | # SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = google_api_key 125 | # SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = google_api_secret 126 | 127 | # SOCIAL_AUTH_FACEBOOK_KEY = fbapikey 128 | # SOCIAL_AUTH_FACEBOOK_SECRET = fbapisecret 129 | 130 | 131 | SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { 132 | 'locale': 'ru_RU', 133 | 'fields': 'id, name, email, age_range' 134 | } 135 | SOCIAL_AUTH_FACEBOOK_API_VERSION = '2.10' 136 | 137 | # Internationalization 138 | # https://docs.djangoproject.com/en/3.2/topics/i18n/ 139 | 140 | LANGUAGE_CODE = 'ru' 141 | 142 | TIME_ZONE = 'Asia/Tashkent' 143 | 144 | USE_I18N = True 145 | 146 | USE_L10N = True 147 | 148 | USE_TZ = True 149 | 150 | 151 | # Static files (CSS, JavaScript, Images) 152 | # https://docs.djangoproject.com/en/3.2/howto/static-files/ 153 | 154 | STATIC_URL = '/static/' 155 | STATIC_ROOT = os.path.join(BASE_DIR, 'static') 156 | MEDIA_URL = '/media/' 157 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 158 | 159 | STATICFILES_DIRS = ( 160 | os.path.join(BASE_DIR, 'staticfiles')), 161 | 162 | # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 163 | # EMAIL_HOST = 'smtp.gmail.com' 164 | # EMAIL_PORT = 587 165 | # EMAIL_HOST_USER = my_email 166 | # EMAIL_HOST_PASSWORD = my_password 167 | # EMAIL_USE_TLS = True 168 | 169 | 170 | # Default primary key field type 171 | # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field 172 | 173 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 174 | 175 | API_KEY = "defkehfjkshbfiue" 176 | -------------------------------------------------------------------------------- /kinobase/urls.py: -------------------------------------------------------------------------------- 1 | 2 | from django.contrib import admin 3 | from django.urls import path, include 4 | from django.conf.urls.static import static 5 | from django.conf import settings 6 | 7 | # from django.contrib.auth.views import LoginView 8 | 9 | urlpatterns = [ 10 | path('admin/', admin.site.urls), 11 | path("", include('movie.urls', namespace='movie')), 12 | path('oauth/', include('social_django.urls', namespace='social')), 13 | path('', include('django.contrib.auth.urls')), 14 | # path('__debug__/', include('debug_toolbar.urls')), 15 | # Login 16 | # path("login/", LoginView.as_view( 17 | # template_name='' 18 | # ),) 19 | ] 20 | 21 | if settings.DEBUG: 22 | urlpatterns += static(settings.STATIC_URL, 23 | document_root=settings.STATIC_ROOT) 24 | urlpatterns += static(settings.MEDIA_URL, 25 | document_root=settings.MEDIA_ROOT) 26 | -------------------------------------------------------------------------------- /kinobase/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for kinobase project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'kinobase.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /locustfile.py: -------------------------------------------------------------------------------- 1 | from locust import HttpUser, task 2 | 3 | 4 | class HelloWorldUser(HttpUser): 5 | @task 6 | def hello_world(self): 7 | self.client.get("/category/filmy") 8 | self.client.get("/") 9 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'kinobase.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /media/actor_images/68f6690f907e7d69c108544664c80e63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/actor_images/68f6690f907e7d69c108544664c80e63.jpg -------------------------------------------------------------------------------- /media/actor_images/Chris-Hemsworth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/actor_images/Chris-Hemsworth.jpg -------------------------------------------------------------------------------- /media/actor_images/hollywood-highest-paid-actor-actress.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/actor_images/hollywood-highest-paid-actor-actress.webp -------------------------------------------------------------------------------- /media/actor_images/main-qimg-fa166cb42693e4643faeb6340a056934-lq.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/actor_images/main-qimg-fa166cb42693e4643faeb6340a056934-lq.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/072bcf18ab120aa5d013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/072bcf18ab120aa5d013.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/111ebbb72ac9ad1359ea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/111ebbb72ac9ad1359ea.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/1b6d23a63c2998c00377.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/1b6d23a63c2998c00377.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/1c4dea714f8fa0a66c88.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/1c4dea714f8fa0a66c88.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/2a27789eff43cde7b9bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/2a27789eff43cde7b9bc.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/3fc6679caf702799f3c6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/3fc6679caf702799f3c6.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/45078f059368e2456d2e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/45078f059368e2456d2e.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/5e6f327aa911f706ade2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/5e6f327aa911f706ade2.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/64c0480d66a92778fc93.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/64c0480d66a92778fc93.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/6695970f62d2a9cabcf2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/6695970f62d2a9cabcf2.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/67291dcfd8f3bcb5cacd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/67291dcfd8f3bcb5cacd.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/6c4b358298363eb52f0e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/6c4b358298363eb52f0e.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/78bc3c8724a76e268628.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/78bc3c8724a76e268628.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/86389b716b7e665fdd42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/86389b716b7e665fdd42.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/8e3f12cf79dbb30f82c4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/8e3f12cf79dbb30f82c4.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/95747f24e3e1223a106c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/95747f24e3e1223a106c.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/ccfc586ad4559035617d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/ccfc586ad4559035617d.jpg -------------------------------------------------------------------------------- /media/movie_posters/2022/05/e776a924173345884428.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/media/movie_posters/2022/05/e776a924173345884428.jpg -------------------------------------------------------------------------------- /movie/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__init__.py -------------------------------------------------------------------------------- /movie/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/admin.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/admin.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/apps.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/apps.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/context_pro.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/context_pro.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/forms.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/forms.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/models.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/models.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /movie/__pycache__/views.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/__pycache__/views.cpython-38.pyc -------------------------------------------------------------------------------- /movie/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import * 3 | # Register your models here. 4 | 5 | @admin.register(Category) 6 | class CategoryAdmin(admin.ModelAdmin): 7 | list_display = ["name", "id"] 8 | list_display_links = ["name"] 9 | prepopulated_fields = {"slug": ("name",)} 10 | 11 | @admin.register(Genre) 12 | class GenresAdmin(admin.ModelAdmin): 13 | list_display = ["name", "id"] 14 | list_display_links = ["name"] 15 | prepopulated_fields = {"slug": ("name",)} 16 | 17 | @admin.register(Actor) 18 | class ActorAdmin(admin.ModelAdmin): 19 | list_display = ["name", "id"] 20 | list_display_links = ["name"] 21 | prepopulated_fields = {"slug": ("name",)} 22 | 23 | @admin.register(Movie) 24 | class MovieAdmin(admin.ModelAdmin): 25 | list_display = ["title", "category", "likes", "rating"] 26 | list_display_links = ["title"] 27 | prepopulated_fields = {"slug":("title",)} 28 | 29 | admin.site.register(Comment) 30 | admin.site.register(LikedMovieList) -------------------------------------------------------------------------------- /movie/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class MovieConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'movie' 7 | -------------------------------------------------------------------------------- /movie/context_pro.py: -------------------------------------------------------------------------------- 1 | from .models import * 2 | # from django.contrib.auth.models import User 3 | def view_all(request): 4 | 5 | context = { 6 | "categories":Category.objects.all(), 7 | "genres":Genre.objects.all(), 8 | } 9 | 10 | return context -------------------------------------------------------------------------------- /movie/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.contrib.auth.models import User 3 | from django.contrib.auth.forms import UserCreationForm 4 | from .models import Comment 5 | 6 | 7 | class UserRegisterForm(UserCreationForm): 8 | 9 | class Meta: 10 | model = User 11 | fields = ['username', 'email', 'password1', 'password2'] 12 | widgets = { 13 | "username":forms.TextInput( 14 | attrs={ 15 | "class":"form-control", 16 | "placeholder":"Username", 17 | "max_length":25 18 | } 19 | ), 20 | "email":forms.EmailInput( 21 | attrs={ 22 | "class":"form-control", 23 | "placeholder":"Email", 24 | "max_length":40 25 | } 26 | ), 27 | "password1":forms.PasswordInput( 28 | attrs={ 29 | "class":"form-control", 30 | "placeholder":"Password" 31 | } 32 | ), 33 | "password2":forms.PasswordInput( 34 | attrs={ 35 | "class":"form-control", 36 | "placeholder":"Confirm password" 37 | } 38 | ), 39 | } 40 | 41 | 42 | class CommentForm(forms.ModelForm): 43 | 44 | class Meta: 45 | model = Comment 46 | # fields = ("name", "comment") 47 | fields = "__all__" 48 | exclude = ["movie"] 49 | 50 | widgets = { 51 | "name":forms.TextInput(attrs={"class":"form-control"}), 52 | "comment":forms.Textarea(attrs={"class":"form-control", "rows":3}), 53 | } -------------------------------------------------------------------------------- /movie/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-07 12:41 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Actor', 17 | fields=[ 18 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('name', models.CharField(max_length=150, verbose_name='Actor name')), 20 | ('slug', models.SlugField(max_length=100, unique=True)), 21 | ('age', models.PositiveIntegerField(default=0, verbose_name='Actor age')), 22 | ('image', models.ImageField(upload_to='actor_images/', verbose_name='Actor image')), 23 | ], 24 | options={ 25 | 'verbose_name': 'Actor', 26 | 'verbose_name_plural': 'Actors', 27 | }, 28 | ), 29 | migrations.CreateModel( 30 | name='Category', 31 | fields=[ 32 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 33 | ('name', models.CharField(max_length=100, verbose_name='Category name')), 34 | ('slug', models.SlugField(max_length=100, unique=True)), 35 | ], 36 | options={ 37 | 'verbose_name': 'Category', 38 | 'verbose_name_plural': 'Categories', 39 | }, 40 | ), 41 | migrations.CreateModel( 42 | name='Genre', 43 | fields=[ 44 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 45 | ('name', models.CharField(max_length=100, verbose_name='Genre name')), 46 | ('slug', models.SlugField(max_length=100, unique=True)), 47 | ], 48 | options={ 49 | 'verbose_name': 'Genre', 50 | 'verbose_name_plural': 'Genres', 51 | }, 52 | ), 53 | migrations.CreateModel( 54 | name='Movie', 55 | fields=[ 56 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 57 | ('title', models.CharField(max_length=250, verbose_name='Movie title')), 58 | ('slug', models.SlugField(max_length=100, unique=True)), 59 | ('description', models.TextField()), 60 | ('short_description', models.CharField(max_length=550, verbose_name='Short title')), 61 | ('likes', models.PositiveIntegerField(default=0)), 62 | ('dislikes', models.PositiveIntegerField(default=0)), 63 | ('rating', models.FloatField(default=0)), 64 | ('quality', models.CharField(max_length=50, verbose_name='Quality')), 65 | ('duration', models.CharField(max_length=50, verbose_name='Duration')), 66 | ('actors', models.ManyToManyField(related_name='movie_actors', to='movie.Actor')), 67 | ('category', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='movie_category', to='movie.category')), 68 | ('genres', models.ManyToManyField(related_name='movie_genres', to='movie.Genre')), 69 | ], 70 | options={ 71 | 'verbose_name': 'Movie', 72 | 'verbose_name_plural': 'Movies', 73 | }, 74 | ), 75 | ] 76 | -------------------------------------------------------------------------------- /movie/migrations/0002_movie_poster.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-07 12:55 2 | 3 | import datetime 4 | from django.db import migrations, models 5 | from django.utils.timezone import utc 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('movie', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='movie', 17 | name='poster', 18 | field=models.ImageField(default=datetime.datetime(2022, 5, 7, 12, 55, 54, 751466, tzinfo=utc), upload_to='movie_posters/'), 19 | preserve_default=False, 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /movie/migrations/0003_auto_20220510_1725.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-10 12:25 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('movie', '0002_movie_poster'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='movie', 15 | name='country', 16 | field=models.CharField(default='USA', max_length=50), 17 | ), 18 | migrations.AddField( 19 | model_name='movie', 20 | name='year', 21 | field=models.CharField(default='2022', max_length=5), 22 | ), 23 | migrations.AlterField( 24 | model_name='movie', 25 | name='actors', 26 | field=models.ManyToManyField(to='movie.Actor'), 27 | ), 28 | migrations.AlterField( 29 | model_name='movie', 30 | name='genres', 31 | field=models.ManyToManyField(to='movie.Genre'), 32 | ), 33 | migrations.AlterField( 34 | model_name='movie', 35 | name='poster', 36 | field=models.ImageField(upload_to='movie_posters/%Y/%m'), 37 | ), 38 | ] 39 | -------------------------------------------------------------------------------- /movie/migrations/0004_auto_20220510_1726.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-10 12:26 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('movie', '0003_auto_20220510_1725'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='movie', 15 | name='duration', 16 | field=models.CharField(blank=True, max_length=50, verbose_name='Duration'), 17 | ), 18 | migrations.AlterField( 19 | model_name='movie', 20 | name='quality', 21 | field=models.CharField(blank=True, max_length=50, verbose_name='Quality'), 22 | ), 23 | migrations.AlterField( 24 | model_name='movie', 25 | name='short_description', 26 | field=models.CharField(blank=True, max_length=550, verbose_name='Short title'), 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /movie/migrations/0005_comment.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-14 12:31 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('movie', '0004_auto_20220510_1726'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Comment', 16 | fields=[ 17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('name', models.CharField(blank=True, default='Гость', max_length=50, verbose_name='Name')), 19 | ('comment', models.TextField()), 20 | ('movie', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='movie_comments', to='movie.movie')), 21 | ], 22 | options={ 23 | 'verbose_name': 'Comment', 24 | 'verbose_name_plural': 'Comments', 25 | }, 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /movie/migrations/0006_alter_comment_movie.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-14 12:57 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('movie', '0005_comment'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='comment', 16 | name='movie', 17 | field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='movie_comments', to='movie.movie'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /movie/migrations/0007_alter_comment_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-17 13:50 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('movie', '0006_alter_comment_movie'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='comment', 15 | options={'ordering': ['-id'], 'verbose_name': 'Comment', 'verbose_name_plural': 'Comments'}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /movie/migrations/0008_likedmovielist.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-24 12:08 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 | ('movie', '0007_alter_comment_options'), 13 | ] 14 | 15 | operations = [ 16 | migrations.CreateModel( 17 | name='LikedMovieList', 18 | fields=[ 19 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 20 | ('movie', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_liked_movies', to='movie.movie')), 21 | ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL)), 22 | ], 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /movie/migrations/0009_auto_20220524_1708.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-24 12:08 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('movie', '0008_likedmovielist'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name='likedmovielist', 15 | name='movie', 16 | ), 17 | migrations.AddField( 18 | model_name='likedmovielist', 19 | name='movie', 20 | field=models.ManyToManyField(related_name='user_liked_movies', to='movie.Movie'), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /movie/migrations/0010_auto_20220524_1711.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-24 12:11 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 | ('movie', '0009_auto_20220524_1708'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AlterField( 17 | model_name='likedmovielist', 18 | name='movie', 19 | field=models.ManyToManyField(null=True, related_name='user_liked_movies', to='movie.Movie'), 20 | ), 21 | migrations.AlterField( 22 | model_name='likedmovielist', 23 | name='user', 24 | field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user_like_list', to=settings.AUTH_USER_MODEL), 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /movie/migrations/0011_alter_likedmovielist_movie.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-24 12:11 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('movie', '0010_auto_20220524_1711'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='likedmovielist', 15 | name='movie', 16 | field=models.ManyToManyField(blank=True, related_name='user_liked_movies', to='movie.Movie'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /movie/migrations/0012_alter_likedmovielist_movie.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2022-05-24 12:44 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('movie', '0011_alter_likedmovielist_movie'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='likedmovielist', 15 | name='movie', 16 | field=models.ManyToManyField(blank=True, to='movie.Movie'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /movie/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__init__.py -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0001_initial.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0001_initial.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0002_movie_poster.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0002_movie_poster.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0003_auto_20220510_1725.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0003_auto_20220510_1725.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0004_auto_20220510_1726.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0004_auto_20220510_1726.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0005_comment.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0005_comment.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0006_alter_comment_movie.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0006_alter_comment_movie.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0007_alter_comment_options.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0007_alter_comment_options.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0008_likedmovielist.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0008_likedmovielist.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0009_auto_20220524_1708.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0009_auto_20220524_1708.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0010_auto_20220524_1711.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0010_auto_20220524_1711.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0011_alter_likedmovielist_movie.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0011_alter_likedmovielist_movie.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/0012_alter_likedmovielist_movie.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/0012_alter_likedmovielist_movie.cpython-38.pyc -------------------------------------------------------------------------------- /movie/migrations/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/movie/migrations/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /movie/models.py: -------------------------------------------------------------------------------- 1 | from django.urls import reverse 2 | from django.db import models 3 | from django.contrib.auth.models import User 4 | 5 | # Create your models here. 6 | class Category(models.Model): 7 | """Model definition for Category.""" 8 | name = models.CharField("Category name", max_length=100) 9 | slug = models.SlugField(max_length=100, unique=True) 10 | 11 | # TODO: Define fields here 12 | 13 | class Meta: 14 | """Meta definition for Category.""" 15 | 16 | verbose_name = 'Category' 17 | verbose_name_plural = 'Categories' 18 | 19 | def get_absolute_url(self): 20 | return reverse('movie:category_list', kwargs={'slug': self.slug}) 21 | 22 | def __str__(self): 23 | """Unicode representation of Category.""" 24 | return f"{self.name}" 25 | 26 | class Genre(models.Model): 27 | """Model definition for Genre.""" 28 | name = models.CharField("Genre name", max_length=100) 29 | slug = models.SlugField(max_length=100, unique=True) 30 | # TODO: Define fields here 31 | 32 | class Meta: 33 | """Meta definition for Genre.""" 34 | 35 | verbose_name = 'Genre' 36 | verbose_name_plural = 'Genres' 37 | 38 | def __str__(self): 39 | """Unicode representation of Genre.""" 40 | return f"{self.name}" 41 | 42 | class Actor(models.Model): 43 | """Model definition for Actor.""" 44 | name = models.CharField("Actor name", max_length=150) 45 | slug = models.SlugField(max_length=100, unique=True) 46 | age = models.PositiveIntegerField("Actor age",default=0) 47 | image = models.ImageField("Actor image", upload_to='actor_images/') 48 | # TODO: Define fields here 49 | 50 | class Meta: 51 | """Meta definition for Actor.""" 52 | 53 | verbose_name = 'Actor' 54 | verbose_name_plural = 'Actors' 55 | 56 | def __str__(self): 57 | """Unicode representation of Actor.""" 58 | return f"{self.name}" 59 | 60 | class Movie(models.Model): 61 | """Model definition for Movie.""" 62 | actors = models.ManyToManyField(Actor) 63 | genres = models.ManyToManyField(Genre) 64 | category = models.ForeignKey(Category, on_delete=models.PROTECT, related_name='movie_category') 65 | poster = models.ImageField(upload_to='movie_posters/%Y/%m') 66 | title = models.CharField("Movie title", max_length=250) 67 | slug = models.SlugField(max_length=100, unique=True) 68 | description =models.TextField() 69 | short_description = models.CharField("Short title", max_length=550, blank=True) 70 | likes = models.PositiveIntegerField(default=0) 71 | dislikes = models.PositiveIntegerField(default=0) 72 | rating = models.FloatField(default=0) 73 | quality = models.CharField("Quality", max_length=50, blank=True) 74 | duration = models.CharField("Duration", max_length=50, blank=True) 75 | year = models.CharField(max_length=5, default="2022") 76 | country = models.CharField(max_length=50, default="USA") 77 | 78 | 79 | 80 | # TODO: Define fields here 81 | 82 | class Meta: 83 | """Meta definition for Movie.""" 84 | 85 | verbose_name = 'Movie' 86 | verbose_name_plural = 'Movies' 87 | 88 | def __str__(self): 89 | """Unicode representation of Movie.""" 90 | return f"{self.title}" 91 | 92 | 93 | class Comment(models.Model): 94 | """Model definition for Comment.""" 95 | movie = models.ForeignKey(Movie, on_delete=models.PROTECT, 96 | related_name="movie_comments", null=True) 97 | name = models.CharField("Name", max_length=50, blank=True, default="Гость") 98 | comment = models.TextField() 99 | # TODO: Define fields here 100 | 101 | class Meta: 102 | """Meta definition for Comment.""" 103 | 104 | verbose_name = 'Comment' 105 | verbose_name_plural = 'Comments' 106 | ordering = ["-id"] 107 | 108 | def __str__(self): 109 | """Unicode representation of Comment.""" 110 | return f"{self.name}" 111 | 112 | 113 | 114 | 115 | class LikedMovieList(models.Model): 116 | user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_like_list') 117 | movie = models.ManyToManyField(Movie, blank=True) 118 | 119 | def __str__(self): 120 | """Unicode representation of Comment.""" 121 | return f"{self.user.username}" 122 | 123 | 124 | -------------------------------------------------------------------------------- /movie/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /movie/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from django.contrib.auth import views as auth_views 3 | from django.urls import reverse_lazy 4 | from .import views 5 | 6 | app_name= 'movie' 7 | 8 | urlpatterns = [ 9 | path("", views.HomeView.as_view(), name='home'), 10 | path("category/", views.category_list, name='category_list'), 11 | path("movie//", views.MovieDetailView.as_view(), name='detail'), 12 | path("search/", views.search, name='search'), 13 | path("liked/", views.likedMovies, name='likedMovies'), 14 | path("like/", views.likeMovie, name='likeMovie'), 15 | 16 | # SORTING 17 | path("films/", views.movie_sorting, name="sort"), 18 | 19 | 20 | # login 21 | path("login/", views.my_login, name='login'), 22 | path("logout/", views.logout_view, name='logout'), 23 | path("registration/", views.registration_view, name='register'), 24 | 25 | # RESET PASSWORD 26 | 27 | path('reset_password/', auth_views.PasswordResetView.as_view( 28 | template_name = "registration/recover.html"), name ='reset_password'), 29 | path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view( 30 | template_name = "registration/password_reset_sent.html" ), name ='password_reset_done'), 31 | path('reset///', auth_views.PasswordResetConfirmView.as_view( 32 | template_name = "registration/password_reset_form.html"), name ='password_reset_confirm'), 33 | path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view( 34 | template_name = "registration/password_reset_done.html"), name ='password_reset_complete') 35 | ] -------------------------------------------------------------------------------- /movie/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.urls import reverse_lazy 3 | from django.core.paginator import Paginator 4 | from django.http import HttpResponseRedirect ,HttpResponse, JsonResponse 5 | from django.contrib import messages 6 | from django.views.generic import ListView, DetailView 7 | from django.views.generic.edit import FormMixin 8 | from django.contrib.auth import authenticate, login, logout 9 | from django.db.models import Q 10 | from transliterate import translit 11 | 12 | 13 | # Create your views here. 14 | from .models import * 15 | from .forms import UserRegisterForm, CommentForm 16 | 17 | 18 | def category_list(request,slug): 19 | category = Category.objects.get(slug=slug) #Фильмы 20 | movies = Movie.objects.filter(category=category) 21 | paginator = Paginator(movies, 12) # Show 2 movies per page. 22 | page_number = request.GET.get('page') 23 | page_obj = paginator.get_page(page_number) 24 | 25 | return render(request, 'list.html', {'page_obj': page_obj, "cat_name":category.name}) 26 | 27 | def my_login(request): 28 | username = request.POST.get("username") 29 | password = request.POST.get("password") 30 | user = authenticate(request, username=username, password=password) 31 | if user is not None: 32 | login(request, user) 33 | 34 | # Redirect to a success page. 35 | return HttpResponseRedirect("/") 36 | 37 | else: 38 | # Return an 'invalid login' error message. 39 | return render(request, "registration/login.html") 40 | 41 | return render(request, "registration/login.html") 42 | 43 | def logout_view(request): 44 | logout(request) 45 | messages.add_message(request,messages.INFO,"Siz chiqdiz!") #INFO, SUCCESS, WARNING, ERROR,DEBUG 46 | return HttpResponseRedirect("/") 47 | 48 | def registration_view(request): 49 | form = UserRegisterForm(request.POST) 50 | # print(dir(form)) 51 | if form.is_valid(): 52 | form.save() 53 | messages.add_message(request,messages.INFO,"Siz royhatdan ottiz , endi kiring!") 54 | return HttpResponseRedirect("/login/") 55 | else: 56 | messages.add_message(request,messages.INFO,"Xatolik!") 57 | return render(request, "registration/registration.html", {"form":form}) 58 | 59 | return render(request, "registration/registration.html", {"form":form}) 60 | 61 | 62 | class HomeView(ListView): 63 | model = Movie 64 | template_name = 'index.html' 65 | 66 | class MovieDetailView(FormMixin,DetailView): 67 | model = Movie 68 | template_name = 'movie-detail.html' 69 | form_class = CommentForm 70 | 71 | 72 | def post(self, request, *args, **kwargs): 73 | self.object = self.get_object() 74 | form = self.get_form() 75 | if form.is_valid(): 76 | return self.form_valid(form) 77 | else: 78 | return self.form_invalid(form) 79 | 80 | # @staticmethod 81 | def get_success_url(self): 82 | return reverse_lazy("movie:detail", kwargs={"slug":self.object.slug}) 83 | 84 | def form_valid(self, form): 85 | f = form.save(commit=False) 86 | f.movie = self.object 87 | f.save() 88 | return super().form_valid(form) 89 | 90 | 91 | def search(request): 92 | q = request.GET.get("query") 93 | ru_text = translit(q, "ru").title() 94 | print(ru_text) 95 | data = Movie.objects.filter( 96 | Q(title__icontains=ru_text) | Q(actors__name__icontains=ru_text) | Q(genres__name__icontains=ru_text) 97 | ) 98 | 99 | return render(request, 'search_list.html', {"object_list":set(data)}) 100 | 101 | def movie_sorting(request, sort_params): 102 | # sort_params.split("=")[0] sort type 103 | # sort_params.split("=")[1] sort value 104 | sort_type = sort_params.split("=")[0] 105 | sort_value = sort_params.split("=")[1] 106 | # print(sort_type) 107 | # print(sort_params) 108 | if sort_type == "genres": 109 | genre = Genre.objects.get(id=sort_value) 110 | object_list = Movie.objects.filter(genres=sort_value) 111 | return render(request, "index.html", {"object_list":object_list, "filter_category":genre.name}) 112 | elif sort_type == "year": 113 | object_list = Movie.objects.filter(year=sort_value) 114 | return render(request, "index.html", {"object_list":object_list, "filter_category":sort_value}) 115 | elif sort_type == "quality": 116 | object_list = Movie.objects.filter(quality=sort_value) 117 | return render(request, "index.html", {"object_list":object_list, "filter_category":sort_value}) 118 | else: 119 | print("ERROR" * 10) 120 | return HttpResponseRedirect("/") 121 | 122 | 123 | 124 | def likeMovie(request): 125 | if request.user.is_authenticated: 126 | print(request.GET.get("data")) 127 | else: 128 | return JsonResponse({"status":400}) 129 | return JsonResponse({"status":200}) 130 | 131 | def likedMovies(request): 132 | return render(request, "liked-movies.html") 133 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==3.2.6 2 | locustio==0.999 3 | transliterate==1.10.2 4 | 5 | Python yordamida PDF fayllarini birlashtirish 6 | 7 | Ushbu qo'llanmada biz Python yordamida PDF-fayllarni qanday birlashtirishni o'rganamiz. 8 | 9 | Kirish 10 | PDF-fayllarni birlashtirish ko'pincha hujjatlarning bir nechta sahifalarini skanerlash yoki bir nechta sahifalarni shaxsiy hujjatlar sifatida kompyuteringizda saqlashdan keyin talab qilinadigan operatsiya hisoblanadi. 11 | 12 | Ushbu vazifani tezda bajarishga yordam beradigan Adobe kabi bir nechta dasturiy ta'minot va onlayn vositalar mavjud. Biroq, ularning aksariyati pullik yoki yetarlicha xavfsizlik xususiyatlariga ega bo'lmasligi mumkin. 13 | Ushbu qo'llanmada biz Python yordamida kompyuteringizda bir necha qator kodlar yordamida PDF-fayllarni qanday birlashtirishni o'rganamiz. 14 | 15 | Ushbu qo'llanmani davom ettirish uchun bizga PyPDF2 Python kutubxonasi kerak bo'ladi: 16 | 17 | Agar sizda u o'rnatilmagan bo'lsa, iltimos, "Buyruqlar satri" ni (Windows-da) oching va kutubxonani quyidagi kod yordamida o'rnating: 18 | pip install PyPDF2 19 | 20 | Endi esa bizga ish uchun bir nechta PDF fayllar kerak bo'ladi. 21 | 22 | Siz istalgan PDF faylni sinov uchun olishingiz mumkin , lekin iloji boricha kichikroq hajmda bo'lsin. 23 | Ushbu PDF-fayllar pdf_files papkasida joylashgan bo'lib, u bizning kodimiz bilan (main.py) bilan bitta katalogda joylashgan. 24 | 25 | Python yordamida ikkita PDF faylni birlashtirishni boshlaymiz. 26 | 27 | Python-da PDF-ni birlashtirishni amalga oshirish uchun PyPDF2 kutubxonasidan PdfFileMerger() class'ini import qilishimiz va ushbu class namunasini yaratishimiz kerak bo'ladi. 28 | 29 | Ushbu misolda biz ikkita faylni birlashtiramiz: sample_page1.pdf va sample_page2.pdf. 30 | 31 | Bunday holda, ikkita fayl yo'li ro'yxatga joylashtirilishi mumkin, biz ularni for'(tsikl)ga tashlaymiz va bir-biriga qo'shamiz: 32 | 33 | 34 | Kodni ishga tushirib main.py fayli bilan bir xil katalogda yaratilgan merged_2_pages.pdf ni ko'rishingiz kerak: 35 | 36 | 37 | Python yordamida ko'plab PDF fayllarni birlashtirish. 38 | 39 | Ushbu bo'limda biz Python yordamida ko'plab PDF-fayllarni qanday birlashtirishni o'rganamiz. 40 | 41 | Ko'p PDF-fayllarni birlashtirish usullaridan biri bu har bir PDF-faylning fayl nomlarini ro'yxatga qo'lda qo'shish va keyin oldingi bo'limdagi kabi amalni bajarishdir. 42 | 43 | Ammo papkada 100 ta PDF fayli bo'lsa nima bo'ladi? OS kutubxonasidan foydalanib, biz ma'lum bir katalogdagi barcha fayl nomlarini ro'yxat sifatida olishimiz va yuqoridagi kodni takrorlashimiz mumkin: 44 | 45 | Maqolada biz Python yordamida bir nechta PDF-fayllarni qanday birlashtirishni o'rganib chiqdik. 46 | 47 | Agar sizda biron bir savol bo'lsa yoki o'zgartirishlar bo'yicha takliflaringiz bo'lsa, past fikringizni qoldiring va Python dasturlash bo'yicha ko'proq tutoriallarni kutib qoling! -------------------------------------------------------------------------------- /staticfiles/static/css/kinobase.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 90px; 3 | padding-bottom: 30px; 4 | background: #e1e4e8; 5 | color: #5a5d65; 6 | } 7 | 8 | a { 9 | color: #5071b3; 10 | } 11 | a:focus, 12 | a:hover { 13 | color: #585858; 14 | } 15 | .h1, .h2, .h3, .h4, h1, h2, h3, h4 { 16 | color: #696969; 17 | } 18 | 19 | .nav-pills>li.active>a, 20 | .nav-pills>li.active>a:hover, 21 | .nav-pills>li.active>a:focus { 22 | color: #585858; 23 | background-color: #fff; 24 | } 25 | 26 | 27 | .navbar-brand { 28 | padding: 10px 15px; 29 | } 30 | 31 | .navbar-inverse { 32 | background-color: #4067b7; 33 | border-width: 0; 34 | } 35 | 36 | .navbar-inverse .navbar-nav > li > a { 37 | color: #e2e2e2; 38 | } 39 | 40 | .nav > li > a { 41 | padding-right: 10px; 42 | padding-left: 10px; 43 | } 44 | 45 | .nav > li > a.top-avatar { 46 | padding-top: 9px; 47 | padding-bottom: 9px; 48 | } 49 | 50 | .navbar-form { 51 | margin-top: 9px; 52 | } 53 | .navbar-form .form-group { 54 | position: relative; 55 | } 56 | .navbar-form .form-control { 57 | color: #8f8f8f; 58 | background-color: #ffffff; 59 | border: 1px solid #3c61ad; 60 | border-radius: 4px; 61 | height: 32px; 62 | } 63 | .navbar-form button { 64 | color: #8f8f8f; 65 | background: transparent; 66 | border: none; 67 | position: absolute; 68 | padding-top: 4px; 69 | padding-bottom: 4px; 70 | top: 3px; 71 | right: 4px; 72 | } 73 | 74 | .navbar-form .form-control::-webkit-input-placeholder { 75 | color: #8f8f8f; 76 | font-size: 13px; 77 | } 78 | .navbar-form .form-control::-moz-placeholder { 79 | color: #8f8f8f; 80 | font-size: 13px; 81 | } 82 | .navbar-form .form-control:-ms-input-placeholder { 83 | color: #8f8f8f; 84 | font-size: 13px; 85 | } 86 | .navbar-form .form-control:-moz-placeholder { 87 | color: #8f8f8f; 88 | font-size: 13px; 89 | } 90 | 91 | 92 | #history-table > thead > tr > th, 93 | #history-table > tbody > tr > th, 94 | #history-table > tfoot > tr > th, 95 | #history-table > thead > tr > td, 96 | #history-table > tbody > tr > td, 97 | #history-table > tfoot > tr > td { 98 | border-top: solid 1px rgb(194, 199, 206); 99 | } 100 | 101 | #account_modal .modal-content { 102 | background: #e1e4e8; 103 | } 104 | 105 | #account_modal .close { 106 | color: #696969; 107 | } 108 | 109 | 110 | #comments .comment-date { 111 | color: rgb(128, 128, 128); 112 | } 113 | 114 | 115 | .items { 116 | margin-right: -5px; 117 | padding-right: 0; 118 | } 119 | 120 | .item .info { 121 | background: #fff; 122 | } 123 | .item .title, 124 | .item .title a { 125 | color: #292c2f; 126 | } 127 | .item .desc { 128 | color: #676a6f; 129 | } 130 | 131 | .btn-fav { 132 | background: #798cb5; 133 | } 134 | .btn-fav:hover, 135 | .btn-fav:focus { 136 | color: #fff; 137 | background-color: #4067b7; 138 | } 139 | .btn-fav:active { 140 | color: #fff; 141 | background-color: #4067b7; 142 | } 143 | 144 | .btn-fav.is-favorited { 145 | color: #fff; 146 | background: #4067b7; 147 | } 148 | .btn-fav.is-favorited:before { 149 | background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDEzIDEzIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi41IDkuN2wtMy40IDIuMyAxLTQuMS0zLjEtMi43IDQuMS0uMiAxLjQtNCAxLjQgNCA0LjEuMi0zLjIgMi43IDEgNC4xLTMuMy0yLjN6Ii8+PC9zdmc+); 150 | } 151 | .btn-fav.is-favorited:hover, 152 | .btn-fav.is-favorited:focus { 153 | color: #fff; 154 | background: #4067b7; 155 | } 156 | 157 | 158 | .btn-default { 159 | color: #fff; 160 | border-color: #798cb5; 161 | background-color: #798cb5; 162 | } 163 | 164 | .btn-default:active:hover, 165 | .btn-default.active:hover, 166 | .open > .dropdown-toggle.btn-default:hover, 167 | .btn-default:active:focus, 168 | .btn-default.active:focus, 169 | .open > .dropdown-toggle.btn-default:focus, 170 | .btn-default:active.focus, 171 | .btn-default.active.focus, 172 | .open > .dropdown-toggle.btn-default.focus, 173 | .btn-default:active, 174 | .btn-default:hover, 175 | .btn-default:focus { 176 | background: #4067b7; 177 | color: #fff; 178 | border-color: transparent; 179 | } 180 | 181 | 182 | 183 | .btn-own { 184 | background-color: #798cb5; 185 | border-top: solid 1px rgba(255, 255, 255, .2); 186 | border-bottom: solid 1px rgba(0, 0, 0, .1); 187 | text-shadow: 0 -1px rgba(0, 0, 0, .1); 188 | } 189 | .btn-own:active, 190 | .btn-own:hover, 191 | .btn-own:focus { 192 | background: #4067b7; 193 | color: #fff; 194 | border-color: transparent; 195 | } 196 | 197 | 198 | .input, 199 | .textarea, 200 | .select { 201 | background: #fff; 202 | color: #5a5d65; 203 | } 204 | 205 | .sidebar-telegram { 206 | background: #fff; 207 | color: #696969; 208 | } 209 | 210 | .pagination > li > a, 211 | .pagination > li > span { 212 | margin-left: 0; 213 | color: #90949c; 214 | border: none; 215 | background-color: #fff; 216 | } 217 | 218 | .pagination > li > a:hover, 219 | .pagination > li > span:hover, 220 | .pagination > li > a:focus, 221 | .pagination > li > span:focus { 222 | z-index: 3; 223 | background: #4067b7; 224 | color: #fff; 225 | } 226 | .pagination > .active > a, 227 | .pagination > .active > span, 228 | .pagination > .active > a:hover, 229 | .pagination > .active > span:hover, 230 | .pagination > .active > a:focus, 231 | .pagination > .active > span:focus { 232 | background: #4067b7; 233 | color: #fff; 234 | } 235 | .pagination > .disabled > span, 236 | .pagination > .disabled > span:hover, 237 | .pagination > .disabled > span:focus, 238 | .pagination > .disabled > a, 239 | .pagination > .disabled > a:hover, 240 | .pagination > .disabled > a:focus { 241 | color: #fff; 242 | cursor: not-allowed; 243 | background-color: rgba(0, 0, 0, .08); 244 | } 245 | 246 | .autocomplete-suggestions { 247 | color: #333; 248 | background: #fff; 249 | border: none; 250 | border-radius: 3px; 251 | -webkit-box-shadow: 0 4px 10px 0 rgba(0,0,0,0.15); 252 | box-shadow: 0 4px 10px 0 rgba(0,0,0,0.15); 253 | } 254 | .autocomplete-selected { 255 | background: #f2f2f2; 256 | } 257 | .autocomplete-suggestions strong { 258 | font-weight: bold; 259 | } 260 | 261 | .tags-filter-remove { 262 | color: #696969; 263 | } 264 | .tags-filter-remove:hover { 265 | color: #585858; 266 | } 267 | 268 | .dropdown { 269 | position: relative; 270 | top: 0px; 271 | display: inline-block; 272 | margin-left: 0; 273 | } 274 | .dropdown-filter { 275 | position: relative; 276 | top: 5px; 277 | display: inline-block; 278 | margin-left: 15px; 279 | } 280 | .dropdown-filter a { 281 | text-decoration: none; 282 | border-color: transparent; 283 | } 284 | .dropdown-toggle { 285 | display: inline-block; 286 | text-decoration: none; 287 | color: #696969; 288 | } 289 | .dropdown-u { 290 | display: inline-block; 291 | } 292 | .dropdown-menu { 293 | background: #fff; 294 | } 295 | .dropdown-menu a, 296 | .dropdown-menu>li>a { 297 | color: #90949c; 298 | } 299 | 300 | .dropdown-menu a:focus, 301 | .dropdown-menu a:hover, 302 | .dropdown-menu>li>a:focus, 303 | .dropdown-menu>li>a:hover { 304 | color: #585858; 305 | } 306 | 307 | .dropdown-menu a.active, 308 | .dropdown-menu a.active:focus, 309 | .dropdown-menu a.active:hover, 310 | .dropdown-menu>.active>a, 311 | .dropdown-menu>.active>a:focus, 312 | .dropdown-menu>.active>a:hover { 313 | color: #5c626b; 314 | } 315 | 316 | .nav-tabs { 317 | border-bottom: 1px solid #798cb5; 318 | } 319 | .nav-tabs>li>a { 320 | color: #5a5d65; 321 | } 322 | .nav-tabs > li.active > a, 323 | .nav-tabs > li.active > a:hover, 324 | .nav-tabs > li.active > a:focus { 325 | background-color: #798cb5; 326 | border-bottom: 1px solid #798cb5; 327 | border-bottom-color: transparent; 328 | } 329 | .nav-tabs>li>a:hover { 330 | border-color: #e1e4e8; 331 | } 332 | .nav>li>a:focus, .nav>li>a:hover { 333 | text-decoration: none; 334 | color: #fff; 335 | background-color: #798cb5; 336 | border-bottom: 0px solid #798cb5; 337 | } 338 | 339 | 340 | .change-player { 341 | color: #fff; 342 | border-color: #798cb5; 343 | background-color: #798cb5; 344 | } 345 | 346 | .change-player:focus, 347 | .change-player:hover { 348 | background: #4067b7; 349 | } 350 | 351 | .form-control { 352 | background: #fff; 353 | color: #696969; 354 | } 355 | #rating-block { 356 | background: #fff; 357 | } 358 | 359 | 360 | .premium .help { 361 | line-height: 1.7; 362 | } 363 | .premium .banks { 364 | margin-top: 20px; 365 | } 366 | .premium-blocks { 367 | margin-top: 50px; 368 | } 369 | .premium-block { 370 | position: relative; 371 | background: #fff; 372 | border: solid 2px #fff; 373 | border-radius: 4px; 374 | padding: 15px; 375 | text-align: center; 376 | } 377 | .premium-block .title { 378 | font-weight: bold; 379 | font-size: 24px; 380 | margin-bottom: 0px; 381 | } 382 | .premium-block .price { 383 | color: #5071b3; 384 | font-size: 20px; 385 | margin-bottom: 15px; 386 | } 387 | .premium-block .price-help { 388 | margin-top: 15px; 389 | font-size: 12px; 390 | color: #696969; 391 | } 392 | .premium-block .disabled { 393 | border-color: #ccc; 394 | background-color: #606060; 395 | } 396 | 397 | .premium-block .btn.disabled, 398 | .premium-block .btn[disabled], 399 | fieldset[disabled] .premium-block .btn { 400 | border-color: #ccc; 401 | background-color: #606060; 402 | } 403 | .premium-block .rating-star { 404 | position: absolute; 405 | top: 5px; 406 | right: 10px; 407 | } 408 | 409 | .footer:before { 410 | border-top: solid 1px rgb(194, 199, 206); 411 | } 412 | 413 | 414 | .checkbox-dropdown .btn-clear { 415 | margin-right: 4px; 416 | background: #939393; 417 | border-color: #939393; 418 | } 419 | 420 | .checkbox-dropdown>ul::-webkit-scrollbar-thumb { 421 | background-color: rgba(0, 0, 0, 0.1); 422 | } 423 | 424 | .audio-dropdown>ul>li.active>a, 425 | .audio-dropdown>ul>li.active>a:focus, 426 | .audio-dropdown>ul>li.active>a:hover { 427 | color: #5c626b; 428 | } 429 | 430 | .audio-dropdown>ul::-webkit-scrollbar-thumb { 431 | background-color: rgba(0, 0, 0, 0.1); 432 | } 433 | -------------------------------------------------------------------------------- /staticfiles/static/css/master.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'fontello'; 3 | src: url('../fonts/fontello.eot?14731356'); 4 | src: url('../fonts/fontello.eot?14731356#iefix') format('embedded-opentype'), 5 | url('../fonts/fontello.woff?14731356') format('woff'), 6 | url('../fonts/fontello.ttf?14731356') format('truetype'), 7 | url('../fonts/fontello.svg?14731356#fontello') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | font-display: swap; 11 | } 12 | 13 | [class^="icon-"]:before, [class*=" icon-"]:before { 14 | font-family: "fontello"; 15 | font-style: normal; 16 | font-weight: normal; 17 | speak: none; 18 | display: inline-block; 19 | text-decoration: inherit; 20 | width: 1em; 21 | margin-right: .2em; 22 | text-align: center; 23 | font-variant: normal; 24 | text-transform: none; 25 | line-height: 1em; 26 | margin-left: .2em; 27 | -webkit-font-smoothing: antialiased; 28 | -moz-osx-font-smoothing: grayscale; 29 | } 30 | 31 | [data-notify="progressbar"] { 32 | margin-bottom: 0px; 33 | position: absolute; 34 | bottom: 0px; 35 | left: 0px; 36 | width: 100%; 37 | height: 5px; 38 | } 39 | 40 | body { 41 | background-color: #262626; 42 | color: #CAC8C8; 43 | } 44 | hr { 45 | margin-top:15px; 46 | margin-bottom:15px; 47 | } 48 | label { 49 | display: inline-block; 50 | max-width: 100%; 51 | margin-bottom: 5px; 52 | font-weight: 400; 53 | } 54 | a { 55 | color: #cc9c3b; 56 | } 57 | a:focus, 58 | a:hover { 59 | color: #fbae17; 60 | } 61 | 62 | select.input-sm { 63 | height: 32px; 64 | line-height: 32px; 65 | } 66 | 67 | /*@media (min-width: 1400px) { 68 | .container { 69 | width: 1240px; 70 | } 71 | }*/ 72 | 73 | 74 | @media (min-width: 768px) { 75 | .modal-dialog { 76 | width: 600px; 77 | margin: 60px auto; 78 | } 79 | } 80 | 81 | 82 | .h1, .h2, .h3, .h4, h1, h2, h3, h4 { 83 | color:#fff; 84 | margin-top: 0; 85 | margin-bottom: 15px; 86 | font-weight: 600; 87 | } 88 | .h1, .h2, .h3, .h4 { 89 | display: inline-block; 90 | } 91 | 92 | .h1:hover, .h2:hover, .h3:hover, .h4:hover, h1:hover, h2:hover, h3:hover, h4:hover { 93 | text-decoration: none; 94 | } 95 | 96 | .alert-message { 97 | border-color: #323232; 98 | background-color: #323232; 99 | color: #f1f1f1; 100 | border-radius: 2px; 101 | } 102 | 103 | .icon-vkontakte:before { content: '\e801'; } 104 | .icon-odnoklassniki:before { content: '\e802'; } 105 | .icon-facebook:before { content: '\e803'; } 106 | .icon-twitter:before { content: '\e804'; } 107 | 108 | 109 | .nav-pills>li.active>a, 110 | .nav-pills>li.active>a:hover, 111 | .nav-pills>li.active>a:focus { 112 | color: #fff; 113 | background-color: #1a1a1a; 114 | } 115 | 116 | 117 | #history-table .rating-help { 118 | position: relative; 119 | top: -4px; 120 | right: -10px; 121 | } 122 | 123 | #history-table .date { 124 | color: rgba(255, 255, 255, .5); 125 | } 126 | 127 | #history-table > thead > tr > th, 128 | #history-table > tbody > tr > th, 129 | #history-table > tfoot > tr > th, 130 | #history-table > thead > tr > td, 131 | #history-table > tbody > tr > td, 132 | #history-table > tfoot > tr > td { 133 | border-top: 1px solid #333333; 134 | padding: 10px; 135 | padding-left: 2px; 136 | padding-right: 2px; 137 | } 138 | 139 | #history-table > thead > tr > th { 140 | vertical-align: bottom; 141 | border-bottom: 2px solid #333333; 142 | border-top: none !important; 143 | padding-top: 0; 144 | } 145 | 146 | #clear-history { 147 | padding-left: 15px; 148 | display: block; 149 | } 150 | 151 | 152 | #account_modal .modal-content { 153 | background: #292929; 154 | } 155 | 156 | #account_modal .close { 157 | color: #fff; 158 | opacity: 0.5; 159 | } 160 | 161 | #account_modal .modal-header { 162 | border-bottom: none; 163 | } 164 | 165 | 166 | #main .h2 { 167 | font-size: 26px; 168 | } 169 | #main .items { 170 | margin-bottom: 10px; 171 | } 172 | 173 | .items { 174 | padding-right: 15px; 175 | } 176 | .item { 177 | position: relative; 178 | margin-bottom: 25px; 179 | padding-right: 5px !important; 180 | max-width: 242px; 181 | 182 | } 183 | .item>a { 184 | display: block; 185 | } 186 | 187 | .collection-item { 188 | max-width: 360px; 189 | } 190 | 191 | .item .label { 192 | position: absolute; 193 | padding: 4px .5em 5px; 194 | right: 5px; 195 | bottom: 64px; 196 | max-width: 80%; 197 | font-size: 12px; 198 | font-weight: normal; 199 | border-radius: 0; 200 | text-overflow: ellipsis; 201 | white-space: nowrap; 202 | overflow: hidden; 203 | display: block; 204 | } 205 | 206 | .item .label-danger { 207 | background-color: rgba(134, 35, 35, 0.95); 208 | } 209 | 210 | .poster:hover > .favorite, 211 | .item:hover > .favorite { 212 | display:block; 213 | } 214 | 215 | 216 | .favorite { 217 | display: none; 218 | position: absolute; 219 | top: 0px; 220 | right: 5px; 221 | width: 27px; 222 | height: 38px; 223 | color: transparent; 224 | text-indent: -9999px; 225 | background: #4d4d4d url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDIxIDIyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTAuNSAxN2wtNS44IDQgMS44LTcuMS01LjUtNC43IDctLjMgMi41LTYuOSAyLjUgNi45IDcgLjMtNS41IDQuNyAxLjggNy4xeiIgb3BhY2l0eT0iLjEiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSIxMC41IiBjeT0iMTAuNSIgcj0iOS41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzYzNjM2Ii8+PHN0b3Agb2Zmc2V0PSIuMzM5IiBzdG9wLWNvbG9yPSIjMzEzMTMxIi8+PHN0b3Agb2Zmc2V0PSIuNiIgc3RvcC1jb2xvcj0iIzI4MjgyOCIvPjxzdG9wIG9mZnNldD0iLjk5NSIgc3RvcC1jb2xvcj0iIzI4MjgyOCIvPjwvcmFkaWFsR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNhKSIgZD0iTTEwLjUgMTZsLTUuOCA0IDEuOC03LjEtNS41LTQuNyA3LS4zIDIuNS02LjkgMi41IDYuOSA3IC4zLTUuNSA0LjcgMS44IDcuMXoiLz48L3N2Zz4=) 50% 50% no-repeat; 226 | border: none; 227 | cursor: pointer; 228 | outline: none; 229 | } 230 | .favorite:before, 231 | .favorite:after { 232 | content: ''; 233 | position: absolute; 234 | bottom: -7px; 235 | border-bottom: solid 8px transparent; 236 | } 237 | .favorite:before { 238 | left: 0; 239 | border-left: solid 18px #4d4d4d; 240 | } 241 | .favorite:after { 242 | right: 0; 243 | border-right: solid 18px #4d4d4d; 244 | } 245 | .favorite:hover, 246 | .favorite.is-favorited { 247 | background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDIxIDIyIj48cGF0aCBkPSJNMTAuNSAxN2wtNS44IDQgMS44LTcuMS01LjUtNC43IDctLjMgMi41LTYuOSAyLjUgNi45IDcgLjMtNS41IDQuNyAxLjggNy4xeiIgb3BhY2l0eT0iLjIiLz48bGluZWFyR3JhZGllbnQgaWQ9ImEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTAuNSIgeTE9IjIwIiB4Mj0iMTAuNSIgeTI9IjEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0RBOTkyNiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0Y5RTgzQSIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNhKSIgZD0iTTEwLjUgMTZsLTUuOCA0IDEuOC03LjEtNS41LTQuNyA3LS4zIDIuNS02LjkgMi41IDYuOSA3IC4zLTUuNSA0LjcgMS44IDcuMXoiLz48L3N2Zz4=); 248 | } 249 | 250 | .poster > .favorite { 251 | top: 2px; 252 | right: 0px; 253 | } 254 | 255 | .item .info { 256 | background: #1e1e1e; 257 | text-align: center; 258 | padding: 8px; 259 | } 260 | .item .info:after { 261 | clear: both; 262 | display: table; 263 | content: " "; 264 | } 265 | .item .title { 266 | text-overflow: ellipsis; 267 | white-space: nowrap; 268 | overflow: hidden; 269 | font-size: 14px; 270 | color: #fff; 271 | padding-bottom: 4px; 272 | } 273 | .item .title a { 274 | color: #fff; 275 | } 276 | .item .desc { 277 | color: rgba(255, 255, 255, .5); 278 | font-size: 12px; 279 | text-overflow: ellipsis; 280 | white-space: nowrap; 281 | overflow: hidden; 282 | } 283 | 284 | #videoplayer { 285 | width: 100%; 286 | height: 100%; 287 | } 288 | 289 | #movie .one-video { 290 | margin-bottom: 20px; 291 | } 292 | 293 | #movie .tab-content { 294 | padding-top: 0; 295 | padding-bottom: 20px; 296 | } 297 | #movie .details li { 298 | margin-bottom: 4px; 299 | } 300 | #movie .details li b { 301 | margin-right: 3px; 302 | } 303 | #movie h1 { 304 | font-size: 24px; 305 | margin-bottom: 10px; 306 | } 307 | #movie h4.alternative_title { 308 | margin-top: 5px; 309 | margin-bottom: 10px; 310 | font-size: 16px; 311 | color: #999; 312 | } 313 | #movie .data { 314 | margin-top: 5px; 315 | margin-bottom: 15px; 316 | } 317 | #movie .poster { 318 | position: relative; 319 | padding-top: 2px; 320 | } 321 | 322 | #movie .label { 323 | position: absolute; 324 | padding: 4px .5em 5px; 325 | right: 0px; 326 | bottom: 10px; 327 | max-width: 80%; 328 | font-size: 13px; 329 | font-weight: normal; 330 | border-radius: 0; 331 | text-overflow: ellipsis; 332 | white-space: nowrap; 333 | overflow: hidden; 334 | display: block; 335 | } 336 | 337 | #movie .label-danger { 338 | background-color: rgba(134, 35, 35, 0.95); 339 | } 340 | 341 | #movie .body { 342 | margin-top: 15px; 343 | margin-bottom: 10px; 344 | line-height: 1.7; 345 | } 346 | 347 | #movie .poster-data { 348 | width: 260px; 349 | margin-right: 20px; 350 | margin-bottom: 10px; 351 | float:left; 352 | } 353 | 354 | #movie .media .media-heading span { 355 | padding-left: 5px; 356 | font-size: 13px; 357 | } 358 | #movie .media .media-left, 359 | #movie .media .media>.pull-left { 360 | padding-right: 15px; 361 | } 362 | 363 | .btn-icon { 364 | position: relative; 365 | display: inline-block; 366 | font-size:12px; 367 | line-height: 30px; 368 | color: #fff; 369 | border-radius: 3px; 370 | height: 32px; 371 | padding: 0 20px; 372 | margin: 0; 373 | text-decoration: none; 374 | text-align: center; 375 | border-top: solid 1px rgba(255, 255, 255, .2); 376 | border-bottom: solid 1px rgba(0, 0, 0, .1); 377 | border-left: none; 378 | border-right: none; 379 | cursor: pointer; 380 | text-shadow: 0 -1px rgba(0, 0, 0, .1); 381 | vertical-align: top; 382 | -moz-box-sizing: border-box; 383 | box-sizing: border-box; 384 | white-space: nowrap; 385 | outline: none; 386 | } 387 | .btn-icon:active { 388 | border-top: solid 1px rgba(0, 0, 0, .3); 389 | border-bottom: solid 1px rgba(255, 255, 255, .2); 390 | box-shadow: inset 0 1px 0 0 rgba(0, 0, 0, .1); 391 | } 392 | .btn-icon:before { 393 | content: ''; 394 | position: absolute; 395 | top: 4px; 396 | left: 10px; 397 | width: 20px; 398 | height: 20px; 399 | background-position: 50% 50%; 400 | background-repeat: no-repeat; 401 | } 402 | 403 | .btn-fav { 404 | padding-left: 35px; 405 | background-color: rgba(255, 255, 255, .15); 406 | } 407 | .btn-fav:before { 408 | background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDEzIDEzIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi41IDkuN2wtMy40IDIuMyAxLTQuMS0zLjEtMi43IDQuMS0uMiAxLjQtNCAxLjQgNCA0LjEuMi0zLjIgMi43IDEgNC4xLTMuMy0yLjN6Ii8+PC9zdmc+); 409 | } 410 | .btn-fav:hover, 411 | .btn-fav:focus { 412 | color:#fff; 413 | background-color: rgba(255, 255, 255, .2); 414 | } 415 | .btn-fav:active { 416 | color:#fff; 417 | background-color: rgba(255, 255, 255, .15); 418 | } 419 | 420 | .btn-fav.is-favorited { 421 | color: #000; 422 | background: #fbae17; 423 | } 424 | .btn-fav.is-favorited:before { 425 | background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDEzIDEzIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNi41IDkuN2wtMy40IDIuMyAxLTQuMS0zLjEtMi43IDQuMS0uMiAxLjQtNCAxLjQgNCA0LjEuMi0zLjIgMi43IDEgNC4xLTMuMy0yLjN6Ii8+PC9zdmc+); 426 | } 427 | .btn-fav.is-favorited:hover, 428 | .btn-fav.is-favorited:focus { 429 | background: #ffc81a; 430 | color: #000; 431 | } 432 | 433 | 434 | .btn-submit { 435 | font: 13.3333px Arial; 436 | background: #6fa508; 437 | color:#fff; 438 | font-size: 16px; 439 | line-height: 52px; 440 | height: 56px; 441 | padding: 0 30px; 442 | -webkit-appearance: none; 443 | outline: none; 444 | } 445 | .btn-submit:hover, 446 | .btn-submit:focus, 447 | .btn-submit:active { 448 | color:#fff; 449 | background: #83ba0c; 450 | } 451 | 452 | .btn-submit-small { 453 | margin: 10px 0; 454 | font-size: inherit; 455 | line-height: 30px; 456 | padding: 0 20px; 457 | height: 32px; 458 | } 459 | 460 | .btn-default { 461 | padding: 8px 20px; 462 | color: #333; 463 | background-color: #fff; 464 | border-color: #FBAE17; 465 | color: #000; 466 | background-color: #fbae17; 467 | font-size:13px; 468 | border-top: solid 1px rgba(255, 255, 255, .2); 469 | border-bottom: solid 1px rgba(0, 0, 0, .1); 470 | text-shadow: 0 -1px rgba(0, 0, 0, .1); 471 | } 472 | 473 | .btn-default:active:hover, 474 | .btn-default.active:hover, 475 | .open > .dropdown-toggle.btn-default:hover, 476 | .btn-default:active:focus, 477 | .btn-default.active:focus, 478 | .open > .dropdown-toggle.btn-default:focus, 479 | .btn-default:active.focus, 480 | .btn-default.active.focus, 481 | .open > .dropdown-toggle.btn-default.focus, 482 | .btn-default:active, 483 | .btn-default:hover, 484 | .btn-default:focus { 485 | background: #ffc81a; 486 | color: #000; 487 | border-color: transparent; 488 | } 489 | 490 | 491 | .btn-own { 492 | position: relative; 493 | display: inline-block; 494 | font-size:12px; 495 | line-height: 30px; 496 | color: #fff; 497 | border-radius: 3px; 498 | height: 32px; 499 | padding: 0 10px; 500 | margin: 0; 501 | text-decoration: none; 502 | text-align: center; 503 | background-color: rgba(255, 255, 255, .15); 504 | border-top: solid 1px rgba(255, 255, 255, .2); 505 | border-bottom: solid 1px rgba(0, 0, 0, .1); 506 | border-left: none; 507 | border-right: none; 508 | cursor: pointer; 509 | text-shadow: 0 -1px rgba(0, 0, 0, .1); 510 | vertical-align: top; 511 | -moz-box-sizing: border-box; 512 | box-sizing: border-box; 513 | white-space: nowrap; 514 | outline: none; 515 | } 516 | .btn-own:active { 517 | text-decoration: none; 518 | border-top: solid 1px rgba(0, 0, 0, .3); 519 | border-bottom: solid 1px rgba(255, 255, 255, .2); 520 | box-shadow: inset 0 1px 0 0 rgba(0, 0, 0, .1); 521 | } 522 | .btn-own:focus, 523 | .btn-own:hover { 524 | text-decoration: none; 525 | color: #fff; 526 | } 527 | 528 | 529 | .btn-vk { 530 | background: #3f658d; 531 | } 532 | .btn-vk:hover, 533 | .btn-vk:focus { 534 | background: #4a7aa5; 535 | } 536 | .btn-vk:active { 537 | background: #3f658d; 538 | } 539 | .btn-tw { 540 | background: #00b0f2; 541 | } 542 | .btn-tw:hover, 543 | .btn-tw:focus { 544 | background: #00c3ff; 545 | } 546 | .btn-tw:active { 547 | background: #00b0f2; 548 | } 549 | .btn-fb { 550 | background: #37589a; 551 | } 552 | .btn-fb:hover, 553 | .btn-fb:focus { 554 | background: #426db2; 555 | } 556 | .btn-fb:active { 557 | background: #37589a; 558 | } 559 | 560 | .btn-ok { 561 | background: #BD6B29; 562 | } 563 | .btn-ok:hover, 564 | .btn-ok:focus { 565 | background: #C37A3F; 566 | } 567 | .btn-ok:active { 568 | background: #BD6B29; 569 | } 570 | 571 | #dropdown-player { 572 | top: 0; 573 | } 574 | 575 | .change-player { 576 | padding: 0 16px; 577 | font-size: 12px; 578 | } 579 | .change-player .caret { 580 | margin-left: 5px; 581 | } 582 | 583 | 584 | .registration-social-login .btn-own { 585 | display: inline-block; 586 | width: 220px; 587 | margin-bottom: 10px; 588 | text-align: left; 589 | } 590 | 591 | .form-control { 592 | font-size: 14px; 593 | border-color: transparent; 594 | border-radius: 4px; 595 | box-shadow: 0 1px 0 0 rgba(255, 255, 255, .1); 596 | background: rgba(0, 0, 0, .4); 597 | color: #fff; 598 | display: block; 599 | width: 100%; 600 | height: 32px; 601 | padding: 6px 12px; 602 | line-height: 1.4; 603 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); 604 | box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); 605 | -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; 606 | -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 607 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 608 | } 609 | 610 | 611 | .form-control[disabled], 612 | .form-control[readonly], 613 | fieldset[disabled] .form-control { 614 | background-color: #464646; 615 | opacity: 1; 616 | } 617 | 618 | 619 | .symbol { 620 | display: inline-block; 621 | border-radius: 50%; 622 | border: 5px double white; 623 | width: 30px; 624 | height: 30px; 625 | } 626 | 627 | .symbol-empty { 628 | background-color: #ccc; 629 | } 630 | 631 | .symbol-filled { 632 | background-color: black; 633 | } 634 | 635 | 636 | .rating-star-empty { 637 | color: #715929; 638 | font-size:20px; 639 | } 640 | .rating-star { 641 | color: #C38918; 642 | font-size:20px; 643 | } 644 | 645 | #rating-block { 646 | background: #1F1F1F; 647 | text-align: center; 648 | padding-top: 10px; 649 | padding-bottom: 10px; 650 | } 651 | 652 | #rating-votes { 653 | margin-top: 1px; 654 | } 655 | 656 | #rating-success { 657 | display: none; 658 | margin-top: 2px; 659 | color: #888; 660 | } 661 | 662 | #remove-rating { 663 | font-size: 12px; 664 | cursor: pointer; 665 | top: 1px; 666 | left: 2px; 667 | opacity: 0.7; 668 | } 669 | 670 | .form-group { 671 | margin-bottom: 10px; 672 | } 673 | 674 | .input, 675 | .textarea, 676 | .select { 677 | 678 | } 679 | .input:focus, 680 | .textarea:focus { 681 | box-shadow: 0 0 5px rgba(0, 0, 0, .3); 682 | border-color: #a585ff; 683 | } 684 | .input-dark-bg { 685 | box-shadow: 0 1px 0 0 rgba(255, 255, 255, .1); 686 | } 687 | 688 | .input, 689 | .textarea, 690 | .select { 691 | 692 | } 693 | .input:focus, 694 | .textarea:focus { 695 | box-shadow: 0 0 5px rgba(255, 255, 255, .3); 696 | border-color: #666; 697 | } 698 | .input-middle, 699 | .input-middle:focus, 700 | .input-bottom, 701 | .input-bottom:focus { 702 | border-top: solid 1px rgba(255, 255, 255, .1); 703 | border-left-color: transparent; 704 | border-right-color: transparent; 705 | border-bottom-color: transparent; 706 | } 707 | .input-top:focus { 708 | border-color: transparent; 709 | } 710 | 711 | .input-bottom:focus { 712 | box-shadow: 0 1px 0 0 rgba(255, 255, 255, .1); 713 | } 714 | 715 | #load_all_comments { 716 | margin-left: 10px; 717 | } 718 | 719 | #upload_avatar { 720 | margin-top: 5px; 721 | } 722 | 723 | #comments { 724 | margin-top: 40px; 725 | } 726 | #comments form { 727 | margin-bottom: 30px; 728 | } 729 | #comments .media { 730 | margin-top: 15px; 731 | } 732 | #comments .comment-date { 733 | color: rgba(255, 255, 255, .5); 734 | } 735 | 736 | .comments-title { 737 | display: inline-block; 738 | font-size: 18px; 739 | font-weight: 600; 740 | margin: 0 0 10px; 741 | } 742 | 743 | .comments-textarea { 744 | display: block; 745 | width: 100%; 746 | height: 80px; 747 | min-height: 60px; 748 | } 749 | 750 | 751 | .search-form { 752 | position: relative; 753 | margin-bottom: 15px; 754 | } 755 | .search { 756 | font: 13.3333px Arial; 757 | border: none; 758 | color: rgba(255, 255, 255, .4); 759 | border-radius: 3px; 760 | box-shadow: 0 1px 0 0 rgba(255, 255, 255, .1); 761 | padding: 8px 32px 8px 12px; 762 | margin: 0; 763 | width: 100%; 764 | -moz-box-sizing: border-box; 765 | box-sizing: border-box; 766 | background-color: rgba(0, 0, 0, .3); 767 | background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0.2) 100%); 768 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.4)), color-stop(20%, rgba(0, 0, 0, 0.2)), color-stop(100%, rgba(0, 0, 0, 0.2))); 769 | background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0.2) 100%); 770 | background: -o-linear-gradient(top, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0.2) 100%); 771 | background: -ms-linear-gradient(top, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0.2) 100%); 772 | background: linear-gradient(to bottom, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0.2) 100%); 773 | } 774 | .search:focus { 775 | color: rgba(255, 255, 255, .6); 776 | } 777 | .search-active, 778 | .search-active:focus { 779 | color: #8CC63F; 780 | } 781 | .search::-webkit-input-placeholder { 782 | color: rgba(255, 255, 255, .6); 783 | } 784 | .search:-ms-input-placeholder { 785 | color: rgba(255, 255, 255, .6); 786 | } 787 | .search::-moz-placeholder { 788 | color: rgba(255, 255, 255, .6); 789 | } 790 | .search:-moz-placeholder { 791 | color: rgba(255, 255, 255, .6); 792 | } 793 | .search-submit { 794 | -webkit-appearance: none; 795 | position: absolute; 796 | top: 0; 797 | right: 0; 798 | background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEyLjcyNiAxMS40MDRsLTMuMDgxLTIuNzZjLjU1My0uNzYyLjg4My0xLjY5Ni44ODMtMi43MDhsLS4wMTYtLjE1MS4wMTYtLjE1M2MtLjAwMS0yLjU1NC0yLjA3OC00LjYzMi00LjYzMy00LjYzMmwtLjEzLjAxNC0uMTM0LS4wMTRjLTIuNTUzIDAtNC42MzEgMi4wNzgtNC42MzEgNC42MzFsLjAxNC4xNTEtLjAxNC4xNTRjMCAyLjU1NCAyLjA3OCA0LjYzMSA0LjYzMSA0LjYzMWwuMTM0LS4wMTQuMTMuMDE0Yy44NjcgMCAxLjY3Ni0uMjQzIDIuMzcxLS42NThsMy4xMzkgMi44MThjLjE4My4xODEuNDIxLjI3My42NTkuMjczLjI0IDAgLjQ4LS4wOTIuNjYyLS4yNzMuMzY2LS4zNjYuMzY2LS45NTcgMC0xLjMyM3ptLTYuOTYxLTIuNjk1bC0uMTM0LS4wMTJjLTEuNTIyIDAtMi43NjEtMS4yNC0yLjc2MS0yLjc2MmwtLjAxNy0uMTUuMDE3LS4xNTRjMC0xLjUyMSAxLjIzOC0yLjc2MSAyLjc2MS0yLjc2MWwuMTM0LS4wMTMuMTMuMDEzYzEuNTI0IDAgMi43NjQgMS4yMzkgMi43NjQgMi43NjFsLjAxNi4xNTEtLjAxOC4xNTNjMCAxLjUyMS0xLjIzNyAyLjc2Mi0yLjc2MiAyLjc2MmwtLjEzLjAxMnoiIG9wYWNpdHk9Ii4zIi8+PC9zdmc+) 30% 50% no-repeat; 799 | border: none; 800 | width: 30px; 801 | height: 100%; 802 | padding: 0; 803 | cursor: pointer; 804 | } 805 | .search-submit:hover { 806 | background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCI+PHBhdGggZmlsbD0iI0ZCQUUxNyIgZD0iTTEyLjcyNiAxMS40MDRsLTMuMDgxLTIuNzZjLjU1My0uNzYyLjg4My0xLjY5Ni44ODMtMi43MDhsLS4wMTYtLjE1MS4wMTYtLjE1M2MtLjAwMS0yLjU1NC0yLjA3OC00LjYzMi00LjYzMy00LjYzMmwtLjEzLjAxNC0uMTM0LS4wMTRjLTIuNTUzIDAtNC42MzEgMi4wNzgtNC42MzEgNC42MzFsLjAxNC4xNTEtLjAxNC4xNTRjMCAyLjU1NCAyLjA3OCA0LjYzMSA0LjYzMSA0LjYzMWwuMTM0LS4wMTQuMTMuMDE0Yy44NjcgMCAxLjY3Ni0uMjQzIDIuMzcxLS42NThsMy4xMzkgMi44MThjLjE4My4xODEuNDIxLjI3My42NTkuMjczLjI0IDAgLjQ4LS4wOTIuNjYyLS4yNzMuMzY2LS4zNjYuMzY2LS45NTcgMC0xLjMyM3ptLTYuOTYxLTIuNjk1bC0uMTM0LS4wMTJjLTEuNTIyIDAtMi43NjEtMS4yNC0yLjc2MS0yLjc2MmwtLjAxNy0uMTUuMDE3LS4xNTRjMC0xLjUyMSAxLjIzOC0yLjc2MSAyLjc2MS0yLjc2MWwuMTM0LS4wMTMuMTMuMDEzYzEuNTI0IDAgMi43NjQgMS4yMzkgMi43NjQgMi43NjFsLjAxNi4xNTEtLjAxOC4xNTNjMCAxLjUyMS0xLjIzNyAyLjc2Mi0yLjc2MiAyLjc2MmwtLjEzLjAxMnoiLz48L3N2Zz4=); 807 | } 808 | 809 | 810 | .sidebar-telegram { 811 | background: #1f1f1f; 812 | border-radius: 4px; 813 | border-bottom-width: 0; 814 | color: rgba(255, 255, 255, .5); 815 | line-height: 1.5; 816 | font-size: 13px; 817 | padding: 16px; 818 | } 819 | 820 | .pagination > li > a, 821 | .pagination > li > span { 822 | margin-left: 0; 823 | color: #fff; 824 | border: none; 825 | background-color: rgba(0, 0, 0, .2); 826 | } 827 | 828 | .pagination > li > a:hover, 829 | .pagination > li > span:hover, 830 | .pagination > li > a:focus, 831 | .pagination > li > span:focus { 832 | z-index: 3; 833 | background: #FBAE17; 834 | color: #000; 835 | } 836 | .pagination > .active > a, 837 | .pagination > .active > span, 838 | .pagination > .active > a:hover, 839 | .pagination > .active > span:hover, 840 | .pagination > .active > a:focus, 841 | .pagination > .active > span:focus { 842 | background: #FBAE17; 843 | color: #000; 844 | } 845 | .pagination > .disabled > span, 846 | .pagination > .disabled > span:hover, 847 | .pagination > .disabled > span:focus, 848 | .pagination > .disabled > a, 849 | .pagination > .disabled > a:hover, 850 | .pagination > .disabled > a:focus { 851 | color: rgba(255, 255, 255, .5); 852 | cursor: not-allowed; 853 | background-color: rgba(0, 0, 0, .2); 854 | } 855 | 856 | .division { 857 | float: none; 858 | margin: 0 auto 10px; 859 | overflow: hidden; 860 | position: relative; 861 | text-align: center; 862 | width: 100%; 863 | } 864 | .division .line { 865 | border-top: 1px solid #252525; 866 | position: absolute; 867 | top: 8px; 868 | width: 34%; 869 | } 870 | .division .line.l { 871 | left: 0; 872 | } 873 | .division .line.r { 874 | right: 0; 875 | } 876 | .division span { 877 | color: #717171; 878 | font-size: 12px; 879 | } 880 | 881 | .autocomplete-suggestions { 882 | color: #999; 883 | background: #191919; 884 | border: 1px solid #111; 885 | overflow: auto; 886 | margin-top: 3px; 887 | max-height: 400px !important; 888 | border-radius: 2px; 889 | } 890 | .autocomplete-suggestion { 891 | padding: 6px 10px; 892 | cursor: pointer; 893 | white-space: nowrap; 894 | overflow: hidden; 895 | } 896 | .autocomplete-selected { 897 | background: #111; 898 | } 899 | .autocomplete-suggestions strong { 900 | font-weight:bold; 901 | } 902 | 903 | 904 | .catalog-title { 905 | margin-right: 10px; 906 | } 907 | 908 | .dropdown { 909 | position: relative; 910 | top: 5px; 911 | display: inline-block; 912 | margin-left: 15px; 913 | } 914 | .dropdown a { 915 | text-decoration: none; 916 | border-color: transparent; 917 | } 918 | .dropdown-toggle { 919 | display: inline-block; 920 | text-decoration: none; 921 | color: #fff; 922 | } 923 | .dropdown-u { 924 | display: inline-block; 925 | font-size: 16px; 926 | } 927 | .dropdown-menu { 928 | min-width: 100%; 929 | margin: 0; 930 | padding-top: 10px; 931 | padding-bottom: 5px; 932 | padding-left: 12px; 933 | padding-right: 12px; 934 | background: #2b2b2b; 935 | border-radius: 3px; 936 | white-space: nowrap; 937 | } 938 | .dropdown-menu-years { 939 | width: 260px; 940 | } 941 | .dropdown-menu-countries { 942 | width: 550px; 943 | } 944 | .dropdown-menu a, 945 | .dropdown-menu>li>a { 946 | padding: 0; 947 | color: rgba(255, 255, 255, .8); 948 | white-space: nowrap; 949 | display: block; 950 | text-decoration: none; 951 | -webkit-transition: .2s color; 952 | -moz-transition: .2s color; 953 | -o-transition: .2s color; 954 | transition: .2s color; 955 | line-height: 1.7em; 956 | cursor: pointer; 957 | margin-bottom: 0.3em; 958 | } 959 | .dropdown-menu a:focus, 960 | .dropdown-menu a:hover, 961 | .dropdown-menu>li>a:focus, 962 | .dropdown-menu>li>a:hover { 963 | color: #cc9c3b; 964 | background-color: transparent; 965 | } 966 | .dropdown-menu>li { 967 | margin: 0; 968 | padding: 0; 969 | } 970 | .dropdown-menu a.active, 971 | .dropdown-menu a.active:focus, 972 | .dropdown-menu a.active:hover, 973 | .dropdown-menu>.active>a, 974 | .dropdown-menu>.active>a:focus, 975 | .dropdown-menu>.active>a:hover { 976 | color: #fbae17; 977 | text-decoration: none; 978 | background-color: transparent; 979 | outline: 0; 980 | } 981 | 982 | .btn-upload { 983 | cursor: pointer; 984 | display: inline-block; 985 | *zoom: 1; 986 | *display: inline; 987 | position: relative; 988 | overflow: hidden; 989 | } 990 | .btn-upload input { 991 | top: 0; 992 | left: 0; 993 | z-index: 2; 994 | position: absolute; 995 | cursor: pointer; 996 | opacity: 0; 997 | filter: alpha(opacity=0); 998 | cursor: pointer; 999 | width: 136px; 1000 | font-size: 24px; 1001 | } 1002 | 1003 | .btn-upload-txt { 1004 | position: relative; 1005 | } 1006 | 1007 | .btn-upload .progress { 1008 | top: 0; 1009 | left: 0; 1010 | right: 0; 1011 | bottom: 0; 1012 | opacity: .5; 1013 | position: absolute; 1014 | } 1015 | .progress .bar { 1016 | width: 0; 1017 | top: 0; 1018 | left: 0; 1019 | bottom: 0; 1020 | position: absolute; 1021 | } 1022 | .progress-small { 1023 | height: 1px; 1024 | padding: 1px; 1025 | } 1026 | .progress-small .bar { 1027 | width: 0; 1028 | height: 100%; 1029 | position: static; 1030 | } 1031 | 1032 | .tab-content { 1033 | padding-top:20px; 1034 | } 1035 | .nav-tabs { 1036 | border-bottom: 1px solid #1F1F1F; 1037 | } 1038 | 1039 | .nav-tabs>li>a { 1040 | color: #fff; 1041 | border: none; 1042 | border-bottom: 1px solid transparent; 1043 | } 1044 | 1045 | .nav-tabs > li.active > a, 1046 | .nav-tabs > li.active > a:hover, 1047 | .nav-tabs > li.active > a:focus { 1048 | color: #fff; 1049 | cursor: default; 1050 | background-color: #1F1F1F; 1051 | border: none; 1052 | border-bottom: 1px solid #252525; 1053 | border-bottom-color: transparent; 1054 | } 1055 | 1056 | .nav-tabs>li>a:hover { 1057 | border-color: #1F1F1F; 1058 | } 1059 | 1060 | .nav>li>a:focus, .nav>li>a:hover { 1061 | text-decoration: none; 1062 | background-color: #1F1F1F; 1063 | } 1064 | 1065 | 1066 | .related { 1067 | margin-top:15px; 1068 | } 1069 | .related li { 1070 | margin-bottom:5px; 1071 | } 1072 | 1073 | 1074 | 1075 | .premium .help { 1076 | line-height: 1.7; 1077 | } 1078 | .premium .banks { 1079 | margin-top: 20px; 1080 | } 1081 | .premium-blocks { 1082 | margin-top: 50px; 1083 | } 1084 | .premium-block { 1085 | position: relative; 1086 | background: #1f1f1f; 1087 | border: solid 2px #1f1f1f; 1088 | border-radius: 4px; 1089 | padding: 15px; 1090 | text-align: center; 1091 | } 1092 | .premium-block .title { 1093 | font-size: 24px; 1094 | margin-bottom: 0px; 1095 | } 1096 | .premium-block .price { 1097 | color: #cc9c3b; 1098 | font-size: 20px; 1099 | margin-bottom: 15px; 1100 | } 1101 | .premium-block .price-help { 1102 | margin-top: 15px; 1103 | font-size: 12px; 1104 | color: rgba(255, 255, 255, .5); 1105 | } 1106 | .premium-block .disabled { 1107 | border-color: #ccc; 1108 | background-color: #fff; 1109 | } 1110 | .premium-block .rating-star { 1111 | position: absolute; 1112 | top: 5px; 1113 | right: 10px; 1114 | } 1115 | 1116 | .donate { 1117 | margin-top: 30px; 1118 | } 1119 | .donate .form-group { 1120 | margin-bottom: 15px; 1121 | } 1122 | .donate .amount { 1123 | width: 80px; 1124 | text-align: center; 1125 | } 1126 | .donate .currency { 1127 | width: 140px; 1128 | } 1129 | .donate #submit { 1130 | margin-top: 10px; 1131 | } 1132 | .donate .donate-progress { 1133 | border-top: 1px solid #1a1a1a; 1134 | margin-top: 40px; 1135 | padding-top: 8px; 1136 | width: 350px; 1137 | } 1138 | 1139 | .sidebar-donate { 1140 | color: #000; 1141 | background-color: #fbae17; 1142 | border-radius: 4px; 1143 | padding: 16px; 1144 | margin-bottom: 20px; 1145 | } 1146 | .sidebar-donate h4 { 1147 | color: #000; 1148 | margin-bottom: 10px; 1149 | } 1150 | .sidebar-donate .donate-button { 1151 | display: block; 1152 | background: #000; 1153 | text-align: center; 1154 | margin-top: 20px; 1155 | padding: 5px; 1156 | } 1157 | 1158 | .footer:before { 1159 | content: ''; 1160 | display: block; 1161 | border-top: solid 1px rgba(0, 0, 0, .4); 1162 | border-bottom: solid 1px rgba(255, 255, 255, .1); 1163 | margin-bottom: 20px; 1164 | } 1165 | 1166 | .footer { 1167 | -webkit-box-ordinal-group: 4; 1168 | -webkit-order: 3; 1169 | -ms-flex-order: 3; 1170 | order: 3; 1171 | position: relative; 1172 | margin: 50px 0 0 0; 1173 | text-align: left; 1174 | } 1175 | 1176 | .checkbox-dropdown { 1177 | width: 235px; 1178 | padding-bottom: 10px; 1179 | padding-right: 5px; 1180 | white-space: normal; 1181 | } 1182 | .checkbox-dropdown .btn-clear { 1183 | margin-right: 4px; 1184 | background: #afafaf; 1185 | border-color: #afafaf; 1186 | } 1187 | .checkbox-dropdown .btn { 1188 | padding: 6px 18px; 1189 | } 1190 | .checkbox-dropdown>ul { 1191 | list-style: none; 1192 | max-height: 325px; 1193 | overflow-y: scroll; 1194 | overflow-x: hidden; 1195 | padding-left: 0; 1196 | } 1197 | .checkbox-dropdown>ul>li { 1198 | margin: 0; 1199 | padding: 0; 1200 | } 1201 | .checkbox-dropdown>ul .checkbox { 1202 | margin-top: 0; 1203 | margin-bottom: 10px; 1204 | } 1205 | .checkbox-dropdown>ul .checkbox label { 1206 | padding-right: 10px; 1207 | } 1208 | .checkbox-dropdown>ul::-webkit-scrollbar { 1209 | width: 8px; 1210 | height: 8px; 1211 | } 1212 | .checkbox-dropdown>ul::-webkit-scrollbar-track { 1213 | background-color: transparent; 1214 | } 1215 | .checkbox-dropdown>ul::-webkit-scrollbar-thumb { 1216 | background-color: rgba(255, 255, 255, 0.1); 1217 | border-radius: 10px; 1218 | } 1219 | 1220 | 1221 | .audio-dropdown { 1222 | width: 235px; 1223 | padding-right: 5px; 1224 | padding-bottom: 0; 1225 | white-space: normal; 1226 | } 1227 | .audio-dropdown>ul { 1228 | list-style: none; 1229 | height: 335px; 1230 | overflow-y: scroll; 1231 | overflow-x: hidden; 1232 | padding-left: 0; 1233 | } 1234 | .audio-dropdown>ul>li { 1235 | margin: 0; 1236 | padding: 0; 1237 | } 1238 | 1239 | .audio-dropdown>ul>li.active>a, 1240 | .audio-dropdown>ul>li.active>a:focus, 1241 | .audio-dropdown>ul>li.active>a:hover { 1242 | color: #fbae17; 1243 | text-decoration: none; 1244 | background-color: transparent; 1245 | outline: 0; 1246 | } 1247 | 1248 | .audio-dropdown>ul::-webkit-scrollbar { 1249 | width: 8px; 1250 | height: 8px; 1251 | } 1252 | .audio-dropdown>ul::-webkit-scrollbar-track { 1253 | background-color: transparent; 1254 | } 1255 | .audio-dropdown>ul::-webkit-scrollbar-thumb { 1256 | background-color: rgba(255, 255, 255, 0.1); 1257 | border-radius: 10px; 1258 | } 1259 | 1260 | @media (min-width: 600px) { 1261 | .navbar-form { 1262 | width: 160px !important; 1263 | } 1264 | .navbar-form .form-control { 1265 | width: 150px !important; 1266 | } 1267 | } 1268 | @media (min-width: 1200px) { 1269 | .navbar-form { 1270 | width: 210px !important; 1271 | } 1272 | .navbar-form .form-control { 1273 | width: 200px !important; 1274 | } 1275 | } 1276 | 1277 | 1278 | .message{ 1279 | width: 500px; 1280 | height: auto; 1281 | margin-left: auto; 1282 | margin-right: auto; 1283 | border-radius: 15px; 1284 | background-color: orange; 1285 | padding: 20px 30px; 1286 | text-align: center; 1287 | } 1288 | .message .text{ 1289 | font-size: 1.5em; 1290 | color: white; 1291 | font-family: sans-serif; 1292 | font-weight: bold; 1293 | } 1294 | .message .close a{ 1295 | font-size: 1.2em; 1296 | font-weight: bold; 1297 | color: black; 1298 | text-decoration: none; 1299 | } -------------------------------------------------------------------------------- /staticfiles/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/favicon.ico -------------------------------------------------------------------------------- /staticfiles/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/favicon.png -------------------------------------------------------------------------------- /staticfiles/static/fonts/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/fontello.eot -------------------------------------------------------------------------------- /staticfiles/static/fonts/fontello.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Copyright (C) 2015 by original authors @ fontello.com 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /staticfiles/static/fonts/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/fontello.ttf -------------------------------------------------------------------------------- /staticfiles/static/fonts/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/fontello.woff -------------------------------------------------------------------------------- /staticfiles/static/fonts/glyphicons-halflings-regular-1.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/glyphicons-halflings-regular-1.eot -------------------------------------------------------------------------------- /staticfiles/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /staticfiles/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /staticfiles/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /staticfiles/static/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /staticfiles/static/images/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rashidov21/kinobase.org-clone-django/fd144bf9919b678d4d2a5e7d8aa98a50fa9058de/staticfiles/static/images/logo2.png -------------------------------------------------------------------------------- /staticfiles/static/js/master.js: -------------------------------------------------------------------------------- 1 | $(".login").click(()=>{ 2 | $("#account_modal").show() 3 | }) 4 | 5 | function closeMessages() { 6 | document.querySelector(".message").style.display= 'none' 7 | } 8 | 9 | 10 | 11 | // function siteHost() 12 | // { 13 | // var proto = window.location.protocol; 14 | // var host = window.location.hostname; 15 | // var port = window.location.port; 16 | 17 | // var site = proto +"//"+ host; 18 | // if(port != 80) { 19 | // site+=":"+port; 20 | // } 21 | // return site; 22 | // } 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} {% load static %} {% block content %} 2 | 3 |
4 |
5 |

404

6 |

Ошибка 404.
«Страница не найдена»

7 |

8 | 9 | Домой 10 | 11 |
12 |
13 | 33 | {% endblock content %} -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Кинобэйс 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 33 | 34 | 35 |
36 | 37 | 38 | 92 | 93 | {% if messages %} 94 | 95 | {% for message in messages %} 96 |
97 |
98 | x 99 |
100 |
{{message}}
101 |
102 | {% endfor %} 103 | 104 | {% endif %} 105 | 106 | {% block content %} 107 | {% endblock %} 108 | 109 | 112 | 113 | 114 | 115 | 116 | 138 | 139 | 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load static %} 3 | {% block content %} 4 | 5 |
6 |
7 | 10 | 11 | 62 |
63 |
64 | {% comment %} MOVIES {% endcomment %} 65 | 66 | {% for movie in object_list %} 67 | 68 |
69 | 70 | {{movie.title}} 71 | 72 | 73 |
74 |
75 | {{movie.title}} 77 |
78 |
2022, {{movie.quality}}
79 |
80 |
81 | 82 | {% endfor %} 83 | {% comment %} ENDMOVIES {% endcomment %} 84 |
85 | 92 | 93 | {% endblock %} -------------------------------------------------------------------------------- /templates/liked-movies.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 | 6 | 7 |
8 | 9 | 10 |
11 | 12 | 18 | 19 | 20 |
21 | {% if object_list %} 22 | {% for movie in object_list %} 23 | 24 |
25 | 26 | {{movie.title}} 29 | 30 | 31 | 32 | 33 | 2 сезон 10 серия 34 | 35 |
36 |
37 | {{movie.title}} 39 |
40 |
2021, HDRip
41 |
42 |
43 | 44 | {% endfor %} 45 | {% else %} 46 |
47 | 48 | фильм не найден 49 | 50 |
51 | 52 | Назад 53 | 54 |
55 | {% endif %} 56 |
57 | 58 |
    59 | {% if page_obj.has_previous %} 60 |
  • 61 | Предыдущая 62 |
  • 63 | 64 | {% endif %} 65 | 66 | {% for page in page_obj.paginator.page_range %} 67 | {% if page == page_obj.number %} 68 |
  • 69 | {{page}} 70 |
  • 71 | {% else %} 72 |
  • 73 | {{page}} 74 |
  • 75 | {% endif %} 76 | {% endfor %} 77 | 78 | {% if page_obj.has_next %} 79 |
  • 80 | Следующая 81 |
  • 82 | {% endif %} 83 | 84 |
85 |
86 | 87 | {% endblock content %} -------------------------------------------------------------------------------- /templates/list.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 | 6 | 7 |
8 | 9 | 10 |
11 | 12 |
13 | 16 | 17 | 68 |
69 | 70 | 71 |
72 | 73 | {% for movie in page_obj %} 74 | 75 |
76 | 77 | {{movie.title}} 80 | 81 | 82 | 83 | 84 | 2 сезон 10 серия 85 | 86 |
87 |
88 | {{movie.title}} 90 |
91 |
2021, HDRip
92 |
93 |
94 | 95 | {% endfor %} 96 |
97 | 98 |
    99 | {% if page_obj.has_previous %} 100 |
  • 101 | Предыдущая 102 |
  • 103 | 104 | {% endif %} 105 | 106 | {% for page in page_obj.paginator.page_range %} 107 | {% if page == page_obj.number %} 108 |
  • 109 | {{page}} 110 |
  • 111 | {% else %} 112 |
  • 113 | {{page}} 114 |
  • 115 | {% endif %} 116 | {% endfor %} 117 | 118 | {% if page_obj.has_next %} 119 |
  • 120 | Следующая 121 |
  • 122 | {% endif %} 123 | 124 |
125 |
126 | 133 | {% endblock content %} -------------------------------------------------------------------------------- /templates/movie-detail.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load static %} 3 | 4 | {% block content %} 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |

{{object.title}}

22 | 23 |

Film

24 | 25 | 26 |
27 |
28 | 29 |
30 |
31 |
32 | 33 | 34 | 35 | 36 | Лицензия 37 |
38 | 39 |
40 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | Оценка: 8.6 (414 голосов) 50 |
51 |
52 | Ваша оценка: 0 53 | 54 |
55 |
56 |
57 | 58 | 115 | 116 |
{{object.description}}
117 | 118 |
119 | 120 | 121 |
122 | 123 | 127 | 128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 | 137 |
138 |
139 |
140 | 141 | 142 | 143 |
144 | 145 |
146 | 147 | 159 | 160 |
161 |
162 |
163 | 164 | 165 |
166 | 167 | 168 |
169 |
170 | {{object.movie_comments.all.count}} комментариев 171 |
172 | 173 | 174 |
175 | {% csrf_token %} 176 |
177 |
178 |
179 | {{form.name}} 180 |
181 |
182 |
183 | 184 | 185 |
186 | {{form.comment}} 187 |
188 | 189 | 193 |
194 | 195 | 196 |
197 | 198 | {% for comment in object.movie_comments.all|slice:'10' %} 199 |
200 |
201 | 204 |
205 |
206 |
207 | {{comment.name}}
208 |

{{comment.comment}}

209 | 210 |
211 |
212 | 213 | {% endfor %} 214 | 215 |
216 | 217 | 218 |
219 | 220 |
221 | 222 |
223 | 224 | 225 | 230 | 231 |
232 | 233 | 234 | 235 |
236 |
237 | 238 | 239 |
240 |
241 | 242 | 243 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | {% endblock content %} -------------------------------------------------------------------------------- /templates/registration/login.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load static %} 3 | {% block content %} 4 | 5 |
6 | 7 | 8 |
9 | 10 | 11 |

Вход

12 | 13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 | 21 |
22 |
23 | {% csrf_token %} 24 | 25 |
26 |
27 | 28 |
29 |
30 | 31 |
32 |
33 | 34 |
35 |
36 |
37 | 38 | 46 | 47 |
48 | 49 | 60 |
61 | 62 | {% endblock %} -------------------------------------------------------------------------------- /templates/registration/password_reset_confirm.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% autoescape off %} 2 | {% blocktranslate %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktranslate %} 3 | 4 | {% translate "Please go to the following page and choose a new password:" %} 5 | {% block reset_link %} 6 | {{ protocol }}://{{ domain }}{% url 'movie:password_reset_done' uidb64=uid token=token %} 7 | {% endblock %} 8 | {% translate 'Your username, in case you’ve forgotten:' %} {{ user.get_username }} 9 | 10 | {% translate "Thanks for using our site!" %} 11 | 12 | {% blocktranslate %}The {{ site_name }} team{% endblocktranslate %} 13 | 14 | {% endautoescape %} -------------------------------------------------------------------------------- /templates/registration/password_reset_done.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block content%} 3 |
4 |

Password reset complete

5 |
6 | Your Password has been set. You may go ahead and login 7 |
8 |
9 |
10 |
11 | Login 12 |
13 | {% endblock%} -------------------------------------------------------------------------------- /templates/registration/password_reset_email.html: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% autoescape off %} 2 | {% blocktranslate %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktranslate %} 3 | 4 | {% translate "Please go to the following page and choose a new password:" %} 5 | {% block reset_link %} 6 | {{ protocol }}://{{ domain }}{% url 'movie:password_reset_confirm' uidb64=uid token=token %} 7 | {% endblock %} 8 | {% translate 'Your username, in case you’ve forgotten:' %} {{ user.get_username }} 9 | 10 | {% translate "Thanks for using our site!" %} 11 | 12 | {% blocktranslate %}The {{ site_name }} team{% endblocktranslate %} 13 | 14 | {% endautoescape %} -------------------------------------------------------------------------------- /templates/registration/password_reset_form.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block content%} 3 |
4 |

Password Reset Form

5 |
6 | Please enter your new password so we can verify. 7 |
8 |
9 |
10 |
11 | {% csrf_token %} 12 | {{form}} 13 | 14 |
15 | 16 | {% endblock%} -------------------------------------------------------------------------------- /templates/registration/password_reset_sent.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block content%} 3 |
4 |

Password reset sent

5 |
We’ve emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly.

6 |
If you don’t receive an email, please make sure you’ve entered the address you registered with, and check your spam folder.
7 |
8 | 11 | {% endblock%} -------------------------------------------------------------------------------- /templates/registration/recover.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 |

Восстановление пароля

12 | 13 |
14 |
15 | 16 | 17 | 18 | 19 |
20 | {% csrf_token %} 21 |
22 |
23 | {{form}} 24 |
25 |
26 | 27 |
28 |
29 | 30 |
31 |
32 |
33 | 34 | 38 | 39 |
40 | 41 | 51 |
52 | 53 | 54 | {% endblock content %} -------------------------------------------------------------------------------- /templates/registration/registration.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load static %} 3 | 4 | {% block content %} 5 | 12 | 13 |
14 | 15 | 16 | 17 | 18 |

Регистрация

19 | 20 |
21 |
22 | 23 | 24 | 25 |
26 | {% csrf_token %} 27 |
28 |
29 | {{form.username}} 30 |
31 |
32 | 33 |
34 |
35 | {{form.email}} 36 |
37 |
38 | 39 |
40 |
41 | {{form.password1}} 42 |
43 |
44 | 45 |
46 |
47 | {{form.password2}} 48 |
49 |
50 | 51 | 52 | 53 | 54 |
55 |
56 | 57 |
58 |
59 |
60 | 61 | 62 | 66 | 67 |
68 | 69 | 77 |
78 | 79 | 80 | {% endblock content %} -------------------------------------------------------------------------------- /templates/search_list.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 | 6 | 7 |
8 | 9 | 10 |
11 | 12 |
13 | 16 | 17 | 68 |
69 | 70 | 71 |
72 | {% if object_list %} 73 | {% for movie in object_list %} 74 | 75 |
76 | 77 | {{movie.title}} 80 | 81 | 82 | 83 | 84 | 2 сезон 10 серия 85 | 86 |
87 |
88 | {{movie.title}} 90 |
91 |
2021, HDRip
92 |
93 |
94 | 95 | {% endfor %} 96 | {% else %} 97 |
98 | 99 | фильм не найден 100 | 101 |
102 | 103 | Назад 104 | 105 |
106 | {% endif %} 107 |
108 | 109 |
    110 | {% if page_obj.has_previous %} 111 |
  • 112 | Предыдущая 113 |
  • 114 | 115 | {% endif %} 116 | 117 | {% for page in page_obj.paginator.page_range %} 118 | {% if page == page_obj.number %} 119 |
  • 120 | {{page}} 121 |
  • 122 | {% else %} 123 |
  • 124 | {{page}} 125 |
  • 126 | {% endif %} 127 | {% endfor %} 128 | 129 | {% if page_obj.has_next %} 130 |
  • 131 | Следующая 132 |
  • 133 | {% endif %} 134 | 135 |
136 |
137 | 144 | {% endblock content %} -------------------------------------------------------------------------------- /templates/soon.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Скоро на сайте 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 44 | 45 |
46 | 47 | 48 | 88 | 89 |
90 | 91 | 92 |

Скоро на сайте

93 | 94 |
95 |
96 | 97 | 98 | 99 | 100 | 101 | 102 | Трейлер 103 | 104 |
105 | 108 |
2022, BDRip
109 |
110 |
111 |
112 | 113 | 114 | 115 | 116 | 117 | 118 | Трейлер 119 | 120 |
121 | 124 |
2022, BDRip
125 |
126 |
127 |
128 | 129 | 130 | 131 | 132 | 133 | 134 | Трейлер 135 | 136 |
137 | 140 |
2022, BDRip
141 |
142 |
143 |
144 | 145 | 146 | 147 | 148 | 149 | 150 | Трейлер 151 | 152 |
153 | 156 |
2022, BDRip
157 |
158 |
159 |
160 | 161 | 162 | 163 | 164 | 165 | 166 | Трейлер 167 | 168 |
169 |
170 | Базз Лайтер 171 |
172 |
2022, BDRip
173 |
174 |
175 |
176 | 177 | 178 | 179 | 180 | 181 | 182 | Трейлер 183 | 184 |
185 | 188 |
2022, BDRip
189 |
190 |
191 |
192 | 193 | 194 | 195 | 196 | 197 | 198 | Трейлер 199 | 200 |
201 | 204 |
2022, BDRip
205 |
206 |
207 |
208 | 209 | 210 | 211 | 212 | 213 | 214 | Трейлер 215 | 216 | 222 |
223 |
224 | 225 | 226 | 227 | 228 | 229 | 230 | Трейлер 231 | 232 |
233 |
234 | Нюрнберг 235 |
236 |
2021, BDRip
237 |
238 |
239 |
240 | 241 | 242 | 243 | 244 | 245 | 246 | Трейлер 247 | 248 | 254 |
255 |
256 | 257 | 258 | 259 | 260 | 261 | 262 | Трейлер 263 | 264 |
265 | 268 |
2021, BDRip
269 |
270 |
271 |
272 | 273 | 274 | 275 | 276 | 277 | 278 | Трейлер 279 | 280 |
281 | 284 |
2022, BDRip
285 |
286 |
287 |
288 | 289 | 290 | 291 | 292 | 293 | 294 | Трейлер 295 | 296 |
297 |
298 | Чёрный Адам 299 |
300 |
2021, BDRip
301 |
302 |
303 |
304 | 305 | 306 | 307 | 308 | 309 | 310 | Трейлер 311 | 312 |
313 | 316 |
2020, BDRip
317 |
318 |
319 |
320 | 321 | 322 | 323 | 324 | 325 | 326 | Трейлер 327 | 328 | 334 |
335 |
336 | 337 | 338 | 339 | 340 | 341 | 342 | Трейлер 343 | 344 |
345 | 348 |
2020, BDRip
349 |
350 |
351 |
352 | 353 | 354 | 355 | 356 | 357 | 358 | Трейлер 359 | 360 |
361 | 364 |
2017, BDRip
365 |
366 |
367 |
368 | 369 | 370 | 371 | 372 | 375 | 376 |
377 | 378 | 379 | 476 | 477 | 478 | 484 | 485 | 486 | 487 | 493 | 494 | 495 | 496 | 497 | --------------------------------------------------------------------------------