diff --git a/webinterface.py b/webinterface.py index d03683217..7ae0865bc 100644 --- a/webinterface.py +++ b/webinterface.py @@ -2895,20 +2895,20 @@ def individualFollowAsHtml(translate: {}, '' + translate['Block'] + '\n' if b == 'unfollow': buttonsStr += \ '' + translate['Unfollow'] + '\n' resultStr = '
\n' resultStr += \ '' - resultStr += '

 \n' - resultStr += titleStr + '' + buttonsStr + '

' + followUrl + ';1;' + avatarUrl + '">\n' + resultStr += '

 ' + resultStr += titleStr + '' + buttonsStr + '

\n' resultStr += '
\n' return resultStr @@ -2948,13 +2948,13 @@ def addEmbeddedAudio(translate: {}, content: str) -> str: '/' in w): continue url = w - content += '
\n
\n' return content @@ -2996,14 +2996,14 @@ def addEmbeddedVideo(translate: {}, content: str, continue url = w content += \ - '
\n
\n' return content @@ -3016,12 +3016,12 @@ def addEmbeddedVideoFromSites(translate: {}, content: str, if '<' in url: url = url.split('<')[0] content = \ - content + "
" + "fullscreen\" allowfullscreen>\n\n" return content videoSite = 'https://www.youtube.com' @@ -3032,11 +3032,11 @@ def addEmbeddedVideoFromSites(translate: {}, content: str, if '&' in url: url = url.split('&')[0] content = \ - content + "
" + "allowfullscreen>\n\n" return content invidiousSites = ('https://invidio.us', @@ -3050,11 +3050,11 @@ def addEmbeddedVideoFromSites(translate: {}, content: str, if '&' in url: url = url.split('&')[0] content = \ - content + "
" + "allowfullscreen>\n\n" return content videoSite = 'https://media.ccc.de' @@ -3065,11 +3065,11 @@ def addEmbeddedVideoFromSites(translate: {}, content: str, if not url.endswith('/oembed'): url = url + '/oembed' content = \ - content + "
" + "allowfullscreen>\n\n" return content if '"https://' in content: @@ -3108,13 +3108,13 @@ def addEmbeddedVideoFromSites(translate: {}, content: str, if '"' in url: url = url.split('"')[0].replace('/watch/', '/embed/') content = \ - content + "
" + "fullscreen\" allowfullscreen>\n\n" return content return content @@ -3171,10 +3171,10 @@ def insertQuestion(baseDir: str, translate: {}, content += '
' content += \ '
' + nickname + '/question' + pageNumberStr + '">\n' content += \ '
' + messageId + '">\n
\n' for choice in postJsonObject['object']['oneOf']: if not choice.get('type'): continue @@ -3182,14 +3182,14 @@ def insertQuestion(baseDir: str, translate: {}, continue content += \ ' ' + choice['name'] + '

' + choice['name'] + '"> ' + choice['name'] + '

\n' content += \ '

' - content += '
' + translate['Vote'] + '" class="vote">

\n' + content += '\n\n' else: # show the responses to a question - content += '
' + content += '
\n' # get the maximum number of votes maxVotes = 1 @@ -3223,14 +3223,14 @@ def insertQuestion(baseDir: str, translate: {}, '

' + ' (' + str(votes) + ')" style="width:40%">\n' content += \ '

' + '" value="' + votesPercent + '">

\n' questionCtr += 1 - content += '
' + content += '
\n' return content @@ -3414,7 +3414,7 @@ def getPostAttachmentsAsHtml(postJsonObject: {}, boxName: str, translate: {}, return attachmentStr, galleryStr attachmentCtr = 0 - attachmentStr += '
' + attachmentStr += '
\n' for attach in postJsonObject['object']['attachment']: if not (attach.get('mediaType') and attach.get('url')): continue @@ -3579,7 +3579,7 @@ def getPostAttachmentsAsHtml(postJsonObject: {}, boxName: str, translate: {}, galleryStr += '
\n' galleryStr += '
\n' - attachmentStr += '
\n
\n' attachmentCtr += 1 attachmentStr += '' return attachmentStr, galleryStr @@ -3693,13 +3693,13 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, fullDomain + '/users/' + nickname not in postActor: avatarLink = \ ' ' + ';' + str(pageNumber) + ';' + avatarUrl + messageIdStr + '">\n' avatarLink += \ ' ' + '" src="' + avatarUrl + '" ' + avatarPosition + '/>\n' avatarImageInPost = \ - '
' + avatarLink + '
' + '
' + avatarLink + '
\n' # don't create new html within the bookmarks timeline # it should already have been created for the inbox @@ -3765,7 +3765,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, titleStr += \ '' + displayName + '' + '">' + displayName + '\n' else: if not messageId: # pprint(postJsonObject) @@ -3779,13 +3779,13 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, titleStr += \ '@' + actorNickname + '@' + actorDomain + '' + '">@' + actorNickname + '@' + actorDomain + '\n' # Show a DM icon for DMs in the inbox timeline if showDMicon: titleStr = \ titleStr + ' ' + iconsDir + '/dm.png" class="DMicon"/>\n' replyStr = '' if showIcons: @@ -3809,26 +3809,26 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, replyStr += \ '' + '" title="' + translate['Reply to this post'] + '">\n' else: if isDM(postJsonObject): replyStr += \ '' + '" title="' + translate['Reply to this post'] + '">\n' else: replyStr += \ '' + '" title="' + translate['Reply to this post'] + '">\n' replyStr += \ '' + \
             translate['Reply to this post'] + \
-            ' |' + ' |" src="/' + iconsDir + '/reply.png"/>\n' editStr = '' if fullDomain + '/users/' + nickname in postJsonObject['actor']: @@ -3843,7 +3843,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, '' + \
                     translate['Edit blog post'] + \
-                    ' |' + ' |" src="/' + iconsDir + '/edit.png"/>\n' announceStr = '' if not isModerationPost and showRepeatIcon: @@ -3863,11 +3863,11 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, '=' + postJsonObject['object']['id'] + pageNumberParam + \ '?actor=' + postJsonObject['actor'] + \ '?bm=' + timelinePostBookmark + \ - '?tl=' + boxName + '" title="' + announceTitle + '">' + '?tl=' + boxName + '" title="' + announceTitle + '">\n' announceStr += \ '' + translate['Repeat this post'] + \
-            ' |' + ' |" src="/' + iconsDir + '/' + announceIcon + '"/>\n' likeStr = '' if not isModerationPost: @@ -3893,11 +3893,11 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, '?actor=' + postJsonObject['actor'] + \ '?bm=' + timelinePostBookmark + \ '?tl=' + boxName + '" title="' + \ - likeTitle + likeCountStr + '">' + likeTitle + likeCountStr + '">\n' likeStr += \ '' + likeTitle + \
-            ' |' + ' |" src="/' + iconsDir + '/' + likeIcon + '"/>\n' bookmarkStr = '' if not isModerationPost: @@ -3914,11 +3914,11 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, pageNumberParam + \ '?actor=' + postJsonObject['actor'] + \ '?bm=' + timelinePostBookmark + \ - '?tl=' + boxName + '" title="' + bookmarkTitle + '">' + '?tl=' + boxName + '" title="' + bookmarkTitle + '">\n' bookmarkStr += \ '' + \
             bookmarkTitle + ' |' + '/' + bookmarkIcon + '"/>\n' isMuted = postIsMuted(baseDir, nickname, domain, postJsonObject, messageId) @@ -3931,33 +3931,33 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, deleteStr = \ '' + '" title="' + translate['Delete this post'] + '">\n' deleteStr += \ '' + translate['Delete this post'] + \
                 ' |' + '" src="/' + iconsDir + '/delete.png"/>\n' else: if not isMuted: muteStr = \ '' + '" title="' + translate['Mute this post'] + '">\n' muteStr += \ '' + \
                 translate['Mute this post'] + \
                 ' |' + '" src="/' + iconsDir + '/mute.png"/>\n' else: muteStr = \ '' + translate['Undo mute'] + '">\n' muteStr += \ '' + translate['Undo mute'] + \
                 ' |' + '" src="/' + iconsDir+'/unmute.png"/>\n' replyAvatarImageInPost = '' if showRepeatIcon: @@ -3970,7 +3970,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, translate['announces'] + \ '" alt="' + translate['announces'] + \ '" src="/' + iconsDir + \ - '/repeat_inactive.png" class="announceOrReply"/>' + '/repeat_inactive.png" class="announceOrReply"/>\n' else: announceNickname = \ getNicknameFromActor(attributedTo) @@ -3994,7 +3994,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, iconsDir + '/repeat_inactive.png" ' + \ 'class="announceOrReply"/> ' + \ - announceDisplayName + '' + announceDisplayName + '\n' # show avatar of person replied to announceActor = \ postJsonObject['object']['attributedTo'] @@ -4004,7 +4004,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, if announceAvatarUrl: idx = 'Show options for this person' replyAvatarImageInPost = \ - '
' \ + '
\n' \ '
' + '/>\n
\n' else: titleStr += \ ' @' + \ announceNickname + '@' + \ - announceDomain + '' + announceDomain + '\n' else: titleStr += \ ' @unattributed' + '">@unattributed\n' else: titleStr += \ ' @unattributed' + postJsonObject['object']['id'] + '">@unattributed\n' else: if postJsonObject['object'].get('inReplyTo'): containerClassIcons = 'containericons darker' @@ -4053,7 +4053,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, translate['replying to themselves'] + \ '" alt="' + translate['replying to themselves'] + \ '" src="/' + iconsDir + \ - '/reply.png" class="announceOrReply"/>' + '/reply.png" class="announceOrReply"/>\n' else: if '/statuses/' in postJsonObject['object']['inReplyTo']: inReplyTo = postJsonObject['object']['inReplyTo'] @@ -4087,7 +4087,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, iconsDir + '/reply.png" ' + \ 'class="announceOrReply"/> ' + \ '' + replyDisplayName + '' + '">' + replyDisplayName + '\n' # show avatar of person replied to replyAvatarUrl = \ @@ -4097,13 +4097,13 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, if replyAvatarUrl: replyAvatarImageInPost = \ '
' + '"timeline-avatar-reply">\n' replyAvatarImageInPost += \ '' + messageIdStr + '">\n' replyAvatarImageInPost += \ '
' + avatarPosition + '/>\n\n' else: inReplyTo = \ postJsonObject['object']['inReplyTo'] @@ -4127,7 +4127,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, '@' + \ replyNickname + '@' + \ - replyDomain + '' + replyDomain + '\n' else: titleStr += \ ' ' + \ '@unknown' + '">@unknown\n' else: postDomain = \ postJsonObject['object']['inReplyTo'] @@ -4157,7 +4157,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, iconsDir + '/reply.png" ' + \ 'class="announceOrReply"/> ' + postDomain + '' + '">' + postDomain + '\n' attachmentStr, galleryStr = \ getPostAttachmentsAsHtml(postJsonObject, boxName, translate, @@ -4255,7 +4255,7 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, contentStr = '' if postJsonObject['object'].get('summary'): contentStr += \ - '' + postJsonObject['object']['summary'] + ' ' + '' + postJsonObject['object']['summary'] + '\n ' if isModerationPost: containerClass = 'container report' # get the content warning text @@ -4282,11 +4282,11 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, contentStr = '' else: if not isPatch: - contentStr = '
' + contentStr + '
' + contentStr = '
' + contentStr + '
\n' else: contentStr = \ '
' + contentStr + \
-                '
' + '\n' postHtml = '' if boxName != 'tlmedia': @@ -4294,8 +4294,8 @@ def individualPostAsHtml(recentPostsCache: {}, maxRecentPosts: int, '" class="' + containerClass + '">\n' postHtml += avatarImageInPost postHtml += '

' + titleStr + \ - replyAvatarImageInPost + '

' - postHtml += contentStr + footerStr + replyAvatarImageInPost + '

\n' + postHtml += contentStr + footerStr + '\n' postHtml += '\n' else: postHtml = galleryStr @@ -4497,7 +4497,7 @@ def htmlTimeline(defaultTimeline: str, 'class="timelineicon" alt="' + \ translate['Approve follow requests'] + \ '" title="' + translate['Approve follow requests'] + \ - '" src="/' + iconsDir + '/person.png"/>' + '" src="/' + iconsDir + '/person.png"/>\n' break moderationButtonStr = '' @@ -4507,7 +4507,7 @@ def htmlTimeline(defaultTimeline: str, '/moderation">' + ' \n' sharesButtonStr = '' bookmarksButtonStr = '' @@ -4516,12 +4516,12 @@ def htmlTimeline(defaultTimeline: str, '' + ' \n' bookmarksButtonStr = \ '' + ' \n' tlStr = htmlHeader(cssFilename, profileStyle) @@ -4534,7 +4534,7 @@ def htmlTimeline(defaultTimeline: str, iconsDir + '/newpost.png" title="' + \ translate['Create a new post'] + '" alt="| ' + \ translate['Create a new post'] + \ - '" class="timelineicon"/>' + '" class="timelineicon"/>\n' else: newPostButtonStr = \ '' + '" class="timelineicon"/>\n' else: newPostButtonStr = \ '' + '" class="timelineicon"/>\n' else: newPostButtonStr = \ '' + '" class="timelineicon"/>\n' # This creates a link to the profile page when viewed # in lynx, but should be invisible in a graphical web browser tlStr += \ '' + translate['Switch to profile view'] + '\n' # banner and row of buttons tlStr += \ '' + translate['Switch to profile view'] + '">\n' tlStr += '
' - tlStr += '
' + tlStr += '\n\n' tlStr += '
\n' # first button @@ -4581,30 +4581,30 @@ def htmlTimeline(defaultTimeline: str, ' ' + '\n' elif defaultTimeline == 'tlblogs': tlStr += \ ' ' + '\n' else: tlStr += \ ' ' + translate['Inbox'] + '\n' tlStr += \ ' ' + '\n' tlStr += \ ' ' + '\n' # typically the media button if defaultTimeline != 'tlmedia': @@ -4613,14 +4613,14 @@ def htmlTimeline(defaultTimeline: str, ' ' + '\n' else: if not minimal: tlStr += \ ' ' + '\n' # typically the blogs button if defaultTimeline != 'tlblogs': @@ -4629,20 +4629,20 @@ def htmlTimeline(defaultTimeline: str, ' ' + '\n' else: if not minimal: tlStr += \ ' ' + '\n' tlStr += \ ' ' + '\n' tlStr += \ sharesButtonStr + bookmarksButtonStr + \ moderationButtonStr + newPostButtonStr @@ -4651,7 +4651,7 @@ def htmlTimeline(defaultTimeline: str, '/search">| ' + \
-        translate['Search and follow'] + '' + translate['Search and follow'] + '" class="timelineicon"/>\n' calendarAltText = translate['Calendar'] if newCalendarEvent: @@ -4661,14 +4661,14 @@ def htmlTimeline(defaultTimeline: str, ' | ' + calendarAltText + '' + '" alt="| ' + calendarAltText + '" class="timelineicon"/>\n' tlStr += \ ' | ' + translate['Show/Hide Buttons'] + \
-        '' + '" class="timelineicon"/>\n' tlStr += followApprovals tlStr += '
' @@ -4687,29 +4687,29 @@ def htmlTimeline(defaultTimeline: str, ' ' + translate['Remove'] + '">\n' tlStr += \ ' ' + '" name="submitSuspend" value="' + translate['Suspend'] + '">\n' tlStr += \ ' ' + translate['Unsuspend'] + '">\n' tlStr += \ ' ' + '" name="submitBlock" value="' + translate['Block'] + '">\n' tlStr += \ ' ' + '" name="submitUnblock" value="' + translate['Unblock'] + '">\n' tlStr += \ ' ' - tlStr += '' + '" name="submitInfo" value="' + translate['Info'] + '">\n' + tlStr += '\n\n' if boxName == 'tlshares': maxSharesPerAccount = itemsPerPage @@ -4724,32 +4724,33 @@ def htmlTimeline(defaultTimeline: str, if todaysEventsCheck(baseDir, nickname, domain): now = datetime.now() tlStr += \ - '
' + translate['Happening Today'] + '\n' if thisWeeksEventsCheck(baseDir, nickname, domain): tlStr += \ '' - tlStr += '
' + translate['Happening This Week'] + '\n' + tlStr += '\n' else: if thisWeeksEventsCheck(baseDir, nickname, domain): tlStr += \ - '
' + translate['Happening This Week'] + '\n' + \ + '\n' # page up arrow if pageNumber > 1: tlStr += \ - '
' + \
-            translate['Page up'] + '
' + translate['Page up'] + '">\n\n' # show the posts itemCtr = 0 @@ -4806,12 +4807,12 @@ def htmlTimeline(defaultTimeline: str, # page down arrow if itemCtr > 2: tlStr += \ - '
' + \
-            translate['Page down'] + '
' + translate['Page down'] + '">\n\n' tlStr += htmlFooter() return tlStr @@ -5008,7 +5009,7 @@ def htmlIndividualPost(recentPostsCache: {}, maxRecentPosts: int, postStr += \ '

' + translate['Liked by'] + \ ' @' + \ - likedByHandle + '' + likedByHandle + '\n' domainFull = domain if port: @@ -5016,18 +5017,18 @@ def htmlIndividualPost(recentPostsCache: {}, maxRecentPosts: int, domainFull = domain + ':' + str(port) actor = '/users/' + nickname followStr = '

' + 'accept-charset="UTF-8" action="' + actor + '/searchhandle">\n' followStr += \ - ' ' + ' \n' followStr += \ ' ' + likedByHandle + '">\n' if not isFollowingActor(baseDir, nickname, domainFull, likedBy): followStr += ' ' + 'name="submitSearch">' + translate['Follow'] + '\n' followStr += ' ' - followStr += '
' + 'name="submitBack">' + translate['Go Back'] + '\n' + followStr += ' \n' postStr += followStr + '

\n' postStr += \ @@ -5168,30 +5169,31 @@ def htmlRemoveSharedItem(translate: {}, baseDir: str, with open(cssFilename, 'r') as cssFile: profileStyle = cssFile.read() sharesStr = htmlHeader(cssFilename, profileStyle) - sharesStr += '
' - sharesStr += '
' - sharesStr += '
' + sharesStr += '' + translate['No'] + '\n' + sharesStr += ' \n' + sharesStr += '
\n' + sharesStr += '
\n' + sharesStr += '
\n' sharesStr += htmlFooter() return sharesStr @@ -5253,21 +5255,21 @@ def htmlDeletePost(recentPostsCache: {}, maxRecentPosts: int, postActor = getAltPath(actor, domainFull, callingDomain) deletePostStr += \ - '
' + ' \n' deletePostStr += \ ' ' + str(pageNumber) + '">\n' deletePostStr += \ ' ' + messageId + '">\n' deletePostStr += \ ' ' + translate['Yes'] + '\n' deletePostStr += \ ' ' - deletePostStr += '
' - deletePostStr += '' + translate['No'] + '\n' + deletePostStr += ' \n' + deletePostStr += '\n' deletePostStr += htmlFooter() return deletePostStr @@ -5317,28 +5319,28 @@ def htmlCalendarDeleteConfirm(translate: {}, baseDir: str, postActor = getAltPath(actor, domainFull, callingDomain) deletePostStr += \ - '
' + ' \n' deletePostStr += ' ' + str(year) + '">\n' deletePostStr += ' ' + str(monthNumber) + '">\n' deletePostStr += ' ' + str(dayNumber) + '">\n' deletePostStr += \ - ' ' + ' \n' deletePostStr += \ ' ' + messageId + '">\n' deletePostStr += \ ' ' + translate['Yes'] + '\n' deletePostStr += \ ' ' - deletePostStr += '
' - deletePostStr += '' + translate['No'] + '\n' + deletePostStr += ' \n' + deletePostStr += '\n' deletePostStr += htmlFooter() return deletePostStr @@ -5362,28 +5364,28 @@ def htmlFollowConfirm(translate: {}, baseDir: str, with open(cssFilename, 'r') as cssFile: profileStyle = cssFile.read() followStr = htmlHeader(cssFilename, profileStyle) - followStr += '
' - followStr += '
' - followStr += '
' - followStr += ' ' - followStr += ' ' + followStr += '' + translate['No'] + '\n' + followStr += ' \n' + followStr += '
\n' + followStr += '
\n' + followStr += '
\n' followStr += htmlFooter() return followStr @@ -5407,28 +5409,29 @@ def htmlUnfollowConfirm(translate: {}, baseDir: str, with open(cssFilename, 'r') as cssFile: profileStyle = cssFile.read() followStr = htmlHeader(cssFilename, profileStyle) - followStr += '
' - followStr += '
' - followStr += '
' - followStr += ' ' - followStr += ' ' + followStr += '' + translate['No'] + '\n' + followStr += ' \n' + followStr += '
\n' + followStr += '
\n' + followStr += '
\n' followStr += htmlFooter() return followStr @@ -5509,7 +5512,7 @@ def htmlPersonOptions(translate: {}, baseDir: str, donateStr = \ ' ' + translate['Donate'] + '\n' optionsStr = htmlHeader(cssFilename, profileStyle) optionsStr += '

\n' @@ -5638,28 +5641,28 @@ def htmlUnblockConfirm(translate: {}, baseDir: str, with open(cssFilename, 'r') as cssFile: profileStyle = cssFile.read() blockStr = htmlHeader(cssFilename, profileStyle) - blockStr += '
' - blockStr += '
' - blockStr += '
' - blockStr += ' ' - blockStr += ' ' + blockStr += '
\n' + blockStr += '
\n' + blockStr += '
\n' + blockStr += ' \n' + blockStr += ' \n' blockStr += \ '

' + translate['Stop blocking'] + ' ' + \ - getNicknameFromActor(blockActor) + '@' + blockDomain + ' ?

' + getNicknameFromActor(blockActor) + '@' + blockDomain + ' ?

\n' blockStr += '
' + originPathStr + '/unblockconfirm">\n' blockStr += ' ' + blockActor + '">\n' blockStr += \ ' ' + translate['Yes'] + '\n' blockStr += \ ' ' - blockStr += '
' - blockStr += '
' - blockStr += '
' - blockStr += '
' + translate['No'] + '\n' + blockStr += ' \n' + blockStr += '
\n' + blockStr += '
\n' + blockStr += '
\n' blockStr += htmlFooter() return blockStr @@ -5688,24 +5691,24 @@ def htmlSearchEmojiTextEntry(translate: {}, with open(cssFilename, 'r') as cssFile: profileStyle = cssFile.read() emojiStr = htmlHeader(cssFilename, profileStyle) - emojiStr += '
' - emojiStr += '
' - emojiStr += '
' + emojiStr += '' + translate['Submit'] + '\n' + emojiStr += ' \n' + emojiStr += '
\n' + emojiStr += '
\n' + emojiStr += '
\n' emojiStr += htmlFooter() return emojiStr @@ -5745,7 +5748,7 @@ def htmlCalendarDay(translate: {}, calendarStr += '\n' calendarStr += \ ' ' + '?month=' + str(monthNumber) + '">\n' calendarStr += \ '

' + str(dayNumber) + ' ' + monthName + \ '


' + str(year) + '\n' @@ -5783,10 +5786,10 @@ def htmlCalendarDay(translate: {}, '/eventdelete?id=' + postId + '?year=' + str(year) + \ '?month=' + str(monthNumber) + '?day=' + str(dayNumber) + \ '?time=' + eventTime + \ - '">' + \
+                    '\n' + \
                     translate['Delete this event'] + ' |' + iconsDir + '/delete.png" />\n' if eventTime and eventDescription and eventPlace: calendarStr += \ @@ -6155,32 +6158,33 @@ def htmlSearch(translate: {}, if os.path.isfile(themeSearchBannerFilename): copyfile(themeSearchBannerFilename, searchBannerFilename) if os.path.isfile(searchBannerFilename): - followStr += '
' + \ + followStr += '
\n
\n' + \ '







' + \ - '







\n' + '







\n
\n
\n' # show the search box - followStr += '
' - followStr += '
' - followStr += '
' + followStr += '' + htmlHashTagSwarm(baseDir, actor) + '

\n' + followStr += '
\n' + followStr += '
\n' + followStr += '
\n' followStr += htmlFooter() return followStr @@ -6346,38 +6350,38 @@ def htmlProfileAfterSearch(recentPostsCache: {}, maxRecentPosts: int, avatarDescription = avatarDescription.replace('

', '') if '<' in avatarDescription: avatarDescription = removeHtml(avatarDescription) - profileStr = '
' - profileStr += '
' + profileStr = '
\n' + profileStr += '
\n' if avatarUrl: profileStr += \ ' ' + avatarDescription + '' - profileStr += '

' + displayName + '

' + avatarDescription + '" class="title">\n' + profileStr += '

' + displayName + '

\n' profileStr += '

@' + searchNickname + '@' + \ - searchDomainFull + '

' - profileStr += '

' + profileDescriptionShort + '

' - profileStr += '
' - profileStr += '
' + searchDomainFull + '

\n' + profileStr += '

' + profileDescriptionShort + '

\n' + profileStr += '
\n' + profileStr += '
\n' profileStr += '
\n' profileStr += '
' - profileStr += '
' + backUrl + '/followconfirm">\n' + profileStr += '
\n' profileStr += \ ' ' + personUrl + '">\n' profileStr += \ ' ' + translate['Follow'] + '\n' profileStr += \ ' ' + translate['View'] + '\n' profileStr += \ ' ' - profileStr += '
' - profileStr += ' ' - profileStr += '
' + translate['Go Back'] + '\n' + profileStr += ' \n' + profileStr += ' \n' + profileStr += '\n' iconsDir = getIconsDir(baseDir) i = 0