Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
e4d08dda61
|
|||
|
6875a96723
|
|||
|
bfd3343896
|
|||
|
d21b413267
|
|||
|
a658bc5362
|
|||
|
3ff2411c22
|
|||
|
486d7e203e
|
|||
|
bc5782cac8
|
|||
|
291286bbb1
|
|||
|
b8436e70ce
|
|||
|
8cd72996cb
|
@@ -9,12 +9,16 @@ defusedxml==0.7.1
|
|||||||
Django==4.0.3
|
Django==4.0.3
|
||||||
django-allauth==0.50.0
|
django-allauth==0.50.0
|
||||||
django-crispy-forms==1.14.0
|
django-crispy-forms==1.14.0
|
||||||
|
django-filter==21.1
|
||||||
|
djangorestframework==3.13.1
|
||||||
|
djangorestframework-gis==0.18
|
||||||
idna==3.3
|
idna==3.3
|
||||||
oauthlib==3.2.0
|
oauthlib==3.2.0
|
||||||
psycopg2==2.9.3
|
psycopg2==2.9.3
|
||||||
pycparser==2.21
|
pycparser==2.21
|
||||||
PyJWT==2.3.0
|
PyJWT==2.3.0
|
||||||
python3-openid==3.2.0
|
python3-openid==3.2.0
|
||||||
|
pytz==2022.1
|
||||||
requests==2.27.1
|
requests==2.27.1
|
||||||
requests-oauthlib==1.3.1
|
requests-oauthlib==1.3.1
|
||||||
sqlparse==0.4.2
|
sqlparse==0.4.2
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-04-19 22:02+0300\n"
|
"POT-Creation-Date: 2022-04-21 18:39+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -19,154 +19,25 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||||
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
|
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
|
||||||
"%100>=11 && n%100<=14)? 2 : 3);\n"
|
"%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
#: .\templates\account\account_inactive.html:5
|
|
||||||
#: .\templates\account\account_inactive.html:8
|
|
||||||
msgid "Account Inactive"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\account_inactive.html:10
|
#: maps/apps.py:8
|
||||||
msgid "This account is inactive."
|
msgid "Maps"
|
||||||
msgstr ""
|
msgstr "Карты"
|
||||||
|
|
||||||
#: .\templates\account\email.html:5 .\templates\account\email.html:8
|
#: maps/models.py:16
|
||||||
msgid "E-mail Addresses"
|
msgid "facility"
|
||||||
msgstr ""
|
msgstr "предприятие"
|
||||||
|
|
||||||
#: .\templates\account\email.html:10
|
#: maps/models.py:17
|
||||||
msgid "The following e-mail addresses are associated with your account:"
|
msgid "facilities"
|
||||||
msgstr ""
|
msgstr "предприятия"
|
||||||
|
|
||||||
#: .\templates\account\email.html:24
|
#: templates/account/login.html:8 templates/account/login.html:17
|
||||||
msgid "Verified"
|
#: templates/account/login.html:44 templates/common/base.html:47
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:26
|
|
||||||
msgid "Unverified"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:28
|
|
||||||
msgid "Primary"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:34
|
|
||||||
msgid "Make Primary"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:35
|
|
||||||
msgid "Re-send Verification"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:36
|
|
||||||
msgid "Remove"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:43
|
|
||||||
msgid "Warning:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:43
|
|
||||||
msgid ""
|
|
||||||
"You currently do not have any e-mail address set up. You should really add "
|
|
||||||
"an e-mail address so you can receive notifications, reset your password, etc."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:48
|
|
||||||
msgid "Add E-mail Address"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:53
|
|
||||||
msgid "Add E-mail"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email.html:63
|
|
||||||
msgid "Do you really want to remove the selected e-mail address?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\base_message.txt:1
|
|
||||||
#, python-format
|
|
||||||
msgid "Hello from %(site_name)s!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\base_message.txt:5
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"Thank you for using %(site_name)s!\n"
|
|
||||||
"%(site_domain)s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\email_confirmation_message.txt:5
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You're receiving this e-mail because user %(user_display)s has given your e-"
|
|
||||||
"mail address to register an account on %(site_domain)s.\n"
|
|
||||||
"\n"
|
|
||||||
"To confirm this is correct, go to %(activate_url)s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\email_confirmation_subject.txt:3
|
|
||||||
msgid "Please Confirm Your E-mail Address"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\password_reset_key_message.txt:4
|
|
||||||
msgid ""
|
|
||||||
"You're receiving this e-mail because you or someone else has requested a "
|
|
||||||
"password for your user account.\n"
|
|
||||||
"It can be safely ignored if you did not request a password reset. Click the "
|
|
||||||
"link below to reset your password."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\password_reset_key_message.txt:9
|
|
||||||
#, python-format
|
|
||||||
msgid "In case you forgot, your username is %(username)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\password_reset_key_subject.txt:3
|
|
||||||
#: .\templates\account\email\unknown_account_subject.txt:3
|
|
||||||
msgid "Password Reset E-mail"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email\unknown_account_message.txt:4
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are receiving this e-mail because you or someone else has requested a\n"
|
|
||||||
"password for your user account. However, we do not have any record of a "
|
|
||||||
"user\n"
|
|
||||||
"with email %(email)s in our database.\n"
|
|
||||||
"\n"
|
|
||||||
"This mail can be safely ignored if you did not request a password reset.\n"
|
|
||||||
"\n"
|
|
||||||
"If it was you, you can sign up for an account using the link below."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email_confirm.html:6
|
|
||||||
#: .\templates\account\email_confirm.html:10
|
|
||||||
msgid "Confirm E-mail Address"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email_confirm.html:16
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
|
|
||||||
"address for user %(user_display)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email_confirm.html:20
|
|
||||||
msgid "Confirm"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\email_confirm.html:27
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"This e-mail confirmation link expired or is invalid. Please <a href="
|
|
||||||
"\"%(email_url)s\">issue a new e-mail confirmation request</a>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\login.html:8 .\templates\account\login.html:17
|
|
||||||
#: .\templates\account\login.html:44 .\templates\common\base.html:38
|
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\login.html:19
|
#: templates/account/login.html:19
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Please sign in with one\n"
|
"Please sign in with one\n"
|
||||||
@@ -175,212 +46,55 @@ msgid ""
|
|||||||
" for a %(site_name)s account and sign in below:"
|
" for a %(site_name)s account and sign in below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\login.html:29
|
#: templates/account/login.html:29
|
||||||
msgid "or"
|
msgid "or"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\login.html:36
|
#: templates/account/login.html:36
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you have not created an account yet, then please\n"
|
"If you have not created an account yet, then please\n"
|
||||||
" <a href=\"%(signup_url)s\">sign up</a> first."
|
" <a href=\"%(signup_url)s\">sign up</a> first."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Если у вас ещё нет учётной записи, пожалуйста, сначала "
|
"Если у вас ещё нет учётной записи, пожалуйста, сначала <a href="
|
||||||
"<a href=\"%(signup_url)s\">зарегистрируйтесь</a>."
|
"\"%(signup_url)s\">зарегистрируйтесь</a>."
|
||||||
|
|
||||||
#: .\templates\account\login.html:45
|
#: templates/account/login.html:45
|
||||||
#: .\templates\account\password_change.html:14
|
|
||||||
msgid "Forgot Password?"
|
msgid "Forgot Password?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\logout.html:5 .\templates\account\logout.html:8
|
#: templates/account/logout.html:5 templates/account/logout.html:14
|
||||||
#: .\templates\account\logout.html:17 .\templates\common\base.html:33
|
#: templates/account/logout.html:19 templates/common/base.html:42
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\logout.html:10
|
#: templates/account/logout.html:15
|
||||||
msgid "Are you sure you want to sign out?"
|
msgid "Are you sure you want to sign out?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\messages\cannot_delete_primary_email.txt:2
|
#: templates/account/signup.html:7
|
||||||
#, python-format
|
|
||||||
msgid "You cannot remove your primary e-mail address (%(email)s)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\email_confirmation_sent.txt:2
|
|
||||||
#, python-format
|
|
||||||
msgid "Confirmation e-mail sent to %(email)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\email_confirmed.txt:2
|
|
||||||
#, python-format
|
|
||||||
msgid "You have confirmed %(email)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\email_deleted.txt:2
|
|
||||||
#, python-format
|
|
||||||
msgid "Removed e-mail address %(email)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\logged_in.txt:4
|
|
||||||
#, python-format
|
|
||||||
msgid "Successfully signed in as %(name)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\logged_out.txt:2
|
|
||||||
msgid "You have signed out."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\password_changed.txt:2
|
|
||||||
msgid "Password successfully changed."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\password_set.txt:2
|
|
||||||
msgid "Password successfully set."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\primary_email_set.txt:2
|
|
||||||
msgid "Primary e-mail address set."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\messages\unverified_primary_email.txt:2
|
|
||||||
msgid "Your primary e-mail address must be verified."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_change.html:5
|
|
||||||
#: .\templates\account\password_change.html:8
|
|
||||||
#: .\templates\account\password_change.html:13
|
|
||||||
#: .\templates\account\password_reset_from_key.html:4
|
|
||||||
#: .\templates\account\password_reset_from_key.html:7
|
|
||||||
#: .\templates\account\password_reset_from_key_done.html:4
|
|
||||||
#: .\templates\account\password_reset_from_key_done.html:7
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset.html:6
|
|
||||||
#: .\templates\account\password_reset.html:10
|
|
||||||
#: .\templates\account\password_reset_done.html:6
|
|
||||||
#: .\templates\account\password_reset_done.html:9
|
|
||||||
msgid "Password Reset"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset.html:15
|
|
||||||
msgid ""
|
|
||||||
"Forgotten your password? Enter your e-mail address below, and we'll send you "
|
|
||||||
"an e-mail allowing you to reset it."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset.html:20
|
|
||||||
msgid "Reset My Password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset.html:23
|
|
||||||
msgid "Please contact us if you have any trouble resetting your password."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset_done.html:15
|
|
||||||
msgid ""
|
|
||||||
"We have sent you an e-mail. If you have not received it please check your "
|
|
||||||
"spam folder. Otherwise contact us if you do not receive it in a few minutes."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset_from_key.html:7
|
|
||||||
msgid "Bad Token"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset_from_key.html:11
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"The password reset link was invalid, possibly because it has already been "
|
|
||||||
"used. Please request a <a href=\"%(passwd_reset_url)s\">new password reset</"
|
|
||||||
"a>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset_from_key.html:16
|
|
||||||
msgid "change password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_reset_from_key_done.html:8
|
|
||||||
msgid "Your password is now changed."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\password_set.html:5
|
|
||||||
#: .\templates\account\password_set.html:8
|
|
||||||
#: .\templates\account\password_set.html:13
|
|
||||||
msgid "Set Password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\signup.html:5
|
|
||||||
msgid "Signup"
|
msgid "Signup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\signup.html:8 .\templates\account\signup.html:18
|
#: templates/account/signup.html:16 templates/account/signup.html:22
|
||||||
#: .\templates\common\base.html:41
|
#: templates/common/base.html:50
|
||||||
msgid "Sign Up"
|
msgid "Sign Up"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\signup.html:10
|
#: templates/account/signup.html:17
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
|
"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: .\templates\account\signup_closed.html:5
|
#: templates/common/base.html:28
|
||||||
#: .\templates\account\signup_closed.html:8
|
msgid "Map"
|
||||||
msgid "Sign Up Closed"
|
msgstr "Карта"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\signup_closed.html:10
|
#: templates/common/base.html:39
|
||||||
msgid "We are sorry, but the sign up is currently closed."
|
msgid "Admin page"
|
||||||
msgstr ""
|
msgstr "Админка"
|
||||||
|
|
||||||
#: .\templates\account\snippets\already_logged_in.html:5
|
#: templates/common/base.html:41
|
||||||
msgid "Note"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\snippets\already_logged_in.html:5
|
|
||||||
#, python-format
|
|
||||||
msgid "you are already logged in as %(user_display)s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\verification_sent.html:5
|
|
||||||
#: .\templates\account\verification_sent.html:8
|
|
||||||
#: .\templates\account\verified_email_required.html:5
|
|
||||||
#: .\templates\account\verified_email_required.html:8
|
|
||||||
msgid "Verify Your E-mail Address"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\verification_sent.html:10
|
|
||||||
msgid ""
|
|
||||||
"We have sent an e-mail to you for verification. Follow the link provided to "
|
|
||||||
"finalize the signup process. If you do not see the verification e-mail in "
|
|
||||||
"your main inbox, check your spam folder. Please contact us if you do not "
|
|
||||||
"receive the verification e-mail within a few minutes."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\verified_email_required.html:12
|
|
||||||
msgid ""
|
|
||||||
"This part of the site requires us to verify that\n"
|
|
||||||
"you are who you claim to be. For this purpose, we require that you\n"
|
|
||||||
"verify ownership of your e-mail address. "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\verified_email_required.html:16
|
|
||||||
msgid ""
|
|
||||||
"We have sent an e-mail to you for\n"
|
|
||||||
"verification. Please click on the link inside that e-mail. If you do not see "
|
|
||||||
"the verification e-mail in your main inbox, check your spam folder. "
|
|
||||||
"Otherwise\n"
|
|
||||||
"contact us if you do not receive it within a few minutes."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\account\verified_email_required.html:20
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change your e-"
|
|
||||||
"mail address</a>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: .\templates\common\base.html:32
|
|
||||||
msgid "Change E-mail"
|
msgid "Change E-mail"
|
||||||
msgstr "Сменить E-mail"
|
msgstr "Сменить E-mail"
|
||||||
|
|||||||
0
wheretogo/maps/__init__.py
Normal file
13
wheretogo/maps/admin.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from django.contrib.gis.db import models
|
||||||
|
from django.forms.widgets import Textarea
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
|
||||||
|
from maps.models import Facility
|
||||||
|
|
||||||
|
|
||||||
|
class FacilityAdmin(admin.ModelAdmin):
|
||||||
|
formfield_overrides = {models.PointField: {"widget": Textarea}}
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(Facility, FacilityAdmin)
|
||||||
8
wheretogo/maps/api.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
from rest_framework import routers
|
||||||
|
|
||||||
|
from maps.viewsets import FacilityViewSet
|
||||||
|
|
||||||
|
router = routers.DefaultRouter()
|
||||||
|
router.register(r"facilities", FacilityViewSet)
|
||||||
|
|
||||||
|
urlpatterns = router.urls
|
||||||
8
wheretogo/maps/apps.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
class MapConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "maps"
|
||||||
|
verbose_name = _("Maps")
|
||||||
29
wheretogo/maps/migrations/0001_initial.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Generated by Django 4.0.3 on 2022-04-21 11:59
|
||||||
|
|
||||||
|
import django.contrib.gis.db.models.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Facility',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=200)),
|
||||||
|
('address', models.CharField(max_length=100)),
|
||||||
|
('city', models.CharField(max_length=50)),
|
||||||
|
('location', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'facility',
|
||||||
|
'verbose_name_plural': 'Facilities',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
17
wheretogo/maps/migrations/0002_alter_facility_options.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 4.0.3 on 2022-04-21 15:29
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('maps', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='facility',
|
||||||
|
options={'verbose_name': 'facility', 'verbose_name_plural': 'facilities'},
|
||||||
|
),
|
||||||
|
]
|
||||||
0
wheretogo/maps/migrations/__init__.py
Normal file
20
wheretogo/maps/models.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from django.contrib.gis.db import models as gis_models
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Facility(models.Model):
|
||||||
|
name = models.CharField(max_length=200)
|
||||||
|
address = models.CharField(max_length=100)
|
||||||
|
city = models.CharField(max_length=50)
|
||||||
|
location = gis_models.PointField(
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _("facility")
|
||||||
|
verbose_name_plural = _("facilities")
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
11
wheretogo/maps/serializers.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
from rest_framework_gis import serializers
|
||||||
|
|
||||||
|
from maps.models import Facility
|
||||||
|
|
||||||
|
|
||||||
|
class FacilitySerializer(serializers.GeoFeatureModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
|
||||||
|
fields = ("id", "name", "address", "city")
|
||||||
|
geo_field = "location"
|
||||||
|
model = Facility
|
||||||
3
wheretogo/maps/tests.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
8
wheretogo/maps/urls.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
from django.urls import path
|
||||||
|
from maps.views import MapView
|
||||||
|
|
||||||
|
app_name = "maps"
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("map/", MapView.as_view(), name="map"),
|
||||||
|
]
|
||||||
6
wheretogo/maps/views.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
from django.views.generic.base import TemplateView
|
||||||
|
|
||||||
|
|
||||||
|
class MapView(TemplateView):
|
||||||
|
|
||||||
|
template_name = "maps/map.html"
|
||||||
13
wheretogo/maps/viewsets.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from rest_framework import viewsets
|
||||||
|
from rest_framework_gis import filters
|
||||||
|
|
||||||
|
from maps.models import Facility
|
||||||
|
from maps.serializers import FacilitySerializer
|
||||||
|
|
||||||
|
|
||||||
|
class FacilityViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
|
|
||||||
|
bbox_filter_field = "location"
|
||||||
|
filter_backends = (filters.InBBoxFilter,)
|
||||||
|
queryset = Facility.objects.all()
|
||||||
|
serializer_class = FacilitySerializer
|
||||||
3
wheretogo/static/common/css/base.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.navbar {
|
||||||
|
height: 7%;
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 486 B After Width: | Height: | Size: 486 B |
|
Before Width: | Height: | Size: 973 B After Width: | Height: | Size: 973 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
5002
wheretogo/static/css/bootstrap-grid.css
vendored
7
wheretogo/static/css/bootstrap-grid.min.css
vendored
5001
wheretogo/static/css/bootstrap-grid.rtl.css
vendored
426
wheretogo/static/css/bootstrap-reboot.css
vendored
@@ -1,426 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap Reboot v5.0.2 (https://getbootstrap.com/)
|
|
||||||
* Copyright 2011-2021 The Bootstrap Authors
|
|
||||||
* Copyright 2011-2021 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
|
||||||
*/
|
|
||||||
*,
|
|
||||||
*::before,
|
|
||||||
*::after {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
:root {
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
||||||
font-size: 1rem;
|
|
||||||
font-weight: 400;
|
|
||||||
line-height: 1.5;
|
|
||||||
color: #212529;
|
|
||||||
background-color: #fff;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
margin: 1rem 0;
|
|
||||||
color: inherit;
|
|
||||||
background-color: currentColor;
|
|
||||||
border: 0;
|
|
||||||
opacity: 0.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr:not([size]) {
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h6, h5, h4, h3, h2, h1 {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
font-weight: 500;
|
|
||||||
line-height: 1.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: calc(1.375rem + 1.5vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h1 {
|
|
||||||
font-size: 2.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: calc(1.325rem + 0.9vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h2 {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: calc(1.3rem + 0.6vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h3 {
|
|
||||||
font-size: 1.75rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
font-size: calc(1.275rem + 0.3vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h4 {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h5 {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h6 {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
abbr[title],
|
|
||||||
abbr[data-bs-original-title] {
|
|
||||||
-webkit-text-decoration: underline dotted;
|
|
||||||
text-decoration: underline dotted;
|
|
||||||
cursor: help;
|
|
||||||
-webkit-text-decoration-skip-ink: none;
|
|
||||||
text-decoration-skip-ink: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
address {
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
font-style: normal;
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,
|
|
||||||
ul {
|
|
||||||
padding-left: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,
|
|
||||||
ul,
|
|
||||||
dl {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol ol,
|
|
||||||
ul ul,
|
|
||||||
ol ul,
|
|
||||||
ul ol {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin: 0 0 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
small {
|
|
||||||
font-size: 0.875em;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark {
|
|
||||||
padding: 0.2em;
|
|
||||||
background-color: #fcf8e3;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub,
|
|
||||||
sup {
|
|
||||||
position: relative;
|
|
||||||
font-size: 0.75em;
|
|
||||||
line-height: 0;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub {
|
|
||||||
bottom: -0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
sup {
|
|
||||||
top: -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #0d6efd;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #0a58ca;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code,
|
|
||||||
kbd,
|
|
||||||
samp {
|
|
||||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
||||||
font-size: 1em;
|
|
||||||
direction: ltr /* rtl:ignore */;
|
|
||||||
unicode-bidi: bidi-override;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
display: block;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
overflow: auto;
|
|
||||||
font-size: 0.875em;
|
|
||||||
}
|
|
||||||
pre code {
|
|
||||||
font-size: inherit;
|
|
||||||
color: inherit;
|
|
||||||
word-break: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-size: 0.875em;
|
|
||||||
color: #d63384;
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
a > code {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbd {
|
|
||||||
padding: 0.2rem 0.4rem;
|
|
||||||
font-size: 0.875em;
|
|
||||||
color: #fff;
|
|
||||||
background-color: #212529;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
}
|
|
||||||
kbd kbd {
|
|
||||||
padding: 0;
|
|
||||||
font-size: 1em;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
margin: 0 0 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
img,
|
|
||||||
svg {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
caption-side: bottom;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
caption {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
color: #6c757d;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
text-align: inherit;
|
|
||||||
text-align: -webkit-match-parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead,
|
|
||||||
tbody,
|
|
||||||
tfoot,
|
|
||||||
tr,
|
|
||||||
td,
|
|
||||||
th {
|
|
||||||
border-color: inherit;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:focus:not(:focus-visible) {
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
button,
|
|
||||||
select,
|
|
||||||
optgroup,
|
|
||||||
textarea {
|
|
||||||
margin: 0;
|
|
||||||
font-family: inherit;
|
|
||||||
font-size: inherit;
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
button,
|
|
||||||
select {
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
[role=button] {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
word-wrap: normal;
|
|
||||||
}
|
|
||||||
select:disabled {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
[list]::-webkit-calendar-picker-indicator {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
button,
|
|
||||||
[type=button],
|
|
||||||
[type=reset],
|
|
||||||
[type=submit] {
|
|
||||||
-webkit-appearance: button;
|
|
||||||
}
|
|
||||||
button:not(:disabled),
|
|
||||||
[type=button]:not(:disabled),
|
|
||||||
[type=reset]:not(:disabled),
|
|
||||||
[type=submit]:not(:disabled) {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-moz-focus-inner {
|
|
||||||
padding: 0;
|
|
||||||
border-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
resize: vertical;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
min-width: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
legend {
|
|
||||||
float: left;
|
|
||||||
width: 100%;
|
|
||||||
padding: 0;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
font-size: calc(1.275rem + 0.3vw);
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
legend {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
legend + * {
|
|
||||||
clear: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-datetime-edit-fields-wrapper,
|
|
||||||
::-webkit-datetime-edit-text,
|
|
||||||
::-webkit-datetime-edit-minute,
|
|
||||||
::-webkit-datetime-edit-hour-field,
|
|
||||||
::-webkit-datetime-edit-day-field,
|
|
||||||
::-webkit-datetime-edit-month-field,
|
|
||||||
::-webkit-datetime-edit-year-field {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-inner-spin-button {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
[type=search] {
|
|
||||||
outline-offset: -2px;
|
|
||||||
-webkit-appearance: textfield;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* rtl:raw:
|
|
||||||
[type="tel"],
|
|
||||||
[type="url"],
|
|
||||||
[type="email"],
|
|
||||||
[type="number"] {
|
|
||||||
direction: ltr;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
::-webkit-search-decoration {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-color-swatch-wrapper {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
::file-selector-button {
|
|
||||||
font: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-file-upload-button {
|
|
||||||
font: inherit;
|
|
||||||
-webkit-appearance: button;
|
|
||||||
}
|
|
||||||
|
|
||||||
output {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
iframe {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
summary {
|
|
||||||
display: list-item;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
progress {
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
[hidden] {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap Reboot v5.0.2 (https://getbootstrap.com/)
|
|
||||||
* Copyright 2011-2021 The Bootstrap Authors
|
|
||||||
* Copyright 2011-2021 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
|
||||||
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
|
|
||||||
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
|
||||||
423
wheretogo/static/css/bootstrap-reboot.rtl.css
vendored
@@ -1,423 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap Reboot v5.0.2 (https://getbootstrap.com/)
|
|
||||||
* Copyright 2011-2021 The Bootstrap Authors
|
|
||||||
* Copyright 2011-2021 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
|
||||||
*/
|
|
||||||
*,
|
|
||||||
*::before,
|
|
||||||
*::after {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
:root {
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
||||||
font-size: 1rem;
|
|
||||||
font-weight: 400;
|
|
||||||
line-height: 1.5;
|
|
||||||
color: #212529;
|
|
||||||
background-color: #fff;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
margin: 1rem 0;
|
|
||||||
color: inherit;
|
|
||||||
background-color: currentColor;
|
|
||||||
border: 0;
|
|
||||||
opacity: 0.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr:not([size]) {
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h6, h5, h4, h3, h2, h1 {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
font-weight: 500;
|
|
||||||
line-height: 1.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: calc(1.375rem + 1.5vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h1 {
|
|
||||||
font-size: 2.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: calc(1.325rem + 0.9vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h2 {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: calc(1.3rem + 0.6vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h3 {
|
|
||||||
font-size: 1.75rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
font-size: calc(1.275rem + 0.3vw);
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
h4 {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h5 {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h6 {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
abbr[title],
|
|
||||||
abbr[data-bs-original-title] {
|
|
||||||
-webkit-text-decoration: underline dotted;
|
|
||||||
text-decoration: underline dotted;
|
|
||||||
cursor: help;
|
|
||||||
-webkit-text-decoration-skip-ink: none;
|
|
||||||
text-decoration-skip-ink: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
address {
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
font-style: normal;
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,
|
|
||||||
ul {
|
|
||||||
padding-right: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,
|
|
||||||
ul,
|
|
||||||
dl {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol ol,
|
|
||||||
ul ul,
|
|
||||||
ol ul,
|
|
||||||
ul ol {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin: 0 0 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
small {
|
|
||||||
font-size: 0.875em;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark {
|
|
||||||
padding: 0.2em;
|
|
||||||
background-color: #fcf8e3;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub,
|
|
||||||
sup {
|
|
||||||
position: relative;
|
|
||||||
font-size: 0.75em;
|
|
||||||
line-height: 0;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub {
|
|
||||||
bottom: -0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
sup {
|
|
||||||
top: -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #0d6efd;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #0a58ca;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code,
|
|
||||||
kbd,
|
|
||||||
samp {
|
|
||||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
||||||
font-size: 1em;
|
|
||||||
direction: ltr ;
|
|
||||||
unicode-bidi: bidi-override;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
display: block;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
overflow: auto;
|
|
||||||
font-size: 0.875em;
|
|
||||||
}
|
|
||||||
pre code {
|
|
||||||
font-size: inherit;
|
|
||||||
color: inherit;
|
|
||||||
word-break: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-size: 0.875em;
|
|
||||||
color: #d63384;
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
a > code {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbd {
|
|
||||||
padding: 0.2rem 0.4rem;
|
|
||||||
font-size: 0.875em;
|
|
||||||
color: #fff;
|
|
||||||
background-color: #212529;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
}
|
|
||||||
kbd kbd {
|
|
||||||
padding: 0;
|
|
||||||
font-size: 1em;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
margin: 0 0 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
img,
|
|
||||||
svg {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
caption-side: bottom;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
caption {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
color: #6c757d;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
text-align: inherit;
|
|
||||||
text-align: -webkit-match-parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead,
|
|
||||||
tbody,
|
|
||||||
tfoot,
|
|
||||||
tr,
|
|
||||||
td,
|
|
||||||
th {
|
|
||||||
border-color: inherit;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:focus:not(:focus-visible) {
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
button,
|
|
||||||
select,
|
|
||||||
optgroup,
|
|
||||||
textarea {
|
|
||||||
margin: 0;
|
|
||||||
font-family: inherit;
|
|
||||||
font-size: inherit;
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
button,
|
|
||||||
select {
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
[role=button] {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
word-wrap: normal;
|
|
||||||
}
|
|
||||||
select:disabled {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
[list]::-webkit-calendar-picker-indicator {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
button,
|
|
||||||
[type=button],
|
|
||||||
[type=reset],
|
|
||||||
[type=submit] {
|
|
||||||
-webkit-appearance: button;
|
|
||||||
}
|
|
||||||
button:not(:disabled),
|
|
||||||
[type=button]:not(:disabled),
|
|
||||||
[type=reset]:not(:disabled),
|
|
||||||
[type=submit]:not(:disabled) {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-moz-focus-inner {
|
|
||||||
padding: 0;
|
|
||||||
border-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
resize: vertical;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
min-width: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
legend {
|
|
||||||
float: right;
|
|
||||||
width: 100%;
|
|
||||||
padding: 0;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
font-size: calc(1.275rem + 0.3vw);
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
legend {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
legend + * {
|
|
||||||
clear: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-datetime-edit-fields-wrapper,
|
|
||||||
::-webkit-datetime-edit-text,
|
|
||||||
::-webkit-datetime-edit-minute,
|
|
||||||
::-webkit-datetime-edit-hour-field,
|
|
||||||
::-webkit-datetime-edit-day-field,
|
|
||||||
::-webkit-datetime-edit-month-field,
|
|
||||||
::-webkit-datetime-edit-year-field {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-inner-spin-button {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
[type=search] {
|
|
||||||
outline-offset: -2px;
|
|
||||||
-webkit-appearance: textfield;
|
|
||||||
}
|
|
||||||
|
|
||||||
[type="tel"],
|
|
||||||
[type="url"],
|
|
||||||
[type="email"],
|
|
||||||
[type="number"] {
|
|
||||||
direction: ltr;
|
|
||||||
}
|
|
||||||
::-webkit-search-decoration {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-color-swatch-wrapper {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
::file-selector-button {
|
|
||||||
font: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-file-upload-button {
|
|
||||||
font: inherit;
|
|
||||||
-webkit-appearance: button;
|
|
||||||
}
|
|
||||||
|
|
||||||
output {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
iframe {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
summary {
|
|
||||||
display: list-item;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
progress {
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
[hidden] {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap Reboot v5.0.2 (https://getbootstrap.com/)
|
|
||||||
* Copyright 2011-2021 The Bootstrap Authors
|
|
||||||
* Copyright 2011-2021 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
|
||||||
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
|
|
||||||
/*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */
|
|
||||||
4752
wheretogo/static/css/bootstrap-utilities.css
vendored
4743
wheretogo/static/css/bootstrap-utilities.rtl.css
vendored
10837
wheretogo/static/css/bootstrap.css
vendored
7
wheretogo/static/css/bootstrap.min.css
vendored
10813
wheretogo/static/css/bootstrap.rtl.css
vendored
7
wheretogo/static/css/bootstrap.rtl.min.css
vendored
6748
wheretogo/static/js/bootstrap.bundle.js
vendored
7
wheretogo/static/js/bootstrap.bundle.min.js
vendored
4967
wheretogo/static/js/bootstrap.esm.js
vendored
7
wheretogo/static/js/bootstrap.esm.min.js
vendored
5016
wheretogo/static/js/bootstrap.js
vendored
7
wheretogo/static/js/bootstrap.min.js
vendored
1
wheretogo/static/js/jquery.min.js
vendored
11
wheretogo/static/maps/css/map.css
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
html,
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#map {
|
||||||
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
|
||||||
|
height: 93vh;
|
||||||
|
}
|
||||||
BIN
wheretogo/static/maps/img/place.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
77
wheretogo/static/maps/js/map.js
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
const copy = "© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors";
|
||||||
|
const url = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
|
||||||
|
const osm = L.tileLayer(url, { attribution: copy });
|
||||||
|
const map = L.map("map", { layers: [osm], minZoom: 5 });
|
||||||
|
map.
|
||||||
|
locate()
|
||||||
|
.on("locationfound", (e) => map.setView(e.latlng, 12))
|
||||||
|
.on("locationerror", () => map.setView([0, 0], 5));
|
||||||
|
|
||||||
|
|
||||||
|
async function loadFacilities() {
|
||||||
|
const facilities_url = `/api/facilities/?in_bbox=${map.getBounds().toBBoxString()}`
|
||||||
|
const response = await fetch(facilities_url)
|
||||||
|
const geojson = await response.json()
|
||||||
|
return geojson
|
||||||
|
}
|
||||||
|
|
||||||
|
async function renderFacilities() {
|
||||||
|
const facilities = await loadFacilities();
|
||||||
|
L.geoJSON(facilities, {
|
||||||
|
onEachFeature: function (feature) {
|
||||||
|
|
||||||
|
var facilityMarkerStyle = L.Icon.extend({
|
||||||
|
options: {
|
||||||
|
iconSize: [20, 20],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var facilityMarker = new facilityMarkerStyle({ iconUrl: document.getElementById("facilityMarkerURL").innerHTML });
|
||||||
|
|
||||||
|
var lat = feature.geometry.coordinates[1];
|
||||||
|
var lon = feature.geometry.coordinates[0];
|
||||||
|
|
||||||
|
L.marker([lat, lon], { icon: facilityMarker }).bindPopup(feature.properties.name).addTo(map);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
map.on("moveend", renderFacilities);
|
||||||
|
|
||||||
|
|
||||||
|
var clickMarker;
|
||||||
|
|
||||||
|
map.on("click", function (e) {
|
||||||
|
const { lat, lng } = e.latlng;
|
||||||
|
|
||||||
|
const get_addr_api = `https://nominatim.openstreetmap.org/reverse.php?lat=${lat}&lon=${lng}&zoom=18&format=jsonv2`;
|
||||||
|
|
||||||
|
fetchAddressData(get_addr_api).then((data) => {
|
||||||
|
var { city, house_number, road } = data.address;
|
||||||
|
|
||||||
|
if (clickMarker != undefined) {
|
||||||
|
map.removeLayer(clickMarker);
|
||||||
|
};
|
||||||
|
|
||||||
|
clickMarker = L.marker([data.lat, data.lon],).addTo(map);
|
||||||
|
|
||||||
|
var popupText = '<p>' + city + ', ' + road
|
||||||
|
if (house_number) {
|
||||||
|
popupText += ', ' + house_number
|
||||||
|
}
|
||||||
|
popupText += '</p>'
|
||||||
|
|
||||||
|
clickMarker.bindPopup(popupText).openPopup();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
async function fetchAddressData(url) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(url);
|
||||||
|
const data = await response.json();
|
||||||
|
return data;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})
|
||||||
@@ -7,12 +7,17 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>{% block head_title %}{% endblock %}</title>
|
<title>{% block head_title %}{% endblock %}</title>
|
||||||
<link rel="icon" type="image/x-icon" href="{% static 'img/favicon.ico' %}">
|
<link rel="icon" type="image/x-icon" href="{% static 'common/img/favicon.ico' %}">
|
||||||
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||||
<script type = "text/javascript" src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
|
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
|
||||||
{% csrf_token %}
|
crossorigin="anonymous">
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
|
||||||
|
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
|
||||||
|
crossorigin="anonymous"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{% static 'common/css/base.css' %}" />
|
||||||
{% block extra_head %}
|
{% block extra_head %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
{% csrf_token %}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||||
@@ -20,6 +25,9 @@
|
|||||||
<a class="navbar-brand" href="/">WhereToGo</a>
|
<a class="navbar-brand" href="/">WhereToGo</a>
|
||||||
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="{% url 'maps:map' %}">{% trans "Map" %}</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
|
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
@@ -28,6 +36,9 @@
|
|||||||
{{ user.username }}
|
{{ user.username }}
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownMenuLink">
|
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownMenuLink">
|
||||||
|
{% if user.is_superuser %}
|
||||||
|
<li><a class="dropdown-item" href="{% url 'admin:index' %}">{% trans "Admin page" %}</a></li>
|
||||||
|
{% endif %}
|
||||||
<li><a class="dropdown-item" href="{% url 'account_email' %}">{% trans "Change E-mail" %}</a></li>
|
<li><a class="dropdown-item" href="{% url 'account_email' %}">{% trans "Change E-mail" %}</a></li>
|
||||||
<li><a class="dropdown-item" href="{% url 'account_logout' %}">{% trans "Sign Out" %}</a></li>
|
<li><a class="dropdown-item" href="{% url 'account_logout' %}">{% trans "Sign Out" %}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -41,9 +52,6 @@
|
|||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
<form class="d-flex">
|
|
||||||
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
36
wheretogo/templates/maps/map.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{% extends "common/base.html" %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block head_title %}WhereToGo{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.8.0/dist/leaflet.css"
|
||||||
|
integrity="sha512-hoalWLoI8r4UszCkZ5kL8vayOGVae1oxXe/2A4AO6J9+580uKHDO3JdHb7NzwwzK5xr/Fs0W40kiNHxM9vyTtQ=="
|
||||||
|
crossorigin=""/>
|
||||||
|
<script src="https://unpkg.com/leaflet@1.8.0/dist/leaflet.js"
|
||||||
|
integrity="sha512-BB3hKbKWOc9Ez/TAwyWxNXeoV9c1v6FIeYiBieIWkpLjauysF18NzgR1MBNBXf8/KABdlkX68nAhlwcDFLGPCQ=="
|
||||||
|
crossorigin=""></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{% static 'maps/css/map.css' %}" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container-fluid m-0 p-0">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-9 p-0">
|
||||||
|
<div id="map"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col-3 p-0">
|
||||||
|
<div class="panel">
|
||||||
|
<button>Тест</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span id="facilityMarkerURL" style="display: none;">{% static "maps/img/place.png" %}</span>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
<script src="{% static 'maps/js/map.js' %}"></script>
|
||||||
|
{% endblock %}
|
||||||
@@ -32,11 +32,15 @@ INSTALLED_APPS = [
|
|||||||
"django.contrib.sessions",
|
"django.contrib.sessions",
|
||||||
"django.contrib.messages",
|
"django.contrib.messages",
|
||||||
"django.contrib.staticfiles",
|
"django.contrib.staticfiles",
|
||||||
|
"django.contrib.gis",
|
||||||
|
"rest_framework",
|
||||||
|
"rest_framework_gis",
|
||||||
"crispy_forms",
|
"crispy_forms",
|
||||||
"crispy_bootstrap5",
|
"crispy_bootstrap5",
|
||||||
"allauth",
|
"allauth",
|
||||||
"allauth.account",
|
"allauth.account",
|
||||||
"allauth.socialaccount",
|
"allauth.socialaccount",
|
||||||
|
"maps",
|
||||||
]
|
]
|
||||||
|
|
||||||
SITE_ID = 1
|
SITE_ID = 1
|
||||||
@@ -131,6 +135,7 @@ CRISPY_TEMPLATE_PACK = "bootstrap5"
|
|||||||
LOGIN_REDIRECT_URL = "/"
|
LOGIN_REDIRECT_URL = "/"
|
||||||
|
|
||||||
ACCOUNT_EMAIL_REQUIRED = True
|
ACCOUNT_EMAIL_REQUIRED = True
|
||||||
|
ACCOUNT_EMAIL_VERIFICATION = "none"
|
||||||
|
|
||||||
MESSAGE_TAGS = {
|
MESSAGE_TAGS = {
|
||||||
messages.DEBUG: "alert-info",
|
messages.DEBUG: "alert-info",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
"default": {
|
"default": {
|
||||||
"ENGINE": "django.db.backends.postgresql_psycopg2",
|
"ENGINE": "django.contrib.gis.db.backends.postgis",
|
||||||
"NAME": "wheretogo",
|
"NAME": "wheretogo",
|
||||||
"USER": "wheretogo",
|
"USER": "wheretogo",
|
||||||
"PASSWORD": "",
|
"PASSWORD": "",
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ from django.conf.urls.static import static
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
|
path("api/", include("maps.api")),
|
||||||
path("accounts/", include("allauth.urls")),
|
path("accounts/", include("allauth.urls")),
|
||||||
path("", TemplateView.as_view(template_name="common/index.html")),
|
path("", TemplateView.as_view(template_name="common/index.html")),
|
||||||
|
path("maps/", include("maps.urls", namespace="maps")),
|
||||||
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||||
|
|||||||