flake8 style

main
Bob Mottram 2020-04-01 21:29:04 +00:00
parent 032b168d03
commit 0f1e754913
1 changed files with 405 additions and 411 deletions

320
blog.py
View File

@ -6,16 +6,8 @@ __maintainer__="Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
import json
import time
import os
from collections import OrderedDict
from datetime import datetime
from datetime import date
from dateutil.parser import parse
from shutil import copyfile
from shutil import copyfileobj
from pprint import pprint
from content import replaceEmojiFromTags
from webinterface import contentWarningScriptOpen
@ -31,8 +23,8 @@ from utils import loadJson
from posts import createBlogsTimeline
def noOfBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,domainFull: str, \
def noOfBlogReplies(baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, domainFull: str,
postId: str, depth=0) -> int:
"""Returns the number of replies on the post
This is recursive, so can handle replies to replies
@ -45,8 +37,8 @@ def noOfBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
tryPostBox = ('tlblogs', 'inbox', 'outbox')
boxFound = False
for postBox in tryPostBox:
postFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+'/'+postBox+'/'+ \
postFilename = baseDir + '/accounts/' + \
nickname + '@' + domain + '/' + postBox + '/' + \
postId.replace('/', '#') + '.replies'
if os.path.isfile(postFilename):
boxFound = True
@ -54,8 +46,8 @@ def noOfBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
if not boxFound:
# post may exist but has no replies
for postBox in tryPostBox:
postFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+'/'+postBox+'/'+ \
postFilename = baseDir + '/accounts/' + \
nickname + '@' + domain + '/' + postBox + '/' + \
postId.replace('/', '#')
if os.path.isfile(postFilename):
return 1
@ -65,18 +57,16 @@ def noOfBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
with open(postFilename, "r") as f:
lines = f.readlines()
for replyPostId in lines:
replyPostId= \
replyPostId.replace('\n','').replace('.json','').replace('.replies','')
replies+= \
1+ \
noOfBlogReplies(baseDir,httpPrefix,translate, \
nickname,domain,domainFull, \
replyPostId = replyPostId.replace('\n', '').replace('.json', '')
replyPostId = replyPostId.replace('.replies', '')
replies += 1 + noOfBlogReplies(baseDir, httpPrefix, translate,
nickname, domain, domainFull,
replyPostId, depth+1)
return replies
def getBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,domainFull: str, \
def getBlogReplies(baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, domainFull: str,
postId: str, depth=0) -> str:
"""Returns the number of replies on the post
"""
@ -88,8 +78,8 @@ def getBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
tryPostBox = ('tlblogs', 'inbox', 'outbox')
boxFound = False
for postBox in tryPostBox:
postFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+'/'+postBox+'/'+ \
postFilename = baseDir + '/accounts/' + \
nickname + '@' + domain + '/' + postBox + '/' + \
postId.replace('/', '#') + '.replies'
if os.path.isfile(postFilename):
boxFound = True
@ -97,12 +87,12 @@ def getBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
if not boxFound:
# post may exist but has no replies
for postBox in tryPostBox:
postFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+'/'+postBox+'/'+ \
postFilename = baseDir + '/accounts/' + \
nickname + '@' + domain + '/' + postBox + '/' + \
postId.replace('/', '#')
if os.path.isfile(postFilename):
postFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+ \
postFilename = baseDir + '/accounts/' + \
nickname + '@' + domain + \
'/postcache/' + \
postId.replace('/', '#') + '.html'
if os.path.isfile(postFilename):
@ -114,19 +104,18 @@ def getBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
lines = f.readlines()
repliesStr = ''
for replyPostId in lines:
replyPostId= \
replyPostId.replace('\n','').replace('.json','').replace('.replies','')
postFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+ \
replyPostId = replyPostId.replace('\n', '').replace('.json', '')
replyPostId = replyPostId.replace('.replies', '')
postFilename = baseDir + '/accounts/' + \
nickname + '@' + domain + \
'/postcache/' + \
replyPostId.replace('\n', '').replace('/', '#') + '.html'
if not os.path.isfile(postFilename):
continue
with open(postFilename, "r") as postFile:
repliesStr += postFile.read() + '\n'
repliesStr+= \
getBlogReplies(baseDir,httpPrefix,translate, \
nickname,domain,domainFull, \
repliesStr += getBlogReplies(baseDir, httpPrefix, translate,
nickname, domain, domainFull,
replyPostId, depth+1)
# indicate the reply indentation level
@ -134,14 +123,15 @@ def getBlogReplies(baseDir: str,httpPrefix: str,translate: {}, \
for indentLevel in range(depth):
indentStr += ' >'
return repliesStr.replace(translate['SHOW MORE'],indentStr).replace('?tl=outbox','?tl=tlblogs')
repliesStr = repliesStr.replace(translate['SHOW MORE'], indentStr)
return repliesStr.replace('?tl=outbox', '?tl=tlblogs')
return ''
def htmlBlogPostContent(authorized: bool, \
baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,domainFull: str, \
postJsonObject: {}, \
def htmlBlogPostContent(authorized: bool,
baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, domainFull: str,
postJsonObject: {},
handle: str, restrictToDomain: bool) -> str:
"""Returns the content for a single blog post
"""
@ -154,7 +144,8 @@ def htmlBlogPostContent(authorized: bool, \
titleStr = ''
if postJsonObject['object'].get('summary'):
titleStr = postJsonObject['object']['summary']
blogStr+='<h1><a href="'+messageLink+'">'+titleStr+'</a></h1>\n'
blogStr += '<h1><a href="' + messageLink + '">' + \
titleStr + '</a></h1>\n'
# get the handle of the author
if postJsonObject['object'].get('attributedTo'):
@ -174,17 +165,18 @@ def htmlBlogPostContent(authorized: bool, \
if postJsonObject['object'].get('published'):
if 'T' in postJsonObject['object']['published']:
blogStr+='<h3>'+postJsonObject['object']['published'].split('T')[0]
blogStr += '<h3>' + \
postJsonObject['object']['published'].split('T')[0]
if handle:
if handle.startswith(nickname + '@' + domain):
blogStr+= \
' <a href="'+httpPrefix+'://'+domainFull+ \
blogStr += ' <a href="' + httpPrefix + '://' + \
domainFull + \
'/users/' + nickname + '">' + handle + '</a>'
linkedAuthor = True
else:
if author:
blogStr+= \
' <a href="'+author+'">'+handle+'</a>'
if actor:
blogStr += ' <a href="' + actor + '">' + \
handle + '</a>'
linkedAuthor = True
else:
blogStr += ' ' + handle
@ -198,62 +190,59 @@ def htmlBlogPostContent(authorized: bool, \
deleteStr = ''
muteStr = ''
isMuted = False
attachmentStr,galleryStr= \
getPostAttachmentsAsHtml(postJsonObject,'tlblogs',translate, \
isMuted,avatarLink, \
replyStr,announceStr,likeStr, \
bookmarkStr,deleteStr,muteStr)
attachmentStr, galleryStr = getPostAttachmentsAsHtml(postJsonObject,
'tlblogs', translate,
isMuted, avatarLink,
replyStr, announceStr,
likeStr, bookmarkStr,
deleteStr, muteStr)
if attachmentStr:
blogStr += '<br><center>' + attachmentStr + '</center>'
if postJsonObject['object'].get('content'):
contentStr= \
addEmbeddedElements(translate, \
contentStr = addEmbeddedElements(translate,
postJsonObject['object']['content'])
if postJsonObject['object'].get('tag'):
contentStr= \
replaceEmojiFromTags(contentStr, \
postJsonObject['object']['tag'],'content')
contentStr = replaceEmojiFromTags(contentStr,
postJsonObject['object']['tag'],
'content')
blogStr += '<br>' + contentStr + '\n'
blogStr += '<br><hr>\n'
if not linkedAuthor:
blogStr+= \
'<p class="about"><a class="about" href="'+ \
blogStr += '<p class="about"><a class="about" href="' + \
httpPrefix + '://' + domainFull + \
'/users/'+nickname+'">'+translate['About the author']+'</a></p>\n'
'/users/' + nickname + '">' + translate['About the author'] + \
'</a></p>\n'
replies= \
noOfBlogReplies(baseDir,httpPrefix,translate, \
nickname,domain,domainFull, \
replies = noOfBlogReplies(baseDir, httpPrefix, translate,
nickname, domain, domainFull,
postJsonObject['object']['id'])
if replies > 0:
if not authorized:
blogStr+= \
'<p class="blogreplies">'+ \
blogStr += '<p class="blogreplies">' + \
translate['Replies'].lower() + ': ' + str(replies) + '</p>\n'
else:
blogStr += '<h1>' + translate['Replies'] + '</h1>\n'
blogStr += '<script>' + contentWarningScriptOpen() + '</script>\n'
if not titleStr:
blogStr+= \
getBlogReplies(baseDir,httpPrefix,translate, \
nickname,domain,domainFull, \
blogStr += getBlogReplies(baseDir, httpPrefix, translate,
nickname, domain, domainFull,
postJsonObject['object']['id'])
else:
blogStr+= \
getBlogReplies(baseDir,httpPrefix,translate, \
nickname,domain,domainFull, \
postJsonObject['object']['id']).replace('>'+titleStr+'<','')
blogRepliesStr = getBlogReplies(baseDir, httpPrefix, translate,
nickname, domain, domainFull,
postJsonObject['object']['id'])
blogStr += blogRepliesStr.replace('>' + titleStr + '<', '')
blogStr += '<br><hr>\n'
return blogStr
def htmlBlogPostRSS(authorized: bool, \
baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,domainFull: str, \
postJsonObject: {}, \
def htmlBlogPostRSS(authorized: bool,
baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, domainFull: str,
postJsonObject: {},
handle: str, restrictToDomain: bool) -> str:
"""Returns the RSS feed for a single blog post
"""
@ -266,17 +255,18 @@ def htmlBlogPostRSS(authorized: bool, \
published = postJsonObject['object']['published']
pubDate = datetime.strptime(published, "%Y-%m-%dT%H:%M:%SZ")
titleStr = postJsonObject['object']['summary']
rssDateStr = pubDate.strftime("%a, %d %b %Y %H:%M:%S UT")
rssStr = ' <item>'
rssStr += ' <title>' + titleStr + '</title>'
rssStr += ' <link>' + messageLink + '</link>'
rssStr+=' <pubDate>'+pubDate.strftime("%a, %d %b %Y %H:%M:%S UT")+'</pubDate>'
rssStr += ' <pubDate>' + rssDateStr + '</pubDate>'
rssStr += ' </item>'
return rssStr
def htmlBlogPost(authorized: bool, \
baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,domainFull: str, \
def htmlBlogPost(authorized: bool,
baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, domainFull: str,
postJsonObject: {}) -> str:
"""Returns a html blog post
"""
@ -290,24 +280,28 @@ def htmlBlogPost(authorized: bool, \
blogStr = htmlHeader(cssFilename, blogCSS)
blogStr = blogStr.replace('.cwText', '.cwTextInactive')
blogStr+= \
htmlBlogPostContent(authorized,baseDir,httpPrefix,translate, \
nickname,domain,domainFull,postJsonObject, \
blogStr += htmlBlogPostContent(authorized, baseDir,
httpPrefix, translate,
nickname, domain,
domainFull, postJsonObject,
None, False)
# show rss link
iconsDir = getIconsDir(baseDir)
blogStr += '<p class="rssfeed">'
blogStr+='<a href="'+httpPrefix+'://'+domainFull+'/blog/'+nickname+'/rss.xml">'
blogStr+='<img loading="lazy" alt="RSS" title="RSS" src="/'+iconsDir+'/rss.png" />'
blogStr += '<a href="' + httpPrefix + '://' + \
domainFull + '/blog/' + nickname + '/rss.xml">'
blogStr += '<img loading="lazy" alt="RSS" title="RSS" src="/' + \
iconsDir + '/rss.png" />'
blogStr += '</a></p>'
return blogStr + htmlFooter()
return None
def htmlBlogPage(authorized: bool, session, \
baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,port: int, \
def htmlBlogPage(authorized: bool, session,
baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, port: int,
noOfItems: int, pageNumber: int) -> str:
"""Returns a html blog page containing posts
"""
@ -323,15 +317,16 @@ def htmlBlogPage(authorized: bool, session, \
blogStr = htmlHeader(cssFilename, blogCSS)
blogStr = blogStr.replace('.cwText', '.cwTextInactive')
blogsIndex= \
baseDir+'/accounts/'+nickname+'@'+domain+'/tlblogs.index'
blogsIndex = baseDir + '/accounts/' + \
nickname + '@' + domain + '/tlblogs.index'
if not os.path.isfile(blogsIndex):
return blogStr + htmlFooter()
timelineJson= \
createBlogsTimeline(session,baseDir, \
nickname,domain,port,httpPrefix, \
noOfItems,False,False,pageNumber)
timelineJson = createBlogsTimeline(session, baseDir,
nickname, domain, port,
httpPrefix,
noOfItems, False, False,
pageNumber)
if not timelineJson:
return blogStr + htmlFooter()
@ -342,21 +337,21 @@ def htmlBlogPage(authorized: bool, session, \
domainFull = domain + ':' + str(port)
# show previous and next buttons
if pageNumber!=None:
if pageNumber is not None:
iconsDir = getIconsDir(baseDir)
navigateStr = '<p>'
if pageNumber > 1:
# show previous button
navigateStr+= \
'<a href="'+httpPrefix+'://'+domainFull+'/blog/'+ \
navigateStr += '<a href="' + httpPrefix + '://' + \
domainFull + '/blog/' + \
nickname + '?page=' + str(pageNumber-1) + '">' + \
'<img loading="lazy" alt="<" title="<" ' + \
'src="/' + iconsDir + \
'/prev.png" class="buttonprev"/></a>\n'
if len(timelineJson['orderedItems']) >= noOfItems:
# show next button
navigateStr+= \
'<a href="'+httpPrefix+'://'+domainFull+'/blog/'+nickname+ \
navigateStr += '<a href="' + httpPrefix + '://' + \
domainFull + '/blog/' + nickname + \
'?page=' + str(pageNumber + 1) + '">' + \
'<img loading="lazy" alt=">" title=">" ' + \
'src="/' + iconsDir + \
@ -368,9 +363,10 @@ def htmlBlogPage(authorized: bool, session, \
if item['type'] != 'Create':
continue
blogStr+= \
htmlBlogPostContent(authorized,baseDir,httpPrefix,translate, \
nickname,domain,domainFull,item, \
blogStr += htmlBlogPostContent(authorized, baseDir,
httpPrefix, translate,
nickname, domain,
domainFull, item,
None, True)
if len(timelineJson['orderedItems']) >= noOfItems:
@ -378,29 +374,36 @@ def htmlBlogPage(authorized: bool, session, \
# show rss link
blogStr += '<p class="rssfeed">'
blogStr+='<a href="'+httpPrefix+'://'+domainFull+'/blog/'+nickname+'/rss.xml">'
blogStr+='<img loading="lazy" alt="RSS" title="RSS" src="/'+iconsDir+'/rss.png" />'
blogStr += '<a href="' + httpPrefix + '://' + \
domainFull + '/blog/' + nickname + '/rss.xml">'
blogStr += '<img loading="lazy" alt="RSS" title="RSS" src="/' + \
iconsDir + '/rss.png" />'
blogStr += '</a></p>'
return blogStr + htmlFooter()
return None
def rssHeader(httpPrefix: str,nickname: str,domainFull: str,translate: {}) -> str:
def rssHeader(httpPrefix: str,
nickname: str, domainFull: str, translate: {}) -> str:
rssStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
rssStr += "<rss version=\"2.0\">"
rssStr += '<channel>'
rssStr += ' <title>' + translate['Blog'] + '</title>'
rssStr+=' <link>'+httpPrefix+'://'+domainFull+'/users/'+nickname+'/rss.xml'+'</link>'
rssStr += ' <link>' + httpPrefix + '://' + domainFull + \
'/users/' + nickname + '/rss.xml' + '</link>'
return rssStr
def rssFooter() -> str:
rssStr = '</channel>'
rssStr += '</rss>'
return rssStr
def htmlBlogPageRSS(authorized: bool, session, \
baseDir: str,httpPrefix: str,translate: {}, \
nickname: str,domain: str,port: int, \
def htmlBlogPageRSS(authorized: bool, session,
baseDir: str, httpPrefix: str, translate: {},
nickname: str, domain: str, port: int,
noOfItems: int, pageNumber: int) -> str:
"""Returns an rss feed containing posts
"""
@ -414,27 +417,29 @@ def htmlBlogPageRSS(authorized: bool, session, \
blogRSS = rssHeader(httpPrefix, nickname, domainFull, translate)
blogsIndex= \
baseDir+'/accounts/'+nickname+'@'+domain+'/tlblogs.index'
blogsIndex = baseDir + '/accounts/' + \
nickname + '@' + domain + '/tlblogs.index'
if not os.path.isfile(blogsIndex):
return blogRSS + rssFooter()
timelineJson= \
createBlogsTimeline(session,baseDir, \
nickname,domain,port,httpPrefix, \
noOfItems,False,False,pageNumber)
timelineJson = createBlogsTimeline(session, baseDir,
nickname, domain, port,
httpPrefix,
noOfItems, False, False,
pageNumber)
if not timelineJson:
return blogRSS + rssFooter()
if pageNumber!=None:
if pageNumber is not None:
for item in timelineJson['orderedItems']:
if item['type'] != 'Create':
continue
blogRSS+= \
htmlBlogPostRSS(authorized,baseDir,httpPrefix,translate, \
nickname,domain,domainFull,item, \
blogRSS += htmlBlogPostRSS(authorized, baseDir,
httpPrefix, translate,
nickname, domain,
domainFull, item,
None, True)
return blogRSS + rssFooter()
@ -457,6 +462,7 @@ def getBlogIndexesForAccounts(baseDir: str) -> {}:
blogIndexes[acct] = blogsIndex
return blogIndexes
def noOfBlogAccounts(baseDir: str) -> int:
"""Returns the number of blog accounts
"""
@ -473,6 +479,7 @@ def noOfBlogAccounts(baseDir: str) -> int:
ctr += 1
return ctr
def singleBlogAccountNickname(baseDir: str) -> str:
"""Returns the nickname of a single blog account
"""
@ -488,9 +495,10 @@ def singleBlogAccountNickname(baseDir: str) -> str:
return acct.split('@')[0]
return None
def htmlBlogView(authorized: bool, \
session,baseDir: str,httpPrefix: str, \
translate: {},domain: str,port: int, \
def htmlBlogView(authorized: bool,
session, baseDir: str, httpPrefix: str,
translate: {}, domain: str, port: int,
noOfItems: int) -> str:
"""Show the blog main page
"""
@ -506,9 +514,9 @@ def htmlBlogView(authorized: bool, \
if noOfBlogAccounts(baseDir) <= 1:
nickname = singleBlogAccountNickname(baseDir)
if nickname:
return htmlBlogPage(authorized,session, \
baseDir,httpPrefix,translate, \
nickname,domain,port, \
return htmlBlogPage(authorized, session,
baseDir, httpPrefix, translate,
nickname, domain, port,
noOfItems, 1)
domainFull = domain
@ -526,8 +534,7 @@ def htmlBlogView(authorized: bool, \
blogsIndex = accountDir + '/tlblogs.index'
if os.path.isfile(blogsIndex):
blogStr += '<p class="blogaccount">'
blogStr+= \
'<a href="'+ \
blogStr += '<a href="' + \
httpPrefix + '://' + domainFull + '/blog/' + \
acct.split('@')[0] + '">' + acct + '</a>'
blogStr += '</p>'
@ -535,11 +542,12 @@ def htmlBlogView(authorized: bool, \
return blogStr + htmlFooter()
return None
def htmlEditBlog(mediaInstance: bool,translate: {}, \
baseDir: str,httpPrefix: str, \
path: str, \
pageNumber: int, \
nickname: str,domain: str, \
def htmlEditBlog(mediaInstance: bool, translate: {},
baseDir: str, httpPrefix: str,
path: str,
pageNumber: int,
nickname: str, domain: str,
postUrl: str) -> str:
"""Edit a blog post after it was created
"""
@ -555,8 +563,7 @@ def htmlEditBlog(mediaInstance: bool,translate: {}, \
iconsDir = getIconsDir(baseDir)
editBlogText= \
'<p class="new-post-text">'+ \
editBlogText = '<p class="new-post-text">' + \
translate['Write your post text below.'] + '</p>'
if os.path.isfile(baseDir + '/accounts/newpost.txt'):
@ -576,7 +583,8 @@ def htmlEditBlog(mediaInstance: bool,translate: {}, \
pathBase = path
editBlogImageSection = ' <div class="container">'
editBlogImageSection+=' <label class="labels">'+translate['Image description']+'</label>'
editBlogImageSection += ' <label class="labels">' + \
translate['Image description'] + '</label>'
editBlogImageSection += ' <input type="text" name="imageDescription">'
editBlogImageSection += ' <input type="file" id="attachpic" name="attachpic"'
editBlogImageSection += ' accept=".png, .jpg, .jpeg, .gif, .webp, .mp4, .webm, .ogv, .mp3, .ogg">'
@ -591,12 +599,10 @@ def htmlEditBlog(mediaInstance: bool,translate: {}, \
dateAndLocation = ''
dateAndLocation = '<div class="container">'
dateAndLocation+= \
'<p><input type="checkbox" class="profilecheckbox" name="schedulePost"><label class="labels">'+ \
dateAndLocation += '<p><input type="checkbox" class="profilecheckbox" name="schedulePost"><label class="labels">' + \
translate['This is a scheduled post.'] + '</label></p>'
dateAndLocation+= \
'<p><img loading="lazy" alt="" title="" class="emojicalendar" src="/'+ \
dateAndLocation += '<p><img loading="lazy" alt="" title="" class="emojicalendar" src="/' + \
iconsDir + '/calendar.png"/>'
dateAndLocation += '<label class="labels">' + translate['Date'] + ': </label>'
dateAndLocation += '<input type="date" name="eventDate">'
@ -610,10 +616,7 @@ def htmlEditBlog(mediaInstance: bool,translate: {}, \
editBlogForm = htmlHeader(cssFilename, editBlogCSS)
mentionsStr=''
editBlogForm+= \
'<form enctype="multipart/form-data" method="POST" accept-charset="UTF-8" action="'+ \
editBlogForm += '<form enctype="multipart/form-data" method="POST" accept-charset="UTF-8" action="' + \
pathBase + '?' + endpoint + '?page=' + str(pageNumber) + '">'
editBlogForm += ' <input type="hidden" name="postUrl" value="' + postUrl + '">'
editBlogForm += ' <input type="hidden" name="pageNumber" value="' + str(pageNumber) + '">'
@ -622,47 +625,38 @@ def htmlEditBlog(mediaInstance: bool,translate: {}, \
editBlogForm += ' <div class="container">'
editBlogForm += ' <div class="dropbtn">'
editBlogForm+= \
' <img loading="lazy" alt="" title="" src="/'+iconsDir+ \
editBlogForm += ' <img loading="lazy" alt="" title="" src="/' + iconsDir + \
'/' + scopeIcon + '"/><b class="scope-desc">' + scopeDescription + '</b>'
editBlogForm += ' </div>'
editBlogForm+= \
' <a href="'+pathBase+ \
editBlogForm += ' <a href="' + pathBase + \
'/searchemoji"><img loading="lazy" ' + \
'class="emojisearch" src="/emoji/1F601.png" title="' + \
translate['Search for emoji'] + '" alt="' + \
translate['Search for emoji'] + '"/></a>'
editBlogForm += ' </div>'
editBlogForm += ' <div class="container"><center>'
editBlogForm+= \
' <a href="'+pathBase+ \
editBlogForm += ' <a href="' + pathBase + \
'/inbox"><button class="cancelbtn">' + \
translate['Cancel'] + '</button></a>'
editBlogForm+= \
' <input type="submit" name="submitPost" value="'+ \
editBlogForm += ' <input type="submit" name="submitPost" value="' + \
translate['Submit'] + '">'
editBlogForm += ' </center></div>'
if mediaInstance:
editBlogForm += editBlogImageSection
editBlogForm+= \
' <label class="labels">'+placeholderSubject+'</label><br>'
editBlogForm += ' <label class="labels">' + placeholderSubject + '</label><br>'
titleStr = ''
if postJsonObject['object'].get('summary'):
titleStr = postJsonObject['object']['summary']
editBlogForm+= \
' <input type="text" name="subject" value="'+titleStr+'">'
editBlogForm += ' <input type="text" name="subject" value="' + titleStr + '">'
editBlogForm += ''
editBlogForm+= \
' <br><label class="labels">'+ \
editBlogForm += ' <br><label class="labels">' + \
placeholderMessage + '</label>'
messageBoxHeight = 800
contentStr= \
postJsonObject['object']['content'].replace('<p>','').replace('</p>','\n')
contentStr = postJsonObject['object']['content'].replace('<p>', '').replace('</p>', '\n')
editBlogForm+= \
' <textarea id="message" name="message" style="height:'+ \
editBlogForm += ' <textarea id="message" name="message" style="height:' + \
str(messageBoxHeight) + 'px">' + contentStr + '</textarea>'
editBlogForm += dateAndLocation
if not mediaInstance:
@ -670,8 +664,8 @@ def htmlEditBlog(mediaInstance: bool,translate: {}, \
editBlogForm += ' </div>'
editBlogForm += '</form>'
editBlogForm= \
editBlogForm.replace('<body>','<body onload="focusOnMessage()">')
editBlogForm = editBlogForm.replace('<body>',
'<body onload="focusOnMessage()">')
editBlogForm += htmlFooter()
return editBlogForm