| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | __filename__ = "webapp_headerbuttons.py" | 
					
						
							|  |  |  | __author__ = "Bob Mottram" | 
					
						
							|  |  |  | __license__ = "AGPL3+" | 
					
						
							| 
									
										
										
										
											2024-12-22 23:37:30 +00:00
										 |  |  | __version__ = "1.6.0" | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | __maintainer__ = "Bob Mottram" | 
					
						
							| 
									
										
										
										
											2021-09-10 16:14:50 +00:00
										 |  |  | __email__ = "bob@libreserver.org" | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | __status__ = "Production" | 
					
						
							| 
									
										
										
										
											2021-06-26 11:27:14 +00:00
										 |  |  | __module_group__ = "Timeline" | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-29 09:49:48 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | import time | 
					
						
							| 
									
										
										
										
											2021-12-26 12:02:29 +00:00
										 |  |  | from utils import acct_dir | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | from datetime import datetime | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  | from datetime import timedelta | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  | from happening import day_events_check | 
					
						
							|  |  |  | from webapp_utils import html_highlight_label | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-31 23:50:29 +00:00
										 |  |  | def header_buttons_timeline(default_timeline: str, | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                             box_name: str, | 
					
						
							|  |  |  |                             page_number: int, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                             translate: {}, | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                             users_path: str, | 
					
						
							| 
									
										
										
										
											2022-05-30 18:33:51 +00:00
										 |  |  |                             media_button: str, | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                             blogs_button: str, | 
					
						
							|  |  |  |                             features_button: str, | 
					
						
							|  |  |  |                             inbox_button: str, | 
					
						
							|  |  |  |                             dm_button: str, | 
					
						
							|  |  |  |                             new_dm: str, | 
					
						
							|  |  |  |                             replies_button: str, | 
					
						
							|  |  |  |                             new_reply: str, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                             minimal: bool, | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                             sent_button: str, | 
					
						
							|  |  |  |                             shares_button_str: str, | 
					
						
							|  |  |  |                             wanted_button_str: str, | 
					
						
							|  |  |  |                             bookmarks_button_str: str, | 
					
						
							|  |  |  |                             events_button_str: str, | 
					
						
							|  |  |  |                             moderation_button_str: str, | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |                             header_icons_str: str, | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                             new_post_button_str: str, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                             base_dir: str, | 
					
						
							|  |  |  |                             nickname: str, domain: str, | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                             timeline_start_time, | 
					
						
							|  |  |  |                             new_calendar_event: bool, | 
					
						
							|  |  |  |                             calendar_path: str, | 
					
						
							|  |  |  |                             calendar_image: str, | 
					
						
							|  |  |  |                             follow_approvals: str, | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |                             icons_as_buttons: bool, | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                             access_keys: {}, | 
					
						
							| 
									
										
										
										
											2024-05-13 15:57:11 +00:00
										 |  |  |                             is_text_browser: str, | 
					
						
							|  |  |  |                             show_announces: bool) -> str: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |     """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 | 
					
						
							| 
									
										
										
										
											2022-05-25 09:43:14 +00:00
										 |  |  |     tl_str = '<div id="containerHeader" class="containerHeader"><nav>\n' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # if this is a news instance and we are viewing the news timeline | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |     features_header = False | 
					
						
							|  |  |  |     if default_timeline == 'tlfeatures' and box_name == 'tlfeatures': | 
					
						
							|  |  |  |         features_header = True | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |     if not is_text_browser: | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |         # first button | 
					
						
							|  |  |  |         if default_timeline == 'tlmedia': | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |             tl_str += \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                 '<a href="' + users_path + '/tlmedia" tabindex="2" ' + \ | 
					
						
							| 
									
										
										
										
											2022-05-14 13:06:23 +00:00
										 |  |  |                 'accesskey="' + access_keys['menuMedia'] + '"' | 
					
						
							|  |  |  |             if box_name == 'tlmedia': | 
					
						
							|  |  |  |                 tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '><button class="' + \ | 
					
						
							| 
									
										
										
										
											2022-05-30 18:33:51 +00:00
										 |  |  |                 media_button + '"><span>' + translate['Media'] + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |         elif default_timeline == 'tlblogs': | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a href="' + users_path + \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                 '/tlblogs" tabindex="2"' | 
					
						
							|  |  |  |             if box_name == 'tlblogs': | 
					
						
							| 
									
										
										
										
											2022-05-14 13:06:23 +00:00
										 |  |  |                 tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '><button class="' + \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                 blogs_button + '" accesskey="' + access_keys['menuBlogs'] + \ | 
					
						
							|  |  |  |                 '"><span>' + translate['Blogs'] + '</span></button></a>' | 
					
						
							|  |  |  |         elif default_timeline == 'tlfeatures': | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a href="' + users_path + \ | 
					
						
							|  |  |  |                 '/tlfeatures" tabindex="2"' | 
					
						
							|  |  |  |             if box_name == 'tlfeatures': | 
					
						
							|  |  |  |                 tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '><button class="' + \ | 
					
						
							|  |  |  |                 features_button + '"><span>' + translate['Features'] + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                 '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |         else: | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a href="' + users_path + \ | 
					
						
							|  |  |  |                 '/inbox" tabindex="2"><button class="' + \ | 
					
						
							|  |  |  |                 inbox_button + '"' | 
					
						
							|  |  |  |             if box_name == 'inbox': | 
					
						
							|  |  |  |                 tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 ' accesskey="' + access_keys['menuInbox'] + '">' + \ | 
					
						
							|  |  |  |                 '<span>' + translate['Inbox'] + '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |         if not features_header: | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a href="' + users_path + '/dm" tabindex="2"' | 
					
						
							|  |  |  |             if box_name == 'dm': | 
					
						
							|  |  |  |                 tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '><button class="' + dm_button + \ | 
					
						
							|  |  |  |                 '" accesskey="' + access_keys['menuDM'] + '">' + \ | 
					
						
							|  |  |  |                 '<span>' + html_highlight_label(translate['DM'], new_dm) + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             replies_index_filename = \ | 
					
						
							|  |  |  |                 acct_dir(base_dir, nickname, domain) + '/tlreplies.index' | 
					
						
							|  |  |  |             if os.path.isfile(replies_index_filename): | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 tl_str += \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                     '<a href="' + users_path + '/tlreplies" tabindex="2"' | 
					
						
							|  |  |  |                 if box_name == 'tlreplies': | 
					
						
							|  |  |  |                     tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '><button class="' + replies_button + '" ' + \ | 
					
						
							|  |  |  |                     'accesskey="' + access_keys['menuReplies'] + '"><span>' + \ | 
					
						
							|  |  |  |                     html_highlight_label(translate['Replies'], new_reply) + \ | 
					
						
							|  |  |  |                     '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # typically the media button | 
					
						
							|  |  |  |         if default_timeline != 'tlmedia': | 
					
						
							|  |  |  |             if not minimal and not features_header: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + '/tlmedia" tabindex="2" ' + \ | 
					
						
							|  |  |  |                     'accesskey="' + access_keys['menuMedia'] + '"' | 
					
						
							|  |  |  |                 if box_name == 'tlmedia': | 
					
						
							| 
									
										
										
										
											2022-05-14 13:06:23 +00:00
										 |  |  |                     tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                     '><button class="' + \ | 
					
						
							|  |  |  |                     media_button + '"><span>' + translate['Media'] + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     '</span></button></a>' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             if not minimal: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '/inbox" tabindex="2"' | 
					
						
							| 
									
										
										
										
											2022-05-14 13:06:23 +00:00
										 |  |  |                 if box_name == 'inbox': | 
					
						
							|  |  |  |                     tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '><button class="' + \ | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                     inbox_button + '"><span>' + translate['Inbox'] + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |         if not features_header: | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |             # typically the blogs button | 
					
						
							|  |  |  |             # but may change if this is a blogging oriented instance | 
					
						
							|  |  |  |             if default_timeline != 'tlblogs': | 
					
						
							|  |  |  |                 if not minimal: | 
					
						
							|  |  |  |                     title_str = translate['Blogs'] | 
					
						
							|  |  |  |                     if default_timeline == 'tlfeatures': | 
					
						
							|  |  |  |                         title_str = translate['Article'] | 
					
						
							|  |  |  |                     tl_str += \ | 
					
						
							|  |  |  |                         '<a href="' + users_path + \ | 
					
						
							|  |  |  |                         '/tlblogs" tabindex="2"' | 
					
						
							|  |  |  |                     if box_name == 'tlblogs': | 
					
						
							|  |  |  |                         tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |                     tl_str += \ | 
					
						
							|  |  |  |                         '><button class="' + blogs_button + '" accesskey="' + \ | 
					
						
							|  |  |  |                         access_keys['menuBlogs'] + '"><span>' + title_str + \ | 
					
						
							|  |  |  |                         '</span></button></a>' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 if not minimal: | 
					
						
							|  |  |  |                     tl_str += \ | 
					
						
							|  |  |  |                         '<a href="' + users_path + \ | 
					
						
							|  |  |  |                         '/inbox" tabindex="2"' | 
					
						
							|  |  |  |                     if box_name == 'inbox': | 
					
						
							|  |  |  |                         tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |                     tl_str += \ | 
					
						
							|  |  |  |                         '><button class="' + \ | 
					
						
							|  |  |  |                         inbox_button + '"><span>' + translate['Inbox'] + \ | 
					
						
							|  |  |  |                         '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # typically the news button | 
					
						
							|  |  |  |         # but may change if this is a news oriented instance | 
					
						
							|  |  |  |         if default_timeline == 'tlfeatures': | 
					
						
							|  |  |  |             if not features_header: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + \ | 
					
						
							|  |  |  |                     '/inbox" tabindex="2"' | 
					
						
							|  |  |  |                 if box_name == 'inbox': | 
					
						
							|  |  |  |                     tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '><button class="' + \ | 
					
						
							|  |  |  |                     inbox_button + '" accesskey="' + \ | 
					
						
							|  |  |  |                     access_keys['menuInbox'] + '"><span>' + \ | 
					
						
							|  |  |  |                     translate['Inbox'] + '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # show todays events buttons on the first inbox page | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |     happening_str = '' | 
					
						
							|  |  |  |     if box_name == 'inbox' and page_number == 1: | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |         now = datetime.now() | 
					
						
							|  |  |  |         tomorrow = datetime.now() + timedelta(1) | 
					
						
							|  |  |  |         twodays = datetime.now() + timedelta(2) | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         if day_events_check(base_dir, nickname, domain, now): | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             # happening today button | 
					
						
							| 
									
										
										
										
											2021-12-25 19:19:14 +00:00
										 |  |  |             if not icons_as_buttons: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 happening_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + '/calendar?year=' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     str(now.year) + '?month=' + str(now.month) + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '?day=' + str(now.day) + '" tabindex="2">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     '<button class="buttonevent">' + \ | 
					
						
							|  |  |  |                     translate['Happening Today'] + '</button></a>' | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 happening_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + '/calendar?year=' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     str(now.year) + '?month=' + str(now.month) + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '?day=' + str(now.day) + '" tabindex="2">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |                     '<button class="button">' + \ | 
					
						
							|  |  |  |                     translate['Happening Today'] + '</button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         elif day_events_check(base_dir, nickname, domain, tomorrow): | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |             # happening tomorrow button | 
					
						
							| 
									
										
										
										
											2021-12-25 19:19:14 +00:00
										 |  |  |             if not icons_as_buttons: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 happening_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + '/calendar?year=' + \ | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |                     str(tomorrow.year) + '?month=' + str(tomorrow.month) + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '?day=' + str(tomorrow.day) + '" tabindex="2">' + \ | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |                     '<button class="buttonevent">' + \ | 
					
						
							|  |  |  |                     translate['Happening Tomorrow'] + '</button></a>' | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 happening_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + '/calendar?year=' + \ | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |                     str(tomorrow.year) + '?month=' + str(tomorrow.month) + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '?day=' + str(tomorrow.day) + '" tabindex="2">' + \ | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |                     '<button class="button">' + \ | 
					
						
							|  |  |  |                     translate['Happening Tomorrow'] + '</button></a>' | 
					
						
							| 
									
										
										
										
											2021-12-29 21:55:09 +00:00
										 |  |  |         elif day_events_check(base_dir, nickname, domain, twodays): | 
					
						
							| 
									
										
										
										
											2021-12-25 19:19:14 +00:00
										 |  |  |             if not icons_as_buttons: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 happening_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '/calendar" tabindex="2">' + \ | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |                     '<button class="buttonevent">' + \ | 
					
						
							|  |  |  |                     translate['Happening This Week'] + '</button></a>' | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |                 happening_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |                     '/calendar" tabindex="2">' + \ | 
					
						
							| 
									
										
										
										
											2021-05-31 11:57:36 +00:00
										 |  |  |                     '<button class="button">' + \ | 
					
						
							|  |  |  |                     translate['Happening This Week'] + '</button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |     if not is_text_browser: | 
					
						
							|  |  |  |         if not features_header: | 
					
						
							|  |  |  |             # button for the outbox | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |             tl_str += \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                 '<a href="' + users_path + '/outbox"' | 
					
						
							|  |  |  |             if box_name == 'outbox': | 
					
						
							|  |  |  |                 tl_str += ' aria-current="location"' | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |             tl_str += \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                 '><button class="' + \ | 
					
						
							|  |  |  |                 sent_button + '" tabindex="2" accesskey="' + \ | 
					
						
							|  |  |  |                 access_keys['menuOutbox'] + '">' + \ | 
					
						
							|  |  |  |                 '<span>' + translate['Sent'] + '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # add other buttons | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 shares_button_str + wanted_button_str + \ | 
					
						
							|  |  |  |                 bookmarks_button_str + events_button_str + \ | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |                 moderation_button_str + happening_str | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |     else: | 
					
						
							|  |  |  |         tl_str += happening_str | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |     # start of headericons div | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |     if not is_text_browser: | 
					
						
							|  |  |  |         if not features_header: | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |             tl_str += header_icons_str | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |     # 1. follow request icon | 
					
						
							|  |  |  |     if not features_header: | 
					
						
							|  |  |  |         tl_str += follow_approvals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # 2. edit profile on features header | 
					
						
							|  |  |  |     if features_header: | 
					
						
							|  |  |  |         tl_str += \ | 
					
						
							|  |  |  |             '<a href="' + users_path + '/editprofile" tabindex="2">' + \ | 
					
						
							|  |  |  |             '<button class="buttonDesktop">' + \ | 
					
						
							|  |  |  |             '<span>' + translate['Settings'] + '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # 3. the newswire and links button to show right column links | 
					
						
							|  |  |  |     if not is_text_browser: | 
					
						
							|  |  |  |         # the links button to show left column links | 
					
						
							|  |  |  |         if not icons_as_buttons: | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a class="imageAnchorMobile" href="' + \ | 
					
						
							|  |  |  |                 users_path + '/linksmobile">' + \ | 
					
						
							|  |  |  |                 '<img loading="lazy" decoding="async" src="/icons' + \ | 
					
						
							|  |  |  |                 '/links.png" title="' + translate['Edit Links'] + \ | 
					
						
							|  |  |  |                 '" alt="| ' + translate['Edit Links'] + \ | 
					
						
							|  |  |  |                 '" class="timelineicon"/></a>' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             # NOTE: deliberately no \n at end of line | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a href="' + \ | 
					
						
							|  |  |  |                 users_path + '/linksmobile' + \ | 
					
						
							|  |  |  |                 '" tabindex="2"><button class="buttonMobile">' + \ | 
					
						
							|  |  |  |                 '<span>' + translate['Links'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # the newswire button to show left column links | 
					
						
							|  |  |  |         if not icons_as_buttons: | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a class="imageAnchorMobile" href="' + \ | 
					
						
							|  |  |  |                 users_path + '/newswiremobile">' + \ | 
					
						
							|  |  |  |                 '<img loading="lazy" decoding="async" src="/icons' + \ | 
					
						
							|  |  |  |                 '/newswire.png" title="' + translate['News'] + \ | 
					
						
							|  |  |  |                 '" alt="| ' + translate['News'] + \ | 
					
						
							|  |  |  |                 '" class="timelineicon"/></a>' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             # NOTE: deliberately no \n at end of line | 
					
						
							|  |  |  |             tl_str += \ | 
					
						
							|  |  |  |                 '<a href="' + \ | 
					
						
							|  |  |  |                 users_path + '/newswiremobile' + \ | 
					
						
							|  |  |  |                 '" tabindex="2"><button class="buttonMobile">' + \ | 
					
						
							|  |  |  |                 '<span>' + translate['Newswire'] + \ | 
					
						
							|  |  |  |                 '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |     if not is_text_browser: | 
					
						
							|  |  |  |         if not features_header: | 
					
						
							| 
									
										
										
										
											2024-05-20 19:10:35 +00:00
										 |  |  |             # 4. the show/hide button, for a simpler header appearance | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |             if not icons_as_buttons: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '      <a class="imageAnchor" href="' + \ | 
					
						
							| 
									
										
										
										
											2024-05-20 18:55:37 +00:00
										 |  |  |                     users_path + '/minimal" tabindex="3">' + \ | 
					
						
							|  |  |  |                     '<img loading="lazy" decoding="async" src="/icons' + \ | 
					
						
							|  |  |  |                     '/showhide.png" title="' + \ | 
					
						
							|  |  |  |                     translate['Show/Hide Buttons'] + \ | 
					
						
							|  |  |  |                     '" alt="| ' + translate['Show/Hide Buttons'] + \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                     '" class="timelineicon"/></a>\n' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							| 
									
										
										
										
											2024-05-20 18:55:37 +00:00
										 |  |  |                     '<a href="' + users_path + '/minimal' + \ | 
					
						
							|  |  |  |                     '" tabindex="3"><button class="button">' + \ | 
					
						
							|  |  |  |                     '<span>' + translate['Show/Hide Buttons'] + \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |                     '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 19:10:35 +00:00
										 |  |  |             # 5. the hide announces button | 
					
						
							| 
									
										
										
										
											2024-05-13 15:57:11 +00:00
										 |  |  |             if show_announces: | 
					
						
							| 
									
										
										
										
											2024-05-13 16:16:48 +00:00
										 |  |  |                 hide_announces_icon = 'repeat_hide.png' | 
					
						
							| 
									
										
										
										
											2024-05-13 15:57:11 +00:00
										 |  |  |                 hide_announces_text = translate['Hide Announces'] | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2024-05-13 16:16:48 +00:00
										 |  |  |                 hide_announces_icon = 'repeat_show.png' | 
					
						
							| 
									
										
										
										
											2024-05-13 15:57:11 +00:00
										 |  |  |                 hide_announces_text = translate['Show Announces'] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-13 14:37:02 +00:00
										 |  |  |             if not icons_as_buttons: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '      <a class="imageAnchor" href="' + \ | 
					
						
							|  |  |  |                     users_path + '/hideannounces" tabindex="3">' + \ | 
					
						
							|  |  |  |                     '<img loading="lazy" decoding="async" src="/icons' + \ | 
					
						
							| 
									
										
										
										
											2024-05-13 15:57:11 +00:00
										 |  |  |                     '/' + hide_announces_icon + '" title="' + \ | 
					
						
							|  |  |  |                     hide_announces_text + \ | 
					
						
							| 
									
										
										
										
											2024-05-13 14:37:02 +00:00
										 |  |  |                     '" alt="| ' + translate['Hide Announces'] + \ | 
					
						
							|  |  |  |                     '" class="timelineicon"/></a>\n' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + '/hideannounces' + \ | 
					
						
							|  |  |  |                     '" tabindex="3"><button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2024-05-13 15:57:11 +00:00
										 |  |  |                     '<span>' + hide_announces_text + \ | 
					
						
							| 
									
										
										
										
											2024-05-13 14:37:02 +00:00
										 |  |  |                     '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 19:10:35 +00:00
										 |  |  |         # 6. calendar button | 
					
						
							| 
									
										
										
										
											2024-05-20 18:55:37 +00:00
										 |  |  |         if not features_header: | 
					
						
							|  |  |  |             calendar_alt_text = translate['Calendar'] | 
					
						
							|  |  |  |             if new_calendar_event: | 
					
						
							|  |  |  |                 # indicate that the calendar icon is highlighted | 
					
						
							|  |  |  |                 calendar_alt_text = '*' + calendar_alt_text + '*' | 
					
						
							| 
									
										
										
										
											2022-07-13 13:16:54 +00:00
										 |  |  |             if not icons_as_buttons: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '      <a class="imageAnchor" href="' + \ | 
					
						
							| 
									
										
										
										
											2024-05-20 18:55:37 +00:00
										 |  |  |                     users_path + calendar_path + \ | 
					
						
							|  |  |  |                     '" accesskey="' + access_keys['menuCalendar'] + \ | 
					
						
							|  |  |  |                     '" tabindex="3">' + \ | 
					
						
							|  |  |  |                     '<img loading="lazy" decoding="async" src="/icons/' + \ | 
					
						
							|  |  |  |                     calendar_image + '" title="' + translate['Calendar'] + \ | 
					
						
							|  |  |  |                     '" alt="| ' + calendar_alt_text + \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:16:54 +00:00
										 |  |  |                     '" class="timelineicon"/></a>\n' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							| 
									
										
										
										
											2024-05-20 18:55:37 +00:00
										 |  |  |                     '<a href="' + users_path + calendar_path + \ | 
					
						
							|  |  |  |                     '" tabindex="3"><button class="button" accesskey="' + \ | 
					
						
							|  |  |  |                     access_keys['menuCalendar'] + '">' + \ | 
					
						
							|  |  |  |                     '<span>' + translate['Calendar'] + \ | 
					
						
							| 
									
										
										
										
											2022-07-13 13:16:54 +00:00
										 |  |  |                     '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |     if features_header: | 
					
						
							|  |  |  |         tl_str += \ | 
					
						
							| 
									
										
										
										
											2022-05-25 10:54:35 +00:00
										 |  |  |             '<a href="' + users_path + '/inbox" tabindex="2"' | 
					
						
							| 
									
										
										
										
											2022-05-14 13:06:23 +00:00
										 |  |  |         if box_name == 'inbox': | 
					
						
							|  |  |  |             tl_str += ' aria-current="location"' | 
					
						
							|  |  |  |         tl_str += \ | 
					
						
							|  |  |  |             '><button class="button">' + \ | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  |             '<span>' + translate['User'] + '</span></button></a>' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 19:10:35 +00:00
										 |  |  |     # 7. search button | 
					
						
							| 
									
										
										
										
											2022-07-13 13:13:44 +00:00
										 |  |  |     if not is_text_browser: | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |         if not features_header: | 
					
						
							|  |  |  |             if not icons_as_buttons: | 
					
						
							|  |  |  |                 # the search icon | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '<a class="imageAnchor" href="' + users_path + \ | 
					
						
							|  |  |  |                     '/search" accesskey="' + access_keys['menuSearch'] + \ | 
					
						
							|  |  |  |                     '" tabindex="3">' + \ | 
					
						
							|  |  |  |                     '<img loading="lazy" decoding="async" src="/' + \ | 
					
						
							|  |  |  |                     'icons/search.png" title="' + \ | 
					
						
							|  |  |  |                     translate['Search and follow'] + '" alt="| ' + \ | 
					
						
							|  |  |  |                     translate['Search and follow'] + \ | 
					
						
							|  |  |  |                     '" class="timelineicon"/></a>' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 # the search button | 
					
						
							|  |  |  |                 tl_str += \ | 
					
						
							|  |  |  |                     '<a href="' + users_path + \ | 
					
						
							|  |  |  |                     '/search" tabindex="3">' + \ | 
					
						
							|  |  |  |                     '<button class="button" ' + \ | 
					
						
							|  |  |  |                     'accesskey="' + access_keys['menuSearch'] + '>' + \ | 
					
						
							|  |  |  |                     '<span>' + translate['Search'] + \ | 
					
						
							|  |  |  |                     '</span></button></a>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 19:10:35 +00:00
										 |  |  |     # 8. new post | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |     if not is_text_browser: | 
					
						
							|  |  |  |         if not features_header: | 
					
						
							|  |  |  |             tl_str += new_post_button_str | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |     # benchmark 5 | 
					
						
							|  |  |  |     time_diff = int((time.time() - timeline_start_time) * 1000) | 
					
						
							|  |  |  |     if time_diff > 100: | 
					
						
							|  |  |  |         print('TIMELINE TIMING ' + box_name + ' 5 = ' + str(time_diff)) | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 18:47:56 +00:00
										 |  |  |     # end of headericons div | 
					
						
							| 
									
										
										
										
											2021-12-25 19:19:14 +00:00
										 |  |  |     if not icons_as_buttons: | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |         tl_str += '</div>' | 
					
						
							| 
									
										
										
										
											2020-11-17 20:40:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # end of the button header with inbox, outbox, etc | 
					
						
							| 
									
										
										
										
											2022-01-03 23:24:44 +00:00
										 |  |  |     tl_str += '    </nav></div>\n' | 
					
						
							|  |  |  |     return tl_str |