From 5ba0e38090001bfe543e73729c54247bb4a65047 Mon Sep 17 00:00:00 2001
From: Bob Mottram
Date: Sun, 14 Jun 2020 14:25:38 +0100
Subject: [PATCH] Remove formatting such as bold and italics from posts
This is to be conformant with what Mastodon is doing. Probably markdown should be an optional extra
---
content.py | 15 +++++++++++++++
posts.py | 5 +++++
tests.py | 12 ++++++++++++
webinterface.py | 2 ++
4 files changed, 34 insertions(+)
diff --git a/content.py b/content.py
index 87fd69a6..c08b1301 100644
--- a/content.py
+++ b/content.py
@@ -385,6 +385,21 @@ def replaceContentDuplicates(content: str) -> str:
return content
+def removeTextFormatting(content: str) -> str:
+ """Removes markup for bold, italics, etc
+ """
+ if '<' not in content:
+ return content
+ content = content.replace('', '').replace('', '')
+ content = content.replace('', '').replace('', '')
+ content = content.replace('', '')
+ content = content.replace('', '').replace('
', '')
+ for level in range(1, 5):
+ content = content.replace('', '')
+ content = content.replace('', '')
+ return content
+
+
def removeLongWords(content: str, maxWordLength: int,
longWordsList: []) -> str:
"""Breaks up long words so that on mobile screens this doesn't
diff --git a/posts.py b/posts.py
index 32f0b7b2..36dea320 100644
--- a/posts.py
+++ b/posts.py
@@ -46,6 +46,7 @@ from media import replaceYouTube
from content import removeLongWords
from content import addHtmlTags
from content import replaceEmojiFromTags
+from content import removeTextFormatting
from auth import createBasicAuthHeader
from config import getConfigParam
from blocking import isBlocked
@@ -3086,6 +3087,10 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
announcedJson['content'] = \
removeLongWords(announcedJson['content'], 40, [])
+ # remove text formatting, such as bold/italics
+ announcedJson['content'] = \
+ removeTextFormatting(announcedJson['content'])
+
# wrap in create to be consistent with other posts
announcedJson = \
outboxMessageCreateWrap(httpPrefix,
diff --git a/tests.py b/tests.py
index fe90d9e4..86d16aac 100644
--- a/tests.py
+++ b/tests.py
@@ -67,6 +67,7 @@ from content import replaceEmojiFromTags
from content import addHtmlTags
from content import removeLongWords
from content import replaceContentDuplicates
+from content import removeTextFormatting
from theme import setCSSparam
from semantic import isAccusatory
@@ -1798,8 +1799,19 @@ def testAccusatory():
assert(not isAccusatory(testStr, None, 3))
+def testRemoveTextFormatting():
+ print('testRemoveTextFormatting')
+ testStr = 'Text without formatting
'
+ resultStr = removeTextFormatting(testStr)
+ assert(resultStr == testStr)
+ testStr = 'Text with
formatting
'
+ resultStr = removeTextFormatting(testStr)
+ assert(resultStr == 'Text with formatting
')
+
+
def runAllTests():
print('Running tests...')
+ testRemoveTextFormatting()
testAccusatory()
testWebLinks()
testRecentPostsCache()
diff --git a/webinterface.py b/webinterface.py
index 9e90ffa8..ad1c609b 100644
--- a/webinterface.py
+++ b/webinterface.py
@@ -56,6 +56,7 @@ from bookmarks import bookmarkedByPerson
from announce import announcedByPerson
from blocking import isBlocked
from blocking import isBlockedHashtag
+from content import removeTextFormatting
from content import switchWords
from content import getMentionsFromHtml
from content import addHtmlTags
@@ -4099,6 +4100,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int,
if not isPatch:
objectContent = \
removeLongWords(postJsonObject['object']['content'], 40, [])
+ objectContent = removeTextFormatting(objectContent)
objectContent = \
switchWords(baseDir, nickname, domain, objectContent)
else: