diff options
| author | Bobby <[email protected]> | 2024-12-17 20:58:14 +0000 |
|---|---|---|
| committer | Bobby <[email protected]> | 2024-12-17 20:58:14 +0000 |
| commit | 70bd8ebf6e0de202cb3a4f52f39766e69f146053 (patch) | |
| tree | 9981e0e453ae6095a51237f1e271af06690e5428 | |
| parent | 79d44e676adeb998c3072b4a58d08815b45d4676 (diff) | |
| download | thatcomputerscientist-70bd8ebf6e0de202cb3a4f52f39766e69f146053.tar.xz thatcomputerscientist-70bd8ebf6e0de202cb3a4f52f39766e69f146053.zip | |
journals just became somewhat real
| -rw-r--r-- | apps/core/views.py | 4 | ||||
| -rw-r--r-- | apps/journals/urls.py | 4 | ||||
| -rw-r--r-- | apps/journals/views.py | 17 | ||||
| -rw-r--r-- | templates/en/core/my/journals.html | 2 | ||||
| -rw-r--r-- | templates/en/journals/single.html | 140 | ||||
| -rw-r--r-- | thatcomputerscientist/settings.py | 2 |
6 files changed, 164 insertions, 5 deletions
diff --git a/apps/core/views.py b/apps/core/views.py index 1790098a..abe1d539 100644 --- a/apps/core/views.py +++ b/apps/core/views.py @@ -13,7 +13,7 @@ def home(request): "title": "Home", } LANGUAGE_CODE = i18npatterns(request.LANGUAGE_CODE) - request.META.update(META) + request.meta.update(META) announcements = Announcement.objects.filter(is_public=True).order_by("-created_at") context = { "announcements": announcements, @@ -29,7 +29,7 @@ def my_journals(request): "title": "My Journals", } LANGUAGE_CODE = i18npatterns(request.LANGUAGE_CODE) - request.META.update(META) + request.meta.update(META) journals = Journal.objects.filter(owner=request.user).order_by("-created_at") context = { "journals": journals, diff --git a/apps/journals/urls.py b/apps/journals/urls.py index 1f7413c2..b4e7db01 100644 --- a/apps/journals/urls.py +++ b/apps/journals/urls.py @@ -3,4 +3,6 @@ from django.urls import path from . import views app_name = "journal" -urlpatterns = [] +urlpatterns = [ + path("<slug:slug>/", views.single_journal, name="single"), +] diff --git a/apps/journals/views.py b/apps/journals/views.py index 91ea44a2..9c3f99f7 100644 --- a/apps/journals/views.py +++ b/apps/journals/views.py @@ -1,3 +1,20 @@ from django.shortcuts import render +from apps.journals.models import Journal +from thatcomputerscientist.utils import i18npatterns + # Create your views here. +def single_journal(request, slug): + try: + journal = Journal.objects.get(slug=slug) + except Journal.DoesNotExist: + journal = None + META = { + "title": f"Journal: {journal.name}" if journal else "Journal Not Found", + } + LANGUAGE_CODE = i18npatterns(request.LANGUAGE_CODE) + request.meta.update(META) + context = { + "journal": journal, + } + return render(request, f"{LANGUAGE_CODE}/journals/single.html", context) diff --git a/templates/en/core/my/journals.html b/templates/en/core/my/journals.html index a3be14bb..b265aed8 100644 --- a/templates/en/core/my/journals.html +++ b/templates/en/core/my/journals.html @@ -78,7 +78,7 @@ <div class="journal-alignment-center">{{ journal.private }}</div> <div class="journal-alignment-center">{{ journal.entries.all|length }}</div> <div class="journal-alignment-center"> - <a href="#view" class="action-button">View</a> + <a href="{% url "journal:single" journal.slug %}" class="action-button">View</a> <a href="#manage" class="action-button">Manage</a> </div> </div> diff --git a/templates/en/journals/single.html b/templates/en/journals/single.html new file mode 100644 index 00000000..e538949f --- /dev/null +++ b/templates/en/journals/single.html @@ -0,0 +1,140 @@ +{% extends 'shared/base.html' %} +{% load static %} +{% block head %} +<style> + .journal-header-area { + width: 780px; + height: 200px; + margin: 0 auto; + display: flex; + align-items: center; + justify-content: center; + border-bottom: 1px solid #ccc; + } + + .journal-content-area { + display: flex; + padding: 4px 0px; + gap: 8px; + } + + .journal-sidebar { + width: 200px; + min-width: 200px; + } + + .journal-stats-area { + background-color: #f4f1e90f; + border-radius: 8px; + } + + .journal-stats-area h3 { + text-align: center; + padding: 8px 0px 4px 0px; + } + + .journal-stats-profile-image { + width: 128px; + height: 128px; + margin: 4px auto; + display: block; + } + + .journal-stats { + display: flex; + justify-content: space-between; + padding: 4px; + background-color: #6446858a; + gap: 12px; + } + + .journal-stats:nth-child(odd) { + background-color: #54266a85; + } + + .journal-stats .stat-name { + font-weight: bold; + } + + .journal-stats:last-child { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + } + + .journal-entry { + background-color: #f4f1e90f; + border-radius: 8px; + padding: 8px; + margin-bottom: 8px; + } + + ..journal-entry-title, .journal-entry-details { + padding: 4px 0px; + } + + .journal-entry-details { + margin-bottom: 8px; + font-size: 0.8em; + } + + .journal-entry-content { + padding: 8px 0px; + } + + {{ journal.custom_css }} +</style> +{% endblock head %} +{% block content %} +<div class="journal-header-area"> + <h1 class="journal-title">{{ journal.name }}<h1> +</div> +<div class="journal-content-area"> + <div class="journal-sidebar"> + <div class="journal-stats-area"> + {% with journal.owner.userprofile_set.first as journal_holder_profile %} + <h3>Journal Holder's Profile</h3> + <img src="{% static 'images/avatars/' %}{{ journal_holder_profile.avatar_url }}.gif" class="journal-stats-profile-image" alt="{{ journal.owner.first_name }}'s Avatar"> + <div class="journal-stats"> + <p class="stat-name">Profile</p> + <p class="stat-value">{{ journal.owner.first_name }} {{ journal.owner.last_name }}</p> + </div> + <div class="journal-stats"> + <p class="stat-name">Bio</p> + <p class="stat-value">{{ journal_holder_profile.bio|linebreaksbr }}</p> + </div> + <div class="journal-stats"> + <p class="stat-name">XP</p> + <p class="stat-value">{{ journal_holder_profile.experience }} / 1000</p> + </div> + <div class="journal-stats"> + <p class="stat-name">Level</p> + <p class="stat-value">{{ journal_holder_profile.level }}</p> + </div> + <div class="journal-stats"> + <p class="stat-name">Journal Entries</p> + <p class="stat-value">{{ journal.entries.all|length }}</p> + </div> + <div class="journal-stats"> + <p class="stat-name">Journal Streak</p> + <p class="stat-value">{{ journal_holder_profile.journal_streak }} days</p> + </div> + <div class="journal-stats"> + <p class="stat-name">Weblog Posts</p> + <p class="stat-value">{{ journal_holder_profile.weblogs_created }}</p> + </div> + {% endwith %} + </div> + </div> + <div class="journal-entries"> + <p>{{ journal.entries.all|length }} entries</p> + {% for entry in journal.entries.all %} + <div class="journal-entry"> + <h2 class="journal-entry-title">{{ entry.title }}</h2> + <p class="journal-entry-details">Posted on {{ entry.created_at|date:"F j, Y" }}</p> + <hr> + <p class="journal-entry-content">{{ entry.body|linebreaksbr }}</p> + </div> + {% endfor %} + </div> +</div> +{% endblock content %}
\ No newline at end of file diff --git a/thatcomputerscientist/settings.py b/thatcomputerscientist/settings.py index a2f3b817..726415a3 100644 --- a/thatcomputerscientist/settings.py +++ b/thatcomputerscientist/settings.py @@ -116,9 +116,9 @@ MIDDLEWARE = [ "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", # "whitenoise.middleware.WhiteNoiseMiddleware", + "middleware.globalmetamiddleware.GlobalMetaMiddleware", "middleware.i18nmiddleware.I18NMiddleware", "middleware.userprofilemiddleware.UserProfileMiddleware", - "middleware.globalmetamiddleware.GlobalMetaMiddleware", # "middleware.oldbrowsermiddleware.OldBrowserMiddleware", # "middleware.ignismiddleware.IgnisMiddleware", # "middleware.uuidmiddleware.UserUUIDMiddleware", |
