diff --git a/webapp_timeline.py b/webapp_timeline.py
index 471c1ede6..b7cda0e3d 100644
--- a/webapp_timeline.py
+++ b/webapp_timeline.py
@@ -93,6 +93,258 @@ def _getHelpForTimeline(baseDir: str, boxName: str) -> str:
return ''
+def _htmlTimelineNewPost(manuallyApproveFollowers: bool,
+ boxName: str, iconsAsButtons: bool,
+ usersPath: str, translate: {}) -> str:
+ """Returns html for the new post button
+ """
+ newPostButtonStr = ''
+ if boxName == 'dm':
+ if not iconsAsButtons:
+ newPostButtonStr += \
+ '
\n'
+ else:
+ newPostButtonStr += \
+ '' + \
+ ''
+ elif (boxName == 'tlblogs' or
+ boxName == 'tlnews' or
+ boxName == 'tlfeatures'):
+ if not iconsAsButtons:
+ newPostButtonStr += \
+ '
\n'
+ else:
+ newPostButtonStr += \
+ '' + \
+ ''
+ elif boxName == 'tlevents':
+ if not iconsAsButtons:
+ newPostButtonStr += \
+ '
\n'
+ else:
+ newPostButtonStr += \
+ '' + \
+ ''
+ elif boxName == 'tlshares':
+ if not iconsAsButtons:
+ newPostButtonStr += \
+ '
\n'
+ else:
+ newPostButtonStr += \
+ '' + \
+ ''
+ else:
+ if not manuallyApproveFollowers:
+ if not iconsAsButtons:
+ newPostButtonStr += \
+ '
\n'
+ else:
+ newPostButtonStr += \
+ '' + \
+ ''
+ else:
+ if not iconsAsButtons:
+ newPostButtonStr += \
+ '
\n'
+ else:
+ newPostButtonStr += \
+ '' + \
+ ''
+ return newPostButtonStr
+
+
+def _htmlTimelineModerationButtons(moderator: bool, boxName: str,
+ nickname: str, moderationActionStr: str,
+ translate: {}) -> str:
+ """Returns html for the moderation screen buttons
+ """
+ tlStr = ''
+ if moderator and boxName == 'moderation':
+ tlStr += \
+ '
\n'
+ return tlStr
+
+
+def _htmlTimelineKeyboard(moderator: bool, textModeBanner: str, usersPath: str,
+ nickname: str, newCalendarEvent: bool,
+ newDM: bool, newReply: bool, newShare: bool,
+ followApprovals: bool,
+ accessKeys: {}, translate: {}) -> str:
+ """Returns html for timeline keyboard navigation
+ """
+ calendarStr = translate['Calendar']
+ if newCalendarEvent:
+ calendarStr = '' + calendarStr + ''
+ dmStr = translate['DM']
+ if newDM:
+ dmStr = '' + dmStr + ''
+ repliesStr = translate['Replies']
+ if newReply:
+ repliesStr = '' + repliesStr + ''
+ sharesStr = translate['Shares']
+ if newShare:
+ sharesStr = '' + sharesStr + ''
+ menuProfile = \
+ htmlHideFromScreenReader('👤') + ' ' + \
+ translate['Switch to profile view']
+ menuInbox = \
+ htmlHideFromScreenReader('📥') + ' ' + translate['Inbox']
+ menuOutbox = \
+ htmlHideFromScreenReader('📤') + ' ' + translate['Sent']
+ menuSearch = \
+ htmlHideFromScreenReader('🔍') + ' ' + \
+ translate['Search and follow']
+ menuCalendar = \
+ htmlHideFromScreenReader('📅') + ' ' + calendarStr
+ menuDM = \
+ htmlHideFromScreenReader('📩') + ' ' + dmStr
+ menuReplies = \
+ htmlHideFromScreenReader('📨') + ' ' + repliesStr
+ menuBookmarks = \
+ htmlHideFromScreenReader('🔖') + ' ' + translate['Bookmarks']
+ menuShares = \
+ htmlHideFromScreenReader('🤝') + ' ' + sharesStr
+ menuBlogs = \
+ htmlHideFromScreenReader('📝') + ' ' + translate['Blogs']
+ menuNewswire = \
+ htmlHideFromScreenReader('📰') + ' ' + translate['Newswire']
+ menuLinks = \
+ htmlHideFromScreenReader('🔗') + ' ' + translate['Links']
+ menuNewPost = \
+ htmlHideFromScreenReader('➕') + ' ' + translate['Create a new post']
+ menuModeration = \
+ htmlHideFromScreenReader('⚡️') + ' ' + translate['Mod']
+ navLinks = {
+ menuProfile: '/users/' + nickname,
+ menuInbox: usersPath + '/inbox#timelineposts',
+ menuSearch: usersPath + '/search',
+ menuNewPost: usersPath + '/newpost',
+ menuCalendar: usersPath + '/calendar',
+ menuDM: usersPath + '/dm#timelineposts',
+ menuReplies: usersPath + '/tlreplies#timelineposts',
+ menuOutbox: usersPath + '/outbox#timelineposts',
+ menuBookmarks: usersPath + '/tlbookmarks#timelineposts',
+ menuShares: usersPath + '/tlshares#timelineposts',
+ menuBlogs: usersPath + '/tlblogs#timelineposts',
+ menuNewswire: usersPath + '/newswiremobile',
+ menuLinks: usersPath + '/linksmobile'
+ }
+ navAccessKeys = {}
+ for variableName, key in accessKeys.items():
+ if not locals().get(variableName):
+ continue
+ navAccessKeys[locals()[variableName]] = key
+ if moderator:
+ navLinks[menuModeration] = usersPath + '/moderation#modtimeline'
+ return htmlKeyboardNavigation(textModeBanner, navLinks, navAccessKeys,
+ None, usersPath, translate, followApprovals)
+
+
def htmlTimeline(cssCache: {}, defaultTimeline: str,
recentPostsCache: {}, maxRecentPosts: int,
translate: {}, pageNumber: int,
@@ -331,167 +583,15 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
newPostButtonStr += '