| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | __filename__ = "webapp_headerbuttons.py" | 
					
						
							|  |  |  | __author__ = "Bob Mottram" | 
					
						
							|  |  |  | __license__ = "AGPL3+" | 
					
						
							| 
									
										
										
										
											2021-01-26 10:07:42 +00:00
										 |  |  | __version__ = "1.2.0" | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | __maintainer__ = "Bob Mottram" | 
					
						
							|  |  |  | __email__ = "bob@freedombone.net" | 
					
						
							|  |  |  | __status__ = "Production" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:49:48 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | import time | 
					
						
							|  |  |  | from datetime import datetime | 
					
						
							|  |  |  | from happening import todaysEventsCheck | 
					
						
							|  |  |  | from happening import thisWeeksEventsCheck | 
					
						
							|  |  |  | from webapp_utils import htmlHighlightLabel | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def headerButtonsTimeline(defaultTimeline: str, | 
					
						
							|  |  |  |                           boxName: str, | 
					
						
							|  |  |  |                           pageNumber: int, | 
					
						
							|  |  |  |                           translate: {}, | 
					
						
							|  |  |  |                           usersPath: str, | 
					
						
							|  |  |  |                           mediaButton: str, | 
					
						
							|  |  |  |                           blogsButton: str, | 
					
						
							| 
									
										
										
										
											2020-11-27 12:42:51 +00:00
										 |  |  |                           featuresButton: str, | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                           newsButton: str, | 
					
						
							|  |  |  |                           inboxButton: str, | 
					
						
							|  |  |  |                           dmButton: str, | 
					
						
							|  |  |  |                           newDM: str, | 
					
						
							|  |  |  |                           repliesButton: str, | 
					
						
							|  |  |  |                           newReply: str, | 
					
						
							|  |  |  |                           minimal: bool, | 
					
						
							|  |  |  |                           sentButton: str, | 
					
						
							|  |  |  |                           sharesButtonStr: str, | 
					
						
							|  |  |  |                           bookmarksButtonStr: str, | 
					
						
							|  |  |  |                           eventsButtonStr: str, | 
					
						
							|  |  |  |                           moderationButtonStr: str, | 
					
						
							|  |  |  |                           newPostButtonStr: str, | 
					
						
							|  |  |  |                           baseDir: str, | 
					
						
							|  |  |  |                           nickname: str, domain: str, | 
					
						
							|  |  |  |                           timelineStartTime, | 
					
						
							|  |  |  |                           newCalendarEvent: bool, | 
					
						
							|  |  |  |                           calendarPath: str, | 
					
						
							|  |  |  |                           calendarImage: str, | 
					
						
							|  |  |  |                           followApprovals: str, | 
					
						
							|  |  |  |                           iconsAsButtons: bool) -> str: | 
					
						
							|  |  |  |     """Returns the header at the top of the timeline, containing
 | 
					
						
							|  |  |  |     buttons for inbox, outbox, search, calendar, etc | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     # start of the button header with inbox, outbox, etc | 
					
						
							| 
									
										
										
										
											2020-12-27 16:42:03 +00:00
										 |  |  |     tlStr = '<div class="containerHeader"><nav>\n' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |     # first button | 
					
						
							|  |  |  |     if defaultTimeline == 'tlmedia': | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '/tlmedia" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             mediaButton + '"><span>' + translate['Media'] + \ | 
					
						
							|  |  |  |             '</span></button></a>' | 
					
						
							|  |  |  |     elif defaultTimeline == 'tlblogs': | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '/tlblogs" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             blogsButton + '"><span>' + translate['Blogs'] + \ | 
					
						
							|  |  |  |             '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-27 11:28:56 +00:00
										 |  |  |     elif defaultTimeline == 'tlfeatures': | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '/tlfeatures" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-27 12:42:51 +00:00
										 |  |  |             featuresButton + '"><span>' + translate['Features'] + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '</span></button></a>' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '/inbox" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             inboxButton + '"><span>' + \ | 
					
						
							|  |  |  |             translate['Inbox'] + '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # if this is a news instance and we are viewing the news timeline | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     featuresHeader = False | 
					
						
							| 
									
										
										
										
											2020-11-27 12:52:01 +00:00
										 |  |  |     if defaultTimeline == 'tlfeatures' and boxName == 'tlfeatures': | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |         featuresHeader = True | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '/dm" tabindex="-1"><button class="' + dmButton + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '"><span>' + htmlHighlightLabel(translate['DM'], newDM) + \ | 
					
						
							|  |  |  |             '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:49:48 +00:00
										 |  |  |         repliesIndexFilename = \ | 
					
						
							|  |  |  |             baseDir + '/accounts/' + \ | 
					
						
							|  |  |  |             nickname + '@' + domain + '/tlreplies.index' | 
					
						
							|  |  |  |         if os.path.isfile(repliesIndexFilename): | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '<a href="' + usersPath + '/tlreplies" tabindex="-1">' + \ | 
					
						
							|  |  |  |                 '<button class="' + repliesButton + '"><span>' + \ | 
					
						
							| 
									
										
										
										
											2020-11-29 09:49:48 +00:00
										 |  |  |                 htmlHighlightLabel(translate['Replies'], newReply) + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # typically the media button | 
					
						
							|  |  |  |     if defaultTimeline != 'tlmedia': | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |         if not minimal and not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '/tlmedia" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 mediaButton + '"><span>' + translate['Media'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         if not minimal: | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '/inbox" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 inboxButton+'"><span>' + translate['Inbox'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-03 12:19:57 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         # typically the blogs button | 
					
						
							|  |  |  |         # but may change if this is a blogging oriented instance | 
					
						
							|  |  |  |         if defaultTimeline != 'tlblogs': | 
					
						
							| 
									
										
										
										
											2020-12-03 12:19:57 +00:00
										 |  |  |             if not minimal: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 titleStr = translate['Blogs'] | 
					
						
							| 
									
										
										
										
											2020-11-27 13:03:17 +00:00
										 |  |  |                 if defaultTimeline == 'tlfeatures': | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     titleStr = translate['Article'] | 
					
						
							|  |  |  |                 tlStr += \ | 
					
						
							|  |  |  |                     '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                     '/tlblogs" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     blogsButton + '"><span>' + titleStr + \ | 
					
						
							|  |  |  |                     '</span></button></a>' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             if not minimal: | 
					
						
							|  |  |  |                 tlStr += \ | 
					
						
							|  |  |  |                     '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                     '/inbox" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     inboxButton + '"><span>' + translate['Inbox'] + \ | 
					
						
							|  |  |  |                     '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # typically the news button | 
					
						
							|  |  |  |     # but may change if this is a news oriented instance | 
					
						
							| 
									
										
										
										
											2020-11-29 09:39:56 +00:00
										 |  |  |     if defaultTimeline == 'tlfeatures': | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |         if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '/inbox" tabindex="-1"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 inboxButton + '"><span>' + translate['Inbox'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # show todays events buttons on the first inbox page | 
					
						
							|  |  |  |     happeningStr = '' | 
					
						
							|  |  |  |     if boxName == 'inbox' and pageNumber == 1: | 
					
						
							|  |  |  |         if todaysEventsCheck(baseDir, nickname, domain): | 
					
						
							|  |  |  |             now = datetime.now() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # happening today button | 
					
						
							|  |  |  |             if not iconsAsButtons: | 
					
						
							|  |  |  |                 happeningStr += \ | 
					
						
							|  |  |  |                     '<a href="' + usersPath + '/calendar?year=' + \ | 
					
						
							|  |  |  |                     str(now.year) + '?month=' + str(now.month) + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                     '?day=' + str(now.day) + '" tabindex="-1">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     '<button class="buttonevent">' + \ | 
					
						
							|  |  |  |                     translate['Happening Today'] + '</button></a>' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 happeningStr += \ | 
					
						
							|  |  |  |                     '<a href="' + usersPath + '/calendar?year=' + \ | 
					
						
							|  |  |  |                     str(now.year) + '?month=' + str(now.month) + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                     '?day=' + str(now.day) + '" tabindex="-1">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     '<button class="button">' + \ | 
					
						
							|  |  |  |                     translate['Happening Today'] + '</button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # happening this week button | 
					
						
							|  |  |  |             if thisWeeksEventsCheck(baseDir, nickname, domain): | 
					
						
							|  |  |  |                 if not iconsAsButtons: | 
					
						
							|  |  |  |                     happeningStr += \ | 
					
						
							|  |  |  |                         '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                         '/calendar" tabindex="-1">' + \ | 
					
						
							|  |  |  |                         '<button class="buttonevent">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                         translate['Happening This Week'] + '</button></a>' | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     happeningStr += \ | 
					
						
							|  |  |  |                         '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                         '/calendar" tabindex="-1">' + \ | 
					
						
							|  |  |  |                         '<button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                         translate['Happening This Week'] + '</button></a>' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             # happening this week button | 
					
						
							|  |  |  |             if thisWeeksEventsCheck(baseDir, nickname, domain): | 
					
						
							|  |  |  |                 if not iconsAsButtons: | 
					
						
							|  |  |  |                     happeningStr += \ | 
					
						
							|  |  |  |                         '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                         '/calendar" tabindex="-1">' + \ | 
					
						
							|  |  |  |                         '<button class="buttonevent">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                         translate['Happening This Week'] + '</button></a>' | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     happeningStr += \ | 
					
						
							|  |  |  |                         '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                         '/calendar" tabindex="-1">' + \ | 
					
						
							|  |  |  |                         '<button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                         translate['Happening This Week'] + '</button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         # button for the outbox | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + usersPath + \ | 
					
						
							|  |  |  |             '/outbox"><button class="' + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             sentButton + '" tabindex="-1">' + \ | 
					
						
							|  |  |  |             '<span>' + translate['Outbox'] + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # add other buttons | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             sharesButtonStr + bookmarksButtonStr + eventsButtonStr + \ | 
					
						
							|  |  |  |             moderationButtonStr + happeningStr + newPostButtonStr | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         if not iconsAsButtons: | 
					
						
							|  |  |  |             # the search icon | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a class="imageAnchor" href="' + usersPath + \ | 
					
						
							|  |  |  |                 '/search"><img loading="lazy" src="/' + \ | 
					
						
							| 
									
										
										
										
											2020-12-09 13:08:26 +00:00
										 |  |  |                 'icons/search.png" title="' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 translate['Search and follow'] + '" alt="| ' + \ | 
					
						
							|  |  |  |                 translate['Search and follow'] + \ | 
					
						
							|  |  |  |                 '" class="timelineicon"/></a>' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             # the search button | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a href="' + usersPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '/search" tabindex="-1"><button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 '<span>' + translate['Search'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # benchmark 5 | 
					
						
							|  |  |  |     timeDiff = int((time.time() - timelineStartTime) * 1000) | 
					
						
							|  |  |  |     if timeDiff > 100: | 
					
						
							|  |  |  |         print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # the calendar button | 
					
						
							| 
									
										
										
										
											2020-12-03 12:19:57 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         calendarAltText = translate['Calendar'] | 
					
						
							|  |  |  |         if newCalendarEvent: | 
					
						
							|  |  |  |             # indicate that the calendar icon is highlighted | 
					
						
							|  |  |  |             calendarAltText = '*' + calendarAltText + '*' | 
					
						
							|  |  |  |         if not iconsAsButtons: | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '      <a class="imageAnchor" href="' + \ | 
					
						
							|  |  |  |                 usersPath + calendarPath + \ | 
					
						
							| 
									
										
										
										
											2020-12-09 13:08:26 +00:00
										 |  |  |                 '"><img loading="lazy" src="/icons/' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 calendarImage + '" title="' + translate['Calendar'] + \ | 
					
						
							|  |  |  |                 '" alt="| ' + calendarAltText + \ | 
					
						
							|  |  |  |                 '" class="timelineicon"/></a>\n' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a href="' + usersPath + calendarPath + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '" tabindex="-1"><button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 '<span>' + translate['Calendar'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         # the show/hide button, for a simpler header appearance | 
					
						
							|  |  |  |         if not iconsAsButtons: | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '      <a class="imageAnchor" href="' + \ | 
					
						
							|  |  |  |                 usersPath + '/minimal' + \ | 
					
						
							| 
									
										
										
										
											2020-12-09 13:08:26 +00:00
										 |  |  |                 '"><img loading="lazy" src="/icons' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 '/showhide.png" title="' + translate['Show/Hide Buttons'] + \ | 
					
						
							|  |  |  |                 '" alt="| ' + translate['Show/Hide Buttons'] + \ | 
					
						
							|  |  |  |                 '" class="timelineicon"/></a>\n' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             tlStr += \ | 
					
						
							|  |  |  |                 '<a href="' + usersPath + '/minimal' + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |                 '" tabindex="-1"><button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 '<span>' + translate['Show/Hide Buttons'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         tlStr += \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '<a href="' + usersPath + '/inbox" tabindex="-1">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '<button class="button">' + \ | 
					
						
							|  |  |  |             '<span>' + translate['User'] + '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # the newswire button to show right column links | 
					
						
							|  |  |  |     if not iconsAsButtons: | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a class="imageAnchorMobile" href="' + \ | 
					
						
							|  |  |  |             usersPath + '/newswiremobile">' + \ | 
					
						
							| 
									
										
										
										
											2020-12-09 13:08:26 +00:00
										 |  |  |             '<img loading="lazy" src="/icons' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '/newswire.png" title="' + translate['News'] + \ | 
					
						
							|  |  |  |             '" alt="| ' + translate['News'] + \ | 
					
						
							|  |  |  |             '" class="timelineicon"/></a>' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         # NOTE: deliberately no \n at end of line | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + \ | 
					
						
							|  |  |  |             usersPath + '/newswiremobile' + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '" tabindex="-1"><button class="buttonMobile">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '<span>' + translate['Newswire'] + \ | 
					
						
							|  |  |  |             '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # the links button to show left column links | 
					
						
							|  |  |  |     if not iconsAsButtons: | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a class="imageAnchorMobile" href="' + \ | 
					
						
							|  |  |  |             usersPath + '/linksmobile">' + \ | 
					
						
							| 
									
										
										
										
											2020-12-09 13:08:26 +00:00
										 |  |  |             '<img loading="lazy" src="/icons' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '/links.png" title="' + translate['Edit Links'] + \ | 
					
						
							|  |  |  |             '" alt="| ' + translate['Edit Links'] + \ | 
					
						
							|  |  |  |             '" class="timelineicon"/></a>' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         # NOTE: deliberately no \n at end of line | 
					
						
							|  |  |  |         tlStr += \ | 
					
						
							|  |  |  |             '<a href="' + \ | 
					
						
							|  |  |  |             usersPath + '/linksmobile' + \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '" tabindex="-1"><button class="buttonMobile">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '<span>' + translate['Links'] + \ | 
					
						
							|  |  |  |             '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         tlStr += \ | 
					
						
							| 
									
										
										
										
											2021-02-05 12:49:53 +00:00
										 |  |  |             '<a href="' + usersPath + '/editprofile" tabindex="-1">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '<button class="buttonDesktop">' + \ | 
					
						
							|  |  |  |             '<span>' + translate['Settings'] + '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:38:35 +00:00
										 |  |  |     if not featuresHeader: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |         tlStr += followApprovals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not iconsAsButtons: | 
					
						
							|  |  |  |         # end of headericons div | 
					
						
							|  |  |  |         tlStr += '</div>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # end of the button header with inbox, outbox, etc | 
					
						
							| 
									
										
										
										
											2020-12-27 16:42:03 +00:00
										 |  |  |     tlStr += '    </nav></div>\n' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |     return tlStr |