From 291464280f559b89295526f2c9248f099ad53232 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Fri, 18 Sep 2020 23:25:31 -0400 Subject: [PATCH 01/16] add CSS cleanup and modifications --- app/static/css/explore.css | 4 +- app/static/css/style.css | 166 ++++++++++++++++++------------------- app/static/img/logo.png | Bin 110157 -> 110523 bytes app/templates/base.html | 9 +- 4 files changed, 90 insertions(+), 89 deletions(-) diff --git a/app/static/css/explore.css b/app/static/css/explore.css index 692c671..648625e 100644 --- a/app/static/css/explore.css +++ b/app/static/css/explore.css @@ -3,7 +3,7 @@ border-color: #3dabf0; -webkit-box-shadow: none; box-shadow: none; - transition: .3s; + transition: var(--animation-duration); } .chosen-container-multi .chosen-choices { background-image: none; @@ -12,7 +12,7 @@ padding-left: 2.75rem; border-radius: 3px; - transition: .3s; + transition: var(--animation-duration); } .chosen-container-multi .chosen-choices li.search-field input[type=text] { font-family: "Nunito Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; diff --git a/app/static/css/style.css b/app/static/css/style.css index 33b8387..8104887 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -1,12 +1,11 @@ @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700;900&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@200;300;400;600;700&display=swap'); -/* colour variables */ :root { - --grid-grey: #f0eeee; - --grey-light: #f1efef; - --grey-mid: #6c6c6c; - --grey-dark: #242424; + --grid-grey: #f0eeee; + --grey-light: #f1efef; + --grey-mid: #6c6c6c; + --grey-dark: #242424; --cirrus-primary: #3c8cc9 !important; --cirrus-text: #aacbe3 !important; @@ -19,109 +18,115 @@ * { box-sizing: border-box; + word-wrap: break-word; } body { - background-color: var(--grey-light); + background-color: var(--grey-light); } .frame { background-color: white; + padding-top: 25px 0; } .placeholder img { - height: 100px; + height: 100px; } .header { - margin-bottom: 0; + margin-bottom: 0; } .header .header-nav a { - text-transform: uppercase; - color: var(--grey-dark); - font-family: 'Montserrat', sans-serif; - font-weight: 600 !important; - color: var(--cirrus-primary); + text-transform: uppercase; + color: var(--grey-dark); + font-family: 'Montserrat', sans-serif; + font-weight: 600 !important; + color: var(--cirrus-primary); } .header .header-nav a[class*="btn-primary"] { - color: var(--cirrus-bg); + color: var(--cirrus-bg); } .nav-item.has-sub .nav-dropdown-link.btn-primary::after { - border-color: var(--cirrus-bg); + border-color: var(--cirrus-bg); + transition: border-color var(--animation-duration); } .nav-item.has-sub .nav-dropdown-link.btn-primary:hover::after { - border-color: var(--cirrus-primary); + border-color: var(--cirrus-primary); + transition: border-color var(--animation-duration); } div.header { - margin-top: 10px; + margin-top: 10px; } .logo { - height: 60px; + height: 60px; } .tab-container li a { - transition: 0.2s !important; + transition: var(--animation-duration); !important; } .tab-container:hover li:hover a:hover { - border-bottom: 2px solid var(--cirrus-primary); + border-bottom: 2px solid var(--cirrus-primary); } -.btn-primary{ - border: 2px solid var(--cirrus-primary) !important; - border-radius: 2px +.btn-primary { + border: 2px solid var(--cirrus-primary) !important; + border-radius: 2px; } -.btn-primary:hover{ - background: inherit; - color: var(--cirrus-primary) !important; +.btn-primary:hover { + background: inherit; + color: var(--cirrus-primary) !important; } -.frame__body .btn-primary:hover{ - background: white; - color: var(--cirrus-primary) !important; +.frame__body .btn-primary:hover { + background: white; + color: var(--cirrus-primary) !important; } -button:focus, a:focus, input:focus{ - box-shadow: none !important; +button:focus, a:focus, input:focus { + box-shadow: none !important; } -footer{ - background-color: var(--grey-dark) !important; +footer { + background-color: var(--grey-dark) !important; } -.footer-title-par{ - font-size: 1.5rem; +.footer-title-par { + font-size: 1.5rem; } -.content{ - margin-bottom: 0px !important; +.content { + margin-bottom: 0px !important; } -.bold-footer{ - font-family:'Montserrat', sans-serif; - font-weight:bold; - margin-block-start: 2.33em; - margin-block-end: 2.33em; - letter-spacing: 6px; +.bold-footer { + font-weight: bold; + margin-block-start: 2.33em; + margin-block-end: 2.33em; + letter-spacing: 3px; } -.thin-footer{ - font-family:'Nunito-Sans', sans-serif; - font-weight: 100; - letter-spacing: 2px; +.thin-footer { + font-family:'Nunito-Sans', sans-serif; + font-weight: 100; + letter-spacing: 0.5px; + color: var(--grey-mid); } + /** * Front page banner */ + #splash-img { position: relative; } @@ -150,20 +155,18 @@ footer{ font-weight: 200; } -.header-margin{ - margin-top: 30px !important; +.header-margin { + margin-top: 30px !important; } + /** - * Front page cards + * Front Page Cards */ -.card p { - word-wrap: break-word; -} -.card-container{ - min-height: 230px !important; +.card-container { + min-height: 230px !important; } .card-body .content { @@ -175,56 +178,53 @@ footer{ cursor: pointer; } -.tile__title{ - font-weight: bold; - color: var(--cirrus-primary); +.tile__title { + font-weight: bold; + color: var(--cirrus-primary); } -.tile__title{ - color: var(--grey-mid); +.tile__title > span{ + color: var(--grey-dark); } -.row [class^=col-]:not(.col-12){ - padding: 0.5rem !important; +.card.u-flex-column.h-100.slide-up { + padding-bottom: 1.5em; } -/* -.row .col-12{ - padding: 0 !important; + +.row [class^=col-]:not(.col-12) { + padding: 0.5rem !important; } -*/ -.tile.level.r{ - padding: 0.5rem 0px; + +.tile.level.r { + padding: 0.5rem 0px; } .tile__container > .tile__title > span { - font-weight: 300; + font-weight: 300; } + /** * Challenge */ + #challenge-frame { border-left: 5px solid var(--cirrus-primary); padding: 3%; } -.content > #challenge-frame > .row > p { +#challenge-frame > .row > p { border-top: 2px solid var(--grey-light); padding-top: 17px; margin-top: 18px; } -.frame { - padding-top: 25px; - padding-bottom: 25px; -} - .map-container { justify-items: center; } -.map-container > #map { +#map { height: 50vh; } @@ -237,17 +237,17 @@ footer{ margin-top: 0; } -.frame > .row > p{ +.frame > .row > p { width: 100%; } -.frame > .row > .img-upload{ - max-height: 40vh; - width: auto; +.frame > .row > .img-upload { + max-height: 40vh; + width: auto; } #profile-block.card { - padding: 15px; + padding: 15px; } .badges > a { @@ -255,11 +255,11 @@ footer{ } .badges .modal img { - height: 100px; + height: 100px; } .badges a img { height: 25px; position: relative; - top: 5px; + top: 5px; } \ No newline at end of file diff --git a/app/static/img/logo.png b/app/static/img/logo.png index 6941382c7646d5295ef91f4325e9546472b10c08..f2998585c8057ebca191fdf29518a95a05b5bd05 100644 GIT binary patch delta 382 zcmYL_KTg9i6vpY&p{Hh;5J22@WPbEuwJ3nuJ8^vI)bwLTKstQ*loU0WXxUNf_AsG() z#?ddIqz>!8EPEF5$C&dnR-(`%m&h{1D1X!pz|>I#*HSG1@v>|JFi{X~DrA5ia`0P4 qua)4YjRi6o0I|c8W?Hj1IWBI*F*+_yUdjaXsdl61?pwEY`uYn*xqR3F delta 17 ZcmdmepY7}&wh7A36B)NpWMtG@2LMV?2RZ-% diff --git a/app/templates/base.html b/app/templates/base.html index 670ab44..51eb98e 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -4,11 +4,13 @@ - + + + @@ -65,10 +67,9 @@ {% endblock %}
-
From 47579d89e14155176fb5a3786c85164fe2460a1d Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Sat, 19 Sep 2020 13:57:58 -0400 Subject: [PATCH 02/16] cleanup/organize/change CSS --- app/static/css/style.css | 105 +++++++++++++++++++++++++++------------ app/templates/base.html | 7 ++- 2 files changed, 78 insertions(+), 34 deletions(-) diff --git a/app/static/css/style.css b/app/static/css/style.css index 8104887..46c849c 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -16,13 +16,9 @@ --cirrus-link-dark: var(--cirrus-primary) !important; } -* { - box-sizing: border-box; - word-wrap: break-word; -} - body { background-color: var(--grey-light); + box-sizing: border-box; } .frame { @@ -30,10 +26,6 @@ body { padding-top: 25px 0; } -.placeholder img { - height: 100px; -} - .header { margin-bottom: 0; } @@ -61,7 +53,9 @@ body { } div.header { - margin-top: 10px; + margin: 10px 0 0; + transition: border-color var(--animation-duration); + border-color: var(--cirrus-bg); } .logo { @@ -99,6 +93,20 @@ footer { background-color: var(--grey-dark) !important; } +.bold-footer { + margin-block-start: 2.33em; + margin-block-end: 2.33em; + letter-spacing: 2px; +} + +.thin-footer { + letter-spacing: 0.5px; +} + +.pointer-cursor { + cursor: pointer; +} + .footer-title-par { font-size: 1.5rem; } @@ -107,18 +115,37 @@ footer { margin-bottom: 0px !important; } -.bold-footer { - font-weight: bold; - margin-block-start: 2.33em; - margin-block-end: 2.33em; - letter-spacing: 3px; +.btn-primary { + border: 2px solid var(--cirrus-primary) !important; + border-radius: 2px } -.thin-footer { - font-family:'Nunito-Sans', sans-serif; - font-weight: 100; - letter-spacing: 0.5px; - color: var(--grey-mid); +.btn-primary:hover { + background: inherit; + color: var(--cirrus-primary) !important; + background: white; +} + +button:focus, a:focus, input:focus { + box-shadow: none !important; +} + + + +/** + * Register / Login / Logout + */ + +.tab-container li a { + transition: var(--animation-duration); +} + +.tab-container:hover li:hover a:hover { + border-bottom: 2px solid var(--cirrus-primary); +} + +.placeholder img { + height: 100px; } @@ -156,15 +183,19 @@ footer { } .header-margin { - margin-top: 30px !important; + margin-top: 50px !important; } /** - * Front Page Cards + * Cards */ +.card p { + word-wrap: break-word; +} + .card-container { min-height: 230px !important; } @@ -183,10 +214,6 @@ footer { color: var(--cirrus-primary); } -.tile__title > span{ - color: var(--grey-dark); -} - .card.u-flex-column.h-100.slide-up { padding-bottom: 1.5em; } @@ -199,14 +226,23 @@ footer { padding: 0.5rem 0px; } -.tile__container > .tile__title > span { - font-weight: 300; +.tile__title > span { + font-weight: 400; + color: var(--grey-mid); +} + +.row:not(.no-space) [class^=col-]:not(.col-12) { + padding: 0.5rem !important; +} + +.tile.level.r { + padding: 0.5rem 0px; } /** - * Challenge + * Challenge / Userhome */ #challenge-frame { @@ -220,6 +256,10 @@ footer { margin-top: 18px; } +.frame { + padding-top: 25px 0; +} + .map-container { justify-items: center; } @@ -233,8 +273,7 @@ footer { } .form-section > label + p { - margin-bottom: 6px; - margin-top: 0; + margin-bottom: 0 0 6px; } .frame > .row > p { @@ -246,8 +285,8 @@ footer { width: auto; } -#profile-block.card { - padding: 15px; +#profile-block { + padding: 15px; } .badges > a { diff --git a/app/templates/base.html b/app/templates/base.html index 51eb98e..0d5c246 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -29,7 +29,7 @@
- +
@@ -88,4 +87,4 @@ -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/app/templates/explore.html b/app/templates/explore.html index 89fed79..5ec1956 100644 --- a/app/templates/explore.html +++ b/app/templates/explore.html @@ -2,7 +2,7 @@ {% load static %} {% block head %} - Explore | Stratus + Explore | HackItForward @@ -14,7 +14,7 @@
-

Stratus

+

Hack It Forward

Conquer the world's challenges - together

diff --git a/app/templates/initiative.html b/app/templates/initiative.html index b51348c..8d2e1a2 100644 --- a/app/templates/initiative.html +++ b/app/templates/initiative.html @@ -5,7 +5,7 @@ {% load class_name %} {% block head %} -{{ initiative.name }} | Stratus +{{ initiative.name }} | HackItForward {% endblock %} {% block body %} @@ -27,7 +27,7 @@

{{ initiative.name }}

- + {% if initiative.challenge %}
@@ -43,7 +43,7 @@

{{ initiative.name }}

{% endif %} - + {% if initiative.tags.exists %}
@@ -61,7 +61,7 @@

{{ initiative.name }}

{% endif %} - +
@@ -77,7 +77,7 @@

{{ initiative.name }}

- + {% if initiative.contributors.exists %}
@@ -110,7 +110,7 @@

{{ initiative.name }}

{% endfor %} - + {% if links.exists %}
@@ -135,4 +135,4 @@

{{ initiative.name }}

{% block frames %} {% endblock %}
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/app/templates/login.html b/app/templates/login.html index 189a423..4045c2c 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block head %} - Login | Stratus + Login | HackItForward {% endblock %} {% block body %} diff --git a/app/templates/logout.html b/app/templates/logout.html index c614c53..427b584 100644 --- a/app/templates/logout.html +++ b/app/templates/logout.html @@ -2,7 +2,7 @@ {% load static %} {% block head %} - Logout | Stratus + Logout | HackItForward {% endblock %} {% block body %} diff --git a/app/templates/register.html b/app/templates/register.html index f5e642b..4f83a87 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block head %} - Register | Stratus + Register | HackItForward {% endblock %} {% block body %} diff --git a/app/templates/userhome.html b/app/templates/userhome.html index 03d074e..5338307 100644 --- a/app/templates/userhome.html +++ b/app/templates/userhome.html @@ -5,7 +5,7 @@ {% get_media_prefix %} {% block head %} -{{ profile.username }}'s Home | Stratus +{{ profile.username }}'s Home | HackItForward {% endblock %} {% block body %} From b1e043748b70363a00c75870de017e5fb1a0a812 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Sat, 19 Sep 2020 19:17:54 -0400 Subject: [PATCH 04/16] Add additional CSS cleanup, reorder links in base.html --- app/migrations/0014_merge_20200919_1517.py | 14 ++++++ app/static/css/explore.css | 2 +- app/static/css/style.css | 52 +++++++--------------- app/templates/base.html | 15 ++++--- app/templates/explore.html | 2 +- app/templates/login.html | 2 +- app/templates/logout.html | 2 +- app/templates/project.html | 2 +- app/templates/register.html | 2 +- app/templates/register_login.html | 2 +- app/templates/userhome.html | 2 +- 11 files changed, 46 insertions(+), 51 deletions(-) create mode 100644 app/migrations/0014_merge_20200919_1517.py diff --git a/app/migrations/0014_merge_20200919_1517.py b/app/migrations/0014_merge_20200919_1517.py new file mode 100644 index 0000000..518c4a3 --- /dev/null +++ b/app/migrations/0014_merge_20200919_1517.py @@ -0,0 +1,14 @@ +# Generated by Django 3.1 on 2020-09-19 19:17 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0012_remove_tag_category'), + ('app', '0013_auto_20200918_2317'), + ] + + operations = [ + ] diff --git a/app/static/css/explore.css b/app/static/css/explore.css index 9eb3491..83f4432 100644 --- a/app/static/css/explore.css +++ b/app/static/css/explore.css @@ -31,4 +31,4 @@ .chosen-container ul.chosen-results li.highlighted { background-image: none; background-color: var(--cirrus-primary); -} +} \ No newline at end of file diff --git a/app/static/css/style.css b/app/static/css/style.css index 46c849c..12de2b5 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -72,7 +72,7 @@ div.header { .btn-primary { border: 2px solid var(--cirrus-primary) !important; - border-radius: 2px; + border-radius: 2px } .btn-primary:hover { @@ -80,11 +80,6 @@ div.header { color: var(--cirrus-primary) !important; } -.frame__body .btn-primary:hover { - background: white; - color: var(--cirrus-primary) !important; -} - button:focus, a:focus, input:focus { box-shadow: none !important; } @@ -99,10 +94,6 @@ footer { letter-spacing: 2px; } -.thin-footer { - letter-spacing: 0.5px; -} - .pointer-cursor { cursor: pointer; } @@ -115,17 +106,6 @@ footer { margin-bottom: 0px !important; } -.btn-primary { - border: 2px solid var(--cirrus-primary) !important; - border-radius: 2px -} - -.btn-primary:hover { - background: inherit; - color: var(--cirrus-primary) !important; - background: white; -} - button:focus, a:focus, input:focus { box-shadow: none !important; } @@ -209,11 +189,6 @@ button:focus, a:focus, input:focus { cursor: pointer; } -.tile__title { - font-weight: bold; - color: var(--cirrus-primary); -} - .card.u-flex-column.h-100.slide-up { padding-bottom: 1.5em; } @@ -222,6 +197,11 @@ button:focus, a:focus, input:focus { padding: 0.5rem !important; } +.tile__title { + font-weight: bold; + color: var(--cirrus-primary); +} + .tile.level.r { padding: 0.5rem 0px; } @@ -260,6 +240,15 @@ button:focus, a:focus, input:focus { padding-top: 25px 0; } +.frame > .row > p { + width: 100%; +} + +.frame > .row > .img-upload { + max-height: 40vh; + width: auto; +} + .map-container { justify-items: center; } @@ -276,17 +265,8 @@ button:focus, a:focus, input:focus { margin-bottom: 0 0 6px; } -.frame > .row > p { - width: 100%; -} - -.frame > .row > .img-upload { - max-height: 40vh; - width: auto; -} - #profile-block { - padding: 15px; + padding: 15px; } .badges > a { diff --git a/app/templates/base.html b/app/templates/base.html index a500689..216518c 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -4,21 +4,22 @@ - - - - - - + + + + + {% block head %} {% endblock %} + +
@@ -69,7 +70,7 @@
diff --git a/app/templates/explore.html b/app/templates/explore.html index 5ec1956..fdc3349 100644 --- a/app/templates/explore.html +++ b/app/templates/explore.html @@ -109,4 +109,4 @@

{{ name|title }}s

}); }); -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/app/templates/login.html b/app/templates/login.html index 4045c2c..2949f7f 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -8,4 +8,4 @@ {% with type='Login' %} {% include "register_login.html" %} {% endwith %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/app/templates/logout.html b/app/templates/logout.html index 427b584..b5fdca1 100644 --- a/app/templates/logout.html +++ b/app/templates/logout.html @@ -19,4 +19,4 @@
Logged out!
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/app/templates/project.html b/app/templates/project.html index 9a4e01b..d246679 100644 --- a/app/templates/project.html +++ b/app/templates/project.html @@ -1 +1 @@ -{% extends "initiative.html" %} +{% extends "initiative.html" %} \ No newline at end of file diff --git a/app/templates/register.html b/app/templates/register.html index 4f83a87..f437478 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -8,4 +8,4 @@ {% with type='Register' %} {% include "register_login.html" %} {% endwith %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/app/templates/register_login.html b/app/templates/register_login.html index b56b130..76c70a2 100644 --- a/app/templates/register_login.html +++ b/app/templates/register_login.html @@ -28,4 +28,4 @@
-
+
\ No newline at end of file diff --git a/app/templates/userhome.html b/app/templates/userhome.html index 5338307..20c2e63 100644 --- a/app/templates/userhome.html +++ b/app/templates/userhome.html @@ -181,4 +181,4 @@
{% endblock %} - + \ No newline at end of file From 52bb65998cff53688deaade8177277231fdba6c0 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Sat, 19 Sep 2020 19:38:35 -0400 Subject: [PATCH 05/16] Add an extra newline at the end of each file --- app/static/css/explore.css | 2 +- app/static/css/style.css | 4 ++-- app/templates/base.html | 2 +- app/templates/challenge.html | 2 +- app/templates/edit_profile.html | 2 +- app/templates/explore.html | 2 +- app/templates/initiative.html | 2 +- app/templates/login.html | 2 +- app/templates/logout.html | 2 +- app/templates/project.html | 2 +- app/templates/register.html | 2 +- app/templates/register_login.html | 2 +- app/templates/userhome.html | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/static/css/explore.css b/app/static/css/explore.css index 83f4432..9eb3491 100644 --- a/app/static/css/explore.css +++ b/app/static/css/explore.css @@ -31,4 +31,4 @@ .chosen-container ul.chosen-results li.highlighted { background-image: none; background-color: var(--cirrus-primary); -} \ No newline at end of file +} diff --git a/app/static/css/style.css b/app/static/css/style.css index 12de2b5..fd7283a 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -72,7 +72,7 @@ div.header { .btn-primary { border: 2px solid var(--cirrus-primary) !important; - border-radius: 2px + border-radius: 2px; } .btn-primary:hover { @@ -281,4 +281,4 @@ button:focus, a:focus, input:focus { height: 25px; position: relative; top: 5px; -} \ No newline at end of file +} diff --git a/app/templates/base.html b/app/templates/base.html index 216518c..c078b0e 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -102,4 +102,4 @@ - \ No newline at end of file + diff --git a/app/templates/challenge.html b/app/templates/challenge.html index d60387e..353eb40 100644 --- a/app/templates/challenge.html +++ b/app/templates/challenge.html @@ -45,4 +45,4 @@

Projects posted to this challenge

{% endfor %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/edit_profile.html b/app/templates/edit_profile.html index 6552ec3..d6d8188 100644 --- a/app/templates/edit_profile.html +++ b/app/templates/edit_profile.html @@ -87,4 +87,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/explore.html b/app/templates/explore.html index fdc3349..5ec1956 100644 --- a/app/templates/explore.html +++ b/app/templates/explore.html @@ -109,4 +109,4 @@

{{ name|title }}s

}); }); -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/initiative.html b/app/templates/initiative.html index 8d2e1a2..ecd12fc 100644 --- a/app/templates/initiative.html +++ b/app/templates/initiative.html @@ -135,4 +135,4 @@

{{ initiative.name }}

{% block frames %} {% endblock %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/login.html b/app/templates/login.html index 2949f7f..4045c2c 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -8,4 +8,4 @@ {% with type='Login' %} {% include "register_login.html" %} {% endwith %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/logout.html b/app/templates/logout.html index b5fdca1..427b584 100644 --- a/app/templates/logout.html +++ b/app/templates/logout.html @@ -19,4 +19,4 @@
Logged out!
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/project.html b/app/templates/project.html index d246679..9a4e01b 100644 --- a/app/templates/project.html +++ b/app/templates/project.html @@ -1 +1 @@ -{% extends "initiative.html" %} \ No newline at end of file +{% extends "initiative.html" %} diff --git a/app/templates/register.html b/app/templates/register.html index f437478..4f83a87 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -8,4 +8,4 @@ {% with type='Register' %} {% include "register_login.html" %} {% endwith %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/register_login.html b/app/templates/register_login.html index 76c70a2..b56b130 100644 --- a/app/templates/register_login.html +++ b/app/templates/register_login.html @@ -28,4 +28,4 @@ - \ No newline at end of file + diff --git a/app/templates/userhome.html b/app/templates/userhome.html index 20c2e63..5338307 100644 --- a/app/templates/userhome.html +++ b/app/templates/userhome.html @@ -181,4 +181,4 @@ {% endblock %} - \ No newline at end of file + From 55c21ef7ac640c34f38f3a6b9b53f65b97ceb18d Mon Sep 17 00:00:00 2001 From: aava Date: Sat, 19 Sep 2020 20:27:43 -0400 Subject: [PATCH 06/16] save for merge --- app/fixtures/challenges.json | 2 +- app/fixtures/projects.json | 5 +- app/fixtures/users.json | 4 +- app/migrations/0012_remove_tag_category.py | 2 +- app/migrations/0013_auto_20200918_2317.py | 2 +- app/migrations/0013_auto_20200919_0144.py | 23 ++++++ app/models.py | 44 ++++++++++- app/static/css/explore.css | 7 +- app/static/css/style.css | 32 +++++++- app/templates/base.html | 41 ++++++---- app/templates/base_form.html | 64 ++++++++++++++++ app/templates/challenge.html | 87 ++++++++++++---------- app/templates/edit_profile.html | 15 ++-- app/templates/explore.html | 34 +++++---- app/templates/initiative.html | 52 +++++++------ app/templates/login.html | 12 ++- app/templates/logout.html | 31 ++++---- app/templates/project.html | 2 +- app/templates/register.html | 12 ++- app/templates/register_login.html | 29 ++++++-- app/templates/userhome.html | 29 ++++---- app/templatetags/class_name.py | 6 +- app/templatetags/mistune.py | 6 +- app/urls.py | 19 ++++- app/views.py | 78 ++++++++++++++++++- requirements.txt | 4 + stratus/settings.py | 27 +++++++ 27 files changed, 497 insertions(+), 172 deletions(-) create mode 100644 app/migrations/0013_auto_20200919_0144.py create mode 100644 app/templates/base_form.html diff --git a/app/fixtures/challenges.json b/app/fixtures/challenges.json index 3860c8e..384a37a 100644 --- a/app/fixtures/challenges.json +++ b/app/fixtures/challenges.json @@ -71,7 +71,7 @@ }, { "model": "app.challenge", - "pk": 5, + "pk": 1, "fields": { "name": "Empty challenge", "description": "", diff --git a/app/fixtures/projects.json b/app/fixtures/projects.json index 657b814..46454c3 100644 --- a/app/fixtures/projects.json +++ b/app/fixtures/projects.json @@ -19,8 +19,7 @@ 24, 28, 33, - 34, - 43 + 34 ], "contributors": [ 1, @@ -122,7 +121,7 @@ }, { "model": "app.project", - "pk": 5, + "pk": 1, "fields": { "challenge": 2, "name": "empty project", diff --git a/app/fixtures/users.json b/app/fixtures/users.json index 11a7b4c..d710200 100644 --- a/app/fixtures/users.json +++ b/app/fixtures/users.json @@ -1,7 +1,7 @@ [ { "model": "auth.user", - "pk": 5, + "pk": 1, "fields": { "password": "pbkdf2_sha256$216000$POj2zR0yKZQS$mcUhC9gNnucxwm+NKt2hsyJyyYtLNP/Gb+Lgs0D9kto=", "last_login": "2020-09-16T01:45:38.627Z", @@ -19,7 +19,7 @@ }, { "model": "auth.user", - "pk": 6, + "pk": 2, "fields": { "password": "pbkdf2_sha256$216000$FfORCEOBUW0L$Mm8QEYRpl92/COJ9rJuXMpWgegkWgbW6Oa8SxUT+P2o=", "last_login": null, diff --git a/app/migrations/0012_remove_tag_category.py b/app/migrations/0012_remove_tag_category.py index 9cc5fc9..1db911e 100644 --- a/app/migrations/0012_remove_tag_category.py +++ b/app/migrations/0012_remove_tag_category.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ('app', '0011_auto_20200915_1139'), + ('app', '0012_auto_20200918_2316'), ] operations = [ diff --git a/app/migrations/0013_auto_20200918_2317.py b/app/migrations/0013_auto_20200918_2317.py index 5ae8bd7..5cefe66 100644 --- a/app/migrations/0013_auto_20200918_2317.py +++ b/app/migrations/0013_auto_20200918_2317.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ('app', '0012_auto_20200918_2316'), + ('app', '0012_remove_tag_category'), ] operations = [ diff --git a/app/migrations/0013_auto_20200919_0144.py b/app/migrations/0013_auto_20200919_0144.py new file mode 100644 index 0000000..ff0bdb5 --- /dev/null +++ b/app/migrations/0013_auto_20200919_0144.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.10 on 2020-09-19 05:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0013_auto_20200918_2317'), + ] + + operations = [ + migrations.AlterField( + model_name='challenge', + name='creators', + field=models.ManyToManyField(help_text='Creators of this challenge which can edit its properties. Removing yourself will make it impossible to edit this challenge.', related_name='created_challenges', to='app.Profile', verbose_name='Creators'), + ), + migrations.AlterField( + model_name='project', + name='creators', + field=models.ManyToManyField(help_text='Creators of this project which can edit its properties. Removing yourself will make it impossible for you to edit this project.', related_name='created_projects', to='app.Profile', verbose_name='Creators'), + ), + ] diff --git a/app/models.py b/app/models.py index 23f96b1..df43de6 100644 --- a/app/models.py +++ b/app/models.py @@ -2,9 +2,12 @@ from django.contrib.auth.models import User from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ValidationError from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver +from django.urls import reverse +from django.utils import timezone class SocialLink(models.Model): @@ -131,7 +134,8 @@ class Challenge(models.Model): Profile, related_name="created_challenges", verbose_name="Creators", - help_text="Creators of this challenge which can edit its properties.", + help_text="Creators of this challenge which can edit its properties. Removing yourself " + + "will make it impossible to edit this challenge.", ) created = models.DateField( auto_now_add=True, @@ -164,12 +168,36 @@ class Challenge(models.Model): help_text="Cover image of this challenge.", ) + def clean(self): + if self.start and not self.end: + raise ValidationError("An end date must be provided if you have a start date.") + if not self.start and self.end: + raise ValidationError("A start date must be provided if you have an end date.") + if self.start and self.end and self.start >= self.end: + raise ValidationError("The end date must be after the start date.") + @property def short_creators(self): if self.creators.count() == 1: return self.creators.first().username return "%s, et al." % self.creators.first().username + def can_edit(self, user): + if not user.is_authenticated: + return False + return self.creators.all().filter(id=user.profile.id).exists() + + def get_absolute_url(self): + return reverse("challenge", args=[self.pk]) + + def get_edit_url(self): + return reverse("challenge_edit", args=[self.pk]) + + def is_open(self): + if not self.start or not self.end: + return True + return self.start <= timezone.now() <= self.end + def __str__(self): return self.name @@ -204,7 +232,8 @@ class Project(models.Model): Profile, related_name="created_projects", verbose_name="Creators", - help_text="Creators of this project which can edit its properties.", + help_text="Creators of this project which can edit its properties. Removing yourself will " + + "make it impossible for you to edit this project.", ) created = models.DateField( auto_now_add=True, verbose_name="Creation Date", help_text="Date this project was created." @@ -222,6 +251,17 @@ def short_creators(self): return self.creators.first().username return "%s, et al." % self.creators.first().username + def can_edit(self, user): + if not user.is_authenticated: + return False + return self.creators.all().filter(id=user.profile.id).exists() + + def get_absolute_url(self): + return reverse("project", args=[self.pk]) + + def get_edit_url(self): + return reverse("project_edit", args=[self.pk]) + def __str__(self): return self.name diff --git a/app/static/css/explore.css b/app/static/css/explore.css index 83f4432..95f9d49 100644 --- a/app/static/css/explore.css +++ b/app/static/css/explore.css @@ -9,11 +9,12 @@ background-image: none; border: 1px solid #ddd; padding: .6rem 1.1rem; - padding-left: 2.75rem; - border-radius: 3px; transition: var(--animation-duration); } +select[multiple].input-contains-icon + .chosen-container > .chosen-choices { + padding-left: 2.75rem; +} .chosen-container-multi .chosen-choices li.search-field input[type=text] { font-family: "Nunito Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; transition: none; @@ -31,4 +32,4 @@ .chosen-container ul.chosen-results li.highlighted { background-image: none; background-color: var(--cirrus-primary); -} \ No newline at end of file +} diff --git a/app/static/css/style.css b/app/static/css/style.css index 12de2b5..60ed4a2 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -72,7 +72,7 @@ div.header { .btn-primary { border: 2px solid var(--cirrus-primary) !important; - border-radius: 2px + border-radius: 2px; } .btn-primary:hover { @@ -197,9 +197,14 @@ button:focus, a:focus, input:focus { padding: 0.5rem !important; } +<<<<<<< HEAD .tile__title { font-weight: bold; color: var(--cirrus-primary); +======= +.row [class^=col-]:not(.col-12) { + padding: 0.5rem !important; +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 } .tile.level.r { @@ -281,4 +286,27 @@ button:focus, a:focus, input:focus { height: 25px; position: relative; top: 5px; -} \ No newline at end of file +} +<<<<<<< HEAD +======= + +.frame .form-section { + padding-bottom: 1.5rem !important; +} + +.btn-grey { + background-color: var(--grid-grey) !important; + border-color: var(--grid-grey) !important; + color: var(--grey-mid) !important; +} + +.btn-grey:hover { + background-color: white !important; + color: var(--cirrus-primary) !important; +} +@media only screen and (min-width: 769px) { + .buttons { + position: absolute; + } +} +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 diff --git a/app/templates/base.html b/app/templates/base.html index 216518c..0ed3fd9 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1,11 +1,18 @@ -{% load static %} +<<<<<<< HEAD +======= + + + + + +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 @@ -25,8 +32,8 @@
@@ -42,21 +49,27 @@ - {% if request.user.is_authenticated %} + - {% else %} + {% else %} {% endif %}
@@ -100,6 +113,8 @@
- + + {% block scripts %} + {% endblock %} - \ No newline at end of file + diff --git a/app/templates/base_form.html b/app/templates/base_form.html new file mode 100644 index 0000000..61e310a --- /dev/null +++ b/app/templates/base_form.html @@ -0,0 +1,64 @@ +{% extends "base.html" %} + +{% block head %} +{{ header }} | Stratus + + + +{% endblock %} + +{% block body %} +
+
+
+

{{ header }}

+ Blue fields are mandatory. + {% if form.errors %} +

There were errors in your form. Please correct them.

+ {% endif %} + {% for error in form.non_field_errors() %} +

{{ error }}

+ {% endfor %} +
+
+ {% csrf_token %} +
+ {% for field in form %} +
+
+ {{ field.label_tag() }} +
+
+
+ {{ field }} + {% if field.help_text %} +
+ {{ field.help_text }} +
+ {% endif %} + {% for error in field.errors %} +
+ {{ error }} +
+ {% endfor %} +
+
+
+ {% endfor %} +
+
+ +
+
+
+
+{% endblock %} + +{% block scripts %} + + +{% endblock %} diff --git a/app/templates/challenge.html b/app/templates/challenge.html index d60387e..90b7d58 100644 --- a/app/templates/challenge.html +++ b/app/templates/challenge.html @@ -1,48 +1,57 @@ {% extends "initiative.html" %} -{% load static %} + +{% block buttons %} +{% if initiative.is_open() %} + + Create Project + +{% endif %} +{{ super() }} +{% endblock %} + {% block frames %} -

Heat map

-

Contributions by region

+

Heat map

+

Contributions by region

-
-
- -
-
+
+
+ +
+
-
-

Projects posted to this challenge

-
- {% for project in projects %} -
-
-
- {% if project.image %} -
- {% else %} -
- {% endif %} -
-
-
-
-
-

{{ project.name }}

-

By {{ project.short_creators }}

-
+
+

Projects posted to this challenge

+
+ {% for project in projects %} +
+
+
+ {% if project.image %} +
+ {% else %} +
+ {% endif %} +
+
+
+
+
+

{{ project.name }}

+

By {{ project.short_creators }}

-
-

{{ project.description|truncatechars:80 }}

-
- +
+
+

{{ project.description|truncatechars(80) }}

+
+
- {% endfor %} -
-{% endblock %} \ No newline at end of file +
+ {% endfor %} +
+{% endblock %} diff --git a/app/templates/edit_profile.html b/app/templates/edit_profile.html index 6552ec3..005b65f 100644 --- a/app/templates/edit_profile.html +++ b/app/templates/edit_profile.html @@ -1,12 +1,11 @@ {% extends "base.html" %} -{% load static %} {% block body %}
- +
@@ -17,7 +16,7 @@

Username

-

{{ user.username }}

+

{{ request.user.username }}

@@ -28,7 +27,7 @@

Email

-

{{ user.email }}

+

{{ request.user.email }}

@@ -47,11 +46,11 @@
{% csrf_token %} - {% for error in form.non_field_errors %} + {% for error in form.non_field_errors() %} {{ error }} {% endfor %}
- {{ form.description.label_tag }} + {{ form.description.label_tag() }} {{ form.description }} {% for error in form.description.errors %} {{ error }} @@ -83,8 +82,8 @@
- + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/explore.html b/app/templates/explore.html index fdc3349..b22d1bb 100644 --- a/app/templates/explore.html +++ b/app/templates/explore.html @@ -1,16 +1,19 @@ {% extends "base.html" %} -{% load static %} {% block head %} +<<<<<<< HEAD Explore | HackItForward +======= +Explore | Stratus +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 - - - + + + {% endblock %} {% block body %} -{% if not user.is_authenticated %} +{% if not request.user.is_authenticated %}
@@ -22,7 +25,7 @@

Conquer the world's challenges - together

{% endif %}
- {% for name, object_list in objects.items %} + {% for name, object_list in objects.items() %} {# searching options #}
@@ -33,7 +36,7 @@

{{ name|title }}s

+ value="{{ q|default("") }}">
@@ -60,13 +63,13 @@

{{ name|title }}s

{# submission display #}
{% for object in object_list %} -
+
{% if object.image %}
{% else %} -
+
{% endif %}
@@ -80,24 +83,25 @@

{{ name|title }}s

-

{{ object.description|truncatechars:48 }}

+

{{ object.description|truncatechars(48) }}

- {% empty %} + {% endfor %} + {% if not object_list %}
{% if q or selected_tags %} -

No {{ name }}s matching your query have been found. Perhaps try {{ selected_tags|yesno:"selecting less tags,broadening your search" }}?

+

No {{ name }}s matching your query have been found. Perhaps try {{ "selecting less tags" if selected_tags else "broadening your search" }}?

{% else %}

No {{ name }}s have been published yet.

{% endif %}
- {% endfor %} + {% endif %}
{% endfor %}
@@ -109,4 +113,4 @@

{{ name|title }}s

}); }); -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/initiative.html b/app/templates/initiative.html index 8d2e1a2..b1e1ea8 100644 --- a/app/templates/initiative.html +++ b/app/templates/initiative.html @@ -1,8 +1,4 @@ {% extends "base.html" %} -{% load static %} -{% get_media_prefix %} -{% load mistune %} -{% load class_name %} {% block head %} {{ initiative.name }} | HackItForward @@ -14,16 +10,23 @@

{{ initiative.name }}

-
- {% if initiative.image %} - - {% else %} - +
+ {% block buttons %} + {% if initiative.can_edit(request.user) %} + Edit {% endif %} -
-
- {{ initiative.description|mistune }} -
+ {% endblock %} +
+
+ {% if initiative.image %} + + {% else %} + + {% endif %} +
+
+ {{ initiative.description|mistune }} +
@@ -37,7 +40,7 @@

{{ initiative.name }}

@@ -53,8 +56,8 @@

{{ initiative.name }}

Tags: - {% for tag in initiative.tags.all %} - {{ tag.name }} + {% for tag in initiative.tags.all() %} + {{ tag.name }} {% endfor %}

@@ -70,15 +73,20 @@

{{ initiative.name }}

Creators: - {% for creator in initiative.creators.all %} - {{ creator.username }} + {% for creator in initiative.creators.all() %} + {{ creator.username }} {% endfor %}

+<<<<<<< HEAD {% if initiative.contributors.exists %} +======= + + {% if initiative.contributors %} +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47
@@ -87,8 +95,8 @@

{{ initiative.name }}

Contributors: - {% for contributor in initiative.contributors.all %} - {{ contributor.username }} + {% for contributor in initiative.contributors.all() %} + {{ contributor.username }} {% endfor %}

@@ -120,7 +128,7 @@

{{ initiative.name }}

Links: - {% for link in links.all %} + {% for link in links.all() %} {% endfor %}

@@ -135,4 +143,4 @@

{{ initiative.name }}

{% block frames %} {% endblock %}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/login.html b/app/templates/login.html index 2949f7f..99ee8d5 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -1,11 +1,15 @@ {% extends "base.html" %} {% block head %} +<<<<<<< HEAD Login | HackItForward +======= +Login | Stratus +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 {% endblock %} {% block body %} - {% with type='Login' %} - {% include "register_login.html" %} - {% endwith %} -{% endblock %} \ No newline at end of file +{% with type='Login' %} + {% include "register_login.html" %} +{% endwith %} +{% endblock %} diff --git a/app/templates/logout.html b/app/templates/logout.html index b5fdca1..5583c67 100644 --- a/app/templates/logout.html +++ b/app/templates/logout.html @@ -1,22 +1,25 @@ {% extends "base.html" %} -{% load static %} {% block head %} +<<<<<<< HEAD Logout | HackItForward +======= +Logout | Stratus +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 {% endblock %} {% block body %} -
-
- -
-
Logged out!
-
We hoped you enjoyed your visit, come back soon!.
+
+
+ +
+
Logged out!
+
We hoped you enjoyed your visit, come back soon!.
-
- -
-
-{% endblock %} \ No newline at end of file +
+ +
+
+{% endblock %} diff --git a/app/templates/project.html b/app/templates/project.html index d246679..9a4e01b 100644 --- a/app/templates/project.html +++ b/app/templates/project.html @@ -1 +1 @@ -{% extends "initiative.html" %} \ No newline at end of file +{% extends "initiative.html" %} diff --git a/app/templates/register.html b/app/templates/register.html index f437478..e4a2ab9 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -1,11 +1,15 @@ {% extends "base.html" %} {% block head %} +<<<<<<< HEAD Register | HackItForward +======= +Register | Stratus +>>>>>>> 58bdd679792c97a035cacf09e2c7ffcc18475f47 {% endblock %} {% block body %} - {% with type='Register' %} - {% include "register_login.html" %} - {% endwith %} -{% endblock %} \ No newline at end of file +{% with type='Register' %} + {% include "register_login.html" %} +{% endwith %} +{% endblock %} diff --git a/app/templates/register_login.html b/app/templates/register_login.html index 76c70a2..a303015 100644 --- a/app/templates/register_login.html +++ b/app/templates/register_login.html @@ -1,23 +1,21 @@ -{% load static %} -
- +
{% csrf_token %} - {% for error in form.non_field_errors %} + {% for error in form.non_field_errors() %} {{ error }} {% endfor %} {% for field in form %}
- + {{ field }} {% for error in field.errors %} {{ error }} @@ -27,5 +25,20 @@
+
+ + +
-
\ No newline at end of file +
diff --git a/app/templates/userhome.html b/app/templates/userhome.html index 20c2e63..12e01c2 100644 --- a/app/templates/userhome.html +++ b/app/templates/userhome.html @@ -1,8 +1,4 @@ - {% extends "base.html" %} -{% load static %} -{% load mistune %} -{% get_media_prefix %} {% block head %} {{ profile.username }}'s Home | HackItForward @@ -20,13 +16,13 @@

Your Projects

{% for project in projects %} -
+
{% if project.image %}
{% else %} -
+
{% endif %}
@@ -34,7 +30,7 @@

Your Projects

{{ project.name }}

- {% if profile in project.creators.all %} + {% if profile in project.creators.all() %} Creator {% else %} Contributor @@ -44,21 +40,22 @@

Your Projects

- {% empty %} + {% endfor %} + {% if not projects %}
{% if profile != request.user.profile %}

{{ profile.username }} has not created or contributed to any projects yet.

{% else %} -

No projects yet! Check out Explore for some challenges to submit to and projects to contribute to.

+

No projects yet! Check out Explore for some challenges to submit to and projects to contribute to.

{% endif %}
- {% endfor %} + {% endif %}

@@ -75,7 +72,7 @@

Profile

{% if profile != request.user.profile %}

{{ profile.username }} has not given any user details.

{% else %} -

No user details! Go to Edit Profile to add something about yourself.

+

No user details! Go to Edit Profile to add something about yourself.

{% endif %}
{% else %} @@ -112,7 +109,7 @@

Profile

Badges: - {% for badge in profile.badges.all %} + {% for badge in profile.badges.all() %} @@ -151,7 +148,7 @@

Links: - {% for link in links.all %} + {% for link in links.all() %} {% endfor %}

@@ -168,7 +165,7 @@

Interests: - {% for tag in profile.tags.all %} + {% for tag in profile.tags.all() %} {{ tag.name }} {% endfor %}

@@ -181,4 +178,4 @@
{% endblock %} - \ No newline at end of file + diff --git a/app/templatetags/class_name.py b/app/templatetags/class_name.py index bb32827..12a3acb 100644 --- a/app/templatetags/class_name.py +++ b/app/templatetags/class_name.py @@ -1,8 +1,6 @@ -from django import template +from django_jinja import library -register = template.Library() - -@register.filter(name="class_name") +@library.filter def get_class_name(model): return model.__class__.__name__ diff --git a/app/templatetags/mistune.py b/app/templatetags/mistune.py index 202882a..30eabd7 100644 --- a/app/templatetags/mistune.py +++ b/app/templatetags/mistune.py @@ -1,11 +1,9 @@ import mistune -from django import template +from django_jinja import library from django.utils.safestring import mark_safe -register = template.Library() - -@register.filter(name="mistune", is_safe=True) +@library.filter def mistune_html_no_highlight(text): markdown = mistune.create_markdown( plugins=["strikethrough", "footnotes", "table"], diff --git a/app/urls.py b/app/urls.py index c396837..f114f1d 100644 --- a/app/urls.py +++ b/app/urls.py @@ -1,15 +1,30 @@ -from django.urls import path +from django.urls import include, path from . import views from django.contrib.auth import views as auth_views urlpatterns = [ path("", views.IndexView.as_view(), name="index"), path("register/", views.RegisterView.as_view(), name="register"), - path("login/", auth_views.LoginView.as_view(template_name="login.html"), name="login"), + path( + "login/", + auth_views.LoginView.as_view(template_name="login.html", redirect_authenticated_user=True), + name="login", + ), + path("login/social/", include("social_django.urls", namespace="social")), path("logout/", auth_views.LogoutView.as_view(template_name="logout.html"), name="logout"), + # TODO: Rename this to fit in line with project and challenge style. path("home/", views.UserView.as_view(), name="home"), path("home/", views.UserView.as_view(), name="user"), path("profile/edit", views.EditProfileView.as_view(), name="edit_profile"), + path("challenge/create/", views.ChallengeCreateView.as_view(), name="challenge_create"), path("challenge//", views.ChallengeView.as_view(), name="challenge"), + path("challenge//edit/", views.ChallengeUpdateView.as_view(), name="challenge_edit"), + path("project/create/", views.ProjectCreateView.as_view(), name="project_create"), + path( + "project/create//", + views.ProjectChallengeCreateView.as_view(), + name="project_challenge_create", + ), path("project//", views.ProjectView.as_view(), name="project"), + path("project//edit/", views.ProjectUpdateView.as_view(), name="project_edit"), ] diff --git a/app/views.py b/app/views.py index 6257616..c87fd4d 100644 --- a/app/views.py +++ b/app/views.py @@ -1,17 +1,22 @@ from app.forms import ProfileUpdateForm from app.models import Challenge, Profile, Project, SocialLinkAttachement, Tag +from django.core.exceptions import PermissionDenied from django.contrib.auth import login from django.contrib.auth.forms import UserCreationForm -from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin +from django.contrib.auth.mixins import ( + LoginRequiredMixin, + PermissionRequiredMixin, + UserPassesTestMixin, +) from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.http import Http404 from django.shortcuts import get_object_or_404, redirect -from django.urls import reverse_lazy +from django.urls import reverse, reverse_lazy from django.views.generic.base import TemplateView, ContextMixin from django.views.generic.detail import DetailView -from django.views.generic.edit import FormView, UpdateView +from django.views.generic.edit import CreateView, FormView, UpdateView class IndexView(TemplateView): @@ -117,6 +122,38 @@ def get_context_data(self, **kwargs): return context +class GenericFormMixin(LoginRequiredMixin, ContextMixin): + template_name = "base_form.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["header"] = ("Edit %s" if self.object else "Create %s") % self.model.__name__ + context["submit"] = "Save" if self.object else "Create" + return context + + +class ChallengeFormView(GenericFormMixin): + model = Challenge + fields = ["name", "image", "description", "creators", "start", "end", "tags"] + + def get_form_class(self, *args, **kwargs): + form_class = super().get_form_class(*args, **kwargs) + form_class.base_fields["start"].widget.attrs["placeholder"] = "YYYY-MM-DD HH:MM" + form_class.base_fields["end"].widget.attrs["placeholder"] = "YYYY-MM-DD HH:MM" + return form_class + + +class ChallengeCreateView(PermissionRequiredMixin, ChallengeFormView, CreateView): + permission_required = "app.add_challenge" + + +class ChallengeUpdateView(ChallengeFormView, UpdateView): + def dispatch(self, request, *args, **kwargs): + if not self.get_object().can_edit(request.user): + raise PermissionDenied + return super().dispatch(request, *args, **kwargs) + + class ChallengeView(InitiativeMixin, TemplateView): template_name = "challenge.html" classname = Challenge @@ -131,6 +168,41 @@ def get_context_data(self, **kwargs): return context +class ProjectFormView(GenericFormMixin): + model = Project + fields = ["name", "image", "description", "creators", "contributors", "tags"] + + +class ProjectCreateView(ProjectFormView, CreateView): + pass + + +class ProjectChallengeCreateView(ProjectCreateView): + def dispatch(self, *args, **kwargs): + self.challenge = get_object_or_404(Challenge, pk=kwargs["pk"]) + if not self.challenge.is_open(): + raise PermissionDenied + return super().dispatch(*args, **kwargs) + + def get_context_data(self, *args, **kwargs): + context = super().get_context_data(*args, **kwargs) + context["header"] = "Create Project for '%s'" % self.challenge.name + return context + + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.challenge = self.challenge + self.object.save() + return super().form_valid(form) + + +class ProjectUpdateView(ProjectFormView, UpdateView): + def dispatch(self, request, *args, **kwargs): + if not self.get_object().can_edit(request.user): + raise PermissionDenied + return super().dispatch(request, *args, **kwargs) + + class ProjectView(InitiativeMixin, TemplateView): template_name = "project.html" classname = Project diff --git a/requirements.txt b/requirements.txt index 69edd73..b133fa5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,12 +4,16 @@ black==20.8b1 click==7.1.2 Django==3.1 django-colorfield==0.3.2 +django-jinja==2.6.0 +Jinja2==2.11.2 +MarkupSafe==1.1.1 mistune==2.0.0a4 mypy-extensions==0.4.3 pathspec==0.8.0 Pillow==7.2.0 pytz==2020.1 regex==2020.7.14 +social-auth-app-django==4.0.0 sqlparse==0.3.1 toml==0.10.1 typed-ast==1.4.1 diff --git a/stratus/settings.py b/stratus/settings.py index 342dccc..7c49c28 100644 --- a/stratus/settings.py +++ b/stratus/settings.py @@ -41,6 +41,7 @@ 'app', 'colorfield', + 'social_django', ] MIDDLEWARE = [ @@ -56,6 +57,26 @@ ROOT_URLCONF = 'stratus.urls' TEMPLATES = [ + { + "BACKEND": "django_jinja.backend.Jinja2", + "APP_DIRS": True, + "OPTIONS": { + "match_extension": ".html", + "match_regex": r"^(?!admin/).*", + "app_dirname": "templates", + # Don't introduce whitespace because of tags + "trim_blocks": True, + "lstrip_blocks": True, + "filters": { + 'mistune': 'app.templatetags.mistune.mistune_html_no_highlight', + 'class_name': 'app.templatetags.class_name.get_class_name', + }, + "context_processors": [ + "app.context_processors.profile", + "django.contrib.messages.context_processors.messages", + ], + }, + }, { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], @@ -104,6 +125,12 @@ }, ] +AUTHENTICATION_BACKENDS = [ + 'social_core.backends.google.GoogleOAuth2', + 'social_core.backends.github.GithubOAuth2', + 'django.contrib.auth.backends.ModelBackend', +] + # Internationalization # https://docs.djangoproject.com/en/3.0/topics/i18n/ From a823428e46cde73a12a213c103d30b0ff76a9987 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Sat, 19 Sep 2020 21:01:44 -0400 Subject: [PATCH 07/16] attempt to resolve issues --- app/static/css/style.css | 138 ++++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 68 deletions(-) diff --git a/app/static/css/style.css b/app/static/css/style.css index fd7283a..b627c4c 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -16,9 +16,13 @@ --cirrus-link-dark: var(--cirrus-primary) !important; } +* { + box-sizing: border-box; + word-wrap: break-word; +} + body { background-color: var(--grey-light); - box-sizing: border-box; } .frame { @@ -26,6 +30,10 @@ body { padding-top: 25px 0; } +.placeholder img { + height: 100px; +} + .header { margin-bottom: 0; } @@ -53,9 +61,7 @@ body { } div.header { - margin: 10px 0 0; - transition: border-color var(--animation-duration); - border-color: var(--cirrus-bg); + margin-top: 10px; } .logo { @@ -80,6 +86,11 @@ div.header { color: var(--cirrus-primary) !important; } +.frame__body .btn-primary:hover { + background: white; + color: var(--cirrus-primary) !important; +} + button:focus, a:focus, input:focus { box-shadow: none !important; } @@ -88,16 +99,6 @@ footer { background-color: var(--grey-dark) !important; } -.bold-footer { - margin-block-start: 2.33em; - margin-block-end: 2.33em; - letter-spacing: 2px; -} - -.pointer-cursor { - cursor: pointer; -} - .footer-title-par { font-size: 1.5rem; } @@ -106,26 +107,18 @@ footer { margin-bottom: 0px !important; } -button:focus, a:focus, input:focus { - box-shadow: none !important; -} - - - -/** - * Register / Login / Logout - */ - -.tab-container li a { - transition: var(--animation-duration); -} - -.tab-container:hover li:hover a:hover { - border-bottom: 2px solid var(--cirrus-primary); +.bold-footer { + font-weight: bold; + margin-block-start: 2.33em; + margin-block-end: 2.33em; + letter-spacing: 3px; } -.placeholder img { - height: 100px; +.thin-footer { + font-family:'Nunito-Sans', sans-serif; + font-weight: 100; + letter-spacing: 0.5px; + color: var(--grey-mid); } @@ -163,19 +156,15 @@ button:focus, a:focus, input:focus { } .header-margin { - margin-top: 50px !important; + margin-top: 30px !important; } /** - * Cards + * Front Page Cards */ -.card p { - word-wrap: break-word; -} - .card-container { min-height: 230px !important; } @@ -189,29 +178,20 @@ button:focus, a:focus, input:focus { cursor: pointer; } -.card.u-flex-column.h-100.slide-up { - padding-bottom: 1.5em; -} - -.row [class^=col-]:not(.col-12) { - padding: 0.5rem !important; -} - .tile__title { font-weight: bold; color: var(--cirrus-primary); } -.tile.level.r { - padding: 0.5rem 0px; +.tile__title > span{ + color: var(--grey-dark); } -.tile__title > span { - font-weight: 400; - color: var(--grey-mid); +.card.u-flex-column.h-100.slide-up { + padding-bottom: 1.5em; } -.row:not(.no-space) [class^=col-]:not(.col-12) { +.row [class^=col-]:not(.col-12) { padding: 0.5rem !important; } @@ -219,10 +199,14 @@ button:focus, a:focus, input:focus { padding: 0.5rem 0px; } +.tile__container > .tile__title > span { + font-weight: 300; +} + /** - * Challenge / Userhome + * Challenge */ #challenge-frame { @@ -236,19 +220,6 @@ button:focus, a:focus, input:focus { margin-top: 18px; } -.frame { - padding-top: 25px 0; -} - -.frame > .row > p { - width: 100%; -} - -.frame > .row > .img-upload { - max-height: 40vh; - width: auto; -} - .map-container { justify-items: center; } @@ -262,10 +233,20 @@ button:focus, a:focus, input:focus { } .form-section > label + p { - margin-bottom: 0 0 6px; + margin-bottom: 6px; + margin-top: 0; +} + +.frame > .row > p { + width: 100%; } -#profile-block { +.frame > .row > .img-upload { + max-height: 40vh; + width: auto; +} + +#profile-block.card { padding: 15px; } @@ -282,3 +263,24 @@ button:focus, a:focus, input:focus { position: relative; top: 5px; } + +.frame .form-section { + padding-bottom: 1.5rem !important; +} + +.btn-grey { + background-color: var(--grid-grey) !important; + border-color: var(--grid-grey) !important; + color: var(--grey-mid) !important; +} + +.btn-grey:hover { + background-color: white !important; + color: var(--cirrus-primary) !important; +} + +@media only screen and (min-width: 769px) { + .buttons { + position: absolute; + } +} From 73ff119c3b03f374faecda86223ba9fd29a688fa Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Mon, 21 Sep 2020 22:10:23 -0400 Subject: [PATCH 08/16] Small fixes to the merging, remove !important tags due to having swapped order of our 's --- app/migrations/0015_merge_20200921_2140.py | 14 ++++++ app/static/css/style.css | 48 ++++++++++----------- app/static/img/logo.png | Bin 110523 -> 25110 bytes app/templates/base.html | 6 +-- app/templates/initiative.html | 1 - 5 files changed, 41 insertions(+), 28 deletions(-) create mode 100644 app/migrations/0015_merge_20200921_2140.py diff --git a/app/migrations/0015_merge_20200921_2140.py b/app/migrations/0015_merge_20200921_2140.py new file mode 100644 index 0000000..36f1d90 --- /dev/null +++ b/app/migrations/0015_merge_20200921_2140.py @@ -0,0 +1,14 @@ +# Generated by Django 3.1 on 2020-09-22 01:40 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0014_merge_20200919_1517'), + ('app', '0013_auto_20200919_0144'), + ] + + operations = [ + ] diff --git a/app/static/css/style.css b/app/static/css/style.css index b627c4c..518b879 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -7,13 +7,13 @@ --grey-mid: #6c6c6c; --grey-dark: #242424; - --cirrus-primary: #3c8cc9 !important; - --cirrus-text: #aacbe3 !important; - --cirrus-primary-light: #c1d5e3 !important; - --cirrus-accent-border: #56a0d6 !important; - --cirrus-accent-hover: var(--grey-light) !important; - --cirrus-select-bg: #aacbe3 !important; - --cirrus-link-dark: var(--cirrus-primary) !important; + --cirrus-primary: #3c8cc9; + --cirrus-text: #aacbe3; + --cirrus-primary-light: #c1d5e3; + --cirrus-accent-border: #56a0d6; + --cirrus-accent-hover: var(--grey-light); + --cirrus-select-bg: #aacbe3; + --cirrus-link-dark: var(--cirrus-primary); } * { @@ -42,7 +42,7 @@ body { text-transform: uppercase; color: var(--grey-dark); font-family: 'Montserrat', sans-serif; - font-weight: 600 !important; + font-weight: 600; color: var(--cirrus-primary); } @@ -69,7 +69,7 @@ div.header { } .tab-container li a { - transition: var(--animation-duration); !important; + transition: var(--animation-duration); } .tab-container:hover li:hover a:hover { @@ -77,26 +77,26 @@ div.header { } .btn-primary { - border: 2px solid var(--cirrus-primary) !important; + border: 2px solid var(--cirrus-primary); border-radius: 2px; } .btn-primary:hover { background: inherit; - color: var(--cirrus-primary) !important; + color: var(--cirrus-primary); } .frame__body .btn-primary:hover { background: white; - color: var(--cirrus-primary) !important; + color: var(--cirrus-primary); } button:focus, a:focus, input:focus { - box-shadow: none !important; + box-shadow: none; } footer { - background-color: var(--grey-dark) !important; + background-color: var(--grey-dark); } .footer-title-par { @@ -104,7 +104,7 @@ footer { } .content { - margin-bottom: 0px !important; + margin-bottom: 0px; } .bold-footer { @@ -156,7 +156,7 @@ footer { } .header-margin { - margin-top: 30px !important; + margin-top: 30px; } @@ -166,7 +166,7 @@ footer { */ .card-container { - min-height: 230px !important; + min-height: 230px; } .card-body .content { @@ -192,7 +192,7 @@ footer { } .row [class^=col-]:not(.col-12) { - padding: 0.5rem !important; + padding: 0.5rem; } .tile.level.r { @@ -265,18 +265,18 @@ footer { } .frame .form-section { - padding-bottom: 1.5rem !important; + padding-bottom: 1.5rem; } .btn-grey { - background-color: var(--grid-grey) !important; - border-color: var(--grid-grey) !important; - color: var(--grey-mid) !important; + background-color: var(--grid-grey); + border-color: var(--grid-grey); + color: var(--grey-mid); } .btn-grey:hover { - background-color: white !important; - color: var(--cirrus-primary) !important; + background-color: white; + color: var(--cirrus-primary); } @media only screen and (min-width: 769px) { diff --git a/app/static/img/logo.png b/app/static/img/logo.png index f2998585c8057ebca191fdf29518a95a05b5bd05..744ee50b46ec0d36144dadd7997d8b09e3192230 100644 GIT binary patch literal 25110 zcmeFZi96KY8$bS@VJw5}OC)5;7LrJ$p$OTtObTNQ5v4{HnuxO1l$6L)*|Lr{OJYi- zMS84LB9-)5k`@%*{*0nfLpgbD#Tu-LHE&XCyh;?GPYJ6EO@E zu(I6lgkhWv^pA%Nz8P1z-2wkwdBmK2WLMa}BS*c%{V`L&Fdu(;s{`Hv{!aeheo=>> z`Ws`IcdgZSQ|HJx69YTL-&$VMqI|t`AFH5AYbM%b4H((%Q8wX$8lUKFJ^`>~H*$YtuyewGb++4~f~nh0+hO9q4Q4zAl+~TV zo(Vm9zt?nsX({F9hA|o-z(?1bbe)1Kr?qJW44bkRAv0MII)*>fTk#kcsm!ZMY4~pC z6=RF!86to@>*wu@w)Sn49(QBQEZ4=vw@%3a$opF2<#sK!c(D}ro4fCnkW_K~fM9jq zuCqU4a}s_}q%=i?AWiA;_I`I($8nK@YS_){!jpv5o+XK28|>$(E5{;2!;l`f22pUn z8`XXVTt-6t;uFxMlour|{Yjr-|Gx^`H_t4X_K=?lWOoCg`K@Z*L^0@@l-fp4MO4`0Eca#1u* zco7oGi8uGa>am$yUd!JVu*KXJCwYZ!DfwN}WF~pt#i5o#0@8x~HvL1~t1Z3buE89y!>p(Fb?Ho`Q45fWrKv*rk1jRq&5sld1&fLv zc;am`e;qxr2HC$!ORsC?>HD1TRRi|E2vb-laY^Vzz;_x&Z?wz?Jj+EwLEsz3FmVoN z?>_eKo-(*4bYj=9)6?6_;y;e|dqV{f!<2fzZ%aXSku`jgdY%(ru~U3o1g5bvN253SpQO2l$h?2)UmPmDIQ`0M70&{!4}~ zXL1+@pk&4d5i-d-Re18{HtAq5HPG$>K!=l0>cJWn??9g%bwC)y)`I8co$fC#OKOBW z$NLsGulVu$E`$jz8;LoRE|O{%vc?(-wMPNIC=6Y@@VUY)m2E_ZBh2qUa@$`@S|#-~ zGAqMTnoLSg6+YWFKfmQ!;>A@U`Wp~kEnND2B<$A?sf{dooPrAqm-Z$~c(Y`JZ-RoE zd%)~BbuBifqrwe&;;`PMZku?t%#<}O^DI@k=#xj&$hA=I z`Dr^t*xlz&*xfycI3?R{tCq_9IS_nun^%)bZ^rZ|<2O2<@rzl}JV^FJLPRFR3iTb< z^gEf4E+9NK?&RRJ%!y%iO3pUd^H7g_Bj^vU2krb^srbTbm2#?L!UZabDhF6t6&Nx6 zQ6X)*j4cfbcmCoLu zIoKiGJ5?ua*_{0{;LXo`PYJc1UjN8Rv-zOYdo!3NpC9yVmnwY8TVypt0ZAB^j_&>v zd*-;Z#yNy4yippT~bb=7TMw?ggNUxFtO@4LoneoSs`W`D*b4h+); zt{fgQP*%N!r1pCTiisVYsa%RK7Bat$@Zz@}&)0Uoizmv`H%Aq$P+$)mJHOs+^^0u- zo-@J76X;s7v)okS??=7ns1hT$4}*?rKf!o)x)yC-E&Gbl)JoPcE(6AG5SRhg(uSoJ zIKTU+(!cIG^}gUyA)t#{3;HnJV9_>f(@byO>; WdLXnXyy5RKJ(T5#_liXO$F0H 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 literal 110523 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�HWskefhTG$sA2Q;Q?v8cDn25&g zVrt+hcL!G~Bri{gPuhY6t!=cMjqGFE51Hz%PV0l-OTT-$20AjJw`^VJBNiwQ~9c!S1J2m+E&Y@MSD z1}`~SjGu?DAD?NR=1N+jv2^Y*Epmh(HuA4_2sr)3H~uP>JWQIFrh5WHVLna4yWz{y z)M0~*!dBrqvulC0&H7-g5IMRqe`XjjayV~bD%P5r3g;;G{=v?vvYnY>%c4ku2l($v z1$?a$N8JHJH&qM=2XUz5ZDpg$w=)1U&ELPMxU6_CyV;K9ZogS!<-mR{&5yoQhtXXd zNqwE4r-1zJnz zd+55k65~S0;5pTgt6%wkxiZVIeg}K948p|^iWc47sU$S9@S zG4+%!rP$7|;aSZ8;%>s3zT{E18vH1)UP=KI{PgK0zg@oRYHAZ^)r99|OMj+Pr5jDf zg1&=?BG$m)I8ZVjlThdC^J%&;TwQev-py8%Hf;BT8r`YNXX#u+K639J{RQ4T9&E9e z0q%Z{`QQ_a7AN>1>k6M33hG9IcjdD4QcU(ZNpMcIkHpBD)Z_li)#G?90SBV;tSKJH_Szopa z-fKDO77H@J*07wGn#-NhsCE)s?Q>EkuMB4O4{}ouC4+Azo3-A$d6qUJ?Uu>%bf(L^ zKG+!1tU0{dnOL`zJvo`M*sRsO`-<<5O5bVkHA6pUsdA-*`Rjy9*wrF>%0AS=r>R4JDn#BX1f);;$00qTd) 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 diff --git a/app/templates/base.html b/app/templates/base.html index 59fa835..ad02795 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -4,7 +4,7 @@ - + @@ -24,7 +24,7 @@ {% block head %} {% endblock %} - + @@ -117,7 +117,7 @@
-

+

© 2020 HackItForward

diff --git a/app/templates/initiative.html b/app/templates/initiative.html index ece7a5b..5193c94 100644 --- a/app/templates/initiative.html +++ b/app/templates/initiative.html @@ -114,7 +114,6 @@

{{ initiative.name }}

{% endfor %} - {% if links.exists %} {% if links.exists() %}
From 48756a7531067ccc4d180c667f17b4c970fd795d Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Mon, 21 Sep 2020 22:13:42 -0400 Subject: [PATCH 09/16] Remove app/migrations/0014 --- app/migrations/0014_merge_20200919_1517.py | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 app/migrations/0014_merge_20200919_1517.py diff --git a/app/migrations/0014_merge_20200919_1517.py b/app/migrations/0014_merge_20200919_1517.py deleted file mode 100644 index 518c4a3..0000000 --- a/app/migrations/0014_merge_20200919_1517.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.1 on 2020-09-19 19:17 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0012_remove_tag_category'), - ('app', '0013_auto_20200918_2317'), - ] - - operations = [ - ] From 5a68ea1a64943ef6fa9bd2629fb9de03d8c41d44 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Mon, 21 Sep 2020 22:29:42 -0400 Subject: [PATCH 10/16] Change Hack It Forward to HackItForward on explore.html, remove app/migrations/0015 --- app/migrations/0015_merge_20200921_2140.py | 14 -------------- app/templates/explore.html | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 app/migrations/0015_merge_20200921_2140.py diff --git a/app/migrations/0015_merge_20200921_2140.py b/app/migrations/0015_merge_20200921_2140.py deleted file mode 100644 index 36f1d90..0000000 --- a/app/migrations/0015_merge_20200921_2140.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.1 on 2020-09-22 01:40 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0014_merge_20200919_1517'), - ('app', '0013_auto_20200919_0144'), - ] - - operations = [ - ] diff --git a/app/templates/explore.html b/app/templates/explore.html index 88c59c3..17803f3 100644 --- a/app/templates/explore.html +++ b/app/templates/explore.html @@ -13,7 +13,7 @@
-

Hack It Forward

+

HackItForward

Conquer the world's challenges - together

From ef9629ac06fd55bd05e170d481201b16543132f7 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Mon, 21 Sep 2020 22:35:11 -0400 Subject: [PATCH 11/16] Remove duplicate icon link in base.html, shorten size of logo from 60px -> 50px --- app/static/css/style.css | 2 +- app/templates/base.html | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/static/css/style.css b/app/static/css/style.css index 518b879..dff4dbc 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -65,7 +65,7 @@ div.header { } .logo { - height: 60px; + height: 50px; } .tab-container li a { diff --git a/app/templates/base.html b/app/templates/base.html index ad02795..8f3089b 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -4,7 +4,6 @@ - @@ -12,12 +11,12 @@ + + + - - - From fbc51dc88c32473f129ce4edc45e041c4334c22f Mon Sep 17 00:00:00 2001 From: aava Date: Sun, 27 Sep 2020 15:11:16 -0400 Subject: [PATCH 12/16] Edit-profile map removed --- app/models.py | 21 +++++++++++++++++++++ app/static/css/style.css | 16 +++++++++++++++- app/static/js/map.js | 23 ----------------------- app/templates/base.html | 6 ++++++ app/templates/edit_profile.html | 12 +++++++++--- 5 files changed, 51 insertions(+), 27 deletions(-) delete mode 100644 app/static/js/map.js diff --git a/app/models.py b/app/models.py index df43de6..9f36029 100644 --- a/app/models.py +++ b/app/models.py @@ -101,6 +101,13 @@ class Profile(models.Model): verbose_name="Tags", help_text="Tags associated with this user.", ) + location = models.ManyToManyField( + Location, + blank=True, + related_name="challenges", + verbose_name="Location", + help_text="Locations of user" + ) @property def username(self): @@ -109,6 +116,13 @@ def username(self): def __str__(self): return self.user.username +class Location(models.Model): + name = models.CharField(max_length=24, verbose_name="Name", help_text="Name of this tag.") + longitude = models.DecimalField(max_digits=9, decimal_places=6) + latitude = models.DecimalField(max_digits=9, decimal_places=6) + + def __str__(self): + return self.name class Challenge(models.Model): name = models.CharField( @@ -130,6 +144,13 @@ class Challenge(models.Model): verbose_name="Tags", help_text="Tags associated with this challenge.", ) + location = models.ManyToManyField( + Location, + blank=True, + related_name="challenges", + verbose_name="Location", + help_text="Locations of users appart of challenge" + ) creators = models.ManyToManyField( Profile, related_name="created_challenges", diff --git a/app/static/css/style.css b/app/static/css/style.css index dff4dbc..c2876a7 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -224,8 +224,22 @@ footer { justify-items: center; } +#geocoder { + position: relative; + z-index: 1; + width: 50%; + left: 50%; + margin-left: -25%; + top: 10px; +} + +.mapboxgl-ctrl-geocoder { + min-width: 100%; + margin-left:10%; +} + #map { - height: 50vh; + margin-top: 75px; } .form-section > label { diff --git a/app/static/js/map.js b/app/static/js/map.js deleted file mode 100644 index 4f817b7..0000000 --- a/app/static/js/map.js +++ /dev/null @@ -1,23 +0,0 @@ -mapboxgl.accessToken = 'pk.eyJ1IjoibmlraXN1IiwiYSI6ImNrZWdla2NvOTB1MWIyeHVxN3lrZmExb3EifQ._NPc57J623HhSRubXYPcIg'; -var coordinates = document.getElementById('map'); -var map = new mapboxgl.Map({ - container: 'map', - style: 'mapbox://styles/mapbox/dark-v10', - center: [0, 0], - zoom: 2 -}); - -var marker = new mapboxgl.Marker({ - draggable: true - }) - .setLngLat([0, 0]) - .addTo(map); - -function onDragEnd() { - var lngLat = marker.getLngLat(); - // coordinates.style.display = 'block'; - // coordinates.innerHTML = - // 'Longitude: ' + lngLat.lng + '
Latitude: ' + lngLat.lat; -} - -marker.on('dragend', onDragEnd); \ No newline at end of file diff --git a/app/templates/base.html b/app/templates/base.html index 8f3089b..2adc50d 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -20,6 +20,12 @@ + + + + + + {% block head %} {% endblock %} diff --git a/app/templates/edit_profile.html b/app/templates/edit_profile.html index 005b65f..80472ad 100644 --- a/app/templates/edit_profile.html +++ b/app/templates/edit_profile.html @@ -71,9 +71,15 @@
-

Click and drag the marker.

-
Map should be here
+
+ + +
+
+ + +

@@ -82,7 +88,7 @@
- + From 85847cddf1a68d0ce26ac7a88657ef3515e7c424 Mon Sep 17 00:00:00 2001 From: aava Date: Sun, 27 Sep 2020 17:11:26 -0400 Subject: [PATCH 13/16] country and city fields added for Profile --- app/forms.py | 2 +- app/migrations/0014_auto_20200927_1620.py | 23 ++++++++++++++++++++++ app/models.py | 24 ++--------------------- app/templates/edit_profile.html | 9 ++++----- 4 files changed, 30 insertions(+), 28 deletions(-) create mode 100644 app/migrations/0014_auto_20200927_1620.py diff --git a/app/forms.py b/app/forms.py index 43fd8b5..50f7f34 100644 --- a/app/forms.py +++ b/app/forms.py @@ -8,7 +8,7 @@ class ProfileUpdateForm(ModelForm): class Meta: model = Profile - fields = ["description", "tags"] + fields = ["description", "tags", "country", "city"] hidden_fields = ["longitude", "latitude"] def __init__(self, *args, **kwargs): diff --git a/app/migrations/0014_auto_20200927_1620.py b/app/migrations/0014_auto_20200927_1620.py new file mode 100644 index 0000000..d6ff634 --- /dev/null +++ b/app/migrations/0014_auto_20200927_1620.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1 on 2020-09-27 20:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0013_auto_20200919_0144'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='city', + field=models.CharField(blank=True, help_text='City of origin of user', max_length=30, null=True, verbose_name='city'), + ), + migrations.AddField( + model_name='profile', + name='country', + field=models.CharField(blank=True, help_text='Country of origin of user', max_length=30, null=True, verbose_name='country'), + ), + ] diff --git a/app/models.py b/app/models.py index 9f36029..45d0f5d 100644 --- a/app/models.py +++ b/app/models.py @@ -87,6 +87,8 @@ class Profile(models.Model): description = models.TextField( blank=True, verbose_name="Description", help_text="User description." ) + country = models.CharField(blank=True, null=True, max_length=30, verbose_name="country", help_text="Country of origin of user") + city = models.CharField(blank=True, null=True,max_length=30, verbose_name="city", help_text="City of origin of user") badges = models.ManyToManyField( Badge, blank=True, @@ -101,13 +103,6 @@ class Profile(models.Model): verbose_name="Tags", help_text="Tags associated with this user.", ) - location = models.ManyToManyField( - Location, - blank=True, - related_name="challenges", - verbose_name="Location", - help_text="Locations of user" - ) @property def username(self): @@ -116,14 +111,6 @@ def username(self): def __str__(self): return self.user.username -class Location(models.Model): - name = models.CharField(max_length=24, verbose_name="Name", help_text="Name of this tag.") - longitude = models.DecimalField(max_digits=9, decimal_places=6) - latitude = models.DecimalField(max_digits=9, decimal_places=6) - - def __str__(self): - return self.name - class Challenge(models.Model): name = models.CharField( max_length=100, verbose_name="Name", help_text="Name of this challenge." @@ -144,13 +131,6 @@ class Challenge(models.Model): verbose_name="Tags", help_text="Tags associated with this challenge.", ) - location = models.ManyToManyField( - Location, - blank=True, - related_name="challenges", - verbose_name="Location", - help_text="Locations of users appart of challenge" - ) creators = models.ManyToManyField( Profile, related_name="created_challenges", diff --git a/app/templates/edit_profile.html b/app/templates/edit_profile.html index 80472ad..f5ca990 100644 --- a/app/templates/edit_profile.html +++ b/app/templates/edit_profile.html @@ -72,13 +72,13 @@
+ Country:
- - + {{ form.country }}
+ City:
- - + {{ form.city }}
@@ -88,7 +88,6 @@
- From 8565f712a1f2567d9d2e7ae192d85481672ec780 Mon Sep 17 00:00:00 2001 From: aava Date: Tue, 29 Sep 2020 21:03:33 -0400 Subject: [PATCH 14/16] oneliner displays added --- app/templates/challenge.html | 2 +- app/templates/explore.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/templates/challenge.html b/app/templates/challenge.html index 90b7d58..5cec477 100644 --- a/app/templates/challenge.html +++ b/app/templates/challenge.html @@ -43,7 +43,7 @@

Projects posted to this challenge

-

{{ project.description|truncatechars(80) }}

+

{{ project.one_liner|truncatechars(80) }}

-

{{ object.description|truncatechars(48) }}

+

{{ object.one_liner|truncatechars(48) }}

-
+
From a6975c64b8e8c202d5b2907f37b90cb9a50be788 Mon Sep 17 00:00:00 2001 From: aava Date: Thu, 1 Oct 2020 09:47:31 -0400 Subject: [PATCH 16/16] remove map from front-end 2 --- app/templates/challenge.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/templates/challenge.html b/app/templates/challenge.html index 5cec477..dcac6aa 100644 --- a/app/templates/challenge.html +++ b/app/templates/challenge.html @@ -13,11 +13,11 @@

Heat map

Contributions by region

-
+

Projects posted to this challenge