Compare commits

..

1 commit

Author SHA1 Message Date
a43bfed8d3 Update dependency whitenoise to v6.7.0 2024-07-05 22:04:40 +01:00
18 changed files with 1143 additions and 325 deletions

View file

@ -109,6 +109,12 @@ djlint:
script:
- djlint website/ --lint --check
gunicorn_check:
extends: .python_test_template
script:
- apt-get update && apt-get install --yes libpq-dev
- gunicorn --check-config --config etc/gunicorn.conf.py
npm_lint:
image: node:20-slim
stage: test

View file

@ -39,14 +39,7 @@ ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLA
RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz && tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz
ENV PATH=$VIRTUAL_ENV/bin:$PATH \
PYTHONUNBUFFERED=1 \
GRANIAN_INTERFACE=wsgi \
GRANIAN_HOST=0.0.0.0 \
GRANIAN_PORT=8080 \
GRANIAN_WORKERS_LIFETIME=1800 \
GRANIAN_RESPAWN_INTERVAL=10 \
GRANIAN_PROCESS_NAME=website \
GRANIAN_RESPAWN_FAILED_WORKERS=1
PYTHONUNBUFFERED=1
EXPOSE 8000

View file

@ -1,3 +1,4 @@
version: '3.7'
services:
web:
build:

View file

@ -3,5 +3,4 @@
@daily ./manage.py update_unsplash_photos
@daily ./manage.py rebuild_references_index
@weekly ./manage.py refresh_spotify_playlists
@weekly ./manage.py prune_db_task_results
*/10 * * * * ./manage.py publish_scheduled_pages

10
etc/gunicorn.conf.py Normal file
View file

@ -0,0 +1,10 @@
wsgi_app = "website.wsgi:application"
disable_redirect_access_to_syslog = True
preload_app = True
bind = "127.0.0.1:8080"
max_requests = 1200
max_requests_jitter = 50
forwarded_allow_ips = "*"
# Run additional threads so the GIL isn't sitting completely idle
threads = 4

View file

@ -4,4 +4,4 @@ set -e
cd /app
exec granian website.wsgi:application
exec gunicorn -c etc/gunicorn.conf.py

1349
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -28,19 +28,19 @@
"stylelint-config-standard-scss": "6.1.0"
},
"dependencies": {
"@fontsource/fira-code": "5.0.18",
"@fontsource/fira-code": "5.0.2",
"@fortawesome/fontawesome-free": "6.5.2",
"@ledge/is-ie-11": "7.0.0",
"bulma": "0.9.4",
"elevator.js": "1.0.1",
"esbuild": "0.20.2",
"glightbox": "3.3.0",
"htmx.org": "2.0.1",
"lite-youtube-embed": "0.3.2",
"htmx.org": "1.9.2",
"lite-youtube-embed": "0.3.0",
"lodash.clamp": "4.0.3",
"lodash.debounce": "4.0.8",
"lodash.throttle": "4.1.1",
"npm-run-all2": "5.0.0",
"npm-run-all": "4.1.5",
"sass": "1.75.0",
"shareon": "2.4.0"
}

View file

@ -1,13 +1,14 @@
Django==4.2.15
wagtail==5.2.6
Django==5.0.4
wagtail==5.2.5
django-environ==0.11.2
whitenoise[brotli]==6.6.0
whitenoise[brotli]==6.7.0
Pygments==2.18.0
beautifulsoup4[lxml]
beautifulsoup4
lxml==5.2.1
requests
wagtail-generic-chooser==0.6
django-redis==5.4.0
granian[pname]==1.6.0
gunicorn==22.0.0
psycopg==3.1.18
djangorestframework
django-htmx==1.17.2
@ -28,7 +29,7 @@ django-proxy==1.2.2
wagtail-lite-youtube-embed==0.1.0
django-minify-html==1.7.1
metadata-parser==0.12.1
django-tasks==0.5.0
django-tasks==0.2.0
lightningcss==0.2.0
# DRF OpenAPI dependencies

View file

@ -3,7 +3,6 @@ const STORAGE_KEY = "dark-mode";
const htmlTag = document.getElementsByTagName("html")[0];
const darkModeToggle = document.getElementById("dark-mode-toggle");
const comentarioComments = document.getElementsByTagName("comentario-comments");
const matchesDarkMode = window.matchMedia("(prefers-color-scheme: dark)");
@ -15,10 +14,6 @@ function handleDarkMode(darkMode) {
} else {
htmlTag.classList.remove(DARK_MODE_CLASS);
}
for (const commentElement of comentarioComments) {
commentElement.setAttribute("theme", darkMode ? "dark" : "light");
}
}
if (window.localStorage.getItem(STORAGE_KEY) === null) {

View file

@ -0,0 +1,46 @@
#comments {
margin-top: 2rem;
}
.comentario-text-muted,
.comentario-root,
.comentario-card .comentario-name {
@include dark-mode {
color: $dark-mode-text !important;
}
}
.comentario-add-comment-host,
.comentario-comment-editor textarea,
.comentario-toolbar.comentario-disabled {
background-color: transparent !important;
}
.comentario-add-comment-host:not(.comentario-editor-inserted) {
border: 1px solid color.adjust($white, $alpha: -0.5) !important;
}
.comentario-comment-editor textarea {
background-color: transparent !important;
@include dark-mode {
color: $dark-mode-text !important;
}
}
.comentario-footer a {
color: $link !important;
}
.comentario-btn-link {
color: $link !important;
}
.comentario-card {
@include dark-mode {
border-top: 1px solid color.adjust($white, $alpha: -0.5);
p {
color: $dark-mode-text;
}
}
}

View file

@ -67,6 +67,5 @@ section.content {
}
#comments {
margin-top: 2rem;
scroll-margin-top: var(--hero-height); // hero height (ish)
}

View file

@ -19,6 +19,7 @@
@import "spotify";
@import "404";
@import "password_required";
@import "comments";
@import "similar_content";
@import "support_pill";

View file

@ -13,8 +13,6 @@
<meta name="article:modified_time" content="{{ object.last_published_at|date:'c' }}" />
{% if object.date %}<meta name="article:published_time" content="{{ object.date|date:'c' }}" />{% endif %}
<meta name="fediverse:creator" content="@jake@theorangeone.net" />
{% endblock %}
{% block meta %}

View file

@ -12,14 +12,6 @@ class TalksListPage(BaseListingPage):
max_count = 1
subpage_types = ["talks.TalkPage"]
def get_listing_pages(self) -> models.QuerySet:
return (
TalkPage.objects.live()
.public()
.descendant_of(self)
.order_by("-date", "title")
)
class TalkPage(BaseContentPage):
subpage_types: list[Any] = []

View file

@ -37,7 +37,7 @@ class TalksListPageTestCase(TestCase):
self.assertEqual(len(response.context["listing_pages"]), 2)
def test_queries(self) -> None:
with self.assertNumQueries(34):
with self.assertNumQueries(35):
self.client.get(self.page.url)
def test_feed_accessible(self) -> None:

View file

@ -1,5 +1,5 @@
{
"m.homeserver": {
"base_url": "https://matrix.theorangeone.net"
"base_url": "https://matrix.jakehoward.tech"
}
}

View file

@ -1 +1 @@
{"m.server": "matrix.theorangeone.net:443"}
{"m.server": "matrix.jakehoward.tech:443"}