Compare commits
526 Commits
Author | SHA1 | Date |
---|---|---|
reverend | f078afcdcd | |
reverend | 163e9beb51 | |
reverend | 6ba225bee3 | |
reverend | a4f80820c9 | |
reverend | 0f7b799c11 | |
reverend | b23dc8a627 | |
reverend | 3e2ab1e12d | |
reverend | 78efe9bebb | |
reverend | 1de203ad40 | |
reverend | 399fa70ab6 | |
reverend | c6a28c7b66 | |
reverend | 9980a2d190 | |
Marcus Scholz | 1bc283bd8d | |
reverend | 4c43f87560 | |
reverend | c8399b9ce4 | |
reverend | f7dab77229 | |
reverend | 8d96214a92 | |
reverend | 6678f8ff02 | |
reverend | 4cd0635d5f | |
reverend | e11151858b | |
reverend | 84b01f3a9a | |
reverend | 3f4bf9475c | |
reverend | b607335299 | |
reverend | b1cd8fd0cc | |
reverend | a7a3ddfe63 | |
reverend | 1c6366fb43 | |
reverend | 565a70bbac | |
reverend | 749aa61828 | |
reverend | e2754dc56c | |
Leonhard Strohmidel | fefc38fa9c | |
Leonhard Strohmidel | 58ab70ba42 | |
Leonhard Strohmidel | c63b0ebb87 | |
Leonhard Strohmidel | 0852e35b57 | |
reverend | e52247d80b | |
reverend | 2ac90bd35c | |
reverend | 3685db6892 | |
reverend | d5789cef75 | |
reverend | 5fca4dc52a | |
reverend | cbf45af5f5 | |
reverend | 244b4d2917 | |
reverend | d8b0ce1ac2 | |
reverend | 8da6964b3c | |
reverend | ccd701ea60 | |
reverend | 170971c44b | |
reverend | 7196820122 | |
reverend | a02d4f5e86 | |
reverend | a7043651e0 | |
reverend | bcf3377190 | |
reverend | ceabe3f6f8 | |
reverend | 6b33d20f90 | |
reverend | 1d787a3b1d | |
reverend | 1960bf3792 | |
reverend | 0c3898163e | |
reverend | 2c6676d2c9 | |
reverend | 52f9df8b2a | |
reverend | ab669b9f5e | |
reverend | 0fe98d4f8f | |
reverend | 51addd8fbb | |
reverend | 29d2813fcc | |
reverend | cc9343270a | |
reverend | 4f465b3162 | |
reverend | b0bf40aa0b | |
reverend | 822a536ebe | |
reverend | 5b9672e21e | |
reverend | 0a5d22d4d9 | |
reverend | 9c86eab14c | |
reverend | 29d067002e | |
reverend | f5f5980f9b | |
reverend | 10c08a2f5e | |
reverend | 50f60be10a | |
reverend | 8b32b56dd9 | |
reverend | 74d842a668 | |
reverend | 2ac39f719f | |
reverend | 9b6121e448 | |
reverend | a139594863 | |
reverend | f2eb048f0b | |
reverend | 120e63808a | |
reverend | 201ef73639 | |
reverend | af7afd0311 | |
reverend | cf6346fdf0 | |
reverend | d641d7b44d | |
reverend | d35cb8131a | |
reverend | ceeae9e8c9 | |
reverend | 092b91825f | |
reverend | 52271811ad | |
reverend | fb1237f111 | |
reverend | bae4e13137 | |
reverend | b752454233 | |
Marcus Scholz | 36eb9566d9 | |
Marcus Scholz | b876435d8c | |
Marcus Scholz | 224eb87d76 | |
Marcus Scholz | a78f123d1f | |
Marcus Scholz | a22c988e94 | |
Marcus Scholz | 7f2283325c | |
Marcus Scholz | 6b7c71ef30 | |
Marcus Scholz | 067bf36118 | |
Marcus Scholz | 9eef044af9 | |
Marcus Scholz | a4780a22f2 | |
reverend | 947f6520aa | |
Marcus Scholz | 0d1d829abe | |
Marcus Scholz | 59cfa82ce9 | |
Marcus Scholz | d47c85795c | |
Marcus Scholz | 8e80614eee | |
reverend | 6a1e2d975b | |
Marcus Scholz | c5f6355f19 | |
Marcus Scholz | dac63e99ba | |
Marcus Scholz | 9f369456d5 | |
Marcus Scholz | 011a58f6b3 | |
Marcus Scholz | 67ce6cb50b | |
reverend | 5df7cc5ec6 | |
reverend | e242dc4add | |
Marcus Scholz | 86cc7f23fe | |
reverend | f73fa616d0 | |
reverend | 629a609ff5 | |
reverend | 04fe93c7bb | |
Marcus Scholz | 3eaa186b66 | |
reverend | b42be489dc | |
Marcus Scholz | cc59254ba4 | |
Marcus Scholz | 67a6517716 | |
Marcus Scholz | 0f5474c2d3 | |
Marcus Scholz | 17e71b71d4 | |
Marcus Scholz | b1aa4473e9 | |
Marcus Scholz | 871acd1dce | |
Marcus Scholz | 14ca45d111 | |
Marcus Scholz | c71fe4cf2d | |
Marcus Scholz | 7359bf5fab | |
Marcus Scholz | 4f0182fc3e | |
Marcus Scholz | 30f259fb4d | |
Marcus Scholz | 53f89caef5 | |
Marcus Scholz | 3855fb28d7 | |
Marcus Scholz | 3a20a60f05 | |
Marcus Scholz | 648264c9fc | |
reverend | dc79b9d05c | |
Marcus Scholz | a7c8848fd6 | |
reverend | b845cc054a | |
Marcus Scholz | 07ea2f164c | |
Marcus Scholz | b0396f5223 | |
Marcus Scholz | 88bffbef8e | |
Marcus Scholz | 2022a924c4 | |
Marcus Scholz | d5827b2006 | |
Marcus Scholz | a9013d9673 | |
Marcus Scholz | 0c38ca9a15 | |
Marcus Scholz | 734d09df90 | |
Marcus Scholz | e601b9bf6b | |
Marcus Scholz | 6f6bd6376d | |
reverend | dc2a703c39 | |
reverend | 063777ece4 | |
reverend | 4675e5814f | |
Marcus Scholz | 35e0f912fe | |
Marcus Scholz | 07fe1bc3ca | |
reverend | 4a43a4bf37 | |
reverend | 61cf148417 | |
reverend | d547ee9db3 | |
reverend | c7b699f615 | |
reverend | 86f95a5dd0 | |
reverend | 916c4b80f7 | |
reverend | b31dc9fc5f | |
reverend | 8f048369bf | |
reverend | f974469996 | |
reverend | dbbd7b0802 | |
Marcus Scholz | d04e986419 | |
Marcus Scholz | cbbda88850 | |
Marcus Scholz | 981c440ce3 | |
Marcus Scholz | c7368f5c44 | |
reverend | abca946883 | |
reverend | 196fb02436 | |
reverend | 9be993d9ba | |
reverend | 20dd880a11 | |
reverend | 946c3091c0 | |
reverend | 4bacd1a28d | |
reverend | 086789aa88 | |
reverend | 3c5b447d4c | |
reverend | cfbb876d2c | |
reverend | 4e0bfef483 | |
reverend | ccdb49c8ea | |
reverend | 90dd281f7c | |
reverend | d9df6e67a8 | |
reverend | cd20e730ba | |
reverend | c613d15e89 | |
reverend | 2380398fa9 | |
Marcus Scholz | 4c5b9c7648 | |
Marcus Scholz | 91a3f3171d | |
Marcus Scholz | 01f7dad37c | |
Marcus Scholz | 2bfdf5c172 | |
Marcus Scholz | 15f6a30cd6 | |
Marcus Scholz | 812c921a42 | |
Marcus Scholz | dafe7eee34 | |
Marcus Scholz | 7943537276 | |
Marcus Scholz | 62c1c84bb2 | |
Marcus Scholz | df36fd8ed0 | |
Marcus Scholz | 8713ed587d | |
Marcus Scholz | 7271ea2cd9 | |
Marcus Scholz | dff2e67991 | |
Marcus Scholz | 65880d1472 | |
Marcus Scholz | 326e34a4b8 | |
Marcus Scholz | 3a213c87b5 | |
Marcus Scholz | 1b197b2e12 | |
Marcus Scholz | 092378b24a | |
Marcus Scholz | 561c70668d | |
Marcus Scholz | cb15789b95 | |
Marcus Scholz | dd07cbd57d | |
Marcus Scholz | 52f9638d74 | |
Marcus Scholz | e52c3f4d4b | |
Marcus Scholz | bac61d5cdc | |
Marcus Scholz | 2d6ee4aef5 | |
Marcus Scholz | 475a255851 | |
Marcus Scholz | f95c7973d7 | |
Marcus Scholz | aad31c2fa7 | |
Marcus Scholz | 3fa6170f0c | |
Marcus Scholz | f73b264a2a | |
Marcus Scholz | e91e8c8894 | |
Marcus Scholz | eea01cd569 | |
reverend | 4e366d94c9 | |
Marcus Scholz | da60d81e90 | |
Marcus Scholz | 2e73cb92d4 | |
reverend | 773390b09f | |
reverend | ac0121d96e | |
reverend | a0c4f2cad3 | |
reverend | 86fbee4116 | |
reverend | ab3ecae54b | |
reverend | ae915681ac | |
reverend | cfbe54a4e5 | |
Marcus Scholz | a976b59732 | |
Marcus Scholz | d6006b17d9 | |
Marcus Scholz | c911f7958a | |
Marcus Scholz | f592aba75d | |
Marcus Scholz | 190eb5eef7 | |
Marcus Scholz | 979900ab07 | |
reverend | 66bd9f648b | |
reverend | 76b514e1e6 | |
Marcus Scholz | b758d53a63 | |
reverend | dabec5185f | |
reverend | c189183e72 | |
Marcus Scholz | 60ad323e7a | |
reverend | 2d2e356f1c | |
reverend | 710663b490 | |
Marcus Scholz | 24c2ac8347 | |
reverend | e0a0fa29d2 | |
reverend | 53817e9dc4 | |
reverend | 556931d2b1 | |
reverend | 485eb7b886 | |
reverend | a2004bd789 | |
Marcus Scholz | e32b3f6595 | |
Marcus Scholz | 12f60bcfdf | |
reverend | b3b8ee3104 | |
reverend | 9613f553e9 | |
Marcus Scholz | 1a8a7cc4f0 | |
Marcus Scholz | 702ebd9137 | |
Marcus Scholz | aa3922da50 | |
Marcus Scholz | d6c609d107 | |
Marcus Scholz | 61566714a3 | |
Marcus Scholz | f4ae5c9f77 | |
Marcus Scholz | cfe3d222e6 | |
Marcus Scholz | e0d6d81907 | |
Marcus Scholz | 5e8e865a99 | |
Marcus Scholz | 3061540396 | |
Marcus Scholz | bb119e8636 | |
Marcus Scholz | 14a98deff3 | |
Marcus Scholz | 4919c90ae8 | |
Marcus Scholz | 5c47587189 | |
Marcus Scholz | 3223637471 | |
reverend | 389e3eac43 | |
reverend | 302e8bb994 | |
Marcus Scholz | 992f8a7b37 | |
Marcus Scholz | c8c3852323 | |
Marcus Scholz | 8d9ab8b088 | |
reverend | 45185b9236 | |
reverend | 5f33ec5824 | |
reverend | e217d3254e | |
reverend | 263416a401 | |
reverend | b4bd86ed44 | |
reverend | 277cac323e | |
reverend | 5f304b91f3 | |
Marcus Scholz | 85f2a81ebb | |
Marcus Scholz | 8de23a3f3b | |
reverend | 3b526c9c6f | |
reverend | 516e7a04ad | |
Marcus Scholz | 84f13ced80 | |
Marcus Scholz | dcd92f7d2a | |
Marcus Scholz | 2a944eeefe | |
Marcus Scholz | dc93539e23 | |
Marcus Scholz | dd58c76aba | |
Marcus Scholz | 106ef6dac8 | |
Marcus Scholz | 2bc99c78c2 | |
Marcus Scholz | 0185c13a95 | |
Marcus Scholz | 9632040ade | |
Marcus Scholz | 85a34b20f9 | |
Marcus Scholz | e25f3da5a5 | |
Marcus Scholz | 4c9234d07a | |
Marcus Scholz | f5853f7777 | |
Marcus Scholz | eb7fe88d59 | |
reverend | 2a3ee3de8d | |
Marcus Scholz | 00ab65d648 | |
Marcus Scholz | 79854f3fa1 | |
Marcus Scholz | 618a152f23 | |
Marcus Scholz | ce91a19068 | |
Marcus Scholz | 17b531e181 | |
Marcus Scholz | 222c97d63c | |
Marcus Scholz | 6a1229a4ba | |
Marcus Scholz | 2bff4db1d7 | |
Marcus Scholz | a3b123a207 | |
Marcus Scholz | e698f3b224 | |
Marcus Scholz | c66baaa765 | |
reverend | 815be3126e | |
Marcus Scholz | 715e953182 | |
Marcus Scholz | 86915f6ec5 | |
Marcus Scholz | 30b42de86f | |
Marcus Scholz | 21217b067f | |
Marcus Scholz | 9b160d2df0 | |
Marcus Scholz | 74a9ee4f39 | |
Marcus Scholz | b0e775d299 | |
Marcus Scholz | d6b82f1556 | |
Marcus Scholz | 3f642daf89 | |
Marcus Scholz | 858cfe1d3c | |
Marcus Scholz | 943d647a47 | |
reverend | d96cf9470a | |
Marcus Scholz | c8b3cff5a6 | |
reverend | 547179b0ca | |
reverend | 0765f6606f | |
reverend | 12881d9345 | |
reverend | 79ed029db0 | |
reverend | 1a8da002cf | |
reverend | c828d04f05 | |
reverend | f919fe30fa | |
reverend | b3db6643b9 | |
reverend | cea3a909b5 | |
reverend | b52d96a55e | |
reverend | 1fb71a172e | |
reverend | 27520c7ca4 | |
reverend | af14cce3f8 | |
reverend | 75bcc91037 | |
reverend | c78ff60231 | |
reverend | 09eb8794b8 | |
reverend | 470e54da8d | |
reverend | 19299598c3 | |
reverend | f1c51ab8a7 | |
reverend | b77c5d1d7f | |
reverend | 05481fc0c8 | |
reverend | 6b00452830 | |
reverend | 7e4c5dcf24 | |
reverend | c0f30e56f7 | |
reverend | 9852646fff | |
reverend | c2d678847e | |
reverend | e77edf18ac | |
reverend | 3780aa6cf1 | |
reverend | 21124ec2ad | |
reverend | 0ee5fc59d3 | |
reverend | b8dfef691e | |
reverend | a1886b0b60 | |
reverend | e1002b5315 | |
reverend | fed90d4f7b | |
reverend | dcfb329c5a | |
reverend | b8a21a8baa | |
reverend | 7f73035b02 | |
reverend | 317437fedc | |
reverend | 26286984c2 | |
reverend | 9ae31c0146 | |
reverend | 87fd8fa96f | |
reverend | c3401e732f | |
reverend | 4ee7373b3f | |
reverend | 64c0c5f8e6 | |
reverend | 18a597c726 | |
Leonhard Strohmidel | baca596603 | |
Marcus Scholz | d993387216 | |
Marcus Scholz | aed2856df3 | |
Marcus Scholz | c78858c152 | |
Marcus Scholz | f49581259e | |
Marcus Scholz | f5bf642cd6 | |
Marcus Scholz | 7687acb366 | |
reverend | e655e1598a | |
reverend | 64ed38332f | |
reverend | d438303aec | |
reverend | 38b3736951 | |
reverend | 6be060ea40 | |
reverend | 5c5756150f | |
reverend | 6e6f4ced7b | |
reverend | b806f7f9e3 | |
reverend | 98c5ddad65 | |
reverend | 654cd87006 | |
reverend | 533efb328c | |
Marcus Scholz | 5b1b23d3e6 | |
Marcus Scholz | bcd003a685 | |
reverend | c4adc3f434 | |
reverend | cba589a38e | |
reverend | a42b29721e | |
reverend | a102152d34 | |
reverend | dc71dcba0d | |
reverend | 266bf0b368 | |
reverend | 88c94acd93 | |
reverend | eede454e76 | |
reverend | b0ddf91677 | |
reverend | c30af40079 | |
reverend | dd266f8cdf | |
reverend | 9c70da0b77 | |
reverend | 89bc00e5da | |
reverend | 72dc41ab79 | |
reverend | 711d46da68 | |
reverend | a8b033dfdb | |
Marcus Scholz | ca0e1a48dc | |
Marcus Scholz | e08f8f60f2 | |
Marcus Scholz | 26e257fe96 | |
Marcus Scholz | 44b06d1c04 | |
Marcus Scholz | 0c2b1a4699 | |
Marcus Scholz | 240b61f428 | |
Marcus Scholz | 64510898bb | |
Marcus Scholz | ab7bbdfc5a | |
Marcus Scholz | c1925c21c0 | |
Marcus Scholz | bd579ad83e | |
reverend | 99afb30611 | |
reverend | bb1dafc89c | |
reverend | 5cc391391e | |
Marcus Scholz | c571a56d55 | |
Marcus Scholz | a0ee491805 | |
Marcus Scholz | 0f22e2021c | |
Marcus Scholz | 7b94482cef | |
Marcus Scholz | 96af47c539 | |
Marcus Scholz | e17f55d7d3 | |
Marcus Scholz | 1ff136c1a8 | |
Marcus Scholz | b2abb50fd2 | |
Marcus Scholz | ac7f5de304 | |
Marcus Scholz | f2b6c3e102 | |
Marcus Scholz | f98c952d9b | |
Marcus Scholz | f13698a856 | |
Marcus Scholz | 45dba48421 | |
Marcus Scholz | ae2c9ed956 | |
Marcus Scholz | 1b2b493128 | |
Marcus Scholz | 1dad2cc1e3 | |
Marcus Scholz | 24a406851e | |
Marcus Scholz | 6b539866c0 | |
Marcus Scholz | e13110f0a2 | |
reverend | f8cae76f05 | |
Marcus Scholz | ca92e2eb94 | |
reverend | 17637ff0b9 | |
reverend | b055c5f891 | |
Marcus Scholz | fb7880681f | |
Marcus Scholz | 35c4d09d7e | |
reverend | 1dee72cd15 | |
reverend | 2837999a5b | |
Marcus Scholz | 924f4821a6 | |
reverend | bf07795f4d | |
reverend | 015cd768e1 | |
Marcus Scholz | a119957313 | |
Marcus Scholz | 6bbc33c9d6 | |
Marcus Scholz | 4fbb914aac | |
Marcus Scholz | cba3fe4366 | |
Marcus Scholz | 5c3b68252e | |
Marcus Scholz | 81a5e8246a | |
Marcus Scholz | 6bf8eb7083 | |
Marcus Scholz | c722830e66 | |
Marcus Scholz | ae41f539a1 | |
Marcus Scholz | c28cc3ac3c | |
Marcus Scholz | 20a735d2ec | |
Marcus Scholz | b755f7f45e | |
Marcus Scholz | b7b3c5b89b | |
Marcus Scholz | b95e565bef | |
reverend | 8ab0e1b177 | |
Marcus Scholz | 91c888db8f | |
reverend | 47718ce17b | |
reverend | 6d89bca033 | |
Marcus Scholz | 69f0f4ccfd | |
Marcus Scholz | 75f8ac4a95 | |
Marcus Scholz | c3eede548c | |
Marcus Scholz | 0eea31a0af | |
reverend | 2509c669f9 | |
reverend | e00c9318fa | |
reverend | 6ed6c2c990 | |
reverend | 328e6899a6 | |
reverend | 843832d978 | |
reverend | e4cd8bb301 | |
reverend | 66581a9d2d | |
reverend | 490a0e9f3e | |
reverend | 7a3b8529f8 | |
reverend | 538b43c2a1 | |
reverend | ca2eac533f | |
reverend | 2007b512c7 | |
reverend | 751d4c81fe | |
reverend | 7a757bcf35 | |
reverend | fc39b46c52 | |
reverend | 55b8d16751 | |
reverend | 36744c65fb | |
reverend | f34d70edd5 | |
reverend | 8198c43451 | |
reverend | 78f0e80136 | |
reverend | c84be34a37 | |
reverend | 3959096c95 | |
reverend | 76daa71217 | |
reverend | 0707d2d51e | |
reverend | d45724b774 | |
reverend | c8e46d42ee | |
reverend | 591469799f | |
reverend | 3cd44959b1 | |
reverend | ffef52269a | |
Marcus Scholz | 9a30ced90c | |
Marcus Scholz | d44bf0c0f2 | |
Marcus Scholz | cad53c070c | |
Marcus Scholz | a0627761a7 | |
Marcus Scholz | 04940a0901 | |
Marcus Scholz | 3ef31eda0f | |
Marcus Scholz | 7cb8bc6bac | |
Marcus Scholz | 636bb880c1 | |
Marcus Scholz | c9d9ca9de0 | |
Marcus Scholz | 5f3be5fc83 | |
Marcus Scholz | f916ac9742 | |
Marcus Scholz | 03af8a0c02 | |
Marcus Scholz | 65f3642272 | |
Marcus Scholz | e00a0f687b | |
Marcus Scholz | 9af55d3f24 | |
Marcus Scholz | 719e75a449 | |
Marcus Scholz | 6688536a78 | |
Marcus Scholz | 7835ddcf16 | |
Marcus Scholz | 3caada8f08 | |
Marcus Scholz | 4113811c5f | |
Marcus Scholz | a660763ea4 | |
Marcus Scholz | 55fe79b82c | |
Marcus Scholz | b34e88a3ad | |
Marcus Scholz | f52dd733d8 | |
Marcus Scholz | ff428beaef | |
Marcus Scholz | e8c4faff8e | |
Marcus Scholz | 0b0a401486 | |
Marcus Scholz | 2b56eed759 | |
Marcus Scholz | e387091da6 | |
reverend | 5c5ad9502c | |
reverend | baf3f54e1a | |
reverend | 8cb7e61274 | |
reverend | fa1274c595 | |
reverend | a5839c2c36 |
|
@ -9,8 +9,8 @@ db.sqlite3
|
|||
db.sqlite3-journal
|
||||
db.sqlite3.bak
|
||||
# user uploaded files
|
||||
media
|
||||
uploads
|
||||
static_files
|
||||
|
||||
### Django.Python Stack ###
|
||||
# Byte-compiled / optimized / DLL files
|
||||
|
@ -65,12 +65,6 @@ coverage.xml
|
|||
# Translations
|
||||
*.mo
|
||||
|
||||
# Django stuff:
|
||||
# exclude migrations from repository. These should be created locally, matching local DB requirements.
|
||||
# lostplaces/manage.py makemigrations && lostplaces/manage.py migrate
|
||||
|
||||
lostplaces/lostplaces_app/migrations/
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
|
@ -85,7 +79,6 @@ Pipfile.lock
|
|||
__pypackages__/
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
|
@ -94,4 +87,7 @@ env.bak/
|
|||
venv.bak/
|
||||
|
||||
# Editors
|
||||
.vscode
|
||||
.vscode
|
||||
|
||||
# twine / pypi
|
||||
.pypirc
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
pipeline {
|
||||
agent {
|
||||
docker {
|
||||
image 'kennethreitz/pipenv'
|
||||
args '--user root --privileged'
|
||||
}
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('setup') {
|
||||
steps {
|
||||
script {
|
||||
sh 'pipenv install'
|
||||
sh 'pipenv install --dev'
|
||||
sh 'pip install setuptools'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('migration') {
|
||||
steps {
|
||||
script {
|
||||
sh 'pipenv run makemigrations'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('build') {
|
||||
steps {
|
||||
script {
|
||||
sh 'pipenv run build'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
archiveArtifacts artifacts: 'dist/*.whl', fingerprint: false
|
||||
}
|
||||
}
|
||||
}
|
18
LICENSE
|
@ -1,7 +1,19 @@
|
|||
Copyright 2020 Reverend, Commander1024
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
|
26
Pipfile
|
@ -5,13 +5,33 @@ verify_ssl = true
|
|||
|
||||
[dev-packages]
|
||||
pylint = "*"
|
||||
coverage = "*"
|
||||
autopep8 = "*"
|
||||
pipenv = "*"
|
||||
wheel = "*"
|
||||
twine = "*"
|
||||
pandoc = "*"
|
||||
pylint-django = "*"
|
||||
setuptools = "*"
|
||||
django-nose = "*"
|
||||
invoke = "*"
|
||||
|
||||
[packages]
|
||||
django = "*"
|
||||
easy-thumbnails = "*"
|
||||
image = "*"
|
||||
django-widget-tweaks = "*"
|
||||
django-taggit = "*"
|
||||
|
||||
# Commented out to not explicitly specify Python 3 subversion.
|
||||
# [requires]
|
||||
# python_version = "3.8"
|
||||
[scripts]
|
||||
test = "django_lostplaces/manage.py test lostplaces"
|
||||
server = "django_lostplaces/manage.py runserver --ipv6"
|
||||
dbshell = "django_lostplaces/manage.py dbshell"
|
||||
showmigrations = "django_lostplaces/manage.py showmigrations"
|
||||
makemigrations = "django_lostplaces/manage.py makemigrations --no-input"
|
||||
migrate = "django_lostplaces/manage.py migrate"
|
||||
build = "django_lostplaces/setup.py bdist_wheel --universal"
|
||||
createsuperuser = "django_lostplaces/manage.py createsuperuser --noinput --username admin --email admin@example.org"
|
||||
createsuperuser_prompt = "django_lostplaces/manage.py createsuperuser"
|
||||
quickstart = "invoke quickstart"
|
||||
security = "pipenv check"
|
156
Readme.md
|
@ -2,35 +2,165 @@
|
|||
|
||||
lostplaces-backend is a django (3.x) based webproject. It once wants to become a software which allows a group of urban explorers to manage, document and share the locations of lost places while not exposing too much / any information to the public.
|
||||
|
||||
The software is currently in early development status, neither scope, datalmodel(s) nor features are finalized yet. Therefore we would not recommend to download or install this piece of software anywhere - except your local django dev server.
|
||||
The software is currently in early development status, neither scope, datamodel(s) nor features are finalized yet. Therefore we would not recommend to download or install this piece of software anywhere - except your local django dev server.
|
||||
|
||||
We value privacy as a whole, all resources the frontend requires will be shipped with lostplace's distribution. We also try to minimize the use of JavaScript as far as we can and try to offer JS-less alternatives where we can.
|
||||
|
||||
## Contact
|
||||
If you run into any issues, have any questions or If you are interested in this project in general, feel free to get in touch with us via [reverend@reverend2048.de](mailto:reverend@reverend2048.de), we do speak English and German.
|
||||
|
||||
## Features
|
||||
- Manage lost places with lots of useful information.
|
||||
- OSM-Maps
|
||||
- Sensitive information is not accessible for anonymous (not logged in) users.
|
||||
- User self registration using a voucher system, only people you invite can join your instance.
|
||||
- Collaboration, every user can add informations like tags, photos and external links to your place.
|
||||
|
||||
## Dependencies
|
||||
Right now it depends on the following non-core Python 3 libraries. These can be installed using the package manager of your distribution or into the venv locally.
|
||||
|
||||
* [django](https://www.djangoproject.com/) django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.
|
||||
* [easy-thumbnails](https://github.com/SmileyChris/easy-thumbnails) A powerful, yet easy to implement thumbnailing application for Django 1.11+
|
||||
* [django](https://www.djangoproject.com/) is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.
|
||||
* [easy-thumbnails](https://github.com/SmileyChris/easy-thumbnails) A powerful, yet easy to implement thumbnailing application for Django 1.11+.
|
||||
* [image](https://github.com/francescortiz/image) Image cropping for django.
|
||||
* [django-widget-tweaks](https://github.com/jazzband/django-widget-tweaks) Tweak the form field rendering in templates, not in python-level form definitions.
|
||||
* [django-taggit](https://github.com/jazzband/django-taggit) A simpler approach to tagging with Django.
|
||||
|
||||
### Bundled Dependencies
|
||||
We also leverage some other great OpenSource projects' code. We bundle those in the distribution to obsolete the need to pull those files from monitored CDNs.
|
||||
|
||||
### Setting up a (pipenv) virtual environment for development
|
||||
* [OpenLayers](https://openlayers.org/) [6.4.3] OpenLayers makes it easy to put a dynamic map in any web page. It can display map tiles, vector data and markers loaded from any source.
|
||||
* [Crimson Pro font](https://github.com/Fonthausen/CrimsonPro) [1.002] Crimson Pro is a serif typeface family: Contemporary, clear, classic and rounded/open.
|
||||
* [Montserrat](https://github.com/JulietaUla/Montserrat) [7.210] A beautiful sans serif typeface.
|
||||
|
||||
After having obtained the repository contents (either via .zip download or git clone), you can easily setup a pipenv virtual environment. The repo provides a Pipfile for easy dependency management that does not mess with your system.
|
||||
|
||||
```
|
||||
# Installing a development instance
|
||||
## Clone the repository
|
||||
`git clone https://git.commander1024.de/Commander1024/lostplaces-backend`
|
||||
## Setting up a (pipenv) virtual environment for development
|
||||
|
||||
After having obtained the repository contents (either via .zip download or git clone), you can easily setup a [pipenv](https://docs.pipenv.org/) virtual environment. The repo provides a Pipfile for easy dependency management that does not mess with your system.
|
||||
|
||||
```shell
|
||||
$ cd lostplaces-backend
|
||||
$ pipenv install
|
||||
$ pipenv shell
|
||||
(lostplaces-backend) $ lostplaces/manage.py migrate
|
||||
(lostplaces-backend) $ lostplaces/manage.py createsuperuser
|
||||
(lostplaces-backend) $ lostplaces/manage.py runserver
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py makemigrations
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py migrate
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py createsuperuser
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py runserver --ipv6
|
||||
```
|
||||
|
||||
### Returning to the venv
|
||||
```
|
||||
## Returning to the venv
|
||||
```shell
|
||||
$ cd lostplaces-backend
|
||||
$ pipenv shell
|
||||
(lostplaces-backend) $ lostplaces/manage.py runserver
|
||||
(lostplaces-backend) $ pipenv update # If dependencies changed, or updates available
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py makemigrations # If datamodels changed
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py migrate # If datamodels changed
|
||||
(lostplaces-backend) $ django_lostplaces/manage.py runserver --ipv6
|
||||
```
|
||||
|
||||
Visit: [admin](http://localhost:8000/admin) for administrative backend or
|
||||
[frontend](http://localhost:8000/)
|
||||
[frontend](http://localhost:8000/).
|
||||
|
||||
Happy developing ;-)
|
||||
|
||||
# Pipenv Scripts
|
||||
This project comes with a bunch of convinient scripts, like:
|
||||
|Script|Description|
|
||||
|---|---|
|
||||
|test|Runs the tests|
|
||||
|server|Starts a **development** server|
|
||||
|dbshell|Opens a shell session in the database|
|
||||
|showmigrations|Lists all Migrations|
|
||||
|makemigrations|Creates a migration|
|
||||
|migrate|Applies unapplied migrations|
|
||||
|build|Builds this project into a wheel file|
|
||||
|createsuperuser|Creates a superuser with the username **admin** and the password **develop**. This is for development and demo instances only!
|
||||
|quickstart|Runs *migrate*, *createsuperuser* and *server*|
|
||||
|
||||
|
||||
# Installing a productive instance
|
||||
|
||||
Currently there are two ways to deploy the lostplaces project:
|
||||
1. Cloning this repository, including the configured django instance.
|
||||
2. Install the package and setup the django instance yourself.
|
||||
|
||||
## Cloning the repository
|
||||
|
||||
Essentially, this is the same as installing a development instance, but without the development server (manage.py runserver) and something powerful (Apache, NGINX) instead. You have to configure the webserver to work with the *SGI Api respectively, reference [django's guide for deployment](https://docs.djangoproject.com/en/3.1/howto/deployment/) for further information.
|
||||
|
||||
You also should setup a dedicated database server, the built-in SQLite file is not recommended for production use. Reference [django's guide for databases](https://docs.djangoproject.com/en/3.1/ref/databases/) for further information.
|
||||
|
||||
Before making the django instance public, you should tweak the config `settings.py`:
|
||||
1. Change the secret key, the one found in the config is already public. Choose something secure (i.e. [this](https://duckduckgo.com/?q=password+generator+64)).
|
||||
2. Turn off debug mode by setting `DEBUG = False`.
|
||||
3. Tune the localization settings, see [django's documentation](https://docs.djangoproject.com/en/3.1/topics/i18n/).
|
||||
|
||||
Run `django_lostplaces/managy.py collectstatic` and you should be ready to go.
|
||||
|
||||
|
||||
## Installing lostplaces to an existing django instance
|
||||
|
||||
### Installing django and the django_lostplaces app
|
||||
|
||||
If you haven't already setup a django instance, see [django's documentation](https://docs.djangoproject.com/en/3.1/topics/install/).
|
||||
|
||||
Afterwards, either
|
||||
- download the desired release [from the releases page](https://git.mowoe.com/reverend/lostplaces-backend/releases) and install it using `pip install --user name-of-the-file.tar.gz`
|
||||
- or install the latest release using `pip install django-lostplaces`
|
||||
|
||||
*Note: You can run pip install without the --user flag, which will require root privileges and introduces potential security issues.*
|
||||
|
||||
### Configuring the django instance
|
||||
|
||||
Now configure your `settings.py` as follows:
|
||||
1. Add the following apps to the django project.
|
||||
|
||||
```python
|
||||
INSTALLED_APPS = [
|
||||
...
|
||||
'django_lostplaces',
|
||||
'easy_thumbnails',
|
||||
'widget_tweaks',
|
||||
'django_taggit'
|
||||
]
|
||||
```
|
||||
|
||||
2. Set the URL's and Root-directories for file handling, for example:
|
||||
|
||||
```python
|
||||
STATIC_URL = '/static/'
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
|
||||
|
||||
MEDIA_URL = '/uploads/'
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
|
||||
```
|
||||
|
||||
3. Set the URL's for login, for example:
|
||||
|
||||
```python
|
||||
LOGIN_URL = reverse_lazy('login')
|
||||
LOGIN_REDIRECT_URL = reverse_lazy('django_lostplaces_home')
|
||||
LOGOUT_REDIRECT_URL = reverse_lazy('django_lostplaces_home')
|
||||
```
|
||||
|
||||
### Configuring the URL's
|
||||
In the `urls.py` configure the `urlpatterns` like this:
|
||||
```python
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('signup/', SignUpView.as_view(), name='signup'), # If you want to use lostplaces' sign up view.
|
||||
path('explorers/', include('django.contrib.auth.urls')), # You can change the 'explorers/' to whatever you desire.
|
||||
path('', include('django_lostplaces.urls')), # In this configuration django_lostplaces will be at the top level of you website, change '' to 'django_lostplaces/', if you don't want this.
|
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # So django can deliver user uploaded files.
|
||||
```
|
||||
|
||||
Before making the django instance public, you should tweak the config `settings.py`:
|
||||
1. Change the secret key, the one found in the config is already public. Choose something secure (i.e. [this](https://duckduckgo.com/?q=password+generator+64)).
|
||||
2. Turn off debug mode by setting `DEBUG = False`.
|
||||
3. Tune the localization settings, see [django's documentation](https://docs.djangoproject.com/en/3.1/topics/i18n/).
|
||||
4. Set a new (random) SECRET_KEY in settings.py, e. g.: `base64 /dev/urandom | head -c50`
|
||||
|
||||
|
||||
Run `django_lostplaces/manage.py collectstatic` you should be ready to go.
|
|
@ -0,0 +1,6 @@
|
|||
exclude
|
||||
include LICENSE
|
||||
include Readme.rst
|
||||
include Pipfile
|
||||
recursive-include lostplaces/static *
|
||||
recursive-include lostplaces/templates *
|
|
@ -14,6 +14,6 @@ import os
|
|||
|
||||
from django.core.asgi import get_asgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lostplaces.settings')
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_lostplaces.settings')
|
||||
|
||||
application = get_asgi_application()
|
|
@ -4,24 +4,29 @@
|
|||
"""
|
||||
Django settings for lostplaces project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 3.0.8.
|
||||
!!! Instead of changing this file, you can override settings in !!!
|
||||
!!! local_settings.py. That way it won't cause merge conflicts on pull. !!!
|
||||
|
||||
Generated by 'django-admin startproject' using Django 3.1.8.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/3.0/topics/settings/
|
||||
https://docs.djangoproject.com/en/3.1/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/3.0/ref/settings/
|
||||
https://docs.djangoproject.com/en/3.1/ref/settings/
|
||||
"""
|
||||
|
||||
import os
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
|
||||
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'n$(bx8(^)*wz1ygn@-ekt7rl^1km*!_c+fwwjiua8m@-x_rpl0'
|
||||
|
@ -29,21 +34,30 @@ SECRET_KEY = 'n$(bx8(^)*wz1ygn@-ekt7rl^1km*!_c+fwwjiua8m@-x_rpl0'
|
|||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
ALLOWED_HOSTS = ['localhost']
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'lostplaces_app',
|
||||
'lostplaces',
|
||||
'easy_thumbnails',
|
||||
'widget_tweaks',
|
||||
'taggit',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'easy_thumbnails',
|
||||
'widget_tweaks',
|
||||
'django_nose'
|
||||
]
|
||||
|
||||
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||
|
||||
NOSE_ARGS = [
|
||||
'--with-coverage',
|
||||
'--cover-package=lostplaces',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
@ -54,14 +68,15 @@ MIDDLEWARE = [
|
|||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'lostplaces.urls'
|
||||
ROOT_URLCONF = 'django_lostplaces.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [os.path.join(BASE_DIR, 'templates')],
|
||||
'DIRS': [],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
|
@ -74,11 +89,11 @@ TEMPLATES = [
|
|||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'lostplaces.wsgi.application'
|
||||
WSGI_APPLICATION = 'django_lostplaces.wsgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
|
||||
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
|
@ -89,7 +104,7 @@ DATABASES = {
|
|||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
|
||||
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
|
@ -108,7 +123,7 @@ AUTH_PASSWORD_VALIDATORS = [
|
|||
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/3.0/topics/i18n/
|
||||
# https://docs.djangoproject.com/en/3.1/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
|
@ -120,31 +135,36 @@ USE_L10N = True
|
|||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/3.0/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
STATICFILES_DIRS = [
|
||||
os.path.join(BASE_DIR, "static")
|
||||
LANGUAGES = [
|
||||
('de', _('German')),
|
||||
('en', _('English')),
|
||||
]
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/3.1/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
|
||||
|
||||
# Upload directory
|
||||
MEDIA_URL = '/uploads/'
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
|
||||
|
||||
# Use custom user model
|
||||
AUTH_USER_MODEL = 'lostplaces_app.Explorer'
|
||||
# Thumbnails
|
||||
THUMBNAIL_MEDIA_ROOT = os.path.join(MEDIA_ROOT, 'thumbs/')
|
||||
THUMBNAIL_MEDIA_URL = os.path.join(MEDIA_URL, 'thumbs/')
|
||||
THUMBNAIL_QUALITY = 75
|
||||
|
||||
# Templates to use for authentication
|
||||
LOGIN_REDIRECT_URL = 'home'
|
||||
LOGOUT_REDIRECT_URL = 'home'
|
||||
|
||||
LOGIN_URL = reverse_lazy('login')
|
||||
LOGIN_REDIRECT_URL = reverse_lazy('lostplaces_home')
|
||||
LOGOUT_REDIRECT_URL = reverse_lazy('lostplaces_home')
|
||||
|
||||
THUMBNAIL_ALIASES = {
|
||||
'': {
|
||||
'thumbnail': {'size': (300, 300), 'crop': False},
|
||||
'hero': {'size': (700, 700), 'crop': False},
|
||||
'large': {'size': (1920, 1920), 'crop': False},
|
||||
},
|
||||
}
|
||||
|
||||
# Load and override settings from local_settings.py and don't fail on errors.
|
||||
|
||||
try:
|
||||
from .local_settings import *
|
||||
except ImportError:
|
||||
pass
|
|
@ -23,8 +23,11 @@ from django.conf.urls.static import static
|
|||
from django.urls import path, include
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
from lostplaces.views import SignUpView
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('explorers/', include('django.contrib.auth.urls')),
|
||||
path('', include('lostplaces_app.urls')),
|
||||
path('signup/', SignUpView.as_view(), name='signup'),
|
||||
path('explorer/', include('django.contrib.auth.urls')),
|
||||
path('', include('lostplaces.urls')),
|
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
|
@ -14,6 +14,6 @@ import os
|
|||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lostplaces.settings')
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_lostplaces.settings')
|
||||
|
||||
application = get_wsgi_application()
|
|
@ -0,0 +1,155 @@
|
|||
# django lostplaces documentation for developer
|
||||
|
||||
Greetings,
|
||||
this documentation is for anyone who wants to work with this projects codebase or is just curious about how it works.
|
||||
|
||||
|
||||
## Models
|
||||
The models contain an custom user profile, some abstract base models and the models holding the actual data for this project
|
||||
|
||||
|
||||
### Explorer user profile
|
||||
Location: `lostplaces.models.models.Explorer`
|
||||
Import from: `lostplaces.models.Explorer`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
|
||||
The class `lostplaces.models.Explorer` is our custom user profile. It has an ForeignKey pointing at django's default user model instead of providing an entire custom user model. That way this django app does not conflict with any other app that brings it's own user model.
|
||||
|
||||
You can access the explorer profile by accessing the 'explorer' attribute of any user instance
|
||||
```python
|
||||
user.explorer
|
||||
```
|
||||
|
||||
Currently the explorer profile is used by the abstract model 'Submittable' and has the following realated names/fiels:
|
||||
- [places](###place) A list containing all (lost) places the user has submitted
|
||||
- [placeimages](###placeimages) A list containing all images relating a place that a user has submitted
|
||||
- [photoalbums](###photoalbums) A list of all photo albums a explorere has submitted
|
||||
|
||||
|
||||
### Taggable
|
||||
Location: `lostplaces.models.abstract_models.Taggable`
|
||||
Import from: `lostplaces.models.Taggable`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
|
||||
The abstract model Taggable represents an model that is taggable. It depends on the django app [taggit](https://github.com/jazzband/django-taggit). It only consists of one field:
|
||||
- `tag`: TaggableManager, allows the sub class to be tagged, blank=True allows the admin form to be submitted without any tags
|
||||
|
||||
|
||||
### Mapable
|
||||
Location: `lostplaces.models.abstract_models.Mapable`
|
||||
Import from: `lostplaces.models.Mapable`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
|
||||
The abstract model Mapable represents an model that can be displayed on a map. It consists of tree attributes
|
||||
`name`
|
||||
Name of the object, displayed on the map, max length 50 characters
|
||||
`latitude`
|
||||
Latitude of the referenced location, -90 <= value <= 90
|
||||
`longitude`
|
||||
Longitude of the referenced location -180 <= value <= 180
|
||||
A mapable model has to provide its own get_absolute_url, in order to provide a link when clicked.
|
||||
|
||||
|
||||
### Submittable
|
||||
Location: `lostplaces.models.abstract_models.Submittable`
|
||||
Import from: `lostplaces.models.Submittable`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
|
||||
The abstract model Submittable represents an model that can be submitted by an user. It knows who submitted something and when:
|
||||
`submitted_by`
|
||||
Referencing the explorer profile, see [Explorer](##explorer-user-profile). If the explorer profile is deleted, this instance is kept (on_delete=models.SET_NULL). The related_name is set to the class name, lower case appending an s (%(class)ss)
|
||||
`submitted_when`
|
||||
When the object was submitted, automatically set by django (auto_now_add=True)
|
||||
|
||||
### Expireable
|
||||
Location: `lostplaces.models.abstract_models.Expireable`
|
||||
Import from: `lostplaces.models.Expireable`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
|
||||
This abstract model represents an object that can expire. It is currently used by the Voucher model. I consists of two fields:
|
||||
`created_when`
|
||||
The date the object was created, automatically set by django (auto_now_add=True)
|
||||
`expires_when`
|
||||
The date the object expires.
|
||||
|
||||
### Voucher
|
||||
Locatoin: `lostplaces.models.Voucher`
|
||||
Import from: `lostplaces.models.Voucher`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
- [lostplaces.models.Expireable](###expireable)
|
||||
|
||||
A voucher code is needed to sign up using lostplaces sign up form. The model contains
|
||||
`code`
|
||||
The voucher code, max length 30 characters
|
||||
`created_when`
|
||||
When the voucher was created automatically set by django (auto_now_add=True)
|
||||
`expires_when`
|
||||
Till what date the voucher remains valid
|
||||
|
||||
|
||||
### Place
|
||||
Location: `lostplaces.models.place.Place`
|
||||
Import from: `lostplaces.models.Place`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
- [lostplaces.models.Submittable](###submittable)-
|
||||
- [lostplaces.models.Taggable](###taggable)
|
||||
- [lostlaces.models.Mapable]
|
||||
|
||||
The place model is the heart of this project. It stores all information about a place needed.
|
||||
`location`
|
||||
Human readable location description (town, village, street), max length 50 characters
|
||||
`description`
|
||||
Describing the place in detail
|
||||
The place model uses these abstract super classes
|
||||
- Submittable, see [Submittable](##submittable) for additional fields
|
||||
- Taggable, see [Taggable](##taggable) for additional fields
|
||||
- Mapable, see [Mapable](##mapable) for additional fields
|
||||
The average_latlon function takes a list of places and returns the center point of all these places.
|
||||
|
||||
### PlaceAsset
|
||||
Location: `lostplaces.models.PlaceAsset`
|
||||
Import from: `lostplaces.models.place.PlaceAsset`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
- [lostplaces.models.Submittable](###submittable)
|
||||
|
||||
A PlaceAsset is anything that belongs to a place. The PlaceImage model for exmpaple is a subclass of PlaceAsset. A PlaceAsset is supposed to be submittable by every user. Only the user who has submitted the asset, the place the asset belongs to or both can delete a asset.
|
||||
|
||||
An PlaceAsset has the following fields
|
||||
`place`
|
||||
The Place this PlaceAsset belongs to
|
||||
|
||||
The PlaceAsset model is a subclass of Submittable, see [Submittable](###submittable) for more details.
|
||||
|
||||
### External Link
|
||||
Loacation: `lostplaces.models.external_link.ExternalLink`
|
||||
Import From: `lostplaces.models.ExternalLink`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
- [lostplaces.models.Submittable](###submittable)
|
||||
- [lostplaces.models.PlaceAsset](###placeasset)
|
||||
|
||||
This model represents an URL to an external website. External Link is an PlaceAsset, see [above](###placeasset) for more details. External Link has to fields
|
||||
`url`
|
||||
the URL to the target
|
||||
`label`
|
||||
the label that is shown on the website
|
||||
|
||||
### PhotoAlbum
|
||||
Loacation: `lostplaces.models.external_link.PhototAlbum`
|
||||
Import From: `lostplaces.models.PhotoAlbum`
|
||||
#### Super Classes
|
||||
- django's `models.Model`
|
||||
- [lostplaces.models.Submittable](###submittable)
|
||||
- [lostplaces.models.PlaceAsset](###placeasset)
|
||||
- [lostplaces.models.ExternalLink](###externallink)
|
||||
|
||||
A photo album is a link to an external site that is meant to contain photos of the place it is referenced in. It
|
||||
does not have any fields, just the ones inherited from it's super class [ExternalLink](###externallink).
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
settings.THUMBNAIL_ALIASES = {
|
||||
'': {
|
||||
'thumbnail': {'size': (300, 200), 'sharpen': True, 'crop': True, 'upscale': True},
|
||||
'hero': {'size': (700, 466), 'sharpen': True, 'crop': True},
|
||||
'large': {'size': (1920, 1920), 'sharpen': True, 'crop': False},
|
||||
},
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
''' Classes and modules for the administrative backend. '''
|
||||
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from django.utils import timezone
|
||||
from lostplaces.models import *
|
||||
|
||||
# Register your models here.
|
||||
|
||||
class VoucherAdmin(admin.ModelAdmin):
|
||||
fields = ['code', 'expires_when', 'created_when']
|
||||
readonly_fields = ['created_when']
|
||||
list_display = ('__str__', 'code', 'created_when', 'expires_when', 'valid')
|
||||
|
||||
def valid(self, instance):
|
||||
return timezone.now() <= instance.expires_when
|
||||
|
||||
valid.boolean = True
|
||||
|
||||
class PhotoAlbumsAdmin(admin.ModelAdmin):
|
||||
list_display = ('label', 'place', 'url' )
|
||||
|
||||
class PlacesAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'submitted_by', 'submitted_when')
|
||||
|
||||
class PlaceImagesAdmin(admin.ModelAdmin):
|
||||
list_display = ('__str__', 'place', 'submitted_by')
|
||||
|
||||
admin.site.register(Explorer)
|
||||
admin.site.register(Voucher, VoucherAdmin)
|
||||
admin.site.register(Place, PlacesAdmin)
|
||||
admin.site.register(PlaceImage, PlaceImagesAdmin)
|
||||
admin.site.register(PhotoAlbum, PhotoAlbumsAdmin)
|
||||
admin.site.register(PlaceVoting)
|
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
class LostplacesAppConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.AutoField'
|
||||
name = 'lostplaces'
|
|
@ -0,0 +1,25 @@
|
|||
from django.shortcuts import redirect
|
||||
|
||||
def get_all_subclasses(cls):
|
||||
'''
|
||||
Gets all subclasses recursively, does not contain
|
||||
abstract classes
|
||||
'''
|
||||
subclass_list = []
|
||||
for subclass in cls.__subclasses__():
|
||||
if not subclass._meta.abstract:
|
||||
subclass_list.append(subclass)
|
||||
subclass_list += get_all_subclasses(subclass)
|
||||
return subclass_list
|
||||
|
||||
def redirect_referer_or(request, url='/'):
|
||||
'''
|
||||
Returns a django redirect to the requests referer,
|
||||
if there is no referer the redirect will poin to the given url
|
||||
Default url is /
|
||||
'''
|
||||
referer = request.META.get('HTTP_REFERER')
|
||||
if referer is not None:
|
||||
return redirect(referer)
|
||||
else:
|
||||
return redirect(url)
|
|
@ -0,0 +1,124 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
''' (web)forms that can be used elsewhere. '''
|
||||
|
||||
from django import forms
|
||||
from django.db import models
|
||||
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from lostplaces import widgets
|
||||
from lostplaces.models import Place, PlaceImage, Voucher, Explorer
|
||||
|
||||
class SignupVoucherForm(UserCreationForm):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('username', 'email', 'first_name', 'last_name')
|
||||
voucher = forms.CharField(
|
||||
max_length=30,
|
||||
help_text=_('The Voucher you got from an administrator')
|
||||
)
|
||||
|
||||
def is_valid(self):
|
||||
super_result = super().is_valid()
|
||||
submitted_voucher = self.cleaned_data.get('voucher')
|
||||
try:
|
||||
fetched_voucher = Voucher.objects.get(code=submitted_voucher)
|
||||
except Voucher.DoesNotExist:
|
||||
self.add_error('voucher', _('Invalid voucher'))
|
||||
return False
|
||||
|
||||
if not fetched_voucher.valid:
|
||||
self.add_error('voucher', _('Expired voucher'))
|
||||
return False
|
||||
|
||||
fetched_voucher.delete()
|
||||
return super_result
|
||||
|
||||
class ExplorerUserChangeForm(UserChangeForm):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [ 'username', 'first_name', 'last_name', 'email' ]
|
||||
''' Hide password hint.'''
|
||||
password = None
|
||||
|
||||
''' Display username, but display it non-editable and not required. '''
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['username'].required = False
|
||||
self.fields['username'].help_text = None
|
||||
self.fields['username'].widget.attrs['disabled'] = 'disabled'
|
||||
|
||||
def clean_username(self):
|
||||
# As shown in the above answer.
|
||||
instance = getattr(self, 'instance', None)
|
||||
if instance:
|
||||
return instance.username
|
||||
else:
|
||||
return self.cleaned_data.get('username', None)
|
||||
|
||||
class ExplorerChangeForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Explorer
|
||||
fields = '__all__'
|
||||
exclude = ['user', 'favorite_places', 'level']
|
||||
|
||||
class PlaceForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Place
|
||||
fields = '__all__'
|
||||
exclude = ['submitted_by', 'level']
|
||||
widgets = {
|
||||
'hero': widgets.SelectContent()
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
if 'instance' in kwargs:
|
||||
self.fields['hero'].queryset = PlaceImage.objects.filter(place=kwargs['instance'])
|
||||
self.fields['hero'].widget.attrs['item_template'] = 'partials/select_place_image_item.html'
|
||||
|
||||
latitude = forms.DecimalField(
|
||||
widget=forms.NumberInput(attrs={'min':-90,'max': 90,'type': 'number', 'step': 'any'})
|
||||
)
|
||||
|
||||
longitude = forms.DecimalField(
|
||||
widget=forms.NumberInput(attrs={'min':-180,'max': 180,'type': 'number', 'step': 'any'})
|
||||
)
|
||||
|
||||
class PlaceImageForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = PlaceImage
|
||||
fields = ['filename']
|
||||
widgets = {
|
||||
'filename': forms.ClearableFileInput(attrs={'multiple': True})
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.fields['filename'].required = False
|
||||
|
||||
class PlaceSetHeroForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Place
|
||||
fields = ['hero']
|
||||
widgets = {
|
||||
'hero': widgets.SelectContent()
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['hero'].queryset = PlaceImage.objects.filter(place=kwargs['instance'])
|
||||
self.fields['hero'].widget.attrs['item_template'] = 'partials/select_place_image_item.html'
|
||||
|
||||
|
||||
|
||||
class TagSubmitForm(forms.Form):
|
||||
tag_list = forms.CharField(
|
||||
max_length=500,
|
||||
required=False,
|
||||
widget=forms.TextInput(attrs={'autocomplete':'off'})
|
||||
)
|
|
@ -0,0 +1,472 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Reverend <reverend@reverend2048.de>, 2020.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-12-25 16:04+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Commander1024 <commander@commander1024.de>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: de-DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: forms.py:19
|
||||
msgid "The Voucher you got from an administrator"
|
||||
msgstr "Der Einladungs-Code, den Dir ein Administrator gegeben hat"
|
||||
|
||||
#: forms.py:28
|
||||
msgid "Invalid voucher"
|
||||
msgstr "Ungültiger Voucher"
|
||||
|
||||
#: forms.py:32
|
||||
msgid "Expired voucher"
|
||||
msgstr "Abgelaufener Voucher"
|
||||
|
||||
#: models/abstract_models.py:29 templates/explorer/profile.html:31
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: models/abstract_models.py:36
|
||||
msgid "Latitude"
|
||||
msgstr "Breitengrad"
|
||||
|
||||
#: models/abstract_models.py:37
|
||||
msgid "Latitude in decimal format: e. g. 41.40338"
|
||||
msgstr "Breitengrad in dezimaler Form: z. B. 51.95021"
|
||||
|
||||
#: models/abstract_models.py:44
|
||||
msgid "Longitude"
|
||||
msgstr "Längengrad"
|
||||
|
||||
#: models/abstract_models.py:45
|
||||
msgid "Longitude in decimal format: e. g. 2.17403"
|
||||
msgstr "Breitengrad in dezimaler Form: z. B. 7.4840155"
|
||||
|
||||
#: models/abstract_models.py:59
|
||||
msgid "Submission date"
|
||||
msgstr "Einreichungsdatum"
|
||||
|
||||
#: models/abstract_models.py:67
|
||||
msgid "Submitter"
|
||||
msgstr "Einreicher"
|
||||
|
||||
#: models/abstract_models.py:79
|
||||
msgid "Creation date"
|
||||
msgstr "Erstellungsdatum"
|
||||
|
||||
#: models/abstract_models.py:82
|
||||
msgid "Expiration date"
|
||||
msgstr "Ablaufdatum"
|
||||
|
||||
#: models/external_links.py:13
|
||||
msgid "URL"
|
||||
msgstr "Adresse (URL)"
|
||||
|
||||
#: models/external_links.py:17
|
||||
msgid "link text"
|
||||
msgstr "Linktext"
|
||||
|
||||
#: models/models.py:47
|
||||
msgid "Biography"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
#: models/models.py:48
|
||||
msgid "Describe yourself, your preferences, etc. in a few sentences."
|
||||
msgstr "Beschreibe Dich selbst, Deine Vorlieben, usw. in ein paar Sätzen."
|
||||
|
||||
#: models/models.py:56
|
||||
msgid "Profile image"
|
||||
msgstr "Profilbild"
|
||||
|
||||
#: models/models.py:57
|
||||
msgid "Optional profile image for display in Explorer profile"
|
||||
msgstr "Optionales Profilbild zur Anzeige im Explorerprofil"
|
||||
|
||||
#: models/place.py:21
|
||||
msgid "Location"
|
||||
msgstr "Ort"
|
||||
|
||||
#: models/place.py:24
|
||||
msgid ""
|
||||
"Description of the place: e.g. how to get there, where to be careful, the "
|
||||
"place's history..."
|
||||
msgstr ""
|
||||
"Beschreibung des Places: z. B. wie man hin kommt, wo man vorsichtig sein "
|
||||
"sollte, seine Geschichte..."
|
||||
|
||||
#: models/place.py:25 models/place.py:84
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
#: models/place.py:90
|
||||
msgid "Filename(s)"
|
||||
msgstr "Dateiname(n)"
|
||||
|
||||
#: models/place.py:91
|
||||
msgid "Optional: One or more images to upload"
|
||||
msgstr "Optional: Ein oder mehrere Bilder zum Hochladen"
|
||||
|
||||
#: templates/403.html:4
|
||||
msgid "Forbidden"
|
||||
msgstr "Nicht Erlaubt"
|
||||
|
||||
#: templates/403.html:14
|
||||
msgid "You will be redirected in 5 seconds"
|
||||
msgstr "Du wirst in 5 Sekunden weitergeleitet"
|
||||
|
||||
#: templates/403.html:14
|
||||
msgid "Go Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: templates/explorer/profile.html:41
|
||||
msgid "E-mail"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: templates/explorer/profile.html:52
|
||||
msgid "Joined"
|
||||
msgstr "Beigetreten"
|
||||
|
||||
#: templates/explorer/profile.html:60
|
||||
#, fuzzy
|
||||
#| msgid "All Places"
|
||||
msgid "Places"
|
||||
msgstr "Alle Places"
|
||||
|
||||
#: templates/explorer/profile.html:68
|
||||
msgid "Place assets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/explorer/profile.html:76
|
||||
#, fuzzy
|
||||
#| msgid "Edit Explorer profile"
|
||||
msgid "Edit Profile"
|
||||
msgstr "Explorerprofil bearbeiten"
|
||||
|
||||
#: templates/explorer/profile.html:87
|
||||
msgid "Favorite places"
|
||||
msgstr "Favoriten"
|
||||
|
||||
#: templates/explorer/profile.html:103
|
||||
msgid "Places submitted by"
|
||||
msgstr "Places hinzugefügt von"
|
||||
|
||||
#: templates/explorer/profile.html:118
|
||||
msgid "Images submitted by"
|
||||
msgstr "Bilder hinzugefügt von"
|
||||
|
||||
#: templates/explorer/profile.html:140
|
||||
msgid "Photo albums submitted by"
|
||||
msgstr "Fotoalben hinzugefügt von"
|
||||
|
||||
#: templates/explorer/profile_update.html:6
|
||||
#: templates/explorer/profile_update.html:12
|
||||
msgid "Edit Explorer profile"
|
||||
msgstr "Explorerprofil bearbeiten"
|
||||
|
||||
#: templates/explorer/profile_update.html:48
|
||||
#: templates/place/place_update.html:42
|
||||
msgid "Update"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
#: templates/global.html:32
|
||||
msgid "Logout"
|
||||
msgstr "Ausloggen"
|
||||
|
||||
#: templates/global.html:33
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: templates/global.html:35
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/global.html:40 templates/registration/login.html:4
|
||||
#: templates/registration/login.html:10 templates/registration/login.html:23
|
||||
msgid "Login"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: templates/global.html:41 templates/registration/login.html:29
|
||||
#: templates/signup.html:6 templates/signup.html:12 templates/signup.html:49
|
||||
msgid "Sign up"
|
||||
msgstr "Registrieren"
|
||||
|
||||
#: templates/global.html:51 templates/home.html:10
|
||||
msgid "Home"
|
||||
msgstr "Startseite"
|
||||
|
||||
#: templates/global.html:52
|
||||
msgid "UrBex Codex"
|
||||
msgstr "UrBex Codex"
|
||||
|
||||
#: templates/global.html:57 templates/place/place_create.html:5
|
||||
#: templates/place/place_create.html:10
|
||||
msgid "Create place"
|
||||
msgstr "Place erstellen"
|
||||
|
||||
#: templates/global.html:58
|
||||
msgid "All places"
|
||||
msgstr "Alle Places"
|
||||
|
||||
#: templates/home.html:20 templates/home_unauth.html:20
|
||||
msgid "Explore the latest places"
|
||||
msgstr "Neueste Places erkunden"
|
||||
|
||||
#: templates/home_unauth.html:11
|
||||
msgid ""
|
||||
"You can create, view and share your lost places with other members of this "
|
||||
"site. You can upload photos, place links to your web galleries and "
|
||||
"contribute your knowledge by tagging other places or commenting on them. You "
|
||||
"will find detailed information on where these locations are, how to get "
|
||||
"there and what to expect from them. This might even include detailed "
|
||||
"information on the surroundings or the history of a lost place."
|
||||
msgstr ""
|
||||
"Du kannst Deine Lost Places erstellen, ansehen und mit anderen Mitgliedern "
|
||||
"auf dieser Seite teilen. Du kannst Photos hochladen, Links zu Deinen Web-"
|
||||
"Fotoalben setzen und Dein Wissen teilen indem Du andere Places mit Tags "
|
||||
"versiehst oder sie kommentierst. Du wirst detaillierte Informationen dazu "
|
||||
"finden, wo diese Orte sind, wie Du dorthin gelangst und was Dich dort "
|
||||
"erwartet. Dies können sogar detaillierte Informationen zur Umgebung oder der "
|
||||
"Geschichte eines Lost Places sein."
|
||||
|
||||
#: templates/home_unauth.html:15
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Since vandalism is a growing problem these days, no sensitive information is "
|
||||
"available to the public. You have to <a class=\"LP-Link\" href="
|
||||
"\"%(signup_url)s\"><span class=\"LP-Link__Text\">sign up</span></a> with a "
|
||||
"voucher code as an invitation to join this community. Only admins can create "
|
||||
"these codes. Usually you are given a code when we know you in real life in "
|
||||
"person and when we trust you. A request from an unknown person will most "
|
||||
"probably be denied."
|
||||
msgstr ""
|
||||
"Weil Vandalismus dieser Tage ein wachsendes Problem ist, sind keine "
|
||||
"sensiblen Informationen öffentlich verfügbar. Du musst Dich mit einem "
|
||||
"Voucher-Code als Einladung <a class=\"LP-Link\" href=\"%(signup_url)s"
|
||||
"\"><span class=\"LP-Link__Text\">registrieren</span></a>um dieser Community "
|
||||
"beizutreten. Nur Administratoren können diese Codes erstellen. Üblicherweise "
|
||||
"bekommst Du einen Code, wenn wir Dich im echten Leben kennen und Dir "
|
||||
"vertrauen. Eine Anfrage von einer unbekannten Person wird "
|
||||
"höchstwahrscheinlich abgelehnt."
|
||||
|
||||
#: templates/partials/form/submit.html:3
|
||||
msgid "Submit"
|
||||
msgstr "Abschicken"
|
||||
|
||||
#: templates/partials/form/submit.html:7
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: templates/partials/icons/place_favorite.html:6
|
||||
msgid "Remove from favorites"
|
||||
msgstr "Aus den Favoriten entfernen"
|
||||
|
||||
#: templates/partials/icons/place_favorite.html:10
|
||||
msgid "Save as favorite"
|
||||
msgstr "In den Favoriten speichern"
|
||||
|
||||
#: templates/partials/nav/footer.html:64
|
||||
msgid "Made by"
|
||||
msgstr "Erstellt von"
|
||||
|
||||
#: templates/partials/nav/footer.html:65
|
||||
msgid "and"
|
||||
msgstr "und"
|
||||
|
||||
#: templates/partials/nav/footer.html:68
|
||||
msgid "Privacy Policy"
|
||||
msgstr "Datenschutzerklärung"
|
||||
|
||||
#: templates/partials/nav/footer.html:70
|
||||
msgid "Imprint"
|
||||
msgstr "Impressum"
|
||||
|
||||
#: templates/partials/nav/pagination.html:11
|
||||
#: templates/partials/nav/pagination.html:24
|
||||
msgid "First"
|
||||
msgstr "Erste"
|
||||
|
||||
#: templates/partials/nav/pagination.html:17
|
||||
#: templates/partials/nav/pagination.html:30
|
||||
msgid "Previous"
|
||||
msgstr "Vorherige"
|
||||
|
||||
#: templates/partials/nav/pagination.html:50
|
||||
#: templates/partials/nav/pagination.html:63
|
||||
msgid "Next"
|
||||
msgstr "Nächste"
|
||||
|
||||
#: templates/partials/nav/pagination.html:56
|
||||
#: templates/partials/nav/pagination.html:68
|
||||
msgid "Last"
|
||||
msgstr "Letzte"
|
||||
|
||||
#: templates/partials/tagging.html:30 templates/partials/tagging.html:34
|
||||
msgid "Add tags"
|
||||
msgstr "Tags hinzufügen"
|
||||
|
||||
#: templates/partials/welcome.html:4
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
#: templates/partials/welcome.html:8
|
||||
msgid "Welcome to our Urban Exploration community catalogue,"
|
||||
msgstr "Willkommen auf unserem Urban Exploration Community-Katalog,"
|
||||
|
||||
#: templates/partials/welcome.html:12
|
||||
msgid "explorer"
|
||||
msgstr "Explorer"
|
||||
|
||||
#: templates/partials/welcome.html:17
|
||||
msgid "We strictly follow our"
|
||||
msgstr "Bitte lies unseren"
|
||||
|
||||
#: templates/partials/welcome.html:18
|
||||
msgid "UrBex codex"
|
||||
msgstr "UrBex Codex"
|
||||
|
||||
#: templates/partials/welcome.html:19
|
||||
msgid "and expect you to do so, too."
|
||||
msgstr "bevor du Places erkundest"
|
||||
|
||||
#: templates/photo_album/photo_album_create.html:4
|
||||
msgid "Submit a photo album"
|
||||
msgstr "Fotoalbum hinzufügen"
|
||||
|
||||
#: templates/photo_album/photo_album_create.html:8
|
||||
#: templates/place/place_detail.html:18 templates/place/place_update.html:5
|
||||
#: templates/place/place_update.html:10
|
||||
msgid "Edit place"
|
||||
msgstr "Place bearbeiten"
|
||||
|
||||
#: templates/photo_album/photo_album_create.html:10
|
||||
#: templates/place/place_delete.html:11 templates/place/place_detail.html:19
|
||||
msgid "Delete place"
|
||||
msgstr "Place löschen"
|
||||
|
||||
#: templates/photo_album/photo_album_create.html:16
|
||||
msgid "Submit a photo album for"
|
||||
msgstr "Fotoalbum hinzufügen zu"
|
||||
|
||||
#: templates/place/place_create.html:42
|
||||
msgid "Create"
|
||||
msgstr "Erstellen"
|
||||
|
||||
#: templates/place/place_delete.html:5
|
||||
msgid "Delete lost place"
|
||||
msgstr "Lost Place löschen"
|
||||
|
||||
#: templates/place/place_delete.html:15
|
||||
#, python-format
|
||||
msgid "Are you sure you want to delete %(place_name)s?"
|
||||
msgstr "Bist Du sicher, dass Du %(place_name)s löschen möchtest?"
|
||||
|
||||
#: templates/place/place_delete.html:19
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: templates/place/place_detail.html:46
|
||||
msgid "Map links"
|
||||
msgstr "Kartenlinks"
|
||||
|
||||
#: templates/place/place_detail.html:58
|
||||
msgid "Photo albums"
|
||||
msgstr "Fotoalben"
|
||||
|
||||
#: templates/place/place_detail.html:84
|
||||
msgid "Add photo album"
|
||||
msgstr "Fotoalbum hinzufügen"
|
||||
|
||||
#: templates/place/place_detail.html:93
|
||||
msgid "Images"
|
||||
msgstr "Bilder"
|
||||
|
||||
#: templates/place/place_list.html:10
|
||||
msgid "All Places"
|
||||
msgstr "Alle Places"
|
||||
|
||||
#: templates/place/place_list.html:16
|
||||
msgid "Our lost places"
|
||||
msgstr "Unsere Lost Places"
|
||||
|
||||
#: templates/place_image/place_image_create.html:7
|
||||
msgid "Submit images to a place"
|
||||
msgstr "Bilder zu einem Place hinzufügen"
|
||||
|
||||
#: templates/registration/login.html:29
|
||||
msgid "No account, yet?"
|
||||
msgstr "Noch kein Konto?"
|
||||
|
||||
#: views/base_views.py:25
|
||||
msgid "Please login to proceed"
|
||||
msgstr "Bitte log Dich ein um fortzufahren"
|
||||
|
||||
#: views/explorer_views.py:78
|
||||
#, fuzzy
|
||||
#| msgid "Successfully updated place"
|
||||
msgid "Successfully updated Explorer profile"
|
||||
msgstr "Place erfolgreich aktualisiert"
|
||||
|
||||
#: views/explorer_views.py:84 views/place_views.py:105
|
||||
msgid "Please fill in all required fields."
|
||||
msgstr "Bitte füll alle benötigten Felder aus."
|
||||
|
||||
#: views/place_image_views.py:26
|
||||
msgid "Image(s) submitted successfully"
|
||||
msgstr "Bild(er) erfolgreich hinzugefügt"
|
||||
|
||||
#: views/place_image_views.py:41
|
||||
msgid "Image deleted successfully"
|
||||
msgstr "Bild erfolgreich gelöscht"
|
||||
|
||||
#: views/place_image_views.py:42
|
||||
msgid "You are not allowed to delete this image"
|
||||
msgstr "Du darfst dieses Bild nicht löschen"
|
||||
|
||||
#: views/place_views.py:62
|
||||
msgid "Successfully updated place"
|
||||
msgstr "Place erfolgreich aktualisiert"
|
||||
|
||||
#: views/place_views.py:63
|
||||
msgid "You are not allowed to edit this place"
|
||||
msgstr "Du darfst diesen Place nicht bearbeiten"
|
||||
|
||||
#: views/place_views.py:97
|
||||
msgid "Successfully created place"
|
||||
msgstr "Place erfolgreich erstellt"
|
||||
|
||||
#: views/place_views.py:112
|
||||
msgid "Successfully deleted place"
|
||||
msgstr "Place erfolgreich gelöscht"
|
||||
|
||||
#: views/place_views.py:114
|
||||
msgid "You are not allowed to delete this place"
|
||||
msgstr "Du darfst diesen Place nicht löschen"
|
||||
|
||||
#: views/views.py:29
|
||||
msgid "User created"
|
||||
msgstr "Benutzer erstellt"
|
||||
|
||||
#: views/views.py:54
|
||||
msgid "Photo album link submitted"
|
||||
msgstr "Fotoalbum-Link hinzugefügt"
|
||||
|
||||
#: views/views.py:59
|
||||
msgid "Photo album link deleted"
|
||||
msgstr "Fotoalbum-Link gelöscht"
|
||||
|
||||
#: views/views.py:60
|
||||
msgid "You are not allowed to edit this photo album link"
|
||||
msgstr "Du darfst diesen Fotoalbum-Link nicht bearbeiten"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Filename(s)"
|
||||
#~ msgid "Filename"
|
||||
#~ msgstr "Dateiname(n)"
|
|
@ -0,0 +1,90 @@
|
|||
# Generated by Django 3.1.1 on 2020-09-28 18:39
|
||||
|
||||
from django.conf import settings
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import easy_thumbnails.fields
|
||||
import lostplaces.models.place
|
||||
import taggit.managers
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('taggit', '0003_taggeditem_add_unique_index'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Expireable',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_when', models.DateTimeField(auto_now_add=True)),
|
||||
('expires_when', models.DateTimeField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Explorer',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='explorer', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Place',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('latitude', models.FloatField(validators=[django.core.validators.MinValueValidator(-90), django.core.validators.MaxValueValidator(90)])),
|
||||
('longitude', models.FloatField(validators=[django.core.validators.MinValueValidator(-180), django.core.validators.MaxValueValidator(180)])),
|
||||
('submitted_when', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('location', models.CharField(max_length=50)),
|
||||
('description', models.TextField()),
|
||||
('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='places', to='lostplaces.explorer')),
|
||||
('tags', taggit.managers.TaggableManager(blank=True, help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Voucher',
|
||||
fields=[
|
||||
('expireable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='lostplaces.expireable')),
|
||||
('code', models.CharField(max_length=30, unique=True)),
|
||||
],
|
||||
bases=('lostplaces.expireable',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PlaceImage',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('submitted_when', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('description', models.TextField(blank=True)),
|
||||
('filename', easy_thumbnails.fields.ThumbnailerImageField(upload_to=lostplaces.models.place.generate_place_image_filename)),
|
||||
('place', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='placeimages', to='lostplaces.place')),
|
||||
('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='placeimages', to='lostplaces.explorer')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PhotoAlbum',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('submitted_when', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
('url', models.URLField()),
|
||||
('label', models.CharField(max_length=100)),
|
||||
('place', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='photoalbums', to='lostplaces.place')),
|
||||
('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='photoalbums', to='lostplaces.explorer')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 3.1.1 on 2020-10-04 19:37
|
||||
# Edited by reverend
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
from django.utils.timezone import utc
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lostplaces', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='Voucher'
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Expireable'
|
||||
)
|
||||
]
|
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 3.1.1 on 2020-10-04 19:52
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lostplaces', '0002_remove_vouchers'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Voucher',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_when', models.DateTimeField(auto_now_add=True)),
|
||||
('expires_when', models.DateTimeField()),
|
||||
('code', models.CharField(max_length=30, unique=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,102 @@
|
|||
# Generated by Django 3.1.1 on 2020-12-19 13:53
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import easy_thumbnails.fields
|
||||
import lostplaces.models.place
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lostplaces', '0003_voucher'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='photoalbum',
|
||||
name='label',
|
||||
field=models.CharField(max_length=100, verbose_name='link text'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='photoalbum',
|
||||
name='submitted_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='photoalbums', to='lostplaces.explorer', verbose_name='Submitter'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='photoalbum',
|
||||
name='submitted_when',
|
||||
field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='Submission date'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='photoalbum',
|
||||
name='url',
|
||||
field=models.URLField(verbose_name='URL'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='description',
|
||||
field=models.TextField(help_text="Description of the place: e.g. how to get there, where to be careful, the place's history...", verbose_name='Description'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='latitude',
|
||||
field=models.FloatField(help_text='Latitude in decimal format: e. g. 41.40338', validators=[django.core.validators.MinValueValidator(-90), django.core.validators.MaxValueValidator(90)], verbose_name='Latitude'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='location',
|
||||
field=models.CharField(max_length=50, verbose_name='Location'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='longitude',
|
||||
field=models.FloatField(help_text='Longitude in decimal format: e. g. 2.17403', validators=[django.core.validators.MinValueValidator(-180), django.core.validators.MaxValueValidator(180)], verbose_name='Longitude'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='name',
|
||||
field=models.CharField(max_length=50, verbose_name='Name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='submitted_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='places', to='lostplaces.explorer', verbose_name='Submitter'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='place',
|
||||
name='submitted_when',
|
||||
field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='Submission date'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='placeimage',
|
||||
name='description',
|
||||
field=models.TextField(blank=True, verbose_name='Description'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='placeimage',
|
||||
name='filename',
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(help_text='Optional: One or more images to upload', upload_to=lostplaces.models.place.generate_image_upload_path, verbose_name='Filename(s)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='placeimage',
|
||||
name='submitted_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='placeimages', to='lostplaces.explorer', verbose_name='Submitter'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='placeimage',
|
||||
name='submitted_when',
|
||||
field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='Submission date'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='voucher',
|
||||
name='created_when',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Creation date'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='voucher',
|
||||
name='expires_when',
|
||||
field=models.DateTimeField(verbose_name='Expiration date'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,85 @@
|
|||
# Generated by Django 3.2.10 on 2021-12-31 17:20
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import easy_thumbnails.fields
|
||||
import lostplaces.models.models
|
||||
import lostplaces.models.place
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lostplaces', '0004_release_0_1_3'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='explorer',
|
||||
name='bio',
|
||||
field=models.TextField(blank=True, help_text='Describe yourself, your preferences, etc. in a few sentences.', null=True, verbose_name='Biography / Description'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='explorer',
|
||||
name='favorite_places',
|
||||
field=models.ManyToManyField(blank=True, related_name='explorer_favorites', to='lostplaces.Place', verbose_name='Explorers favorite places'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='explorer',
|
||||
name='level',
|
||||
field=models.IntegerField(choices=[(1, 'Newbie'), (2, 'Scout'), (3, 'Explorer'), (4, 'Journalist'), (5, 'Housekeeper')], default=1),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='explorer',
|
||||
name='profile_image',
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(blank=True, help_text='Optional profile image for display in Explorer profile', null=True, upload_to=lostplaces.models.generate_profile_image_filename, verbose_name='Profile image'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='explorer',
|
||||
name='visited_places',
|
||||
field=models.ManyToManyField(blank=True, related_name='explorer_visits', to='lostplaces.Place', verbose_name='Explorers visited places'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='place',
|
||||
name='hero',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='place_heros', to='lostplaces.placeimage'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='place',
|
||||
name='level',
|
||||
field=models.IntegerField(choices=[(1, 'Ruin'), (2, 'Vandalized'), (3, 'Natures Treasure'), (4, 'Lost in History'), (5, 'Time Capsule')], default=5),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='placeimage',
|
||||
name='filename',
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(help_text='Optional: One or more images to upload', upload_to=lostplaces.models.place.generate_place_image_filename, verbose_name='Images'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PlaceVoting',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('submitted_when', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Submission date')),
|
||||
('created_when', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')),
|
||||
('expires_when', models.DateTimeField(verbose_name='Expiration date')),
|
||||
('vote', models.IntegerField(choices=[(1, 'Ruin'), (2, 'Vandalized'), (3, 'Natures Treasure'), (4, 'Lost in History'), (5, 'Time Capsule')])),
|
||||
('place', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='placevotings', to='lostplaces.place')),
|
||||
('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='placevotings', to='lostplaces.explorer', verbose_name='Submitter')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DummyAsset',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('submitted_when', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Submission date')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('place', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dummyassets', to='lostplaces.place')),
|
||||
('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dummyassets', to='lostplaces.explorer', verbose_name='Submitter')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,4 @@
|
|||
from lostplaces.models.abstract_models import *
|
||||
from lostplaces.models.place import *
|
||||
from lostplaces.models.external_links import *
|
||||
from lostplaces.models.models import *
|
|
@ -0,0 +1,87 @@
|
|||
|
||||
from django.utils import timezone
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||
|
||||
from taggit.managers import TaggableManager
|
||||
|
||||
class Taggable(models.Model):
|
||||
'''
|
||||
This abstract model represtens an object that is taggable
|
||||
using django-taggit
|
||||
'''
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
tags = TaggableManager(blank=True)
|
||||
|
||||
class Mapable(models.Model):
|
||||
'''
|
||||
This abstract model class represents an object that can be
|
||||
displayed on a map.
|
||||
'''
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
name = models.CharField(
|
||||
max_length=50,
|
||||
verbose_name=_('Name'),
|
||||
)
|
||||
latitude = models.FloatField(
|
||||
validators=[
|
||||
MinValueValidator(-90),
|
||||
MaxValueValidator(90)
|
||||
],
|
||||
verbose_name=_('Latitude'),
|
||||
help_text=_('Latitude in decimal format: e. g. 41.40338')
|
||||
)
|
||||
longitude = models.FloatField(
|
||||
validators=[
|
||||
MinValueValidator(-180),
|
||||
MaxValueValidator(180)
|
||||
],
|
||||
verbose_name=_('Longitude'),
|
||||
help_text=_('Longitude in decimal format: e. g. 2.17403')
|
||||
)
|
||||
|
||||
class Submittable(models.Model):
|
||||
'''
|
||||
This abstract model class represents an object that can be submitted by
|
||||
an explorer.
|
||||
'''
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
submitted_when = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
null=True,
|
||||
verbose_name=_('Submission date')
|
||||
)
|
||||
submitted_by = models.ForeignKey(
|
||||
'Explorer',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='%(class)ss',
|
||||
verbose_name=_('Submitter')
|
||||
)
|
||||
|
||||
class Expireable(models.Model):
|
||||
"""
|
||||
Base class for things that can expire, i.e. Vouchers
|
||||
"""
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
created_when = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name=_('Creation date')
|
||||
)
|
||||
expires_when = models.DateTimeField(
|
||||
verbose_name=_('Expiration date')
|
||||
)
|
||||
|
||||
@property
|
||||
def is_expired(self):
|
||||
return timezone.now() > self.expires_when
|
|
@ -0,0 +1,21 @@
|
|||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from lostplaces.models.place import PlaceAsset
|
||||
|
||||
class ExternalLink(PlaceAsset):
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
url = models.URLField(
|
||||
max_length=200,
|
||||
verbose_name=_('URL')
|
||||
)
|
||||
label = models.CharField(
|
||||
max_length=100,
|
||||
verbose_name=_('link text')
|
||||
)
|
||||
|
||||
class PhotoAlbum(ExternalLink):
|
||||
pass
|
|
@ -0,0 +1,145 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
(Data)models which describe the structure of data to be saved into
|
||||
database.
|
||||
'''
|
||||
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from lostplaces.models.abstract_models import Expireable
|
||||
from lostplaces.models.place import Place
|
||||
|
||||
from easy_thumbnails.fields import ThumbnailerImageField
|
||||
from easy_thumbnails.files import get_thumbnailer
|
||||
|
||||
def generate_profile_image_filename(instance, filename):
|
||||
"""
|
||||
Callback for generating filename for uploaded explorer profile images.
|
||||
Returns filename as: explorer_pk-username.jpg
|
||||
"""
|
||||
|
||||
return 'explorers/' + str(instance.user.pk) + '-' + str(instance.user.username) + '.' + filename.split('.')[-1]
|
||||
|
||||
EXPLORER_LEVELS = (
|
||||
(1, 'Newbie'),
|
||||
(2, 'Scout'),
|
||||
(3, 'Explorer'),
|
||||
(4, 'Journalist'),
|
||||
(5, 'Housekeeper')
|
||||
)
|
||||
|
||||
class Explorer(models.Model):
|
||||
"""
|
||||
Profile that is linked to the Django user.
|
||||
Every user has a profile.
|
||||
Provides additional attributes for user profile.
|
||||
"""
|
||||
|
||||
user = models.OneToOneField(
|
||||
User,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='explorer'
|
||||
)
|
||||
bio = models.TextField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name=_('Biography / Description'),
|
||||
help_text=_('Describe yourself, your preferences, etc. in a few sentences.')
|
||||
)
|
||||
profile_image = ThumbnailerImageField(
|
||||
blank=True,
|
||||
null=True,
|
||||
upload_to=generate_profile_image_filename,
|
||||
resize_source=dict(size=(400, 400),
|
||||
sharpen=True),
|
||||
verbose_name=_('Profile image'),
|
||||
help_text=_('Optional profile image for display in Explorer profile')
|
||||
)
|
||||
favorite_places = models.ManyToManyField(
|
||||
Place,
|
||||
related_name='explorer_favorites',
|
||||
verbose_name='Explorers favorite places',
|
||||
blank=True
|
||||
)
|
||||
visited_places = models.ManyToManyField(
|
||||
Place,
|
||||
related_name='explorer_visits',
|
||||
verbose_name='Explorers visited places',
|
||||
blank=True
|
||||
)
|
||||
|
||||
level = models.IntegerField(
|
||||
default=1,
|
||||
choices=EXPLORER_LEVELS
|
||||
)
|
||||
|
||||
def get_places_eligible_to_see(self):
|
||||
if self.user.is_superuser:
|
||||
return Place.objects.all()
|
||||
return Place.objects.all().filter(level__lte=self.level) | self.places.all()
|
||||
|
||||
def is_eligible_to_see(self, place):
|
||||
return (
|
||||
self.user.is_superuser or
|
||||
place.submitted_by == self or
|
||||
place in self.get_places_eligible_to_see()
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.user.username
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
Explorer.objects.create(user=instance)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_user_profile(sender, instance, **kwargs):
|
||||
instance.explorer.save()
|
||||
|
||||
@receiver(pre_save, sender=Explorer)
|
||||
def auto_delete_file_on_change(sender, instance, **kwargs):
|
||||
"""
|
||||
Deletes old file from filesystem
|
||||
when corresponding `Explorer` object is updated
|
||||
with new file.
|
||||
"""
|
||||
if not instance.pk:
|
||||
return False
|
||||
|
||||
try:
|
||||
old_file = Explorer.objects.get(pk=instance.pk).profile_image
|
||||
except Explorer.DoesNotExist:
|
||||
return False
|
||||
new_file = instance.profile_image
|
||||
if not old_file == new_file:
|
||||
old_file.delete(save=False)
|
||||
|
||||
class Voucher(Expireable):
|
||||
"""
|
||||
Vouchers are authorization tokens to allow the registration of new users.
|
||||
A voucher has a code, a creation and a deletion date, which are all
|
||||
positional. Creation date is being set automatically during voucher
|
||||
creation.
|
||||
|
||||
created_when = models.DateTimeField(auto_now_add=True)
|
||||
expires_when = models.DateTimeField()
|
||||
"""
|
||||
|
||||
code = models.CharField(unique=True, max_length=30)
|
||||
|
||||
@property
|
||||
def valid(self):
|
||||
return not self.is_expired
|
||||
|
||||
def __str__(self):
|
||||
return "Voucher " + str(self.code)
|
|
@ -0,0 +1,219 @@
|
|||
import os
|
||||
from math import floor
|
||||
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
from django.dispatch import receiver
|
||||
from django.db.models.signals import post_delete, pre_save
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from lostplaces.models.abstract_models import Submittable, Taggable, Mapable, Expireable
|
||||
|
||||
from easy_thumbnails.fields import ThumbnailerImageField
|
||||
from easy_thumbnails.files import get_thumbnailer
|
||||
|
||||
PLACE_LEVELS = (
|
||||
(1, 'Ruin'),
|
||||
(2, 'Vandalized'),
|
||||
(3, 'Natures Treasure'),
|
||||
(4, 'Lost in History'),
|
||||
(5, 'Time Capsule')
|
||||
)
|
||||
|
||||
class Place(Submittable, Taggable, Mapable):
|
||||
"""
|
||||
Place defines a lost place (location, name, description etc.).
|
||||
"""
|
||||
|
||||
location = models.CharField(
|
||||
max_length=50,
|
||||
verbose_name=_('Location'),
|
||||
)
|
||||
description = models.TextField(
|
||||
help_text=_('Description of the place: e.g. how to get there, where to be careful, the place\'s history...'),
|
||||
verbose_name=_('Description'),
|
||||
)
|
||||
|
||||
hero = models.ForeignKey(
|
||||
'PlaceImage',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='place_heros'
|
||||
)
|
||||
|
||||
level = models.IntegerField(
|
||||
default=5,
|
||||
choices=PLACE_LEVELS
|
||||
)
|
||||
|
||||
def get_hero_image(self):
|
||||
if self.hero:
|
||||
return self.hero
|
||||
elif len(self.placeimages.all()) > 0:
|
||||
return self.placeimages.first()
|
||||
else:
|
||||
return None
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('place_detail', kwargs={'pk': self.pk})
|
||||
|
||||
def get_hero_index_in_queryset(self):
|
||||
'''
|
||||
Calculates the index of the hero image within
|
||||
the list / queryset of images. Necessary for
|
||||
the lightbox.
|
||||
'''
|
||||
for i in range(0, len(self.placeimages.all())):
|
||||
image = self.placeimages.all()[i]
|
||||
if image == self.hero:
|
||||
return i
|
||||
return None
|
||||
|
||||
|
||||
@classmethod
|
||||
# Get center position of LP-geocoordinates.
|
||||
def average_latlon(cls, place_list):
|
||||
amount = len(place_list)
|
||||
# Init fill values to prevent None
|
||||
# China Corner in Münster
|
||||
# Where I almost always eat lunch
|
||||
# (Does'nt help losing wheight, tho)
|
||||
longitude = 7.6295628132604385
|
||||
latitude = 51.961922091398904
|
||||
|
||||
if amount > 0:
|
||||
for place in place_list:
|
||||
longitude += place.longitude
|
||||
latitude += place.latitude
|
||||
return {'latitude':latitude / amount, 'longitude': longitude / amount}
|
||||
|
||||
return {'latitude': latitude, 'longitude': longitude}
|
||||
|
||||
def calculate_place_level(self):
|
||||
self.remove_expired_votes()
|
||||
|
||||
if self.placevotings.count() == 0:
|
||||
self.level = 5
|
||||
self.save()
|
||||
return
|
||||
|
||||
level = 0
|
||||
|
||||
for vote in self.placevotings.all():
|
||||
level += vote.vote
|
||||
|
||||
self.level = floor(level / self.placevotings.count())
|
||||
self.save()
|
||||
|
||||
def remove_expired_votes(self):
|
||||
for vote in self.placevotings.all():
|
||||
if vote.is_expired:
|
||||
vote.delete()
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def generate_place_image_filename(instance, filename):
|
||||
"""
|
||||
Callback for generating filename for uploaded place images.
|
||||
Returns filename as: place_pk-placename{-number}.jpg
|
||||
"""
|
||||
|
||||
return 'places/' + str(instance.place.pk) + '-' + str(instance.place.name) + '.' + filename.split('.')[-1]
|
||||
|
||||
def generate_image_upload_path(instance, filename):
|
||||
return generate_place_image_filename(instance, filename)
|
||||
|
||||
class PlaceAsset(Submittable):
|
||||
"""
|
||||
Assets to a place, i.e. images
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
place = models.ForeignKey(
|
||||
Place,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='%(class)ss',
|
||||
null=True
|
||||
)
|
||||
|
||||
class DummyAsset(PlaceAsset):
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
class PlaceImage(PlaceAsset):
|
||||
"""
|
||||
PlaceImage defines an image file object that points to a file in uploads/.
|
||||
Intermediate image sizes are generated as defined in THUMBNAIL_ALIASES.
|
||||
PlaceImage references a Place to which it belongs.
|
||||
"""
|
||||
|
||||
description = models.TextField(
|
||||
blank=True,
|
||||
verbose_name=_('Description'),
|
||||
)
|
||||
filename = ThumbnailerImageField(
|
||||
upload_to=generate_place_image_filename,
|
||||
resize_source=dict(size=(2560, 2560),
|
||||
sharpen=True),
|
||||
verbose_name=_('Images'),
|
||||
help_text=_('Optional: One or more images to upload')
|
||||
)
|
||||
place = models.ForeignKey(
|
||||
Place,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='placeimages'
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
Returning the name of the corresponding place + id
|
||||
of this image as textual representation of this instance
|
||||
"""
|
||||
|
||||
return 'Image ' + str(self.place.name)
|
||||
|
||||
# These two auto-delete files from filesystem when they are unneeded:
|
||||
|
||||
@receiver(post_delete, sender=PlaceImage)
|
||||
def auto_delete_file_on_delete(sender, instance, **kwargs):
|
||||
"""
|
||||
Deletes file (including thumbnails) from filesystem
|
||||
when corresponding `PlaceImage` object is deleted.
|
||||
"""
|
||||
if instance.filename:
|
||||
# Get and delete all files and thumbnails from instance
|
||||
thumbmanager = get_thumbnailer(instance.filename)
|
||||
thumbmanager.delete(save=False)
|
||||
|
||||
@receiver(pre_save, sender=PlaceImage)
|
||||
def auto_delete_file_on_change(sender, instance, **kwargs):
|
||||
"""
|
||||
Deletes old file from filesystem
|
||||
when corresponding `PlaceImage` object is updated
|
||||
with new file.
|
||||
"""
|
||||
if not instance.pk:
|
||||
return False
|
||||
|
||||
try:
|
||||
old_file = PlaceImage.objects.get(pk=instance.pk).filename
|
||||
except PlaceImage.DoesNotExist:
|
||||
return False
|
||||
|
||||
# No need to delete thumbnails, as they will be overwritten on regeneration.
|
||||
new_file = instance.filename
|
||||
if not old_file == new_file:
|
||||
old_file.delete(save=False)
|
||||
|
||||
|
||||
class PlaceVoting(PlaceAsset, Expireable):
|
||||
vote = models.IntegerField(choices=PLACE_LEVELS)
|
||||
|
||||
def get_human_readable_level(self):
|
||||
return PLACE_LEVELS[self.vote - 1][1]
|
||||
|
||||
def get_all_choices(self):
|
||||
return reversed(PLACE_LEVELS)
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 264 KiB |
|
@ -1,5 +1,4 @@
|
|||
Copyright (c) 2010, Sebastian Kosch (sebastian@aldusleaf.org),
|
||||
with Reserved Font Name "Crimson" and "Crimson Text".
|
||||
Copyright 2018 The Crimson Pro Project Authors (https://github.com/Fonthausen/CrimsonPro)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2011 The Montserrat Project Authors (https://github.com/JulietaUla/Montserrat)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512.001 512.001" style="enable-background:new 0 0 512.001 512.001;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M284.286,256.002L506.143,34.144c7.811-7.811,7.811-20.475,0-28.285c-7.811-7.81-20.475-7.811-28.285,0L256,227.717
|
||||
L34.143,5.859c-7.811-7.811-20.475-7.811-28.285,0c-7.81,7.811-7.811,20.475,0,28.285l221.857,221.857L5.858,477.859
|
||||
c-7.811,7.811-7.811,20.475,0,28.285c3.905,3.905,9.024,5.857,14.143,5.857c5.119,0,10.237-1.952,14.143-5.857L256,284.287
|
||||
l221.857,221.857c3.905,3.905,9.024,5.857,14.143,5.857s10.237-1.952,14.143-5.857c7.811-7.811,7.811-20.475,0-28.285
|
||||
L284.286,256.002z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1 @@
|
|||
<svg height="427pt" viewBox="-40 0 427 427.00131" width="427pt" xmlns="http://www.w3.org/2000/svg"><path d="m232.398438 154.703125c-5.523438 0-10 4.476563-10 10v189c0 5.519531 4.476562 10 10 10 5.523437 0 10-4.480469 10-10v-189c0-5.523437-4.476563-10-10-10zm0 0"/><path d="m114.398438 154.703125c-5.523438 0-10 4.476563-10 10v189c0 5.519531 4.476562 10 10 10 5.523437 0 10-4.480469 10-10v-189c0-5.523437-4.476563-10-10-10zm0 0"/><path d="m28.398438 127.121094v246.378906c0 14.5625 5.339843 28.238281 14.667968 38.050781 9.285156 9.839844 22.207032 15.425781 35.730469 15.449219h189.203125c13.527344-.023438 26.449219-5.609375 35.730469-15.449219 9.328125-9.8125 14.667969-23.488281 14.667969-38.050781v-246.378906c18.542968-4.921875 30.558593-22.835938 28.078124-41.863282-2.484374-19.023437-18.691406-33.253906-37.878906-33.257812h-51.199218v-12.5c.058593-10.511719-4.097657-20.605469-11.539063-28.03125-7.441406-7.421875-17.550781-11.5546875-28.0625-11.46875h-88.796875c-10.511719-.0859375-20.621094 4.046875-28.0625 11.46875-7.441406 7.425781-11.597656 17.519531-11.539062 28.03125v12.5h-51.199219c-19.1875.003906-35.394531 14.234375-37.878907 33.257812-2.480468 19.027344 9.535157 36.941407 28.078126 41.863282zm239.601562 279.878906h-189.203125c-17.097656 0-30.398437-14.6875-30.398437-33.5v-245.5h250v245.5c0 18.8125-13.300782 33.5-30.398438 33.5zm-158.601562-367.5c-.066407-5.207031 1.980468-10.21875 5.675781-13.894531 3.691406-3.675781 8.714843-5.695313 13.925781-5.605469h88.796875c5.210937-.089844 10.234375 1.929688 13.925781 5.605469 3.695313 3.671875 5.742188 8.6875 5.675782 13.894531v12.5h-128zm-71.199219 32.5h270.398437c9.941406 0 18 8.058594 18 18s-8.058594 18-18 18h-270.398437c-9.941407 0-18-8.058594-18-18s8.058593-18 18-18zm0 0"/><path d="m173.398438 154.703125c-5.523438 0-10 4.476563-10 10v189c0 5.519531 4.476562 10 10 10 5.523437 0 10-4.480469 10-10v-189c0-5.523437-4.476563-10-10-10zm0 0"/></svg>
|
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 816 B After Width: | Height: | Size: 816 B |
Before Width: | Height: | Size: 351 B After Width: | Height: | Size: 351 B |
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"trash": {
|
||||
"paths": [
|
||||
"m232.398438 154.703125c-5.523438 0-10 4.476563-10 10v189c0 5.519531 4.476562 10 10 10 5.523437 0 10-4.480469 10-10v-189c0-5.523437-4.476563-10-10-10zm0 0",
|
||||
"m114.398438 154.703125c-5.523438 0-10 4.476563-10 10v189c0 5.519531 4.476562 10 10 10 5.523437 0 10-4.480469 10-10v-189c0-5.523437-4.476563-10-10-10zm0 0",
|
||||
"m28.398438 127.121094v246.378906c0 14.5625 5.339843 28.238281 14.667968 38.050781 9.285156 9.839844 22.207032 15.425781 35.730469 15.449219h189.203125c13.527344-.023438 26.449219-5.609375 35.730469-15.449219 9.328125-9.8125 14.667969-23.488281 14.667969-38.050781v-246.378906c18.542968-4.921875 30.558593-22.835938 28.078124-41.863282-2.484374-19.023437-18.691406-33.253906-37.878906-33.257812h-51.199218v-12.5c.058593-10.511719-4.097657-20.605469-11.539063-28.03125-7.441406-7.421875-17.550781-11.5546875-28.0625-11.46875h-88.796875c-10.511719-.0859375-20.621094 4.046875-28.0625 11.46875-7.441406 7.425781-11.597656 17.519531-11.539062 28.03125v12.5h-51.199219c-19.1875.003906-35.394531 14.234375-37.878907 33.257812-2.480468 19.027344 9.535157 36.941407 28.078126 41.863282zm239.601562 279.878906h-189.203125c-17.097656 0-30.398437-14.6875-30.398437-33.5v-245.5h250v245.5c0 18.8125-13.300782 33.5-30.398438 33.5zm-158.601562-367.5c-.066407-5.207031 1.980468-10.21875 5.675781-13.894531 3.691406-3.675781 8.714843-5.695313 13.925781-5.605469h88.796875c5.210937-.089844 10.234375 1.929688 13.925781 5.605469 3.695313 3.671875 5.742188 8.6875 5.675782 13.894531v12.5h-128zm-71.199219 32.5h270.398437c9.941406 0 18 8.058594 18 18s-8.058594 18-18 18h-270.398437c-9.941407 0-18-8.058594-18-18s8.058593-18 18-18zm0 0",
|
||||
"m173.398438 154.703125c-5.523438 0-10 4.476563-10 10v189c0 5.519531 4.476562 10 10 10 5.523437 0 10-4.480469 10-10v-189c0-5.523437-4.476563-10-10-10zm0 0"
|
||||
],
|
||||
"height": "427pt",
|
||||
"width": "427pt",
|
||||
"viewBox": "-40 0 427 427.00131"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 641 B After Width: | Height: | Size: 641 B |
Before Width: | Height: | Size: 850 B After Width: | Height: | Size: 850 B |
After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 914 B After Width: | Height: | Size: 914 B |
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 368.16 368.16" style="enable-background:new 0 0 368.16 368.16;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M184.08,0c-74.992,0-136,61.008-136,136c0,24.688,11.072,51.24,11.536,52.36c3.576,8.488,10.632,21.672,15.72,29.4
|
||||
l93.248,141.288c3.816,5.792,9.464,9.112,15.496,9.112s11.68-3.32,15.496-9.104l93.256-141.296
|
||||
c5.096-7.728,12.144-20.912,15.72-29.4c0.464-1.112,11.528-27.664,11.528-52.36C320.08,61.008,259.072,0,184.08,0z
|
||||
M293.8,182.152c-3.192,7.608-9.76,19.872-14.328,26.8l-93.256,141.296c-1.84,2.792-2.424,2.792-4.264,0L88.696,208.952
|
||||
c-4.568-6.928-11.136-19.2-14.328-26.808C74.232,181.816,64.08,157.376,64.08,136c0-66.168,53.832-120,120-120
|
||||
c66.168,0,120,53.832,120,120C304.08,157.408,293.904,181.912,293.8,182.152z"/>
|
||||
<path d="M184.08,64.008c-39.704,0-72,32.304-72,72c0,39.696,32.296,72,72,72c39.704,0,72-32.304,72-72
|
||||
C256.08,96.312,223.784,64.008,184.08,64.008z M184.08,192.008c-30.872,0-56-25.12-56-56s25.128-56,56-56s56,25.12,56,56
|
||||
S214.952,192.008,184.08,192.008z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,105 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 368.16 368.16"
|
||||
style="enable-background:new 0 0 368.16 368.16;"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="pin_filled.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata47"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs45" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="712"
|
||||
id="namedview43"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.4803346"
|
||||
inkscape:cx="184.08"
|
||||
inkscape:cy="181.37791"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
<g
|
||||
id="g10">
|
||||
<g
|
||||
id="g8">
|
||||
<g
|
||||
id="g6">
|
||||
<path
|
||||
d="M184.08,0c-74.992,0-136,61.008-136,136c0,24.688,11.072,51.24,11.536,52.36c3.576,8.488,10.632,21.672,15.72,29.4 l93.248,141.288c3.816,5.792,9.464,9.112,15.496,9.112s11.68-3.32,15.496-9.104l93.256-141.296 c5.096-7.728,12.144-20.912,15.72-29.4c0.464-1.112,11.528-27.664,11.528-52.36C320.08,61.008,259.072,0,184.08,0z M293.8,182.152c-3.192,7.608-9.76,19.872-14.328,26.8l-93.256,141.296c-1.84,2.792-2.424,2.792-4.264,0L88.696,208.952 c-4.568-6.928-11.136-19.2-14.328-26.808C74.232,181.816,64.08,157.376,64.08,136c0-66.168,53.832-120,120-120 c66.168,0,120,53.832,120,120C304.08,157.408,293.904,181.912,293.8,182.152z"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M184.08,64.008c-39.704,0-72,32.304-72,72c0,39.696,32.296,72,72,72c39.704,0,72-32.304,72-72 C256.08,96.312,223.784,64.008,184.08,64.008z M184.08,192.008c-30.872,0-56-25.12-56-56s25.128-56,56-56s56,25.12,56,56 S214.952,192.008,184.08,192.008z"
|
||||
id="path4" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g12">
|
||||
</g>
|
||||
<g
|
||||
id="g14">
|
||||
</g>
|
||||
<g
|
||||
id="g16">
|
||||
</g>
|
||||
<g
|
||||
id="g18">
|
||||
</g>
|
||||
<g
|
||||
id="g20">
|
||||
</g>
|
||||
<g
|
||||
id="g22">
|
||||
</g>
|
||||
<g
|
||||
id="g24">
|
||||
</g>
|
||||
<g
|
||||
id="g26">
|
||||
</g>
|
||||
<g
|
||||
id="g28">
|
||||
</g>
|
||||
<g
|
||||
id="g30">
|
||||
</g>
|
||||
<g
|
||||
id="g32">
|
||||
</g>
|
||||
<g
|
||||
id="g34">
|
||||
</g>
|
||||
<g
|
||||
id="g36">
|
||||
</g>
|
||||
<g
|
||||
id="g38">
|
||||
</g>
|
||||
<g
|
||||
id="g40">
|
||||
</g>
|
||||
<path
|
||||
style="fill:#d40000;stroke-width:0.675523"
|
||||
d="M 183.2356,15.407728 C 148.115,15.680007 113.56046,32.165752 91.281357,59.335191 67.968201,87.080284 57.903075,125.97636 67.012946,161.30636 c 5.002813,21.56622 16.217838,40.96402 28.671518,59.02158 29.047926,44.21623 57.936976,88.55418 87.673836,132.30559 2.75528,0.71398 3.44582,-3.87416 5.23173,-5.36255 32.63958,-48.91094 65.16056,-97.91511 96.89098,-147.42174 14.94799,-26.09698 23.38967,-57.3347 16.79888,-87.25041 C 297.41258,88.732147 285.50707,66.159988 267.48079,49.622901 254.86863,36.299556 238.35251,27.47624 221.24564,21.334387 209.00763,17.320382 196.11719,15.285641 183.2356,15.407728 Z m 2.03448,49.555941 c 27.46439,-0.566602 54.10132,17.912787 64.54543,43.490751 4.10895,9.11958 5.7106,19.04018 5.10583,29.01713 0.83931,19.32103 -8.79389,38.15287 -22.74612,51.10133 -14.02478,12.97799 -33.27348,19.77398 -52.19585,18.33769 -29.18994,-0.56334 -56.21632,-22.71956 -64.31454,-50.57715 -3.46488,-10.42859 -2.56691,-21.58508 -1.94784,-32.37905 3.96475,-21.34187 17.606,-41.232363 37.2523,-51.078299 10.71386,-5.480174 22.38724,-8.587404 34.30079,-7.912402 z"
|
||||
id="path91" /></svg>
|
After Width: | Height: | Size: 3.8 KiB |
|
@ -0,0 +1,8 @@
|
|||
<svg class="LP-Link__Icon" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path d="M492,236H276V20c0-11.046-8.954-20-20-20c-11.046,0-20,8.954-20,20v216H20c-11.046,0-20,8.954-20,20s8.954,20,20,20h216
|
||||
v216c0,11.046,8.954,20,20,20s20-8.954,20-20V276h216c11.046,0,20-8.954,20-20C512,244.954,503.046,236,492,236z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 488 B |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="facebook.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 96.227 96.227;"
|
||||
viewBox="0 0 96.227 96.227"
|
||||
height="96.227px"
|
||||
width="96.227px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata1183"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1181" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.113499"
|
||||
inkscape:cx="48.113499"
|
||||
inkscape:zoom="8.511125"
|
||||
showgrid="false"
|
||||
id="namedview1179"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="g1176">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path1174"
|
||||
d="m 73.099,15.973 -9.058,0.004 c -7.102,0 -8.477,3.375 -8.477,8.328 V 35.226 H 72.502 L 72.496,52.332 H 55.564 V 96.227 H 37.897 V 52.332 H 23.127 V 35.226 h 14.77 V 22.612 C 37.897,7.972 46.84,0 59.9,0 l 13.2,0.021 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="instagram.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 97.395 97.395;"
|
||||
viewBox="0 0 97.395 97.395"
|
||||
height="97.395px"
|
||||
width="97.395px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata1237"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1235" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.697498"
|
||||
inkscape:cx="48.697498"
|
||||
inkscape:zoom="8.4090562"
|
||||
showgrid="false"
|
||||
id="namedview1233"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="g1230">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path1228"
|
||||
d="m 12.501,0 h 72.393 c 6.875,0 12.5,5.09 12.5,12.5 v 72.395 c 0,7.41 -5.625,12.5 -12.5,12.5 H 12.501 C 5.624,97.395 0,92.305 0,84.895 V 12.5 C 0,5.09 5.624,0 12.501,0 Z m 58.447,10.821 c -2.412,0 -4.383,1.972 -4.383,4.385 v 10.495 c 0,2.412 1.971,4.385 4.383,4.385 h 11.008 c 2.412,0 4.385,-1.973 4.385,-4.385 V 15.206 c 0,-2.413 -1.973,-4.385 -4.385,-4.385 z m 15.439,30.367 h -8.572 c 0.811,2.648 1.25,5.453 1.25,8.355 0,16.2 -13.556,29.332 -30.275,29.332 -16.718,0 -30.272,-13.132 -30.272,-29.332 0,-2.904 0.438,-5.708 1.25,-8.355 h -8.945 v 41.141 c 0,2.129 1.742,3.872 3.872,3.872 h 67.822 c 2.13,0 3.872,-1.742 3.872,-3.872 V 41.188 Z M 48.789,29.533 c -10.802,0 -19.56,8.485 -19.56,18.953 0,10.468 8.758,18.953 19.56,18.953 10.803,0 19.562,-8.485 19.562,-18.953 0,-10.468 -8.758,-18.953 -19.562,-18.953 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="mastodon.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 97.637 97.637;"
|
||||
viewBox="0 0 417.8 512"
|
||||
height="97.637px"
|
||||
width="97.637px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata1099"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1097"><filter
|
||||
height="1.0046383"
|
||||
y="-0.0023191661"
|
||||
width="1.0049733"
|
||||
x="-0.0024866723"
|
||||
id="filter1101"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:collect="always"><feGaussianBlur
|
||||
id="feGaussianBlur1103"
|
||||
stdDeviation="0.43298031"
|
||||
inkscape:collect="always" /></filter></defs><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.818501"
|
||||
inkscape:cx="48.818501"
|
||||
inkscape:zoom="8.3882134"
|
||||
showgrid="false"
|
||||
id="namedview1095"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="opacity:0.992;fill:#f9f9f9;fill-opacity:1;filter:url(#filter1101)"
|
||||
id="g1092">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path1090"
|
||||
d="M 417.8,179.1 C 417.8,81.9 354.1,53.4 354.1,53.4 291.6,24.7 125.6,25 63.7,53.4 63.7,53.4 0,81.9 0,179.1 c 0,115.7 -6.6,259.4 105.6,289.1 40.5,10.7 75.3,13 103.3,11.4 50.8,-2.8 79.3,-18.1 79.3,-18.1 l -1.7,-36.9 c 0,0 -36.3,11.4 -77.1,10.1 -40.4,-1.4 -83,-4.4 -89.6,-54 -0.6,-4.4 -0.9,-9 -0.9,-13.9 85.6,20.9 158.6,9.1 178.7,6.7 56.1,-6.7 105,-41.3 111.2,-72.9 9.8,-49.8 9,-121.5 9,-121.5 z M 342.7,304.3 H 296.1 V 190.1 c 0,-49.7 -64,-51.6 -64,6.9 v 62.5 H 185.8 V 197 c 0,-58.5 -64,-56.6 -64,-6.9 V 304.3 H 75.1 c 0,-122.1 -5.2,-147.9 18.4,-175 25.9,-28.9 79.8,-30.8 103.8,6.1 l 11.6,19.5 11.6,-19.5 c 24.1,-37.1 78.1,-34.8 103.8,-6.1 23.7,27.3 18.4,53 18.4,175 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="twitter.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 97.637 97.637;"
|
||||
viewBox="0 0 97.637 97.637"
|
||||
height="97.637px"
|
||||
width="97.637px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata889"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs887" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.818501"
|
||||
inkscape:cx="48.818501"
|
||||
inkscape:zoom="8.3882134"
|
||||
showgrid="false"
|
||||
id="namedview885"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="opacity:0.995;fill:#f9f9f9;fill-opacity:1"
|
||||
id="g882">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path880"
|
||||
d="m 97.523,18.526 c -0.14,-0.165 -0.371,-0.221 -0.568,-0.131 -2.919,1.295 -5.99,2.226 -9.153,2.776 3.358,-2.526 5.86,-6.024 7.143,-10.035 0.062,-0.192 -0.002,-0.402 -0.159,-0.527 -0.158,-0.125 -0.377,-0.141 -0.55,-0.038 -3.782,2.243 -7.878,3.824 -12.18,4.701 -3.812,-3.956 -9.135,-6.219 -14.644,-6.219 -11.204,0 -20.318,9.114 -20.318,20.317 0,1.355 0.131,2.697 0.391,4 C 31.967,32.412 17.457,24.962 7.591,12.861 7.49,12.737 7.337,12.668 7.177,12.684 c -0.159,0.012 -0.301,0.102 -0.381,0.239 -1.8,3.088 -2.751,6.621 -2.751,10.215 0,6.229 2.83,12.053 7.649,15.896 C 9.213,38.736 6.79,37.955 4.605,36.742 4.458,36.659 4.275,36.66 4.128,36.745 c -0.147,0.084 -0.24,0.24 -0.244,0.41 l -0.002,0.26 c 0,8.946 5.895,16.801 14.282,19.409 -2.209,0.356 -4.501,0.332 -6.754,-0.098 -0.166,-0.031 -0.34,0.026 -0.454,0.154 -0.113,0.128 -0.151,0.307 -0.099,0.469 2.515,7.85 9.503,13.355 17.637,14.041 -6.785,4.971 -14.805,7.59 -23.279,7.59 -1.561,0 -3.133,-0.093 -4.673,-0.274 -0.22,-0.025 -0.438,0.106 -0.514,0.317 -0.076,0.213 0.005,0.451 0.195,0.572 9.17,5.881 19.773,8.988 30.664,8.988 35.625,0 56.913,-28.938 56.913,-56.914 0,-0.779 -0.015,-1.554 -0.046,-2.327 3.843,-2.811 7.142,-6.252 9.802,-10.235 0.119,-0.178 0.106,-0.415 -0.033,-0.581 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="vimeo.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 97.097 97.096;"
|
||||
viewBox="0 0 97.097 97.096"
|
||||
height="97.096px"
|
||||
width="97.097px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata877"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs875" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.548"
|
||||
inkscape:cx="48.5485"
|
||||
inkscape:zoom="8.4349509"
|
||||
showgrid="false"
|
||||
id="namedview873"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="g870">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path868"
|
||||
d="M 97.05,25.977 C 96.619,35.43 90.012,48.378 77.244,64.811 64.046,81.975 52.876,90.56 43.734,90.56 38.079,90.56 33.29,85.334 29.377,74.876 26.764,65.291 24.15,55.715 21.539,46.13 18.637,35.678 15.522,30.447 12.187,30.447 c -0.724,0 -3.27,1.531 -7.622,4.577 L 0,29.136 c 4.788,-4.208 9.517,-8.422 14.167,-12.643 6.394,-5.52 11.19,-8.429 14.391,-8.722 7.557,-0.725 12.208,4.446 13.954,15.502 1.886,11.938 3.191,19.361 3.922,22.264 2.176,9.902 4.576,14.849 7.19,14.849 2.034,0 5.091,-3.216 9.159,-9.634 4.065,-6.427 6.244,-11.315 6.537,-14.667 0.58,-5.545 -1.6,-8.324 -6.537,-8.324 -2.328,0 -4.727,0.531 -7.188,1.592 4.77,-15.632 13.887,-23.229 27.348,-22.8 9.98,0.294 14.68,6.769 14.107,19.424 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="vkontakte.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 96.496 96.496;"
|
||||
viewBox="0 0 96.496 96.496"
|
||||
height="96.496px"
|
||||
width="96.496px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata937"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs935" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.248001"
|
||||
inkscape:cx="48.248001"
|
||||
inkscape:zoom="8.4873982"
|
||||
showgrid="false"
|
||||
id="namedview933"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="g930">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path928"
|
||||
d="m 92.499,65.178 c -2.873,-3.446 -6.254,-6.387 -9.453,-9.51 -2.886,-2.815 -3.068,-4.448 -0.748,-7.697 2.532,-3.546 5.255,-6.956 7.81,-10.486 2.385,-3.299 4.823,-6.589 6.078,-10.539 0.796,-2.513 0.092,-3.623 -2.485,-4.063 -0.444,-0.077 -0.903,-0.081 -1.355,-0.081 L 77.057,22.784 c -1.883,-0.028 -2.924,0.793 -3.59,2.462 -0.899,2.256 -1.826,4.51 -2.897,6.687 -2.43,4.936 -5.144,9.707 -8.949,13.747 -0.839,0.891 -1.767,2.017 -3.169,1.553 -1.754,-0.64 -2.271,-3.53 -2.242,-4.507 L 56.195,25.079 c -0.34,-2.521 -0.899,-3.645 -3.402,-4.135 l -15.882,0.003 c -2.12,0 -3.183,0.819 -4.315,2.145 -0.653,0.766 -0.85,1.263 0.492,1.517 2.636,0.5 4.121,2.206 4.515,4.849 0.632,4.223 0.588,8.463 0.224,12.703 -0.107,1.238 -0.32,2.473 -0.811,3.629 -0.768,1.817 -2.008,2.187 -3.637,1.069 -1.475,-1.012 -2.511,-2.44 -3.525,-3.874 C 26.045,37.603 23.006,31.799 20.528,25.7 19.812,23.938 18.577,22.87 16.71,22.841 12.123,22.768 7.535,22.756 2.948,22.845 c -2.76,0.052 -3.583,1.392 -2.459,3.894 4.996,11.113 10.557,21.917 17.816,31.759 3.727,5.051 8.006,9.51 13.534,12.67 6.265,3.582 13.009,4.66 20.112,4.328 3.326,-0.156 4.325,-1.021 4.479,-4.336 0.104,-2.268 0.361,-4.523 1.48,-6.561 1.098,-2 2.761,-2.381 4.678,-1.137 0.959,0.623 1.767,1.416 2.53,2.252 1.872,2.048 3.677,4.158 5.62,6.137 2.437,2.48 5.324,3.945 8.954,3.646 L 93.744,75.5 c 2.264,-0.148 3.438,-2.924 2.138,-5.451 -0.913,-1.77 -2.111,-3.346 -3.383,-4.871 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="wordpress.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 96.24 96.24;"
|
||||
viewBox="0 0 96.24 96.24"
|
||||
height="96.24px"
|
||||
width="96.24px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata1045"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1043" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.119999"
|
||||
inkscape:cx="48.119999"
|
||||
inkscape:zoom="8.5099753"
|
||||
showgrid="false"
|
||||
id="namedview1041"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="g1038">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path1036"
|
||||
d="M 48.122,0 C 21.587,0 0.001,21.585 0.001,48.118 c 0,26.535 21.587,48.122 48.12,48.122 26.532,0 48.117,-21.587 48.117,-48.122 C 96.239,21.586 74.654,0 48.122,0 Z M 4.857,48.118 c 0,-6.271 1.345,-12.227 3.746,-17.606 L 29.241,87.056 C 14.81,80.042 4.857,65.243 4.857,48.118 Z m 43.265,43.267 c -4.247,0 -8.346,-0.623 -12.222,-1.763 L 48.88,51.903 62.181,88.336 c 0.086,0.215 0.191,0.411 0.308,0.596 -4.497,1.582 -9.329,2.453 -14.367,2.453 z m 5.961,-63.551 c 2.604,-0.137 4.953,-0.412 4.953,-0.412 2.33,-0.276 2.057,-3.701 -0.277,-3.564 0,0 -7.007,0.549 -11.532,0.549 -4.25,0 -11.396,-0.549 -11.396,-0.549 -2.332,-0.137 -2.604,3.427 -0.273,3.564 0,0 2.208,0.275 4.537,0.412 l 6.74,18.469 -9.468,28.395 -15.752,-46.863 c 2.608,-0.136 4.952,-0.412 4.952,-0.412 2.33,-0.275 2.055,-3.702 -0.278,-3.562 0,0 -7.004,0.549 -11.53,0.549 -0.813,0 -1.77,-0.021 -2.784,-0.052 7.734,-11.747 21.033,-19.502 36.147,-19.502 11.265,0 21.519,4.306 29.215,11.357 -0.187,-0.01 -0.368,-0.035 -0.562,-0.035 -4.248,0 -7.264,3.702 -7.264,7.679 0,3.564 2.055,6.582 4.248,10.146 1.647,2.882 3.567,6.585 3.567,11.932 0,3.704 -1.422,8 -3.293,13.986 L 69.718,74.342 Z M 69.871,85.516 83.086,47.308 c 2.471,-6.171 3.29,-11.106 3.29,-15.497 0,-1.591 -0.104,-3.07 -0.292,-4.449 3.38,6.163 5.303,13.236 5.301,20.758 -0.001,15.96 -8.653,29.896 -21.514,37.396 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="youtube.svg"
|
||||
xml:space="preserve"
|
||||
style="enable-background:new 0 0 96.875 96.875;"
|
||||
viewBox="0 0 96.875 96.875"
|
||||
height="96.875px"
|
||||
width="96.875px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata991"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs989" /><sodipodi:namedview
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="48.4375"
|
||||
inkscape:cx="48.4375"
|
||||
inkscape:zoom="8.4541935"
|
||||
showgrid="false"
|
||||
id="namedview987"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<g
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="g984">
|
||||
<path
|
||||
style="fill:#f9f9f9;fill-opacity:1"
|
||||
id="path982"
|
||||
d="M 95.201,25.538 C 94.015,20.386 89.801,16.585 84.728,16.018 72.715,14.677 60.556,14.67 48.453,14.677 36.348,14.67 24.187,14.677 12.174,16.018 7.104,16.585 2.893,20.386 1.707,25.538 0.019,32.875 0,40.884 0,48.438 0,55.992 0,64 1.688,71.336 c 1.184,5.151 5.396,8.952 10.469,9.52 12.012,1.342 24.172,1.349 36.277,1.342 12.107,0.007 24.264,0 36.275,-1.342 5.07,-0.567 9.285,-4.368 10.471,-9.52 1.689,-7.337 1.695,-15.345 1.695,-22.898 0,-7.554 0.014,-15.563 -1.674,-22.9 z M 35.936,63.474 c 0,-10.716 0,-21.32 0,-32.037 10.267,5.357 20.466,10.678 30.798,16.068 -10.3,5.342 -20.504,10.631 -30.798,15.969 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
|
@ -1,3 +1,3 @@
|
|||
<?xml version="1.0" ?><svg style="enable-background:new 0 0 24 24;" version="1.1" viewBox="0 0 24 24" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style type="text/css">
|
||||
.st0{display:none;}
|
||||
.st0{display:none;}
|
||||
</style><g class="st0" id="grid"/><g id="icon"><path d="M12,0C5.383,0,0,5.383,0,12s5.383,12,12,12s12-5.383,12-12S18.617,0,12,0z M12,23C5.935,23,1,18.065,1,12S5.935,1,12,1 s11,4.935,11,11S18.065,23,12,23z"/><path d="M16.801,8.403l-6.132,6.133L7.753,11.62c-0.195-0.195-0.512-0.195-0.707,0s-0.195,0.512,0,0.707l3.27,3.27 c0.094,0.094,0.221,0.146,0.354,0.146s0.26-0.053,0.354-0.146l6.485-6.486c0.195-0.195,0.195-0.512,0-0.707 S16.997,8.208,16.801,8.403z"/></g></svg>
|
Before Width: | Height: | Size: 714 B After Width: | Height: | Size: 717 B |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
@ -0,0 +1,2 @@
|
|||
.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width;transition:all .25s}.ol-scale-bar{position:absolute;bottom:8px;left:8px}.ol-scale-step-marker{width:1px;height:15px;background-color:#000;float:right;z-Index:10}.ol-scale-step-text{position:absolute;bottom:-5px;font-size:12px;z-Index:11;color:#000;text-shadow:-2px 0 #fff,0 2px #fff,2px 0 #fff,0 -2px #fff}.ol-scale-text{position:absolute;font-size:14px;text-align:center;bottom:25px;color:#000;text-shadow:-2px 0 #fff,0 2px #fff,2px 0 #fff,0 -2px #fff}.ol-scale-singlebar{position:relative;height:10px;z-Index:9;box-sizing:border-box;border:1px solid #000}.ol-unsupported{display:none}.ol-unselectable,.ol-viewport{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.ol-control{position:absolute;background-color:rgba(255,255,255,.4);border-radius:4px;padding:2px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}
|
||||
/*# sourceMappingURL=ol.css.map */
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["src/ol/ol.css"],"names":[],"mappings":"AAAA,QACE,WAAY,WACZ,cAAe,IACf,OAAQ,IAAI,MAAM,KAGpB,mBACE,IAAK,IACL,MAAO,IACP,SAAU,SAGZ,eACE,WAAY,kBACZ,cAAe,IACf,OAAQ,IACR,KAAM,IACN,QAAS,IACT,SAAU,SAEZ,qBACE,OAAQ,IAAI,MAAM,KAClB,WAAY,KACZ,MAAO,KACP,UAAW,KACX,WAAY,OACZ,OAAQ,IACR,YAAa,QAAQ,CAAE,MACvB,WAAY,IAAI,KAElB,cACE,SAAU,SACV,OAAQ,IACR,KAAM,IAER,sBACE,MAAO,IACP,OAAQ,KACR,iBAAkB,KAClB,MAAO,MACP,QAAS,GAEX,oBACE,SAAU,SACV,OAAQ,KACR,UAAW,KACX,QAAS,GACT,MAAO,KACP,YAAa,KAAK,EAAE,IAAO,CAAE,EAAE,IAAI,IAAO,CAAE,IAAI,EAAE,IAAO,CAAE,EAAE,KAAK,KAEpE,eACE,SAAU,SACV,UAAW,KACX,WAAY,OACZ,OAAQ,KACR,MAAO,KACP,YAAa,KAAK,EAAE,IAAO,CAAE,EAAE,IAAI,IAAO,CAAE,IAAI,EAAE,IAAO,CAAE,EAAE,KAAK,KAEpE,oBACE,SAAU,SACV,OAAQ,KACR,QAAS,EACT,WAAY,WACZ,OAAQ,IAAI,MAAM,KAGpB,gBACE,QAAS,KAEG,iBAAd,aACE,sBAAuB,KACvB,oBAAqB,KACrB,iBAAkB,KAClB,gBAAiB,KACjB,YAAa,KACb,4BAA6B,YAE/B,eACE,sBAAuB,QACvB,oBAAqB,KACrB,iBAAkB,KAClB,gBAAiB,KACjB,YAAa,KAEf,aACE,OAAQ,iBACR,OAAQ,cACR,OAAQ,SAEV,SACE,OAAQ,KACR,OAAQ,aACR,OAAQ,UACR,OAAQ,KAEV,YACE,SAAU,SACV,iBAAkB,qBAClB,cAAe,IACf,QAAS,IAEX,kBACE,iBAAkB,qBAEpB,SACE,IAAK,KACL,KAAM,KAER,WACE,IAAK,KACL,MAAO,KACP,WAAY,QAAQ,KAAK,MAAM,CAAE,WAAW,GAAG,OAEjD,qBACE,QAAS,EACT,WAAY,OACZ,WAAY,QAAQ,KAAK,MAAM,CAAE,WAAW,GAAG,OAAO,KAExD,gBACE,IAAK,QACL,KAAM,KAER,gBACE,MAAO,KACP,IAAK,KAGP,mBACE,QAAS,MACT,OAAQ,IACR,QAAS,EACT,MAAO,KACP,UAAW,OACX,YAAa,IACb,gBAAiB,KACjB,WAAY,OACZ,OAAQ,QACR,MAAO,QACP,YAAa,KACb,iBAAkB,kBAClB,OAAQ,KACR,cAAe,IAEjB,qCACE,OAAQ,KACR,QAAS,EAEX,uBACE,YAAa,MAEf,YACE,QAAS,MACT,YAAa,IACb,UAAW,MACX,YAAa,UAEf,6BACE,UAAW,MAEb,0BACE,IAAK,MAGP,yBADA,yBAEE,gBAAiB,KACjB,iBAAkB,kBAEpB,qBACE,cAAe,IAAI,IAAI,EAAE,EAE3B,sBACE,cAAe,EAAE,EAAE,IAAI,IAIzB,gBACE,WAAY,MACZ,OAAQ,KACR,MAAO,KACP,UAAW,mBAGb,mBACE,OAAQ,EACR,QAAS,EAAE,KACX,MAAO,KACP,YAAa,EAAE,EAAE,IAAI,KAEvB,mBACE,QAAS,OACT,WAAY,KAEd,0CACE,QAAS,IAEX,oBACE,WAAY,IACZ,UAAW,QACX,eAAgB,OAEE,uBAApB,mBACE,QAAS,aAEX,gCACE,QAAS,KAEX,mCACE,WAAY,qBAEd,iCACE,OAAQ,EACR,MAAO,EACP,cAAe,IAAI,EAAE,EAEvB,qCACE,WAAY,MACZ,WAAY,MAEd,wCACE,QAAS,KAGX,eACE,IAAK,MACL,KAAM,KACN,OAAQ,MAEV,sBACE,SAAU,SACV,OAAQ,KAGV,yBACE,IAAK,MAGP,gBACE,KAAM,KACN,OAAQ,KAEV,iCACE,OAAQ,EACR,KAAM,EACN,cAAe,EAAE,IAAI,EAAE,EAEzB,oCACA,uBACE,QAAS,aAEX,oCACE,OAAQ,IAAI,MAAM,QAClB,OAAQ,MACR,OAAQ,IACR,MAAO,MAET,0CACE,OAAQ,IACR,KAAM,IACN,SAAU,SAEZ,iDACA,wCACE,QAAS,KAEX,mCACE,WAAY,qBAEd,oBACE,OAAQ,IAAI,OAAO,kBAGrB,0CACE,OAAQ"}
|
|
@ -0,0 +1,16 @@
|
|||
{% extends 'global.html'%}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{% translate 'Forbidden' %}{% endblock %}
|
||||
|
||||
{% block additional_head %}
|
||||
{% if request.META.HTTP_REFERER %}
|
||||
<meta http-equiv="refresh" content="5;url={{ request.META.HTTP_REFERER }}" />
|
||||
{% endif %}
|
||||
{% endblock additional_head %}
|
||||
|
||||
{% block maincontent %}
|
||||
{% if request.META.HTTP_REFERER %}
|
||||
<p class="LP-Headline">{% translate 'You will be redirected in 5 seconds' %}</p><p class="LP-Headline"><a href="{{ request.META.HTTP_REFERER }}" class="LP-Link">{% translate 'Go Back' %}</a></p>
|
||||
{% endif %}
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,128 @@
|
|||
{% extends 'global.html'%}
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
|
||||
{% load svg_icon %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<div class="LP-UserProfile">
|
||||
<div class="LP-UserProfile__Bio">
|
||||
<h2 class="LP-Headline">Bio</h2>
|
||||
<p class="LP-Paragraph">{{explorer.bio}}</p>
|
||||
</div>
|
||||
<div class="LP-UserProfile__Info">
|
||||
<div class="LP-UserInfo">
|
||||
<div class="LP-UserInfo__UserName">
|
||||
<h1 class="LP-Headline">{{explorer.user.username}}</h1>
|
||||
</div>
|
||||
|
||||
<div class="LP-UserInfo__Meta">
|
||||
<table>
|
||||
<tr>
|
||||
{% if explorer.profile_image %}
|
||||
<figure class="LP-UserInfo__Image">
|
||||
<img src="{{ explorer.profile_image.url }}" class="LP-Image" />
|
||||
</figure>
|
||||
{% endif %}
|
||||
<tr>
|
||||
{% if explorer.user.first_name %}
|
||||
<td class="LP-UserInfo__Key">
|
||||
<span class="LP-Paragraph">{% trans 'Name' %}</span>
|
||||
</td>
|
||||
<td class="LP-UserInfo__Value">
|
||||
<span class="LP-Paragraph">{{explorer.user.first_name}} {{explorer.user.last_name}}</span>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
<tr>
|
||||
{% if explorer.user.email %}
|
||||
<td class="LP-UserInfo__Key">
|
||||
<span class="LP-Paragraph">{% trans 'E-mail' %}</span>
|
||||
</td>
|
||||
<td class="LP-UserInfo__Value">
|
||||
<span class="LP-Paragraph">
|
||||
<a href="mailto:{{explorer.user.email}}" class="LP-Link">{{explorer.user.email}}</a>
|
||||
</span>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="LP-UserInfo__Key">
|
||||
<span class="LP-Paragraph">{% translate 'Joined' %}</span>
|
||||
</td>
|
||||
<td class="LP-UserInfo__Value">
|
||||
<span class="LP-Paragraph">{{explorer.user.date_joined|date:'d.m.Y'}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="LP-UserInfo__Key">
|
||||
<span class="LP-Paragraph">{% translate 'Places'%}</span>
|
||||
</td>
|
||||
<td class="LP-UserInfo__Value">
|
||||
<span class="LP-Paragraph">{{place_count}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="LP-UserInfo__Key">
|
||||
<span class="LP-Paragraph">{% translate 'Place Assets'%}</span>
|
||||
</td>
|
||||
<td class="LP-UserInfo__Value">
|
||||
<span class="LP-Paragraph">{{asset_count}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="LP-UserInfo__Edit">
|
||||
<a href="{% url 'explorer_profile_update' %}" class="LP-Button LP-Button--fullWidth LP-Link">{% trans 'Edit Profile' %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="LP-Section">
|
||||
<div class="LP-PlaceList">
|
||||
<h1 class="LP-Headline">{% translate 'Places submitted by' %} {{explorer.user.username}}</h1>
|
||||
<ul class="LP-PlaceList__List">
|
||||
{% for place in place_list %}
|
||||
<li class="LP-PlaceList__Item">
|
||||
<a href="{% url 'place_detail' pk=place.pk %}" class="LP-Link">
|
||||
{% include 'partials/place_teaser.html' with place=place extended=True %}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% include 'partials/nav/pagination.html' %}
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="LP-Section">
|
||||
{% translate 'Images submitted by' as submitted_by %}
|
||||
{% include 'partials/placeImageGrid.html' with headline=submitted_by|add:' '|add:explorer.user.username image_list=assets.placeimages.all%}
|
||||
</section>
|
||||
|
||||
<section class=" LP-Section">
|
||||
<h1 class="LP-Headline">{% translate 'Photo albums submitted by' %} {{explorer.user.username}}</h1>
|
||||
<div class="LP-LinkList">
|
||||
<ul class="LP-LinkList__Container">
|
||||
{% for photo_album in assets.photoalbums.all %}
|
||||
<li class="LP-LinkList__Item">
|
||||
<a target="_blank" href="{{photo_album.url}}" class="LP-Link">
|
||||
<span class="LP-Text">{{photo_album.label}}</span>
|
||||
</a>
|
||||
{% if user.explorer == photo_album.submitted_by%}
|
||||
<a href="{% url 'photo_album_delete' pk=photo_album.pk%}" class="LP-Link LP-LinkList__ItemHover" title="Delete Photo Album">
|
||||
<div class="RV-Iconized__Container RV-Iconized__Container--small">
|
||||
{% icon 'trash' className="RV-Iconized__Icon" %}
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,55 @@
|
|||
{% extends 'global.html'%}
|
||||
{% load i18n %}
|
||||
{% load thumbnail %}
|
||||
{% load widget_tweaks %}
|
||||
|
||||
# {% block title %}{% trans 'Edit Explorer profile' %}{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<form class="LP-Form" method="POST" enctype="multipart/form-data">
|
||||
<fieldset class="LP-Form__Fieldset">
|
||||
<legend class="LP-Form__Legend">{% trans 'Edit Explorer profile' %}</legend>
|
||||
{% csrf_token %}
|
||||
<div class="LP-Form__Composition LP-Form__Composition--breakable">
|
||||
<div class="LP-Form__Field">
|
||||
{% include 'partials/form/inputField.html' with field=explorer_user_change_form.username %}
|
||||
</div>
|
||||
<div class="LP-Form__Field">
|
||||
{% include 'partials/form/inputField.html' with field=explorer_user_change_form.email %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="LP-Form__Composition LP-Form__Composition--breakable">
|
||||
<div class="LP-Form__Field">
|
||||
{% include 'partials/form/inputField.html' with field=explorer_user_change_form.first_name %}
|
||||
</div>
|
||||
<div class="LP-Form__Field">
|
||||
{% include 'partials/form/inputField.html' with field=explorer_user_change_form.last_name %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="LP-Form__Composition">
|
||||
<div class="LP-Form__Field">
|
||||
{% include 'partials/form/inputField.html' with field=explorer_change_form.bio %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="LP-Form__Composition">
|
||||
{% if explorer_image %}
|
||||
<div class="LP-Form__Field">
|
||||
<img src="{% thumbnail explorer_image 200x200 %}"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="LP-Form__Field">
|
||||
{% include 'partials/form/inputField.html' with field=explorer_change_form.profile_image %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% trans 'Update' as action %}
|
||||
<div class="LP-Form__Composition LP-Form__Composition--buttons">
|
||||
{% include 'partials/form/submit.html' with referrer=request.META.HTTP_REFERER action=action %}
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,74 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
# {% block title %}UrBex Codex{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<header class="LP-TextSection__Headline">
|
||||
<h1 class="LP-Headline">Nimm nichts mit - außer Deinen Bildern. Laß nichts da - außer Deinen Fußspuren!</h1>
|
||||
</header>
|
||||
|
||||
<article class="LP-TextSection LP-TextSection__Text">
|
||||
|
||||
<p>Das sollte doch eigentlich eindeutig sein, oder? Aber wie wir alle wissen, hat jedes Schild eine Geschichte. Wir haben zu viel sinnlose Zerstörung gesehen, sodass wir uns dazu entschieden haben, einen grundlegenden Urban Exploration Codex niederzuschreiben.</p>
|
||||
<h2 class="LP-Headline">Zu deiner eigenen Sicherheit</h2>
|
||||
<ol class="LP-UnorderedList">
|
||||
<li>
|
||||
<b>Wir gehen selten alleine</b>, ein bisschen rumlaufen und Fotos machen klingt erstmal ungefährlich. Du weißt aber nie in welchem Zustand die Anlage ist oder wer sich dort aufhält. Den Fuß umknickt, an Scherben geschnitten oder vielleicht auf einen unerwarteten Bewohner oder Sicherheitspersonal getroffen. In solchen Situationen ist immer besser jemanden an deiner Seite zu haben, der dich nicht im Stich lässt.
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir sagen vor einer Tour mindestens einer Person unseres Vertrauens, wo wir sind</b> (Koordinaten!), wie lange wir uns dort aufhalten werden und was wir dort tun. Wir verabreden, daß wir uns bei einem längeren Aufenthalt dort regelmäßig melden, oder aber ein "okay" geben, wenn wir die Location wieder verlassen haben. Wenn wir uns verspäten, dann denken wir daran, eine entsprechende Nachricht abzusetzen. Unsere Kontaktperson soll nach einer gewissen Zeit, wenn sie nichts von mir hört, für Hilfe sorgen.
|
||||
</li>
|
||||
<li>
|
||||
<b>In einer Location verhalten wir uns vorsichtig.</b> Wir werfen nichts in Löcher oder aus Fenstern und berühren auch keine elektrischen Anlagen. Nicht immer ist der Strom wirklich abgeschaltet. Deswegen öffnen wor auch keine Flaschen und andere Behälter. Wir gehen niemals ohne Licht in einen dunklen Raum, und nehmen immer eine Reservelampe mit.
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir bereiten unsere Tour sorgfältig vor.</b> Es ist ärgerlich, wenn die Kamera-Akkus nicht geladen sind - aber gefährlich ist es keineswegs. Es ist aber lebensgefährlich, wenn ein verschmutzter Nagel durch eine Sohle getreten wird. Sicherheitsschuhe zu tragen ist eine gute Idee. Wenn wir unter Tage gehen, nehmen wir angemessenes Equipment mit um uns zu schützen — z. B. einen Gaswarner oder vllt. sogar einen Geigerzähler.
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir rennen nicht vor bewaffnetem Personal weg</b>, insbesondere nicht der Polizei! Eine Anzeige ist ätzend und das reden mit den Beamten ist mit Sicherheit unangenehm, flieht ihr die Szene, macht euch das aber noch verdächtiger. Mal ganz davon abgesehen dass die Polizei in der Überzahl ist und euch wahrscheinlich sowie fasst.
|
||||
</li>
|
||||
</ol>
|
||||
<h2 class="LP-Headline">Damit ein Lostplace auch lost bleibt</h2>
|
||||
<ol class="LP-UnorderedList">
|
||||
<li>
|
||||
<b>Wir respektieren fremdes Eigentum</b>, so wie wir das von anderen auch verlangen. Deswegen öffnen wir keinen Zugang gewaltsam, oder beschädigen eine Verschlusseinrichtung. Wir betreten ein Grundstück oder ein Gebäude / eine Anlage / eine Ruine nur dann, wenn wir davon ausgehen können, nicht gegen den Willen des Eigentümers dort zu sein. Eine gut erhaltene Umzäunung, oder ein ständiger Wachschutz sprechen dafür, dass der Eigentümer sich noch mit seiner Anlage befasst. Längst umgesunkene Zäune, Ruinen im letzten Stadium eines Verfalls sprecher dafür, dass dem Eigentümer das eher Wurst ist.
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir nehmen von einer Location nichts mit</b>, auch keine "kleinen Andenken", und lassen nichts da - auch keine Kippen, keine Verpackungen - nichts.
|
||||
<b>Wir verändern am Ort nichts, nehmen nichts weg und fügen nichts hinzu.</b>
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir rauchen möglichst nicht.</b> Nicht nur, weil es stinkt und Müll verursacht. Es gibt immer die Chance, irgendwas durch Funkenflug anzuzünden. Lass es trockene Blätter an einem heißen Sommertag oder (potentielle) entflammbare Materialien in Industrieanlagen sein.
|
||||
</li>
|
||||
<li>
|
||||
<b>Sprayen ist ein absolutes "no-go"!</b>
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir parken nicht so, daß Dritte auf unser Vorhaben aufmerksam werden.</b> Unser Hobby braucht keine öffentliche Aufmerksamkeit, die sich auf illegales Betreten von Grundstücken richtet (und illegal dürfte das Betreten ja meist sein ...).
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir verraten unsere Locations nicht</b> und veröffentlichen ausschließlich Fotos, bei denen Geodaten aus den Dateien (EXIF) entfernt worden sind. Deswegen posten wir unterwegs nur dann vom Smartphone, wenn wir absolut sicher sind, dass keine Koordinaten im Bild enthalten sind.
|
||||
</li>
|
||||
<li>
|
||||
<b>Vor allem halten wir die Klappe</b> und geben nicht mit einer tollen, noch unberührt aussehenden Location an. Deine "Freunde" in Facebook kennst Du oft nicht mal persönlich, schon gar nicht in einer Gruppe. Nichts verbreitet sich schneller als ein "Geheimnis", das unter dem Siegel des Vertrauens weitergegeben wurde. Willst Du daran schuld sein, daß hirnbefreite Sprayer auch diesen Ort demolieren?
|
||||
</li>
|
||||
<li>
|
||||
<b>Wir sorgen durch Argumente und Überzeugung dafür, daß unsere Begleiter sich ebenso verhalten!</b> In erster Linie versuchen wir durch unser eigenes Verhalten zu überzeugen.
|
||||
</li>
|
||||
</ol>
|
||||
<h2 class="LP-Headline">Rechtliches (für Deutschland)</h2>
|
||||
<ol class="LP-UnorderedList">
|
||||
<li>
|
||||
<b>Das Betreten von fremden Grundstücken ist nicht zwangsläufig Illegal.</b> In Deutschland gibt es keinen Tatbestand des Einbruchs, lediglich die dabei begangen Vergehen. Machst du nichts kaputt und stiehlst du auch nichts kann dir nur Hausfriedensbruch zur Lasst gelegt werden. Hausfriedensbruch ist in Deutschland anzeigepflichtig, werdet ihr erwischt notieren sich die Beamten eure Personalien und melden euren Besuch dem Eigentümer des Grundstücks. Dieser Entscheidet ob er gegen euch Anzeige erstattet oder nicht. Erfahrungsgemäß sind den meisten Eigentümern ein paar Leute die nur Fotos machen ziemlich egal, darauf soltet ihr euch aber nicht verlassen.
|
||||
</li>
|
||||
<li>
|
||||
<b>Nehmt einen Ausweis mit</b> solltet ihr erwischt werden müssen die Beamten eure Identität erfassen. Gelingt das nicht vor Ort, werdet ihr einen Ausflug auf die nächste Polizeiwache machen. Darauf haben weder ihr nocht die Beamten lust.
|
||||
</li>
|
||||
<li>
|
||||
<b>Graffiti ist Sachbeschädigung</b> also lasst es lieber sein.
|
||||
</li>
|
||||
</ol>
|
||||
</article>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,52 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
# {% block title %}UrBex codex{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<header class="LP-TextSection__Headline">
|
||||
<h1 class="LP-Headline">Take nothing but pictures. Leave nothing but footprints.</h1>
|
||||
</header>
|
||||
|
||||
<article class="LP-TextSection LP-TextSection__Text">
|
||||
|
||||
<p>This should be pretty self-explanatory, right? But as you all know, every sign has a history. We have seen too much senseless destruction so we decided to write down a basic Urban Exploration codex.</p>
|
||||
<ul class="LP-UnorderedList">
|
||||
<li>
|
||||
<b>We respect other people's property</b>, just as we demand it from others. Therefore we do not open access by force, or damage a locking device. We only enter a property or a building / a facility / a ruin if we can assume that we am not there against the will of the owner. A well-preserved fence or a permanent guard indicates that the owner is still dealing with his property. Fences that have long since collapsed, ruins in the final stages of decay, are more likely to indicate that the owner doesn't care.
|
||||
</li>
|
||||
<li>
|
||||
<b>We take nothing from a location</b>, not even "small souvenirs", and leave nothing there — no cigarettes, no waste — nothing.
|
||||
<b>We do not change anything in the location.</b>
|
||||
</li>
|
||||
<li>
|
||||
<b>We don't smoke if possible.</b> Not only, because it smells bad and causes litter, there is always the chance, to set anything on fire with flying sparks. Let it be dry leaves on a hot summer day or (poentially) flammable materials in industrial plants.
|
||||
</li>
|
||||
<li>
|
||||
<b>Spraying is an absolute "no-go"!</b>
|
||||
</li>
|
||||
<li>
|
||||
<b>In a location we are careful not to endanger ourselves or others.</b> We don't throw anything into holes or out of windows, and we don't touch electrical equipment. You can't tell from its look or sound if the power is really switched off. Therefore we do not open bottles and other containers. We never go into a dark room without light, and always have a spare lamp with us.
|
||||
</li>
|
||||
<li>
|
||||
<b>Before our tour we tell at least one person of our trust where we are</b> (coordinates!), how long we will be there and what we will do there. We arrange that we will contact him regularly if we stay there for a longer period of time, or give an "okay" when we have left the location again. If we am late, we will remember to send a message to that effect. Our contact person is supposed to provide help after a certain period of time if he does not hear from me.
|
||||
</li>
|
||||
<li>
|
||||
<b>We prepare out tour carefully.</b> It is annoying when the camera batteries are not charged — but it is not dangerous at all. But it is life-threatening if you step unto a dirty nail that perforates your shoe. It is wise to wear sturdy shoes. When we go underground, we take appropiate equipment with us to protect ourselves — e. g. a gas warner or even a geiger counter.
|
||||
</li>
|
||||
<li>
|
||||
<b>We do not park in such a way that third parties become aware of our intention.</b> Our hobby does not need public attention, which is directed to illegal entering of properties (and illegal entering is probably the most common way ...).
|
||||
</li>
|
||||
<li>
|
||||
<b>We do not disclose our locations</b> and only publish photos where geodata has been removed from the files (EXIF). Therefore we only post from our smartphone when we am absolutely sure that no coordinates are contained in the picture.
|
||||
</li>
|
||||
<li>
|
||||
<b>Above all, we keep our mouth shut</b> and don't brag about a great, still untouched looking location. You often don't even know your "friends" in Facebook personally, especially not in a group. Nothing spreads faster than a "secret" that has been passed on under the seal of trust. Do you want to be responsible for brainless sprayers destroying this place too?
|
||||
</li>
|
||||
<li>
|
||||
<b>We make sure through argument and conviction that our companions behave the same way!</b> First and foremost we try to convince through our own behavior.
|
||||
</li>
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,28 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
# {% block title %}Impressum{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<header class="LP-TextSection__Headline">
|
||||
<h1 class="LP-Headline">Impressum</h1>
|
||||
</header>
|
||||
|
||||
<article class="LP-TextSection LP-TextSection__Text">
|
||||
<h3>Angaben gemäß § 5 TMG</h3>
|
||||
<p>Urban Exploration Ltd.<br />
|
||||
John S. Smith<br />
|
||||
2563 College Avenue<br />
|
||||
Dayton, OH 45402</p>
|
||||
|
||||
<h3>Kontakt</h3>
|
||||
<p>Telefon: 937-387-6498<br />
|
||||
E-Mail: JohnSSmith@einrot.com</p>
|
||||
|
||||
<h3>Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV</h3>
|
||||
<p>John S. Smith<br />
|
||||
2563 College Avenue<br />
|
||||
Dayton, OH 45402</p>
|
||||
</article>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,28 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
# {% block title %}Imprint{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<header class="LP-TextSection__Headline">
|
||||
<h1 class="LP-Headline">Imprint</h1>
|
||||
</header>
|
||||
|
||||
<article class="LP-TextSection LP-TextSection__Text">
|
||||
<h3>Information according to § 5 TMG</h3>
|
||||
<p>Urban Exploration Ltd.<br />
|
||||
John S. Smith<br />
|
||||
2563 College Avenue<br />
|
||||
Dayton, OH 45402</p>
|
||||
|
||||
<h3>Contact</h3>
|
||||
<p>Phone: 937-387-6498<br />
|
||||
e-mail: JohnSSmith@einrot.com</p>
|
||||
|
||||
<h3>Responsible for the content according to § 55 Abs. 2 RStV</h3>
|
||||
<p>John S. Smith<br />
|
||||
2563 College Avenue<br />
|
||||
Dayton, OH 45402</p>
|
||||
</article>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,259 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
# {% block title %}Datenschutzerklärung{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<header class="LP-TextSection__Headline">
|
||||
<h1 class="LP-Headline">Datenschutzerklärung</h1>
|
||||
</header>
|
||||
|
||||
<article class="LP-TextSection LP-TextSection__Text">
|
||||
<h4>Datenschutzerklärung</h4>
|
||||
|
||||
<p>Wir freuen uns sehr über Ihr Interesse an unserem Unternehmen. Datenschutz hat einen besonders hohen Stellenwert für die Geschäftsleitung der Urban Exploration Ltd. Eine Nutzung der Internetseiten der Urban Exploration Ltd ist grundsätzlich ohne jede Angabe personenbezogener Daten möglich. Sofern eine betroffene Person besondere Services unseres Unternehmens über unsere Internetseite in Anspruch nehmen möchte, könnte jedoch eine Verarbeitung personenbezogener Daten erforderlich werden. Ist die Verarbeitung personenbezogener Daten erforderlich und besteht für eine solche Verarbeitung keine gesetzliche Grundlage, holen wir generell eine Einwilligung der betroffenen Person ein.</p>
|
||||
|
||||
<p>Die Verarbeitung personenbezogener Daten, beispielsweise des Namens, der Anschrift, E-Mail-Adresse oder Telefonnummer einer betroffenen Person, erfolgt stets im Einklang mit der Datenschutz-Grundverordnung und in Übereinstimmung mit den für die Urban Exploration Ltd geltenden landesspezifischen Datenschutzbestimmungen. Mittels dieser Datenschutzerklärung möchte unser Unternehmen die Öffentlichkeit über Art, Umfang und Zweck der von uns erhobenen, genutzten und verarbeiteten personenbezogenen Daten informieren. Ferner werden betroffene Personen mittels dieser Datenschutzerklärung über die ihnen zustehenden Rechte aufgeklärt.</p>
|
||||
|
||||
<p>Die Urban Exploration Ltd hat als für die Verarbeitung Verantwortlicher zahlreiche technische und organisatorische Maßnahmen umgesetzt, um einen möglichst lückenlosen Schutz der über diese Internetseite verarbeiteten personenbezogenen Daten sicherzustellen. Dennoch können Internetbasierte Datenübertragungen grundsätzlich Sicherheitslücken aufweisen, sodass ein absoluter Schutz nicht gewährleistet werden kann. Aus diesem Grund steht es jeder betroffenen Person frei, personenbezogene Daten auch auf alternativen Wegen, beispielsweise telefonisch, an uns zu übermitteln.</p>
|
||||
|
||||
<h4>1. Begriffsbestimmungen</h4>
|
||||
<p>Die Datenschutzerklärung der Urban Exploration Ltd beruht auf den Begrifflichkeiten, die durch den Europäischen Richtlinien- und Verordnungsgeber beim Erlass der Datenschutz-Grundverordnung (DS-GVO) verwendet wurden. Unsere Datenschutzerklärung soll sowohl für die Öffentlichkeit als auch für unsere Kunden und Geschäftspartner einfach lesbar und verständlich sein. Um dies zu gewährleisten, möchten wir vorab die verwendeten Begrifflichkeiten erläutern.</p>
|
||||
|
||||
<p>Wir verwenden in dieser Datenschutzerklärung unter anderem die folgenden Begriffe:</p>
|
||||
|
||||
<ul style="list-style: none">
|
||||
<li><h4>a) personenbezogene Daten</h4>
|
||||
<p>Personenbezogene Daten sind alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person (im Folgenden „betroffene Person“) beziehen. Als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung oder zu einem oder mehreren besonderen Merkmalen, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind, identifiziert werden kann.</p>
|
||||
</li>
|
||||
<li><h4>b) betroffene Person</h4>
|
||||
<p>Betroffene Person ist jede identifizierte oder identifizierbare natürliche Person, deren personenbezogene Daten von dem für die Verarbeitung Verantwortlichen verarbeitet werden.</p>
|
||||
</li>
|
||||
<li><h4>c) Verarbeitung</h4>
|
||||
<p>Verarbeitung ist jeder mit oder ohne Hilfe automatisierter Verfahren ausgeführte Vorgang oder jede solche Vorgangsreihe im Zusammenhang mit personenbezogenen Daten wie das Erheben, das Erfassen, die Organisation, das Ordnen, die Speicherung, die Anpassung oder Veränderung, das Auslesen, das Abfragen, die Verwendung, die Offenlegung durch Übermittlung, Verbreitung oder eine andere Form der Bereitstellung, den Abgleich oder die Verknüpfung, die Einschränkung, das Löschen oder die Vernichtung.</p>
|
||||
</li>
|
||||
<li><h4>d) Einschränkung der Verarbeitung</h4>
|
||||
<p>Einschränkung der Verarbeitung ist die Markierung gespeicherter personenbezogener Daten mit dem Ziel, ihre künftige Verarbeitung einzuschränken.</p>
|
||||
</li>
|
||||
<li><h4>e) Profiling</h4>
|
||||
<p>Profiling ist jede Art der automatisierten Verarbeitung personenbezogener Daten, die darin besteht, dass diese personenbezogenen Daten verwendet werden, um bestimmte persönliche Aspekte, die sich auf eine natürliche Person beziehen, zu bewerten, insbesondere, um Aspekte bezüglich Arbeitsleistung, wirtschaftlicher Lage, Gesundheit, persönlicher Vorlieben, Interessen, Zuverlässigkeit, Verhalten, Aufenthaltsort oder Ortswechsel dieser natürlichen Person zu analysieren oder vorherzusagen.</p>
|
||||
</li>
|
||||
<li><h4>f) Pseudonymisierung</h4>
|
||||
<p>Pseudonymisierung ist die Verarbeitung personenbezogener Daten in einer Weise, auf welche die personenbezogenen Daten ohne Hinzuziehung zusätzlicher Informationen nicht mehr einer spezifischen betroffenen Person zugeordnet werden können, sofern diese zusätzlichen Informationen gesondert aufbewahrt werden und technischen und organisatorischen Maßnahmen unterliegen, die gewährleisten, dass die personenbezogenen Daten nicht einer identifizierten oder identifizierbaren natürlichen Person zugewiesen werden.</p>
|
||||
</li>
|
||||
<li><h4>g) Verantwortlicher oder für die Verarbeitung Verantwortlicher</h4>
|
||||
<p>Verantwortlicher oder für die Verarbeitung Verantwortlicher ist die natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten entscheidet. Sind die Zwecke und Mittel dieser Verarbeitung durch das Unionsrecht oder das Recht der Mitgliedstaaten vorgegeben, so kann der Verantwortliche beziehungsweise können die bestimmten Kriterien seiner Benennung nach dem Unionsrecht oder dem Recht der Mitgliedstaaten vorgesehen werden.</p>
|
||||
</li>
|
||||
<li><h4>h) Auftragsverarbeiter</h4>
|
||||
<p>Auftragsverarbeiter ist eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die personenbezogene Daten im Auftrag des Verantwortlichen verarbeitet.</p>
|
||||
</li>
|
||||
<li><h4>i) Empfänger</h4>
|
||||
<p>Empfänger ist eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, der personenbezogene Daten offengelegt werden, unabhängig davon, ob es sich bei ihr um einen Dritten handelt oder nicht. Behörden, die im Rahmen eines bestimmten Untersuchungsauftrags nach dem Unionsrecht oder dem Recht der Mitgliedstaaten möglicherweise personenbezogene Daten erhalten, gelten jedoch nicht als Empfänger.</p>
|
||||
</li>
|
||||
<li><h4>j) Dritter</h4>
|
||||
<p>Dritter ist eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle außer der betroffenen Person, dem Verantwortlichen, dem Auftragsverarbeiter und den Personen, die unter der unmittelbaren Verantwortung des Verantwortlichen oder des Auftragsverarbeiters befugt sind, die personenbezogenen Daten zu verarbeiten.</p>
|
||||
</li>
|
||||
<li><h4>k) Einwilligung</h4>
|
||||
<p>Einwilligung ist jede von der betroffenen Person freiwillig für den bestimmten Fall in informierter Weise und unmissverständlich abgegebene Willensbekundung in Form einer Erklärung oder einer sonstigen eindeutigen bestätigenden Handlung, mit der die betroffene Person zu verstehen gibt, dass sie mit der Verarbeitung der sie betreffenden personenbezogenen Daten einverstanden ist.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>2. Name und Anschrift des für die Verarbeitung Verantwortlichen</h4>
|
||||
<p>Verantwortlicher im Sinne der Datenschutz-Grundverordnung, sonstiger in den Mitgliedstaaten der Europäischen Union geltenden Datenschutzgesetze und anderer Bestimmungen mit datenschutzrechtlichem Charakter ist die:</p>
|
||||
|
||||
<p>Urban Exploration Ltd</p>
|
||||
<p>2563 College Avenue</p>
|
||||
<p>45402 Dayton</p>
|
||||
<p>OH</p>
|
||||
<p>Tel.: 937-387-6498</p>
|
||||
<p>E-Mail: JohnSSmith@einrot.com</p>
|
||||
<p>Website: https://www.urban-exploration.com</p>
|
||||
|
||||
<h4>3. Erfassung von allgemeinen Daten und Informationen</h4>
|
||||
<p>Die Internetseite der Urban Exploration Ltd erfasst mit jedem Aufruf der Internetseite durch eine betroffene Person oder ein automatisiertes System eine Reihe von allgemeinen Daten und Informationen. Diese allgemeinen Daten und Informationen werden in den Logfiles des Servers gespeichert. Erfasst werden können die (1) verwendeten Browsertypen und Versionen, (2) das vom zugreifenden System verwendete Betriebssystem, (3) die Internetseite, von welcher ein zugreifendes System auf unsere Internetseite gelangt (sogenannte Referrer), (4) die Unterwebseiten, welche über ein zugreifendes System auf unserer Internetseite angesteuert werden, (5) das Datum und die Uhrzeit eines Zugriffs auf die Internetseite, (6) eine Internet-Protokoll-Adresse (IP-Adresse), (7) der Internet-Service-Provider des zugreifenden Systems und (8) sonstige ähnliche Daten und Informationen, die der Gefahrenabwehr im Falle von Angriffen auf unsere informationstechnologischen Systeme dienen.</p>
|
||||
|
||||
<p>Bei der Nutzung dieser allgemeinen Daten und Informationen zieht die Urban Exploration Ltd keine Rückschlüsse auf die betroffene Person. Diese Informationen werden vielmehr benötigt, um (1) die Inhalte unserer Internetseite korrekt auszuliefern, (2) die Inhalte unserer Internetseite sowie die Werbung für diese zu optimieren, (3) die dauerhafte Funktionsfähigkeit unserer informationstechnologischen Systeme und der Technik unserer Internetseite zu gewährleisten sowie (4) um Strafverfolgungsbehörden im Falle eines Cyberangriffes die zur Strafverfolgung notwendigen Informationen bereitzustellen. Diese anonym erhobenen Daten und Informationen werden durch die Urban Exploration Ltd daher einerseits statistisch und ferner mit dem Ziel ausgewertet, den Datenschutz und die Datensicherheit in unserem Unternehmen zu erhöhen, um letztlich ein optimales Schutzniveau für die von uns verarbeiteten personenbezogenen Daten sicherzustellen. Die anonymen Daten der Server-Logfiles werden getrennt von allen durch eine betroffene Person angegebenen personenbezogenen Daten gespeichert.</p>
|
||||
|
||||
<h4>4. Registrierung auf unserer Internetseite</h4>
|
||||
<p>Die betroffene Person hat die Möglichkeit, sich auf der Internetseite des für die Verarbeitung Verantwortlichen unter Angabe von personenbezogenen Daten zu registrieren. Welche personenbezogenen Daten dabei an den für die Verarbeitung Verantwortlichen übermittelt werden, ergibt sich aus der jeweiligen Eingabemaske, die für die Registrierung verwendet wird. Die von der betroffenen Person eingegebenen personenbezogenen Daten werden ausschließlich für die interne Verwendung bei dem für die Verarbeitung Verantwortlichen und für eigene Zwecke erhoben und gespeichert. Der für die Verarbeitung Verantwortliche kann die Weitergabe an einen oder mehrere Auftragsverarbeiter, beispielsweise einen Paketdienstleister, veranlassen, der die personenbezogenen Daten ebenfalls ausschließlich für eine interne Verwendung, die dem für die Verarbeitung Verantwortlichen zuzurechnen ist, nutzt.</p>
|
||||
|
||||
<p>Durch eine Registrierung auf der Internetseite des für die Verarbeitung Verantwortlichen wird ferner die vom Internet-Service-Provider (ISP) der betroffenen Person vergebene IP-Adresse, das Datum sowie die Uhrzeit der Registrierung gespeichert. Die Speicherung dieser Daten erfolgt vor dem Hintergrund, dass nur so der Missbrauch unserer Dienste verhindert werden kann, und diese Daten im Bedarfsfall ermöglichen, begangene Straftaten aufzuklären. Insofern ist die Speicherung dieser Daten zur Absicherung des für die Verarbeitung Verantwortlichen erforderlich. Eine Weitergabe dieser Daten an Dritte erfolgt grundsätzlich nicht, sofern keine gesetzliche Pflicht zur Weitergabe besteht oder die Weitergabe der Strafverfolgung dient.</p>
|
||||
|
||||
<p>Die Registrierung der betroffenen Person unter freiwilliger Angabe personenbezogener Daten dient dem für die Verarbeitung Verantwortlichen dazu, der betroffenen Person Inhalte oder Leistungen anzubieten, die aufgrund der Natur der Sache nur registrierten Benutzern angeboten werden können. Registrierten Personen steht die Möglichkeit frei, die bei der Registrierung angegebenen personenbezogenen Daten jederzeit abzuändern oder vollständig aus dem Datenbestand des für die Verarbeitung Verantwortlichen löschen zu lassen.</p>
|
||||
|
||||
<p>Der für die Verarbeitung Verantwortliche erteilt jeder betroffenen Person jederzeit auf Anfrage Auskunft darüber, welche personenbezogenen Daten über die betroffene Person gespeichert sind. Ferner berichtigt oder löscht der für die Verarbeitung Verantwortliche personenbezogene Daten auf Wunsch oder Hinweis der betroffenen Person, soweit dem keine gesetzlichen Aufbewahrungspflichten entgegenstehen. Die Gesamtheit der Mitarbeiter des für die Verarbeitung Verantwortlichen stehen der betroffenen Person in diesem Zusammenhang als Ansprechpartner zur Verfügung.</p>
|
||||
|
||||
<h4>5. Routinemäßige Löschung und Sperrung von personenbezogenen Daten</h4>
|
||||
<p>Der für die Verarbeitung Verantwortliche verarbeitet und speichert personenbezogene Daten der betroffenen Person nur für den Zeitraum, der zur Erreichung des Speicherungszwecks erforderlich ist oder sofern dies durch den Europäischen Richtlinien- und Verordnungsgeber oder einen anderen Gesetzgeber in Gesetzen oder Vorschriften, welchen der für die Verarbeitung Verantwortliche unterliegt, vorgesehen wurde.</p>
|
||||
|
||||
<p>Entfällt der Speicherungszweck oder läuft eine vom Europäischen Richtlinien- und Verordnungsgeber oder einem anderen zuständigen Gesetzgeber vorgeschriebene Speicherfrist ab, werden die personenbezogenen Daten routinemäßig und entsprechend den gesetzlichen Vorschriften gesperrt oder gelöscht.</p>
|
||||
|
||||
<h4>6. Rechte der betroffenen Person</h4>
|
||||
<ul style="list-style: none;">
|
||||
<li><h4>a) Recht auf Bestätigung</h4>
|
||||
<p>Jede betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber eingeräumte Recht, von dem für die Verarbeitung Verantwortlichen eine Bestätigung darüber zu verlangen, ob sie betreffende personenbezogene Daten verarbeitet werden. Möchte eine betroffene Person dieses Bestätigungsrecht in Anspruch nehmen, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden.</p>
|
||||
</li>
|
||||
<li><h4>b) Recht auf Auskunft</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, jederzeit von dem für die Verarbeitung Verantwortlichen unentgeltliche Auskunft über die zu seiner Person gespeicherten personenbezogenen Daten und eine Kopie dieser Auskunft zu erhalten. Ferner hat der Europäische Richtlinien- und Verordnungsgeber der betroffenen Person Auskunft über folgende Informationen zugestanden:</p>
|
||||
|
||||
<ul style="list-style: none;">
|
||||
<li>die Verarbeitungszwecke</li>
|
||||
<li>die Kategorien personenbezogener Daten, die verarbeitet werden</li>
|
||||
<li>die Empfänger oder Kategorien von Empfängern, gegenüber denen die personenbezogenen Daten offengelegt worden sind oder noch offengelegt werden, insbesondere bei Empfängern in Drittländern oder bei internationalen Organisationen</li>
|
||||
<li>falls möglich die geplante Dauer, für die die personenbezogenen Daten gespeichert werden, oder, falls dies nicht möglich ist, die Kriterien für die Festlegung dieser Dauer</li>
|
||||
<li>das Bestehen eines Rechts auf Berichtigung oder Löschung der sie betreffenden personenbezogenen Daten oder auf Einschränkung der Verarbeitung durch den Verantwortlichen oder eines Widerspruchsrechts gegen diese Verarbeitung</li>
|
||||
<li>das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde</li>
|
||||
<li>wenn die personenbezogenen Daten nicht bei der betroffenen Person erhoben werden: Alle verfügbaren Informationen über die Herkunft der Daten</li>
|
||||
<li>das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling gemäß Artikel 22 Abs.1 und 4 DS-GVO und — zumindest in diesen Fällen — aussagekräftige Informationen über die involvierte Logik sowie die Tragweite und die angestrebten Auswirkungen einer derartigen Verarbeitung für die betroffene Person</li>
|
||||
|
||||
</ul>
|
||||
<p>Ferner steht der betroffenen Person ein Auskunftsrecht darüber zu, ob personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt wurden. Sofern dies der Fall ist, so steht der betroffenen Person im Übrigen das Recht zu, Auskunft über die geeigneten Garantien im Zusammenhang mit der Übermittlung zu erhalten.</p>
|
||||
|
||||
<p>Möchte eine betroffene Person dieses Auskunftsrecht in Anspruch nehmen, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden.</p>
|
||||
</li>
|
||||
<li><h4>c) Recht auf Berichtigung</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, die unverzügliche Berichtigung sie betreffender unrichtiger personenbezogener Daten zu verlangen. Ferner steht der betroffenen Person das Recht zu, unter Berücksichtigung der Zwecke der Verarbeitung, die Vervollständigung unvollständiger personenbezogener Daten — auch mittels einer ergänzenden Erklärung — zu verlangen.</p>
|
||||
|
||||
<p>Möchte eine betroffene Person dieses Berichtigungsrecht in Anspruch nehmen, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden.</p></li>
|
||||
<li>
|
||||
<h4>d) Recht auf Löschung (Recht auf Vergessen werden)</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, von dem Verantwortlichen zu verlangen, dass die sie betreffenden personenbezogenen Daten unverzüglich gelöscht werden, sofern einer der folgenden Gründe zutrifft und soweit die Verarbeitung nicht erforderlich ist:</p>
|
||||
|
||||
<ul style="list-style: none;">
|
||||
<li>Die personenbezogenen Daten wurden für solche Zwecke erhoben oder auf sonstige Weise verarbeitet, für welche sie nicht mehr notwendig sind.</li>
|
||||
<li>Die betroffene Person widerruft ihre Einwilligung, auf die sich die Verarbeitung gemäß Art. 6 Abs. 1 Buchstabe a DS-GVO oder Art. 9 Abs. 2 Buchstabe a DS-GVO stützte, und es fehlt an einer anderweitigen Rechtsgrundlage für die Verarbeitung.</li>
|
||||
<li>Die betroffene Person legt gemäß Art. 21 Abs. 1 DS-GVO Widerspruch gegen die Verarbeitung ein, und es liegen keine vorrangigen berechtigten Gründe für die Verarbeitung vor, oder die betroffene Person legt gemäß Art. 21 Abs. 2 DS-GVO Widerspruch gegen die Verarbeitung ein.</li>
|
||||
<li>Die personenbezogenen Daten wurden unrechtmäßig verarbeitet.</li>
|
||||
<li>Die Löschung der personenbezogenen Daten ist zur Erfüllung einer rechtlichen Verpflichtung nach dem Unionsrecht oder dem Recht der Mitgliedstaaten erforderlich, dem der Verantwortliche unterliegt.</li>
|
||||
<li>Die personenbezogenen Daten wurden in Bezug auf angebotene Dienste der Informationsgesellschaft gemäß Art. 8 Abs. 1 DS-GVO erhoben.</li>
|
||||
|
||||
</ul>
|
||||
<p>Sofern einer der oben genannten Gründe zutrifft und eine betroffene Person die Löschung von personenbezogenen Daten, die bei der Urban Exploration Ltd gespeichert sind, veranlassen möchte, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden. Der Mitarbeiter der Urban Exploration Ltd wird veranlassen, dass dem Löschverlangen unverzüglich nachgekommen wird.</p>
|
||||
|
||||
<p>Wurden die personenbezogenen Daten von der Urban Exploration Ltd öffentlich gemacht und ist unser Unternehmen als Verantwortlicher gemäß Art. 17 Abs. 1 DS-GVO zur Löschung der personenbezogenen Daten verpflichtet, so trifft die Urban Exploration Ltd unter Berücksichtigung der verfügbaren Technologie und der Implementierungskosten angemessene Maßnahmen, auch technischer Art, um andere für die Datenverarbeitung Verantwortliche, welche die veröffentlichten personenbezogenen Daten verarbeiten, darüber in Kenntnis zu setzen, dass die betroffene Person von diesen anderen für die Datenverarbeitung Verantwortlichen die Löschung sämtlicher Links zu diesen personenbezogenen Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt hat, soweit die Verarbeitung nicht erforderlich ist. Der Mitarbeiter der Urban Exploration Ltd wird im Einzelfall das Notwendige veranlassen.</p>
|
||||
</li>
|
||||
<li><h4>e) Recht auf Einschränkung der Verarbeitung</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, von dem Verantwortlichen die Einschränkung der Verarbeitung zu verlangen, wenn eine der folgenden Voraussetzungen gegeben ist:</p>
|
||||
|
||||
<ul style="list-style: none;">
|
||||
<li>Die Richtigkeit der personenbezogenen Daten wird von der betroffenen Person bestritten, und zwar für eine Dauer, die es dem Verantwortlichen ermöglicht, die Richtigkeit der personenbezogenen Daten zu überprüfen.</li>
|
||||
<li>Die Verarbeitung ist unrechtmäßig, die betroffene Person lehnt die Löschung der personenbezogenen Daten ab und verlangt stattdessen die Einschränkung der Nutzung der personenbezogenen Daten.</li>
|
||||
<li>Der Verantwortliche benötigt die personenbezogenen Daten für die Zwecke der Verarbeitung nicht länger, die betroffene Person benötigt sie jedoch zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.</li>
|
||||
<li>Die betroffene Person hat Widerspruch gegen die Verarbeitung gem. Art. 21 Abs. 1 DS-GVO eingelegt und es steht noch nicht fest, ob die berechtigten Gründe des Verantwortlichen gegenüber denen der betroffenen Person überwiegen.</li>
|
||||
|
||||
</ul>
|
||||
<p>Sofern eine der oben genannten Voraussetzungen gegeben ist und eine betroffene Person die Einschränkung von personenbezogenen Daten, die bei der Urban Exploration Ltd gespeichert sind, verlangen möchte, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden. Der Mitarbeiter der Urban Exploration Ltd wird die Einschränkung der Verarbeitung veranlassen.</p>
|
||||
</li>
|
||||
<li><h4>f) Recht auf Datenübertragbarkeit</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, die sie betreffenden personenbezogenen Daten, welche durch die betroffene Person einem Verantwortlichen bereitgestellt wurden, in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten. Sie hat außerdem das Recht, diese Daten einem anderen Verantwortlichen ohne Behinderung durch den Verantwortlichen, dem die personenbezogenen Daten bereitgestellt wurden, zu übermitteln, sofern die Verarbeitung auf der Einwilligung gemäß Art. 6 Abs. 1 Buchstabe a DS-GVO oder Art. 9 Abs. 2 Buchstabe a DS-GVO oder auf einem Vertrag gemäß Art. 6 Abs. 1 Buchstabe b DS-GVO beruht und die Verarbeitung mithilfe automatisierter Verfahren erfolgt, sofern die Verarbeitung nicht für die Wahrnehmung einer Aufgabe erforderlich ist, die im öffentlichen Interesse liegt oder in Ausübung öffentlicher Gewalt erfolgt, welche dem Verantwortlichen übertragen wurde.</p>
|
||||
|
||||
<p>Ferner hat die betroffene Person bei der Ausübung ihres Rechts auf Datenübertragbarkeit gemäß Art. 20 Abs. 1 DS-GVO das Recht, zu erwirken, dass die personenbezogenen Daten direkt von einem Verantwortlichen an einen anderen Verantwortlichen übermittelt werden, soweit dies technisch machbar ist und sofern hiervon nicht die Rechte und Freiheiten anderer Personen beeinträchtigt werden.</p>
|
||||
|
||||
<p>Zur Geltendmachung des Rechts auf Datenübertragbarkeit kann sich die betroffene Person jederzeit an einen Mitarbeiter der Urban Exploration Ltd wenden.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
<h4>g) Recht auf Widerspruch</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung sie betreffender personenbezogener Daten, die aufgrund von Art. 6 Abs. 1 Buchstaben e oder f DS-GVO erfolgt, Widerspruch einzulegen. Dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling.</p>
|
||||
|
||||
<p>Die Urban Exploration Ltd verarbeitet die personenbezogenen Daten im Falle des Widerspruchs nicht mehr, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die den Interessen, Rechten und Freiheiten der betroffenen Person überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.</p>
|
||||
|
||||
<p>Verarbeitet die Urban Exploration Ltd personenbezogene Daten, um Direktwerbung zu betreiben, so hat die betroffene Person das Recht, jederzeit Widerspruch gegen die Verarbeitung der personenbezogenen Daten zum Zwecke derartiger Werbung einzulegen. Dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht. Widerspricht die betroffene Person gegenüber der Urban Exploration Ltd der Verarbeitung für Zwecke der Direktwerbung, so wird die Urban Exploration Ltd die personenbezogenen Daten nicht mehr für diese Zwecke verarbeiten.</p>
|
||||
|
||||
<p>Zudem hat die betroffene Person das Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, gegen die sie betreffende Verarbeitung personenbezogener Daten, die bei der Urban Exploration Ltd zu wissenschaftlichen oder historischen Forschungszwecken oder zu statistischen Zwecken gemäß Art. 89 Abs. 1 DS-GVO erfolgen, Widerspruch einzulegen, es sei denn, eine solche Verarbeitung ist zur Erfüllung einer im öffentlichen Interesse liegenden Aufgabe erforderlich.</p>
|
||||
|
||||
<p>Zur Ausübung des Rechts auf Widerspruch kann sich die betroffene Person direkt an jeden Mitarbeiter der Urban Exploration Ltd oder einen anderen Mitarbeiter wenden. Der betroffenen Person steht es ferner frei, im Zusammenhang mit der Nutzung von Diensten der Informationsgesellschaft, ungeachtet der Richtlinie 2002/58/EG, ihr Widerspruchsrecht mittels automatisierter Verfahren auszuüben, bei denen technische Spezifikationen verwendet werden.</p>
|
||||
</li>
|
||||
<li><h4>h) Automatisierte Entscheidungen im Einzelfall einschließlich Profiling</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung — einschließlich Profiling — beruhenden Entscheidung unterworfen zu werden, die ihr gegenüber rechtliche Wirkung entfaltet oder sie in ähnlicher Weise erheblich beeinträchtigt, sofern die Entscheidung (1) nicht für den Abschluss oder die Erfüllung eines Vertrags zwischen der betroffenen Person und dem Verantwortlichen erforderlich ist, oder (2) aufgrund von Rechtsvorschriften der Union oder der Mitgliedstaaten, denen der Verantwortliche unterliegt, zulässig ist und diese Rechtsvorschriften angemessene Maßnahmen zur Wahrung der Rechte und Freiheiten sowie der berechtigten Interessen der betroffenen Person enthalten oder (3) mit ausdrücklicher Einwilligung der betroffenen Person erfolgt.</p>
|
||||
|
||||
<p>Ist die Entscheidung (1) für den Abschluss oder die Erfüllung eines Vertrags zwischen der betroffenen Person und dem Verantwortlichen erforderlich oder (2) erfolgt sie mit ausdrücklicher Einwilligung der betroffenen Person, trifft die Urban Exploration Ltd angemessene Maßnahmen, um die Rechte und Freiheiten sowie die berechtigten Interessen der betroffenen Person zu wahren, wozu mindestens das Recht auf Erwirkung des Eingreifens einer Person seitens des Verantwortlichen, auf Darlegung des eigenen Standpunkts und auf Anfechtung der Entscheidung gehört.</p>
|
||||
|
||||
<p>Möchte die betroffene Person Rechte mit Bezug auf automatisierte Entscheidungen geltend machen, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden.</p>
|
||||
|
||||
</li>
|
||||
<li><h4>i) Recht auf Widerruf einer datenschutzrechtlichen Einwilligung</h4>
|
||||
<p>Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom Europäischen Richtlinien- und Verordnungsgeber gewährte Recht, eine Einwilligung zur Verarbeitung personenbezogener Daten jederzeit zu widerrufen.</p>
|
||||
|
||||
<p>Möchte die betroffene Person ihr Recht auf Widerruf einer Einwilligung geltend machen, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h4>7. Datenschutzbestimmungen zu Einsatz und Verwendung von Facebook</h4>
|
||||
<p>Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten des Unternehmens Facebook integriert. Facebook ist ein soziales Netzwerk.</p>
|
||||
|
||||
<p>Ein soziales Netzwerk ist ein im Internet betriebener sozialer Treffpunkt, eine Online-Gemeinschaft, die es den Nutzern in der Regel ermöglicht, untereinander zu kommunizieren und im virtuellen Raum zu interagieren. Ein soziales Netzwerk kann als Plattform zum Austausch von Meinungen und Erfahrungen dienen oder ermöglicht es der Internetgemeinschaft, persönliche oder unternehmensbezogene Informationen bereitzustellen. Facebook ermöglicht den Nutzern des sozialen Netzwerkes unter anderem die Erstellung von privaten Profilen, den Upload von Fotos und eine Vernetzung über Freundschaftsanfragen.</p>
|
||||
|
||||
<p>Betreibergesellschaft von Facebook ist die Facebook, Inc., 1 Hacker Way, Menlo Park, CA 94025, USA. Für die Verarbeitung personenbezogener Daten Verantwortlicher ist, wenn eine betroffene Person außerhalb der USA oder Kanada lebt, die Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland.</p>
|
||||
|
||||
<p>Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Facebook-Komponente (Facebook-Plug-In) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Facebook-Komponente veranlasst, eine Darstellung der entsprechenden Facebook-Komponente von Facebook herunterzuladen. Eine Gesamtübersicht über alle Facebook-Plug-Ins kann unter https://developers.facebook.com/docs/plugins/?locale=de_DE abgerufen werden. Im Rahmen dieses technischen Verfahrens erhält Facebook Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.</p>
|
||||
|
||||
<p>Sofern die betroffene Person gleichzeitig bei Facebook eingeloggt ist, erkennt Facebook mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch die Facebook-Komponente gesammelt und durch Facebook dem jeweiligen Facebook-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Facebook-Buttons, beispielsweise den „Gefällt mir“-Button, oder gibt die betroffene Person einen Kommentar ab, ordnet Facebook diese Information dem persönlichen Facebook-Benutzerkonto der betroffenen Person zu und speichert diese personenbezogenen Daten.</p>
|
||||
|
||||
<p>Facebook erhält über die Facebook-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Facebook eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Facebook-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Facebook von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Facebook-Account ausloggt.</p>
|
||||
|
||||
<p>Die von Facebook veröffentlichte Datenrichtlinie, die unter https://de-de.facebook.com/about/privacy/ abrufbar ist, gibt Aufschluss über die Erhebung, Verarbeitung und Nutzung personenbezogener Daten durch Facebook. Ferner wird dort erläutert, welche Einstellungsmöglichkeiten Facebook zum Schutz der Privatsphäre der betroffenen Person bietet. Zudem sind unterschiedliche Applikationen erhältlich, die es ermöglichen, eine Datenübermittlung an Facebook zu unterdrücken. Solche Applikationen können durch die betroffene Person genutzt werden, um eine Datenübermittlung an Facebook zu unterdrücken.</p>
|
||||
|
||||
<h4>8. Datenschutzbestimmungen zu Einsatz und Verwendung von Instagram</h4>
|
||||
<p>Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten des Dienstes Instagram integriert. Instagram ist ein Dienst, der als audiovisuelle Plattform zu qualifizieren ist und den Nutzern das Teilen von Fotos und Videos und zudem eine Weiterverbreitung solcher Daten in anderen sozialen Netzwerken ermöglicht.</p>
|
||||
|
||||
<p>Betreibergesellschaft der Dienste von Instagram ist die Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2 Ireland.</p>
|
||||
|
||||
<p>Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Instagram-Komponente (Insta-Button) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Instagram-Komponente veranlasst, eine Darstellung der entsprechenden Komponente von Instagram herunterzuladen. Im Rahmen dieses technischen Verfahrens erhält Instagram Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.</p>
|
||||
|
||||
<p>Sofern die betroffene Person gleichzeitig bei Instagram eingeloggt ist, erkennt Instagram mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite die betroffene Person besucht. Diese Informationen werden durch die Instagram-Komponente gesammelt und durch Instagram dem jeweiligen Instagram-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Instagram-Buttons, werden die damit übertragenen Daten und Informationen dem persönlichen Instagram-Benutzerkonto der betroffenen Person zugeordnet und von Instagram gespeichert und verarbeitet.</p>
|
||||
|
||||
<p>Instagram erhält über die Instagram-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Instagram eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Instagram-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Instagram von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Instagram-Account ausloggt.</p>
|
||||
|
||||
<p>Weitere Informationen und die geltenden Datenschutzbestimmungen von Instagram können unter https://help.instagram.com/155833707900388 und https://www.instagram.com/about/legal/privacy/ abgerufen werden.</p>
|
||||
|
||||
<h4>9. Datenschutzbestimmungen zu Einsatz und Verwendung von Twitter</h4>
|
||||
<p>Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten von Twitter integriert. Twitter ist ein multilingualer öffentlich zugänglicher Mikroblogging-Dienst, auf welchem die Nutzer sogenannte Tweets, also Kurznachrichten, die auf 280 Zeichen begrenzt sind, veröffentlichen und verbreiten können. Diese Kurznachrichten sind für jedermann, also auch für nicht bei Twitter angemeldete Personen abrufbar. Die Tweets werden aber auch den sogenannten Followern des jeweiligen Nutzers angezeigt. Follower sind andere Twitter-Nutzer, die den Tweets eines Nutzers folgen. Ferner ermöglicht Twitter über Hashtags, Verlinkungen oder Retweets die Ansprache eines breiten Publikums.</p>
|
||||
|
||||
<p>Betreibergesellschaft von Twitter International Company, One Cumberland Place, Fenian Street Dublin 2, D02 AX07, Ireland.</p>
|
||||
|
||||
<p>Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Twitter-Komponente (Twitter-Button) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Twitter-Komponente veranlasst, eine Darstellung der entsprechenden Twitter-Komponente von Twitter herunterzuladen. Weitere Informationen zu den Twitter-Buttons sind unter https://about.twitter.com/de/resources/buttons abrufbar. Im Rahmen dieses technischen Verfahrens erhält Twitter Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird. Zweck der Integration der Twitter-Komponente ist es, unseren Nutzern eine Weiterverbreitung der Inhalte diese Internetseite zu ermöglichen, diese Internetseite in der digitalen Welt bekannt zu machen und unsere Besucherzahlen zu erhöhen.</p>
|
||||
|
||||
<p>Sofern die betroffene Person gleichzeitig bei Twitter eingeloggt ist, erkennt Twitter mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch die Twitter-Komponente gesammelt und durch Twitter dem jeweiligen Twitter-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Twitter-Buttons, werden die damit übertragenen Daten und Informationen dem persönlichen Twitter-Benutzerkonto der betroffenen Person zugeordnet und von Twitter gespeichert und verarbeitet.</p>
|
||||
|
||||
<p>Twitter erhält über die Twitter-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Twitter eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Twitter-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Twitter von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Twitter-Account ausloggt.</p>
|
||||
|
||||
<p>Die geltenden Datenschutzbestimmungen von Twitter sind unter https://twitter.com/privacy?lang=de abrufbar.</p>
|
||||
|
||||
<h4>10. Datenschutzbestimmungen zu Einsatz und Verwendung von YouTube</h4>
|
||||
<p>Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten von YouTube integriert. YouTube ist ein Internet-Videoportal, dass Video-Publishern das kostenlose Einstellen von Videoclips und anderen Nutzern die ebenfalls kostenfreie Betrachtung, Bewertung und Kommentierung dieser ermöglicht. YouTube gestattet die Publikation aller Arten von Videos, weshalb sowohl komplette Film- und Fernsehsendungen, aber auch Musikvideos, Trailer oder von Nutzern selbst angefertigte Videos über das Internetportal abrufbar sind.</p>
|
||||
|
||||
<p>Betreibergesellschaft von YouTube ist die Google Ireland Limited, Gordon House, Barrow Street, Dublin, D04 E5W5, Ireland.</p>
|
||||
|
||||
<p>Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine YouTube-Komponente (YouTube-Video) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige YouTube-Komponente veranlasst, eine Darstellung der entsprechenden YouTube-Komponente von YouTube herunterzuladen. Weitere Informationen zu YouTube können unter https://www.youtube.com/yt/about/de/ abgerufen werden. Im Rahmen dieses technischen Verfahrens erhalten YouTube und Google Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.</p>
|
||||
|
||||
<p>Sofern die betroffene Person gleichzeitig bei YouTube eingeloggt ist, erkennt YouTube mit dem Aufruf einer Unterseite, die ein YouTube-Video enthält, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch YouTube und Google gesammelt und dem jeweiligen YouTube-Account der betroffenen Person zugeordnet.</p>
|
||||
|
||||
<p>YouTube und Google erhalten über die YouTube-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei YouTube eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person ein YouTube-Video anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an YouTube und Google von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem YouTube-Account ausloggt.</p>
|
||||
|
||||
<p>Die von YouTube veröffentlichten Datenschutzbestimmungen, die unter https://www.google.de/intl/de/policies/privacy/ abrufbar sind, geben Aufschluss über die Erhebung, Verarbeitung und Nutzung personenbezogener Daten durch YouTube und Google.</p>
|
||||
|
||||
<h4>11. Rechtsgrundlage der Verarbeitung</h4>
|
||||
<p>Art. 6 I lit. a DS-GVO dient unserem Unternehmen als Rechtsgrundlage für Verarbeitungsvorgänge, bei denen wir eine Einwilligung für einen bestimmten Verarbeitungszweck einholen. Ist die Verarbeitung personenbezogener Daten zur Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, erforderlich, wie dies beispielsweise bei Verarbeitungsvorgängen der Fall ist, die für eine Lieferung von Waren oder die Erbringung einer sonstigen Leistung oder Gegenleistung notwendig sind, so beruht die Verarbeitung auf Art. 6 I lit. b DS-GVO. Gleiches gilt für solche Verarbeitungsvorgänge die zur Durchführung vorvertraglicher Maßnahmen erforderlich sind, etwa in Fällen von Anfragen zur unseren Produkten oder Leistungen. Unterliegt unser Unternehmen einer rechtlichen Verpflichtung durch welche eine Verarbeitung von personenbezogenen Daten erforderlich wird, wie beispielsweise zur Erfüllung steuerlicher Pflichten, so basiert die Verarbeitung auf Art. 6 I lit. c DS-GVO. In seltenen Fällen könnte die Verarbeitung von personenbezogenen Daten erforderlich werden, um lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person zu schützen. Dies wäre beispielsweise der Fall, wenn ein Besucher in unserem Betrieb verletzt werden würde und daraufhin sein Name, sein Alter, seine Krankenkassendaten oder sonstige lebenswichtige Informationen an einen Arzt, ein Krankenhaus oder sonstige Dritte weitergegeben werden müssten. Dann würde die Verarbeitung auf Art. 6 I lit. d DS-GVO beruhen.
|
||||
Letztlich könnten Verarbeitungsvorgänge auf Art. 6 I lit. f DS-GVO beruhen. Auf dieser Rechtsgrundlage basieren Verarbeitungsvorgänge, die von keiner der vorgenannten Rechtsgrundlagen erfasst werden, wenn die Verarbeitung zur Wahrung eines berechtigten Interesses unseres Unternehmens oder eines Dritten erforderlich ist, sofern die Interessen, Grundrechte und Grundfreiheiten des Betroffenen nicht überwiegen. Solche Verarbeitungsvorgänge sind uns insbesondere deshalb gestattet, weil sie durch den Europäischen Gesetzgeber besonders erwähnt wurden. Er vertrat insoweit die Auffassung, dass ein berechtigtes Interesse anzunehmen sein könnte, wenn die betroffene Person ein Kunde des Verantwortlichen ist (Erwägungsgrund 47 Satz 2 DS-GVO).
|
||||
</p>
|
||||
|
||||
<h4>12. Berechtigte Interessen an der Verarbeitung, die von dem Verantwortlichen oder einem Dritten verfolgt werden</h4>
|
||||
<p>Basiert die Verarbeitung personenbezogener Daten auf Artikel 6 I lit. f DS-GVO ist unser berechtigtes Interesse die Durchführung unserer Geschäftstätigkeit zugunsten des Wohlergehens all unserer Mitarbeiter und unserer Anteilseigner.</p>
|
||||
|
||||
<h4>13. Dauer, für die die personenbezogenen Daten gespeichert werden</h4>
|
||||
<p>Das Kriterium für die Dauer der Speicherung von personenbezogenen Daten ist die jeweilige gesetzliche Aufbewahrungsfrist. Nach Ablauf der Frist werden die entsprechenden Daten routinemäßig gelöscht, sofern sie nicht mehr zur Vertragserfüllung oder Vertragsanbahnung erforderlich sind.</p>
|
||||
|
||||
<h4>14. Gesetzliche oder vertragliche Vorschriften zur Bereitstellung der personenbezogenen Daten; Erforderlichkeit für den Vertragsabschluss; Verpflichtung der betroffenen Person, die personenbezogenen Daten bereitzustellen; mögliche Folgen der Nichtbereitstellung</h4>
|
||||
<p>Wir klären Sie darüber auf, dass die Bereitstellung personenbezogener Daten zum Teil gesetzlich vorgeschrieben ist (z.B. Steuervorschriften) oder sich auch aus vertraglichen Regelungen (z.B. Angaben zum Vertragspartner) ergeben kann.
|
||||
Mitunter kann es zu einem Vertragsschluss erforderlich sein, dass eine betroffene Person uns personenbezogene Daten zur Verfügung stellt, die in der Folge durch uns verarbeitet werden müssen. Die betroffene Person ist beispielsweise verpflichtet uns personenbezogene Daten bereitzustellen, wenn unser Unternehmen mit ihr einen Vertrag abschließt. Eine Nichtbereitstellung der personenbezogenen Daten hätte zur Folge, dass der Vertrag mit dem Betroffenen nicht geschlossen werden könnte.
|
||||
Vor einer Bereitstellung personenbezogener Daten durch den Betroffenen muss sich der Betroffene an einen unserer Mitarbeiter wenden. Unser Mitarbeiter klärt den Betroffenen einzelfallbezogen darüber auf, ob die Bereitstellung der personenbezogenen Daten gesetzlich oder vertraglich vorgeschrieben oder für den Vertragsabschluss erforderlich ist, ob eine Verpflichtung besteht, die personenbezogenen Daten bereitzustellen, und welche Folgen die Nichtbereitstellung der personenbezogenen Daten hätte.
|
||||
</p>
|
||||
|
||||
<h4>15. Bestehen einer automatisierten Entscheidungsfindung</h4>
|
||||
<p>Als verantwortungsbewusstes Unternehmen verzichten wir auf eine automatische Entscheidungsfindung oder ein Profiling.</p>
|
||||
|
||||
<p>Diese Datenschutzerklärung wurde durch den <a href="https://dsgvo-muster-datenschutzerklaerung.dg-datenschutz.de/">Datenschutzerklärungs-Generator</a> der Deutschen Gesellschaft für Datenschutz, in Kooperation mit den <a href="https://www.wbs-law.de/taetigkeitsgebiete/medienrecht/">Medienrecht</a> Anwälten WILDE BEUGER SOLMECKE | Rechtsanwälte erstellt.
|
||||
</p>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,266 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
# {% block title %}Privacy policy{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
<header class="LP-TextSection__Headline">
|
||||
<h1 class="LP-Headline">Privacy policy</h1>
|
||||
</header>
|
||||
|
||||
<article class="LP-TextSection LP-TextSection__Text">
|
||||
<p>We are very delighted that you have shown interest in our enterprise. Data protection is of a particularly high priority for the management of the Urban Exploration Ltd. The use of the Internet pages of the Urban Exploration Ltd is possible without any indication of personal data; however, if a data subject wants to use special enterprise services via our website, processing of personal data could become necessary. If the processing of personal data is necessary and there is no statutory basis for such processing, we generally obtain consent from the data subject.</p>
|
||||
|
||||
<p>The processing of personal data, such as the name, address, e-mail address, or telephone number of a data subject shall always be in line with the General Data Protection Regulation (GDPR), and in accordance with the country-specific data protection regulations applicable to the Urban Exploration Ltd. By means of this data protection declaration, our enterprise would like to inform the general public of the nature, scope, and purpose of the personal data we collect, use and process. Furthermore, data subjects are informed, by means of this data protection declaration, of the rights to which they are entitled.</p>
|
||||
|
||||
<p>As the controller, the Urban Exploration Ltd has implemented numerous technical and organizational measures to ensure the most complete protection of personal data processed through this website. However, Internet-based data transmissions may in principle have security gaps, so absolute protection may not be guaranteed. For this reason, every data subject is free to transfer personal data to us via alternative means, e.g. by telephone. </p>
|
||||
|
||||
<h4>1. Definitions</h4>
|
||||
<p>The data protection declaration of the Urban Exploration Ltd is based on the terms used by the European legislator for the adoption of the General Data Protection Regulation (GDPR). Our data protection declaration should be legible and understandable for the general public, as well as our customers and business partners. To ensure this, we would like to first explain the terminology used.</p>
|
||||
|
||||
<p>In this data protection declaration, we use, inter alia, the following terms:</p>
|
||||
|
||||
<ul style="list-style: none">
|
||||
<li><h4>a) Personal data</h4>
|
||||
<p>Personal data means any information relating to an identified or identifiable natural person (“data subject”). An identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person.</p>
|
||||
</li>
|
||||
<li><h4>b) Data subject</h4>
|
||||
<p>Data subject is any identified or identifiable natural person, whose personal data is processed by the controller responsible for the processing.</p>
|
||||
</li>
|
||||
<li><h4>c) Processing</h4>
|
||||
<p>Processing is any operation or set of operations which is performed on personal data or on sets of personal data, whether or not by automated means, such as collection, recording, organisation, structuring, storage, adaptation or alteration, retrieval, consultation, use, disclosure by transmission, dissemination or otherwise making available, alignment or combination, restriction, erasure or destruction. </p>
|
||||
</li>
|
||||
<li><h4>d) Restriction of processing</h4>
|
||||
<p>Restriction of processing is the marking of stored personal data with the aim of limiting their processing in the future. </p>
|
||||
</li>
|
||||
<li><h4>e) Profiling</h4>
|
||||
<p>Profiling means any form of automated processing of personal data consisting of the use of personal data to evaluate certain personal aspects relating to a natural person, in particular to analyse or predict aspects concerning that natural person's performance at work, economic situation, health, personal preferences, interests, reliability, behaviour, location or movements. </p>
|
||||
</li>
|
||||
<li><h4>f) Pseudonymisation</h4>
|
||||
<p>Pseudonymisation is the processing of personal data in such a manner that the personal data can no longer be attributed to a specific data subject without the use of additional information, provided that such additional information is kept separately and is subject to technical and organisational measures to ensure that the personal data are not attributed to an identified or identifiable natural person. </p>
|
||||
</li>
|
||||
<li><h4>g) Controller or controller responsible for the processing</h4>
|
||||
<p>Controller or controller responsible for the processing is the natural or legal person, public authority, agency or other body which, alone or jointly with others, determines the purposes and means of the processing of personal data; where the purposes and means of such processing are determined by Union or Member State law, the controller or the specific criteria for its nomination may be provided for by Union or Member State law. </p>
|
||||
</li>
|
||||
<li><h4>h) Processor</h4>
|
||||
<p>Processor is a natural or legal person, public authority, agency or other body which processes personal data on behalf of the controller. </p>
|
||||
</li>
|
||||
<li><h4>i) Recipient</h4>
|
||||
<p>Recipient is a natural or legal person, public authority, agency or another body, to which the personal data are disclosed, whether a third party or not. However, public authorities which may receive personal data in the framework of a particular inquiry in accordance with Union or Member State law shall not be regarded as recipients; the processing of those data by those public authorities shall be in compliance with the applicable data protection rules according to the purposes of the processing. </p>
|
||||
</li>
|
||||
<li><h4>j) Third party</h4>
|
||||
<p>Third party is a natural or legal person, public authority, agency or body other than the data subject, controller, processor and persons who, under the direct authority of the controller or processor, are authorised to process personal data.</p>
|
||||
</li>
|
||||
<li><h4>k) Consent</h4>
|
||||
<p>Consent of the data subject is any freely given, specific, informed and unambiguous indication of the data subject's wishes by which he or she, by a statement or by a clear affirmative action, signifies agreement to the processing of personal data relating to him or her. </p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>2. Name and Address of the controller</h4>
|
||||
<p>Controller for the purposes of the General Data Protection Regulation (GDPR), other data protection laws applicable in Member states of the European Union and other provisions related to data protection is:
|
||||
|
||||
</p>
|
||||
|
||||
<p>Urban Exploration Ltd</p>
|
||||
<p>2563 College Avenue</p>
|
||||
<p>45402 Dayton</p>
|
||||
<p>OH</p>
|
||||
<p>Phone: 937-387-6498</p>
|
||||
<p>Email: JohnSSmith@einrot.com</p>
|
||||
<p>Website: https://www.urban-exploration.com</p>
|
||||
|
||||
<h4>3. Collection of general data and information</h4>
|
||||
<p>The website of the Urban Exploration Ltd collects a series of general data and information when a data subject or automated system calls up the website. This general data and information are stored in the server log files. Collected may be (1) the browser types and versions used, (2) the operating system used by the accessing system, (3) the website from which an accessing system reaches our website (so-called referrers), (4) the sub-websites, (5) the date and time of access to the Internet site, (6) an Internet protocol address (IP address), (7) the Internet service provider of the accessing system, and (8) any other similar data and information that may be used in the event of attacks on our information technology systems.</p>
|
||||
|
||||
<p>When using these general data and information, the Urban Exploration Ltd does not draw any conclusions about the data subject. Rather, this information is needed to (1) deliver the content of our website correctly, (2) optimize the content of our website as well as its advertisement, (3) ensure the long-term viability of our information technology systems and website technology, and (4) provide law enforcement authorities with the information necessary for criminal prosecution in case of a cyber-attack. Therefore, the Urban Exploration Ltd analyzes anonymously collected data and information statistically, with the aim of increasing the data protection and data security of our enterprise, and to ensure an optimal level of protection for the personal data we process. The anonymous data of the server log files are stored separately from all personal data provided by a data subject.</p>
|
||||
|
||||
<h4>4. Registration on our website</h4>
|
||||
<p>The data subject has the possibility to register on the website of the controller with the indication of personal data. Which personal data are transmitted to the controller is determined by the respective input mask used for the registration. The personal data entered by the data subject are collected and stored exclusively for internal use by the controller, and for his own purposes. The controller may request transfer to one or more processors (e.g. a parcel service) that also uses personal data for an internal purpose which is attributable to the controller.</p>
|
||||
|
||||
<p>By registering on the website of the controller, the IP address—assigned by the Internet service provider (ISP) and used by the data subject—date, and time of the registration are also stored. The storage of this data takes place against the background that this is the only way to prevent the misuse of our services, and, if necessary, to make it possible to investigate committed offenses. Insofar, the storage of this data is necessary to secure the controller. This data is not passed on to third parties unless there is a statutory obligation to pass on the data, or if the transfer serves the aim of criminal prosecution.
|
||||
|
||||
</p>
|
||||
|
||||
<p>The registration of the data subject, with the voluntary indication of personal data, is intended to enable the controller to offer the data subject contents or services that may only be offered to registered users due to the nature of the matter in question. Registered persons are free to change the personal data specified during the registration at any time, or to have them completely deleted from the data stock of the controller.</p>
|
||||
|
||||
<p>The data controller shall, at any time, provide information upon request to each data subject as to what personal data are stored about the data subject. In addition, the data controller shall correct or erase personal data at the request or indication of the data subject, insofar as there are no statutory storage obligations. The entirety of the controller’s employees are available to the data subject in this respect as contact persons.</p>
|
||||
|
||||
<h4>5. Routine erasure and blocking of personal data</h4>
|
||||
<p>The data controller shall process and store the personal data of the data subject only for the period necessary to achieve the purpose of storage, or as far as this is granted by the European legislator or other legislators in laws or regulations to which the controller is subject to.</p>
|
||||
|
||||
<p>If the storage purpose is not applicable, or if a storage period prescribed by the European legislator or another competent legislator expires, the personal data are routinely blocked or erased in accordance with legal requirements.</p>
|
||||
|
||||
<h4>6. Rights of the data subject</h4>
|
||||
<ul style="list-style: none;">
|
||||
<li><h4>a) Right of confirmation</h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to obtain from the controller the confirmation as to whether or not personal data concerning him or her are being processed. If a data subject wishes to avail himself of this right of confirmation, he or she may, at any time, contact any employee of the controller.</p>
|
||||
</li>
|
||||
<li><h4>b) Right of access</h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to obtain from the controller free information about his or her personal data stored at any time and a copy of this information. Furthermore, the European directives and regulations grant the data subject access to the following information:</p>
|
||||
|
||||
<ul style="list-style: none;">
|
||||
<li>the purposes of the processing;</li>
|
||||
<li>the categories of personal data concerned;</li>
|
||||
<li>the recipients or categories of recipients to whom the personal data have been or will be disclosed, in particular recipients in third countries or international organisations;</li>
|
||||
<li>where possible, the envisaged period for which the personal data will be stored, or, if not possible, the criteria used to determine that period;</li>
|
||||
<li>the existence of the right to request from the controller rectification or erasure of personal data, or restriction of processing of personal data concerning the data subject, or to object to such processing;</li>
|
||||
<li>the existence of the right to lodge a complaint with a supervisory authority;</li>
|
||||
<li>where the personal data are not collected from the data subject, any available information as to their source;</li>
|
||||
<li>the existence of automated decision-making, including profiling, referred to in Article 22(1) and (4) of the GDPR and, at least in those cases, meaningful information about the logic involved, as well as the significance and envisaged consequences of such processing for the data subject.</li>
|
||||
|
||||
</ul>
|
||||
<p>Furthermore, the data subject shall have a right to obtain information as to whether personal data are transferred to a third country or to an international organisation. Where this is the case, the data subject shall have the right to be informed of the appropriate safeguards relating to the transfer.</p>
|
||||
|
||||
<p>If a data subject wishes to avail himself of this right of access, he or she may, at any time, contact any employee of the controller.</p>
|
||||
</li>
|
||||
<li><h4>c) Right to rectification </h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to obtain from the controller without undue delay the rectification of inaccurate personal data concerning him or her. Taking into account the purposes of the processing, the data subject shall have the right to have incomplete personal data completed, including by means of providing a supplementary statement.</p>
|
||||
|
||||
<p>If a data subject wishes to exercise this right to rectification, he or she may, at any time, contact any employee of the controller.</p></li>
|
||||
<li>
|
||||
<h4>d) Right to erasure (Right to be forgotten) </h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to obtain from the controller the erasure of personal data concerning him or her without undue delay, and the controller shall have the obligation to erase personal data without undue delay where one of the following grounds applies, as long as the processing is not necessary: </p>
|
||||
|
||||
<ul style="list-style: none;">
|
||||
<li>The personal data are no longer necessary in relation to the purposes for which they were collected or otherwise processed.</li>
|
||||
<li>The data subject withdraws consent to which the processing is based according to point (a) of Article 6(1) of the GDPR, or point (a) of Article 9(2) of the GDPR, and where there is no other legal ground for the processing.</li>
|
||||
<li>The data subject objects to the processing pursuant to Article 21(1) of the GDPR and there are no overriding legitimate grounds for the processing, or the data subject objects to the processing pursuant to Article 21(2) of the GDPR. </li>
|
||||
<li>The personal data have been unlawfully processed.</li>
|
||||
<li>The personal data must be erased for compliance with a legal obligation in Union or Member State law to which the controller is subject.</li>
|
||||
<li>The personal data have been collected in relation to the offer of information society services referred to in Article 8(1) of the GDPR.</li>
|
||||
|
||||
</ul>
|
||||
<p>If one of the aforementioned reasons applies, and a data subject wishes to request the erasure of personal data stored by the Urban Exploration Ltd, he or she may, at any time, contact any employee of the controller. An employee of Urban Exploration Ltd shall promptly ensure that the erasure request is complied with immediately.</p>
|
||||
|
||||
<p>Where the controller has made personal data public and is obliged pursuant to Article 17(1) to erase the personal data, the controller, taking account of available technology and the cost of implementation, shall take reasonable steps, including technical measures, to inform other controllers processing the personal data that the data subject has requested erasure by such controllers of any links to, or copy or replication of, those personal data, as far as processing is not required. An employees of the Urban Exploration Ltd will arrange the necessary measures in individual cases.</p>
|
||||
</li>
|
||||
<li><h4>e) Right of restriction of processing</h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to obtain from the controller restriction of processing where one of the following applies:</p>
|
||||
|
||||
<ul style="list-style: none;">
|
||||
<li>The accuracy of the personal data is contested by the data subject, for a period enabling the controller to verify the accuracy of the personal data. </li>
|
||||
<li>The processing is unlawful and the data subject opposes the erasure of the personal data and requests instead the restriction of their use instead.</li>
|
||||
<li>The controller no longer needs the personal data for the purposes of the processing, but they are required by the data subject for the establishment, exercise or defence of legal claims.</li>
|
||||
<li>The data subject has objected to processing pursuant to Article 21(1) of the GDPR pending the verification whether the legitimate grounds of the controller override those of the data subject.</li>
|
||||
|
||||
</ul>
|
||||
<p>If one of the aforementioned conditions is met, and a data subject wishes to request the restriction of the processing of personal data stored by the Urban Exploration Ltd, he or she may at any time contact any employee of the controller. The employee of the Urban Exploration Ltd will arrange the restriction of the processing. </p>
|
||||
</li>
|
||||
<li><h4>f) Right to data portability</h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator, to receive the personal data concerning him or her, which was provided to a controller, in a structured, commonly used and machine-readable format. He or she shall have the right to transmit those data to another controller without hindrance from the controller to which the personal data have been provided, as long as the processing is based on consent pursuant to point (a) of Article 6(1) of the GDPR or point (a) of Article 9(2) of the GDPR, or on a contract pursuant to point (b) of Article 6(1) of the GDPR, and the processing is carried out by automated means, as long as the processing is not necessary for the performance of a task carried out in the public interest or in the exercise of official authority vested in the controller.</p>
|
||||
|
||||
<p>Furthermore, in exercising his or her right to data portability pursuant to Article 20(1) of the GDPR, the data subject shall have the right to have personal data transmitted directly from one controller to another, where technically feasible and when doing so does not adversely affect the rights and freedoms of others.</p>
|
||||
|
||||
<p>In order to assert the right to data portability, the data subject may at any time contact any employee of the Urban Exploration Ltd.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
<h4>g) Right to object</h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to object, on grounds relating to his or her particular situation, at any time, to processing of personal data concerning him or her, which is based on point (e) or (f) of Article 6(1) of the GDPR. This also applies to profiling based on these provisions.</p>
|
||||
|
||||
<p>The Urban Exploration Ltd shall no longer process the personal data in the event of the objection, unless we can demonstrate compelling legitimate grounds for the processing which override the interests, rights and freedoms of the data subject, or for the establishment, exercise or defence of legal claims.</p>
|
||||
|
||||
<p>If the Urban Exploration Ltd processes personal data for direct marketing purposes, the data subject shall have the right to object at any time to processing of personal data concerning him or her for such marketing. This applies to profiling to the extent that it is related to such direct marketing. If the data subject objects to the Urban Exploration Ltd to the processing for direct marketing purposes, the Urban Exploration Ltd will no longer process the personal data for these purposes.</p>
|
||||
|
||||
<p>In addition, the data subject has the right, on grounds relating to his or her particular situation, to object to processing of personal data concerning him or her by the Urban Exploration Ltd for scientific or historical research purposes, or for statistical purposes pursuant to Article 89(1) of the GDPR, unless the processing is necessary for the performance of a task carried out for reasons of public interest.</p>
|
||||
|
||||
<p>In order to exercise the right to object, the data subject may contact any employee of the Urban Exploration Ltd. In addition, the data subject is free in the context of the use of information society services, and notwithstanding Directive 2002/58/EC, to use his or her right to object by automated means using technical specifications.</p>
|
||||
</li>
|
||||
<li><h4>h) Automated individual decision-making, including profiling</h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator not to be subject to a decision based solely on automated processing, including profiling, which produces legal effects concerning him or her, or similarly significantly affects him or her, as long as the decision (1) is not is necessary for entering into, or the performance of, a contract between the data subject and a data controller, or (2) is not authorised by Union or Member State law to which the controller is subject and which also lays down suitable measures to safeguard the data subject's rights and freedoms and legitimate interests, or (3) is not based on the data subject's explicit consent.</p>
|
||||
|
||||
<p>If the decision (1) is necessary for entering into, or the performance of, a contract between the data subject and a data controller, or (2) it is based on the data subject's explicit consent, the Urban Exploration Ltd shall implement suitable measures to safeguard the data subject's rights and freedoms and legitimate interests, at least the right to obtain human intervention on the part of the controller, to express his or her point of view and contest the decision.</p>
|
||||
|
||||
<p>If the data subject wishes to exercise the rights concerning automated individual decision-making, he or she may, at any time, contact any employee of the Urban Exploration Ltd.</p>
|
||||
|
||||
</li>
|
||||
<li><h4>i) Right to withdraw data protection consent </h4>
|
||||
<p>Each data subject shall have the right granted by the European legislator to withdraw his or her consent to processing of his or her personal data at any time. </p>
|
||||
|
||||
<p>If the data subject wishes to exercise the right to withdraw the consent, he or she may, at any time, contact any employee of the Urban Exploration Ltd.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h4>7. Data protection provisions about the application and use of Facebook</h4>
|
||||
<p>On this website, the controller has integrated components of the enterprise Facebook. Facebook is a social network.</p>
|
||||
|
||||
<p>A social network is a place for social meetings on the Internet, an online community, which usually allows users to communicate with each other and interact in a virtual space. A social network may serve as a platform for the exchange of opinions and experiences, or enable the Internet community to provide personal or business-related information. Facebook allows social network users to include the creation of private profiles, upload photos, and network through friend requests.</p>
|
||||
|
||||
<p>The operating company of Facebook is Facebook, Inc., 1 Hacker Way, Menlo Park, CA 94025, United States. If a person lives outside of the United States or Canada, the controller is the Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland.</p>
|
||||
|
||||
<p>With each call-up to one of the individual pages of this Internet website, which is operated by the controller and into which a Facebook component (Facebook plug-ins) was integrated, the web browser on the information technology system of the data subject is automatically prompted to download display of the corresponding Facebook component from Facebook through the Facebook component. An overview of all the Facebook Plug-ins may be accessed under https://developers.facebook.com/docs/plugins/. During the course of this technical procedure, Facebook is made aware of what specific sub-site of our website was visited by the data subject.</p>
|
||||
|
||||
<p>If the data subject is logged in at the same time on Facebook, Facebook detects with every call-up to our website by the data subject—and for the entire duration of their stay on our Internet site—which specific sub-site of our Internet page was visited by the data subject. This information is collected through the Facebook component and associated with the respective Facebook account of the data subject. If the data subject clicks on one of the Facebook buttons integrated into our website, e.g. the "Like" button, or if the data subject submits a comment, then Facebook matches this information with the personal Facebook user account of the data subject and stores the personal data.</p>
|
||||
|
||||
<p>Facebook always receives, through the Facebook component, information about a visit to our website by the data subject, whenever the data subject is logged in at the same time on Facebook during the time of the call-up to our website. This occurs regardless of whether the data subject clicks on the Facebook component or not. If such a transmission of information to Facebook is not desirable for the data subject, then he or she may prevent this by logging off from their Facebook account before a call-up to our website is made.</p>
|
||||
|
||||
<p>The data protection guideline published by Facebook, which is available at https://facebook.com/about/privacy/, provides information about the collection, processing and use of personal data by Facebook. In addition, it is explained there what setting options Facebook offers to protect the privacy of the data subject. In addition, different configuration options are made available to allow the elimination of data transmission to Facebook. These applications may be used by the data subject to eliminate a data transmission to Facebook.</p>
|
||||
|
||||
<h4>8. Data protection provisions about the application and use of Instagram</h4>
|
||||
<p>On this website, the controller has integrated components of the service Instagram. Instagram is a service that may be qualified as an audiovisual platform, which allows users to share photos and videos, as well as disseminate such data in other social networks.</p>
|
||||
|
||||
<p>The operating company of the services offered by Instagram is Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2 Ireland.</p>
|
||||
|
||||
<p>With each call-up to one of the individual pages of this Internet site, which is operated by the controller and on which an Instagram component (Insta button) was integrated, the Internet browser on the information technology system of the data subject is automatically prompted to the download of a display of the corresponding Instagram component of Instagram. During the course of this technical procedure, Instagram becomes aware of what specific sub-page of our website was visited by the data subject.</p>
|
||||
|
||||
<p>If the data subject is logged in at the same time on Instagram, Instagram detects with every call-up to our website by the data subject—and for the entire duration of their stay on our Internet site—which specific sub-page of our Internet page was visited by the data subject. This information is collected through the Instagram component and is associated with the respective Instagram account of the data subject. If the data subject clicks on one of the Instagram buttons integrated on our website, then Instagram matches this information with the personal Instagram user account of the data subject and stores the personal data.</p>
|
||||
|
||||
<p>Instagram receives information via the Instagram component that the data subject has visited our website provided that the data subject is logged in at Instagram at the time of the call to our website. This occurs regardless of whether the person clicks on the Instagram button or not. If such a transmission of information to Instagram is not desirable for the data subject, then he or she can prevent this by logging off from their Instagram account before a call-up to our website is made.</p>
|
||||
|
||||
<p>Further information and the applicable data protection provisions of Instagram may be retrieved under https://help.instagram.com/155833707900388 and https://www.instagram.com/about/legal/privacy/.</p>
|
||||
|
||||
<h4>9. Data protection provisions about the application and use of Twitter</h4>
|
||||
<p>On this website, the controller has integrated components of Twitter. Twitter is a multilingual, publicly-accessible microblogging service on which users may publish and spread so-called ‘tweets,’ e.g. short messages, which are limited to 280 characters. These short messages are available for everyone, including those who are not logged on to Twitter. The tweets are also displayed to so-called followers of the respective user. Followers are other Twitter users who follow a user's tweets. Furthermore, Twitter allows you to address a wide audience via hashtags, links or retweets.</p>
|
||||
|
||||
<p>The operating company of Twitter is Twitter International Company, One Cumberland Place, Fenian Street Dublin 2, D02 AX07, Ireland.</p>
|
||||
|
||||
<p>With each call-up to one of the individual pages of this Internet site, which is operated by the controller and on which a Twitter component (Twitter button) was integrated, the Internet browser on the information technology system of the data subject is automatically prompted to download a display of the corresponding Twitter component of Twitter. Further information about the Twitter buttons is available under https://about.twitter.com/de/resources/buttons. During the course of this technical procedure, Twitter gains knowledge of what specific sub-page of our website was visited by the data subject. The purpose of the integration of the Twitter component is a retransmission of the contents of this website to allow our users to introduce this web page to the digital world and increase our visitor numbers.</p>
|
||||
|
||||
<p>If the data subject is logged in at the same time on Twitter, Twitter detects with every call-up to our website by the data subject and for the entire duration of their stay on our Internet site which specific sub-page of our Internet page was visited by the data subject. This information is collected through the Twitter component and associated with the respective Twitter account of the data subject. If the data subject clicks on one of the Twitter buttons integrated on our website, then Twitter assigns this information to the personal Twitter user account of the data subject and stores the personal data.</p>
|
||||
|
||||
<p>Twitter receives information via the Twitter component that the data subject has visited our website, provided that the data subject is logged in on Twitter at the time of the call-up to our website. This occurs regardless of whether the person clicks on the Twitter component or not. If such a transmission of information to Twitter is not desirable for the data subject, then he or she may prevent this by logging off from their Twitter account before a call-up to our website is made.</p>
|
||||
|
||||
<p>The applicable data protection provisions of Twitter may be accessed under https://twitter.com/privacy?lang=en.</p>
|
||||
|
||||
<h4>10. Data protection provisions about the application and use of YouTube</h4>
|
||||
<p>On this website, the controller has integrated components of YouTube. YouTube is an Internet video portal that enables video publishers to set video clips and other users free of charge, which also provides free viewing, review and commenting on them. YouTube allows you to publish all kinds of videos, so you can access both full movies and TV broadcasts, as well as music videos, trailers, and videos made by users via the Internet portal.
|
||||
</p>
|
||||
|
||||
<p>The operating company of YouTube is Google Ireland Limited, Gordon House, Barrow Street, Dublin, D04 E5W5, Ireland.</p>
|
||||
|
||||
<p>With each call-up to one of the individual pages of this Internet site, which is operated by the controller and on which a YouTube component (YouTube video) was integrated, the Internet browser on the information technology system of the data subject is automatically prompted to download a display of the corresponding YouTube component. Further information about YouTube may be obtained under https://www.youtube.com/yt/about/en/. During the course of this technical procedure, YouTube and Google gain knowledge of what specific sub-page of our website was visited by the data subject.</p>
|
||||
|
||||
<p>If the data subject is logged in on YouTube, YouTube recognizes with each call-up to a sub-page that contains a YouTube video, which specific sub-page of our Internet site was visited by the data subject. This information is collected by YouTube and Google and assigned to the respective YouTube account of the data subject.</p>
|
||||
|
||||
<p>YouTube and Google will receive information through the YouTube component that the data subject has visited our website, if the data subject at the time of the call to our website is logged in on YouTube; this occurs regardless of whether the person clicks on a YouTube video or not. If such a transmission of this information to YouTube and Google is not desirable for the data subject, the delivery may be prevented if the data subject logs off from their own YouTube account before a call-up to our website is made.</p>
|
||||
|
||||
<p>YouTube's data protection provisions, available at https://www.google.com/intl/en/policies/privacy/, provide information about the collection, processing and use of personal data by YouTube and Google.</p>
|
||||
|
||||
<h4>11. Legal basis for the processing </h4>
|
||||
<p>Art. 6(1) lit. a GDPR serves as the legal basis for processing operations for which we obtain consent for a specific processing purpose. If the processing of personal data is necessary for the performance of a contract to which the data subject is party, as is the case, for example, when processing operations are necessary for the supply of goods or to provide any other service, the processing is based on Article 6(1) lit. b GDPR. The same applies to such processing operations which are necessary for carrying out pre-contractual measures, for example in the case of inquiries concerning our products or services. Is our company subject to a legal obligation by which processing of personal data is required, such as for the fulfillment of tax obligations, the processing is based on Art. 6(1) lit. c GDPR.
|
||||
In rare cases, the processing of personal data may be necessary to protect the vital interests of the data subject or of another natural person. This would be the case, for example, if a visitor were injured in our company and his name, age, health insurance data or other vital information would have to be passed on to a doctor, hospital or other third party. Then the processing would be based on Art. 6(1) lit. d GDPR.
|
||||
Finally, processing operations could be based on Article 6(1) lit. f GDPR. This legal basis is used for processing operations which are not covered by any of the abovementioned legal grounds, if processing is necessary for the purposes of the legitimate interests pursued by our company or by a third party, except where such interests are overridden by the interests or fundamental rights and freedoms of the data subject which require protection of personal data. Such processing operations are particularly permissible because they have been specifically mentioned by the European legislator. He considered that a legitimate interest could be assumed if the data subject is a client of the controller (Recital 47 Sentence 2 GDPR).
|
||||
</p>
|
||||
|
||||
<h4>12. The legitimate interests pursued by the controller or by a third party</h4>
|
||||
<p>Where the processing of personal data is based on Article 6(1) lit. f GDPR our legitimate interest is to carry out our business in favor of the well-being of all our employees and the shareholders.</p>
|
||||
|
||||
<h4>13. Period for which the personal data will be stored</h4>
|
||||
<p>The criteria used to determine the period of storage of personal data is the respective statutory retention period. After expiration of that period, the corresponding data is routinely deleted, as long as it is no longer necessary for the fulfillment of the contract or the initiation of a contract.</p>
|
||||
|
||||
<h4>14. Provision of personal data as statutory or contractual requirement; Requirement necessary to enter into a contract; Obligation of the data subject to provide the personal data; possible consequences of failure to provide such data </h4>
|
||||
<p>We clarify that the provision of personal data is partly required by law (e.g. tax regulations) or can also result from contractual provisions (e.g. information on the contractual partner).
|
||||
|
||||
Sometimes it may be necessary to conclude a contract that the data subject provides us with personal data, which must subsequently be processed by us. The data subject is, for example, obliged to provide us with personal data when our company signs a contract with him or her. The non-provision of the personal data would have the consequence that the contract with the data subject could not be concluded.
|
||||
|
||||
Before personal data is provided by the data subject, the data subject must contact any employee. The employee clarifies to the data subject whether the provision of the personal data is required by law or contract or is necessary for the conclusion of the contract, whether there is an obligation to provide the personal data and the consequences of non-provision of the personal data.
|
||||
</p>
|
||||
|
||||
<h4>15. Existence of automated decision-making</h4>
|
||||
<p>As a responsible company, we do not use automatic decision-making or profiling.</p>
|
||||
|
||||
<p>This Privacy Policy has been generated by the Privacy Policy Generator of the <a href="https://dg-datenschutz.de/services/external-data-protection-officer/?lang=en">DGD - Your External DPO</a> that was developed in cooperation with <a href="https://www.wbs-law.de/eng/">German Lawyers</a> from WILDE BEUGER SOLMECKE, Cologne.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,4 @@
|
|||
<form method={{form.method}}>
|
||||
{{form}}
|
||||
<input type="submit"/>
|
||||
</form>
|
|
@ -0,0 +1,97 @@
|
|||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load lostplaces%}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
{% block additional_head %}
|
||||
{% endblock additional_head %}
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="{% static 'main.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'materialdesignicons.css' %}">
|
||||
<link rel="icon" type="image/png" href="{% static 'favicon.ico' %}">
|
||||
<title>
|
||||
{% block title %}Urban Exploration{% endblock %}
|
||||
</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="LP-Wrapper__Site">
|
||||
<header class="LP-Header">
|
||||
<div class="LP-Header__Logo">
|
||||
<a class="LP-Link" href="/">
|
||||
<img src="{% static 'logo.png' %}" class="LP-Image" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="LP-Header__UserInformation">
|
||||
<span class="LP-Paragraph">
|
||||
{% if user.is_authenticated %}
|
||||
Hi {{ user.username }}!
|
||||
<a class="LP-Link" href="{% url 'logout' %}"><span class="LP-Link__Text">{% translate 'Logout' %}</span></a> |
|
||||
<a class="LP-Link" href="{% url 'explorer_profile' explorer_id=user.pk%}"><span class="LP-Link__Text">{% translate 'Profile' %}</span></a>
|
||||
{% if user.is_superuser %}
|
||||
| <a class="LP-Link" href="{% url 'admin:index' %}" target="_blank"><span class="LP-Link__Text">{% translate 'Admin' %}</span></a>
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
You are not logged in.
|
||||
<a class="LP-Link" href="{% url 'login' %}"><span class="LP-Link__Text">{% translate 'Login' %}</span></a> |
|
||||
<a class="LP-Link" href="{% url 'signup' %}"><span class="LP-Link__Text">{% translate 'Sign up' %}</span></a>
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
</header>
|
||||
<input id="toggle_sidebar" class="LP-Menu__Trigger" type="checkbox" />
|
||||
<label id="toggle_sidebar_label" for="toggle_sidebar" class="LP-Menu__TriggerLabel"></label>
|
||||
<aside class="LP-Main__Sidebar">
|
||||
<nav class="LP-Menu LP-Menu--sidebar">
|
||||
<ul class="LP-Menu__List">
|
||||
<li class="LP-Menu__Item"><a href="{% url 'lostplaces_home' %}" class="LP-Link"><span class="LP-Link__Text">{% translate 'Home' %}</span></a></li>
|
||||
<li class="LP-Menu__Item"><a href="{% url 'flatpage' slug='codex' %}" class="LP-Link"><span class="LP-Link__Text">{% translate 'UrBex Codex' %}</span></a></li>
|
||||
|
||||
{% block additional_menu_items %}
|
||||
{% endblock additional_menu_items %}
|
||||
|
||||
<li class="LP-Menu__Item LP-Menu__Item--additional"><a href="{% url 'place_create'%}" class="LP-Link"><span class="LP-Link__Text">{% translate 'Create place' %}</span></a></li>
|
||||
<li class="LP-Menu__Item LP-Menu__Item--additional"><a href="{% url 'place_list'%}" class="LP-Link"><span class="LP-Link__Text">{% translate 'All places' %}</span></a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</aside>
|
||||
<main class="LP-Main__Content">
|
||||
{% if messages %}
|
||||
<div class="LP-MessageList">
|
||||
<ul class="LP-MessageList__List">
|
||||
{% for message in messages %}
|
||||
<li class="LP-MessageList__Item">
|
||||
<div class="LP-Message {% if message.tags %}LP-Message--{{ message.tags }}{% endif %}">
|
||||
<div>
|
||||
<div class="LP-Message__Icon">
|
||||
</div>
|
||||
</div>
|
||||
<div class="LP-Message__Text">
|
||||
{{ message }}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% block maincontent %}
|
||||
{% endblock maincontent %}
|
||||
|
||||
</main>
|
||||
</div>
|
||||
|
||||
{% block footer %}
|
||||
{% partial 'nav/footer' %}
|
||||
{% endblock footer %}
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,32 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load lostplaces %}
|
||||
{% block additional_head %}
|
||||
<link rel="stylesheet" href="{% static 'maps/ol.css' %}" type="text/css">
|
||||
<script src="{% static 'maps/ol.js' %}"></script>
|
||||
{% endblock additional_head %}
|
||||
|
||||
# {% block title %}{% translate 'Home' %}{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
{% partial 'welcome' %}
|
||||
<article class="LP-TextSection">
|
||||
</article>
|
||||
{% partial 'osm_map' %}
|
||||
{% set config mapping_config %}
|
||||
{% set modifier 'wide' %}
|
||||
{% endpartial %}
|
||||
<div class="LP-PlaceGrid">
|
||||
<h1 class="LP-Headline LP-Headline">{% translate 'Explore the latest places' %}</h1>
|
||||
<ul class="LP-PlaceGrid__Grid">
|
||||
{% for place in place_list %}
|
||||
<li class="LP-PlaceGrid__Item">
|
||||
{% include 'partials/place_teaser.html' with place=place%}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,46 @@
|
|||
{% extends 'global.html'%}
|
||||
{% load i18n %}
|
||||
{% load lostplaces%}
|
||||
|
||||
# {% block title %}Start{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
{% partial 'welcome' %}
|
||||
<article class="LP-TextSection">
|
||||
<p class="LP-Paragraph">
|
||||
{% blocktranslate %}You can create, view and share your lost places with other members of this site. You can upload photos, place links to your web galleries and contribute your knowledge by tagging other places or commenting on them. You will find detailed information on where these locations are, how to get there and what to expect from them. This might even include detailed information on the surroundings or the history of a lost place.{% endblocktranslate %}
|
||||
</p>
|
||||
{% url 'signup' as signup_url %}
|
||||
<p class="LP-Paragraph">
|
||||
{% blocktranslate %}Since vandalism is a growing problem these days, no sensitive information is available to the public. You have to <a class="LP-Link" href="{{signup_url}}"><span class="LP-Link__Text">sign up</span></a> with a voucher code as an invitation to join this community. Only admins can create these codes. Usually you are given a code when we know you in real life in person and when we trust you. A request from an unknown person will most probably be denied.{% endblocktranslate %}
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<div class="LP-PlaceGrid">
|
||||
<h1 class="LP-Headline LP-Headline">{% translate 'Explore the latest places' %}</h1>
|
||||
<ul class="LP-PlaceGrid__Grid">
|
||||
{% for place in place_list %}
|
||||
<li class="LP-PlaceGrid__Item">
|
||||
<a href="{% url 'place_detail' pk=place.pk %}" class="LP-Link">
|
||||
<article class="LP-PlaceTeaser">
|
||||
<div class="LP-PlaceTeaser__Image">
|
||||
{% partial 'image' %}
|
||||
{% set source_url place.placeimages.first.filename.thumbnail.url %}
|
||||
{% endpartial %}
|
||||
</div>
|
||||
<div class="LP-PlaceTeaser__Meta">
|
||||
<div class="LP-PlaceTeaser__Info">
|
||||
<span class="LP-PlaceTeaser__Title">
|
||||
<h1 class="LP-Headline LP-Headline--teaser">{{place.name|truncatechars:19}}</h1>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,16 @@
|
|||
{% extends 'global.html'%}
|
||||
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block additional_head %}
|
||||
<link rel="stylesheet" href="{% static 'maps/ol.css' %}" type="text/css">
|
||||
<script src="{% static 'maps/ol.js' %}"></script>
|
||||
{% endblock additional_head %}
|
||||
|
||||
# {% block title %}{% trans 'Map' %}{% endblock %}
|
||||
|
||||
{% block maincontent %}
|
||||
|
||||
{% include 'partials/osm_map.html' with config=mapping_config modifier='full' %}
|
||||
|
||||
{% endblock maincontent %}
|
|
@ -0,0 +1,16 @@
|
|||
{% load widget_tweaks %}
|
||||
|
||||
<div class="LP-Input {% if classes%}{{classes}}{% endif %} {% if field.errors %} LP-Input--error {% endif %}">
|
||||
<label for="{{field.id_for_label}}" class="LP-Input__Label">{{field.label}}</label>
|
||||
{% render_field field class+='LP-Input__Field' %}
|
||||
|
||||
<span class="LP-Input__Message">
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors%}
|
||||
{{error}}
|
||||
{% endfor %}
|
||||
{% elif field.help_text%}
|
||||
{{ field.help_text }}
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
|
@ -0,0 +1,9 @@
|
|||
{% load i18n %}
|
||||
<div class="LP-Form__Field LP-Form__Button LP-Input">
|
||||
<button class="LP-Button">{% if action %}{{ action }}{% else %}{% translate 'Submit' %}{% endif %}</button>
|
||||
</div>
|
||||
<div class="LP-Form__Field LP-Form__Button LP-Input">
|
||||
<a class="LP-Link" href="{% if referer %}{{ referer }}{% else %}{% url 'lostplaces_home' %}{% endif %}">
|
||||
<button type="button" class="LP-Button LP-Button--cancel">{% translate 'Cancel' %}</button>
|
||||
</a>
|
||||
</div>
|
|
@ -0,0 +1,14 @@
|
|||
{%load static %}
|
||||
{% load i18n %}
|
||||
|
||||
{% if request.user %}
|
||||
{% if place in request.user.explorer.favorite_places.all %}
|
||||
<a href="{% url 'place_unfavorite' place_id=place.id %}" class="LP-Link" title="{% trans 'Remove from favorites' %}">
|
||||
<img class="LP-Icon" src="{% static '/icons/favorite_filled.svg' %}" />
|
||||
</a>
|
||||
{%else%}
|
||||
<a href="{% url 'place_favorite' place_id=place.id %}" class="LP-Link" title="{% trans 'Save as favorite' %}">
|
||||
<img class="LP-Icon" src="{% static '/icons/favorite.svg' %}" />
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
|
@ -0,0 +1,14 @@
|
|||
{%load static %}
|
||||
{% load i18n %}
|
||||
|
||||
{% if request.user %}
|
||||
{% if place in request.user.explorer.visited_places.all %}
|
||||
<a href="{% url 'place_visit_delete' place_id=place.id %}" class="LP-Link" title="{% trans 'Remove from visits' %}">
|
||||
<img class="LP-Icon" src="{% static '/icons/pin_filled.svg' %}" />
|
||||
</a>
|
||||
{%else%}
|
||||
<a href="{% url 'place_visit_create' place_id=place.id %}" class="LP-Link" title="{% trans 'Save as visited' %}">
|
||||
<img class="LP-Icon" src="{% static '/icons/pin.svg' %}" />
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|