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

format_plaintext_for_html utility function

Rafał Pitoń 10 лет назад
Родитель
Сommit
7d44b816ea
2 измененных файлов с 50 добавлено и 15 удалено
  1. 45 2
      misago/core/tests/test_utils.py
  2. 5 13
      misago/core/utils.py

+ 45 - 2
misago/core/tests/test_utils.py

@@ -6,7 +6,7 @@ from django.utils import timezone
 
 from misago.core.utils import (clean_return_path, is_request_to_misago,
                                slugify, time_amount, is_referer_local,
-                               date_format)
+                               date_format, format_plaintext_for_html)
 
 
 VALID_PATHS = (
@@ -44,7 +44,7 @@ class IsRequestToMisagoTests(TestCase):
 
 class SlugifyTests(TestCase):
     def test_valid_slugify_output(self):
-        """Misago's slugify correcly slugifies string"""
+        """Misago's slugify correctly slugifies string"""
         test_cases = (
             (u'Bob', u'bob'),
             (u'Eric The Fish', u'eric-the-fish'),
@@ -59,6 +59,49 @@ class SlugifyTests(TestCase):
             self.assertEqual(slugify(original), slug)
 
 
+PLAINTEXT_FORMAT_CASES = (
+    (
+        u'Lorem ipsum.',
+        u'<p>Lorem ipsum.</p>'
+    ),
+    (
+        u'Lorem <b>ipsum</b>.',
+        u'<p>Lorem &lt;b&gt;ipsum&lt;/b&gt;.</p>'
+    ),
+    (
+        u'Lorem "ipsum" dolor met.',
+        u'<p>Lorem &quot;ipsum&quot; dolor met.</p>'
+    ),
+    (
+        u'Lorem ipsum.\nDolor met.',
+        u'<p>Lorem ipsum.<br />Dolor met.</p>'
+    ),
+    (
+        u'Lorem ipsum.\n\nDolor met.',
+        u'<p>Lorem ipsum.</p>\n\n<p>Dolor met.</p>'
+    ),
+    (
+        u'http://misago-project.org/login/',
+        u'<p><a href="http://misago-project.org/login/">http://misago-project.org/login/</a></p>'
+    ),
+)
+
+
+class FormatPlaintextForHtmlTests(TestCase):
+    def test_format_plaintext_for_html(self):
+        """format_plaintext_for_html correctly formats plaintext for html"""
+        for plaintext, html in PLAINTEXT_FORMAT_CASES:
+            output = format_plaintext_for_html(plaintext)
+
+            assertion_message = """
+format_plaintext_for_html failed to produce expected output:
+
+expected:   %s
+return:     %s
+""" % (html, output)
+            self.assertEqual(output, html, assertion_message)
+
+
 class MockRequest(object):
     scheme = 'http'
 

+ 5 - 13
misago/core/utils.py

@@ -6,7 +6,7 @@ from django.http import Http404
 from django.core.urlresolvers import resolve, reverse
 from django.template.defaultfilters import (slugify as django_slugify,
                                             date as dj_date_format)
-from django.utils import timezone
+from django.utils import html, timezone
 from django.utils.translation import ugettext_lazy as _, ungettext_lazy
 
 
@@ -16,6 +16,10 @@ def slugify(string):
     return django_slugify(string.replace('_', ' ').strip())
 
 
+def format_plaintext_for_html(string):
+    return html.linebreaks(html.urlize(html.escape(string)))
+
+
 """
 Return path utility
 """
@@ -157,15 +161,3 @@ def time_amount(value):
 
 def date_format(date, format=None):
     return dj_date_format(timezone.template_localtime(date), format)
-
-
-"""
-MD subset for use for enchancing items descriptions
-"""
-MD_SUBSET_FORBID_SYNTAX = (
-    # References are evil
-    'reference', 'reference', 'image_reference', 'short_reference',
-
-    # Blocks are evil too
-    'hashheader', 'setextheader', 'code', 'quote', 'hr', 'olist', 'ulist',
-)