Просмотр исходного кода

"noscript" view for views that NEED JS to work

Rafał Pitoń 10 лет назад
Родитель
Сommit
2c2ab963a9

+ 1 - 0
misago/core/testproject/urls.py

@@ -16,4 +16,5 @@ urlpatterns += patterns('misago.core.testproject.views',
     url(r'^forum/test-405/$', 'raise_misago_405', name='raise_misago_405'),
     url(r'^test-403/$', 'raise_403', name='raise_403'),
     url(r'^test-404/$', 'raise_404', name='raise_404'),
+    url(r'^test-noscript/$', 'test_noscript', name='test_noscript'),
 )

+ 5 - 0
misago/core/testproject/views.py

@@ -5,6 +5,7 @@ from django.http import Http404, HttpResponse
 from misago.core import errorpages, mail
 from misago.core.shortcuts import paginate, validate_slug
 from misago.core.testproject.models import Model
+from misago.core.views import noscript
 
 
 def test_mail_user(request):
@@ -62,6 +63,10 @@ def raise_404(request):
     raise Http404()
 
 
+def test_noscript(request):
+    return noscript(request, **request.POST)
+
+
 @errorpages.shared_403_exception_handler
 def mock_custom_403_error_page(request):
     return HttpResponse("Custom 403", status=403)

+ 43 - 0
misago/core/tests/test_views.py

@@ -26,3 +26,46 @@ class JavaScriptViewTests(TestCase):
         with self.settings(_MISAGO_JS_DEBUG=False):
             response = self.client.get('/misago-preload-data.js')
             self.assertEqual(response.status_code, 404)
+
+
+class NoScriptViewTests(TestCase):
+    urls = 'misago.core.testproject.urls'
+
+    def test_noscript_view_returns_200(self):
+        """noscript view has no show-stoppers"""
+        response = self.client.post(reverse('test_noscript'), {})
+        self.assertEqual(response.status_code, 200)
+
+    def test_noscript_view_message_returns_200(self):
+        """noscript view with custom message has no show-stoppers"""
+        test_message = "Enable JavaScript to roll, Bob!"
+        response = self.client.post(reverse('test_noscript'), {
+            'message': test_message
+        })
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_message, response.content)
+
+    def test_noscript_view_title_returns_200(self):
+        """noscript view with custom title has no show-stoppers"""
+        test_title = "N0p3"
+        response = self.client.post(reverse('test_noscript'), {
+            'title': test_title
+        })
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_title, response.content)
+
+    def test_noscript_view_title_message_returns_200(self):
+        """noscript view with custom title and message has no show-stoppers"""
+        test_title = "N0p3"
+        test_message = "Enable JavaScript to roll, Bob!"
+
+        response = self.client.post(reverse('test_noscript'), {
+            'title': test_title,
+            'message': test_message
+        })
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_title, response.content)
+        self.assertIn(test_message, response.content)

+ 9 - 3
misago/core/views.py

@@ -5,6 +5,7 @@ from django.utils import timezone
 from django.views import i18n
 from django.views.decorators.http import last_modified
 from django.views.decorators.cache import cache_page, never_cache
+from django.views.decorators.debug import sensitive_post_parameters
 
 from misago.forums.lists import get_forums_list
 from misago.users.online.ranks import get_ranks_online
@@ -17,10 +18,8 @@ def forum_index(request):
     })
 
 
-last_modified_date = timezone.now()
-
 @cache_page(86400, key_prefix='js18n')
-@last_modified(lambda req, **kw: last_modified_date)
+@last_modified(lambda req, **kw: timezone.now())
 def javascript_catalog(request):
     return i18n.javascript_catalog(request, 'djangojs', None)
 
@@ -32,3 +31,10 @@ def preload_data(request):
 
     return render(request, 'misago/preloaded_data.js',
                   content_type='application/javascript')
+
+
+def noscript(request, title=None, message=None):
+    return render(request, 'misago/noscript.html', {
+        'title': title,
+        'message': message,
+    })

+ 28 - 0
misago/templates/misago/noscript.html

@@ -0,0 +1,28 @@
+{% extends "misago/base.html" %}
+{% load i18n %}
+
+
+{% block title %}{% if title %}{{ title }}{% else %}{% trans "Enable JavaScript" %}{% endif %} | {{ block.super }}{% endblock %}
+
+
+{% block content %}
+<div class="error-page error-noscript">
+  <div class="container">
+    <div class="error">
+
+      <div class="error-icon">
+        <span class="fa fa-code"></span>
+      </div>
+
+      <div class="error-message">
+        {% if message %}
+        <p class="lead">{{ message|escape|urlize|linebreaksbr }}</p>
+        {% else %}
+        <p class="lead">{% trans "To access this page enable JavaScript." %}</p>
+        {% endif %}
+      </div>
+
+    </div>
+  </div>
+</div>
+{% endblock content %}