From f984849a5a8fe44e1b60dc4c82b5d054dbcd43c5 Mon Sep 17 00:00:00 2001 From: mostafanasser2000 Date: Thu, 25 Jul 2024 19:26:29 +0300 Subject: [PATCH 1/7] enhance the style of some platform pages --- accounts/templates/accounts/login.html | 119 +++++++++- courses/templates/courses/course.html | 143 +++++++++--- courses/templates/courses/course_list.html | 25 +- courses/templates/courses/enrollment.html | 2 +- courses/templates/courses/leaderboard.html | 2 +- .../courses/leaderboard_score_breakdown.html | 4 +- courses/templates/homework/homework.html | 200 +++++++--------- courses/templates/projects/eval.html | 4 +- courses/templates/projects/eval_submit.html | 6 +- courses/templates/projects/project.html | 2 +- courses/templates/projects/results.html | 4 +- templates/base.html | 215 +++++++++++++----- 12 files changed, 495 insertions(+), 231 deletions(-) diff --git a/accounts/templates/accounts/login.html b/accounts/templates/accounts/login.html index c4b9374..7fd7bdf 100644 --- a/accounts/templates/accounts/login.html +++ b/accounts/templates/accounts/login.html @@ -1,3 +1,116 @@ -{% for provider in providers %} - Login with {{ provider.name }}
-{% endfor %} \ No newline at end of file +{% load static %} + + + + + + + Login + + + + + + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/courses/templates/courses/course.html b/courses/templates/courses/course.html index 29c08fb..caed7c8 100644 --- a/courses/templates/courses/course.html +++ b/courses/templates/courses/course.html @@ -1,43 +1,119 @@ {% extends 'base.html' %} {% load tz %} +{% block styles %} + +{% endblock %} + {% block breadcrumbs %} -
  • {{ course.title }}
  • + {% endblock %} {% block content %} -

    {{ course.title }}

    - -
    -

    {{ course.description }}

    +
    +

    {{ course.title }}

    +

    {{ course.description }}

    -
    -

    - {% if course.first_homework_scored %} - Course leaderboard - {% endif %} - {% if is_authenticated %} - Edit course profile - {% endif %} -

    +
    + {% if course.first_homework_scored %} + Course leaderboard + {% endif %} + {% if is_authenticated %} + Edit course profile + {% endif %}
    - {% if is_authenticated and course.first_homework_scored %} {% endif %} {% if homeworks %}
    -

    Homework

    +

    Homeworks

    {% for hw in homeworks %} -
    +
    -
    +
    {% if hw.state == 'CL' %} {{ hw.title }} {% else %} @@ -46,20 +122,20 @@

    Homework

    {% endif %}
    -
    +
    {{ hw.due_date | date:"c" }}
    -
    +
    {% if hw.state == 'CL' %} - Closed + Closed {% elif hw.is_scored and hw.submitted %} - Scored ({{ hw.score }}) + Scored ({{ hw.score }}) {% elif hw.is_scored %} - Scored + Scored {% elif not hw.is_scored and hw.submitted %} - Submitted + Submitted {% else %} - Open + Open {% endif %}
    @@ -70,11 +146,11 @@

    Homework

    {% if projects %}
    -

    Projects

    +

    Projects

    {% for project in projects %} -
    +
    +{% endblock %} diff --git a/courses/templates/courses/enrollment.html b/courses/templates/courses/enrollment.html index 77a3ab3..71ed12c 100644 --- a/courses/templates/courses/enrollment.html +++ b/courses/templates/courses/enrollment.html @@ -1,7 +1,7 @@ {% extends 'base.html' %} {% block breadcrumbs %} -
  • {{ course.title }}
  • + {% endblock %} {% block content %} diff --git a/courses/templates/courses/leaderboard.html b/courses/templates/courses/leaderboard.html index 5b9f58c..96b3805 100644 --- a/courses/templates/courses/leaderboard.html +++ b/courses/templates/courses/leaderboard.html @@ -1,7 +1,7 @@ {% extends 'base.html' %} {% block breadcrumbs %} -
  • {{ course.title }}
  • + {% endblock %} {% block content %} diff --git a/courses/templates/courses/leaderboard_score_breakdown.html b/courses/templates/courses/leaderboard_score_breakdown.html index 5bf8d53..edbb092 100644 --- a/courses/templates/courses/leaderboard_score_breakdown.html +++ b/courses/templates/courses/leaderboard_score_breakdown.html @@ -1,8 +1,8 @@ {% extends 'base.html' %} {% block breadcrumbs %} -
  • {{ enrollment.course.title }}
  • -
  • Leaderboard
  • + + {% endblock %} {% block content %} diff --git a/courses/templates/homework/homework.html b/courses/templates/homework/homework.html index d3f422a..1d9256a 100644 --- a/courses/templates/homework/homework.html +++ b/courses/templates/homework/homework.html @@ -2,13 +2,79 @@ {% load static %} -{% block breadcrumbs %} -
  • {{ course.title }}
  • +{% block styles %} + {% endblock %} +{% block breadcrumbs %} + +{% endblock breadcrumbs %} {% block content %} - -

    +
    +

    {{ homework.title }} for {{ course.title }}

    @@ -43,12 +109,9 @@

    {% endif %} {% endif %} -
    -

    {{ homework.description }}

    -
    - -
    -

    Due date: {{ homework.due_date |date:"c" }} (local time)

    +
    +

    {{ homework.description }}

    +

    Due date: {{ homework.due_date |date:"c" }} (local time)

    {% if not is_authenticated %} @@ -65,7 +128,7 @@

    Questions

    {% endif %} {% for question, answer in question_answers %} -
    +

    Question {{ forloop.counter }}. {{ question.text }} {% if question.scores_for_correct_answer != 0 %} @@ -122,120 +185,13 @@

    Questions

    {% endfor %} - {% if homework.homework_url_field %} -
    - - -
    Please provide a valid URL.
    -
    - {% endif %} - - {% include 'include/learning_in_public_links.html' with course=course learning_in_public_cap=homework.learning_in_public_cap learning_in_public_links=submission.learning_in_public_links disabled=disabled accepting_submissions=accepting_submissions %} - - - {% if homework.time_spent_lectures_field %} -
    - - -
    - {% endif %} - - {% if homework.time_spent_homework_field %} -
    - - -
    - {% endif %} - - {% if homework.problems_comments_field %} -
    - - -
    - {% endif %} - - {% if course.faq_document_url and homework.faq_contribution_field %} -
    - - -
    - {% endif %} - {% if not homework.is_scored %}
    {% if is_authenticated %}
    +{% endblock %} \ No newline at end of file diff --git a/courses/templates/projects/eval.html b/courses/templates/projects/eval.html index 6c9b1e4..62e168e 100644 --- a/courses/templates/projects/eval.html +++ b/courses/templates/projects/eval.html @@ -3,8 +3,8 @@ {% load static %} {% block breadcrumbs %} -
  • {{ course.title }}
  • -
  • {{ project.title }}
  • + + {% endblock %} {% block content %} diff --git a/courses/templates/projects/eval_submit.html b/courses/templates/projects/eval_submit.html index 782a410..405ec3b 100644 --- a/courses/templates/projects/eval_submit.html +++ b/courses/templates/projects/eval_submit.html @@ -3,9 +3,9 @@ {% load static %} {% block breadcrumbs %} -
  • {{ course.title }}
  • -
  • {{ project.title }}
  • -
  • Evaluations
  • + + + {% endblock %} diff --git a/courses/templates/projects/project.html b/courses/templates/projects/project.html index d22a164..522f722 100644 --- a/courses/templates/projects/project.html +++ b/courses/templates/projects/project.html @@ -3,7 +3,7 @@ {% load static %} {% block breadcrumbs %} -
  • {{ course.title }}
  • + {% endblock %} {% block content %} diff --git a/courses/templates/projects/results.html b/courses/templates/projects/results.html index beb0e7b..ce276b3 100644 --- a/courses/templates/projects/results.html +++ b/courses/templates/projects/results.html @@ -3,8 +3,8 @@ {% load static %} {% block breadcrumbs %} -
  • {{ course.title }}
  • -
  • {{ project.title }}
  • + + {% endblock %} {% block content %} diff --git a/templates/base.html b/templates/base.html index c1ca6dd..edff014 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,66 +1,173 @@ {% load static %} - + + + + + {% block title %}Course Management{% endblock %} - - - - {% block title %}Course Management{% endblock %} + + + + + + - - - - + + + + +
    +
    +
    + + +
    +
    + +
    +
    + {% block content %}{% endblock %} +
    +
    -
    - - - + - \ No newline at end of file + + + From 1b8868b7f73c59812b45c5f945c1136481d69523 Mon Sep 17 00:00:00 2001 From: mostafanasser2000 Date: Thu, 25 Jul 2024 19:54:58 +0300 Subject: [PATCH 2/7] removed links that are used for test --- accounts/templates/accounts/login.html | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/accounts/templates/accounts/login.html b/accounts/templates/accounts/login.html index 7fd7bdf..bb97ee1 100644 --- a/accounts/templates/accounts/login.html +++ b/accounts/templates/accounts/login.html @@ -100,14 +100,7 @@ Continue with {{ provider.name }} {% endfor %} - - +

    From 9c12ade11f28ba506358a36997248b261db745e5 Mon Sep 17 00:00:00 2001 From: mostafanasser2000 Date: Thu, 25 Jul 2024 22:27:51 +0300 Subject: [PATCH 3/7] enhance form to submit homework --- courses/templates/homework/homework.html | 124 +++++++++++++++++++++-- 1 file changed, 116 insertions(+), 8 deletions(-) diff --git a/courses/templates/homework/homework.html b/courses/templates/homework/homework.html index 1d9256a..12d7ceb 100644 --- a/courses/templates/homework/homework.html +++ b/courses/templates/homework/homework.html @@ -70,11 +70,12 @@ {% endblock %} {% block breadcrumbs %} - -{% endblock breadcrumbs %} + +{% endblock %} + {% block content %}
    -

    +

    {{ homework.title }} for {{ course.title }}

    @@ -110,8 +111,8 @@

    {% endif %}
    -

    {{ homework.description }}

    -

    Due date: {{ homework.due_date |date:"c" }} (local time)

    +

    {{ homework.description }}

    +

    Due date: {{ homework.due_date |date:"c" }} (local time)

    {% if not is_authenticated %} @@ -128,7 +129,7 @@

    Questions

    {% endif %} {% for question, answer in question_answers %} -
    +

    Question {{ forloop.counter }}. {{ question.text }} {% if question.scores_for_correct_answer != 0 %} @@ -185,13 +186,120 @@

    Questions

    {% endfor %} + {% if homework.homework_url_field %} +
    + + +
    Please provide a valid URL.
    +
    + {% endif %} + + {% include 'include/learning_in_public_links.html' with course=course learning_in_public_cap=homework.learning_in_public_cap learning_in_public_links=submission.learning_in_public_links disabled=disabled accepting_submissions=accepting_submissions %} + + + {% if homework.time_spent_lectures_field %} +
    + + +
    + {% endif %} + + {% if homework.time_spent_homework_field %} +
    + + +
    + {% endif %} + + {% if homework.problems_comments_field %} +
    + + +
    + {% endif %} + + {% if course.faq_document_url and homework.faq_contribution_field %} +
    + + +
    + {% endif %} + {% if not homework.is_scored %}
    {% if is_authenticated %}
    - \ No newline at end of file diff --git a/courses/static/courses.css b/courses/static/courses.css index 4023e88..a7a1e94 100644 --- a/courses/static/courses.css +++ b/courses/static/courses.css @@ -1,23 +1,33 @@ -/* Apply to the header nav or a div inside the header if it wraps your content */ +body { + font-family: "Roboto", sans-serif; + display: flex; + flex-direction: column; + min-height: 100vh; + margin: 0; +} + +.content-wrapper { + flex: 1; +} + header nav { max-width: 720px; - margin: 0 auto; /* Centers the navigation horizontally */ - padding: 20px 0; /* Vertical padding to match your content block */ + margin: 0 auto; + padding: 20px 0; display: flex; - justify-content: space-between; /* This will space your list and logout/login */ - align-items: center; /* This will align the items vertically */ + justify-content: space-between; + align-items: center; } -/* Ensure the lists within the nav take up the appropriate space */ header nav ul { display: flex; - align-items: center; /* Align list items vertically */ + align-items: center; padding: 0; - margin: 0; /* Reset margins to control spacing explicitly */ + margin: 0; } header nav li:not(:last-child) { - margin-right: 1rem; /* Adds margin to the right of each list item except the last */ + margin-right: 1rem; } nav .breadcrumbs ul { @@ -27,23 +37,42 @@ nav .breadcrumbs ul { align-items: center; } -/* Style each list item */ nav .breadcrumbs ul li { - margin-right: 0.25rem; /* Add some space between the breadcrumbs */ + margin-right: 0.25rem; } -/* Add ">" before each li except the first one using a pseudo-element */ nav .breadcrumbs ul li:not(:first-child)::before { - content: "\f105"; /* FontAwesome's right arrow icon */ + content: "\f105"; font-family: "Font Awesome 5 Free"; color: #000; - padding-right: 0.25rem; /* Add some space before the breadcrumb text */ - font-weight: 900; /* Bold */ + padding-right: 0.25rem; + font-weight: 900; } +.breadcrumb { + background-color: #e9ecef; + padding: 0.75rem 1rem; + margin-left: 15px; + border-radius: 0.25rem; + margin-left: 15px; +} + +.breadcrumb-item + .breadcrumb-item::before { + content: "/"; + color: #6c757d; +} + +.breadcrumb-item a { + color: #0088dd; + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} .form-container { - max-width: 720px; + max-width: 720px; margin: 20px auto; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); padding: 20px; @@ -57,46 +86,45 @@ nav .breadcrumbs ul li:not(:first-child)::before { margin-bottom: 0.5rem; } -/* Questions */ .form-check-label { display: block; color: #5f6368; } .form-control { - box-shadow: none; /* Remove Bootstrap's default shadow */ - border-color: #e0e0e0; /* Light grey border color */ - border-radius: 8px; /* Rounded corners */ + box-shadow: none; + border-color: #e0e0e0; + border-radius: 8px; } -/* Focused Inputs */ .form-control:focus { - border-color: #a6c8ff; /* Highlight color when focused */ - box-shadow: 0 0 0 0.2rem rgba(102, 175, 233, .25); + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } -/* Buttons */ .btn-primary { - background-color: #1a73e8; /* Google's blue */ - border-color: #1a73e8; /* Google's blue */ - box-shadow: none; /* Remove Bootstrap's default shadow */ + background-color: #007bff; + border-color: #007bff; } .btn-primary:hover { - background-color: #1669c7; /* Darker blue on hover */ - border-color: #1669c7; /* Darker blue on hover */ + background-color: #0056b3; + border-color: #0056b3; } -/* Adjustments for smaller screens */ @media (max-width: 576px) { .form-container { max-width: 100%; - padding: 15px; /* Smaller padding on smaller screens */ + padding: 15px; } } -.text-muted a, .text-muted a:visited, .text-muted a:hover, .text-muted a:focus, .text-muted a:active { - color: inherit; /* This makes the link use the color of the parent .text-muted class */ +.text-muted a, +.text-muted a:visited, +.text-muted a:hover, +.text-muted a:focus, +.text-muted a:active { + color: inherit; } #learning-in-public-links .form-control { @@ -107,6 +135,9 @@ nav .breadcrumbs ul li:not(:first-child)::before { margin-bottom: 0; } +.alert { + border-radius: 4px; +} .option-answer-correct { background-color: lightgreen; @@ -117,20 +148,19 @@ nav .breadcrumbs ul li:not(:first-child)::before { } .container .row { - border-bottom: 1px solid #f8f8f8; /* subtle bottom border for each row */ + border-bottom: 1px solid #f8f8f8; } .container .row:last-child { - border-bottom: none; /* remove border for the last row */ + border-bottom: none; } -/* Highlighting for the current student's row */ .bg-info { - background-color: #d1ecf1 !important; /* Adjust color as needed */ + background-color: #d1ecf1 !important; } .tooltip-icon { - margin-left: 4px; /* Adjust as needed */ + margin-left: 4px; } .question .question-image { @@ -139,4 +169,155 @@ nav .breadcrumbs ul li:not(:first-child)::before { height: auto; margin-bottom: 8px; border-radius: 4px; -} \ No newline at end of file +} + +footer { + background-color: #212529; + color: rgba(255, 255, 255, 0.55); + padding: 1.5rem 0; + text-align: center; +} + +.footer-links { + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 1rem; +} + +.footer-links a { + margin: 0 15px; + transition: opacity 0.3s ease; +} + +.footer-links a:hover { + opacity: 0.7; +} + +.footer-icon { + height: 40px; + width: 40px; + font-size: 40px; + color: rgba(255, 255, 255, 0.55); +} + +.course-header { + background-color: #f8f9fa; + border-bottom: 2px solid #e9ecef; + padding: 20px 0; + margin-bottom: 30px; +} + +.course-title { + color: #343a40; + margin-bottom: 10px; +} + +.course-description { + color: #6c757d; + font-size: 1.1em; + margin-bottom: 20px; +} + +.action-buttons { + margin-bottom: 30px; +} + +.action-buttons .btn { + margin-right: 10px; +} + +.section-title { + color: #495057; + border-bottom: 2px solid #dee2e6; + padding-bottom: 10px; + margin-bottom: 20px; +} + +.homework-item, +.project-item { + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 5px; + padding: 15px; + margin-bottom: 15px; + transition: all 0.3s ease; +} + +.homework-item:hover, +.project-item:hover { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); +} + +.item-title { + font-weight: bold; + color: #007bff; +} + +.item-title a { + color: inherit; + text-decoration: none; +} + +.item-title a:hover { + text-decoration: underline; +} + +.item-date { + font-style: italic; + color: #6c757d; +} + +.badge { + font-size: 0.9em; + padding: 5px 10px; +} + +.alert-info { + background-color: #e1f5fe; + border-color: #b3e5fc; + color: #01579b; +} + +.homework-container { + margin: 0 auto; + padding: 20px; + background-color: #f9f9f9; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.homework-title { + color: #333; + border-bottom: 2px solid #007bff; + padding-bottom: 10px; + margin-bottom: 20px; +} + +.homework-meta { + background-color: #e9ecef; + border-radius: 4px; + padding: 10px; + margin-bottom: 20px; +} + +.question { + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 4px; + padding: 15px; + margin-bottom: 20px; +} + +.question-text { + font-weight: bold; + color: #495057; +} + +.form-check { + margin-bottom: 10px; +} + +.text-muted { + font-size: 0.9em; +} diff --git a/courses/static/imgs/default.jpg b/courses/static/imgs/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8924ad89d0137c19b2e68991b78e6c36194c2e2f GIT binary patch literal 33914 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 KC0hkdWB=K}>mj}X literal 0 HcmV?d00001 diff --git a/courses/templates/courses/course.html b/courses/templates/courses/course.html index 803d510..641c720 100644 --- a/courses/templates/courses/course.html +++ b/courses/templates/courses/course.html @@ -1,84 +1,5 @@ {% extends 'base.html' %} {% load tz %} - -{% block styles %} - .course-header { - background-color: #f8f9fa; - border-bottom: 2px solid #e9ecef; - padding: 20px 0; - margin-bottom: 30px; - } - - .course-title { - color: #343a40; - margin-bottom: 10px; - } - - .course-description { - color: #6c757d; - font-size: 1.1em; - margin-bottom: 20px; - } - - .action-buttons { - margin-bottom: 30px; - } - - .action-buttons .btn { - margin-right: 10px; - } - - .section-title { - color: #495057; - border-bottom: 2px solid #dee2e6; - padding-bottom: 10px; - margin-bottom: 20px; - } - - .homework-item, .project-item { - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 5px; - padding: 15px; - margin-bottom: 15px; - transition: all 0.3s ease; - } - - .homework-item:hover, .project-item:hover { - box-shadow: 0 5px 15px rgba(0,0,0,0.1); - } - - .item-title { - font-weight: bold; - color: #007bff; - } - - .item-title a { - color: inherit; - text-decoration: none; - } - - .item-title a:hover { - text-decoration: underline; - } - - .item-date { - font-style: italic; - color: #6c757d; - } - - .badge { - font-size: 0.9em; - padding: 5px 10px; - } - - .alert-info { - background-color: #e1f5fe; - border-color: #b3e5fc; - color: #01579b; - } -{% endblock %} - {% block breadcrumbs %} {% endblock %} diff --git a/courses/templates/courses/course_list.html b/courses/templates/courses/course_list.html index f2c05be..be9c1e7 100644 --- a/courses/templates/courses/course_list.html +++ b/courses/templates/courses/course_list.html @@ -1,5 +1,5 @@ {% extends 'base.html' %} - +{% load static %} {% block content %}

    Courses

    @@ -7,7 +7,7 @@

    Courses

    {% for course in courses %}
    - {{ course.title }} + {{ course.title }}
    {{ course.title }}
    diff --git a/courses/templates/homework/homework.html b/courses/templates/homework/homework.html index 5076d01..a45a8d1 100644 --- a/courses/templates/homework/homework.html +++ b/courses/templates/homework/homework.html @@ -2,70 +2,6 @@ {% load static %} -{% block styles %} - .homework-container { - margin: 0 auto; - padding: 20px; - background-color: #f9f9f9; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); - } - - .homework-title { - color: #333; - border-bottom: 2px solid #007bff; - padding-bottom: 10px; - margin-bottom: 20px; - } - - .homework-meta { - background-color: #e9ecef; - border-radius: 4px; - padding: 10px; - margin-bottom: 20px; - } - - .question { - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 4px; - padding: 15px; - margin-bottom: 20px; - } - - .question-text { - font-weight: bold; - color: #495057; - } - - .form-check { - margin-bottom: 10px; - } - - .form-control:focus { - border-color: #80bdff; - box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25); - } - - .btn-primary { - background-color: #007bff; - border-color: #007bff; - } - - .btn-primary:hover { - background-color: #0056b3; - border-color: #0056b3; - } - - .alert { - border-radius: 4px; - } - - .text-muted { - font-size: 0.9em; - } -{% endblock %} - {% block breadcrumbs %} {% endblock %} diff --git a/templates/base.html b/templates/base.html index fd9007d..2bb8440 100644 --- a/templates/base.html +++ b/templates/base.html @@ -13,70 +13,6 @@ - - From a34742df02dd7491820f6c6190fd49558f4127f6 Mon Sep 17 00:00:00 2001 From: Alexey Grigorev Date: Wed, 21 Aug 2024 22:51:47 +0200 Subject: [PATCH 6/7] added back the form container div --- templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base.html b/templates/base.html index 2bb8440..bb767f8 100644 --- a/templates/base.html +++ b/templates/base.html @@ -72,7 +72,7 @@
    -
    +
    {% block content %}{% endblock %}
    From d051d50591b6f9097963cbccee2dd8e5d2eceee2 Mon Sep 17 00:00:00 2001 From: Alexey Grigorev Date: Thu, 22 Aug 2024 11:49:25 +0200 Subject: [PATCH 7/7] css wip --- courses/models/project.py | 12 ++++---- courses/static/courses.css | 40 ++++++--------------------- courses/templates/courses/course.html | 4 +-- templates/base.html | 2 +- 4 files changed, 18 insertions(+), 40 deletions(-) diff --git a/courses/models/project.py b/courses/models/project.py index c035eb4..1ac9675 100644 --- a/courses/models/project.py +++ b/courses/models/project.py @@ -22,16 +22,16 @@ class ProjectState(Enum): project_state_names = { ProjectState.CLOSED.value: "Closed", - ProjectState.COLLECTING_SUBMISSIONS.value: "Collecting Submissions", - ProjectState.PEER_REVIEWING.value: "Peer Reviewing", - ProjectState.COMPLETED.value: "Completed", + ProjectState.COLLECTING_SUBMISSIONS.value: "Open", + ProjectState.PEER_REVIEWING.value: "Review", + ProjectState.COMPLETED.value: "Scored", } project_status_badge_classes = { ProjectState.CLOSED.value: "bg-secondary", - ProjectState.COLLECTING_SUBMISSIONS.value: "bg-info", - ProjectState.PEER_REVIEWING.value: "bg-warning", - ProjectState.COMPLETED.value: "bg-success", + ProjectState.COLLECTING_SUBMISSIONS.value: "bg-warning", + ProjectState.PEER_REVIEWING.value: "bg-info", + ProjectState.COMPLETED.value: "bg-secondary", } diff --git a/courses/static/courses.css b/courses/static/courses.css index a7a1e94..6891b87 100644 --- a/courses/static/courses.css +++ b/courses/static/courses.css @@ -13,7 +13,6 @@ body { header nav { max-width: 720px; margin: 0 auto; - padding: 20px 0; display: flex; justify-content: space-between; align-items: center; @@ -202,10 +201,7 @@ footer { } .course-header { - background-color: #f8f9fa; - border-bottom: 2px solid #e9ecef; - padding: 20px 0; - margin-bottom: 30px; + padding: 0.7rem 0; } .course-title { @@ -220,7 +216,7 @@ footer { } .action-buttons { - margin-bottom: 30px; + margin-bottom: 2rem; } .action-buttons .btn { @@ -229,34 +225,20 @@ footer { .section-title { color: #495057; - border-bottom: 2px solid #dee2e6; padding-bottom: 10px; - margin-bottom: 20px; } .homework-item, .project-item { - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 5px; - padding: 15px; - margin-bottom: 15px; - transition: all 0.3s ease; -} - -.homework-item:hover, -.project-item:hover { - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); + padding: .5rem } .item-title { - font-weight: bold; color: #007bff; } .item-title a { color: inherit; - text-decoration: none; } .item-title a:hover { @@ -264,13 +246,12 @@ footer { } .item-date { - font-style: italic; color: #6c757d; } .badge { - font-size: 0.9em; - padding: 5px 10px; + font-size: 85%; + padding: .25em .4em; } .alert-info { @@ -280,33 +261,30 @@ footer { } .homework-container { - margin: 0 auto; + /* margin: 0 auto; padding: 20px; background-color: #f9f9f9; border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); */ } .homework-title { color: #333; - border-bottom: 2px solid #007bff; padding-bottom: 10px; margin-bottom: 20px; } .homework-meta { - background-color: #e9ecef; - border-radius: 4px; padding: 10px; margin-bottom: 20px; } .question { - background-color: #fff; + /* background-color: #fff; border: 1px solid #dee2e6; border-radius: 4px; padding: 15px; - margin-bottom: 20px; + margin-bottom: 20px; */ } .question-text { diff --git a/courses/templates/courses/course.html b/courses/templates/courses/course.html index 641c720..77bdc3f 100644 --- a/courses/templates/courses/course.html +++ b/courses/templates/courses/course.html @@ -30,7 +30,7 @@

    {{ course.title }}

    Homeworks

    {% for hw in homeworks %} -
    +
    {% if hw.state == 'CL' %} @@ -67,7 +67,7 @@

    Homeworks

    Projects

    {% for project in projects %} -
    +
    {% if project.state == 'CS' %} diff --git a/templates/base.html b/templates/base.html index bb767f8..b22cfd9 100644 --- a/templates/base.html +++ b/templates/base.html @@ -72,7 +72,7 @@
    -
    +
    {% block content %}{% endblock %}