aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Leon Sandøy <[email protected]>2022-01-30 11:41:44 +0100
committerGravatar Leon Sandøy <[email protected]>2022-01-30 11:41:44 +0100
commite53a3a15d0213b3854a3c9619390f0a0e35c4bf6 (patch)
treed377e4c9b188dbe1dfef899e25f41236dc11d346
parentAdd redirects for all old resource endpoints. (diff)
Redirects from old endpoints now filter correctly.
For example, navigating to pydis.com/resources/communities will now correctly redirect to pydis.com/resources/?type=community.
-rw-r--r--pydis_site/apps/redirect/redirects.yaml10
-rw-r--r--pydis_site/apps/resources/urls.py1
-rw-r--r--pydis_site/apps/resources/views/resources.py25
-rw-r--r--pydis_site/static/js/resources.js8
-rw-r--r--pydis_site/templates/resources/resources.html1
5 files changed, 24 insertions, 21 deletions
diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml
index bee65103..533b9e25 100644
--- a/pydis_site/apps/redirect/redirects.yaml
+++ b/pydis_site/apps/redirect/redirects.yaml
@@ -90,30 +90,32 @@ resources_index_redirect:
resources_reading_redirect:
original_path: resources/reading/
redirect_route: "resources:index"
+ redirect_arguments: ["book"]
resources_videos_redirect:
original_path: resources/videos/
redirect_route: "resources:index"
-
-resources_interactive_redirect:
- original_path: resources/interactive/
- redirect_route: "resources:index"
+ redirect_arguments: ["video"]
resources_courses_redirect:
original_path: resources/courses/
redirect_route: "resources:index"
+ redirect_arguments: ["course"]
resources_communities_redirect:
original_path: resources/communities/
redirect_route: "resources:index"
+ redirect_arguments: ["community"]
resources_podcasts_redirect:
original_path: resources/podcasts/
redirect_route: "resources:index"
+ redirect_arguments: ["podcast"]
resources_tools_redirect:
original_path: resources/tools/
redirect_route: "resources:index"
+ redirect_arguments: ["tool"]
# Events
events_index_redirect:
diff --git a/pydis_site/apps/resources/urls.py b/pydis_site/apps/resources/urls.py
index 5d5ae7fb..ed24dc99 100644
--- a/pydis_site/apps/resources/urls.py
+++ b/pydis_site/apps/resources/urls.py
@@ -5,4 +5,5 @@ from pydis_site.apps.resources import views
app_name = "resources"
urlpatterns = [
distill_path("", views.resources.ResourceView.as_view(), name="index"),
+ distill_path("<resource_type>/", views.resources.ResourceView.as_view(), name="index"),
]
diff --git a/pydis_site/apps/resources/views/resources.py b/pydis_site/apps/resources/views/resources.py
index d0b8bae7..b828d89a 100644
--- a/pydis_site/apps/resources/views/resources.py
+++ b/pydis_site/apps/resources/views/resources.py
@@ -1,8 +1,9 @@
from pathlib import Path
+import typing as t
import yaml
from django.core.handlers.wsgi import WSGIRequest
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseNotFound
from django.shortcuts import render
from django.views import View
@@ -78,22 +79,12 @@ class ResourceView(View):
}
}
- @staticmethod
- def _get_filter_options(request: WSGIRequest) -> dict[str, set]:
- """Get the requested filter options out of the request object."""
- return {
- option: set(request.GET.get(url_param, "").split(",")[:-1])
- for option, url_param in (
- ('topics', 'topics'),
- ('type', 'type'),
- ('payment_tiers', 'payment'),
- ('difficulty', 'difficulty'),
- )
- }
-
- def get(self, request: WSGIRequest) -> HttpResponse:
+ def get(self, request: WSGIRequest, resource_type: t.Optional[str] = None) -> HttpResponse:
"""List out all the resources, and any filtering options from the URL."""
- filter_options = self._get_filter_options(request)
+
+ # Add type filtering if the request is made to somewhere like /resources/video
+ if resource_type and resource_type.title() not in self.filters['Type']['filters']:
+ return HttpResponseNotFound()
return render(
request,
@@ -101,6 +92,6 @@ class ResourceView(View):
context={
"resources": self.resources,
"filters": self.filters,
- "filter_options": filter_options,
+ "resource_type": resource_type,
}
)
diff --git a/pydis_site/static/js/resources.js b/pydis_site/static/js/resources.js
index eaca3978..bf570097 100644
--- a/pydis_site/static/js/resources.js
+++ b/pydis_site/static/js/resources.js
@@ -160,6 +160,14 @@ function updateUI() {
// Executed when the page has finished loading.
document.addEventListener("DOMContentLoaded", function () {
+ /* Check if the user has navigated to one of the old resource pages,
+ like pydis.com/resources/communities. In this case, we'll rewrite
+ the URL before we do anything else. */
+ let resourceTypeInput = $("#resource-type-input").val();
+ if (resourceTypeInput.length !== 0) {
+ window.history.replaceState(null, document.title, `../?type=${resourceTypeInput}`);
+ }
+
// Update the filters on page load to reflect URL parameters.
$('.filter-box-tag').hide();
deserializeURLParams();
diff --git a/pydis_site/templates/resources/resources.html b/pydis_site/templates/resources/resources.html
index 9ebebe1f..7a284fd6 100644
--- a/pydis_site/templates/resources/resources.html
+++ b/pydis_site/templates/resources/resources.html
@@ -16,6 +16,7 @@
{% block content %}
{% include "base/navbar.html" %}
+ <input type="hidden" id="resource-type-input" value="{{ resource_type }}">
<section class="section">
<div class="columns is-centered">
{# Filtering toolbox #}