From e6b9a74ee428c0b9829f9b01e29891b16f70f0c8 Mon Sep 17 00:00:00 2001 From: Bob Mottram <bob@freedombone.net> Date: Mon, 15 Jul 2019 15:11:31 +0100 Subject: [PATCH] mentions function --- content.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 content.py diff --git a/content.py b/content.py new file mode 100644 index 00000000..ab269dbc --- /dev/null +++ b/content.py @@ -0,0 +1,53 @@ +__filename__ = "content.py" +__author__ = "Bob Mottram" +__license__ = "AGPL3+" +__version__ = "0.0.1" +__maintainer__ = "Bob Mottram" +__email__ = "bob@freedombone.net" +__status__ = "Production" + +import os +import commentjson + +def addMentions(baseDir: str,httpPrefix: str, \ + nickname: str,domain: str,content: str) -> str: + """ Replaces plaintext mentions such as @nick@domain into html + by matching against known following accounts + """ + if content.startswith('<p>'): + return content + wordsOnly=content.replace(',',' ').replace(';',' ').replace('.',' ').replace(':',' ') + words=wordsOnly.split(' ') + replaceMentions={} + followingFilename=baseDir+'/accounts/'+nickname+'@'+domain+'/following.txt' + if not os.path.isfile(followingFilename): + return content + with open(followingFilename, "r") as f: + following = f.readlines() + for wordStr in words: + if wordStr.startswith('@'): + if len(wordStr)>1: + possibleHandle=wordStr[1:] + if '@' in possibleHandle: + possibleNickname=possibleHandle.split('@')[0] + possibleDomain=possibleHandle.split('@')[1] + replaceFound=False + for follow in following: + if follow.replace('\n','')==possibleHandle: + replaceMentions[wordStr]="<span class=\"h-card\"><a href=\""+httpPrefix+"://"+possibleDomain+"/@"+possibleNickname+"\" class=\"u-url mention\">@<span>"+possibleNickname+"</span></a></span>" + replaceFound=True + break + if not replaceFound: + # fall back to a best effort match if an exact one is not found + for follow in following: + if follow.startsWith(possibleNickname+'@'): + replaceDomain=follow.replace('\n','').split('@')[1] + replaceMentions[wordStr]="<span class=\"h-card\"><a href=\""+httpPrefix+"://"+replaceDomain+"/@"+possibleNickname+"\" class=\"u-url mention\">@<span>"+possibleNickname+"</span></a></span>" + replaceFound=True + break + # do the mention replacements + for wordStr,replaceStr in replaceMentions.items(): + content=content.replace(wordStr,replaceStr) + content=content.replace('\n','</p><p>') + return '<p>'+content+'</p>' +