710 Commits

Author SHA1 Message Date
1a110e7582 Added mdi icon to external link. 2021-10-09 01:50:30 +02:00
a7c1ffd695 New CSS from frontend. No manual changes required, mdi integrated. 2021-10-09 01:50:04 +02:00
87389de4ea Exchanged mdi icon fonts. These have way more icons! 2021-10-09 01:49:30 +02:00
9290bcc6b3 Merge branch 'feature/50-Linktypes' of mowoe.com:reverend/lostplaces-backend into feature/50-Linktypes 2021-10-02 08:44:59 +02:00
a6dbf1c716 Jumping to the start of the page when closing lightbox 2021-10-02 08:44:49 +02:00
670b99a7e5 Typo caused #51 2021-10-02 08:44:21 +02:00
1b87dd2edf Added MaterialIcons font in woff2 format. #50 2021-10-02 07:54:34 +02:00
c4a9296712 Added Material Design Icons font, incl. license. #50 2021-10-02 06:35:46 +02:00
a37a445986 Added some LINK_DOMAINS. #50 2021-10-02 06:00:25 +02:00
056d937f15 #50 Added logic to set link_type based on url and LINK_DOMAINS dict. 2021-10-02 05:56:16 +02:00
86f04c08ff #50 Added migration for release. 2021-10-02 04:41:03 +02:00
e14ed52eeb #50 Added (new) link types. 2021-10-02 04:40:37 +02:00
72bfc97fbd #50 Adopted def documentation. 2021-10-02 04:29:11 +02:00
d787651d05 #50 Removed class PhotoAlbum. 2021-10-02 04:28:46 +02:00
f5fb33c2c5 #50 Removed photo album admin representation. 2021-10-02 04:20:16 +02:00
a5bcde301c Removed photo albums from urls and views. #50 2021-10-02 04:17:59 +02:00
14a5387e2d #50 Added ExternalLink class to to ModelView. 2021-10-02 03:44:15 +02:00
dd4b4f936b #50 New urls for external links. 2021-10-02 03:43:13 +02:00
cf9a5474b8 Fixed indentation. 2021-10-02 03:42:47 +02:00
961d28e336 #50 Replaced photo albums with external links in templates. 2021-10-02 03:41:31 +02:00
4dbd8ae82d Merge remote-tracking branch 'origin/develop' into feature/50-Linktypes 2021-10-02 02:47:42 +02:00
c3ea5cdccd Added Admin panel representation for ExternalLinks. 2021-10-02 02:41:14 +02:00
caa69d6e6e Added temporary datamigrations for photoalbum -> externallink (release preparation). 2021-10-02 02:41:14 +02:00
5f9ef08e3b Added linktype to externallink class and made it non-abstract. 2021-10-02 02:40:48 +02:00
4c43f87560 Removing annoying warning since Django update 3.2 2021-10-02 01:54:43 +02:00
c8399b9ce4 #54 Scaling image up while cropping 2021-10-02 01:54:21 +02:00
f7dab77229 #42 Testing place detail for level 2021-10-02 01:31:12 +02:00
8d96214a92 Nose testing sutie 2021-10-02 01:30:53 +02:00
6678f8ff02 Nose testing suite 2021-10-02 01:30:44 +02:00
4cd0635d5f #42 Testing place level on place list 2021-10-02 00:50:32 +02:00
e11151858b #42 Fined tuned list of eligible to see places 2021-10-02 00:03:45 +02:00
84b01f3a9a #42 Place submitter and super users should be able to see a place 2021-10-01 23:44:46 +02:00
3f4bf9475c #42 Restricting Acces to Place requests 2021-10-01 23:41:34 +02:00
b607335299 #42 Checking ListView for Levels 2021-10-01 22:38:44 +02:00
b1cd8fd0cc #47 Settings Place Hero when creating a place 2021-10-01 21:44:35 +02:00
a7a3ddfe63 #42 Excluding Level from Forms 2021-10-01 21:14:53 +02:00
1c6366fb43 Migrations between development systems make life just more painful 2021-10-01 19:36:48 +02:00
565a70bbac Migrations between development systems make life just more painful 2021-10-01 19:36:29 +02:00
749aa61828 Migrations between development systems make life just more painful 2021-10-01 19:36:11 +02:00
e2754dc56c No django migrations in development branches, screws everything up 2021-10-01 19:31:06 +02:00
Leonhard Strohmidel
fefc38fa9c Migration Script 2021-10-01 09:40:53 +02:00
Leonhard Strohmidel
58ab70ba42 #42 Levels for places 2021-10-01 09:40:42 +02:00
Leonhard Strohmidel
c63b0ebb87 Mehr Urbex-Codex (German only) 2021-10-01 09:29:09 +02:00
Leonhard Strohmidel
0852e35b57 #42 Level for Users 2021-10-01 09:28:45 +02:00
e52247d80b Trying to make artifacts publicly available 2021-07-16 13:54:03 +02:00
2ac90bd35c Archiving build artefacts 2021-07-16 13:35:32 +02:00
3685db6892 Im dumb 2021-07-16 13:31:03 +02:00
d5789cef75 Screw it, building is not handled by pipenv 2021-07-16 13:28:58 +02:00
5fca4dc52a Setuptools outside of venv 2021-07-16 13:24:01 +02:00
cbf45af5f5 setuptools dev depedency 2021-07-16 13:20:03 +02:00
244b4d2917 relative paths instead of cd 2021-07-16 13:17:23 +02:00
d8b0ce1ac2 Manual merging current models 2021-07-16 13:15:19 +02:00
8da6964b3c Setting Up pipenv in building 2021-07-16 13:11:10 +02:00
ccd701ea60 Pipfile script for migrations 2021-07-16 13:08:42 +02:00
170971c44b Privilege escalation attack inc 2021-07-16 13:06:10 +02:00
7196820122 Trying out other agents for building 2021-07-16 13:02:07 +02:00
a02d4f5e86 yes yes indeed 2021-07-10 14:43:56 +02:00
a7043651e0 , 2021-07-10 13:44:09 +02:00
bcf3377190 Trying to use pipenv in jenkins 2021-07-10 13:42:26 +02:00
ceabe3f6f8 No manual sync with repo since this is done by jenkins 2021-07-10 13:34:29 +02:00
6b33d20f90 :: 2021-07-10 13:32:56 +02:00
1d787a3b1d . 2021-07-10 13:31:34 +02:00
1960bf3792 . 2021-07-10 13:30:10 +02:00
0c3898163e ... 2021-07-10 13:27:46 +02:00
2c6676d2c9 Havin' fun with jenkins 2021-07-10 13:25:58 +02:00
52f9df8b2a Jenkinsfile to build a snapshot 2021-07-10 13:22:11 +02:00
ab669b9f5e Changes in MapContext 2021-06-25 11:04:18 +02:00
0fe98d4f8f Testing place views 2021-06-25 11:04:01 +02:00
51addd8fbb Testing messgaes 2021-06-12 17:06:09 +02:00
29d2813fcc Some weird bug only occuring when testing 2021-06-12 17:05:54 +02:00
cc9343270a explorers -> explorer 2021-06-12 17:05:32 +02:00
4f465b3162 400 Response when submitting invalid place data and testing more edge cases 2021-06-12 15:52:52 +02:00
b0bf40aa0b More tests of views 2021-06-12 15:07:14 +02:00
822a536ebe Fixing idention 2021-05-16 13:03:46 +02:00
5b9672e21e Testing PlaceAssetCreateView 2021-05-16 13:03:41 +02:00
0a5d22d4d9 More comments 2021-05-15 23:27:33 +02:00
9c86eab14c Testing home view 2021-05-15 23:27:25 +02:00
29d067002e Mixin Test does not rely on actual place view 2021-05-15 23:26:27 +02:00
f5f5980f9b Tests for global templates 2021-05-15 23:26:02 +02:00
10c08a2f5e Current CSS 2021-04-10 08:24:33 +02:00
50f60be10a Shifting index 2021-04-10 08:24:23 +02:00
8b32b56dd9 Custom Widget to select content/invisible radio input 2021-04-10 08:24:08 +02:00
74d842a668 #47 Settinge of Place Hero Image 2021-04-10 08:23:36 +02:00
2ac39f719f Removing debug 2021-04-09 19:51:45 +02:00
9b6121e448 Small fix 2021-04-09 19:51:17 +02:00
a139594863 Fixin Partial and Set Tag 2021-04-06 19:15:22 +02:00
f2eb048f0b Small check is this partial is used within place 2021-04-06 19:14:58 +02:00
120e63808a Replace include with partial tag 2021-04-06 19:14:36 +02:00
201ef73639 Accidently removed place url 2021-04-04 17:03:26 +02:00
af7afd0311 Accidently removed the add image tile 2021-04-04 17:01:00 +02:00
cf6346fdf0 Fixed #49 2021-04-04 16:56:18 +02:00
d641d7b44d Backwards compatibality 2021-04-04 16:55:56 +02:00
d35cb8131a Merge branch 'master' into develop 2021-04-03 23:07:16 +02:00
ceeae9e8c9 rudimentary implementation of a lightbox 2021-04-03 23:03:44 +02:00
092b91825f Following new naming https://is.gd/cRmcip 2021-04-02 22:06:52 +02:00
52271811ad using block in partial 2021-04-02 22:00:21 +02:00
fb1237f111 set variable and partial template tag 2021-04-02 22:00:13 +02:00
bae4e13137 Partial for PlaceImageGrid 2021-04-02 17:22:28 +02:00
b752454233 #39 Partial for Images 2021-04-02 17:21:00 +02:00
36eb9566d9 Fixed 404 because of misnamed font file. 2020-12-26 14:33:57 +01:00
b876435d8c Removed 'the mother of all debugging' again. :D 2020-12-25 19:50:34 +01:00
224eb87d76 Changed migration file reference after renaming it. 2020-12-25 19:47:05 +01:00
a78f123d1f Merge commit 'a22c988e948438415d1a58cac627243ae24785f4' into develop 2020-12-25 19:39:05 +01:00
a22c988e94 Added visited_places attribute to Explorer. 2020-12-25 19:36:11 +01:00
7f2283325c gory migration fuckery (rename) 2020-12-25 19:35:35 +01:00
6b7c71ef30 Addid visited_places system. (mostly copy&paste) :P 2020-12-25 19:32:54 +01:00
067bf36118 SVG paths updated. 2020-12-25 19:20:44 +01:00
9eef044af9 Renamed favorite* svgs. 2020-12-25 19:19:01 +01:00
a4780a22f2 Changed urlpattern tree. 2020-12-25 18:17:05 +01:00
947f6520aa CSS für Profil 2020-12-25 18:07:54 +01:00
0d1d829abe Regrouped views. 2020-12-25 17:56:17 +01:00
59cfa82ce9 Resorted and -grouped urls. 2020-12-25 17:54:15 +01:00
d47c85795c FU migrations! 2020-12-25 17:33:45 +01:00
8e80614eee Merge commit 'c5f6355f193df939ebb1b158be6b4dc2ba425a60' into develop 2020-12-25 16:51:49 +01:00
6a1e2d975b New Icon 2020-12-25 16:24:28 +01:00
c5f6355f19 Updated translations (de). 2020-12-25 16:07:50 +01:00
dac63e99ba Added Edit button to profile page. 2020-12-25 16:00:29 +01:00
9f369456d5 Changed easy_thumbnails image/thumb deletion. Now working. 2020-12-25 15:42:02 +01:00
011a58f6b3 Use thumbnail in profile_update. 2020-12-25 14:29:38 +01:00
67ce6cb50b Added working explorer_profile_image upload. 2020-12-25 14:06:53 +01:00
5df7cc5ec6 #46 Large Map 2020-12-25 13:29:34 +01:00
e242dc4add Partial takes parameter to change size of map 2020-12-25 13:29:18 +01:00
86cc7f23fe description_fuckery. 2020-12-25 13:19:34 +01:00
f73fa616d0 Minor reordering 2020-12-25 13:05:59 +01:00
629a609ff5 Forgott imports for #45 2020-12-25 13:00:30 +01:00
04fe93c7bb #45 Redirect after asset deletion 2020-12-25 12:57:05 +01:00
3eaa186b66 Delete profile_image on user_deletion. 2020-12-25 12:53:52 +01:00
b42be489dc #44 Text in place teaser is cut of 2020-12-25 12:39:13 +01:00
cc59254ba4 Added clean_username function to validate form. 2020-12-25 12:24:09 +01:00
67a6517716 Comment improved. 2020-12-25 11:14:54 +01:00
0f5474c2d3 half-working :P 2020-12-25 11:14:21 +01:00
17e71b71d4 Fix typo. 2020-12-25 08:04:35 +01:00
b1aa4473e9 Added failsafe, if there is no profile_image. 2020-12-25 02:11:02 +01:00
871acd1dce Improved class comment. 2020-12-25 01:41:09 +01:00
14ca45d111 Comments for customizations of UserChangeForm. 2020-12-25 01:36:14 +01:00
c71fe4cf2d Added new translations (de) 2020-12-25 01:31:43 +01:00
7359bf5fab ExplorerChangeForms, with deactivated username field. 2020-12-25 01:31:01 +01:00
4f0182fc3e Minor textual changes for consistency. 2020-12-25 01:28:23 +01:00
30f259fb4d WIP-commit of translations to test against fuzzy detection. 2020-12-24 23:51:40 +01:00
53f89caef5 Added a ModelForm to change profile details. 2020-12-24 20:31:52 +01:00
3855fb28d7 Rename ExplorerCreationForm to SignupVoucherForm. 2020-12-24 20:25:05 +01:00
3a20a60f05 Remove obsolete ExplorerChangeForm. 2020-12-24 20:22:33 +01:00
648264c9fc Remove obsoleted imports. 2020-12-24 20:13:06 +01:00
dc79b9d05c #43 Lat/Long Check when place is submitted 2020-12-24 19:47:17 +01:00
a7c8848fd6 Allow user to provide his first and last name on registration. 2020-12-24 19:36:41 +01:00
b845cc054a Small Tweaks 2020-12-24 19:25:37 +01:00
07ea2f164c Name and E-Mail is only shown when populated in profile. 2020-12-24 19:13:55 +01:00
b0396f5223 Added bio and email link to profile template. 2020-12-24 19:04:04 +01:00
88bffbef8e Added Explorer bio / description field. 2020-12-24 18:53:30 +01:00
2022a924c4 Added output of profile image to profile_page. 2020-12-24 18:30:29 +01:00
d5827b2006 Fixed filename generation. 2020-12-24 18:14:40 +01:00
a9013d9673 Pulled favorite_places out of explorer instance. 2020-12-24 18:03:31 +01:00
0c38ca9a15 Revert changes, as it was redundant. 2020-12-24 18:03:07 +01:00
734d09df90 Add favorite_places to user profile page. 2020-12-24 17:59:05 +01:00
e601b9bf6b Merge commit '6f6bd6376d1ef2410a728cff2e9b883560c7f5c1' into feature/30-user-profile-fields 2020-12-24 17:34:09 +01:00
6f6bd6376d Merge branch 'develop' of mowoe.com:reverend/lostplaces-backend into develop 2020-12-24 17:33:02 +01:00
dc2a703c39 More fuckery 2020-12-24 17:27:48 +01:00
063777ece4 Merge branch '27-Favorite-System' into develop 2020-12-24 17:27:20 +01:00
4675e5814f Indention and stupid mistakes fix 2020-12-24 17:26:07 +01:00
35e0f912fe Add profile_pic 2020-12-24 17:24:02 +01:00
07fe1bc3ca Rename place_image_path function. 2020-12-24 17:23:20 +01:00
4a43a4bf37 typo 2020-12-24 16:43:43 +01:00
61cf148417 Displaying favorite icon on detail page 2020-12-24 16:43:33 +01:00
d547ee9db3 favorite partial 2020-12-24 16:43:14 +01:00
c7b699f615 Changed link location in place teaser 2020-12-24 16:43:01 +01:00
86f95a5dd0 New icon 2020-12-24 16:42:34 +01:00
916c4b80f7 Filed not required in django admin 2020-12-24 16:42:27 +01:00
b31dc9fc5f Url name changed 2020-12-24 16:41:30 +01:00
8f048369bf Favorite/Unfavorite Views 2020-12-24 15:56:33 +01:00
f974469996 formatting 2020-12-24 15:56:02 +01:00
dbbd7b0802 rename migrationfile 2020-12-24 15:55:37 +01:00
d04e986419 Added display of name and e-mail. 2020-12-24 15:33:46 +01:00
cbbda88850 Remove debug output. 2020-12-24 15:13:40 +01:00
981c440ce3 Fix voucher class description 2020-12-24 15:13:31 +01:00
c7368f5c44 Merge commit '20dd880a11a008ba95cd5aedce59590445430831' into develop 2020-12-24 14:57:09 +01:00
abca946883 Model for favorite system 2020-12-24 14:48:11 +01:00
196fb02436 Release 2020-12-19 15:31:29 +01:00
9be993d9ba New Migrations for release 2020-12-19 15:31:22 +01:00
20dd880a11 Indention Error 2020-12-19 15:31:13 +01:00
946c3091c0 Typo "fix" 2020-12-19 15:31:04 +01:00
4bacd1a28d Recopied migration files 2020-12-19 14:47:59 +01:00
086789aa88 delete miration for release 2020-12-19 14:35:20 +01:00
3c5b447d4c New CSS 2020-11-29 19:23:44 +01:00
cfbb876d2c #41 2020-11-29 19:23:39 +01:00
4e0bfef483 Incorporating Profile View into Project 2020-11-29 19:23:22 +01:00
ccdb49c8ea Profile View 2020-11-29 19:22:55 +01:00
90dd281f7c Common functionalities 2020-11-29 19:22:38 +01:00
d9df6e67a8 Hassling with migrations 2020-11-29 19:22:27 +01:00
cd20e730ba Merge branch 'master' into develop 2020-11-27 07:58:53 +01:00
c613d15e89 Updated Readme 2020-11-27 07:57:56 +01:00
2380398fa9 #36 and #37 Place Teaser 2020-10-12 20:57:04 +02:00
4c5b9c7648 Dumped a nice missing-image image. Needs resizing and logic. 2020-10-11 23:08:14 +02:00
91a3f3171d Merge branch 'feature/localization' into develop 2020-10-11 21:57:30 +02:00
01f7dad37c Translated Model fields - primarily for backend. 2020-10-11 21:56:14 +02:00
2bfdf5c172 Translated place deletion question with blrocktrans in a more natural way. 2020-10-11 21:55:38 +02:00
15f6a30cd6 Streamlined translations ... again :P 2020-10-11 21:27:27 +02:00
812c921a42 Merge commit 'dafe7eee3489e3a7c17b6560fc2aa09648773ecd' into feature/localization 2020-10-11 17:20:53 +02:00
dafe7eee34 Deleted mishap. 2020-10-11 09:47:34 +02:00
7943537276 Translated an additional bunch of messages. 2020-10-11 07:50:15 +02:00
62c1c84bb2 Minor code styling issue. 2020-10-11 07:49:50 +02:00
df36fd8ed0 Fixed the fixes' translation ;-) 2020-10-11 07:15:33 +02:00
8713ed587d Small indentation fix. 2020-10-11 07:13:16 +02:00
7271ea2cd9 Merge branch 'feature/localization' into develop 2020-10-11 07:09:59 +02:00
dff2e67991 Ops. Forgot one file. 2020-10-11 07:05:17 +02:00
65880d1472 Renamed migration file with typo. 2020-10-11 07:04:32 +02:00
326e34a4b8 Fixed i18n to invalidate decimal geocoords. 2020-10-11 06:55:12 +02:00
3a213c87b5 Added a German Urbex codec. 2020-10-11 06:44:06 +02:00
1b197b2e12 Added query for German language to FlatView. 2020-10-11 06:15:40 +02:00
092378b24a Rename localized flat pages to include langcode. 2020-10-11 06:14:55 +02:00
561c70668d Merge remote-tracking branch 'origin/develop' into develop 2020-10-11 02:46:16 +02:00
cb15789b95 Several typos. 2020-10-11 02:26:58 +02:00
dd07cbd57d Translated photoalbum model fields. 2020-10-11 02:23:51 +02:00
52f9638d74 Translated model fields. 2020-10-11 02:07:14 +02:00
e52c3f4d4b Translated voucher messages, added filename help_text. 2020-10-11 01:39:38 +02:00
bac61d5cdc Translated permission_denied_message. 2020-10-11 01:12:52 +02:00
2d6ee4aef5 Translated place update button. 2020-10-11 00:37:43 +02:00
475a255851 Translated Submit and Create buttons. 2020-10-11 00:26:10 +02:00
f95c7973d7 Translated home_unauth texts. 2020-10-11 00:13:33 +02:00
aad31c2fa7 Changed and translated "Made by" in footer. 2020-10-10 23:49:30 +02:00
3fa6170f0c Use shorter trans tag instead of translate. 2020-10-10 23:46:26 +02:00
f73b264a2a Added blocktranslate tags to unauth_home. 2020-10-10 23:43:59 +02:00
e91e8c8894 Translated some footer text. 2020-10-10 23:40:58 +02:00
eea01cd569 Translated Delete action via variable. 2020-10-10 23:40:21 +02:00
4e366d94c9 Fixing Error on sign up 2020-10-06 22:53:35 +02:00
da60d81e90 Addes help_texts and translations. 2020-10-06 17:01:29 +02:00
2e73cb92d4 Fixed typo. Added those translations. 2020-10-05 20:31:13 +02:00
773390b09f Moved files so only the app is packed 2020-10-04 23:23:02 +02:00
ac0121d96e removed old config 2020-10-04 23:22:53 +02:00
a0c4f2cad3 Merge branch 'develop' into master 2020-10-04 22:19:01 +02:00
86fbee4116 Merge from master 2020-10-04 22:12:53 +02:00
ab3ecae54b Voucher is_valid property 2020-10-04 22:12:44 +02:00
ae915681ac Testing is_expired 2020-10-04 22:12:24 +02:00
cfbe54a4e5 Making expireable a abstract model 2020-10-04 22:11:37 +02:00
a976b59732 Hotfix. 2020-10-04 21:58:23 +02:00
d6006b17d9 Fuzzy prevented translations from working. Fixed. 2020-10-04 21:56:57 +02:00
c911f7958a Translated pagination. 2020-10-04 21:50:19 +02:00
f592aba75d Enabled available translations in settings.py. Honors Browser's preference. 2020-10-04 21:19:05 +02:00
190eb5eef7 Makemessages and last translations. 2020-10-04 21:02:05 +02:00
979900ab07 updated .gitignore, minor fix. 2020-10-04 19:00:18 +02:00
66bd9f648b Merge branch 'develop' into master 2020-10-04 15:43:41 +02:00
76b514e1e6 #40 Hotfix Error when signing up 2020-10-04 15:42:06 +02:00
b758d53a63 Fixed early load of i18n. 2020-10-03 15:22:11 +02:00
dabec5185f Merge branch 'feature/localization' of mowoe.com:reverend/lostplaces-backend into feature/localization 2020-10-01 23:11:27 +02:00
c189183e72 More translations 2020-10-01 23:11:25 +02:00
60ad323e7a Added translation tags. 2020-10-01 23:05:34 +02:00
2d2e356f1c Merge branch 'feature/localization' of mowoe.com:reverend/lostplaces-backend into feature/localization 2020-10-01 22:59:05 +02:00
710663b490 Loading tag 2020-10-01 22:58:06 +02:00
24c2ac8347 Added translation tags. 2020-10-01 22:56:44 +02:00
e0a0fa29d2 Generated message file 2020-10-01 22:10:48 +02:00
53817e9dc4 Loading Middleware 2020-10-01 22:10:38 +02:00
556931d2b1 Defining Strings to be translated 2020-10-01 22:10:31 +02:00
485eb7b886 Bumping version 2020-10-01 22:06:12 +02:00
a2004bd789 #24 Ordering of places in list 2020-09-29 21:41:36 +02:00
e32b3f6595 Merge branch 'develop' of mowoe.com:reverend/lostplaces-backend into develop 2020-09-29 21:28:53 +02:00
12f60bcfdf Added can_modify_place_asset template tag. 2020-09-29 20:40:46 +02:00
b3b8ee3104 Styling fixes 2020-09-29 20:40:41 +02:00
9613f553e9 #19 OSM-Map Styling 2020-09-29 20:21:27 +02:00
1a8a7cc4f0 Merge branch 'feature/submit_cancel_partial' into develop 2020-09-28 22:14:42 +02:00
702ebd9137 Implanted submit/cancel partial into templates. 2020-09-28 22:12:39 +02:00
aa3922da50 Added custom button text variable. 2020-09-28 22:10:07 +02:00
d6c609d107 Added submit/cancel partial. Cancel redirects to referror or home. 2020-09-28 21:54:09 +02:00
61566714a3 Merge branch 'develop' of mowoe.com:reverend/lostplaces-backend into develop 2020-09-28 21:00:20 +02:00
f4ae5c9f77 Merge branch 'temp/migration' into develop 2020-09-28 21:00:06 +02:00
cfe3d222e6 Added a few last tags to DB. 2020-09-28 20:59:10 +02:00
e0d6d81907 Adapted testdata doc. 2020-09-28 20:51:41 +02:00
5e8e865a99 New testdata. Changed geo coords. 2020-09-28 20:48:51 +02:00
3061540396 Fuck me hard, git. 2020-09-28 20:40:09 +02:00
bb119e8636 Fresh and clean initial migration. 2020-09-28 20:30:41 +02:00
14a98deff3 delete testdata. 2020-09-28 20:09:17 +02:00
4919c90ae8 Completely new and fresh initial migration. 2020-09-28 20:05:30 +02:00
5c47587189 Pruned ALL THE SHIT. 2020-09-28 20:05:01 +02:00
3223637471 dirty-save 2020-09-28 19:21:09 +02:00
389e3eac43 Typos 2020-09-27 23:58:25 +02:00
302e8bb994 More Documentation 2020-09-27 23:56:45 +02:00
992f8a7b37 Moved Delete and Alter after datamigration. 2020-09-27 21:01:11 +02:00
c8c3852323 Added basic (empty) 3-way migration. 2020-09-27 20:34:39 +02:00
8d9ab8b088 Add migrations back into repo - preparation for release. 2020-09-27 20:33:56 +02:00
45185b9236 Recent css 2020-09-27 17:13:15 +02:00
5f33ec5824 Deletion of place images 2020-09-26 16:08:56 +02:00
e217d3254e Small Teaak 2020-09-26 16:08:47 +02:00
263416a401 Abstraction for PlaceImageCreation (multiple images) 2020-09-26 16:08:37 +02:00
b4bd86ed44 View for submitting additionale place images 2020-09-26 09:48:06 +02:00
277cac323e CSS for adding and deleting images 2020-09-26 09:47:34 +02:00
5f304b91f3 Squashed commit of the following:
commit 0d62e72d72922a84e41c9f2cc21977b794784d1c
Merge: 79fee63 85f2a81
Author: reverend <reverend@reverend2048.de>
Date:   Tue Sep 22 21:55:18 2020 +0200

    Merge branch 'develop' into refactor/models

commit 79fee631d7ac28509067ecdd74078f1a2f6e0be2
Author: reverend <reverend@reverend2048.de>
Date:   Tue Sep 22 21:54:32 2020 +0200

    Updating references for related name

commit 8e07e79df2de2601f2e2eadfdd37eb7c719c51b0
Author: reverend <reverend@reverend2048.de>
Date:   Tue Sep 22 21:53:31 2020 +0200

    Generating of related names fix

commit 5fd804f37a805ae4707e13c3d941bdde3660afea
Merge: 8cc1d3e 3b526c9
Author: reverend <reverend@reverend2048.de>
Date:   Tue Sep 22 21:01:48 2020 +0200

    Merge branch 'develop' into refactor/models

commit 8cc1d3e690211dba6451e86569f00078b23e0621
Author: reverend <reverend@reverend2048.de>
Date:   Tue Sep 22 20:21:08 2020 +0200

    Tests

commit 7c0591e5397f892b1f6fb80725a693c21f90468a
Author: reverend <reverend@reverend2048.de>
Date:   Fri Sep 18 23:53:39 2020 +0200

    Testing PlaceAsset

commit 2e7b49ad1a15173565c81e7eb8bb3f35b9f622a6
Author: reverend <reverend@reverend2048.de>
Date:   Fri Sep 18 22:25:08 2020 +0200

    Restructuring models

commit eb7d03b08b326f9115e70d0fd9ed5d0fc229a362
Author: reverend <reverend@reverend2048.de>
Date:   Fri Sep 18 22:01:54 2020 +0200

    Abstract class Expireable

commit 2b51e741bb5734c5a578beeadef7819fe58b2223
Author: reverend <reverend@reverend2048.de>
Date:   Fri Sep 18 21:54:07 2020 +0200

    Abstract Model for PlaceAsset (i.e. Photoalbums)
2020-09-22 21:56:51 +02:00
85f2a81ebb Merge branch 'develop' of mowoe.com:reverend/lostplaces-backend into develop 2020-09-22 20:49:00 +02:00
8de23a3f3b Test if linked place matches. 2020-09-22 20:48:56 +02:00
3b526c9c6f Merge branch 'develop' of mowoe.com:reverend/lostplaces-backend into develop 2020-09-22 20:10:06 +02:00
516e7a04ad More documentation 2020-09-22 20:10:03 +02:00
84f13ced80 Obsoleted file with info now in Readme.md 2020-09-22 19:43:32 +02:00
dcd92f7d2a Imported from frontend with changed file / fontnames. 2020-09-22 19:41:28 +02:00
2a944eeefe Updated fonts. 2020-09-22 19:41:04 +02:00
dc93539e23 Added a list of included ressources. 2020-09-22 19:40:48 +02:00
dd58c76aba Fix #13 by allowing map zoom only on focus. 2020-09-22 18:13:42 +02:00
106ef6dac8 Updated OpenLayers to 6.4.3 - incl. source hint. 2020-09-22 13:07:30 +02:00
2bc99c78c2 Translated headings to English. 2020-09-22 12:51:08 +02:00
0185c13a95 New testdata dump with 11 places. 2020-09-21 21:37:45 +02:00
9632040ade Typos and missing docstrings. 2020-09-21 21:37:28 +02:00
85a34b20f9 Added additional tests for album links. 2020-09-20 02:19:05 +02:00
e25f3da5a5 Fixed syntax error, that broke pipenv (update) 2020-09-19 23:31:25 +02:00
4c9234d07a Text formatting. 2020-09-19 23:29:39 +02:00
f5853f7777 Added python docstrings. 2020-09-19 22:50:07 +02:00
eb7fe88d59 Renamed PlaceImageCreateForm to PlaceImageForm. 2020-09-18 23:50:25 +02:00
2a3ee3de8d #9 Using morge 404 2020-09-18 23:32:52 +02:00
00ab65d648 Added working tests. 2020-09-18 23:02:59 +02:00
79854f3fa1 Basic fist tests for PhotoAlbum model. 2020-09-18 22:39:18 +02:00
618a152f23 Switched to timezone-aware now() function. 2020-09-18 22:04:19 +02:00
ce91a19068 Merge commit '17b531e181e691055797ec95a030c399f4dbcb8f' into develop 2020-09-18 21:26:55 +02:00
17b531e181 Removed __str__ repr of Voucher and PlaceImage. 2020-09-18 21:26:05 +02:00
222c97d63c Added voucher validity boolean icon display. 2020-09-18 21:19:31 +02:00
6a1229a4ba Added valid column to VouchersAdmin. 2020-09-18 21:03:05 +02:00
2bff4db1d7 Added Voucher expiration check in form using model property. 2020-09-18 21:02:45 +02:00
a3b123a207 Added valid property to VoucherModel. 2020-09-18 21:02:07 +02:00
e698f3b224 Added VouchersAdmin and PlaceImagesAdmin. 2020-09-18 20:40:58 +02:00
c66baaa765 Simplified PlaceImage __str__ repr. 2020-09-18 20:37:54 +02:00
815be3126e Issue #16 Tag Suggestion 2020-09-18 20:35:01 +02:00
715e953182 Changed __str__ repr of Vouchers. 2020-09-18 20:30:25 +02:00
86915f6ec5 Added list display of Places and PhotoAlbums admin pages. 2020-09-18 20:21:30 +02:00
30b42de86f Delete PlaceImage files including thumbnails on deletion. 2020-09-18 13:40:54 +02:00
21217b067f Add comments and relocate thumbnails, set quality. 2020-09-18 10:47:41 +02:00
9b160d2df0 Sharpen thumbnails. 2020-09-18 10:47:16 +02:00
74a9ee4f39 Resize original images, name files with placename in filename, sharpen. 2020-09-18 10:47:00 +02:00
b0e775d299 Removed session data from testdata dump. 2020-09-17 22:21:25 +02:00
d6b82f1556 Fixed missing "latest locations" on Home when logged in. 2020-09-17 22:02:37 +02:00
3f642daf89 Added first sample testdata + doc doc hints. 2020-09-17 21:27:19 +02:00
858cfe1d3c minor settings 2020-09-17 17:06:44 +02:00
943d647a47 Added basic setup.cfg with source dir for coverage. 2020-09-17 16:14:47 +02:00
d96cf9470a Developer Documentatino for models 2020-09-15 21:07:53 +02:00
c8b3cff5a6 Updated Readme according to change of name and user model. 2020-09-14 17:37:21 +02:00
547179b0ca Squashed commit of the following:
commit 97b044cafb7f17f23b3b1beedcf70af209a60ddc
Author: reverend <reverend@reverend2048.de>
Date:   Mon Sep 14 17:25:40 2020 +0200

    Updating gitignore

commit 4891d80486e1f95db8ae66385c7c97426a3ca1a4
Author: reverend <reverend@reverend2048.de>
Date:   Mon Sep 14 17:25:20 2020 +0200

    Updating Readme

commit f05c43abbdc7eb30896ad6d10fe80fd6483338d9
Author: reverend <reverend@reverend2048.de>
Date:   Mon Sep 14 17:23:30 2020 +0200

    Renaming Module

commit fd5ad2ee9f8cbacd565da45b257928192ffc651c
Author: reverend <reverend@reverend2048.de>
Date:   Mon Sep 14 17:23:16 2020 +0200

    Renaming module references

commit 828a0dd5dd73723b84b77908497903ed26b6966b
Author: reverend <reverend@reverend2048.de>
Date:   Mon Sep 14 17:21:20 2020 +0200

    Renaming Project
2020-09-14 17:26:17 +02:00
0765f6606f Pipenv scripts and not pinning python version 2020-09-14 15:29:26 +02:00
12881d9345 Renaming MapablePoint 2020-09-14 15:18:21 +02:00
79ed029db0 Rephrasing 2020-09-14 15:16:31 +02:00
1a8da002cf Formatting 2020-09-13 20:39:32 +02:00
c828d04f05 Mixins for testing abstract model/partials in views 2020-09-13 20:27:05 +02:00
f919fe30fa Renaming map config 2020-09-13 20:15:49 +02:00
b3db6643b9 Refactoring 2020-09-13 19:43:47 +02:00
cea3a909b5 Using abstract modls 2020-09-13 19:29:30 +02:00
b52d96a55e More and better test failure messages 2020-09-13 19:17:04 +02:00
1fb71a172e Refactoring 2020-09-13 19:12:32 +02:00
27520c7ca4 Refactored ModelTestCaseMixin 2020-09-13 18:37:21 +02:00
af14cce3f8 Minor code restructuring 2020-09-13 15:49:15 +02:00
75bcc91037 Refactoring places images related name 2020-09-13 14:39:21 +02:00
c78ff60231 Refactoring ModelTestCase 2020-09-13 13:31:41 +02:00
09eb8794b8 Refactoring test_float_field 2020-09-13 13:30:47 +02:00
470e54da8d Refactoring test_char_field 2020-09-13 13:30:11 +02:00
19299598c3 Refactoring test_field 2020-09-13 13:29:27 +02:00
f1c51ab8a7 Testing messages 2020-09-13 13:28:22 +02:00
b77c5d1d7f Comments and refactoring viewtestmixin 2020-09-13 12:49:26 +02:00
05481fc0c8 Refactoring _has_context_key 2020-09-13 12:41:31 +02:00
6b00452830 Refactoring 2020-09-13 12:39:46 +02:00
7e4c5dcf24 Adding more methods to viewtestcase 2020-09-13 12:39:02 +02:00
c0f30e56f7 Small tweak 2020-09-13 11:02:53 +02:00
9852646fff Renaming IsPlaceSubmitter 2020-09-13 10:57:53 +02:00
c2d678847e Renaming IsAuthenticated 2020-09-13 10:56:18 +02:00
e77edf18ac Testing Abstract classes 2020-09-13 10:27:01 +02:00
3780aa6cf1 Abtract classes 2020-09-12 12:24:27 +02:00
21124ec2ad adapting list views 2020-09-12 12:02:25 +02:00
0ee5fc59d3 Adapting tests 2020-09-12 12:02:17 +02:00
b8dfef691e Fixing bug; Place did not show up on map 2020-09-12 11:58:45 +02:00
a1886b0b60 Adapting home view 2020-09-12 11:47:42 +02:00
e1002b5315 Adapting place detail view 2020-09-12 11:42:31 +02:00
fed90d4f7b Refactoring osm map 2020-09-12 11:42:18 +02:00
dcfb329c5a Adapted template 2020-09-12 11:35:30 +02:00
b8a21a8baa Changed average_latlon 2020-09-12 11:34:49 +02:00
7f73035b02 Refactoring tagging 2020-09-12 11:24:16 +02:00
317437fedc Testing PlaceListView 2020-09-12 11:02:39 +02:00
26286984c2 Base functions for testing views 2020-09-12 11:02:23 +02:00
9ae31c0146 Removing obsolote code 2020-09-12 11:02:01 +02:00
87fd8fa96f Small fix 2020-09-12 11:01:34 +02:00
c3401e732f Removed obosolete code 2020-09-12 11:01:24 +02:00
4ee7373b3f Testing Placeimage file change 2020-09-12 08:48:53 +02:00
64c0c5f8e6 Setting Up Test Data mor in a Unit way 2020-09-12 08:39:06 +02:00
18a597c726 Merge branch 'develop' into testing 2020-09-12 08:38:37 +02:00
Leonhard Strohmidel
baca596603 sync 2020-09-11 23:07:19 +02:00
d993387216 Fixed text repr of Explorer model due to user model change. 2020-09-11 22:43:03 +02:00
aed2856df3 Made the test timezone aware, DateTimeFiled(auto_now_add) already was. 2020-09-11 22:22:03 +02:00
c78858c152 Changed class attibutes to match test expectation. 2020-09-11 22:03:20 +02:00
f49581259e Typo in class name. 2020-09-11 19:32:07 +02:00
f5bf642cd6 Ups, not for the settings file. 2020-09-11 19:23:13 +02:00
7687acb366 Changed scope (?) of remaining local imports. 2020-09-11 19:15:39 +02:00
e655e1598a Trying to test deletion, wip 2020-09-11 12:09:51 +02:00
64ed38332f Refactoring and testing __str__ 2020-09-11 12:09:34 +02:00
d438303aec file for model tests 2020-09-11 12:08:43 +02:00
38b3736951 New Model tests 2020-09-11 12:08:27 +02:00
6be060ea40 Refactoring and more keywords to test 2020-09-11 12:08:15 +02:00
5c5756150f More dev dep 2020-09-11 12:07:57 +02:00
6e6f4ced7b More about the project 2020-09-10 23:34:24 +02:00
b806f7f9e3 tweaks 2020-09-10 23:33:46 +02:00
98c5ddad65 Updated release process 2020-09-10 23:07:51 +02:00
654cd87006 Merge branch 'master' of mowoe.com:reverend/lostplaces-backend into master 2020-09-10 22:30:32 +02:00
533efb328c Switching from a custom user model to a user profile *yikes* 2020-09-10 22:30:29 +02:00
5b1b23d3e6 Linked to django 3.1, added local_settings import to the very end of file. 2020-09-10 22:20:44 +02:00
bcd003a685 Typos and punctuation. 2020-09-10 22:17:46 +02:00
c4adc3f434 Dev dep 2020-09-10 21:51:03 +02:00
cba589a38e Small tweaks 2020-09-10 21:42:25 +02:00
a42b29721e changed versioning schema 2020-09-10 21:39:15 +02:00
a102152d34 Restructuring 2020-09-10 20:57:34 +02:00
dc71dcba0d Merge branch 'master' into release 2020-09-10 20:48:57 +02:00
266bf0b368 Formatting 2020-09-10 20:46:11 +02:00
88c94acd93 small tweaks 2020-09-10 20:42:49 +02:00
eede454e76 some polishing 2020-09-10 20:42:43 +02:00
b0ddf91677 Merge branch 'master' of mowoe.com:reverend/lostplaces-backend into master 2020-09-10 18:38:28 +02:00
c30af40079 Cleaned stuff up 2020-09-10 18:38:26 +02:00
dd266f8cdf dynamic url 2020-09-10 18:37:47 +02:00
9c70da0b77 Putting Thumbnail config into the apps scope 2020-09-10 18:37:35 +02:00
89bc00e5da Signup should be conifgured globally 2020-09-10 18:37:10 +02:00
72dc41ab79 Cleaned up configuration 2020-09-10 18:36:42 +02:00
711d46da68 Merge branch 'master' into release 2020-09-10 18:08:00 +02:00
a8b033dfdb Manifest for building packages 2020-09-10 17:48:38 +02:00
ca0e1a48dc Deleted obsolete tagify stylesheet and reference. 2020-09-10 09:05:48 +02:00
e08f8f60f2 Changed thumbnail/hero images size to cropped 3:2 aspect ratio. 2020-09-10 07:42:20 +02:00
26e257fe96 Merge branch 'feature/unauth_content' 2020-09-10 00:35:08 +02:00
44b06d1c04 Minor formatting changes. 2020-09-10 00:32:56 +02:00
0c2b1a4699 voucher form length now matches voucher model length. 2020-09-10 00:25:44 +02:00
240b61f428 Formatting. (line-lenght, comments) 2020-09-10 00:21:26 +02:00
64510898bb Removed plaintext privacy policies. 2020-09-10 00:07:25 +02:00
ab7bbdfc5a Linked "reverend" in footer to gitea profile page. 2020-09-09 23:57:23 +02:00
c1925c21c0 Added imprint templates in ger and eng. 2020-09-09 23:36:53 +02:00
bd579ad83e Fixed links, I broke earlier. -.- 2020-09-09 23:36:28 +02:00
99afb30611 Configuration for building package 2020-09-09 22:53:40 +02:00
bb1dafc89c Dev dep 2020-09-09 22:53:22 +02:00
5cc391391e More comments 2020-09-09 22:52:28 +02:00
c571a56d55 Fixed link. 2020-09-09 22:41:49 +02:00
a0ee491805 Completet German privacy-policy. 2020-09-09 22:41:36 +02:00
0f22e2021c Pulled footer frontend changes. 2020-09-09 22:06:08 +02:00
7b94482cef Removed dev specific settings. 2020-09-09 20:43:49 +02:00
96af47c539 Fixed syntax error. 2020-09-09 20:26:49 +02:00
e17f55d7d3 Merge remote-tracking branch 'origin/master' into feature/unauth_content 2020-09-09 20:22:44 +02:00
1ff136c1a8 Fixed to link targets. 2020-09-08 21:01:24 +02:00
b2abb50fd2 Applied TextSection classes to priv-pol and codex. 2020-09-08 20:51:15 +02:00
ac7f5de304 Updates css from frontend repo with TextSectio font-size increase. 2020-09-08 20:50:43 +02:00
f2b6c3e102 Created a stupid flatpage view and urlpattern. 2020-09-07 22:16:09 +02:00
f98c952d9b This and that. 2020-09-06 21:53:13 +02:00
f13698a856 Added generated privacy polies in Ger and Eng. 2020-09-06 21:04:16 +02:00
45dba48421 Added a few comment lines. 2020-09-06 19:52:02 +02:00
ae2c9ed956 Added footer and pulled it 5em away from maincontent. 2020-09-06 19:46:15 +02:00
1b2b493128 Included footer template. in globall + a bit formatting love. 2020-09-06 19:44:53 +02:00
1dad2cc1e3 Dropped a new main.css with the beta changes for the footer. 2020-09-06 19:20:14 +02:00
24a406851e Let there be social media icons! 2020-09-06 19:17:34 +02:00
6b539866c0 Shoveled missing icons from frontend repo. 2020-09-06 19:14:29 +02:00
e13110f0a2 Changed in-text font and slightly modified padding. 2020-09-04 22:19:30 +02:00
f8cae76f05 testing base views 2020-09-04 21:48:05 +02:00
ca92e2eb94 Fixed typo. 2020-09-04 21:46:49 +02:00
17637ff0b9 more test 2020-09-03 22:32:28 +02:00
b055c5f891 Tests for place_image 2020-09-03 22:22:04 +02:00
fb7880681f Minor indentation fix. 2020-09-03 21:50:27 +02:00
35c4d09d7e Removed About and Contact from sitebar. 2020-09-03 20:43:37 +02:00
1dee72cd15 Commenting tests 2020-09-03 20:24:20 +02:00
2837999a5b Bufix, i guess 2020-09-03 20:11:02 +02:00
924f4821a6 First codex draft. 2020-09-03 20:10:48 +02:00
bf07795f4d Wrong file 2020-09-03 20:07:11 +02:00
015cd768e1 Tests for the place model 2020-09-03 20:06:06 +02:00
a119957313 Moved flat templates to subfolder. 2020-09-03 20:06:03 +02:00
6bbc33c9d6 Specified detailed information in home_unauth. 2020-09-03 13:54:02 +02:00
4fbb914aac Added note to registration process and voucher codes. 2020-09-03 13:42:05 +02:00
cba3fe4366 Added codex link to sitebar. 2020-09-03 00:26:26 +02:00
5c3b68252e Added note and link to UrBex codex. 2020-09-03 00:17:42 +02:00
81a5e8246a Added CodexView, template missing. 2020-09-03 00:11:08 +02:00
6bf8eb7083 Deleted hello_world template :-$ 2020-09-03 00:05:37 +02:00
c722830e66 Added unauthed introduction. 2020-09-03 00:02:28 +02:00
ae41f539a1 Added empty article on home for logged-in users. 2020-09-02 23:57:29 +02:00
c28cc3ac3c Removed lorem dummy content from welcome message. 2020-09-02 23:56:19 +02:00
20a735d2ec Added 0.75em margin-bottom to LP-Paragraph. 2020-09-02 23:13:54 +02:00
b755f7f45e Added basic lorem ipsum welcome message. 2020-09-02 22:46:37 +02:00
b7b3c5b89b Added welcome message to home for authed and unauthed users. 2020-09-02 22:46:10 +02:00
b95e565bef Stripped down unauth_home template, limited places to 5. 2020-09-02 00:26:03 +02:00
8ab0e1b177 only submitted can delete tags 2020-09-02 00:25:31 +02:00
91c888db8f Handle HomeView for unauthenticated users with separate template. 2020-09-02 00:22:42 +02:00
47718ce17b Merge branch 'feature/tags' of mowoe.com:reverend/lostplaces-backend into feature/tags 2020-09-02 00:08:04 +02:00
6d89bca033 Deletion of tags 2020-09-02 00:08:00 +02:00
69f0f4ccfd Added documentation, links, missing information. 2020-09-01 22:35:39 +02:00
75f8ac4a95 Mentioned new taggit dependency in Readme.md 2020-09-01 22:24:05 +02:00
c3eede548c Added comment ot POST-only url. 2020-09-01 22:14:19 +02:00
0eea31a0af Removed obsolete jquery files. 2020-09-01 22:14:06 +02:00
2509c669f9 Merge branch 'feature/tags' of mowoe.com:reverend/lostplaces-backend into feature/tags 2020-09-01 21:33:07 +02:00
e00c9318fa Tagify dropdown styling 2020-09-01 18:31:46 +02:00
6ed6c2c990 Better Tagggin integration 2020-09-01 18:20:02 +02:00
328e6899a6 Merge branch 'master' into feature/tags 2020-08-31 18:28:21 +02:00
843832d978 Viewport fix 2020-08-31 18:28:12 +02:00
e4cd8bb301 Tagging using JS using Partials 2020-08-31 18:18:24 +02:00
66581a9d2d Adding tags is now possible 2020-08-30 18:39:45 +02:00
490a0e9f3e Merge branch 'master' into feature/tags 2020-08-30 17:53:34 +02:00
7a3b8529f8 base views for place assets 2020-08-30 17:26:43 +02:00
538b43c2a1 Splitted views in multiple files 2020-08-30 17:11:24 +02:00
ca2eac533f Removed unused View 2020-08-30 16:54:11 +02:00
2007b512c7 Bugfix 2020-08-30 16:53:58 +02:00
751d4c81fe Merge branch 'master' of mowoe.com:reverend/lostplaces-backend into master 2020-08-28 14:34:11 +02:00
7a757bcf35 Moved Templates 2020-08-28 14:34:09 +02:00
fc39b46c52 Merge branch 'master' into feature/tags 2020-08-27 17:17:39 +02:00
55b8d16751 No realy 2020-08-27 17:17:28 +02:00
36744c65fb Merge branch 'master' into feature/tags 2020-08-27 17:16:20 +02:00
f34d70edd5 Division by zero fix 2020-08-27 17:16:03 +02:00
8198c43451 Adding taggit to the dependencies 2020-08-27 17:00:41 +02:00
78f0e80136 First tries on using tags 2020-08-27 15:46:45 +02:00
c84be34a37 Place delete, more abstraction for ISPlaceSubmitter and more messages 2020-08-27 10:31:14 +02:00
3959096c95 Place delete 2020-08-27 10:30:50 +02:00
76daa71217 Sign up link in login template 2020-08-27 10:30:36 +02:00
0707d2d51e Icons and icon template tag 2020-08-27 09:06:24 +02:00
d45724b774 Will show x for deleting when allowed 2020-08-26 21:59:21 +02:00
c8e46d42ee Relabeling 2020-08-26 21:36:37 +02:00
591469799f Photoalbums can now be linked by users 2020-08-26 21:36:10 +02:00
3cd44959b1 Config mistake 2020-08-26 21:24:08 +02:00
ffef52269a SVG Icons as a dependency 2020-08-26 19:31:06 +02:00
9a30ced90c Calculates correct map_center for paginated place_list. 2020-08-22 09:58:57 +02:00
d44bf0c0f2 Customized PlaceListView to provide data for map rendering. 2020-08-22 09:24:50 +02:00
cad53c070c Added map to place_list, but place_center_map is still a bit off. 2020-08-22 09:23:12 +02:00
a0627761a7 Fixed indentation again. Because I'm stupid ;-) 2020-08-22 09:22:20 +02:00
04940a0901 Added ol.css.map to static files and noted it down in linklist. 2020-08-22 09:19:50 +02:00
3ef31eda0f Added OSM map to place_detail view and template. 2020-08-22 09:19:01 +02:00
7cb8bc6bac Added place_list sorting to sort by name. 2020-08-22 02:59:04 +02:00
636bb880c1 Removed debug output. 2020-08-21 20:38:52 +02:00
c9d9ca9de0 Indentation fixed to 4 spaces. 2020-08-21 20:38:05 +02:00
5f3be5fc83 Pointed template to new location of static map files. 2020-08-21 10:33:56 +02:00
f916ac9742 Removed obsolete include of static files function. 2020-08-21 10:33:33 +02:00
03af8a0c02 Made the center of the map consider only shown places (dynamic). 2020-08-21 10:31:30 +02:00
65f3642272 Added note to where these files were pulled from. 2020-08-21 10:30:17 +02:00
e00a0f687b Moved static osm_map files to subfolder. 2020-08-21 10:29:59 +02:00
9af55d3f24 Made place urls dynamic, changed zoom level. Works so far - but div is still 0px high :P. 2020-08-20 23:49:16 +02:00
719e75a449 Reverted to paginate by 5 in place_list. 2020-08-20 23:33:33 +02:00
6688536a78 Revert "Reverted to paginate by 5 in place_list."
This reverts commit 7835ddcf16.
2020-08-20 23:32:52 +02:00
7835ddcf16 Reverted to paginate by 5 in place_list. 2020-08-20 23:32:27 +02:00
3caada8f08 Moved additional headers to parent template. 2020-08-20 23:07:52 +02:00
4113811c5f Added and included ol.css. 2020-08-20 22:46:56 +02:00
a660763ea4 Corrected map_center_coords variables. 2020-08-20 22:08:35 +02:00
55fe79b82c Added missing ol.js.map. 2020-08-20 22:02:47 +02:00
b34e88a3ad Formatting. 2020-08-20 21:50:00 +02:00
f52dd733d8 Inluded ol.js. 2020-08-20 21:47:44 +02:00
ff428beaef Added ol.js for map rendering. 2020-08-20 21:44:05 +02:00
e8c4faff8e Minor corrections. 2020-08-20 21:38:35 +02:00
0b0a401486 Added export of place coords to home conext. 2020-08-20 21:38:01 +02:00
2b56eed759 Added OSM map partial, Place model function and added it to home. 2020-08-20 21:37:27 +02:00
e387091da6 Removed obsoleted JS. 2020-08-20 21:07:39 +02:00
5c5ad9502c Updated dependencies 2020-08-18 14:35:13 +02:00
baf3f54e1a Again 2020-08-18 14:24:29 +02:00
8cb7e61274 Fixed formatting 2020-08-18 14:24:08 +02:00
fa1274c595 Merge branch 'master' of mowoe.com:reverend/lostplaces-backend into master 2020-08-18 14:22:35 +02:00
a5839c2c36 Added installation instructions 2020-08-18 14:22:33 +02:00
6b90ca39eb Converted indentation to spaces globally. 2020-08-17 15:38:52 +02:00
c1007fb7bc Added migrations directory to .gitignore. 2020-08-17 12:36:27 +02:00
aa4c77e675 Deleted old migrations. 2020-08-17 12:30:45 +02:00
7a378c26d0 Unified first/last - next/prev behaviour. Fixed previous button. 2020-08-17 12:03:30 +02:00
d58d118953 New Markup for Pagination 2020-08-17 08:45:12 +02:00
4ea8d16253 Fixed pagiatation 2020-08-16 16:29:04 +02:00
9f29ea603f Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-16 11:56:32 +02:00
60a9f61358 css 2020-08-16 11:56:30 +02:00
c2b9b494cc Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-16 11:56:18 +02:00
99fbe827c9 Changed pagination template to show disabled nav elements. 2020-08-16 11:56:13 +02:00
6f1598e978 Fresh css 2020-08-16 11:42:41 +02:00
7a432921d1 Sidebar animation is not triggered when loading page 2020-08-16 11:41:03 +02:00
97a5052ad8 Responsive Menu 2020-08-16 10:34:56 +02:00
42d1137dfb Fixed icon absolute path error. 2020-08-14 15:52:17 +02:00
e2152662cf Updated main css from frontend repo. Vertical pagination alignment. 2020-08-14 13:58:21 +02:00
9f33b994dd Renamed object instance to mark current page css class. 2020-08-14 10:58:31 +02:00
70f2137af5 Removed HTML entities, linked first/last css classes. 2020-08-14 10:13:44 +02:00
b5147ee59b Moved pagination to partials and included it in place_list. 2020-08-14 09:45:00 +02:00
df2aaf646a We need some ci for this sheet 2020-08-13 23:46:06 +02:00
62a53c98e6 Template and css tweaks 2020-08-13 23:42:43 +02:00
9fad8e8baa Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-13 22:52:45 +02:00
01ab8a304d CSs 2020-08-13 22:52:32 +02:00
86087c2b8d Fixed stupid syntax errors. 2020-08-13 20:30:43 +02:00
f616b713d4 Minor pagination themplate fixes. Needs unified decorations. 2020-08-13 12:54:59 +02:00
6482d622b2 CSS 2020-08-13 11:18:29 +02:00
faa4ed52ef Hackity hickity 2020-08-13 11:18:25 +02:00
9f788ab44c Added sweet navigation html entities. 2020-08-12 23:28:06 +02:00
f27fc71a01 Added pagination in PlaceList template. 2020-08-12 23:20:32 +02:00
2f1f356eb0 Fixed indentation. 2020-08-12 22:20:31 +02:00
adc0fd4d5e Changed PlaceList description to not cus description < threshold. 2020-08-12 22:15:44 +02:00
8889314d9e Changed sorting to newest first in PlaceGrid. 2020-08-12 22:00:45 +02:00
1a70c1437e Converted PlaceList into a ListView and added pagination. 2020-08-12 21:53:49 +02:00
c148cc5f10 New css 2020-08-12 21:07:24 +02:00
aa48af7c91 DeleteView success message 2020-08-12 21:07:13 +02:00
564d20c73e Added success message to deleteview. 2020-08-12 20:56:37 +02:00
0b3aff1d1d Simplified UpdatePlace success message using Mixin. 2020-08-12 20:52:17 +02:00
0cf482dc5c Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-12 20:44:13 +02:00
275bec6560 Success message for place update. 2020-08-12 20:44:08 +02:00
852def01d2 Added success and error messages to CreatePlaceView. 2020-08-12 20:35:49 +02:00
1eed5a8283 Throwing message when creating a user 2020-08-12 20:33:09 +02:00
4ebc8f93f7 Fancy messages 2020-08-12 20:24:42 +02:00
1130ee70d9 Added missing self to get method. 2020-08-12 20:11:25 +02:00
759c42279d Converted last function-based views into class-based-views. 2020-08-12 19:24:04 +02:00
87efccf6c9 Finally removed "hello_world". 2020-08-12 19:14:06 +02:00
a82ddaa44e Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-12 19:07:12 +02:00
78f087fb3c Moved check for submitter to own view, included it in update place. 2020-08-12 19:07:07 +02:00
1d62b20a3c More markup 2020-08-12 19:06:19 +02:00
9f3ed46b35 403 Autoredirect 2020-08-12 19:04:45 +02:00
b6b17f4caf Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-12 18:59:27 +02:00
c0191fc6c4 Added LoginRequiredMixin to check for authenticated user. 2020-08-12 18:59:21 +02:00
10d96c7c8f Using referrer in 403 2020-08-12 18:56:09 +02:00
0074c73562 Custom 403 2020-08-12 18:52:04 +02:00
1e082dcb25 Amind site link 2020-08-12 18:51:57 +02:00
d554355f9c User management forms 2020-08-12 18:32:14 +02:00
5c9a52b01c Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-12 18:32:11 +02:00
7bcb08a4ae More German removed. 2020-08-12 18:32:07 +02:00
5009b778f7 More buttons 2020-08-12 18:30:30 +02:00
f9fd9d68a7 More Form frickelei 2020-08-12 18:27:51 +02:00
cbcfda3726 Removed another German title string. 2020-08-12 18:16:32 +02:00
0620ac2325 Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-12 18:13:45 +02:00
c39bbef47c Removed german string, reodered comment. 2020-08-12 18:13:41 +02:00
bc49b305ff Delte Form hybsched 2020-08-12 18:12:12 +02:00
764d0f32be Fresh baked css 2020-08-12 18:11:57 +02:00
9dfd389a5d Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-12 17:51:24 +02:00
22e2657367 New css 2020-08-12 17:51:21 +02:00
aff5babb20 Added UserTestMixin to PlaceDeleteView. 2020-08-12 17:18:31 +02:00
5bc92a5841 Default login url 2020-08-12 16:52:03 +02:00
d5de4e0440 Rendering of messages, ugly, but its there 2020-08-12 16:51:55 +02:00
8f340f6567 Cancel buttons type="button". 2020-08-12 16:19:52 +02:00
118c48cd66 More markup errors. 2020-08-12 16:16:52 +02:00
70ee70b50f Markup Errro 2020-08-12 15:51:17 +02:00
bc484b9ff9 More Cancel-Buttons. (create_place, update_place). 2020-08-12 12:44:14 +02:00
313748f5ac Munch simpler solution using link-button. 2020-08-12 12:38:50 +02:00
8b01bbb2ce Added named cancel button that redirects to success_url. 2020-08-12 11:28:11 +02:00
147c0e8dfe Removed obsoleted checkbox form. 2020-08-11 10:34:39 +02:00
86d7212060 Adjusted templates 2020-08-10 20:10:22 +02:00
30e6c6fda6 static menu items 2020-08-10 20:01:03 +02:00
98a3c9f22c Unified template names 2020-08-10 20:00:54 +02:00
675cdc5721 Adjusted delete view 2020-08-10 19:54:17 +02:00
121b99730d Added Place edit/delete view 2020-08-10 19:36:42 +02:00
fb8e7a357b Updated icon path 2020-08-10 19:14:38 +02:00
f9cb21dc8e Adjusted template 2020-08-10 19:10:46 +02:00
06b7686264 Adjusted template 2020-08-10 19:06:45 +02:00
34df74e42a Current CSS 2020-08-09 23:56:32 +02:00
f77650b54d Hide hero image div if none present. 2020-08-09 13:48:45 +02:00
68db5fbc7a Fixed missing for scope 2020-08-09 11:40:23 +02:00
89060f4ce0 Removed debug output. 2020-08-07 12:27:54 +02:00
602a8bb1e6 Got Place object in get request. 2020-08-07 12:27:35 +02:00
fe97e02e41 Doesn't do shit. 2020-08-06 22:30:52 +02:00
15a74f1f31 Added basic checkbox form and delete template. 2020-08-06 22:29:03 +02:00
19847d0e1f Fixed typos and install / prod warning. 2020-08-06 20:34:46 +02:00
5a9e86d3c0 Transated to English. 2020-08-06 19:51:45 +02:00
172e462d1d Dyfunct, but non-breaking WIP commit. :P 2020-08-06 16:57:43 +02:00
565c58019b Limited length of name / location in placegrid. Added padding. 2020-08-05 20:44:31 +02:00
e63601955e Added max-height to hero image css. 2020-08-05 20:16:09 +02:00
c2d08f637f Removed obsoleted fonts.css. 2020-08-05 20:03:21 +02:00
805363eac5 Trying to move navigation into sidebar. 2020-08-05 19:54:13 +02:00
f9851071ed css 2020-08-05 19:52:00 +02:00
985ab2ed75 Unified indentation using 4 spacec according to PEP8. 2020-08-05 18:57:09 +02:00
2b3fa6f216 Updated readme, according to thumbnail plugin change. 2020-08-05 18:29:03 +02:00
5d500100e5 Formatting. 2020-08-05 18:23:11 +02:00
b7fd19e5ef Removed unused fonts. 2020-08-05 18:19:52 +02:00
85632e85fb Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-05 18:16:09 +02:00
7ee5b359d1 New css 2020-08-05 18:15:53 +02:00
9a2ff27810 Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-05 18:13:43 +02:00
05b770f56d Removed unused fonts include CSS. 2020-08-05 18:13:35 +02:00
d1e1eaf2ae New css 2020-08-05 18:12:34 +02:00
e2f4fca8ca Moved fonts to expected location in subfolder. 2020-08-05 13:05:13 +02:00
8f9e1b5877 Error message in the form when the voucher is invalid 2020-08-05 10:15:51 +02:00
28d09c968a Changed otf font references by correct ttf ones. 2020-08-04 23:41:13 +02:00
d138c57b22 Merge branch 'master' of mowoe.com:reverend/lostplaces-backend 2020-08-04 23:36:45 +02:00
f3a7676bfa CSS adjustments 2020-08-04 23:36:40 +02:00
284302e3dc Moved login prompt and welcome msg together into one line. 2020-08-04 23:33:51 +02:00
74032b7460 Remove paragraph remains 2020-08-04 23:25:02 +02:00
9e2a54b8e5 Stupid is not to check your changes before committing. 2020-08-04 23:20:53 +02:00
c20e9c866d Moved login / logout links and greeting into header. 2020-08-04 23:16:45 +02:00
66404eea87 Fixed typo and / url. 2020-08-04 22:10:31 +02:00
fc7a847f6d New css 2020-08-04 20:06:39 +02:00
2346f814e7 Removed debug 2020-08-04 20:04:46 +02:00
713595f5e8 Typos in headings are hard to notice ;-) 2020-08-04 13:07:50 +02:00
f69f137402 Made image-sized quadratic again, for the images to honor the aspect ratio. Will be cropped in thumbnails anyway. 2020-08-03 21:57:42 +02:00
e74bdd58d2 Removed old django-thumbs thumbnail sizes and a rogue newline. 2020-08-03 21:49:12 +02:00
86d0a300ae Groundkeeping 2020-08-03 19:14:48 +02:00
049b672c00 Dedicated Home View 2020-08-03 19:14:37 +02:00
b54e81d372 Replace Thumbnail engine 2020-08-03 19:14:13 +02:00
dc318d4f98 Merge branch 'voucher' of mowoe.com:reverend/lostplaces-backend into voucher 2020-08-03 17:34:18 +02:00
045786c7ca Fixed something 2020-08-03 17:33:14 +02:00
4a6c3b7606 Merge branch 'master' into voucher 2020-08-03 17:30:31 +02:00
a232c15c1c Groundkeepin i guess... 2020-08-03 17:29:39 +02:00
ceb0a2cc68 Better Rendering of Forms 2020-08-03 17:29:25 +02:00
3ab5bf6826 Added signup formcheck signup. 2020-08-02 23:22:47 +02:00
ca1bc12e88 Resolved merge conflicts. 2020-08-02 22:16:31 +02:00
799644bf31 Merge remote-tracking branch 'origin/master' 2020-08-02 22:10:59 +02:00
57c0889c4e Added input field to the signup form and removed crap. 2020-08-02 22:05:25 +02:00
d229fe0fc8 New CSS 2020-08-02 15:57:19 +02:00
8cbb1baf27 voucher_form.code won't match voucher.code :-( 2020-08-01 21:40:11 +02:00
cd0df727cc Finally got an input form. :-) 2020-08-01 19:21:59 +02:00
81034ef613 Revert "Building a voucher-verify form."
This reverts commit 9bd85aba7a.
2020-08-01 19:08:29 +02:00
f2f32351e1 Revert "Trying to add the invitations module."
This reverts commit bea6c606fd.
2020-08-01 19:05:37 +02:00
ba3f937086 Revert "Building a voucher-verify form."
This reverts commit 9bd85aba7a.
2020-08-01 19:05:13 +02:00
d2002c9e51 Merge commit 'bea6c60'
Accidently committed to master.
2020-08-01 19:01:03 +02:00
9bd85aba7a Building a voucher-verify form. 2020-08-01 19:00:11 +02:00
bea6c606fd Trying to add the invitations module. 2020-08-01 16:54:11 +02:00
ea9b46961b Formatting. 2020-08-01 13:54:52 +02:00
ac2981ffc6 Added voucher creation date display in voucher edit view. 2020-08-01 13:31:52 +02:00
8d15610ca2 Added voucher model. 2020-08-01 13:11:07 +02:00
a2412e88d2 Added class comments, unified formatting. 2020-08-01 11:25:26 +02:00
0fefaf66dd Ignored .vscode and added pylint dev-package. 2020-07-31 16:18:10 +02:00
4ca0939dcf Forgot the actual .css file in previous commit. 2020-07-31 15:17:02 +02:00
3d230d046d Added Montserrat non-serif font and css imports for both fonts. 2020-07-31 15:15:55 +02:00
6029280808 Added shebang to .py files and specified encoding as UTF-8 2020-07-31 14:55:26 +02:00
ec757e1799 Exterminated excess newlines. 2020-07-31 14:53:39 +02:00
383ac64ee1 Massively stripped down ignored files 2020-07-31 14:09:49 +02:00
ad584efc2e Added: Crimson Text font family for use as serif font with good readability. 2020-07-31 10:42:47 +02:00
81a9c756f6 Splitted PlaceEditView into PlaceCrate and PlaceUpdate 2020-07-31 00:27:01 +02:00
2fa4874c08 Small refactoring 2020-07-30 22:33:41 +02:00
fc4167ffc2 PlaceImageForm Filename required 2020-07-30 22:18:55 +02:00
Leonhard Strohmidel
bf0d20dbbd Syntax error 2020-07-30 14:27:17 +02:00
Leonhard Strohmidel
29245d1e5f Refactoring 2020-07-30 14:26:52 +02:00
Leonhard Strohmidel
4e9f916169 Enabling mulitple image upload in 1 form 2020-07-30 14:15:28 +02:00
Leonhard Strohmidel
c8380a0073 Added Form for Image Upload to Place Create View 2020-07-30 13:09:00 +02:00
Leonhard Strohmidel
73a6a4f8d8 Comments and Codeformatting 2020-07-30 10:51:05 +02:00
066bc6011a Added Place edit function. 2020-07-29 21:28:12 +02:00
6ef959d10b Added forgotten migration. 2020-07-29 20:23:12 +02:00
2efb198f72 Added Modelform for place creation. Shabbily templated / not designed. 2020-07-29 20:22:04 +02:00
ec308a7428 Removed cleanliness warning. 2020-07-29 15:25:35 +02:00
b3f271e2e9 Merge branch 'venv-cleanup' of reverend/lostplaces-backend into master 2020-07-29 10:35:53 +00:00
4499c6b055 Wrote basic (pipenv) contribution guide in Readme.md. 2020-07-29 11:55:17 +02:00
4f3794c59d Commented out Python3 subversion requirement. 2020-07-29 11:31:42 +02:00
3795d149ab Added Image to pipenv. 2020-07-29 11:18:57 +02:00
17d8b28853 remove obsolete requirements, set up pipenv with dependencies in Pipfile. 2020-07-29 10:44:16 +02:00
d4ecc4c9de Added db.sqlite3.bak to .gitignore. 2020-07-29 09:54:18 +02:00
bf3a7d5c35 Deleted all the defunct venv stuff and moved project dir to root. 2020-07-29 09:30:01 +02:00
1037 changed files with 38590 additions and 148326 deletions

132
.gitignore vendored
View File

@@ -1,30 +1,22 @@
# Created by https://www.toptal.com/developers/gitignore/api/django,python
# Edit at https://www.toptal.com/developers/gitignore?templates=django,python
### Django ###
*.log
*.pot
*.pyc
__pycache__/
local_settings.py
# sqlite3 databasefiles
db.sqlite3
db.sqlite3-journal
media
db.sqlite3.bak
# user uploaded files
uploads
# If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/
# in your Git repository. Update and uncomment the following line accordingly.
# <django-project-name>/staticfiles/
static_files
### Django.Python Stack ###
# Byte-compiled / optimized / DLL files
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
@@ -73,28 +65,6 @@ coverage.xml
# Translations
*.mo
# Django stuff:
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
@@ -103,18 +73,11 @@ ipython_config.py
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
@@ -124,84 +87,11 @@ ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Editors
.vscode
# Rope project settings
.ropeproject
# twine / pypi
.pypirc
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
### Python ###
# Byte-compiled / optimized / DLL files
# C extensions
# Distribution / packaging
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
# Installer logs
# Unit test / coverage reports
# Translations
# Django stuff:
# Flask stuff:
# Scrapy stuff:
# Sphinx documentation
# PyBuilder
# Jupyter Notebook
# IPython
# pyenv
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
# Celery stuff
# SageMath parsed files
# Environments
# Spyder project settings
# Rope project settings
# mkdocs documentation
# mypy
# Pyre type checker
# pytype static type analyzer
# End of https://www.toptal.com/developers/gitignore/api/django,python
# Django Migrations for Development branches
django_lostplaces/lostplaces/migrations/*

42
Jenkinsfile vendored Normal file
View File

@@ -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
View File

@@ -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.

32
Pipfile Normal file
View File

@@ -0,0 +1,32 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
pylint = "*"
coverage = "*"
autopep8 = "*"
pipenv = "*"
wheel = "*"
twine = "*"
pandoc = "*"
pylint-django = "*"
setuptools = "*"
django-nose = "*"
[packages]
django = "*"
easy-thumbnails = "*"
image = "*"
django-widget-tweaks = "*"
django-taggit = "*"
[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"

159
Readme.md
View File

@@ -1,32 +1,151 @@
# lostplaces-backend
lostplaces-backend is a Django 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.
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 ist currently in early development status, neither scope,
datalayout nor features are finalized yet.
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.
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.
* [django-thumbs-v2](https://github.com/rrmerugu/django-thumbs-v2) Create thumbnails for your images with Django.
* [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.
Currently the the repo is quite a mess, with full Python 3.8 site-packages
in-repo and other sketchy stuff. This will be fixed sometime.
* [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.
### Setting up a virtual environment for development
source bin/activate (there are several venv definitions for different shells)
source/lostplaces/manage.py migrate
source/lostplaces/manage.py createsuperuser
source/lostplaces/manage.py runserver
# Installing a development instance
## Clone the repository
`git clone https://git.mowoe.com/reverend/lostplaces-backend.git`
## 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) $ 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
```shell
$ cd lostplaces-backend
$ pipenv shell
(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/).
### Install django system-wide (as user)
pip3 install --user django
Happy developing ;-)
# 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.

View File

@@ -1,231 +0,0 @@
<#
.Synopsis
Activate a Python virtual environment for the current Powershell session.
.Description
Pushes the python executable for a virtual environment to the front of the
$Env:PATH environment variable and sets the prompt to signify that you are
in a Python virtual environment. Makes use of the command line switches as
well as the `pyvenv.cfg` file values present in the virtual environment.
.Parameter VenvDir
Path to the directory that contains the virtual environment to activate. The
default value for this is the parent of the directory that the Activate.ps1
script is located within.
.Parameter Prompt
The prompt prefix to display when this virtual environment is activated. By
default, this prompt is the name of the virtual environment folder (VenvDir)
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
.Example
Activate.ps1
Activates the Python virtual environment that contains the Activate.ps1 script.
.Example
Activate.ps1 -Verbose
Activates the Python virtual environment that contains the Activate.ps1 script,
and shows extra information about the activation as it executes.
.Example
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
Activates the Python virtual environment located in the specified location.
.Example
Activate.ps1 -Prompt "MyPython"
Activates the Python virtual environment that contains the Activate.ps1 script,
and prefixes the current prompt with the specified string (surrounded in
parentheses) while the virtual environment is active.
#>
Param(
[Parameter(Mandatory = $false)]
[String]
$VenvDir,
[Parameter(Mandatory = $false)]
[String]
$Prompt
)
<# Function declarations --------------------------------------------------- #>
<#
.Synopsis
Remove all shell session elements added by the Activate script, including the
addition of the virtual environment's Python executable from the beginning of
the PATH variable.
.Parameter NonDestructive
If present, do not remove this function from the global namespace for the
session.
#>
function global:deactivate ([switch]$NonDestructive) {
# Revert to original values
# The prior prompt:
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
}
# The prior PYTHONHOME:
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
}
# The prior PATH:
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
}
# Just remove the VIRTUAL_ENV altogether:
if (Test-Path -Path Env:VIRTUAL_ENV) {
Remove-Item -Path env:VIRTUAL_ENV
}
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
}
# Leave deactivate function in the global namespace if requested:
if (-not $NonDestructive) {
Remove-Item -Path function:deactivate
}
}
<#
.Description
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
given folder, and returns them in a map.
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
two strings separated by `=` (with any amount of whitespace surrounding the =)
then it is considered a `key = value` line. The left hand string is the key,
the right hand is the value.
If the value starts with a `'` or a `"` then the first and last character is
stripped from the value before being captured.
.Parameter ConfigDir
Path to the directory that contains the `pyvenv.cfg` file.
#>
function Get-PyVenvConfig(
[String]
$ConfigDir
) {
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
# An empty map will be returned if no config file is found.
$pyvenvConfig = @{ }
if ($pyvenvConfigPath) {
Write-Verbose "File exists, parse `key = value` lines"
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
$pyvenvConfigContent | ForEach-Object {
$keyval = $PSItem -split "\s*=\s*", 2
if ($keyval[0] -and $keyval[1]) {
$val = $keyval[1]
# Remove extraneous quotations around a string value.
if ("'""".Contains($val.Substring(0,1))) {
$val = $val.Substring(1, $val.Length - 2)
}
$pyvenvConfig[$keyval[0]] = $val
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
}
}
}
return $pyvenvConfig
}
<# Begin Activate script --------------------------------------------------- #>
# Determine the containing directory of this script
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$VenvExecDir = Get-Item -Path $VenvExecPath
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
# Set values required in priority: CmdLine, ConfigFile, Default
# First, get the location of the virtual environment, it might not be
# VenvExecDir if specified on the command line.
if ($VenvDir) {
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
} else {
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
$VenvDir = $VenvDir.Insert($VenvDir.Length, "/")
Write-Verbose "VenvDir=$VenvDir"
}
# Next, read the `pyvenv.cfg` file to determine any required value such
# as `prompt`.
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
# Next, set the prompt from the command line, or the config file, or
# just use the name of the virtual environment folder.
if ($Prompt) {
Write-Verbose "Prompt specified as argument, using '$Prompt'"
} else {
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
$Prompt = $pyvenvCfg['prompt'];
}
else {
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virutal environment)"
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
$Prompt = Split-Path -Path $venvDir -Leaf
}
}
Write-Verbose "Prompt = '$Prompt'"
Write-Verbose "VenvDir='$VenvDir'"
# Deactivate any currently active virtual environment, but leave the
# deactivate function in place.
deactivate -nondestructive
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
# that there is an activated venv.
$env:VIRTUAL_ENV = $VenvDir
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
Write-Verbose "Setting prompt to '$Prompt'"
# Set the prompt to include the env name
# Make sure _OLD_VIRTUAL_PROMPT is global
function global:_OLD_VIRTUAL_PROMPT { "" }
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
function global:prompt {
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
_OLD_VIRTUAL_PROMPT
}
}
# Clear PYTHONHOME
if (Test-Path -Path Env:PYTHONHOME) {
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
Remove-Item -Path Env:PYTHONHOME
}
# Add the venv to the PATH
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"

View File

@@ -1,76 +0,0 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
PATH="${_OLD_VIRTUAL_PATH:-}"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r
fi
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV="/home/reverend/Git/lostplaces-backend"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1:-}"
if [ "x(lostplaces-backend) " != x ] ; then
PS1="(lostplaces-backend) ${PS1:-}"
else
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
# special case for Aspen magic directories
# see http://www.zetadev.com/software/aspen/
PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
else
PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
fi
export PS1
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r
fi

View File

@@ -1,37 +0,0 @@
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV "/home/reverend/Git/lostplaces-backend"
set _OLD_VIRTUAL_PATH="$PATH"
setenv PATH "$VIRTUAL_ENV/bin:$PATH"
set _OLD_VIRTUAL_PROMPT="$prompt"
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
if ("lostplaces-backend" != "") then
set env_name = "lostplaces-backend"
else
if (`basename "VIRTUAL_ENV"` == "__") then
# special case for Aspen magic directories
# see http://www.zetadev.com/software/aspen/
set env_name = `basename \`dirname "$VIRTUAL_ENV"\``
else
set env_name = `basename "$VIRTUAL_ENV"`
endif
endif
set prompt = "[$env_name] $prompt"
unset env_name
endif
alias pydoc python -m pydoc
rehash

View File

@@ -1,75 +0,0 @@
# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org)
# you cannot run it directly
function deactivate -d "Exit virtualenv and return to normal shell environment"
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
set -gx PATH $_OLD_VIRTUAL_PATH
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
functions -e fish_prompt
set -e _OLD_FISH_PROMPT_OVERRIDE
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
end
set -e VIRTUAL_ENV
if test "$argv[1]" != "nondestructive"
# Self destruct!
functions -e deactivate
end
end
# unset irrelevant variables
deactivate nondestructive
set -gx VIRTUAL_ENV "/home/reverend/Git/lostplaces-backend"
set -gx _OLD_VIRTUAL_PATH $PATH
set -gx PATH "$VIRTUAL_ENV/bin" $PATH
# unset PYTHONHOME if set
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# fish uses a function instead of an env var to generate the prompt.
# save the current fish_prompt function as the function _old_fish_prompt
functions -c fish_prompt _old_fish_prompt
# with the original prompt function renamed, we can override with our own.
function fish_prompt
# Save the return status of the last command
set -l old_status $status
# Prompt override?
if test -n "(lostplaces-backend) "
printf "%s%s" "(lostplaces-backend) " (set_color normal)
else
# ...Otherwise, prepend env
set -l _checkbase (basename "$VIRTUAL_ENV")
if test $_checkbase = "__"
# special case for Aspen magic directories
# see http://www.zetadev.com/software/aspen/
printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal)
else
printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal)
end
end
# Restore the return status of the previous command.
echo "exit $old_status" | .
_old_fish_prompt
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
end

View File

@@ -1,10 +0,0 @@
#!/home/reverend/Git/lostplaces-backend/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@@ -1,10 +0,0 @@
#!/home/reverend/Git/lostplaces-backend/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

10
bin/pip
View File

@@ -1,10 +0,0 @@
#!/home/reverend/Git/lostplaces-backend/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@@ -1,10 +0,0 @@
#!/home/reverend/Git/lostplaces-backend/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@@ -1,10 +0,0 @@
#!/home/reverend/Git/lostplaces-backend/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@@ -1 +0,0 @@
python3

View File

@@ -1 +0,0 @@
/home/reverend/Programmierung/python/django-lostplaces/bin/python3

View File

@@ -0,0 +1,6 @@
exclude
include LICENSE
include Readme.rst
include Pipfile
recursive-include lostplaces/static *
recursive-include lostplaces/templates *

View File

@@ -0,0 +1,2 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

View File

@@ -1,3 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
ASGI config for lostplaces project.
@@ -11,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()

View File

@@ -1,23 +1,32 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
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'
@@ -25,20 +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',
'django_thumbs'
'django_nose'
]
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = [
'--with-coverage',
'--cover-package=lostplaces',
]
MIDDLEWARE = [
@@ -49,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': [
@@ -69,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': {
@@ -84,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 = [
{
@@ -103,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'
@@ -115,21 +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')
# Load and override settings from local_settings.py and don't fail on errors.
try:
from .local_settings import *
except ImportError:
pass

View File

@@ -1,3 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""lostplaces URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
@@ -13,15 +16,18 @@ Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.conf import settings
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('', TemplateView.as_view(template_name='home.html'), name='home'),
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)

View File

@@ -1,3 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
WSGI config for lostplaces project.
@@ -11,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()

View File

@@ -0,0 +1,143 @@
# 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
- [externallinks](###externallinks) 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

View File

@@ -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},
},
}

View File

@@ -0,0 +1,37 @@
#!/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 ExternalLinksAdmin(admin.ModelAdmin):
list_display = ('label', 'place', 'url', 'linktype' )
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(ExternalLink, ExternalLinksAdmin)

View File

@@ -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'

View File

@@ -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)

View File

@@ -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().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 True
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'})
)

View File

@@ -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)"

View File

@@ -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,
},
),
]

View File

@@ -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'
)
]

View File

@@ -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,
},
),
]

View File

@@ -0,0 +1,118 @@
# Generated by Django 3.1.4 on 2020-12-25 16:02
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import easy_thumbnails.fields
from lostplaces.models.models import generate_profile_image_filename
from lostplaces.models.place import generate_place_image_filename
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0003_voucher'),
]
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='profile_image',
field=easy_thumbnails.fields.ThumbnailerImageField(blank=True, help_text='Optional profile image for display in Explorer profile', null=True, upload_to=generate_profile_image_filename, verbose_name='Profile image'),
),
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=generate_place_image_filename, 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'),
),
]

View File

@@ -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'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.1.4 on 2020-12-25 18:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0004_gory_fix'),
]
operations = [
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'),
),
]

View File

@@ -0,0 +1,14 @@
# Generated by Django 3.2.5 on 2021-07-16 11:15
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0004_release_0_1_3'),
('lostplaces', '0005_add_visited_places'),
]
operations = [
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.7 on 2021-10-01 19:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0007_auto_20211001_1925'),
]
operations = [
migrations.AddField(
model_name='photoalbum',
name='linktype',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='link type'),
),
]

View File

@@ -0,0 +1,37 @@
# Generated by Django 3.2.7 on 2021-10-01 20:13
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0008_photoalbum_linktype'),
]
operations = [
migrations.CreateModel(
name='ExternalLink',
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')),
('subclass', models.IntegerField(default=-1)),
('subclassid', models.IntegerField(default=-1)),
('url', models.URLField(verbose_name='URL')),
('label', models.CharField(max_length=100, verbose_name='link text')),
('linktype', models.CharField(blank=True, max_length=20, null=True, verbose_name='link type')),
('place', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='externallinks', to='lostplaces.place')),
('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='externallinks', to='lostplaces.explorer', verbose_name='Submitter')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='photoalbum',
name='externallink_ptr',
field=models.OneToOneField(auto_created=True, null=True, blank=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, serialize=False, to='lostplaces.externallink'),
preserve_default=False,
),
]

View File

@@ -0,0 +1,22 @@
# Generated by Django 3.2.7 on 2021-10-01 20:32
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0009_photoalbum_externallink_interim'),
]
operations = [
# insert data from subclass into parent class with subclass 'number' and primary key/id
migrations.RunSQL("""INSERT INTO lostplaces_externallink (submitted_when, url, label, place_id, submitted_by_id, subclass, subclassid)
SELECT submitted_when, url, label, place_id, submitted_by_id, 1, id
FROM lostplaces_photoalbum;"""
),
# update subclass primary key to point to parent class (notice composite key values):
migrations.RunSQL("UPDATE lostplaces_photoalbum SET externallink_ptr_id=lostplaces_externallink.id FROM lostplaces_externallink WHERE lostplaces_externallink.subclassid=lostplaces_photoalbum.id AND lostplaces_externallink.subclass=1;"
),
]

View File

@@ -0,0 +1,56 @@
# Generated by Django 3.2.7 on 2021-10-01 22:48
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0010_photoalbum_externallink_datamigration'),
]
operations = [
migrations.RemoveField(
model_name='externallink',
name='subclass',
),
migrations.RemoveField(
model_name='externallink',
name='subclassid',
),
migrations.RemoveField(
model_name='photoalbum',
name='id',
),
migrations.RemoveField(
model_name='photoalbum',
name='label',
),
migrations.RemoveField(
model_name='photoalbum',
name='linktype',
),
migrations.RemoveField(
model_name='photoalbum',
name='place',
),
migrations.RemoveField(
model_name='photoalbum',
name='submitted_by',
),
migrations.RemoveField(
model_name='photoalbum',
name='submitted_when',
),
migrations.RemoveField(
model_name='photoalbum',
name='url',
),
migrations.AlterField(
model_name='photoalbum',
name='externallink_ptr',
field=models.OneToOneField(auto_created=True, default=-1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='lostplaces.externallink'),
preserve_default=False,
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 3.2.7 on 2021-10-02 02:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('lostplaces', '0011_remove_migrated_photoalbum_data'),
]
operations = [
migrations.AlterField(
model_name='externallink',
name='linktype',
field=models.CharField(blank=True, choices=[('youtube', 'YouTube'), ('vimeo', 'Vimeo'), ('flickr', 'Flickr'), ('googlephotos', 'Google Photos'), ('photoalbum', 'Photo album')], max_length=20, null=True, verbose_name='link type'),
),
migrations.DeleteModel(
name='PhotoAlbum',
),
]

View File

@@ -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 *

View File

@@ -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

View File

@@ -0,0 +1,38 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from lostplaces.models.place import PlaceAsset
LINK_TYPES = (
('youtube', 'YouTube'),
('vimeo', "Vimeo"),
('flickr', 'Flickr'),
('googlephotos', "Google Photos"),
('photoalbum', "Photo album"),
)
LINK_DOMAINS = {
'youtu.be': 'youtube',
'y2u.be': 'youtube',
}
class ExternalLink(PlaceAsset):
class Meta:
abstract = False
url = models.URLField(
max_length=200,
verbose_name=_('URL')
)
label = models.CharField(
max_length=100,
verbose_name=_('link text')
)
linktype = models.CharField(
choices=LINK_TYPES,
max_length=20,
verbose_name=_('link type'),
blank=True,
null=True
)

View File

@@ -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)

View File

@@ -0,0 +1,182 @@
import os
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
from easy_thumbnails.fields import ThumbnailerImageField
from easy_thumbnails.files import get_thumbnailer
PLACE_LEVELS = (
(1, 'Ruin'),
(2, 'Vandalized'),
(3, 'Natures Treasure'),
(4, 'Long Time no See'),
(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):
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 __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)

View File

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 264 KiB

View File

@@ -0,0 +1,93 @@
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:
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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 108 KiB

View File

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 816 B

View File

@@ -0,0 +1 @@
<svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" width="30px" height="30px"><path d="M 3 7 A 1.0001 1.0001 0 1 0 3 9 L 27 9 A 1.0001 1.0001 0 1 0 27 7 L 3 7 z M 3 14 A 1.0001 1.0001 0 1 0 3 16 L 27 16 A 1.0001 1.0001 0 1 0 27 14 L 3 14 z M 3 21 A 1.0001 1.0001 0 1 0 3 23 L 27 23 A 1.0001 1.0001 0 1 0 27 21 L 3 21 z"/></svg>

After

Width:  |  Height:  |  Size: 351 B

View File

@@ -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"
}
}

View File

@@ -0,0 +1 @@
<svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><path d="M 25 2 C 12.309295 2 2 12.309295 2 25 C 2 37.690705 12.309295 48 25 48 C 37.690705 48 48 37.690705 48 25 C 48 12.309295 37.690705 2 25 2 z M 25 4 C 36.609824 4 46 13.390176 46 25 C 46 36.609824 36.609824 46 25 46 C 13.390176 46 4 36.609824 4 25 C 4 13.390176 13.390176 4 25 4 z M 25 11 A 3 3 0 0 0 22 14 A 3 3 0 0 0 25 17 A 3 3 0 0 0 28 14 A 3 3 0 0 0 25 11 z M 21 21 L 21 23 L 22 23 L 23 23 L 23 36 L 22 36 L 21 36 L 21 38 L 22 38 L 23 38 L 27 38 L 28 38 L 29 38 L 29 36 L 28 36 L 27 36 L 27 21 L 26 21 L 22 21 L 21 21 z"/></svg>

After

Width:  |  Height:  |  Size: 641 B

View File

Before

Width:  |  Height:  |  Size: 850 B

After

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><defs><style>.cls-1{fill:#231f20;}</style></defs><title>Wondicon - UI (Free)</title><path class="cls-1" d="M125,177.86a5,5,0,0,1-4.74-3.42L96,101.76,27.64,77.57a5,5,0,0,1,.2-9.49L169.22,24.53a5,5,0,0,1,6.23,6.3L129.76,174.37a5,5,0,0,1-4.73,3.49ZM45.23,73.19l56.44,20a5,5,0,0,1,3.07,3.13l20.15,60.44L163,36.9Z"/><path class="cls-1" d="M100,102.84a4.94,4.94,0,0,1-3.59-1.52,5,5,0,0,1,.11-7.07L131.86,60a5,5,0,0,1,7,7.18l-35.35,34.26A5,5,0,0,1,100,102.84Z"/><path class="cls-1" d="M75,175.69a5,5,0,0,1-3.19-8.85l25-20.69a5,5,0,0,1,6.38,7.7l-25,20.69A5,5,0,0,1,75,175.69Z"/><path class="cls-1" d="M29.31,175.69a5,5,0,0,1-3.53-8.54l45.68-45.69a5,5,0,0,1,7.08,7.08L32.85,174.22A5,5,0,0,1,29.31,175.69Z"/><path class="cls-1" d="M29.31,130a5,5,0,0,1-3.85-8.19l20.69-25a5,5,0,0,1,7.7,6.38l-20.69,25A5,5,0,0,1,29.31,130Z"/></svg>

After

Width:  |  Height:  |  Size: 914 B

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +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;}
</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>

After

Width:  |  Height:  |  Size: 717 B

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -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 */

View File

@@ -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"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -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 %}

View File

@@ -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 'External links submitted by' %} {{explorer.user.username}}</h1>
<div class="LP-LinkList">
<ul class="LP-LinkList__Container">
{% for external_link in assets.externallinks.all %}
<li class="LP-LinkList__Item">
<a target="_blank" href="{{external_link.url}}" class="LP-Link">
<span class="LP-Text">{{external_link.label}}</span>
</a>
{% if user.explorer == external_link.submitted_by%}
<a href="{% url 'external_link_delete' pk=external_link.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 %}

Some files were not shown because too many files have changed in this diff Show More