aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2024-12-17 20:58:14 +0000
committerBobby <[email protected]>2024-12-17 20:58:14 +0000
commit70bd8ebf6e0de202cb3a4f52f39766e69f146053 (patch)
tree9981e0e453ae6095a51237f1e271af06690e5428
parent79d44e676adeb998c3072b4a58d08815b45d4676 (diff)
downloadthatcomputerscientist-70bd8ebf6e0de202cb3a4f52f39766e69f146053.tar.xz
thatcomputerscientist-70bd8ebf6e0de202cb3a4f52f39766e69f146053.zip
journals just became somewhat real
-rw-r--r--apps/core/views.py4
-rw-r--r--apps/journals/urls.py4
-rw-r--r--apps/journals/views.py17
-rw-r--r--templates/en/core/my/journals.html2
-rw-r--r--templates/en/journals/single.html140
-rw-r--r--thatcomputerscientist/settings.py2
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",